[SCM] easytag/master: Imported Upstream version 2.3.1

amigadave-guest at users.alioth.debian.org amigadave-guest at users.alioth.debian.org
Fri Nov 14 13:56:16 UTC 2014


The following commit has been merged in the master branch:
commit d24e6f58e9b1e8e1365159ed9bbfe71f8042b7ce
Author: David King <amigadave at amigadave.com>
Date:   Wed Nov 12 22:03:40 2014 +0000

    Imported Upstream version 2.3.1

diff --git a/COPYING.GPL3 b/COPYING.GPL3
new file mode 100644
index 0000000..94a9ed0
--- /dev/null
+++ b/COPYING.GPL3
@@ -0,0 +1,674 @@
+                    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
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+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
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  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
+state the exclusion of warranty; and each file should have at least
+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>
+
+    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
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    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'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+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>.
diff --git a/ChangeLog b/ChangeLog
index 8daaf10..a8209c3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,13 +1,62 @@
-commit 21704fcd1996c87fc0a140f07c18db6dabf3a146
+commit 35b184ccd8ab00cf7e4c2b85f0b144c2c6a3aa22
 Author: David King <amigadave at amigadave.com>
-Date:   Sat Sep 27 02:00:02 2014 +0100
+Date:   Fri Oct 31 19:45:42 2014 +0000
 
-    Update NEWS for 2.2.4 release
+    Update NEWS for 2.3.1 release
 
 M	NEWS
+M	README
+M	THANKS
+
+commit 4aeb12504d0f7e569b5e275d1fd5276411d19632
+Author: David King <amigadave at amigadave.com>
+Date:	Fri Oct 31 18:12:37 2014 +0000
+
+    Use old-style BMPs for Windows installer images
+
+    NSIS expects the images in 24-bit format (no alpha channel),
+    and without
+    colourspace information.
+
+M	data/nsis/easytag-header.bmp
+M	data/nsis/easytag-sidebar.bmp
+
+commit 222dc2bf02ea302805d0cbb980cafe22778418e7
+Author: David King <amigadave at amigadave.com>
+Date:	Fri Oct 31 17:09:21 2014 +0000
+
+    Remove some obsolete checks from configure.ac
+
+M	configure.ac
+
+commit de1f4d9e5201d3e5511c35b7d71cba9709aa88a5
+Author: David King <amigadave at amigadave.com>
+Date:	Fri Oct 31 17:03:21 2014 +0000
+
+    Warn if APPDATA_XML macro is not available
+
+    Rather than getting an error at make time, output an error message
+    during configure if the macro is not found.
+
 M	configure.ac
 
-commit d849d3692f3dc03ce90486d7c1976494dcc6fc47
+commit 2f34a818098247850a9db6f89be42cbfa012d1dc
+Author: David King <amigadave at amigadave.com>
+Date:	Thu Oct 30 23:38:36 2014 +0000
+
+    Use GVolumeMonitor to discover Windows drives
+
+M	src/browser.c
+
+commit 0d8c3be16f583d359091a750d5ab3c3d0f877ff3
+Author: David King <amigadave at amigadave.com>
+Date:	Thu Oct 30 23:38:16 2014 +0000
+
+    Include GSettings schema in Windows installer
+
+M	easytag-win32-installer.nsi.in
+
+commit ef1e00bbb6dae29aad0d5fcd0ac16d83a3d29417
 Author: David King <amigadave at amigadave.com>
 Date:	Sat Sep 27 01:28:40 2014 +0100
 
@@ -18,148 +67,2832 @@ Date:	Sat Sep 27 01:28:40 2014 +0100
 M	SOURCES
 M	easytag-win32-installer.nsi.in
 
-commit 7ab8317800d8fbe597bef480389c0f2811ec3554
+commit f8250eceeb25a63dcfa44e9ca0482c1dc81448c3
 Author: David King <amigadave at amigadave.com>
-Date:	Fri Sep 26 08:38:28 2014 +0100
+Date:	Thu Oct 30 20:28:42 2014 +0000
 
-    Fix memory leak in id3lib buggy check
+    Fix a MinGW build failure in EtBrowser
 
-    Free the result string.
+M	src/browser.c
 
-M	src/id3_tag.c
+commit 116290a2508a732228546ced88dc77c7d43c81f6
+Author: David King <amigadave at amigadave.com>
+Date:	Thu Oct 30 20:27:14 2014 +0000
+
+    Check for gdk-pixbuf-pixdata in configure
+
+    The gdk-pixbuf-pixdata tool is required for glib-compile-resources
+    when
+    using the to-pixdata option.
+
+M	configure.ac
 
-commit b86a305e841d4ee1dd5bc61d15ac5dcdb88e192c
+commit 115c7ef98e9a70a012ec613b1e4cba5de08dac7c
 Author: David King <amigadave at amigadave.com>
-Date:	Thu Sep 25 18:18:18 2014 +0100
+Date:	Thu Oct 30 20:26:17 2014 +0000
 
-    Handle renaming on case-insensitive filesystems
+    Do not show the PID of the application at startup
 
-    A rename will fail on a filesystem that is case-insensitive, if the
-    filenames only differ by case. Work around this by moving to
-    a temporary
-    file first, in the case that a rename fails because the target exists.
+    Any warning message from g_log() will show the PID, and it is
+    otherwise
+    not that useful.
 
-    https://bugzilla.gnome.org/show_bug.cgi?id=737302
+M	src/application.c
+
+commit dbf902108670899f4fbda452976eb4606676041e
+Author: David King <amigadave at amigadave.com>
+Date:	Wed Oct 29 23:18:50 2014 +0000
+
+    Fix CDDB search button tooltip text
+
+M	data/cddb_dialog.ui
+
+commit 19613ea9e4ef4b333e9c00011f57e7d8b7eb97c5
+Author: David King <amigadave at amigadave.com>
+Date:	Wed Oct 29 21:03:40 2014 +0000
+
+    Fix settings key name for default path
+
+M	src/preferences_dialog.c
+
+commit a9e53282ecc64c02f84edc6bacc2b578719244c9
+Author: David King <amigadave at amigadave.com>
+Date:	Wed Oct 29 20:59:46 2014 +0000
+
+    Remove outdated configuration file handling
+
+M	src/setting.c
+
+commit ba97e21c7138947b352b3174a2cecbca7f5c172b
+Author: David King <amigadave at amigadave.com>
+Date:	Wed Oct 29 19:08:54 2014 +0000
+
+    Move log area visible logic to EtApplicationWindow
 
+M	src/application_window.c
+M	src/log.c
+
+commit 526c45a788e6a977938fd0d92501c2314fd27b8a
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Oct 25 22:21:03 2014 +0100
+
+    Remove unused log area show/hide functions
+
+M	src/application_window.c
+M	src/application_window.h
+
+commit 5f44956e440f3bcf0627015d92ee241578d21040
+Author: David King <amigadave at amigadave.com>
+Date:	Wed Oct 29 16:36:27 2014 +0000
+
+    Use GFile for tag reading functions
+
+M	src/et_core.c
+M	src/tags/ape_tag.c
+M	src/tags/ape_tag.h
+M	src/tags/flac_tag.c
+M	src/tags/flac_tag.h
+M	src/tags/id3_tag.c
+M	src/tags/id3_tag.h
+M	src/tags/id3v24_tag.c
+M	src/tags/mp4_tag.cc
+M	src/tags/mp4_tag.h
+M	src/tags/ogg_tag.c
+M	src/tags/ogg_tag.h
+M	src/tags/wavpack_tag.c
+M	src/tags/wavpack_tag.h
+
+commit aca762a3063b33300ceb783d5a97f79a92307149
+Author: David King <amigadave at amigadave.com>
+Date:	Mon Oct 27 23:57:19 2014 +0000
+
+    Use GFile in header reading functions
+
+M	src/et_core.c
+M	src/tags/flac_header.c
+M	src/tags/flac_header.h
+M	src/tags/monkeyaudio_header.c
+M	src/tags/monkeyaudio_header.h
+M	src/tags/mp4_header.cc
+M	src/tags/mp4_header.h
+M	src/tags/mp4_tag.cc
+M	src/tags/mpeg_header.c
+M	src/tags/mpeg_header.h
+M	src/tags/musepack_header.c
+M	src/tags/musepack_header.h
+M	src/tags/ogg_header.c
+M	src/tags/ogg_header.h
+M	src/tags/opus_header.c
+M	src/tags/wavpack_header.c
+M	src/tags/wavpack_header.h
+
+commit 748723d36283ef2c0920b1277095157996caa166
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Oct 25 23:46:58 2014 +0100
+
+    Remove unused et_grid_attach_full()
+
+M	src/misc.c
+M	src/misc.h
+
+commit 73526459d5c794c2c5c11addb8486cf14a90489d
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Oct 25 22:20:04 2014 +0100
+
+    Use const in more places
+
+M	src/application_window.c
+M	src/application_window.h
+M	src/browser.c
+M	src/browser.h
 M	src/easytag.c
+M	src/easytag.h
+M	src/picture.c
+M	src/picture.h
+M	src/playlist_dialog.c
+M	src/scan_dialog.c
+M	src/scan_dialog.h
+
+commit 5db73b5bb22002864111ae3070ed86489ddc7039
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Oct 25 20:58:21 2014 +0100
+
+    Avoid GSettings handler unused parameter warnings
+
+    Use the settings and key parameters to the GSettings changed handler
+    where possible.
+
+M	src/browser.c
+M	src/preferences_dialog.c
+M	src/scan_dialog.c
+
+commit 357e5d2296d49eea058e635a6320ffa10d89e4a2
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Oct 25 20:51:28 2014 +0100
+
+    Remove unused filename parameters in header code
 
-commit d9c2b6096c863063b4fbdfde4f3b3b86ccfab6c6
+    Avoid some -Wextra warnings about unused parameters.
+
+M	src/et_core.c
+M	src/tags/flac_header.c
+M	src/tags/flac_header.h
+M	src/tags/monkeyaudio_header.c
+M	src/tags/monkeyaudio_header.h
+M	src/tags/mp4_header.cc
+M	src/tags/mp4_header.h
+M	src/tags/mpeg_header.c
+M	src/tags/mpeg_header.h
+M	src/tags/musepack_header.c
+M	src/tags/musepack_header.h
+M	src/tags/ogg_header.c
+M	src/tags/ogg_header.h
+M	src/tags/opus_header.c
+M	src/tags/opus_header.h
+M	src/tags/wavpack_header.c
+M	src/tags/wavpack_header.h
+
+commit 332d161c9200bdc5b80bee2c6be3d038d3180f12
 Author: Piotr DrÄ…g <piotrdrag at gmail.com>
-Date:	Sun Sep 7 01:01:45 2014 +0200
+Date:	Sat Oct 25 19:11:01 2014 +0200
 
     Updated Polish translation
 
 M	po/pl.po
 
-commit 69428c77a8951a61411a832b9158730d3cb3eab2
-Author: Andika Triwidada <andika at gmail.com>
-Date:	Fri Sep 5 16:14:37 2014 +0000
+commit 3bd1bc5c24bcf2e823c3a66506a1da21b58a97c8
+Author: David King <amigadave at amigadave.com>
+Date:	Fri Oct 24 23:59:25 2014 +0100
+
+    Fix GIOStream leak when checking for buggy id3lib
+
+M	src/tags/id3_tag.c
+
+commit 1ab81be3a6c5cd2e8cc3cbb71f03de00ddd8389a
+Author: David King <amigadave at amigadave.com>
+Date:	Fri Oct 24 22:22:54 2014 +0100
+
+    Refactor Vorbis comment setting functions slightly
+
+    Iterate over string array better, without using g_strv_length(). Make
+    more parameters const. Simplify conditional check. Remove a couple of
+    unnecessary prototypes.
+
+M	src/tags/ogg_tag.c
+
+commit 9810819b5442428520dfee21fb5ede5188fb4112
+Author: David King <amigadave at amigadave.com>
+Date:	Thu Oct 23 00:12:33 2014 +0100
+
+    Add a setting to disable automatic image types
+
+    The heuristic for selecting the type of an image based on the filename
+    can get confused quite easily, so provide an option to disable it.
+
+    https://bugzilla.gnome.org/show_bug.cgi?id=738804
+
+M	data/org.gnome.EasyTAG.gschema.xml
+M	data/preferences_dialog.ui
+M	src/preferences_dialog.c
+M	src/tag_area.c
+
+commit e9d132016e8874f31a26ce697d54d1b46b183f36
+Author: David King <amigadave at amigadave.com>
+Date:	Wed Oct 22 22:33:16 2014 +0100
+
+    Use level 2 interface when reading FLAC header
+
+    Improve bitrate calculation to ignore metadata blocks.
+
+M	src/tags/flac_header.c
+
+commit ded35bddf49b4353b5ff00b880ac6b904b434be6
+Author: David King <amigadave at amigadave.com>
+Date:	Mon Oct 20 23:19:15 2014 +0100
+
+    Clear empty fields in MP4 tags
+
+    The existing tag is loaded from the file and modified before being
+    written out. For "extra" fields, including cover art and album artist,
+    the existing tag field was preserved in the case that the
+    corresponding
+    tag field had been cleared from the UI. Fix this by explicitly
+    removing
+    the cleared tag field.
+
+M	src/tags/mp4_tag.cc
+
+commit b6c388ad25d323c3698ad6380d6c034a76f408f5
+Author: David King <amigadave at amigadave.com>
+Date:	Mon Oct 20 23:08:25 2014 +0100
+
+    Fix an invalid read when reading MP4 cover art
+
+M	src/tags/mp4_tag.cc
+
+commit d53f10969c2569e753db83cac80b79550c44eb72
+Author: David King <amigadave at amigadave.com>
+Date:	Mon Oct 20 22:55:36 2014 +0100
+
+    Fix memory leak in C++ GIOStream wrapper
+
+M	src/tags/gio_wrapper.cc
+
+commit 3fbdffab187351818ec81cf7b7853b1b8f66c741
+Author: David King <amigadave at amigadave.com>
+Date:	Mon Oct 20 08:31:59 2014 +0100
+
+    Propagate double-click events on tree view headers
+
+    Receiving a double-click event on a tree view is not a good
+    indicator of
+    whether to change the selection, as the event could have occurred
+    on the
+    column headers, resulting in the header resizing and the selection
+    changing simultaneously. Avoid the problem by checking that the
+    double-click event is in the bin window, and ignoring (and
+    propagating)
+    it otherwise.
+
+    https://bugzilla.gnome.org/show_bug.cgi?id=738830
+
+M	src/browser.c
+M	src/cddb_dialog.c
+
+commit 5dec634bec10b0b64ff09b8ce103aeb9f52fbd1d
+Author: David King <amigadave at amigadave.com>
+Date:	Fri Oct 17 20:09:11 2014 +0100
+
+    Fix memory leak when constructing load file dialog
+
+M	src/load_files_dialog.c
+
+commit 1305e1098a116e8086eca94c44357c45efa38132
+Author: Kjartan Maraas <kmaraas at gnome.org>
+Date:	Fri Oct 17 00:05:12 2014 +0200
+
+    Added nb
+
+M	po/LINGUAS
+
+commit 35bc971df28dd82a02fb14508ee91b0a5ca05b30
+Author: Kjartan Maraas <kmaraas at gnome.org>
+Date:	Fri Oct 17 00:04:57 2014 +0200
+
+    Added Norwegian bokmål translation from Åka Sikrom.
+
+A	po/nb.po
+
+commit 5ddceb7573e98e86d63d9807e2e6def516346cfa
+Author: David King <amigadave at amigadave.com>
+Date:	Wed Oct 8 20:14:50 2014 +0100
+
+    Avoid a memory leak of the disc ID in error paths
+
+M	src/cddb_dialog.c
+
+commit df0919bfc444f09a6914479dea3e25cf5b50308a
+Author: David King <amigadave at amigadave.com>
+Date:	Wed Oct 8 19:44:41 2014 +0100
+
+    Refactor some CDDB dialog code to use GString
+
+    Avoid a memory leak in error paths, and use GString to simplify
+    the code
+    a little.
+
+M	src/cddb_dialog.c
+
+commit 75c025779d7992b2ddfb89f47a04d80ad2a0ce35
+Author: David King <amigadave at amigadave.com>
+Date:	Wed Oct 8 19:31:18 2014 +0100
+
+    Fix two memory leaks in CDDB dialog
+
+    Store a pointer to the start of the GLists, so that the lists can be
+    freed later.
+
+M	src/cddb_dialog.c
+
+commit f8c48eaef4dab037acc75acd80fb52aa2aa4ca24
+Author: Piotr DrÄ…g <piotrdrag at gmail.com>
+Date:	Sun Oct 5 17:49:19 2014 +0200
+
+    Updated Polish translation
+
+M	po/pl.po
+
+commit 12ba8ac010d8b20900f323a19aaa6eab649e617c
+Author: David King <amigadave at amigadave.com>
+Date:	Thu Oct 2 23:57:51 2014 +0100
+
+    Use GIO when reading FLAC header information
+
+M	src/et_core.c
+M	src/tags/flac_header.c
+M	src/tags/flac_header.h
+
+commit f6348498dd88eb7718ea8500efcfbf86b09873ee
+Author: David King <amigadave at amigadave.com>
+Date:	Mon Sep 29 23:15:37 2014 +0100
+
+    Add const to variables and parameters in et_core.c
+
+M	src/application_window.c
+M	src/application_window.h
+M	src/et_core.c
+M	src/et_core.h
+M	src/file_area.c
+M	src/file_area.h
+M	src/tag_area.c
+M	src/tag_area.h
+M	src/tags/ape_tag.c
+M	src/tags/ape_tag.h
+M	src/tags/flac_header.c
+M	src/tags/flac_header.h
+M	src/tags/flac_tag.c
+M	src/tags/flac_tag.h
+M	src/tags/id3_tag.c
+M	src/tags/id3_tag.h
+M	src/tags/id3v24_tag.c
+M	src/tags/monkeyaudio_header.c
+M	src/tags/monkeyaudio_header.h
+M	src/tags/mp4_header.cc
+M	src/tags/mp4_header.h
+M	src/tags/mp4_tag.cc
+M	src/tags/mp4_tag.h
+M	src/tags/mpeg_header.c
+M	src/tags/mpeg_header.h
+M	src/tags/musepack_header.c
+M	src/tags/musepack_header.h
+M	src/tags/ogg_header.c
+M	src/tags/ogg_header.h
+M	src/tags/ogg_tag.c
+M	src/tags/ogg_tag.h
+M	src/tags/opus_header.c
+M	src/tags/opus_header.h
+M	src/tags/wavpack_header.c
+M	src/tags/wavpack_header.h
+M	src/tags/wavpack_tag.c
+M	src/tags/wavpack_tag.h
+
+commit a58b943a71fba1168393182143b70cb9de830ed2
+Author: Ting-Wei Lan <lantw at src.gnome.org>
+Date:	Tue Sep 30 09:18:48 2014 +0800
+
+    Fix printf format string warning
+
+    https://bugzilla.gnome.org/show_bug.cgi?id=737633
+
+M	src/tags/id3_tag.c
+
+commit c2edff249ac90a4f86e6fc08a6eeefa1300d5fe8
+Author: David King <amigadave at amigadave.com>
+Date:	Mon Sep 29 17:58:05 2014 +0100
+
+    Unify logging code for tag reading
+
+M	src/et_core.c
+
+commit 827e4ed7cf379ec2acbdb679b7853e02de45af90
+Author: David King <amigadave at amigadave.com>
+Date:	Mon Sep 29 16:52:40 2014 +0100
+
+    Report successful writing in UI, not in tag code
+
+    Remove several Log_Print() calls in the tagging code, and instead
+    report
+    the successful writing of a tag in the UI.
+
+M	src/easytag.c
+M	src/et_core.c
+M	src/tags/flac_tag.c
+M	src/tags/id3_tag.c
+M	src/tags/id3v24_tag.c
+M	src/tags/ogg_header.c
+M	src/tags/ogg_tag.c
+
+commit 1561588a121294b2f91e9ed5589c394212858cbf
+Author: David King <amigadave at amigadave.com>
+Date:	Mon Sep 29 16:11:20 2014 +0100
+
+    Use GError in WavPack tagging code
+
+M	src/et_core.c
+M	src/tags/wavpack_header.c
+M	src/tags/wavpack_header.h
+M	src/tags/wavpack_tag.c
+M	src/tags/wavpack_tag.h
+
+commit 2d37ee8c7b0ebcc88d592437957616d33d3dd446
+Author: David King <amigadave at amigadave.com>
+Date:	Wed Sep 24 21:37:32 2014 +0100
+
+    Use GError in Ogg header code
+
+    Avoid a few Log_Print() calls.
+
+M	src/et_core.c
+M	src/tags/ogg_header.c
+M	src/tags/ogg_header.h
+M	src/tags/ogg_tag.c
+
+commit 1482f841e4564c968815a24e98600426ee5e7f67
+Author: David King <amigadave at amigadave.com>
+Date:	Wed Sep 24 20:34:24 2014 +0100
+
+    Use GError in MP4 tagging code
+
+    Avoid several uses of Log_Print().
+
+M	src/et_core.c
+M	src/tags/mp4_header.cc
+M	src/tags/mp4_header.h
+M	src/tags/mp4_tag.cc
+M	src/tags/mp4_tag.h
+
+commit 3c7014b234d1896061bf8f373d1ffe34dc1196ed
+Author: David King <amigadave at amigadave.com>
+Date:	Wed Sep 24 00:17:05 2014 +0100
+
+    Use GError in ID3 tagging code
+
+    Avoid several uses of Log_Print(), and convert some more into warnings
+    or debugging messages.
+
+M	src/et_core.c
+M	src/et_core.h
+M	src/tags/flac_tag.c
+M	src/tags/id3_tag.c
+M	src/tags/id3_tag.h
+M	src/tags/id3v24_tag.c
+M	src/tags/mpeg_header.c
+M	src/tags/mpeg_header.h
+
+commit 35cd27c9d04b5d7344642a39fdc43e718e6cee70
+Author: David King <amigadave at amigadave.com>
+Date:	Tue Sep 23 22:34:59 2014 +0100
+
+    Use GError in APE tagging code
+
+    Avoid a use of Log_Print().
+
+M	src/et_core.c
+M	src/tags/ape_tag.c
+M	src/tags/ape_tag.h
+M	src/tags/id3_tag.c
+M	src/tags/libapetag/apetaglib.c
+M	src/tags/libapetag/apetaglib.h
+M	src/tags/monkeyaudio_header.c
+M	src/tags/monkeyaudio_header.h
+M	src/tags/musepack_header.c
+M	src/tags/musepack_header.h
+
+commit 054ca780cb42c7001edc095875e68757b4cabe89
+Author: David King <amigadave at amigadave.com>
+Date:	Tue Sep 23 22:28:36 2014 +0100
+
+    Use GError in FLAC tagging code
+
+    Avoid several uses of Log_Print().
+
+M	src/et_core.c
+M	src/tags/flac_header.c
+M	src/tags/flac_header.h
+M	src/tags/flac_tag.c
+M	src/tags/flac_tag.h
+
+commit 553cb194494c308dd764548899be8c70cccbd4fe
+Author: Piotr DrÄ…g <piotrdrag at gmail.com>
+Date:	Sat Sep 27 21:29:06 2014 +0200
+
+    Updated Polish translation
+
+M	po/pl.po
+
+commit d0a066633a32d02910e5577a2e664d1e65b5f760
+Author: David King <amigadave at amigadave.com>
+Date:	Fri Sep 26 22:08:55 2014 +0100
+
+    Refactor ET_Add_File_To_Artist_Album_File_List()
+
+    Use g_return_val_if_fail() to check invariant.
+
+M	src/et_core.c
+
+commit 6e7d4ab8dd2a0a96f320f9581f2df129c8324d5c
+Author: David King <amigadave at amigadave.com>
+Date:	Fri Sep 26 20:59:47 2014 +0100
+
+    Slightly refactor some GList handling in et_core.c
+
+    If calling a g_list_*() method, a pointer to the first element in the
+    list is always returned, so there is no need to additionally call
+    g_list_first(). Fix GDestroyNotify functions to return void.
+
+M	src/et_core.c
+M	src/et_core.h
+
+commit 0a11b1c1580d703d4136df5feef4cfb52948fcdc
+Author: David King <amigadave at amigadave.com>
+Date:	Fri Sep 26 08:38:28 2014 +0100
+
+    Fix memory leak in id3lib buggy check
+
+    Free the result string.
+
+M	src/tags/id3_tag.c
+
+commit 656946c80805acc39c3102c1dff480658064bb8c
+Author: David King <amigadave at amigadave.com>
+Date:	Thu Sep 25 17:57:39 2014 +0100
+
+    Handle renaming on case-insensitive filesystems
+
+    A rename will fail on a filesystem that is case-insensitive, if the
+    filenames only differ by case. Work around this by moving to
+    a temporary
+    file first, in the case that a rename fails because the target exists.
+
+    https://bugzilla.gnome.org/show_bug.cgi?id=737302
+
+M	src/easytag.c
+
+commit 43c76c81c075734147a11b413e3941b1f4d085f9
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Sep 20 11:28:17 2014 +0100
+
+    Update HACKING for GtkBuilder UI files
+
+M	HACKING
+M	TODO
+
+commit 9ae954f662703ab371026ab4344579bc5f5eb06f
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Sep 20 09:17:22 2014 +0100
+
+    Improve expand behaviour of tag entry fields
+
+M	data/tag_area.ui
+
+commit 70712f2205003372688e430ef720508dd12f41b1
+Author: David King <amigadave at amigadave.com>
+Date:	Fri Sep 19 23:47:26 2014 +0100
+
+    Move tag area to GtkBuilder
+
+M	TODO
+M	data/tag_area.ui
+M	src/tag_area.c
+
+commit 622be638168d22818028641df72032601f67edd3
+Author: David King <amigadave at amigadave.com>
+Date:	Fri Sep 19 17:37:44 2014 +0100
+
+    Move log area to GtkBuilder
+
+A	data/log_area.ui
+M	data/org.gnome.EasyTAG.gresource.xml
+M	po/POTFILES.in
+M	src/log.c
+M	src/log.h
+
+commit 596a179593d895e123aecc616218b6a0875bce74
+Author: David King <amigadave at amigadave.com>
+Date:	Fri Sep 19 16:47:40 2014 +0100
+
+    Move file area to GtkBuilder
+
+A	data/file_area.ui
+M	data/org.gnome.EasyTAG.gresource.xml
+M	po/POTFILES.in
+M	src/file_area.c
+
+commit 9add9cf7c5ec6ce431c513a17922962118c8f5a7
+Author: David King <amigadave at amigadave.com>
+Date:	Fri Sep 19 16:46:37 2014 +0100
+
+    Use const for strings in tests and libapetag
+
+M	src/tags/libapetag/apetaglib.c
+M	src/tags/libapetag/apetaglib.h
+M	tests/test-scan.c
+
+commit 821273008d1684632b0b1e2c3aee32642d6792b7
+Author: David King <amigadave at amigadave.com>
+Date:	Thu Sep 18 17:27:04 2014 +0100
+
+    Mark some strings as const in tagging functions
+
+M	src/tags/ape_tag.c
+M	src/tags/ape_tag.h
+M	src/tags/flac_header.c
+M	src/tags/flac_header.h
+M	src/tags/flac_tag.c
+M	src/tags/flac_tag.h
+M	src/tags/id3_tag.c
+M	src/tags/id3_tag.h
+M	src/tags/id3v24_tag.c
+M	src/tags/libapetag/apetaglib.c
+M	src/tags/libapetag/apetaglib.h
+M	src/tags/monkeyaudio_header.c
+M	src/tags/monkeyaudio_header.h
+M	src/tags/mp4_header.cc
+M	src/tags/mp4_header.h
+M	src/tags/mp4_tag.cc
+M	src/tags/mp4_tag.h
+M	src/tags/mpeg_header.c
+M	src/tags/mpeg_header.h
+M	src/tags/musepack_header.c
+M	src/tags/musepack_header.h
+M	src/tags/ogg_header.c
+M	src/tags/ogg_header.h
+M	src/tags/ogg_tag.c
+M	src/tags/ogg_tag.h
+M	src/tags/wavpack_header.c
+M	src/tags/wavpack_header.h
+M	src/tags/wavpack_tag.c
+M	src/tags/wavpack_tag.h
+
+commit 498bf51ad4d1d7bd39b52a88fd7c0bace6f35598
+Author: David King <amigadave at amigadave.com>
+Date:	Wed Sep 17 22:48:56 2014 +0100
+
+    Move browser to GtkBuilder
+
+M	data/browser.ui
+M	src/application_window.c
+M	src/browser.c
+M	src/browser.h
+
+commit 1cedf1284c22ddb279406be0606b025cc2cd95c0
+Author: David King <amigadave at amigadave.com>
+Date:	Wed Sep 17 16:37:29 2014 +0100
+
+    Move scanner dialog to GtkBuilder
+
+M	data/org.gnome.EasyTAG.gresource.xml
+A	data/scan_dialog.ui
+M	po/POTFILES.in
+M	src/scan_dialog.c
+
+commit a21a43a1713f44719db81c02766b9ad6a488ebe4
+Author: David King <amigadave at amigadave.com>
+Date:	Tue Sep 16 20:00:49 2014 +0100
+
+    Add simple tests for style-sensitive case function
+
+M	tests/test-scan.c
+
+commit b00b5ec6913be484159294c51e866f58b42516bb
+Author: David King <amigadave at amigadave.com>
+Date:	Tue Sep 16 17:19:51 2014 +0100
+
+    Move remaining upper-casing functions to scan.c
+
+    Split out Scan_Process_Fields_First_Letters_Uppercase() and
+    Scan_Word_Is_Roman_Numeral() and add some parameters, so that they do
+    not depend on the state of GSettings keys internally.
+
+M	src/scan.c
+M	src/scan.h
+M	src/scan_dialog.c
+M	src/scan_dialog.h
+M	src/tag_area.c
+
+commit 02b86bb625d1b3d3c3182bd2cb67e0af97eee063
+Author: David King <amigadave at amigadave.com>
+Date:	Mon Sep 15 20:49:32 2014 +0100
+
+    Use return value to speed up force saving files
+
+    The variable assignment was lost during refactoring.
+
+    Found with Coverity (CID 1238689).
+
+M	src/easytag.c
+
+commit b8c4707f7ffd4c67615c30f6073f15b0693fe491
+Author: David King <amigadave at amigadave.com>
+Date:	Mon Sep 15 20:40:05 2014 +0100
+
+    Remove dead code in et_browser_label_set_text()
+
+    Found with Coverity (CID 1238690).
+
+M	src/browser.c
+
+commit cbc7f3a54d12d63c46a9600f9a953be34d0ba7e4
+Author: David King <amigadave at amigadave.com>
+Date:	Mon Sep 15 20:19:18 2014 +0100
+
+    Remove redundant NULL checks in CDDB dialog
+
+    Found with Coverity (CID 1238682, CID 1238683, CID 1238684, CID
+    1238685,
+    CID 1238686)
+
+M	src/cddb_dialog.c
+
+commit 9f898378b70158f9ca10164fd1a7c45ebad0389d
+Author: David King <amigadave at amigadave.com>
+Date:	Sun Sep 14 21:02:47 2014 +0100
+
+    Remove unused CDDB dialog private struct variable
+
+M	src/cddb_dialog.c
+
+commit 1f5ddcc0070025fd68d61c4f256f1a2d83016b14
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Sep 13 22:43:57 2014 +0100
+
+    Fix capitalization in process fields scanner
+
+    Iterate to the end of the string, rather than only processing
+    the first
+    2 words.
+
+    https://bugzilla.gnome.org/show_bug.cgi?id=736609
+
+M	src/scan_dialog.c
+
+commit b44afc315f1948ce7e308154d2a92392e27077bf
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Sep 13 19:11:48 2014 +0100
+
+    Fix check for upper-casing prepositions
+
+    Flip the boolean check for whether to upper-case prepositions
+    and other
+    excluded words.
+
+M	src/scan_dialog.c
+
+commit 7de273759ec21f574fea53104f7e658c4bcbc6b9
+Author: David King <amigadave at amigadave.com>
+Date:	Tue Sep 9 11:37:04 2014 +0100
+
+    Fix signal handler for apply-to-selection icons
+
+    Thanks to Steven Ulrick for the bug report.
+
+    https://bugzilla.gnome.org/show_bug.cgi?id=736315
+
+M	src/tag_area.c
+
+commit 692749a8e2cec9377345b03139abda8c032adf05
+Author: David King <amigadave at amigadave.com>
+Date:	Mon Sep 8 11:42:54 2014 +0100
+
+    Fix checking whether ID3v1 and ID3v2 are enabled
+
+    As reported by Steven Ulrick on the mailing list, saving files
+    with ID3
+    tags and then reloading the directory causes the files to be shown as
+    modified, even though they are not.
+
+    https://mail.gnome.org/archives/easytag-list/2014-September/msg00014.html
+
+M	src/tags/id3v24_tag.c
+
+commit 80ecf4d65b537882ff8d4939b3f03e0f5762797a
+Author: Guillaume Bernard <filorin at gmx.com>
+Date:	Mon Sep 8 09:53:08 2014 +0000
+
+    Updated French translation
+
+M	po/fr.po
+
+commit 4b0222a3a990bf74c78696f0691d02aab2fb77b7
+Author: David King <amigadave at amigadave.com>
+Date:	Sun Sep 7 21:50:13 2014 +0100
+
+    Remove unused fields in CDDB dialog private struct
+
+M	src/cddb_dialog.c
+
+commit 2e93948066ae248e41df4381abdb98a13b20b4ab
+Author: David King <amigadave at amigadave.com>
+Date:	Sun Sep 7 21:47:54 2014 +0100
+
+    Move internal struct from charset header to source
+
+    Also, rearrange and tidy the header.
+
+M	src/charset.c
+M	src/charset.h
+
+commit 2c905880066380719c90b101fb2e3d55ae3e807e
+Author: David King <amigadave at amigadave.com>
+Date:	Sun Sep 7 19:14:51 2014 +0100
+
+    Move CDDB dialog to GtkBuilder
+
+A	data/cddb_dialog.ui
+M	data/org.gnome.EasyTAG.gresource.xml
+M	data/org.gnome.EasyTAG.gschema.xml
+M	po/POTFILES.in
+M	src/application_window.c
+M	src/cddb_dialog.c
+M	src/cddb_dialog.h
+M	src/setting.c
+M	src/setting.h
+
+commit 131fdf54a3629569f39f0b29e27dd9f999b7cc95
+Author: Andika Triwidada <andika at gmail.com>
+Date:	Sun Sep 7 04:51:46 2014 +0000
+
+    Added Indonesian translation
+
+M	po/LINGUAS
+A	po/id.po
+
+commit 08ad4ccc86b0d4758d9cde19227e0a6a0a806d82
+Author: Piotr DrÄ…g <piotrdrag at gmail.com>
+Date:	Sun Sep 7 01:07:28 2014 +0200
+
+    Updated Polish translation
+
+M	po/pl.po
+
+commit 806b8692e615b79accec39cae2154aa2fb770cd2
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Sep 6 21:47:31 2014 +0100
+
+    Fix -Wwrite-strings warning in channel_mode_name()
+
+M	src/tags/mpeg_header.c
+
+commit 5ce7719ad0beefd88b64939e50395330eac6bd60
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Sep 6 15:06:31 2014 +0100
+
+    Remove unused id3_settings_changed()
+
+M	src/preferences_dialog.c
+
+commit 872a6ff51035736abf981f74ab722b11f2a6461a
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Sep 6 15:02:53 2014 +0100
+
+    Add load files dialog UI file to POTFILES.in
+
+M	po/POTFILES.in
+
+commit 1b3f886d80f6819616f3259047fcd51526f038e5
+Author: David King <amigadave at amigadave.com>
+Date:	Thu Sep 4 18:33:10 2014 +0100
+
+    Review many translatable strings
+
+M	data/menus.ui
+M	data/org.gnome.EasyTAG.gschema.xml
+M	data/playlist_dialog.ui
+M	data/preferences_dialog.ui
+M	data/toolbar.ui
+M	src/application.c
+M	src/application_window.c
+M	src/browser.c
+M	src/cddb_dialog.c
+M	src/charset.c
+M	src/easytag.c
+M	src/et_core.c
+M	src/file_area.c
+M	src/load_files_dialog.c
+M	src/misc.c
+M	src/picture.c
+M	src/playlist_dialog.c
+M	src/preferences_dialog.c
+M	src/scan_dialog.c
+M	src/setting.c
+M	src/tag_area.c
+M	src/tags/ape_tag.c
+M	src/tags/flac_tag.c
+M	src/tags/id3_tag.c
+M	src/tags/id3v24_tag.c
+M	src/tags/mp4_header.cc
+M	src/tags/mp4_tag.cc
+M	src/tags/ogg_header.c
+M	src/tags/ogg_tag.c
+
+commit 949376a1743c98f254b2b471bf0f6c6dbdd30f8f
+Author: Ekaterina Gerasimova <kittykat3756 at gmail.com>
+Date:	Wed Sep 3 23:37:12 2014 +0100
+
+    Review more strings
+
+M	data/browser.ui
+M	data/easytag.desktop.in
+M	data/menus.ui
+M	data/org.gnome.EasyTAG.gschema.xml
+M	data/playlist_dialog.ui
+M	data/preferences_dialog.ui
+
+commit a05d398b95b162dd36f4b9c26343e7e8b1385aee
+Author: David King <amigadave at amigadave.com>
+Date:	Wed Sep 3 18:32:31 2014 +0100
+
+    Move application quit code to EtApplicationWindow
+
+M	src/application.c
+M	src/application_window.c
+M	src/application_window.h
+M	src/easytag.c
+M	src/easytag.h
+
+commit 717813f54ffaea2bcce471d2dbd68190ea2445ab
+Author: David King <amigadave at amigadave.com>
+Date:	Wed Sep 3 18:01:41 2014 +0100
+
+    Remove global INIT_DIRECTORY variable
+
+    Replace a global variable with a private variable in EtApplication.
+
+M	src/application.c
+M	src/easytag.h
+M	src/main.c
+
+commit a42e93c4db70df97acf7b37270db8cbbede3978f
+Author: David King <amigadave at amigadave.com>
+Date:	Wed Sep 3 16:06:44 2014 +0100
+
+    Update the file list column width on path changes
+
+    https://bugzilla.gnome.org/show_bug.cgi?id=735363
+
+M	src/browser.c
+
+commit 2adda4449b6c8bb8e69c6ce9435bc982ee994f8d
+Author: David King <amigadave at amigadave.com>
+Date:	Wed Sep 3 16:06:33 2014 +0100
+
+    Use GtkTreeView interactive search in CDDB dialog
+
+    Remove custom code to search within results.
+
+M	src/cddb_dialog.c
+M	src/setting.c
+M	src/setting.h
+
+commit 75d60313ef48df6f9880143c10f9627f87915bd6
+Author: David King <amigadave at amigadave.com>
+Date:	Wed Aug 27 20:50:58 2014 +0100
+
+    Remove duplicate NULL check in et_run_program()
+
+    Found with cppcheck.
+
+M	src/misc.c
+
+commit 60dca801aad9336c1036d9bdf202b6da46ebc5ca
+Author: David King <amigadave at amigadave.com>
+Date:	Wed Aug 27 20:49:09 2014 +0100
+
+    Remove unused function in misc.c
+
+    Found with cppcheck.
+
+M	src/misc.c
+M	src/misc.h
+
+commit 54e35a67d032164ade5a1a92fee7681c9e230f27
+Author: David King <amigadave at amigadave.com>
+Date:	Fri Aug 22 16:03:01 2014 +0100
+
+    Move load files dialog to GtkBuilder
+
+A	data/load_files_dialog.ui
+M	data/org.gnome.EasyTAG.gresource.xml
+M	src/load_files_dialog.c
+M	src/setting.c
+M	src/setting.h
+
+commit c20ab15940be282ae972f71e31fa87edef1c2fee
+Author: David King <amigadave at amigadave.com>
+Date:	Thu Aug 21 23:06:19 2014 +0100
+
+    Move search dialog to GtkBuilder
+
+M	data/org.gnome.EasyTAG.gresource.xml
+A	data/search_dialog.ui
+M	po/POTFILES.in
+M	src/search_dialog.c
+
+commit b55626480f999f63e23cdf3059692cd90b6b59f8
+Author: David King <amigadave at amigadave.com>
+Date:	Thu Aug 21 16:19:16 2014 +0100
+
+    Move open files dialog to GtkBuilder
+
+M	data/browser.ui
+M	src/browser.c
+
+commit 93ad29c9b90f7bcd81856353d02acd283cf9f898
+Author: David King <amigadave at amigadave.com>
+Date:	Thu Aug 21 08:36:40 2014 +0100
+
+    Move browse directory dialog to GtkBuilder
+
+M	data/browser.ui
+M	src/browser.c
+
+commit e169b255181580d2cd967e8f0c5b4329502636af
+Author: David King <amigadave at amigadave.com>
+Date:	Wed Aug 20 16:02:06 2014 +0100
+
+    Move picture details dialog to GtkBuilder
+
+M	data/org.gnome.EasyTAG.gresource.xml
+A	data/tag_area.ui
+M	po/POTFILES.in
+M	src/tag_area.c
+
+commit e00a7ea6828e2892a78b63f6eff28f7335631050
+Author: David King <amigadave at amigadave.com>
+Date:	Wed Aug 20 07:43:49 2014 +0100
+
+    Set transient parents before init()
+
+    If gtk_window_set_transient_for() is called in the GObject init()
+    method, it is overridden to the default for the property immediately
+    afterwards, as "transient-for" is a contruct property.  Instead,
+    set the
+    property as part of calls to g_object_new().
+
+M	src/application_window.c
+M	src/load_files_dialog.c
+M	src/load_files_dialog.h
+M	src/playlist_dialog.c
+M	src/playlist_dialog.h
+M	src/preferences_dialog.c
+M	src/preferences_dialog.h
+M	src/scan_dialog.c
+M	src/scan_dialog.h
+M	src/search_dialog.c
+M	src/search_dialog.h
+
+commit 5bdc10db890e08e23e46692fa150e37ff91e594a
+Author: David King <amigadave at amigadave.com>
+Date:	Tue Aug 19 16:11:01 2014 +0100
+
+    Move rename directory dialog to GtkBuilder
+
+A	data/browser.ui
+M	data/org.gnome.EasyTAG.gresource.xml
+M	po/POTFILES.in
+M	src/browser.c
+
+commit aca16a59a0ad0b101f590c159b46b8f14cedf46f
+Author: David King <amigadave at amigadave.com>
+Date:	Sun Aug 17 09:24:47 2014 +0100
+
+    Move playlist dialog to GtkBuilder
+
+M	data/org.gnome.EasyTAG.gresource.xml
+A	data/playlist_dialog.ui
+M	po/POTFILES.in
+M	src/playlist_dialog.c
+
+commit b15aa823afb40b381f5323e7f5385ad542254f3c
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Aug 16 22:41:41 2014 +0100
+
+    Remove old GTK+ 2 grid compatibility code
+
+M	Makefile.am
+M	src/application_window.c
+M	src/browser.c
+M	src/easytag.c
+D	src/gtk2_compat.c
+D	src/gtk2_compat.h
+M	src/load_files_dialog.c
+M	src/misc.c
+M	src/misc.h
+M	src/playlist_dialog.c
+M	src/preferences_dialog.c
+M	src/scan_dialog.c
+M	src/search_dialog.c
+M	src/tag_area.c
+
+commit f6a10b4abcf25ceef89dcfebe23d115d46435b7a
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Aug 16 22:34:38 2014 +0100
+
+    Remove unnecessary et_grid_attach_margins()
+
+M	src/gtk2_compat.c
+M	src/gtk2_compat.h
+M	src/scan_dialog.c
+
+commit f87a971fe303ea68b97bf3fa895b076cecc74a5a
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Aug 16 22:22:03 2014 +0100
+
+    Remove redundant et_grid_new() define
+
+    Call gtk_grid_new() directly.
+
+M	src/cddb_dialog.c
+M	src/gtk2_compat.h
+M	src/scan_dialog.c
+M	src/search_dialog.c
+M	src/tag_area.c
+
+commit 7ca75e8261d013700fc1f9b0ea63102bbfed7eb1
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Aug 16 20:36:52 2014 +0100
+
+    Move preferences notebook into GtkBuilder
+
+M	data/preferences_dialog.ui
+M	src/preferences_dialog.c
+
+commit 1f58d9e9df1f83f8aa39f031a472091f44ff1b4c
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Aug 16 16:06:45 2014 +0100
+
+    Move CDDB preferences page to GtkBuilder
+
+M	data/preferences_dialog.ui
+M	src/preferences_dialog.c
+
+commit 51944288f1dc20c0966357eeadf643bff0aa983f
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Aug 16 10:28:24 2014 +0100
+
+    Move tags preferences page to GtkBuilder
+
+M	data/preferences_dialog.ui
+M	src/preferences_dialog.c
+
+commit beab8934b1ae311f47cb550cda1e172bb9eefcbc
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Aug 16 09:12:56 2014 +0100
+
+    Move file preferences page to GtkBuilder
+
+M	data/preferences_dialog.ui
+M	src/preferences_dialog.c
+
+commit 8669c6100f55308d66f00f21db090c074b811d14
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Aug 16 08:37:38 2014 +0100
+
+    Move UI and misc preferences pages to GtkBuilder
+
+    Unify the UI settings in a single User Interface page.
+
+M	data/preferences_dialog.ui
+M	src/preferences_dialog.c
+
+commit c65572a59dc94e09ada71d77c01b7f0e66aae4ca
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Aug 16 07:55:37 2014 +0100
+
+    Move confirmation preferences page to GtkBuilder
+
+M	data/preferences_dialog.ui
+M	src/preferences_dialog.c
+
+commit 663410e443da238b238f0ccfc3139d5463cc038b
+Author: David King <amigadave at amigadave.com>
+Date:	Fri Aug 15 22:48:37 2014 +0100
+
+    Move scanner preferences page to GtkBuilder
+
+M	data/org.gnome.EasyTAG.gresource.xml
+A	data/preferences_dialog.ui
+M	po/POTFILES.in
+M	src/preferences_dialog.c
+
+commit 5799efb3b3325d9d425fd575ff936614449d0b95
+Author: Ekaterina Gerasimova <kittykat3756 at gmail.com>
+Date:	Fri Aug 15 22:36:19 2014 +0100
+
+    Review strings
+
+M	data/menus.ui
+M	data/org.gnome.EasyTAG.gschema.xml
+M	data/toolbar.ui
+M	nautilus-extension/nautilus-easytag.c
+M	src/application.c
+M	src/application_window.c
+M	src/browser.c
+M	src/et_core.c
+M	src/file_area.c
+
+commit e26ea4460897016184242dc44bc6a3b3e239f30d
+Author: Ekaterina Gerasimova <kittykat3756 at gmail.com>
+Date:	Fri Aug 15 20:47:24 2014 +0100
+
+    Add "music" to the desktop file keywords
+
+M	data/easytag.desktop.in
+
+commit ff27f47e0eb69eac961eb729d14f272a1d1089e5
+Author: David King <amigadave at amigadave.com>
+Date:	Fri Aug 15 18:37:20 2014 +0100
+
+    Move status bar to EtStatusBar object
+
+M	Makefile.am
+M	po/POTFILES.in
+M	src/application.c
+M	src/application_window.c
+M	src/application_window.h
+D	src/bar.c
+D	src/bar.h
+M	src/browser.c
+M	src/easytag.c
+M	src/et_core.c
+M	src/load_files_dialog.c
+M	src/log.c
+M	src/misc.c
+M	src/picture.c
+M	src/playlist_dialog.c
+M	src/preferences_dialog.c
+M	src/scan_dialog.c
+M	src/search_dialog.c
+M	src/setting.c
+A	src/status_bar.c
+A	src/status_bar.h
+M	src/tag_area.c
+
+commit 238a0483a62586c3d75a6fb8306991337fbf0e29
+Author: David King <amigadave at amigadave.com>
+Date:	Fri Aug 15 16:10:20 2014 +0100
+
+    Split progress bar from status bar
+
+    There is no need to subclass GtkProgressBar, so just move the progress
+    bar code to a separate file.
+
+M	Makefile.am
+M	src/application_window.c
+M	src/application_window.h
+M	src/bar.c
+M	src/bar.h
+M	src/easytag.c
+M	src/gtk2_compat.c
+M	src/gtk2_compat.h
+A	src/progress_bar.c
+C053	src/gtk2_compat.h	src/progress_bar.h
+M	src/scan_dialog.c
+
+commit 69ca1719733af77aa4b013b998c9262bfcc3170d
+Author: David King <amigadave at amigadave.com>
+Date:	Wed Aug 13 08:42:10 2014 +0100
+
+    Enable ID3v2.3 (instead of ID3v2.4) by default
+
+    Although ID3v2.4 is nearly as old as ID3v2.3, it has not received the
+    same level of support in hardware and software players until recently.
+    To make sure that users are not confused by their valid ID3v2.4
+    tags not
+    being shown in players which only support ID3v2.3, write ID3v2.3
+    tags by
+    default.
+
+    https://mail.gnome.org/archives/easytag-list/2014-August/msg00014.html
+
+M	data/org.gnome.EasyTAG.gschema.xml
+
+commit d02484dbd73605bc6031faa6a9666f8eb3a82dca
+Author: David King <amigadave at amigadave.com>
+Date:	Wed Aug 13 08:38:44 2014 +0100
+
+    Disable writing of ID3v1 tags by default
+
+    ID3v1 tags have many problems, including the lack of a defined
+    character
+    encoding (and a western-centric ISO-8859-1 convention), 30 bytes per
+    field and an extremely limited set of fields. Depending on the
+    behaviour
+    of media players, reading the ID3v1 tag instead of the ID3v2 tag could
+    give misleading information (truncated fields, mojibake and so on).
+
+    As ID3v2 is in wide use, and solves the above problems, disable
+    ID3v1 by
+    default.
+
+    https://mail.gnome.org/archives/easytag-list/2014-August/msg00017.html
+
+M	data/org.gnome.EasyTAG.gschema.xml
+
+commit 96b081f8cd5a1feed97e1692fe2ca15f8d7ab970
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Aug 9 22:43:38 2014 +0100
+
+    Set maximum allowed GLib version to 2.32
+
+    This corresponds with the version required by GTK+ 3.4, so that API
+    introduced in post-2.32 releases will emit warnings when used.
+
+M	configure.ac
+
+commit 7d8d22804a44ec23bd1ea71bd4dfc1d7841a114c
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Aug 9 19:11:24 2014 +0100
+
+    Move tagging code to new subdirectory
+
+    Rearranging the tagging code will make it easier to split the code off
+    to be a separate library.
+
+M	.gitignore
+M	Makefile.am
+M	po/POTFILES.in
+R100	src/ape_tag.c	src/tags/ape_tag.c
+R100	src/ape_tag.h	src/tags/ape_tag.h
+R100	src/flac_header.c	src/tags/flac_header.c
+R100	src/flac_header.h	src/tags/flac_header.h
+R100	src/flac_tag.c	src/tags/flac_tag.c
+R100	src/flac_tag.h	src/tags/flac_tag.h
+R100	src/gio_wrapper.cc	src/tags/gio_wrapper.cc
+R100	src/gio_wrapper.h	src/tags/gio_wrapper.h
+R100	src/id3_tag.c	src/tags/id3_tag.c
+R100	src/id3_tag.h	src/tags/id3_tag.h
+R100	src/id3lib/c_wrapper.cpp	src/tags/id3lib/c_wrapper.cpp
+R100	src/id3lib/id3_bugfix.h src/tags/id3lib/id3_bugfix.h
+R100	src/id3lib/patch_id3lib_3.8.3_UTF16_writing_bug.diff
+src/tags/id3lib/patch_id3lib_3.8.3_UTF16_writing_bug.diff
+R100	src/id3v24_tag.c	src/tags/id3v24_tag.c
+R100	src/libapetag/COPYING.LGPL	src/tags/libapetag/COPYING.LGPL
+R100	src/libapetag/README.apetag	src/tags/libapetag/README.apetag
+R100	src/libapetag/apetaglib.c	src/tags/libapetag/apetaglib.c
+R100	src/libapetag/apetaglib.h	src/tags/libapetag/apetaglib.h
+R100	src/libapetag/id3v2_read.c	src/tags/libapetag/id3v2_read.c
+R100	src/libapetag/id3v2_read.h	src/tags/libapetag/id3v2_read.h
+R100	src/libapetag/info_mac.c	src/tags/libapetag/info_mac.c
+R100	src/libapetag/info_mac.h	src/tags/libapetag/info_mac.h
+R100	src/libapetag/info_mpc.c	src/tags/libapetag/info_mpc.c
+R100	src/libapetag/info_mpc.h	src/tags/libapetag/info_mpc.h
+R100	src/libapetag/is_tag.c	src/tags/libapetag/is_tag.c
+R100	src/libapetag/is_tag.h	src/tags/libapetag/is_tag.h
+R100	src/monkeyaudio_header.c	src/tags/monkeyaudio_header.c
+R100	src/monkeyaudio_header.h	src/tags/monkeyaudio_header.h
+R100	src/mp4_header.cc	src/tags/mp4_header.cc
+R100	src/mp4_header.h	src/tags/mp4_header.h
+R100	src/mp4_tag.cc	src/tags/mp4_tag.cc
+R100	src/mp4_tag.h	src/tags/mp4_tag.h
+R100	src/mpeg_header.c	src/tags/mpeg_header.c
+R100	src/mpeg_header.h	src/tags/mpeg_header.h
+R100	src/musepack_header.c	src/tags/musepack_header.c
+R100	src/musepack_header.h	src/tags/musepack_header.h
+R100	src/ogg_header.c	src/tags/ogg_header.c
+R100	src/ogg_header.h	src/tags/ogg_header.h
+R100	src/ogg_tag.c	src/tags/ogg_tag.c
+R100	src/ogg_tag.h	src/tags/ogg_tag.h
+R100	src/opus_header.c	src/tags/opus_header.c
+R100	src/opus_header.h	src/tags/opus_header.h
+R100	src/opus_tag.c	src/tags/opus_tag.c
+R100	src/opus_tag.h	src/tags/opus_tag.h
+R100	src/vcedit.c	src/tags/vcedit.c
+R100	src/vcedit.h	src/tags/vcedit.h
+R100	src/wavpack_header.c	src/tags/wavpack_header.c
+R100	src/wavpack_header.h	src/tags/wavpack_header.h
+R100	src/wavpack_tag.c	src/tags/wavpack_tag.c
+R100	src/wavpack_tag.h	src/tags/wavpack_tag.h
+
+commit 4fa650fd4b5f99242be86acee803ed0f2f744d73
+Author: David King <amigadave at amigadave.com>
+Date:	Fri Aug 8 20:45:52 2014 +0100
+
+    Remove use of deprecated GtkImageMenuItem
+
+M	src/load_files_dialog.c
+M	src/tag_area.c
+
+commit eece2dd855a3fe4e9ac642027cbb9c4afe6bcb95
+Author: David King <amigadave at amigadave.com>
+Date:	Fri Aug 8 20:35:20 2014 +0100
+
+    Remove last uses of deprecated GtkStock
+
+M	src/application_window.c
+M	src/browser.c
+M	src/cddb_dialog.c
+M	src/easytag.c
+M	src/load_files_dialog.c
+M	src/misc.c
+M	src/playlist_dialog.c
+M	src/preferences_dialog.c
+M	src/scan_dialog.c
+M	src/search_dialog.c
+M	src/tag_area.c
+
+commit 37b1ffa794682cf8b039d5d24eb8f8593f561832
+Author: David King <amigadave at amigadave.com>
+Date:	Wed Aug 6 07:47:16 2014 +0100
+
+    Split off main() to a separate source file
+
+M	Makefile.am
+M	src/easytag.c
+A	src/main.c
+
+commit fffeab41b48cf9c371cab4dd1deaf24e1f55c8d6
+Author: David King <amigadave at amigadave.com>
+Date:	Tue Aug 5 16:51:54 2014 +0100
+
+    Refactor about dialog handling
+
+    Fetch the parent from EtApplication.
+
+M	src/about.c
+M	src/about.h
+M	src/application.c
+
+commit d91fc6aa8623dbcc09c09b592adbcf99f154ec2a
+Author: David King <amigadave at amigadave.com>
+Date:	Tue Aug 5 16:38:06 2014 +0100
+
+    Move some GApplication handlers to EtApplication
+
+M	src/application.c
+M	src/application.h
+M	src/easytag.c
+
+commit 63a1232009a5e4324b06a53531ec00e13114db3d
+Author: David King <amigadave at amigadave.com>
+Date:	Fri Aug 1 22:54:52 2014 +0100
+
+    Use same strings in GSettings schema and UI
+
+    While not all strings are applicable to the UI, try to reduce
+    translator
+    effort by reducing the delta.
+
+M	src/browser.c
+M	src/cddb_dialog.c
+M	src/load_files_dialog.c
+M	src/playlist_dialog.c
+M	src/preferences_dialog.c
+M	src/scan_dialog.c
+
+commit 4813e3a618192b36bf47687e43e78fd9feaeb7b6
+Author: David King <amigadave at amigadave.com>
+Date:	Fri Aug 1 21:30:14 2014 +0100
+
+    Avoid warnings when updating the scan dialog
+
+M	src/application_window.c
+M	src/application_window.h
+M	src/easytag.c
+
+commit 6530bf0641e8d7b1e8435e11d8863f8ee276970f
+Author: David King <amigadave at amigadave.com>
+Date:	Fri Aug 1 16:09:19 2014 +0100
+
+    Use GtkWidget popup-menu signal in EtBrowser
+
+M	TODO
+M	src/browser.c
+
+commit 9411e2fb3366aeb98473f641ab0f0a970e893bad
+Author: David King <amigadave at amigadave.com>
+Date:	Fri Aug 1 08:53:47 2014 +0100
+
+    Use popup-menu signal in EtLoadFilesDialog
+
+M	src/load_files_dialog.c
+
+commit a1018b49ba87031fd206735f3e1c2563bdf254b8
+Author: David King <amigadave at amigadave.com>
+Date:	Thu Jul 31 22:14:57 2014 +0200
+
+    Use GtkWidget popup-menu signal in EtLogArea
+
+M	src/log.c
+
+commit 15ab6f264d258d1f3288744bf0fd256f364b3301
+Author: David King <amigadave at amigadave.com>
+Date:	Thu Jul 31 21:11:36 2014 +0200
+
+    Remove use of deprecated GtkMisc xalign property
+
+    Use GtkWidget halign property instead.
+
+M	src/cddb_dialog.c
+M	src/file_area.c
+M	src/load_files_dialog.c
+M	src/preferences_dialog.c
+M	src/scan_dialog.c
+M	src/search_dialog.c
+M	src/tag_area.c
+
+commit d881fa1306130aa0a4a733d01eb25c2511dc2093
+Author: David King <amigadave at amigadave.com>
+Date:	Sun Jul 20 22:45:03 2014 +0100
+
+    Avoid warnings when reading and writing ID3 tags
+
+    https://mail.gnome.org/archives/easytag-list/2014-July/msg00000.html
+
+M	src/id3_tag.c
+
+commit 94be19c239f5aaf200dae62f5a00b82c702d27d7
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Jul 19 23:53:09 2014 +0100
+
+    Implement hiding of file header widget
+
+    Show the file header information if the file-show-header GSetting is
+    true.
+
+M	src/file_area.c
+
+commit 2ebe3861967f2de4bb0f0d8d3e140feb71f9643c
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Jul 19 23:27:37 2014 +0100
+
+    Move dialog setting saving to application window
+
+M	src/application_window.c
+M	src/application_window.h
+M	src/easytag.c
+M	src/setting.c
+M	src/setting.h
+
+commit 479fef7a908db316f97ba7fbc7a3d0a6bd8e61ad
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Jul 19 23:12:45 2014 +0100
+
+    Remove the cancel button from the preferences
+
+    As settings changes are applied instantly with GSettings, a cancel
+    button is not useful.
+
+M	src/preferences_dialog.c
+
+commit 03ab2667dc2ce185dec3df2c88f92f23a7b6b839
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Jul 19 23:06:13 2014 +0100
+
+    Remove unused code when closing preferences dialog
+
+M	src/preferences_dialog.c
+M	src/setting.c
+M	src/setting.h
+
+commit e50cfde5a502f3b122588ebbf9f2f1b2444605d3
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Jul 19 22:38:29 2014 +0100
+
+    Drop explicit call to gtk_main()
+
+M	src/easytag.c
+
+commit 594e9575eaddc1b70b7bf6510802b27b6b8e6828
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Jul 19 09:19:38 2014 +0100
+
+    Move file area to EtFileArea object
+
+M	Makefile.am
+M	po/POTFILES.in
+M	src/application_window.c
+M	src/application_window.h
+M	src/easytag.c
+M	src/easytag.h
+M	src/et_core.c
+M	src/et_core.h
+A	src/file_area.c
+A	src/file_area.h
+M	src/flac_header.c
+M	src/flac_header.h
+M	src/monkeyaudio_header.c
+M	src/monkeyaudio_header.h
+M	src/mp4_header.cc
+M	src/mp4_header.h
+M	src/mpeg_header.c
+M	src/mpeg_header.h
+M	src/musepack_header.c
+M	src/musepack_header.h
+M	src/ogg_header.c
+M	src/ogg_header.h
+M	src/opus_header.c
+M	src/opus_header.h
+M	src/wavpack_header.c
+M	src/wavpack_header.h
+
+commit fc874a72b02a213f7de07b7b859597eff755f805
+Author: David King <amigadave at amigadave.com>
+Date:	Fri Jul 18 08:42:22 2014 +0100
+
+    Move tag area to EtTagArea object
+
+M	Makefile.am
+M	po/POTFILES.in
+M	src/application_window.c
+M	src/application_window.h
+M	src/easytag.c
+M	src/easytag.h
+M	src/et_core.c
+M	src/misc.c
+M	src/misc.h
+M	src/picture.c
+M	src/picture.h
+A	src/tag_area.c
+A	src/tag_area.h
+
+commit f9d8fa4305dbc0c61b21e44721d5e819f2eab5bd
+Author: David King <amigadave at amigadave.com>
+Date:	Wed Jul 16 08:19:20 2014 +0100
+
+    Save and restore main window state
+
+M	src/application_window.c
+
+commit 3d0895d833e96726ea7838922161b6be1f10b2d6
+Author: David King <amigadave at amigadave.com>
+Date:	Wed Jul 16 07:33:17 2014 +0100
+
+    Track main window state
+
+    This will be used to save and restore the window dimensions,
+    and whether
+    the window is maximized.
+
+M	src/application_window.c
+
+commit 11f839d201b44ab10c189408e5bdca5921106b78
+Author: David King <amigadave at amigadave.com>
+Date:	Mon Jul 14 22:19:16 2014 +0100
+
+    Remove last uses of GtkAction
+
+M	src/application_window.c
+M	src/application_window.h
+M	src/easytag.h
+M	src/scan_dialog.c
+
+commit 985a94cf3a3680188c22d4a7bf91dde2b07e8c56
+Author: David King <amigadave at amigadave.com>
+Date:	Mon Jul 14 17:16:41 2014 +0100
+
+    Refactor popup menu handling
+
+    Use gdk_event_triggers_context_menu() in button-press-event handlers.
+    Use GDK_BUTTON_PRIMARY instead of 1 where appropriate.
+
+M	TODO
+M	src/application_window.c
+M	src/browser.c
+M	src/cddb_dialog.c
+M	src/load_files_dialog.c
+M	src/log.c
+M	src/picture.c
+
+commit 0a41b9ab7f61af18804fe0c0694ca9124a71ff02
+Author: David King <amigadave at amigadave.com>
+Date:	Mon Jul 14 17:16:01 2014 +0100
+
+    Avoid deprecated margin property with GTK+ 3.12
+
+M	src/gtk2_compat.c
+
+commit cb165fa7d646b1d0361773c0168189a4bc3f5cbb
+Author: David King <amigadave at amigadave.com>
+Date:	Mon Jul 14 08:56:03 2014 +0100
+
+    Convert XPM image data to PNG
+
+    Build PNG images into the easytag binary with GResource.
+
+M	Makefile.am
+M	TODO
+A	data/images/all-lowercase.png
+A	data/images/all-uppercase.png
+A	data/images/artist-album.png
+A	data/images/artist.png
+A	data/images/first-letter-uppercase-word.png
+A	data/images/first-letter-uppercase.png
+A	data/images/freedb.png
+A	data/images/gnudb.png
+A	data/images/invert-selection.png
+A	data/images/mask.png
+A	data/images/musicbrainz.png
+A	data/images/red-lines.png
+A	data/images/sequence-track.png
+A	data/images/unselect-all.png
+M	data/org.gnome.EasyTAG.gresource.xml
+D	data/pixmaps/all_downcase.xpm
+D	data/pixmaps/all_uppercase.xpm
+D	data/pixmaps/artist.xpm
+D	data/pixmaps/artist_album.xpm
+D	data/pixmaps/first_letter_uppercase.xpm
+D	data/pixmaps/first_letter_uppercase_word.xpm
+D	data/pixmaps/freedb.xpm
+D	data/pixmaps/gnudb.xpm
+D	data/pixmaps/invert_selection.xpm
+D	data/pixmaps/mask.xpm
+D	data/pixmaps/musicbrainz.xpm
+D	data/pixmaps/red_lines.xpm
+D	data/pixmaps/sequence_track.xpm
+D	data/pixmaps/unselect_all.xpm
+M	data/toolbar.ui
+M	src/application_window.c
+M	src/browser.c
+M	src/cddb_dialog.c
+M	src/easytag.c
+M	src/load_files_dialog.c
+M	src/misc.c
+M	src/misc.h
+M	src/scan_dialog.c
+
+commit 7a7aa3c05aefb83b77ca2836334119ea51247f12
+Author: David King <amigadave at amigadave.com>
+Date:	Mon Jul 14 07:12:49 2014 +0100
+
+    Use named icons instead of GtkStock in some places
+
+M	src/application_window.c
+M	src/load_files_dialog.c
+M	src/log.c
+M	src/playlist_dialog.c
+M	src/scan_dialog.c
+
+commit 348123b4d1c3c05775067644dcfa140b07a32905
+Author: David King <amigadave at amigadave.com>
+Date:	Sun Jul 13 22:42:50 2014 +0100
+
+    Use GAction for toolbar stop button
+
+M	Makefile.am
+M	TODO
+M	data/toolbar.ui
+M	src/application_window.c
+M	src/bar.c
+M	src/bar.h
+M	src/easytag.c
+D	src/ui_manager.h
+
+commit 4b7b43e806e860851e2e29946fbfb05873bc6f5c
+Author: David King <amigadave at amigadave.com>
+Date:	Sun Jul 13 21:39:24 2014 +0100
+
+    Remove now-unused UIManager proxy logic
+
+    It was used for showing tooltips of menu items in the status bar, but
+    GActions do not have tooltips so it is now useless.
+
+M	src/bar.c
+
+commit 7e75bfb710fba53d7672d98e8f168f9a7693cb92
+Author: David King <amigadave at amigadave.com>
+Date:	Sun Jul 13 21:36:14 2014 +0100
+
+    Use GMenuModel for popup menus
+
+M	data/menus.ui
+M	src/application_window.c
+M	src/application_window.h
+M	src/bar.c
+M	src/bar.h
+M	src/browser.c
+M	src/log.c
+M	src/log.h
+M	src/ui_manager.h
+
+commit bb4bb6ff064cb329dc0e954c606eb09df1536626
+Author: David King <amigadave at amigadave.com>
+Date:	Sun Jul 13 19:01:59 2014 +0100
+
+    Use GAction for file sorting mode GSetting
+
+M	data/menus.ui
+M	src/application_window.c
+M	src/bar.c
+M	src/bar.h
+M	src/ui_manager.h
+
+commit 4d24235a57f68b619ed0a6f7933bf7b9f6306902
+Author: David King <amigadave at amigadave.com>
+Date:	Sun Jul 13 18:25:14 2014 +0100
+
+    Use GAction for some view menu items
+
+    The sorting items remain.
+
+M	data/menus.ui
+M	data/toolbar.ui
+M	src/application_window.c
+M	src/application_window.h
+M	src/bar.c
+M	src/bar.h
+M	src/browser.c
+M	src/browser.h
+M	src/easytag.c
+M	src/easytag.h
+M	src/scan_dialog.c
+M	src/ui_manager.h
+
+commit f37c1b373e5ef5b12a7165cb49fd45712a6a210b
+Author: David King <amigadave at amigadave.com>
+Date:	Sun Jul 13 14:27:57 2014 +0100
+
+    Use GAction for file menu items
+
+M	data/menus.ui
+M	data/toolbar.ui
+M	src/application_window.c
+M	src/application_window.h
+M	src/bar.c
+M	src/bar.h
+M	src/browser.c
+M	src/easytag.h
+M	src/ui_manager.h
+
+commit 4bb620efac6fc25836fdb57a890e540975bfcd07
+Author: David King <amigadave at amigadave.com>
+Date:	Sun Jul 13 13:03:39 2014 +0100
+
+    Use GAction for edit menu items
+
+M	data/menus.ui
+M	data/toolbar.ui
+M	src/application_window.c
+M	src/application_window.h
+M	src/bar.c
+M	src/bar.h
+M	src/browser.c
+M	src/easytag.c
+M	src/easytag.h
+M	src/ui_manager.h
+
+commit 1c74e5a2ab8d5e360763e30c1af4509b98f30ef9
+Author: David King <amigadave at amigadave.com>
+Date:	Sun Jul 13 11:51:25 2014 +0100
+
+    Use GAction for browser menu items
+
+M	data/menus.ui
+M	src/application_window.c
+M	src/application_window.h
+M	src/bar.c
+M	src/bar.h
+M	src/ui_manager.h
+
+commit 459150ee208a69e45b9038349948bdaa009b8856
+Author: David King <amigadave at amigadave.com>
+Date:	Sun Jul 13 10:49:42 2014 +0100
+
+    Use GAction for go-file actions
+
+M	data/menus.ui
+M	data/toolbar.ui
+M	src/application_window.c
+M	src/application_window.h
+M	src/bar.c
+M	src/bar.h
+M	src/easytag.c
+M	src/easytag.h
+M	src/scan_dialog.c
+M	src/ui_manager.h
+
+commit 1a6030682b6735ba7f62c2182bb642ad4e8583d8
+Author: David King <amigadave at amigadave.com>
+Date:	Sun Jul 13 09:40:47 2014 +0100
+
+    Add toolbar for new GAction-using toolbar buttons
+
+M	data/org.gnome.EasyTAG.gresource.xml
+A	data/toolbar.ui
+M	po/POTFILES.in
+M	src/application_window.c
+
+commit aefd6df28edae8a17228db8916321dc6670294e4
+Author: David King <amigadave at amigadave.com>
+Date:	Sun Jul 13 09:15:58 2014 +0100
+
+    Use GAction for miscellaneous menu items
+
+    Move action state update function to EtApplicationWindow.
+
+M	data/menus.ui
+M	src/application_window.c
+M	src/application_window.h
+M	src/bar.c
+M	src/bar.h
+M	src/browser.c
+M	src/easytag.c
+M	src/easytag.h
+M	src/et_core.c
+M	src/scan_dialog.c
+M	src/ui_manager.h
+
+commit eb3749f03f93af0ca6c205fdfd49c37d9de2386b
+Author: David King <amigadave at amigadave.com>
+Date:	Sun Jul 13 00:01:35 2014 +0100
+
+    Use GAction for go-directory actions
+
+M	data/menus.ui
+M	src/application_window.c
+M	src/application_window.h
+M	src/bar.c
+M	src/bar.h
+M	src/browser.c
+M	src/browser.h
+M	src/ui_manager.h
+
+commit 0dda78be6afe9c2230d70eebaec9fe6df7dc66a6
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Jul 12 23:37:08 2014 +0100
+
+    Add skeleton menubar from GtkBuilder file
+
+    The menu items are still not linked to actions, so do nothing when
+    clicked.
+
+M	data/menus.ui
+M	src/application.c
+
+commit 8bad3a54238690fe4019bc495dc68cb39e31bf49
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Jul 12 22:31:04 2014 +0100
+
+    Add an app menu
+
+    Install application-wide actions for help, about and quit. Load
+    the app
+    menu from a resource.
+
+M	.gitignore
+M	Makefile.am
+M	README
+M	TODO
+M	configure.ac
+A	data/menus.ui
+A	data/org.gnome.EasyTAG.gresource.xml
+M	po/POTFILES.in
+M	src/application.c
+M	src/bar.c
+M	src/bar.h
+M	src/misc.c
+M	src/misc.h
+M	src/ui_manager.h
+
+commit 9ad562ab85cf6a43dc759c9600a23ba9de09519f
+Author: David King <amigadave at amigadave.com>
+Date:	Wed Jul 9 16:52:18 2014 +0100
+
+    Fix some const string warnings
+
+    Found with -Wwrite-strings and -Wcast-qual.
+
+M	nautilus-extension/nautilus-easytag.c
+M	src/cddb_dialog.c
+M	src/charset.c
+M	src/et_core.c
+M	src/et_core.h
+M	src/flac_tag.c
+M	src/genres.h
+M	src/id3_tag.c
+M	src/id3_tag.h
+M	src/id3v24_tag.c
+M	src/libapetag/apetaglib.c
+M	src/libapetag/apetaglib.h
+M	src/picture.c
+M	src/scan_dialog.c
+M	src/search_dialog.c
+M	src/vcedit.c
+
+commit ea136c0a0d604fc2d9356417fa1fbb5c44f1cd5a
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Jul 5 22:51:39 2014 +0100
+
+    Remove main configuration file handling
+
+    All user pereferences are now stored in GSettings. Mask lists
+    and combo
+    box histories are still stored in files.
+
+M	TODO
+M	data/org.gnome.EasyTAG.gschema.xml
+M	src/easytag.c
+M	src/preferences_dialog.c
+M	src/preferences_dialog.h
+M	src/setting.c
+M	src/setting.h
+
+commit 5526c15d83f189811805bb1b473389c73b5f0f6c
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Jul 5 22:35:38 2014 +0100
+
+    Launch default audio player for selected files
+
+M	src/browser.c
+M	src/misc.c
+M	src/misc.h
+
+commit 71865be60a9f3c3fed389b1f1930860dd8c131e5
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Jul 5 22:29:04 2014 +0100
+
+    Launch default audio player for directory
+
+    Use GAppInfo to discover the default player for the content type
+    of the
+    first file in the list, and play the files in the directory using that
+    player.
+
+M	src/misc.c
+
+commit bc6966ab68c277f4d8152a5909b9209075f5fc09
+Author: David King <amigadave at amigadave.com>
+Date:	Sun Jun 29 14:52:54 2014 +0100
+
+    Store default scanner masks in GSettings
+
+M	src/scan_dialog.c
+M	src/setting.c
+M	src/setting.h
+
+commit aa3daba3530d87cfe076c3fe1622e753c4b908ac
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Jun 28 19:11:38 2014 +0100
+
+    Remove local CDDB search function
+
+    It is very unlikely that people have a local copy of the CDDB, and the
+    settings code for this would be rather awkward.
+
+M	README
+M	data/org.gnome.EasyTAG.gschema.xml
+M	src/browser.c
+M	src/cddb_dialog.c
+M	src/preferences_dialog.c
+M	src/preferences_dialog.h
+M	src/setting.c
+M	src/setting.h
+
+commit 1333c077bde99041450b161d29eb4f78d2f6fb23
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Jun 28 17:33:14 2014 +0100
+
+    Store playlist mask preferences in GSettings
+
+M	src/application_window.c
+M	src/application_window.h
+M	src/playlist_dialog.c
+M	src/playlist_dialog.h
+M	src/setting.c
+M	src/setting.h
+
+commit 30f87f95264178603dbaf4e5f3492b62c160c7cf
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Jun 21 12:15:18 2014 +0100
+
+    Store character set preferences in GSettings
+
+M	data/org.gnome.EasyTAG.gschema.xml
+M	src/charset.c
+M	src/charset.h
+M	src/id3_tag.c
+M	src/id3v24_tag.c
+M	src/preferences_dialog.c
+M	src/preferences_dialog.h
+M	src/setting.c
+M	src/setting.h
+
+commit f475d5cfe21aafc3c5daf679dc36f0469dbf7147
+Author: David King <amigadave at amigadave.com>
+Date:	Sun Jun 15 16:35:20 2014 -0400
+
+    Store process fields conversions in GSettings
+
+M	data/org.gnome.EasyTAG.gschema.xml
+M	src/scan_dialog.c
+M	src/setting.c
+M	src/setting.h
+
+commit 6d475c8cb1d14b62258e9189273e874660423899
+Author: David King <amigadave at amigadave.com>
+Date:	Sun Jun 15 08:40:40 2014 -0400
+
+    Store CDDB search preferences in GSettings
+
+M	data/org.gnome.EasyTAG.gschema.xml
+M	src/cddb_dialog.c
+M	src/scan_dialog.c
+M	src/setting.c
+M	src/setting.h
+
+commit 377d9cfc63d3d74ead88cffe5874b0ab98083b19
+Author: David King <amigadave at amigadave.com>
+Date:	Sat May 10 20:49:46 2014 +0100
+
+    Store case sensitive sorting mode in GSettings
+
+M	src/cddb_dialog.c
+M	src/et_core.c
+M	src/preferences_dialog.c
+M	src/preferences_dialog.h
+M	src/setting.c
+M	src/setting.h
+
+commit bb1e71032bd6e8233054e32fbf3ff1e4b671d32e
+Author: David King <amigadave at amigadave.com>
+Date:	Sat May 10 18:01:09 2014 +0100
+
+    Store scan space conversion options in GSettings
+
+M	data/org.gnome.EasyTAG.gschema.xml
+M	src/playlist_dialog.c
+M	src/preferences_dialog.c
+M	src/preferences_dialog.h
+M	src/scan_dialog.c
+M	src/setting.c
+M	src/setting.h
+
+commit ac46a46cc4a36299ec37e5f24b4e6c85c64cc3a5
+Author: David King <amigadave at amigadave.com>
+Date:	Fri May 9 21:28:28 2014 +0100
+
+    Store ID3v2.4/2.3 preference in GSettings
+
+M	src/application_window.c
+M	src/browser.c
+M	src/id3_tag.c
+M	src/id3v24_tag.c
+M	src/preferences_dialog.c
+M	src/preferences_dialog.h
+M	src/setting.c
+M	src/setting.h
+
+commit 8f648daa84ca90e838e9250d1000486c023ede20
+Author: David King <amigadave at amigadave.com>
+Date:	Fri May 9 21:18:26 2014 +0100
+
+    Store disc padding preferences in GSettings
+
+M	data/org.gnome.EasyTAG.gschema.xml
+M	src/misc.c
+M	src/preferences_dialog.c
+M	src/preferences_dialog.h
+M	src/setting.c
+M	src/setting.h
+
+commit a8ccfd418bc934cec81ff150eaba4cf3970079fc
+Author: David King <amigadave at amigadave.com>
+Date:	Fri May 9 20:49:27 2014 +0100
+
+    Store the process fields option in GSettings
+
+M	data/org.gnome.EasyTAG.gschema.xml
+M	src/scan_dialog.c
+M	src/setting.c
+M	src/setting.h
+
+commit f0270a6923f1e3754031c285f517118e66286b5f
+Author: David King <amigadave at amigadave.com>
+Date:	Fri May 9 19:12:52 2014 +0100
+
+    Store rename filename encoding in GSettings
+
+M	data/org.gnome.EasyTAG.gschema.xml
+M	src/charset.c
+M	src/preferences_dialog.c
+M	src/preferences_dialog.h
+M	src/setting.c
+M	src/setting.h
+
+commit 02b5318650aff43f6bf83ee3cfde503e175093f5
+Author: David King <amigadave at amigadave.com>
+Date:	Fri May 9 18:57:54 2014 +0100
+
+    Store ID3v1 and ID3v2 iconv options in GSettings
+
+M	data/org.gnome.EasyTAG.gschema.xml
+M	src/id3_tag.c
+M	src/id3v24_tag.c
+M	src/preferences_dialog.c
+M	src/preferences_dialog.h
+M	src/setting.c
+M	src/setting.h
+
+commit 469140e2417e1734e08ae4ee30878dc6f1a24da7
+Author: David King <amigadave at amigadave.com>
+Date:	Fri May 9 18:28:14 2014 +0100
+
+    Store the playlist content mode in GSettings
+
+M	data/org.gnome.EasyTAG.gschema.xml
+M	src/playlist_dialog.c
+M	src/playlist_dialog.h
+M	src/setting.c
+M	src/setting.h
+
+commit fc3c397a342d38d4f74a112394c66345421daf5d
+Author: David King <amigadave at amigadave.com>
+Date:	Fri May 9 09:12:37 2014 +0100
+
+    Store the file extension case mode in GSettings
+
+M	data/org.gnome.EasyTAG.gschema.xml
+M	src/et_core.c
+M	src/preferences_dialog.c
+M	src/preferences_dialog.h
+M	src/setting.c
+M	src/setting.h
+
+commit 37555fc8c2c19f975adbd41e5aaf3c80a42f4340
+Author: David King <amigadave at amigadave.com>
+Date:	Thu May 8 23:18:31 2014 +0100
+
+    Store the scanner window mode in GSettings
+
+M	data/org.gnome.EasyTAG.gschema.xml
+M	src/application_window.c
+M	src/bar.c
+M	src/scan_dialog.c
+M	src/scan_dialog.h
+M	src/setting.c
+M	src/setting.h
+
+commit 7470a291a406d70cd472dbdd5254ff25ccf8c0a7
+Author: David King <amigadave at amigadave.com>
+Date:	Thu May 8 08:26:21 2014 +0100
+
+    Store the file list sorting mode in GSettings
+
+M	Makefile.am
+M	data/org.gnome.EasyTAG.gschema.xml
+M	src/application_window.c
+M	src/bar.c
+M	src/browser.c
+M	src/et_core.c
+M	src/et_core.h
+M	src/preferences_dialog.c
+M	src/preferences_dialog.h
+M	src/setting.c
+M	src/setting.h
+
+commit af6793e0b2a8332ad9cfe23f71becc93370637ee
+Author: David King <amigadave at amigadave.com>
+Date:	Tue Mar 26 10:46:15 2013 +0000
+
+    Generate GSettings enum descriptions
+
+M	.gitignore
+M	Makefile.am
+
+commit 7418209c1cf136ece89635dcc011e81c9bfcb872
+Author: David King <amigadave at amigadave.com>
+Date:	Sun Mar 24 19:49:29 2013 +0000
+
+    Generate enum descriptions with glib-mkenums
+
+M	.gitignore
+M	Makefile.am
+M	configure.ac
+
+commit 528ff19b95f9dae7bbae71052c1d80166b96f400
+Author: David King <amigadave at amigadave.com>
+Date:	Wed May 7 23:22:12 2014 +0100
+
+    Use GSettings for most application settings
+
+M	README
+M	src/application_window.c
+M	src/bar.c
+M	src/browser.c
+M	src/cddb_dialog.c
+M	src/easytag.c
+M	src/et_core.c
+M	src/flac_tag.c
+M	src/id3_tag.c
+M	src/id3v24_tag.c
+M	src/load_files_dialog.c
+M	src/load_files_dialog.h
+M	src/log.c
+M	src/misc.c
+M	src/ogg_tag.c
+M	src/playlist_dialog.c
+M	src/preferences_dialog.c
+M	src/preferences_dialog.h
+M	src/scan_dialog.c
+M	src/search_dialog.c
+M	src/setting.c
+M	src/setting.h
+
+commit b42a637b02f85d5ebcc4d97880ce7f52ca7fb2fb
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Feb 16 22:52:59 2013 +0000
+
+    Add GSettings schema
+
+    Leave the keys that depend on enums and flags commented for now,
+    as the
+    enum values need to be generated with glib-mkenums.
+
+M	.gitignore
+M	Makefile.am
+M	configure.ac
+A	data/org.gnome.EasyTAG.gschema.xml
+M	po/POTFILES.in
+
+commit 8f9e6db84f2a934ee577e7518503cf725fdafd98
+Author: Santtu Lakkala <inz at inz.fi>
+Date:	Thu Apr 24 08:48:52 2014 +0300
+
+    Avoid a GtkApplication assertion
+
+    Realizaing an application window during construction triggers an
+    assertion with older versions of GTK+, and a warning with newer
+    ones, so
+    only show the window after it has been associated with the
+    application.
+
+M	src/application_window.c
+M	src/easytag.c
+
+commit 7483788b155b50dc4ba5ff84f3a8d3647213a248
+Author: David King <amigadave at amigadave.com>
+Date:	Wed Feb 12 23:06:30 2014 +0000
+
+    Move browser to EtBrowser object
+
+M	TODO
+M	src/application_window.c
+M	src/application_window.h
+M	src/bar.c
+M	src/browser.c
+M	src/browser.h
+M	src/cddb_dialog.c
+M	src/easytag.c
+M	src/easytag.h
+M	src/et_core.c
+M	src/load_files_dialog.c
+M	src/misc.c
+M	src/misc.h
+M	src/playlist_dialog.c
+M	src/scan_dialog.c
+M	src/scan_dialog.h
+M	src/search_dialog.c
+M	src/setting.c
+
+commit 0086beb5fc89026469f2c775984e75dd270c73fd
+Author: David King <amigadave at amigadave.com>
+Date:	Mon Jan 20 21:08:13 2014 +0000
+
+    Set a rough initial window size and pane positions
+
+M	src/application_window.c
+M	src/browser.c
+
+commit 97f7b0824b837458fe7061c6882cb6fe8364a287
+Author: David King <amigadave at amigadave.com>
+Date:	Sun Jan 5 22:08:21 2014 +0000
+
+    Move file selection actions to EtApplicationWindow
+
+M	src/application_window.c
+M	src/application_window.h
+M	src/bar.c
+M	src/easytag.c
+M	src/easytag.h
+
+commit 3c4b5591369f3259458a82d3a66849389fb28694
+Author: David King <amigadave at amigadave.com>
+Date:	Sun Jan 5 21:49:55 2014 +0000
+
+    Move select and unselect actions to main window
+
+M	src/application_window.c
+M	src/application_window.h
+M	src/bar.c
+M	src/browser.c
+M	src/easytag.c
+M	src/easytag.h
+
+commit f2099fd2ba459522c3961c0c0e032e3340020187
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Jan 4 15:34:45 2014 +0000
+
+    Replace strncat() with g_string_append()
+
+M	src/cddb_dialog.c
+
+commit 5e019e0c3b5a41097ee52601748c8ca573415bb0
+Author: David King <amigadave at amigadave.com>
+Date:	Sun Dec 29 23:15:26 2013 +0000
+
+    Move scan dialog to EtScanDialog object
+
+M	TODO
+M	src/application_window.c
+M	src/application_window.h
+M	src/bar.c
+M	src/browser.c
+M	src/cddb_dialog.c
+M	src/easytag.c
+M	src/easytag.h
+M	src/load_files_dialog.c
+M	src/misc.c
+M	src/playlist_dialog.c
+M	src/preferences_dialog.c
+M	src/scan.h
+M	src/scan_dialog.c
+M	src/scan_dialog.h
+M	src/search_dialog.c
+M	src/setting.c
+M	src/setting.h
+
+commit f21de23ab08aa4b77ab3ee6cda44abeea4ab226e
+Author: David King <amigadave at amigadave.com>
+Date:	Sun Dec 29 16:41:51 2013 +0000
+
+    Move CDDB dialog to EtCDDBDialog object
+
+M	Makefile.am
+M	po/POTFILES.in
+M	src/application_window.c
+M	src/application_window.h
+M	src/bar.c
+R062	src/cddb.c	src/cddb_dialog.c
+R053	src/cddb.h	src/cddb_dialog.h
+M	src/easytag.c
+M	src/preferences_dialog.c
+M	src/setting.c
+M	src/setting.h
+
+commit ca54f878fa0c72e305a4bb45599db9521e9d1211
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Dec 28 13:02:10 2013 +0000
+
+    Move preferences dialog to EtPreferencesDialog
+
+M	Makefile.am
+M	po/POTFILES.in
+M	src/application_window.c
+M	src/application_window.h
+M	src/bar.c
+M	src/easytag.c
+M	src/misc.c
+R090	src/prefs.c	src/preferences_dialog.c
+R068	src/prefs.h	src/preferences_dialog.h
+M	src/scan_dialog.c
+M	src/setting.c
+
+commit 393ac7d534e0f88d740882618b7fea11787d5ce9
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Dec 28 01:31:11 2013 +0000
+
+    Move file search dialog to EtSearchDialog object
+
+M	Makefile.am
+M	po/POTFILES.in
+M	src/application_window.c
+M	src/application_window.h
+M	src/bar.c
+M	src/misc.c
+M	src/misc.h
+C050	src/misc.c	src/search_dialog.c
+A	src/search_dialog.h
+M	src/setting.c
+M	src/setting.h
+
+commit 02a468858418f65113cb627307f362c8fcf5eb34
+Author: David King <amigadave at amigadave.com>
+Date:	Fri Dec 27 23:54:21 2013 +0000
+
+    Move load filenames dialog to EtLoadFilesDialog
+
+M	Makefile.am
+M	po/POTFILES.in
+M	src/application_window.c
+M	src/application_window.h
+M	src/bar.c
+A	src/load_files_dialog.c
+A	src/load_files_dialog.h
+M	src/misc.c
+M	src/misc.h
+M	src/setting.c
+M	src/setting.h
+
+commit 092f7f866fba22b43b6b58fd7aa7edebb3a02aed
+Author: David King <amigadave at amigadave.com>
+Date:	Fri Dec 27 19:56:40 2013 +0000
+
+    Move playlist window to EtPlaylistDialog object
+
+M	Makefile.am
+M	po/POTFILES.in
+M	src/application_window.c
+M	src/application_window.h
+M	src/bar.c
+M	src/misc.c
+M	src/misc.h
+A	src/playlist_dialog.c
+A	src/playlist_dialog.h
+M	src/setting.c
+M	src/setting.h
+
+commit d3e0bc946da79f320164b18618fb8a1aefa74a03
+Author: David King <amigadave at amigadave.com>
+Date:	Mon Nov 4 22:27:57 2013 +0000
+
+    Move log area to EtLogArea object
+
+M	src/application_window.c
+M	src/application_window.h
+M	src/bar.c
+M	src/easytag.c
+M	src/log.c
+M	src/log.h
+
+commit bbdcd0f5c7eba65b26cc8c8c0fce4cbe1a363139
+Author: David King <amigadave at amigadave.com>
+Date:	Fri Dec 27 18:32:49 2013 +0000
+
+    Pass the main window to actions as user data
+
+M	src/bar.c
+
+commit 1210ec5650561895d2c702fd43dc949b6f82c706
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Nov 2 21:33:18 2013 +0000
+
+    Move main window to EtApplicationWindow object
+
+M	Makefile.am
+M	po/POTFILES.in
+M	src/application.h
+A	src/application_window.c
+A	src/application_window.h
+M	src/bar.c
+M	src/bar.h
+M	src/browser.c
+M	src/easytag.c
+M	src/easytag.h
+M	src/et_core.c
+M	src/setting.c
+M	src/setting.h
+
+commit fa6c4f6058c72afd9dabbb78bf0e10ad212b7b53
+Author: Marek Černocký <marek at manet.cz>
+Date:	Tue Aug 26 09:30:07 2014 +0200
+
+    Fixed format specifiers order
+
+M	help/C/scanner.page
+
+commit a9bd9d5bcb16c775bcb998b4ea1258a2cd6c2009
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Aug 9 19:57:09 2014 +0100
+
+    Fix format specifier in GIO C++ wrapper string
+
+M	src/gio_wrapper.cc
+
+commit 71bfad9d9ba587ee13141f9c695367ac98011e84
+Author: David King <amigadave at amigadave.com>
+Date:	Fri Aug 15 18:45:57 2014 +0100
+
+    Use updated license tags in AppData
+
+M	data/easytag.appdata.xml.in
+
+commit 229ab9c33e732d18424de42c3ff8ea6dec66778e
+Author: David King <amigadave at amigadave.com>
+Date:	Wed Jul 30 14:41:49 2014 +0200
+
+    Fix delays when clearing the CDDB models
+
+    Avoid accessing deleted rows in the tree view selection changed
+    handlers, by blocking the handlers when clearing the
+    models. Otherwise,
+    each release in the list of search results being deleted would be
+    fetched from the server and then immediately discarded.
+
+M	src/cddb.c
+
+commit a9a575e4b6c23c1e575132e4ac566698d979e22b
+Author: David King <amigadave at amigadave.com>
+Date:	Sun Aug 10 12:32:43 2014 +0100
+
+    Fix scanner help for renaming files
+
+M	help/C/file-rename.page
+
+commit aafa2f280cd38621835c8919315d07165639a0db
+Author: David King <amigadave at amigadave.com>
+Date:	Fri Aug 1 17:34:24 2014 +0100
+
+    Provide a useful error when failing to write files
+
+    Pass an error back from ET_Save_File_Tag_To_HD() to ensure that
+    a useful
+    error message is presented to the user. Provide a sane fallback if the
+    tag writing function does not provide a GError API (currently all
+    non-Ogg formats).
+
+    https://bugzilla.gnome.org/show_bug.cgi?id=733929
+
+M	src/easytag.c
+M	src/et_core.c
+M	src/et_core.h
+
+commit 1ae7485be4a6a5d8139e58e42f3a31932c3b0885
+Author: Piotr DrÄ…g <piotrdrag at gmail.com>
+Date:	Thu Jul 31 05:24:47 2014 +0200
+
+    doap: add app category to pass the validation
+
+M	easytag.doap
+
+commit 9295b8f6f91e08b707405ad1ef2877be4e6b0756
+Author: Piotr DrÄ…g <piotrdrag at gmail.com>
+Date:	Thu Jul 31 05:21:30 2014 +0200
+
+    doap: fix duplicate <programming-language>
+
+M	easytag.doap
+
+commit ef9c43474c36c7660e67420bba514559bf7163a3
+Author: David King <amigadave at amigadave.com>
+Date:	Wed Jul 30 11:58:38 2014 +0200
+
+    Fix crash when reloading the directory tree
+
+    As the directory is cleared during reloading, the selection changes
+    and
+    this leads to a crash when a directory in the tree is deleted
+    outside of
+    EasyTAG. Avoid the changed signal being emitted by clearing the
+    directory tree only when the signal is blocked.
+
+    https://bugzilla.redhat.com/show_bug.cgi?id=1121142
+
+M	src/browser.c
+
+commit 31e4167e9aab1229cf7b2ec6e9352232b1a84be7
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Jul 19 21:09:57 2014 +0100
+
+    Fix return type of init idle handler
+
+    The return type of a GSourceFunc is a gboolean.
+
+M	src/easytag.c
+
+commit 9956e8ee78638e5be289ee34418f69f3eef8f96e
+Author: David King <amigadave at amigadave.com>
+Date:	Sun Jul 13 21:42:19 2014 +0100
 
-    Updated Indonesian translation
+    Remove last uses of GdkColor, use GdkRGBA instead
 
-M	po/id.po
+M	src/browser.c
+M	src/cddb.c
 
-commit 57152f6af96d7c3eb5becb9d68fa5170b28858f7
-Author: Marek Černocký <marek at manet.cz>
-Date:	Tue Aug 26 09:30:07 2014 +0200
+commit 43d6740afba208b3e9687055ee9031347aef44c3
+Author: David King <amigadave at amigadave.com>
+Date:	Wed Jul 9 15:47:57 2014 +0100
 
-    Fixed format specifiers order
+    Fix Spanish help translation
 
-M	help/C/scanner.page
+M	help/es/es.po
 
-commit 3bc950f9ddd9ba1fa2499395808d89a2c8d72c31
-Author: David King <amigadave at amigadave.com>
-Date:	Fri Aug 15 18:45:57 2014 +0100
+commit 0a91ff23ba5b30d42b9ab19a8767a12265f4cb39
+Author: Daniel Mustieles <dnaiel.mustieles at gmail.com>
+Date:	Tue Jul 8 17:47:48 2014 +0200
 
-    Use updated license tags in AppData
+    Updated Spanish translation
 
-M	data/easytag.appdata.xml.in
+M	help/es/es.po
 
-commit 930158e964b57e123fedb8fe37fc8a1f4eb56250
+commit ef139130cb7aa9ec0e1e4c547e8e1d3c18a12612
 Author: David King <amigadave at amigadave.com>
-Date:	Wed Jul 30 14:41:49 2014 +0200
+Date:	Fri Jul 4 21:59:18 2014 +0100
 
-    Fix delays when clearing the CDDB models
+    Avoid use of deprecated foreground-gdk property
 
-    Avoid accessing deleted rows in the tree view selection changed
-    handlers, by blocking the handlers when clearing the
-    models. Otherwise,
-    each release in the list of search results being deleted would be
-    fetched from the server and then immediately discarded.
+    Use new foreground-rgba property instead.
 
+M	src/browser.c
 M	src/cddb.c
+M	src/et_core.c
+M	src/et_core.h
+M	src/misc.c
 
-commit 77347d26ad6ed0f08f93742f0abb4871d95407f8
+commit 16ed7412860957a5bfbcda7a6a1593465dbeb7a8
 Author: David King <amigadave at amigadave.com>
-Date:	Sun Aug 10 12:32:43 2014 +0100
+Date:	Fri Jul 4 21:39:43 2014 +0100
 
-    Fix scanner help for renaming files
+    Avoid use of deprecated background-gdk property
 
-M	help/C/file-rename.page
+    Use new background-rgba property instead.
+
+M	src/browser.c
+M	src/et_core.c
+M	src/et_core.h
 
-commit 4288ddf6c7c5b09d352cdce784088e263d332501
+commit 186360c1e3b507c6381115b90d4eb6ce97c2d6e1
 Author: David King <amigadave at amigadave.com>
-Date:	Fri Aug 1 17:34:24 2014 +0100
+Date:	Fri Jul 4 16:33:32 2014 +0100
 
-    Provide a useful error when failing to write files
+    Remove unused columns from log model
 
-    Pass an error back from ET_Save_File_Tag_To_HD() to ensure that
-    a useful
-    error message is presented to the user. Provide a sane fallback if the
-    tag writing function does not provide a GError API (currently all
-    non-Ogg formats).
+    The foreground and background were never set to anything other
+    than the
+    default.
 
-    https://bugzilla.gnome.org/show_bug.cgi?id=733929
+M	src/log.c
+
+commit 1db350b3ab9d64cbefef822cd6d1faf7b21ac452
+Author: David King <amigadave at amigadave.com>
+Date:	Fri Jul 4 16:32:24 2014 +0100
+
+    Remove unused GdkColor definitions
 
-M	src/easytag.c
 M	src/et_core.c
 M	src/et_core.h
 
-commit 4e75b922da6bac1c60cb1f4965d4eaf2a34e8aac
+commit 1c3316fc22dea1f460650cfa4701736814b905de
 Author: David King <amigadave at amigadave.com>
-Date:	Wed Jul 30 11:58:38 2014 +0200
+Date:	Fri Jun 27 21:57:53 2014 +0100
 
-    Fix crash when reloading the directory tree
+    Update SOURCES as all MingW packages are in Fedora
 
-    As the directory is cleared during reloading, the selection changes
-    and
-    this leads to a crash when a directory in the tree is deleted
-    outside of
-    EasyTAG. Avoid the changed signal being emitted by clearing the
-    directory tree only when the signal is blocked.
+M	SOURCES
 
-    https://bugzilla.redhat.com/show_bug.cgi?id=1121142
+commit cfc015270b8750f12cf7bbff11acf9145053bed9
+Author: Balázs Úr <urbalazs at src.gnome.org>
+Date:	Mon Jun 30 22:23:30 2014 +0200
 
-M	src/browser.c
+    Updated Hungarian translation
 
-commit c392b0b4500ae6b4dbf1fb3c302b7e0ae19bbfaf
-Author: Daniel Mustieles <dnaiel.mustieles at gmail.com>
-Date:	Fri Jul 4 13:09:08 2014 +0200
+M	po/hu.po
 
-    Updated Spanish translation
+commit 787e4b2e65f56918c6f0ea5584c366fa73e7dc76
+Author: genodeftest <gnomel10n at genodeftest.de>
+Date:	Sun Jun 29 20:10:38 2014 +0000
 
-M	help/es/es.po
+    Updated German translation
 
-commit c60601952180de9cec72bbeace1b0846da263313
-Author: Daniel Mustieles <dnaiel.mustieles at gmail.com>
-Date:	Fri Jul 4 12:39:12 2014 +0200
+M	po/de.po
 
-    Updated Spanish Translation
+commit 8b0617b8fdb8109fb99866cba0c0c3a0f5d5bf53
+Author: Marek Černocký <marek at manet.cz>
+Date:	Wed Jun 25 11:32:07 2014 +0200
 
-M	help/Makefile.am
-A	help/es/es.po
+    Updated Czech translation
+
+M	po/cs.po
 
-commit 3f9cc8f08f426701f055ae49b0bc32f25f2f6dbd
+commit 7cfd7716b3582450b4f020e3dd602ab1688ec36e
 Author: David King <amigadave at amigadave.com>
-Date:	Sun Jun 22 22:21:42 2014 +0100
+Date:	Thu Jun 12 12:31:03 2014 +0100
 
-    Update NEWS for 2.2.3 release
+    Update NEWS for future 2.3.1 release
 
 M	NEWS
-M	SOURCES
 M	configure.ac
 
-commit f312ed2108d695ed2b4c120e76cd1c092f935e14
+commit dd71f05ffc398def4c8998ec8075ee806c9986f7
 Author: David King <amigadave at amigadave.com>
 Date:	Sun Jun 22 14:58:53 2014 +0100
 
@@ -170,7 +2903,7 @@ Date:	Sun Jun 22 14:58:53 2014 +0100
 
 M	easytag-win32-installer.nsi.in
 
-commit 4ab9eae19f85f9cbabaf4f521e09c6ee4ebf87d6
+commit 0d65c5a4599e57d70eec8cbd0f22d93f7cac8929
 Author: David King <amigadave at amigadave.com>
 Date:	Sun Jun 22 14:27:28 2014 +0100
 
@@ -178,7 +2911,7 @@ Date:	Sun Jun 22 14:27:28 2014 +0100
 
 M	easytag-win32-installer.nsi.in
 
-commit 6b622a634f22c7cb21db5357819de764aeeeffde
+commit 4c4d312ebd32832a24133893eff41ee46f6ca603
 Author: Andreas Winkelmann <ml at awinkelmann.de>
 Date:	Fri Jun 20 02:20:33 2014 +0200
 
@@ -197,7 +2930,7 @@ M	src/browser.c
 M	src/browser.h
 M	src/et_core.c
 
-commit 0b5a09ac4321479d52eb4ef031f908fab9d0d6d1
+commit 8ca5776f4517de59cf4cea9cc1e6a55b3985058a
 Author: Andreas Winkelmann <ml at awinkelmann.de>
 Date:	Fri Jun 6 23:10:42 2014 +0100
 
@@ -213,7 +2946,7 @@ Date:	Fri Jun 6 23:10:42 2014 +0100
 M	src/browser.c
 M	src/browser.h
 
-commit 4d6bb1e0b59fdaefbfb9b61f54dcaaa0da1e4c61
+commit 2e244aa3ec3ca6ad39fa88e297f2eb5743ecacf7
 Author: Andreas Winkelmann <ml at awinkelmann.de>
 Date:	Mon May 26 17:00:59 2014 +0200
 
@@ -231,15 +2964,121 @@ M	src/browser.c
 M	src/browser.h
 M	src/et_core.c
 
-commit 19f095b04b07174f24fd5097e771bbd160d44f7b
-Author: MarMav <mavridou at gmail.com>
-Date:	Fri Jun 13 12:41:49 2014 +0000
+commit 3a969918db8cff0a3cefa1195fbd2f79eb4467d2
+Author: Piotr DrÄ…g <piotrdrag at gmail.com>
+Date:	Thu Jun 19 16:48:26 2014 +0200
+
+    Updated Polish translation
+
+M	po/pl.po
+
+commit 34e9d3238ff0d2481c2e2324c576ec019bfbca0f
+Author: Daniel Mustieles <dnaiel.mustieles at gmail.com>
+Date:	Tue Jun 17 19:41:55 2014 +0200
+
+    Updated Spanish Translation
+
+M	help/Makefile.am
+A	help/es/es.po
+
+commit 3d6506bb43922a01141b793d87c5fe3f0fc98aab
+Author: Daniel Mustieles <dnaiel.mustieles at gmail.com>
+Date:	Tue Jun 17 19:20:04 2014 +0200
+
+    Updated Spanish translation
+
+M	po/es.po
+
+commit 4ffd740dcbcac16d3e814d5609446d81d608986c
+Author: Rafael Ferreira <rafael.f.f1 at gmail.com>
+Date:	Mon Jun 16 13:21:07 2014 +0000
+
+    Updated Brazilian Portuguese translation
+
+M	po/pt_BR.po
+
+commit 8722f83eb5212835a912df9b3c868990a459745f
+Author: Tom Tryfonidis <tomtryf at gmail.com>
+Date:	Fri Jun 13 12:41:58 2014 +0000
 
     Updated Greek translation
 
 M	po/el.po
 
-commit 734fbc37e3f5b77c16d2ada563afbe6581dbf731
+commit 25807e575343f117b5fff4824467ff1f2bf6c376
+Author: David King <amigadave at amigadave.com>
+Date:	Wed Jun 11 22:00:01 2014 +0100
+
+    Update British English translation
+
+M	po/en_GB.po
+
+commit 19fbfca6f7b01d8ccf0c49aea31c0c09ec4b3122
+Author: David King <amigadave at amigadave.com>
+Date:	Wed Jun 11 20:06:08 2014 +0100
+
+    Add generated help translations to .gitignore
+
+M	.gitignore
+
+commit 9dbe534dd0599ede2bd4a2a27d0add8fb404ac2b
+Author: David King <amigadave at amigadave.com>
+Date:	Wed Jun 11 20:01:55 2014 +0100
+
+    Initialize gettext in Nautilus extension startup
+
+M	nautilus-extension/nautilus-easytag.c
+
+commit 0b38bdc30c4cd8ece99d4893d63b60dfcc3e204e
+Author: David King <amigadave at amigadave.com>
+Date:	Wed Jun 11 19:56:54 2014 +0100
+
+    Use type definition macro for Nautilus extension
+
+    Use G_DEFINE_DYNAMIC_TYPE_EXTENDED for the Nautilus extension,
+    and move
+    all the code into a single file as a consequence.
+
+M	Makefile.am
+D	nautilus-extension/easytag-module.c
+M	nautilus-extension/nautilus-easytag.c
+D	nautilus-extension/nautilus-easytag.h
+
+commit 16ec19b447e661e333a73b1797118619ae11923f
+Author: David King <amigadave at amigadave.com>
+Date:	Wed Jun 11 18:25:20 2014 +0100
+
+    Minor improvements to the Nautilus extension
+
+    Document the requirements for the extension in the README. Add a
+    COPYING.GPL3, as including the license is a requirement. Update
+    .gitignore for new files.
+
+M	.gitignore
+A	COPYING.GPL3
+M	Makefile.am
+M	README
+
+commit 145685dbdc6c5ab6654600b908c272a3829863bb
+Author: Victor A. Santos <victoraur.santos at gmail.com>
+Date:	Wed Jun 11 13:01:56 2014 -0300
+
+    Add Nautilus actions extension
+
+    Include a context menu item for opening directories, and one for
+    opening
+    supported files, in a Nautilus extension.
+
+    https://bugzilla.gnome.org/show_bug.cgi?id=731493
+
+M	Makefile.am
+M	configure.ac
+A	nautilus-extension/easytag-module.c
+A	nautilus-extension/nautilus-easytag.c
+A	nautilus-extension/nautilus-easytag.h
+M	po/POTFILES.in
+
+commit 03b67ff6523cb3a5c39443ac62f1f0d224a669c5
 Author: David King <amigadave at amigadave.com>
 Date:	Sat Jun 7 11:18:58 2014 +0100
 
@@ -249,7 +3088,17 @@ Date:	Sat Jun 7 11:18:58 2014 +0100
 
 M	src/scan_dialog.c
 
-commit d8e248b3e875ccb4cde0661f6c8e11c61928fbf2
+commit 311de7ef375a9a8542018be8694deb6334e31ac6
+Author: Andreas Winkelmann <ml at awinkelmann.de>
+Date:	Mon May 26 18:22:12 2014 +0200
+
+    Refactor Browser_List_Refresh_File_In_List()
+
+    Simplify iterations over the tree model.
+
+M	src/browser.c
+
+commit 45538c78fec6a48585b7f0183f902ff57f4fd0ff
 Author: Brad Erickson <eosrei at gmail.com>
 Date:	Mon May 26 00:08:49 2014 +0800
 
@@ -260,23 +3109,7 @@ Date:	Mon May 26 00:08:49 2014 +0800
 M	src/et_core.c
 M	src/et_core.h
 
-commit e7e7229933930930cec3e5fee92aba470c60abe7
-Author: Changwoo Ryu <cwryu at debian.org>
-Date:	Sun May 18 08:15:51 2014 +0900
-
-    Add Korean to the translation list
-
-M	po/LINGUAS
-
-commit d084151cba8fcf9b0b18878298a6a65f7b22fb50
-Author: Seong-ho Cho <darkcircle.0426 at gmail.com>
-Date:	Sun May 18 08:14:39 2014 +0900
-
-    Added Korean translation
-
-A	po/ko.po
-
-commit b60e4ac08252861be1f25517094ea49b8f3e7bb8
+commit 4bfe75daa174c6211e9f01e72c6d06c2051a2db2
 Author: David King <amigadave at amigadave.com>
 Date:	Sun May 18 14:24:45 2014 +0100
 
@@ -291,26 +3124,23 @@ Date:	Sun May 18 14:24:45 2014 +0100
 
 M	src/browser.c
 
-commit ba3cf74a25a0af427fa90f0bd51f8e810d35ddf1
-Author: Мирослав Николић <miroslavnikolic at rocketmail.com>
-Date:	Tue May 13 19:28:30 2014 +0200
+commit eb35be3db766ab55b95a1c74c9011a9e50c60c9c
+Author: Changwoo Ryu <cwryu at debian.org>
+Date:	Sun May 18 08:15:51 2014 +0900
 
-    Updated Serbian translation
+    Add Korean to the translation list
 
-M	po/sr.po
-M	po/sr at latin.po
+M	po/LINGUAS
 
-commit d08163717ab70961cd570a00c6da66067436342e
-Author: David King <amigadave at amigadave.com>
-Date:	Fri May 9 17:23:55 2014 +0100
+commit d7d1e95e1830bdfb4afd4b86ab39afefc77cf10d
+Author: Seong-ho Cho <darkcircle.0426 at gmail.com>
+Date:	Sun May 18 08:14:39 2014 +0900
 
-    Update NEWS for 2.2.2 release
+    Added Korean translation
 
-M	NEWS
-M	SOURCES
-M	configure.ac
+A	po/ko.po
 
-commit 04447b1ef7588cac207badf6ff8264a0a8684235
+commit 986b8f5a54fa6b83be29e2d27e85a0ddd4dbf270
 Author: David King <amigadave at amigadave.com>
 Date:	Fri May 9 17:21:13 2014 +0100
 
@@ -318,7 +3148,7 @@ Date:	Fri May 9 17:21:13 2014 +0100
 
 M	easytag-win32-installer.nsi.in
 
-commit 63e9d30cc082e9b88bf5b86a2ce24e3e176e6692
+commit 95c31f5f2d517ce41987e5d3805f9d2dc3d2dcad
 Author: David King <amigadave at amigadave.com>
 Date:	Fri May 9 16:34:00 2014 +0100
 
@@ -328,7 +3158,7 @@ Date:	Fri May 9 16:34:00 2014 +0100
 
 M	src/id3_tag.c
 
-commit ac5d789fc676de790f79511c66fcab96865375fd
+commit 130296b3ec381439b06691d226d1d1388661dd29
 Author: David King <amigadave at amigadave.com>
 Date:	Mon May 5 18:56:34 2014 +0100
 
@@ -341,7 +3171,7 @@ Date:	Mon May 5 18:56:34 2014 +0100
 
 M	src/id3v24_tag.c
 
-commit 36080a58642892fa9309595e820fbb887ad4d21f
+commit 027fd46e997a1ed9a3b44f54b97e95e567319ae9
 Author: David King <amigadave at amigadave.com>
 Date:	Mon May 5 18:29:47 2014 +0100
 
@@ -351,7 +3181,7 @@ Date:	Mon May 5 18:29:47 2014 +0100
 
 M	src/genres.h
 
-commit 6c2652fc17fa67514efc3056e229e2b13bfeda47
+commit 1d74ec2ed1b51aa69e7cfc2f6c5e69e51a67f2fe
 Author: Andreas Winkelmann <ml at awinkelmann.de>
 Date:	Mon May 5 10:39:14 2014 +0100
 
@@ -359,16 +3189,16 @@ Date:	Mon May 5 10:39:14 2014 +0100
 
 M	src/id3v24_tag.c
 
-commit 0cd17f3ca47c956d6407d97b5c8b668999261eca
+commit 5234d4a07cc091cecd8c8c7383db66ed914b924d
 Author: Dimitris Spingos <dmtrs32 at gmail.com>
-Date:	Mon May 5 07:36:30 2014 +0300
+Date:	Mon May 5 07:31:47 2014 +0300
 
     Added Greek translation of help
 
 M	help/Makefile.am
 A	help/el/el.po
 
-commit a47bd70e658a0a4bb610669a59157e8d70d973fe
+commit 0dc1d66d4035830537d55606e257511009e5083f
 Author: David King <amigadave at amigadave.com>
 Date:	Sun May 4 10:32:03 2014 +0100
 
@@ -376,7 +3206,7 @@ Date:	Sun May 4 10:32:03 2014 +0100
 
 M	src/ogg_tag.c
 
-commit dc074036a1ec1217fdd1e9a942e7e120e7523b84
+commit 7542ad103a7280d783de5379f9214d61472e92f9
 Author: David King <amigadave at amigadave.com>
 Date:	Sun May 4 09:59:10 2014 +0100
 
@@ -386,16 +3216,15 @@ Date:	Sun May 4 09:59:10 2014 +0100
 
 M	src/ogg_tag.c
 
-commit 5b5c7b27362f646b9277300d70c3bd09e4852094
-Author: Andika Triwidada <andika at gmail.com>
-Date:	Sun May 4 00:36:03 2014 +0000
+commit ce47170805528bf6db7c5f102f91b9549d96da1f
+Author: Marek Černocký <marek at manet.cz>
+Date:	Sat Apr 26 14:12:10 2014 +0200
 
-    Added Indonesian translation
+    Updated Czech translation
 
-M	po/LINGUAS
-A	po/id.po
+M	po/cs.po
 
-commit 7b5bfab07d12cebc2f816a1e8ecd7dabfac75973
+commit 70d02c0e9ff7d6c67cb95bbe66ce801d09d9b995
 Author: David King <amigadave at amigadave.com>
 Date:	Sat Apr 26 08:57:24 2014 +0100
 
@@ -408,7 +3237,7 @@ Date:	Sat Apr 26 08:57:24 2014 +0100
 
 M	src/picture.c
 
-commit 8e5276e99e1538196fda945577ccee1de90bc3ba
+commit 501b11256e7d8e4146d65a15c1040cc43db7eb59
 Author: David King <amigadave at amigadave.com>
 Date:	Sat Apr 26 09:19:26 2014 +0100
 
@@ -419,7 +3248,17 @@ Date:	Sat Apr 26 09:19:26 2014 +0100
 
 M	src/easytag.c
 
-commit 7f8dfb1383615a09e52351981c035a882609e0b3
+commit cf47915b455c1eb6b102173a8cdb4e84b08dadf1
+Author: kipw <kip at thevertigo.com>
+Date:	Fri Apr 25 15:10:38 2014 -0700
+
+    configure.ac: Bump version to 2.2.1...
+    NEWS: Added 2.2.1 changes since 2.2.0...
+
+M	NEWS
+M	configure.ac
+
+commit 13625dce72a52b63d35c94b3b22ebec4ec691787
 Author: David King <amigadave at amigadave.com>
 Date:	Wed Apr 23 12:52:16 2014 +0100
 
@@ -434,17 +3273,7 @@ Date:	Wed Apr 23 12:52:16 2014 +0100
 
 M	src/misc.c
 
-commit 7c9270ab792b87ee4327b3863fa045d345e4e894
-Author: David King <amigadave at amigadave.com>
-Date:	Tue Apr 22 21:59:22 2014 +0100
-
-    Update NEWS for 2.2.1 release
-
-M	NEWS
-M	SOURCES
-M	configure.ac
-
-commit 32c8f8c4a59fbd4be4e0a963fab94feb7e3847d0
+commit ea53ac5940690e5c2d4823970e43049ab9508aae
 Author: David King <amigadave at amigadave.com>
 Date:	Tue Apr 22 19:36:37 2014 +0100
 
@@ -460,7 +3289,7 @@ Date:	Tue Apr 22 19:36:37 2014 +0100
 
 M	src/scan.c
 
-commit b09518f1b26fdbc5be69f5c9bd8d1642846b45a5
+commit c234480f4f217125f329ec2d4553b3ace9335351
 Author: David King <amigadave at amigadave.com>
 Date:	Tue Apr 22 17:03:10 2014 +0100
 
@@ -468,7 +3297,7 @@ Date:	Tue Apr 22 17:03:10 2014 +0100
 
 M	data/easytag.desktop.in
 
-commit 5a09f61e5f9e783cc106a4d636320a465a57830c
+commit b596895a33618f00a6fa193f8eebde39cdcff844
 Author: David King <amigadave at amigadave.com>
 Date:	Tue Apr 22 15:49:21 2014 +0100
 
@@ -476,7 +3305,7 @@ Date:	Tue Apr 22 15:49:21 2014 +0100
 
 M	src/gio_wrapper.cc
 
-commit 09ed88358afcee1fc7b1d57e471ac434b66837bb
+commit 4a22b73c4bee9ff40059b875220c6d69254a508e
 Author: David King <amigadave at amigadave.com>
 Date:	Tue Apr 22 15:37:13 2014 +0100
 
@@ -484,7 +3313,7 @@ Date:	Tue Apr 22 15:37:13 2014 +0100
 
 M	src/gio_wrapper.cc
 
-commit 49778c9145031a6421dd526fcf378535fc61c2b8
+commit 043fc69516b69fa646a1251d512d0cb1352a1154
 Author: Ekaterina Gerasimova <kittykat3756 at gmail.com>
 Date:	Mon Apr 21 23:44:48 2014 +0100
 
@@ -492,7 +3321,7 @@ Date:	Mon Apr 21 23:44:48 2014 +0100
 
 M	help/Makefile.am
 
-commit 3d5c161960d19f9c9668e43d31b0fe131ead4a9c
+commit 54d3d8bf993e48018f79c9c23d6b23d4bbcd504b
 Author: David King <amigadave at amigadave.com>
 Date:	Mon Apr 21 17:14:05 2014 +0100
 
@@ -500,7 +3329,7 @@ Date:	Mon Apr 21 17:14:05 2014 +0100
 
 M	src/picture.c
 
-commit 52531351eb2e33a750a25f0625f12991874e9896
+commit 9cfb3edb17a459c3612f51c635185aad0bc092b0
 Author: David King <amigadave at amigadave.com>
 Date:	Mon Apr 21 16:18:12 2014 +0100
 
@@ -514,7 +3343,7 @@ M	src/ogg_tag.h
 M	src/vcedit.h
 M	src/wavpack_tag.c
 
-commit 270ef70bcb113ac05a1f80dccb466cba399f724e
+commit e3393bb9a4889e9bfe56f7ba07b5e58ef4b487ad
 Author: David King <amigadave at amigadave.com>
 Date:	Sun Apr 20 23:10:35 2014 +0100
 
@@ -535,7 +3364,7 @@ Date:	Sun Apr 20 23:10:35 2014 +0100
 
 M	src/picture.c
 
-commit 5062c2f8ecdd731a07c0a3276d2ad1bc8c840c0a
+commit 196d4f18e228d1300910d56cdda162a150ffeea8
 Author: David King <amigadave at amigadave.com>
 Date:	Sat Apr 19 10:29:44 2014 +0100
 
@@ -545,11 +3374,11 @@ Date:	Sat Apr 19 10:29:44 2014 +0100
 
 M	src/easytag.c
 
-commit e61aca954e27620692872f548389d46d19d082a6
+commit 0ff9da52c747e848a7c323c2e7a585386614f69d
 Author: David King <amigadave at amigadave.com>
 Date:	Sat Apr 19 10:16:08 2014 +0100
 
-    Avoid a use-after-free when capitalizing words
+    Avoid a use-after-free when caplitalizing words
 
     https://bugzilla.gnome.org/show_bug.cgi?id=728533
 
@@ -557,7 +3386,49 @@ M	src/easytag.c
 M	src/scan_dialog.c
 M	src/scan_dialog.h
 
-commit 79040333844d000f958bb666e1358ec0b7376a17
+commit 12afb792cf1ff5b5f0ed094867b78836edaa22d4
+Author: David King <amigadave at amigadave.com>
+Date:	Thu Apr 17 23:15:07 2014 +0100
+
+    Add missing break in switch
+
+    Found with Coverity (CID 1163345)
+
+M	src/prefs.c
+
+commit f2871ad88af1ba9ff006c6fd9471ad6841e4e182
+Author: David King <amigadave at amigadave.com>
+Date:	Thu Apr 17 22:42:04 2014 +0100
+
+    Remove unused code when reading MP4 header
+
+    Found with Coverity (CID 1203406)
+
+M	src/mp4_header.cc
+
+commit dd99ec94f5d46e433cf785ba5bfc849dd0987f78
+Author: David King <amigadave at amigadave.com>
+Date:	Thu Apr 17 22:01:43 2014 +0100
+
+    Refactor GIO error checking in C++ wrapper
+
+    Check the return value of g_output_stream_write_all().
+
+    Found with Coverity (CID 1203401, CID 1203402 and CID 1203403)
+
+M	src/gio_wrapper.cc
+
+commit b8e9808c256b60b22f202c97007e04b6682771c9
+Author: David King <amigadave at amigadave.com>
+Date:	Tue Apr 15 20:39:45 2014 +0100
+
+    Port from GApplication to GtkApplication
+
+M	src/application.c
+M	src/application.h
+M	src/easytag.c
+
+commit 77d6aeb33ca4697602a39fc6f1c7ad1c9d51851d
 Author: David King <amigadave at amigadave.com>
 Date:	Tue Apr 15 14:43:40 2014 +0100
 
@@ -565,7 +3436,15 @@ Date:	Tue Apr 15 14:43:40 2014 +0100
 
 M	README
 
-commit b48fcc236376c613c60be4bd01f5609b4a764a05
+commit 858a1ec356b8574cf79279ae6f38a497ffb4411c
+Author: Daniel Mustieles <daniel.mustieles at gmail.com>
+Date:	Tue Apr 15 14:15:23 2014 +0200
+
+    Updated Spanish translation
+
+M	po/es.po
+
+commit 73efd41d8d4d2f9bc77d799418a1152283c92fab
 Author: Rafael Ferreira <rafael.f.f1 at gmail.com>
 Date:	Mon Apr 14 23:05:58 2014 +0000
 
@@ -573,7 +3452,7 @@ Date:	Mon Apr 14 23:05:58 2014 +0000
 
 M	po/pt_BR.po
 
-commit 47a36e75e0feef181bea5dc167bfe2351c158117
+commit 5b8b65d47c1dd2b8f589f68492d7ee3b08161c71
 Author: Roman Bogorodskiy <bogorodskiy at gmail.com>
 Date:	Mon Apr 14 12:00:24 2014 +0100
 
@@ -583,7 +3462,7 @@ Date:	Mon Apr 14 12:00:24 2014 +0100
 
 M	src/id3lib/c_wrapper.cpp
 
-commit ca31fae7477847348b2d0ece31cbe40024011969
+commit 93201c3d62ee423af712c36085a8e314a0fcd960
 Author: Santtu Lakkala <inz at inz.fi>
 Date:	Mon Apr 14 11:17:59 2014 +0300
 
@@ -594,15 +3473,15 @@ Date:	Mon Apr 14 11:17:59 2014 +0300
 
 M	src/gio_wrapper.cc
 
-commit a528cc486d87f6f723faf444125cfc2edc604e30
+commit 58b4f1e9a352fe2c870986fadd802d033f7a1f2f
 Author: Aurimas ÄŒernius <aurisc4 at gmail.com>
-Date:	Sun Apr 13 22:56:29 2014 +0300
+Date:	Sun Apr 13 23:09:25 2014 +0300
 
     Updated Lithuanian translation
 
 M	po/lt.po
 
-commit 29b05f841d8a21f429b3123c522f80783ab4e91f
+commit b9b8824e56f14681afba97cb8c215009e5491a3f
 Author: Balázs Úr <urbalazs at src.gnome.org>
 Date:	Sun Apr 13 15:48:59 2014 +0200
 
@@ -610,7 +3489,7 @@ Date:	Sun Apr 13 15:48:59 2014 +0200
 
 M	po/hu.po
 
-commit 200f074a6d5a785e041024bba62271e3803f1702
+commit fc78f9e1e14f238eeba9f729dba0cdd2cb37960a
 Author: David King <amigadave at amigadave.com>
 Date:	Sun Apr 13 09:09:58 2014 +0100
 
@@ -618,7 +3497,7 @@ Date:	Sun Apr 13 09:09:58 2014 +0100
 
 M	src/gio_wrapper.cc
 
-commit fae43185e5d6beb78167c7c9ad7bfc4acf2451cb
+commit ddf003b219799b82f4a72c7568fbcbe913e45f26
 Author: David King <amigadave at amigadave.com>
 Date:	Sun Apr 13 08:58:09 2014 +0100
 
@@ -629,7 +3508,7 @@ Date:	Sun Apr 13 08:58:09 2014 +0100
 M	src/gio_wrapper.cc
 M	src/gio_wrapper.h
 
-commit e7ba89bd4110a1f42fde31cdf0cbaaccb349862c
+commit 40e2787c8dbb75f36f0b2c69cdf6270aa5df7b28
 Author: Abhinav <abhijangda at hotmail.com>
 Date:	Sun Apr 13 11:05:17 2014 +0530
 
@@ -641,9 +3520,59 @@ M	src/id3_tag.c
 M	src/id3_tag.h
 M	src/id3v24_tag.c
 
-commit 46aa58b0d722bb8f7b2aeb5da1f1617ca18e71d7
+commit 172139f7dade030eb76ad8c99b2e3d90dd67d886
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Apr 12 20:17:36 2014 +0100
+
+    Update README to only mention GTK+ 3
+
+M	README
+
+commit 58c4d16a0662ce96a7c9455e33978967d908b70f
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Apr 12 20:07:03 2014 +0100
+
+    Set the inline-toolbar style on the images toolbar
+
+M	src/easytag.c
+
+commit 2e723c5f855a7a700ebf924e9e44de136dd818bc
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Apr 12 19:57:13 2014 +0100
+
+    Set the primary-toolbar style on the main toolbar
+
+M	src/bar.c
+
+commit eaae7f8479c2881f3965e354cf72ad4b743a49fa
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Apr 12 19:48:37 2014 +0100
+
+    Remove some GTK+ 2 compatibility code
+
+M	src/gtk2_compat.c
+M	src/gtk2_compat.h
+M	src/misc.c
+
+commit ab96820183cce6bedfdc8923ceb7cebc69234d68
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Apr 12 19:45:03 2014 +0100
+
+    Use the license-type property of GtkAboutDialog
+
+M	src/about.c
+
+commit ba312a2a1fdeff913afea6b33cf749fc6df47bf2
+Author: David King <amigadave at amigadave.com>
+Date:	Sat Apr 12 19:43:39 2014 +0100
+
+    Depend on GTK+ 3 only
+
+M	configure.ac
+
+commit ecf51caab3c414846a9d9806a4ee9ef8474ec178
 Author: Matej Urbančič <mateju at svn.gnome.org>
-Date:	Sat Apr 12 18:59:41 2014 +0200
+Date:	Sat Apr 12 18:59:51 2014 +0200
 
     Updated Slovenian translation
 
diff --git a/HACKING b/HACKING
index 2fc7bb5..2d0621c 100644
--- a/HACKING
+++ b/HACKING
@@ -36,3 +36,13 @@ indents. This has been changed slightly to the following guidelines:
 * function return values on a line separate from the function name
 
 New code should follow this style.
+
+GtkBuilder UI descriptions
+--------------------------
+
+GtkBuilder files are used for describing the EasyTAG UI. The UI files are in
+the data directory, and named *.ui. The files are not created with Glade, and
+Glade should not be used to edit them, as it will unnecessarily rearrange
+content within the file, leading to commit diffs which are difficult to read.
+The files are not installed, but instead compiled into a resource bundle and
+built into the application binary.
diff --git a/Makefile.am b/Makefile.am
index 1f58f47..ef45dc9 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -9,6 +9,7 @@ DISTCHECK_CONFIGURE_FLAGS = \
 	--enable-man \
 	--enable-mp3 \
 	--enable-mp4 \
+	--enable-nautilus-actions \
 	--enable-speex \
 	--enable-tests \
 	--enable-wavpack
@@ -20,7 +21,10 @@ bin_PROGRAMS = easytag
 localedir = $(prefix)/$(DATADIRNAME)/locale
 easytag_CPPFLAGS = \
 	-I$(top_srcdir) \
+	-I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/tags \
 	-I$(top_builddir) \
+	-I$(top_builddir)/src \
 	$(DEPRECATED_CPPFLAGS) \
 	-DLOCALEDIR=\"$(localedir)\"
 
@@ -33,98 +37,123 @@ easytag_CXXFLAGS = \
 	$(EASYTAG_CFLAGS)
 
 easytag_SOURCES = \
-	src/id3lib/c_wrapper.cpp \
-	src/libapetag/apetaglib.c \
-	src/libapetag/is_tag.c \
-	src/libapetag/info_mac.c \
-	src/libapetag/info_mpc.c \
 	src/about.c \
-	src/ape_tag.c \
 	src/application.c \
-	src/bar.c \
+	src/application_window.c \
 	src/browser.c \
 	src/browser.h \
-	src/cddb.c \
+	src/cddb_dialog.c \
 	src/charset.c \
 	src/crc32.c \
 	src/dlm.c \
 	src/easytag.c \
+	src/enums.c \
 	src/et_core.c \
-	src/flac_header.c \
-	src/flac_tag.c \
-	src/gio_wrapper.cc \
-	src/gtk2_compat.c \
-	src/id3_tag.c \
-	src/id3v24_tag.c \
+	src/file_area.c \
+	src/load_files_dialog.c \
 	src/log.c \
+	src/main.c \
 	src/misc.c \
-	src/monkeyaudio_header.c \
-	src/mpeg_header.c \
-	src/mp4_tag.cc \
-	src/musepack_header.c \
-	src/ogg_header.c \
-	src/ogg_tag.c \
-	src/opus_header.c \
-	src/opus_tag.c \
 	src/picture.c \
-	src/prefs.c \
+	src/playlist_dialog.c \
+	src/preferences_dialog.c \
+	src/progress_bar.c \
 	src/scan.c \
 	src/scan_dialog.c \
+	src/search_dialog.c \
 	src/setting.c \
-	src/vcedit.c \
-	src/wavpack_header.c \
-	src/wavpack_tag.c \
+	src/status_bar.c \
+	src/tag_area.c \
+	src/tags/id3lib/c_wrapper.cpp \
+	src/tags/libapetag/apetaglib.c \
+	src/tags/libapetag/is_tag.c \
+	src/tags/libapetag/info_mac.c \
+	src/tags/libapetag/info_mpc.c \
+	src/tags/ape_tag.c \
+	src/tags/flac_header.c \
+	src/tags/flac_tag.c \
+	src/tags/gio_wrapper.cc \
+	src/tags/id3_tag.c \
+	src/tags/id3v24_tag.c \
+	src/tags/monkeyaudio_header.c \
+	src/tags/mpeg_header.c \
+	src/tags/mp4_tag.cc \
+	src/tags/musepack_header.c \
+	src/tags/ogg_header.c \
+	src/tags/ogg_tag.c \
+	src/tags/opus_header.c \
+	src/tags/opus_tag.c \
+	src/tags/vcedit.c \
+	src/tags/wavpack_header.c \
+	src/tags/wavpack_tag.c \
 	src/win32/win32dep.c
 
+nodist_easytag_SOURCES = \
+	src/resource.c
+
 easytag_headers = \
-	src/id3lib/id3_bugfix.h \
-	src/libapetag/apetaglib.h \
-	src/libapetag/is_tag.h \
-	src/libapetag/info_mac.h \
-	src/libapetag/info_mpc.h \
 	src/about.h \
-	src/ape_tag.h \
 	src/application.h \
-	src/bar.h \
-	src/cddb.h \
+	src/application_window.h \
+	src/cddb_dialog.h \
 	src/charset.h \
 	src/crc32.h \
 	src/dlm.h \
 	src/easytag.h \
 	src/et_core.h \
-	src/flac_header.h \
-	src/flac_tag.h \
+	src/file_area.h \
 	src/genres.h \
-	src/gio_wrapper.h \
-	src/gtk2_compat.h \
-	src/id3_tag.h \
+	src/load_files_dialog.h \
 	src/log.h \
 	src/misc.h \
-	src/monkeyaudio_header.h \
-	src/mpeg_header.h \
-	src/mp4_header.h \
-	src/mp4_tag.h \
-	src/musepack_header.h \
-	src/ogg_header.h \
-	src/ogg_tag.h \
-	src/opus_header.h \
-	src/opus_tag.h \
 	src/picture.h \
-	src/prefs.h \
+	src/playlist_dialog.h \
+	src/preferences_dialog.h \
+	src/progress_bar.h \
 	src/scan.h \
 	src/scan_dialog.h \
+	src/search_dialog.h \
 	src/setting.h \
-	src/ui_manager.h \
-	src/vcedit.h \
-	src/wavpack_header.h \
-	src/wavpack_tag.h \
+	src/status_bar.h \
+	src/tag_area.h \
+	src/tags/id3lib/id3_bugfix.h \
+	src/tags/libapetag/apetaglib.h \
+	src/tags/libapetag/is_tag.h \
+	src/tags/libapetag/info_mac.h \
+	src/tags/libapetag/info_mpc.h \
+	src/tags/ape_tag.h \
+	src/tags/flac_header.h \
+	src/tags/flac_tag.h \
+	src/tags/gio_wrapper.h \
+	src/tags/id3_tag.h \
+	src/tags/monkeyaudio_header.h \
+	src/tags/mpeg_header.h \
+	src/tags/mp4_header.h \
+	src/tags/mp4_tag.h \
+	src/tags/musepack_header.h \
+	src/tags/ogg_header.h \
+	src/tags/ogg_tag.h \
+	src/tags/opus_header.h \
+	src/tags/opus_tag.h \
+	src/tags/vcedit.h \
+	src/tags/wavpack_header.h \
+	src/tags/wavpack_tag.h \
 	src/win32/win32dep.h
 
+nodist_easytag_headers = \
+	src/resource.h
+
 easytag_LDADD = \
 	$(EASYTAG_LIBS) \
 	$(ID3LIB_LIBS) \
 	$(easytag_rc)
 
+noinst_resource_files = \
+	$(shell $(GLIB_COMPILE_RESOURCES) --generate-dependencies --sourcedir=$(srcdir)/data $(srcdir)/data/org.gnome.EasyTAG.gresource.xml)
+
+src/resource.c src/resource.h: data/org.gnome.EasyTAG.gresource.xml Makefile $(noinst_resource_files)
+	$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir)/data --generate $<
+
 if WINDOWS_HOST
 ICONDIR = $(srcdir)/data/icons/win32
 MANIFESTDIR = $(srcdir)/src/win32
@@ -145,6 +174,45 @@ easytag-$(PACKAGE_VERSION)-setup.exe: easytag-win32-installer.nsi easytag.exe Ma
 		rm -rf $$DESTDIR
 endif
 
+BUILT_SOURCES = \
+	$(nodist_easytag_SOURCES) \
+	src/enums.h
+
+enum_data = \
+	src/enums.c \
+	src/enums.h
+
+easytag_enum_headers = \
+	$(srcdir)/src/setting.h
+
+src/enums.c: $(easytag_enum_headers) src/enums.h Makefile
+	$(AM_V_GEN)$(GLIB_MKENUMS) \
+		--fhead "#include \"enums.h\"\n\n" \
+		--fprod "/* enumerations from \"@filename@\" */\n" \
+		--fprod "#include \"@filename@\"\n" \
+		--vhead "GType\n at enum_name@_get_type (void)\n{\n" \
+		--vhead "    static GType type = 0;\n\n" \
+		--vhead "    if (!type)\n    {\n" \
+		--vhead "        static const G at Type@Value _ at enum_name@_values[] = {" \
+		--vprod "            { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \
+		--vtail "            { 0, NULL, NULL }\n        };\n\n" \
+		--vtail "        type = g_ at type@_register_static (\"@EnumName@\", _ at enum_name@_values);\n    }\n\n" \
+		--vtail "  return type;\n}\n\n" \
+		$(easytag_enum_headers) > $@
+
+src/enums.h: $(easytag_enum_headers) Makefile
+	$(AM_V_GEN)$(GLIB_MKENUMS) \
+		--fhead "#ifndef ET_ENUMS_H_\n" \
+		--fhead "#define ET_ENUMS_H_\n\n" \
+		--fhead "#include <glib-object.h>\n\n" \
+		--fhead "G_BEGIN_DECLS\n\n" \
+		--fprod "/* enumerations from @filename@ */\n" \
+		--vhead "GType @enum_name at _get_type (void);\n" \
+		--vhead "#define ET_TYPE_ at ENUMSHORT@ (@enum_name at _get_type())\n" \
+		--ftail "G_END_DECLS\n\n" \
+		--ftail "#endif /* ET_ENUMS_H_ */" \
+		$(easytag_enum_headers) > $@
+
 # NSIS installer script.
 # TODO: Run script from dist dir.
 easytag-win32-installer.nsi: easytag-win32-installer.nsi.in Makefile
@@ -154,6 +222,29 @@ easytag-win32-installer.nsi: easytag-win32-installer.nsi.in Makefile
 		-e "s|\@PACKAGE_VERSION\@|$(PACKAGE_VERSION)|" \
 		-e "s|\@PREFIX\@|$(prefix)|" $< > $@
 
+if ENABLE_NAUTILUS_ACTIONS
+nautilus_extensiondir = $(NAUTILUS_EXTENSION_DIR)
+
+nautilus_extension_LTLIBRARIES = \
+	libnautilus-easytag.la
+
+libnautilus_easytag_la_SOURCES = \
+	nautilus-extension/nautilus-easytag.c
+
+libnautilus_easytag_la_CPPFLAGS = \
+	-I$(top_srcdir) \
+	-I$(top_builddir) \
+	$(DEPRECATED_CPPFLAGS) \
+	-DLOCALEDIR=\"$(localedir)\" \
+	$(NAUTILUS_CFLAGS)
+
+libnautilus_easytag_la_LDFLAGS = \
+	-module -avoid-version -no-undefined
+
+libnautilus_easytag_la_LIBADD = \
+	$(NAUTILUS_LIBS)
+endif
+
 # Create a directory stamp in the build dir. Used to workaround the case where
 # a pattern rule is used for a target with a path that does not ordinarily
 # exist in the build dir.
@@ -172,6 +263,12 @@ desktop_in_files = data/easytag.desktop.in
 $(desktop_in_files:.desktop.in=.desktop): data/.dstamp
 desktop_DATA = $(desktop_in_files:.desktop.in=.desktop)
 
+gsettings_ENUM_FILES = src/setting.h
+gsettings_ENUM_NAMESPACE = org.gnome.EasyTAG
+gsettings_SCHEMAS = data/org.gnome.EasyTAG.gschema.xml
+data/org.gnome.EasyTAG.gschema.valid: data/.dstamp
+ at GSETTINGS_RULES@
+
 if ENABLE_MAN
 doc/easytag.1: doc/easytag.xml Makefile
 	$(AM_V_GEN)$(XSLTPROC) --nonet --param man.charmap.use.subset 0 \
@@ -181,21 +278,21 @@ doc/easytag.1: doc/easytag.xml Makefile
 nodist_man_MANS = doc/easytag.1
 endif
 
-pixmaps = \
-	data/pixmaps/all_downcase.xpm \
-	data/pixmaps/all_uppercase.xpm \
-	data/pixmaps/artist.xpm \
-	data/pixmaps/artist_album.xpm \
-	data/pixmaps/first_letter_uppercase.xpm \
-	data/pixmaps/first_letter_uppercase_word.xpm \
-	data/pixmaps/freedb.xpm \
-	data/pixmaps/gnudb.xpm \
-	data/pixmaps/invert_selection.xpm \
-	data/pixmaps/mask.xpm \
-	data/pixmaps/musicbrainz.xpm \
-	data/pixmaps/red_lines.xpm \
-	data/pixmaps/sequence_track.xpm \
-	data/pixmaps/unselect_all.xpm
+images = \
+	data/images/all-lowercase.png \
+	data/images/all-uppercase.png \
+	data/images/artist.png \
+	data/images/artist-album.png \
+	data/images/first-letter-uppercase.png \
+	data/images/first-letter-uppercase-word.png \
+	data/images/freedb.png \
+	data/images/gnudb.png \
+	data/images/invert-selection.png \
+	data/images/mask.png \
+	data/images/musicbrainz.png \
+	data/images/red-lines.png \
+	data/images/sequence-track.png \
+	data/images/unselect-all.png
 
 iconthemedir = $(datadir)/icons/hicolor
 
@@ -244,24 +341,25 @@ uninstall-update-icon-cache:
 dist_noinst_DATA = \
 	$(appdata_in_files) \
 	$(desktop_in_files) \
+	$(gsettings_SCHEMAS) \
 	$(easytag_headers) \
-	src/id3lib/patch_id3lib_3.8.3_UTF16_writing_bug.diff \
-	src/libapetag/COPYING.LGPL \
-	src/libapetag/README.apetag \
-	src/libapetag/id3v2_read.c \
-	src/libapetag/id3v2_read.h \
-	src/mp4_header.cc \
+	data/org.gnome.EasyTAG.gresource.xml \
+	$(noinst_resource_files) \
+	src/tags/id3lib/patch_id3lib_3.8.3_UTF16_writing_bug.diff \
+	src/tags/libapetag/COPYING.LGPL \
+	src/tags/libapetag/README.apetag \
+	src/tags/libapetag/id3v2_read.c \
+	src/tags/libapetag/id3v2_read.h \
+	src/tags/mp4_header.cc \
 	src/win32/resource.h \
 	data/icons/win32/easytag.ico \
 	data/nsis/easytag-header.bmp \
 	data/nsis/easytag-sidebar.bmp \
-	$(pixmaps) \
-	\
+	$(images) \
+	doc/easytag.xml \
+	COPYING.GPL3 \
 	easytag-win32-installer.nsi.in \
-	\
-	HACKING \
-	\
-	doc/easytag.xml
+	HACKING
 
 dist_noinst_SCRIPTS = \
 	autogen.sh
@@ -341,10 +439,13 @@ CLEANFILES = \
 	$(check_SCRIPTS) \
 	$(desktop_DATA) \
 	$(easytag_rc) \
+	$(enum_data) \
 	$(nodist_man_MANS) \
 	*.log \
 	easytag-$(PACKAGE_VERSION)-setup.exe \
-	easytag-win32-installer.nsi
+	easytag-win32-installer.nsi \
+	src/resource.c \
+	src/resource.h
 
 DISTCLEANFILES = \
 	po/.intltool-merge-cache
diff --git a/Makefile.in b/Makefile.in
index 43333d3..5eaf779 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -16,6 +16,7 @@
 
 
 
+
 VPATH = @srcdir@
 am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
 am__make_running_with_option = \
@@ -96,15 +97,20 @@ DIST_COMMON = INSTALL NEWS README AUTHORS ChangeLog \
 	$(dist_noinst_DATA) $(top_srcdir)/build-aux/test-driver \
 	COPYING THANKS TODO build-aux/compile build-aux/config.guess \
 	build-aux/config.sub build-aux/depcomp build-aux/install-sh \
-	build-aux/missing $(top_srcdir)/build-aux/compile \
+	build-aux/missing build-aux/ltmain.sh \
+	$(top_srcdir)/build-aux/compile \
 	$(top_srcdir)/build-aux/config.guess \
 	$(top_srcdir)/build-aux/config.sub \
 	$(top_srcdir)/build-aux/install-sh \
+	$(top_srcdir)/build-aux/ltmain.sh \
 	$(top_srcdir)/build-aux/missing
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/gtkdoc_jh_check_xml_catalog.m4 \
 	$(top_srcdir)/m4/gtkdoc_jh_path_xml_catalog.m4 \
-	$(top_srcdir)/m4/intltool.m4 $(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
@@ -113,58 +119,119 @@ mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = config.h
 CONFIG_CLEAN_FILES = doc/version.xml src/win32/easytag.rc
 CONFIG_CLEAN_VPATH_FILES =
-am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" \
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__installdirs = "$(DESTDIR)$(nautilus_extensiondir)" \
+	"$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" \
 	"$(DESTDIR)$(desktopdir)" "$(DESTDIR)$(appicon128dir)" \
 	"$(DESTDIR)$(appicon16dir)" "$(DESTDIR)$(appicon22dir)" \
 	"$(DESTDIR)$(appicon24dir)" "$(DESTDIR)$(appicon256dir)" \
 	"$(DESTDIR)$(appicon32dir)" "$(DESTDIR)$(appicon48dir)" \
 	"$(DESTDIR)$(appicon64dir)" "$(DESTDIR)$(appiconscalabledir)"
-PROGRAMS = $(bin_PROGRAMS)
+LTLIBRARIES = $(nautilus_extension_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+ at ENABLE_NAUTILUS_ACTIONS_TRUE@libnautilus_easytag_la_DEPENDENCIES =  \
+ at ENABLE_NAUTILUS_ACTIONS_TRUE@	$(am__DEPENDENCIES_1)
+am__libnautilus_easytag_la_SOURCES_DIST =  \
+	nautilus-extension/nautilus-easytag.c
 am__dirstamp = $(am__leading_dot)dirstamp
-am_easytag_OBJECTS = src/id3lib/easytag-c_wrapper.$(OBJEXT) \
-	src/libapetag/easytag-apetaglib.$(OBJEXT) \
-	src/libapetag/easytag-is_tag.$(OBJEXT) \
-	src/libapetag/easytag-info_mac.$(OBJEXT) \
-	src/libapetag/easytag-info_mpc.$(OBJEXT) \
-	src/easytag-about.$(OBJEXT) src/easytag-ape_tag.$(OBJEXT) \
-	src/easytag-application.$(OBJEXT) src/easytag-bar.$(OBJEXT) \
-	src/easytag-browser.$(OBJEXT) src/easytag-cddb.$(OBJEXT) \
+ at ENABLE_NAUTILUS_ACTIONS_TRUE@am_libnautilus_easytag_la_OBJECTS = nautilus-extension/libnautilus_easytag_la-nautilus-easytag.lo
+libnautilus_easytag_la_OBJECTS = $(am_libnautilus_easytag_la_OBJECTS)
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+libnautilus_easytag_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(AM_CFLAGS) $(CFLAGS) $(libnautilus_easytag_la_LDFLAGS) \
+	$(LDFLAGS) -o $@
+ at ENABLE_NAUTILUS_ACTIONS_TRUE@am_libnautilus_easytag_la_rpath =  \
+ at ENABLE_NAUTILUS_ACTIONS_TRUE@	-rpath $(nautilus_extensiondir)
+PROGRAMS = $(bin_PROGRAMS)
+am_easytag_OBJECTS = src/easytag-about.$(OBJEXT) \
+	src/easytag-application.$(OBJEXT) \
+	src/easytag-application_window.$(OBJEXT) \
+	src/easytag-browser.$(OBJEXT) \
+	src/easytag-cddb_dialog.$(OBJEXT) \
 	src/easytag-charset.$(OBJEXT) src/easytag-crc32.$(OBJEXT) \
 	src/easytag-dlm.$(OBJEXT) src/easytag-easytag.$(OBJEXT) \
-	src/easytag-et_core.$(OBJEXT) \
-	src/easytag-flac_header.$(OBJEXT) \
-	src/easytag-flac_tag.$(OBJEXT) \
-	src/easytag-gio_wrapper.$(OBJEXT) \
-	src/easytag-gtk2_compat.$(OBJEXT) \
-	src/easytag-id3_tag.$(OBJEXT) src/easytag-id3v24_tag.$(OBJEXT) \
-	src/easytag-log.$(OBJEXT) src/easytag-misc.$(OBJEXT) \
-	src/easytag-monkeyaudio_header.$(OBJEXT) \
-	src/easytag-mpeg_header.$(OBJEXT) \
-	src/easytag-mp4_tag.$(OBJEXT) \
-	src/easytag-musepack_header.$(OBJEXT) \
-	src/easytag-ogg_header.$(OBJEXT) src/easytag-ogg_tag.$(OBJEXT) \
-	src/easytag-opus_header.$(OBJEXT) \
-	src/easytag-opus_tag.$(OBJEXT) src/easytag-picture.$(OBJEXT) \
-	src/easytag-prefs.$(OBJEXT) src/easytag-scan.$(OBJEXT) \
+	src/easytag-enums.$(OBJEXT) src/easytag-et_core.$(OBJEXT) \
+	src/easytag-file_area.$(OBJEXT) \
+	src/easytag-load_files_dialog.$(OBJEXT) \
+	src/easytag-log.$(OBJEXT) src/easytag-main.$(OBJEXT) \
+	src/easytag-misc.$(OBJEXT) src/easytag-picture.$(OBJEXT) \
+	src/easytag-playlist_dialog.$(OBJEXT) \
+	src/easytag-preferences_dialog.$(OBJEXT) \
+	src/easytag-progress_bar.$(OBJEXT) src/easytag-scan.$(OBJEXT) \
 	src/easytag-scan_dialog.$(OBJEXT) \
-	src/easytag-setting.$(OBJEXT) src/easytag-vcedit.$(OBJEXT) \
-	src/easytag-wavpack_header.$(OBJEXT) \
-	src/easytag-wavpack_tag.$(OBJEXT) \
+	src/easytag-search_dialog.$(OBJEXT) \
+	src/easytag-setting.$(OBJEXT) src/easytag-status_bar.$(OBJEXT) \
+	src/easytag-tag_area.$(OBJEXT) \
+	src/tags/id3lib/easytag-c_wrapper.$(OBJEXT) \
+	src/tags/libapetag/easytag-apetaglib.$(OBJEXT) \
+	src/tags/libapetag/easytag-is_tag.$(OBJEXT) \
+	src/tags/libapetag/easytag-info_mac.$(OBJEXT) \
+	src/tags/libapetag/easytag-info_mpc.$(OBJEXT) \
+	src/tags/easytag-ape_tag.$(OBJEXT) \
+	src/tags/easytag-flac_header.$(OBJEXT) \
+	src/tags/easytag-flac_tag.$(OBJEXT) \
+	src/tags/easytag-gio_wrapper.$(OBJEXT) \
+	src/tags/easytag-id3_tag.$(OBJEXT) \
+	src/tags/easytag-id3v24_tag.$(OBJEXT) \
+	src/tags/easytag-monkeyaudio_header.$(OBJEXT) \
+	src/tags/easytag-mpeg_header.$(OBJEXT) \
+	src/tags/easytag-mp4_tag.$(OBJEXT) \
+	src/tags/easytag-musepack_header.$(OBJEXT) \
+	src/tags/easytag-ogg_header.$(OBJEXT) \
+	src/tags/easytag-ogg_tag.$(OBJEXT) \
+	src/tags/easytag-opus_header.$(OBJEXT) \
+	src/tags/easytag-opus_tag.$(OBJEXT) \
+	src/tags/easytag-vcedit.$(OBJEXT) \
+	src/tags/easytag-wavpack_header.$(OBJEXT) \
+	src/tags/easytag-wavpack_tag.$(OBJEXT) \
 	src/win32/easytag-win32dep.$(OBJEXT)
-easytag_OBJECTS = $(am_easytag_OBJECTS)
-am__DEPENDENCIES_1 =
+nodist_easytag_OBJECTS = src/easytag-resource.$(OBJEXT)
+easytag_OBJECTS = $(am_easytag_OBJECTS) $(nodist_easytag_OBJECTS)
 easytag_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
 	$(easytag_rc)
-easytag_LINK = $(CXXLD) $(easytag_CXXFLAGS) $(CXXFLAGS) \
-	$(easytag_LDFLAGS) $(LDFLAGS) -o $@
+easytag_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(easytag_CXXFLAGS) \
+	$(CXXFLAGS) $(easytag_LDFLAGS) $(LDFLAGS) -o $@
 am__tests_test_scan_SOURCES_DIST = tests/test-scan.c src/scan.c
 @EASYTAG_ENABLE_TESTS_TRUE at am_tests_test_scan_OBJECTS = tests/tests_test_scan-test-scan.$(OBJEXT) \
 @EASYTAG_ENABLE_TESTS_TRUE@	src/tests_test_scan-scan.$(OBJEXT)
 tests_test_scan_OBJECTS = $(am_tests_test_scan_OBJECTS)
 @EASYTAG_ENABLE_TESTS_TRUE at tests_test_scan_DEPENDENCIES =  \
 @EASYTAG_ENABLE_TESTS_TRUE@	$(am__DEPENDENCIES_1)
-tests_test_scan_LINK = $(CCLD) $(tests_test_scan_CFLAGS) $(CFLAGS) \
-	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+tests_test_scan_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(tests_test_scan_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
 SCRIPTS = $(dist_noinst_SCRIPTS)
 AM_V_P = $(am__v_P_ at AM_V@)
 am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
@@ -182,37 +249,46 @@ DEFAULT_INCLUDES =
 depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
 am__depfiles_maybe = depfiles
 am__mv = mv -f
-AM_V_lt = $(am__v_lt_ at AM_V@)
-am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
-am__v_lt_0 = --silent
-am__v_lt_1 = 
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
 AM_V_CC = $(am__v_CC_ at AM_V@)
 am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
 am__v_CC_0 = @echo "  CC      " $@;
 am__v_CC_1 = 
 CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
 AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
 am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
 CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
 	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CXXFLAGS) $(CXXFLAGS)
 AM_V_CXX = $(am__v_CXX_ at AM_V@)
 am__v_CXX_ = $(am__v_CXX_ at AM_DEFAULT_V@)
 am__v_CXX_0 = @echo "  CXX     " $@;
 am__v_CXX_1 = 
 CXXLD = $(CXX)
-CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
-	-o $@
+CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+	$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
 AM_V_CXXLD = $(am__v_CXXLD_ at AM_V@)
 am__v_CXXLD_ = $(am__v_CXXLD_ at AM_DEFAULT_V@)
 am__v_CXXLD_0 = @echo "  CXXLD   " $@;
 am__v_CXXLD_1 = 
-SOURCES = $(easytag_SOURCES) $(tests_test_scan_SOURCES)
-DIST_SOURCES = $(easytag_SOURCES) $(am__tests_test_scan_SOURCES_DIST)
+SOURCES = $(libnautilus_easytag_la_SOURCES) $(easytag_SOURCES) \
+	$(nodist_easytag_SOURCES) $(tests_test_scan_SOURCES)
+DIST_SOURCES = $(am__libnautilus_easytag_la_SOURCES_DIST) \
+	$(easytag_SOURCES) $(am__tests_test_scan_SOURCES_DIST)
 RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
 	ctags-recursive dvi-recursive html-recursive info-recursive \
 	install-data-recursive install-dvi-recursive \
@@ -226,33 +302,6 @@ am__can_run_installinfo = \
     n|no|NO) false;; \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
-  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
-  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
-  for p in $$list; do echo "$$p $$p"; done | \
-  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-    if (++n[$$2] == $(am__install_max)) \
-      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-    END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
-  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__uninstall_files_from_dir = { \
-  test -z "$$files" \
-    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
-    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
-         $(am__cd) "$$dir" && rm -f $$files; }; \
-  }
 man1dir = $(mandir)/man1
 NROFF = nroff
 MANS = $(nodist_man_MANS)
@@ -514,6 +563,7 @@ ALL_LINGUAS = @ALL_LINGUAS@
 AMTAR = @AMTAR@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 APPDATA_VALIDATE = @APPDATA_VALIDATE@
+AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
@@ -533,6 +583,9 @@ DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DEPRECATED_CPPFLAGS = @DEPRECATED_CPPFLAGS@
 DESKTOP_FILE_VALIDATE = @DESKTOP_FILE_VALIDATE@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
 EASYTAG_CFLAGS = @EASYTAG_CFLAGS@
 EASYTAG_LIBS = @EASYTAG_LIBS@
 ECHO_C = @ECHO_C@
@@ -540,13 +593,17 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GDK_PIXBUF_PIXDATA = @GDK_PIXBUF_PIXDATA@
 GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLIB_COMPILE_RESOURCES = @GLIB_COMPILE_RESOURCES@
+GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GMSGFMT = @GMSGFMT@
 GREP = @GREP@
+GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
 GTESTER = @GTESTER@
 GTESTER_REPORT = @GTESTER_REPORT@
-GTK_CFLAGS = @GTK_CFLAGS@
-GTK_LIBS = @GTK_LIBS@
 HELP_DIR = @HELP_DIR@
 ID3LIB_LIBS = @ID3LIB_LIBS@
 INSTALL = @INSTALL@
@@ -563,17 +620,29 @@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@
 INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@
 INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@
 ITSTOOL = @ITSTOOL@
+LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MKDIR_P = @MKDIR_P@
 MSGFMT = @MSGFMT@
 MSGMERGE = @MSGMERGE@
+NAUTILUS_CFLAGS = @NAUTILUS_CFLAGS@
+NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@
+NAUTILUS_LIBS = @NAUTILUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
 OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
 PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
@@ -585,6 +654,7 @@ PATH_SEPARATOR = @PATH_SEPARATOR@
 PKG_CONFIG = @PKG_CONFIG@
 PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
 PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
@@ -605,8 +675,10 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
@@ -625,6 +697,7 @@ datarootdir = @datarootdir@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
+gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -665,6 +738,7 @@ DISTCHECK_CONFIGURE_FLAGS = \
 	--enable-man \
 	--enable-mp3 \
 	--enable-mp4 \
+	--enable-nautilus-actions \
 	--enable-speex \
 	--enable-tests \
 	--enable-wavpack
@@ -672,7 +746,10 @@ DISTCHECK_CONFIGURE_FLAGS = \
 SUBDIRS = help po
 easytag_CPPFLAGS = \
 	-I$(top_srcdir) \
+	-I$(top_srcdir)/src \
+	-I$(top_srcdir)/src/tags \
 	-I$(top_builddir) \
+	-I$(top_builddir)/src \
 	$(DEPRECATED_CPPFLAGS) \
 	-DLOCALEDIR=\"$(localedir)\"
 
@@ -685,125 +762,181 @@ easytag_CXXFLAGS = \
 	$(EASYTAG_CFLAGS)
 
 easytag_SOURCES = \
-	src/id3lib/c_wrapper.cpp \
-	src/libapetag/apetaglib.c \
-	src/libapetag/is_tag.c \
-	src/libapetag/info_mac.c \
-	src/libapetag/info_mpc.c \
 	src/about.c \
-	src/ape_tag.c \
 	src/application.c \
-	src/bar.c \
+	src/application_window.c \
 	src/browser.c \
 	src/browser.h \
-	src/cddb.c \
+	src/cddb_dialog.c \
 	src/charset.c \
 	src/crc32.c \
 	src/dlm.c \
 	src/easytag.c \
+	src/enums.c \
 	src/et_core.c \
-	src/flac_header.c \
-	src/flac_tag.c \
-	src/gio_wrapper.cc \
-	src/gtk2_compat.c \
-	src/id3_tag.c \
-	src/id3v24_tag.c \
+	src/file_area.c \
+	src/load_files_dialog.c \
 	src/log.c \
+	src/main.c \
 	src/misc.c \
-	src/monkeyaudio_header.c \
-	src/mpeg_header.c \
-	src/mp4_tag.cc \
-	src/musepack_header.c \
-	src/ogg_header.c \
-	src/ogg_tag.c \
-	src/opus_header.c \
-	src/opus_tag.c \
 	src/picture.c \
-	src/prefs.c \
+	src/playlist_dialog.c \
+	src/preferences_dialog.c \
+	src/progress_bar.c \
 	src/scan.c \
 	src/scan_dialog.c \
+	src/search_dialog.c \
 	src/setting.c \
-	src/vcedit.c \
-	src/wavpack_header.c \
-	src/wavpack_tag.c \
+	src/status_bar.c \
+	src/tag_area.c \
+	src/tags/id3lib/c_wrapper.cpp \
+	src/tags/libapetag/apetaglib.c \
+	src/tags/libapetag/is_tag.c \
+	src/tags/libapetag/info_mac.c \
+	src/tags/libapetag/info_mpc.c \
+	src/tags/ape_tag.c \
+	src/tags/flac_header.c \
+	src/tags/flac_tag.c \
+	src/tags/gio_wrapper.cc \
+	src/tags/id3_tag.c \
+	src/tags/id3v24_tag.c \
+	src/tags/monkeyaudio_header.c \
+	src/tags/mpeg_header.c \
+	src/tags/mp4_tag.cc \
+	src/tags/musepack_header.c \
+	src/tags/ogg_header.c \
+	src/tags/ogg_tag.c \
+	src/tags/opus_header.c \
+	src/tags/opus_tag.c \
+	src/tags/vcedit.c \
+	src/tags/wavpack_header.c \
+	src/tags/wavpack_tag.c \
 	src/win32/win32dep.c
 
+nodist_easytag_SOURCES = \
+	src/resource.c
+
 easytag_headers = \
-	src/id3lib/id3_bugfix.h \
-	src/libapetag/apetaglib.h \
-	src/libapetag/is_tag.h \
-	src/libapetag/info_mac.h \
-	src/libapetag/info_mpc.h \
 	src/about.h \
-	src/ape_tag.h \
 	src/application.h \
-	src/bar.h \
-	src/cddb.h \
+	src/application_window.h \
+	src/cddb_dialog.h \
 	src/charset.h \
 	src/crc32.h \
 	src/dlm.h \
 	src/easytag.h \
 	src/et_core.h \
-	src/flac_header.h \
-	src/flac_tag.h \
+	src/file_area.h \
 	src/genres.h \
-	src/gio_wrapper.h \
-	src/gtk2_compat.h \
-	src/id3_tag.h \
+	src/load_files_dialog.h \
 	src/log.h \
 	src/misc.h \
-	src/monkeyaudio_header.h \
-	src/mpeg_header.h \
-	src/mp4_header.h \
-	src/mp4_tag.h \
-	src/musepack_header.h \
-	src/ogg_header.h \
-	src/ogg_tag.h \
-	src/opus_header.h \
-	src/opus_tag.h \
 	src/picture.h \
-	src/prefs.h \
+	src/playlist_dialog.h \
+	src/preferences_dialog.h \
+	src/progress_bar.h \
 	src/scan.h \
 	src/scan_dialog.h \
+	src/search_dialog.h \
 	src/setting.h \
-	src/ui_manager.h \
-	src/vcedit.h \
-	src/wavpack_header.h \
-	src/wavpack_tag.h \
+	src/status_bar.h \
+	src/tag_area.h \
+	src/tags/id3lib/id3_bugfix.h \
+	src/tags/libapetag/apetaglib.h \
+	src/tags/libapetag/is_tag.h \
+	src/tags/libapetag/info_mac.h \
+	src/tags/libapetag/info_mpc.h \
+	src/tags/ape_tag.h \
+	src/tags/flac_header.h \
+	src/tags/flac_tag.h \
+	src/tags/gio_wrapper.h \
+	src/tags/id3_tag.h \
+	src/tags/monkeyaudio_header.h \
+	src/tags/mpeg_header.h \
+	src/tags/mp4_header.h \
+	src/tags/mp4_tag.h \
+	src/tags/musepack_header.h \
+	src/tags/ogg_header.h \
+	src/tags/ogg_tag.h \
+	src/tags/opus_header.h \
+	src/tags/opus_tag.h \
+	src/tags/vcedit.h \
+	src/tags/wavpack_header.h \
+	src/tags/wavpack_tag.h \
 	src/win32/win32dep.h
 
+nodist_easytag_headers = \
+	src/resource.h
+
 easytag_LDADD = \
 	$(EASYTAG_LIBS) \
 	$(ID3LIB_LIBS) \
 	$(easytag_rc)
 
+noinst_resource_files = \
+	$(shell $(GLIB_COMPILE_RESOURCES) --generate-dependencies --sourcedir=$(srcdir)/data $(srcdir)/data/org.gnome.EasyTAG.gresource.xml)
+
 @WINDOWS_HOST_TRUE at ICONDIR = $(srcdir)/data/icons/win32
 @WINDOWS_HOST_TRUE at MANIFESTDIR = $(srcdir)/src/win32
 @WINDOWS_HOST_TRUE at easytag_rc = easytag_rc.$(OBJEXT)
 @WINDOWS_HOST_TRUE at easytag_LDFLAGS = \
 @WINDOWS_HOST_TRUE@	-Wl,--subsystem,windows
 
+BUILT_SOURCES = \
+	$(nodist_easytag_SOURCES) \
+	src/enums.h
+
+enum_data = \
+	src/enums.c \
+	src/enums.h
+
+easytag_enum_headers = \
+	$(srcdir)/src/setting.h
+
+ at ENABLE_NAUTILUS_ACTIONS_TRUE@nautilus_extensiondir = $(NAUTILUS_EXTENSION_DIR)
+ at ENABLE_NAUTILUS_ACTIONS_TRUE@nautilus_extension_LTLIBRARIES = \
+ at ENABLE_NAUTILUS_ACTIONS_TRUE@	libnautilus-easytag.la
+
+ at ENABLE_NAUTILUS_ACTIONS_TRUE@libnautilus_easytag_la_SOURCES = \
+ at ENABLE_NAUTILUS_ACTIONS_TRUE@	nautilus-extension/nautilus-easytag.c
+
+ at ENABLE_NAUTILUS_ACTIONS_TRUE@libnautilus_easytag_la_CPPFLAGS = \
+ at ENABLE_NAUTILUS_ACTIONS_TRUE@	-I$(top_srcdir) \
+ at ENABLE_NAUTILUS_ACTIONS_TRUE@	-I$(top_builddir) \
+ at ENABLE_NAUTILUS_ACTIONS_TRUE@	$(DEPRECATED_CPPFLAGS) \
+ at ENABLE_NAUTILUS_ACTIONS_TRUE@	-DLOCALEDIR=\"$(localedir)\" \
+ at ENABLE_NAUTILUS_ACTIONS_TRUE@	$(NAUTILUS_CFLAGS)
+
+ at ENABLE_NAUTILUS_ACTIONS_TRUE@libnautilus_easytag_la_LDFLAGS = \
+ at ENABLE_NAUTILUS_ACTIONS_TRUE@	-module -avoid-version -no-undefined
+
+ at ENABLE_NAUTILUS_ACTIONS_TRUE@libnautilus_easytag_la_LIBADD = \
+ at ENABLE_NAUTILUS_ACTIONS_TRUE@	$(NAUTILUS_LIBS)
+
 appdata_in_files = data/easytag.appdata.xml.in
 appdata_XML = $(appdata_in_files:.appdata.xml.in=.appdata.xml)
 desktopdir = $(datadir)/applications
 desktop_in_files = data/easytag.desktop.in
 desktop_DATA = $(desktop_in_files:.desktop.in=.desktop)
+gsettings_ENUM_FILES = src/setting.h
+gsettings_ENUM_NAMESPACE = org.gnome.EasyTAG
+gsettings_SCHEMAS = data/org.gnome.EasyTAG.gschema.xml
 @ENABLE_MAN_TRUE at nodist_man_MANS = doc/easytag.1
-pixmaps = \
-	data/pixmaps/all_downcase.xpm \
-	data/pixmaps/all_uppercase.xpm \
-	data/pixmaps/artist.xpm \
-	data/pixmaps/artist_album.xpm \
-	data/pixmaps/first_letter_uppercase.xpm \
-	data/pixmaps/first_letter_uppercase_word.xpm \
-	data/pixmaps/freedb.xpm \
-	data/pixmaps/gnudb.xpm \
-	data/pixmaps/invert_selection.xpm \
-	data/pixmaps/mask.xpm \
-	data/pixmaps/musicbrainz.xpm \
-	data/pixmaps/red_lines.xpm \
-	data/pixmaps/sequence_track.xpm \
-	data/pixmaps/unselect_all.xpm
+images = \
+	data/images/all-lowercase.png \
+	data/images/all-uppercase.png \
+	data/images/artist.png \
+	data/images/artist-album.png \
+	data/images/first-letter-uppercase.png \
+	data/images/first-letter-uppercase-word.png \
+	data/images/freedb.png \
+	data/images/gnudb.png \
+	data/images/invert-selection.png \
+	data/images/mask.png \
+	data/images/musicbrainz.png \
+	data/images/red-lines.png \
+	data/images/sequence-track.png \
+	data/images/unselect-all.png
 
 iconthemedir = $(datadir)/icons/hicolor
 appicon16dir = $(iconthemedir)/16x16/apps
@@ -846,24 +979,25 @@ UPDATE_ICON_CACHE = gtk-update-icon-cache --ignore-theme-index --force
 dist_noinst_DATA = \
 	$(appdata_in_files) \
 	$(desktop_in_files) \
+	$(gsettings_SCHEMAS) \
 	$(easytag_headers) \
-	src/id3lib/patch_id3lib_3.8.3_UTF16_writing_bug.diff \
-	src/libapetag/COPYING.LGPL \
-	src/libapetag/README.apetag \
-	src/libapetag/id3v2_read.c \
-	src/libapetag/id3v2_read.h \
-	src/mp4_header.cc \
+	data/org.gnome.EasyTAG.gresource.xml \
+	$(noinst_resource_files) \
+	src/tags/id3lib/patch_id3lib_3.8.3_UTF16_writing_bug.diff \
+	src/tags/libapetag/COPYING.LGPL \
+	src/tags/libapetag/README.apetag \
+	src/tags/libapetag/id3v2_read.c \
+	src/tags/libapetag/id3v2_read.h \
+	src/tags/mp4_header.cc \
 	src/win32/resource.h \
 	data/icons/win32/easytag.ico \
 	data/nsis/easytag-header.bmp \
 	data/nsis/easytag-sidebar.bmp \
-	$(pixmaps) \
-	\
+	$(images) \
+	doc/easytag.xml \
+	COPYING.GPL3 \
 	easytag-win32-installer.nsi.in \
-	\
-	HACKING \
-	\
-	doc/easytag.xml
+	HACKING
 
 dist_noinst_SCRIPTS = \
 	autogen.sh
@@ -899,19 +1033,22 @@ CLEANFILES = \
 	$(check_SCRIPTS) \
 	$(desktop_DATA) \
 	$(easytag_rc) \
+	$(enum_data) \
 	$(nodist_man_MANS) \
 	*.log \
 	easytag-$(PACKAGE_VERSION)-setup.exe \
-	easytag-win32-installer.nsi
+	easytag-win32-installer.nsi \
+	src/resource.c \
+	src/resource.h
 
 DISTCLEANFILES = \
 	po/.intltool-merge-cache
 
-all: config.h
+all: $(BUILT_SOURCES) config.h
 	$(MAKE) $(AM_MAKEFLAGS) all-recursive
 
 .SUFFIXES:
-.SUFFIXES: .c .cc .cpp .log .o .obj .test .test$(EXEEXT) .trs
+.SUFFIXES: .c .cc .cpp .lo .log .o .obj .test .test$(EXEEXT) .trs
 am--refresh: Makefile
 	@:
 $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
@@ -965,6 +1102,53 @@ doc/version.xml: $(top_builddir)/config.status $(top_srcdir)/doc/version.xml.in
 	cd $(top_builddir) && $(SHELL) ./config.status $@
 src/win32/easytag.rc: $(top_builddir)/config.status $(top_srcdir)/src/win32/easytag.rc.in
 	cd $(top_builddir) && $(SHELL) ./config.status $@
+
+install-nautilus_extensionLTLIBRARIES: $(nautilus_extension_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	@list='$(nautilus_extension_LTLIBRARIES)'; test -n "$(nautilus_extensiondir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(nautilus_extensiondir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(nautilus_extensiondir)" || exit 1; \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(nautilus_extensiondir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(nautilus_extensiondir)"; \
+	}
+
+uninstall-nautilus_extensionLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(nautilus_extension_LTLIBRARIES)'; test -n "$(nautilus_extensiondir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(nautilus_extensiondir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(nautilus_extensiondir)/$$f"; \
+	done
+
+clean-nautilus_extensionLTLIBRARIES:
+	-test -z "$(nautilus_extension_LTLIBRARIES)" || rm -f $(nautilus_extension_LTLIBRARIES)
+	@list='$(nautilus_extension_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+nautilus-extension/$(am__dirstamp):
+	@$(MKDIR_P) nautilus-extension
+	@: > nautilus-extension/$(am__dirstamp)
+nautilus-extension/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) nautilus-extension/$(DEPDIR)
+	@: > nautilus-extension/$(DEPDIR)/$(am__dirstamp)
+nautilus-extension/libnautilus_easytag_la-nautilus-easytag.lo:  \
+	nautilus-extension/$(am__dirstamp) \
+	nautilus-extension/$(DEPDIR)/$(am__dirstamp)
+
+libnautilus-easytag.la: $(libnautilus_easytag_la_OBJECTS) $(libnautilus_easytag_la_DEPENDENCIES) $(EXTRA_libnautilus_easytag_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libnautilus_easytag_la_LINK) $(am_libnautilus_easytag_la_rpath) $(libnautilus_easytag_la_OBJECTS) $(libnautilus_easytag_la_LIBADD) $(LIBS)
 install-binPROGRAMS: $(bin_PROGRAMS)
 	@$(NORMAL_INSTALL)
 	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
@@ -975,6 +1159,7 @@ install-binPROGRAMS: $(bin_PROGRAMS)
 	for p in $$list; do echo "$$p $$p"; done | \
 	sed 's/$(EXEEXT)$$//' | \
 	while read p p1; do if test -f $$p \
+	 || test -f $$p1 \
 	  ; then echo "$$p"; echo "$$p"; else :; fi; \
 	done | \
 	sed -e 'p;s,.*/,,;n;h' \
@@ -989,8 +1174,8 @@ install-binPROGRAMS: $(bin_PROGRAMS)
 	while read type dir files; do \
 	    if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
 	    test -z "$$files" || { \
-	      echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
-	      $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+	    echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+	    $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
 	    } \
 	; done
 
@@ -1006,35 +1191,22 @@ uninstall-binPROGRAMS:
 	cd "$(DESTDIR)$(bindir)" && rm -f $$files
 
 clean-binPROGRAMS:
-	-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+	@list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
 
 clean-checkPROGRAMS:
-	-test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS)
-src/id3lib/$(am__dirstamp):
-	@$(MKDIR_P) src/id3lib
-	@: > src/id3lib/$(am__dirstamp)
-src/id3lib/$(DEPDIR)/$(am__dirstamp):
-	@$(MKDIR_P) src/id3lib/$(DEPDIR)
-	@: > src/id3lib/$(DEPDIR)/$(am__dirstamp)
-src/id3lib/easytag-c_wrapper.$(OBJEXT): src/id3lib/$(am__dirstamp) \
-	src/id3lib/$(DEPDIR)/$(am__dirstamp)
-src/libapetag/$(am__dirstamp):
-	@$(MKDIR_P) src/libapetag
-	@: > src/libapetag/$(am__dirstamp)
-src/libapetag/$(DEPDIR)/$(am__dirstamp):
-	@$(MKDIR_P) src/libapetag/$(DEPDIR)
-	@: > src/libapetag/$(DEPDIR)/$(am__dirstamp)
-src/libapetag/easytag-apetaglib.$(OBJEXT):  \
-	src/libapetag/$(am__dirstamp) \
-	src/libapetag/$(DEPDIR)/$(am__dirstamp)
-src/libapetag/easytag-is_tag.$(OBJEXT): src/libapetag/$(am__dirstamp) \
-	src/libapetag/$(DEPDIR)/$(am__dirstamp)
-src/libapetag/easytag-info_mac.$(OBJEXT):  \
-	src/libapetag/$(am__dirstamp) \
-	src/libapetag/$(DEPDIR)/$(am__dirstamp)
-src/libapetag/easytag-info_mpc.$(OBJEXT):  \
-	src/libapetag/$(am__dirstamp) \
-	src/libapetag/$(DEPDIR)/$(am__dirstamp)
+	@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
 src/$(am__dirstamp):
 	@$(MKDIR_P) src
 	@: > src/$(am__dirstamp)
@@ -1043,15 +1215,13 @@ src/$(DEPDIR)/$(am__dirstamp):
 	@: > src/$(DEPDIR)/$(am__dirstamp)
 src/easytag-about.$(OBJEXT): src/$(am__dirstamp) \
 	src/$(DEPDIR)/$(am__dirstamp)
-src/easytag-ape_tag.$(OBJEXT): src/$(am__dirstamp) \
-	src/$(DEPDIR)/$(am__dirstamp)
 src/easytag-application.$(OBJEXT): src/$(am__dirstamp) \
 	src/$(DEPDIR)/$(am__dirstamp)
-src/easytag-bar.$(OBJEXT): src/$(am__dirstamp) \
+src/easytag-application_window.$(OBJEXT): src/$(am__dirstamp) \
 	src/$(DEPDIR)/$(am__dirstamp)
 src/easytag-browser.$(OBJEXT): src/$(am__dirstamp) \
 	src/$(DEPDIR)/$(am__dirstamp)
-src/easytag-cddb.$(OBJEXT): src/$(am__dirstamp) \
+src/easytag-cddb_dialog.$(OBJEXT): src/$(am__dirstamp) \
 	src/$(DEPDIR)/$(am__dirstamp)
 src/easytag-charset.$(OBJEXT): src/$(am__dirstamp) \
 	src/$(DEPDIR)/$(am__dirstamp)
@@ -1061,56 +1231,107 @@ src/easytag-dlm.$(OBJEXT): src/$(am__dirstamp) \
 	src/$(DEPDIR)/$(am__dirstamp)
 src/easytag-easytag.$(OBJEXT): src/$(am__dirstamp) \
 	src/$(DEPDIR)/$(am__dirstamp)
-src/easytag-et_core.$(OBJEXT): src/$(am__dirstamp) \
-	src/$(DEPDIR)/$(am__dirstamp)
-src/easytag-flac_header.$(OBJEXT): src/$(am__dirstamp) \
-	src/$(DEPDIR)/$(am__dirstamp)
-src/easytag-flac_tag.$(OBJEXT): src/$(am__dirstamp) \
+src/easytag-enums.$(OBJEXT): src/$(am__dirstamp) \
 	src/$(DEPDIR)/$(am__dirstamp)
-src/easytag-gio_wrapper.$(OBJEXT): src/$(am__dirstamp) \
-	src/$(DEPDIR)/$(am__dirstamp)
-src/easytag-gtk2_compat.$(OBJEXT): src/$(am__dirstamp) \
+src/easytag-et_core.$(OBJEXT): src/$(am__dirstamp) \
 	src/$(DEPDIR)/$(am__dirstamp)
-src/easytag-id3_tag.$(OBJEXT): src/$(am__dirstamp) \
+src/easytag-file_area.$(OBJEXT): src/$(am__dirstamp) \
 	src/$(DEPDIR)/$(am__dirstamp)
-src/easytag-id3v24_tag.$(OBJEXT): src/$(am__dirstamp) \
+src/easytag-load_files_dialog.$(OBJEXT): src/$(am__dirstamp) \
 	src/$(DEPDIR)/$(am__dirstamp)
 src/easytag-log.$(OBJEXT): src/$(am__dirstamp) \
 	src/$(DEPDIR)/$(am__dirstamp)
-src/easytag-misc.$(OBJEXT): src/$(am__dirstamp) \
-	src/$(DEPDIR)/$(am__dirstamp)
-src/easytag-monkeyaudio_header.$(OBJEXT): src/$(am__dirstamp) \
-	src/$(DEPDIR)/$(am__dirstamp)
-src/easytag-mpeg_header.$(OBJEXT): src/$(am__dirstamp) \
-	src/$(DEPDIR)/$(am__dirstamp)
-src/easytag-mp4_tag.$(OBJEXT): src/$(am__dirstamp) \
-	src/$(DEPDIR)/$(am__dirstamp)
-src/easytag-musepack_header.$(OBJEXT): src/$(am__dirstamp) \
-	src/$(DEPDIR)/$(am__dirstamp)
-src/easytag-ogg_header.$(OBJEXT): src/$(am__dirstamp) \
+src/easytag-main.$(OBJEXT): src/$(am__dirstamp) \
 	src/$(DEPDIR)/$(am__dirstamp)
-src/easytag-ogg_tag.$(OBJEXT): src/$(am__dirstamp) \
+src/easytag-misc.$(OBJEXT): src/$(am__dirstamp) \
 	src/$(DEPDIR)/$(am__dirstamp)
-src/easytag-opus_header.$(OBJEXT): src/$(am__dirstamp) \
+src/easytag-picture.$(OBJEXT): src/$(am__dirstamp) \
 	src/$(DEPDIR)/$(am__dirstamp)
-src/easytag-opus_tag.$(OBJEXT): src/$(am__dirstamp) \
+src/easytag-playlist_dialog.$(OBJEXT): src/$(am__dirstamp) \
 	src/$(DEPDIR)/$(am__dirstamp)
-src/easytag-picture.$(OBJEXT): src/$(am__dirstamp) \
+src/easytag-preferences_dialog.$(OBJEXT): src/$(am__dirstamp) \
 	src/$(DEPDIR)/$(am__dirstamp)
-src/easytag-prefs.$(OBJEXT): src/$(am__dirstamp) \
+src/easytag-progress_bar.$(OBJEXT): src/$(am__dirstamp) \
 	src/$(DEPDIR)/$(am__dirstamp)
 src/easytag-scan.$(OBJEXT): src/$(am__dirstamp) \
 	src/$(DEPDIR)/$(am__dirstamp)
 src/easytag-scan_dialog.$(OBJEXT): src/$(am__dirstamp) \
 	src/$(DEPDIR)/$(am__dirstamp)
-src/easytag-setting.$(OBJEXT): src/$(am__dirstamp) \
+src/easytag-search_dialog.$(OBJEXT): src/$(am__dirstamp) \
 	src/$(DEPDIR)/$(am__dirstamp)
-src/easytag-vcedit.$(OBJEXT): src/$(am__dirstamp) \
+src/easytag-setting.$(OBJEXT): src/$(am__dirstamp) \
 	src/$(DEPDIR)/$(am__dirstamp)
-src/easytag-wavpack_header.$(OBJEXT): src/$(am__dirstamp) \
+src/easytag-status_bar.$(OBJEXT): src/$(am__dirstamp) \
 	src/$(DEPDIR)/$(am__dirstamp)
-src/easytag-wavpack_tag.$(OBJEXT): src/$(am__dirstamp) \
+src/easytag-tag_area.$(OBJEXT): src/$(am__dirstamp) \
 	src/$(DEPDIR)/$(am__dirstamp)
+src/tags/id3lib/$(am__dirstamp):
+	@$(MKDIR_P) src/tags/id3lib
+	@: > src/tags/id3lib/$(am__dirstamp)
+src/tags/id3lib/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) src/tags/id3lib/$(DEPDIR)
+	@: > src/tags/id3lib/$(DEPDIR)/$(am__dirstamp)
+src/tags/id3lib/easytag-c_wrapper.$(OBJEXT):  \
+	src/tags/id3lib/$(am__dirstamp) \
+	src/tags/id3lib/$(DEPDIR)/$(am__dirstamp)
+src/tags/libapetag/$(am__dirstamp):
+	@$(MKDIR_P) src/tags/libapetag
+	@: > src/tags/libapetag/$(am__dirstamp)
+src/tags/libapetag/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) src/tags/libapetag/$(DEPDIR)
+	@: > src/tags/libapetag/$(DEPDIR)/$(am__dirstamp)
+src/tags/libapetag/easytag-apetaglib.$(OBJEXT):  \
+	src/tags/libapetag/$(am__dirstamp) \
+	src/tags/libapetag/$(DEPDIR)/$(am__dirstamp)
+src/tags/libapetag/easytag-is_tag.$(OBJEXT):  \
+	src/tags/libapetag/$(am__dirstamp) \
+	src/tags/libapetag/$(DEPDIR)/$(am__dirstamp)
+src/tags/libapetag/easytag-info_mac.$(OBJEXT):  \
+	src/tags/libapetag/$(am__dirstamp) \
+	src/tags/libapetag/$(DEPDIR)/$(am__dirstamp)
+src/tags/libapetag/easytag-info_mpc.$(OBJEXT):  \
+	src/tags/libapetag/$(am__dirstamp) \
+	src/tags/libapetag/$(DEPDIR)/$(am__dirstamp)
+src/tags/$(am__dirstamp):
+	@$(MKDIR_P) src/tags
+	@: > src/tags/$(am__dirstamp)
+src/tags/$(DEPDIR)/$(am__dirstamp):
+	@$(MKDIR_P) src/tags/$(DEPDIR)
+	@: > src/tags/$(DEPDIR)/$(am__dirstamp)
+src/tags/easytag-ape_tag.$(OBJEXT): src/tags/$(am__dirstamp) \
+	src/tags/$(DEPDIR)/$(am__dirstamp)
+src/tags/easytag-flac_header.$(OBJEXT): src/tags/$(am__dirstamp) \
+	src/tags/$(DEPDIR)/$(am__dirstamp)
+src/tags/easytag-flac_tag.$(OBJEXT): src/tags/$(am__dirstamp) \
+	src/tags/$(DEPDIR)/$(am__dirstamp)
+src/tags/easytag-gio_wrapper.$(OBJEXT): src/tags/$(am__dirstamp) \
+	src/tags/$(DEPDIR)/$(am__dirstamp)
+src/tags/easytag-id3_tag.$(OBJEXT): src/tags/$(am__dirstamp) \
+	src/tags/$(DEPDIR)/$(am__dirstamp)
+src/tags/easytag-id3v24_tag.$(OBJEXT): src/tags/$(am__dirstamp) \
+	src/tags/$(DEPDIR)/$(am__dirstamp)
+src/tags/easytag-monkeyaudio_header.$(OBJEXT):  \
+	src/tags/$(am__dirstamp) src/tags/$(DEPDIR)/$(am__dirstamp)
+src/tags/easytag-mpeg_header.$(OBJEXT): src/tags/$(am__dirstamp) \
+	src/tags/$(DEPDIR)/$(am__dirstamp)
+src/tags/easytag-mp4_tag.$(OBJEXT): src/tags/$(am__dirstamp) \
+	src/tags/$(DEPDIR)/$(am__dirstamp)
+src/tags/easytag-musepack_header.$(OBJEXT): src/tags/$(am__dirstamp) \
+	src/tags/$(DEPDIR)/$(am__dirstamp)
+src/tags/easytag-ogg_header.$(OBJEXT): src/tags/$(am__dirstamp) \
+	src/tags/$(DEPDIR)/$(am__dirstamp)
+src/tags/easytag-ogg_tag.$(OBJEXT): src/tags/$(am__dirstamp) \
+	src/tags/$(DEPDIR)/$(am__dirstamp)
+src/tags/easytag-opus_header.$(OBJEXT): src/tags/$(am__dirstamp) \
+	src/tags/$(DEPDIR)/$(am__dirstamp)
+src/tags/easytag-opus_tag.$(OBJEXT): src/tags/$(am__dirstamp) \
+	src/tags/$(DEPDIR)/$(am__dirstamp)
+src/tags/easytag-vcedit.$(OBJEXT): src/tags/$(am__dirstamp) \
+	src/tags/$(DEPDIR)/$(am__dirstamp)
+src/tags/easytag-wavpack_header.$(OBJEXT): src/tags/$(am__dirstamp) \
+	src/tags/$(DEPDIR)/$(am__dirstamp)
+src/tags/easytag-wavpack_tag.$(OBJEXT): src/tags/$(am__dirstamp) \
+	src/tags/$(DEPDIR)/$(am__dirstamp)
 src/win32/$(am__dirstamp):
 	@$(MKDIR_P) src/win32
 	@: > src/win32/$(am__dirstamp)
@@ -1119,6 +1340,8 @@ src/win32/$(DEPDIR)/$(am__dirstamp):
 	@: > src/win32/$(DEPDIR)/$(am__dirstamp)
 src/win32/easytag-win32dep.$(OBJEXT): src/win32/$(am__dirstamp) \
 	src/win32/$(DEPDIR)/$(am__dirstamp)
+src/easytag-resource.$(OBJEXT): src/$(am__dirstamp) \
+	src/$(DEPDIR)/$(am__dirstamp)
 
 easytag$(EXEEXT): $(easytag_OBJECTS) $(easytag_DEPENDENCIES) $(EXTRA_easytag_DEPENDENCIES) 
 	@rm -f easytag$(EXEEXT)
@@ -1140,56 +1363,69 @@ tests/test-scan$(EXEEXT): $(tests_test_scan_OBJECTS) $(tests_test_scan_DEPENDENC
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
+	-rm -f nautilus-extension/*.$(OBJEXT)
+	-rm -f nautilus-extension/*.lo
 	-rm -f src/*.$(OBJEXT)
-	-rm -f src/id3lib/*.$(OBJEXT)
-	-rm -f src/libapetag/*.$(OBJEXT)
+	-rm -f src/tags/*.$(OBJEXT)
+	-rm -f src/tags/id3lib/*.$(OBJEXT)
+	-rm -f src/tags/libapetag/*.$(OBJEXT)
 	-rm -f src/win32/*.$(OBJEXT)
 	-rm -f tests/*.$(OBJEXT)
 
 distclean-compile:
 	-rm -f *.tab.c
 
+ at AMDEP_TRUE@@am__include@ @am__quote at nautilus-extension/$(DEPDIR)/libnautilus_easytag_la-nautilus-easytag.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-about.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-ape_tag.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-application.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-bar.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-application_window.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-browser.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-cddb.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-cddb_dialog.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-charset.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-crc32.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-dlm.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-easytag.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-enums.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-et_core.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-flac_header.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-flac_tag.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-gio_wrapper.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-gtk2_compat.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-id3_tag.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-id3v24_tag.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-file_area.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-load_files_dialog.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-log.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-main.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-misc.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-monkeyaudio_header.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-mp4_tag.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-mpeg_header.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-musepack_header.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-ogg_header.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-ogg_tag.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-opus_header.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-opus_tag.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-picture.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-prefs.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-playlist_dialog.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-preferences_dialog.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-progress_bar.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-resource.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-scan.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-scan_dialog.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-search_dialog.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-setting.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-vcedit.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-wavpack_header.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-wavpack_tag.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-status_bar.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/easytag-tag_area.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/$(DEPDIR)/tests_test_scan-scan.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/id3lib/$(DEPDIR)/easytag-c_wrapper.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/libapetag/$(DEPDIR)/easytag-apetaglib.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/libapetag/$(DEPDIR)/easytag-info_mac.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/libapetag/$(DEPDIR)/easytag-info_mpc.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at src/libapetag/$(DEPDIR)/easytag-is_tag.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/tags/$(DEPDIR)/easytag-ape_tag.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/tags/$(DEPDIR)/easytag-flac_header.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/tags/$(DEPDIR)/easytag-flac_tag.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/tags/$(DEPDIR)/easytag-gio_wrapper.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/tags/$(DEPDIR)/easytag-id3_tag.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/tags/$(DEPDIR)/easytag-id3v24_tag.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/tags/$(DEPDIR)/easytag-monkeyaudio_header.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/tags/$(DEPDIR)/easytag-mp4_tag.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/tags/$(DEPDIR)/easytag-mpeg_header.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/tags/$(DEPDIR)/easytag-musepack_header.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/tags/$(DEPDIR)/easytag-ogg_header.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/tags/$(DEPDIR)/easytag-ogg_tag.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/tags/$(DEPDIR)/easytag-opus_header.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/tags/$(DEPDIR)/easytag-opus_tag.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/tags/$(DEPDIR)/easytag-vcedit.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/tags/$(DEPDIR)/easytag-wavpack_header.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/tags/$(DEPDIR)/easytag-wavpack_tag.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/tags/id3lib/$(DEPDIR)/easytag-c_wrapper.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/tags/libapetag/$(DEPDIR)/easytag-apetaglib.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/tags/libapetag/$(DEPDIR)/easytag-info_mac.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/tags/libapetag/$(DEPDIR)/easytag-info_mpc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at src/tags/libapetag/$(DEPDIR)/easytag-is_tag.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at src/win32/$(DEPDIR)/easytag-win32dep.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at tests/$(DEPDIR)/tests_test_scan-test-scan.Po at am__quote@
 
@@ -1209,61 +1445,20 @@ distclean-compile:
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
 
-src/libapetag/easytag-apetaglib.o: src/libapetag/apetaglib.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/libapetag/easytag-apetaglib.o -MD -MP -MF src/libapetag/$(DEPDIR)/easytag-apetaglib.Tpo -c -o src/libapetag/easytag-apetaglib.o `test -f 'src/libapetag/apetaglib.c' || echo '$(srcdir)/'`src/libapetag/apetaglib.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/libapetag/$(DEPDIR)/easytag-apetaglib.Tpo src/libapetag/$(DEPDIR)/easytag-apetaglib.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/libapetag/apetaglib.c' object='src/libapetag/easytag-apetaglib.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/libapetag/easytag-apetaglib.o `test -f 'src/libapetag/apetaglib.c' || echo '$(srcdir)/'`src/libapetag/apetaglib.c
-
-src/libapetag/easytag-apetaglib.obj: src/libapetag/apetaglib.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/libapetag/easytag-apetaglib.obj -MD -MP -MF src/libapetag/$(DEPDIR)/easytag-apetaglib.Tpo -c -o src/libapetag/easytag-apetaglib.obj `if test -f 'src/libapetag/apetaglib.c'; then $(CYGPATH_W) 'src/libapetag/apetaglib.c'; else $(CYGPATH_W) '$(srcdir)/src/libapetag/apetaglib.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/libapetag/$(DEPDIR)/easytag-apetaglib.Tpo src/libapetag/$(DEPDIR)/easytag-apetaglib.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/libapetag/apetaglib.c' object='src/libapetag/easytag-apetaglib.obj' libtool=no @AMDEPBACKSLASH@
+.c.lo:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+ at am__fastdepCC_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/libapetag/easytag-apetaglib.obj `if test -f 'src/libapetag/apetaglib.c'; then $(CYGPATH_W) 'src/libapetag/apetaglib.c'; else $(CYGPATH_W) '$(srcdir)/src/libapetag/apetaglib.c'; fi`
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
-src/libapetag/easytag-is_tag.o: src/libapetag/is_tag.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/libapetag/easytag-is_tag.o -MD -MP -MF src/libapetag/$(DEPDIR)/easytag-is_tag.Tpo -c -o src/libapetag/easytag-is_tag.o `test -f 'src/libapetag/is_tag.c' || echo '$(srcdir)/'`src/libapetag/is_tag.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/libapetag/$(DEPDIR)/easytag-is_tag.Tpo src/libapetag/$(DEPDIR)/easytag-is_tag.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/libapetag/is_tag.c' object='src/libapetag/easytag-is_tag.o' libtool=no @AMDEPBACKSLASH@
+nautilus-extension/libnautilus_easytag_la-nautilus-easytag.lo: nautilus-extension/nautilus-easytag.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnautilus_easytag_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nautilus-extension/libnautilus_easytag_la-nautilus-easytag.lo -MD -MP -MF nautilus-extension/$(DEPDIR)/libnautilus_easytag_la-nautilus-easytag.Tpo -c -o nautilus-extension/libnautilus_easytag_la-nautilus-easytag.lo `test -f 'nautilus-extension/nautilus-easytag.c' || echo '$(srcdir)/'`nautilus-extension/nautilus-easytag.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) nautilus-extension/$(DEPDIR)/libnautilus_easytag_la-nautilus-easytag.Tpo nautilus-extension/$(DEPDIR)/libnautilus_easytag_la-nautilus-easytag.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='nautilus-extension/nautilus-easytag.c' object='nautilus-extension/libnautilus_easytag_la-nautilus-easytag.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/libapetag/easytag-is_tag.o `test -f 'src/libapetag/is_tag.c' || echo '$(srcdir)/'`src/libapetag/is_tag.c
-
-src/libapetag/easytag-is_tag.obj: src/libapetag/is_tag.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/libapetag/easytag-is_tag.obj -MD -MP -MF src/libapetag/$(DEPDIR)/easytag-is_tag.Tpo -c -o src/libapetag/easytag-is_tag.obj `if test -f 'src/libapetag/is_tag.c'; then $(CYGPATH_W) 'src/libapetag/is_tag.c'; else $(CYGPATH_W) '$(srcdir)/src/libapetag/is_tag.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/libapetag/$(DEPDIR)/easytag-is_tag.Tpo src/libapetag/$(DEPDIR)/easytag-is_tag.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/libapetag/is_tag.c' object='src/libapetag/easytag-is_tag.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/libapetag/easytag-is_tag.obj `if test -f 'src/libapetag/is_tag.c'; then $(CYGPATH_W) 'src/libapetag/is_tag.c'; else $(CYGPATH_W) '$(srcdir)/src/libapetag/is_tag.c'; fi`
-
-src/libapetag/easytag-info_mac.o: src/libapetag/info_mac.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/libapetag/easytag-info_mac.o -MD -MP -MF src/libapetag/$(DEPDIR)/easytag-info_mac.Tpo -c -o src/libapetag/easytag-info_mac.o `test -f 'src/libapetag/info_mac.c' || echo '$(srcdir)/'`src/libapetag/info_mac.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/libapetag/$(DEPDIR)/easytag-info_mac.Tpo src/libapetag/$(DEPDIR)/easytag-info_mac.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/libapetag/info_mac.c' object='src/libapetag/easytag-info_mac.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/libapetag/easytag-info_mac.o `test -f 'src/libapetag/info_mac.c' || echo '$(srcdir)/'`src/libapetag/info_mac.c
-
-src/libapetag/easytag-info_mac.obj: src/libapetag/info_mac.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/libapetag/easytag-info_mac.obj -MD -MP -MF src/libapetag/$(DEPDIR)/easytag-info_mac.Tpo -c -o src/libapetag/easytag-info_mac.obj `if test -f 'src/libapetag/info_mac.c'; then $(CYGPATH_W) 'src/libapetag/info_mac.c'; else $(CYGPATH_W) '$(srcdir)/src/libapetag/info_mac.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/libapetag/$(DEPDIR)/easytag-info_mac.Tpo src/libapetag/$(DEPDIR)/easytag-info_mac.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/libapetag/info_mac.c' object='src/libapetag/easytag-info_mac.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/libapetag/easytag-info_mac.obj `if test -f 'src/libapetag/info_mac.c'; then $(CYGPATH_W) 'src/libapetag/info_mac.c'; else $(CYGPATH_W) '$(srcdir)/src/libapetag/info_mac.c'; fi`
-
-src/libapetag/easytag-info_mpc.o: src/libapetag/info_mpc.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/libapetag/easytag-info_mpc.o -MD -MP -MF src/libapetag/$(DEPDIR)/easytag-info_mpc.Tpo -c -o src/libapetag/easytag-info_mpc.o `test -f 'src/libapetag/info_mpc.c' || echo '$(srcdir)/'`src/libapetag/info_mpc.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/libapetag/$(DEPDIR)/easytag-info_mpc.Tpo src/libapetag/$(DEPDIR)/easytag-info_mpc.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/libapetag/info_mpc.c' object='src/libapetag/easytag-info_mpc.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/libapetag/easytag-info_mpc.o `test -f 'src/libapetag/info_mpc.c' || echo '$(srcdir)/'`src/libapetag/info_mpc.c
-
-src/libapetag/easytag-info_mpc.obj: src/libapetag/info_mpc.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/libapetag/easytag-info_mpc.obj -MD -MP -MF src/libapetag/$(DEPDIR)/easytag-info_mpc.Tpo -c -o src/libapetag/easytag-info_mpc.obj `if test -f 'src/libapetag/info_mpc.c'; then $(CYGPATH_W) 'src/libapetag/info_mpc.c'; else $(CYGPATH_W) '$(srcdir)/src/libapetag/info_mpc.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/libapetag/$(DEPDIR)/easytag-info_mpc.Tpo src/libapetag/$(DEPDIR)/easytag-info_mpc.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/libapetag/info_mpc.c' object='src/libapetag/easytag-info_mpc.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/libapetag/easytag-info_mpc.obj `if test -f 'src/libapetag/info_mpc.c'; then $(CYGPATH_W) 'src/libapetag/info_mpc.c'; else $(CYGPATH_W) '$(srcdir)/src/libapetag/info_mpc.c'; fi`
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libnautilus_easytag_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nautilus-extension/libnautilus_easytag_la-nautilus-easytag.lo `test -f 'nautilus-extension/nautilus-easytag.c' || echo '$(srcdir)/'`nautilus-extension/nautilus-easytag.c
 
 src/easytag-about.o: src/about.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-about.o -MD -MP -MF src/$(DEPDIR)/easytag-about.Tpo -c -o src/easytag-about.o `test -f 'src/about.c' || echo '$(srcdir)/'`src/about.c
@@ -1279,20 +1474,6 @@ src/easytag-about.obj: src/about.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-about.obj `if test -f 'src/about.c'; then $(CYGPATH_W) 'src/about.c'; else $(CYGPATH_W) '$(srcdir)/src/about.c'; fi`
 
-src/easytag-ape_tag.o: src/ape_tag.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-ape_tag.o -MD -MP -MF src/$(DEPDIR)/easytag-ape_tag.Tpo -c -o src/easytag-ape_tag.o `test -f 'src/ape_tag.c' || echo '$(srcdir)/'`src/ape_tag.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-ape_tag.Tpo src/$(DEPDIR)/easytag-ape_tag.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/ape_tag.c' object='src/easytag-ape_tag.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-ape_tag.o `test -f 'src/ape_tag.c' || echo '$(srcdir)/'`src/ape_tag.c
-
-src/easytag-ape_tag.obj: src/ape_tag.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-ape_tag.obj -MD -MP -MF src/$(DEPDIR)/easytag-ape_tag.Tpo -c -o src/easytag-ape_tag.obj `if test -f 'src/ape_tag.c'; then $(CYGPATH_W) 'src/ape_tag.c'; else $(CYGPATH_W) '$(srcdir)/src/ape_tag.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-ape_tag.Tpo src/$(DEPDIR)/easytag-ape_tag.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/ape_tag.c' object='src/easytag-ape_tag.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-ape_tag.obj `if test -f 'src/ape_tag.c'; then $(CYGPATH_W) 'src/ape_tag.c'; else $(CYGPATH_W) '$(srcdir)/src/ape_tag.c'; fi`
-
 src/easytag-application.o: src/application.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-application.o -MD -MP -MF src/$(DEPDIR)/easytag-application.Tpo -c -o src/easytag-application.o `test -f 'src/application.c' || echo '$(srcdir)/'`src/application.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-application.Tpo src/$(DEPDIR)/easytag-application.Po
@@ -1307,19 +1488,19 @@ src/easytag-application.obj: src/application.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-application.obj `if test -f 'src/application.c'; then $(CYGPATH_W) 'src/application.c'; else $(CYGPATH_W) '$(srcdir)/src/application.c'; fi`
 
-src/easytag-bar.o: src/bar.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-bar.o -MD -MP -MF src/$(DEPDIR)/easytag-bar.Tpo -c -o src/easytag-bar.o `test -f 'src/bar.c' || echo '$(srcdir)/'`src/bar.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-bar.Tpo src/$(DEPDIR)/easytag-bar.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/bar.c' object='src/easytag-bar.o' libtool=no @AMDEPBACKSLASH@
+src/easytag-application_window.o: src/application_window.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-application_window.o -MD -MP -MF src/$(DEPDIR)/easytag-application_window.Tpo -c -o src/easytag-application_window.o `test -f 'src/application_window.c' || echo '$(srcdir)/'`src/application_window.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-application_window.Tpo src/$(DEPDIR)/easytag-application_window.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/application_window.c' object='src/easytag-application_window.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-bar.o `test -f 'src/bar.c' || echo '$(srcdir)/'`src/bar.c
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-application_window.o `test -f 'src/application_window.c' || echo '$(srcdir)/'`src/application_window.c
 
-src/easytag-bar.obj: src/bar.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-bar.obj -MD -MP -MF src/$(DEPDIR)/easytag-bar.Tpo -c -o src/easytag-bar.obj `if test -f 'src/bar.c'; then $(CYGPATH_W) 'src/bar.c'; else $(CYGPATH_W) '$(srcdir)/src/bar.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-bar.Tpo src/$(DEPDIR)/easytag-bar.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/bar.c' object='src/easytag-bar.obj' libtool=no @AMDEPBACKSLASH@
+src/easytag-application_window.obj: src/application_window.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-application_window.obj -MD -MP -MF src/$(DEPDIR)/easytag-application_window.Tpo -c -o src/easytag-application_window.obj `if test -f 'src/application_window.c'; then $(CYGPATH_W) 'src/application_window.c'; else $(CYGPATH_W) '$(srcdir)/src/application_window.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-application_window.Tpo src/$(DEPDIR)/easytag-application_window.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/application_window.c' object='src/easytag-application_window.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-bar.obj `if test -f 'src/bar.c'; then $(CYGPATH_W) 'src/bar.c'; else $(CYGPATH_W) '$(srcdir)/src/bar.c'; fi`
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-application_window.obj `if test -f 'src/application_window.c'; then $(CYGPATH_W) 'src/application_window.c'; else $(CYGPATH_W) '$(srcdir)/src/application_window.c'; fi`
 
 src/easytag-browser.o: src/browser.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-browser.o -MD -MP -MF src/$(DEPDIR)/easytag-browser.Tpo -c -o src/easytag-browser.o `test -f 'src/browser.c' || echo '$(srcdir)/'`src/browser.c
@@ -1335,19 +1516,19 @@ src/easytag-browser.obj: src/browser.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-browser.obj `if test -f 'src/browser.c'; then $(CYGPATH_W) 'src/browser.c'; else $(CYGPATH_W) '$(srcdir)/src/browser.c'; fi`
 
-src/easytag-cddb.o: src/cddb.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-cddb.o -MD -MP -MF src/$(DEPDIR)/easytag-cddb.Tpo -c -o src/easytag-cddb.o `test -f 'src/cddb.c' || echo '$(srcdir)/'`src/cddb.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-cddb.Tpo src/$(DEPDIR)/easytag-cddb.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/cddb.c' object='src/easytag-cddb.o' libtool=no @AMDEPBACKSLASH@
+src/easytag-cddb_dialog.o: src/cddb_dialog.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-cddb_dialog.o -MD -MP -MF src/$(DEPDIR)/easytag-cddb_dialog.Tpo -c -o src/easytag-cddb_dialog.o `test -f 'src/cddb_dialog.c' || echo '$(srcdir)/'`src/cddb_dialog.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-cddb_dialog.Tpo src/$(DEPDIR)/easytag-cddb_dialog.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/cddb_dialog.c' object='src/easytag-cddb_dialog.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-cddb.o `test -f 'src/cddb.c' || echo '$(srcdir)/'`src/cddb.c
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-cddb_dialog.o `test -f 'src/cddb_dialog.c' || echo '$(srcdir)/'`src/cddb_dialog.c
 
-src/easytag-cddb.obj: src/cddb.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-cddb.obj -MD -MP -MF src/$(DEPDIR)/easytag-cddb.Tpo -c -o src/easytag-cddb.obj `if test -f 'src/cddb.c'; then $(CYGPATH_W) 'src/cddb.c'; else $(CYGPATH_W) '$(srcdir)/src/cddb.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-cddb.Tpo src/$(DEPDIR)/easytag-cddb.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/cddb.c' object='src/easytag-cddb.obj' libtool=no @AMDEPBACKSLASH@
+src/easytag-cddb_dialog.obj: src/cddb_dialog.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-cddb_dialog.obj -MD -MP -MF src/$(DEPDIR)/easytag-cddb_dialog.Tpo -c -o src/easytag-cddb_dialog.obj `if test -f 'src/cddb_dialog.c'; then $(CYGPATH_W) 'src/cddb_dialog.c'; else $(CYGPATH_W) '$(srcdir)/src/cddb_dialog.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-cddb_dialog.Tpo src/$(DEPDIR)/easytag-cddb_dialog.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/cddb_dialog.c' object='src/easytag-cddb_dialog.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-cddb.obj `if test -f 'src/cddb.c'; then $(CYGPATH_W) 'src/cddb.c'; else $(CYGPATH_W) '$(srcdir)/src/cddb.c'; fi`
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-cddb_dialog.obj `if test -f 'src/cddb_dialog.c'; then $(CYGPATH_W) 'src/cddb_dialog.c'; else $(CYGPATH_W) '$(srcdir)/src/cddb_dialog.c'; fi`
 
 src/easytag-charset.o: src/charset.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-charset.o -MD -MP -MF src/$(DEPDIR)/easytag-charset.Tpo -c -o src/easytag-charset.o `test -f 'src/charset.c' || echo '$(srcdir)/'`src/charset.c
@@ -1405,6 +1586,20 @@ src/easytag-easytag.obj: src/easytag.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-easytag.obj `if test -f 'src/easytag.c'; then $(CYGPATH_W) 'src/easytag.c'; else $(CYGPATH_W) '$(srcdir)/src/easytag.c'; fi`
 
+src/easytag-enums.o: src/enums.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-enums.o -MD -MP -MF src/$(DEPDIR)/easytag-enums.Tpo -c -o src/easytag-enums.o `test -f 'src/enums.c' || echo '$(srcdir)/'`src/enums.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-enums.Tpo src/$(DEPDIR)/easytag-enums.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/enums.c' object='src/easytag-enums.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-enums.o `test -f 'src/enums.c' || echo '$(srcdir)/'`src/enums.c
+
+src/easytag-enums.obj: src/enums.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-enums.obj -MD -MP -MF src/$(DEPDIR)/easytag-enums.Tpo -c -o src/easytag-enums.obj `if test -f 'src/enums.c'; then $(CYGPATH_W) 'src/enums.c'; else $(CYGPATH_W) '$(srcdir)/src/enums.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-enums.Tpo src/$(DEPDIR)/easytag-enums.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/enums.c' object='src/easytag-enums.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-enums.obj `if test -f 'src/enums.c'; then $(CYGPATH_W) 'src/enums.c'; else $(CYGPATH_W) '$(srcdir)/src/enums.c'; fi`
+
 src/easytag-et_core.o: src/et_core.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-et_core.o -MD -MP -MF src/$(DEPDIR)/easytag-et_core.Tpo -c -o src/easytag-et_core.o `test -f 'src/et_core.c' || echo '$(srcdir)/'`src/et_core.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-et_core.Tpo src/$(DEPDIR)/easytag-et_core.Po
@@ -1419,75 +1614,33 @@ src/easytag-et_core.obj: src/et_core.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-et_core.obj `if test -f 'src/et_core.c'; then $(CYGPATH_W) 'src/et_core.c'; else $(CYGPATH_W) '$(srcdir)/src/et_core.c'; fi`
 
-src/easytag-flac_header.o: src/flac_header.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-flac_header.o -MD -MP -MF src/$(DEPDIR)/easytag-flac_header.Tpo -c -o src/easytag-flac_header.o `test -f 'src/flac_header.c' || echo '$(srcdir)/'`src/flac_header.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-flac_header.Tpo src/$(DEPDIR)/easytag-flac_header.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/flac_header.c' object='src/easytag-flac_header.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-flac_header.o `test -f 'src/flac_header.c' || echo '$(srcdir)/'`src/flac_header.c
-
-src/easytag-flac_header.obj: src/flac_header.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-flac_header.obj -MD -MP -MF src/$(DEPDIR)/easytag-flac_header.Tpo -c -o src/easytag-flac_header.obj `if test -f 'src/flac_header.c'; then $(CYGPATH_W) 'src/flac_header.c'; else $(CYGPATH_W) '$(srcdir)/src/flac_header.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-flac_header.Tpo src/$(DEPDIR)/easytag-flac_header.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/flac_header.c' object='src/easytag-flac_header.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-flac_header.obj `if test -f 'src/flac_header.c'; then $(CYGPATH_W) 'src/flac_header.c'; else $(CYGPATH_W) '$(srcdir)/src/flac_header.c'; fi`
-
-src/easytag-flac_tag.o: src/flac_tag.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-flac_tag.o -MD -MP -MF src/$(DEPDIR)/easytag-flac_tag.Tpo -c -o src/easytag-flac_tag.o `test -f 'src/flac_tag.c' || echo '$(srcdir)/'`src/flac_tag.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-flac_tag.Tpo src/$(DEPDIR)/easytag-flac_tag.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/flac_tag.c' object='src/easytag-flac_tag.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-flac_tag.o `test -f 'src/flac_tag.c' || echo '$(srcdir)/'`src/flac_tag.c
-
-src/easytag-flac_tag.obj: src/flac_tag.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-flac_tag.obj -MD -MP -MF src/$(DEPDIR)/easytag-flac_tag.Tpo -c -o src/easytag-flac_tag.obj `if test -f 'src/flac_tag.c'; then $(CYGPATH_W) 'src/flac_tag.c'; else $(CYGPATH_W) '$(srcdir)/src/flac_tag.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-flac_tag.Tpo src/$(DEPDIR)/easytag-flac_tag.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/flac_tag.c' object='src/easytag-flac_tag.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-flac_tag.obj `if test -f 'src/flac_tag.c'; then $(CYGPATH_W) 'src/flac_tag.c'; else $(CYGPATH_W) '$(srcdir)/src/flac_tag.c'; fi`
-
-src/easytag-gtk2_compat.o: src/gtk2_compat.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-gtk2_compat.o -MD -MP -MF src/$(DEPDIR)/easytag-gtk2_compat.Tpo -c -o src/easytag-gtk2_compat.o `test -f 'src/gtk2_compat.c' || echo '$(srcdir)/'`src/gtk2_compat.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-gtk2_compat.Tpo src/$(DEPDIR)/easytag-gtk2_compat.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/gtk2_compat.c' object='src/easytag-gtk2_compat.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-gtk2_compat.o `test -f 'src/gtk2_compat.c' || echo '$(srcdir)/'`src/gtk2_compat.c
-
-src/easytag-gtk2_compat.obj: src/gtk2_compat.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-gtk2_compat.obj -MD -MP -MF src/$(DEPDIR)/easytag-gtk2_compat.Tpo -c -o src/easytag-gtk2_compat.obj `if test -f 'src/gtk2_compat.c'; then $(CYGPATH_W) 'src/gtk2_compat.c'; else $(CYGPATH_W) '$(srcdir)/src/gtk2_compat.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-gtk2_compat.Tpo src/$(DEPDIR)/easytag-gtk2_compat.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/gtk2_compat.c' object='src/easytag-gtk2_compat.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-gtk2_compat.obj `if test -f 'src/gtk2_compat.c'; then $(CYGPATH_W) 'src/gtk2_compat.c'; else $(CYGPATH_W) '$(srcdir)/src/gtk2_compat.c'; fi`
-
-src/easytag-id3_tag.o: src/id3_tag.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-id3_tag.o -MD -MP -MF src/$(DEPDIR)/easytag-id3_tag.Tpo -c -o src/easytag-id3_tag.o `test -f 'src/id3_tag.c' || echo '$(srcdir)/'`src/id3_tag.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-id3_tag.Tpo src/$(DEPDIR)/easytag-id3_tag.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/id3_tag.c' object='src/easytag-id3_tag.o' libtool=no @AMDEPBACKSLASH@
+src/easytag-file_area.o: src/file_area.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-file_area.o -MD -MP -MF src/$(DEPDIR)/easytag-file_area.Tpo -c -o src/easytag-file_area.o `test -f 'src/file_area.c' || echo '$(srcdir)/'`src/file_area.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-file_area.Tpo src/$(DEPDIR)/easytag-file_area.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/file_area.c' object='src/easytag-file_area.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-id3_tag.o `test -f 'src/id3_tag.c' || echo '$(srcdir)/'`src/id3_tag.c
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-file_area.o `test -f 'src/file_area.c' || echo '$(srcdir)/'`src/file_area.c
 
-src/easytag-id3_tag.obj: src/id3_tag.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-id3_tag.obj -MD -MP -MF src/$(DEPDIR)/easytag-id3_tag.Tpo -c -o src/easytag-id3_tag.obj `if test -f 'src/id3_tag.c'; then $(CYGPATH_W) 'src/id3_tag.c'; else $(CYGPATH_W) '$(srcdir)/src/id3_tag.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-id3_tag.Tpo src/$(DEPDIR)/easytag-id3_tag.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/id3_tag.c' object='src/easytag-id3_tag.obj' libtool=no @AMDEPBACKSLASH@
+src/easytag-file_area.obj: src/file_area.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-file_area.obj -MD -MP -MF src/$(DEPDIR)/easytag-file_area.Tpo -c -o src/easytag-file_area.obj `if test -f 'src/file_area.c'; then $(CYGPATH_W) 'src/file_area.c'; else $(CYGPATH_W) '$(srcdir)/src/file_area.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-file_area.Tpo src/$(DEPDIR)/easytag-file_area.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/file_area.c' object='src/easytag-file_area.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-id3_tag.obj `if test -f 'src/id3_tag.c'; then $(CYGPATH_W) 'src/id3_tag.c'; else $(CYGPATH_W) '$(srcdir)/src/id3_tag.c'; fi`
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-file_area.obj `if test -f 'src/file_area.c'; then $(CYGPATH_W) 'src/file_area.c'; else $(CYGPATH_W) '$(srcdir)/src/file_area.c'; fi`
 
-src/easytag-id3v24_tag.o: src/id3v24_tag.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-id3v24_tag.o -MD -MP -MF src/$(DEPDIR)/easytag-id3v24_tag.Tpo -c -o src/easytag-id3v24_tag.o `test -f 'src/id3v24_tag.c' || echo '$(srcdir)/'`src/id3v24_tag.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-id3v24_tag.Tpo src/$(DEPDIR)/easytag-id3v24_tag.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/id3v24_tag.c' object='src/easytag-id3v24_tag.o' libtool=no @AMDEPBACKSLASH@
+src/easytag-load_files_dialog.o: src/load_files_dialog.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-load_files_dialog.o -MD -MP -MF src/$(DEPDIR)/easytag-load_files_dialog.Tpo -c -o src/easytag-load_files_dialog.o `test -f 'src/load_files_dialog.c' || echo '$(srcdir)/'`src/load_files_dialog.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-load_files_dialog.Tpo src/$(DEPDIR)/easytag-load_files_dialog.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/load_files_dialog.c' object='src/easytag-load_files_dialog.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-id3v24_tag.o `test -f 'src/id3v24_tag.c' || echo '$(srcdir)/'`src/id3v24_tag.c
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-load_files_dialog.o `test -f 'src/load_files_dialog.c' || echo '$(srcdir)/'`src/load_files_dialog.c
 
-src/easytag-id3v24_tag.obj: src/id3v24_tag.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-id3v24_tag.obj -MD -MP -MF src/$(DEPDIR)/easytag-id3v24_tag.Tpo -c -o src/easytag-id3v24_tag.obj `if test -f 'src/id3v24_tag.c'; then $(CYGPATH_W) 'src/id3v24_tag.c'; else $(CYGPATH_W) '$(srcdir)/src/id3v24_tag.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-id3v24_tag.Tpo src/$(DEPDIR)/easytag-id3v24_tag.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/id3v24_tag.c' object='src/easytag-id3v24_tag.obj' libtool=no @AMDEPBACKSLASH@
+src/easytag-load_files_dialog.obj: src/load_files_dialog.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-load_files_dialog.obj -MD -MP -MF src/$(DEPDIR)/easytag-load_files_dialog.Tpo -c -o src/easytag-load_files_dialog.obj `if test -f 'src/load_files_dialog.c'; then $(CYGPATH_W) 'src/load_files_dialog.c'; else $(CYGPATH_W) '$(srcdir)/src/load_files_dialog.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-load_files_dialog.Tpo src/$(DEPDIR)/easytag-load_files_dialog.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/load_files_dialog.c' object='src/easytag-load_files_dialog.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-id3v24_tag.obj `if test -f 'src/id3v24_tag.c'; then $(CYGPATH_W) 'src/id3v24_tag.c'; else $(CYGPATH_W) '$(srcdir)/src/id3v24_tag.c'; fi`
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-load_files_dialog.obj `if test -f 'src/load_files_dialog.c'; then $(CYGPATH_W) 'src/load_files_dialog.c'; else $(CYGPATH_W) '$(srcdir)/src/load_files_dialog.c'; fi`
 
 src/easytag-log.o: src/log.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-log.o -MD -MP -MF src/$(DEPDIR)/easytag-log.Tpo -c -o src/easytag-log.o `test -f 'src/log.c' || echo '$(srcdir)/'`src/log.c
@@ -1503,6 +1656,20 @@ src/easytag-log.obj: src/log.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-log.obj `if test -f 'src/log.c'; then $(CYGPATH_W) 'src/log.c'; else $(CYGPATH_W) '$(srcdir)/src/log.c'; fi`
 
+src/easytag-main.o: src/main.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-main.o -MD -MP -MF src/$(DEPDIR)/easytag-main.Tpo -c -o src/easytag-main.o `test -f 'src/main.c' || echo '$(srcdir)/'`src/main.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-main.Tpo src/$(DEPDIR)/easytag-main.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/main.c' object='src/easytag-main.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-main.o `test -f 'src/main.c' || echo '$(srcdir)/'`src/main.c
+
+src/easytag-main.obj: src/main.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-main.obj -MD -MP -MF src/$(DEPDIR)/easytag-main.Tpo -c -o src/easytag-main.obj `if test -f 'src/main.c'; then $(CYGPATH_W) 'src/main.c'; else $(CYGPATH_W) '$(srcdir)/src/main.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-main.Tpo src/$(DEPDIR)/easytag-main.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/main.c' object='src/easytag-main.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-main.obj `if test -f 'src/main.c'; then $(CYGPATH_W) 'src/main.c'; else $(CYGPATH_W) '$(srcdir)/src/main.c'; fi`
+
 src/easytag-misc.o: src/misc.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-misc.o -MD -MP -MF src/$(DEPDIR)/easytag-misc.Tpo -c -o src/easytag-misc.o `test -f 'src/misc.c' || echo '$(srcdir)/'`src/misc.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-misc.Tpo src/$(DEPDIR)/easytag-misc.Po
@@ -1517,104 +1684,6 @@ src/easytag-misc.obj: src/misc.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-misc.obj `if test -f 'src/misc.c'; then $(CYGPATH_W) 'src/misc.c'; else $(CYGPATH_W) '$(srcdir)/src/misc.c'; fi`
 
-src/easytag-monkeyaudio_header.o: src/monkeyaudio_header.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-monkeyaudio_header.o -MD -MP -MF src/$(DEPDIR)/easytag-monkeyaudio_header.Tpo -c -o src/easytag-monkeyaudio_header.o `test -f 'src/monkeyaudio_header.c' || echo '$(srcdir)/'`src/monkeyaudio_header.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-monkeyaudio_header.Tpo src/$(DEPDIR)/easytag-monkeyaudio_header.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/monkeyaudio_header.c' object='src/easytag-monkeyaudio_header.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-monkeyaudio_header.o `test -f 'src/monkeyaudio_header.c' || echo '$(srcdir)/'`src/monkeyaudio_header.c
-
-src/easytag-monkeyaudio_header.obj: src/monkeyaudio_header.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-monkeyaudio_header.obj -MD -MP -MF src/$(DEPDIR)/easytag-monkeyaudio_header.Tpo -c -o src/easytag-monkeyaudio_header.obj `if test -f 'src/monkeyaudio_header.c'; then $(CYGPATH_W) 'src/monkeyaudio_header.c'; else $(CYGPATH_W) '$(srcdir)/src/monkeyaudio_header.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-monkeyaudio_header.Tpo src/$(DEPDIR)/easytag-monkeyaudio_header.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/monkeyaudio_header.c' object='src/easytag-monkeyaudio_header.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-monkeyaudio_header.obj `if test -f 'src/monkeyaudio_header.c'; then $(CYGPATH_W) 'src/monkeyaudio_header.c'; else $(CYGPATH_W) '$(srcdir)/src/monkeyaudio_header.c'; fi`
-
-src/easytag-mpeg_header.o: src/mpeg_header.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-mpeg_header.o -MD -MP -MF src/$(DEPDIR)/easytag-mpeg_header.Tpo -c -o src/easytag-mpeg_header.o `test -f 'src/mpeg_header.c' || echo '$(srcdir)/'`src/mpeg_header.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-mpeg_header.Tpo src/$(DEPDIR)/easytag-mpeg_header.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/mpeg_header.c' object='src/easytag-mpeg_header.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-mpeg_header.o `test -f 'src/mpeg_header.c' || echo '$(srcdir)/'`src/mpeg_header.c
-
-src/easytag-mpeg_header.obj: src/mpeg_header.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-mpeg_header.obj -MD -MP -MF src/$(DEPDIR)/easytag-mpeg_header.Tpo -c -o src/easytag-mpeg_header.obj `if test -f 'src/mpeg_header.c'; then $(CYGPATH_W) 'src/mpeg_header.c'; else $(CYGPATH_W) '$(srcdir)/src/mpeg_header.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-mpeg_header.Tpo src/$(DEPDIR)/easytag-mpeg_header.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/mpeg_header.c' object='src/easytag-mpeg_header.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-mpeg_header.obj `if test -f 'src/mpeg_header.c'; then $(CYGPATH_W) 'src/mpeg_header.c'; else $(CYGPATH_W) '$(srcdir)/src/mpeg_header.c'; fi`
-
-src/easytag-musepack_header.o: src/musepack_header.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-musepack_header.o -MD -MP -MF src/$(DEPDIR)/easytag-musepack_header.Tpo -c -o src/easytag-musepack_header.o `test -f 'src/musepack_header.c' || echo '$(srcdir)/'`src/musepack_header.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-musepack_header.Tpo src/$(DEPDIR)/easytag-musepack_header.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/musepack_header.c' object='src/easytag-musepack_header.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-musepack_header.o `test -f 'src/musepack_header.c' || echo '$(srcdir)/'`src/musepack_header.c
-
-src/easytag-musepack_header.obj: src/musepack_header.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-musepack_header.obj -MD -MP -MF src/$(DEPDIR)/easytag-musepack_header.Tpo -c -o src/easytag-musepack_header.obj `if test -f 'src/musepack_header.c'; then $(CYGPATH_W) 'src/musepack_header.c'; else $(CYGPATH_W) '$(srcdir)/src/musepack_header.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-musepack_header.Tpo src/$(DEPDIR)/easytag-musepack_header.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/musepack_header.c' object='src/easytag-musepack_header.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-musepack_header.obj `if test -f 'src/musepack_header.c'; then $(CYGPATH_W) 'src/musepack_header.c'; else $(CYGPATH_W) '$(srcdir)/src/musepack_header.c'; fi`
-
-src/easytag-ogg_header.o: src/ogg_header.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-ogg_header.o -MD -MP -MF src/$(DEPDIR)/easytag-ogg_header.Tpo -c -o src/easytag-ogg_header.o `test -f 'src/ogg_header.c' || echo '$(srcdir)/'`src/ogg_header.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-ogg_header.Tpo src/$(DEPDIR)/easytag-ogg_header.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/ogg_header.c' object='src/easytag-ogg_header.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-ogg_header.o `test -f 'src/ogg_header.c' || echo '$(srcdir)/'`src/ogg_header.c
-
-src/easytag-ogg_header.obj: src/ogg_header.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-ogg_header.obj -MD -MP -MF src/$(DEPDIR)/easytag-ogg_header.Tpo -c -o src/easytag-ogg_header.obj `if test -f 'src/ogg_header.c'; then $(CYGPATH_W) 'src/ogg_header.c'; else $(CYGPATH_W) '$(srcdir)/src/ogg_header.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-ogg_header.Tpo src/$(DEPDIR)/easytag-ogg_header.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/ogg_header.c' object='src/easytag-ogg_header.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-ogg_header.obj `if test -f 'src/ogg_header.c'; then $(CYGPATH_W) 'src/ogg_header.c'; else $(CYGPATH_W) '$(srcdir)/src/ogg_header.c'; fi`
-
-src/easytag-ogg_tag.o: src/ogg_tag.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-ogg_tag.o -MD -MP -MF src/$(DEPDIR)/easytag-ogg_tag.Tpo -c -o src/easytag-ogg_tag.o `test -f 'src/ogg_tag.c' || echo '$(srcdir)/'`src/ogg_tag.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-ogg_tag.Tpo src/$(DEPDIR)/easytag-ogg_tag.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/ogg_tag.c' object='src/easytag-ogg_tag.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-ogg_tag.o `test -f 'src/ogg_tag.c' || echo '$(srcdir)/'`src/ogg_tag.c
-
-src/easytag-ogg_tag.obj: src/ogg_tag.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-ogg_tag.obj -MD -MP -MF src/$(DEPDIR)/easytag-ogg_tag.Tpo -c -o src/easytag-ogg_tag.obj `if test -f 'src/ogg_tag.c'; then $(CYGPATH_W) 'src/ogg_tag.c'; else $(CYGPATH_W) '$(srcdir)/src/ogg_tag.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-ogg_tag.Tpo src/$(DEPDIR)/easytag-ogg_tag.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/ogg_tag.c' object='src/easytag-ogg_tag.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-ogg_tag.obj `if test -f 'src/ogg_tag.c'; then $(CYGPATH_W) 'src/ogg_tag.c'; else $(CYGPATH_W) '$(srcdir)/src/ogg_tag.c'; fi`
-
-src/easytag-opus_header.o: src/opus_header.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-opus_header.o -MD -MP -MF src/$(DEPDIR)/easytag-opus_header.Tpo -c -o src/easytag-opus_header.o `test -f 'src/opus_header.c' || echo '$(srcdir)/'`src/opus_header.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-opus_header.Tpo src/$(DEPDIR)/easytag-opus_header.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/opus_header.c' object='src/easytag-opus_header.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-opus_header.o `test -f 'src/opus_header.c' || echo '$(srcdir)/'`src/opus_header.c
-
-src/easytag-opus_header.obj: src/opus_header.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-opus_header.obj -MD -MP -MF src/$(DEPDIR)/easytag-opus_header.Tpo -c -o src/easytag-opus_header.obj `if test -f 'src/opus_header.c'; then $(CYGPATH_W) 'src/opus_header.c'; else $(CYGPATH_W) '$(srcdir)/src/opus_header.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-opus_header.Tpo src/$(DEPDIR)/easytag-opus_header.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/opus_header.c' object='src/easytag-opus_header.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-opus_header.obj `if test -f 'src/opus_header.c'; then $(CYGPATH_W) 'src/opus_header.c'; else $(CYGPATH_W) '$(srcdir)/src/opus_header.c'; fi`
-
-src/easytag-opus_tag.o: src/opus_tag.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-opus_tag.o -MD -MP -MF src/$(DEPDIR)/easytag-opus_tag.Tpo -c -o src/easytag-opus_tag.o `test -f 'src/opus_tag.c' || echo '$(srcdir)/'`src/opus_tag.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-opus_tag.Tpo src/$(DEPDIR)/easytag-opus_tag.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/opus_tag.c' object='src/easytag-opus_tag.o' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-opus_tag.o `test -f 'src/opus_tag.c' || echo '$(srcdir)/'`src/opus_tag.c
-
-src/easytag-opus_tag.obj: src/opus_tag.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-opus_tag.obj -MD -MP -MF src/$(DEPDIR)/easytag-opus_tag.Tpo -c -o src/easytag-opus_tag.obj `if test -f 'src/opus_tag.c'; then $(CYGPATH_W) 'src/opus_tag.c'; else $(CYGPATH_W) '$(srcdir)/src/opus_tag.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-opus_tag.Tpo src/$(DEPDIR)/easytag-opus_tag.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/opus_tag.c' object='src/easytag-opus_tag.obj' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-opus_tag.obj `if test -f 'src/opus_tag.c'; then $(CYGPATH_W) 'src/opus_tag.c'; else $(CYGPATH_W) '$(srcdir)/src/opus_tag.c'; fi`
-
 src/easytag-picture.o: src/picture.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-picture.o -MD -MP -MF src/$(DEPDIR)/easytag-picture.Tpo -c -o src/easytag-picture.o `test -f 'src/picture.c' || echo '$(srcdir)/'`src/picture.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-picture.Tpo src/$(DEPDIR)/easytag-picture.Po
@@ -1629,19 +1698,47 @@ src/easytag-picture.obj: src/picture.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-picture.obj `if test -f 'src/picture.c'; then $(CYGPATH_W) 'src/picture.c'; else $(CYGPATH_W) '$(srcdir)/src/picture.c'; fi`
 
-src/easytag-prefs.o: src/prefs.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-prefs.o -MD -MP -MF src/$(DEPDIR)/easytag-prefs.Tpo -c -o src/easytag-prefs.o `test -f 'src/prefs.c' || echo '$(srcdir)/'`src/prefs.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-prefs.Tpo src/$(DEPDIR)/easytag-prefs.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/prefs.c' object='src/easytag-prefs.o' libtool=no @AMDEPBACKSLASH@
+src/easytag-playlist_dialog.o: src/playlist_dialog.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-playlist_dialog.o -MD -MP -MF src/$(DEPDIR)/easytag-playlist_dialog.Tpo -c -o src/easytag-playlist_dialog.o `test -f 'src/playlist_dialog.c' || echo '$(srcdir)/'`src/playlist_dialog.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-playlist_dialog.Tpo src/$(DEPDIR)/easytag-playlist_dialog.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/playlist_dialog.c' object='src/easytag-playlist_dialog.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-playlist_dialog.o `test -f 'src/playlist_dialog.c' || echo '$(srcdir)/'`src/playlist_dialog.c
+
+src/easytag-playlist_dialog.obj: src/playlist_dialog.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-playlist_dialog.obj -MD -MP -MF src/$(DEPDIR)/easytag-playlist_dialog.Tpo -c -o src/easytag-playlist_dialog.obj `if test -f 'src/playlist_dialog.c'; then $(CYGPATH_W) 'src/playlist_dialog.c'; else $(CYGPATH_W) '$(srcdir)/src/playlist_dialog.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-playlist_dialog.Tpo src/$(DEPDIR)/easytag-playlist_dialog.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/playlist_dialog.c' object='src/easytag-playlist_dialog.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-playlist_dialog.obj `if test -f 'src/playlist_dialog.c'; then $(CYGPATH_W) 'src/playlist_dialog.c'; else $(CYGPATH_W) '$(srcdir)/src/playlist_dialog.c'; fi`
+
+src/easytag-preferences_dialog.o: src/preferences_dialog.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-preferences_dialog.o -MD -MP -MF src/$(DEPDIR)/easytag-preferences_dialog.Tpo -c -o src/easytag-preferences_dialog.o `test -f 'src/preferences_dialog.c' || echo '$(srcdir)/'`src/preferences_dialog.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-preferences_dialog.Tpo src/$(DEPDIR)/easytag-preferences_dialog.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/preferences_dialog.c' object='src/easytag-preferences_dialog.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-preferences_dialog.o `test -f 'src/preferences_dialog.c' || echo '$(srcdir)/'`src/preferences_dialog.c
+
+src/easytag-preferences_dialog.obj: src/preferences_dialog.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-preferences_dialog.obj -MD -MP -MF src/$(DEPDIR)/easytag-preferences_dialog.Tpo -c -o src/easytag-preferences_dialog.obj `if test -f 'src/preferences_dialog.c'; then $(CYGPATH_W) 'src/preferences_dialog.c'; else $(CYGPATH_W) '$(srcdir)/src/preferences_dialog.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-preferences_dialog.Tpo src/$(DEPDIR)/easytag-preferences_dialog.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/preferences_dialog.c' object='src/easytag-preferences_dialog.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-prefs.o `test -f 'src/prefs.c' || echo '$(srcdir)/'`src/prefs.c
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-preferences_dialog.obj `if test -f 'src/preferences_dialog.c'; then $(CYGPATH_W) 'src/preferences_dialog.c'; else $(CYGPATH_W) '$(srcdir)/src/preferences_dialog.c'; fi`
 
-src/easytag-prefs.obj: src/prefs.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-prefs.obj -MD -MP -MF src/$(DEPDIR)/easytag-prefs.Tpo -c -o src/easytag-prefs.obj `if test -f 'src/prefs.c'; then $(CYGPATH_W) 'src/prefs.c'; else $(CYGPATH_W) '$(srcdir)/src/prefs.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-prefs.Tpo src/$(DEPDIR)/easytag-prefs.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/prefs.c' object='src/easytag-prefs.obj' libtool=no @AMDEPBACKSLASH@
+src/easytag-progress_bar.o: src/progress_bar.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-progress_bar.o -MD -MP -MF src/$(DEPDIR)/easytag-progress_bar.Tpo -c -o src/easytag-progress_bar.o `test -f 'src/progress_bar.c' || echo '$(srcdir)/'`src/progress_bar.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-progress_bar.Tpo src/$(DEPDIR)/easytag-progress_bar.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/progress_bar.c' object='src/easytag-progress_bar.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-prefs.obj `if test -f 'src/prefs.c'; then $(CYGPATH_W) 'src/prefs.c'; else $(CYGPATH_W) '$(srcdir)/src/prefs.c'; fi`
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-progress_bar.o `test -f 'src/progress_bar.c' || echo '$(srcdir)/'`src/progress_bar.c
+
+src/easytag-progress_bar.obj: src/progress_bar.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-progress_bar.obj -MD -MP -MF src/$(DEPDIR)/easytag-progress_bar.Tpo -c -o src/easytag-progress_bar.obj `if test -f 'src/progress_bar.c'; then $(CYGPATH_W) 'src/progress_bar.c'; else $(CYGPATH_W) '$(srcdir)/src/progress_bar.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-progress_bar.Tpo src/$(DEPDIR)/easytag-progress_bar.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/progress_bar.c' object='src/easytag-progress_bar.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-progress_bar.obj `if test -f 'src/progress_bar.c'; then $(CYGPATH_W) 'src/progress_bar.c'; else $(CYGPATH_W) '$(srcdir)/src/progress_bar.c'; fi`
 
 src/easytag-scan.o: src/scan.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-scan.o -MD -MP -MF src/$(DEPDIR)/easytag-scan.Tpo -c -o src/easytag-scan.o `test -f 'src/scan.c' || echo '$(srcdir)/'`src/scan.c
@@ -1671,6 +1768,20 @@ src/easytag-scan_dialog.obj: src/scan_dialog.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-scan_dialog.obj `if test -f 'src/scan_dialog.c'; then $(CYGPATH_W) 'src/scan_dialog.c'; else $(CYGPATH_W) '$(srcdir)/src/scan_dialog.c'; fi`
 
+src/easytag-search_dialog.o: src/search_dialog.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-search_dialog.o -MD -MP -MF src/$(DEPDIR)/easytag-search_dialog.Tpo -c -o src/easytag-search_dialog.o `test -f 'src/search_dialog.c' || echo '$(srcdir)/'`src/search_dialog.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-search_dialog.Tpo src/$(DEPDIR)/easytag-search_dialog.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/search_dialog.c' object='src/easytag-search_dialog.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-search_dialog.o `test -f 'src/search_dialog.c' || echo '$(srcdir)/'`src/search_dialog.c
+
+src/easytag-search_dialog.obj: src/search_dialog.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-search_dialog.obj -MD -MP -MF src/$(DEPDIR)/easytag-search_dialog.Tpo -c -o src/easytag-search_dialog.obj `if test -f 'src/search_dialog.c'; then $(CYGPATH_W) 'src/search_dialog.c'; else $(CYGPATH_W) '$(srcdir)/src/search_dialog.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-search_dialog.Tpo src/$(DEPDIR)/easytag-search_dialog.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/search_dialog.c' object='src/easytag-search_dialog.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-search_dialog.obj `if test -f 'src/search_dialog.c'; then $(CYGPATH_W) 'src/search_dialog.c'; else $(CYGPATH_W) '$(srcdir)/src/search_dialog.c'; fi`
+
 src/easytag-setting.o: src/setting.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-setting.o -MD -MP -MF src/$(DEPDIR)/easytag-setting.Tpo -c -o src/easytag-setting.o `test -f 'src/setting.c' || echo '$(srcdir)/'`src/setting.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-setting.Tpo src/$(DEPDIR)/easytag-setting.Po
@@ -1685,47 +1796,299 @@ src/easytag-setting.obj: src/setting.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-setting.obj `if test -f 'src/setting.c'; then $(CYGPATH_W) 'src/setting.c'; else $(CYGPATH_W) '$(srcdir)/src/setting.c'; fi`
 
-src/easytag-vcedit.o: src/vcedit.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-vcedit.o -MD -MP -MF src/$(DEPDIR)/easytag-vcedit.Tpo -c -o src/easytag-vcedit.o `test -f 'src/vcedit.c' || echo '$(srcdir)/'`src/vcedit.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-vcedit.Tpo src/$(DEPDIR)/easytag-vcedit.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/vcedit.c' object='src/easytag-vcedit.o' libtool=no @AMDEPBACKSLASH@
+src/easytag-status_bar.o: src/status_bar.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-status_bar.o -MD -MP -MF src/$(DEPDIR)/easytag-status_bar.Tpo -c -o src/easytag-status_bar.o `test -f 'src/status_bar.c' || echo '$(srcdir)/'`src/status_bar.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-status_bar.Tpo src/$(DEPDIR)/easytag-status_bar.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/status_bar.c' object='src/easytag-status_bar.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-status_bar.o `test -f 'src/status_bar.c' || echo '$(srcdir)/'`src/status_bar.c
+
+src/easytag-status_bar.obj: src/status_bar.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-status_bar.obj -MD -MP -MF src/$(DEPDIR)/easytag-status_bar.Tpo -c -o src/easytag-status_bar.obj `if test -f 'src/status_bar.c'; then $(CYGPATH_W) 'src/status_bar.c'; else $(CYGPATH_W) '$(srcdir)/src/status_bar.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-status_bar.Tpo src/$(DEPDIR)/easytag-status_bar.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/status_bar.c' object='src/easytag-status_bar.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-status_bar.obj `if test -f 'src/status_bar.c'; then $(CYGPATH_W) 'src/status_bar.c'; else $(CYGPATH_W) '$(srcdir)/src/status_bar.c'; fi`
+
+src/easytag-tag_area.o: src/tag_area.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-tag_area.o -MD -MP -MF src/$(DEPDIR)/easytag-tag_area.Tpo -c -o src/easytag-tag_area.o `test -f 'src/tag_area.c' || echo '$(srcdir)/'`src/tag_area.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-tag_area.Tpo src/$(DEPDIR)/easytag-tag_area.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tag_area.c' object='src/easytag-tag_area.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-tag_area.o `test -f 'src/tag_area.c' || echo '$(srcdir)/'`src/tag_area.c
+
+src/easytag-tag_area.obj: src/tag_area.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-tag_area.obj -MD -MP -MF src/$(DEPDIR)/easytag-tag_area.Tpo -c -o src/easytag-tag_area.obj `if test -f 'src/tag_area.c'; then $(CYGPATH_W) 'src/tag_area.c'; else $(CYGPATH_W) '$(srcdir)/src/tag_area.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-tag_area.Tpo src/$(DEPDIR)/easytag-tag_area.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tag_area.c' object='src/easytag-tag_area.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-tag_area.obj `if test -f 'src/tag_area.c'; then $(CYGPATH_W) 'src/tag_area.c'; else $(CYGPATH_W) '$(srcdir)/src/tag_area.c'; fi`
+
+src/tags/libapetag/easytag-apetaglib.o: src/tags/libapetag/apetaglib.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/tags/libapetag/easytag-apetaglib.o -MD -MP -MF src/tags/libapetag/$(DEPDIR)/easytag-apetaglib.Tpo -c -o src/tags/libapetag/easytag-apetaglib.o `test -f 'src/tags/libapetag/apetaglib.c' || echo '$(srcdir)/'`src/tags/libapetag/apetaglib.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/tags/libapetag/$(DEPDIR)/easytag-apetaglib.Tpo src/tags/libapetag/$(DEPDIR)/easytag-apetaglib.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tags/libapetag/apetaglib.c' object='src/tags/libapetag/easytag-apetaglib.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/tags/libapetag/easytag-apetaglib.o `test -f 'src/tags/libapetag/apetaglib.c' || echo '$(srcdir)/'`src/tags/libapetag/apetaglib.c
+
+src/tags/libapetag/easytag-apetaglib.obj: src/tags/libapetag/apetaglib.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/tags/libapetag/easytag-apetaglib.obj -MD -MP -MF src/tags/libapetag/$(DEPDIR)/easytag-apetaglib.Tpo -c -o src/tags/libapetag/easytag-apetaglib.obj `if test -f 'src/tags/libapetag/apetaglib.c'; then $(CYGPATH_W) 'src/tags/libapetag/apetaglib.c'; else $(CYGPATH_W) '$(srcdir)/src/tags/libapetag/apetaglib.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/tags/libapetag/$(DEPDIR)/easytag-apetaglib.Tpo src/tags/libapetag/$(DEPDIR)/easytag-apetaglib.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tags/libapetag/apetaglib.c' object='src/tags/libapetag/easytag-apetaglib.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/tags/libapetag/easytag-apetaglib.obj `if test -f 'src/tags/libapetag/apetaglib.c'; then $(CYGPATH_W) 'src/tags/libapetag/apetaglib.c'; else $(CYGPATH_W) '$(srcdir)/src/tags/libapetag/apetaglib.c'; fi`
+
+src/tags/libapetag/easytag-is_tag.o: src/tags/libapetag/is_tag.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/tags/libapetag/easytag-is_tag.o -MD -MP -MF src/tags/libapetag/$(DEPDIR)/easytag-is_tag.Tpo -c -o src/tags/libapetag/easytag-is_tag.o `test -f 'src/tags/libapetag/is_tag.c' || echo '$(srcdir)/'`src/tags/libapetag/is_tag.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/tags/libapetag/$(DEPDIR)/easytag-is_tag.Tpo src/tags/libapetag/$(DEPDIR)/easytag-is_tag.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tags/libapetag/is_tag.c' object='src/tags/libapetag/easytag-is_tag.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/tags/libapetag/easytag-is_tag.o `test -f 'src/tags/libapetag/is_tag.c' || echo '$(srcdir)/'`src/tags/libapetag/is_tag.c
+
+src/tags/libapetag/easytag-is_tag.obj: src/tags/libapetag/is_tag.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/tags/libapetag/easytag-is_tag.obj -MD -MP -MF src/tags/libapetag/$(DEPDIR)/easytag-is_tag.Tpo -c -o src/tags/libapetag/easytag-is_tag.obj `if test -f 'src/tags/libapetag/is_tag.c'; then $(CYGPATH_W) 'src/tags/libapetag/is_tag.c'; else $(CYGPATH_W) '$(srcdir)/src/tags/libapetag/is_tag.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/tags/libapetag/$(DEPDIR)/easytag-is_tag.Tpo src/tags/libapetag/$(DEPDIR)/easytag-is_tag.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tags/libapetag/is_tag.c' object='src/tags/libapetag/easytag-is_tag.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/tags/libapetag/easytag-is_tag.obj `if test -f 'src/tags/libapetag/is_tag.c'; then $(CYGPATH_W) 'src/tags/libapetag/is_tag.c'; else $(CYGPATH_W) '$(srcdir)/src/tags/libapetag/is_tag.c'; fi`
+
+src/tags/libapetag/easytag-info_mac.o: src/tags/libapetag/info_mac.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/tags/libapetag/easytag-info_mac.o -MD -MP -MF src/tags/libapetag/$(DEPDIR)/easytag-info_mac.Tpo -c -o src/tags/libapetag/easytag-info_mac.o `test -f 'src/tags/libapetag/info_mac.c' || echo '$(srcdir)/'`src/tags/libapetag/info_mac.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/tags/libapetag/$(DEPDIR)/easytag-info_mac.Tpo src/tags/libapetag/$(DEPDIR)/easytag-info_mac.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tags/libapetag/info_mac.c' object='src/tags/libapetag/easytag-info_mac.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/tags/libapetag/easytag-info_mac.o `test -f 'src/tags/libapetag/info_mac.c' || echo '$(srcdir)/'`src/tags/libapetag/info_mac.c
+
+src/tags/libapetag/easytag-info_mac.obj: src/tags/libapetag/info_mac.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/tags/libapetag/easytag-info_mac.obj -MD -MP -MF src/tags/libapetag/$(DEPDIR)/easytag-info_mac.Tpo -c -o src/tags/libapetag/easytag-info_mac.obj `if test -f 'src/tags/libapetag/info_mac.c'; then $(CYGPATH_W) 'src/tags/libapetag/info_mac.c'; else $(CYGPATH_W) '$(srcdir)/src/tags/libapetag/info_mac.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/tags/libapetag/$(DEPDIR)/easytag-info_mac.Tpo src/tags/libapetag/$(DEPDIR)/easytag-info_mac.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tags/libapetag/info_mac.c' object='src/tags/libapetag/easytag-info_mac.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-vcedit.o `test -f 'src/vcedit.c' || echo '$(srcdir)/'`src/vcedit.c
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/tags/libapetag/easytag-info_mac.obj `if test -f 'src/tags/libapetag/info_mac.c'; then $(CYGPATH_W) 'src/tags/libapetag/info_mac.c'; else $(CYGPATH_W) '$(srcdir)/src/tags/libapetag/info_mac.c'; fi`
 
-src/easytag-vcedit.obj: src/vcedit.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-vcedit.obj -MD -MP -MF src/$(DEPDIR)/easytag-vcedit.Tpo -c -o src/easytag-vcedit.obj `if test -f 'src/vcedit.c'; then $(CYGPATH_W) 'src/vcedit.c'; else $(CYGPATH_W) '$(srcdir)/src/vcedit.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-vcedit.Tpo src/$(DEPDIR)/easytag-vcedit.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/vcedit.c' object='src/easytag-vcedit.obj' libtool=no @AMDEPBACKSLASH@
+src/tags/libapetag/easytag-info_mpc.o: src/tags/libapetag/info_mpc.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/tags/libapetag/easytag-info_mpc.o -MD -MP -MF src/tags/libapetag/$(DEPDIR)/easytag-info_mpc.Tpo -c -o src/tags/libapetag/easytag-info_mpc.o `test -f 'src/tags/libapetag/info_mpc.c' || echo '$(srcdir)/'`src/tags/libapetag/info_mpc.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/tags/libapetag/$(DEPDIR)/easytag-info_mpc.Tpo src/tags/libapetag/$(DEPDIR)/easytag-info_mpc.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tags/libapetag/info_mpc.c' object='src/tags/libapetag/easytag-info_mpc.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-vcedit.obj `if test -f 'src/vcedit.c'; then $(CYGPATH_W) 'src/vcedit.c'; else $(CYGPATH_W) '$(srcdir)/src/vcedit.c'; fi`
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/tags/libapetag/easytag-info_mpc.o `test -f 'src/tags/libapetag/info_mpc.c' || echo '$(srcdir)/'`src/tags/libapetag/info_mpc.c
 
-src/easytag-wavpack_header.o: src/wavpack_header.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-wavpack_header.o -MD -MP -MF src/$(DEPDIR)/easytag-wavpack_header.Tpo -c -o src/easytag-wavpack_header.o `test -f 'src/wavpack_header.c' || echo '$(srcdir)/'`src/wavpack_header.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-wavpack_header.Tpo src/$(DEPDIR)/easytag-wavpack_header.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/wavpack_header.c' object='src/easytag-wavpack_header.o' libtool=no @AMDEPBACKSLASH@
+src/tags/libapetag/easytag-info_mpc.obj: src/tags/libapetag/info_mpc.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/tags/libapetag/easytag-info_mpc.obj -MD -MP -MF src/tags/libapetag/$(DEPDIR)/easytag-info_mpc.Tpo -c -o src/tags/libapetag/easytag-info_mpc.obj `if test -f 'src/tags/libapetag/info_mpc.c'; then $(CYGPATH_W) 'src/tags/libapetag/info_mpc.c'; else $(CYGPATH_W) '$(srcdir)/src/tags/libapetag/info_mpc.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/tags/libapetag/$(DEPDIR)/easytag-info_mpc.Tpo src/tags/libapetag/$(DEPDIR)/easytag-info_mpc.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tags/libapetag/info_mpc.c' object='src/tags/libapetag/easytag-info_mpc.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-wavpack_header.o `test -f 'src/wavpack_header.c' || echo '$(srcdir)/'`src/wavpack_header.c
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/tags/libapetag/easytag-info_mpc.obj `if test -f 'src/tags/libapetag/info_mpc.c'; then $(CYGPATH_W) 'src/tags/libapetag/info_mpc.c'; else $(CYGPATH_W) '$(srcdir)/src/tags/libapetag/info_mpc.c'; fi`
 
-src/easytag-wavpack_header.obj: src/wavpack_header.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-wavpack_header.obj -MD -MP -MF src/$(DEPDIR)/easytag-wavpack_header.Tpo -c -o src/easytag-wavpack_header.obj `if test -f 'src/wavpack_header.c'; then $(CYGPATH_W) 'src/wavpack_header.c'; else $(CYGPATH_W) '$(srcdir)/src/wavpack_header.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-wavpack_header.Tpo src/$(DEPDIR)/easytag-wavpack_header.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/wavpack_header.c' object='src/easytag-wavpack_header.obj' libtool=no @AMDEPBACKSLASH@
+src/tags/easytag-ape_tag.o: src/tags/ape_tag.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/tags/easytag-ape_tag.o -MD -MP -MF src/tags/$(DEPDIR)/easytag-ape_tag.Tpo -c -o src/tags/easytag-ape_tag.o `test -f 'src/tags/ape_tag.c' || echo '$(srcdir)/'`src/tags/ape_tag.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/tags/$(DEPDIR)/easytag-ape_tag.Tpo src/tags/$(DEPDIR)/easytag-ape_tag.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tags/ape_tag.c' object='src/tags/easytag-ape_tag.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-wavpack_header.obj `if test -f 'src/wavpack_header.c'; then $(CYGPATH_W) 'src/wavpack_header.c'; else $(CYGPATH_W) '$(srcdir)/src/wavpack_header.c'; fi`
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/tags/easytag-ape_tag.o `test -f 'src/tags/ape_tag.c' || echo '$(srcdir)/'`src/tags/ape_tag.c
 
-src/easytag-wavpack_tag.o: src/wavpack_tag.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-wavpack_tag.o -MD -MP -MF src/$(DEPDIR)/easytag-wavpack_tag.Tpo -c -o src/easytag-wavpack_tag.o `test -f 'src/wavpack_tag.c' || echo '$(srcdir)/'`src/wavpack_tag.c
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-wavpack_tag.Tpo src/$(DEPDIR)/easytag-wavpack_tag.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/wavpack_tag.c' object='src/easytag-wavpack_tag.o' libtool=no @AMDEPBACKSLASH@
+src/tags/easytag-ape_tag.obj: src/tags/ape_tag.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/tags/easytag-ape_tag.obj -MD -MP -MF src/tags/$(DEPDIR)/easytag-ape_tag.Tpo -c -o src/tags/easytag-ape_tag.obj `if test -f 'src/tags/ape_tag.c'; then $(CYGPATH_W) 'src/tags/ape_tag.c'; else $(CYGPATH_W) '$(srcdir)/src/tags/ape_tag.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/tags/$(DEPDIR)/easytag-ape_tag.Tpo src/tags/$(DEPDIR)/easytag-ape_tag.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tags/ape_tag.c' object='src/tags/easytag-ape_tag.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-wavpack_tag.o `test -f 'src/wavpack_tag.c' || echo '$(srcdir)/'`src/wavpack_tag.c
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/tags/easytag-ape_tag.obj `if test -f 'src/tags/ape_tag.c'; then $(CYGPATH_W) 'src/tags/ape_tag.c'; else $(CYGPATH_W) '$(srcdir)/src/tags/ape_tag.c'; fi`
 
-src/easytag-wavpack_tag.obj: src/wavpack_tag.c
- at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-wavpack_tag.obj -MD -MP -MF src/$(DEPDIR)/easytag-wavpack_tag.Tpo -c -o src/easytag-wavpack_tag.obj `if test -f 'src/wavpack_tag.c'; then $(CYGPATH_W) 'src/wavpack_tag.c'; else $(CYGPATH_W) '$(srcdir)/src/wavpack_tag.c'; fi`
- at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-wavpack_tag.Tpo src/$(DEPDIR)/easytag-wavpack_tag.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/wavpack_tag.c' object='src/easytag-wavpack_tag.obj' libtool=no @AMDEPBACKSLASH@
+src/tags/easytag-flac_header.o: src/tags/flac_header.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/tags/easytag-flac_header.o -MD -MP -MF src/tags/$(DEPDIR)/easytag-flac_header.Tpo -c -o src/tags/easytag-flac_header.o `test -f 'src/tags/flac_header.c' || echo '$(srcdir)/'`src/tags/flac_header.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/tags/$(DEPDIR)/easytag-flac_header.Tpo src/tags/$(DEPDIR)/easytag-flac_header.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tags/flac_header.c' object='src/tags/easytag-flac_header.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-wavpack_tag.obj `if test -f 'src/wavpack_tag.c'; then $(CYGPATH_W) 'src/wavpack_tag.c'; else $(CYGPATH_W) '$(srcdir)/src/wavpack_tag.c'; fi`
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/tags/easytag-flac_header.o `test -f 'src/tags/flac_header.c' || echo '$(srcdir)/'`src/tags/flac_header.c
+
+src/tags/easytag-flac_header.obj: src/tags/flac_header.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/tags/easytag-flac_header.obj -MD -MP -MF src/tags/$(DEPDIR)/easytag-flac_header.Tpo -c -o src/tags/easytag-flac_header.obj `if test -f 'src/tags/flac_header.c'; then $(CYGPATH_W) 'src/tags/flac_header.c'; else $(CYGPATH_W) '$(srcdir)/src/tags/flac_header.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/tags/$(DEPDIR)/easytag-flac_header.Tpo src/tags/$(DEPDIR)/easytag-flac_header.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tags/flac_header.c' object='src/tags/easytag-flac_header.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/tags/easytag-flac_header.obj `if test -f 'src/tags/flac_header.c'; then $(CYGPATH_W) 'src/tags/flac_header.c'; else $(CYGPATH_W) '$(srcdir)/src/tags/flac_header.c'; fi`
+
+src/tags/easytag-flac_tag.o: src/tags/flac_tag.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/tags/easytag-flac_tag.o -MD -MP -MF src/tags/$(DEPDIR)/easytag-flac_tag.Tpo -c -o src/tags/easytag-flac_tag.o `test -f 'src/tags/flac_tag.c' || echo '$(srcdir)/'`src/tags/flac_tag.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/tags/$(DEPDIR)/easytag-flac_tag.Tpo src/tags/$(DEPDIR)/easytag-flac_tag.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tags/flac_tag.c' object='src/tags/easytag-flac_tag.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/tags/easytag-flac_tag.o `test -f 'src/tags/flac_tag.c' || echo '$(srcdir)/'`src/tags/flac_tag.c
+
+src/tags/easytag-flac_tag.obj: src/tags/flac_tag.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/tags/easytag-flac_tag.obj -MD -MP -MF src/tags/$(DEPDIR)/easytag-flac_tag.Tpo -c -o src/tags/easytag-flac_tag.obj `if test -f 'src/tags/flac_tag.c'; then $(CYGPATH_W) 'src/tags/flac_tag.c'; else $(CYGPATH_W) '$(srcdir)/src/tags/flac_tag.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/tags/$(DEPDIR)/easytag-flac_tag.Tpo src/tags/$(DEPDIR)/easytag-flac_tag.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tags/flac_tag.c' object='src/tags/easytag-flac_tag.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/tags/easytag-flac_tag.obj `if test -f 'src/tags/flac_tag.c'; then $(CYGPATH_W) 'src/tags/flac_tag.c'; else $(CYGPATH_W) '$(srcdir)/src/tags/flac_tag.c'; fi`
+
+src/tags/easytag-id3_tag.o: src/tags/id3_tag.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/tags/easytag-id3_tag.o -MD -MP -MF src/tags/$(DEPDIR)/easytag-id3_tag.Tpo -c -o src/tags/easytag-id3_tag.o `test -f 'src/tags/id3_tag.c' || echo '$(srcdir)/'`src/tags/id3_tag.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/tags/$(DEPDIR)/easytag-id3_tag.Tpo src/tags/$(DEPDIR)/easytag-id3_tag.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tags/id3_tag.c' object='src/tags/easytag-id3_tag.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/tags/easytag-id3_tag.o `test -f 'src/tags/id3_tag.c' || echo '$(srcdir)/'`src/tags/id3_tag.c
+
+src/tags/easytag-id3_tag.obj: src/tags/id3_tag.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/tags/easytag-id3_tag.obj -MD -MP -MF src/tags/$(DEPDIR)/easytag-id3_tag.Tpo -c -o src/tags/easytag-id3_tag.obj `if test -f 'src/tags/id3_tag.c'; then $(CYGPATH_W) 'src/tags/id3_tag.c'; else $(CYGPATH_W) '$(srcdir)/src/tags/id3_tag.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/tags/$(DEPDIR)/easytag-id3_tag.Tpo src/tags/$(DEPDIR)/easytag-id3_tag.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tags/id3_tag.c' object='src/tags/easytag-id3_tag.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/tags/easytag-id3_tag.obj `if test -f 'src/tags/id3_tag.c'; then $(CYGPATH_W) 'src/tags/id3_tag.c'; else $(CYGPATH_W) '$(srcdir)/src/tags/id3_tag.c'; fi`
+
+src/tags/easytag-id3v24_tag.o: src/tags/id3v24_tag.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/tags/easytag-id3v24_tag.o -MD -MP -MF src/tags/$(DEPDIR)/easytag-id3v24_tag.Tpo -c -o src/tags/easytag-id3v24_tag.o `test -f 'src/tags/id3v24_tag.c' || echo '$(srcdir)/'`src/tags/id3v24_tag.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/tags/$(DEPDIR)/easytag-id3v24_tag.Tpo src/tags/$(DEPDIR)/easytag-id3v24_tag.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tags/id3v24_tag.c' object='src/tags/easytag-id3v24_tag.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/tags/easytag-id3v24_tag.o `test -f 'src/tags/id3v24_tag.c' || echo '$(srcdir)/'`src/tags/id3v24_tag.c
+
+src/tags/easytag-id3v24_tag.obj: src/tags/id3v24_tag.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/tags/easytag-id3v24_tag.obj -MD -MP -MF src/tags/$(DEPDIR)/easytag-id3v24_tag.Tpo -c -o src/tags/easytag-id3v24_tag.obj `if test -f 'src/tags/id3v24_tag.c'; then $(CYGPATH_W) 'src/tags/id3v24_tag.c'; else $(CYGPATH_W) '$(srcdir)/src/tags/id3v24_tag.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/tags/$(DEPDIR)/easytag-id3v24_tag.Tpo src/tags/$(DEPDIR)/easytag-id3v24_tag.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tags/id3v24_tag.c' object='src/tags/easytag-id3v24_tag.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/tags/easytag-id3v24_tag.obj `if test -f 'src/tags/id3v24_tag.c'; then $(CYGPATH_W) 'src/tags/id3v24_tag.c'; else $(CYGPATH_W) '$(srcdir)/src/tags/id3v24_tag.c'; fi`
+
+src/tags/easytag-monkeyaudio_header.o: src/tags/monkeyaudio_header.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/tags/easytag-monkeyaudio_header.o -MD -MP -MF src/tags/$(DEPDIR)/easytag-monkeyaudio_header.Tpo -c -o src/tags/easytag-monkeyaudio_header.o `test -f 'src/tags/monkeyaudio_header.c' || echo '$(srcdir)/'`src/tags/monkeyaudio_header.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/tags/$(DEPDIR)/easytag-monkeyaudio_header.Tpo src/tags/$(DEPDIR)/easytag-monkeyaudio_header.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tags/monkeyaudio_header.c' object='src/tags/easytag-monkeyaudio_header.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/tags/easytag-monkeyaudio_header.o `test -f 'src/tags/monkeyaudio_header.c' || echo '$(srcdir)/'`src/tags/monkeyaudio_header.c
+
+src/tags/easytag-monkeyaudio_header.obj: src/tags/monkeyaudio_header.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/tags/easytag-monkeyaudio_header.obj -MD -MP -MF src/tags/$(DEPDIR)/easytag-monkeyaudio_header.Tpo -c -o src/tags/easytag-monkeyaudio_header.obj `if test -f 'src/tags/monkeyaudio_header.c'; then $(CYGPATH_W) 'src/tags/monkeyaudio_header.c'; else $(CYGPATH_W) '$(srcdir)/src/tags/monkeyaudio_header.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/tags/$(DEPDIR)/easytag-monkeyaudio_header.Tpo src/tags/$(DEPDIR)/easytag-monkeyaudio_header.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tags/monkeyaudio_header.c' object='src/tags/easytag-monkeyaudio_header.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/tags/easytag-monkeyaudio_header.obj `if test -f 'src/tags/monkeyaudio_header.c'; then $(CYGPATH_W) 'src/tags/monkeyaudio_header.c'; else $(CYGPATH_W) '$(srcdir)/src/tags/monkeyaudio_header.c'; fi`
+
+src/tags/easytag-mpeg_header.o: src/tags/mpeg_header.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/tags/easytag-mpeg_header.o -MD -MP -MF src/tags/$(DEPDIR)/easytag-mpeg_header.Tpo -c -o src/tags/easytag-mpeg_header.o `test -f 'src/tags/mpeg_header.c' || echo '$(srcdir)/'`src/tags/mpeg_header.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/tags/$(DEPDIR)/easytag-mpeg_header.Tpo src/tags/$(DEPDIR)/easytag-mpeg_header.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tags/mpeg_header.c' object='src/tags/easytag-mpeg_header.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/tags/easytag-mpeg_header.o `test -f 'src/tags/mpeg_header.c' || echo '$(srcdir)/'`src/tags/mpeg_header.c
+
+src/tags/easytag-mpeg_header.obj: src/tags/mpeg_header.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/tags/easytag-mpeg_header.obj -MD -MP -MF src/tags/$(DEPDIR)/easytag-mpeg_header.Tpo -c -o src/tags/easytag-mpeg_header.obj `if test -f 'src/tags/mpeg_header.c'; then $(CYGPATH_W) 'src/tags/mpeg_header.c'; else $(CYGPATH_W) '$(srcdir)/src/tags/mpeg_header.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/tags/$(DEPDIR)/easytag-mpeg_header.Tpo src/tags/$(DEPDIR)/easytag-mpeg_header.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tags/mpeg_header.c' object='src/tags/easytag-mpeg_header.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/tags/easytag-mpeg_header.obj `if test -f 'src/tags/mpeg_header.c'; then $(CYGPATH_W) 'src/tags/mpeg_header.c'; else $(CYGPATH_W) '$(srcdir)/src/tags/mpeg_header.c'; fi`
+
+src/tags/easytag-musepack_header.o: src/tags/musepack_header.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/tags/easytag-musepack_header.o -MD -MP -MF src/tags/$(DEPDIR)/easytag-musepack_header.Tpo -c -o src/tags/easytag-musepack_header.o `test -f 'src/tags/musepack_header.c' || echo '$(srcdir)/'`src/tags/musepack_header.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/tags/$(DEPDIR)/easytag-musepack_header.Tpo src/tags/$(DEPDIR)/easytag-musepack_header.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tags/musepack_header.c' object='src/tags/easytag-musepack_header.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/tags/easytag-musepack_header.o `test -f 'src/tags/musepack_header.c' || echo '$(srcdir)/'`src/tags/musepack_header.c
+
+src/tags/easytag-musepack_header.obj: src/tags/musepack_header.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/tags/easytag-musepack_header.obj -MD -MP -MF src/tags/$(DEPDIR)/easytag-musepack_header.Tpo -c -o src/tags/easytag-musepack_header.obj `if test -f 'src/tags/musepack_header.c'; then $(CYGPATH_W) 'src/tags/musepack_header.c'; else $(CYGPATH_W) '$(srcdir)/src/tags/musepack_header.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/tags/$(DEPDIR)/easytag-musepack_header.Tpo src/tags/$(DEPDIR)/easytag-musepack_header.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tags/musepack_header.c' object='src/tags/easytag-musepack_header.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/tags/easytag-musepack_header.obj `if test -f 'src/tags/musepack_header.c'; then $(CYGPATH_W) 'src/tags/musepack_header.c'; else $(CYGPATH_W) '$(srcdir)/src/tags/musepack_header.c'; fi`
+
+src/tags/easytag-ogg_header.o: src/tags/ogg_header.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/tags/easytag-ogg_header.o -MD -MP -MF src/tags/$(DEPDIR)/easytag-ogg_header.Tpo -c -o src/tags/easytag-ogg_header.o `test -f 'src/tags/ogg_header.c' || echo '$(srcdir)/'`src/tags/ogg_header.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/tags/$(DEPDIR)/easytag-ogg_header.Tpo src/tags/$(DEPDIR)/easytag-ogg_header.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tags/ogg_header.c' object='src/tags/easytag-ogg_header.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/tags/easytag-ogg_header.o `test -f 'src/tags/ogg_header.c' || echo '$(srcdir)/'`src/tags/ogg_header.c
+
+src/tags/easytag-ogg_header.obj: src/tags/ogg_header.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/tags/easytag-ogg_header.obj -MD -MP -MF src/tags/$(DEPDIR)/easytag-ogg_header.Tpo -c -o src/tags/easytag-ogg_header.obj `if test -f 'src/tags/ogg_header.c'; then $(CYGPATH_W) 'src/tags/ogg_header.c'; else $(CYGPATH_W) '$(srcdir)/src/tags/ogg_header.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/tags/$(DEPDIR)/easytag-ogg_header.Tpo src/tags/$(DEPDIR)/easytag-ogg_header.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tags/ogg_header.c' object='src/tags/easytag-ogg_header.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/tags/easytag-ogg_header.obj `if test -f 'src/tags/ogg_header.c'; then $(CYGPATH_W) 'src/tags/ogg_header.c'; else $(CYGPATH_W) '$(srcdir)/src/tags/ogg_header.c'; fi`
+
+src/tags/easytag-ogg_tag.o: src/tags/ogg_tag.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/tags/easytag-ogg_tag.o -MD -MP -MF src/tags/$(DEPDIR)/easytag-ogg_tag.Tpo -c -o src/tags/easytag-ogg_tag.o `test -f 'src/tags/ogg_tag.c' || echo '$(srcdir)/'`src/tags/ogg_tag.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/tags/$(DEPDIR)/easytag-ogg_tag.Tpo src/tags/$(DEPDIR)/easytag-ogg_tag.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tags/ogg_tag.c' object='src/tags/easytag-ogg_tag.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/tags/easytag-ogg_tag.o `test -f 'src/tags/ogg_tag.c' || echo '$(srcdir)/'`src/tags/ogg_tag.c
+
+src/tags/easytag-ogg_tag.obj: src/tags/ogg_tag.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/tags/easytag-ogg_tag.obj -MD -MP -MF src/tags/$(DEPDIR)/easytag-ogg_tag.Tpo -c -o src/tags/easytag-ogg_tag.obj `if test -f 'src/tags/ogg_tag.c'; then $(CYGPATH_W) 'src/tags/ogg_tag.c'; else $(CYGPATH_W) '$(srcdir)/src/tags/ogg_tag.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/tags/$(DEPDIR)/easytag-ogg_tag.Tpo src/tags/$(DEPDIR)/easytag-ogg_tag.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tags/ogg_tag.c' object='src/tags/easytag-ogg_tag.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/tags/easytag-ogg_tag.obj `if test -f 'src/tags/ogg_tag.c'; then $(CYGPATH_W) 'src/tags/ogg_tag.c'; else $(CYGPATH_W) '$(srcdir)/src/tags/ogg_tag.c'; fi`
+
+src/tags/easytag-opus_header.o: src/tags/opus_header.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/tags/easytag-opus_header.o -MD -MP -MF src/tags/$(DEPDIR)/easytag-opus_header.Tpo -c -o src/tags/easytag-opus_header.o `test -f 'src/tags/opus_header.c' || echo '$(srcdir)/'`src/tags/opus_header.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/tags/$(DEPDIR)/easytag-opus_header.Tpo src/tags/$(DEPDIR)/easytag-opus_header.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tags/opus_header.c' object='src/tags/easytag-opus_header.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/tags/easytag-opus_header.o `test -f 'src/tags/opus_header.c' || echo '$(srcdir)/'`src/tags/opus_header.c
+
+src/tags/easytag-opus_header.obj: src/tags/opus_header.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/tags/easytag-opus_header.obj -MD -MP -MF src/tags/$(DEPDIR)/easytag-opus_header.Tpo -c -o src/tags/easytag-opus_header.obj `if test -f 'src/tags/opus_header.c'; then $(CYGPATH_W) 'src/tags/opus_header.c'; else $(CYGPATH_W) '$(srcdir)/src/tags/opus_header.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/tags/$(DEPDIR)/easytag-opus_header.Tpo src/tags/$(DEPDIR)/easytag-opus_header.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tags/opus_header.c' object='src/tags/easytag-opus_header.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/tags/easytag-opus_header.obj `if test -f 'src/tags/opus_header.c'; then $(CYGPATH_W) 'src/tags/opus_header.c'; else $(CYGPATH_W) '$(srcdir)/src/tags/opus_header.c'; fi`
+
+src/tags/easytag-opus_tag.o: src/tags/opus_tag.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/tags/easytag-opus_tag.o -MD -MP -MF src/tags/$(DEPDIR)/easytag-opus_tag.Tpo -c -o src/tags/easytag-opus_tag.o `test -f 'src/tags/opus_tag.c' || echo '$(srcdir)/'`src/tags/opus_tag.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/tags/$(DEPDIR)/easytag-opus_tag.Tpo src/tags/$(DEPDIR)/easytag-opus_tag.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tags/opus_tag.c' object='src/tags/easytag-opus_tag.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/tags/easytag-opus_tag.o `test -f 'src/tags/opus_tag.c' || echo '$(srcdir)/'`src/tags/opus_tag.c
+
+src/tags/easytag-opus_tag.obj: src/tags/opus_tag.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/tags/easytag-opus_tag.obj -MD -MP -MF src/tags/$(DEPDIR)/easytag-opus_tag.Tpo -c -o src/tags/easytag-opus_tag.obj `if test -f 'src/tags/opus_tag.c'; then $(CYGPATH_W) 'src/tags/opus_tag.c'; else $(CYGPATH_W) '$(srcdir)/src/tags/opus_tag.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/tags/$(DEPDIR)/easytag-opus_tag.Tpo src/tags/$(DEPDIR)/easytag-opus_tag.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tags/opus_tag.c' object='src/tags/easytag-opus_tag.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/tags/easytag-opus_tag.obj `if test -f 'src/tags/opus_tag.c'; then $(CYGPATH_W) 'src/tags/opus_tag.c'; else $(CYGPATH_W) '$(srcdir)/src/tags/opus_tag.c'; fi`
+
+src/tags/easytag-vcedit.o: src/tags/vcedit.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/tags/easytag-vcedit.o -MD -MP -MF src/tags/$(DEPDIR)/easytag-vcedit.Tpo -c -o src/tags/easytag-vcedit.o `test -f 'src/tags/vcedit.c' || echo '$(srcdir)/'`src/tags/vcedit.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/tags/$(DEPDIR)/easytag-vcedit.Tpo src/tags/$(DEPDIR)/easytag-vcedit.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tags/vcedit.c' object='src/tags/easytag-vcedit.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/tags/easytag-vcedit.o `test -f 'src/tags/vcedit.c' || echo '$(srcdir)/'`src/tags/vcedit.c
+
+src/tags/easytag-vcedit.obj: src/tags/vcedit.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/tags/easytag-vcedit.obj -MD -MP -MF src/tags/$(DEPDIR)/easytag-vcedit.Tpo -c -o src/tags/easytag-vcedit.obj `if test -f 'src/tags/vcedit.c'; then $(CYGPATH_W) 'src/tags/vcedit.c'; else $(CYGPATH_W) '$(srcdir)/src/tags/vcedit.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/tags/$(DEPDIR)/easytag-vcedit.Tpo src/tags/$(DEPDIR)/easytag-vcedit.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tags/vcedit.c' object='src/tags/easytag-vcedit.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/tags/easytag-vcedit.obj `if test -f 'src/tags/vcedit.c'; then $(CYGPATH_W) 'src/tags/vcedit.c'; else $(CYGPATH_W) '$(srcdir)/src/tags/vcedit.c'; fi`
+
+src/tags/easytag-wavpack_header.o: src/tags/wavpack_header.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/tags/easytag-wavpack_header.o -MD -MP -MF src/tags/$(DEPDIR)/easytag-wavpack_header.Tpo -c -o src/tags/easytag-wavpack_header.o `test -f 'src/tags/wavpack_header.c' || echo '$(srcdir)/'`src/tags/wavpack_header.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/tags/$(DEPDIR)/easytag-wavpack_header.Tpo src/tags/$(DEPDIR)/easytag-wavpack_header.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tags/wavpack_header.c' object='src/tags/easytag-wavpack_header.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/tags/easytag-wavpack_header.o `test -f 'src/tags/wavpack_header.c' || echo '$(srcdir)/'`src/tags/wavpack_header.c
+
+src/tags/easytag-wavpack_header.obj: src/tags/wavpack_header.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/tags/easytag-wavpack_header.obj -MD -MP -MF src/tags/$(DEPDIR)/easytag-wavpack_header.Tpo -c -o src/tags/easytag-wavpack_header.obj `if test -f 'src/tags/wavpack_header.c'; then $(CYGPATH_W) 'src/tags/wavpack_header.c'; else $(CYGPATH_W) '$(srcdir)/src/tags/wavpack_header.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/tags/$(DEPDIR)/easytag-wavpack_header.Tpo src/tags/$(DEPDIR)/easytag-wavpack_header.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tags/wavpack_header.c' object='src/tags/easytag-wavpack_header.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/tags/easytag-wavpack_header.obj `if test -f 'src/tags/wavpack_header.c'; then $(CYGPATH_W) 'src/tags/wavpack_header.c'; else $(CYGPATH_W) '$(srcdir)/src/tags/wavpack_header.c'; fi`
+
+src/tags/easytag-wavpack_tag.o: src/tags/wavpack_tag.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/tags/easytag-wavpack_tag.o -MD -MP -MF src/tags/$(DEPDIR)/easytag-wavpack_tag.Tpo -c -o src/tags/easytag-wavpack_tag.o `test -f 'src/tags/wavpack_tag.c' || echo '$(srcdir)/'`src/tags/wavpack_tag.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/tags/$(DEPDIR)/easytag-wavpack_tag.Tpo src/tags/$(DEPDIR)/easytag-wavpack_tag.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tags/wavpack_tag.c' object='src/tags/easytag-wavpack_tag.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/tags/easytag-wavpack_tag.o `test -f 'src/tags/wavpack_tag.c' || echo '$(srcdir)/'`src/tags/wavpack_tag.c
+
+src/tags/easytag-wavpack_tag.obj: src/tags/wavpack_tag.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/tags/easytag-wavpack_tag.obj -MD -MP -MF src/tags/$(DEPDIR)/easytag-wavpack_tag.Tpo -c -o src/tags/easytag-wavpack_tag.obj `if test -f 'src/tags/wavpack_tag.c'; then $(CYGPATH_W) 'src/tags/wavpack_tag.c'; else $(CYGPATH_W) '$(srcdir)/src/tags/wavpack_tag.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/tags/$(DEPDIR)/easytag-wavpack_tag.Tpo src/tags/$(DEPDIR)/easytag-wavpack_tag.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/tags/wavpack_tag.c' object='src/tags/easytag-wavpack_tag.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/tags/easytag-wavpack_tag.obj `if test -f 'src/tags/wavpack_tag.c'; then $(CYGPATH_W) 'src/tags/wavpack_tag.c'; else $(CYGPATH_W) '$(srcdir)/src/tags/wavpack_tag.c'; fi`
 
 src/win32/easytag-win32dep.o: src/win32/win32dep.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/win32/easytag-win32dep.o -MD -MP -MF src/win32/$(DEPDIR)/easytag-win32dep.Tpo -c -o src/win32/easytag-win32dep.o `test -f 'src/win32/win32dep.c' || echo '$(srcdir)/'`src/win32/win32dep.c
@@ -1741,6 +2104,20 @@ src/win32/easytag-win32dep.obj: src/win32/win32dep.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/win32/easytag-win32dep.obj `if test -f 'src/win32/win32dep.c'; then $(CYGPATH_W) 'src/win32/win32dep.c'; else $(CYGPATH_W) '$(srcdir)/src/win32/win32dep.c'; fi`
 
+src/easytag-resource.o: src/resource.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-resource.o -MD -MP -MF src/$(DEPDIR)/easytag-resource.Tpo -c -o src/easytag-resource.o `test -f 'src/resource.c' || echo '$(srcdir)/'`src/resource.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-resource.Tpo src/$(DEPDIR)/easytag-resource.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/resource.c' object='src/easytag-resource.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-resource.o `test -f 'src/resource.c' || echo '$(srcdir)/'`src/resource.c
+
+src/easytag-resource.obj: src/resource.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -MT src/easytag-resource.obj -MD -MP -MF src/$(DEPDIR)/easytag-resource.Tpo -c -o src/easytag-resource.obj `if test -f 'src/resource.c'; then $(CYGPATH_W) 'src/resource.c'; else $(CYGPATH_W) '$(srcdir)/src/resource.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-resource.Tpo src/$(DEPDIR)/easytag-resource.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/resource.c' object='src/easytag-resource.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CFLAGS) $(CFLAGS) -c -o src/easytag-resource.obj `if test -f 'src/resource.c'; then $(CYGPATH_W) 'src/resource.c'; else $(CYGPATH_W) '$(srcdir)/src/resource.c'; fi`
+
 tests/tests_test_scan-test-scan.o: tests/test-scan.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tests_test_scan_CPPFLAGS) $(CPPFLAGS) $(tests_test_scan_CFLAGS) $(CFLAGS) -MT tests/tests_test_scan-test-scan.o -MD -MP -MF tests/$(DEPDIR)/tests_test_scan-test-scan.Tpo -c -o tests/tests_test_scan-test-scan.o `test -f 'tests/test-scan.c' || echo '$(srcdir)/'`tests/test-scan.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) tests/$(DEPDIR)/tests_test_scan-test-scan.Tpo tests/$(DEPDIR)/tests_test_scan-test-scan.Po
@@ -1785,47 +2162,55 @@ src/tests_test_scan-scan.obj: src/scan.c
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
 
-src/id3lib/easytag-c_wrapper.o: src/id3lib/c_wrapper.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CXXFLAGS) $(CXXFLAGS) -MT src/id3lib/easytag-c_wrapper.o -MD -MP -MF src/id3lib/$(DEPDIR)/easytag-c_wrapper.Tpo -c -o src/id3lib/easytag-c_wrapper.o `test -f 'src/id3lib/c_wrapper.cpp' || echo '$(srcdir)/'`src/id3lib/c_wrapper.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/id3lib/$(DEPDIR)/easytag-c_wrapper.Tpo src/id3lib/$(DEPDIR)/easytag-c_wrapper.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/id3lib/c_wrapper.cpp' object='src/id3lib/easytag-c_wrapper.o' libtool=no @AMDEPBACKSLASH@
+.cc.lo:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+ at am__fastdepCXX_TRUE@	$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+ at am__fastdepCXX_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
+
+src/tags/id3lib/easytag-c_wrapper.o: src/tags/id3lib/c_wrapper.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CXXFLAGS) $(CXXFLAGS) -MT src/tags/id3lib/easytag-c_wrapper.o -MD -MP -MF src/tags/id3lib/$(DEPDIR)/easytag-c_wrapper.Tpo -c -o src/tags/id3lib/easytag-c_wrapper.o `test -f 'src/tags/id3lib/c_wrapper.cpp' || echo '$(srcdir)/'`src/tags/id3lib/c_wrapper.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/tags/id3lib/$(DEPDIR)/easytag-c_wrapper.Tpo src/tags/id3lib/$(DEPDIR)/easytag-c_wrapper.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/tags/id3lib/c_wrapper.cpp' object='src/tags/id3lib/easytag-c_wrapper.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CXXFLAGS) $(CXXFLAGS) -c -o src/id3lib/easytag-c_wrapper.o `test -f 'src/id3lib/c_wrapper.cpp' || echo '$(srcdir)/'`src/id3lib/c_wrapper.cpp
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CXXFLAGS) $(CXXFLAGS) -c -o src/tags/id3lib/easytag-c_wrapper.o `test -f 'src/tags/id3lib/c_wrapper.cpp' || echo '$(srcdir)/'`src/tags/id3lib/c_wrapper.cpp
 
-src/id3lib/easytag-c_wrapper.obj: src/id3lib/c_wrapper.cpp
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CXXFLAGS) $(CXXFLAGS) -MT src/id3lib/easytag-c_wrapper.obj -MD -MP -MF src/id3lib/$(DEPDIR)/easytag-c_wrapper.Tpo -c -o src/id3lib/easytag-c_wrapper.obj `if test -f 'src/id3lib/c_wrapper.cpp'; then $(CYGPATH_W) 'src/id3lib/c_wrapper.cpp'; else $(CYGPATH_W) '$(srcdir)/src/id3lib/c_wrapper.cpp'; fi`
- at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/id3lib/$(DEPDIR)/easytag-c_wrapper.Tpo src/id3lib/$(DEPDIR)/easytag-c_wrapper.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/id3lib/c_wrapper.cpp' object='src/id3lib/easytag-c_wrapper.obj' libtool=no @AMDEPBACKSLASH@
+src/tags/id3lib/easytag-c_wrapper.obj: src/tags/id3lib/c_wrapper.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CXXFLAGS) $(CXXFLAGS) -MT src/tags/id3lib/easytag-c_wrapper.obj -MD -MP -MF src/tags/id3lib/$(DEPDIR)/easytag-c_wrapper.Tpo -c -o src/tags/id3lib/easytag-c_wrapper.obj `if test -f 'src/tags/id3lib/c_wrapper.cpp'; then $(CYGPATH_W) 'src/tags/id3lib/c_wrapper.cpp'; else $(CYGPATH_W) '$(srcdir)/src/tags/id3lib/c_wrapper.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/tags/id3lib/$(DEPDIR)/easytag-c_wrapper.Tpo src/tags/id3lib/$(DEPDIR)/easytag-c_wrapper.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/tags/id3lib/c_wrapper.cpp' object='src/tags/id3lib/easytag-c_wrapper.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CXXFLAGS) $(CXXFLAGS) -c -o src/id3lib/easytag-c_wrapper.obj `if test -f 'src/id3lib/c_wrapper.cpp'; then $(CYGPATH_W) 'src/id3lib/c_wrapper.cpp'; else $(CYGPATH_W) '$(srcdir)/src/id3lib/c_wrapper.cpp'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CXXFLAGS) $(CXXFLAGS) -c -o src/tags/id3lib/easytag-c_wrapper.obj `if test -f 'src/tags/id3lib/c_wrapper.cpp'; then $(CYGPATH_W) 'src/tags/id3lib/c_wrapper.cpp'; else $(CYGPATH_W) '$(srcdir)/src/tags/id3lib/c_wrapper.cpp'; fi`
 
-src/easytag-gio_wrapper.o: src/gio_wrapper.cc
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CXXFLAGS) $(CXXFLAGS) -MT src/easytag-gio_wrapper.o -MD -MP -MF src/$(DEPDIR)/easytag-gio_wrapper.Tpo -c -o src/easytag-gio_wrapper.o `test -f 'src/gio_wrapper.cc' || echo '$(srcdir)/'`src/gio_wrapper.cc
- at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-gio_wrapper.Tpo src/$(DEPDIR)/easytag-gio_wrapper.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/gio_wrapper.cc' object='src/easytag-gio_wrapper.o' libtool=no @AMDEPBACKSLASH@
+src/tags/easytag-gio_wrapper.o: src/tags/gio_wrapper.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CXXFLAGS) $(CXXFLAGS) -MT src/tags/easytag-gio_wrapper.o -MD -MP -MF src/tags/$(DEPDIR)/easytag-gio_wrapper.Tpo -c -o src/tags/easytag-gio_wrapper.o `test -f 'src/tags/gio_wrapper.cc' || echo '$(srcdir)/'`src/tags/gio_wrapper.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/tags/$(DEPDIR)/easytag-gio_wrapper.Tpo src/tags/$(DEPDIR)/easytag-gio_wrapper.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/tags/gio_wrapper.cc' object='src/tags/easytag-gio_wrapper.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CXXFLAGS) $(CXXFLAGS) -c -o src/easytag-gio_wrapper.o `test -f 'src/gio_wrapper.cc' || echo '$(srcdir)/'`src/gio_wrapper.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CXXFLAGS) $(CXXFLAGS) -c -o src/tags/easytag-gio_wrapper.o `test -f 'src/tags/gio_wrapper.cc' || echo '$(srcdir)/'`src/tags/gio_wrapper.cc
 
-src/easytag-gio_wrapper.obj: src/gio_wrapper.cc
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CXXFLAGS) $(CXXFLAGS) -MT src/easytag-gio_wrapper.obj -MD -MP -MF src/$(DEPDIR)/easytag-gio_wrapper.Tpo -c -o src/easytag-gio_wrapper.obj `if test -f 'src/gio_wrapper.cc'; then $(CYGPATH_W) 'src/gio_wrapper.cc'; else $(CYGPATH_W) '$(srcdir)/src/gio_wrapper.cc'; fi`
- at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-gio_wrapper.Tpo src/$(DEPDIR)/easytag-gio_wrapper.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/gio_wrapper.cc' object='src/easytag-gio_wrapper.obj' libtool=no @AMDEPBACKSLASH@
+src/tags/easytag-gio_wrapper.obj: src/tags/gio_wrapper.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CXXFLAGS) $(CXXFLAGS) -MT src/tags/easytag-gio_wrapper.obj -MD -MP -MF src/tags/$(DEPDIR)/easytag-gio_wrapper.Tpo -c -o src/tags/easytag-gio_wrapper.obj `if test -f 'src/tags/gio_wrapper.cc'; then $(CYGPATH_W) 'src/tags/gio_wrapper.cc'; else $(CYGPATH_W) '$(srcdir)/src/tags/gio_wrapper.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/tags/$(DEPDIR)/easytag-gio_wrapper.Tpo src/tags/$(DEPDIR)/easytag-gio_wrapper.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/tags/gio_wrapper.cc' object='src/tags/easytag-gio_wrapper.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CXXFLAGS) $(CXXFLAGS) -c -o src/easytag-gio_wrapper.obj `if test -f 'src/gio_wrapper.cc'; then $(CYGPATH_W) 'src/gio_wrapper.cc'; else $(CYGPATH_W) '$(srcdir)/src/gio_wrapper.cc'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CXXFLAGS) $(CXXFLAGS) -c -o src/tags/easytag-gio_wrapper.obj `if test -f 'src/tags/gio_wrapper.cc'; then $(CYGPATH_W) 'src/tags/gio_wrapper.cc'; else $(CYGPATH_W) '$(srcdir)/src/tags/gio_wrapper.cc'; fi`
 
-src/easytag-mp4_tag.o: src/mp4_tag.cc
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CXXFLAGS) $(CXXFLAGS) -MT src/easytag-mp4_tag.o -MD -MP -MF src/$(DEPDIR)/easytag-mp4_tag.Tpo -c -o src/easytag-mp4_tag.o `test -f 'src/mp4_tag.cc' || echo '$(srcdir)/'`src/mp4_tag.cc
- at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-mp4_tag.Tpo src/$(DEPDIR)/easytag-mp4_tag.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/mp4_tag.cc' object='src/easytag-mp4_tag.o' libtool=no @AMDEPBACKSLASH@
+src/tags/easytag-mp4_tag.o: src/tags/mp4_tag.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CXXFLAGS) $(CXXFLAGS) -MT src/tags/easytag-mp4_tag.o -MD -MP -MF src/tags/$(DEPDIR)/easytag-mp4_tag.Tpo -c -o src/tags/easytag-mp4_tag.o `test -f 'src/tags/mp4_tag.cc' || echo '$(srcdir)/'`src/tags/mp4_tag.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/tags/$(DEPDIR)/easytag-mp4_tag.Tpo src/tags/$(DEPDIR)/easytag-mp4_tag.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/tags/mp4_tag.cc' object='src/tags/easytag-mp4_tag.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CXXFLAGS) $(CXXFLAGS) -c -o src/easytag-mp4_tag.o `test -f 'src/mp4_tag.cc' || echo '$(srcdir)/'`src/mp4_tag.cc
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CXXFLAGS) $(CXXFLAGS) -c -o src/tags/easytag-mp4_tag.o `test -f 'src/tags/mp4_tag.cc' || echo '$(srcdir)/'`src/tags/mp4_tag.cc
 
-src/easytag-mp4_tag.obj: src/mp4_tag.cc
- at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CXXFLAGS) $(CXXFLAGS) -MT src/easytag-mp4_tag.obj -MD -MP -MF src/$(DEPDIR)/easytag-mp4_tag.Tpo -c -o src/easytag-mp4_tag.obj `if test -f 'src/mp4_tag.cc'; then $(CYGPATH_W) 'src/mp4_tag.cc'; else $(CYGPATH_W) '$(srcdir)/src/mp4_tag.cc'; fi`
- at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/$(DEPDIR)/easytag-mp4_tag.Tpo src/$(DEPDIR)/easytag-mp4_tag.Po
- at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/mp4_tag.cc' object='src/easytag-mp4_tag.obj' libtool=no @AMDEPBACKSLASH@
+src/tags/easytag-mp4_tag.obj: src/tags/mp4_tag.cc
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CXXFLAGS) $(CXXFLAGS) -MT src/tags/easytag-mp4_tag.obj -MD -MP -MF src/tags/$(DEPDIR)/easytag-mp4_tag.Tpo -c -o src/tags/easytag-mp4_tag.obj `if test -f 'src/tags/mp4_tag.cc'; then $(CYGPATH_W) 'src/tags/mp4_tag.cc'; else $(CYGPATH_W) '$(srcdir)/src/tags/mp4_tag.cc'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) src/tags/$(DEPDIR)/easytag-mp4_tag.Tpo src/tags/$(DEPDIR)/easytag-mp4_tag.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='src/tags/mp4_tag.cc' object='src/tags/easytag-mp4_tag.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CXXFLAGS) $(CXXFLAGS) -c -o src/easytag-mp4_tag.obj `if test -f 'src/mp4_tag.cc'; then $(CYGPATH_W) 'src/mp4_tag.cc'; else $(CYGPATH_W) '$(srcdir)/src/mp4_tag.cc'; fi`
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(easytag_CPPFLAGS) $(CPPFLAGS) $(easytag_CXXFLAGS) $(CXXFLAGS) -c -o src/tags/easytag-mp4_tag.obj `if test -f 'src/tags/mp4_tag.cc'; then $(CYGPATH_W) 'src/tags/mp4_tag.cc'; else $(CYGPATH_W) '$(srcdir)/src/tags/mp4_tag.cc'; fi`
 
 .cpp.o:
 @am__fastdepCXX_TRUE@	$(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -1842,6 +2227,25 @@ src/easytag-mp4_tag.obj: src/mp4_tag.cc
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+ at am__fastdepCXX_TRUE@	$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+ at am__fastdepCXX_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+	-rm -rf nautilus-extension/.libs nautilus-extension/_libs
+	-rm -rf tests/.libs tests/_libs
+
+distclean-libtool:
+	-rm -f libtool config.lt
 install-man1: $(nodist_man_MANS)
 	@$(NORMAL_INSTALL)
 	@list1=''; \
@@ -2571,14 +2975,17 @@ distcleancheck: distclean
 check-am: all-am
 	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(check_SCRIPTS)
 	$(MAKE) $(AM_MAKEFLAGS) check-TESTS check-local
-check: check-recursive
-all-am: Makefile $(PROGRAMS) $(SCRIPTS) $(MANS) $(DATA) config.h
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-recursive
+all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(SCRIPTS) $(MANS) $(DATA) \
+		config.h
 installdirs: installdirs-recursive
 installdirs-am:
-	for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(desktopdir)" "$(DESTDIR)$(appicon128dir)" "$(DESTDIR)$(appicon16dir)" "$(DESTDIR)$(appicon22dir)" "$(DESTDIR)$(appicon24dir)" "$(DESTDIR)$(appicon256dir)" "$(DESTDIR)$(appicon32dir)" "$(DESTDIR)$(appicon48dir)" "$(DESTDIR)$(appicon64dir)" "$(DESTDIR)$(appiconscalabledir)"; do \
+	for dir in "$(DESTDIR)$(nautilus_extensiondir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(desktopdir)" "$(DESTDIR)$(appicon128dir)" "$(DESTDIR)$(appicon16dir)" "$(DESTDIR)$(appicon22dir)" "$(DESTDIR)$(appicon24dir)" "$(DESTDIR)$(appicon256dir)" "$(DESTDIR)$(appicon32dir)" "$(DESTDIR)$(appicon48dir)" "$(DESTDIR)$(appicon64dir)" "$(DESTDIR)$(appiconscalabledir)"; do \
 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
 	done
-install: install-recursive
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-recursive
 install-exec: install-exec-recursive
 install-data: install-data-recursive
 uninstall: uninstall-recursive
@@ -2608,12 +3015,16 @@ clean-generic:
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
 	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+	-rm -f nautilus-extension/$(DEPDIR)/$(am__dirstamp)
+	-rm -f nautilus-extension/$(am__dirstamp)
 	-rm -f src/$(DEPDIR)/$(am__dirstamp)
 	-rm -f src/$(am__dirstamp)
-	-rm -f src/id3lib/$(DEPDIR)/$(am__dirstamp)
-	-rm -f src/id3lib/$(am__dirstamp)
-	-rm -f src/libapetag/$(DEPDIR)/$(am__dirstamp)
-	-rm -f src/libapetag/$(am__dirstamp)
+	-rm -f src/tags/$(DEPDIR)/$(am__dirstamp)
+	-rm -f src/tags/$(am__dirstamp)
+	-rm -f src/tags/id3lib/$(DEPDIR)/$(am__dirstamp)
+	-rm -f src/tags/id3lib/$(am__dirstamp)
+	-rm -f src/tags/libapetag/$(DEPDIR)/$(am__dirstamp)
+	-rm -f src/tags/libapetag/$(am__dirstamp)
 	-rm -f src/win32/$(DEPDIR)/$(am__dirstamp)
 	-rm -f src/win32/$(am__dirstamp)
 	-rm -f tests/$(DEPDIR)/$(am__dirstamp)
@@ -2623,17 +3034,19 @@ distclean-generic:
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
 	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
 clean: clean-recursive
 
 clean-am: clean-binPROGRAMS clean-checkPROGRAMS clean-generic \
-	clean-local mostlyclean-am
+	clean-libtool clean-local clean-nautilus_extensionLTLIBRARIES \
+	mostlyclean-am
 
 distclean: distclean-recursive
 	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-	-rm -rf src/$(DEPDIR) src/id3lib/$(DEPDIR) src/libapetag/$(DEPDIR) src/win32/$(DEPDIR) tests/$(DEPDIR)
+	-rm -rf nautilus-extension/$(DEPDIR) src/$(DEPDIR) src/tags/$(DEPDIR) src/tags/id3lib/$(DEPDIR) src/tags/libapetag/$(DEPDIR) src/win32/$(DEPDIR) tests/$(DEPDIR)
 	-rm -f Makefile
 distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-hdr distclean-tags
+	distclean-hdr distclean-libtool distclean-tags
 
 dvi: dvi-recursive
 
@@ -2652,7 +3065,7 @@ install-data-am: install-desktopDATA install-dist_appicon128DATA \
 	install-dist_appicon24DATA install-dist_appicon256DATA \
 	install-dist_appicon32DATA install-dist_appicon48DATA \
 	install-dist_appicon64DATA install-dist_appiconscalableDATA \
-	install-man
+	install-man install-nautilus_extensionLTLIBRARIES
 	@$(NORMAL_INSTALL)
 	$(MAKE) $(AM_MAKEFLAGS) install-data-hook
 install-dvi: install-dvi-recursive
@@ -2684,13 +3097,14 @@ installcheck-am:
 maintainer-clean: maintainer-clean-recursive
 	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
 	-rm -rf $(top_srcdir)/autom4te.cache
-	-rm -rf src/$(DEPDIR) src/id3lib/$(DEPDIR) src/libapetag/$(DEPDIR) src/win32/$(DEPDIR) tests/$(DEPDIR)
+	-rm -rf nautilus-extension/$(DEPDIR) src/$(DEPDIR) src/tags/$(DEPDIR) src/tags/id3lib/$(DEPDIR) src/tags/libapetag/$(DEPDIR) src/win32/$(DEPDIR) tests/$(DEPDIR)
 	-rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-recursive
 
-mostlyclean-am: mostlyclean-compile mostlyclean-generic
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
 
 pdf: pdf-recursive
 
@@ -2705,25 +3119,27 @@ uninstall-am: uninstall-binPROGRAMS uninstall-desktopDATA \
 	uninstall-dist_appicon22DATA uninstall-dist_appicon24DATA \
 	uninstall-dist_appicon256DATA uninstall-dist_appicon32DATA \
 	uninstall-dist_appicon48DATA uninstall-dist_appicon64DATA \
-	uninstall-dist_appiconscalableDATA uninstall-man
+	uninstall-dist_appiconscalableDATA uninstall-man \
+	uninstall-nautilus_extensionLTLIBRARIES
 	@$(NORMAL_INSTALL)
 	$(MAKE) $(AM_MAKEFLAGS) uninstall-hook
 uninstall-man: uninstall-man1
 
-.MAKE: $(am__recursive_targets) all check-am install-am \
+.MAKE: $(am__recursive_targets) all check check-am install install-am \
 	install-data-am install-strip uninstall-am
 
 .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
 	am--refresh check check-TESTS check-am check-local clean \
 	clean-binPROGRAMS clean-checkPROGRAMS clean-cscope \
-	clean-generic clean-local cscope cscopelist-am ctags ctags-am \
-	dist dist-all dist-bzip2 dist-gzip dist-hook dist-lzip \
-	dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \
-	distclean-compile distclean-generic distclean-hdr \
-	distclean-tags distcleancheck distdir distuninstallcheck dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-binPROGRAMS install-data install-data-am \
-	install-data-hook install-desktopDATA \
+	clean-generic clean-libtool clean-local \
+	clean-nautilus_extensionLTLIBRARIES cscope cscopelist-am ctags \
+	ctags-am dist dist-all dist-bzip2 dist-gzip dist-hook \
+	dist-lzip dist-shar dist-tarZ dist-xz dist-zip distcheck \
+	distclean distclean-compile distclean-generic distclean-hdr \
+	distclean-libtool distclean-tags distcleancheck distdir \
+	distuninstallcheck dvi dvi-am html html-am info info-am \
+	install install-am install-binPROGRAMS install-data \
+	install-data-am install-data-hook install-desktopDATA \
 	install-dist_appicon128DATA install-dist_appicon16DATA \
 	install-dist_appicon22DATA install-dist_appicon24DATA \
 	install-dist_appicon256DATA install-dist_appicon32DATA \
@@ -2731,20 +3147,25 @@ uninstall-man: uninstall-man1
 	install-dist_appiconscalableDATA install-dvi install-dvi-am \
 	install-exec install-exec-am install-html install-html-am \
 	install-info install-info-am install-man install-man1 \
-	install-pdf install-pdf-am install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	installdirs-am maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \
-	ps ps-am recheck tags tags-am uninstall uninstall-am \
-	uninstall-binPROGRAMS uninstall-desktopDATA \
+	install-nautilus_extensionLTLIBRARIES install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs installdirs-am \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am recheck tags tags-am uninstall \
+	uninstall-am uninstall-binPROGRAMS uninstall-desktopDATA \
 	uninstall-dist_appicon128DATA uninstall-dist_appicon16DATA \
 	uninstall-dist_appicon22DATA uninstall-dist_appicon24DATA \
 	uninstall-dist_appicon256DATA uninstall-dist_appicon32DATA \
 	uninstall-dist_appicon48DATA uninstall-dist_appicon64DATA \
 	uninstall-dist_appiconscalableDATA uninstall-hook \
-	uninstall-man uninstall-man1
+	uninstall-man uninstall-man1 \
+	uninstall-nautilus_extensionLTLIBRARIES
 
 
+src/resource.c src/resource.h: data/org.gnome.EasyTAG.gresource.xml Makefile $(noinst_resource_files)
+	$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir)/data --generate $<
+
 @WINDOWS_HOST_TRUE at easytag_rc.$(OBJEXT): src/win32/easytag.rc src/win32/easytag.manifest data/icons/win32/easytag.ico
 @WINDOWS_HOST_TRUE@	$(AM_V_GEN)$(WINDRES) -DICONDIR='\"$(ICONDIR)\"' \
 @WINDOWS_HOST_TRUE@		-DMANIFESTDIR='\"$(MANIFESTDIR)\"' -i $< -o $@
@@ -2755,6 +3176,34 @@ uninstall-man: uninstall-man1
 @WINDOWS_HOST_TRUE@		makensis -NOCD -DDESTDIR=$$DESTDIR $< >/dev/null && \
 @WINDOWS_HOST_TRUE@		rm -rf $$DESTDIR
 
+src/enums.c: $(easytag_enum_headers) src/enums.h Makefile
+	$(AM_V_GEN)$(GLIB_MKENUMS) \
+		--fhead "#include \"enums.h\"\n\n" \
+		--fprod "/* enumerations from \"@filename@\" */\n" \
+		--fprod "#include \"@filename@\"\n" \
+		--vhead "GType\n at enum_name@_get_type (void)\n{\n" \
+		--vhead "    static GType type = 0;\n\n" \
+		--vhead "    if (!type)\n    {\n" \
+		--vhead "        static const G at Type@Value _ at enum_name@_values[] = {" \
+		--vprod "            { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \
+		--vtail "            { 0, NULL, NULL }\n        };\n\n" \
+		--vtail "        type = g_ at type@_register_static (\"@EnumName@\", _ at enum_name@_values);\n    }\n\n" \
+		--vtail "  return type;\n}\n\n" \
+		$(easytag_enum_headers) > $@
+
+src/enums.h: $(easytag_enum_headers) Makefile
+	$(AM_V_GEN)$(GLIB_MKENUMS) \
+		--fhead "#ifndef ET_ENUMS_H_\n" \
+		--fhead "#define ET_ENUMS_H_\n\n" \
+		--fhead "#include <glib-object.h>\n\n" \
+		--fhead "G_BEGIN_DECLS\n\n" \
+		--fprod "/* enumerations from @filename@ */\n" \
+		--vhead "GType @enum_name at _get_type (void);\n" \
+		--vhead "#define ET_TYPE_ at ENUMSHORT@ (@enum_name at _get_type())\n" \
+		--ftail "G_END_DECLS\n\n" \
+		--ftail "#endif /* ET_ENUMS_H_ */" \
+		$(easytag_enum_headers) > $@
+
 # NSIS installer script.
 # TODO: Run script from dist dir.
 easytag-win32-installer.nsi: easytag-win32-installer.nsi.in Makefile
@@ -2776,6 +3225,8 @@ easytag-win32-installer.nsi: easytag-win32-installer.nsi.in Makefile
 
 @INTLTOOL_DESKTOP_RULE@
 $(desktop_in_files:.desktop.in=.desktop): data/.dstamp
+data/org.gnome.EasyTAG.gschema.valid: data/.dstamp
+ at GSETTINGS_RULES@
 
 @ENABLE_MAN_TRUE at doc/easytag.1: doc/easytag.xml Makefile
 @ENABLE_MAN_TRUE@	$(AM_V_GEN)$(XSLTPROC) --nonet --param man.charmap.use.subset 0 \
diff --git a/NEWS b/NEWS
index 05df52e..084fa32 100644
--- a/NEWS
+++ b/NEWS
@@ -1,59 +1,58 @@
-2.2.4 - 2014-09-27 :
-====================
-
-    * Fix a crash when reloading the directory tree
-    * Fix delays, and a possible crash, when running CDDB searches
-    * Handle renaming on case-insensitive filesystems
-    * Provide a useful error message when failing to write files
-    * Fix memory leak in check for buggy id3lib version
-    * Improvements to scanner help
-    * Marek Černocký’s scanner help fixes
-    * Piotr Drąg’s Polish translation updates
-    * Andika Triwidada’s Indonesian translation
-    * Daniel Mustieles’ Spanish help translation
-
-2.2.3 - 2014-06-22 :
-====================
-
-    * Avoid a crash when browsing hidden directories
-    * Andreas Winkelmann’s browser crash and memory leak fixes
-    * Avoid a crash with GtkFileChooser on Windows
-    * Restore process fields options correctly
-    * Add .m4v as a supported MP4 extension
-    * Seong-ho Cho’s Korean translation
-    * Tom Tryfonidis’s Greek translation update
-    * Мирослав Николић’s Serbian translation update
-
-2.2.2 - 2014-05-09 :
+2.3.1 - 2014-10-31 :
 ====================
 
+    * Add a Nautilus extension, for showing actions in the context menu
+    * Overhaul the UI, and use GtkBuilder XML descriptions throughout
+    * Use GTK+ 3 only, and drop support for GTK+ 2
+    * Use GSettings for storing user preferences
+    * Add an application menu (if under GNOME 3)
     * Fix loading filenames from a text file
     * Fix saving Ogg cover art without a description
     * Fix check for broken id3lib UTF-16 writing
     * Fix keyboard navigation to allow escaping the tag area
     * Update ID3v1 genre list
     * Revert asynchronous image handling changes
-    * Andreas Winkelmann’s ID3 memory leak fix
-    * Andika Triwidada’s Indonesian translation
-    * Dimitris Spingos’s Greek help translation
-
-2.2.1 - 2014-04-22 :
-====================
-
+    * Fix a crash when reloading the directory tree
+    * Avoid a crash when browsing hidden directories
+    * Andreas Winkelmann’s crash and memory leak fixes
     * Fix image loading with HTTP URLs and empty images
+    * Fix delays, and a possible crash, when running CDDB searches
+    * Handle renaming on case-insensitive filesystems
     * Fix bogus track numbers when automatically numbering files
+    * Fix memory leak in check for buggy id3lib version
     * Add Opus and Speex MIME types to desktop file
+    * Add .m4v as a supported MP4 extension
+    * Show updated images in the Windows installer
     * Abhinav Jangda’s fix for numeric characters in ID3 TPOS fields
+    * Disable ID3v1 tag writing, and prefer ID3v2.3 to ID3v2.4, by default
     * Roman Bogorodskiy’s ID3 wrapper compilation fix
     * Improvements to MP4 GIO wrapper
+    * Improve context menu handling, especially with keyboard shortcuts
+    * Port to GtkApplication, GAction and GMenuModel
+    * Drop uses of GtkStock for text and icons
+    * Extensive internal refactoring
+    * Add tests for another scanner string manipulation function
+    * Add a setting to control whether to detect an image type automatically
+    * Fix a selection bug when double-clicking a browser list header
     * Fix a scanner bug when converting "%20" to " "
     * Fix compilation if TagLib or libogg is unavailable
     * Depend on TagLib 1.9.1 for MP4 support
     * Use CXXFLAGS from the environment
+    * Piotr Drąg’s Polish translation updates
+    * Åka Sikrom’s Norwegian bokmål translation
+    * Guillaume Bernard’s French translation update
+    * Balázs Úr’s Hungarian translation updates
+    * genodeftest’s German translation update
+    * Marek Černocký’s Czech translation updates
+    * Daniel Mustieles’ Spanish translation updates
+    * Tom Tryfonidis’ Greek translation update
+    * Seong-ho Cho’s Korean translation
+    * Andika Triwidada’s Indonesian translation
     * Rafael Ferrera’s Brazilian Portuguese translation update
     * Aurimas Černius’s Lithuanian translation update
-    * Balázs Úr’s Hungarian translation update
     * Matej Urbančič’s Slovenian translation update
+    * Daniel Mustieles’ Spanish help translation
+    * Dimitris Spingos’s Greek help translation
 
 2.2.0 - 2014-04-11 :
 ====================
diff --git a/README b/README
index d345ae2..67448f9 100644
--- a/README
+++ b/README
@@ -8,8 +8,9 @@ Description
 -----------
 
 EasyTAG is a utility for viewing and editing tags for MP3, MP2, FLAC, Ogg
-Vorbis, Speex, MP4/AAC, MusePack, Monkey's Audio and WavPack files. Its simple
-and nice GTK2 interface makes tagging easier under GNU/Linux or Windows.
+Vorbis, Speex and Opus, MP4/AAC, MusePack, Monkey's Audio and WavPack files.
+Its simple and nice GTK+ interface makes tagging easier under GNU/Linux or
+Windows.
 
 
 Features
@@ -18,7 +19,7 @@ Features
 Currently EasyTAG supports the following:
 
 * view, edit, write tags of MP3, MP2 files (ID3 tag with pictures), FLAC files
-  (FLAC Vorbis tag), Ogg Vorbis and Speex files (Ogg Vorbis tag), MP4/AAC
+  (FLAC Vorbis tag), Ogg Vorbis, Speex and Opus files (Ogg Vorbis tag), MP4/AAC
   (MP4/AAC tag), MusePack, Monkey's Audio and WavPack files (APE tag)
 * can edit more tag fields : Title, Artist, Album, Disc Album, Year, Track
   Number, Genre, Comment, Composer, Original Artist/Performer, Copyright, URL
@@ -37,16 +38,18 @@ Currently EasyTAG supports the following:
 * ability to process fields of tag and filename (convert letters into
   upper case, lower case, …)
 * ability to open a directory or a file with an external program
-* remote and local CDDB support for manual or automatic search
+* CDDB support for manual or automatic search
 * a tree based browser or a view by Artist & Album
 * a list to select files
 * a playlist generator window
 * a file searching window
 * simple and explicit interface!
+* optional Nautilus extension, for opening of files and directories through the
+  Nautilus context menu
 * Brazilian Portuguese, Bulgarian, Chinese, Czech, Danish, Dutch, French,
   German, Greek, Hungarian, Italian, Japanese, Polish, Romanian, Russian,
   Spanish, Swedish and Ukrainian translation languages
-* written in C and uses GTK+ 2 or GTK+ 3 for the GUI
+* written in C and uses GTK+ 3 for the GUI
 
 
 Installation
@@ -54,12 +57,13 @@ Installation
 
 ### Requirements
 
-* GLib version greater than 2.30.0 (http://www.gtk.org)
-* GTK+ version greater than 2.24.0 (http://www.gtk.org)
+* GLib version greater than 2.32.0 (http://www.gtk.org)
+* GTK+ version greater than 3.4.0 (http://www.gtk.org)
 * libid3tag (http://www.underbit.com/products/mad) (if not deactivated by './configure --disable-mp3')
 * id3lib version greater than 3.7.12 (http://id3lib.sourceforge.net) (Recommended: id3lib-3.8.3) (if not deactivated by './configure --disable-id3v23')
 * flac (http://flac.sourceforge.net) (if not deactivated by './configure --disable-flac')
 * libogg and libvorbis (http://www.vorbis.com) (if not deactivated by './configure --disable-ogg')
+* libnautilus-extension (https://wiki.gnome.org/Apps/Nautilus) (if not deactivated by ./configure --disable-nautilus-actions')
 * opus and opusfile (http://www.opus-codec.org/) (if not deactivated by './configure --disable-opus')
 * taglib (http://taglib.github.com/) (if not deactivated by './configure --disable-mp4')
 * wavpack (http://www.wavpack.com/) (if not deactivated by './configure --disable-wavpack')
@@ -72,25 +76,10 @@ Installation
 
 See INSTALL.
 
-
-Segfault occurs when running EasyTAG?
--------------------------------------
-
-The best way to allow us to fix the problem, is to send a backtrace:
-
-#### Be sure that core files are available
-
-If `ulimit -c` returns 0, then run the command `ulimit -c unlimited`
-
-Get the backtrace with 'gdb easytag core' (note that on some systems, the core
-file is suffixed by the pid. So use 'core._pid_number_' instead of only
-'core').
-    
-    gdb easytag core._pid_number_
-    gdb> bt
-    gdb> ...
-    gdb> l
-    gdb> ...
+When running, if you get a warning about a settings schema that is not
+installed, make sure that the GSettings schemas can be found in
+$XDG_DATA_DIRS/glib-2.0/schemas and that the schema cache has been updated with
+glib-compile-schemas.
 
 
 License
diff --git a/THANKS b/THANKS
index f4e3774..e09de14 100644
--- a/THANKS
+++ b/THANKS
@@ -142,6 +142,9 @@ Artists
 Waqas Qamar <wakas88 at gmail.com>
   - New icon and logo
 
+Ekaterina Gerasimova <kittykat3756 at gmail.com>
+  - Windows installer artwork
+
 Der Humph <humph at gmx.de>
   - New icon
 
diff --git a/TODO b/TODO
index e6b67ea..7252782 100644
--- a/TODO
+++ b/TODO
@@ -4,24 +4,15 @@ TODO List
 General tidying
 ---------------
 
-* Convert user guide to help in Mallard
-* Avoid using GdkWindow all over the place
-** Drop the window moving and size restoring code
-* Use PNG icons and drop the XPM ones
 * Use GProxyResolver for proxy settings
-* Port configuration settings to use GSettings
 * Port file I/O to use GFile from GIO
 ** Additionally, make I/O asynchronous
 ** Always use the GLib encoding for filenames (convert for display)
-* Instantiate windows on first use, not at startup
-* GObjectification
 * Avoid using gtk_events_pending(), use asynchronous operations instead
 
 After GTK+ 3
 ------------
 
-* Port to GtkApplication
-* Add an application menu with gtk_application_set_app_menu()
 * Use GtkAppChooserDialog for selecting applications
 
 Tagging features
@@ -40,10 +31,6 @@ Tagging features
 UI work
 -------
 
-* Use more of the standard GTK+ widgets, for example GtkAboutDialog
 * Use a Nautilus-like path bar for directory selection
 * Detect when the main window is too large to fit on the screen
 ** Reflow tagging UI in order to fit on screen
-* Try to follow a style guide, for example the GNOME HIG
-** Remove GtkFrame from most places
-** Add a bit more padding
diff --git a/aclocal.m4 b/aclocal.m4
index a996b29..46b6c60 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -355,6 +355,90 @@ m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([$1])])
 ]
 )
 
+dnl GLIB_GSETTINGS
+dnl Defines GSETTINGS_SCHEMAS_INSTALL which controls whether
+dnl the schema should be compiled
+dnl
+
+AC_DEFUN([GLIB_GSETTINGS],
+[
+  m4_pattern_allow([AM_V_GEN])
+  AC_ARG_ENABLE(schemas-compile,
+                AS_HELP_STRING([--disable-schemas-compile],
+                               [Disable regeneration of gschemas.compiled on install]),
+                [case ${enableval} in
+                  yes) GSETTINGS_DISABLE_SCHEMAS_COMPILE=""  ;;
+                  no)  GSETTINGS_DISABLE_SCHEMAS_COMPILE="1" ;;
+                  *) AC_MSG_ERROR([bad value ${enableval} for --enable-schemas-compile]) ;;
+                 esac])
+  AC_SUBST([GSETTINGS_DISABLE_SCHEMAS_COMPILE])
+  PKG_PROG_PKG_CONFIG([0.16])
+  AC_SUBST(gsettingsschemadir, [${datadir}/glib-2.0/schemas])
+  if test x$cross_compiling != xyes; then
+    GLIB_COMPILE_SCHEMAS=`$PKG_CONFIG --variable glib_compile_schemas gio-2.0`
+  else
+    AC_PATH_PROG(GLIB_COMPILE_SCHEMAS, glib-compile-schemas)
+  fi
+  AC_SUBST(GLIB_COMPILE_SCHEMAS)
+  if test "x$GLIB_COMPILE_SCHEMAS" = "x"; then
+    ifelse([$2],,[AC_MSG_ERROR([glib-compile-schemas not found.])],[$2])
+  else
+    ifelse([$1],,[:],[$1])
+  fi
+
+  GSETTINGS_RULES='
+.PHONY : uninstall-gsettings-schemas install-gsettings-schemas clean-gsettings-schemas
+
+mostlyclean-am: clean-gsettings-schemas
+
+gsettings__enum_file = $(addsuffix .enums.xml,$(gsettings_ENUM_NAMESPACE))
+
+%.gschema.valid: %.gschema.xml $(gsettings__enum_file)
+	$(AM_V_GEN) $(GLIB_COMPILE_SCHEMAS) --strict --dry-run $(addprefix --schema-file=,$(gsettings__enum_file)) --schema-file=$< && mkdir -p [$](@D) && touch [$]@
+
+all-am: $(gsettings_SCHEMAS:.xml=.valid)
+uninstall-am: uninstall-gsettings-schemas
+install-data-am: install-gsettings-schemas
+
+.SECONDARY: $(gsettings_SCHEMAS)
+
+install-gsettings-schemas: $(gsettings_SCHEMAS) $(gsettings__enum_file)
+	@$(NORMAL_INSTALL)
+	if test -n "$^"; then \
+		test -z "$(gsettingsschemadir)" || $(MKDIR_P) "$(DESTDIR)$(gsettingsschemadir)"; \
+		$(INSTALL_DATA) $^ "$(DESTDIR)$(gsettingsschemadir)"; \
+		test -n "$(GSETTINGS_DISABLE_SCHEMAS_COMPILE)$(DESTDIR)" || $(GLIB_COMPILE_SCHEMAS) $(gsettingsschemadir); \
+	fi
+
+uninstall-gsettings-schemas:
+	@$(NORMAL_UNINSTALL)
+	@list='\''$(gsettings_SCHEMAS) $(gsettings__enum_file)'\''; test -n "$(gsettingsschemadir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e '\''s|^.*/||'\''`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '\''$(DESTDIR)$(gsettingsschemadir)'\'' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(gsettingsschemadir)" && rm -f $$files
+	test -n "$(GSETTINGS_DISABLE_SCHEMAS_COMPILE)$(DESTDIR)" || $(GLIB_COMPILE_SCHEMAS) $(gsettingsschemadir)
+
+clean-gsettings-schemas:
+	rm -f $(gsettings_SCHEMAS:.xml=.valid) $(gsettings__enum_file)
+
+ifdef gsettings_ENUM_NAMESPACE
+$(gsettings__enum_file): $(gsettings_ENUM_FILES)
+	$(AM_V_GEN) glib-mkenums --comments '\''<!-- @comment@ -->'\'' --fhead "<schemalist>" --vhead "  <@type@ id='\''$(gsettings_ENUM_NAMESPACE). at EnumName@'\''>" --vprod "    <value nick='\''@valuenick@'\'' value='\''@valuenum@'\''/>" --vtail "  </@type@>" --ftail "</schemalist>" [$]^ > [$]@.tmp && mv [$]@.tmp [$]@
+endif
+'
+  _GSETTINGS_SUBST(GSETTINGS_RULES)
+])
+
+dnl _GSETTINGS_SUBST(VARIABLE)
+dnl Abstract macro to do either _AM_SUBST_NOTMAKE or AC_SUBST
+AC_DEFUN([_GSETTINGS_SUBST],
+[
+AC_SUBST([$1])
+m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([$1])])
+]
+)
+
 AC_DEFUN([YELP_HELP_INIT],
 [
 AC_REQUIRE([AC_PROG_LN_S])
@@ -476,7 +560,7 @@ EXTRA_DIST += $(foreach lc,$(HELP_LINGUAS),$(lc)/$(lc).po)
 EXTRA_DIST += $(foreach f,$(HELP_MEDIA),$(foreach lc,$(HELP_LINGUAS),$(wildcard $(lc)/$(f))))
 
 distdir: distdir-help-files
-distdir-help-files:
+distdir-help-files: $(_HELP_LC_FILES)
 	@for lc in C $(if $(YELP_LC_DIST),$(HELP_LINGUAS)) ; do \
 	  $(MKDIR_P) "$(distdir)/$$lc"; \
 	  for file in $(HELP_FILES); do \
@@ -505,7 +589,7 @@ check-help:
 
 .PHONY: install-help
 install-data-am: $(if $(HELP_ID),install-help)
-install-help:
+install-help: $(_HELP_LC_FILES)
 	@for lc in C $(_HELP_LINGUAS); do \
 	  $(mkinstalldirs) "$(DESTDIR)$(HELP_DIR)/$$lc/$(HELP_ID)" || exit 1; \
 	done
@@ -1735,3 +1819,8 @@ AC_SUBST([am__untar])
 m4_include([m4/gtkdoc_jh_check_xml_catalog.m4])
 m4_include([m4/gtkdoc_jh_path_xml_catalog.m4])
 m4_include([m4/intltool.m4])
+m4_include([m4/libtool.m4])
+m4_include([m4/ltoptions.m4])
+m4_include([m4/ltsugar.m4])
+m4_include([m4/ltversion.m4])
+m4_include([m4/lt~obsolete.m4])
diff --git a/build-aux/ltmain.sh b/build-aux/ltmain.sh
new file mode 100644
index 0000000..63ae69d
--- /dev/null
+++ b/build-aux/ltmain.sh
@@ -0,0 +1,9655 @@
+
+# libtool (GNU libtool) 2.4.2
+# Written by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
+# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions.  There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# GNU Libtool 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
+# (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html,
+# or obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+# Usage: $progname [OPTION]... [MODE-ARG]...
+#
+# Provide generalized library-building support services.
+#
+#       --config             show all configuration variables
+#       --debug              enable verbose shell tracing
+#   -n, --dry-run            display commands without modifying any files
+#       --features           display basic configuration information and exit
+#       --mode=MODE          use operation mode MODE
+#       --preserve-dup-deps  don't remove duplicate dependency libraries
+#       --quiet, --silent    don't print informational messages
+#       --no-quiet, --no-silent
+#                            print informational messages (default)
+#       --no-warn            don't display warning messages
+#       --tag=TAG            use configuration variables from tag TAG
+#   -v, --verbose            print more informational messages than default
+#       --no-verbose         don't print the extra informational messages
+#       --version            print version information
+#   -h, --help, --help-all   print short, long, or detailed help message
+#
+# MODE must be one of the following:
+#
+#         clean              remove files from the build directory
+#         compile            compile a source file into a libtool object
+#         execute            automatically set library path, then run a program
+#         finish             complete the installation of libtool libraries
+#         install            install libraries or executables
+#         link               create a library or an executable
+#         uninstall          remove libraries from an installed directory
+#
+# MODE-ARGS vary depending on the MODE.  When passed as first option,
+# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that.
+# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
+#
+# When reporting a bug, please describe a test case to reproduce it and
+# include the following information:
+#
+#         host-triplet:	$host
+#         shell:		$SHELL
+#         compiler:		$LTCC
+#         compiler flags:		$LTCFLAGS
+#         linker:		$LD (gnu? $with_gnu_ld)
+#         $progname:	(GNU libtool) 2.4.2
+#         automake:	$automake_version
+#         autoconf:	$autoconf_version
+#
+# Report bugs to <bug-libtool at gnu.org>.
+# GNU libtool home page: <http://www.gnu.org/software/libtool/>.
+# General help using GNU software: <http://www.gnu.org/gethelp/>.
+
+PROGRAM=libtool
+PACKAGE=libtool
+VERSION=2.4.2
+TIMESTAMP=""
+package_revision=1.3337
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+}
+
+# NLS nuisances: We save the old values to restore during execute mode.
+lt_user_locale=
+lt_safe_locale=
+for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+do
+  eval "if test \"\${$lt_var+set}\" = set; then
+          save_$lt_var=\$$lt_var
+          $lt_var=C
+	  export $lt_var
+	  lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
+	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
+	fi"
+done
+LC_ALL=C
+LANGUAGE=C
+export LANGUAGE LC_ALL
+
+$lt_unset CDPATH
+
+
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath="$0"
+
+
+
+: ${CP="cp -f"}
+test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
+: ${MAKE="make"}
+: ${MKDIR="mkdir"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
+: ${Xsed="$SED -e 1s/^X//"}
+
+# Global variables:
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+EXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
+EXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
+
+exit_status=$EXIT_SUCCESS
+
+# Make sure IFS has a sensible default
+lt_nl='
+'
+IFS=" 	$lt_nl"
+
+dirname="s,/[^/]*$,,"
+basename="s,^.*/,,"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+    func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
+    if test "X$func_dirname_result" = "X${1}"; then
+      func_dirname_result="${3}"
+    else
+      func_dirname_result="$func_dirname_result${2}"
+    fi
+} # func_dirname may be replaced by extended shell implementation
+
+
+# func_basename file
+func_basename ()
+{
+    func_basename_result=`$ECHO "${1}" | $SED "$basename"`
+} # func_basename may be replaced by extended shell implementation
+
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+    # Extract subdirectory from the argument.
+    func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
+    if test "X$func_dirname_result" = "X${1}"; then
+      func_dirname_result="${3}"
+    else
+      func_dirname_result="$func_dirname_result${2}"
+    fi
+    func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
+} # func_dirname_and_basename may be replaced by extended shell implementation
+
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+    case ${2} in
+      .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+      *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+    esac
+} # func_stripname may be replaced by extended shell implementation
+
+
+# These SED scripts presuppose an absolute path with a trailing slash.
+pathcar='s,^/\([^/]*\).*$,\1,'
+pathcdr='s,^/[^/]*,,'
+removedotparts=':dotsl
+		s@/\./@/@g
+		t dotsl
+		s,/\.$,/,'
+collapseslashes='s@/\{1,\}@/@g'
+finalslash='s,/*$,/,'
+
+# func_normal_abspath PATH
+# Remove doubled-up and trailing slashes, "." path components,
+# and cancel out any ".." path components in PATH after making
+# it an absolute path.
+#             value returned in "$func_normal_abspath_result"
+func_normal_abspath ()
+{
+  # Start from root dir and reassemble the path.
+  func_normal_abspath_result=
+  func_normal_abspath_tpath=$1
+  func_normal_abspath_altnamespace=
+  case $func_normal_abspath_tpath in
+    "")
+      # Empty path, that just means $cwd.
+      func_stripname '' '/' "`pwd`"
+      func_normal_abspath_result=$func_stripname_result
+      return
+    ;;
+    # The next three entries are used to spot a run of precisely
+    # two leading slashes without using negated character classes;
+    # we take advantage of case's first-match behaviour.
+    ///*)
+      # Unusual form of absolute path, do nothing.
+    ;;
+    //*)
+      # Not necessarily an ordinary path; POSIX reserves leading '//'
+      # and for example Cygwin uses it to access remote file shares
+      # over CIFS/SMB, so we conserve a leading double slash if found.
+      func_normal_abspath_altnamespace=/
+    ;;
+    /*)
+      # Absolute path, do nothing.
+    ;;
+    *)
+      # Relative path, prepend $cwd.
+      func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
+    ;;
+  esac
+  # Cancel out all the simple stuff to save iterations.  We also want
+  # the path to end with a slash for ease of parsing, so make sure
+  # there is one (and only one) here.
+  func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+        -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"`
+  while :; do
+    # Processed it all yet?
+    if test "$func_normal_abspath_tpath" = / ; then
+      # If we ascended to the root using ".." the result may be empty now.
+      if test -z "$func_normal_abspath_result" ; then
+        func_normal_abspath_result=/
+      fi
+      break
+    fi
+    func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
+        -e "$pathcar"`
+    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+        -e "$pathcdr"`
+    # Figure out what to do with it
+    case $func_normal_abspath_tcomponent in
+      "")
+        # Trailing empty path component, ignore it.
+      ;;
+      ..)
+        # Parent dir; strip last assembled component from result.
+        func_dirname "$func_normal_abspath_result"
+        func_normal_abspath_result=$func_dirname_result
+      ;;
+      *)
+        # Actual path component, append it.
+        func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent
+      ;;
+    esac
+  done
+  # Restore leading double-slash if one was found on entry.
+  func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
+}
+
+# func_relative_path SRCDIR DSTDIR
+# generates a relative path from SRCDIR to DSTDIR, with a trailing
+# slash if non-empty, suitable for immediately appending a filename
+# without needing to append a separator.
+#             value returned in "$func_relative_path_result"
+func_relative_path ()
+{
+  func_relative_path_result=
+  func_normal_abspath "$1"
+  func_relative_path_tlibdir=$func_normal_abspath_result
+  func_normal_abspath "$2"
+  func_relative_path_tbindir=$func_normal_abspath_result
+
+  # Ascend the tree starting from libdir
+  while :; do
+    # check if we have found a prefix of bindir
+    case $func_relative_path_tbindir in
+      $func_relative_path_tlibdir)
+        # found an exact match
+        func_relative_path_tcancelled=
+        break
+        ;;
+      $func_relative_path_tlibdir*)
+        # found a matching prefix
+        func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
+        func_relative_path_tcancelled=$func_stripname_result
+        if test -z "$func_relative_path_result"; then
+          func_relative_path_result=.
+        fi
+        break
+        ;;
+      *)
+        func_dirname $func_relative_path_tlibdir
+        func_relative_path_tlibdir=${func_dirname_result}
+        if test "x$func_relative_path_tlibdir" = x ; then
+          # Have to descend all the way to the root!
+          func_relative_path_result=../$func_relative_path_result
+          func_relative_path_tcancelled=$func_relative_path_tbindir
+          break
+        fi
+        func_relative_path_result=../$func_relative_path_result
+        ;;
+    esac
+  done
+
+  # Now calculate path; take care to avoid doubling-up slashes.
+  func_stripname '' '/' "$func_relative_path_result"
+  func_relative_path_result=$func_stripname_result
+  func_stripname '/' '/' "$func_relative_path_tcancelled"
+  if test "x$func_stripname_result" != x ; then
+    func_relative_path_result=${func_relative_path_result}/${func_stripname_result}
+  fi
+
+  # Normalisation. If bindir is libdir, return empty string,
+  # else relative path ending with a slash; either way, target
+  # file name can be directly appended.
+  if test ! -z "$func_relative_path_result"; then
+    func_stripname './' '' "$func_relative_path_result/"
+    func_relative_path_result=$func_stripname_result
+  fi
+}
+
+# The name of this program:
+func_dirname_and_basename "$progpath"
+progname=$func_basename_result
+
+# Make sure we have an absolute path for reexecution:
+case $progpath in
+  [\\/]*|[A-Za-z]:\\*) ;;
+  *[\\/]*)
+     progdir=$func_dirname_result
+     progdir=`cd "$progdir" && pwd`
+     progpath="$progdir/$progname"
+     ;;
+  *)
+     save_IFS="$IFS"
+     IFS=${PATH_SEPARATOR-:}
+     for progdir in $PATH; do
+       IFS="$save_IFS"
+       test -x "$progdir/$progname" && break
+     done
+     IFS="$save_IFS"
+     test -n "$progdir" || progdir=`pwd`
+     progpath="$progdir/$progname"
+     ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed="${SED}"' -e 1s/^X//'
+sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution that turns a string into a regex matching for the
+# string literally.
+sed_make_literal_regex='s,[].[^$\\*\/],\\&,g'
+
+# Sed substitution that converts a w32 file name or path
+# which contains forward slashes, into one that contains
+# (escaped) backslashes.  A very naive implementation.
+lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+
+# Re-`\' parameter expansions in output of double_quote_subst that were
+# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
+# in input to double_quote_subst, that '$' was protected from expansion.
+# Since each input `\' is now two `\'s, look for any number of runs of
+# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
+bs='\\'
+bs2='\\\\'
+bs4='\\\\\\\\'
+dollar='\$'
+sed_double_backslash="\
+  s/$bs4/&\\
+/g
+  s/^$bs2$dollar/$bs&/
+  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
+  s/\n//g"
+
+# Standard options:
+opt_dry_run=false
+opt_help=false
+opt_quiet=false
+opt_verbose=false
+opt_warning=:
+
+# func_echo arg...
+# Echo program name prefixed message, along with the current mode
+# name if it has been set yet.
+func_echo ()
+{
+    $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
+}
+
+# func_verbose arg...
+# Echo program name prefixed message in verbose mode only.
+func_verbose ()
+{
+    $opt_verbose && func_echo ${1+"$@"}
+
+    # A bug in bash halts the script if the last line of a function
+    # fails when set -e is in force, so we need another command to
+    # work around that:
+    :
+}
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO "$*"
+}
+
+# func_error arg...
+# Echo program name prefixed message to standard error.
+func_error ()
+{
+    $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
+}
+
+# func_warning arg...
+# Echo program name prefixed warning message to standard error.
+func_warning ()
+{
+    $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
+
+    # bash bug again:
+    :
+}
+
+# func_fatal_error arg...
+# Echo program name prefixed message to standard error, and exit.
+func_fatal_error ()
+{
+    func_error ${1+"$@"}
+    exit $EXIT_FAILURE
+}
+
+# func_fatal_help arg...
+# Echo program name prefixed message to standard error, followed by
+# a help hint, and exit.
+func_fatal_help ()
+{
+    func_error ${1+"$@"}
+    func_fatal_error "$help"
+}
+help="Try \`$progname --help' for more information."  ## default
+
+
+# func_grep expression filename
+# Check whether EXPRESSION matches any line of FILENAME, without output.
+func_grep ()
+{
+    $GREP "$1" "$2" >/dev/null 2>&1
+}
+
+
+# func_mkdir_p directory-path
+# Make sure the entire path to DIRECTORY-PATH is available.
+func_mkdir_p ()
+{
+    my_directory_path="$1"
+    my_dir_list=
+
+    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
+
+      # Protect directory names starting with `-'
+      case $my_directory_path in
+        -*) my_directory_path="./$my_directory_path" ;;
+      esac
+
+      # While some portion of DIR does not yet exist...
+      while test ! -d "$my_directory_path"; do
+        # ...make a list in topmost first order.  Use a colon delimited
+	# list incase some portion of path contains whitespace.
+        my_dir_list="$my_directory_path:$my_dir_list"
+
+        # If the last portion added has no slash in it, the list is done
+        case $my_directory_path in */*) ;; *) break ;; esac
+
+        # ...otherwise throw away the child directory and loop
+        my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
+      done
+      my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
+
+      save_mkdir_p_IFS="$IFS"; IFS=':'
+      for my_dir in $my_dir_list; do
+	IFS="$save_mkdir_p_IFS"
+        # mkdir can fail with a `File exist' error if two processes
+        # try to create one of the directories concurrently.  Don't
+        # stop in that case!
+        $MKDIR "$my_dir" 2>/dev/null || :
+      done
+      IFS="$save_mkdir_p_IFS"
+
+      # Bail out if we (or some other process) failed to create a directory.
+      test -d "$my_directory_path" || \
+        func_fatal_error "Failed to create \`$1'"
+    fi
+}
+
+
+# func_mktempdir [string]
+# Make a temporary directory that won't clash with other running
+# libtool processes, and avoids race conditions if possible.  If
+# given, STRING is the basename for that directory.
+func_mktempdir ()
+{
+    my_template="${TMPDIR-/tmp}/${1-$progname}"
+
+    if test "$opt_dry_run" = ":"; then
+      # Return a directory name, but don't create it in dry-run mode
+      my_tmpdir="${my_template}-$$"
+    else
+
+      # If mktemp works, use that first and foremost
+      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
+
+      if test ! -d "$my_tmpdir"; then
+        # Failing that, at least try and use $RANDOM to avoid a race
+        my_tmpdir="${my_template}-${RANDOM-0}$$"
+
+        save_mktempdir_umask=`umask`
+        umask 0077
+        $MKDIR "$my_tmpdir"
+        umask $save_mktempdir_umask
+      fi
+
+      # If we're not in dry-run mode, bomb out on failure
+      test -d "$my_tmpdir" || \
+        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
+    fi
+
+    $ECHO "$my_tmpdir"
+}
+
+
+# func_quote_for_eval arg
+# Aesthetically quote ARG to be evaled later.
+# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
+# is double-quoted, suitable for a subsequent eval, whereas
+# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
+# which are still active within double quotes backslashified.
+func_quote_for_eval ()
+{
+    case $1 in
+      *[\\\`\"\$]*)
+	func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
+      *)
+        func_quote_for_eval_unquoted_result="$1" ;;
+    esac
+
+    case $func_quote_for_eval_unquoted_result in
+      # Double-quote args containing shell metacharacters to delay
+      # word splitting, command substitution and and variable
+      # expansion for a subsequent eval.
+      # Many Bourne shells cannot handle close brackets correctly
+      # in scan sets, so we specify it separately.
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
+        ;;
+      *)
+        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
+    esac
+}
+
+
+# func_quote_for_expand arg
+# Aesthetically quote ARG to be evaled later; same as above,
+# but do not quote variable references.
+func_quote_for_expand ()
+{
+    case $1 in
+      *[\\\`\"]*)
+	my_arg=`$ECHO "$1" | $SED \
+	    -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
+      *)
+        my_arg="$1" ;;
+    esac
+
+    case $my_arg in
+      # Double-quote args containing shell metacharacters to delay
+      # word splitting and command substitution for a subsequent eval.
+      # Many Bourne shells cannot handle close brackets correctly
+      # in scan sets, so we specify it separately.
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+        my_arg="\"$my_arg\""
+        ;;
+    esac
+
+    func_quote_for_expand_result="$my_arg"
+}
+
+
+# func_show_eval cmd [fail_exp]
+# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
+# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.
+func_show_eval ()
+{
+    my_cmd="$1"
+    my_fail_exp="${2-:}"
+
+    ${opt_silent-false} || {
+      func_quote_for_expand "$my_cmd"
+      eval "func_echo $func_quote_for_expand_result"
+    }
+
+    if ${opt_dry_run-false}; then :; else
+      eval "$my_cmd"
+      my_status=$?
+      if test "$my_status" -eq 0; then :; else
+	eval "(exit $my_status); $my_fail_exp"
+      fi
+    fi
+}
+
+
+# func_show_eval_locale cmd [fail_exp]
+# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
+# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.  Use the saved locale for evaluation.
+func_show_eval_locale ()
+{
+    my_cmd="$1"
+    my_fail_exp="${2-:}"
+
+    ${opt_silent-false} || {
+      func_quote_for_expand "$my_cmd"
+      eval "func_echo $func_quote_for_expand_result"
+    }
+
+    if ${opt_dry_run-false}; then :; else
+      eval "$lt_user_locale
+	    $my_cmd"
+      my_status=$?
+      eval "$lt_safe_locale"
+      if test "$my_status" -eq 0; then :; else
+	eval "(exit $my_status); $my_fail_exp"
+      fi
+    fi
+}
+
+# func_tr_sh
+# Turn $1 into a string suitable for a shell variable name.
+# Result is stored in $func_tr_sh_result.  All characters
+# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
+# if $1 begins with a digit, a '_' is prepended as well.
+func_tr_sh ()
+{
+  case $1 in
+  [0-9]* | *[!a-zA-Z0-9_]*)
+    func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'`
+    ;;
+  * )
+    func_tr_sh_result=$1
+    ;;
+  esac
+}
+
+
+# func_version
+# Echo version message to standard output and exit.
+func_version ()
+{
+    $opt_debug
+
+    $SED -n '/(C)/!b go
+	:more
+	/\./!{
+	  N
+	  s/\n# / /
+	  b more
+	}
+	:go
+	/^# '$PROGRAM' (GNU /,/# warranty; / {
+        s/^# //
+	s/^# *$//
+        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
+        p
+     }' < "$progpath"
+     exit $?
+}
+
+# func_usage
+# Echo short help message to standard output and exit.
+func_usage ()
+{
+    $opt_debug
+
+    $SED -n '/^# Usage:/,/^#  *.*--help/ {
+        s/^# //
+	s/^# *$//
+	s/\$progname/'$progname'/
+	p
+    }' < "$progpath"
+    echo
+    $ECHO "run \`$progname --help | more' for full usage"
+    exit $?
+}
+
+# func_help [NOEXIT]
+# Echo long help message to standard output and exit,
+# unless 'noexit' is passed as argument.
+func_help ()
+{
+    $opt_debug
+
+    $SED -n '/^# Usage:/,/# Report bugs to/ {
+	:print
+        s/^# //
+	s/^# *$//
+	s*\$progname*'$progname'*
+	s*\$host*'"$host"'*
+	s*\$SHELL*'"$SHELL"'*
+	s*\$LTCC*'"$LTCC"'*
+	s*\$LTCFLAGS*'"$LTCFLAGS"'*
+	s*\$LD*'"$LD"'*
+	s/\$with_gnu_ld/'"$with_gnu_ld"'/
+	s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/
+	s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/
+	p
+	d
+     }
+     /^# .* home page:/b print
+     /^# General help using/b print
+     ' < "$progpath"
+    ret=$?
+    if test -z "$1"; then
+      exit $ret
+    fi
+}
+
+# func_missing_arg argname
+# Echo program name prefixed message to standard error and set global
+# exit_cmd.
+func_missing_arg ()
+{
+    $opt_debug
+
+    func_error "missing argument for $1."
+    exit_cmd=exit
+}
+
+
+# func_split_short_opt shortopt
+# Set func_split_short_opt_name and func_split_short_opt_arg shell
+# variables after splitting SHORTOPT after the 2nd character.
+func_split_short_opt ()
+{
+    my_sed_short_opt='1s/^\(..\).*$/\1/;q'
+    my_sed_short_rest='1s/^..\(.*\)$/\1/;q'
+
+    func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"`
+    func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"`
+} # func_split_short_opt may be replaced by extended shell implementation
+
+
+# func_split_long_opt longopt
+# Set func_split_long_opt_name and func_split_long_opt_arg shell
+# variables after splitting LONGOPT at the `=' sign.
+func_split_long_opt ()
+{
+    my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
+    my_sed_long_arg='1s/^--[^=]*=//'
+
+    func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"`
+    func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"`
+} # func_split_long_opt may be replaced by extended shell implementation
+
+exit_cmd=:
+
+
+
+
+
+magic="%%%MAGIC variable%%%"
+magic_exe="%%%MAGIC EXE variable%%%"
+
+# Global variables.
+nonopt=
+preserve_args=
+lo2o="s/\\.lo\$/.${objext}/"
+o2lo="s/\\.${objext}\$/.lo/"
+extracted_archives=
+extracted_serial=0
+
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end.  This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+    eval "${1}=\$${1}\${2}"
+} # func_append may be replaced by extended shell implementation
+
+# func_append_quoted var value
+# Quote VALUE and append to the end of shell variable VAR, separated
+# by a space.
+func_append_quoted ()
+{
+    func_quote_for_eval "${2}"
+    eval "${1}=\$${1}\\ \$func_quote_for_eval_result"
+} # func_append_quoted may be replaced by extended shell implementation
+
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+    func_arith_result=`expr "${@}"`
+} # func_arith may be replaced by extended shell implementation
+
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+    func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len`
+} # func_len may be replaced by extended shell implementation
+
+
+# func_lo2o object
+func_lo2o ()
+{
+    func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
+} # func_lo2o may be replaced by extended shell implementation
+
+
+# func_xform libobj-or-source
+func_xform ()
+{
+    func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
+} # func_xform may be replaced by extended shell implementation
+
+
+# func_fatal_configuration arg...
+# Echo program name prefixed message to standard error, followed by
+# a configuration failure hint, and exit.
+func_fatal_configuration ()
+{
+    func_error ${1+"$@"}
+    func_error "See the $PACKAGE documentation for more information."
+    func_fatal_error "Fatal configuration error."
+}
+
+
+# func_config
+# Display the configuration for all the tags in this script.
+func_config ()
+{
+    re_begincf='^# ### BEGIN LIBTOOL'
+    re_endcf='^# ### END LIBTOOL'
+
+    # Default configuration.
+    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
+
+    # Now print the configurations for the tags.
+    for tagname in $taglist; do
+      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
+    done
+
+    exit $?
+}
+
+# func_features
+# Display the features supported by this script.
+func_features ()
+{
+    echo "host: $host"
+    if test "$build_libtool_libs" = yes; then
+      echo "enable shared libraries"
+    else
+      echo "disable shared libraries"
+    fi
+    if test "$build_old_libs" = yes; then
+      echo "enable static libraries"
+    else
+      echo "disable static libraries"
+    fi
+
+    exit $?
+}
+
+# func_enable_tag tagname
+# Verify that TAGNAME is valid, and either flag an error and exit, or
+# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
+# variable here.
+func_enable_tag ()
+{
+  # Global variable:
+  tagname="$1"
+
+  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
+  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
+  sed_extractcf="/$re_begincf/,/$re_endcf/p"
+
+  # Validate tagname.
+  case $tagname in
+    *[!-_A-Za-z0-9,/]*)
+      func_fatal_error "invalid tag name: $tagname"
+      ;;
+  esac
+
+  # Don't test for the "default" C tag, as we know it's
+  # there but not specially marked.
+  case $tagname in
+    CC) ;;
+    *)
+      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
+	taglist="$taglist $tagname"
+
+	# Evaluate the configuration.  Be careful to quote the path
+	# and the sed script, to avoid splitting on whitespace, but
+	# also don't use non-portable quotes within backquotes within
+	# quotes we have to do it in 2 steps:
+	extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
+	eval "$extractedcf"
+      else
+	func_error "ignoring unknown tag $tagname"
+      fi
+      ;;
+  esac
+}
+
+# func_check_version_match
+# Ensure that we are using m4 macros, and libtool script from the same
+# release of libtool.
+func_check_version_match ()
+{
+  if test "$package_revision" != "$macro_revision"; then
+    if test "$VERSION" != "$macro_version"; then
+      if test -z "$macro_version"; then
+        cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from an older release.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+      else
+        cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+      fi
+    else
+      cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
+$progname: but the definition of this LT_INIT comes from revision $macro_revision.
+$progname: You should recreate aclocal.m4 with macros from revision $package_revision
+$progname: of $PACKAGE $VERSION and run autoconf again.
+_LT_EOF
+    fi
+
+    exit $EXIT_MISMATCH
+  fi
+}
+
+
+# Shorthand for --mode=foo, only valid as the first argument
+case $1 in
+clean|clea|cle|cl)
+  shift; set dummy --mode clean ${1+"$@"}; shift
+  ;;
+compile|compil|compi|comp|com|co|c)
+  shift; set dummy --mode compile ${1+"$@"}; shift
+  ;;
+execute|execut|execu|exec|exe|ex|e)
+  shift; set dummy --mode execute ${1+"$@"}; shift
+  ;;
+finish|finis|fini|fin|fi|f)
+  shift; set dummy --mode finish ${1+"$@"}; shift
+  ;;
+install|instal|insta|inst|ins|in|i)
+  shift; set dummy --mode install ${1+"$@"}; shift
+  ;;
+link|lin|li|l)
+  shift; set dummy --mode link ${1+"$@"}; shift
+  ;;
+uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
+  shift; set dummy --mode uninstall ${1+"$@"}; shift
+  ;;
+esac
+
+
+
+# Option defaults:
+opt_debug=:
+opt_dry_run=false
+opt_config=false
+opt_preserve_dup_deps=false
+opt_features=false
+opt_finish=false
+opt_help=false
+opt_help_all=false
+opt_silent=:
+opt_warning=:
+opt_verbose=:
+opt_silent=false
+opt_verbose=false
+
+
+# Parse options once, thoroughly.  This comes as soon as possible in the
+# script to make things like `--version' happen as quickly as we can.
+{
+  # this just eases exit handling
+  while test $# -gt 0; do
+    opt="$1"
+    shift
+    case $opt in
+      --debug|-x)	opt_debug='set -x'
+			func_echo "enabling shell trace mode"
+			$opt_debug
+			;;
+      --dry-run|--dryrun|-n)
+			opt_dry_run=:
+			;;
+      --config)
+			opt_config=:
+func_config
+			;;
+      --dlopen|-dlopen)
+			optarg="$1"
+			opt_dlopen="${opt_dlopen+$opt_dlopen
+}$optarg"
+			shift
+			;;
+      --preserve-dup-deps)
+			opt_preserve_dup_deps=:
+			;;
+      --features)
+			opt_features=:
+func_features
+			;;
+      --finish)
+			opt_finish=:
+set dummy --mode finish ${1+"$@"}; shift
+			;;
+      --help)
+			opt_help=:
+			;;
+      --help-all)
+			opt_help_all=:
+opt_help=': help-all'
+			;;
+      --mode)
+			test $# = 0 && func_missing_arg $opt && break
+			optarg="$1"
+			opt_mode="$optarg"
+case $optarg in
+  # Valid mode arguments:
+  clean|compile|execute|finish|install|link|relink|uninstall) ;;
+
+  # Catch anything else as an error
+  *) func_error "invalid argument for $opt"
+     exit_cmd=exit
+     break
+     ;;
+esac
+			shift
+			;;
+      --no-silent|--no-quiet)
+			opt_silent=false
+func_append preserve_args " $opt"
+			;;
+      --no-warning|--no-warn)
+			opt_warning=false
+func_append preserve_args " $opt"
+			;;
+      --no-verbose)
+			opt_verbose=false
+func_append preserve_args " $opt"
+			;;
+      --silent|--quiet)
+			opt_silent=:
+func_append preserve_args " $opt"
+        opt_verbose=false
+			;;
+      --verbose|-v)
+			opt_verbose=:
+func_append preserve_args " $opt"
+opt_silent=false
+			;;
+      --tag)
+			test $# = 0 && func_missing_arg $opt && break
+			optarg="$1"
+			opt_tag="$optarg"
+func_append preserve_args " $opt $optarg"
+func_enable_tag "$optarg"
+			shift
+			;;
+
+      -\?|-h)		func_usage				;;
+      --help)		func_help				;;
+      --version)	func_version				;;
+
+      # Separate optargs to long options:
+      --*=*)
+			func_split_long_opt "$opt"
+			set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"}
+			shift
+			;;
+
+      # Separate non-argument short options:
+      -\?*|-h*|-n*|-v*)
+			func_split_short_opt "$opt"
+			set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"}
+			shift
+			;;
+
+      --)		break					;;
+      -*)		func_fatal_help "unrecognized option \`$opt'" ;;
+      *)		set dummy "$opt" ${1+"$@"};	shift; break  ;;
+    esac
+  done
+
+  # Validate options:
+
+  # save first non-option argument
+  if test "$#" -gt 0; then
+    nonopt="$opt"
+    shift
+  fi
+
+  # preserve --debug
+  test "$opt_debug" = : || func_append preserve_args " --debug"
+
+  case $host in
+    *cygwin* | *mingw* | *pw32* | *cegcc*)
+      # don't eliminate duplications in $postdeps and $predeps
+      opt_duplicate_compiler_generated_deps=:
+      ;;
+    *)
+      opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
+      ;;
+  esac
+
+  $opt_help || {
+    # Sanity checks first:
+    func_check_version_match
+
+    if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+      func_fatal_configuration "not configured to build any kind of library"
+    fi
+
+    # Darwin sucks
+    eval std_shrext=\"$shrext_cmds\"
+
+    # Only execute mode is allowed to have -dlopen flags.
+    if test -n "$opt_dlopen" && test "$opt_mode" != execute; then
+      func_error "unrecognized option \`-dlopen'"
+      $ECHO "$help" 1>&2
+      exit $EXIT_FAILURE
+    fi
+
+    # Change the help message to a mode-specific one.
+    generic_help="$help"
+    help="Try \`$progname --help --mode=$opt_mode' for more information."
+  }
+
+
+  # Bail if the options were screwed
+  $exit_cmd $EXIT_FAILURE
+}
+
+
+
+
+## ----------- ##
+##    Main.    ##
+## ----------- ##
+
+# func_lalib_p file
+# True iff FILE is a libtool `.la' library or `.lo' object file.
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_lalib_p ()
+{
+    test -f "$1" &&
+      $SED -e 4q "$1" 2>/dev/null \
+        | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
+}
+
+# func_lalib_unsafe_p file
+# True iff FILE is a libtool `.la' library or `.lo' object file.
+# This function implements the same check as func_lalib_p without
+# resorting to external programs.  To this end, it redirects stdin and
+# closes it afterwards, without saving the original file descriptor.
+# As a safety measure, use it only where a negative result would be
+# fatal anyway.  Works if `file' does not exist.
+func_lalib_unsafe_p ()
+{
+    lalib_p=no
+    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
+	for lalib_p_l in 1 2 3 4
+	do
+	    read lalib_p_line
+	    case "$lalib_p_line" in
+		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
+	    esac
+	done
+	exec 0<&5 5<&-
+    fi
+    test "$lalib_p" = yes
+}
+
+# func_ltwrapper_script_p file
+# True iff FILE is a libtool wrapper script
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_script_p ()
+{
+    func_lalib_p "$1"
+}
+
+# func_ltwrapper_executable_p file
+# True iff FILE is a libtool wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_executable_p ()
+{
+    func_ltwrapper_exec_suffix=
+    case $1 in
+    *.exe) ;;
+    *) func_ltwrapper_exec_suffix=.exe ;;
+    esac
+    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
+}
+
+# func_ltwrapper_scriptname file
+# Assumes file is an ltwrapper_executable
+# uses $file to determine the appropriate filename for a
+# temporary ltwrapper_script.
+func_ltwrapper_scriptname ()
+{
+    func_dirname_and_basename "$1" "" "."
+    func_stripname '' '.exe' "$func_basename_result"
+    func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
+}
+
+# func_ltwrapper_p file
+# True iff FILE is a libtool wrapper script or wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_p ()
+{
+    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
+}
+
+
+# func_execute_cmds commands fail_cmd
+# Execute tilde-delimited COMMANDS.
+# If FAIL_CMD is given, eval that upon failure.
+# FAIL_CMD may read-access the current command in variable CMD!
+func_execute_cmds ()
+{
+    $opt_debug
+    save_ifs=$IFS; IFS='~'
+    for cmd in $1; do
+      IFS=$save_ifs
+      eval cmd=\"$cmd\"
+      func_show_eval "$cmd" "${2-:}"
+    done
+    IFS=$save_ifs
+}
+
+
+# func_source file
+# Source FILE, adding directory component if necessary.
+# Note that it is not necessary on cygwin/mingw to append a dot to
+# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
+# behavior happens only for exec(3), not for open(2)!  Also, sourcing
+# `FILE.' does not work on cygwin managed mounts.
+func_source ()
+{
+    $opt_debug
+    case $1 in
+    */* | *\\*)	. "$1" ;;
+    *)		. "./$1" ;;
+    esac
+}
+
+
+# func_resolve_sysroot PATH
+# Replace a leading = in PATH with a sysroot.  Store the result into
+# func_resolve_sysroot_result
+func_resolve_sysroot ()
+{
+  func_resolve_sysroot_result=$1
+  case $func_resolve_sysroot_result in
+  =*)
+    func_stripname '=' '' "$func_resolve_sysroot_result"
+    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
+    ;;
+  esac
+}
+
+# func_replace_sysroot PATH
+# If PATH begins with the sysroot, replace it with = and
+# store the result into func_replace_sysroot_result.
+func_replace_sysroot ()
+{
+  case "$lt_sysroot:$1" in
+  ?*:"$lt_sysroot"*)
+    func_stripname "$lt_sysroot" '' "$1"
+    func_replace_sysroot_result="=$func_stripname_result"
+    ;;
+  *)
+    # Including no sysroot.
+    func_replace_sysroot_result=$1
+    ;;
+  esac
+}
+
+# func_infer_tag arg
+# Infer tagged configuration to use if any are available and
+# if one wasn't chosen via the "--tag" command line option.
+# Only attempt this if the compiler in the base compile
+# command doesn't match the default compiler.
+# arg is usually of the form 'gcc ...'
+func_infer_tag ()
+{
+    $opt_debug
+    if test -n "$available_tags" && test -z "$tagname"; then
+      CC_quoted=
+      for arg in $CC; do
+	func_append_quoted CC_quoted "$arg"
+      done
+      CC_expanded=`func_echo_all $CC`
+      CC_quoted_expanded=`func_echo_all $CC_quoted`
+      case $@ in
+      # Blanks in the command may have been stripped by the calling shell,
+      # but not from the CC environment variable when configure was run.
+      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
+      # Blanks at the start of $base_compile will cause this to fail
+      # if we don't check for them as well.
+      *)
+	for z in $available_tags; do
+	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
+	    # Evaluate the configuration.
+	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
+	    CC_quoted=
+	    for arg in $CC; do
+	      # Double-quote args containing other shell metacharacters.
+	      func_append_quoted CC_quoted "$arg"
+	    done
+	    CC_expanded=`func_echo_all $CC`
+	    CC_quoted_expanded=`func_echo_all $CC_quoted`
+	    case "$@ " in
+	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
+	      # The compiler in the base compile command matches
+	      # the one in the tagged configuration.
+	      # Assume this is the tagged configuration we want.
+	      tagname=$z
+	      break
+	      ;;
+	    esac
+	  fi
+	done
+	# If $tagname still isn't set, then no tagged configuration
+	# was found and let the user know that the "--tag" command
+	# line option must be used.
+	if test -z "$tagname"; then
+	  func_echo "unable to infer tagged configuration"
+	  func_fatal_error "specify a tag with \`--tag'"
+#	else
+#	  func_verbose "using $tagname tagged configuration"
+	fi
+	;;
+      esac
+    fi
+}
+
+
+
+# func_write_libtool_object output_name pic_name nonpic_name
+# Create a libtool object file (analogous to a ".la" file),
+# but don't create it if we're doing a dry run.
+func_write_libtool_object ()
+{
+    write_libobj=${1}
+    if test "$build_libtool_libs" = yes; then
+      write_lobj=\'${2}\'
+    else
+      write_lobj=none
+    fi
+
+    if test "$build_old_libs" = yes; then
+      write_oldobj=\'${3}\'
+    else
+      write_oldobj=none
+    fi
+
+    $opt_dry_run || {
+      cat >${write_libobj}T <<EOF
+# $write_libobj - a libtool object file
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+pic_object=$write_lobj
+
+# Name of the non-PIC object
+non_pic_object=$write_oldobj
+
+EOF
+      $MV "${write_libobj}T" "${write_libobj}"
+    }
+}
+
+
+##################################################
+# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
+##################################################
+
+# func_convert_core_file_wine_to_w32 ARG
+# Helper function used by file name conversion functions when $build is *nix,
+# and $host is mingw, cygwin, or some other w32 environment. Relies on a
+# correctly configured wine environment available, with the winepath program
+# in $build's $PATH.
+#
+# ARG is the $build file name to be converted to w32 format.
+# Result is available in $func_convert_core_file_wine_to_w32_result, and will
+# be empty on error (or when ARG is empty)
+func_convert_core_file_wine_to_w32 ()
+{
+  $opt_debug
+  func_convert_core_file_wine_to_w32_result="$1"
+  if test -n "$1"; then
+    # Unfortunately, winepath does not exit with a non-zero error code, so we
+    # are forced to check the contents of stdout. On the other hand, if the
+    # command is not found, the shell will set an exit code of 127 and print
+    # *an error message* to stdout. So we must check for both error code of
+    # zero AND non-empty stdout, which explains the odd construction:
+    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
+    if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then
+      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
+        $SED -e "$lt_sed_naive_backslashify"`
+    else
+      func_convert_core_file_wine_to_w32_result=
+    fi
+  fi
+}
+# end: func_convert_core_file_wine_to_w32
+
+
+# func_convert_core_path_wine_to_w32 ARG
+# Helper function used by path conversion functions when $build is *nix, and
+# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
+# configured wine environment available, with the winepath program in $build's
+# $PATH. Assumes ARG has no leading or trailing path separator characters.
+#
+# ARG is path to be converted from $build format to win32.
+# Result is available in $func_convert_core_path_wine_to_w32_result.
+# Unconvertible file (directory) names in ARG are skipped; if no directory names
+# are convertible, then the result may be empty.
+func_convert_core_path_wine_to_w32 ()
+{
+  $opt_debug
+  # unfortunately, winepath doesn't convert paths, only file names
+  func_convert_core_path_wine_to_w32_result=""
+  if test -n "$1"; then
+    oldIFS=$IFS
+    IFS=:
+    for func_convert_core_path_wine_to_w32_f in $1; do
+      IFS=$oldIFS
+      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
+      if test -n "$func_convert_core_file_wine_to_w32_result" ; then
+        if test -z "$func_convert_core_path_wine_to_w32_result"; then
+          func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result"
+        else
+          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
+        fi
+      fi
+    done
+    IFS=$oldIFS
+  fi
+}
+# end: func_convert_core_path_wine_to_w32
+
+
+# func_cygpath ARGS...
+# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
+# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
+# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
+# (2), returns the Cygwin file name or path in func_cygpath_result (input
+# file name or path is assumed to be in w32 format, as previously converted
+# from $build's *nix or MSYS format). In case (3), returns the w32 file name
+# or path in func_cygpath_result (input file name or path is assumed to be in
+# Cygwin format). Returns an empty string on error.
+#
+# ARGS are passed to cygpath, with the last one being the file name or path to
+# be converted.
+#
+# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
+# environment variable; do not put it in $PATH.
+func_cygpath ()
+{
+  $opt_debug
+  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
+    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
+    if test "$?" -ne 0; then
+      # on failure, ensure result is empty
+      func_cygpath_result=
+    fi
+  else
+    func_cygpath_result=
+    func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'"
+  fi
+}
+#end: func_cygpath
+
+
+# func_convert_core_msys_to_w32 ARG
+# Convert file name or path ARG from MSYS format to w32 format.  Return
+# result in func_convert_core_msys_to_w32_result.
+func_convert_core_msys_to_w32 ()
+{
+  $opt_debug
+  # awkward: cmd appends spaces to result
+  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
+    $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
+}
+#end: func_convert_core_msys_to_w32
+
+
+# func_convert_file_check ARG1 ARG2
+# Verify that ARG1 (a file name in $build format) was converted to $host
+# format in ARG2. Otherwise, emit an error message, but continue (resetting
+# func_to_host_file_result to ARG1).
+func_convert_file_check ()
+{
+  $opt_debug
+  if test -z "$2" && test -n "$1" ; then
+    func_error "Could not determine host file name corresponding to"
+    func_error "  \`$1'"
+    func_error "Continuing, but uninstalled executables may not work."
+    # Fallback:
+    func_to_host_file_result="$1"
+  fi
+}
+# end func_convert_file_check
+
+
+# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
+# Verify that FROM_PATH (a path in $build format) was converted to $host
+# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
+# func_to_host_file_result to a simplistic fallback value (see below).
+func_convert_path_check ()
+{
+  $opt_debug
+  if test -z "$4" && test -n "$3"; then
+    func_error "Could not determine the host path corresponding to"
+    func_error "  \`$3'"
+    func_error "Continuing, but uninstalled executables may not work."
+    # Fallback.  This is a deliberately simplistic "conversion" and
+    # should not be "improved".  See libtool.info.
+    if test "x$1" != "x$2"; then
+      lt_replace_pathsep_chars="s|$1|$2|g"
+      func_to_host_path_result=`echo "$3" |
+        $SED -e "$lt_replace_pathsep_chars"`
+    else
+      func_to_host_path_result="$3"
+    fi
+  fi
+}
+# end func_convert_path_check
+
+
+# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
+# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
+# and appending REPL if ORIG matches BACKPAT.
+func_convert_path_front_back_pathsep ()
+{
+  $opt_debug
+  case $4 in
+  $1 ) func_to_host_path_result="$3$func_to_host_path_result"
+    ;;
+  esac
+  case $4 in
+  $2 ) func_append func_to_host_path_result "$3"
+    ;;
+  esac
+}
+# end func_convert_path_front_back_pathsep
+
+
+##################################################
+# $build to $host FILE NAME CONVERSION FUNCTIONS #
+##################################################
+# invoked via `$to_host_file_cmd ARG'
+#
+# In each case, ARG is the path to be converted from $build to $host format.
+# Result will be available in $func_to_host_file_result.
+
+
+# func_to_host_file ARG
+# Converts the file name ARG from $build format to $host format. Return result
+# in func_to_host_file_result.
+func_to_host_file ()
+{
+  $opt_debug
+  $to_host_file_cmd "$1"
+}
+# end func_to_host_file
+
+
+# func_to_tool_file ARG LAZY
+# converts the file name ARG from $build format to toolchain format. Return
+# result in func_to_tool_file_result.  If the conversion in use is listed
+# in (the comma separated) LAZY, no conversion takes place.
+func_to_tool_file ()
+{
+  $opt_debug
+  case ,$2, in
+    *,"$to_tool_file_cmd",*)
+      func_to_tool_file_result=$1
+      ;;
+    *)
+      $to_tool_file_cmd "$1"
+      func_to_tool_file_result=$func_to_host_file_result
+      ;;
+  esac
+}
+# end func_to_tool_file
+
+
+# func_convert_file_noop ARG
+# Copy ARG to func_to_host_file_result.
+func_convert_file_noop ()
+{
+  func_to_host_file_result="$1"
+}
+# end func_convert_file_noop
+
+
+# func_convert_file_msys_to_w32 ARG
+# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
+# conversion to w32 is not available inside the cwrapper.  Returns result in
+# func_to_host_file_result.
+func_convert_file_msys_to_w32 ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    func_convert_core_msys_to_w32 "$1"
+    func_to_host_file_result="$func_convert_core_msys_to_w32_result"
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_msys_to_w32
+
+
+# func_convert_file_cygwin_to_w32 ARG
+# Convert file name ARG from Cygwin to w32 format.  Returns result in
+# func_to_host_file_result.
+func_convert_file_cygwin_to_w32 ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
+    # LT_CYGPATH in this case.
+    func_to_host_file_result=`cygpath -m "$1"`
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_cygwin_to_w32
+
+
+# func_convert_file_nix_to_w32 ARG
+# Convert file name ARG from *nix to w32 format.  Requires a wine environment
+# and a working winepath. Returns result in func_to_host_file_result.
+func_convert_file_nix_to_w32 ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    func_convert_core_file_wine_to_w32 "$1"
+    func_to_host_file_result="$func_convert_core_file_wine_to_w32_result"
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_nix_to_w32
+
+
+# func_convert_file_msys_to_cygwin ARG
+# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
+# Returns result in func_to_host_file_result.
+func_convert_file_msys_to_cygwin ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    func_convert_core_msys_to_w32 "$1"
+    func_cygpath -u "$func_convert_core_msys_to_w32_result"
+    func_to_host_file_result="$func_cygpath_result"
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_msys_to_cygwin
+
+
+# func_convert_file_nix_to_cygwin ARG
+# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
+# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
+# in func_to_host_file_result.
+func_convert_file_nix_to_cygwin ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
+    func_convert_core_file_wine_to_w32 "$1"
+    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
+    func_to_host_file_result="$func_cygpath_result"
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_nix_to_cygwin
+
+
+#############################################
+# $build to $host PATH CONVERSION FUNCTIONS #
+#############################################
+# invoked via `$to_host_path_cmd ARG'
+#
+# In each case, ARG is the path to be converted from $build to $host format.
+# The result will be available in $func_to_host_path_result.
+#
+# Path separators are also converted from $build format to $host format.  If
+# ARG begins or ends with a path separator character, it is preserved (but
+# converted to $host format) on output.
+#
+# All path conversion functions are named using the following convention:
+#   file name conversion function    : func_convert_file_X_to_Y ()
+#   path conversion function         : func_convert_path_X_to_Y ()
+# where, for any given $build/$host combination the 'X_to_Y' value is the
+# same.  If conversion functions are added for new $build/$host combinations,
+# the two new functions must follow this pattern, or func_init_to_host_path_cmd
+# will break.
+
+
+# func_init_to_host_path_cmd
+# Ensures that function "pointer" variable $to_host_path_cmd is set to the
+# appropriate value, based on the value of $to_host_file_cmd.
+to_host_path_cmd=
+func_init_to_host_path_cmd ()
+{
+  $opt_debug
+  if test -z "$to_host_path_cmd"; then
+    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
+    to_host_path_cmd="func_convert_path_${func_stripname_result}"
+  fi
+}
+
+
+# func_to_host_path ARG
+# Converts the path ARG from $build format to $host format. Return result
+# in func_to_host_path_result.
+func_to_host_path ()
+{
+  $opt_debug
+  func_init_to_host_path_cmd
+  $to_host_path_cmd "$1"
+}
+# end func_to_host_path
+
+
+# func_convert_path_noop ARG
+# Copy ARG to func_to_host_path_result.
+func_convert_path_noop ()
+{
+  func_to_host_path_result="$1"
+}
+# end func_convert_path_noop
+
+
+# func_convert_path_msys_to_w32 ARG
+# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
+# conversion to w32 is not available inside the cwrapper.  Returns result in
+# func_to_host_path_result.
+func_convert_path_msys_to_w32 ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # Remove leading and trailing path separator characters from ARG.  MSYS
+    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
+    # and winepath ignores them completely.
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
+    func_to_host_path_result="$func_convert_core_msys_to_w32_result"
+    func_convert_path_check : ";" \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+  fi
+}
+# end func_convert_path_msys_to_w32
+
+
+# func_convert_path_cygwin_to_w32 ARG
+# Convert path ARG from Cygwin to w32 format.  Returns result in
+# func_to_host_file_result.
+func_convert_path_cygwin_to_w32 ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # See func_convert_path_msys_to_w32:
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
+    func_convert_path_check : ";" \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+  fi
+}
+# end func_convert_path_cygwin_to_w32
+
+
+# func_convert_path_nix_to_w32 ARG
+# Convert path ARG from *nix to w32 format.  Requires a wine environment and
+# a working winepath.  Returns result in func_to_host_file_result.
+func_convert_path_nix_to_w32 ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # See func_convert_path_msys_to_w32:
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
+    func_to_host_path_result="$func_convert_core_path_wine_to_w32_result"
+    func_convert_path_check : ";" \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+  fi
+}
+# end func_convert_path_nix_to_w32
+
+
+# func_convert_path_msys_to_cygwin ARG
+# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
+# Returns result in func_to_host_file_result.
+func_convert_path_msys_to_cygwin ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # See func_convert_path_msys_to_w32:
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
+    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
+    func_to_host_path_result="$func_cygpath_result"
+    func_convert_path_check : : \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
+  fi
+}
+# end func_convert_path_msys_to_cygwin
+
+
+# func_convert_path_nix_to_cygwin ARG
+# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
+# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
+# func_to_host_file_result.
+func_convert_path_nix_to_cygwin ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # Remove leading and trailing path separator characters from
+    # ARG. msys behavior is inconsistent here, cygpath turns them
+    # into '.;' and ';.', and winepath ignores them completely.
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
+    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
+    func_to_host_path_result="$func_cygpath_result"
+    func_convert_path_check : : \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
+  fi
+}
+# end func_convert_path_nix_to_cygwin
+
+
+# func_mode_compile arg...
+func_mode_compile ()
+{
+    $opt_debug
+    # Get the compilation command and the source file.
+    base_compile=
+    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
+    suppress_opt=yes
+    suppress_output=
+    arg_mode=normal
+    libobj=
+    later=
+    pie_flag=
+
+    for arg
+    do
+      case $arg_mode in
+      arg  )
+	# do not "continue".  Instead, add this to base_compile
+	lastarg="$arg"
+	arg_mode=normal
+	;;
+
+      target )
+	libobj="$arg"
+	arg_mode=normal
+	continue
+	;;
+
+      normal )
+	# Accept any command-line options.
+	case $arg in
+	-o)
+	  test -n "$libobj" && \
+	    func_fatal_error "you cannot specify \`-o' more than once"
+	  arg_mode=target
+	  continue
+	  ;;
+
+	-pie | -fpie | -fPIE)
+          func_append pie_flag " $arg"
+	  continue
+	  ;;
+
+	-shared | -static | -prefer-pic | -prefer-non-pic)
+	  func_append later " $arg"
+	  continue
+	  ;;
+
+	-no-suppress)
+	  suppress_opt=no
+	  continue
+	  ;;
+
+	-Xcompiler)
+	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
+	  continue      #  The current "srcfile" will either be retained or
+	  ;;            #  replaced later.  I would guess that would be a bug.
+
+	-Wc,*)
+	  func_stripname '-Wc,' '' "$arg"
+	  args=$func_stripname_result
+	  lastarg=
+	  save_ifs="$IFS"; IFS=','
+	  for arg in $args; do
+	    IFS="$save_ifs"
+	    func_append_quoted lastarg "$arg"
+	  done
+	  IFS="$save_ifs"
+	  func_stripname ' ' '' "$lastarg"
+	  lastarg=$func_stripname_result
+
+	  # Add the arguments to base_compile.
+	  func_append base_compile " $lastarg"
+	  continue
+	  ;;
+
+	*)
+	  # Accept the current argument as the source file.
+	  # The previous "srcfile" becomes the current argument.
+	  #
+	  lastarg="$srcfile"
+	  srcfile="$arg"
+	  ;;
+	esac  #  case $arg
+	;;
+      esac    #  case $arg_mode
+
+      # Aesthetically quote the previous argument.
+      func_append_quoted base_compile "$lastarg"
+    done # for arg
+
+    case $arg_mode in
+    arg)
+      func_fatal_error "you must specify an argument for -Xcompile"
+      ;;
+    target)
+      func_fatal_error "you must specify a target with \`-o'"
+      ;;
+    *)
+      # Get the name of the library object.
+      test -z "$libobj" && {
+	func_basename "$srcfile"
+	libobj="$func_basename_result"
+      }
+      ;;
+    esac
+
+    # Recognize several different file suffixes.
+    # If the user specifies -o file.o, it is replaced with file.lo
+    case $libobj in
+    *.[cCFSifmso] | \
+    *.ada | *.adb | *.ads | *.asm | \
+    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
+    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
+      func_xform "$libobj"
+      libobj=$func_xform_result
+      ;;
+    esac
+
+    case $libobj in
+    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
+    *)
+      func_fatal_error "cannot determine name of library object from \`$libobj'"
+      ;;
+    esac
+
+    func_infer_tag $base_compile
+
+    for arg in $later; do
+      case $arg in
+      -shared)
+	test "$build_libtool_libs" != yes && \
+	  func_fatal_configuration "can not build a shared library"
+	build_old_libs=no
+	continue
+	;;
+
+      -static)
+	build_libtool_libs=no
+	build_old_libs=yes
+	continue
+	;;
+
+      -prefer-pic)
+	pic_mode=yes
+	continue
+	;;
+
+      -prefer-non-pic)
+	pic_mode=no
+	continue
+	;;
+      esac
+    done
+
+    func_quote_for_eval "$libobj"
+    test "X$libobj" != "X$func_quote_for_eval_result" \
+      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
+      && func_warning "libobj name \`$libobj' may not contain shell special characters."
+    func_dirname_and_basename "$obj" "/" ""
+    objname="$func_basename_result"
+    xdir="$func_dirname_result"
+    lobj=${xdir}$objdir/$objname
+
+    test -z "$base_compile" && \
+      func_fatal_help "you must specify a compilation command"
+
+    # Delete any leftover library objects.
+    if test "$build_old_libs" = yes; then
+      removelist="$obj $lobj $libobj ${libobj}T"
+    else
+      removelist="$lobj $libobj ${libobj}T"
+    fi
+
+    # On Cygwin there's no "real" PIC flag so we must build both object types
+    case $host_os in
+    cygwin* | mingw* | pw32* | os2* | cegcc*)
+      pic_mode=default
+      ;;
+    esac
+    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
+      # non-PIC code in shared libraries is not supported
+      pic_mode=default
+    fi
+
+    # Calculate the filename of the output object if compiler does
+    # not support -o with -c
+    if test "$compiler_c_o" = no; then
+      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
+      lockfile="$output_obj.lock"
+    else
+      output_obj=
+      need_locks=no
+      lockfile=
+    fi
+
+    # Lock this critical section if it is needed
+    # We use this script file to make the link, it avoids creating a new file
+    if test "$need_locks" = yes; then
+      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+	func_echo "Waiting for $lockfile to be removed"
+	sleep 2
+      done
+    elif test "$need_locks" = warn; then
+      if test -f "$lockfile"; then
+	$ECHO "\
+*** ERROR, $lockfile exists and contains:
+`cat $lockfile 2>/dev/null`
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+	$opt_dry_run || $RM $removelist
+	exit $EXIT_FAILURE
+      fi
+      func_append removelist " $output_obj"
+      $ECHO "$srcfile" > "$lockfile"
+    fi
+
+    $opt_dry_run || $RM $removelist
+    func_append removelist " $lockfile"
+    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
+
+    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
+    srcfile=$func_to_tool_file_result
+    func_quote_for_eval "$srcfile"
+    qsrcfile=$func_quote_for_eval_result
+
+    # Only build a PIC object if we are building libtool libraries.
+    if test "$build_libtool_libs" = yes; then
+      # Without this assignment, base_compile gets emptied.
+      fbsd_hideous_sh_bug=$base_compile
+
+      if test "$pic_mode" != no; then
+	command="$base_compile $qsrcfile $pic_flag"
+      else
+	# Don't build PIC code
+	command="$base_compile $qsrcfile"
+      fi
+
+      func_mkdir_p "$xdir$objdir"
+
+      if test -z "$output_obj"; then
+	# Place PIC objects in $objdir
+	func_append command " -o $lobj"
+      fi
+
+      func_show_eval_locale "$command"	\
+          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
+
+      if test "$need_locks" = warn &&
+	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+	$ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+	$opt_dry_run || $RM $removelist
+	exit $EXIT_FAILURE
+      fi
+
+      # Just move the object if needed, then go on to compile the next one
+      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
+	func_show_eval '$MV "$output_obj" "$lobj"' \
+	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+      fi
+
+      # Allow error messages only from the first compilation.
+      if test "$suppress_opt" = yes; then
+	suppress_output=' >/dev/null 2>&1'
+      fi
+    fi
+
+    # Only build a position-dependent object if we build old libraries.
+    if test "$build_old_libs" = yes; then
+      if test "$pic_mode" != yes; then
+	# Don't build PIC code
+	command="$base_compile $qsrcfile$pie_flag"
+      else
+	command="$base_compile $qsrcfile $pic_flag"
+      fi
+      if test "$compiler_c_o" = yes; then
+	func_append command " -o $obj"
+      fi
+
+      # Suppress compiler output if we already did a PIC compilation.
+      func_append command "$suppress_output"
+      func_show_eval_locale "$command" \
+        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
+
+      if test "$need_locks" = warn &&
+	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+	$ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+	$opt_dry_run || $RM $removelist
+	exit $EXIT_FAILURE
+      fi
+
+      # Just move the object if needed
+      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
+	func_show_eval '$MV "$output_obj" "$obj"' \
+	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+      fi
+    fi
+
+    $opt_dry_run || {
+      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
+
+      # Unlock the critical section if it was locked
+      if test "$need_locks" != no; then
+	removelist=$lockfile
+        $RM "$lockfile"
+      fi
+    }
+
+    exit $EXIT_SUCCESS
+}
+
+$opt_help || {
+  test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
+}
+
+func_mode_help ()
+{
+    # We need to display help for each of the modes.
+    case $opt_mode in
+      "")
+        # Generic help is extracted from the usage comments
+        # at the start of this file.
+        func_help
+        ;;
+
+      clean)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
+
+Remove files from the build directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, object or program, all the files associated
+with it are deleted. Otherwise, only FILE itself is deleted using RM."
+        ;;
+
+      compile)
+      $ECHO \
+"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
+
+Compile a source file into a libtool library object.
+
+This mode accepts the following additional options:
+
+  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
+  -no-suppress      do not suppress compiler output for multiple passes
+  -prefer-pic       try to build PIC objects only
+  -prefer-non-pic   try to build non-PIC objects only
+  -shared           do not build a \`.o' file suitable for static linking
+  -static           only build a \`.o' file suitable for static linking
+  -Wc,FLAG          pass FLAG directly to the compiler
+
+COMPILE-COMMAND is a command to be used in creating a \`standard' object file
+from the given SOURCEFILE.
+
+The output file name is determined by removing the directory component from
+SOURCEFILE, then substituting the C source code suffix \`.c' with the
+library object suffix, \`.lo'."
+        ;;
+
+      execute)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
+
+Automatically set library path, then run a program.
+
+This mode accepts the following additional options:
+
+  -dlopen FILE      add the directory containing FILE to the library path
+
+This mode sets the library path environment variable according to \`-dlopen'
+flags.
+
+If any of the ARGS are libtool executable wrappers, then they are translated
+into their corresponding uninstalled binary, and any of their required library
+directories are added to the library path.
+
+Then, COMMAND is executed, with ARGS as arguments."
+        ;;
+
+      finish)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
+
+Complete the installation of libtool libraries.
+
+Each LIBDIR is a directory that contains libtool libraries.
+
+The commands that this mode executes may require superuser privileges.  Use
+the \`--dry-run' option if you just want to see what would be executed."
+        ;;
+
+      install)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
+
+Install executables or libraries.
+
+INSTALL-COMMAND is the installation command.  The first component should be
+either the \`install' or \`cp' program.
+
+The following components of INSTALL-COMMAND are treated specially:
+
+  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
+
+The rest of the components are interpreted as arguments to that command (only
+BSD-compatible install options are recognized)."
+        ;;
+
+      link)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
+
+Link object files or libraries together to form another library, or to
+create an executable program.
+
+LINK-COMMAND is a command using the C compiler that you would use to create
+a program from several object files.
+
+The following components of LINK-COMMAND are treated specially:
+
+  -all-static       do not do any dynamic linking at all
+  -avoid-version    do not add a version suffix if possible
+  -bindir BINDIR    specify path to binaries directory (for systems where
+                    libraries must be found in the PATH setting at runtime)
+  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
+  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
+  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+  -export-symbols SYMFILE
+                    try to export only the symbols listed in SYMFILE
+  -export-symbols-regex REGEX
+                    try to export only the symbols matching REGEX
+  -LLIBDIR          search LIBDIR for required installed libraries
+  -lNAME            OUTPUT-FILE requires the installed library libNAME
+  -module           build a library that can dlopened
+  -no-fast-install  disable the fast-install mode
+  -no-install       link a not-installable executable
+  -no-undefined     declare that a library does not refer to external symbols
+  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
+  -objectlist FILE  Use a list of object files found in FILE to specify objects
+  -precious-files-regex REGEX
+                    don't remove output files matching REGEX
+  -release RELEASE  specify package release information
+  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
+  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
+  -shared           only do dynamic linking of libtool libraries
+  -shrext SUFFIX    override the standard shared library file extension
+  -static           do not do any dynamic linking of uninstalled libtool libraries
+  -static-libtool-libs
+                    do not do any dynamic linking of libtool libraries
+  -version-info CURRENT[:REVISION[:AGE]]
+                    specify library version info [each variable defaults to 0]
+  -weak LIBNAME     declare that the target provides the LIBNAME interface
+  -Wc,FLAG
+  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
+  -Wl,FLAG
+  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
+  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
+
+All other options (arguments beginning with \`-') are ignored.
+
+Every other argument is treated as a filename.  Files ending in \`.la' are
+treated as uninstalled libtool libraries, other files are standard or library
+object files.
+
+If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
+only library objects (\`.lo' files) may be specified, and \`-rpath' is
+required, except when creating a convenience library.
+
+If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
+using \`ar' and \`ranlib', or on Windows using \`lib'.
+
+If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
+is created, otherwise an executable program is created."
+        ;;
+
+      uninstall)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
+
+Remove libraries from an installation directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, all the files associated with it are deleted.
+Otherwise, only FILE itself is deleted using RM."
+        ;;
+
+      *)
+        func_fatal_help "invalid operation mode \`$opt_mode'"
+        ;;
+    esac
+
+    echo
+    $ECHO "Try \`$progname --help' for more information about other modes."
+}
+
+# Now that we've collected a possible --mode arg, show help if necessary
+if $opt_help; then
+  if test "$opt_help" = :; then
+    func_mode_help
+  else
+    {
+      func_help noexit
+      for opt_mode in compile link execute install finish uninstall clean; do
+	func_mode_help
+      done
+    } | sed -n '1p; 2,$s/^Usage:/  or: /p'
+    {
+      func_help noexit
+      for opt_mode in compile link execute install finish uninstall clean; do
+	echo
+	func_mode_help
+      done
+    } |
+    sed '1d
+      /^When reporting/,/^Report/{
+	H
+	d
+      }
+      $x
+      /information about other modes/d
+      /more detailed .*MODE/d
+      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
+  fi
+  exit $?
+fi
+
+
+# func_mode_execute arg...
+func_mode_execute ()
+{
+    $opt_debug
+    # The first argument is the command name.
+    cmd="$nonopt"
+    test -z "$cmd" && \
+      func_fatal_help "you must specify a COMMAND"
+
+    # Handle -dlopen flags immediately.
+    for file in $opt_dlopen; do
+      test -f "$file" \
+	|| func_fatal_help "\`$file' is not a file"
+
+      dir=
+      case $file in
+      *.la)
+	func_resolve_sysroot "$file"
+	file=$func_resolve_sysroot_result
+
+	# Check to see that this really is a libtool archive.
+	func_lalib_unsafe_p "$file" \
+	  || func_fatal_help "\`$lib' is not a valid libtool archive"
+
+	# Read the libtool library.
+	dlname=
+	library_names=
+	func_source "$file"
+
+	# Skip this library if it cannot be dlopened.
+	if test -z "$dlname"; then
+	  # Warn if it was a shared library.
+	  test -n "$library_names" && \
+	    func_warning "\`$file' was not linked with \`-export-dynamic'"
+	  continue
+	fi
+
+	func_dirname "$file" "" "."
+	dir="$func_dirname_result"
+
+	if test -f "$dir/$objdir/$dlname"; then
+	  func_append dir "/$objdir"
+	else
+	  if test ! -f "$dir/$dlname"; then
+	    func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
+	  fi
+	fi
+	;;
+
+      *.lo)
+	# Just add the directory containing the .lo file.
+	func_dirname "$file" "" "."
+	dir="$func_dirname_result"
+	;;
+
+      *)
+	func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
+	continue
+	;;
+      esac
+
+      # Get the absolute pathname.
+      absdir=`cd "$dir" && pwd`
+      test -n "$absdir" && dir="$absdir"
+
+      # Now add the directory to shlibpath_var.
+      if eval "test -z \"\$$shlibpath_var\""; then
+	eval "$shlibpath_var=\"\$dir\""
+      else
+	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
+      fi
+    done
+
+    # This variable tells wrapper scripts just to set shlibpath_var
+    # rather than running their programs.
+    libtool_execute_magic="$magic"
+
+    # Check if any of the arguments is a wrapper script.
+    args=
+    for file
+    do
+      case $file in
+      -* | *.la | *.lo ) ;;
+      *)
+	# Do a test to see if this is really a libtool program.
+	if func_ltwrapper_script_p "$file"; then
+	  func_source "$file"
+	  # Transform arg to wrapped name.
+	  file="$progdir/$program"
+	elif func_ltwrapper_executable_p "$file"; then
+	  func_ltwrapper_scriptname "$file"
+	  func_source "$func_ltwrapper_scriptname_result"
+	  # Transform arg to wrapped name.
+	  file="$progdir/$program"
+	fi
+	;;
+      esac
+      # Quote arguments (to preserve shell metacharacters).
+      func_append_quoted args "$file"
+    done
+
+    if test "X$opt_dry_run" = Xfalse; then
+      if test -n "$shlibpath_var"; then
+	# Export the shlibpath_var.
+	eval "export $shlibpath_var"
+      fi
+
+      # Restore saved environment variables
+      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+      do
+	eval "if test \"\${save_$lt_var+set}\" = set; then
+                $lt_var=\$save_$lt_var; export $lt_var
+	      else
+		$lt_unset $lt_var
+	      fi"
+      done
+
+      # Now prepare to actually exec the command.
+      exec_cmd="\$cmd$args"
+    else
+      # Display what would be done.
+      if test -n "$shlibpath_var"; then
+	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
+	echo "export $shlibpath_var"
+      fi
+      $ECHO "$cmd$args"
+      exit $EXIT_SUCCESS
+    fi
+}
+
+test "$opt_mode" = execute && func_mode_execute ${1+"$@"}
+
+
+# func_mode_finish arg...
+func_mode_finish ()
+{
+    $opt_debug
+    libs=
+    libdirs=
+    admincmds=
+
+    for opt in "$nonopt" ${1+"$@"}
+    do
+      if test -d "$opt"; then
+	func_append libdirs " $opt"
+
+      elif test -f "$opt"; then
+	if func_lalib_unsafe_p "$opt"; then
+	  func_append libs " $opt"
+	else
+	  func_warning "\`$opt' is not a valid libtool archive"
+	fi
+
+      else
+	func_fatal_error "invalid argument \`$opt'"
+      fi
+    done
+
+    if test -n "$libs"; then
+      if test -n "$lt_sysroot"; then
+        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
+        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
+      else
+        sysroot_cmd=
+      fi
+
+      # Remove sysroot references
+      if $opt_dry_run; then
+        for lib in $libs; do
+          echo "removing references to $lt_sysroot and \`=' prefixes from $lib"
+        done
+      else
+        tmpdir=`func_mktempdir`
+        for lib in $libs; do
+	  sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
+	    > $tmpdir/tmp-la
+	  mv -f $tmpdir/tmp-la $lib
+	done
+        ${RM}r "$tmpdir"
+      fi
+    fi
+
+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+      for libdir in $libdirs; do
+	if test -n "$finish_cmds"; then
+	  # Do each command in the finish commands.
+	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
+'"$cmd"'"'
+	fi
+	if test -n "$finish_eval"; then
+	  # Do the single finish_eval.
+	  eval cmds=\"$finish_eval\"
+	  $opt_dry_run || eval "$cmds" || func_append admincmds "
+       $cmds"
+	fi
+      done
+    fi
+
+    # Exit here if they wanted silent mode.
+    $opt_silent && exit $EXIT_SUCCESS
+
+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+      echo "----------------------------------------------------------------------"
+      echo "Libraries have been installed in:"
+      for libdir in $libdirs; do
+	$ECHO "   $libdir"
+      done
+      echo
+      echo "If you ever happen to want to link against installed libraries"
+      echo "in a given directory, LIBDIR, you must either use libtool, and"
+      echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
+      echo "flag during linking and do at least one of the following:"
+      if test -n "$shlibpath_var"; then
+	echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
+	echo "     during execution"
+      fi
+      if test -n "$runpath_var"; then
+	echo "   - add LIBDIR to the \`$runpath_var' environment variable"
+	echo "     during linking"
+      fi
+      if test -n "$hardcode_libdir_flag_spec"; then
+	libdir=LIBDIR
+	eval flag=\"$hardcode_libdir_flag_spec\"
+
+	$ECHO "   - use the \`$flag' linker flag"
+      fi
+      if test -n "$admincmds"; then
+	$ECHO "   - have your system administrator run these commands:$admincmds"
+      fi
+      if test -f /etc/ld.so.conf; then
+	echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+      fi
+      echo
+
+      echo "See any operating system documentation about shared libraries for"
+      case $host in
+	solaris2.[6789]|solaris2.1[0-9])
+	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
+	  echo "pages."
+	  ;;
+	*)
+	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
+	  ;;
+      esac
+      echo "----------------------------------------------------------------------"
+    fi
+    exit $EXIT_SUCCESS
+}
+
+test "$opt_mode" = finish && func_mode_finish ${1+"$@"}
+
+
+# func_mode_install arg...
+func_mode_install ()
+{
+    $opt_debug
+    # There may be an optional sh(1) argument at the beginning of
+    # install_prog (especially on Windows NT).
+    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
+       # Allow the use of GNU shtool's install command.
+       case $nonopt in *shtool*) :;; *) false;; esac; then
+      # Aesthetically quote it.
+      func_quote_for_eval "$nonopt"
+      install_prog="$func_quote_for_eval_result "
+      arg=$1
+      shift
+    else
+      install_prog=
+      arg=$nonopt
+    fi
+
+    # The real first argument should be the name of the installation program.
+    # Aesthetically quote it.
+    func_quote_for_eval "$arg"
+    func_append install_prog "$func_quote_for_eval_result"
+    install_shared_prog=$install_prog
+    case " $install_prog " in
+      *[\\\ /]cp\ *) install_cp=: ;;
+      *) install_cp=false ;;
+    esac
+
+    # We need to accept at least all the BSD install flags.
+    dest=
+    files=
+    opts=
+    prev=
+    install_type=
+    isdir=no
+    stripme=
+    no_mode=:
+    for arg
+    do
+      arg2=
+      if test -n "$dest"; then
+	func_append files " $dest"
+	dest=$arg
+	continue
+      fi
+
+      case $arg in
+      -d) isdir=yes ;;
+      -f)
+	if $install_cp; then :; else
+	  prev=$arg
+	fi
+	;;
+      -g | -m | -o)
+	prev=$arg
+	;;
+      -s)
+	stripme=" -s"
+	continue
+	;;
+      -*)
+	;;
+      *)
+	# If the previous option needed an argument, then skip it.
+	if test -n "$prev"; then
+	  if test "x$prev" = x-m && test -n "$install_override_mode"; then
+	    arg2=$install_override_mode
+	    no_mode=false
+	  fi
+	  prev=
+	else
+	  dest=$arg
+	  continue
+	fi
+	;;
+      esac
+
+      # Aesthetically quote the argument.
+      func_quote_for_eval "$arg"
+      func_append install_prog " $func_quote_for_eval_result"
+      if test -n "$arg2"; then
+	func_quote_for_eval "$arg2"
+      fi
+      func_append install_shared_prog " $func_quote_for_eval_result"
+    done
+
+    test -z "$install_prog" && \
+      func_fatal_help "you must specify an install program"
+
+    test -n "$prev" && \
+      func_fatal_help "the \`$prev' option requires an argument"
+
+    if test -n "$install_override_mode" && $no_mode; then
+      if $install_cp; then :; else
+	func_quote_for_eval "$install_override_mode"
+	func_append install_shared_prog " -m $func_quote_for_eval_result"
+      fi
+    fi
+
+    if test -z "$files"; then
+      if test -z "$dest"; then
+	func_fatal_help "no file or destination specified"
+      else
+	func_fatal_help "you must specify a destination"
+      fi
+    fi
+
+    # Strip any trailing slash from the destination.
+    func_stripname '' '/' "$dest"
+    dest=$func_stripname_result
+
+    # Check to see that the destination is a directory.
+    test -d "$dest" && isdir=yes
+    if test "$isdir" = yes; then
+      destdir="$dest"
+      destname=
+    else
+      func_dirname_and_basename "$dest" "" "."
+      destdir="$func_dirname_result"
+      destname="$func_basename_result"
+
+      # Not a directory, so check to see that there is only one file specified.
+      set dummy $files; shift
+      test "$#" -gt 1 && \
+	func_fatal_help "\`$dest' is not a directory"
+    fi
+    case $destdir in
+    [\\/]* | [A-Za-z]:[\\/]*) ;;
+    *)
+      for file in $files; do
+	case $file in
+	*.lo) ;;
+	*)
+	  func_fatal_help "\`$destdir' must be an absolute directory name"
+	  ;;
+	esac
+      done
+      ;;
+    esac
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic="$magic"
+
+    staticlibs=
+    future_libdirs=
+    current_libdirs=
+    for file in $files; do
+
+      # Do each installation.
+      case $file in
+      *.$libext)
+	# Do the static libraries later.
+	func_append staticlibs " $file"
+	;;
+
+      *.la)
+	func_resolve_sysroot "$file"
+	file=$func_resolve_sysroot_result
+
+	# Check to see that this really is a libtool archive.
+	func_lalib_unsafe_p "$file" \
+	  || func_fatal_help "\`$file' is not a valid libtool archive"
+
+	library_names=
+	old_library=
+	relink_command=
+	func_source "$file"
+
+	# Add the libdir to current_libdirs if it is the destination.
+	if test "X$destdir" = "X$libdir"; then
+	  case "$current_libdirs " in
+	  *" $libdir "*) ;;
+	  *) func_append current_libdirs " $libdir" ;;
+	  esac
+	else
+	  # Note the libdir as a future libdir.
+	  case "$future_libdirs " in
+	  *" $libdir "*) ;;
+	  *) func_append future_libdirs " $libdir" ;;
+	  esac
+	fi
+
+	func_dirname "$file" "/" ""
+	dir="$func_dirname_result"
+	func_append dir "$objdir"
+
+	if test -n "$relink_command"; then
+	  # Determine the prefix the user has applied to our future dir.
+	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
+
+	  # Don't allow the user to place us outside of our expected
+	  # location b/c this prevents finding dependent libraries that
+	  # are installed to the same prefix.
+	  # At present, this check doesn't affect windows .dll's that
+	  # are installed into $libdir/../bin (currently, that works fine)
+	  # but it's something to keep an eye on.
+	  test "$inst_prefix_dir" = "$destdir" && \
+	    func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
+
+	  if test -n "$inst_prefix_dir"; then
+	    # Stick the inst_prefix_dir data into the link command.
+	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+	  else
+	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
+	  fi
+
+	  func_warning "relinking \`$file'"
+	  func_show_eval "$relink_command" \
+	    'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
+	fi
+
+	# See the names of the shared library.
+	set dummy $library_names; shift
+	if test -n "$1"; then
+	  realname="$1"
+	  shift
+
+	  srcname="$realname"
+	  test -n "$relink_command" && srcname="$realname"T
+
+	  # Install the shared library and build the symlinks.
+	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
+	      'exit $?'
+	  tstripme="$stripme"
+	  case $host_os in
+	  cygwin* | mingw* | pw32* | cegcc*)
+	    case $realname in
+	    *.dll.a)
+	      tstripme=""
+	      ;;
+	    esac
+	    ;;
+	  esac
+	  if test -n "$tstripme" && test -n "$striplib"; then
+	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
+	  fi
+
+	  if test "$#" -gt 0; then
+	    # Delete the old symlinks, and create new ones.
+	    # Try `ln -sf' first, because the `ln' binary might depend on
+	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
+	    # so we also need to try rm && ln -s.
+	    for linkname
+	    do
+	      test "$linkname" != "$realname" \
+		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
+	    done
+	  fi
+
+	  # Do each command in the postinstall commands.
+	  lib="$destdir/$realname"
+	  func_execute_cmds "$postinstall_cmds" 'exit $?'
+	fi
+
+	# Install the pseudo-library for information purposes.
+	func_basename "$file"
+	name="$func_basename_result"
+	instname="$dir/$name"i
+	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
+
+	# Maybe install the static library, too.
+	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
+	;;
+
+      *.lo)
+	# Install (i.e. copy) a libtool object.
+
+	# Figure out destination file name, if it wasn't already specified.
+	if test -n "$destname"; then
+	  destfile="$destdir/$destname"
+	else
+	  func_basename "$file"
+	  destfile="$func_basename_result"
+	  destfile="$destdir/$destfile"
+	fi
+
+	# Deduce the name of the destination old-style object file.
+	case $destfile in
+	*.lo)
+	  func_lo2o "$destfile"
+	  staticdest=$func_lo2o_result
+	  ;;
+	*.$objext)
+	  staticdest="$destfile"
+	  destfile=
+	  ;;
+	*)
+	  func_fatal_help "cannot copy a libtool object to \`$destfile'"
+	  ;;
+	esac
+
+	# Install the libtool object if requested.
+	test -n "$destfile" && \
+	  func_show_eval "$install_prog $file $destfile" 'exit $?'
+
+	# Install the old object if enabled.
+	if test "$build_old_libs" = yes; then
+	  # Deduce the name of the old-style object file.
+	  func_lo2o "$file"
+	  staticobj=$func_lo2o_result
+	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
+	fi
+	exit $EXIT_SUCCESS
+	;;
+
+      *)
+	# Figure out destination file name, if it wasn't already specified.
+	if test -n "$destname"; then
+	  destfile="$destdir/$destname"
+	else
+	  func_basename "$file"
+	  destfile="$func_basename_result"
+	  destfile="$destdir/$destfile"
+	fi
+
+	# If the file is missing, and there is a .exe on the end, strip it
+	# because it is most likely a libtool script we actually want to
+	# install
+	stripped_ext=""
+	case $file in
+	  *.exe)
+	    if test ! -f "$file"; then
+	      func_stripname '' '.exe' "$file"
+	      file=$func_stripname_result
+	      stripped_ext=".exe"
+	    fi
+	    ;;
+	esac
+
+	# Do a test to see if this is really a libtool program.
+	case $host in
+	*cygwin* | *mingw*)
+	    if func_ltwrapper_executable_p "$file"; then
+	      func_ltwrapper_scriptname "$file"
+	      wrapper=$func_ltwrapper_scriptname_result
+	    else
+	      func_stripname '' '.exe' "$file"
+	      wrapper=$func_stripname_result
+	    fi
+	    ;;
+	*)
+	    wrapper=$file
+	    ;;
+	esac
+	if func_ltwrapper_script_p "$wrapper"; then
+	  notinst_deplibs=
+	  relink_command=
+
+	  func_source "$wrapper"
+
+	  # Check the variables that should have been set.
+	  test -z "$generated_by_libtool_version" && \
+	    func_fatal_error "invalid libtool wrapper script \`$wrapper'"
+
+	  finalize=yes
+	  for lib in $notinst_deplibs; do
+	    # Check to see that each library is installed.
+	    libdir=
+	    if test -f "$lib"; then
+	      func_source "$lib"
+	    fi
+	    libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test
+	    if test -n "$libdir" && test ! -f "$libfile"; then
+	      func_warning "\`$lib' has not been installed in \`$libdir'"
+	      finalize=no
+	    fi
+	  done
+
+	  relink_command=
+	  func_source "$wrapper"
+
+	  outputname=
+	  if test "$fast_install" = no && test -n "$relink_command"; then
+	    $opt_dry_run || {
+	      if test "$finalize" = yes; then
+	        tmpdir=`func_mktempdir`
+		func_basename "$file$stripped_ext"
+		file="$func_basename_result"
+	        outputname="$tmpdir/$file"
+	        # Replace the output file specification.
+	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
+
+	        $opt_silent || {
+	          func_quote_for_expand "$relink_command"
+		  eval "func_echo $func_quote_for_expand_result"
+	        }
+	        if eval "$relink_command"; then :
+	          else
+		  func_error "error: relink \`$file' with the above command before installing it"
+		  $opt_dry_run || ${RM}r "$tmpdir"
+		  continue
+	        fi
+	        file="$outputname"
+	      else
+	        func_warning "cannot relink \`$file'"
+	      fi
+	    }
+	  else
+	    # Install the binary that we compiled earlier.
+	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
+	  fi
+	fi
+
+	# remove .exe since cygwin /usr/bin/install will append another
+	# one anyway
+	case $install_prog,$host in
+	*/usr/bin/install*,*cygwin*)
+	  case $file:$destfile in
+	  *.exe:*.exe)
+	    # this is ok
+	    ;;
+	  *.exe:*)
+	    destfile=$destfile.exe
+	    ;;
+	  *:*.exe)
+	    func_stripname '' '.exe' "$destfile"
+	    destfile=$func_stripname_result
+	    ;;
+	  esac
+	  ;;
+	esac
+	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
+	$opt_dry_run || if test -n "$outputname"; then
+	  ${RM}r "$tmpdir"
+	fi
+	;;
+      esac
+    done
+
+    for file in $staticlibs; do
+      func_basename "$file"
+      name="$func_basename_result"
+
+      # Set up the ranlib parameters.
+      oldlib="$destdir/$name"
+      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+      tool_oldlib=$func_to_tool_file_result
+
+      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
+
+      if test -n "$stripme" && test -n "$old_striplib"; then
+	func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
+      fi
+
+      # Do each command in the postinstall commands.
+      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
+    done
+
+    test -n "$future_libdirs" && \
+      func_warning "remember to run \`$progname --finish$future_libdirs'"
+
+    if test -n "$current_libdirs"; then
+      # Maybe just do a dry run.
+      $opt_dry_run && current_libdirs=" -n$current_libdirs"
+      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
+    else
+      exit $EXIT_SUCCESS
+    fi
+}
+
+test "$opt_mode" = install && func_mode_install ${1+"$@"}
+
+
+# func_generate_dlsyms outputname originator pic_p
+# Extract symbols from dlprefiles and create ${outputname}S.o with
+# a dlpreopen symbol table.
+func_generate_dlsyms ()
+{
+    $opt_debug
+    my_outputname="$1"
+    my_originator="$2"
+    my_pic_p="${3-no}"
+    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
+    my_dlsyms=
+
+    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+      if test -n "$NM" && test -n "$global_symbol_pipe"; then
+	my_dlsyms="${my_outputname}S.c"
+      else
+	func_error "not configured to extract global symbols from dlpreopened files"
+      fi
+    fi
+
+    if test -n "$my_dlsyms"; then
+      case $my_dlsyms in
+      "") ;;
+      *.c)
+	# Discover the nlist of each of the dlfiles.
+	nlist="$output_objdir/${my_outputname}.nm"
+
+	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
+
+	# Parse the name list into a source file.
+	func_verbose "creating $output_objdir/$my_dlsyms"
+
+	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
+/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
+/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
+#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
+#endif
+
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
+/* DATA imports from DLLs on WIN32 con't be const, because runtime
+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
+# define LT_DLSYM_CONST
+#elif defined(__osf__)
+/* This system does not cope well with relocations in const data.  */
+# define LT_DLSYM_CONST
+#else
+# define LT_DLSYM_CONST const
+#endif
+
+/* External symbol declarations for the compiler. */\
+"
+
+	if test "$dlself" = yes; then
+	  func_verbose "generating symbol list for \`$output'"
+
+	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
+
+	  # Add our own program objects to the symbol list.
+	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
+	  for progfile in $progfiles; do
+	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
+	    func_verbose "extracting global C symbols from \`$func_to_tool_file_result'"
+	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
+	  done
+
+	  if test -n "$exclude_expsyms"; then
+	    $opt_dry_run || {
+	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+	      eval '$MV "$nlist"T "$nlist"'
+	    }
+	  fi
+
+	  if test -n "$export_symbols_regex"; then
+	    $opt_dry_run || {
+	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+	      eval '$MV "$nlist"T "$nlist"'
+	    }
+	  fi
+
+	  # Prepare the list of exported symbols
+	  if test -z "$export_symbols"; then
+	    export_symbols="$output_objdir/$outputname.exp"
+	    $opt_dry_run || {
+	      $RM $export_symbols
+	      eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+	      case $host in
+	      *cygwin* | *mingw* | *cegcc* )
+                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
+	        ;;
+	      esac
+	    }
+	  else
+	    $opt_dry_run || {
+	      eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
+	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
+	      eval '$MV "$nlist"T "$nlist"'
+	      case $host in
+	        *cygwin* | *mingw* | *cegcc* )
+	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
+	          ;;
+	      esac
+	    }
+	  fi
+	fi
+
+	for dlprefile in $dlprefiles; do
+	  func_verbose "extracting global C symbols from \`$dlprefile'"
+	  func_basename "$dlprefile"
+	  name="$func_basename_result"
+          case $host in
+	    *cygwin* | *mingw* | *cegcc* )
+	      # if an import library, we need to obtain dlname
+	      if func_win32_import_lib_p "$dlprefile"; then
+	        func_tr_sh "$dlprefile"
+	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
+	        dlprefile_dlbasename=""
+	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
+	          # Use subshell, to avoid clobbering current variable values
+	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
+	          if test -n "$dlprefile_dlname" ; then
+	            func_basename "$dlprefile_dlname"
+	            dlprefile_dlbasename="$func_basename_result"
+	          else
+	            # no lafile. user explicitly requested -dlpreopen <import library>.
+	            $sharedlib_from_linklib_cmd "$dlprefile"
+	            dlprefile_dlbasename=$sharedlib_from_linklib_result
+	          fi
+	        fi
+	        $opt_dry_run || {
+	          if test -n "$dlprefile_dlbasename" ; then
+	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
+	          else
+	            func_warning "Could not compute DLL name from $name"
+	            eval '$ECHO ": $name " >> "$nlist"'
+	          fi
+	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
+	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
+	        }
+	      else # not an import lib
+	        $opt_dry_run || {
+	          eval '$ECHO ": $name " >> "$nlist"'
+	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+	        }
+	      fi
+	    ;;
+	    *)
+	      $opt_dry_run || {
+	        eval '$ECHO ": $name " >> "$nlist"'
+	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+	      }
+	    ;;
+          esac
+	done
+
+	$opt_dry_run || {
+	  # Make sure we have at least an empty file.
+	  test -f "$nlist" || : > "$nlist"
+
+	  if test -n "$exclude_expsyms"; then
+	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+	    $MV "$nlist"T "$nlist"
+	  fi
+
+	  # Try sorting and uniquifying the output.
+	  if $GREP -v "^: " < "$nlist" |
+	      if sort -k 3 </dev/null >/dev/null 2>&1; then
+		sort -k 3
+	      else
+		sort +2
+	      fi |
+	      uniq > "$nlist"S; then
+	    :
+	  else
+	    $GREP -v "^: " < "$nlist" > "$nlist"S
+	  fi
+
+	  if test -f "$nlist"S; then
+	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
+	  else
+	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
+	  fi
+
+	  echo >> "$output_objdir/$my_dlsyms" "\
+
+/* The mapping between symbol names and symbols.  */
+typedef struct {
+  const char *name;
+  void *address;
+} lt_dlsymlist;
+extern LT_DLSYM_CONST lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[];
+LT_DLSYM_CONST lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[] =
+{\
+  { \"$my_originator\", (void *) 0 },"
+
+	  case $need_lib_prefix in
+	  no)
+	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
+	    ;;
+	  *)
+	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
+	    ;;
+	  esac
+	  echo >> "$output_objdir/$my_dlsyms" "\
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt_${my_prefix}_LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif\
+"
+	} # !$opt_dry_run
+
+	pic_flag_for_symtable=
+	case "$compile_command " in
+	*" -static "*) ;;
+	*)
+	  case $host in
+	  # compiling the symbol table file with pic_flag works around
+	  # a FreeBSD bug that causes programs to crash when -lm is
+	  # linked before any other PIC object.  But we must not use
+	  # pic_flag when linking with -static.  The problem exists in
+	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+	  *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
+	  *-*-hpux*)
+	    pic_flag_for_symtable=" $pic_flag"  ;;
+	  *)
+	    if test "X$my_pic_p" != Xno; then
+	      pic_flag_for_symtable=" $pic_flag"
+	    fi
+	    ;;
+	  esac
+	  ;;
+	esac
+	symtab_cflags=
+	for arg in $LTCFLAGS; do
+	  case $arg in
+	  -pie | -fpie | -fPIE) ;;
+	  *) func_append symtab_cflags " $arg" ;;
+	  esac
+	done
+
+	# Now compile the dynamic symbol file.
+	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
+
+	# Clean up the generated files.
+	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
+
+	# Transform the symbol file into the correct name.
+	symfileobj="$output_objdir/${my_outputname}S.$objext"
+	case $host in
+	*cygwin* | *mingw* | *cegcc* )
+	  if test -f "$output_objdir/$my_outputname.def"; then
+	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+	  else
+	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+	  fi
+	  ;;
+	*)
+	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+	  ;;
+	esac
+	;;
+      *)
+	func_fatal_error "unknown suffix for \`$my_dlsyms'"
+	;;
+      esac
+    else
+      # We keep going just in case the user didn't refer to
+      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
+      # really was required.
+
+      # Nullify the symbol file.
+      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
+      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
+    fi
+}
+
+# func_win32_libid arg
+# return the library type of file 'arg'
+#
+# Need a lot of goo to handle *both* DLLs and import libs
+# Has to be a shell function in order to 'eat' the argument
+# that is supplied when $file_magic_command is called.
+# Despite the name, also deal with 64 bit binaries.
+func_win32_libid ()
+{
+  $opt_debug
+  win32_libid_type="unknown"
+  win32_fileres=`file -L $1 2>/dev/null`
+  case $win32_fileres in
+  *ar\ archive\ import\ library*) # definitely import
+    win32_libid_type="x86 archive import"
+    ;;
+  *ar\ archive*) # could be an import, or static
+    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
+    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
+       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
+      func_to_tool_file "$1" func_convert_file_msys_to_w32
+      win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
+	$SED -n -e '
+	    1,100{
+		/ I /{
+		    s,.*,import,
+		    p
+		    q
+		}
+	    }'`
+      case $win32_nmres in
+      import*)  win32_libid_type="x86 archive import";;
+      *)        win32_libid_type="x86 archive static";;
+      esac
+    fi
+    ;;
+  *DLL*)
+    win32_libid_type="x86 DLL"
+    ;;
+  *executable*) # but shell scripts are "executable" too...
+    case $win32_fileres in
+    *MS\ Windows\ PE\ Intel*)
+      win32_libid_type="x86 DLL"
+      ;;
+    esac
+    ;;
+  esac
+  $ECHO "$win32_libid_type"
+}
+
+# func_cygming_dll_for_implib ARG
+#
+# Platform-specific function to extract the
+# name of the DLL associated with the specified
+# import library ARG.
+# Invoked by eval'ing the libtool variable
+#    $sharedlib_from_linklib_cmd
+# Result is available in the variable
+#    $sharedlib_from_linklib_result
+func_cygming_dll_for_implib ()
+{
+  $opt_debug
+  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
+}
+
+# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
+#
+# The is the core of a fallback implementation of a
+# platform-specific function to extract the name of the
+# DLL associated with the specified import library LIBNAME.
+#
+# SECTION_NAME is either .idata$6 or .idata$7, depending
+# on the platform and compiler that created the implib.
+#
+# Echos the name of the DLL associated with the
+# specified import library.
+func_cygming_dll_for_implib_fallback_core ()
+{
+  $opt_debug
+  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
+  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
+    $SED '/^Contents of section '"$match_literal"':/{
+      # Place marker at beginning of archive member dllname section
+      s/.*/====MARK====/
+      p
+      d
+    }
+    # These lines can sometimes be longer than 43 characters, but
+    # are always uninteresting
+    /:[	 ]*file format pe[i]\{,1\}-/d
+    /^In archive [^:]*:/d
+    # Ensure marker is printed
+    /^====MARK====/p
+    # Remove all lines with less than 43 characters
+    /^.\{43\}/!d
+    # From remaining lines, remove first 43 characters
+    s/^.\{43\}//' |
+    $SED -n '
+      # Join marker and all lines until next marker into a single line
+      /^====MARK====/ b para
+      H
+      $ b para
+      b
+      :para
+      x
+      s/\n//g
+      # Remove the marker
+      s/^====MARK====//
+      # Remove trailing dots and whitespace
+      s/[\. \t]*$//
+      # Print
+      /./p' |
+    # we now have a list, one entry per line, of the stringified
+    # contents of the appropriate section of all members of the
+    # archive which possess that section. Heuristic: eliminate
+    # all those which have a first or second character that is
+    # a '.' (that is, objdump's representation of an unprintable
+    # character.) This should work for all archives with less than
+    # 0x302f exports -- but will fail for DLLs whose name actually
+    # begins with a literal '.' or a single character followed by
+    # a '.'.
+    #
+    # Of those that remain, print the first one.
+    $SED -e '/^\./d;/^.\./d;q'
+}
+
+# func_cygming_gnu_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is a GNU/binutils-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_gnu_implib_p ()
+{
+  $opt_debug
+  func_to_tool_file "$1" func_convert_file_msys_to_w32
+  func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'`
+  test -n "$func_cygming_gnu_implib_tmp"
+}
+
+# func_cygming_ms_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is an MS-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_ms_implib_p ()
+{
+  $opt_debug
+  func_to_tool_file "$1" func_convert_file_msys_to_w32
+  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
+  test -n "$func_cygming_ms_implib_tmp"
+}
+
+# func_cygming_dll_for_implib_fallback ARG
+# Platform-specific function to extract the
+# name of the DLL associated with the specified
+# import library ARG.
+#
+# This fallback implementation is for use when $DLLTOOL
+# does not support the --identify-strict option.
+# Invoked by eval'ing the libtool variable
+#    $sharedlib_from_linklib_cmd
+# Result is available in the variable
+#    $sharedlib_from_linklib_result
+func_cygming_dll_for_implib_fallback ()
+{
+  $opt_debug
+  if func_cygming_gnu_implib_p "$1" ; then
+    # binutils import library
+    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
+  elif func_cygming_ms_implib_p "$1" ; then
+    # ms-generated import library
+    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
+  else
+    # unknown
+    sharedlib_from_linklib_result=""
+  fi
+}
+
+
+# func_extract_an_archive dir oldlib
+func_extract_an_archive ()
+{
+    $opt_debug
+    f_ex_an_ar_dir="$1"; shift
+    f_ex_an_ar_oldlib="$1"
+    if test "$lock_old_archive_extraction" = yes; then
+      lockfile=$f_ex_an_ar_oldlib.lock
+      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+	func_echo "Waiting for $lockfile to be removed"
+	sleep 2
+      done
+    fi
+    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
+		   'stat=$?; rm -f "$lockfile"; exit $stat'
+    if test "$lock_old_archive_extraction" = yes; then
+      $opt_dry_run || rm -f "$lockfile"
+    fi
+    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
+     :
+    else
+      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
+    fi
+}
+
+
+# func_extract_archives gentop oldlib ...
+func_extract_archives ()
+{
+    $opt_debug
+    my_gentop="$1"; shift
+    my_oldlibs=${1+"$@"}
+    my_oldobjs=""
+    my_xlib=""
+    my_xabs=""
+    my_xdir=""
+
+    for my_xlib in $my_oldlibs; do
+      # Extract the objects.
+      case $my_xlib in
+	[\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
+	*) my_xabs=`pwd`"/$my_xlib" ;;
+      esac
+      func_basename "$my_xlib"
+      my_xlib="$func_basename_result"
+      my_xlib_u=$my_xlib
+      while :; do
+        case " $extracted_archives " in
+	*" $my_xlib_u "*)
+	  func_arith $extracted_serial + 1
+	  extracted_serial=$func_arith_result
+	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
+	*) break ;;
+	esac
+      done
+      extracted_archives="$extracted_archives $my_xlib_u"
+      my_xdir="$my_gentop/$my_xlib_u"
+
+      func_mkdir_p "$my_xdir"
+
+      case $host in
+      *-darwin*)
+	func_verbose "Extracting $my_xabs"
+	# Do not bother doing anything if just a dry run
+	$opt_dry_run || {
+	  darwin_orig_dir=`pwd`
+	  cd $my_xdir || exit $?
+	  darwin_archive=$my_xabs
+	  darwin_curdir=`pwd`
+	  darwin_base_archive=`basename "$darwin_archive"`
+	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
+	  if test -n "$darwin_arches"; then
+	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
+	    darwin_arch=
+	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
+	    for darwin_arch in  $darwin_arches ; do
+	      func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+	      $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
+	      cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+	      func_extract_an_archive "`pwd`" "${darwin_base_archive}"
+	      cd "$darwin_curdir"
+	      $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
+	    done # $darwin_arches
+            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
+	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
+	    darwin_file=
+	    darwin_files=
+	    for darwin_file in $darwin_filelist; do
+	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
+	      $LIPO -create -output "$darwin_file" $darwin_files
+	    done # $darwin_filelist
+	    $RM -rf unfat-$$
+	    cd "$darwin_orig_dir"
+	  else
+	    cd $darwin_orig_dir
+	    func_extract_an_archive "$my_xdir" "$my_xabs"
+	  fi # $darwin_arches
+	} # !$opt_dry_run
+	;;
+      *)
+        func_extract_an_archive "$my_xdir" "$my_xabs"
+	;;
+      esac
+      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
+    done
+
+    func_extract_archives_result="$my_oldobjs"
+}
+
+
+# func_emit_wrapper [arg=no]
+#
+# Emit a libtool wrapper script on stdout.
+# Don't directly open a file because we may want to
+# incorporate the script contents within a cygwin/mingw
+# wrapper executable.  Must ONLY be called from within
+# func_mode_link because it depends on a number of variables
+# set therein.
+#
+# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
+# variable will take.  If 'yes', then the emitted script
+# will assume that the directory in which it is stored is
+# the $objdir directory.  This is a cygwin/mingw-specific
+# behavior.
+func_emit_wrapper ()
+{
+	func_emit_wrapper_arg1=${1-no}
+
+	$ECHO "\
+#! $SHELL
+
+# $output - temporary wrapper script for $objdir/$outputname
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# The $output program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='$sed_quote_subst'
+
+# Be Bourne compatible
+if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '\${1+\"\$@\"}'='\"\$@\"'
+  setopt NO_GLOB_SUBST
+else
+  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+relink_command=\"$relink_command\"
+
+# This environment variable determines our operation mode.
+if test \"\$libtool_install_magic\" = \"$magic\"; then
+  # install mode needs the following variables:
+  generated_by_libtool_version='$macro_version'
+  notinst_deplibs='$notinst_deplibs'
+else
+  # When we are sourced in execute mode, \$file and \$ECHO are already set.
+  if test \"\$libtool_execute_magic\" != \"$magic\"; then
+    file=\"\$0\""
+
+    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
+    $ECHO "\
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+    ECHO=\"$qECHO\"
+  fi
+
+# Very basic option parsing. These options are (a) specific to
+# the libtool wrapper, (b) are identical between the wrapper
+# /script/ and the wrapper /executable/ which is used only on
+# windows platforms, and (c) all begin with the string "--lt-"
+# (application programs are unlikely to have options which match
+# this pattern).
+#
+# There are only two supported options: --lt-debug and
+# --lt-dump-script. There is, deliberately, no --lt-help.
+#
+# The first argument to this parsing function should be the
+# script's $0 value, followed by "$@".
+lt_option_debug=
+func_parse_lt_options ()
+{
+  lt_script_arg0=\$0
+  shift
+  for lt_opt
+  do
+    case \"\$lt_opt\" in
+    --lt-debug) lt_option_debug=1 ;;
+    --lt-dump-script)
+        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
+        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
+        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
+        cat \"\$lt_dump_D/\$lt_dump_F\"
+        exit 0
+      ;;
+    --lt-*)
+        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
+        exit 1
+      ;;
+    esac
+  done
+
+  # Print the debug banner immediately:
+  if test -n \"\$lt_option_debug\"; then
+    echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
+  fi
+}
+
+# Used when --lt-debug. Prints its arguments to stdout
+# (redirection is the responsibility of the caller)
+func_lt_dump_args ()
+{
+  lt_dump_args_N=1;
+  for lt_arg
+  do
+    \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
+    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
+  done
+}
+
+# Core function for launching the target application
+func_exec_program_core ()
+{
+"
+  case $host in
+  # Backslashes separate directories on plain windows
+  *-*-mingw | *-*-os2* | *-cegcc*)
+    $ECHO "\
+      if test -n \"\$lt_option_debug\"; then
+        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
+        func_lt_dump_args \${1+\"\$@\"} 1>&2
+      fi
+      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
+"
+    ;;
+
+  *)
+    $ECHO "\
+      if test -n \"\$lt_option_debug\"; then
+        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
+        func_lt_dump_args \${1+\"\$@\"} 1>&2
+      fi
+      exec \"\$progdir/\$program\" \${1+\"\$@\"}
+"
+    ;;
+  esac
+  $ECHO "\
+      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
+      exit 1
+}
+
+# A function to encapsulate launching the target application
+# Strips options in the --lt-* namespace from \$@ and
+# launches target application with the remaining arguments.
+func_exec_program ()
+{
+  case \" \$* \" in
+  *\\ --lt-*)
+    for lt_wr_arg
+    do
+      case \$lt_wr_arg in
+      --lt-*) ;;
+      *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
+      esac
+      shift
+    done ;;
+  esac
+  func_exec_program_core \${1+\"\$@\"}
+}
+
+  # Parse options
+  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
+
+  # Find the directory that this script lives in.
+  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
+  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
+
+  # Follow symbolic links until we get to the real thisdir.
+  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
+  while test -n \"\$file\"; do
+    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
+
+    # If there was a directory component, then change thisdir.
+    if test \"x\$destdir\" != \"x\$file\"; then
+      case \"\$destdir\" in
+      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
+      *) thisdir=\"\$thisdir/\$destdir\" ;;
+      esac
+    fi
+
+    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
+    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
+  done
+
+  # Usually 'no', except on cygwin/mingw when embedded into
+  # the cwrapper.
+  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
+  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
+    # special case for '.'
+    if test \"\$thisdir\" = \".\"; then
+      thisdir=\`pwd\`
+    fi
+    # remove .libs from thisdir
+    case \"\$thisdir\" in
+    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
+    $objdir )   thisdir=. ;;
+    esac
+  fi
+
+  # Try to get the absolute directory name.
+  absdir=\`cd \"\$thisdir\" && pwd\`
+  test -n \"\$absdir\" && thisdir=\"\$absdir\"
+"
+
+	if test "$fast_install" = yes; then
+	  $ECHO "\
+  program=lt-'$outputname'$exeext
+  progdir=\"\$thisdir/$objdir\"
+
+  if test ! -f \"\$progdir/\$program\" ||
+     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
+       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
+
+    file=\"\$\$-\$program\"
+
+    if test ! -d \"\$progdir\"; then
+      $MKDIR \"\$progdir\"
+    else
+      $RM \"\$progdir/\$file\"
+    fi"
+
+	  $ECHO "\
+
+    # relink executable if necessary
+    if test -n \"\$relink_command\"; then
+      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
+      else
+	$ECHO \"\$relink_command_output\" >&2
+	$RM \"\$progdir/\$file\"
+	exit 1
+      fi
+    fi
+
+    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+    { $RM \"\$progdir/\$program\";
+      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+    $RM \"\$progdir/\$file\"
+  fi"
+	else
+	  $ECHO "\
+  program='$outputname'
+  progdir=\"\$thisdir/$objdir\"
+"
+	fi
+
+	$ECHO "\
+
+  if test -f \"\$progdir/\$program\"; then"
+
+	# fixup the dll searchpath if we need to.
+	#
+	# Fix the DLL searchpath if we need to.  Do this before prepending
+	# to shlibpath, because on Windows, both are PATH and uninstalled
+	# libraries must come first.
+	if test -n "$dllsearchpath"; then
+	  $ECHO "\
+    # Add the dll search path components to the executable PATH
+    PATH=$dllsearchpath:\$PATH
+"
+	fi
+
+	# Export our shlibpath_var if we have one.
+	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+	  $ECHO "\
+    # Add our own library path to $shlibpath_var
+    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
+
+    # Some systems cannot cope with colon-terminated $shlibpath_var
+    # The second colon is a workaround for a bug in BeOS R4 sed
+    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
+
+    export $shlibpath_var
+"
+	fi
+
+	$ECHO "\
+    if test \"\$libtool_execute_magic\" != \"$magic\"; then
+      # Run the actual program with our arguments.
+      func_exec_program \${1+\"\$@\"}
+    fi
+  else
+    # The program doesn't exist.
+    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
+    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
+    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
+    exit 1
+  fi
+fi\
+"
+}
+
+
+# func_emit_cwrapperexe_src
+# emit the source code for a wrapper executable on stdout
+# Must ONLY be called from within func_mode_link because
+# it depends on a number of variable set therein.
+func_emit_cwrapperexe_src ()
+{
+	cat <<EOF
+
+/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
+   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+
+   The $output program cannot be directly executed until all the libtool
+   libraries that it depends on are installed.
+
+   This wrapper executable should never be moved out of the build directory.
+   If it is, it will not operate correctly.
+*/
+EOF
+	    cat <<"EOF"
+#ifdef _MSC_VER
+# define _CRT_SECURE_NO_DEPRECATE 1
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef _MSC_VER
+# include <direct.h>
+# include <process.h>
+# include <io.h>
+#else
+# include <unistd.h>
+# include <stdint.h>
+# ifdef __CYGWIN__
+#  include <io.h>
+# endif
+#endif
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+/* declarations of non-ANSI functions */
+#if defined(__MINGW32__)
+# ifdef __STRICT_ANSI__
+int _putenv (const char *);
+# endif
+#elif defined(__CYGWIN__)
+# ifdef __STRICT_ANSI__
+char *realpath (const char *, char *);
+int putenv (char *);
+int setenv (const char *, const char *, int);
+# endif
+/* #elif defined (other platforms) ... */
+#endif
+
+/* portability defines, excluding path handling macros */
+#if defined(_MSC_VER)
+# define setmode _setmode
+# define stat    _stat
+# define chmod   _chmod
+# define getcwd  _getcwd
+# define putenv  _putenv
+# define S_IXUSR _S_IEXEC
+# ifndef _INTPTR_T_DEFINED
+#  define _INTPTR_T_DEFINED
+#  define intptr_t int
+# endif
+#elif defined(__MINGW32__)
+# define setmode _setmode
+# define stat    _stat
+# define chmod   _chmod
+# define getcwd  _getcwd
+# define putenv  _putenv
+#elif defined(__CYGWIN__)
+# define HAVE_SETENV
+# define FOPEN_WB "wb"
+/* #elif defined (other platforms) ... */
+#endif
+
+#if defined(PATH_MAX)
+# define LT_PATHMAX PATH_MAX
+#elif defined(MAXPATHLEN)
+# define LT_PATHMAX MAXPATHLEN
+#else
+# define LT_PATHMAX 1024
+#endif
+
+#ifndef S_IXOTH
+# define S_IXOTH 0
+#endif
+#ifndef S_IXGRP
+# define S_IXGRP 0
+#endif
+
+/* path handling portability macros */
+#ifndef DIR_SEPARATOR
+# define DIR_SEPARATOR '/'
+# define PATH_SEPARATOR ':'
+#endif
+
+#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
+  defined (__OS2__)
+# define HAVE_DOS_BASED_FILE_SYSTEM
+# define FOPEN_WB "wb"
+# ifndef DIR_SEPARATOR_2
+#  define DIR_SEPARATOR_2 '\\'
+# endif
+# ifndef PATH_SEPARATOR_2
+#  define PATH_SEPARATOR_2 ';'
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR_2
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
+#else /* DIR_SEPARATOR_2 */
+# define IS_DIR_SEPARATOR(ch) \
+	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+#endif /* DIR_SEPARATOR_2 */
+
+#ifndef PATH_SEPARATOR_2
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
+#else /* PATH_SEPARATOR_2 */
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
+#endif /* PATH_SEPARATOR_2 */
+
+#ifndef FOPEN_WB
+# define FOPEN_WB "w"
+#endif
+#ifndef _O_BINARY
+# define _O_BINARY 0
+#endif
+
+#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
+#define XFREE(stale) do { \
+  if (stale) { free ((void *) stale); stale = 0; } \
+} while (0)
+
+#if defined(LT_DEBUGWRAPPER)
+static int lt_debug = 1;
+#else
+static int lt_debug = 0;
+#endif
+
+const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
+
+void *xmalloc (size_t num);
+char *xstrdup (const char *string);
+const char *base_name (const char *name);
+char *find_executable (const char *wrapper);
+char *chase_symlinks (const char *pathspec);
+int make_executable (const char *path);
+int check_executable (const char *path);
+char *strendzap (char *str, const char *pat);
+void lt_debugprintf (const char *file, int line, const char *fmt, ...);
+void lt_fatal (const char *file, int line, const char *message, ...);
+static const char *nonnull (const char *s);
+static const char *nonempty (const char *s);
+void lt_setenv (const char *name, const char *value);
+char *lt_extend_str (const char *orig_value, const char *add, int to_end);
+void lt_update_exe_path (const char *name, const char *value);
+void lt_update_lib_path (const char *name, const char *value);
+char **prepare_spawn (char **argv);
+void lt_dump_script (FILE *f);
+EOF
+
+	    cat <<EOF
+volatile const char * MAGIC_EXE = "$magic_exe";
+const char * LIB_PATH_VARNAME = "$shlibpath_var";
+EOF
+
+	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+              func_to_host_path "$temp_rpath"
+	      cat <<EOF
+const char * LIB_PATH_VALUE   = "$func_to_host_path_result";
+EOF
+	    else
+	      cat <<"EOF"
+const char * LIB_PATH_VALUE   = "";
+EOF
+	    fi
+
+	    if test -n "$dllsearchpath"; then
+              func_to_host_path "$dllsearchpath:"
+	      cat <<EOF
+const char * EXE_PATH_VARNAME = "PATH";
+const char * EXE_PATH_VALUE   = "$func_to_host_path_result";
+EOF
+	    else
+	      cat <<"EOF"
+const char * EXE_PATH_VARNAME = "";
+const char * EXE_PATH_VALUE   = "";
+EOF
+	    fi
+
+	    if test "$fast_install" = yes; then
+	      cat <<EOF
+const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
+EOF
+	    else
+	      cat <<EOF
+const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
+EOF
+	    fi
+
+
+	    cat <<"EOF"
+
+#define LTWRAPPER_OPTION_PREFIX         "--lt-"
+
+static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
+static const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
+static const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
+
+int
+main (int argc, char *argv[])
+{
+  char **newargz;
+  int  newargc;
+  char *tmp_pathspec;
+  char *actual_cwrapper_path;
+  char *actual_cwrapper_name;
+  char *target_name;
+  char *lt_argv_zero;
+  intptr_t rval = 127;
+
+  int i;
+
+  program_name = (char *) xstrdup (base_name (argv[0]));
+  newargz = XMALLOC (char *, argc + 1);
+
+  /* very simple arg parsing; don't want to rely on getopt
+   * also, copy all non cwrapper options to newargz, except
+   * argz[0], which is handled differently
+   */
+  newargc=0;
+  for (i = 1; i < argc; i++)
+    {
+      if (strcmp (argv[i], dumpscript_opt) == 0)
+	{
+EOF
+	    case "$host" in
+	      *mingw* | *cygwin* )
+		# make stdout use "unix" line endings
+		echo "          setmode(1,_O_BINARY);"
+		;;
+	      esac
+
+	    cat <<"EOF"
+	  lt_dump_script (stdout);
+	  return 0;
+	}
+      if (strcmp (argv[i], debug_opt) == 0)
+	{
+          lt_debug = 1;
+          continue;
+	}
+      if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
+        {
+          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
+             namespace, but it is not one of the ones we know about and
+             have already dealt with, above (inluding dump-script), then
+             report an error. Otherwise, targets might begin to believe
+             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
+             namespace. The first time any user complains about this, we'll
+             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
+             or a configure.ac-settable value.
+           */
+          lt_fatal (__FILE__, __LINE__,
+		    "unrecognized %s option: '%s'",
+                    ltwrapper_option_prefix, argv[i]);
+        }
+      /* otherwise ... */
+      newargz[++newargc] = xstrdup (argv[i]);
+    }
+  newargz[++newargc] = NULL;
+
+EOF
+	    cat <<EOF
+  /* The GNU banner must be the first non-error debug message */
+  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
+EOF
+	    cat <<"EOF"
+  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
+  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
+
+  tmp_pathspec = find_executable (argv[0]);
+  if (tmp_pathspec == NULL)
+    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
+  lt_debugprintf (__FILE__, __LINE__,
+                  "(main) found exe (before symlink chase) at: %s\n",
+		  tmp_pathspec);
+
+  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
+  lt_debugprintf (__FILE__, __LINE__,
+                  "(main) found exe (after symlink chase) at: %s\n",
+		  actual_cwrapper_path);
+  XFREE (tmp_pathspec);
+
+  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
+  strendzap (actual_cwrapper_path, actual_cwrapper_name);
+
+  /* wrapper name transforms */
+  strendzap (actual_cwrapper_name, ".exe");
+  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
+  XFREE (actual_cwrapper_name);
+  actual_cwrapper_name = tmp_pathspec;
+  tmp_pathspec = 0;
+
+  /* target_name transforms -- use actual target program name; might have lt- prefix */
+  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
+  strendzap (target_name, ".exe");
+  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
+  XFREE (target_name);
+  target_name = tmp_pathspec;
+  tmp_pathspec = 0;
+
+  lt_debugprintf (__FILE__, __LINE__,
+		  "(main) libtool target name: %s\n",
+		  target_name);
+EOF
+
+	    cat <<EOF
+  newargz[0] =
+    XMALLOC (char, (strlen (actual_cwrapper_path) +
+		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
+  strcpy (newargz[0], actual_cwrapper_path);
+  strcat (newargz[0], "$objdir");
+  strcat (newargz[0], "/");
+EOF
+
+	    cat <<"EOF"
+  /* stop here, and copy so we don't have to do this twice */
+  tmp_pathspec = xstrdup (newargz[0]);
+
+  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
+  strcat (newargz[0], actual_cwrapper_name);
+
+  /* DO want the lt- prefix here if it exists, so use target_name */
+  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
+  XFREE (tmp_pathspec);
+  tmp_pathspec = NULL;
+EOF
+
+	    case $host_os in
+	      mingw*)
+	    cat <<"EOF"
+  {
+    char* p;
+    while ((p = strchr (newargz[0], '\\')) != NULL)
+      {
+	*p = '/';
+      }
+    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
+      {
+	*p = '/';
+      }
+  }
+EOF
+	    ;;
+	    esac
+
+	    cat <<"EOF"
+  XFREE (target_name);
+  XFREE (actual_cwrapper_path);
+  XFREE (actual_cwrapper_name);
+
+  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
+  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
+  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
+     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
+     because on Windows, both *_VARNAMEs are PATH but uninstalled
+     libraries must come first. */
+  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
+  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
+
+  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
+		  nonnull (lt_argv_zero));
+  for (i = 0; i < newargc; i++)
+    {
+      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
+		      i, nonnull (newargz[i]));
+    }
+
+EOF
+
+	    case $host_os in
+	      mingw*)
+		cat <<"EOF"
+  /* execv doesn't actually work on mingw as expected on unix */
+  newargz = prepare_spawn (newargz);
+  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
+  if (rval == -1)
+    {
+      /* failed to start process */
+      lt_debugprintf (__FILE__, __LINE__,
+		      "(main) failed to launch target \"%s\": %s\n",
+		      lt_argv_zero, nonnull (strerror (errno)));
+      return 127;
+    }
+  return rval;
+EOF
+		;;
+	      *)
+		cat <<"EOF"
+  execv (lt_argv_zero, newargz);
+  return rval; /* =127, but avoids unused variable warning */
+EOF
+		;;
+	    esac
+
+	    cat <<"EOF"
+}
+
+void *
+xmalloc (size_t num)
+{
+  void *p = (void *) malloc (num);
+  if (!p)
+    lt_fatal (__FILE__, __LINE__, "memory exhausted");
+
+  return p;
+}
+
+char *
+xstrdup (const char *string)
+{
+  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
+			  string) : NULL;
+}
+
+const char *
+base_name (const char *name)
+{
+  const char *base;
+
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+  /* Skip over the disk name in MSDOS pathnames. */
+  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
+    name += 2;
+#endif
+
+  for (base = name; *name; name++)
+    if (IS_DIR_SEPARATOR (*name))
+      base = name + 1;
+  return base;
+}
+
+int
+check_executable (const char *path)
+{
+  struct stat st;
+
+  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
+                  nonempty (path));
+  if ((!path) || (!*path))
+    return 0;
+
+  if ((stat (path, &st) >= 0)
+      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
+    return 1;
+  else
+    return 0;
+}
+
+int
+make_executable (const char *path)
+{
+  int rval = 0;
+  struct stat st;
+
+  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
+                  nonempty (path));
+  if ((!path) || (!*path))
+    return 0;
+
+  if (stat (path, &st) >= 0)
+    {
+      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
+    }
+  return rval;
+}
+
+/* Searches for the full path of the wrapper.  Returns
+   newly allocated full path name if found, NULL otherwise
+   Does not chase symlinks, even on platforms that support them.
+*/
+char *
+find_executable (const char *wrapper)
+{
+  int has_slash = 0;
+  const char *p;
+  const char *p_next;
+  /* static buffer for getcwd */
+  char tmp[LT_PATHMAX + 1];
+  int tmp_len;
+  char *concat_name;
+
+  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
+                  nonempty (wrapper));
+
+  if ((wrapper == NULL) || (*wrapper == '\0'))
+    return NULL;
+
+  /* Absolute path? */
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
+    {
+      concat_name = xstrdup (wrapper);
+      if (check_executable (concat_name))
+	return concat_name;
+      XFREE (concat_name);
+    }
+  else
+    {
+#endif
+      if (IS_DIR_SEPARATOR (wrapper[0]))
+	{
+	  concat_name = xstrdup (wrapper);
+	  if (check_executable (concat_name))
+	    return concat_name;
+	  XFREE (concat_name);
+	}
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+    }
+#endif
+
+  for (p = wrapper; *p; p++)
+    if (*p == '/')
+      {
+	has_slash = 1;
+	break;
+      }
+  if (!has_slash)
+    {
+      /* no slashes; search PATH */
+      const char *path = getenv ("PATH");
+      if (path != NULL)
+	{
+	  for (p = path; *p; p = p_next)
+	    {
+	      const char *q;
+	      size_t p_len;
+	      for (q = p; *q; q++)
+		if (IS_PATH_SEPARATOR (*q))
+		  break;
+	      p_len = q - p;
+	      p_next = (*q == '\0' ? q : q + 1);
+	      if (p_len == 0)
+		{
+		  /* empty path: current directory */
+		  if (getcwd (tmp, LT_PATHMAX) == NULL)
+		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+                              nonnull (strerror (errno)));
+		  tmp_len = strlen (tmp);
+		  concat_name =
+		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+		  memcpy (concat_name, tmp, tmp_len);
+		  concat_name[tmp_len] = '/';
+		  strcpy (concat_name + tmp_len + 1, wrapper);
+		}
+	      else
+		{
+		  concat_name =
+		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
+		  memcpy (concat_name, p, p_len);
+		  concat_name[p_len] = '/';
+		  strcpy (concat_name + p_len + 1, wrapper);
+		}
+	      if (check_executable (concat_name))
+		return concat_name;
+	      XFREE (concat_name);
+	    }
+	}
+      /* not found in PATH; assume curdir */
+    }
+  /* Relative path | not found in path: prepend cwd */
+  if (getcwd (tmp, LT_PATHMAX) == NULL)
+    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+              nonnull (strerror (errno)));
+  tmp_len = strlen (tmp);
+  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+  memcpy (concat_name, tmp, tmp_len);
+  concat_name[tmp_len] = '/';
+  strcpy (concat_name + tmp_len + 1, wrapper);
+
+  if (check_executable (concat_name))
+    return concat_name;
+  XFREE (concat_name);
+  return NULL;
+}
+
+char *
+chase_symlinks (const char *pathspec)
+{
+#ifndef S_ISLNK
+  return xstrdup (pathspec);
+#else
+  char buf[LT_PATHMAX];
+  struct stat s;
+  char *tmp_pathspec = xstrdup (pathspec);
+  char *p;
+  int has_symlinks = 0;
+  while (strlen (tmp_pathspec) && !has_symlinks)
+    {
+      lt_debugprintf (__FILE__, __LINE__,
+		      "checking path component for symlinks: %s\n",
+		      tmp_pathspec);
+      if (lstat (tmp_pathspec, &s) == 0)
+	{
+	  if (S_ISLNK (s.st_mode) != 0)
+	    {
+	      has_symlinks = 1;
+	      break;
+	    }
+
+	  /* search backwards for last DIR_SEPARATOR */
+	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
+	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+	    p--;
+	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+	    {
+	      /* no more DIR_SEPARATORS left */
+	      break;
+	    }
+	  *p = '\0';
+	}
+      else
+	{
+	  lt_fatal (__FILE__, __LINE__,
+		    "error accessing file \"%s\": %s",
+		    tmp_pathspec, nonnull (strerror (errno)));
+	}
+    }
+  XFREE (tmp_pathspec);
+
+  if (!has_symlinks)
+    {
+      return xstrdup (pathspec);
+    }
+
+  tmp_pathspec = realpath (pathspec, buf);
+  if (tmp_pathspec == 0)
+    {
+      lt_fatal (__FILE__, __LINE__,
+		"could not follow symlinks for %s", pathspec);
+    }
+  return xstrdup (tmp_pathspec);
+#endif
+}
+
+char *
+strendzap (char *str, const char *pat)
+{
+  size_t len, patlen;
+
+  assert (str != NULL);
+  assert (pat != NULL);
+
+  len = strlen (str);
+  patlen = strlen (pat);
+
+  if (patlen <= len)
+    {
+      str += len - patlen;
+      if (strcmp (str, pat) == 0)
+	*str = '\0';
+    }
+  return str;
+}
+
+void
+lt_debugprintf (const char *file, int line, const char *fmt, ...)
+{
+  va_list args;
+  if (lt_debug)
+    {
+      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
+      va_start (args, fmt);
+      (void) vfprintf (stderr, fmt, args);
+      va_end (args);
+    }
+}
+
+static void
+lt_error_core (int exit_status, const char *file,
+	       int line, const char *mode,
+	       const char *message, va_list ap)
+{
+  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
+  vfprintf (stderr, message, ap);
+  fprintf (stderr, ".\n");
+
+  if (exit_status >= 0)
+    exit (exit_status);
+}
+
+void
+lt_fatal (const char *file, int line, const char *message, ...)
+{
+  va_list ap;
+  va_start (ap, message);
+  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
+  va_end (ap);
+}
+
+static const char *
+nonnull (const char *s)
+{
+  return s ? s : "(null)";
+}
+
+static const char *
+nonempty (const char *s)
+{
+  return (s && !*s) ? "(empty)" : nonnull (s);
+}
+
+void
+lt_setenv (const char *name, const char *value)
+{
+  lt_debugprintf (__FILE__, __LINE__,
+		  "(lt_setenv) setting '%s' to '%s'\n",
+                  nonnull (name), nonnull (value));
+  {
+#ifdef HAVE_SETENV
+    /* always make a copy, for consistency with !HAVE_SETENV */
+    char *str = xstrdup (value);
+    setenv (name, str, 1);
+#else
+    int len = strlen (name) + 1 + strlen (value) + 1;
+    char *str = XMALLOC (char, len);
+    sprintf (str, "%s=%s", name, value);
+    if (putenv (str) != EXIT_SUCCESS)
+      {
+        XFREE (str);
+      }
+#endif
+  }
+}
+
+char *
+lt_extend_str (const char *orig_value, const char *add, int to_end)
+{
+  char *new_value;
+  if (orig_value && *orig_value)
+    {
+      int orig_value_len = strlen (orig_value);
+      int add_len = strlen (add);
+      new_value = XMALLOC (char, add_len + orig_value_len + 1);
+      if (to_end)
+        {
+          strcpy (new_value, orig_value);
+          strcpy (new_value + orig_value_len, add);
+        }
+      else
+        {
+          strcpy (new_value, add);
+          strcpy (new_value + add_len, orig_value);
+        }
+    }
+  else
+    {
+      new_value = xstrdup (add);
+    }
+  return new_value;
+}
+
+void
+lt_update_exe_path (const char *name, const char *value)
+{
+  lt_debugprintf (__FILE__, __LINE__,
+		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
+                  nonnull (name), nonnull (value));
+
+  if (name && *name && value && *value)
+    {
+      char *new_value = lt_extend_str (getenv (name), value, 0);
+      /* some systems can't cope with a ':'-terminated path #' */
+      int len = strlen (new_value);
+      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
+        {
+          new_value[len-1] = '\0';
+        }
+      lt_setenv (name, new_value);
+      XFREE (new_value);
+    }
+}
+
+void
+lt_update_lib_path (const char *name, const char *value)
+{
+  lt_debugprintf (__FILE__, __LINE__,
+		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
+                  nonnull (name), nonnull (value));
+
+  if (name && *name && value && *value)
+    {
+      char *new_value = lt_extend_str (getenv (name), value, 0);
+      lt_setenv (name, new_value);
+      XFREE (new_value);
+    }
+}
+
+EOF
+	    case $host_os in
+	      mingw*)
+		cat <<"EOF"
+
+/* Prepares an argument vector before calling spawn().
+   Note that spawn() does not by itself call the command interpreter
+     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
+      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+         GetVersionEx(&v);
+         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
+      }) ? "cmd.exe" : "command.com").
+   Instead it simply concatenates the arguments, separated by ' ', and calls
+   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
+   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
+   special way:
+   - Space and tab are interpreted as delimiters. They are not treated as
+     delimiters if they are surrounded by double quotes: "...".
+   - Unescaped double quotes are removed from the input. Their only effect is
+     that within double quotes, space and tab are treated like normal
+     characters.
+   - Backslashes not followed by double quotes are not special.
+   - But 2*n+1 backslashes followed by a double quote become
+     n backslashes followed by a double quote (n >= 0):
+       \" -> "
+       \\\" -> \"
+       \\\\\" -> \\"
+ */
+#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+char **
+prepare_spawn (char **argv)
+{
+  size_t argc;
+  char **new_argv;
+  size_t i;
+
+  /* Count number of arguments.  */
+  for (argc = 0; argv[argc] != NULL; argc++)
+    ;
+
+  /* Allocate new argument vector.  */
+  new_argv = XMALLOC (char *, argc + 1);
+
+  /* Put quoted arguments into the new argument vector.  */
+  for (i = 0; i < argc; i++)
+    {
+      const char *string = argv[i];
+
+      if (string[0] == '\0')
+	new_argv[i] = xstrdup ("\"\"");
+      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
+	{
+	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
+	  size_t length;
+	  unsigned int backslashes;
+	  const char *s;
+	  char *quoted_string;
+	  char *p;
+
+	  length = 0;
+	  backslashes = 0;
+	  if (quote_around)
+	    length++;
+	  for (s = string; *s != '\0'; s++)
+	    {
+	      char c = *s;
+	      if (c == '"')
+		length += backslashes + 1;
+	      length++;
+	      if (c == '\\')
+		backslashes++;
+	      else
+		backslashes = 0;
+	    }
+	  if (quote_around)
+	    length += backslashes + 1;
+
+	  quoted_string = XMALLOC (char, length + 1);
+
+	  p = quoted_string;
+	  backslashes = 0;
+	  if (quote_around)
+	    *p++ = '"';
+	  for (s = string; *s != '\0'; s++)
+	    {
+	      char c = *s;
+	      if (c == '"')
+		{
+		  unsigned int j;
+		  for (j = backslashes + 1; j > 0; j--)
+		    *p++ = '\\';
+		}
+	      *p++ = c;
+	      if (c == '\\')
+		backslashes++;
+	      else
+		backslashes = 0;
+	    }
+	  if (quote_around)
+	    {
+	      unsigned int j;
+	      for (j = backslashes; j > 0; j--)
+		*p++ = '\\';
+	      *p++ = '"';
+	    }
+	  *p = '\0';
+
+	  new_argv[i] = quoted_string;
+	}
+      else
+	new_argv[i] = (char *) string;
+    }
+  new_argv[argc] = NULL;
+
+  return new_argv;
+}
+EOF
+		;;
+	    esac
+
+            cat <<"EOF"
+void lt_dump_script (FILE* f)
+{
+EOF
+	    func_emit_wrapper yes |
+	      $SED -n -e '
+s/^\(.\{79\}\)\(..*\)/\1\
+\2/
+h
+s/\([\\"]\)/\\\1/g
+s/$/\\n/
+s/\([^\n]*\).*/  fputs ("\1", f);/p
+g
+D'
+            cat <<"EOF"
+}
+EOF
+}
+# end: func_emit_cwrapperexe_src
+
+# func_win32_import_lib_p ARG
+# True if ARG is an import lib, as indicated by $file_magic_cmd
+func_win32_import_lib_p ()
+{
+    $opt_debug
+    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
+    *import*) : ;;
+    *) false ;;
+    esac
+}
+
+# func_mode_link arg...
+func_mode_link ()
+{
+    $opt_debug
+    case $host in
+    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+      # It is impossible to link a dll without this setting, and
+      # we shouldn't force the makefile maintainer to figure out
+      # which system we are compiling for in order to pass an extra
+      # flag for every libtool invocation.
+      # allow_undefined=no
+
+      # FIXME: Unfortunately, there are problems with the above when trying
+      # to make a dll which has undefined symbols, in which case not
+      # even a static library is built.  For now, we need to specify
+      # -no-undefined on the libtool link line when we can be certain
+      # that all symbols are satisfied, otherwise we get a static library.
+      allow_undefined=yes
+      ;;
+    *)
+      allow_undefined=yes
+      ;;
+    esac
+    libtool_args=$nonopt
+    base_compile="$nonopt $@"
+    compile_command=$nonopt
+    finalize_command=$nonopt
+
+    compile_rpath=
+    finalize_rpath=
+    compile_shlibpath=
+    finalize_shlibpath=
+    convenience=
+    old_convenience=
+    deplibs=
+    old_deplibs=
+    compiler_flags=
+    linker_flags=
+    dllsearchpath=
+    lib_search_path=`pwd`
+    inst_prefix_dir=
+    new_inherited_linker_flags=
+
+    avoid_version=no
+    bindir=
+    dlfiles=
+    dlprefiles=
+    dlself=no
+    export_dynamic=no
+    export_symbols=
+    export_symbols_regex=
+    generated=
+    libobjs=
+    ltlibs=
+    module=no
+    no_install=no
+    objs=
+    non_pic_objects=
+    precious_files_regex=
+    prefer_static_libs=no
+    preload=no
+    prev=
+    prevarg=
+    release=
+    rpath=
+    xrpath=
+    perm_rpath=
+    temp_rpath=
+    thread_safe=no
+    vinfo=
+    vinfo_number=no
+    weak_libs=
+    single_module="${wl}-single_module"
+    func_infer_tag $base_compile
+
+    # We need to know -static, to get the right output filenames.
+    for arg
+    do
+      case $arg in
+      -shared)
+	test "$build_libtool_libs" != yes && \
+	  func_fatal_configuration "can not build a shared library"
+	build_old_libs=no
+	break
+	;;
+      -all-static | -static | -static-libtool-libs)
+	case $arg in
+	-all-static)
+	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
+	    func_warning "complete static linking is impossible in this configuration"
+	  fi
+	  if test -n "$link_static_flag"; then
+	    dlopen_self=$dlopen_self_static
+	  fi
+	  prefer_static_libs=yes
+	  ;;
+	-static)
+	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
+	    dlopen_self=$dlopen_self_static
+	  fi
+	  prefer_static_libs=built
+	  ;;
+	-static-libtool-libs)
+	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
+	    dlopen_self=$dlopen_self_static
+	  fi
+	  prefer_static_libs=yes
+	  ;;
+	esac
+	build_libtool_libs=no
+	build_old_libs=yes
+	break
+	;;
+      esac
+    done
+
+    # See if our shared archives depend on static archives.
+    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
+
+    # Go through the arguments, transforming them on the way.
+    while test "$#" -gt 0; do
+      arg="$1"
+      shift
+      func_quote_for_eval "$arg"
+      qarg=$func_quote_for_eval_unquoted_result
+      func_append libtool_args " $func_quote_for_eval_result"
+
+      # If the previous option needs an argument, assign it.
+      if test -n "$prev"; then
+	case $prev in
+	output)
+	  func_append compile_command " @OUTPUT@"
+	  func_append finalize_command " @OUTPUT@"
+	  ;;
+	esac
+
+	case $prev in
+	bindir)
+	  bindir="$arg"
+	  prev=
+	  continue
+	  ;;
+	dlfiles|dlprefiles)
+	  if test "$preload" = no; then
+	    # Add the symbol object into the linking commands.
+	    func_append compile_command " @SYMFILE@"
+	    func_append finalize_command " @SYMFILE@"
+	    preload=yes
+	  fi
+	  case $arg in
+	  *.la | *.lo) ;;  # We handle these cases below.
+	  force)
+	    if test "$dlself" = no; then
+	      dlself=needless
+	      export_dynamic=yes
+	    fi
+	    prev=
+	    continue
+	    ;;
+	  self)
+	    if test "$prev" = dlprefiles; then
+	      dlself=yes
+	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
+	      dlself=yes
+	    else
+	      dlself=needless
+	      export_dynamic=yes
+	    fi
+	    prev=
+	    continue
+	    ;;
+	  *)
+	    if test "$prev" = dlfiles; then
+	      func_append dlfiles " $arg"
+	    else
+	      func_append dlprefiles " $arg"
+	    fi
+	    prev=
+	    continue
+	    ;;
+	  esac
+	  ;;
+	expsyms)
+	  export_symbols="$arg"
+	  test -f "$arg" \
+	    || func_fatal_error "symbol file \`$arg' does not exist"
+	  prev=
+	  continue
+	  ;;
+	expsyms_regex)
+	  export_symbols_regex="$arg"
+	  prev=
+	  continue
+	  ;;
+	framework)
+	  case $host in
+	    *-*-darwin*)
+	      case "$deplibs " in
+		*" $qarg.ltframework "*) ;;
+		*) func_append deplibs " $qarg.ltframework" # this is fixed later
+		   ;;
+	      esac
+	      ;;
+	  esac
+	  prev=
+	  continue
+	  ;;
+	inst_prefix)
+	  inst_prefix_dir="$arg"
+	  prev=
+	  continue
+	  ;;
+	objectlist)
+	  if test -f "$arg"; then
+	    save_arg=$arg
+	    moreargs=
+	    for fil in `cat "$save_arg"`
+	    do
+#	      func_append moreargs " $fil"
+	      arg=$fil
+	      # A libtool-controlled object.
+
+	      # Check to see that this really is a libtool object.
+	      if func_lalib_unsafe_p "$arg"; then
+		pic_object=
+		non_pic_object=
+
+		# Read the .lo file
+		func_source "$arg"
+
+		if test -z "$pic_object" ||
+		   test -z "$non_pic_object" ||
+		   test "$pic_object" = none &&
+		   test "$non_pic_object" = none; then
+		  func_fatal_error "cannot find name of object for \`$arg'"
+		fi
+
+		# Extract subdirectory from the argument.
+		func_dirname "$arg" "/" ""
+		xdir="$func_dirname_result"
+
+		if test "$pic_object" != none; then
+		  # Prepend the subdirectory the object is found in.
+		  pic_object="$xdir$pic_object"
+
+		  if test "$prev" = dlfiles; then
+		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+		      func_append dlfiles " $pic_object"
+		      prev=
+		      continue
+		    else
+		      # If libtool objects are unsupported, then we need to preload.
+		      prev=dlprefiles
+		    fi
+		  fi
+
+		  # CHECK ME:  I think I busted this.  -Ossama
+		  if test "$prev" = dlprefiles; then
+		    # Preload the old-style object.
+		    func_append dlprefiles " $pic_object"
+		    prev=
+		  fi
+
+		  # A PIC object.
+		  func_append libobjs " $pic_object"
+		  arg="$pic_object"
+		fi
+
+		# Non-PIC object.
+		if test "$non_pic_object" != none; then
+		  # Prepend the subdirectory the object is found in.
+		  non_pic_object="$xdir$non_pic_object"
+
+		  # A standard non-PIC object
+		  func_append non_pic_objects " $non_pic_object"
+		  if test -z "$pic_object" || test "$pic_object" = none ; then
+		    arg="$non_pic_object"
+		  fi
+		else
+		  # If the PIC object exists, use it instead.
+		  # $xdir was prepended to $pic_object above.
+		  non_pic_object="$pic_object"
+		  func_append non_pic_objects " $non_pic_object"
+		fi
+	      else
+		# Only an error if not doing a dry-run.
+		if $opt_dry_run; then
+		  # Extract subdirectory from the argument.
+		  func_dirname "$arg" "/" ""
+		  xdir="$func_dirname_result"
+
+		  func_lo2o "$arg"
+		  pic_object=$xdir$objdir/$func_lo2o_result
+		  non_pic_object=$xdir$func_lo2o_result
+		  func_append libobjs " $pic_object"
+		  func_append non_pic_objects " $non_pic_object"
+	        else
+		  func_fatal_error "\`$arg' is not a valid libtool object"
+		fi
+	      fi
+	    done
+	  else
+	    func_fatal_error "link input file \`$arg' does not exist"
+	  fi
+	  arg=$save_arg
+	  prev=
+	  continue
+	  ;;
+	precious_regex)
+	  precious_files_regex="$arg"
+	  prev=
+	  continue
+	  ;;
+	release)
+	  release="-$arg"
+	  prev=
+	  continue
+	  ;;
+	rpath | xrpath)
+	  # We need an absolute path.
+	  case $arg in
+	  [\\/]* | [A-Za-z]:[\\/]*) ;;
+	  *)
+	    func_fatal_error "only absolute run-paths are allowed"
+	    ;;
+	  esac
+	  if test "$prev" = rpath; then
+	    case "$rpath " in
+	    *" $arg "*) ;;
+	    *) func_append rpath " $arg" ;;
+	    esac
+	  else
+	    case "$xrpath " in
+	    *" $arg "*) ;;
+	    *) func_append xrpath " $arg" ;;
+	    esac
+	  fi
+	  prev=
+	  continue
+	  ;;
+	shrext)
+	  shrext_cmds="$arg"
+	  prev=
+	  continue
+	  ;;
+	weak)
+	  func_append weak_libs " $arg"
+	  prev=
+	  continue
+	  ;;
+	xcclinker)
+	  func_append linker_flags " $qarg"
+	  func_append compiler_flags " $qarg"
+	  prev=
+	  func_append compile_command " $qarg"
+	  func_append finalize_command " $qarg"
+	  continue
+	  ;;
+	xcompiler)
+	  func_append compiler_flags " $qarg"
+	  prev=
+	  func_append compile_command " $qarg"
+	  func_append finalize_command " $qarg"
+	  continue
+	  ;;
+	xlinker)
+	  func_append linker_flags " $qarg"
+	  func_append compiler_flags " $wl$qarg"
+	  prev=
+	  func_append compile_command " $wl$qarg"
+	  func_append finalize_command " $wl$qarg"
+	  continue
+	  ;;
+	*)
+	  eval "$prev=\"\$arg\""
+	  prev=
+	  continue
+	  ;;
+	esac
+      fi # test -n "$prev"
+
+      prevarg="$arg"
+
+      case $arg in
+      -all-static)
+	if test -n "$link_static_flag"; then
+	  # See comment for -static flag below, for more details.
+	  func_append compile_command " $link_static_flag"
+	  func_append finalize_command " $link_static_flag"
+	fi
+	continue
+	;;
+
+      -allow-undefined)
+	# FIXME: remove this flag sometime in the future.
+	func_fatal_error "\`-allow-undefined' must not be used because it is the default"
+	;;
+
+      -avoid-version)
+	avoid_version=yes
+	continue
+	;;
+
+      -bindir)
+	prev=bindir
+	continue
+	;;
+
+      -dlopen)
+	prev=dlfiles
+	continue
+	;;
+
+      -dlpreopen)
+	prev=dlprefiles
+	continue
+	;;
+
+      -export-dynamic)
+	export_dynamic=yes
+	continue
+	;;
+
+      -export-symbols | -export-symbols-regex)
+	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+	  func_fatal_error "more than one -exported-symbols argument is not allowed"
+	fi
+	if test "X$arg" = "X-export-symbols"; then
+	  prev=expsyms
+	else
+	  prev=expsyms_regex
+	fi
+	continue
+	;;
+
+      -framework)
+	prev=framework
+	continue
+	;;
+
+      -inst-prefix-dir)
+	prev=inst_prefix
+	continue
+	;;
+
+      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
+      # so, if we see these flags be careful not to treat them like -L
+      -L[A-Z][A-Z]*:*)
+	case $with_gcc/$host in
+	no/*-*-irix* | /*-*-irix*)
+	  func_append compile_command " $arg"
+	  func_append finalize_command " $arg"
+	  ;;
+	esac
+	continue
+	;;
+
+      -L*)
+	func_stripname "-L" '' "$arg"
+	if test -z "$func_stripname_result"; then
+	  if test "$#" -gt 0; then
+	    func_fatal_error "require no space between \`-L' and \`$1'"
+	  else
+	    func_fatal_error "need path for \`-L' option"
+	  fi
+	fi
+	func_resolve_sysroot "$func_stripname_result"
+	dir=$func_resolve_sysroot_result
+	# We need an absolute path.
+	case $dir in
+	[\\/]* | [A-Za-z]:[\\/]*) ;;
+	*)
+	  absdir=`cd "$dir" && pwd`
+	  test -z "$absdir" && \
+	    func_fatal_error "cannot determine absolute directory name of \`$dir'"
+	  dir="$absdir"
+	  ;;
+	esac
+	case "$deplibs " in
+	*" -L$dir "* | *" $arg "*)
+	  # Will only happen for absolute or sysroot arguments
+	  ;;
+	*)
+	  # Preserve sysroot, but never include relative directories
+	  case $dir in
+	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
+	    *) func_append deplibs " -L$dir" ;;
+	  esac
+	  func_append lib_search_path " $dir"
+	  ;;
+	esac
+	case $host in
+	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
+	  case :$dllsearchpath: in
+	  *":$dir:"*) ;;
+	  ::) dllsearchpath=$dir;;
+	  *) func_append dllsearchpath ":$dir";;
+	  esac
+	  case :$dllsearchpath: in
+	  *":$testbindir:"*) ;;
+	  ::) dllsearchpath=$testbindir;;
+	  *) func_append dllsearchpath ":$testbindir";;
+	  esac
+	  ;;
+	esac
+	continue
+	;;
+
+      -l*)
+	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
+	  case $host in
+	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
+	    # These systems don't actually have a C or math library (as such)
+	    continue
+	    ;;
+	  *-*-os2*)
+	    # These systems don't actually have a C library (as such)
+	    test "X$arg" = "X-lc" && continue
+	    ;;
+	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+	    # Do not include libc due to us having libc/libc_r.
+	    test "X$arg" = "X-lc" && continue
+	    ;;
+	  *-*-rhapsody* | *-*-darwin1.[012])
+	    # Rhapsody C and math libraries are in the System framework
+	    func_append deplibs " System.ltframework"
+	    continue
+	    ;;
+	  *-*-sco3.2v5* | *-*-sco5v6*)
+	    # Causes problems with __ctype
+	    test "X$arg" = "X-lc" && continue
+	    ;;
+	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+	    # Compiler inserts libc in the correct place for threads to work
+	    test "X$arg" = "X-lc" && continue
+	    ;;
+	  esac
+	elif test "X$arg" = "X-lc_r"; then
+	 case $host in
+	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+	   # Do not include libc_r directly, use -pthread flag.
+	   continue
+	   ;;
+	 esac
+	fi
+	func_append deplibs " $arg"
+	continue
+	;;
+
+      -module)
+	module=yes
+	continue
+	;;
+
+      # Tru64 UNIX uses -model [arg] to determine the layout of C++
+      # classes, name mangling, and exception handling.
+      # Darwin uses the -arch flag to determine output architecture.
+      -model|-arch|-isysroot|--sysroot)
+	func_append compiler_flags " $arg"
+	func_append compile_command " $arg"
+	func_append finalize_command " $arg"
+	prev=xcompiler
+	continue
+	;;
+
+      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
+	func_append compiler_flags " $arg"
+	func_append compile_command " $arg"
+	func_append finalize_command " $arg"
+	case "$new_inherited_linker_flags " in
+	    *" $arg "*) ;;
+	    * ) func_append new_inherited_linker_flags " $arg" ;;
+	esac
+	continue
+	;;
+
+      -multi_module)
+	single_module="${wl}-multi_module"
+	continue
+	;;
+
+      -no-fast-install)
+	fast_install=no
+	continue
+	;;
+
+      -no-install)
+	case $host in
+	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
+	  # The PATH hackery in wrapper scripts is required on Windows
+	  # and Darwin in order for the loader to find any dlls it needs.
+	  func_warning "\`-no-install' is ignored for $host"
+	  func_warning "assuming \`-no-fast-install' instead"
+	  fast_install=no
+	  ;;
+	*) no_install=yes ;;
+	esac
+	continue
+	;;
+
+      -no-undefined)
+	allow_undefined=no
+	continue
+	;;
+
+      -objectlist)
+	prev=objectlist
+	continue
+	;;
+
+      -o) prev=output ;;
+
+      -precious-files-regex)
+	prev=precious_regex
+	continue
+	;;
+
+      -release)
+	prev=release
+	continue
+	;;
+
+      -rpath)
+	prev=rpath
+	continue
+	;;
+
+      -R)
+	prev=xrpath
+	continue
+	;;
+
+      -R*)
+	func_stripname '-R' '' "$arg"
+	dir=$func_stripname_result
+	# We need an absolute path.
+	case $dir in
+	[\\/]* | [A-Za-z]:[\\/]*) ;;
+	=*)
+	  func_stripname '=' '' "$dir"
+	  dir=$lt_sysroot$func_stripname_result
+	  ;;
+	*)
+	  func_fatal_error "only absolute run-paths are allowed"
+	  ;;
+	esac
+	case "$xrpath " in
+	*" $dir "*) ;;
+	*) func_append xrpath " $dir" ;;
+	esac
+	continue
+	;;
+
+      -shared)
+	# The effects of -shared are defined in a previous loop.
+	continue
+	;;
+
+      -shrext)
+	prev=shrext
+	continue
+	;;
+
+      -static | -static-libtool-libs)
+	# The effects of -static are defined in a previous loop.
+	# We used to do the same as -all-static on platforms that
+	# didn't have a PIC flag, but the assumption that the effects
+	# would be equivalent was wrong.  It would break on at least
+	# Digital Unix and AIX.
+	continue
+	;;
+
+      -thread-safe)
+	thread_safe=yes
+	continue
+	;;
+
+      -version-info)
+	prev=vinfo
+	continue
+	;;
+
+      -version-number)
+	prev=vinfo
+	vinfo_number=yes
+	continue
+	;;
+
+      -weak)
+        prev=weak
+	continue
+	;;
+
+      -Wc,*)
+	func_stripname '-Wc,' '' "$arg"
+	args=$func_stripname_result
+	arg=
+	save_ifs="$IFS"; IFS=','
+	for flag in $args; do
+	  IFS="$save_ifs"
+          func_quote_for_eval "$flag"
+	  func_append arg " $func_quote_for_eval_result"
+	  func_append compiler_flags " $func_quote_for_eval_result"
+	done
+	IFS="$save_ifs"
+	func_stripname ' ' '' "$arg"
+	arg=$func_stripname_result
+	;;
+
+      -Wl,*)
+	func_stripname '-Wl,' '' "$arg"
+	args=$func_stripname_result
+	arg=
+	save_ifs="$IFS"; IFS=','
+	for flag in $args; do
+	  IFS="$save_ifs"
+          func_quote_for_eval "$flag"
+	  func_append arg " $wl$func_quote_for_eval_result"
+	  func_append compiler_flags " $wl$func_quote_for_eval_result"
+	  func_append linker_flags " $func_quote_for_eval_result"
+	done
+	IFS="$save_ifs"
+	func_stripname ' ' '' "$arg"
+	arg=$func_stripname_result
+	;;
+
+      -Xcompiler)
+	prev=xcompiler
+	continue
+	;;
+
+      -Xlinker)
+	prev=xlinker
+	continue
+	;;
+
+      -XCClinker)
+	prev=xcclinker
+	continue
+	;;
+
+      # -msg_* for osf cc
+      -msg_*)
+	func_quote_for_eval "$arg"
+	arg="$func_quote_for_eval_result"
+	;;
+
+      # Flags to be passed through unchanged, with rationale:
+      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
+      # -r[0-9][0-9]*        specify processor for the SGI compiler
+      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
+      # +DA*, +DD*           enable 64-bit mode for the HP compiler
+      # -q*                  compiler args for the IBM compiler
+      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
+      # -F/path              path to uninstalled frameworks, gcc on darwin
+      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
+      # @file                GCC response files
+      # -tp=*                Portland pgcc target processor selection
+      # --sysroot=*          for sysroot support
+      # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
+      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
+      -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
+        func_quote_for_eval "$arg"
+	arg="$func_quote_for_eval_result"
+        func_append compile_command " $arg"
+        func_append finalize_command " $arg"
+        func_append compiler_flags " $arg"
+        continue
+        ;;
+
+      # Some other compiler flag.
+      -* | +*)
+        func_quote_for_eval "$arg"
+	arg="$func_quote_for_eval_result"
+	;;
+
+      *.$objext)
+	# A standard object.
+	func_append objs " $arg"
+	;;
+
+      *.lo)
+	# A libtool-controlled object.
+
+	# Check to see that this really is a libtool object.
+	if func_lalib_unsafe_p "$arg"; then
+	  pic_object=
+	  non_pic_object=
+
+	  # Read the .lo file
+	  func_source "$arg"
+
+	  if test -z "$pic_object" ||
+	     test -z "$non_pic_object" ||
+	     test "$pic_object" = none &&
+	     test "$non_pic_object" = none; then
+	    func_fatal_error "cannot find name of object for \`$arg'"
+	  fi
+
+	  # Extract subdirectory from the argument.
+	  func_dirname "$arg" "/" ""
+	  xdir="$func_dirname_result"
+
+	  if test "$pic_object" != none; then
+	    # Prepend the subdirectory the object is found in.
+	    pic_object="$xdir$pic_object"
+
+	    if test "$prev" = dlfiles; then
+	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+		func_append dlfiles " $pic_object"
+		prev=
+		continue
+	      else
+		# If libtool objects are unsupported, then we need to preload.
+		prev=dlprefiles
+	      fi
+	    fi
+
+	    # CHECK ME:  I think I busted this.  -Ossama
+	    if test "$prev" = dlprefiles; then
+	      # Preload the old-style object.
+	      func_append dlprefiles " $pic_object"
+	      prev=
+	    fi
+
+	    # A PIC object.
+	    func_append libobjs " $pic_object"
+	    arg="$pic_object"
+	  fi
+
+	  # Non-PIC object.
+	  if test "$non_pic_object" != none; then
+	    # Prepend the subdirectory the object is found in.
+	    non_pic_object="$xdir$non_pic_object"
+
+	    # A standard non-PIC object
+	    func_append non_pic_objects " $non_pic_object"
+	    if test -z "$pic_object" || test "$pic_object" = none ; then
+	      arg="$non_pic_object"
+	    fi
+	  else
+	    # If the PIC object exists, use it instead.
+	    # $xdir was prepended to $pic_object above.
+	    non_pic_object="$pic_object"
+	    func_append non_pic_objects " $non_pic_object"
+	  fi
+	else
+	  # Only an error if not doing a dry-run.
+	  if $opt_dry_run; then
+	    # Extract subdirectory from the argument.
+	    func_dirname "$arg" "/" ""
+	    xdir="$func_dirname_result"
+
+	    func_lo2o "$arg"
+	    pic_object=$xdir$objdir/$func_lo2o_result
+	    non_pic_object=$xdir$func_lo2o_result
+	    func_append libobjs " $pic_object"
+	    func_append non_pic_objects " $non_pic_object"
+	  else
+	    func_fatal_error "\`$arg' is not a valid libtool object"
+	  fi
+	fi
+	;;
+
+      *.$libext)
+	# An archive.
+	func_append deplibs " $arg"
+	func_append old_deplibs " $arg"
+	continue
+	;;
+
+      *.la)
+	# A libtool-controlled library.
+
+	func_resolve_sysroot "$arg"
+	if test "$prev" = dlfiles; then
+	  # This library was specified with -dlopen.
+	  func_append dlfiles " $func_resolve_sysroot_result"
+	  prev=
+	elif test "$prev" = dlprefiles; then
+	  # The library was specified with -dlpreopen.
+	  func_append dlprefiles " $func_resolve_sysroot_result"
+	  prev=
+	else
+	  func_append deplibs " $func_resolve_sysroot_result"
+	fi
+	continue
+	;;
+
+      # Some other compiler argument.
+      *)
+	# Unknown arguments in both finalize_command and compile_command need
+	# to be aesthetically quoted because they are evaled later.
+	func_quote_for_eval "$arg"
+	arg="$func_quote_for_eval_result"
+	;;
+      esac # arg
+
+      # Now actually substitute the argument into the commands.
+      if test -n "$arg"; then
+	func_append compile_command " $arg"
+	func_append finalize_command " $arg"
+      fi
+    done # argument parsing loop
+
+    test -n "$prev" && \
+      func_fatal_help "the \`$prevarg' option requires an argument"
+
+    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
+      eval arg=\"$export_dynamic_flag_spec\"
+      func_append compile_command " $arg"
+      func_append finalize_command " $arg"
+    fi
+
+    oldlibs=
+    # calculate the name of the file, without its directory
+    func_basename "$output"
+    outputname="$func_basename_result"
+    libobjs_save="$libobjs"
+
+    if test -n "$shlibpath_var"; then
+      # get the directories listed in $shlibpath_var
+      eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`
+    else
+      shlib_search_path=
+    fi
+    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+
+    func_dirname "$output" "/" ""
+    output_objdir="$func_dirname_result$objdir"
+    func_to_tool_file "$output_objdir/"
+    tool_output_objdir=$func_to_tool_file_result
+    # Create the object directory.
+    func_mkdir_p "$output_objdir"
+
+    # Determine the type of output
+    case $output in
+    "")
+      func_fatal_help "you must specify an output file"
+      ;;
+    *.$libext) linkmode=oldlib ;;
+    *.lo | *.$objext) linkmode=obj ;;
+    *.la) linkmode=lib ;;
+    *) linkmode=prog ;; # Anything else should be a program.
+    esac
+
+    specialdeplibs=
+
+    libs=
+    # Find all interdependent deplibs by searching for libraries
+    # that are linked more than once (e.g. -la -lb -la)
+    for deplib in $deplibs; do
+      if $opt_preserve_dup_deps ; then
+	case "$libs " in
+	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
+	esac
+      fi
+      func_append libs " $deplib"
+    done
+
+    if test "$linkmode" = lib; then
+      libs="$predeps $libs $compiler_lib_search_path $postdeps"
+
+      # Compute libraries that are listed more than once in $predeps
+      # $postdeps and mark them as special (i.e., whose duplicates are
+      # not to be eliminated).
+      pre_post_deps=
+      if $opt_duplicate_compiler_generated_deps; then
+	for pre_post_dep in $predeps $postdeps; do
+	  case "$pre_post_deps " in
+	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
+	  esac
+	  func_append pre_post_deps " $pre_post_dep"
+	done
+      fi
+      pre_post_deps=
+    fi
+
+    deplibs=
+    newdependency_libs=
+    newlib_search_path=
+    need_relink=no # whether we're linking any uninstalled libtool libraries
+    notinst_deplibs= # not-installed libtool libraries
+    notinst_path= # paths that contain not-installed libtool libraries
+
+    case $linkmode in
+    lib)
+	passes="conv dlpreopen link"
+	for file in $dlfiles $dlprefiles; do
+	  case $file in
+	  *.la) ;;
+	  *)
+	    func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
+	    ;;
+	  esac
+	done
+	;;
+    prog)
+	compile_deplibs=
+	finalize_deplibs=
+	alldeplibs=no
+	newdlfiles=
+	newdlprefiles=
+	passes="conv scan dlopen dlpreopen link"
+	;;
+    *)  passes="conv"
+	;;
+    esac
+
+    for pass in $passes; do
+      # The preopen pass in lib mode reverses $deplibs; put it back here
+      # so that -L comes before libs that need it for instance...
+      if test "$linkmode,$pass" = "lib,link"; then
+	## FIXME: Find the place where the list is rebuilt in the wrong
+	##        order, and fix it there properly
+        tmp_deplibs=
+	for deplib in $deplibs; do
+	  tmp_deplibs="$deplib $tmp_deplibs"
+	done
+	deplibs="$tmp_deplibs"
+      fi
+
+      if test "$linkmode,$pass" = "lib,link" ||
+	 test "$linkmode,$pass" = "prog,scan"; then
+	libs="$deplibs"
+	deplibs=
+      fi
+      if test "$linkmode" = prog; then
+	case $pass in
+	dlopen) libs="$dlfiles" ;;
+	dlpreopen) libs="$dlprefiles" ;;
+	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
+	esac
+      fi
+      if test "$linkmode,$pass" = "lib,dlpreopen"; then
+	# Collect and forward deplibs of preopened libtool libs
+	for lib in $dlprefiles; do
+	  # Ignore non-libtool-libs
+	  dependency_libs=
+	  func_resolve_sysroot "$lib"
+	  case $lib in
+	  *.la)	func_source "$func_resolve_sysroot_result" ;;
+	  esac
+
+	  # Collect preopened libtool deplibs, except any this library
+	  # has declared as weak libs
+	  for deplib in $dependency_libs; do
+	    func_basename "$deplib"
+            deplib_base=$func_basename_result
+	    case " $weak_libs " in
+	    *" $deplib_base "*) ;;
+	    *) func_append deplibs " $deplib" ;;
+	    esac
+	  done
+	done
+	libs="$dlprefiles"
+      fi
+      if test "$pass" = dlopen; then
+	# Collect dlpreopened libraries
+	save_deplibs="$deplibs"
+	deplibs=
+      fi
+
+      for deplib in $libs; do
+	lib=
+	found=no
+	case $deplib in
+	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
+	  if test "$linkmode,$pass" = "prog,link"; then
+	    compile_deplibs="$deplib $compile_deplibs"
+	    finalize_deplibs="$deplib $finalize_deplibs"
+	  else
+	    func_append compiler_flags " $deplib"
+	    if test "$linkmode" = lib ; then
+		case "$new_inherited_linker_flags " in
+		    *" $deplib "*) ;;
+		    * ) func_append new_inherited_linker_flags " $deplib" ;;
+		esac
+	    fi
+	  fi
+	  continue
+	  ;;
+	-l*)
+	  if test "$linkmode" != lib && test "$linkmode" != prog; then
+	    func_warning "\`-l' is ignored for archives/objects"
+	    continue
+	  fi
+	  func_stripname '-l' '' "$deplib"
+	  name=$func_stripname_result
+	  if test "$linkmode" = lib; then
+	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
+	  else
+	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
+	  fi
+	  for searchdir in $searchdirs; do
+	    for search_ext in .la $std_shrext .so .a; do
+	      # Search the libtool library
+	      lib="$searchdir/lib${name}${search_ext}"
+	      if test -f "$lib"; then
+		if test "$search_ext" = ".la"; then
+		  found=yes
+		else
+		  found=no
+		fi
+		break 2
+	      fi
+	    done
+	  done
+	  if test "$found" != yes; then
+	    # deplib doesn't seem to be a libtool library
+	    if test "$linkmode,$pass" = "prog,link"; then
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    else
+	      deplibs="$deplib $deplibs"
+	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+	    fi
+	    continue
+	  else # deplib is a libtool library
+	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
+	    # We need to do some special things here, and not later.
+	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+	      case " $predeps $postdeps " in
+	      *" $deplib "*)
+		if func_lalib_p "$lib"; then
+		  library_names=
+		  old_library=
+		  func_source "$lib"
+		  for l in $old_library $library_names; do
+		    ll="$l"
+		  done
+		  if test "X$ll" = "X$old_library" ; then # only static version available
+		    found=no
+		    func_dirname "$lib" "" "."
+		    ladir="$func_dirname_result"
+		    lib=$ladir/$old_library
+		    if test "$linkmode,$pass" = "prog,link"; then
+		      compile_deplibs="$deplib $compile_deplibs"
+		      finalize_deplibs="$deplib $finalize_deplibs"
+		    else
+		      deplibs="$deplib $deplibs"
+		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+		    fi
+		    continue
+		  fi
+		fi
+		;;
+	      *) ;;
+	      esac
+	    fi
+	  fi
+	  ;; # -l
+	*.ltframework)
+	  if test "$linkmode,$pass" = "prog,link"; then
+	    compile_deplibs="$deplib $compile_deplibs"
+	    finalize_deplibs="$deplib $finalize_deplibs"
+	  else
+	    deplibs="$deplib $deplibs"
+	    if test "$linkmode" = lib ; then
+		case "$new_inherited_linker_flags " in
+		    *" $deplib "*) ;;
+		    * ) func_append new_inherited_linker_flags " $deplib" ;;
+		esac
+	    fi
+	  fi
+	  continue
+	  ;;
+	-L*)
+	  case $linkmode in
+	  lib)
+	    deplibs="$deplib $deplibs"
+	    test "$pass" = conv && continue
+	    newdependency_libs="$deplib $newdependency_libs"
+	    func_stripname '-L' '' "$deplib"
+	    func_resolve_sysroot "$func_stripname_result"
+	    func_append newlib_search_path " $func_resolve_sysroot_result"
+	    ;;
+	  prog)
+	    if test "$pass" = conv; then
+	      deplibs="$deplib $deplibs"
+	      continue
+	    fi
+	    if test "$pass" = scan; then
+	      deplibs="$deplib $deplibs"
+	    else
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    fi
+	    func_stripname '-L' '' "$deplib"
+	    func_resolve_sysroot "$func_stripname_result"
+	    func_append newlib_search_path " $func_resolve_sysroot_result"
+	    ;;
+	  *)
+	    func_warning "\`-L' is ignored for archives/objects"
+	    ;;
+	  esac # linkmode
+	  continue
+	  ;; # -L
+	-R*)
+	  if test "$pass" = link; then
+	    func_stripname '-R' '' "$deplib"
+	    func_resolve_sysroot "$func_stripname_result"
+	    dir=$func_resolve_sysroot_result
+	    # Make sure the xrpath contains only unique directories.
+	    case "$xrpath " in
+	    *" $dir "*) ;;
+	    *) func_append xrpath " $dir" ;;
+	    esac
+	  fi
+	  deplibs="$deplib $deplibs"
+	  continue
+	  ;;
+	*.la)
+	  func_resolve_sysroot "$deplib"
+	  lib=$func_resolve_sysroot_result
+	  ;;
+	*.$libext)
+	  if test "$pass" = conv; then
+	    deplibs="$deplib $deplibs"
+	    continue
+	  fi
+	  case $linkmode in
+	  lib)
+	    # Linking convenience modules into shared libraries is allowed,
+	    # but linking other static libraries is non-portable.
+	    case " $dlpreconveniencelibs " in
+	    *" $deplib "*) ;;
+	    *)
+	      valid_a_lib=no
+	      case $deplibs_check_method in
+		match_pattern*)
+		  set dummy $deplibs_check_method; shift
+		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
+		    | $EGREP "$match_pattern_regex" > /dev/null; then
+		    valid_a_lib=yes
+		  fi
+		;;
+		pass_all)
+		  valid_a_lib=yes
+		;;
+	      esac
+	      if test "$valid_a_lib" != yes; then
+		echo
+		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
+		echo "*** I have the capability to make that library automatically link in when"
+		echo "*** you link to this library.  But I can only do this if you have a"
+		echo "*** shared version of the library, which you do not appear to have"
+		echo "*** because the file extensions .$libext of this argument makes me believe"
+		echo "*** that it is just a static archive that I should not use here."
+	      else
+		echo
+		$ECHO "*** Warning: Linking the shared library $output against the"
+		$ECHO "*** static library $deplib is not portable!"
+		deplibs="$deplib $deplibs"
+	      fi
+	      ;;
+	    esac
+	    continue
+	    ;;
+	  prog)
+	    if test "$pass" != link; then
+	      deplibs="$deplib $deplibs"
+	    else
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    fi
+	    continue
+	    ;;
+	  esac # linkmode
+	  ;; # *.$libext
+	*.lo | *.$objext)
+	  if test "$pass" = conv; then
+	    deplibs="$deplib $deplibs"
+	  elif test "$linkmode" = prog; then
+	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+	      # If there is no dlopen support or we're linking statically,
+	      # we need to preload.
+	      func_append newdlprefiles " $deplib"
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    else
+	      func_append newdlfiles " $deplib"
+	    fi
+	  fi
+	  continue
+	  ;;
+	%DEPLIBS%)
+	  alldeplibs=yes
+	  continue
+	  ;;
+	esac # case $deplib
+
+	if test "$found" = yes || test -f "$lib"; then :
+	else
+	  func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
+	fi
+
+	# Check to see that this really is a libtool archive.
+	func_lalib_unsafe_p "$lib" \
+	  || func_fatal_error "\`$lib' is not a valid libtool archive"
+
+	func_dirname "$lib" "" "."
+	ladir="$func_dirname_result"
+
+	dlname=
+	dlopen=
+	dlpreopen=
+	libdir=
+	library_names=
+	old_library=
+	inherited_linker_flags=
+	# If the library was installed with an old release of libtool,
+	# it will not redefine variables installed, or shouldnotlink
+	installed=yes
+	shouldnotlink=no
+	avoidtemprpath=
+
+
+	# Read the .la file
+	func_source "$lib"
+
+	# Convert "-framework foo" to "foo.ltframework"
+	if test -n "$inherited_linker_flags"; then
+	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
+	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
+	    case " $new_inherited_linker_flags " in
+	      *" $tmp_inherited_linker_flag "*) ;;
+	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
+	    esac
+	  done
+	fi
+	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	if test "$linkmode,$pass" = "lib,link" ||
+	   test "$linkmode,$pass" = "prog,scan" ||
+	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
+	  test -n "$dlopen" && func_append dlfiles " $dlopen"
+	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
+	fi
+
+	if test "$pass" = conv; then
+	  # Only check for convenience libraries
+	  deplibs="$lib $deplibs"
+	  if test -z "$libdir"; then
+	    if test -z "$old_library"; then
+	      func_fatal_error "cannot find name of link library for \`$lib'"
+	    fi
+	    # It is a libtool convenience library, so add in its objects.
+	    func_append convenience " $ladir/$objdir/$old_library"
+	    func_append old_convenience " $ladir/$objdir/$old_library"
+	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
+	    func_fatal_error "\`$lib' is not a convenience library"
+	  fi
+	  tmp_libs=
+	  for deplib in $dependency_libs; do
+	    deplibs="$deplib $deplibs"
+	    if $opt_preserve_dup_deps ; then
+	      case "$tmp_libs " in
+	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+	      esac
+	    fi
+	    func_append tmp_libs " $deplib"
+	  done
+	  continue
+	fi # $pass = conv
+
+
+	# Get the name of the library we link against.
+	linklib=
+	if test -n "$old_library" &&
+	   { test "$prefer_static_libs" = yes ||
+	     test "$prefer_static_libs,$installed" = "built,no"; }; then
+	  linklib=$old_library
+	else
+	  for l in $old_library $library_names; do
+	    linklib="$l"
+	  done
+	fi
+	if test -z "$linklib"; then
+	  func_fatal_error "cannot find name of link library for \`$lib'"
+	fi
+
+	# This library was specified with -dlopen.
+	if test "$pass" = dlopen; then
+	  if test -z "$libdir"; then
+	    func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
+	  fi
+	  if test -z "$dlname" ||
+	     test "$dlopen_support" != yes ||
+	     test "$build_libtool_libs" = no; then
+	    # If there is no dlname, no dlopen support or we're linking
+	    # statically, we need to preload.  We also need to preload any
+	    # dependent libraries so libltdl's deplib preloader doesn't
+	    # bomb out in the load deplibs phase.
+	    func_append dlprefiles " $lib $dependency_libs"
+	  else
+	    func_append newdlfiles " $lib"
+	  fi
+	  continue
+	fi # $pass = dlopen
+
+	# We need an absolute path.
+	case $ladir in
+	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
+	*)
+	  abs_ladir=`cd "$ladir" && pwd`
+	  if test -z "$abs_ladir"; then
+	    func_warning "cannot determine absolute directory name of \`$ladir'"
+	    func_warning "passing it literally to the linker, although it might fail"
+	    abs_ladir="$ladir"
+	  fi
+	  ;;
+	esac
+	func_basename "$lib"
+	laname="$func_basename_result"
+
+	# Find the relevant object directory and library name.
+	if test "X$installed" = Xyes; then
+	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+	    func_warning "library \`$lib' was moved."
+	    dir="$ladir"
+	    absdir="$abs_ladir"
+	    libdir="$abs_ladir"
+	  else
+	    dir="$lt_sysroot$libdir"
+	    absdir="$lt_sysroot$libdir"
+	  fi
+	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
+	else
+	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+	    dir="$ladir"
+	    absdir="$abs_ladir"
+	    # Remove this search path later
+	    func_append notinst_path " $abs_ladir"
+	  else
+	    dir="$ladir/$objdir"
+	    absdir="$abs_ladir/$objdir"
+	    # Remove this search path later
+	    func_append notinst_path " $abs_ladir"
+	  fi
+	fi # $installed = yes
+	func_stripname 'lib' '.la' "$laname"
+	name=$func_stripname_result
+
+	# This library was specified with -dlpreopen.
+	if test "$pass" = dlpreopen; then
+	  if test -z "$libdir" && test "$linkmode" = prog; then
+	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
+	  fi
+	  case "$host" in
+	    # special handling for platforms with PE-DLLs.
+	    *cygwin* | *mingw* | *cegcc* )
+	      # Linker will automatically link against shared library if both
+	      # static and shared are present.  Therefore, ensure we extract
+	      # symbols from the import library if a shared library is present
+	      # (otherwise, the dlopen module name will be incorrect).  We do
+	      # this by putting the import library name into $newdlprefiles.
+	      # We recover the dlopen module name by 'saving' the la file
+	      # name in a special purpose variable, and (later) extracting the
+	      # dlname from the la file.
+	      if test -n "$dlname"; then
+	        func_tr_sh "$dir/$linklib"
+	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
+	        func_append newdlprefiles " $dir/$linklib"
+	      else
+	        func_append newdlprefiles " $dir/$old_library"
+	        # Keep a list of preopened convenience libraries to check
+	        # that they are being used correctly in the link pass.
+	        test -z "$libdir" && \
+	          func_append dlpreconveniencelibs " $dir/$old_library"
+	      fi
+	    ;;
+	    * )
+	      # Prefer using a static library (so that no silly _DYNAMIC symbols
+	      # are required to link).
+	      if test -n "$old_library"; then
+	        func_append newdlprefiles " $dir/$old_library"
+	        # Keep a list of preopened convenience libraries to check
+	        # that they are being used correctly in the link pass.
+	        test -z "$libdir" && \
+	          func_append dlpreconveniencelibs " $dir/$old_library"
+	      # Otherwise, use the dlname, so that lt_dlopen finds it.
+	      elif test -n "$dlname"; then
+	        func_append newdlprefiles " $dir/$dlname"
+	      else
+	        func_append newdlprefiles " $dir/$linklib"
+	      fi
+	    ;;
+	  esac
+	fi # $pass = dlpreopen
+
+	if test -z "$libdir"; then
+	  # Link the convenience library
+	  if test "$linkmode" = lib; then
+	    deplibs="$dir/$old_library $deplibs"
+	  elif test "$linkmode,$pass" = "prog,link"; then
+	    compile_deplibs="$dir/$old_library $compile_deplibs"
+	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
+	  else
+	    deplibs="$lib $deplibs" # used for prog,scan pass
+	  fi
+	  continue
+	fi
+
+
+	if test "$linkmode" = prog && test "$pass" != link; then
+	  func_append newlib_search_path " $ladir"
+	  deplibs="$lib $deplibs"
+
+	  linkalldeplibs=no
+	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
+	     test "$build_libtool_libs" = no; then
+	    linkalldeplibs=yes
+	  fi
+
+	  tmp_libs=
+	  for deplib in $dependency_libs; do
+	    case $deplib in
+	    -L*) func_stripname '-L' '' "$deplib"
+	         func_resolve_sysroot "$func_stripname_result"
+	         func_append newlib_search_path " $func_resolve_sysroot_result"
+		 ;;
+	    esac
+	    # Need to link against all dependency_libs?
+	    if test "$linkalldeplibs" = yes; then
+	      deplibs="$deplib $deplibs"
+	    else
+	      # Need to hardcode shared library paths
+	      # or/and link against static libraries
+	      newdependency_libs="$deplib $newdependency_libs"
+	    fi
+	    if $opt_preserve_dup_deps ; then
+	      case "$tmp_libs " in
+	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+	      esac
+	    fi
+	    func_append tmp_libs " $deplib"
+	  done # for deplib
+	  continue
+	fi # $linkmode = prog...
+
+	if test "$linkmode,$pass" = "prog,link"; then
+	  if test -n "$library_names" &&
+	     { { test "$prefer_static_libs" = no ||
+	         test "$prefer_static_libs,$installed" = "built,yes"; } ||
+	       test -z "$old_library"; }; then
+	    # We need to hardcode the library path
+	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
+	      # Make sure the rpath contains only unique directories.
+	      case "$temp_rpath:" in
+	      *"$absdir:"*) ;;
+	      *) func_append temp_rpath "$absdir:" ;;
+	      esac
+	    fi
+
+	    # Hardcode the library path.
+	    # Skip directories that are in the system default run-time
+	    # search path.
+	    case " $sys_lib_dlsearch_path " in
+	    *" $absdir "*) ;;
+	    *)
+	      case "$compile_rpath " in
+	      *" $absdir "*) ;;
+	      *) func_append compile_rpath " $absdir" ;;
+	      esac
+	      ;;
+	    esac
+	    case " $sys_lib_dlsearch_path " in
+	    *" $libdir "*) ;;
+	    *)
+	      case "$finalize_rpath " in
+	      *" $libdir "*) ;;
+	      *) func_append finalize_rpath " $libdir" ;;
+	      esac
+	      ;;
+	    esac
+	  fi # $linkmode,$pass = prog,link...
+
+	  if test "$alldeplibs" = yes &&
+	     { test "$deplibs_check_method" = pass_all ||
+	       { test "$build_libtool_libs" = yes &&
+		 test -n "$library_names"; }; }; then
+	    # We only need to search for static libraries
+	    continue
+	  fi
+	fi
+
+	link_static=no # Whether the deplib will be linked statically
+	use_static_libs=$prefer_static_libs
+	if test "$use_static_libs" = built && test "$installed" = yes; then
+	  use_static_libs=no
+	fi
+	if test -n "$library_names" &&
+	   { test "$use_static_libs" = no || test -z "$old_library"; }; then
+	  case $host in
+	  *cygwin* | *mingw* | *cegcc*)
+	      # No point in relinking DLLs because paths are not encoded
+	      func_append notinst_deplibs " $lib"
+	      need_relink=no
+	    ;;
+	  *)
+	    if test "$installed" = no; then
+	      func_append notinst_deplibs " $lib"
+	      need_relink=yes
+	    fi
+	    ;;
+	  esac
+	  # This is a shared library
+
+	  # Warn about portability, can't link against -module's on some
+	  # systems (darwin).  Don't bleat about dlopened modules though!
+	  dlopenmodule=""
+	  for dlpremoduletest in $dlprefiles; do
+	    if test "X$dlpremoduletest" = "X$lib"; then
+	      dlopenmodule="$dlpremoduletest"
+	      break
+	    fi
+	  done
+	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
+	    echo
+	    if test "$linkmode" = prog; then
+	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
+	    else
+	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
+	    fi
+	    $ECHO "*** $linklib is not portable!"
+	  fi
+	  if test "$linkmode" = lib &&
+	     test "$hardcode_into_libs" = yes; then
+	    # Hardcode the library path.
+	    # Skip directories that are in the system default run-time
+	    # search path.
+	    case " $sys_lib_dlsearch_path " in
+	    *" $absdir "*) ;;
+	    *)
+	      case "$compile_rpath " in
+	      *" $absdir "*) ;;
+	      *) func_append compile_rpath " $absdir" ;;
+	      esac
+	      ;;
+	    esac
+	    case " $sys_lib_dlsearch_path " in
+	    *" $libdir "*) ;;
+	    *)
+	      case "$finalize_rpath " in
+	      *" $libdir "*) ;;
+	      *) func_append finalize_rpath " $libdir" ;;
+	      esac
+	      ;;
+	    esac
+	  fi
+
+	  if test -n "$old_archive_from_expsyms_cmds"; then
+	    # figure out the soname
+	    set dummy $library_names
+	    shift
+	    realname="$1"
+	    shift
+	    libname=`eval "\\$ECHO \"$libname_spec\""`
+	    # use dlname if we got it. it's perfectly good, no?
+	    if test -n "$dlname"; then
+	      soname="$dlname"
+	    elif test -n "$soname_spec"; then
+	      # bleh windows
+	      case $host in
+	      *cygwin* | mingw* | *cegcc*)
+	        func_arith $current - $age
+		major=$func_arith_result
+		versuffix="-$major"
+		;;
+	      esac
+	      eval soname=\"$soname_spec\"
+	    else
+	      soname="$realname"
+	    fi
+
+	    # Make a new name for the extract_expsyms_cmds to use
+	    soroot="$soname"
+	    func_basename "$soroot"
+	    soname="$func_basename_result"
+	    func_stripname 'lib' '.dll' "$soname"
+	    newlib=libimp-$func_stripname_result.a
+
+	    # If the library has no export list, then create one now
+	    if test -f "$output_objdir/$soname-def"; then :
+	    else
+	      func_verbose "extracting exported symbol list from \`$soname'"
+	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
+	    fi
+
+	    # Create $newlib
+	    if test -f "$output_objdir/$newlib"; then :; else
+	      func_verbose "generating import library for \`$soname'"
+	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
+	    fi
+	    # make sure the library variables are pointing to the new library
+	    dir=$output_objdir
+	    linklib=$newlib
+	  fi # test -n "$old_archive_from_expsyms_cmds"
+
+	  if test "$linkmode" = prog || test "$opt_mode" != relink; then
+	    add_shlibpath=
+	    add_dir=
+	    add=
+	    lib_linked=yes
+	    case $hardcode_action in
+	    immediate | unsupported)
+	      if test "$hardcode_direct" = no; then
+		add="$dir/$linklib"
+		case $host in
+		  *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
+		  *-*-sysv4*uw2*) add_dir="-L$dir" ;;
+		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
+		    *-*-unixware7*) add_dir="-L$dir" ;;
+		  *-*-darwin* )
+		    # if the lib is a (non-dlopened) module then we can not
+		    # link against it, someone is ignoring the earlier warnings
+		    if /usr/bin/file -L $add 2> /dev/null |
+			 $GREP ": [^:]* bundle" >/dev/null ; then
+		      if test "X$dlopenmodule" != "X$lib"; then
+			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
+			if test -z "$old_library" ; then
+			  echo
+			  echo "*** And there doesn't seem to be a static archive available"
+			  echo "*** The link will probably fail, sorry"
+			else
+			  add="$dir/$old_library"
+			fi
+		      elif test -n "$old_library"; then
+			add="$dir/$old_library"
+		      fi
+		    fi
+		esac
+	      elif test "$hardcode_minus_L" = no; then
+		case $host in
+		*-*-sunos*) add_shlibpath="$dir" ;;
+		esac
+		add_dir="-L$dir"
+		add="-l$name"
+	      elif test "$hardcode_shlibpath_var" = no; then
+		add_shlibpath="$dir"
+		add="-l$name"
+	      else
+		lib_linked=no
+	      fi
+	      ;;
+	    relink)
+	      if test "$hardcode_direct" = yes &&
+	         test "$hardcode_direct_absolute" = no; then
+		add="$dir/$linklib"
+	      elif test "$hardcode_minus_L" = yes; then
+		add_dir="-L$absdir"
+		# Try looking first in the location we're being installed to.
+		if test -n "$inst_prefix_dir"; then
+		  case $libdir in
+		    [\\/]*)
+		      func_append add_dir " -L$inst_prefix_dir$libdir"
+		      ;;
+		  esac
+		fi
+		add="-l$name"
+	      elif test "$hardcode_shlibpath_var" = yes; then
+		add_shlibpath="$dir"
+		add="-l$name"
+	      else
+		lib_linked=no
+	      fi
+	      ;;
+	    *) lib_linked=no ;;
+	    esac
+
+	    if test "$lib_linked" != yes; then
+	      func_fatal_configuration "unsupported hardcode properties"
+	    fi
+
+	    if test -n "$add_shlibpath"; then
+	      case :$compile_shlibpath: in
+	      *":$add_shlibpath:"*) ;;
+	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
+	      esac
+	    fi
+	    if test "$linkmode" = prog; then
+	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
+	    else
+	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
+	      test -n "$add" && deplibs="$add $deplibs"
+	      if test "$hardcode_direct" != yes &&
+		 test "$hardcode_minus_L" != yes &&
+		 test "$hardcode_shlibpath_var" = yes; then
+		case :$finalize_shlibpath: in
+		*":$libdir:"*) ;;
+		*) func_append finalize_shlibpath "$libdir:" ;;
+		esac
+	      fi
+	    fi
+	  fi
+
+	  if test "$linkmode" = prog || test "$opt_mode" = relink; then
+	    add_shlibpath=
+	    add_dir=
+	    add=
+	    # Finalize command for both is simple: just hardcode it.
+	    if test "$hardcode_direct" = yes &&
+	       test "$hardcode_direct_absolute" = no; then
+	      add="$libdir/$linklib"
+	    elif test "$hardcode_minus_L" = yes; then
+	      add_dir="-L$libdir"
+	      add="-l$name"
+	    elif test "$hardcode_shlibpath_var" = yes; then
+	      case :$finalize_shlibpath: in
+	      *":$libdir:"*) ;;
+	      *) func_append finalize_shlibpath "$libdir:" ;;
+	      esac
+	      add="-l$name"
+	    elif test "$hardcode_automatic" = yes; then
+	      if test -n "$inst_prefix_dir" &&
+		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
+		add="$inst_prefix_dir$libdir/$linklib"
+	      else
+		add="$libdir/$linklib"
+	      fi
+	    else
+	      # We cannot seem to hardcode it, guess we'll fake it.
+	      add_dir="-L$libdir"
+	      # Try looking first in the location we're being installed to.
+	      if test -n "$inst_prefix_dir"; then
+		case $libdir in
+		  [\\/]*)
+		    func_append add_dir " -L$inst_prefix_dir$libdir"
+		    ;;
+		esac
+	      fi
+	      add="-l$name"
+	    fi
+
+	    if test "$linkmode" = prog; then
+	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
+	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
+	    else
+	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
+	      test -n "$add" && deplibs="$add $deplibs"
+	    fi
+	  fi
+	elif test "$linkmode" = prog; then
+	  # Here we assume that one of hardcode_direct or hardcode_minus_L
+	  # is not unsupported.  This is valid on all known static and
+	  # shared platforms.
+	  if test "$hardcode_direct" != unsupported; then
+	    test -n "$old_library" && linklib="$old_library"
+	    compile_deplibs="$dir/$linklib $compile_deplibs"
+	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
+	  else
+	    compile_deplibs="-l$name -L$dir $compile_deplibs"
+	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
+	  fi
+	elif test "$build_libtool_libs" = yes; then
+	  # Not a shared library
+	  if test "$deplibs_check_method" != pass_all; then
+	    # We're trying link a shared library against a static one
+	    # but the system doesn't support it.
+
+	    # Just print a warning and add the library to dependency_libs so
+	    # that the program can be linked against the static library.
+	    echo
+	    $ECHO "*** Warning: This system can not link to static lib archive $lib."
+	    echo "*** I have the capability to make that library automatically link in when"
+	    echo "*** you link to this library.  But I can only do this if you have a"
+	    echo "*** shared version of the library, which you do not appear to have."
+	    if test "$module" = yes; then
+	      echo "*** But as you try to build a module library, libtool will still create "
+	      echo "*** a static module, that should work as long as the dlopening application"
+	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
+	      if test -z "$global_symbol_pipe"; then
+		echo
+		echo "*** However, this would only work if libtool was able to extract symbol"
+		echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+		echo "*** not find such a program.  So, this module is probably useless."
+		echo "*** \`nm' from GNU binutils and a full rebuild may help."
+	      fi
+	      if test "$build_old_libs" = no; then
+		build_libtool_libs=module
+		build_old_libs=yes
+	      else
+		build_libtool_libs=no
+	      fi
+	    fi
+	  else
+	    deplibs="$dir/$old_library $deplibs"
+	    link_static=yes
+	  fi
+	fi # link shared/static library?
+
+	if test "$linkmode" = lib; then
+	  if test -n "$dependency_libs" &&
+	     { test "$hardcode_into_libs" != yes ||
+	       test "$build_old_libs" = yes ||
+	       test "$link_static" = yes; }; then
+	    # Extract -R from dependency_libs
+	    temp_deplibs=
+	    for libdir in $dependency_libs; do
+	      case $libdir in
+	      -R*) func_stripname '-R' '' "$libdir"
+	           temp_xrpath=$func_stripname_result
+		   case " $xrpath " in
+		   *" $temp_xrpath "*) ;;
+		   *) func_append xrpath " $temp_xrpath";;
+		   esac;;
+	      *) func_append temp_deplibs " $libdir";;
+	      esac
+	    done
+	    dependency_libs="$temp_deplibs"
+	  fi
+
+	  func_append newlib_search_path " $absdir"
+	  # Link against this library
+	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+	  # ... and its dependency_libs
+	  tmp_libs=
+	  for deplib in $dependency_libs; do
+	    newdependency_libs="$deplib $newdependency_libs"
+	    case $deplib in
+              -L*) func_stripname '-L' '' "$deplib"
+                   func_resolve_sysroot "$func_stripname_result";;
+              *) func_resolve_sysroot "$deplib" ;;
+            esac
+	    if $opt_preserve_dup_deps ; then
+	      case "$tmp_libs " in
+	      *" $func_resolve_sysroot_result "*)
+                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
+	      esac
+	    fi
+	    func_append tmp_libs " $func_resolve_sysroot_result"
+	  done
+
+	  if test "$link_all_deplibs" != no; then
+	    # Add the search paths of all dependency libraries
+	    for deplib in $dependency_libs; do
+	      path=
+	      case $deplib in
+	      -L*) path="$deplib" ;;
+	      *.la)
+	        func_resolve_sysroot "$deplib"
+	        deplib=$func_resolve_sysroot_result
+	        func_dirname "$deplib" "" "."
+		dir=$func_dirname_result
+		# We need an absolute path.
+		case $dir in
+		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
+		*)
+		  absdir=`cd "$dir" && pwd`
+		  if test -z "$absdir"; then
+		    func_warning "cannot determine absolute directory name of \`$dir'"
+		    absdir="$dir"
+		  fi
+		  ;;
+		esac
+		if $GREP "^installed=no" $deplib > /dev/null; then
+		case $host in
+		*-*-darwin*)
+		  depdepl=
+		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
+		  if test -n "$deplibrary_names" ; then
+		    for tmp in $deplibrary_names ; do
+		      depdepl=$tmp
+		    done
+		    if test -f "$absdir/$objdir/$depdepl" ; then
+		      depdepl="$absdir/$objdir/$depdepl"
+		      darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+                      if test -z "$darwin_install_name"; then
+                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
+                      fi
+		      func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
+		      func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}"
+		      path=
+		    fi
+		  fi
+		  ;;
+		*)
+		  path="-L$absdir/$objdir"
+		  ;;
+		esac
+		else
+		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+		  test -z "$libdir" && \
+		    func_fatal_error "\`$deplib' is not a valid libtool archive"
+		  test "$absdir" != "$libdir" && \
+		    func_warning "\`$deplib' seems to be moved"
+
+		  path="-L$absdir"
+		fi
+		;;
+	      esac
+	      case " $deplibs " in
+	      *" $path "*) ;;
+	      *) deplibs="$path $deplibs" ;;
+	      esac
+	    done
+	  fi # link_all_deplibs != no
+	fi # linkmode = lib
+      done # for deplib in $libs
+      if test "$pass" = link; then
+	if test "$linkmode" = "prog"; then
+	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
+	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
+	else
+	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	fi
+      fi
+      dependency_libs="$newdependency_libs"
+      if test "$pass" = dlpreopen; then
+	# Link the dlpreopened libraries before other libraries
+	for deplib in $save_deplibs; do
+	  deplibs="$deplib $deplibs"
+	done
+      fi
+      if test "$pass" != dlopen; then
+	if test "$pass" != conv; then
+	  # Make sure lib_search_path contains only unique directories.
+	  lib_search_path=
+	  for dir in $newlib_search_path; do
+	    case "$lib_search_path " in
+	    *" $dir "*) ;;
+	    *) func_append lib_search_path " $dir" ;;
+	    esac
+	  done
+	  newlib_search_path=
+	fi
+
+	if test "$linkmode,$pass" != "prog,link"; then
+	  vars="deplibs"
+	else
+	  vars="compile_deplibs finalize_deplibs"
+	fi
+	for var in $vars dependency_libs; do
+	  # Add libraries to $var in reverse order
+	  eval tmp_libs=\"\$$var\"
+	  new_libs=
+	  for deplib in $tmp_libs; do
+	    # FIXME: Pedantically, this is the right thing to do, so
+	    #        that some nasty dependency loop isn't accidentally
+	    #        broken:
+	    #new_libs="$deplib $new_libs"
+	    # Pragmatically, this seems to cause very few problems in
+	    # practice:
+	    case $deplib in
+	    -L*) new_libs="$deplib $new_libs" ;;
+	    -R*) ;;
+	    *)
+	      # And here is the reason: when a library appears more
+	      # than once as an explicit dependence of a library, or
+	      # is implicitly linked in more than once by the
+	      # compiler, it is considered special, and multiple
+	      # occurrences thereof are not removed.  Compare this
+	      # with having the same library being listed as a
+	      # dependency of multiple other libraries: in this case,
+	      # we know (pedantically, we assume) the library does not
+	      # need to be listed more than once, so we keep only the
+	      # last copy.  This is not always right, but it is rare
+	      # enough that we require users that really mean to play
+	      # such unportable linking tricks to link the library
+	      # using -Wl,-lname, so that libtool does not consider it
+	      # for duplicate removal.
+	      case " $specialdeplibs " in
+	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
+	      *)
+		case " $new_libs " in
+		*" $deplib "*) ;;
+		*) new_libs="$deplib $new_libs" ;;
+		esac
+		;;
+	      esac
+	      ;;
+	    esac
+	  done
+	  tmp_libs=
+	  for deplib in $new_libs; do
+	    case $deplib in
+	    -L*)
+	      case " $tmp_libs " in
+	      *" $deplib "*) ;;
+	      *) func_append tmp_libs " $deplib" ;;
+	      esac
+	      ;;
+	    *) func_append tmp_libs " $deplib" ;;
+	    esac
+	  done
+	  eval $var=\"$tmp_libs\"
+	done # for var
+      fi
+      # Last step: remove runtime libs from dependency_libs
+      # (they stay in deplibs)
+      tmp_libs=
+      for i in $dependency_libs ; do
+	case " $predeps $postdeps $compiler_lib_search_path " in
+	*" $i "*)
+	  i=""
+	  ;;
+	esac
+	if test -n "$i" ; then
+	  func_append tmp_libs " $i"
+	fi
+      done
+      dependency_libs=$tmp_libs
+    done # for pass
+    if test "$linkmode" = prog; then
+      dlfiles="$newdlfiles"
+    fi
+    if test "$linkmode" = prog || test "$linkmode" = lib; then
+      dlprefiles="$newdlprefiles"
+    fi
+
+    case $linkmode in
+    oldlib)
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+	func_warning "\`-dlopen' is ignored for archives"
+      fi
+
+      case " $deplibs" in
+      *\ -l* | *\ -L*)
+	func_warning "\`-l' and \`-L' are ignored for archives" ;;
+      esac
+
+      test -n "$rpath" && \
+	func_warning "\`-rpath' is ignored for archives"
+
+      test -n "$xrpath" && \
+	func_warning "\`-R' is ignored for archives"
+
+      test -n "$vinfo" && \
+	func_warning "\`-version-info/-version-number' is ignored for archives"
+
+      test -n "$release" && \
+	func_warning "\`-release' is ignored for archives"
+
+      test -n "$export_symbols$export_symbols_regex" && \
+	func_warning "\`-export-symbols' is ignored for archives"
+
+      # Now set the variables for building old libraries.
+      build_libtool_libs=no
+      oldlibs="$output"
+      func_append objs "$old_deplibs"
+      ;;
+
+    lib)
+      # Make sure we only generate libraries of the form `libNAME.la'.
+      case $outputname in
+      lib*)
+	func_stripname 'lib' '.la' "$outputname"
+	name=$func_stripname_result
+	eval shared_ext=\"$shrext_cmds\"
+	eval libname=\"$libname_spec\"
+	;;
+      *)
+	test "$module" = no && \
+	  func_fatal_help "libtool library \`$output' must begin with \`lib'"
+
+	if test "$need_lib_prefix" != no; then
+	  # Add the "lib" prefix for modules if required
+	  func_stripname '' '.la' "$outputname"
+	  name=$func_stripname_result
+	  eval shared_ext=\"$shrext_cmds\"
+	  eval libname=\"$libname_spec\"
+	else
+	  func_stripname '' '.la' "$outputname"
+	  libname=$func_stripname_result
+	fi
+	;;
+      esac
+
+      if test -n "$objs"; then
+	if test "$deplibs_check_method" != pass_all; then
+	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
+	else
+	  echo
+	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
+	  $ECHO "*** objects $objs is not portable!"
+	  func_append libobjs " $objs"
+	fi
+      fi
+
+      test "$dlself" != no && \
+	func_warning "\`-dlopen self' is ignored for libtool libraries"
+
+      set dummy $rpath
+      shift
+      test "$#" -gt 1 && \
+	func_warning "ignoring multiple \`-rpath's for a libtool library"
+
+      install_libdir="$1"
+
+      oldlibs=
+      if test -z "$rpath"; then
+	if test "$build_libtool_libs" = yes; then
+	  # Building a libtool convenience library.
+	  # Some compilers have problems with a `.al' extension so
+	  # convenience libraries should have the same extension an
+	  # archive normally would.
+	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
+	  build_libtool_libs=convenience
+	  build_old_libs=yes
+	fi
+
+	test -n "$vinfo" && \
+	  func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
+
+	test -n "$release" && \
+	  func_warning "\`-release' is ignored for convenience libraries"
+      else
+
+	# Parse the version information argument.
+	save_ifs="$IFS"; IFS=':'
+	set dummy $vinfo 0 0 0
+	shift
+	IFS="$save_ifs"
+
+	test -n "$7" && \
+	  func_fatal_help "too many parameters to \`-version-info'"
+
+	# convert absolute version numbers to libtool ages
+	# this retains compatibility with .la files and attempts
+	# to make the code below a bit more comprehensible
+
+	case $vinfo_number in
+	yes)
+	  number_major="$1"
+	  number_minor="$2"
+	  number_revision="$3"
+	  #
+	  # There are really only two kinds -- those that
+	  # use the current revision as the major version
+	  # and those that subtract age and use age as
+	  # a minor version.  But, then there is irix
+	  # which has an extra 1 added just for fun
+	  #
+	  case $version_type in
+	  # correct linux to gnu/linux during the next big refactor
+	  darwin|linux|osf|windows|none)
+	    func_arith $number_major + $number_minor
+	    current=$func_arith_result
+	    age="$number_minor"
+	    revision="$number_revision"
+	    ;;
+	  freebsd-aout|freebsd-elf|qnx|sunos)
+	    current="$number_major"
+	    revision="$number_minor"
+	    age="0"
+	    ;;
+	  irix|nonstopux)
+	    func_arith $number_major + $number_minor
+	    current=$func_arith_result
+	    age="$number_minor"
+	    revision="$number_minor"
+	    lt_irix_increment=no
+	    ;;
+	  esac
+	  ;;
+	no)
+	  current="$1"
+	  revision="$2"
+	  age="$3"
+	  ;;
+	esac
+
+	# Check that each of the things are valid numbers.
+	case $current in
+	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+	*)
+	  func_error "CURRENT \`$current' must be a nonnegative integer"
+	  func_fatal_error "\`$vinfo' is not valid version information"
+	  ;;
+	esac
+
+	case $revision in
+	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+	*)
+	  func_error "REVISION \`$revision' must be a nonnegative integer"
+	  func_fatal_error "\`$vinfo' is not valid version information"
+	  ;;
+	esac
+
+	case $age in
+	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+	*)
+	  func_error "AGE \`$age' must be a nonnegative integer"
+	  func_fatal_error "\`$vinfo' is not valid version information"
+	  ;;
+	esac
+
+	if test "$age" -gt "$current"; then
+	  func_error "AGE \`$age' is greater than the current interface number \`$current'"
+	  func_fatal_error "\`$vinfo' is not valid version information"
+	fi
+
+	# Calculate the version variables.
+	major=
+	versuffix=
+	verstring=
+	case $version_type in
+	none) ;;
+
+	darwin)
+	  # Like Linux, but with the current version available in
+	  # verstring for coding it into the library header
+	  func_arith $current - $age
+	  major=.$func_arith_result
+	  versuffix="$major.$age.$revision"
+	  # Darwin ld doesn't like 0 for these options...
+	  func_arith $current + 1
+	  minor_current=$func_arith_result
+	  xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
+	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+	  ;;
+
+	freebsd-aout)
+	  major=".$current"
+	  versuffix=".$current.$revision";
+	  ;;
+
+	freebsd-elf)
+	  major=".$current"
+	  versuffix=".$current"
+	  ;;
+
+	irix | nonstopux)
+	  if test "X$lt_irix_increment" = "Xno"; then
+	    func_arith $current - $age
+	  else
+	    func_arith $current - $age + 1
+	  fi
+	  major=$func_arith_result
+
+	  case $version_type in
+	    nonstopux) verstring_prefix=nonstopux ;;
+	    *)         verstring_prefix=sgi ;;
+	  esac
+	  verstring="$verstring_prefix$major.$revision"
+
+	  # Add in all the interfaces that we are compatible with.
+	  loop=$revision
+	  while test "$loop" -ne 0; do
+	    func_arith $revision - $loop
+	    iface=$func_arith_result
+	    func_arith $loop - 1
+	    loop=$func_arith_result
+	    verstring="$verstring_prefix$major.$iface:$verstring"
+	  done
+
+	  # Before this point, $major must not contain `.'.
+	  major=.$major
+	  versuffix="$major.$revision"
+	  ;;
+
+	linux) # correct to gnu/linux during the next big refactor
+	  func_arith $current - $age
+	  major=.$func_arith_result
+	  versuffix="$major.$age.$revision"
+	  ;;
+
+	osf)
+	  func_arith $current - $age
+	  major=.$func_arith_result
+	  versuffix=".$current.$age.$revision"
+	  verstring="$current.$age.$revision"
+
+	  # Add in all the interfaces that we are compatible with.
+	  loop=$age
+	  while test "$loop" -ne 0; do
+	    func_arith $current - $loop
+	    iface=$func_arith_result
+	    func_arith $loop - 1
+	    loop=$func_arith_result
+	    verstring="$verstring:${iface}.0"
+	  done
+
+	  # Make executables depend on our current version.
+	  func_append verstring ":${current}.0"
+	  ;;
+
+	qnx)
+	  major=".$current"
+	  versuffix=".$current"
+	  ;;
+
+	sunos)
+	  major=".$current"
+	  versuffix=".$current.$revision"
+	  ;;
+
+	windows)
+	  # Use '-' rather than '.', since we only want one
+	  # extension on DOS 8.3 filesystems.
+	  func_arith $current - $age
+	  major=$func_arith_result
+	  versuffix="-$major"
+	  ;;
+
+	*)
+	  func_fatal_configuration "unknown library version type \`$version_type'"
+	  ;;
+	esac
+
+	# Clear the version info if we defaulted, and they specified a release.
+	if test -z "$vinfo" && test -n "$release"; then
+	  major=
+	  case $version_type in
+	  darwin)
+	    # we can't check for "0.0" in archive_cmds due to quoting
+	    # problems, so we reset it completely
+	    verstring=
+	    ;;
+	  *)
+	    verstring="0.0"
+	    ;;
+	  esac
+	  if test "$need_version" = no; then
+	    versuffix=
+	  else
+	    versuffix=".0.0"
+	  fi
+	fi
+
+	# Remove version info from name if versioning should be avoided
+	if test "$avoid_version" = yes && test "$need_version" = no; then
+	  major=
+	  versuffix=
+	  verstring=""
+	fi
+
+	# Check to see if the archive will have undefined symbols.
+	if test "$allow_undefined" = yes; then
+	  if test "$allow_undefined_flag" = unsupported; then
+	    func_warning "undefined symbols not allowed in $host shared libraries"
+	    build_libtool_libs=no
+	    build_old_libs=yes
+	  fi
+	else
+	  # Don't allow undefined symbols.
+	  allow_undefined_flag="$no_undefined_flag"
+	fi
+
+      fi
+
+      func_generate_dlsyms "$libname" "$libname" "yes"
+      func_append libobjs " $symfileobj"
+      test "X$libobjs" = "X " && libobjs=
+
+      if test "$opt_mode" != relink; then
+	# Remove our outputs, but don't remove object files since they
+	# may have been created when compiling PIC objects.
+	removelist=
+	tempremovelist=`$ECHO "$output_objdir/*"`
+	for p in $tempremovelist; do
+	  case $p in
+	    *.$objext | *.gcno)
+	       ;;
+	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
+	       if test "X$precious_files_regex" != "X"; then
+		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
+		 then
+		   continue
+		 fi
+	       fi
+	       func_append removelist " $p"
+	       ;;
+	    *) ;;
+	  esac
+	done
+	test -n "$removelist" && \
+	  func_show_eval "${RM}r \$removelist"
+      fi
+
+      # Now set the variables for building old libraries.
+      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
+	func_append oldlibs " $output_objdir/$libname.$libext"
+
+	# Transform .lo files to .o files.
+	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
+      fi
+
+      # Eliminate all temporary directories.
+      #for path in $notinst_path; do
+      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
+      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
+      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
+      #done
+
+      if test -n "$xrpath"; then
+	# If the user specified any rpath flags, then add them.
+	temp_xrpath=
+	for libdir in $xrpath; do
+	  func_replace_sysroot "$libdir"
+	  func_append temp_xrpath " -R$func_replace_sysroot_result"
+	  case "$finalize_rpath " in
+	  *" $libdir "*) ;;
+	  *) func_append finalize_rpath " $libdir" ;;
+	  esac
+	done
+	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
+	  dependency_libs="$temp_xrpath $dependency_libs"
+	fi
+      fi
+
+      # Make sure dlfiles contains only unique files that won't be dlpreopened
+      old_dlfiles="$dlfiles"
+      dlfiles=
+      for lib in $old_dlfiles; do
+	case " $dlprefiles $dlfiles " in
+	*" $lib "*) ;;
+	*) func_append dlfiles " $lib" ;;
+	esac
+      done
+
+      # Make sure dlprefiles contains only unique files
+      old_dlprefiles="$dlprefiles"
+      dlprefiles=
+      for lib in $old_dlprefiles; do
+	case "$dlprefiles " in
+	*" $lib "*) ;;
+	*) func_append dlprefiles " $lib" ;;
+	esac
+      done
+
+      if test "$build_libtool_libs" = yes; then
+	if test -n "$rpath"; then
+	  case $host in
+	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
+	    # these systems don't actually have a c library (as such)!
+	    ;;
+	  *-*-rhapsody* | *-*-darwin1.[012])
+	    # Rhapsody C library is in the System framework
+	    func_append deplibs " System.ltframework"
+	    ;;
+	  *-*-netbsd*)
+	    # Don't link with libc until the a.out ld.so is fixed.
+	    ;;
+	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+	    # Do not include libc due to us having libc/libc_r.
+	    ;;
+	  *-*-sco3.2v5* | *-*-sco5v6*)
+	    # Causes problems with __ctype
+	    ;;
+	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+	    # Compiler inserts libc in the correct place for threads to work
+	    ;;
+	  *)
+	    # Add libc to deplibs on all other systems if necessary.
+	    if test "$build_libtool_need_lc" = "yes"; then
+	      func_append deplibs " -lc"
+	    fi
+	    ;;
+	  esac
+	fi
+
+	# Transform deplibs into only deplibs that can be linked in shared.
+	name_save=$name
+	libname_save=$libname
+	release_save=$release
+	versuffix_save=$versuffix
+	major_save=$major
+	# I'm not sure if I'm treating the release correctly.  I think
+	# release should show up in the -l (ie -lgmp5) so we don't want to
+	# add it in twice.  Is that correct?
+	release=""
+	versuffix=""
+	major=""
+	newdeplibs=
+	droppeddeps=no
+	case $deplibs_check_method in
+	pass_all)
+	  # Don't check for shared/static.  Everything works.
+	  # This might be a little naive.  We might want to check
+	  # whether the library exists or not.  But this is on
+	  # osf3 & osf4 and I'm not really sure... Just
+	  # implementing what was already the behavior.
+	  newdeplibs=$deplibs
+	  ;;
+	test_compile)
+	  # This code stresses the "libraries are programs" paradigm to its
+	  # limits. Maybe even breaks it.  We compile a program, linking it
+	  # against the deplibs as a proxy for the library.  Then we can check
+	  # whether they linked in statically or dynamically with ldd.
+	  $opt_dry_run || $RM conftest.c
+	  cat > conftest.c <<EOF
+	  int main() { return 0; }
+EOF
+	  $opt_dry_run || $RM conftest
+	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
+	    ldd_output=`ldd conftest`
+	    for i in $deplibs; do
+	      case $i in
+	      -l*)
+		func_stripname -l '' "$i"
+		name=$func_stripname_result
+		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+		  case " $predeps $postdeps " in
+		  *" $i "*)
+		    func_append newdeplibs " $i"
+		    i=""
+		    ;;
+		  esac
+		fi
+		if test -n "$i" ; then
+		  libname=`eval "\\$ECHO \"$libname_spec\""`
+		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+		  set dummy $deplib_matches; shift
+		  deplib_match=$1
+		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+		    func_append newdeplibs " $i"
+		  else
+		    droppeddeps=yes
+		    echo
+		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+		    echo "*** I have the capability to make that library automatically link in when"
+		    echo "*** you link to this library.  But I can only do this if you have a"
+		    echo "*** shared version of the library, which I believe you do not have"
+		    echo "*** because a test_compile did reveal that the linker did not use it for"
+		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
+		  fi
+		fi
+		;;
+	      *)
+		func_append newdeplibs " $i"
+		;;
+	      esac
+	    done
+	  else
+	    # Error occurred in the first compile.  Let's try to salvage
+	    # the situation: Compile a separate program for each library.
+	    for i in $deplibs; do
+	      case $i in
+	      -l*)
+		func_stripname -l '' "$i"
+		name=$func_stripname_result
+		$opt_dry_run || $RM conftest
+		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
+		  ldd_output=`ldd conftest`
+		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+		    case " $predeps $postdeps " in
+		    *" $i "*)
+		      func_append newdeplibs " $i"
+		      i=""
+		      ;;
+		    esac
+		  fi
+		  if test -n "$i" ; then
+		    libname=`eval "\\$ECHO \"$libname_spec\""`
+		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+		    set dummy $deplib_matches; shift
+		    deplib_match=$1
+		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+		      func_append newdeplibs " $i"
+		    else
+		      droppeddeps=yes
+		      echo
+		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+		      echo "*** I have the capability to make that library automatically link in when"
+		      echo "*** you link to this library.  But I can only do this if you have a"
+		      echo "*** shared version of the library, which you do not appear to have"
+		      echo "*** because a test_compile did reveal that the linker did not use this one"
+		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
+		    fi
+		  fi
+		else
+		  droppeddeps=yes
+		  echo
+		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
+		  echo "*** make it link in!  You will probably need to install it or some"
+		  echo "*** library that it depends on before this library will be fully"
+		  echo "*** functional.  Installing it before continuing would be even better."
+		fi
+		;;
+	      *)
+		func_append newdeplibs " $i"
+		;;
+	      esac
+	    done
+	  fi
+	  ;;
+	file_magic*)
+	  set dummy $deplibs_check_method; shift
+	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+	  for a_deplib in $deplibs; do
+	    case $a_deplib in
+	    -l*)
+	      func_stripname -l '' "$a_deplib"
+	      name=$func_stripname_result
+	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+		case " $predeps $postdeps " in
+		*" $a_deplib "*)
+		  func_append newdeplibs " $a_deplib"
+		  a_deplib=""
+		  ;;
+		esac
+	      fi
+	      if test -n "$a_deplib" ; then
+		libname=`eval "\\$ECHO \"$libname_spec\""`
+		if test -n "$file_magic_glob"; then
+		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
+		else
+		  libnameglob=$libname
+		fi
+		test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
+		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+		  if test "$want_nocaseglob" = yes; then
+		    shopt -s nocaseglob
+		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+		    $nocaseglob
+		  else
+		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+		  fi
+		  for potent_lib in $potential_libs; do
+		      # Follow soft links.
+		      if ls -lLd "$potent_lib" 2>/dev/null |
+			 $GREP " -> " >/dev/null; then
+			continue
+		      fi
+		      # The statement above tries to avoid entering an
+		      # endless loop below, in case of cyclic links.
+		      # We might still enter an endless loop, since a link
+		      # loop can be closed while we follow links,
+		      # but so what?
+		      potlib="$potent_lib"
+		      while test -h "$potlib" 2>/dev/null; do
+			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
+			case $potliblink in
+			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
+			*) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
+			esac
+		      done
+		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
+			 $SED -e 10q |
+			 $EGREP "$file_magic_regex" > /dev/null; then
+			func_append newdeplibs " $a_deplib"
+			a_deplib=""
+			break 2
+		      fi
+		  done
+		done
+	      fi
+	      if test -n "$a_deplib" ; then
+		droppeddeps=yes
+		echo
+		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+		echo "*** I have the capability to make that library automatically link in when"
+		echo "*** you link to this library.  But I can only do this if you have a"
+		echo "*** shared version of the library, which you do not appear to have"
+		echo "*** because I did check the linker path looking for a file starting"
+		if test -z "$potlib" ; then
+		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
+		else
+		  $ECHO "*** with $libname and none of the candidates passed a file format test"
+		  $ECHO "*** using a file magic. Last file checked: $potlib"
+		fi
+	      fi
+	      ;;
+	    *)
+	      # Add a -L argument.
+	      func_append newdeplibs " $a_deplib"
+	      ;;
+	    esac
+	  done # Gone through all deplibs.
+	  ;;
+	match_pattern*)
+	  set dummy $deplibs_check_method; shift
+	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+	  for a_deplib in $deplibs; do
+	    case $a_deplib in
+	    -l*)
+	      func_stripname -l '' "$a_deplib"
+	      name=$func_stripname_result
+	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+		case " $predeps $postdeps " in
+		*" $a_deplib "*)
+		  func_append newdeplibs " $a_deplib"
+		  a_deplib=""
+		  ;;
+		esac
+	      fi
+	      if test -n "$a_deplib" ; then
+		libname=`eval "\\$ECHO \"$libname_spec\""`
+		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+		  for potent_lib in $potential_libs; do
+		    potlib="$potent_lib" # see symlink-check above in file_magic test
+		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
+		       $EGREP "$match_pattern_regex" > /dev/null; then
+		      func_append newdeplibs " $a_deplib"
+		      a_deplib=""
+		      break 2
+		    fi
+		  done
+		done
+	      fi
+	      if test -n "$a_deplib" ; then
+		droppeddeps=yes
+		echo
+		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+		echo "*** I have the capability to make that library automatically link in when"
+		echo "*** you link to this library.  But I can only do this if you have a"
+		echo "*** shared version of the library, which you do not appear to have"
+		echo "*** because I did check the linker path looking for a file starting"
+		if test -z "$potlib" ; then
+		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
+		else
+		  $ECHO "*** with $libname and none of the candidates passed a file format test"
+		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
+		fi
+	      fi
+	      ;;
+	    *)
+	      # Add a -L argument.
+	      func_append newdeplibs " $a_deplib"
+	      ;;
+	    esac
+	  done # Gone through all deplibs.
+	  ;;
+	none | unknown | *)
+	  newdeplibs=""
+	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
+	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+	    for i in $predeps $postdeps ; do
+	      # can't use Xsed below, because $i might contain '/'
+	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
+	    done
+	  fi
+	  case $tmp_deplibs in
+	  *[!\	\ ]*)
+	    echo
+	    if test "X$deplibs_check_method" = "Xnone"; then
+	      echo "*** Warning: inter-library dependencies are not supported in this platform."
+	    else
+	      echo "*** Warning: inter-library dependencies are not known to be supported."
+	    fi
+	    echo "*** All declared inter-library dependencies are being dropped."
+	    droppeddeps=yes
+	    ;;
+	  esac
+	  ;;
+	esac
+	versuffix=$versuffix_save
+	major=$major_save
+	release=$release_save
+	libname=$libname_save
+	name=$name_save
+
+	case $host in
+	*-*-rhapsody* | *-*-darwin1.[012])
+	  # On Rhapsody replace the C library with the System framework
+	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
+	  ;;
+	esac
+
+	if test "$droppeddeps" = yes; then
+	  if test "$module" = yes; then
+	    echo
+	    echo "*** Warning: libtool could not satisfy all declared inter-library"
+	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
+	    echo "*** a static module, that should work as long as the dlopening"
+	    echo "*** application is linked with the -dlopen flag."
+	    if test -z "$global_symbol_pipe"; then
+	      echo
+	      echo "*** However, this would only work if libtool was able to extract symbol"
+	      echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+	      echo "*** not find such a program.  So, this module is probably useless."
+	      echo "*** \`nm' from GNU binutils and a full rebuild may help."
+	    fi
+	    if test "$build_old_libs" = no; then
+	      oldlibs="$output_objdir/$libname.$libext"
+	      build_libtool_libs=module
+	      build_old_libs=yes
+	    else
+	      build_libtool_libs=no
+	    fi
+	  else
+	    echo "*** The inter-library dependencies that have been dropped here will be"
+	    echo "*** automatically added whenever a program is linked with this library"
+	    echo "*** or is declared to -dlopen it."
+
+	    if test "$allow_undefined" = no; then
+	      echo
+	      echo "*** Since this library must not contain undefined symbols,"
+	      echo "*** because either the platform does not support them or"
+	      echo "*** it was explicitly requested with -no-undefined,"
+	      echo "*** libtool will only create a static version of it."
+	      if test "$build_old_libs" = no; then
+		oldlibs="$output_objdir/$libname.$libext"
+		build_libtool_libs=module
+		build_old_libs=yes
+	      else
+		build_libtool_libs=no
+	      fi
+	    fi
+	  fi
+	fi
+	# Done checking deplibs!
+	deplibs=$newdeplibs
+      fi
+      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+      case $host in
+	*-*-darwin*)
+	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	  ;;
+      esac
+
+      # move library search paths that coincide with paths to not yet
+      # installed libraries to the beginning of the library search list
+      new_libs=
+      for path in $notinst_path; do
+	case " $new_libs " in
+	*" -L$path/$objdir "*) ;;
+	*)
+	  case " $deplibs " in
+	  *" -L$path/$objdir "*)
+	    func_append new_libs " -L$path/$objdir" ;;
+	  esac
+	  ;;
+	esac
+      done
+      for deplib in $deplibs; do
+	case $deplib in
+	-L*)
+	  case " $new_libs " in
+	  *" $deplib "*) ;;
+	  *) func_append new_libs " $deplib" ;;
+	  esac
+	  ;;
+	*) func_append new_libs " $deplib" ;;
+	esac
+      done
+      deplibs="$new_libs"
+
+      # All the library-specific variables (install_libdir is set above).
+      library_names=
+      old_library=
+      dlname=
+
+      # Test again, we may have decided not to build it any more
+      if test "$build_libtool_libs" = yes; then
+	# Remove ${wl} instances when linking with ld.
+	# FIXME: should test the right _cmds variable.
+	case $archive_cmds in
+	  *\$LD\ *) wl= ;;
+        esac
+	if test "$hardcode_into_libs" = yes; then
+	  # Hardcode the library paths
+	  hardcode_libdirs=
+	  dep_rpath=
+	  rpath="$finalize_rpath"
+	  test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
+	  for libdir in $rpath; do
+	    if test -n "$hardcode_libdir_flag_spec"; then
+	      if test -n "$hardcode_libdir_separator"; then
+		func_replace_sysroot "$libdir"
+		libdir=$func_replace_sysroot_result
+		if test -z "$hardcode_libdirs"; then
+		  hardcode_libdirs="$libdir"
+		else
+		  # Just accumulate the unique libdirs.
+		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+		    ;;
+		  *)
+		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+		    ;;
+		  esac
+		fi
+	      else
+		eval flag=\"$hardcode_libdir_flag_spec\"
+		func_append dep_rpath " $flag"
+	      fi
+	    elif test -n "$runpath_var"; then
+	      case "$perm_rpath " in
+	      *" $libdir "*) ;;
+	      *) func_append perm_rpath " $libdir" ;;
+	      esac
+	    fi
+	  done
+	  # Substitute the hardcoded libdirs into the rpath.
+	  if test -n "$hardcode_libdir_separator" &&
+	     test -n "$hardcode_libdirs"; then
+	    libdir="$hardcode_libdirs"
+	    eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
+	  fi
+	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
+	    # We should set the runpath_var.
+	    rpath=
+	    for dir in $perm_rpath; do
+	      func_append rpath "$dir:"
+	    done
+	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
+	  fi
+	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
+	fi
+
+	shlibpath="$finalize_shlibpath"
+	test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+	if test -n "$shlibpath"; then
+	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
+	fi
+
+	# Get the real and link names of the library.
+	eval shared_ext=\"$shrext_cmds\"
+	eval library_names=\"$library_names_spec\"
+	set dummy $library_names
+	shift
+	realname="$1"
+	shift
+
+	if test -n "$soname_spec"; then
+	  eval soname=\"$soname_spec\"
+	else
+	  soname="$realname"
+	fi
+	if test -z "$dlname"; then
+	  dlname=$soname
+	fi
+
+	lib="$output_objdir/$realname"
+	linknames=
+	for link
+	do
+	  func_append linknames " $link"
+	done
+
+	# Use standard objects if they are pic
+	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
+	test "X$libobjs" = "X " && libobjs=
+
+	delfiles=
+	if test -n "$export_symbols" && test -n "$include_expsyms"; then
+	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
+	  export_symbols="$output_objdir/$libname.uexp"
+	  func_append delfiles " $export_symbols"
+	fi
+
+	orig_export_symbols=
+	case $host_os in
+	cygwin* | mingw* | cegcc*)
+	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
+	    # exporting using user supplied symfile
+	    if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
+	      # and it's NOT already a .def file. Must figure out
+	      # which of the given symbols are data symbols and tag
+	      # them as such. So, trigger use of export_symbols_cmds.
+	      # export_symbols gets reassigned inside the "prepare
+	      # the list of exported symbols" if statement, so the
+	      # include_expsyms logic still works.
+	      orig_export_symbols="$export_symbols"
+	      export_symbols=
+	      always_export_symbols=yes
+	    fi
+	  fi
+	  ;;
+	esac
+
+	# Prepare the list of exported symbols
+	if test -z "$export_symbols"; then
+	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
+	    func_verbose "generating symbol list for \`$libname.la'"
+	    export_symbols="$output_objdir/$libname.exp"
+	    $opt_dry_run || $RM $export_symbols
+	    cmds=$export_symbols_cmds
+	    save_ifs="$IFS"; IFS='~'
+	    for cmd1 in $cmds; do
+	      IFS="$save_ifs"
+	      # Take the normal branch if the nm_file_list_spec branch
+	      # doesn't work or if tool conversion is not needed.
+	      case $nm_file_list_spec~$to_tool_file_cmd in
+		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
+		  try_normal_branch=yes
+		  eval cmd=\"$cmd1\"
+		  func_len " $cmd"
+		  len=$func_len_result
+		  ;;
+		*)
+		  try_normal_branch=no
+		  ;;
+	      esac
+	      if test "$try_normal_branch" = yes \
+		 && { test "$len" -lt "$max_cmd_len" \
+		      || test "$max_cmd_len" -le -1; }
+	      then
+		func_show_eval "$cmd" 'exit $?'
+		skipped_export=false
+	      elif test -n "$nm_file_list_spec"; then
+		func_basename "$output"
+		output_la=$func_basename_result
+		save_libobjs=$libobjs
+		save_output=$output
+		output=${output_objdir}/${output_la}.nm
+		func_to_tool_file "$output"
+		libobjs=$nm_file_list_spec$func_to_tool_file_result
+		func_append delfiles " $output"
+		func_verbose "creating $NM input file list: $output"
+		for obj in $save_libobjs; do
+		  func_to_tool_file "$obj"
+		  $ECHO "$func_to_tool_file_result"
+		done > "$output"
+		eval cmd=\"$cmd1\"
+		func_show_eval "$cmd" 'exit $?'
+		output=$save_output
+		libobjs=$save_libobjs
+		skipped_export=false
+	      else
+		# The command line is too long to execute in one step.
+		func_verbose "using reloadable object file for export list..."
+		skipped_export=:
+		# Break out early, otherwise skipped_export may be
+		# set to false by a later but shorter cmd.
+		break
+	      fi
+	    done
+	    IFS="$save_ifs"
+	    if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
+	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+	    fi
+	  fi
+	fi
+
+	if test -n "$export_symbols" && test -n "$include_expsyms"; then
+	  tmp_export_symbols="$export_symbols"
+	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
+	fi
+
+	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
+	  # The given exports_symbols file has to be filtered, so filter it.
+	  func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
+	  # 's' commands which not all seds can handle. GNU sed should be fine
+	  # though. Also, the filter scales superlinearly with the number of
+	  # global variables. join(1) would be nice here, but unfortunately
+	  # isn't a blessed tool.
+	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
+	  export_symbols=$output_objdir/$libname.def
+	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+	fi
+
+	tmp_deplibs=
+	for test_deplib in $deplibs; do
+	  case " $convenience " in
+	  *" $test_deplib "*) ;;
+	  *)
+	    func_append tmp_deplibs " $test_deplib"
+	    ;;
+	  esac
+	done
+	deplibs="$tmp_deplibs"
+
+	if test -n "$convenience"; then
+	  if test -n "$whole_archive_flag_spec" &&
+	    test "$compiler_needs_object" = yes &&
+	    test -z "$libobjs"; then
+	    # extract the archives, so we have objects to list.
+	    # TODO: could optimize this to just extract one archive.
+	    whole_archive_flag_spec=
+	  fi
+	  if test -n "$whole_archive_flag_spec"; then
+	    save_libobjs=$libobjs
+	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+	    test "X$libobjs" = "X " && libobjs=
+	  else
+	    gentop="$output_objdir/${outputname}x"
+	    func_append generated " $gentop"
+
+	    func_extract_archives $gentop $convenience
+	    func_append libobjs " $func_extract_archives_result"
+	    test "X$libobjs" = "X " && libobjs=
+	  fi
+	fi
+
+	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
+	  eval flag=\"$thread_safe_flag_spec\"
+	  func_append linker_flags " $flag"
+	fi
+
+	# Make a backup of the uninstalled library when relinking
+	if test "$opt_mode" = relink; then
+	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
+	fi
+
+	# Do each of the archive commands.
+	if test "$module" = yes && test -n "$module_cmds" ; then
+	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+	    eval test_cmds=\"$module_expsym_cmds\"
+	    cmds=$module_expsym_cmds
+	  else
+	    eval test_cmds=\"$module_cmds\"
+	    cmds=$module_cmds
+	  fi
+	else
+	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+	    eval test_cmds=\"$archive_expsym_cmds\"
+	    cmds=$archive_expsym_cmds
+	  else
+	    eval test_cmds=\"$archive_cmds\"
+	    cmds=$archive_cmds
+	  fi
+	fi
+
+	if test "X$skipped_export" != "X:" &&
+	   func_len " $test_cmds" &&
+	   len=$func_len_result &&
+	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+	  :
+	else
+	  # The command line is too long to link in one step, link piecewise
+	  # or, if using GNU ld and skipped_export is not :, use a linker
+	  # script.
+
+	  # Save the value of $output and $libobjs because we want to
+	  # use them later.  If we have whole_archive_flag_spec, we
+	  # want to use save_libobjs as it was before
+	  # whole_archive_flag_spec was expanded, because we can't
+	  # assume the linker understands whole_archive_flag_spec.
+	  # This may have to be revisited, in case too many
+	  # convenience libraries get linked in and end up exceeding
+	  # the spec.
+	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
+	    save_libobjs=$libobjs
+	  fi
+	  save_output=$output
+	  func_basename "$output"
+	  output_la=$func_basename_result
+
+	  # Clear the reloadable object creation command queue and
+	  # initialize k to one.
+	  test_cmds=
+	  concat_cmds=
+	  objlist=
+	  last_robj=
+	  k=1
+
+	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
+	    output=${output_objdir}/${output_la}.lnkscript
+	    func_verbose "creating GNU ld script: $output"
+	    echo 'INPUT (' > $output
+	    for obj in $save_libobjs
+	    do
+	      func_to_tool_file "$obj"
+	      $ECHO "$func_to_tool_file_result" >> $output
+	    done
+	    echo ')' >> $output
+	    func_append delfiles " $output"
+	    func_to_tool_file "$output"
+	    output=$func_to_tool_file_result
+	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
+	    output=${output_objdir}/${output_la}.lnk
+	    func_verbose "creating linker input file list: $output"
+	    : > $output
+	    set x $save_libobjs
+	    shift
+	    firstobj=
+	    if test "$compiler_needs_object" = yes; then
+	      firstobj="$1 "
+	      shift
+	    fi
+	    for obj
+	    do
+	      func_to_tool_file "$obj"
+	      $ECHO "$func_to_tool_file_result" >> $output
+	    done
+	    func_append delfiles " $output"
+	    func_to_tool_file "$output"
+	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
+	  else
+	    if test -n "$save_libobjs"; then
+	      func_verbose "creating reloadable object files..."
+	      output=$output_objdir/$output_la-${k}.$objext
+	      eval test_cmds=\"$reload_cmds\"
+	      func_len " $test_cmds"
+	      len0=$func_len_result
+	      len=$len0
+
+	      # Loop over the list of objects to be linked.
+	      for obj in $save_libobjs
+	      do
+		func_len " $obj"
+		func_arith $len + $func_len_result
+		len=$func_arith_result
+		if test "X$objlist" = X ||
+		   test "$len" -lt "$max_cmd_len"; then
+		  func_append objlist " $obj"
+		else
+		  # The command $test_cmds is almost too long, add a
+		  # command to the queue.
+		  if test "$k" -eq 1 ; then
+		    # The first file doesn't have a previous command to add.
+		    reload_objs=$objlist
+		    eval concat_cmds=\"$reload_cmds\"
+		  else
+		    # All subsequent reloadable object files will link in
+		    # the last one created.
+		    reload_objs="$objlist $last_robj"
+		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
+		  fi
+		  last_robj=$output_objdir/$output_la-${k}.$objext
+		  func_arith $k + 1
+		  k=$func_arith_result
+		  output=$output_objdir/$output_la-${k}.$objext
+		  objlist=" $obj"
+		  func_len " $last_robj"
+		  func_arith $len0 + $func_len_result
+		  len=$func_arith_result
+		fi
+	      done
+	      # Handle the remaining objects by creating one last
+	      # reloadable object file.  All subsequent reloadable object
+	      # files will link in the last one created.
+	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+	      reload_objs="$objlist $last_robj"
+	      eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
+	      if test -n "$last_robj"; then
+	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
+	      fi
+	      func_append delfiles " $output"
+
+	    else
+	      output=
+	    fi
+
+	    if ${skipped_export-false}; then
+	      func_verbose "generating symbol list for \`$libname.la'"
+	      export_symbols="$output_objdir/$libname.exp"
+	      $opt_dry_run || $RM $export_symbols
+	      libobjs=$output
+	      # Append the command to create the export file.
+	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
+	      if test -n "$last_robj"; then
+		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
+	      fi
+	    fi
+
+	    test -n "$save_libobjs" &&
+	      func_verbose "creating a temporary reloadable object file: $output"
+
+	    # Loop through the commands generated above and execute them.
+	    save_ifs="$IFS"; IFS='~'
+	    for cmd in $concat_cmds; do
+	      IFS="$save_ifs"
+	      $opt_silent || {
+		  func_quote_for_expand "$cmd"
+		  eval "func_echo $func_quote_for_expand_result"
+	      }
+	      $opt_dry_run || eval "$cmd" || {
+		lt_exit=$?
+
+		# Restore the uninstalled library and exit
+		if test "$opt_mode" = relink; then
+		  ( cd "$output_objdir" && \
+		    $RM "${realname}T" && \
+		    $MV "${realname}U" "$realname" )
+		fi
+
+		exit $lt_exit
+	      }
+	    done
+	    IFS="$save_ifs"
+
+	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
+	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+	    fi
+	  fi
+
+          if ${skipped_export-false}; then
+	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
+	      tmp_export_symbols="$export_symbols"
+	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
+	    fi
+
+	    if test -n "$orig_export_symbols"; then
+	      # The given exports_symbols file has to be filtered, so filter it.
+	      func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
+	      # 's' commands which not all seds can handle. GNU sed should be fine
+	      # though. Also, the filter scales superlinearly with the number of
+	      # global variables. join(1) would be nice here, but unfortunately
+	      # isn't a blessed tool.
+	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
+	      export_symbols=$output_objdir/$libname.def
+	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+	    fi
+	  fi
+
+	  libobjs=$output
+	  # Restore the value of output.
+	  output=$save_output
+
+	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
+	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+	    test "X$libobjs" = "X " && libobjs=
+	  fi
+	  # Expand the library linking commands again to reset the
+	  # value of $libobjs for piecewise linking.
+
+	  # Do each of the archive commands.
+	  if test "$module" = yes && test -n "$module_cmds" ; then
+	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+	      cmds=$module_expsym_cmds
+	    else
+	      cmds=$module_cmds
+	    fi
+	  else
+	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+	      cmds=$archive_expsym_cmds
+	    else
+	      cmds=$archive_cmds
+	    fi
+	  fi
+	fi
+
+	if test -n "$delfiles"; then
+	  # Append the command to remove temporary files to $cmds.
+	  eval cmds=\"\$cmds~\$RM $delfiles\"
+	fi
+
+	# Add any objects from preloaded convenience libraries
+	if test -n "$dlprefiles"; then
+	  gentop="$output_objdir/${outputname}x"
+	  func_append generated " $gentop"
+
+	  func_extract_archives $gentop $dlprefiles
+	  func_append libobjs " $func_extract_archives_result"
+	  test "X$libobjs" = "X " && libobjs=
+	fi
+
+	save_ifs="$IFS"; IFS='~'
+	for cmd in $cmds; do
+	  IFS="$save_ifs"
+	  eval cmd=\"$cmd\"
+	  $opt_silent || {
+	    func_quote_for_expand "$cmd"
+	    eval "func_echo $func_quote_for_expand_result"
+	  }
+	  $opt_dry_run || eval "$cmd" || {
+	    lt_exit=$?
+
+	    # Restore the uninstalled library and exit
+	    if test "$opt_mode" = relink; then
+	      ( cd "$output_objdir" && \
+	        $RM "${realname}T" && \
+		$MV "${realname}U" "$realname" )
+	    fi
+
+	    exit $lt_exit
+	  }
+	done
+	IFS="$save_ifs"
+
+	# Restore the uninstalled library and exit
+	if test "$opt_mode" = relink; then
+	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
+
+	  if test -n "$convenience"; then
+	    if test -z "$whole_archive_flag_spec"; then
+	      func_show_eval '${RM}r "$gentop"'
+	    fi
+	  fi
+
+	  exit $EXIT_SUCCESS
+	fi
+
+	# Create links to the real library.
+	for linkname in $linknames; do
+	  if test "$realname" != "$linkname"; then
+	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
+	  fi
+	done
+
+	# If -module or -export-dynamic was specified, set the dlname.
+	if test "$module" = yes || test "$export_dynamic" = yes; then
+	  # On all known operating systems, these are identical.
+	  dlname="$soname"
+	fi
+      fi
+      ;;
+
+    obj)
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+	func_warning "\`-dlopen' is ignored for objects"
+      fi
+
+      case " $deplibs" in
+      *\ -l* | *\ -L*)
+	func_warning "\`-l' and \`-L' are ignored for objects" ;;
+      esac
+
+      test -n "$rpath" && \
+	func_warning "\`-rpath' is ignored for objects"
+
+      test -n "$xrpath" && \
+	func_warning "\`-R' is ignored for objects"
+
+      test -n "$vinfo" && \
+	func_warning "\`-version-info' is ignored for objects"
+
+      test -n "$release" && \
+	func_warning "\`-release' is ignored for objects"
+
+      case $output in
+      *.lo)
+	test -n "$objs$old_deplibs" && \
+	  func_fatal_error "cannot build library object \`$output' from non-libtool objects"
+
+	libobj=$output
+	func_lo2o "$libobj"
+	obj=$func_lo2o_result
+	;;
+      *)
+	libobj=
+	obj="$output"
+	;;
+      esac
+
+      # Delete the old objects.
+      $opt_dry_run || $RM $obj $libobj
+
+      # Objects from convenience libraries.  This assumes
+      # single-version convenience libraries.  Whenever we create
+      # different ones for PIC/non-PIC, this we'll have to duplicate
+      # the extraction.
+      reload_conv_objs=
+      gentop=
+      # reload_cmds runs $LD directly, so let us get rid of
+      # -Wl from whole_archive_flag_spec and hope we can get by with
+      # turning comma into space..
+      wl=
+
+      if test -n "$convenience"; then
+	if test -n "$whole_archive_flag_spec"; then
+	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
+	  reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
+	else
+	  gentop="$output_objdir/${obj}x"
+	  func_append generated " $gentop"
+
+	  func_extract_archives $gentop $convenience
+	  reload_conv_objs="$reload_objs $func_extract_archives_result"
+	fi
+      fi
+
+      # If we're not building shared, we need to use non_pic_objs
+      test "$build_libtool_libs" != yes && libobjs="$non_pic_objects"
+
+      # Create the old-style object.
+      reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
+
+      output="$obj"
+      func_execute_cmds "$reload_cmds" 'exit $?'
+
+      # Exit if we aren't doing a library object file.
+      if test -z "$libobj"; then
+	if test -n "$gentop"; then
+	  func_show_eval '${RM}r "$gentop"'
+	fi
+
+	exit $EXIT_SUCCESS
+      fi
+
+      if test "$build_libtool_libs" != yes; then
+	if test -n "$gentop"; then
+	  func_show_eval '${RM}r "$gentop"'
+	fi
+
+	# Create an invalid libtool object if no PIC, so that we don't
+	# accidentally link it into a program.
+	# $show "echo timestamp > $libobj"
+	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
+	exit $EXIT_SUCCESS
+      fi
+
+      if test -n "$pic_flag" || test "$pic_mode" != default; then
+	# Only do commands if we really have different PIC objects.
+	reload_objs="$libobjs $reload_conv_objs"
+	output="$libobj"
+	func_execute_cmds "$reload_cmds" 'exit $?'
+      fi
+
+      if test -n "$gentop"; then
+	func_show_eval '${RM}r "$gentop"'
+      fi
+
+      exit $EXIT_SUCCESS
+      ;;
+
+    prog)
+      case $host in
+	*cygwin*) func_stripname '' '.exe' "$output"
+	          output=$func_stripname_result.exe;;
+      esac
+      test -n "$vinfo" && \
+	func_warning "\`-version-info' is ignored for programs"
+
+      test -n "$release" && \
+	func_warning "\`-release' is ignored for programs"
+
+      test "$preload" = yes \
+        && test "$dlopen_support" = unknown \
+	&& test "$dlopen_self" = unknown \
+	&& test "$dlopen_self_static" = unknown && \
+	  func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
+
+      case $host in
+      *-*-rhapsody* | *-*-darwin1.[012])
+	# On Rhapsody replace the C library is the System framework
+	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
+	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
+	;;
+      esac
+
+      case $host in
+      *-*-darwin*)
+	# Don't allow lazy linking, it breaks C++ global constructors
+	# But is supposedly fixed on 10.4 or later (yay!).
+	if test "$tagname" = CXX ; then
+	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
+	    10.[0123])
+	      func_append compile_command " ${wl}-bind_at_load"
+	      func_append finalize_command " ${wl}-bind_at_load"
+	    ;;
+	  esac
+	fi
+	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
+	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	;;
+      esac
+
+
+      # move library search paths that coincide with paths to not yet
+      # installed libraries to the beginning of the library search list
+      new_libs=
+      for path in $notinst_path; do
+	case " $new_libs " in
+	*" -L$path/$objdir "*) ;;
+	*)
+	  case " $compile_deplibs " in
+	  *" -L$path/$objdir "*)
+	    func_append new_libs " -L$path/$objdir" ;;
+	  esac
+	  ;;
+	esac
+      done
+      for deplib in $compile_deplibs; do
+	case $deplib in
+	-L*)
+	  case " $new_libs " in
+	  *" $deplib "*) ;;
+	  *) func_append new_libs " $deplib" ;;
+	  esac
+	  ;;
+	*) func_append new_libs " $deplib" ;;
+	esac
+      done
+      compile_deplibs="$new_libs"
+
+
+      func_append compile_command " $compile_deplibs"
+      func_append finalize_command " $finalize_deplibs"
+
+      if test -n "$rpath$xrpath"; then
+	# If the user specified any rpath flags, then add them.
+	for libdir in $rpath $xrpath; do
+	  # This is the magic to use -rpath.
+	  case "$finalize_rpath " in
+	  *" $libdir "*) ;;
+	  *) func_append finalize_rpath " $libdir" ;;
+	  esac
+	done
+      fi
+
+      # Now hardcode the library paths
+      rpath=
+      hardcode_libdirs=
+      for libdir in $compile_rpath $finalize_rpath; do
+	if test -n "$hardcode_libdir_flag_spec"; then
+	  if test -n "$hardcode_libdir_separator"; then
+	    if test -z "$hardcode_libdirs"; then
+	      hardcode_libdirs="$libdir"
+	    else
+	      # Just accumulate the unique libdirs.
+	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+		;;
+	      *)
+		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+		;;
+	      esac
+	    fi
+	  else
+	    eval flag=\"$hardcode_libdir_flag_spec\"
+	    func_append rpath " $flag"
+	  fi
+	elif test -n "$runpath_var"; then
+	  case "$perm_rpath " in
+	  *" $libdir "*) ;;
+	  *) func_append perm_rpath " $libdir" ;;
+	  esac
+	fi
+	case $host in
+	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+	  testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
+	  case :$dllsearchpath: in
+	  *":$libdir:"*) ;;
+	  ::) dllsearchpath=$libdir;;
+	  *) func_append dllsearchpath ":$libdir";;
+	  esac
+	  case :$dllsearchpath: in
+	  *":$testbindir:"*) ;;
+	  ::) dllsearchpath=$testbindir;;
+	  *) func_append dllsearchpath ":$testbindir";;
+	  esac
+	  ;;
+	esac
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+	 test -n "$hardcode_libdirs"; then
+	libdir="$hardcode_libdirs"
+	eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      compile_rpath="$rpath"
+
+      rpath=
+      hardcode_libdirs=
+      for libdir in $finalize_rpath; do
+	if test -n "$hardcode_libdir_flag_spec"; then
+	  if test -n "$hardcode_libdir_separator"; then
+	    if test -z "$hardcode_libdirs"; then
+	      hardcode_libdirs="$libdir"
+	    else
+	      # Just accumulate the unique libdirs.
+	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+		;;
+	      *)
+		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+		;;
+	      esac
+	    fi
+	  else
+	    eval flag=\"$hardcode_libdir_flag_spec\"
+	    func_append rpath " $flag"
+	  fi
+	elif test -n "$runpath_var"; then
+	  case "$finalize_perm_rpath " in
+	  *" $libdir "*) ;;
+	  *) func_append finalize_perm_rpath " $libdir" ;;
+	  esac
+	fi
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+	 test -n "$hardcode_libdirs"; then
+	libdir="$hardcode_libdirs"
+	eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      finalize_rpath="$rpath"
+
+      if test -n "$libobjs" && test "$build_old_libs" = yes; then
+	# Transform all the library objects into standard objects.
+	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
+	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
+      fi
+
+      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
+
+      # template prelinking step
+      if test -n "$prelink_cmds"; then
+	func_execute_cmds "$prelink_cmds" 'exit $?'
+      fi
+
+      wrappers_required=yes
+      case $host in
+      *cegcc* | *mingw32ce*)
+        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
+        wrappers_required=no
+        ;;
+      *cygwin* | *mingw* )
+        if test "$build_libtool_libs" != yes; then
+          wrappers_required=no
+        fi
+        ;;
+      *)
+        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
+          wrappers_required=no
+        fi
+        ;;
+      esac
+      if test "$wrappers_required" = no; then
+	# Replace the output file specification.
+	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
+	link_command="$compile_command$compile_rpath"
+
+	# We have no uninstalled library dependencies, so finalize right now.
+	exit_status=0
+	func_show_eval "$link_command" 'exit_status=$?'
+
+	if test -n "$postlink_cmds"; then
+	  func_to_tool_file "$output"
+	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+	  func_execute_cmds "$postlink_cmds" 'exit $?'
+	fi
+
+	# Delete the generated files.
+	if test -f "$output_objdir/${outputname}S.${objext}"; then
+	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
+	fi
+
+	exit $exit_status
+      fi
+
+      if test -n "$compile_shlibpath$finalize_shlibpath"; then
+	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
+      fi
+      if test -n "$finalize_shlibpath"; then
+	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
+      fi
+
+      compile_var=
+      finalize_var=
+      if test -n "$runpath_var"; then
+	if test -n "$perm_rpath"; then
+	  # We should set the runpath_var.
+	  rpath=
+	  for dir in $perm_rpath; do
+	    func_append rpath "$dir:"
+	  done
+	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
+	fi
+	if test -n "$finalize_perm_rpath"; then
+	  # We should set the runpath_var.
+	  rpath=
+	  for dir in $finalize_perm_rpath; do
+	    func_append rpath "$dir:"
+	  done
+	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
+	fi
+      fi
+
+      if test "$no_install" = yes; then
+	# We don't need to create a wrapper script.
+	link_command="$compile_var$compile_command$compile_rpath"
+	# Replace the output file specification.
+	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
+	# Delete the old output file.
+	$opt_dry_run || $RM $output
+	# Link the executable and exit
+	func_show_eval "$link_command" 'exit $?'
+
+	if test -n "$postlink_cmds"; then
+	  func_to_tool_file "$output"
+	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+	  func_execute_cmds "$postlink_cmds" 'exit $?'
+	fi
+
+	exit $EXIT_SUCCESS
+      fi
+
+      if test "$hardcode_action" = relink; then
+	# Fast installation is not supported
+	link_command="$compile_var$compile_command$compile_rpath"
+	relink_command="$finalize_var$finalize_command$finalize_rpath"
+
+	func_warning "this platform does not like uninstalled shared libraries"
+	func_warning "\`$output' will be relinked during installation"
+      else
+	if test "$fast_install" != no; then
+	  link_command="$finalize_var$compile_command$finalize_rpath"
+	  if test "$fast_install" = yes; then
+	    relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
+	  else
+	    # fast_install is set to needless
+	    relink_command=
+	  fi
+	else
+	  link_command="$compile_var$compile_command$compile_rpath"
+	  relink_command="$finalize_var$finalize_command$finalize_rpath"
+	fi
+      fi
+
+      # Replace the output file specification.
+      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+
+      # Delete the old output files.
+      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
+
+      func_show_eval "$link_command" 'exit $?'
+
+      if test -n "$postlink_cmds"; then
+	func_to_tool_file "$output_objdir/$outputname"
+	postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+	func_execute_cmds "$postlink_cmds" 'exit $?'
+      fi
+
+      # Now create the wrapper script.
+      func_verbose "creating $output"
+
+      # Quote the relink command for shipping.
+      if test -n "$relink_command"; then
+	# Preserve any variables that may affect compiler behavior
+	for var in $variables_saved_for_relink; do
+	  if eval test -z \"\${$var+set}\"; then
+	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+	  elif eval var_value=\$$var; test -z "$var_value"; then
+	    relink_command="$var=; export $var; $relink_command"
+	  else
+	    func_quote_for_eval "$var_value"
+	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+	  fi
+	done
+	relink_command="(cd `pwd`; $relink_command)"
+	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
+      fi
+
+      # Only actually do things if not in dry run mode.
+      $opt_dry_run || {
+	# win32 will think the script is a binary if it has
+	# a .exe suffix, so we strip it off here.
+	case $output in
+	  *.exe) func_stripname '' '.exe' "$output"
+	         output=$func_stripname_result ;;
+	esac
+	# test for cygwin because mv fails w/o .exe extensions
+	case $host in
+	  *cygwin*)
+	    exeext=.exe
+	    func_stripname '' '.exe' "$outputname"
+	    outputname=$func_stripname_result ;;
+	  *) exeext= ;;
+	esac
+	case $host in
+	  *cygwin* | *mingw* )
+	    func_dirname_and_basename "$output" "" "."
+	    output_name=$func_basename_result
+	    output_path=$func_dirname_result
+	    cwrappersource="$output_path/$objdir/lt-$output_name.c"
+	    cwrapper="$output_path/$output_name.exe"
+	    $RM $cwrappersource $cwrapper
+	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
+
+	    func_emit_cwrapperexe_src > $cwrappersource
+
+	    # The wrapper executable is built using the $host compiler,
+	    # because it contains $host paths and files. If cross-
+	    # compiling, it, like the target executable, must be
+	    # executed on the $host or under an emulation environment.
+	    $opt_dry_run || {
+	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
+	      $STRIP $cwrapper
+	    }
+
+	    # Now, create the wrapper script for func_source use:
+	    func_ltwrapper_scriptname $cwrapper
+	    $RM $func_ltwrapper_scriptname_result
+	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
+	    $opt_dry_run || {
+	      # note: this script will not be executed, so do not chmod.
+	      if test "x$build" = "x$host" ; then
+		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
+	      else
+		func_emit_wrapper no > $func_ltwrapper_scriptname_result
+	      fi
+	    }
+	  ;;
+	  * )
+	    $RM $output
+	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
+
+	    func_emit_wrapper no > $output
+	    chmod +x $output
+	  ;;
+	esac
+      }
+      exit $EXIT_SUCCESS
+      ;;
+    esac
+
+    # See if we need to build an old-fashioned archive.
+    for oldlib in $oldlibs; do
+
+      if test "$build_libtool_libs" = convenience; then
+	oldobjs="$libobjs_save $symfileobj"
+	addlibs="$convenience"
+	build_libtool_libs=no
+      else
+	if test "$build_libtool_libs" = module; then
+	  oldobjs="$libobjs_save"
+	  build_libtool_libs=no
+	else
+	  oldobjs="$old_deplibs $non_pic_objects"
+	  if test "$preload" = yes && test -f "$symfileobj"; then
+	    func_append oldobjs " $symfileobj"
+	  fi
+	fi
+	addlibs="$old_convenience"
+      fi
+
+      if test -n "$addlibs"; then
+	gentop="$output_objdir/${outputname}x"
+	func_append generated " $gentop"
+
+	func_extract_archives $gentop $addlibs
+	func_append oldobjs " $func_extract_archives_result"
+      fi
+
+      # Do each command in the archive commands.
+      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
+	cmds=$old_archive_from_new_cmds
+      else
+
+	# Add any objects from preloaded convenience libraries
+	if test -n "$dlprefiles"; then
+	  gentop="$output_objdir/${outputname}x"
+	  func_append generated " $gentop"
+
+	  func_extract_archives $gentop $dlprefiles
+	  func_append oldobjs " $func_extract_archives_result"
+	fi
+
+	# POSIX demands no paths to be encoded in archives.  We have
+	# to avoid creating archives with duplicate basenames if we
+	# might have to extract them afterwards, e.g., when creating a
+	# static archive out of a convenience library, or when linking
+	# the entirety of a libtool archive into another (currently
+	# not supported by libtool).
+	if (for obj in $oldobjs
+	    do
+	      func_basename "$obj"
+	      $ECHO "$func_basename_result"
+	    done | sort | sort -uc >/dev/null 2>&1); then
+	  :
+	else
+	  echo "copying selected object files to avoid basename conflicts..."
+	  gentop="$output_objdir/${outputname}x"
+	  func_append generated " $gentop"
+	  func_mkdir_p "$gentop"
+	  save_oldobjs=$oldobjs
+	  oldobjs=
+	  counter=1
+	  for obj in $save_oldobjs
+	  do
+	    func_basename "$obj"
+	    objbase="$func_basename_result"
+	    case " $oldobjs " in
+	    " ") oldobjs=$obj ;;
+	    *[\ /]"$objbase "*)
+	      while :; do
+		# Make sure we don't pick an alternate name that also
+		# overlaps.
+		newobj=lt$counter-$objbase
+		func_arith $counter + 1
+		counter=$func_arith_result
+		case " $oldobjs " in
+		*[\ /]"$newobj "*) ;;
+		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
+		esac
+	      done
+	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
+	      func_append oldobjs " $gentop/$newobj"
+	      ;;
+	    *) func_append oldobjs " $obj" ;;
+	    esac
+	  done
+	fi
+	func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+	tool_oldlib=$func_to_tool_file_result
+	eval cmds=\"$old_archive_cmds\"
+
+	func_len " $cmds"
+	len=$func_len_result
+	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+	  cmds=$old_archive_cmds
+	elif test -n "$archiver_list_spec"; then
+	  func_verbose "using command file archive linking..."
+	  for obj in $oldobjs
+	  do
+	    func_to_tool_file "$obj"
+	    $ECHO "$func_to_tool_file_result"
+	  done > $output_objdir/$libname.libcmd
+	  func_to_tool_file "$output_objdir/$libname.libcmd"
+	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
+	  cmds=$old_archive_cmds
+	else
+	  # the command line is too long to link in one step, link in parts
+	  func_verbose "using piecewise archive linking..."
+	  save_RANLIB=$RANLIB
+	  RANLIB=:
+	  objlist=
+	  concat_cmds=
+	  save_oldobjs=$oldobjs
+	  oldobjs=
+	  # Is there a better way of finding the last object in the list?
+	  for obj in $save_oldobjs
+	  do
+	    last_oldobj=$obj
+	  done
+	  eval test_cmds=\"$old_archive_cmds\"
+	  func_len " $test_cmds"
+	  len0=$func_len_result
+	  len=$len0
+	  for obj in $save_oldobjs
+	  do
+	    func_len " $obj"
+	    func_arith $len + $func_len_result
+	    len=$func_arith_result
+	    func_append objlist " $obj"
+	    if test "$len" -lt "$max_cmd_len"; then
+	      :
+	    else
+	      # the above command should be used before it gets too long
+	      oldobjs=$objlist
+	      if test "$obj" = "$last_oldobj" ; then
+		RANLIB=$save_RANLIB
+	      fi
+	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
+	      objlist=
+	      len=$len0
+	    fi
+	  done
+	  RANLIB=$save_RANLIB
+	  oldobjs=$objlist
+	  if test "X$oldobjs" = "X" ; then
+	    eval cmds=\"\$concat_cmds\"
+	  else
+	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
+	  fi
+	fi
+      fi
+      func_execute_cmds "$cmds" 'exit $?'
+    done
+
+    test -n "$generated" && \
+      func_show_eval "${RM}r$generated"
+
+    # Now create the libtool archive.
+    case $output in
+    *.la)
+      old_library=
+      test "$build_old_libs" = yes && old_library="$libname.$libext"
+      func_verbose "creating $output"
+
+      # Preserve any variables that may affect compiler behavior
+      for var in $variables_saved_for_relink; do
+	if eval test -z \"\${$var+set}\"; then
+	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+	elif eval var_value=\$$var; test -z "$var_value"; then
+	  relink_command="$var=; export $var; $relink_command"
+	else
+	  func_quote_for_eval "$var_value"
+	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+	fi
+      done
+      # Quote the link command for shipping.
+      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
+      if test "$hardcode_automatic" = yes ; then
+	relink_command=
+      fi
+
+      # Only create the output if not a dry run.
+      $opt_dry_run || {
+	for installed in no yes; do
+	  if test "$installed" = yes; then
+	    if test -z "$install_libdir"; then
+	      break
+	    fi
+	    output="$output_objdir/$outputname"i
+	    # Replace all uninstalled libtool libraries with the installed ones
+	    newdependency_libs=
+	    for deplib in $dependency_libs; do
+	      case $deplib in
+	      *.la)
+		func_basename "$deplib"
+		name="$func_basename_result"
+		func_resolve_sysroot "$deplib"
+		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
+		test -z "$libdir" && \
+		  func_fatal_error "\`$deplib' is not a valid libtool archive"
+		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
+		;;
+	      -L*)
+		func_stripname -L '' "$deplib"
+		func_replace_sysroot "$func_stripname_result"
+		func_append newdependency_libs " -L$func_replace_sysroot_result"
+		;;
+	      -R*)
+		func_stripname -R '' "$deplib"
+		func_replace_sysroot "$func_stripname_result"
+		func_append newdependency_libs " -R$func_replace_sysroot_result"
+		;;
+	      *) func_append newdependency_libs " $deplib" ;;
+	      esac
+	    done
+	    dependency_libs="$newdependency_libs"
+	    newdlfiles=
+
+	    for lib in $dlfiles; do
+	      case $lib in
+	      *.la)
+	        func_basename "$lib"
+		name="$func_basename_result"
+		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+		test -z "$libdir" && \
+		  func_fatal_error "\`$lib' is not a valid libtool archive"
+		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
+		;;
+	      *) func_append newdlfiles " $lib" ;;
+	      esac
+	    done
+	    dlfiles="$newdlfiles"
+	    newdlprefiles=
+	    for lib in $dlprefiles; do
+	      case $lib in
+	      *.la)
+		# Only pass preopened files to the pseudo-archive (for
+		# eventual linking with the app. that links it) if we
+		# didn't already link the preopened objects directly into
+		# the library:
+		func_basename "$lib"
+		name="$func_basename_result"
+		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+		test -z "$libdir" && \
+		  func_fatal_error "\`$lib' is not a valid libtool archive"
+		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
+		;;
+	      esac
+	    done
+	    dlprefiles="$newdlprefiles"
+	  else
+	    newdlfiles=
+	    for lib in $dlfiles; do
+	      case $lib in
+		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+		*) abs=`pwd`"/$lib" ;;
+	      esac
+	      func_append newdlfiles " $abs"
+	    done
+	    dlfiles="$newdlfiles"
+	    newdlprefiles=
+	    for lib in $dlprefiles; do
+	      case $lib in
+		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+		*) abs=`pwd`"/$lib" ;;
+	      esac
+	      func_append newdlprefiles " $abs"
+	    done
+	    dlprefiles="$newdlprefiles"
+	  fi
+	  $RM $output
+	  # place dlname in correct position for cygwin
+	  # In fact, it would be nice if we could use this code for all target
+	  # systems that can't hard-code library paths into their executables
+	  # and that have no shared library path variable independent of PATH,
+	  # but it turns out we can't easily determine that from inspecting
+	  # libtool variables, so we have to hard-code the OSs to which it
+	  # applies here; at the moment, that means platforms that use the PE
+	  # object format with DLL files.  See the long comment at the top of
+	  # tests/bindir.at for full details.
+	  tdlname=$dlname
+	  case $host,$output,$installed,$module,$dlname in
+	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
+	      # If a -bindir argument was supplied, place the dll there.
+	      if test "x$bindir" != x ;
+	      then
+		func_relative_path "$install_libdir" "$bindir"
+		tdlname=$func_relative_path_result$dlname
+	      else
+		# Otherwise fall back on heuristic.
+		tdlname=../bin/$dlname
+	      fi
+	      ;;
+	  esac
+	  $ECHO > $output "\
+# $outputname - a libtool library file
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='$tdlname'
+
+# Names of this library.
+library_names='$library_names'
+
+# The name of the static archive.
+old_library='$old_library'
+
+# Linker flags that can not go in dependency_libs.
+inherited_linker_flags='$new_inherited_linker_flags'
+
+# Libraries that this one depends upon.
+dependency_libs='$dependency_libs'
+
+# Names of additional weak libraries provided by this library
+weak_library_names='$weak_libs'
+
+# Version information for $libname.
+current=$current
+age=$age
+revision=$revision
+
+# Is this an already installed library?
+installed=$installed
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=$module
+
+# Files to dlopen/dlpreopen
+dlopen='$dlfiles'
+dlpreopen='$dlprefiles'
+
+# Directory that this library needs to be installed in:
+libdir='$install_libdir'"
+	  if test "$installed" = no && test "$need_relink" = yes; then
+	    $ECHO >> $output "\
+relink_command=\"$relink_command\""
+	  fi
+	done
+      }
+
+      # Do a symbolic link so that the libtool archive can be found in
+      # LD_LIBRARY_PATH before the program is installed.
+      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
+      ;;
+    esac
+    exit $EXIT_SUCCESS
+}
+
+{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
+    func_mode_link ${1+"$@"}
+
+
+# func_mode_uninstall arg...
+func_mode_uninstall ()
+{
+    $opt_debug
+    RM="$nonopt"
+    files=
+    rmforce=
+    exit_status=0
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic="$magic"
+
+    for arg
+    do
+      case $arg in
+      -f) func_append RM " $arg"; rmforce=yes ;;
+      -*) func_append RM " $arg" ;;
+      *) func_append files " $arg" ;;
+      esac
+    done
+
+    test -z "$RM" && \
+      func_fatal_help "you must specify an RM program"
+
+    rmdirs=
+
+    for file in $files; do
+      func_dirname "$file" "" "."
+      dir="$func_dirname_result"
+      if test "X$dir" = X.; then
+	odir="$objdir"
+      else
+	odir="$dir/$objdir"
+      fi
+      func_basename "$file"
+      name="$func_basename_result"
+      test "$opt_mode" = uninstall && odir="$dir"
+
+      # Remember odir for removal later, being careful to avoid duplicates
+      if test "$opt_mode" = clean; then
+	case " $rmdirs " in
+	  *" $odir "*) ;;
+	  *) func_append rmdirs " $odir" ;;
+	esac
+      fi
+
+      # Don't error if the file doesn't exist and rm -f was used.
+      if { test -L "$file"; } >/dev/null 2>&1 ||
+	 { test -h "$file"; } >/dev/null 2>&1 ||
+	 test -f "$file"; then
+	:
+      elif test -d "$file"; then
+	exit_status=1
+	continue
+      elif test "$rmforce" = yes; then
+	continue
+      fi
+
+      rmfiles="$file"
+
+      case $name in
+      *.la)
+	# Possibly a libtool archive, so verify it.
+	if func_lalib_p "$file"; then
+	  func_source $dir/$name
+
+	  # Delete the libtool libraries and symlinks.
+	  for n in $library_names; do
+	    func_append rmfiles " $odir/$n"
+	  done
+	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
+
+	  case "$opt_mode" in
+	  clean)
+	    case " $library_names " in
+	    *" $dlname "*) ;;
+	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
+	    esac
+	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
+	    ;;
+	  uninstall)
+	    if test -n "$library_names"; then
+	      # Do each command in the postuninstall commands.
+	      func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+	    fi
+
+	    if test -n "$old_library"; then
+	      # Do each command in the old_postuninstall commands.
+	      func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+	    fi
+	    # FIXME: should reinstall the best remaining shared library.
+	    ;;
+	  esac
+	fi
+	;;
+
+      *.lo)
+	# Possibly a libtool object, so verify it.
+	if func_lalib_p "$file"; then
+
+	  # Read the .lo file
+	  func_source $dir/$name
+
+	  # Add PIC object to the list of files to remove.
+	  if test -n "$pic_object" &&
+	     test "$pic_object" != none; then
+	    func_append rmfiles " $dir/$pic_object"
+	  fi
+
+	  # Add non-PIC object to the list of files to remove.
+	  if test -n "$non_pic_object" &&
+	     test "$non_pic_object" != none; then
+	    func_append rmfiles " $dir/$non_pic_object"
+	  fi
+	fi
+	;;
+
+      *)
+	if test "$opt_mode" = clean ; then
+	  noexename=$name
+	  case $file in
+	  *.exe)
+	    func_stripname '' '.exe' "$file"
+	    file=$func_stripname_result
+	    func_stripname '' '.exe' "$name"
+	    noexename=$func_stripname_result
+	    # $file with .exe has already been added to rmfiles,
+	    # add $file without .exe
+	    func_append rmfiles " $file"
+	    ;;
+	  esac
+	  # Do a test to see if this is a libtool program.
+	  if func_ltwrapper_p "$file"; then
+	    if func_ltwrapper_executable_p "$file"; then
+	      func_ltwrapper_scriptname "$file"
+	      relink_command=
+	      func_source $func_ltwrapper_scriptname_result
+	      func_append rmfiles " $func_ltwrapper_scriptname_result"
+	    else
+	      relink_command=
+	      func_source $dir/$noexename
+	    fi
+
+	    # note $name still contains .exe if it was in $file originally
+	    # as does the version of $file that was added into $rmfiles
+	    func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
+	    if test "$fast_install" = yes && test -n "$relink_command"; then
+	      func_append rmfiles " $odir/lt-$name"
+	    fi
+	    if test "X$noexename" != "X$name" ; then
+	      func_append rmfiles " $odir/lt-${noexename}.c"
+	    fi
+	  fi
+	fi
+	;;
+      esac
+      func_show_eval "$RM $rmfiles" 'exit_status=1'
+    done
+
+    # Try to remove the ${objdir}s in the directories where we deleted files
+    for dir in $rmdirs; do
+      if test -d "$dir"; then
+	func_show_eval "rmdir $dir >/dev/null 2>&1"
+      fi
+    done
+
+    exit $exit_status
+}
+
+{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
+    func_mode_uninstall ${1+"$@"}
+
+test -z "$opt_mode" && {
+  help="$generic_help"
+  func_fatal_help "you must specify a MODE"
+}
+
+test -z "$exec_cmd" && \
+  func_fatal_help "invalid operation mode \`$opt_mode'"
+
+if test -n "$exec_cmd"; then
+  eval exec "$exec_cmd"
+  exit $EXIT_FAILURE
+fi
+
+exit $exit_status
+
+
+# The TAGs below are defined such that we never get into a situation
+# in which we disable both kinds of libraries.  Given conflicting
+# choices, we go for a static library, that is the most portable,
+# since we can't tell whether shared libraries were disabled because
+# the user asked for that or because the platform doesn't support
+# them.  This is particularly important on AIX, because we don't
+# support having both static and shared libraries enabled at the same
+# time on that platform, so we default to a shared-only configuration.
+# If a disable-shared tag is given, we'll fallback to a static-only
+# configuration.  But we'll never go from static-only to shared-only.
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
+build_libtool_libs=no
+build_old_libs=yes
+# ### END LIBTOOL TAG CONFIG: disable-shared
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
+build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
+# ### END LIBTOOL TAG CONFIG: disable-static
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:
+# vi:sw=2
+
diff --git a/config.h.in b/config.h.in
index 80594fb..e3041c7 100644
--- a/config.h.in
+++ b/config.h.in
@@ -30,9 +30,8 @@
 /* Package name for gettext */
 #undef GETTEXT_PACKAGE
 
-/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
-   */
-#undef HAVE_DIRENT_H
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
 
 /* Define to 1 if you have the `ftruncate' function. */
 #undef HAVE_FTRUNCATE
@@ -49,9 +48,6 @@
 /* Define to 1 if you have the `mkstemp' function. */
 #undef HAVE_MKSTEMP
 
-/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
-#undef HAVE_NDIR_H
-
 /* Define to 1 if you have the <stdint.h> header file. */
 #undef HAVE_STDINT_H
 
@@ -64,14 +60,6 @@
 /* Define to 1 if you have the <string.h> header file. */
 #undef HAVE_STRING_H
 
-/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
-   */
-#undef HAVE_SYS_DIR_H
-
-/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
-   */
-#undef HAVE_SYS_NDIR_H
-
 /* Define to 1 if you have the <sys/stat.h> header file. */
 #undef HAVE_SYS_STAT_H
 
@@ -93,6 +81,10 @@
 /* id3lib patch level */
 #undef ID3LIB_PATCH
 
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+   */
+#undef LT_OBJDIR
+
 /* Define to the address where bug reports for this package should be sent. */
 #undef PACKAGE_BUGREPORT
 
@@ -113,6 +105,3 @@
 
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
-
-/* Define to `unsigned int' if <sys/types.h> does not define. */
-#undef size_t
diff --git a/configure b/configure
index c6b8cd4..c132c28 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for EasyTAG 2.2.4.
+# Generated by GNU Autoconf 2.69 for EasyTAG 2.3.1.
 #
 # Report bugs to <https://bugzilla.gnome.org/enter_bug.cgi?product=easytag>.
 #
@@ -198,6 +198,14 @@ test -x / || exit 1"
   as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
   eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
   test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+
+  test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || (
+    ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+    ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+    ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+    PATH=/empty FPATH=/empty; export PATH FPATH
+    test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\
+      || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1
 test \$(( 1 + 1 )) = 2 || exit 1"
   if (eval "$as_required") 2>/dev/null; then :
   as_have_required=yes
@@ -557,6 +565,8 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
 # Sed expression to map a string onto a valid variable name.
 as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
 
+SHELL=${CONFIG_SHELL-/bin/sh}
+
 
 test -n "$DJDIR" || exec 7<&0 </dev/null
 exec 6>&1
@@ -581,8 +591,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='EasyTAG'
 PACKAGE_TARNAME='easytag'
-PACKAGE_VERSION='2.2.4'
-PACKAGE_STRING='EasyTAG 2.2.4'
+PACKAGE_VERSION='2.3.1'
+PACKAGE_STRING='EasyTAG 2.3.1'
 PACKAGE_BUGREPORT='https://bugzilla.gnome.org/enter_bug.cgi?product=easytag'
 PACKAGE_URL='https://wiki.gnome.org/Apps/EasyTAG'
 
@@ -627,35 +637,30 @@ ac_subst_vars='am__EXEEXT_FALSE
 am__EXEEXT_TRUE
 LTLIBOBJS
 LIBOBJS
-EGREP
-GREP
-CPP
+GSETTINGS_RULES
+GLIB_COMPILE_SCHEMAS
+gsettingsschemadir
+GSETTINGS_DISABLE_SCHEMAS_COMPILE
 DEPRECATED_CPPFLAGS
 WARN_CXXFLAGS
 WARN_CFLAGS
 EASYTAG_LIBS
 EASYTAG_CFLAGS
+ENABLE_NAUTILUS_ACTIONS_FALSE
+ENABLE_NAUTILUS_ACTIONS_TRUE
+NAUTILUS_EXTENSION_DIR
+NAUTILUS_LIBS
+NAUTILUS_CFLAGS
 ID3LIB_LIBS
-GTK_LIBS
-GTK_CFLAGS
 WINDRES
 WINDOWS_HOST_FALSE
 WINDOWS_HOST_TRUE
-host_os
-host_vendor
-host_cpu
-host
-build_os
-build_vendor
-build_cpu
-build
 YELP_HELP_RULES
 XMLLINT
 ITSTOOL
 HELP_DIR
 YELP_LC_DIST
 YELP_LC_MEDIA_LINKS
-LN_S
 EASYTAG_ENABLE_TESTS_FALSE
 EASYTAG_ENABLE_TESTS_TRUE
 GTESTER_REPORT
@@ -666,10 +671,12 @@ ENABLE_MAN_TRUE
 XMLCATALOG
 XML_CATALOG_FILE
 XSLTPROC
+GLIB_MKENUMS
+GDK_PIXBUF_PIXDATA
+GLIB_COMPILE_RESOURCES
 PKG_CONFIG_LIBDIR
 PKG_CONFIG_PATH
 PKG_CONFIG
-SED
 CXXCPP
 am__fastdepCXX_FALSE
 am__fastdepCXX_TRUE
@@ -682,23 +689,6 @@ appdataxmldir
 APPDATA_VALIDATE
 GETTEXT_PACKAGE
 DATADIRNAME
-am__fastdepCC_FALSE
-am__fastdepCC_TRUE
-CCDEPMODE
-am__nodep
-AMDEPBACKSLASH
-AMDEP_FALSE
-AMDEP_TRUE
-am__quote
-am__include
-DEPDIR
-OBJEXT
-EXEEXT
-ac_ct_CC
-CPPFLAGS
-LDFLAGS
-CFLAGS
-CC
 ALL_LINGUAS
 INTLTOOL_PERL
 GMSGFMT
@@ -734,6 +724,53 @@ INTLTOOL_EXTRACT
 INTLTOOL_MERGE
 INTLTOOL_UPDATE
 USE_NLS
+CPP
+OTOOL64
+OTOOL
+LIPO
+NMEDIT
+DSYMUTIL
+MANIFEST_TOOL
+RANLIB
+ac_ct_AR
+AR
+DLLTOOL
+OBJDUMP
+LN_S
+NM
+ac_ct_DUMPBIN
+DUMPBIN
+LD
+FGREP
+EGREP
+GREP
+SED
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+am__nodep
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__quote
+am__include
+DEPDIR
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+LIBTOOL
 MAINT
 MAINTAINER_MODE_FALSE
 MAINTAINER_MODE_TRUE
@@ -807,8 +844,15 @@ ac_user_opts='
 enable_option_checking
 enable_silent_rules
 enable_maintainer_mode
-enable_nls
+enable_static
+enable_shared
+with_pic
+enable_fast_install
 enable_dependency_tracking
+with_gnu_ld
+with_sysroot
+enable_libtool_lock
+enable_nls
 enable_appdata_validate
 enable_man
 with_xml_catalog
@@ -822,7 +866,8 @@ enable_speex
 enable_flac
 enable_mp4
 enable_wavpack
-with_gtk2
+enable_nautilus_actions
+enable_schemas_compile
 '
       ac_precious_vars='build_alias
 host_alias
@@ -832,6 +877,7 @@ CFLAGS
 LDFLAGS
 LIBS
 CPPFLAGS
+CPP
 CXX
 CXXFLAGS
 CCC
@@ -841,11 +887,10 @@ PKG_CONFIG_PATH
 PKG_CONFIG_LIBDIR
 ITSTOOL
 XMLLINT
-GTK_CFLAGS
-GTK_LIBS
+NAUTILUS_CFLAGS
+NAUTILUS_LIBS
 EASYTAG_CFLAGS
-EASYTAG_LIBS
-CPP'
+EASYTAG_LIBS'
 
 
 # Initialize some variables set by options.
@@ -1386,7 +1431,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures EasyTAG 2.2.4 to adapt to many kinds of systems.
+\`configure' configures EasyTAG 2.3.1 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1456,7 +1501,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of EasyTAG 2.2.4:";;
+     short | recursive ) echo "Configuration of EasyTAG 2.3.1:";;
    esac
   cat <<\_ACEOF
 
@@ -1469,11 +1514,16 @@ Optional Features:
   --disable-maintainer-mode
                           disable make rules and dependencies not useful (and
                           sometimes confusing) to the casual installer
-  --disable-nls           do not use Native Language Support
+  --enable-static[=PKGS]  build static libraries [default=no]
+  --enable-shared[=PKGS]  build shared libraries [default=yes]
+  --enable-fast-install[=PKGS]
+                          optimize for fast installation [default=yes]
   --enable-dependency-tracking
                           do not reject slow dependency extractors
   --disable-dependency-tracking
                           speeds up one-time build
+  --disable-libtool-lock  avoid locking (might break parallel builds)
+  --disable-nls           do not use Native Language Support
   --disable-appdata-validate
                           Disable validating AppData XML files during check
                           phase
@@ -1488,15 +1538,23 @@ Optional Features:
   --disable-flac          Disable support for FLAC files (default=auto)
   --disable-mp4           Disable support for MP4 files (default=auto)
   --disable-wavpack       Disable support for Wavpack files (default=auto)
+  --disable-nautilus-actions
+                          do not build the nautilus context menu actions
+                          (default=auto)
+  --disable-schemas-compile
+                          Disable regeneration of gschemas.compiled on install
 
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-pic[=PKGS]       try to use only PIC/non-PIC objects [default=use
+                          both]
+  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
+  --with-sysroot=DIR Search for dependent libraries within DIR
+                        (or the compiler's sysroot if not specified).
   --with-xml-catalog=CATALOG
                           path to xml catalog to use
   --with-help-dir=DIR     path where help files are installed
-  --with-gtk2             Enable deprecated GTK+ 2 support (and disable GTK+ 3
-                          support)
 
 Some influential environment variables:
   CC          C compiler command
@@ -1506,6 +1564,7 @@ Some influential environment variables:
   LIBS        libraries to pass to the linker, e.g. -l<library>
   CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
               you have headers in a nonstandard directory <include dir>
+  CPP         C preprocessor
   CXX         C++ compiler command
   CXXFLAGS    C++ compiler flags
   CXXCPP      C++ preprocessor
@@ -1516,13 +1575,14 @@ Some influential environment variables:
               path overriding pkg-config's built-in search path
   ITSTOOL     Path to the `itstool` command
   XMLLINT     Path to the `xmllint` command
-  GTK_CFLAGS  C compiler flags for GTK, overriding pkg-config
-  GTK_LIBS    linker flags for GTK, overriding pkg-config
+  NAUTILUS_CFLAGS
+              C compiler flags for NAUTILUS, overriding pkg-config
+  NAUTILUS_LIBS
+              linker flags for NAUTILUS, overriding pkg-config
   EASYTAG_CFLAGS
               C compiler flags for EASYTAG, overriding pkg-config
   EASYTAG_LIBS
               linker flags for EASYTAG, overriding pkg-config
-  CPP         C preprocessor
 
 Use these variables to override the choices made by `configure' or to help
 it to find libraries and programs with nonstandard names/locations.
@@ -1591,7 +1651,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-EasyTAG configure 2.2.4
+EasyTAG configure 2.3.1
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1689,6 +1749,116 @@ fi
 
 } # ac_fn_c_try_link
 
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_compile
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } > conftest.i && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+    ac_retval=1
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_c_try_run ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+       $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_retval=$ac_status
+fi
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_run
+
 # ac_fn_c_check_func LINENO FUNC VAR
 # ----------------------------------
 # Tests whether FUNC exists, setting the cache variable VAR accordingly
@@ -1831,13 +2001,13 @@ fi
 
 } # ac_fn_cxx_try_cpp
 
-# ac_fn_c_try_run LINENO
-# ----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
-# that executables *can* be run.
-ac_fn_c_try_run ()
+# ac_fn_cxx_try_link LINENO
+# -------------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_link ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext conftest$ac_exeext
   if { { ac_try="$ac_link"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
@@ -1845,166 +2015,48 @@ case "(($ac_try" in
 esac
 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
 $as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
-  { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
+  (eval "$ac_link") 2>conftest.err
   ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }; then :
+  test $ac_status = 0; } && {
+	 test -z "$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+	 test "$cross_compiling" = yes ||
+	 test -x conftest$ac_exeext
+       }; then :
   ac_retval=0
 else
-  $as_echo "$as_me: program exited with status $ac_status" >&5
-       $as_echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       ac_retval=$ac_status
+	ac_retval=1
 fi
+  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+  # interfere with the next link command; also delete a directory that is
+  # left behind by Apple's compiler.  We do this before executing the actions.
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
-} # ac_fn_c_try_run
+} # ac_fn_cxx_try_link
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by EasyTAG $as_me 2.3.1, which was
+generated by GNU Autoconf 2.69.  Invocation command line was
+
+  $ $0 $@
 
-# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
-# -------------------------------------------
-# Tests whether TYPE exists after having included INCLUDES, setting cache
-# variable VAR accordingly.
-ac_fn_c_check_type ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  eval "$3=no"
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-if (sizeof ($2))
-	 return 0;
-  ;
-  return 0;
-}
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-if (sizeof (($2)))
-	    return 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
-  eval "$3=yes"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_type
-
-# ac_fn_c_try_cpp LINENO
-# ----------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_cpp ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if { { ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } > conftest.i && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-    ac_retval=1
-fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_cpp
-
-# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists and can be compiled using the include files in
-# INCLUDES, setting the cache variable VAR accordingly.
-ac_fn_c_check_header_compile ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$3=yes"
-else
-  eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_compile
-cat >config.log <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by EasyTAG $as_me 2.2.4, which was
-generated by GNU Autoconf 2.69.  Invocation command line was
-
-  $ $0 $@
-
-_ACEOF
-exec 5>>config.log
+exec 5>>config.log
 {
 cat <<_ASUNAME
 ## --------- ##
@@ -2867,7 +2919,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='easytag'
- VERSION='2.2.4'
+ VERSION='2.3.1'
 
 
 # Some tools Automake needs.
@@ -3014,17 +3066,169 @@ AM_BACKSLASH='\'
 
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5
-$as_echo_n "checking whether NLS is requested... " >&6; }
-    # Check whether --enable-nls was given.
-if test "${enable_nls+set}" = set; then :
-  enableval=$enable_nls; USE_NLS=$enableval
+case `pwd` in
+  *\ * | *\	*)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+esac
+
+
+
+macro_version='2.4.2'
+macro_revision='1.3337'
+
+
+
+
+
+
+
+
+
+
+
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if ${ac_cv_build+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  USE_NLS=yes
+  ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+
 fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if ${ac_cv_host+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "x$host_alias" = x; then
+  ac_cv_host=$ac_cv_build
+else
+  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+$as_echo_n "checking how to print strings... " >&6; }
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+   test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='printf %s\n'
+else
+  # Use this function as a fallback that always works.
+  func_fallback_echo ()
+  {
+    eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+  }
+  ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO ""
+}
+
+case "$ECHO" in
+  printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5
+$as_echo "printf" >&6; } ;;
+  print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
+$as_echo "print -r" >&6; } ;;
+  *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5
+$as_echo "cat" >&6; } ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5
-$as_echo "$USE_NLS" >&6; }
 
 
 DEPDIR="${am__leading_dot}deps"
@@ -4066,195 +4270,286 @@ else
 fi
 
 
-
-
-
-case "$am__api_version" in
-    1.01234)
-	as_fn_error $? "Automake 1.5 or newer is required to use intltool" "$LINENO" 5
-    ;;
-    *)
-    ;;
-esac
-
-INTLTOOL_REQUIRED_VERSION_AS_INT=`echo 0.50.0 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'`
-INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3`
-INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'`
-if test -n "0.50.0"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intltool >= 0.50.0" >&5
-$as_echo_n "checking for intltool >= 0.50.0... " >&6; }
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_APPLIED_VERSION found" >&5
-$as_echo "$INTLTOOL_APPLIED_VERSION found" >&6; }
-    test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" ||
-	as_fn_error $? "Your intltool is too old.  You need intltool 0.50.0 or later." "$LINENO" 5
-fi
-
-# Extract the first word of "intltool-update", so it can be a program name with args.
-set dummy intltool-update; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_INTLTOOL_UPDATE+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+$as_echo_n "checking for a sed that does not truncate output... " >&6; }
+if ${ac_cv_path_SED+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  case $INTLTOOL_UPDATE in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_INTLTOOL_UPDATE="$INTLTOOL_UPDATE" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
+            ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+     for ac_i in 1 2 3 4 5 6 7; do
+       ac_script="$ac_script$as_nl$ac_script"
+     done
+     echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+     { ac_script=; unset ac_script;}
+     if test -z "$SED"; then
+  ac_path_SED_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
+    for ac_prog in sed gsed; do
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_INTLTOOL_UPDATE="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
+      ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_SED" || continue
+# Check for GNU ac_path_SED and select it if it is found.
+  # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+  ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo '' >> "conftest.nl"
+    "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_SED_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_SED="$ac_path_SED"
+      ac_path_SED_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
   done
-IFS=$as_save_IFS
-
-  ;;
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
 esac
-fi
-INTLTOOL_UPDATE=$ac_cv_path_INTLTOOL_UPDATE
-if test -n "$INTLTOOL_UPDATE"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_UPDATE" >&5
-$as_echo "$INTLTOOL_UPDATE" >&6; }
+
+      $ac_path_SED_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_SED"; then
+    as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
+  fi
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  ac_cv_path_SED=$SED
 fi
 
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+$as_echo "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+  rm -f conftest.sed
 
-# Extract the first word of "intltool-merge", so it can be a program name with args.
-set dummy intltool-merge; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_INTLTOOL_MERGE+:} false; then :
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if ${ac_cv_path_GREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  case $INTLTOOL_MERGE in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_INTLTOOL_MERGE="$INTLTOOL_MERGE" # Let the user override the test with a path.
-  ;;
-  *)
+  if test -z "$GREP"; then
+  ac_path_GREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
+    for ac_prog in grep ggrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_INTLTOOL_MERGE="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
+      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_GREP" || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+  # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'GREP' >> "conftest.nl"
+    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_GREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_GREP="$ac_path_GREP"
+      ac_path_GREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
   done
-IFS=$as_save_IFS
-
-  ;;
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
 esac
-fi
-INTLTOOL_MERGE=$ac_cv_path_INTLTOOL_MERGE
-if test -n "$INTLTOOL_MERGE"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_MERGE" >&5
-$as_echo "$INTLTOOL_MERGE" >&6; }
+
+      $ac_path_GREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_GREP"; then
+    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  ac_cv_path_GREP=$GREP
 fi
 
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
 
-# Extract the first word of "intltool-extract", so it can be a program name with args.
-set dummy intltool-extract; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_INTLTOOL_EXTRACT+:} false; then :
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if ${ac_cv_path_EGREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  case $INTLTOOL_EXTRACT in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_INTLTOOL_EXTRACT="$INTLTOOL_EXTRACT" # Let the user override the test with a path.
-  ;;
-  *)
+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+   then ac_cv_path_EGREP="$GREP -E"
+   else
+     if test -z "$EGREP"; then
+  ac_path_EGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
+    for ac_prog in egrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_INTLTOOL_EXTRACT="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
+      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_EGREP" || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+  # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'EGREP' >> "conftest.nl"
+    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_EGREP="$ac_path_EGREP"
+      ac_path_EGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
   done
-IFS=$as_save_IFS
-
-  ;;
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
 esac
-fi
-INTLTOOL_EXTRACT=$ac_cv_path_INTLTOOL_EXTRACT
-if test -n "$INTLTOOL_EXTRACT"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_EXTRACT" >&5
-$as_echo "$INTLTOOL_EXTRACT" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
 
-if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT"; then
-    as_fn_error $? "The intltool scripts were not found. Please install intltool." "$LINENO" 5
+      $ac_path_EGREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_EGREP"; then
+    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_EGREP=$EGREP
 fi
 
-if test -z "$AM_DEFAULT_VERBOSITY"; then
-  AM_DEFAULT_VERBOSITY=1
+   fi
 fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
 
 
-INTLTOOL_V_MERGE='$(INTLTOOL__v_MERGE_$(V))'
-INTLTOOL__v_MERGE_='$(INTLTOOL__v_MERGE_$(AM_DEFAULT_VERBOSITY))'
-INTLTOOL__v_MERGE_0='@echo "  ITMRG " $@;'
-
-
-
-
-INTLTOOL_V_MERGE_OPTIONS='$(intltool__v_merge_options_$(V))'
-intltool__v_merge_options_='$(intltool__v_merge_options_$(AM_DEFAULT_VERBOSITY))'
-intltool__v_merge_options_0='-q'
-
-
-
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
+$as_echo_n "checking for fgrep... " >&6; }
+if ${ac_cv_path_FGREP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+   then ac_cv_path_FGREP="$GREP -F"
+   else
+     if test -z "$FGREP"; then
+  ac_path_FGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in fgrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_FGREP" || continue
+# Check for GNU ac_path_FGREP and select it if it is found.
+  # Check for GNU $ac_path_FGREP
+case `"$ac_path_FGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'FGREP' >> "conftest.nl"
+    "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_FGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_FGREP="$ac_path_FGREP"
+      ac_path_FGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
 
-  INTLTOOL_DESKTOP_RULE='%.desktop:   %.desktop.in   $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
-INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
-     INTLTOOL_KEYS_RULE='%.keys:      %.keys.in      $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
-     INTLTOOL_PROP_RULE='%.prop:      %.prop.in      $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
-      INTLTOOL_OAF_RULE='%.oaf:       %.oaf.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -p $(top_srcdir)/po $< $@'
-     INTLTOOL_PONG_RULE='%.pong:      %.pong.in      $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
-   INTLTOOL_SERVER_RULE='%.server:    %.server.in    $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
-    INTLTOOL_SHEET_RULE='%.sheet:     %.sheet.in     $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
-INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
-       INTLTOOL_UI_RULE='%.ui:        %.ui.in        $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
-      INTLTOOL_XML_RULE='%.xml:       %.xml.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
-if test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge 5000; then
-      INTLTOOL_XML_NOMERGE_RULE='%.xml:       %.xml.in       $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u --no-translations $< $@'
+      $ac_path_FGREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_FGREP"; then
+    as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
 else
-      INTLTOOL_XML_NOMERGE_RULE='%.xml:       %.xml.in       $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)_it_tmp_dir=tmp.intltool.$$RANDOM && mkdir $$_it_tmp_dir && LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u $$_it_tmp_dir $< $@ && rmdir $$_it_tmp_dir'
+  ac_cv_path_FGREP=$FGREP
 fi
-      INTLTOOL_XAM_RULE='%.xam:       %.xml.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
-      INTLTOOL_KBD_RULE='%.kbd:       %.kbd.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
-    INTLTOOL_CAVES_RULE='%.caves:     %.caves.in     $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
-  INTLTOOL_SCHEMAS_RULE='%.schemas:   %.schemas.in   $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
-    INTLTOOL_THEME_RULE='%.theme:     %.theme.in     $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
-    INTLTOOL_SERVICE_RULE='%.service: %.service.in   $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
-   INTLTOOL_POLICY_RULE='%.policy:    %.policy.in    $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+
+   fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
+$as_echo "$ac_cv_path_FGREP" >&6; }
+ FGREP="$ac_cv_path_FGREP"
+
+
+test -z "$GREP" && GREP=grep
 
 
 
@@ -4274,8 +4569,108 @@ fi
 
 
 
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
 
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if ${lt_cv_path_LD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break
+	;;
+      *)
+	test "$with_gnu_ld" != yes && break
+	;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
 
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if ${lt_cv_prog_gnu_ld+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
 
 
 
@@ -4285,50 +4680,413 @@ fi
 
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
+$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
+if ${lt_cv_path_NM+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_nm_to_check="${ac_tool_prefix}nm"
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS="$lt_save_ifs"
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm="$ac_dir/$lt_tmp_nm"
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+	# Check to see if the nm accepts a BSD-compat flag.
+	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
+	#   nm: unknown option "B" ignored
+	# Tru64's nm complains that /dev/null is an invalid object file
+	case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+	*/dev/null* | *'Invalid file or object type'*)
+	  lt_cv_path_NM="$tmp_nm -B"
+	  break
+	  ;;
+	*)
+	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+	  */dev/null*)
+	    lt_cv_path_NM="$tmp_nm -p"
+	    break
+	    ;;
+	  *)
+	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+	    continue # so that we can try to find one that supports BSD flags
+	    ;;
+	  esac
+	  ;;
+	esac
+      fi
+    done
+    IFS="$lt_save_ifs"
+  done
+  : ${lt_cv_path_NM=no}
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
+$as_echo "$lt_cv_path_NM" >&6; }
+if test "$lt_cv_path_NM" != "no"; then
+  NM="$lt_cv_path_NM"
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  if test -n "$DUMPBIN"; then :
+    # Let the user override the test.
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in dumpbin "link -dump"
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DUMPBIN+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DUMPBIN"; then
+  ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
 
+fi
+fi
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
+$as_echo "$DUMPBIN" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
 
 
+    test -n "$DUMPBIN" && break
+  done
+fi
+if test -z "$DUMPBIN"; then
+  ac_ct_DUMPBIN=$DUMPBIN
+  for ac_prog in dumpbin "link -dump"
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DUMPBIN"; then
+  ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
 
+fi
+fi
+ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+if test -n "$ac_ct_DUMPBIN"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
+$as_echo "$ac_ct_DUMPBIN" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
 
 
+  test -n "$ac_ct_DUMPBIN" && break
+done
 
+  if test "x$ac_ct_DUMPBIN" = x; then
+    DUMPBIN=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DUMPBIN=$ac_ct_DUMPBIN
+  fi
+fi
 
+    case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
+    *COFF*)
+      DUMPBIN="$DUMPBIN -symbols"
+      ;;
+    *)
+      DUMPBIN=:
+      ;;
+    esac
+  fi
 
+  if test "$DUMPBIN" != ":"; then
+    NM="$DUMPBIN"
+  fi
+fi
+test -z "$NM" && NM=nm
 
 
 
 
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
+$as_echo_n "checking the name lister ($NM) interface... " >&6; }
+if ${lt_cv_nm_interface+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:$LINENO: output\"" >&5)
+  cat conftest.out >&5
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
+$as_echo "$lt_cv_nm_interface" >&6; }
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
+fi
 
+# find the maximum length of command line arguments
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
+$as_echo_n "checking the maximum length of command line arguments... " >&6; }
+if ${lt_cv_sys_max_cmd_len+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+    i=0
+  teststring="ABCD"
 
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
 
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
 
+  cygwin* | mingw* | cegcc*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
 
+  mint*)
+    # On MiNT this can take a long time and run out of memory.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
 
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
 
+  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536	# usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
 
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
 
+  os2*)
+    # The test takes a long time on OS/2.
+    lt_cv_sys_max_cmd_len=8192
+    ;;
 
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[	 ]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8 ; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \
+	         = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+	      test $i != 17 # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
 
+fi
 
+if test -n $lt_cv_sys_max_cmd_len ; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
+$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
+$as_echo "none" >&6; }
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
 
 
 
 
 
 
+: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5
+$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; }
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+  test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,b/c, \
+    && eval 'test $(( 1 + 1 )) -eq 2 \
+    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+  && xsi_shell=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5
+$as_echo "$xsi_shell" >&6; }
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5
+$as_echo_n "checking whether the shell understands \"+=\"... " >&6; }
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
+    >/dev/null 2>&1 \
+  && lt_shell_append=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5
+$as_echo "$lt_shell_append" >&6; }
 
 
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  lt_unset=unset
+else
+  lt_unset=false
+fi
 
 
 
 
 
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  lt_SP2NL='tr \040 \012'
+  lt_NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  lt_SP2NL='tr \100 \n'
+  lt_NL2SP='tr \r\n \100\100'
+  ;;
+esac
 
 
 
@@ -4338,41 +5096,137 @@ fi
 
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
+$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
+if ${lt_cv_to_host_file_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+        ;;
+    esac
+    ;;
+  *-*-cygwin* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_noop
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+        ;;
+    esac
+    ;;
+  * ) # unhandled hosts (and "normal" native builds)
+    lt_cv_to_host_file_cmd=func_convert_file_noop
+    ;;
+esac
 
+fi
 
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
+$as_echo "$lt_cv_to_host_file_cmd" >&6; }
 
 
 
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
+$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
+if ${lt_cv_to_tool_file_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  #assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+        ;;
+    esac
+    ;;
+esac
 
+fi
 
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
+$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
 
 
 
 
 
-# Check the gettext tools to make sure they are GNU
-# Extract the first word of "xgettext", so it can be a program name with args.
-set dummy xgettext; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_XGETTEXT+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+$as_echo_n "checking for $LD option to reload object files... " >&6; }
+if ${lt_cv_ld_reload_flag+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  case $XGETTEXT in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+  lt_cv_ld_reload_flag='-r'
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
+$as_echo "$lt_cv_ld_reload_flag" >&6; }
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    if test "$GCC" != yes; then
+      reload_cmds=false
+    fi
+    ;;
+  darwin*)
+    if test "$GCC" = yes; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OBJDUMP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OBJDUMP"; then
+  ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_XGETTEXT="$as_dir/$ac_word$ac_exec_ext"
+    ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -4380,39 +5234,39 @@ done
   done
 IFS=$as_save_IFS
 
-  ;;
-esac
 fi
-XGETTEXT=$ac_cv_path_XGETTEXT
-if test -n "$XGETTEXT"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5
-$as_echo "$XGETTEXT" >&6; }
+fi
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+$as_echo "$OBJDUMP" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-# Extract the first word of "msgmerge", so it can be a program name with args.
-set dummy msgmerge; ac_word=$2
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+  ac_ct_OBJDUMP=$OBJDUMP
+  # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_MSGMERGE+:} false; then :
+if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  case $MSGMERGE in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+  if test -n "$ac_ct_OBJDUMP"; then
+  ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_MSGMERGE="$as_dir/$ac_word$ac_exec_ext"
+    ac_cv_prog_ac_ct_OBJDUMP="objdump"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -4420,79 +5274,305 @@ done
   done
 IFS=$as_save_IFS
 
-  ;;
-esac
 fi
-MSGMERGE=$ac_cv_path_MSGMERGE
-if test -n "$MSGMERGE"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5
-$as_echo "$MSGMERGE" >&6; }
+fi
+ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+$as_echo "$ac_ct_OBJDUMP" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
+  if test "x$ac_ct_OBJDUMP" = x; then
+    OBJDUMP="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OBJDUMP=$ac_ct_OBJDUMP
+  fi
+else
+  OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
 
-# Extract the first word of "msgfmt", so it can be a program name with args.
-set dummy msgfmt; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_MSGFMT+:} false; then :
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
+$as_echo_n "checking how to recognize dependent libraries... " >&6; }
+if ${lt_cv_deplibs_check_method+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  case $MSGFMT in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
+  lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[4-9]*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi[45]*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+  # unless we find 'file', for example because we are cross-compiling.
+  # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
+  if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
+    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+    lt_cv_file_magic_cmd='func_win32_libid'
+  else
+    # Keep this pattern in sync with the one in func_win32_libid.
+    lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+    lt_cv_file_magic_cmd='$OBJDUMP -f'
+  fi
+  ;;
+
+cegcc*)
+  # use the weaker test based on 'objdump'. See mingw*.
+  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | dragonfly*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+haiku*)
+  lt_cv_deplibs_check_method=pass_all
   ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
   *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_MSGFMT="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+interix[3-9]*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
   fi
-done
-  done
-IFS=$as_save_IFS
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+*nto* | *qnx*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+openbsd*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+rdos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
 
+tpf*)
+  lt_cv_deplibs_check_method=pass_all
   ;;
 esac
+
 fi
-MSGFMT=$ac_cv_path_MSGFMT
-if test -n "$MSGFMT"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5
-$as_echo "$MSGFMT" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+$as_echo "$lt_cv_deplibs_check_method" >&6; }
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+  case $host_os in
+  mingw* | pw32*)
+    if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+      want_nocaseglob=yes
+    else
+      file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
+    fi
+    ;;
+  esac
 fi
 
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
 
-# Extract the first word of "gmsgfmt", so it can be a program name with args.
-set dummy gmsgfmt; ac_word=$2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dlltool; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_GMSGFMT+:} false; then :
+if ${ac_cv_prog_DLLTOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  case $GMSGFMT in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+  if test -n "$DLLTOOL"; then
+  ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext"
+    ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -4500,50 +5580,39 @@ done
   done
 IFS=$as_save_IFS
 
-  test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
-  ;;
-esac
 fi
-GMSGFMT=$ac_cv_path_GMSGFMT
-if test -n "$GMSGFMT"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5
-$as_echo "$GMSGFMT" >&6; }
+fi
+DLLTOOL=$ac_cv_prog_DLLTOOL
+if test -n "$DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
+$as_echo "$DLLTOOL" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-if test -z "$XGETTEXT" -o -z "$MSGMERGE" -o -z "$MSGFMT"; then
-    as_fn_error $? "GNU gettext tools not found; required for intltool" "$LINENO" 5
-fi
-xgversion="`$XGETTEXT --version|grep '(GNU ' 2> /dev/null`"
-mmversion="`$MSGMERGE --version|grep '(GNU ' 2> /dev/null`"
-mfversion="`$MSGFMT --version|grep '(GNU ' 2> /dev/null`"
-if test -z "$xgversion" -o -z "$mmversion" -o -z "$mfversion"; then
-    as_fn_error $? "GNU gettext tools not found; required for intltool" "$LINENO" 5
 fi
-
-# Extract the first word of "perl", so it can be a program name with args.
-set dummy perl; ac_word=$2
+if test -z "$ac_cv_prog_DLLTOOL"; then
+  ac_ct_DLLTOOL=$DLLTOOL
+  # Extract the first word of "dlltool", so it can be a program name with args.
+set dummy dlltool; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_INTLTOOL_PERL+:} false; then :
+if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  case $INTLTOOL_PERL in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_INTLTOOL_PERL="$INTLTOOL_PERL" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+  if test -n "$ac_ct_DLLTOOL"; then
+  ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_INTLTOOL_PERL="$as_dir/$ac_word$ac_exec_ext"
+    ac_cv_prog_ac_ct_DLLTOOL="dlltool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -4551,129 +5620,103 @@ done
   done
 IFS=$as_save_IFS
 
-  ;;
-esac
 fi
-INTLTOOL_PERL=$ac_cv_path_INTLTOOL_PERL
-if test -n "$INTLTOOL_PERL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_PERL" >&5
-$as_echo "$INTLTOOL_PERL" >&6; }
+fi
+ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
+if test -n "$ac_ct_DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
+$as_echo "$ac_ct_DLLTOOL" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
-
-if test -z "$INTLTOOL_PERL"; then
-   as_fn_error $? "perl not found" "$LINENO" 5
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for perl >= 5.8.1" >&5
-$as_echo_n "checking for perl >= 5.8.1... " >&6; }
-$INTLTOOL_PERL -e "use 5.8.1;" > /dev/null 2>&1
-if test $? -ne 0; then
-   as_fn_error $? "perl 5.8.1 is required for intltool" "$LINENO" 5
-else
-   IT_PERL_VERSION=`$INTLTOOL_PERL -e "printf '%vd', $^V"`
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $IT_PERL_VERSION" >&5
-$as_echo "$IT_PERL_VERSION" >&6; }
-fi
-if test "x" != "xno-xml"; then
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XML::Parser" >&5
-$as_echo_n "checking for XML::Parser... " >&6; }
-   if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
-$as_echo "ok" >&6; }
-   else
-       as_fn_error $? "XML::Parser perl module is required for intltool" "$LINENO" 5
-   fi
+  if test "x$ac_ct_DLLTOOL" = x; then
+    DLLTOOL="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DLLTOOL=$ac_ct_DLLTOOL
+  fi
+else
+  DLLTOOL="$ac_cv_prog_DLLTOOL"
 fi
 
-# Substitute ALL_LINGUAS so we can use it in po/Makefile
+test -z "$DLLTOOL" && DLLTOOL=dlltool
 
 
-# Set DATADIRNAME correctly if it is not set yet
-# (copied from glib-gettext.m4)
-if test -z "$DATADIRNAME"; then
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-int
-main ()
-{
-extern int _nl_msg_cat_cntr;
-                       return _nl_msg_cat_cntr
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  DATADIRNAME=share
-else
-  case $host in
-    *-*-solaris*)
-                        ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset"
-if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then :
-  DATADIRNAME=share
-else
-  DATADIRNAME=lib
-fi
 
-    ;;
-    *)
-    DATADIRNAME=lib
-    ;;
-    esac
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-fi
 
 
 
 
 
-GETTEXT_PACKAGE=$PACKAGE_TARNAME
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
+$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
+if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_sharedlib_from_linklib_cmd='unknown'
 
-cat >>confdefs.h <<_ACEOF
-#define GETTEXT_PACKAGE "$GETTEXT_PACKAGE"
-_ACEOF
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+  # two different shell functions defined in ltmain.sh
+  # decide which to use based on capabilities of $DLLTOOL
+  case `$DLLTOOL --help 2>&1` in
+  *--identify-strict*)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+    ;;
+  *)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+    ;;
+  esac
+  ;;
+*)
+  # fallback: assume linklib IS sharedlib
+  lt_cv_sharedlib_from_linklib_cmd="$ECHO"
+  ;;
+esac
 
-if test "x$USE_NLS" != "xno"; then :
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
+$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
 
-$as_echo "#define ENABLE_NLS 1" >>confdefs.h
 
-fi
 
 
 
-  # Check whether --enable-appdata-validate was given.
-if test "${enable_appdata_validate+set}" = set; then :
-  enableval=$enable_appdata_validate;
-fi
 
 
-  if test "x$enable_appdata_validate" != "xno"; then :
-  # Extract the first word of "appdata-validate", so it can be a program name with args.
-set dummy appdata-validate; ac_word=$2
+
+if test -n "$ac_tool_prefix"; then
+  for ac_prog in ar
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_APPDATA_VALIDATE+:} false; then :
+if ${ac_cv_prog_AR+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  case $APPDATA_VALIDATE in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_APPDATA_VALIDATE="$APPDATA_VALIDATE" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_APPDATA_VALIDATE="$as_dir/$ac_word$ac_exec_ext"
+    ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -4681,76 +5724,142 @@ done
   done
 IFS=$as_save_IFS
 
-  ;;
-esac
 fi
-APPDATA_VALIDATE=$ac_cv_path_APPDATA_VALIDATE
-if test -n "$APPDATA_VALIDATE"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $APPDATA_VALIDATE" >&5
-$as_echo "$APPDATA_VALIDATE" >&6; }
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-         if test "x$APPDATA_VALIDATE" = "x"; then :
-  have_appdata_validate=no
+    test -n "$AR" && break
+  done
+fi
+if test -z "$AR"; then
+  ac_ct_AR=$AR
+  for ac_prog in ar
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  have_appdata_validate=yes
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_AR="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
 
 fi
-else
-  have_appdata_validate=no
 fi
-
-  if test "x$have_appdata_validate" != "xno"; then :
-  appdata_validate=yes
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
 else
-  appdata_validate=no
-         if test "x$enable_appdata_validate" = "xyes"; then :
-  as_fn_error $? "AppData validation was requested but appdata-validate was not found" "$LINENO" 5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
+
+
+  test -n "$ac_ct_AR" && break
+done
+
+  if test "x$ac_ct_AR" = x; then
+    AR="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    AR=$ac_ct_AR
+  fi
 fi
 
-  appdataxmldir=${datadir}/appdata
+: ${AR=ar}
+: ${AR_FLAGS=cru}
 
 
-  APPDATA_XML_RULES='
-.PHONY : uninstall-appdata-xml install-appdata-xml clean-appdata-xml
 
-mostlyclean-am: clean-appdata-xml
 
-%.appdata.valid: %.appdata.xml
-	$(AM_V_GEN) if test -f "$<"; then d=; else d="$(srcdir)/"; fi; \
-		if test -n "$(APPDATA_VALIDATE)"; \
-			then $(APPDATA_VALIDATE) --nonet $${d}$<; fi \
-		&& touch $@
 
-check-am: $(appdata_XML:.appdata.xml=.appdata.valid)
-uninstall-am: uninstall-appdata-xml
-install-data-am: install-appdata-xml
 
-.SECONDARY: $(appdata_XML)
 
-install-appdata-xml: $(appdata_XML)
-	@$(NORMAL_INSTALL)
-	if test -n "$^"; then \
-		test -z "$(appdataxmldir)" || $(MKDIR_P) "$(DESTDIR)$(appdataxmldir)"; \
-		$(INSTALL_DATA) $^ "$(DESTDIR)$(appdataxmldir)"; \
-	fi
 
-uninstall-appdata-xml:
-	@$(NORMAL_UNINSTALL)
-	@list='\''$(appdata_XML)'\''; test -n "$(appdataxmldir)" || list=; \
-	files=`for p in $$list; do echo $$p; done | sed -e '\''s|^.*/||'\''`; \
-	test -n "$$files" || exit 0; \
-	echo " ( cd '\''$(DESTDIR)$(appdataxmldir)'\'' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(appdataxmldir)" && rm -f $$files
 
-clean-appdata-xml:
-	rm -f $(appdata_XML:.appdata.xml=.appdata.valid)
-'
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
+$as_echo_n "checking for archiver @FILE support... " >&6; }
+if ${lt_cv_ar_at_file+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ar_at_file=no
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  echo conftest.$ac_objext > conftest.lst
+      lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
+      { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+  (eval $lt_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+      if test "$ac_status" -eq 0; then
+	# Ensure the archiver fails upon bogus file names.
+	rm -f conftest.$ac_objext libconftest.a
+	{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+  (eval $lt_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+	if test "$ac_status" -ne 0; then
+          lt_cv_ar_at_file=@
+        fi
+      fi
+      rm -f conftest.* libconftest.a
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
+$as_echo "$lt_cv_ar_at_file" >&6; }
+
+if test "x$lt_cv_ar_at_file" = xno; then
+  archiver_list_spec=
+else
+  archiver_list_spec=$lt_cv_ar_at_file
+fi
 
 
 
@@ -4758,21 +5867,16 @@ clean-appdata-xml:
 
 
 
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
 if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
+if ${ac_cv_prog_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -4781,7 +5885,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -4791,10 +5895,10 @@ IFS=$as_save_IFS
 
 fi
 fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
@@ -4802,17 +5906,17 @@ fi
 
 
 fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -4821,7 +5925,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="gcc"
+    ac_cv_prog_ac_ct_STRIP="strip"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -4831,17 +5935,17 @@ IFS=$as_save_IFS
 
 fi
 fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
-  if test "x$ac_ct_CC" = x; then
-    CC=""
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
@@ -4849,122 +5953,29 @@ yes:)
 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
-    CC=$ac_ct_CC
+    STRIP=$ac_ct_STRIP
   fi
 else
-  CC="$ac_cv_prog_CC"
+  STRIP="$ac_cv_prog_STRIP"
 fi
 
-if test -z "$CC"; then
-          if test -n "$ac_tool_prefix"; then
-    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}cc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
+test -z "$STRIP" && STRIP=:
 
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
 
 
-  fi
-fi
-if test -z "$CC"; then
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-  ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
-       ac_prog_rejected=yes
-       continue
-     fi
-    ac_cv_prog_CC="cc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
 
-if test $ac_prog_rejected = yes; then
-  # We found a bogon in the path, so make sure we never use it.
-  set dummy $ac_cv_prog_CC
-  shift
-  if test $# != 0; then
-    # We chose a different compiler from the bogus one.
-    # However, it has the same basename, so the bogon will be chosen
-    # first if we set CC to just the basename; use the full file name.
-    shift
-    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
-  fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
 
 
-fi
-if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  for ac_prog in cl.exe
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
+if ${ac_cv_prog_RANLIB+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -4973,7 +5984,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -4983,32 +5994,28 @@ IFS=$as_save_IFS
 
 fi
 fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-    test -n "$CC" && break
-  done
 fi
-if test -z "$CC"; then
-  ac_ct_CC=$CC
-  for ac_prog in cl.exe
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -5017,7 +6024,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="$ac_prog"
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -5027,21 +6034,17 @@ IFS=$as_save_IFS
 
 fi
 fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
-
-  test -n "$ac_ct_CC" && break
-done
-
-  if test "x$ac_ct_CC" = x; then
-    CC=""
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
@@ -5049,656 +6052,10317 @@ yes:)
 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
-    CC=$ac_ct_CC
+    RANLIB=$ac_ct_RANLIB
   fi
+else
+  RANLIB="$ac_cv_prog_RANLIB"
 fi
 
-fi
+test -z "$RANLIB" && RANLIB=:
 
 
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5; }
 
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
-  { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    sed '10a\
-... rest of stderr output deleted ...
-         10q' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-  fi
-  rm -f conftest.er1 conftest.err
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-done
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
 
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_compiler_gnu=yes
-else
-  ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
 
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
-  GCC=yes
-else
-  GCC=
-fi
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_save_c_werror_flag=$ac_c_werror_flag
-   ac_c_werror_flag=yes
-   ac_cv_prog_cc_g=no
-   CFLAGS="-g"
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-int
-main ()
-{
+case $host_os in
+  darwin*)
+    lock_old_archive_extraction=yes ;;
+  *)
+    lock_old_archive_extraction=no ;;
+esac
 
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_g=yes
-else
-  CFLAGS=""
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-int
-main ()
-{
 
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
 
-else
-  ac_c_werror_flag=$ac_save_c_werror_flag
-	 CFLAGS="-g"
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-int
-main ()
-{
 
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
-  CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
-  if test "$GCC" = yes; then
-    CFLAGS="-g -O2"
-  else
-    CFLAGS="-g"
-  fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
+$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
+if ${lt_cv_sys_global_symbol_pipe+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  if test "$GCC" = yes; then
-    CFLAGS="-O2"
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[BCDT]'
+  ;;
+cygwin* | mingw* | pw32* | cegcc*)
+  symcode='[ABCDGISTW]'
+  ;;
+hpux*)
+  if test "$host_cpu" = ia64; then
+    symcode='[ABCDEGRST]'
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[BCDEGRST]'
+  ;;
+osf*)
+  symcode='[BCDEGQRST]'
+  ;;
+solaris*)
+  symcode='[BDRT]'
+  ;;
+sco3.2v5*)
+  symcode='[DT]'
+  ;;
+sysv4.2uw2*)
+  symcode='[DT]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[ABDT]'
+  ;;
+sysv4)
+  symcode='[DFNSTU]'
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[ABCDGIRSTW]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+    # Fake it for dumpbin and say T for any non-static function
+    # and D for any global variable.
+    # Also find C++ and __fastcall symbols from MSVC++,
+    # which start with @ or ?.
+    lt_cv_sys_global_symbol_pipe="$AWK '"\
+"     {last_section=section; section=\$ 3};"\
+"     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
+"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     \$ 0!~/External *\|/{next};"\
+"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+"     {if(hide[section]) next};"\
+"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+"     ' prfx=^$ac_symprfx"
   else
-    CFLAGS=
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[	 ]\($symcode$symcode*\)[	 ][	 ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
   fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
-     char **p;
-     int i;
-{
-  return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
-  char *s;
-  va_list v;
-  va_start (v,p);
-  s = g (p, va_arg (v,int));
-  va_end (v);
-  return s;
+  lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
 }
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
 
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
-   function prototypes and stuff, but not '\xHH' hex character constants.
-   These don't provoke an error unfortunately, instead are silently treated
-   as 'x'.  The following induces an error, until -std is added to get
-   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
-   array size at least.  It's necessary to write '\x00'==0 to get something
-   that's true only with -std.  */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5
+  (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+	mv -f "$nlist"T "$nlist"
+      else
+	rm -f "$nlist"T
+      fi
 
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
-   inside strings and character constants.  */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+      # Make sure that we snagged all the symbols we need.
+      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+	  cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
+/* DATA imports from DLLs on WIN32 con't be const, because runtime
+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
+# define LT_DLSYM_CONST
+#elif defined(__osf__)
+/* This system does not cope well with relocations in const data.  */
+# define LT_DLSYM_CONST
+#else
+# define LT_DLSYM_CONST const
+#endif
 
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+	  # Now generate the symbol file.
+	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+	  cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols.  */
+LT_DLSYM_CONST struct {
+  const char *name;
+  void       *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[] =
 {
-return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
-  ;
-  return 0;
+  { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+	  cat <<\_LT_EOF >> conftest.$ac_ext
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt__PROGRAM__LTX_preloaded_symbols;
 }
-_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
-	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
-  CC="$ac_save_CC $ac_arg"
-  if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_c89=$ac_arg
-fi
-rm -f core conftest.err conftest.$ac_objext
-  test "x$ac_cv_prog_cc_c89" != "xno" && break
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+	  # Now try linking the two files.
+	  mv conftest.$ac_objext conftstm.$ac_objext
+	  lt_globsym_save_LIBS=$LIBS
+	  lt_globsym_save_CFLAGS=$CFLAGS
+	  LIBS="conftstm.$ac_objext"
+	  CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest${ac_exeext}; then
+	    pipe_works=yes
+	  fi
+	  LIBS=$lt_globsym_save_LIBS
+	  CFLAGS=$lt_globsym_save_CFLAGS
+	else
+	  echo "cannot find nm_test_func in $nlist" >&5
+	fi
+      else
+	echo "cannot find nm_test_var in $nlist" >&5
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+    fi
+  else
+    echo "$progname: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+  fi
+  rm -rf conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
 done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
 
 fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
-  x)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
-  xno)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
-  *)
-    CC="$CC $ac_cv_prog_cc_c89"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
+$as_echo "failed" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+$as_echo "ok" >&6; }
+fi
+
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
+  nm_file_list_spec='@'
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
+$as_echo_n "checking for sysroot... " >&6; }
+
+# Check whether --with-sysroot was given.
+if test "${with_sysroot+set}" = set; then :
+  withval=$with_sysroot;
+else
+  with_sysroot=no
+fi
+
+
+lt_sysroot=
+case ${with_sysroot} in #(
+ yes)
+   if test "$GCC" = yes; then
+     lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+   fi
+   ;; #(
+ /*)
+   lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+   ;; #(
+ no|'')
+   ;; #(
+ *)
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5
+$as_echo "${with_sysroot}" >&6; }
+   as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
+   ;;
 esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
+$as_echo "${lt_sysroot:-no}" >&6; }
+
+
+
+
+
+# Check whether --enable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then :
+  enableval=$enable_libtool_lock;
+fi
+
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.$ac_objext` in
+      *ELF-32*)
+	HPUX_IA64_MODE="32"
+	;;
+      *ELF-64*)
+	HPUX_IA64_MODE="64"
+	;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '#line '$LINENO' "configure"' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    if test "$lt_cv_prog_gnu_ld" = yes; then
+      case `/usr/bin/file conftest.$ac_objext` in
+	*32-bit*)
+	  LD="${LD-ld} -melf32bsmip"
+	  ;;
+	*N32*)
+	  LD="${LD-ld} -melf32bmipn32"
+	  ;;
+	*64-bit*)
+	  LD="${LD-ld} -melf64bmip"
+	;;
+      esac
+    else
+      case `/usr/bin/file conftest.$ac_objext` in
+	*32-bit*)
+	  LD="${LD-ld} -32"
+	  ;;
+	*N32*)
+	  LD="${LD-ld} -n32"
+	  ;;
+	*64-bit*)
+	  LD="${LD-ld} -64"
+	  ;;
+      esac
+    fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.o` in
+      *32-bit*)
+	case $host in
+	  x86_64-*kfreebsd*-gnu)
+	    LD="${LD-ld} -m elf_i386_fbsd"
+	    ;;
+	  x86_64-*linux*)
+	    LD="${LD-ld} -m elf_i386"
+	    ;;
+	  powerpc64le-*linux*)
+	    LD="${LD-ld} -m elf32lppclinux"
+	    ;;
+	  powerpc64-*linux*)
+	    LD="${LD-ld} -m elf32ppclinux"
+	    ;;
+	  s390x-*linux*)
+	    LD="${LD-ld} -m elf_s390"
+	    ;;
+	  sparc64-*linux*)
+	    LD="${LD-ld} -m elf32_sparc"
+	    ;;
+	esac
+	;;
+      *64-bit*)
+	case $host in
+	  x86_64-*kfreebsd*-gnu)
+	    LD="${LD-ld} -m elf_x86_64_fbsd"
+	    ;;
+	  x86_64-*linux*)
+	    LD="${LD-ld} -m elf_x86_64"
+	    ;;
+	  powerpcle-*linux*)
+	    LD="${LD-ld} -m elf64lppc"
+	    ;;
+	  powerpc-*linux*)
+	    LD="${LD-ld} -m elf64ppc"
+	    ;;
+	  s390*-*linux*|s390*-*tpf*)
+	    LD="${LD-ld} -m elf64_s390"
+	    ;;
+	  sparc*-*linux*)
+	    LD="${LD-ld} -m elf64_sparc"
+	    ;;
+	esac
+	;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
+$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
+if ${lt_cv_cc_needs_belf+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_cc_needs_belf=yes
+else
+  lt_cv_cc_needs_belf=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+     ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
+$as_echo "$lt_cv_cc_needs_belf" >&6; }
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+*-*solaris*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*)
+        case $host in
+        i?86-*-solaris*)
+          LD="${LD-ld} -m elf_x86_64"
+          ;;
+        sparc*-*-solaris*)
+          LD="${LD-ld} -m elf64_sparc"
+          ;;
+        esac
+        # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.
+        if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+          LD="${LD-ld}_sol2"
+        fi
+        ;;
+      *)
+	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+	  LD="${LD-ld} -64"
+	fi
+	;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+esac
+
+need_locks="$enable_libtool_lock"
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
+set dummy ${ac_tool_prefix}mt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$MANIFEST_TOOL"; then
+  ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
+if test -n "$MANIFEST_TOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
+$as_echo "$MANIFEST_TOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
+  ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
+  # Extract the first word of "mt", so it can be a program name with args.
+set dummy mt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_MANIFEST_TOOL"; then
+  ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
+if test -n "$ac_ct_MANIFEST_TOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
+$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_MANIFEST_TOOL" = x; then
+    MANIFEST_TOOL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
+  fi
+else
+  MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
+fi
+
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
+$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
+if ${lt_cv_path_mainfest_tool+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_path_mainfest_tool=no
+  echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
+  $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+  cat conftest.err >&5
+  if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+    lt_cv_path_mainfest_tool=yes
+  fi
+  rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
+$as_echo "$lt_cv_path_mainfest_tool" >&6; }
+if test "x$lt_cv_path_mainfest_tool" != xyes; then
+  MANIFEST_TOOL=:
+fi
+
+
+
+
+
+
+  case $host_os in
+    rhapsody* | darwin*)
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DSYMUTIL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DSYMUTIL"; then
+  ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DSYMUTIL=$ac_cv_prog_DSYMUTIL
+if test -n "$DSYMUTIL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
+$as_echo "$DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DSYMUTIL"; then
+  ac_ct_DSYMUTIL=$DSYMUTIL
+  # Extract the first word of "dsymutil", so it can be a program name with args.
+set dummy dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DSYMUTIL"; then
+  ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
+if test -n "$ac_ct_DSYMUTIL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
+$as_echo "$ac_ct_DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_DSYMUTIL" = x; then
+    DSYMUTIL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DSYMUTIL=$ac_ct_DSYMUTIL
+  fi
+else
+  DSYMUTIL="$ac_cv_prog_DSYMUTIL"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
+set dummy ${ac_tool_prefix}nmedit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_NMEDIT+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$NMEDIT"; then
+  ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+NMEDIT=$ac_cv_prog_NMEDIT
+if test -n "$NMEDIT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
+$as_echo "$NMEDIT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_NMEDIT"; then
+  ac_ct_NMEDIT=$NMEDIT
+  # Extract the first word of "nmedit", so it can be a program name with args.
+set dummy nmedit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_NMEDIT"; then
+  ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_NMEDIT="nmedit"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
+if test -n "$ac_ct_NMEDIT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
+$as_echo "$ac_ct_NMEDIT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_NMEDIT" = x; then
+    NMEDIT=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    NMEDIT=$ac_ct_NMEDIT
+  fi
+else
+  NMEDIT="$ac_cv_prog_NMEDIT"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
+set dummy ${ac_tool_prefix}lipo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_LIPO+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$LIPO"; then
+  ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+LIPO=$ac_cv_prog_LIPO
+if test -n "$LIPO"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
+$as_echo "$LIPO" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_LIPO"; then
+  ac_ct_LIPO=$LIPO
+  # Extract the first word of "lipo", so it can be a program name with args.
+set dummy lipo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_LIPO+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_LIPO"; then
+  ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_LIPO="lipo"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
+if test -n "$ac_ct_LIPO"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
+$as_echo "$ac_ct_LIPO" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_LIPO" = x; then
+    LIPO=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    LIPO=$ac_ct_LIPO
+  fi
+else
+  LIPO="$ac_cv_prog_LIPO"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL"; then
+  ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL=$ac_cv_prog_OTOOL
+if test -n "$OTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
+$as_echo "$OTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL"; then
+  ac_ct_OTOOL=$OTOOL
+  # Extract the first word of "otool", so it can be a program name with args.
+set dummy otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OTOOL"; then
+  ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_OTOOL="otool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
+if test -n "$ac_ct_OTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
+$as_echo "$ac_ct_OTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OTOOL" = x; then
+    OTOOL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OTOOL=$ac_ct_OTOOL
+  fi
+else
+  OTOOL="$ac_cv_prog_OTOOL"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool64; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OTOOL64+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL64"; then
+  ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL64=$ac_cv_prog_OTOOL64
+if test -n "$OTOOL64"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
+$as_echo "$OTOOL64" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL64"; then
+  ac_ct_OTOOL64=$OTOOL64
+  # Extract the first word of "otool64", so it can be a program name with args.
+set dummy otool64; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OTOOL64"; then
+  ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_OTOOL64="otool64"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
+if test -n "$ac_ct_OTOOL64"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
+$as_echo "$ac_ct_OTOOL64" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OTOOL64" = x; then
+    OTOOL64=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OTOOL64=$ac_ct_OTOOL64
+  fi
+else
+  OTOOL64="$ac_cv_prog_OTOOL64"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
+$as_echo_n "checking for -single_module linker flag... " >&6; }
+if ${lt_cv_apple_cc_single_mod+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_apple_cc_single_mod=no
+      if test -z "${LT_MULTI_MODULE}"; then
+	# By default we will add the -single_module flag. You can override
+	# by either setting the environment variable LT_MULTI_MODULE
+	# non-empty at configure time, or by adding -multi_module to the
+	# link flags.
+	rm -rf libconftest.dylib*
+	echo "int foo(void){return 1;}" > conftest.c
+	echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&5
+	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+        _lt_result=$?
+	# If there is a non-empty error log, and "single_module"
+	# appears in it, assume the flag caused a linker warning
+        if test -s conftest.err && $GREP single_module conftest.err; then
+	  cat conftest.err >&5
+	# Otherwise, if the output was created with a 0 exit code from
+	# the compiler, it worked.
+	elif test -f libconftest.dylib && test $_lt_result -eq 0; then
+	  lt_cv_apple_cc_single_mod=yes
+	else
+	  cat conftest.err >&5
+	fi
+	rm -rf libconftest.dylib*
+	rm -f conftest.*
+      fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
+$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
+$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
+if ${lt_cv_ld_exported_symbols_list+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_exported_symbols_list=no
+      save_LDFLAGS=$LDFLAGS
+      echo "_main" > conftest.sym
+      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_ld_exported_symbols_list=yes
+else
+  lt_cv_ld_exported_symbols_list=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+	LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
+$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
+$as_echo_n "checking for -force_load linker flag... " >&6; }
+if ${lt_cv_ld_force_load+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_force_load=no
+      cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
+      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
+      echo "$AR cru libconftest.a conftest.o" >&5
+      $AR cru libconftest.a conftest.o 2>&5
+      echo "$RANLIB libconftest.a" >&5
+      $RANLIB libconftest.a 2>&5
+      cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5
+      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+      _lt_result=$?
+      if test -s conftest.err && $GREP force_load conftest.err; then
+	cat conftest.err >&5
+      elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then
+	lt_cv_ld_force_load=yes
+      else
+	cat conftest.err >&5
+      fi
+        rm -f conftest.err libconftest.a conftest conftest.c
+        rm -rf conftest.dSYM
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
+$as_echo "$lt_cv_ld_force_load" >&6; }
+    case $host_os in
+    rhapsody* | darwin1.[012])
+      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+    darwin1.*)
+      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+    darwin*) # darwin 5.x on
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it?
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+	10.0,*86*-darwin8*|10.0,*-darwin[91]*)
+	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+	10.[012]*)
+	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+	10.*)
+	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+      esac
+    ;;
+  esac
+    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    fi
+    if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if ${ac_cv_prog_CPP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if ${ac_cv_header_stdc+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_header_stdc=yes
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+		   (('a' <= (c) && (c) <= 'i') \
+		     || ('j' <= (c) && (c) <= 'r') \
+		     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+	|| toupper (i) != TOUPPER (i))
+      return 2;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+		  inttypes.h stdint.h unistd.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in dlfcn.h
+do :
+  ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
+"
+if test "x$ac_cv_header_dlfcn_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DLFCN_H 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+
+# Set options
+# Check whether --enable-static was given.
+if test "${enable_static+set}" = set; then :
+  enableval=$enable_static; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_static=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_static=no
+fi
+
+
+
+
+
+
+
+
+
+
+        enable_dlopen=no
+
+
+  enable_win32_dll=no
+
+
+            # Check whether --enable-shared was given.
+if test "${enable_shared+set}" = set; then :
+  enableval=$enable_shared; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_shared=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_shared=yes
+fi
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-pic was given.
+if test "${with_pic+set}" = set; then :
+  withval=$with_pic; lt_p=${PACKAGE-default}
+    case $withval in
+    yes|no) pic_mode=$withval ;;
+    *)
+      pic_mode=default
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for lt_pkg in $withval; do
+	IFS="$lt_save_ifs"
+	if test "X$lt_pkg" = "X$lt_p"; then
+	  pic_mode=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  pic_mode=default
+fi
+
+
+test -z "$pic_mode" && pic_mode=default
+
+
+
+
+
+
+
+  # Check whether --enable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then :
+  enableval=$enable_fast_install; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_fast_install=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_fast_install=yes
+fi
+
+
+
+
+
+
+
+
+
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+test -z "$LN_S" && LN_S="ln -s"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
+$as_echo_n "checking for objdir... " >&6; }
+if ${lt_cv_objdir+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
+$as_echo "$lt_cv_objdir" >&6; }
+objdir=$lt_cv_objdir
+
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define LT_OBJDIR "$lt_cv_objdir/"
+_ACEOF
+
+
+
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+for cc_temp in $compiler""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
+$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/${ac_tool_prefix}file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+_LT_EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
+$as_echo_n "checking for file... " >&6; }
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/file"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+_LT_EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  else
+    MAGIC_CMD=:
+  fi
+fi
+
+  fi
+  ;;
+esac
+
+# Use C for the default configuration in the libtool script
+
+lt_save_CC="$CC"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+
+lt_prog_compiler_no_builtin_flag=
+
+if test "$GCC" = yes; then
+  case $cc_basename in
+  nvcc*)
+    lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;;
+  *)
+    lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;;
+  esac
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
+if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_rtti_exceptions=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="-fno-rtti -fno-exceptions"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_rtti_exceptions=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+    lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+    :
+fi
+
+fi
+
+
+
+
+
+
+  lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+
+  if test "$GCC" = yes; then
+    lt_prog_compiler_wl='-Wl,'
+    lt_prog_compiler_static='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            lt_prog_compiler_pic='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic='-fno-common'
+      ;;
+
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      lt_prog_compiler_static=
+      ;;
+
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic='-fPIC'
+	;;
+      esac
+      ;;
+
+    interix[3-9]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      lt_prog_compiler_can_build_shared=no
+      enable_shared=no
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic=-Kconform_pic
+      fi
+      ;;
+
+    *)
+      lt_prog_compiler_pic='-fPIC'
+      ;;
+    esac
+
+    case $cc_basename in
+    nvcc*) # Cuda Compiler Driver 2.2
+      lt_prog_compiler_wl='-Xlinker '
+      if test -n "$lt_prog_compiler_pic"; then
+        lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic"
+      fi
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      lt_prog_compiler_wl='-Wl,'
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static='-Bstatic'
+      else
+	lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      lt_prog_compiler_static='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC (with -KPIC) is the default.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    linux* | k*bsd*-gnu | kopensolaris*-gnu)
+      case $cc_basename in
+      # old Intel for x86_64 which still supported -KPIC.
+      ecc*)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-KPIC'
+	lt_prog_compiler_static='-static'
+        ;;
+      # icc used to be incompatible with GCC.
+      # ICC 10 doesn't accept -KPIC any more.
+      icc* | ifort*)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-fPIC'
+	lt_prog_compiler_static='-static'
+        ;;
+      # Lahey Fortran 8.1.
+      lf95*)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='--shared'
+	lt_prog_compiler_static='--static'
+	;;
+      nagfor*)
+	# NAG Fortran compiler
+	lt_prog_compiler_wl='-Wl,-Wl,,'
+	lt_prog_compiler_pic='-PIC'
+	lt_prog_compiler_static='-Bstatic'
+	;;
+      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+	# which looks to be a dead project)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-fpic'
+	lt_prog_compiler_static='-Bstatic'
+        ;;
+      ccc*)
+        lt_prog_compiler_wl='-Wl,'
+        # All Alpha code is PIC.
+        lt_prog_compiler_static='-non_shared'
+        ;;
+      xl* | bgxl* | bgf* | mpixl*)
+	# IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-qpic'
+	lt_prog_compiler_static='-qstaticlink'
+	;;
+      *)
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*)
+	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
+	  lt_prog_compiler_pic='-KPIC'
+	  lt_prog_compiler_static='-Bstatic'
+	  lt_prog_compiler_wl=''
+	  ;;
+	*Sun\ F* | *Sun*Fortran*)
+	  lt_prog_compiler_pic='-KPIC'
+	  lt_prog_compiler_static='-Bstatic'
+	  lt_prog_compiler_wl='-Qoption ld '
+	  ;;
+	*Sun\ C*)
+	  # Sun C 5.9
+	  lt_prog_compiler_pic='-KPIC'
+	  lt_prog_compiler_static='-Bstatic'
+	  lt_prog_compiler_wl='-Wl,'
+	  ;;
+        *Intel*\ [CF]*Compiler*)
+	  lt_prog_compiler_wl='-Wl,'
+	  lt_prog_compiler_pic='-fPIC'
+	  lt_prog_compiler_static='-static'
+	  ;;
+	*Portland\ Group*)
+	  lt_prog_compiler_wl='-Wl,'
+	  lt_prog_compiler_pic='-fpic'
+	  lt_prog_compiler_static='-Bstatic'
+	  ;;
+	esac
+	;;
+      esac
+      ;;
+
+    newsos6)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      lt_prog_compiler_wl='-Wl,'
+      # All OSF/1 code is PIC.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    rdos*)
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    solaris*)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+	lt_prog_compiler_wl='-Qoption ld ';;
+      *)
+	lt_prog_compiler_wl='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      lt_prog_compiler_wl='-Qoption ld '
+      lt_prog_compiler_pic='-PIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	lt_prog_compiler_pic='-Kconform_pic'
+	lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    unicos*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_can_build_shared=no
+      ;;
+
+    uts4*)
+      lt_prog_compiler_pic='-pic'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *)
+      lt_prog_compiler_can_build_shared=no
+      ;;
+    esac
+  fi
+
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic=
+    ;;
+  *)
+    lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+    ;;
+esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+if ${lt_cv_prog_compiler_pic+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
+$as_echo "$lt_cv_prog_compiler_pic" >&6; }
+lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
+if ${lt_cv_prog_compiler_pic_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_works=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_pic_works=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_pic_works" = xyes; then
+    case $lt_prog_compiler_pic in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+     esac
+else
+    lt_prog_compiler_pic=
+     lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if ${lt_cv_prog_compiler_static_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_static_works=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler_static_works=yes
+       fi
+     else
+       lt_cv_prog_compiler_static_works=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
+$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_static_works" = xyes; then
+    :
+else
+    lt_prog_compiler_static=
+fi
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+  if test "$hard_links" = no; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+  runpath_var=
+  allow_undefined_flag=
+  always_export_symbols=no
+  archive_cmds=
+  archive_expsym_cmds=
+  compiler_needs_object=no
+  enable_shared_with_static_runtimes=no
+  export_dynamic_flag_spec=
+  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  hardcode_automatic=no
+  hardcode_direct=no
+  hardcode_direct_absolute=no
+  hardcode_libdir_flag_spec=
+  hardcode_libdir_separator=
+  hardcode_minus_L=no
+  hardcode_shlibpath_var=unsupported
+  inherit_rpath=no
+  link_all_deplibs=unknown
+  module_cmds=
+  module_expsym_cmds=
+  old_archive_from_new_cmds=
+  old_archive_from_expsyms_cmds=
+  thread_safe_flag_spec=
+  whole_archive_flag_spec=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  include_expsyms=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  ld_shlibs=yes
+
+  # On some targets, GNU ld is compatible enough with the native linker
+  # that we're better off using the native interface for both.
+  lt_use_gnu_ld_interface=no
+  if test "$with_gnu_ld" = yes; then
+    case $host_os in
+      aix*)
+	# The AIX port of GNU ld has always aspired to compatibility
+	# with the native linker.  However, as the warning in the GNU ld
+	# block says, versions before 2.19.5* couldn't really create working
+	# shared libraries, regardless of the interface used.
+	case `$LD -v 2>&1` in
+	  *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+	  *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;;
+	  *\ \(GNU\ Binutils\)\ [3-9]*) ;;
+	  *)
+	    lt_use_gnu_ld_interface=yes
+	    ;;
+	esac
+	;;
+      *)
+	lt_use_gnu_ld_interface=yes
+	;;
+    esac
+  fi
+
+  if test "$lt_use_gnu_ld_interface" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    export_dynamic_flag_spec='${wl}--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      whole_archive_flag_spec=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v 2>&1` in
+      *GNU\ gold*) supports_anon_versioning=yes ;;
+      *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[3-9]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+	ld_shlibs=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.19, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
+
+_LT_EOF
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	allow_undefined_flag=unsupported
+	# Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+      # as there is no search path for DLLs.
+      hardcode_libdir_flag_spec='-L$libdir'
+      export_dynamic_flag_spec='${wl}--export-all-symbols'
+      allow_undefined_flag=unsupported
+      always_export_symbols=no
+      enable_shared_with_static_runtimes=yes
+      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+      exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	# If the export-symbols file already is a .def file (1st line
+	# is EXPORTS), use it as is; otherwise, prepend...
+	archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	  cp $export_symbols $output_objdir/$soname.def;
+	else
+	  echo EXPORTS > $output_objdir/$soname.def;
+	  cat $export_symbols >> $output_objdir/$soname.def;
+	fi~
+	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    haiku*)
+      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      link_all_deplibs=yes
+      ;;
+
+    interix[3-9]*)
+      hardcode_direct=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+      export_dynamic_flag_spec='${wl}-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+      tmp_diet=no
+      if test "$host_os" = linux-dietlibc; then
+	case $cc_basename in
+	  diet\ *) tmp_diet=yes;;	# linux-dietlibc with static linking (!diet-dyn)
+	esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+	 && test "$tmp_diet" = no
+      then
+	tmp_addflag=' $pic_flag'
+	tmp_sharedflag='-shared'
+	case $cc_basename,$host_cpu in
+        pgcc*)				# Portland Group C compiler
+	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_addflag=' $pic_flag'
+	  ;;
+	pgf77* | pgf90* | pgf95* | pgfortran*)
+					# Portland Group f77 and f90 compilers
+	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_addflag=' $pic_flag -Mnomain' ;;
+	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
+	  tmp_addflag=' -i_dynamic' ;;
+	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
+	  tmp_addflag=' -i_dynamic -nofor_main' ;;
+	ifc* | ifort*)			# Intel Fortran compiler
+	  tmp_addflag=' -nofor_main' ;;
+	lf95*)				# Lahey Fortran 8.1
+	  whole_archive_flag_spec=
+	  tmp_sharedflag='--shared' ;;
+	xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+	  tmp_sharedflag='-qmkshrobj'
+	  tmp_addflag= ;;
+	nvcc*)	# Cuda Compiler Driver 2.2
+	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  compiler_needs_object=yes
+	  ;;
+	esac
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ C*)			# Sun C 5.9
+	  whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  compiler_needs_object=yes
+	  tmp_sharedflag='-G' ;;
+	*Sun\ F*)			# Sun Fortran 8.3
+	  tmp_sharedflag='-G' ;;
+	esac
+	archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+        if test "x$supports_anon_versioning" = xyes; then
+          archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+	    cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+	    echo "local: *; };" >> $output_objdir/$libname.ver~
+	    $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+        fi
+
+	case $cc_basename in
+	xlf* | bgf* | bgxlf* | mpixlf*)
+	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+	  whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+	  hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+	  archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+	  if test "x$supports_anon_versioning" = xyes; then
+	    archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+	      echo "local: *; };" >> $output_objdir/$libname.ver~
+	      $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+	  fi
+	  ;;
+	esac
+      else
+        ld_shlibs=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+	ld_shlibs=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+	ld_shlibs=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+	;;
+	*)
+	  # For security reasons, it is highly recommended that you always
+	  # use absolute paths for naming shared libraries, and exclude the
+	  # DT_RUNPATH tag from executables and libraries.  But doing so
+	  # requires that you compile everything twice, which is a pain.
+	  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+	    archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	  else
+	    ld_shlibs=no
+	  fi
+	;;
+      esac
+      ;;
+
+    sunos4*)
+      archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+    esac
+
+    if test "$ld_shlibs" = no; then
+      runpath_var=
+      hardcode_libdir_flag_spec=
+      export_dynamic_flag_spec=
+      whole_archive_flag_spec=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      allow_undefined_flag=unsupported
+      always_export_symbols=yes
+      archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L=yes
+      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	hardcode_direct=unsupported
+      fi
+      ;;
+
+    aix[4-9]*)
+      if test "$host_cpu" = ia64; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=""
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	# Also, AIX nm treats weak defined symbols like other global
+	# defined symbols, whereas GNU nm marks them as "W".
+	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+	  export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	else
+	  export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# need to do runtime linking.
+	case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+	  for ld_flag in $LDFLAGS; do
+	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+	    aix_use_runtimelinking=yes
+	    break
+	  fi
+	  done
+	  ;;
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      archive_cmds=''
+      hardcode_direct=yes
+      hardcode_direct_absolute=yes
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      file_list_spec='${wl}-f,'
+
+      if test "$GCC" = yes; then
+	case $host_os in aix4.[012]|aix4.[012].*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" &&
+	   strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+	  then
+	  # We have reworked collect2
+	  :
+	  else
+	  # We have old collect2
+	  hardcode_direct=unsupported
+	  # It fails to find uninstalled libraries when the uninstalled
+	  # path is not listed in the libpath.  Setting hardcode_minus_L
+	  # to unsupported forces relinking
+	  hardcode_minus_L=yes
+	  hardcode_libdir_flag_spec='-L$libdir'
+	  hardcode_libdir_separator=
+	  fi
+	  ;;
+	esac
+	shared_flag='-shared'
+	if test "$aix_use_runtimelinking" = yes; then
+	  shared_flag="$shared_flag "'${wl}-G'
+	fi
+      else
+	# not using gcc
+	if test "$host_cpu" = ia64; then
+	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+	  if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag='${wl}-G'
+	  else
+	    shared_flag='${wl}-bM:SRE'
+	  fi
+	fi
+      fi
+
+      export_dynamic_flag_spec='${wl}-bexpall'
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      always_export_symbols=yes
+      if test "$aix_use_runtimelinking" = yes; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	allow_undefined_flag='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath_+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_="/usr/lib:/lib"
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath_
+fi
+
+        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+      else
+	if test "$host_cpu" = ia64; then
+	  hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+	  allow_undefined_flag="-z nodefs"
+	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an
+	 # empty executable.
+	 if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath_+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_="/usr/lib:/lib"
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath_
+fi
+
+	 hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  no_undefined_flag=' ${wl}-bernotok'
+	  allow_undefined_flag=' ${wl}-berok'
+	  if test "$with_gnu_ld" = yes; then
+	    # We only use this code for GNU lds that support --whole-archive.
+	    whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	  else
+	    # Exported symbols can be pulled into shared objects from archives
+	    whole_archive_flag_spec='$convenience'
+	  fi
+	  archive_cmds_need_lc=yes
+	  # This is similar to how AIX traditionally builds its shared libraries.
+	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
+
+    bsdi[45]*)
+      export_dynamic_flag_spec=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      case $cc_basename in
+      cl*)
+	# Native MSVC
+	hardcode_libdir_flag_spec=' '
+	allow_undefined_flag=unsupported
+	always_export_symbols=yes
+	file_list_spec='@'
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=".dll"
+	# FIXME: Setting linknames here is a bad hack.
+	archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+	archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	    sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+	  else
+	    sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+	  fi~
+	  $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+	  linknames='
+	# The linker will not automatically build a static lib if we build a DLL.
+	# _LT_TAGVAR(old_archive_from_new_cmds, )='true'
+	enable_shared_with_static_runtimes=yes
+	exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+	export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+	# Don't use ranlib
+	old_postinstall_cmds='chmod 644 $oldlib'
+	postlink_cmds='lt_outputfile="@OUTPUT@"~
+	  lt_tool_outputfile="@TOOL_OUTPUT@"~
+	  case $lt_outputfile in
+	    *.exe|*.EXE) ;;
+	    *)
+	      lt_outputfile="$lt_outputfile.exe"
+	      lt_tool_outputfile="$lt_tool_outputfile.exe"
+	      ;;
+	  esac~
+	  if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+	    $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+	    $RM "$lt_outputfile.manifest";
+	  fi'
+	;;
+      *)
+	# Assume MSVC wrapper
+	hardcode_libdir_flag_spec=' '
+	allow_undefined_flag=unsupported
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=".dll"
+	# FIXME: Setting linknames here is a bad hack.
+	archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+	# The linker will automatically build a .lib file if we build a DLL.
+	old_archive_from_new_cmds='true'
+	# FIXME: Should let the user specify the lib program.
+	old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+	enable_shared_with_static_runtimes=yes
+	;;
+      esac
+      ;;
+
+    darwin* | rhapsody*)
+
+
+  archive_cmds_need_lc=no
+  hardcode_direct=no
+  hardcode_automatic=yes
+  hardcode_shlibpath_var=unsupported
+  if test "$lt_cv_ld_force_load" = "yes"; then
+    whole_archive_flag_spec='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+
+  else
+    whole_archive_flag_spec=''
+  fi
+  link_all_deplibs=yes
+  allow_undefined_flag="$_lt_dar_allow_undefined"
+  case $cc_basename in
+     ifort*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test "$_lt_dar_can_shared" = "yes"; then
+    output_verbose_link_cmd=func_echo_all
+    archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+
+  else
+  ld_shlibs=no
+  fi
+
+      ;;
+
+    dgux*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2.*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+	archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+	archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_direct=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L=yes
+      export_dynamic_flag_spec='${wl}-E'
+      ;;
+
+    hpux10*)
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+	archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test "$with_gnu_ld" = no; then
+	hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+	hardcode_libdir_separator=:
+	hardcode_direct=yes
+	hardcode_direct_absolute=yes
+	export_dynamic_flag_spec='${wl}-E'
+	# hardcode_minus_L: Not really in the search PATH,
+	# but as the default location of the library.
+	hardcode_minus_L=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+	case $host_cpu in
+	hppa*64*)
+	  archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case $host_cpu in
+	hppa*64*)
+	  archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+
+	  # Older versions of the 11.00 compiler do not understand -b yet
+	  # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5
+$as_echo_n "checking if $CC understands -b... " >&6; }
+if ${lt_cv_prog_compiler__b+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler__b=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS -b"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler__b=yes
+       fi
+     else
+       lt_cv_prog_compiler__b=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
+$as_echo "$lt_cv_prog_compiler__b" >&6; }
+
+if test x"$lt_cv_prog_compiler__b" = xyes; then
+    archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+else
+    archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+fi
+
+	  ;;
+	esac
+      fi
+      if test "$with_gnu_ld" = no; then
+	hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+	hardcode_libdir_separator=:
+
+	case $host_cpu in
+	hppa*64*|ia64*)
+	  hardcode_direct=no
+	  hardcode_shlibpath_var=no
+	  ;;
+	*)
+	  hardcode_direct=yes
+	  hardcode_direct_absolute=yes
+	  export_dynamic_flag_spec='${wl}-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	# Try to use the -exported_symbol ld option, if it does not
+	# work, assume that -exports_file does not work either and
+	# implicitly export all symbols.
+	# This should be the same for all languages, so no per-tag cache variable.
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
+$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
+if ${lt_cv_irix_exported_symbol+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  save_LDFLAGS="$LDFLAGS"
+	   LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+	   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int foo (void) { return 0; }
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_irix_exported_symbol=yes
+else
+  lt_cv_irix_exported_symbol=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+           LDFLAGS="$save_LDFLAGS"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
+$as_echo "$lt_cv_irix_exported_symbol" >&6; }
+	if test "$lt_cv_irix_exported_symbol" = yes; then
+          archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+	fi
+      else
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      inherit_rpath=yes
+      link_all_deplibs=yes
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    newsos6)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_shlibpath_var=no
+      ;;
+
+    *nto* | *qnx*)
+      ;;
+
+    openbsd*)
+      if test -f /usr/libexec/ld.so; then
+	hardcode_direct=yes
+	hardcode_shlibpath_var=no
+	hardcode_direct_absolute=yes
+	if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	  archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+	  hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+	  export_dynamic_flag_spec='${wl}-E'
+	else
+	  case $host_os in
+	   openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+	     archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	     hardcode_libdir_flag_spec='-R$libdir'
+	     ;;
+	   *)
+	     archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	     hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+	     ;;
+	  esac
+	fi
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      allow_undefined_flag=unsupported
+      archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	allow_undefined_flag=' -expect_unresolved \*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      else
+	allow_undefined_flag=' -expect_unresolved \*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	hardcode_libdir_flag_spec='-rpath $libdir'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_separator=:
+      ;;
+
+    solaris*)
+      no_undefined_flag=' -z defs'
+      if test "$GCC" = yes; then
+	wlarc='${wl}'
+	archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+	case `$CC -V 2>&1` in
+	*"Compilers 5.0"*)
+	  wlarc=''
+	  archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+	  ;;
+	*)
+	  wlarc='${wl}'
+	  archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+	  ;;
+	esac
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_shlibpath_var=no
+      case $host_os in
+      solaris2.[0-5] | solaris2.[0-5].*) ;;
+      *)
+	# The compiler driver will combine and reorder linker options,
+	# but understands `-z linker_flag'.  GCC discards it without `$wl',
+	# but is careful enough not to reorder.
+	# Supported since Solaris 2.6 (maybe 2.5.1?)
+	if test "$GCC" = yes; then
+	  whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+	else
+	  whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
+	fi
+	;;
+      esac
+      link_all_deplibs=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  reload_cmds='$CC -r -o $output$reload_objs'
+	  hardcode_direct=no
+        ;;
+	motorola)
+	  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4.3*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var=no
+      export_dynamic_flag_spec='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	hardcode_shlibpath_var=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	ld_shlibs=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      no_undefined_flag='${wl}-z,text'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We can NOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      no_undefined_flag='${wl}-z,text'
+      allow_undefined_flag='${wl}-z,nodefs'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='${wl}-R,$libdir'
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      export_dynamic_flag_spec='${wl}-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      ld_shlibs=no
+      ;;
+    esac
+
+    if test x$host_vendor = xsni; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+	export_dynamic_flag_spec='${wl}-Blargedynsym'
+	;;
+      esac
+    fi
+  fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
+$as_echo "$ld_shlibs" >&6; }
+test "$ld_shlibs" = no && can_build_shared=no
+
+with_gnu_ld=$with_gnu_ld
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+if ${lt_cv_archive_cmds_need_lc+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  $RM conftest*
+	echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+	if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } 2>conftest.err; then
+	  soname=conftest
+	  lib=conftest
+	  libobjs=conftest.$ac_objext
+	  deplibs=
+	  wl=$lt_prog_compiler_wl
+	  pic_flag=$lt_prog_compiler_pic
+	  compiler_flags=-v
+	  linker_flags=-v
+	  verstring=
+	  output_objdir=.
+	  libname=conftest
+	  lt_save_allow_undefined_flag=$allow_undefined_flag
+	  allow_undefined_flag=
+	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+  (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+	  then
+	    lt_cv_archive_cmds_need_lc=no
+	  else
+	    lt_cv_archive_cmds_need_lc=yes
+	  fi
+	  allow_undefined_flag=$lt_save_allow_undefined_flag
+	else
+	  cat conftest.err 1>&5
+	fi
+	$RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc" >&6; }
+      archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+if test "$GCC" = yes; then
+  case $host_os in
+    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+    *) lt_awk_arg="/^libraries:/" ;;
+  esac
+  case $host_os in
+    mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;;
+    *) lt_sed_strip_eq="s,=/,/,g" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+  case $lt_search_path_spec in
+  *\;*)
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+    ;;
+  *)
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+    ;;
+  esac
+  # Ok, now we have the path, separated by spaces, we can step through it
+  # and add multilib dir if necessary.
+  lt_tmp_lt_search_path_spec=
+  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  for lt_sys_path in $lt_search_path_spec; do
+    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+    else
+      test -d "$lt_sys_path" && \
+	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+    fi
+  done
+  lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+  lt_foo="";
+  lt_count=0;
+  for (lt_i = NF; lt_i > 0; lt_i--) {
+    if ($lt_i != "" && $lt_i != ".") {
+      if ($lt_i == "..") {
+        lt_count++;
+      } else {
+        if (lt_count == 0) {
+          lt_foo="/" $lt_i lt_foo;
+        } else {
+          lt_count--;
+        }
+      }
+    }
+  }
+  if (lt_foo != "") { lt_freq[lt_foo]++; }
+  if (lt_freq[lt_foo] == 1) { print lt_foo; }
+}'`
+  # AWK program above erroneously prepends '/' to C:/dos/paths
+  # for these hosts.
+  case $host_os in
+    mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+      $SED 's,/\([A-Za-z]:\),\1,g'` ;;
+  esac
+  sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[4-9]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[45]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+
+      sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+    library_names_spec='${libname}.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec="$LIB"
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
+    ;;
+
+  *)
+    # Assume MSVC wrapper
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    dynamic_linker='Win32 ld.exe'
+    ;;
+  esac
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[23].*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2.*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+haiku*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+  postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
+  ;;
+
+interix[3-9]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux # correct to gnu/linux during the next big refactor
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+
+  # Some binutils ld are patched to set DT_RUNPATH
+  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+	 LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+  lt_cv_shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+
+fi
+
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Add ABI-specific directories to the system library path.
+  sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib"
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra"
+
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*)	need_version=yes ;;
+    *)				need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux # correct to gnu/linux during the next big refactor
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+	;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" ||
+   test -n "$runpath_var" ||
+   test "X$hardcode_automatic" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$hardcode_direct" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no &&
+     test "$hardcode_minus_L" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
+$as_echo "$hardcode_action" >&6; }
+
+if test "$hardcode_action" = relink ||
+   test "$inherit_rpath" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+
+
+
+
+
+  if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32* | cegcc*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if ${ac_cv_lib_dl_dlopen+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dl_dlopen=yes
+else
+  ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+
+fi
+
+    ;;
+
+  *)
+    ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
+if test "x$ac_cv_func_shl_load" = xyes; then :
+  lt_cv_dlopen="shl_load"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
+$as_echo_n "checking for shl_load in -ldld... " >&6; }
+if ${ac_cv_lib_dld_shl_load+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shl_load ();
+int
+main ()
+{
+return shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dld_shl_load=yes
+else
+  ac_cv_lib_dld_shl_load=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
+$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
+if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
+  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
+else
+  ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
+if test "x$ac_cv_func_dlopen" = xyes; then :
+  lt_cv_dlopen="dlopen"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if ${ac_cv_lib_dl_dlopen+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dl_dlopen=yes
+else
+  ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
+$as_echo_n "checking for dlopen in -lsvld... " >&6; }
+if ${ac_cv_lib_svld_dlopen+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_svld_dlopen=yes
+else
+  ac_cv_lib_svld_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
+$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
+if test "x$ac_cv_lib_svld_dlopen" = xyes; then :
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
+$as_echo_n "checking for dld_link in -ldld... " >&6; }
+if ${ac_cv_lib_dld_dld_link+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dld_link ();
+int
+main ()
+{
+return dld_link ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dld_dld_link=yes
+else
+  ac_cv_lib_dld_dld_link=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
+$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
+if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
+  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
+$as_echo_n "checking whether a program can dlopen itself... " >&6; }
+if ${lt_cv_dlopen_self+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+/* When -fvisbility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else
+        {
+	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+	}
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}
+_LT_EOF
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
+$as_echo "$lt_cv_dlopen_self" >&6; }
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
+$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
+if ${lt_cv_dlopen_self_static+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self_static=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+/* When -fvisbility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else
+        {
+	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+	}
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}
+_LT_EOF
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self_static=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
+$as_echo "$lt_cv_dlopen_self_static" >&6; }
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+striplib=
+old_striplib=
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
+$as_echo_n "checking whether stripping libraries is possible... " >&6; }
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP" ; then
+      striplib="$STRIP -x"
+      old_striplib="$STRIP -S"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    fi
+    ;;
+  *)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    ;;
+  esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+  # Report which library types will actually be built
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
+$as_echo_n "checking if libtool supports shared libraries... " >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
+$as_echo "$can_build_shared" >&6; }
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
+$as_echo_n "checking whether to build shared libraries... " >&6; }
+  test "$can_build_shared" = "no" && enable_shared=no
+
+  # On AIX, shared libraries and static libraries use the same namespace, and
+  # are all built from PIC.
+  case $host_os in
+  aix3*)
+    test "$enable_shared" = yes && enable_static=no
+    if test -n "$RANLIB"; then
+      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+      postinstall_cmds='$RANLIB $lib'
+    fi
+    ;;
+
+  aix[4-9]*)
+    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+      test "$enable_shared" = yes && enable_static=no
+    fi
+    ;;
+  esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
+$as_echo "$enable_shared" >&6; }
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
+$as_echo_n "checking whether to build static libraries... " >&6; }
+  # Make sure either enable_shared or enable_static is yes.
+  test "$enable_shared" = yes || enable_static=yes
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
+$as_echo "$enable_static" >&6; }
+
+
+
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+        ac_config_commands="$ac_config_commands libtool"
+
+
+
+
+# Only expand once:
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5
+$as_echo_n "checking whether NLS is requested... " >&6; }
+    # Check whether --enable-nls was given.
+if test "${enable_nls+set}" = set; then :
+  enableval=$enable_nls; USE_NLS=$enableval
+else
+  USE_NLS=yes
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5
+$as_echo "$USE_NLS" >&6; }
+
+
+
+
+case "$am__api_version" in
+    1.01234)
+	as_fn_error $? "Automake 1.5 or newer is required to use intltool" "$LINENO" 5
+    ;;
+    *)
+    ;;
+esac
+
+INTLTOOL_REQUIRED_VERSION_AS_INT=`echo 0.50.0 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'`
+INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3`
+INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'`
+if test -n "0.50.0"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intltool >= 0.50.0" >&5
+$as_echo_n "checking for intltool >= 0.50.0... " >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_APPLIED_VERSION found" >&5
+$as_echo "$INTLTOOL_APPLIED_VERSION found" >&6; }
+    test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" ||
+	as_fn_error $? "Your intltool is too old.  You need intltool 0.50.0 or later." "$LINENO" 5
+fi
+
+# Extract the first word of "intltool-update", so it can be a program name with args.
+set dummy intltool-update; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_INTLTOOL_UPDATE+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $INTLTOOL_UPDATE in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_INTLTOOL_UPDATE="$INTLTOOL_UPDATE" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_INTLTOOL_UPDATE="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+INTLTOOL_UPDATE=$ac_cv_path_INTLTOOL_UPDATE
+if test -n "$INTLTOOL_UPDATE"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_UPDATE" >&5
+$as_echo "$INTLTOOL_UPDATE" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Extract the first word of "intltool-merge", so it can be a program name with args.
+set dummy intltool-merge; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_INTLTOOL_MERGE+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $INTLTOOL_MERGE in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_INTLTOOL_MERGE="$INTLTOOL_MERGE" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_INTLTOOL_MERGE="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+INTLTOOL_MERGE=$ac_cv_path_INTLTOOL_MERGE
+if test -n "$INTLTOOL_MERGE"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_MERGE" >&5
+$as_echo "$INTLTOOL_MERGE" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Extract the first word of "intltool-extract", so it can be a program name with args.
+set dummy intltool-extract; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_INTLTOOL_EXTRACT+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $INTLTOOL_EXTRACT in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_INTLTOOL_EXTRACT="$INTLTOOL_EXTRACT" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_INTLTOOL_EXTRACT="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+INTLTOOL_EXTRACT=$ac_cv_path_INTLTOOL_EXTRACT
+if test -n "$INTLTOOL_EXTRACT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_EXTRACT" >&5
+$as_echo "$INTLTOOL_EXTRACT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT"; then
+    as_fn_error $? "The intltool scripts were not found. Please install intltool." "$LINENO" 5
+fi
+
+if test -z "$AM_DEFAULT_VERBOSITY"; then
+  AM_DEFAULT_VERBOSITY=1
+fi
+
+
+INTLTOOL_V_MERGE='$(INTLTOOL__v_MERGE_$(V))'
+INTLTOOL__v_MERGE_='$(INTLTOOL__v_MERGE_$(AM_DEFAULT_VERBOSITY))'
+INTLTOOL__v_MERGE_0='@echo "  ITMRG " $@;'
+
+
+
+
+INTLTOOL_V_MERGE_OPTIONS='$(intltool__v_merge_options_$(V))'
+intltool__v_merge_options_='$(intltool__v_merge_options_$(AM_DEFAULT_VERBOSITY))'
+intltool__v_merge_options_0='-q'
+
+
+
+
+  INTLTOOL_DESKTOP_RULE='%.desktop:   %.desktop.in   $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+     INTLTOOL_KEYS_RULE='%.keys:      %.keys.in      $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+     INTLTOOL_PROP_RULE='%.prop:      %.prop.in      $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+      INTLTOOL_OAF_RULE='%.oaf:       %.oaf.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -p $(top_srcdir)/po $< $@'
+     INTLTOOL_PONG_RULE='%.pong:      %.pong.in      $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+   INTLTOOL_SERVER_RULE='%.server:    %.server.in    $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+    INTLTOOL_SHEET_RULE='%.sheet:     %.sheet.in     $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+       INTLTOOL_UI_RULE='%.ui:        %.ui.in        $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+      INTLTOOL_XML_RULE='%.xml:       %.xml.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+if test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge 5000; then
+      INTLTOOL_XML_NOMERGE_RULE='%.xml:       %.xml.in       $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u --no-translations $< $@'
+else
+      INTLTOOL_XML_NOMERGE_RULE='%.xml:       %.xml.in       $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)_it_tmp_dir=tmp.intltool.$$RANDOM && mkdir $$_it_tmp_dir && LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u $$_it_tmp_dir $< $@ && rmdir $$_it_tmp_dir'
+fi
+      INTLTOOL_XAM_RULE='%.xam:       %.xml.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+      INTLTOOL_KBD_RULE='%.kbd:       %.kbd.in       $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+    INTLTOOL_CAVES_RULE='%.caves:     %.caves.in     $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+  INTLTOOL_SCHEMAS_RULE='%.schemas:   %.schemas.in   $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+    INTLTOOL_THEME_RULE='%.theme:     %.theme.in     $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+    INTLTOOL_SERVICE_RULE='%.service: %.service.in   $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+   INTLTOOL_POLICY_RULE='%.policy:    %.policy.in    $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check the gettext tools to make sure they are GNU
+# Extract the first word of "xgettext", so it can be a program name with args.
+set dummy xgettext; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_XGETTEXT+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $XGETTEXT in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_XGETTEXT="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+XGETTEXT=$ac_cv_path_XGETTEXT
+if test -n "$XGETTEXT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5
+$as_echo "$XGETTEXT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Extract the first word of "msgmerge", so it can be a program name with args.
+set dummy msgmerge; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_MSGMERGE+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $MSGMERGE in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_MSGMERGE="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+MSGMERGE=$ac_cv_path_MSGMERGE
+if test -n "$MSGMERGE"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5
+$as_echo "$MSGMERGE" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Extract the first word of "msgfmt", so it can be a program name with args.
+set dummy msgfmt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_MSGFMT+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $MSGFMT in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_MSGFMT="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+MSGFMT=$ac_cv_path_MSGFMT
+if test -n "$MSGFMT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5
+$as_echo "$MSGFMT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Extract the first word of "gmsgfmt", so it can be a program name with args.
+set dummy gmsgfmt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_GMSGFMT+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $GMSGFMT in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
+  ;;
+esac
+fi
+GMSGFMT=$ac_cv_path_GMSGFMT
+if test -n "$GMSGFMT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5
+$as_echo "$GMSGFMT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+if test -z "$XGETTEXT" -o -z "$MSGMERGE" -o -z "$MSGFMT"; then
+    as_fn_error $? "GNU gettext tools not found; required for intltool" "$LINENO" 5
+fi
+xgversion="`$XGETTEXT --version|grep '(GNU ' 2> /dev/null`"
+mmversion="`$MSGMERGE --version|grep '(GNU ' 2> /dev/null`"
+mfversion="`$MSGFMT --version|grep '(GNU ' 2> /dev/null`"
+if test -z "$xgversion" -o -z "$mmversion" -o -z "$mfversion"; then
+    as_fn_error $? "GNU gettext tools not found; required for intltool" "$LINENO" 5
+fi
+
+# Extract the first word of "perl", so it can be a program name with args.
+set dummy perl; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_INTLTOOL_PERL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $INTLTOOL_PERL in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_INTLTOOL_PERL="$INTLTOOL_PERL" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_INTLTOOL_PERL="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+INTLTOOL_PERL=$ac_cv_path_INTLTOOL_PERL
+if test -n "$INTLTOOL_PERL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_PERL" >&5
+$as_echo "$INTLTOOL_PERL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+if test -z "$INTLTOOL_PERL"; then
+   as_fn_error $? "perl not found" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for perl >= 5.8.1" >&5
+$as_echo_n "checking for perl >= 5.8.1... " >&6; }
+$INTLTOOL_PERL -e "use 5.8.1;" > /dev/null 2>&1
+if test $? -ne 0; then
+   as_fn_error $? "perl 5.8.1 is required for intltool" "$LINENO" 5
+else
+   IT_PERL_VERSION=`$INTLTOOL_PERL -e "printf '%vd', $^V"`
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $IT_PERL_VERSION" >&5
+$as_echo "$IT_PERL_VERSION" >&6; }
+fi
+if test "x" != "xno-xml"; then
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XML::Parser" >&5
+$as_echo_n "checking for XML::Parser... " >&6; }
+   if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+$as_echo "ok" >&6; }
+   else
+       as_fn_error $? "XML::Parser perl module is required for intltool" "$LINENO" 5
+   fi
+fi
+
+# Substitute ALL_LINGUAS so we can use it in po/Makefile
+
+
+# Set DATADIRNAME correctly if it is not set yet
+# (copied from glib-gettext.m4)
+if test -z "$DATADIRNAME"; then
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+extern int _nl_msg_cat_cntr;
+                       return _nl_msg_cat_cntr
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  DATADIRNAME=share
+else
+  case $host in
+    *-*-solaris*)
+                        ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset"
+if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then :
+  DATADIRNAME=share
+else
+  DATADIRNAME=lib
+fi
+
+    ;;
+    *)
+    DATADIRNAME=lib
+    ;;
+    esac
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+
+
+
+
+
+GETTEXT_PACKAGE=$PACKAGE_TARNAME
+
+
+cat >>confdefs.h <<_ACEOF
+#define GETTEXT_PACKAGE "$GETTEXT_PACKAGE"
+_ACEOF
+
+if test "x$USE_NLS" != "xno"; then :
+
+$as_echo "#define ENABLE_NLS 1" >>confdefs.h
+
+fi
+
+
+
+  # Check whether --enable-appdata-validate was given.
+if test "${enable_appdata_validate+set}" = set; then :
+  enableval=$enable_appdata_validate;
+fi
+
+
+  if test "x$enable_appdata_validate" != "xno"; then :
+  # Extract the first word of "appdata-validate", so it can be a program name with args.
+set dummy appdata-validate; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_APPDATA_VALIDATE+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $APPDATA_VALIDATE in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_APPDATA_VALIDATE="$APPDATA_VALIDATE" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_APPDATA_VALIDATE="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+APPDATA_VALIDATE=$ac_cv_path_APPDATA_VALIDATE
+if test -n "$APPDATA_VALIDATE"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $APPDATA_VALIDATE" >&5
+$as_echo "$APPDATA_VALIDATE" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+         if test "x$APPDATA_VALIDATE" = "x"; then :
+  have_appdata_validate=no
+else
+  have_appdata_validate=yes
+
+fi
+else
+  have_appdata_validate=no
+fi
+
+  if test "x$have_appdata_validate" != "xno"; then :
+  appdata_validate=yes
+else
+  appdata_validate=no
+         if test "x$enable_appdata_validate" = "xyes"; then :
+  as_fn_error $? "AppData validation was requested but appdata-validate was not found" "$LINENO" 5
+fi
+fi
+
+  appdataxmldir=${datadir}/appdata
+
+
+  APPDATA_XML_RULES='
+.PHONY : uninstall-appdata-xml install-appdata-xml clean-appdata-xml
+
+mostlyclean-am: clean-appdata-xml
+
+%.appdata.valid: %.appdata.xml
+	$(AM_V_GEN) if test -f "$<"; then d=; else d="$(srcdir)/"; fi; \
+		if test -n "$(APPDATA_VALIDATE)"; \
+			then $(APPDATA_VALIDATE) --nonet $${d}$<; fi \
+		&& touch $@
+
+check-am: $(appdata_XML:.appdata.xml=.appdata.valid)
+uninstall-am: uninstall-appdata-xml
+install-data-am: install-appdata-xml
+
+.SECONDARY: $(appdata_XML)
+
+install-appdata-xml: $(appdata_XML)
+	@$(NORMAL_INSTALL)
+	if test -n "$^"; then \
+		test -z "$(appdataxmldir)" || $(MKDIR_P) "$(DESTDIR)$(appdataxmldir)"; \
+		$(INSTALL_DATA) $^ "$(DESTDIR)$(appdataxmldir)"; \
+	fi
+
+uninstall-appdata-xml:
+	@$(NORMAL_UNINSTALL)
+	@list='\''$(appdata_XML)'\''; test -n "$(appdataxmldir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e '\''s|^.*/||'\''`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '\''$(DESTDIR)$(appdataxmldir)'\'' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(appdataxmldir)" && rm -f $$files
+
+clean-appdata-xml:
+	rm -f $(appdata_XML:.appdata.xml=.appdata.valid)
+'
+
+
+
+
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  fi
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl.exe
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl.exe
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if ${ac_cv_c_compiler_gnu+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_compiler_gnu=yes
+else
+  ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GCC=yes
+else
+  GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if ${ac_cv_prog_cc_g+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_c_werror_flag=$ac_c_werror_flag
+   ac_c_werror_flag=yes
+   ac_cv_prog_cc_g=no
+   CFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+else
+  CFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  ac_c_werror_flag=$ac_save_c_werror_flag
+	 CFLAGS="-g"
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if ${ac_cv_prog_cc_c89+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
+$as_echo_n "checking whether $CC understands -c and -o together... " >&6; }
+if ${am_cv_prog_cc_c_o+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+  # Make sure it works both with $CC and with simple cc.
+  # Following AC_PROG_CC_C_O, we do the test twice because some
+  # compilers refuse to overwrite an existing .o file with -o,
+  # though they will create one.
+  am_cv_prog_cc_c_o=yes
+  for am_i in 1 2; do
+    if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
+   ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } \
+         && test -f conftest2.$ac_objext; then
+      : OK
+    else
+      am_cv_prog_cc_c_o=no
+      break
+    fi
+  done
+  rm -f core conftest*
+  unset am_i
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
+$as_echo "$am_cv_prog_cc_c_o" >&6; }
+if test "$am_cv_prog_cc_c_o" != yes; then
+   # Losing compiler, so override with the script.
+   # FIXME: It is wrong to rewrite CC.
+   # But if we don't then we get into trouble of one sort or another.
+   # A longer-term fix would be to have automake use am__CC in this case,
+   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+   CC="$am_aux_dir/compile $CC"
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+depcc="$CC"   am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named 'D' -- because '-MD' means "put the output
+  # in D".
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+      # Solaris 10 /bin/sh.
+      echo '/* dummy */' > sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with '-c' and '-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle '-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs.
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # After this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested.
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+      # This compiler won't grok '-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
+
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -z "$CXX"; then
+  if test -n "$CCC"; then
+    CXX=$CCC
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CXX"; then
+  ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
+$as_echo "$CXX" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CXX" && break
+  done
+fi
+if test -z "$CXX"; then
+  ac_ct_CXX=$CXX
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CXX"; then
+  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CXX="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
+$as_echo "$ac_ct_CXX" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CXX" && break
+done
+
+  if test "x$ac_ct_CXX" = x; then
+    CXX="g++"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CXX=$ac_ct_CXX
+  fi
+fi
+
+  fi
+fi
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
+$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
+if ${ac_cv_cxx_compiler_gnu+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_compiler_gnu=yes
+else
+  ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
+$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GXX=yes
+else
+  GXX=
+fi
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
+$as_echo_n "checking whether $CXX accepts -g... " >&6; }
+if ${ac_cv_prog_cxx_g+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+   ac_cxx_werror_flag=yes
+   ac_cv_prog_cxx_g=no
+   CXXFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_prog_cxx_g=yes
+else
+  CXXFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+
+else
+  ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+	 CXXFLAGS="-g"
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_prog_cxx_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
+$as_echo "$ac_cv_prog_cxx_g" >&6; }
+if test "$ac_test_CXXFLAGS" = set; then
+  CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+  if test "$GXX" = yes; then
+    CXXFLAGS="-g -O2"
+  else
+    CXXFLAGS="-g"
+  fi
+else
+  if test "$GXX" = yes; then
+    CXXFLAGS="-O2"
+  else
+    CXXFLAGS=
+  fi
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CXX"  am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CXX_dependencies_compiler_type+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named 'D' -- because '-MD' means "put the output
+  # in D".
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CXX_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+      # Solaris 10 /bin/sh.
+      echo '/* dummy */' > sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with '-c' and '-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle '-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs.
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # After this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested.
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+      # This compiler won't grok '-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CXX_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CXX_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
+  am__fastdepCXX_TRUE=
+  am__fastdepCXX_FALSE='#'
+else
+  am__fastdepCXX_TRUE='#'
+  am__fastdepCXX_FALSE=
+fi
+
+
+
+
+func_stripname_cnf ()
+{
+  case ${2} in
+  .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+  *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+  esac
+} # func_stripname_cnf
+
+      if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+    (test "X$CXX" != "Xg++"))) ; then
+  ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5
+$as_echo_n "checking how to run the C++ preprocessor... " >&6; }
+if test -z "$CXXCPP"; then
+  if ${ac_cv_prog_CXXCPP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+      # Double quotes because CXXCPP needs to be expanded
+    for CXXCPP in "$CXX -E" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+  break
+fi
+
+    done
+    ac_cv_prog_CXXCPP=$CXXCPP
+
+fi
+  CXXCPP=$ac_cv_prog_CXXCPP
+else
+  ac_cv_prog_CXXCPP=$CXXCPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5
+$as_echo "$CXXCPP" >&6; }
+ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+else
+  _lt_caught_CXX_error=yes
+fi
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+archive_cmds_need_lc_CXX=no
+allow_undefined_flag_CXX=
+always_export_symbols_CXX=no
+archive_expsym_cmds_CXX=
+compiler_needs_object_CXX=no
+export_dynamic_flag_spec_CXX=
+hardcode_direct_CXX=no
+hardcode_direct_absolute_CXX=no
+hardcode_libdir_flag_spec_CXX=
+hardcode_libdir_separator_CXX=
+hardcode_minus_L_CXX=no
+hardcode_shlibpath_var_CXX=unsupported
+hardcode_automatic_CXX=no
+inherit_rpath_CXX=no
+module_cmds_CXX=
+module_expsym_cmds_CXX=
+link_all_deplibs_CXX=unknown
+old_archive_cmds_CXX=$old_archive_cmds
+reload_flag_CXX=$reload_flag
+reload_cmds_CXX=$reload_cmds
+no_undefined_flag_CXX=
+whole_archive_flag_spec_CXX=
+enable_shared_with_static_runtimes_CXX=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+objext_CXX=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_caught_CXX_error" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="int some_variable = 0;"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code='int main(int, char *[]) { return(0); }'
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+  # save warnings/boilerplate of simple test code
+  ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+  ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC=$CC
+  lt_save_CFLAGS=$CFLAGS
+  lt_save_LD=$LD
+  lt_save_GCC=$GCC
+  GCC=$GXX
+  lt_save_with_gnu_ld=$with_gnu_ld
+  lt_save_path_LD=$lt_cv_path_LD
+  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+  else
+    $as_unset lt_cv_prog_gnu_ld
+  fi
+  if test -n "${lt_cv_path_LDCXX+set}"; then
+    lt_cv_path_LD=$lt_cv_path_LDCXX
+  else
+    $as_unset lt_cv_path_LD
+  fi
+  test -z "${LDCXX+set}" || LD=$LDCXX
+  CC=${CXX-"c++"}
+  CFLAGS=$CXXFLAGS
+  compiler=$CC
+  compiler_CXX=$CC
+  for cc_temp in $compiler""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+
+
+  if test -n "$compiler"; then
+    # We don't want -fno-exception when compiling C++ code, so set the
+    # no_builtin_flag separately
+    if test "$GXX" = yes; then
+      lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin'
+    else
+      lt_prog_compiler_no_builtin_flag_CXX=
+    fi
+
+    if test "$GXX" = yes; then
+      # Set up default GNU C++ configuration
+
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if ${lt_cv_path_LD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break
+	;;
+      *)
+	test "$with_gnu_ld" != yes && break
+	;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if ${lt_cv_prog_gnu_ld+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+      # Check if GNU C++ uses GNU ld as the underlying linker, since the
+      # archiving commands below assume that GNU ld is being used.
+      if test "$with_gnu_ld" = yes; then
+        archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+        hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+        export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+
+        # If archive_cmds runs LD, not CC, wlarc should be empty
+        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+        #     investigate it a little bit more. (MM)
+        wlarc='${wl}'
+
+        # ancient GNU ld didn't support --whole-archive et. al.
+        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+	  $GREP 'no-whole-archive' > /dev/null; then
+          whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+        else
+          whole_archive_flag_spec_CXX=
+        fi
+      else
+        with_gnu_ld=no
+        wlarc=
+
+        # A generic and very simple default shared library creation
+        # command for GNU C++ for the case where it uses the native
+        # linker, instead of GNU ld.  If possible, this setting should
+        # overridden to take advantage of the native linker features on
+        # the platform it is being used on.
+        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+      fi
+
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+    else
+      GXX=no
+      with_gnu_ld=no
+      wlarc=
+    fi
+
+    # PORTME: fill in a description of your system's C++ link characteristics
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+    ld_shlibs_CXX=yes
+    case $host_os in
+      aix3*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+      aix[4-9]*)
+        if test "$host_cpu" = ia64; then
+          # On IA64, the linker does run time linking by default, so we don't
+          # have to do anything special.
+          aix_use_runtimelinking=no
+          exp_sym_flag='-Bexport'
+          no_entry_flag=""
+        else
+          aix_use_runtimelinking=no
+
+          # Test if we are trying to use run time linking or normal
+          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+          # need to do runtime linking.
+          case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+	    for ld_flag in $LDFLAGS; do
+	      case $ld_flag in
+	      *-brtl*)
+	        aix_use_runtimelinking=yes
+	        break
+	        ;;
+	      esac
+	    done
+	    ;;
+          esac
+
+          exp_sym_flag='-bexport'
+          no_entry_flag='-bnoentry'
+        fi
+
+        # When large executables or shared objects are built, AIX ld can
+        # have problems creating the table of contents.  If linking a library
+        # or program results in "error TOC overflow" add -mminimal-toc to
+        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+        archive_cmds_CXX=''
+        hardcode_direct_CXX=yes
+        hardcode_direct_absolute_CXX=yes
+        hardcode_libdir_separator_CXX=':'
+        link_all_deplibs_CXX=yes
+        file_list_spec_CXX='${wl}-f,'
+
+        if test "$GXX" = yes; then
+          case $host_os in aix4.[012]|aix4.[012].*)
+          # We only want to do this on AIX 4.2 and lower, the check
+          # below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" &&
+	     strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+	  then
+	    # We have reworked collect2
+	    :
+	  else
+	    # We have old collect2
+	    hardcode_direct_CXX=unsupported
+	    # It fails to find uninstalled libraries when the uninstalled
+	    # path is not listed in the libpath.  Setting hardcode_minus_L
+	    # to unsupported forces relinking
+	    hardcode_minus_L_CXX=yes
+	    hardcode_libdir_flag_spec_CXX='-L$libdir'
+	    hardcode_libdir_separator_CXX=
+	  fi
+          esac
+          shared_flag='-shared'
+	  if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag="$shared_flag "'${wl}-G'
+	  fi
+        else
+          # not using gcc
+          if test "$host_cpu" = ia64; then
+	  # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	  # chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+          else
+	    if test "$aix_use_runtimelinking" = yes; then
+	      shared_flag='${wl}-G'
+	    else
+	      shared_flag='${wl}-bM:SRE'
+	    fi
+          fi
+        fi
+
+        export_dynamic_flag_spec_CXX='${wl}-bexpall'
+        # It seems that -bexpall does not export symbols beginning with
+        # underscore (_), so it is better to generate a list of symbols to
+	# export.
+        always_export_symbols_CXX=yes
+        if test "$aix_use_runtimelinking" = yes; then
+          # Warning - without using the other runtime loading flags (-brtl),
+          # -berok will link without error, but may produce a broken library.
+          allow_undefined_flag_CXX='-berok'
+          # Determine the default libpath from the value encoded in an empty
+          # executable.
+          if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath__CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX="/usr/lib:/lib"
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath__CXX
+fi
+
+          hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+          archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        else
+          if test "$host_cpu" = ia64; then
+	    hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib'
+	    allow_undefined_flag_CXX="-z nodefs"
+	    archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+          else
+	    # Determine the default libpath from the value encoded in an
+	    # empty executable.
+	    if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath__CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX="/usr/lib:/lib"
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath__CXX
+fi
+
+	    hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+	    # Warning - without using the other run time loading flags,
+	    # -berok will link without error, but may produce a broken library.
+	    no_undefined_flag_CXX=' ${wl}-bernotok'
+	    allow_undefined_flag_CXX=' ${wl}-berok'
+	    if test "$with_gnu_ld" = yes; then
+	      # We only use this code for GNU lds that support --whole-archive.
+	      whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	    else
+	      # Exported symbols can be pulled into shared objects from archives
+	      whole_archive_flag_spec_CXX='$convenience'
+	    fi
+	    archive_cmds_need_lc_CXX=yes
+	    # This is similar to how AIX traditionally builds its shared
+	    # libraries.
+	    archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+          fi
+        fi
+        ;;
+
+      beos*)
+	if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	  allow_undefined_flag_CXX=unsupported
+	  # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+	  # support --undefined.  This deserves some investigation.  FIXME
+	  archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	else
+	  ld_shlibs_CXX=no
+	fi
+	;;
+
+      chorus*)
+        case $cc_basename in
+          *)
+	  # FIXME: insert proper C++ library support
+	  ld_shlibs_CXX=no
+	  ;;
+        esac
+        ;;
+
+      cygwin* | mingw* | pw32* | cegcc*)
+	case $GXX,$cc_basename in
+	,cl* | no,cl*)
+	  # Native MSVC
+	  # hardcode_libdir_flag_spec is actually meaningless, as there is
+	  # no search path for DLLs.
+	  hardcode_libdir_flag_spec_CXX=' '
+	  allow_undefined_flag_CXX=unsupported
+	  always_export_symbols_CXX=yes
+	  file_list_spec_CXX='@'
+	  # Tell ltmain to make .lib files, not .a files.
+	  libext=lib
+	  # Tell ltmain to make .dll files, not .so files.
+	  shrext_cmds=".dll"
+	  # FIXME: Setting linknames here is a bad hack.
+	  archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+	  archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	      $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+	    else
+	      $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+	    fi~
+	    $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+	    linknames='
+	  # The linker will not automatically build a static lib if we build a DLL.
+	  # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true'
+	  enable_shared_with_static_runtimes_CXX=yes
+	  # Don't use ranlib
+	  old_postinstall_cmds_CXX='chmod 644 $oldlib'
+	  postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~
+	    lt_tool_outputfile="@TOOL_OUTPUT@"~
+	    case $lt_outputfile in
+	      *.exe|*.EXE) ;;
+	      *)
+		lt_outputfile="$lt_outputfile.exe"
+		lt_tool_outputfile="$lt_tool_outputfile.exe"
+		;;
+	    esac~
+	    func_to_tool_file "$lt_outputfile"~
+	    if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+	      $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+	      $RM "$lt_outputfile.manifest";
+	    fi'
+	  ;;
+	*)
+	  # g++
+	  # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
+	  # as there is no search path for DLLs.
+	  hardcode_libdir_flag_spec_CXX='-L$libdir'
+	  export_dynamic_flag_spec_CXX='${wl}--export-all-symbols'
+	  allow_undefined_flag_CXX=unsupported
+	  always_export_symbols_CXX=no
+	  enable_shared_with_static_runtimes_CXX=yes
+
+	  if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+	    archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	    # If the export-symbols file already is a .def file (1st line
+	    # is EXPORTS), use it as is; otherwise, prepend...
+	    archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	      cp $export_symbols $output_objdir/$soname.def;
+	    else
+	      echo EXPORTS > $output_objdir/$soname.def;
+	      cat $export_symbols >> $output_objdir/$soname.def;
+	    fi~
+	    $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	  else
+	    ld_shlibs_CXX=no
+	  fi
+	  ;;
+	esac
+	;;
+      darwin* | rhapsody*)
+
+
+  archive_cmds_need_lc_CXX=no
+  hardcode_direct_CXX=no
+  hardcode_automatic_CXX=yes
+  hardcode_shlibpath_var_CXX=unsupported
+  if test "$lt_cv_ld_force_load" = "yes"; then
+    whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+
+  else
+    whole_archive_flag_spec_CXX=''
+  fi
+  link_all_deplibs_CXX=yes
+  allow_undefined_flag_CXX="$_lt_dar_allow_undefined"
+  case $cc_basename in
+     ifort*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test "$_lt_dar_can_shared" = "yes"; then
+    output_verbose_link_cmd=func_echo_all
+    archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+       if test "$lt_cv_apple_cc_single_mod" != "yes"; then
+      archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
+      archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+    fi
+
+  else
+  ld_shlibs_CXX=no
+  fi
+
+	;;
+
+      dgux*)
+        case $cc_basename in
+          ec++*)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          ghcx*)
+	    # Green Hills C++ Compiler
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+        esac
+        ;;
+
+      freebsd2.*)
+        # C++ shared libraries reported to be fairly broken before
+	# switch to ELF
+        ld_shlibs_CXX=no
+        ;;
+
+      freebsd-elf*)
+        archive_cmds_need_lc_CXX=no
+        ;;
+
+      freebsd* | dragonfly*)
+        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+        # conventions
+        ld_shlibs_CXX=yes
+        ;;
+
+      gnu*)
+        ;;
+
+      haiku*)
+        archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        link_all_deplibs_CXX=yes
+        ;;
+
+      hpux9*)
+        hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+        hardcode_libdir_separator_CXX=:
+        export_dynamic_flag_spec_CXX='${wl}-E'
+        hardcode_direct_CXX=yes
+        hardcode_minus_L_CXX=yes # Not in the search PATH,
+				             # but as the default
+				             # location of the library.
+
+        case $cc_basename in
+          CC*)
+            # FIXME: insert proper C++ library support
+            ld_shlibs_CXX=no
+            ;;
+          aCC*)
+            archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            # Commands to make compiler produce verbose output that lists
+            # what "hidden" libraries, object files and flags are used when
+            # linking a shared library.
+            #
+            # There doesn't appear to be a way to prevent this compiler from
+            # explicitly linking system object files so we need to strip them
+            # from the output so that they don't get included in the library
+            # dependencies.
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+            ;;
+          *)
+            if test "$GXX" = yes; then
+              archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            else
+              # FIXME: insert proper C++ library support
+              ld_shlibs_CXX=no
+            fi
+            ;;
+        esac
+        ;;
+
+      hpux10*|hpux11*)
+        if test $with_gnu_ld = no; then
+	  hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+	  hardcode_libdir_separator_CXX=:
+
+          case $host_cpu in
+            hppa*64*|ia64*)
+              ;;
+            *)
+	      export_dynamic_flag_spec_CXX='${wl}-E'
+              ;;
+          esac
+        fi
+        case $host_cpu in
+          hppa*64*|ia64*)
+            hardcode_direct_CXX=no
+            hardcode_shlibpath_var_CXX=no
+            ;;
+          *)
+            hardcode_direct_CXX=yes
+            hardcode_direct_absolute_CXX=yes
+            hardcode_minus_L_CXX=yes # Not in the search PATH,
+					         # but as the default
+					         # location of the library.
+            ;;
+        esac
+
+        case $cc_basename in
+          CC*)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          aCC*)
+	    case $host_cpu in
+	      hppa*64*)
+	        archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	      ia64*)
+	        archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	      *)
+	        archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	    esac
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+	    ;;
+          *)
+	    if test "$GXX" = yes; then
+	      if test $with_gnu_ld = no; then
+	        case $host_cpu in
+	          hppa*64*)
+	            archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	          ia64*)
+	            archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	          *)
+	            archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	        esac
+	      fi
+	    else
+	      # FIXME: insert proper C++ library support
+	      ld_shlibs_CXX=no
+	    fi
+	    ;;
+        esac
+        ;;
+
+      interix[3-9]*)
+	hardcode_direct_CXX=no
+	hardcode_shlibpath_var_CXX=no
+	hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	export_dynamic_flag_spec_CXX='${wl}-E'
+	# Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+	# Instead, shared libraries are loaded at an image base (0x10000000 by
+	# default) and relocated if they conflict, which is a slow very memory
+	# consuming and fragmenting process.  To avoid this, we pick a random,
+	# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+	# time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+	archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+	archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+	;;
+      irix5* | irix6*)
+        case $cc_basename in
+          CC*)
+	    # SGI C++
+	    archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+	    # necessary to make sure instantiated templates are included
+	    # in the archive.
+	    old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs'
+	    ;;
+          *)
+	    if test "$GXX" = yes; then
+	      if test "$with_gnu_ld" = no; then
+	        archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	      else
+	        archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
+	      fi
+	    fi
+	    link_all_deplibs_CXX=yes
+	    ;;
+        esac
+        hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+        hardcode_libdir_separator_CXX=:
+        inherit_rpath_CXX=yes
+        ;;
+
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+        case $cc_basename in
+          KCC*)
+	    # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	    # KCC will only create a shared library if the output file
+	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
+	    # to its proper name (with version) after linking.
+	    archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+	    archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+
+	    hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+	    old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
+	    ;;
+	  icpc* | ecpc* )
+	    # Intel C++
+	    with_gnu_ld=yes
+	    # version 8.0 and above of icpc choke on multiply defined symbols
+	    # if we add $predep_objects and $postdep_objects, however 7.1 and
+	    # earlier do not add the objects themselves.
+	    case `$CC -V 2>&1` in
+	      *"Version 7."*)
+	        archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+		archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+		;;
+	      *)  # Version 8.0 or newer
+	        tmp_idyn=
+	        case $host_cpu in
+		  ia64*) tmp_idyn=' -i_dynamic';;
+		esac
+	        archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+		archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+		;;
+	    esac
+	    archive_cmds_need_lc_CXX=no
+	    hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+	    whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	    ;;
+          pgCC* | pgcpp*)
+            # Portland Group C++ compiler
+	    case `$CC -V` in
+	    *pgCC\ [1-5].* | *pgcpp\ [1-5].*)
+	      prelink_cmds_CXX='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+		compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
+	      old_archive_cmds_CXX='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
+		$RANLIB $oldlib'
+	      archive_cmds_CXX='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+	      archive_expsym_cmds_CXX='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+	      ;;
+	    *) # Version 6 and above use weak symbols
+	      archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+	      archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+	      ;;
+	    esac
+
+	    hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
+	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+	    whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+            ;;
+	  cxx*)
+	    # Compaq C++
+	    archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+	    runpath_var=LD_RUN_PATH
+	    hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+	    hardcode_libdir_separator_CXX=:
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
+	    ;;
+	  xl* | mpixl* | bgxl*)
+	    # IBM XL 8.0 on PPC, with GNU ld
+	    hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+	    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+	    archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    if test "x$supports_anon_versioning" = xyes; then
+	      archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~
+		cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+		echo "local: *; };" >> $output_objdir/$libname.ver~
+		$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+	    fi
+	    ;;
+	  *)
+	    case `$CC -V 2>&1 | sed 5q` in
+	    *Sun\ C*)
+	      # Sun C++ 5.9
+	      no_undefined_flag_CXX=' -zdefs'
+	      archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	      archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+	      hardcode_libdir_flag_spec_CXX='-R$libdir'
+	      whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	      compiler_needs_object_CXX=yes
+
+	      # Not sure whether something based on
+	      # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+	      # would be better.
+	      output_verbose_link_cmd='func_echo_all'
+
+	      # Archives containing C++ object files must be created using
+	      # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	      # necessary to make sure instantiated templates are included
+	      # in the archive.
+	      old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
+	      ;;
+	    esac
+	    ;;
+	esac
+	;;
+
+      lynxos*)
+        # FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+
+      m88k*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+	;;
+
+      mvs*)
+        case $cc_basename in
+          cxx*)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+	  *)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+	esac
+	;;
+
+      netbsd*)
+        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	  archive_cmds_CXX='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+	  wlarc=
+	  hardcode_libdir_flag_spec_CXX='-R$libdir'
+	  hardcode_direct_CXX=yes
+	  hardcode_shlibpath_var_CXX=no
+	fi
+	# Workaround some broken pre-1.5 toolchains
+	output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+	;;
+
+      *nto* | *qnx*)
+        ld_shlibs_CXX=yes
+	;;
+
+      openbsd2*)
+        # C++ shared libraries are fairly broken
+	ld_shlibs_CXX=no
+	;;
+
+      openbsd*)
+	if test -f /usr/libexec/ld.so; then
+	  hardcode_direct_CXX=yes
+	  hardcode_shlibpath_var_CXX=no
+	  hardcode_direct_absolute_CXX=yes
+	  archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+	  hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	    archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+	    export_dynamic_flag_spec_CXX='${wl}-E'
+	    whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+	  fi
+	  output_verbose_link_cmd=func_echo_all
+	else
+	  ld_shlibs_CXX=no
+	fi
+	;;
+
+      osf3* | osf4* | osf5*)
+        case $cc_basename in
+          KCC*)
+	    # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	    # KCC will only create a shared library if the output file
+	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
+	    # to its proper name (with version) after linking.
+	    archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+	    hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	    hardcode_libdir_separator_CXX=:
+
+	    # Archives containing C++ object files must be created using
+	    # the KAI C++ compiler.
+	    case $host in
+	      osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;;
+	      *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;;
+	    esac
+	    ;;
+          RCC*)
+	    # Rational C++ 2.4.1
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          cxx*)
+	    case $host in
+	      osf3*)
+	        allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+	        archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	        hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+		;;
+	      *)
+	        allow_undefined_flag_CXX=' -expect_unresolved \*'
+	        archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	        archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+	          echo "-hidden">> $lib.exp~
+	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~
+	          $RM $lib.exp'
+	        hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+		;;
+	    esac
+
+	    hardcode_libdir_separator_CXX=:
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+	    ;;
+	  *)
+	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	      allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+	      case $host in
+	        osf3*)
+	          archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+		  ;;
+	        *)
+	          archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+		  ;;
+	      esac
+
+	      hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+	      hardcode_libdir_separator_CXX=:
+
+	      # Commands to make compiler produce verbose output that lists
+	      # what "hidden" libraries, object files and flags are used when
+	      # linking a shared library.
+	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+	    else
+	      # FIXME: insert proper C++ library support
+	      ld_shlibs_CXX=no
+	    fi
+	    ;;
+        esac
+        ;;
+
+      psos*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+
+      sunos4*)
+        case $cc_basename in
+          CC*)
+	    # Sun C++ 4.x
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          lcc*)
+	    # Lucid
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+        esac
+        ;;
+
+      solaris*)
+        case $cc_basename in
+          CC* | sunCC*)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+            archive_cmds_need_lc_CXX=yes
+	    no_undefined_flag_CXX=' -zdefs'
+	    archive_cmds_CXX='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	    archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	      $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	    hardcode_libdir_flag_spec_CXX='-R$libdir'
+	    hardcode_shlibpath_var_CXX=no
+	    case $host_os in
+	      solaris2.[0-5] | solaris2.[0-5].*) ;;
+	      *)
+		# The compiler driver will combine and reorder linker options,
+		# but understands `-z linker_flag'.
+	        # Supported since Solaris 2.6 (maybe 2.5.1?)
+		whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract'
+	        ;;
+	    esac
+	    link_all_deplibs_CXX=yes
+
+	    output_verbose_link_cmd='func_echo_all'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	    # necessary to make sure instantiated templates are included
+	    # in the archive.
+	    old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
+	    ;;
+          gcx*)
+	    # Green Hills C++ Compiler
+	    archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+	    # The C++ compiler must be used to create the archive.
+	    old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+	    ;;
+          *)
+	    # GNU C++ compiler with Solaris linker
+	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	      no_undefined_flag_CXX=' ${wl}-z ${wl}defs'
+	      if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+	        archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	        archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+		  $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	        # Commands to make compiler produce verbose output that lists
+	        # what "hidden" libraries, object files and flags are used when
+	        # linking a shared library.
+	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+	      else
+	        # g++ 2.7 appears to require `-G' NOT `-shared' on this
+	        # platform.
+	        archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	        archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+		  $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	        # Commands to make compiler produce verbose output that lists
+	        # what "hidden" libraries, object files and flags are used when
+	        # linking a shared library.
+	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+	      fi
+
+	      hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir'
+	      case $host_os in
+		solaris2.[0-5] | solaris2.[0-5].*) ;;
+		*)
+		  whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+		  ;;
+	      esac
+	    fi
+	    ;;
+        esac
+        ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      no_undefined_flag_CXX='${wl}-z,text'
+      archive_cmds_need_lc_CXX=no
+      hardcode_shlibpath_var_CXX=no
+      runpath_var='LD_RUN_PATH'
+
+      case $cc_basename in
+        CC*)
+	  archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+      esac
+      ;;
+
+      sysv5* | sco3.2v5* | sco5v6*)
+	# Note: We can NOT use -z defs as we might desire, because we do not
+	# link with -lc, and that would cause any symbols used from libc to
+	# always be unresolved, which means just about no library would
+	# ever link correctly.  If we're not using GNU ld we use -z text
+	# though, which does catch some bad symbols but isn't as heavy-handed
+	# as -z defs.
+	no_undefined_flag_CXX='${wl}-z,text'
+	allow_undefined_flag_CXX='${wl}-z,nodefs'
+	archive_cmds_need_lc_CXX=no
+	hardcode_shlibpath_var_CXX=no
+	hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir'
+	hardcode_libdir_separator_CXX=':'
+	link_all_deplibs_CXX=yes
+	export_dynamic_flag_spec_CXX='${wl}-Bexport'
+	runpath_var='LD_RUN_PATH'
+
+	case $cc_basename in
+          CC*)
+	    archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~
+	      '"$old_archive_cmds_CXX"
+	    reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~
+	      '"$reload_cmds_CXX"
+	    ;;
+	  *)
+	    archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    ;;
+	esac
+      ;;
+
+      tandem*)
+        case $cc_basename in
+          NCC*)
+	    # NonStop-UX NCC 3.20
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+        esac
+        ;;
+
+      vxworks*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+
+      *)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+    esac
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
+$as_echo "$ld_shlibs_CXX" >&6; }
+    test "$ld_shlibs_CXX" = no && can_build_shared=no
+
+    GCC_CXX="$GXX"
+    LD_CXX="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    # Dependencies to place before and after the object being linked:
+predep_objects_CXX=
+postdep_objects_CXX=
+predeps_CXX=
+postdeps_CXX=
+compiler_lib_search_path_CXX=
+
+cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+_LT_EOF
+
+
+_lt_libdeps_save_CFLAGS=$CFLAGS
+case "$CC $CFLAGS " in #(
+*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
+*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;;
+esac
+
+if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  for p in `eval "$output_verbose_link_cmd"`; do
+    case ${prev}${p} in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test $p = "-L" ||
+          test $p = "-R"; then
+	 prev=$p
+	 continue
+       fi
+
+       # Expand the sysroot to ease extracting the directories later.
+       if test -z "$prev"; then
+         case $p in
+         -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
+         -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
+         -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
+         esac
+       fi
+       case $p in
+       =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
+       esac
+       if test "$pre_test_object_deps_done" = no; then
+	 case ${prev} in
+	 -L | -R)
+	   # Internal compiler library paths should come after those
+	   # provided the user.  The postdeps already come after the
+	   # user supplied libs so there is no need to process them.
+	   if test -z "$compiler_lib_search_path_CXX"; then
+	     compiler_lib_search_path_CXX="${prev}${p}"
+	   else
+	     compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}"
+	   fi
+	   ;;
+	 # The "-l" case would never come before the object being
+	 # linked, so don't bother handling this case.
+	 esac
+       else
+	 if test -z "$postdeps_CXX"; then
+	   postdeps_CXX="${prev}${p}"
+	 else
+	   postdeps_CXX="${postdeps_CXX} ${prev}${p}"
+	 fi
+       fi
+       prev=
+       ;;
+
+    *.lto.$objext) ;; # Ignore GCC LTO objects
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+	 pre_test_object_deps_done=yes
+	 continue
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 if test -z "$predep_objects_CXX"; then
+	   predep_objects_CXX="$p"
+	 else
+	   predep_objects_CXX="$predep_objects_CXX $p"
+	 fi
+       else
+	 if test -z "$postdep_objects_CXX"; then
+	   postdep_objects_CXX="$p"
+	 else
+	   postdep_objects_CXX="$postdep_objects_CXX $p"
+	 fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling CXX test program"
+fi
+
+$RM -f confest.$objext
+CFLAGS=$_lt_libdeps_save_CFLAGS
+
+# PORTME: override above test on systems where it is broken
+case $host_os in
+interix[3-9]*)
+  # Interix 3.5 installs completely hosed .la files for C++, so rather than
+  # hack all around it, let's just trust "g++" to DTRT.
+  predep_objects_CXX=
+  postdep_objects_CXX=
+  postdeps_CXX=
+  ;;
+
+linux*)
+  case `$CC -V 2>&1 | sed 5q` in
+  *Sun\ C*)
+    # Sun C++ 5.9
+
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    if test "$solaris_use_stlport4" != yes; then
+      postdeps_CXX='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+
+solaris*)
+  case $cc_basename in
+  CC* | sunCC*)
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    # Adding this requires a known-good setup of shared libraries for
+    # Sun compiler versions before 5.6, else PIC objects from an old
+    # archive will be linked into the output, leading to subtle bugs.
+    if test "$solaris_use_stlport4" != yes; then
+      postdeps_CXX='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+esac
+
+
+case " $postdeps_CXX " in
+*" -lc "*) archive_cmds_need_lc_CXX=no ;;
+esac
+ compiler_lib_search_dirs_CXX=
+if test -n "${compiler_lib_search_path_CXX}"; then
+ compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    lt_prog_compiler_wl_CXX=
+lt_prog_compiler_pic_CXX=
+lt_prog_compiler_static_CXX=
+
+
+  # C++ specific cases for pic, static, wl, etc.
+  if test "$GXX" = yes; then
+    lt_prog_compiler_wl_CXX='-Wl,'
+    lt_prog_compiler_static_CXX='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static_CXX='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            lt_prog_compiler_pic_CXX='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | cygwin* | os2* | pw32* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic_CXX='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      lt_prog_compiler_pic_CXX=
+      ;;
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      lt_prog_compiler_static_CXX=
+      ;;
+    interix[3-9]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic_CXX=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+	;;
+      *)
+	lt_prog_compiler_pic_CXX='-fPIC'
+	;;
+      esac
+      ;;
+    *qnx* | *nto*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic_CXX='-fPIC -shared'
+      ;;
+    *)
+      lt_prog_compiler_pic_CXX='-fPIC'
+      ;;
+    esac
+  else
+    case $host_os in
+      aix[4-9]*)
+	# All AIX code is PIC.
+	if test "$host_cpu" = ia64; then
+	  # AIX 5 now supports IA64 processor
+	  lt_prog_compiler_static_CXX='-Bstatic'
+	else
+	  lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp'
+	fi
+	;;
+      chorus*)
+	case $cc_basename in
+	cxch68*)
+	  # Green Hills C++ Compiler
+	  # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+	  ;;
+	esac
+	;;
+      mingw* | cygwin* | os2* | pw32* | cegcc*)
+	# This hack is so that the source file can tell whether it is being
+	# built for inclusion in a dll (and should export symbols for example).
+	lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
+	;;
+      dgux*)
+	case $cc_basename in
+	  ec++*)
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    ;;
+	  ghcx*)
+	    # Green Hills C++ Compiler
+	    lt_prog_compiler_pic_CXX='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      freebsd* | dragonfly*)
+	# FreeBSD uses GNU C++
+	;;
+      hpux9* | hpux10* | hpux11*)
+	case $cc_basename in
+	  CC*)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
+	    if test "$host_cpu" != ia64; then
+	      lt_prog_compiler_pic_CXX='+Z'
+	    fi
+	    ;;
+	  aCC*)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
+	    case $host_cpu in
+	    hppa*64*|ia64*)
+	      # +Z the default
+	      ;;
+	    *)
+	      lt_prog_compiler_pic_CXX='+Z'
+	      ;;
+	    esac
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      interix*)
+	# This is c89, which is MS Visual C++ (no shared libs)
+	# Anyone wants to do a port?
+	;;
+      irix5* | irix6* | nonstopux*)
+	case $cc_basename in
+	  CC*)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_static_CXX='-non_shared'
+	    # CC pic flag -KPIC is the default.
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+	case $cc_basename in
+	  KCC*)
+	    # KAI C++ Compiler
+	    lt_prog_compiler_wl_CXX='--backend -Wl,'
+	    lt_prog_compiler_pic_CXX='-fPIC'
+	    ;;
+	  ecpc* )
+	    # old Intel C++ for x86_64 which still supported -KPIC.
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    lt_prog_compiler_static_CXX='-static'
+	    ;;
+	  icpc* )
+	    # Intel C++, used to be incompatible with GCC.
+	    # ICC 10 doesn't accept -KPIC any more.
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-fPIC'
+	    lt_prog_compiler_static_CXX='-static'
+	    ;;
+	  pgCC* | pgcpp*)
+	    # Portland Group C++ compiler
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-fpic'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    ;;
+	  cxx*)
+	    # Compaq C++
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    lt_prog_compiler_pic_CXX=
+	    lt_prog_compiler_static_CXX='-non_shared'
+	    ;;
+	  xlc* | xlC* | bgxl[cC]* | mpixl[cC]*)
+	    # IBM XL 8.0, 9.0 on PPC and BlueGene
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-qpic'
+	    lt_prog_compiler_static_CXX='-qstaticlink'
+	    ;;
+	  *)
+	    case `$CC -V 2>&1 | sed 5q` in
+	    *Sun\ C*)
+	      # Sun C++ 5.9
+	      lt_prog_compiler_pic_CXX='-KPIC'
+	      lt_prog_compiler_static_CXX='-Bstatic'
+	      lt_prog_compiler_wl_CXX='-Qoption ld '
+	      ;;
+	    esac
+	    ;;
+	esac
+	;;
+      lynxos*)
+	;;
+      m88k*)
+	;;
+      mvs*)
+	case $cc_basename in
+	  cxx*)
+	    lt_prog_compiler_pic_CXX='-W c,exportall'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      netbsd*)
+	;;
+      *qnx* | *nto*)
+        # QNX uses GNU C++, but need to define -shared option too, otherwise
+        # it will coredump.
+        lt_prog_compiler_pic_CXX='-fPIC -shared'
+        ;;
+      osf3* | osf4* | osf5*)
+	case $cc_basename in
+	  KCC*)
+	    lt_prog_compiler_wl_CXX='--backend -Wl,'
+	    ;;
+	  RCC*)
+	    # Rational C++ 2.4.1
+	    lt_prog_compiler_pic_CXX='-pic'
+	    ;;
+	  cxx*)
+	    # Digital/Compaq C++
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    lt_prog_compiler_pic_CXX=
+	    lt_prog_compiler_static_CXX='-non_shared'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      psos*)
+	;;
+      solaris*)
+	case $cc_basename in
+	  CC* | sunCC*)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    lt_prog_compiler_wl_CXX='-Qoption ld '
+	    ;;
+	  gcx*)
+	    # Green Hills C++ Compiler
+	    lt_prog_compiler_pic_CXX='-PIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sunos4*)
+	case $cc_basename in
+	  CC*)
+	    # Sun C++ 4.x
+	    lt_prog_compiler_pic_CXX='-pic'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    ;;
+	  lcc*)
+	    # Lucid
+	    lt_prog_compiler_pic_CXX='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+	case $cc_basename in
+	  CC*)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    ;;
+	esac
+	;;
+      tandem*)
+	case $cc_basename in
+	  NCC*)
+	    # NonStop-UX NCC 3.20
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      vxworks*)
+	;;
+      *)
+	lt_prog_compiler_can_build_shared_CXX=no
+	;;
+    esac
+  fi
+
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic_CXX=
+    ;;
+  *)
+    lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
+    ;;
+esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+if ${lt_cv_prog_compiler_pic_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; }
+lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; }
+if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_works_CXX=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_pic_works_CXX=yes
+     fi
+   fi
+   $RM conftest*
 
 fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; }
 
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then
+    case $lt_prog_compiler_pic_CXX in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;;
+     esac
+else
+    lt_prog_compiler_pic_CXX=
+     lt_prog_compiler_can_build_shared_CXX=no
+fi
 
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
-$as_echo_n "checking whether $CC understands -c and -o together... " >&6; }
-if ${am_cv_prog_cc_c_o+:} false; then :
+fi
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if ${lt_cv_prog_compiler_static_works_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+  lt_cv_prog_compiler_static_works_CXX=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler_static_works_CXX=yes
+       fi
+     else
+       lt_cv_prog_compiler_static_works_CXX=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
 
-int
-main ()
-{
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; }
 
-  ;
-  return 0;
-}
-_ACEOF
-  # Make sure it works both with $CC and with simple cc.
-  # Following AC_PROG_CC_C_O, we do the test twice because some
-  # compilers refuse to overwrite an existing .o file with -o,
-  # though they will create one.
-  am_cv_prog_cc_c_o=yes
-  for am_i in 1 2; do
-    if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
-   ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
+if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then
+    :
+else
+    lt_prog_compiler_static_CXX=
+fi
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o_CXX=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
+   cat out/conftest.err >&5
    echo "$as_me:$LINENO: \$? = $ac_status" >&5
-   (exit $ac_status); } \
-         && test -f conftest2.$ac_objext; then
-      : OK
-    else
-      am_cv_prog_cc_c_o=no
-      break
-    fi
-  done
-  rm -f core conftest*
-  unset am_i
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
-$as_echo "$am_cv_prog_cc_c_o" >&6; }
-if test "$am_cv_prog_cc_c_o" != yes; then
-   # Losing compiler, so override with the script.
-   # FIXME: It is wrong to rewrite CC.
-   # But if we don't then we get into trouble of one sort or another.
-   # A longer-term fix would be to have automake use am__CC in this case,
-   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
-   CC="$am_aux_dir/compile $CC"
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o_CXX=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
 fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
 
 
-depcc="$CC"   am_compiler_list=
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
-$as_echo_n "checking dependency style of $depcc... " >&6; }
-if ${am_cv_CC_dependencies_compiler_type+:} false; then :
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
-  # We make a subdir and do the tests there.  Otherwise we can end up
-  # making bogus files that we don't know about and never remove.  For
-  # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named 'D' -- because '-MD' means "put the output
-  # in D".
-  rm -rf conftest.dir
-  mkdir conftest.dir
-  # Copy depcomp to subdir because otherwise we won't find it if we're
-  # using a relative directory.
-  cp "$am_depcomp" conftest.dir
-  cd conftest.dir
-  # We will build objects and dependencies in a subdirectory because
-  # it helps to detect inapplicable dependency modes.  For instance
-  # both Tru64's cc and ICC support -MD to output dependencies as a
-  # side effect of compilation, but ICC will put the dependencies in
-  # the current directory while Tru64 will put them in the object
-  # directory.
-  mkdir sub
-
-  am_cv_CC_dependencies_compiler_type=none
-  if test "$am_compiler_list" = ""; then
-     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  lt_cv_prog_compiler_c_o_CXX=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o_CXX=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+  if test "$hard_links" = no; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
   fi
-  am__universal=false
-  case " $depcc " in #(
-     *\ -arch\ *\ -arch\ *) am__universal=true ;;
-     esac
+else
+  need_locks=no
+fi
 
-  for depmode in $am_compiler_list; do
-    # Setup a source with many dependencies, because some compilers
-    # like to wrap large dependency lists on column 80 (with \), and
-    # we should not choose a depcomp mode which is confused by this.
-    #
-    # We need to recreate these files for each test, as the compiler may
-    # overwrite some of them when testing with obscure command lines.
-    # This happens at least with the AIX C compiler.
-    : > sub/conftest.c
-    for i in 1 2 3 4 5 6; do
-      echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
-      # Solaris 10 /bin/sh.
-      echo '/* dummy */' > sub/conftst$i.h
-    done
-    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
 
-    # We check with '-c' and '-o' for the sake of the "dashmstdout"
-    # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle '-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs.
-    am__obj=sub/conftest.${OBJEXT-o}
-    am__minus_obj="-o $am__obj"
-    case $depmode in
-    gcc)
-      # This depmode causes a compiler race in universal mode.
-      test "$am__universal" = false || continue
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+  export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+  case $host_os in
+  aix[4-9]*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    # Also, AIX nm treats weak defined symbols like other global defined
+    # symbols, whereas GNU nm marks them as "W".
+    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+      export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    else
+      export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    export_symbols_cmds_CXX="$ltdll_cmds"
+    ;;
+  cygwin* | mingw* | cegcc*)
+    case $cc_basename in
+    cl*)
+      exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
       ;;
-    nosideeffect)
-      # After this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested.
-      if test "x$enable_dependency_tracking" = xyes; then
-	continue
-      else
-	break
-      fi
+    *)
+      export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+      exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
       ;;
-    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
-      # This compiler won't grok '-c -o', but also, the minuso test has
-      # not run yet.  These depmodes are late enough in the game, and
-      # so weak that their functioning should not be impacted.
-      am__obj=conftest.${OBJEXT-o}
-      am__minus_obj=
+    esac
+    ;;
+  *)
+    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+    ;;
+  esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
+$as_echo "$ld_shlibs_CXX" >&6; }
+test "$ld_shlibs_CXX" = no && can_build_shared=no
+
+with_gnu_ld_CXX=$with_gnu_ld
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_CXX" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc_CXX=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds_CXX in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  $RM conftest*
+	echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+	if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } 2>conftest.err; then
+	  soname=conftest
+	  lib=conftest
+	  libobjs=conftest.$ac_objext
+	  deplibs=
+	  wl=$lt_prog_compiler_wl_CXX
+	  pic_flag=$lt_prog_compiler_pic_CXX
+	  compiler_flags=-v
+	  linker_flags=-v
+	  verstring=
+	  output_objdir=.
+	  libname=conftest
+	  lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
+	  allow_undefined_flag_CXX=
+	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+  (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+	  then
+	    lt_cv_archive_cmds_need_lc_CXX=no
+	  else
+	    lt_cv_archive_cmds_need_lc_CXX=yes
+	  fi
+	  allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
+	else
+	  cat conftest.err 1>&5
+	fi
+	$RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; }
+      archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX
       ;;
-    none) break ;;
     esac
-    if depmode=$depmode \
-       source=sub/conftest.c object=$am__obj \
-       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
-         >/dev/null 2>conftest.err &&
-       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
-       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
-      # icc doesn't choke on unknown options, it will just issue warnings
-      # or remarks (even with -Werror).  So we grep stderr for any message
-      # that says an option was ignored or not supported.
-      # When given -MP, icc 7.0 and 7.1 complain thusly:
-      #   icc: Command line warning: ignoring option '-M'; no argument required
-      # The diagnosis changed in icc 8.0:
-      #   icc: Command line remark: option '-MP' not supported
-      if (grep 'ignoring option' conftest.err ||
-          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
-        am_cv_CC_dependencies_compiler_type=$depmode
-        break
-      fi
-    fi
-  done
+  fi
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 
-  cd ..
-  rm -rf conftest.dir
-else
-  am_cv_CC_dependencies_compiler_type=none
-fi
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
-$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
-CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
 
- if
-  test "x$enable_dependency_tracking" != xno \
-  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
-  am__fastdepCC_TRUE=
-  am__fastdepCC_FALSE='#'
-else
-  am__fastdepCC_TRUE='#'
-  am__fastdepCC_FALSE=
-fi
 
 
 
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-if test -z "$CXX"; then
-  if test -n "$CCC"; then
-    CXX=$CCC
-  else
-    if test -n "$ac_tool_prefix"; then
-  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CXX+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CXX"; then
-  ac_cv_prog_CXX="$CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
 
-fi
-fi
-CXX=$ac_cv_prog_CXX
-if test -n "$CXX"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
-$as_echo "$CXX" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
 
 
-    test -n "$CXX" && break
-  done
-fi
-if test -z "$CXX"; then
-  ac_ct_CXX=$CXX
-  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CXX+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_CXX"; then
-  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CXX="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
 
-fi
-fi
-ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
-if test -n "$ac_ct_CXX"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
-$as_echo "$ac_ct_CXX" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
 
 
-  test -n "$ac_ct_CXX" && break
-done
 
-  if test "x$ac_ct_CXX" = x; then
-    CXX="g++"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[4-9]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
   else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    CXX=$ac_ct_CXX
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
   fi
-fi
+  ;;
 
-  fi
-fi
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
-  { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    sed '10a\
-... rest of stderr output deleted ...
-         10q' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-  fi
-  rm -f conftest.er1 conftest.err
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-done
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
-$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
-if ${ac_cv_cxx_compiler_gnu+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
 
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
+bsdi[45]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
 
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_compiler_gnu=yes
-else
-  ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
-$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
-  GXX=yes
-else
-  GXX=
-fi
-ac_test_CXXFLAGS=${CXXFLAGS+set}
-ac_save_CXXFLAGS=$CXXFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
-$as_echo_n "checking whether $CXX accepts -g... " >&6; }
-if ${ac_cv_prog_cxx_g+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_save_cxx_werror_flag=$ac_cxx_werror_flag
-   ac_cxx_werror_flag=yes
-   ac_cv_prog_cxx_g=no
-   CXXFLAGS="-g"
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+    library_names_spec='${libname}.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec="$LIB"
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
+    ;;
+
+  *)
+    # Assume MSVC wrapper
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    dynamic_linker='Win32 ld.exe'
+    ;;
+  esac
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[23].*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2.*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
 
-int
-main ()
-{
+gnu*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
 
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_cv_prog_cxx_g=yes
-else
-  CXXFLAGS=""
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+haiku*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+  hardcode_into_libs=yes
+  ;;
 
-int
-main ()
-{
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+  postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
+  ;;
 
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
+interix[3-9]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux # correct to gnu/linux during the next big refactor
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
 
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+
+  # Some binutils ld are patched to set DT_RUNPATH
+  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  ac_cxx_werror_flag=$ac_save_cxx_werror_flag
-	 CXXFLAGS="-g"
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \
+	 LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\""
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -5709,165 +16373,348 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_cv_prog_cxx_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+if ac_fn_cxx_try_link "$LINENO"; then :
+  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+  lt_cv_shlibpath_overrides_runpath=yes
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
-$as_echo "$ac_cv_prog_cxx_g" >&6; }
-if test "$ac_test_CXXFLAGS" = set; then
-  CXXFLAGS=$ac_save_CXXFLAGS
-elif test $ac_cv_prog_cxx_g = yes; then
-  if test "$GXX" = yes; then
-    CXXFLAGS="-g -O2"
-  else
-    CXXFLAGS="-g"
+
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Add ABI-specific directories to the system library path.
+  sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib"
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra"
+
   fi
-else
-  if test "$GXX" = yes; then
-    CXXFLAGS="-O2"
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
   else
-    CXXFLAGS=
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
   fi
-fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
 
-depcc="$CXX"  am_compiler_list=
+newsos6)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
-$as_echo_n "checking dependency style of $depcc... " >&6; }
-if ${am_cv_CXX_dependencies_compiler_type+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
-  # We make a subdir and do the tests there.  Otherwise we can end up
-  # making bogus files that we don't know about and never remove.  For
-  # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named 'D' -- because '-MD' means "put the output
-  # in D".
-  rm -rf conftest.dir
-  mkdir conftest.dir
-  # Copy depcomp to subdir because otherwise we won't find it if we're
-  # using a relative directory.
-  cp "$am_depcomp" conftest.dir
-  cd conftest.dir
-  # We will build objects and dependencies in a subdirectory because
-  # it helps to detect inapplicable dependency modes.  For instance
-  # both Tru64's cc and ICC support -MD to output dependencies as a
-  # side effect of compilation, but ICC will put the dependencies in
-  # the current directory while Tru64 will put them in the object
-  # directory.
-  mkdir sub
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
 
-  am_cv_CXX_dependencies_compiler_type=none
-  if test "$am_compiler_list" = ""; then
-     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*)	need_version=yes ;;
+    *)				need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
   fi
-  am__universal=false
-  case " $depcc " in #(
-     *\ -arch\ *\ -arch\ *) am__universal=true ;;
-     esac
+  ;;
 
-  for depmode in $am_compiler_list; do
-    # Setup a source with many dependencies, because some compilers
-    # like to wrap large dependency lists on column 80 (with \), and
-    # we should not choose a depcomp mode which is confused by this.
-    #
-    # We need to recreate these files for each test, as the compiler may
-    # overwrite some of them when testing with obscure command lines.
-    # This happens at least with the AIX C compiler.
-    : > sub/conftest.c
-    for i in 1 2 3 4 5 6; do
-      echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
-      # Solaris 10 /bin/sh.
-      echo '/* dummy */' > sub/conftst$i.h
-    done
-    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
 
-    # We check with '-c' and '-o' for the sake of the "dashmstdout"
-    # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle '-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs.
-    am__obj=sub/conftest.${OBJEXT-o}
-    am__minus_obj="-o $am__obj"
-    case $depmode in
-    gcc)
-      # This depmode causes a compiler race in universal mode.
-      test "$am__universal" = false || continue
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
       ;;
-    nosideeffect)
-      # After this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested.
-      if test "x$enable_dependency_tracking" = xyes; then
-	continue
-      else
-	break
-      fi
+    siemens)
+      need_lib_prefix=no
       ;;
-    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
-      # This compiler won't grok '-c -o', but also, the minuso test has
-      # not run yet.  These depmodes are late enough in the game, and
-      # so weak that their functioning should not be impacted.
-      am__obj=conftest.${OBJEXT-o}
-      am__minus_obj=
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
       ;;
-    none) break ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux # correct to gnu/linux during the next big refactor
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+	;;
     esac
-    if depmode=$depmode \
-       source=sub/conftest.c object=$am__obj \
-       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
-         >/dev/null 2>conftest.err &&
-       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
-       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
-      # icc doesn't choke on unknown options, it will just issue warnings
-      # or remarks (even with -Werror).  So we grep stderr for any message
-      # that says an option was ignored or not supported.
-      # When given -MP, icc 7.0 and 7.1 complain thusly:
-      #   icc: Command line warning: ignoring option '-M'; no argument required
-      # The diagnosis changed in icc 8.0:
-      #   icc: Command line remark: option '-MP' not supported
-      if (grep 'ignoring option' conftest.err ||
-          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
-        am_cv_CXX_dependencies_compiler_type=$depmode
-        break
-      fi
-    fi
-  done
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 
-  cd ..
-  rm -rf conftest.dir
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action_CXX=
+if test -n "$hardcode_libdir_flag_spec_CXX" ||
+   test -n "$runpath_var_CXX" ||
+   test "X$hardcode_automatic_CXX" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$hardcode_direct_CXX" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no &&
+     test "$hardcode_minus_L_CXX" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action_CXX=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action_CXX=immediate
+  fi
 else
-  am_cv_CXX_dependencies_compiler_type=none
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action_CXX=unsupported
 fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5
+$as_echo "$hardcode_action_CXX" >&6; }
 
+if test "$hardcode_action_CXX" = relink ||
+   test "$inherit_rpath_CXX" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5
-$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
-CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
 
- if
-  test "x$enable_dependency_tracking" != xno \
-  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
-  am__fastdepCXX_TRUE=
-  am__fastdepCXX_FALSE='#'
-else
-  am__fastdepCXX_TRUE='#'
-  am__fastdepCXX_FALSE=
-fi
+
+
+
+
+
+
+  fi # test -n "$compiler"
+
+  CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
+  LDCXX=$LD
+  LD=$lt_save_LD
+  GCC=$lt_save_GCC
+  with_gnu_ld=$lt_save_with_gnu_ld
+  lt_cv_path_LDCXX=$lt_cv_path_LD
+  lt_cv_path_LD=$lt_save_path_LD
+  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test "$_lt_caught_CXX_error" != yes
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 ac_ext=cpp
@@ -6193,6 +17040,64 @@ $as_echo "no" >&6; }
 	fi
 fi
 
+GLIB_COMPILE_RESOURCES=`$PKG_CONFIG --variable glib_compile_resources gio-2.0`
+
+
+# Extract the first word of "gdk-pixbuf-pixdata", so it can be a program name with args.
+set dummy gdk-pixbuf-pixdata; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_GDK_PIXBUF_PIXDATA+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $GDK_PIXBUF_PIXDATA in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_GDK_PIXBUF_PIXDATA="$GDK_PIXBUF_PIXDATA" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_GDK_PIXBUF_PIXDATA="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+GDK_PIXBUF_PIXDATA=$ac_cv_path_GDK_PIXBUF_PIXDATA
+if test -n "$GDK_PIXBUF_PIXDATA"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GDK_PIXBUF_PIXDATA" >&5
+$as_echo "$GDK_PIXBUF_PIXDATA" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+if test "x$ac_cv_path_GDK_PIXBUF_PIXDATA" = "x"; then :
+  as_fn_error $? "gdk-pixbuf-pixdata is required for image resources" "$LINENO" 5
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for glib-mkenums script" >&5
+$as_echo_n "checking for glib-mkenums script... " >&6; }
+GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0`
+if test "x$GLIB_MKENUMS" = "x"; then :
+  as_fn_error $? "glib-mkenums not listed in glib-2.0 pkg-config file" "$LINENO" 5
+else
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GLIB_MKENUMS" >&5
+$as_echo "$GLIB_MKENUMS" >&6; }
+fi
+
 # Check whether --enable-man was given.
 if test "${enable_man+set}" = set; then :
   enableval=$enable_man;
@@ -6532,17 +17437,6 @@ else
 fi
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
-$as_echo_n "checking whether ln -s works... " >&6; }
-LN_S=$as_ln_s
-if test "$LN_S" = "ln -s"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
-$as_echo "no, using $LN_S" >&6; }
-fi
-
 
 
 
@@ -6739,7 +17633,7 @@ EXTRA_DIST += $(foreach lc,$(HELP_LINGUAS),$(lc)/$(lc).po)
 EXTRA_DIST += $(foreach f,$(HELP_MEDIA),$(foreach lc,$(HELP_LINGUAS),$(wildcard $(lc)/$(f))))
 
 distdir: distdir-help-files
-distdir-help-files:
+distdir-help-files: $(_HELP_LC_FILES)
 	@for lc in C $(if $(YELP_LC_DIST),$(HELP_LINGUAS)) ; do \
 	  $(MKDIR_P) "$(distdir)/$$lc"; \
 	  for file in $(HELP_FILES); do \
@@ -6768,7 +17662,7 @@ check-help:
 
 .PHONY: install-help
 install-data-am: $(if $(HELP_ID),install-help)
-install-help:
+install-help: $(_HELP_LC_FILES)
 	@for lc in C $(_HELP_LINGUAS); do \
 	  $(mkinstalldirs) "$(DESTDIR)$(HELP_DIR)/$$lc/$(HELP_ID)" || exit 1; \
 	done
@@ -6832,76 +17726,6 @@ uninstall-help:
 
 
 
-# Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
-  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if ${ac_cv_build+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_build_alias=$build_alias
-test "x$ac_build_alias" = x &&
-  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
-test "x$ac_build_alias" = x &&
-  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
-  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
-case $ac_cv_build in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
-esac
-build=$ac_cv_build
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_build
-shift
-build_cpu=$1
-build_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-build_os=$*
-IFS=$ac_save_IFS
-case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if ${ac_cv_host+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "x$host_alias" = x; then
-  ac_cv_host=$ac_cv_build
-else
-  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
-    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
-case $ac_cv_host in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
-esac
-host=$ac_cv_host
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_host
-shift
-host_cpu=$1
-host_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-host_os=$*
-IFS=$ac_save_IFS
-case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
-
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build with mingw32 for a Windows host" >&5
 $as_echo_n "checking whether to build with mingw32 for a Windows host... " >&6; }
@@ -7066,154 +17890,18 @@ fi
 # Check whether --enable-wavpack was given.
 if test "${enable_wavpack+set}" = set; then :
   enableval=$enable_wavpack;
-fi
-
-
-
-
-GTK2_DEPS="gtk+-2.0 >= 2.24.7"
-GTK3_DEPS="gtk+-3.0 >= 3.2.1"
-if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$GTK2_DEPS\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "$GTK2_DEPS") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  have_gtk2=yes
-else
-  have_gtk2=no
-fi
-if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$GTK3_DEPS\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "$GTK3_DEPS") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  have_gtk3=yes
-else
-  have_gtk3=no
-fi
-
-
-# Check whether --with-gtk2 was given.
-if test "${with_gtk2+set}" = set; then :
-  withval=$with_gtk2;
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use GTK+ 2" >&5
-$as_echo_n "checking whether to use GTK+ 2... " >&6; }
-if test "x$have_gtk2" = "xyes" -a "x$have_gtk3" = "xno" -a "x$with_gtk2" != "xyes"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: forcing GTK+ 2 support, as GTK+ 3 was not found" >&5
-$as_echo "$as_me: WARNING: forcing GTK+ 2 support, as GTK+ 3 was not found" >&2;}
-       with_gtk2=yes
-fi
-if test "x$with_gtk2" = "xyes"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: GTK+ 2 support is currently deprecated!" >&5
-$as_echo "$as_me: WARNING: GTK+ 2 support is currently deprecated!" >&2;}
-       GTK_DEPS="$GTK2_DEPS"
-       GTK_DEPRECATION_FLAGS="-DGSEAL_ENABLE -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-       GTK_DEPS="$GTK3_DEPS"
-       GTK_DEPRECATION_FLAGS="-DGDK_VERSION_MIN_REQUIRED=GDK_VERSION_3_4 -DGDK_VERSION_MAX_ALLOWED=GDK_VERSION_3_4"
-fi
-
-pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTK" >&5
-$as_echo_n "checking for GTK... " >&6; }
-
-if test -n "$GTK_CFLAGS"; then
-    pkg_cv_GTK_CFLAGS="$GTK_CFLAGS"
- elif test -n "$PKG_CONFIG"; then
-    if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$GTK_DEPS\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "$GTK_DEPS") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  pkg_cv_GTK_CFLAGS=`$PKG_CONFIG --cflags "$GTK_DEPS" 2>/dev/null`
-		      test "x$?" != "x0" && pkg_failed=yes
-else
-  pkg_failed=yes
-fi
- else
-    pkg_failed=untried
-fi
-if test -n "$GTK_LIBS"; then
-    pkg_cv_GTK_LIBS="$GTK_LIBS"
- elif test -n "$PKG_CONFIG"; then
-    if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$GTK_DEPS\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "$GTK_DEPS") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  pkg_cv_GTK_LIBS=`$PKG_CONFIG --libs "$GTK_DEPS" 2>/dev/null`
-		      test "x$?" != "x0" && pkg_failed=yes
-else
-  pkg_failed=yes
-fi
- else
-    pkg_failed=untried
-fi
-
-
-
-if test $pkg_failed = yes; then
-   	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
-        _pkg_short_errors_supported=yes
-else
-        _pkg_short_errors_supported=no
-fi
-        if test $_pkg_short_errors_supported = yes; then
-	        GTK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$GTK_DEPS" 2>&1`
-        else
-	        GTK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$GTK_DEPS" 2>&1`
-        fi
-	# Put the nasty error message in config.log where it belongs
-	echo "$GTK_PKG_ERRORS" >&5
-
-	as_fn_error $? "Package requirements ($GTK_DEPS) were not met:
-
-$GTK_PKG_ERRORS
-
-Consider adjusting the PKG_CONFIG_PATH environment variable if you
-installed software in a non-standard prefix.
-
-Alternatively, you may set the environment variables GTK_CFLAGS
-and GTK_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details." "$LINENO" 5
-elif test $pkg_failed = untried; then
-     	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "The pkg-config script could not be found or is too old.  Make sure it
-is in your PATH or set the PKG_CONFIG environment variable to the full
-path to pkg-config.
-
-Alternatively, you may set the environment variables GTK_CFLAGS
-and GTK_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.
-
-To get pkg-config, see <http://pkg-config.freedesktop.org/>.
-See \`config.log' for more details" "$LINENO" 5; }
-else
-	GTK_CFLAGS=$pkg_cv_GTK_CFLAGS
-	GTK_LIBS=$pkg_cv_GTK_LIBS
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+fi
+
 
+# Check whether --enable-nautilus_actions was given.
+if test "${enable_nautilus_actions+set}" = set; then :
+  enableval=$enable_nautilus_actions;
 fi
 
 
+
+
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for recv in -lsocket" >&5
 $as_echo_n "checking for recv in -lsocket... " >&6; }
 if ${ac_cv_lib_socket_recv+:} false; then :
@@ -7589,21 +18277,43 @@ else
 fi
 fi
 
-GIO_DEPS="gio-2.0 >= 2.32.0"
+NAUTILUS_DEPS="libnautilus-extension gio-unix-2.0"
+if test "x$enable_nautilus_actions" != "xno"; then :
+  if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$NAUTILUS_DEPS\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$NAUTILUS_DEPS") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  have_libnautilus_extension=yes
+else
+  have_libnautilus_extension=no
+fi
+else
+  have_libnautilus_extension=no
+fi
+
+if test "x$have_libnautilus_extension" = "xno"; then :
+  NAUTILUS_DEPS=""
+       if test "x$enable_nautilus_actions" = "xyes"; then :
+  as_fn_error $? "Nautilus Actions build requested but required dependencies ($NAUTILUS_DEPS) not found" "$LINENO" 5
+fi
+else
+
 pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for EASYTAG" >&5
-$as_echo_n "checking for EASYTAG... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for NAUTILUS" >&5
+$as_echo_n "checking for NAUTILUS... " >&6; }
 
-if test -n "$EASYTAG_CFLAGS"; then
-    pkg_cv_EASYTAG_CFLAGS="$EASYTAG_CFLAGS"
+if test -n "$NAUTILUS_CFLAGS"; then
+    pkg_cv_NAUTILUS_CFLAGS="$NAUTILUS_CFLAGS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$GIO_DEPS \$GTK_DEPS \$OPUS_DEPS \$OGG_DEPS \$SPEEX_DEPS \$FLAC_DEPS \$ID3TAG_DEPS \$TAGLIB_DEPS \$WAVPACK_DEPS\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "$GIO_DEPS $GTK_DEPS $OPUS_DEPS $OGG_DEPS $SPEEX_DEPS $FLAC_DEPS $ID3TAG_DEPS $TAGLIB_DEPS $WAVPACK_DEPS") 2>&5
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$NAUTILUS_DEPS\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$NAUTILUS_DEPS") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_EASYTAG_CFLAGS=`$PKG_CONFIG --cflags "$GIO_DEPS $GTK_DEPS $OPUS_DEPS $OGG_DEPS $SPEEX_DEPS $FLAC_DEPS $ID3TAG_DEPS $TAGLIB_DEPS $WAVPACK_DEPS" 2>/dev/null`
+  pkg_cv_NAUTILUS_CFLAGS=`$PKG_CONFIG --cflags "$NAUTILUS_DEPS" 2>/dev/null`
 		      test "x$?" != "x0" && pkg_failed=yes
 else
   pkg_failed=yes
@@ -7611,16 +18321,16 @@ fi
  else
     pkg_failed=untried
 fi
-if test -n "$EASYTAG_LIBS"; then
-    pkg_cv_EASYTAG_LIBS="$EASYTAG_LIBS"
+if test -n "$NAUTILUS_LIBS"; then
+    pkg_cv_NAUTILUS_LIBS="$NAUTILUS_LIBS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$GIO_DEPS \$GTK_DEPS \$OPUS_DEPS \$OGG_DEPS \$SPEEX_DEPS \$FLAC_DEPS \$ID3TAG_DEPS \$TAGLIB_DEPS \$WAVPACK_DEPS\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "$GIO_DEPS $GTK_DEPS $OPUS_DEPS $OGG_DEPS $SPEEX_DEPS $FLAC_DEPS $ID3TAG_DEPS $TAGLIB_DEPS $WAVPACK_DEPS") 2>&5
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$NAUTILUS_DEPS\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$NAUTILUS_DEPS") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_EASYTAG_LIBS=`$PKG_CONFIG --libs "$GIO_DEPS $GTK_DEPS $OPUS_DEPS $OGG_DEPS $SPEEX_DEPS $FLAC_DEPS $ID3TAG_DEPS $TAGLIB_DEPS $WAVPACK_DEPS" 2>/dev/null`
+  pkg_cv_NAUTILUS_LIBS=`$PKG_CONFIG --libs "$NAUTILUS_DEPS" 2>/dev/null`
 		      test "x$?" != "x0" && pkg_failed=yes
 else
   pkg_failed=yes
@@ -7641,662 +18351,290 @@ else
         _pkg_short_errors_supported=no
 fi
         if test $_pkg_short_errors_supported = yes; then
-	        EASYTAG_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$GIO_DEPS $GTK_DEPS $OPUS_DEPS $OGG_DEPS $SPEEX_DEPS $FLAC_DEPS $ID3TAG_DEPS $TAGLIB_DEPS $WAVPACK_DEPS" 2>&1`
+	        NAUTILUS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$NAUTILUS_DEPS" 2>&1`
         else
-	        EASYTAG_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$GIO_DEPS $GTK_DEPS $OPUS_DEPS $OGG_DEPS $SPEEX_DEPS $FLAC_DEPS $ID3TAG_DEPS $TAGLIB_DEPS $WAVPACK_DEPS" 2>&1`
+	        NAUTILUS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$NAUTILUS_DEPS" 2>&1`
         fi
 	# Put the nasty error message in config.log where it belongs
-	echo "$EASYTAG_PKG_ERRORS" >&5
+	echo "$NAUTILUS_PKG_ERRORS" >&5
 
-	as_fn_error $? "Package requirements ($GIO_DEPS $GTK_DEPS $OPUS_DEPS $OGG_DEPS $SPEEX_DEPS $FLAC_DEPS $ID3TAG_DEPS $TAGLIB_DEPS $WAVPACK_DEPS) were not met:
+	as_fn_error $? "Package requirements ($NAUTILUS_DEPS) were not met:
 
-$EASYTAG_PKG_ERRORS
+$NAUTILUS_PKG_ERRORS
 
 Consider adjusting the PKG_CONFIG_PATH environment variable if you
 installed software in a non-standard prefix.
 
-Alternatively, you may set the environment variables EASYTAG_CFLAGS
-and EASYTAG_LIBS to avoid the need to call pkg-config.
+Alternatively, you may set the environment variables NAUTILUS_CFLAGS
+and NAUTILUS_LIBS to avoid the need to call pkg-config.
 See the pkg-config man page for more details." "$LINENO" 5
 elif test $pkg_failed = untried; then
-     	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "The pkg-config script could not be found or is too old.  Make sure it
-is in your PATH or set the PKG_CONFIG environment variable to the full
-path to pkg-config.
-
-Alternatively, you may set the environment variables EASYTAG_CFLAGS
-and EASYTAG_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.
-
-To get pkg-config, see <http://pkg-config.freedesktop.org/>.
-See \`config.log' for more details" "$LINENO" 5; }
-else
-	EASYTAG_CFLAGS=$pkg_cv_EASYTAG_CFLAGS
-	EASYTAG_LIBS=$pkg_cv_EASYTAG_LIBS
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gethostbyname" >&5
-$as_echo_n "checking for library containing gethostbyname... " >&6; }
-if ${ac_cv_search_gethostbyname+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char gethostbyname ();
-int
-main ()
-{
-return gethostbyname ();
-  ;
-  return 0;
-}
-_ACEOF
-for ac_lib in '' nsl socket; do
-  if test -z "$ac_lib"; then
-    ac_res="none required"
-  else
-    ac_res=-l$ac_lib
-    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
-  fi
-  if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_search_gethostbyname=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext
-  if ${ac_cv_search_gethostbyname+:} false; then :
-  break
-fi
-done
-if ${ac_cv_search_gethostbyname+:} false; then :
-
-else
-  ac_cv_search_gethostbyname=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethostbyname" >&5
-$as_echo "$ac_cv_search_gethostbyname" >&6; }
-ac_res=$ac_cv_search_gethostbyname
-if test "$ac_res" != no; then :
-  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-
-else
-  saved_LIBS=$LIBS
-     LIBS="-lws2_32 $LIBS"
-     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in ws2_32" >&5
-$as_echo_n "checking for gethostbyname in ws2_32... " >&6; }
-     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <winsock2.h>
-int
-main ()
-{
-gethostbyname ("");
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  have_ws2=yes
-else
-  have_ws2=no LIBS=$saved_LIBS
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_ws2" >&5
-$as_echo "$have_ws2" >&6; }
-fi
-
-
-warning_flags="-Wall -Wstrict-prototypes -Wnested-externs -Werror=missing-prototypes -Werror=implicit-function-declaration -Werror=pointer-arith -Werror=init-self -Werror=format-security -Werror=format=2 -Werror=missing-include-dirs -Werror=declaration-after-statement"
-
-realsave_CFLAGS="$CFLAGS"
-for option in $warning_flags; do
-    save_CFLAGS="$CFLAGS"
-    CFLAGS="$CFLAGS $option"
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler understands $option" >&5
-$as_echo_n "checking whether the compiler understands $option... " >&6; }
-	cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  has_option=yes
-else
-  has_option=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-	CFLAGS="$save_CFLAGS"
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_option" >&5
-$as_echo "$has_option" >&6; }
-	if test $has_option = yes; then :
-  tested_warning_flags="$tested_warning_flags $option"
-fi
-	unset has_option
-	unset save_CFLAGS
-done
-unset option
-CFLAGS="$realsave_CFLAGS"
-
-WARN_CFLAGS="$tested_warning_flags"
-
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-
-realsave_CXXFLAGS="$CXXFLAGS"
-for option in $warning_flags; do
-    save_CXXFLAGS="$CXXFLAGS"
-    CXXFLAGS="$CXXFLAGS -Werror $option"
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the c++ compiler understands $option" >&5
-$as_echo_n "checking whether the c++ compiler understands $option... " >&6; }
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  has_option=yes
-else
-  has_option=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-	CXXFLAGS="$save_CXXFLAGS"
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_option" >&5
-$as_echo "$has_option" >&6; }
-	if test $has_option = yes; then :
-  tested_cxx_warning_flags="$tested_cxx_warning_flags $option"
-fi
-	unset has_option
-	unset save_CXXFLAGS
-done
-unset option
-CXXFLAGS="$realsave_CXXFLAGS"
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-WARN_CXXFLAGS="$tested_cxx_warning_flags"
-
-DEPRECATED_CPPFLAGS="-DG_DISABLE_SINGLE_INCLUDES -DGTK_DISABLE_SINGLE_INCLUDES -DG_DISABLE_DEPRECATED $GTK_DEPRECATION_FLAGS"
-
-
-
-
-ac_header_dirent=no
-for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do
-  as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5
-$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; }
-if eval \${$as_ac_Header+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
-#include <$ac_hdr>
-
-int
-main ()
-{
-if ((DIR *) 0)
-return 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$as_ac_Header=yes"
-else
-  eval "$as_ac_Header=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$as_ac_Header
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1
-_ACEOF
+     	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
 
-ac_header_dirent=$ac_hdr; break
-fi
+Alternatively, you may set the environment variables NAUTILUS_CFLAGS
+and NAUTILUS_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
 
-done
-# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
-if test $ac_header_dirent = dirent.h; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
-$as_echo_n "checking for library containing opendir... " >&6; }
-if ${ac_cv_search_opendir+:} false; then :
-  $as_echo_n "(cached) " >&6
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details" "$LINENO" 5; }
 else
-  ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+	NAUTILUS_CFLAGS=$pkg_cv_NAUTILUS_CFLAGS
+	NAUTILUS_LIBS=$pkg_cv_NAUTILUS_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
 
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char opendir ();
-int
-main ()
-{
-return opendir ();
-  ;
-  return 0;
-}
-_ACEOF
-for ac_lib in '' dir; do
-  if test -z "$ac_lib"; then
-    ac_res="none required"
-  else
-    ac_res=-l$ac_lib
-    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
-  fi
-  if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_search_opendir=$ac_res
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext
-  if ${ac_cv_search_opendir+:} false; then :
-  break
+       NAUTILUS_EXTENSION_DIR=`$PKG_CONFIG --variable=extensiondir libnautilus-extension`
+       NAUTILUS_EXTENSION_DIR=$NAUTILUS_EXTENSION_DIR
+
 fi
-done
-if ${ac_cv_search_opendir+:} false; then :
 
+ if test x"$have_libnautilus_extension" != x"no"; then
+  ENABLE_NAUTILUS_ACTIONS_TRUE=
+  ENABLE_NAUTILUS_ACTIONS_FALSE='#'
 else
-  ac_cv_search_opendir=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
+  ENABLE_NAUTILUS_ACTIONS_TRUE='#'
+  ENABLE_NAUTILUS_ACTIONS_FALSE=
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5
-$as_echo "$ac_cv_search_opendir" >&6; }
-ac_res=$ac_cv_search_opendir
-if test "$ac_res" != no; then :
-  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
-fi
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
-$as_echo_n "checking for library containing opendir... " >&6; }
-if ${ac_cv_search_opendir+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+GIO_DEPS="gio-2.0 >= 2.32.0" GLIB_DEPRECATION_FLAGS="-DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_32 -DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_32"
+GTK_DEPS="gtk+-3.0 >= 3.4.0"
+GTK_DEPRECATION_FLAGS="-DGDK_VERSION_MIN_REQUIRED=GDK_VERSION_3_4 -DGDK_VERSION_MAX_ALLOWED=GDK_VERSION_3_4"
 
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char opendir ();
-int
-main ()
-{
-return opendir ();
-  ;
-  return 0;
-}
-_ACEOF
-for ac_lib in '' x; do
-  if test -z "$ac_lib"; then
-    ac_res="none required"
-  else
-    ac_res=-l$ac_lib
-    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
-  fi
-  if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_search_opendir=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext
-  if ${ac_cv_search_opendir+:} false; then :
-  break
-fi
-done
-if ${ac_cv_search_opendir+:} false; then :
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for EASYTAG" >&5
+$as_echo_n "checking for EASYTAG... " >&6; }
 
+if test -n "$EASYTAG_CFLAGS"; then
+    pkg_cv_EASYTAG_CFLAGS="$EASYTAG_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$GIO_DEPS \$GTK_DEPS \$OPUS_DEPS \$OGG_DEPS \$SPEEX_DEPS \$FLAC_DEPS \$ID3TAG_DEPS \$TAGLIB_DEPS \$WAVPACK_DEPS\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$GIO_DEPS $GTK_DEPS $OPUS_DEPS $OGG_DEPS $SPEEX_DEPS $FLAC_DEPS $ID3TAG_DEPS $TAGLIB_DEPS $WAVPACK_DEPS") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_EASYTAG_CFLAGS=`$PKG_CONFIG --cflags "$GIO_DEPS $GTK_DEPS $OPUS_DEPS $OGG_DEPS $SPEEX_DEPS $FLAC_DEPS $ID3TAG_DEPS $TAGLIB_DEPS $WAVPACK_DEPS" 2>/dev/null`
+		      test "x$?" != "x0" && pkg_failed=yes
 else
-  ac_cv_search_opendir=no
+  pkg_failed=yes
 fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
+ else
+    pkg_failed=untried
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5
-$as_echo "$ac_cv_search_opendir" >&6; }
-ac_res=$ac_cv_search_opendir
-if test "$ac_res" != no; then :
-  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-
+if test -n "$EASYTAG_LIBS"; then
+    pkg_cv_EASYTAG_LIBS="$EASYTAG_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$GIO_DEPS \$GTK_DEPS \$OPUS_DEPS \$OGG_DEPS \$SPEEX_DEPS \$FLAC_DEPS \$ID3TAG_DEPS \$TAGLIB_DEPS \$WAVPACK_DEPS\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$GIO_DEPS $GTK_DEPS $OPUS_DEPS $OGG_DEPS $SPEEX_DEPS $FLAC_DEPS $ID3TAG_DEPS $TAGLIB_DEPS $WAVPACK_DEPS") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_EASYTAG_LIBS=`$PKG_CONFIG --libs "$GIO_DEPS $GTK_DEPS $OPUS_DEPS $OGG_DEPS $SPEEX_DEPS $FLAC_DEPS $ID3TAG_DEPS $TAGLIB_DEPS $WAVPACK_DEPS" 2>/dev/null`
+		      test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
 fi
-
+ else
+    pkg_failed=untried
 fi
 
 
 
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
-  CPP=
-fi
-if test -z "$CPP"; then
-  if ${ac_cv_prog_CPP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-      # Double quotes because CPP needs to be expanded
-    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
-    do
-      ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
+if test $pkg_failed = yes; then
+   	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
 else
-  # Broken: fails on valid input.
-continue
+        _pkg_short_errors_supported=no
 fi
-rm -f conftest.err conftest.i conftest.$ac_ext
+        if test $_pkg_short_errors_supported = yes; then
+	        EASYTAG_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$GIO_DEPS $GTK_DEPS $OPUS_DEPS $OGG_DEPS $SPEEX_DEPS $FLAC_DEPS $ID3TAG_DEPS $TAGLIB_DEPS $WAVPACK_DEPS" 2>&1`
+        else
+	        EASYTAG_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$GIO_DEPS $GTK_DEPS $OPUS_DEPS $OGG_DEPS $SPEEX_DEPS $FLAC_DEPS $ID3TAG_DEPS $TAGLIB_DEPS $WAVPACK_DEPS" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$EASYTAG_PKG_ERRORS" >&5
 
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  # Broken: success on invalid input.
-continue
-else
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
+	as_fn_error $? "Package requirements ($GIO_DEPS $GTK_DEPS $OPUS_DEPS $OGG_DEPS $SPEEX_DEPS $FLAC_DEPS $ID3TAG_DEPS $TAGLIB_DEPS $WAVPACK_DEPS) were not met:
 
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-  break
-fi
+$EASYTAG_PKG_ERRORS
 
-    done
-    ac_cv_prog_CPP=$CPP
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
 
-fi
-  CPP=$ac_cv_prog_CPP
+Alternatively, you may set the environment variables EASYTAG_CFLAGS
+and EASYTAG_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details." "$LINENO" 5
+elif test $pkg_failed = untried; then
+     	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables EASYTAG_CFLAGS
+and EASYTAG_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details" "$LINENO" 5; }
 else
-  ac_cv_prog_CPP=$CPP
+	EASYTAG_CFLAGS=$pkg_cv_EASYTAG_CFLAGS
+	EASYTAG_LIBS=$pkg_cv_EASYTAG_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
-$as_echo "$CPP" >&6; }
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gethostbyname" >&5
+$as_echo_n "checking for library containing gethostbyname... " >&6; }
+if ${ac_cv_search_gethostbyname+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
 #endif
-		     Syntax error
+char gethostbyname ();
+int
+main ()
+{
+return gethostbyname ();
+  ;
+  return 0;
+}
 _ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
+for ac_lib in '' nsl socket; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_gethostbyname=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_gethostbyname+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_gethostbyname+:} false; then :
 
 else
-  # Broken: fails on valid input.
-continue
+  ac_cv_search_gethostbyname=no
 fi
-rm -f conftest.err conftest.i conftest.$ac_ext
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethostbyname" >&5
+$as_echo "$ac_cv_search_gethostbyname" >&6; }
+ac_res=$ac_cv_search_gethostbyname
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+else
+  saved_LIBS=$LIBS
+     LIBS="-lws2_32 $LIBS"
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in ws2_32" >&5
+$as_echo_n "checking for gethostbyname in ws2_32... " >&6; }
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <ac_nonexistent.h>
+#include <winsock2.h>
+int
+main ()
+{
+gethostbyname ("");
+  ;
+  return 0;
+}
 _ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  # Broken: success on invalid input.
-continue
+if ac_fn_c_try_link "$LINENO"; then :
+  have_ws2=yes
 else
-  # Passes both tests.
-ac_preproc_ok=:
-break
+  have_ws2=no LIBS=$saved_LIBS
 fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-
-else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5; }
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_ws2" >&5
+$as_echo "$have_ws2" >&6; }
 fi
 
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
+warning_flags="-Wall -Wstrict-prototypes -Wnested-externs -Werror=missing-prototypes -Werror=implicit-function-declaration -Werror=pointer-arith -Werror=init-self -Werror=format-security -Werror=format=2 -Werror=missing-include-dirs -Werror=declaration-after-statement"
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
-$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if ${ac_cv_path_GREP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -z "$GREP"; then
-  ac_path_GREP_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in grep ggrep; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
-      as_fn_executable_p "$ac_path_GREP" || continue
-# Check for GNU ac_path_GREP and select it if it is found.
-  # Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
-*GNU*)
-  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo 'GREP' >> "conftest.nl"
-    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_GREP_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_GREP="$ac_path_GREP"
-      ac_path_GREP_max=$ac_count
-    fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
-  done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
+realsave_CFLAGS="$CFLAGS"
+for option in $warning_flags; do
+    save_CFLAGS="$CFLAGS"
+    CFLAGS="$CFLAGS $option"
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler understands $option" >&5
+$as_echo_n "checking whether the compiler understands $option... " >&6; }
+	cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
-      $ac_path_GREP_found && break 3
-    done
-  done
-  done
-IFS=$as_save_IFS
-  if test -z "$ac_cv_path_GREP"; then
-    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
-  fi
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  has_option=yes
 else
-  ac_cv_path_GREP=$GREP
+  has_option=no
 fi
-
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+	CFLAGS="$save_CFLAGS"
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_option" >&5
+$as_echo "$has_option" >&6; }
+	if test $has_option = yes; then :
+  tested_warning_flags="$tested_warning_flags $option"
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
-$as_echo "$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
-$as_echo_n "checking for egrep... " >&6; }
-if ${ac_cv_path_EGREP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
-   then ac_cv_path_EGREP="$GREP -E"
-   else
-     if test -z "$EGREP"; then
-  ac_path_EGREP_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in egrep; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-      as_fn_executable_p "$ac_path_EGREP" || continue
-# Check for GNU ac_path_EGREP and select it if it is found.
-  # Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
-*GNU*)
-  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo 'EGREP' >> "conftest.nl"
-    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_EGREP="$ac_path_EGREP"
-      ac_path_EGREP_max=$ac_count
-    fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
-  done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
+	unset has_option
+	unset save_CFLAGS
+done
+unset option
+CFLAGS="$realsave_CFLAGS"
 
-      $ac_path_EGREP_found && break 3
-    done
-  done
-  done
-IFS=$as_save_IFS
-  if test -z "$ac_cv_path_EGREP"; then
-    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
-  fi
-else
-  ac_cv_path_EGREP=$EGREP
-fi
+WARN_CFLAGS="$tested_warning_flags"
 
-   fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
-$as_echo "$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+realsave_CXXFLAGS="$CXXFLAGS"
+for option in $warning_flags; do
+    save_CXXFLAGS="$CXXFLAGS"
+    CXXFLAGS="$CXXFLAGS -Werror $option"
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the c++ compiler understands $option" >&5
+$as_echo_n "checking whether the c++ compiler understands $option... " >&6; }
+	cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
 
 int
 main ()
@@ -8306,139 +18644,279 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_header_stdc=yes
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  has_option=yes
 else
-  ac_cv_header_stdc=no
+  has_option=no
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+	CXXFLAGS="$save_CXXFLAGS"
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_option" >&5
+$as_echo "$has_option" >&6; }
+	if test $has_option = yes; then :
+  tested_cxx_warning_flags="$tested_cxx_warning_flags $option"
+fi
+	unset has_option
+	unset save_CXXFLAGS
+done
+unset option
+CXXFLAGS="$realsave_CXXFLAGS"
 
-if test $ac_cv_header_stdc = yes; then
-  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <string.h>
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+WARN_CXXFLAGS="$tested_cxx_warning_flags"
+
+DEPRECATED_CPPFLAGS="-DG_DISABLE_SINGLE_INCLUDES -DGTK_DISABLE_SINGLE_INCLUDES -DG_DISABLE_DEPRECATED $GLIB_DEPRECATION_FLAGS $GTK_DEPRECATION_FLAGS"
 
+
+for ac_func in ftruncate mkstemp truncate
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "memchr" >/dev/null 2>&1; then :
 
-else
-  ac_cv_header_stdc=no
 fi
-rm -f conftest*
+done
+
+
 
+
+  # Check whether --enable-schemas-compile was given.
+if test "${enable_schemas_compile+set}" = set; then :
+  enableval=$enable_schemas_compile; case ${enableval} in
+                  yes) GSETTINGS_DISABLE_SCHEMAS_COMPILE=""  ;;
+                  no)  GSETTINGS_DISABLE_SCHEMAS_COMPILE="1" ;;
+                  *) as_fn_error $? "bad value ${enableval} for --enable-schemas-compile" "$LINENO" 5 ;;
+                 esac
 fi
 
-if test $ac_cv_header_stdc = yes; then
-  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdlib.h>
 
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "free" >/dev/null 2>&1; then :
 
+
+
+
+
+
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+	if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_PKG_CONFIG+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
 
+  ;;
+esac
 fi
-
-if test $ac_cv_header_stdc = yes; then
-  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-  if test "$cross_compiling" = yes; then :
-  :
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
+$as_echo "$PKG_CONFIG" >&6; }
 else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
-		   (('a' <= (c) && (c) <= 'i') \
-		     || ('j' <= (c) && (c) <= 'r') \
-		     || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
 
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
-  int i;
-  for (i = 0; i < 256; i++)
-    if (XOR (islower (i), ISLOWER (i))
-	|| toupper (i) != TOUPPER (i))
-      return 2;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
 
+fi
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+  ac_pt_PKG_CONFIG=$PKG_CONFIG
+  # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  ac_cv_header_stdc=no
+  case $ac_pt_PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
 fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+if test -n "$ac_pt_PKG_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
+$as_echo "$ac_pt_PKG_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_pt_PKG_CONFIG" = x; then
+    PKG_CONFIG=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    PKG_CONFIG=$ac_pt_PKG_CONFIG
+  fi
+else
+  PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
 fi
 
 fi
+if test -n "$PKG_CONFIG"; then
+	_pkg_min_version=0.16
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
+$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
+	if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	else
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+		PKG_CONFIG=""
+	fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
+  gsettingsschemadir=${datadir}/glib-2.0/schemas
 
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+  if test x$cross_compiling != xyes; then
+    GLIB_COMPILE_SCHEMAS=`$PKG_CONFIG --variable glib_compile_schemas gio-2.0`
+  else
+    # Extract the first word of "glib-compile-schemas", so it can be a program name with args.
+set dummy glib-compile-schemas; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_GLIB_COMPILE_SCHEMAS+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $GLIB_COMPILE_SCHEMAS in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_GLIB_COMPILE_SCHEMAS="$GLIB_COMPILE_SCHEMAS" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_GLIB_COMPILE_SCHEMAS="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
 
+  ;;
+esac
+fi
+GLIB_COMPILE_SCHEMAS=$ac_cv_path_GLIB_COMPILE_SCHEMAS
+if test -n "$GLIB_COMPILE_SCHEMAS"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GLIB_COMPILE_SCHEMAS" >&5
+$as_echo "$GLIB_COMPILE_SCHEMAS" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
-		  inttypes.h stdint.h unistd.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
 
-fi
+  fi
+
+  if test "x$GLIB_COMPILE_SCHEMAS" = "x"; then
+    as_fn_error $? "glib-compile-schemas not found." "$LINENO" 5
+  else
+    :
+  fi
+
+  GSETTINGS_RULES='
+.PHONY : uninstall-gsettings-schemas install-gsettings-schemas clean-gsettings-schemas
+
+mostlyclean-am: clean-gsettings-schemas
+
+gsettings__enum_file = $(addsuffix .enums.xml,$(gsettings_ENUM_NAMESPACE))
+
+%.gschema.valid: %.gschema.xml $(gsettings__enum_file)
+	$(AM_V_GEN) $(GLIB_COMPILE_SCHEMAS) --strict --dry-run $(addprefix --schema-file=,$(gsettings__enum_file)) --schema-file=$< && mkdir -p $(@D) && touch $@
+
+all-am: $(gsettings_SCHEMAS:.xml=.valid)
+uninstall-am: uninstall-gsettings-schemas
+install-data-am: install-gsettings-schemas
 
-done
+.SECONDARY: $(gsettings_SCHEMAS)
 
+install-gsettings-schemas: $(gsettings_SCHEMAS) $(gsettings__enum_file)
+	@$(NORMAL_INSTALL)
+	if test -n "$^"; then \
+		test -z "$(gsettingsschemadir)" || $(MKDIR_P) "$(DESTDIR)$(gsettingsschemadir)"; \
+		$(INSTALL_DATA) $^ "$(DESTDIR)$(gsettingsschemadir)"; \
+		test -n "$(GSETTINGS_DISABLE_SCHEMAS_COMPILE)$(DESTDIR)" || $(GLIB_COMPILE_SCHEMAS) $(gsettingsschemadir); \
+	fi
 
-ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
-if test "x$ac_cv_type_size_t" = xyes; then :
+uninstall-gsettings-schemas:
+	@$(NORMAL_UNINSTALL)
+	@list='\''$(gsettings_SCHEMAS) $(gsettings__enum_file)'\''; test -n "$(gsettingsschemadir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e '\''s|^.*/||'\''`; \
+	test -n "$$files" || exit 0; \
+	echo " ( cd '\''$(DESTDIR)$(gsettingsschemadir)'\'' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(gsettingsschemadir)" && rm -f $$files
+	test -n "$(GSETTINGS_DISABLE_SCHEMAS_COMPILE)$(DESTDIR)" || $(GLIB_COMPILE_SCHEMAS) $(gsettingsschemadir)
 
-else
+clean-gsettings-schemas:
+	rm -f $(gsettings_SCHEMAS:.xml=.valid) $(gsettings__enum_file)
 
-cat >>confdefs.h <<_ACEOF
-#define size_t unsigned int
-_ACEOF
+ifdef gsettings_ENUM_NAMESPACE
+$(gsettings__enum_file): $(gsettings_ENUM_FILES)
+	$(AM_V_GEN) glib-mkenums --comments '\''<!-- @comment@ -->'\'' --fhead "<schemalist>" --vhead "  <@type@ id='\''$(gsettings_ENUM_NAMESPACE). at EnumName@'\''>" --vprod "    <value nick='\''@valuenick@'\'' value='\''@valuenum@'\''/>" --vtail "  </@type@>" --ftail "</schemalist>" $^ > $@.tmp && mv $@.tmp $@
+endif
+'
 
-fi
 
 
 
-for ac_func in ftruncate mkstemp truncate
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
 
-fi
-done
 
 
 ac_config_files="$ac_config_files Makefile doc/version.xml help/Makefile po/Makefile.in src/win32/easytag.rc"
@@ -8604,6 +19082,10 @@ if test -z "${WINDOWS_HOST_TRUE}" && test -z "${WINDOWS_HOST_FALSE}"; then
   as_fn_error $? "conditional \"WINDOWS_HOST\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${ENABLE_NAUTILUS_ACTIONS_TRUE}" && test -z "${ENABLE_NAUTILUS_ACTIONS_FALSE}"; then
+  as_fn_error $? "conditional \"ENABLE_NAUTILUS_ACTIONS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 
 : "${CONFIG_STATUS=./config.status}"
 ac_write_fail=0
@@ -9001,7 +19483,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by EasyTAG $as_me 2.2.4, which was
+This file was extended by EasyTAG $as_me 2.3.1, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -9068,7 +19550,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-EasyTAG config.status 2.2.4
+EasyTAG config.status 2.3.1
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
@@ -9189,6 +19671,381 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 #
 AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
 
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`'
+enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
+SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
+ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
+PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`'
+host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`'
+host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`'
+host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`'
+build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`'
+build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`'
+build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`'
+SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`'
+Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`'
+GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`'
+EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`'
+FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`'
+LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`'
+NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`'
+LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`'
+exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
+file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
+want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
+DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
+sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
+AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
+archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
+STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`'
+lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`'
+CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`'
+compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`'
+GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
+nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
+lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
+objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
+MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`'
+libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
+postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`'
+version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`'
+install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`'
+sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`'
+striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`'
+predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`'
+postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`'
+predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`'
+postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`'
+LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`'
+reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`'
+reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`'
+GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`'
+inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`'
+always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
+include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
+prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`'
+predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`'
+postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`'
+predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`'
+postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in SHELL \
+ECHO \
+PATH_SEPARATOR \
+SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+OBJDUMP \
+deplibs_check_method \
+file_magic_cmd \
+file_magic_glob \
+want_nocaseglob \
+DLLTOOL \
+sharedlib_from_linklib_cmd \
+AR \
+AR_FLAGS \
+archiver_list_spec \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_c_name_address \
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+nm_file_list_spec \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_pic \
+lt_prog_compiler_wl \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+MANIFEST_TOOL \
+DSYMUTIL \
+NMEDIT \
+LIPO \
+OTOOL \
+OTOOL64 \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_separator \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+install_override_mode \
+finish_eval \
+old_striplib \
+striplib \
+compiler_lib_search_dirs \
+predep_objects \
+postdep_objects \
+predeps \
+postdeps \
+compiler_lib_search_path \
+LD_CXX \
+reload_flag_CXX \
+compiler_CXX \
+lt_prog_compiler_no_builtin_flag_CXX \
+lt_prog_compiler_pic_CXX \
+lt_prog_compiler_wl_CXX \
+lt_prog_compiler_static_CXX \
+lt_cv_prog_compiler_c_o_CXX \
+export_dynamic_flag_spec_CXX \
+whole_archive_flag_spec_CXX \
+compiler_needs_object_CXX \
+with_gnu_ld_CXX \
+allow_undefined_flag_CXX \
+no_undefined_flag_CXX \
+hardcode_libdir_flag_spec_CXX \
+hardcode_libdir_separator_CXX \
+exclude_expsyms_CXX \
+include_expsyms_CXX \
+file_list_spec_CXX \
+compiler_lib_search_dirs_CXX \
+predep_objects_CXX \
+postdep_objects_CXX \
+predeps_CXX \
+postdeps_CXX \
+compiler_lib_search_path_CXX; do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postlink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+sys_lib_dlsearch_path_spec \
+reload_cmds_CXX \
+old_archive_cmds_CXX \
+old_archive_from_new_cmds_CXX \
+old_archive_from_expsyms_cmds_CXX \
+archive_cmds_CXX \
+archive_expsym_cmds_CXX \
+module_cmds_CXX \
+module_expsym_cmds_CXX \
+export_symbols_cmds_CXX \
+prelink_cmds_CXX \
+postlink_cmds_CXX; do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+ac_aux_dir='$ac_aux_dir'
+xsi_shell='$xsi_shell'
+lt_shell_append='$lt_shell_append'
+
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    TIMESTAMP='$TIMESTAMP'
+    RM='$RM'
+    ofile='$ofile'
+
+
+
+
+
+
 _ACEOF
 
 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
@@ -9199,6 +20056,7 @@ do
   case $ac_config_target in
     "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
     "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+    "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
     "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
     "doc/version.xml") CONFIG_FILES="$CONFIG_FILES doc/version.xml" ;;
     "help/Makefile") CONFIG_FILES="$CONFIG_FILES help/Makefile" ;;
@@ -9893,6 +20751,803 @@ $as_echo X"$file" |
   done
 }
  ;;
+    "libtool":C)
+
+    # See if we are running on zsh, and set the options which allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}" ; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile="${ofile}T"
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+#                 Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+#   This file is part of GNU Libtool.
+#
+# GNU Libtool 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 (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags="CXX "
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that protects backslashes.
+ECHO=$lt_ECHO
+
+# The PATH separator for the build system.
+PATH_SEPARATOR=$lt_PATH_SEPARATOR
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# convert \$build file names to \$host format.
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+
+# convert \$build files to toolchain format.
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+
+# An object symbol dumper.
+OBJDUMP=$lt_OBJDUMP
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method = "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# How to find potential files when deplibs_check_method = "file_magic".
+file_magic_glob=$lt_file_magic_glob
+
+# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
+want_nocaseglob=$lt_want_nocaseglob
+
+# DLL creation program.
+DLLTOOL=$lt_DLLTOOL
+
+# Command to associate shared and link libraries.
+sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
+
+# The archiver.
+AR=$lt_AR
+
+# Flags to create an archive.
+AR_FLAGS=$lt_AR_FLAGS
+
+# How to feed a file listing to the archiver.
+archiver_list_spec=$lt_archiver_list_spec
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Whether to use a lock for old archive extraction.
+lock_old_archive_extraction=$lock_old_archive_extraction
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# Transform the output of nm in a C name address pair when lib prefix is needed.
+global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
+# Specify filename containing input files for \$NM.
+nm_file_list_spec=$lt_nm_file_list_spec
+
+# The root where to search for dependent libraries,and in which our libraries should be installed.
+lt_sysroot=$lt_sysroot
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Manifest tool.
+MANIFEST_TOOL=$lt_MANIFEST_TOOL
+
+# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+DSYMUTIL=$lt_DSYMUTIL
+
+# Tool to change global to local symbols on Mac OS X.
+NMEDIT=$lt_NMEDIT
+
+# Tool to manipulate fat objects and archives on Mac OS X.
+LIPO=$lt_LIPO
+
+# ldd/readelf like tool for Mach-O binaries on Mac OS X.
+OTOOL=$lt_OTOOL
+
+# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
+OTOOL64=$lt_OTOOL64
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Permission mode override for installation of shared libraries.
+install_override_mode=$lt_install_override_mode
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects
+postdep_objects=$lt_postdep_objects
+predeps=$lt_predeps
+postdeps=$lt_postdeps
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '$q' "$ltmain" >> "$cfgfile" \
+     || (rm -f "$cfgfile"; exit 1)
+
+  if test x"$xsi_shell" = xyes; then
+  sed -e '/^func_dirname ()$/,/^} # func_dirname /c\
+func_dirname ()\
+{\
+\    case ${1} in\
+\      */*) func_dirname_result="${1%/*}${2}" ;;\
+\      *  ) func_dirname_result="${3}" ;;\
+\    esac\
+} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_basename ()$/,/^} # func_basename /c\
+func_basename ()\
+{\
+\    func_basename_result="${1##*/}"\
+} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\
+func_dirname_and_basename ()\
+{\
+\    case ${1} in\
+\      */*) func_dirname_result="${1%/*}${2}" ;;\
+\      *  ) func_dirname_result="${3}" ;;\
+\    esac\
+\    func_basename_result="${1##*/}"\
+} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_stripname ()$/,/^} # func_stripname /c\
+func_stripname ()\
+{\
+\    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\
+\    # positional parameters, so assign one to ordinary parameter first.\
+\    func_stripname_result=${3}\
+\    func_stripname_result=${func_stripname_result#"${1}"}\
+\    func_stripname_result=${func_stripname_result%"${2}"}\
+} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\
+func_split_long_opt ()\
+{\
+\    func_split_long_opt_name=${1%%=*}\
+\    func_split_long_opt_arg=${1#*=}\
+} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\
+func_split_short_opt ()\
+{\
+\    func_split_short_opt_arg=${1#??}\
+\    func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\
+} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\
+func_lo2o ()\
+{\
+\    case ${1} in\
+\      *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\
+\      *)    func_lo2o_result=${1} ;;\
+\    esac\
+} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_xform ()$/,/^} # func_xform /c\
+func_xform ()\
+{\
+    func_xform_result=${1%.*}.lo\
+} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_arith ()$/,/^} # func_arith /c\
+func_arith ()\
+{\
+    func_arith_result=$(( $* ))\
+} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_len ()$/,/^} # func_len /c\
+func_len ()\
+{\
+    func_len_result=${#1}\
+} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+fi
+
+if test x"$lt_shell_append" = xyes; then
+  sed -e '/^func_append ()$/,/^} # func_append /c\
+func_append ()\
+{\
+    eval "${1}+=\\${2}"\
+} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\
+func_append_quoted ()\
+{\
+\    func_quote_for_eval "${2}"\
+\    eval "${1}+=\\\\ \\$func_quote_for_eval_result"\
+} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  # Save a `func_append' function call where possible by direct use of '+='
+  sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+else
+  # Save a `func_append' function call even when '+=' is not available
+  sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+fi
+
+if test x"$_lt_function_replace_fail" = x":"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5
+$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;}
+fi
+
+
+   mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+
+
+    cat <<_LT_EOF >> "$ofile"
+
+# ### BEGIN LIBTOOL TAG CONFIG: CXX
+
+# The linker used to build libraries.
+LD=$lt_LD_CXX
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag_CXX
+reload_cmds=$lt_reload_cmds_CXX
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds_CXX
+
+# A language specific compiler.
+CC=$lt_compiler_CXX
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC_CXX
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_CXX
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_CXX
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_CXX
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_CXX
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object_CXX
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds_CXX
+archive_expsym_cmds=$lt_archive_expsym_cmds_CXX
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds_CXX
+module_expsym_cmds=$lt_module_expsym_cmds_CXX
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld_CXX
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_CXX
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_CXX
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct_CXX
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute_CXX
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L_CXX
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic_CXX
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath_CXX
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_CXX
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols_CXX
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_CXX
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_CXX
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_CXX
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds_CXX
+
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds_CXX
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec_CXX
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_CXX
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects_CXX
+postdep_objects=$lt_postdep_objects_CXX
+predeps=$lt_predeps_CXX
+postdeps=$lt_postdeps_CXX
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_CXX
+
+# ### END LIBTOOL TAG CONFIG: CXX
+_LT_EOF
+
+ ;;
     "po/stamp-it":C)
     if  ! grep "^# INTLTOOL_MAKEFILE$" "po/Makefile.in" > /dev/null ; then
        as_fn_error $? "po/Makefile.in.in was not created by intltoolize." "$LINENO" 5
@@ -9964,7 +21619,6 @@ echo Compiler ................: $CC $CFLAGS
 echo Compiler warnings .......: $WARN_CFLAGS
 echo C++ Compiler warnings ...: $WARN_CXXFLAGS
 echo Linker ..................: $CC $LDFLAGS $LIBS
-echo GTK version .............: `$PKG_CONFIG --modversion $GTK_DEPS`
 echo MP3 file support ........: $have_mp3
 echo ID3v2.3 tags support ....: $have_id3lib $ID3LIB_VERSION
 echo Ogg Vorbis file support .: $have_ogg
@@ -9974,6 +21628,7 @@ echo FLAC file support .......: $have_flac
 echo MP4 file support ........: $have_taglib
 echo WavPack support .........: $have_wavpack
 echo NLS/gettext .............: $USE_NLS
+echo Nautilus actions ........: $have_libnautilus_extension
 echo Tests during make check .: $testing_utilities
 echo Install prefix ..........: $prefix
 echo
diff --git a/configure.ac b/configure.ac
index a242986..acb37fc 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4,7 +4,7 @@ AC_PREREQ([2.64])
 
 dnl To set also in config.h.mingw
 dnl defines ($PACKAGE_NAME, $PACKAGE_VERSION, etc.)
-AC_INIT([EasyTAG], [2.2.4], [https://bugzilla.gnome.org/enter_bug.cgi?product=easytag], [easytag], [https://wiki.gnome.org/Apps/EasyTAG])
+AC_INIT([EasyTAG], [2.3.1], [https://bugzilla.gnome.org/enter_bug.cgi?product=easytag], [easytag], [https://wiki.gnome.org/Apps/EasyTAG])
 
 AC_CONFIG_AUX_DIR([build-aux])
 AC_CONFIG_HEADERS([config.h])
@@ -19,6 +19,12 @@ AM_MAINTAINER_MODE([enable])
 AM_SILENT_RULES([yes])
 
 dnl -------------------------------
+dnl Init Libtool
+dnl -------------------------------
+LT_PREREQ([2.2])
+LT_INIT([disable-static])
+
+dnl -------------------------------
 dnl Translation files.
 dnl -------------------------------
 IT_PROG_INTLTOOL([0.50.0])
@@ -28,7 +34,8 @@ AS_IF([test "x$USE_NLS" != "xno"],
       [AC_DEFINE([ENABLE_NLS], [1], [Native Language support is enabled])])
 
 dnl AppData
-APPDATA_XML
+m4_ifdef([APPDATA_XML], [APPDATA_XML],
+         [AC_MSG_ERROR([appdata-tools is required for appdata-xml.m4])])
 
 dnl -------------------------------
 dnl Checks for programs.
@@ -40,6 +47,19 @@ AC_PROG_CXXCPP
 AC_PROG_SED
 PKG_PROG_PKG_CONFIG([0.24])
 
+AC_SUBST([GLIB_COMPILE_RESOURCES], [`$PKG_CONFIG --variable glib_compile_resources gio-2.0`])
+
+AC_PATH_PROG([GDK_PIXBUF_PIXDATA], [gdk-pixbuf-pixdata])
+AS_IF([test "x$ac_cv_path_GDK_PIXBUF_PIXDATA" = "x"],
+      [AC_MSG_ERROR([gdk-pixbuf-pixdata is required for image resources])])
+
+AC_MSG_CHECKING([for glib-mkenums script])
+GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0`
+AS_IF([test "x$GLIB_MKENUMS" = "x"],
+    [AC_MSG_ERROR([glib-mkenums not listed in glib-2.0 pkg-config file])],
+    [AC_SUBST([GLIB_MKENUMS])
+     AC_MSG_RESULT([$GLIB_MKENUMS])])
+
 dnl Man page, generated with xsltproc from DocBook XML.
 AC_ARG_ENABLE([man],
     [AS_HELP_STRING([--disable-man], [Disable building the man page])])
@@ -136,35 +156,15 @@ AC_ARG_ENABLE([mp4],
 AC_ARG_ENABLE([wavpack],
               [AS_HELP_STRING([--disable-wavpack], [Disable support for Wavpack files (default=auto)])])
 
+AC_ARG_ENABLE([nautilus_actions],
+              [AS_HELP_STRING([--disable-nautilus-actions], [do not build the nautilus context menu actions (default=auto)])])
+
+
 
 dnl -------------------------------
 dnl Checks for libraries.
 dnl -------------------------------
 
-dnl GTK+ libraries
-GTK2_DEPS="gtk+-2.0 >= 2.24.7"
-GTK3_DEPS="gtk+-3.0 >= 3.2.1"
-PKG_CHECK_EXISTS([$GTK2_DEPS], [have_gtk2=yes], [have_gtk2=no])
-PKG_CHECK_EXISTS([$GTK3_DEPS], [have_gtk3=yes], [have_gtk3=no])
-
-AC_ARG_WITH([gtk2],
-            [AS_HELP_STRING([--with-gtk2], [Enable deprecated GTK+ 2 support (and disable GTK+ 3 support)])])
-
-AC_MSG_CHECKING([whether to use GTK+ 2])
-AS_IF([test "x$have_gtk2" = "xyes" -a "x$have_gtk3" = "xno" -a "x$with_gtk2" != "xyes"],
-      [AC_MSG_WARN([forcing GTK+ 2 support, as GTK+ 3 was not found])
-       with_gtk2=yes])
-AS_IF([test "x$with_gtk2" = "xyes"],
-      [AC_MSG_RESULT([yes])
-       AC_MSG_WARN([GTK+ 2 support is currently deprecated!])
-       GTK_DEPS="$GTK2_DEPS"
-       GTK_DEPRECATION_FLAGS="-DGSEAL_ENABLE -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED"],
-      [AC_MSG_RESULT([no])
-       GTK_DEPS="$GTK3_DEPS"
-       GTK_DEPRECATION_FLAGS="-DGDK_VERSION_MIN_REQUIRED=GDK_VERSION_3_4 -DGDK_VERSION_MAX_ALLOWED=GDK_VERSION_3_4"])
-PKG_CHECK_MODULES([GTK], [$GTK_DEPS])
-
-
 dnl Patch from Ben Taylor to fix a Solaris bug (for CDDB)
 AC_CHECK_LIB([socket], [recv])
 
@@ -308,8 +308,29 @@ AS_IF([test "x$have_wavpack" != "xno"],
        AS_IF([test "x$enable_wavpack" = "xyes"],
              [AC_MSG_ERROR([Wavpack support requested but required dependencies ($WAVPACK_DEPS) not found])])])
 
+dnl ################################################
+dnl # Nautilus
+dnl ################################################
+NAUTILUS_DEPS="libnautilus-extension gio-unix-2.0"
+AS_IF([test "x$enable_nautilus_actions" != "xno"],
+      [PKG_CHECK_EXISTS([$NAUTILUS_DEPS], [have_libnautilus_extension=yes], [have_libnautilus_extension=no])],
+      [have_libnautilus_extension=no])
+
+AS_IF([test "x$have_libnautilus_extension" = "xno"],
+      [NAUTILUS_DEPS=""
+       AS_IF([test "x$enable_nautilus_actions" = "xyes"],
+             [AC_MSG_ERROR([Nautilus Actions build requested but required dependencies ($NAUTILUS_DEPS) not found])])],
+      [PKG_CHECK_MODULES([NAUTILUS], [$NAUTILUS_DEPS])
+       NAUTILUS_EXTENSION_DIR=`$PKG_CONFIG --variable=extensiondir libnautilus-extension`
+       AC_SUBST([NAUTILUS_EXTENSION_DIR], [$NAUTILUS_EXTENSION_DIR])])
+
+AM_CONDITIONAL([ENABLE_NAUTILUS_ACTIONS], [test x"$have_libnautilus_extension" != x"no"])
+
 dnl Check the pkg-config dependencies
 GIO_DEPS="gio-2.0 >= 2.32.0" dnl For g_file_new_tmp()
+GLIB_DEPRECATION_FLAGS="-DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_32 -DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_32"
+GTK_DEPS="gtk+-3.0 >= 3.4.0"
+GTK_DEPRECATION_FLAGS="-DGDK_VERSION_MIN_REQUIRED=GDK_VERSION_3_4 -DGDK_VERSION_MAX_ALLOWED=GDK_VERSION_3_4"
 PKG_CHECK_MODULES([EASYTAG], [$GIO_DEPS $GTK_DEPS $OPUS_DEPS $OGG_DEPS $SPEEX_DEPS $FLAC_DEPS $ID3TAG_DEPS $TAGLIB_DEPS $WAVPACK_DEPS])
 
 dnl Check for winsock
@@ -362,29 +383,15 @@ CXXFLAGS="$realsave_CXXFLAGS"
 
 AC_LANG_POP([C++])
 AC_SUBST([WARN_CXXFLAGS], ["$tested_cxx_warning_flags"])
-AC_SUBST([DEPRECATED_CPPFLAGS], ["-DG_DISABLE_SINGLE_INCLUDES -DGTK_DISABLE_SINGLE_INCLUDES -DG_DISABLE_DEPRECATED $GTK_DEPRECATION_FLAGS"])
-
-dnl To enable 'gprof' profiling
-dnl CFLAGS="$CFLAGS -pg"
-
-
-dnl -------------------------------
-dnl Checks for header files.
-dnl -------------------------------
-AC_HEADER_DIRENT
-
-
-dnl -------------------------------
-dnl Checks for typedefs, structures, and compiler characteristics.
-dnl -------------------------------
-AC_TYPE_SIZE_T
-
+AC_SUBST([DEPRECATED_CPPFLAGS], ["-DG_DISABLE_SINGLE_INCLUDES -DGTK_DISABLE_SINGLE_INCLUDES -DG_DISABLE_DEPRECATED $GLIB_DEPRECATION_FLAGS $GTK_DEPRECATION_FLAGS"])
 
 dnl -------------------------------
 dnl Checks for library functions.
 dnl -------------------------------
 AC_CHECK_FUNCS([ftruncate mkstemp truncate])
 
+GLIB_GSETTINGS
+
 AC_CONFIG_FILES([ Makefile
                   doc/version.xml
                   help/Makefile
@@ -405,7 +412,6 @@ echo Compiler ................: $CC $CFLAGS
 echo Compiler warnings .......: $WARN_CFLAGS
 echo C++ Compiler warnings ...: $WARN_CXXFLAGS
 echo Linker ..................: $CC $LDFLAGS $LIBS
-echo GTK version .............: `$PKG_CONFIG --modversion $GTK_DEPS`
 echo MP3 file support ........: $have_mp3
 echo ID3v2.3 tags support ....: $have_id3lib $ID3LIB_VERSION
 echo Ogg Vorbis file support .: $have_ogg
@@ -415,6 +421,7 @@ echo FLAC file support .......: $have_flac
 echo MP4 file support ........: $have_taglib
 echo WavPack support .........: $have_wavpack
 echo NLS/gettext .............: $USE_NLS
+echo Nautilus actions ........: $have_libnautilus_extension
 echo Tests during make check .: $testing_utilities
 echo Install prefix ..........: $prefix
 echo 
diff --git a/data/browser.ui b/data/browser.ui
new file mode 100644
index 0000000..6d422b8
--- /dev/null
+++ b/data/browser.ui
@@ -0,0 +1,809 @@
+<interface domain="easytag">
+    <requires lib="gtk+" version="3.4"/>
+    <object class="GtkListStore" id="directory_model">
+        <columns>
+            <column type="gchararray"/>
+        </columns>
+    </object>
+    <object class="GtkListStore" id="files_model">
+        <columns>
+            <column type="gchararray"/>
+            <column type="gchararray"/>
+            <column type="gchararray"/>
+            <column type="gchararray"/>
+            <column type="gchararray"/>
+            <column type="gchararray"/>
+            <column type="gchararray"/>
+            <column type="gchararray"/>
+            <column type="gchararray"/>
+            <column type="gchararray"/>
+            <column type="gchararray"/>
+            <column type="gchararray"/>
+            <column type="gchararray"/>
+            <column type="gchararray"/>
+            <column type="gchararray"/>
+            <column type="gpointer"/>
+            <column type="gint"/>
+            <column type="gboolean"/>
+            <column type="gint"/>
+            <column type="GdkRGBA"/>
+            <column type="GdkRGBA"/>
+        </columns>
+    </object>
+    <object class="GtkTreeStore" id="tree_model">
+        <columns>
+            <column type="gchararray"/>
+            <column type="gchararray"/>
+            <column type="gboolean"/>
+            <column type="gboolean"/>
+            <column type="GIcon"/>
+        </columns>
+    </object>
+    <object class="GtkListStore" id="artist_model">
+        <columns>
+            <column type="GdkPixbuf"/>
+            <column type="gchararray"/>
+            <column type="guint"/>
+            <column type="guint"/>
+            <column type="gpointer"/>
+            <column type="PangoStyle"/>
+            <column type="gint"/>
+            <column type="GdkRGBA"/>
+        </columns>
+    </object>
+    <object class="GtkListStore" id="album_model">
+        <columns>
+            <column type="GIcon"/>
+            <column type="gchararray"/>
+            <column type="guint"/>
+            <column type="gpointer"/>
+            <column type="PangoStyle"/>
+            <column type="gint"/>
+            <column type="GdkRGBA"/>
+            <column type="gboolean"/>
+        </columns>
+    </object>
+    <object class="GtkDialog" id="open_directory_dialog">
+        <property name="border-width">12</property>
+        <property name="destroy-with-parent">True</property>
+        <property name="title" translatable="yes">Browse Directory With</property>
+        <child internal-child="vbox">
+            <object class="GtkBox" id="open_directory_vbox">
+                <child>
+                    <object class="GtkGrid" id="open_directory_grid">
+                        <property name="column-spacing">12</property>
+                        <property name="row-spacing">6</property>
+                        <property name="visible">True</property>
+                        <child>
+                            <object class="GtkLabel" id="open_directory_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">Run Program</property>
+                                <property name="visible">True</property>
+                                <attributes>
+                                    <attribute name="weight" value="bold"/>
+                                </attributes>
+                            </object>
+                            <packing>
+                                <property name="left-attach">0</property>
+                                <property name="top-attach">0</property>
+                                <property name="width">2</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkComboBox" id="open_directory_combo">
+                                <property name="has-entry">True</property>
+                                <property name="entry-text-column">0</property>
+                                <property name="margin-left">12</property>
+                                <property name="tooltip-text" translatable="yes">Enter the program to run; it will receive the current directory as a parameter</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">0</property>
+                                <property name="top-attach">1</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkButton" id="open_directory_button">
+                                <property name="label" translatable="yes">_Open</property>
+                                <property name="use-underline">True</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">1</property>
+                                <property name="top-attach">1</property>
+                            </packing>
+                        </child>
+                    </object>
+                </child>
+                <child internal-child="action_area">
+                    <object class="GtkButtonBox" id="open_directory_button_box">
+                        <child>
+                            <object class="GtkButton" id="open_directory_cancel_button">
+                                <property name="label" translatable="yes">_Cancel</property>
+                                <property name="use-underline">True</property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkButton" id="open_directory_execute_button">
+                                <property name="can-default">True</property>
+                                <property name="label" translatable="yes">_Execute</property>
+                                <property name="use-underline">True</property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                    </object>
+                </child>
+            </object>
+        </child>
+        <action-widgets>
+            <action-widget response="-5">open_directory_execute_button</action-widget>
+            <action-widget response="-6">open_directory_cancel_button</action-widget>
+        </action-widgets>
+    </object>
+    <object class="GtkDialog" id="open_files_dialog">
+        <property name="border-width">12</property>
+        <property name="destroy-with-parent">True</property>
+        <property name="title" translatable="yes">Open Files With</property>
+        <child internal-child="vbox">
+            <object class="GtkBox" id="open_files_vbox">
+                <child>
+                    <object class="GtkGrid" id="open_files_grid">
+                        <property name="column-spacing">12</property>
+                        <property name="row-spacing">6</property>
+                        <property name="visible">True</property>
+                        <child>
+                            <object class="GtkLabel" id="open_files_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">Run Program</property>
+                                <property name="visible">True</property>
+                                <attributes>
+                                    <attribute name="weight" value="bold"/>
+                                </attributes>
+                            </object>
+                            <packing>
+                                <property name="left-attach">0</property>
+                                <property name="top-attach">0</property>
+                                <property name="width">2</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkComboBox" id="open_files_combo">
+                                <property name="has-entry">True</property>
+                                <property name="entry-text-column">0</property>
+                                <property name="margin-left">12</property>
+                                <property name="tooltip-text" translatable="yes">Enter the program to run; it will receive the current files as a parameter</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">0</property>
+                                <property name="top-attach">1</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkButton" id="open_files_button">
+                                <property name="label" translatable="yes">_Open</property>
+                                <property name="use-underline">True</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">1</property>
+                                <property name="top-attach">1</property>
+                            </packing>
+                        </child>
+                    </object>
+                </child>
+                <child internal-child="action_area">
+                    <object class="GtkButtonBox" id="open_files_button_box">
+                        <child>
+                            <object class="GtkButton" id="open_files_cancel_button">
+                                <property name="label" translatable="yes">_Cancel</property>
+                                <property name="use-underline">True</property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkButton" id="open_files_execute_button">
+                                <property name="can-default">True</property>
+                                <property name="label" translatable="yes">_Execute</property>
+                                <property name="use-underline">True</property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                    </object>
+                </child>
+            </object>
+        </child>
+        <action-widgets>
+            <action-widget response="-5">open_files_execute_button</action-widget>
+            <action-widget response="-6">open_files_cancel_button</action-widget>
+        </action-widgets>
+    </object>
+    <object class="GtkDialog" id="rename_directory_dialog">
+        <property name="border-width">12</property>
+        <property name="destroy-with-parent">True</property>
+        <property name="title" translatable="yes">Rename Directory</property>
+        <child internal-child="vbox">
+            <object class="GtkBox" id="vbox">
+                <child>
+                    <object class="GtkGrid" id="rename_grid">
+                        <property name="column-spacing">12</property>
+                        <property name="row-spacing">6</property>
+                        <property name="visible">True</property>
+                        <child>
+                            <object class="GtkLabel" id="rename_label">
+                                <property name="halign">start</property>
+                                <property name="visible">True</property>
+                                <attributes>
+                                    <attribute name="weight" value="bold"/>
+                                </attributes>
+                            </object>
+                            <packing>
+                                <property name="left-attach">0</property>
+                                <property name="top-attach">0</property>
+                                <property name="width">2</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="rename_entry_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">Literal name:</property>
+                                <property name="margin-left">12</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">0</property>
+                                <property name="top-attach">1</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkEntry" id="rename_entry">
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">1</property>
+                                <property name="top-attach">1</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkCheckButton" id="rename_mask_check">
+                                <property name="label" translatable="yes">Use mask:</property>
+                                <property name="margin-left">12</property>
+                                <property name="tooltip-text" translatable="yes">Whether to use a mask when renaming directories</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">0</property>
+                                <property name="top-attach">2</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkEntry" id="rename_mask_entry">
+                                <property name="tooltip-text" translatable="yes">Select or type in a mask using codes (see Legend in Scanner Window) to rename the directory from tag fields</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">1</property>
+                                <property name="top-attach">2</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="rename_preview_label">
+                                <property name="label" translatable="yes">Rename directory preview</property>
+                                <property name="margin-left">12</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">0</property>
+                                <property name="top-attach">3</property>
+                                <property name="width">2</property>
+                            </packing>
+                        </child>
+                    </object>
+                </child>
+                <child internal-child="action_area">
+                    <object class="GtkButtonBox" id="button_box">
+                        <child>
+                            <object class="GtkButton" id="cancel_button">
+                                <property name="label" translatable="yes">_Cancel</property>
+                                <property name="use-underline">True</property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkButton" id="rename_button">
+                                <property name="can-default">True</property>
+                                <property name="label" translatable="yes">_Rename</property>
+                                <property name="use-underline">True</property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                    </object>
+                </child>
+            </object>
+        </child>
+        <action-widgets>
+            <action-widget response="-10">rename_button</action-widget>
+            <action-widget response="-6">cancel_button</action-widget>
+        </action-widgets>
+    </object>
+    <object class="GtkGrid" id="browser_grid">
+        <property name="column-spacing">6</property>
+        <property name="row-spacing">6</property>
+        <property name="visible">True</property>
+        <child>
+            <object class="GtkComboBox" id="browser_combo">
+                <property name="has-entry">True</property>
+                <property name="model">directory_model</property>
+                <property name="entry-text-column">0</property>
+                <property name="hexpand">True</property>
+                <property name="tooltip-text" translatable="yes">Choose a directory to show in the browser</property>
+                <property name="visible">True</property>
+            </object>
+            <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">0</property>
+            </packing>
+        </child>
+        <child>
+            <object class="GtkButton" id="open_button">
+                <property name="label" translatable="yes">_Open</property>
+                <property name="tooltip-text" translatable="yes">Select a directory to browse</property>
+                <property name="use-underline">True</property>
+                <property name="visible">True</property>
+            </object>
+            <packing>
+                <property name="left-attach">1</property>
+                <property name="top-attach">0</property>
+            </packing>
+        </child>
+        <child>
+            <object class="GtkLabel" id="files_label">
+                <property name="label" translatable="yes">No files</property>
+                <property name="visible">True</property>
+            </object>
+            <packing>
+                <property name="left-attach">2</property>
+                <property name="top-attach">0</property>
+            </packing>
+        </child>
+        <child>
+            <object class="GtkPaned" id="browser_paned">
+                <property name="orientation">horizontal</property>
+                <property name="visible">True</property>
+                <child>
+                    <object class="GtkNotebook" id="directory_album_artist_notebook">
+                        <property name="show-border">False</property>
+                        <property name="show-tabs">False</property>
+                        <property name="visible">True</property>
+                        <child>
+                            <object class="GtkScrolledWindow" id="directory_scrolled">
+                                <property name="expand">True</property>
+                                <property name="min-content-height">225</property>
+                                <property name="min-content-width">225</property>
+                                <property name="visible">True</property>
+                                <child>
+                                    <object class="GtkTreeView" id="directory_view">
+                                        <property name="model">tree_model</property>
+                                        <property name="headers-visible">False</property>
+                                        <property name="visible">True</property>
+                                        <child>
+                                            <object class="GtkTreeViewColumn" id="directory_column">
+                                                <property name="sizing">autosize</property>
+                                                <child>
+                                                    <object class="GtkCellRendererPixbuf" id="directory_icon_renderer"/>
+                                                    <attributes>
+                                                        <attribute name="gicon">4</attribute>
+                                                    </attributes>
+                                                </child>
+                                                <child>
+                                                    <object class="GtkCellRendererText" id="directory_text_renderer"/>
+                                                    <attributes>
+                                                        <attribute name="text">0</attribute>
+                                                    </attributes>
+                                                </child>
+                                            </object>
+                                        </child>
+                                    </object>
+                                </child>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkPaned" id="artist_album_paned">
+                                <property name="orientation">vertical</property>
+                                <property name="visible">True</property>
+                                <child>
+                                    <object class="GtkScrolledWindow" id="artist_scrolled">
+                                        <property name="expand">True</property>
+                                        <property name="min-content-height">225</property>
+                                        <property name="min-content-width">225</property>
+                                        <property name="visible">True</property>
+                                        <child>
+                                            <object class="GtkTreeView" id="artist_view">
+                                                <property name="model">artist_model</property>
+                                                <property name="visible">True</property>
+                                                <child>
+                                                    <object class="GtkTreeViewColumn" id="artist_view_column">
+                                                        <property name="sizing">autosize</property>
+                                                        <property name="title" translatable="yes">Artist</property>
+                                                        <child>
+                                                            <object class="GtkCellRendererPixbuf" id="artist_icon_renderer"/>
+                                                            <attributes>
+                                                                <attribute name="pixbuf">0</attribute>
+                                                            </attributes>
+                                                        </child>
+                                                        <child>
+                                                            <object class="GtkCellRendererText" id="artist_text_renderer"/>
+                                                            <attributes>
+                                                                <attribute name="foreground-rgba">7</attribute>
+                                                                <attribute name="style">5</attribute>
+                                                                <attribute name="text">1</attribute>
+                                                                <attribute name="weight">6</attribute>
+                                                            </attributes>
+                                                        </child>
+                                                    </object>
+                                                </child>
+                                                <child>
+                                                    <object class="GtkTreeViewColumn" id="artist_n_albums_column">
+                                                        <property name="sizing">autosize</property>
+                                                        <property name="title" translatable="yes"># Albums</property>
+                                                        <child>
+                                                            <object class="GtkCellRendererText" id="artist_n_albums_text_renderer"/>
+                                                            <attributes>
+                                                                <attribute name="foreground-rgba">7</attribute>
+                                                                <attribute name="style">5</attribute>
+                                                                <attribute name="text">2</attribute>
+                                                                <attribute name="weight">6</attribute>
+                                                            </attributes>
+                                                        </child>
+                                                    </object>
+                                                </child>
+                                                <child>
+                                                    <object class="GtkTreeViewColumn" id="artist_n_files_column">
+                                                        <property name="sizing">autosize</property>
+                                                        <property name="title" translatable="yes"># Files</property>
+                                                        <child>
+                                                            <object class="GtkCellRendererText" id="artist_n_files_text_renderer"/>
+                                                            <attributes>
+                                                                <attribute name="foreground-rgba">7</attribute>
+                                                                <attribute name="style">5</attribute>
+                                                                <attribute name="text">3</attribute>
+                                                                <attribute name="weight">6</attribute>
+                                                            </attributes>
+                                                        </child>
+                                                    </object>
+                                                </child>
+                                            </object>
+                                        </child>
+                                    </object>
+                                </child>
+                                <child>
+                                    <object class="GtkScrolledWindow" id="album_scrolled">
+                                        <property name="expand">True</property>
+                                        <property name="min-content-height">225</property>
+                                        <property name="min-content-width">225</property>
+                                        <property name="visible">True</property>
+                                        <child>
+                                            <object class="GtkTreeView" id="album_view">
+                                                <property name="model">album_model</property>
+                                                <property name="visible">True</property>
+                                                <child>
+                                                    <object class="GtkTreeViewColumn" id="album_view_column">
+                                                        <property name="sizing">autosize</property>
+                                                        <property name="title" translatable="yes">Album</property>
+                                                        <child>
+                                                            <object class="GtkCellRendererPixbuf" id="album_icon_renderer"/>
+                                                            <attributes>
+                                                                <attribute name="gicon">0</attribute>
+                                                            </attributes>
+                                                        </child>
+                                                        <child>
+                                                            <object class="GtkCellRendererText" id="album_text_renderer"/>
+                                                            <attributes>
+                                                                <attribute name="foreground-rgba">6</attribute>
+                                                                <attribute name="style">4</attribute>
+                                                                <attribute name="text">1</attribute>
+                                                                <attribute name="weight">5</attribute>
+                                                            </attributes>
+                                                        </child>
+                                                    </object>
+                                                </child>
+                                                <child>
+                                                    <object class="GtkTreeViewColumn" id="album_n_files_column">
+                                                        <property name="sizing">autosize</property>
+                                                        <property name="title" translatable="yes"># Files</property>
+                                                        <child>
+                                                            <object class="GtkCellRendererText" id="album_n_files_text_renderer"/>
+                                                            <attributes>
+                                                                <attribute name="foreground-rgba">6</attribute>
+                                                                <attribute name="style">4</attribute>
+                                                                <attribute name="text">2</attribute>
+                                                                <attribute name="weight">5</attribute>
+                                                            </attributes>
+                                                        </child>
+                                                    </object>
+                                                </child>
+                                            </object>
+                                        </child>
+                                    </object>
+                                    <packing>
+                                        <property name="resize">True</property>
+                                        <property name="shrink">False</property>
+                                    </packing>
+                                </child>
+                            </object>
+                        </child>
+                    </object>
+                    <packing>
+                        <property name="resize">True</property>
+                        <property name="shrink">False</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkScrolledWindow" id="files_scrolled">
+                        <property name="expand">True</property>
+                        <property name="min-content-height">225</property>
+                        <property name="min-content-width">225</property>
+                        <property name="visible">True</property>
+                        <child>
+                            <object class="GtkTreeView" id="files_view">
+                                <property name="model">files_model</property>
+                                <property name="visible">True</property>
+                                <child>
+                                    <object class="GtkTreeViewColumn" id="filename_column">
+                                        <property name="clickable">True</property>
+                                        <property name="resizable">True</property>
+                                        <property name="title" translatable="yes">Filename</property>
+                                        <child>
+                                            <object class="GtkCellRendererText" id="filename_renderer"/>
+                                            <attributes>
+                                                <attribute name="background-rgba">19</attribute>
+                                                <attribute name="foreground-rgba">20</attribute>
+                                                <attribute name="text">0</attribute>
+                                                <attribute name="weight">18</attribute>
+                                            </attributes>
+                                        </child>
+                                    </object>
+                                </child>
+                                <child>
+                                    <object class="GtkTreeViewColumn" id="title_column">
+                                        <property name="clickable">True</property>
+                                        <property name="resizable">True</property>
+                                        <property name="title" translatable="yes">Title</property>
+                                        <child>
+                                            <object class="GtkCellRendererText" id="title_renderer"/>
+                                            <attributes>
+                                                <attribute name="background-rgba">19</attribute>
+                                                <attribute name="foreground-rgba">20</attribute>
+                                                <attribute name="text">1</attribute>
+                                                <attribute name="weight">18</attribute>
+                                            </attributes>
+                                        </child>
+                                    </object>
+                                </child>
+                                <child>
+                                    <object class="GtkTreeViewColumn" id="artist_column">
+                                        <property name="clickable">True</property>
+                                        <property name="resizable">True</property>
+                                        <property name="title" translatable="yes">Artist</property>
+                                        <child>
+                                            <object class="GtkCellRendererText" id="artist_renderer"/>
+                                            <attributes>
+                                                <attribute name="background-rgba">19</attribute>
+                                                <attribute name="foreground-rgba">20</attribute>
+                                                <attribute name="text">2</attribute>
+                                                <attribute name="weight">18</attribute>
+                                            </attributes>
+                                        </child>
+                                    </object>
+                                </child>
+                                <child>
+                                    <object class="GtkTreeViewColumn" id="album_artist_column">
+                                        <property name="clickable">True</property>
+                                        <property name="resizable">True</property>
+                                        <property name="title" translatable="yes">Album Artist</property>
+                                        <child>
+                                            <object class="GtkCellRendererText" id="album_artist_renderer"/>
+                                            <attributes>
+                                                <attribute name="background-rgba">19</attribute>
+                                                <attribute name="foreground-rgba">20</attribute>
+                                                <attribute name="text">3</attribute>
+                                                <attribute name="weight">18</attribute>
+                                            </attributes>
+                                        </child>
+                                    </object>
+                                </child>
+                                <child>
+                                    <object class="GtkTreeViewColumn" id="album_column">
+                                        <property name="clickable">True</property>
+                                        <property name="resizable">True</property>
+                                        <property name="title" translatable="yes">Album</property>
+                                        <child>
+                                            <object class="GtkCellRendererText" id="album_renderer"/>
+                                            <attributes>
+                                                <attribute name="background-rgba">19</attribute>
+                                                <attribute name="foreground-rgba">20</attribute>
+                                                <attribute name="text">4</attribute>
+                                                <attribute name="weight">18</attribute>
+                                            </attributes>
+                                        </child>
+                                    </object>
+                                </child>
+                                <child>
+                                    <object class="GtkTreeViewColumn" id="year_column">
+                                        <property name="clickable">True</property>
+                                        <property name="resizable">True</property>
+                                        <property name="title" translatable="yes">Year</property>
+                                        <child>
+                                            <object class="GtkCellRendererText" id="year_renderer"/>
+                                            <attributes>
+                                                <attribute name="background-rgba">19</attribute>
+                                                <attribute name="foreground-rgba">20</attribute>
+                                                <attribute name="text">5</attribute>
+                                                <attribute name="weight">18</attribute>
+                                            </attributes>
+                                        </child>
+                                    </object>
+                                </child>
+                                <child>
+                                    <object class="GtkTreeViewColumn" id="disc_column">
+                                        <property name="clickable">True</property>
+                                        <property name="resizable">True</property>
+                                        <property name="title" translatable="yes">Disc</property>
+                                        <child>
+                                            <object class="GtkCellRendererText" id="disc_renderer"/>
+                                            <attributes>
+                                                <attribute name="background-rgba">19</attribute>
+                                                <attribute name="foreground-rgba">20</attribute>
+                                                <attribute name="text">6</attribute>
+                                                <attribute name="weight">18</attribute>
+                                            </attributes>
+                                        </child>
+                                    </object>
+                                </child>
+                                <child>
+                                    <object class="GtkTreeViewColumn" id="track_column">
+                                        <property name="clickable">True</property>
+                                        <property name="resizable">True</property>
+                                        <property name="title" translatable="yes">Track</property>
+                                        <child>
+                                            <object class="GtkCellRendererText" id="track_renderer"/>
+                                            <attributes>
+                                                <attribute name="background-rgba">19</attribute>
+                                                <attribute name="foreground-rgba">20</attribute>
+                                                <attribute name="text">7</attribute>
+                                                <attribute name="weight">18</attribute>
+                                            </attributes>
+                                        </child>
+                                    </object>
+                                </child>
+                                <child>
+                                    <object class="GtkTreeViewColumn" id="genre_column">
+                                        <property name="clickable">True</property>
+                                        <property name="resizable">True</property>
+                                        <property name="title" translatable="yes">Genre</property>
+                                        <child>
+                                            <object class="GtkCellRendererText" id="genre_renderer"/>
+                                            <attributes>
+                                                <attribute name="background-rgba">19</attribute>
+                                                <attribute name="foreground-rgba">20</attribute>
+                                                <attribute name="text">8</attribute>
+                                                <attribute name="weight">18</attribute>
+                                            </attributes>
+                                        </child>
+                                    </object>
+                                </child>
+                                <child>
+                                    <object class="GtkTreeViewColumn" id="comment_column">
+                                        <property name="clickable">True</property>
+                                        <property name="resizable">True</property>
+                                        <property name="title" translatable="yes">Comment</property>
+                                        <child>
+                                            <object class="GtkCellRendererText" id="comment_renderer"/>
+                                            <attributes>
+                                                <attribute name="background-rgba">19</attribute>
+                                                <attribute name="foreground-rgba">20</attribute>
+                                                <attribute name="text">9</attribute>
+                                                <attribute name="weight">18</attribute>
+                                            </attributes>
+                                        </child>
+                                    </object>
+                                </child>
+                                <child>
+                                    <object class="GtkTreeViewColumn" id="composer_column">
+                                        <property name="clickable">True</property>
+                                        <property name="resizable">True</property>
+                                        <property name="title" translatable="yes">Composer</property>
+                                        <child>
+                                            <object class="GtkCellRendererText" id="composer_renderer"/>
+                                            <attributes>
+                                                <attribute name="background-rgba">19</attribute>
+                                                <attribute name="foreground-rgba">20</attribute>
+                                                <attribute name="text">10</attribute>
+                                                <attribute name="weight">18</attribute>
+                                            </attributes>
+                                        </child>
+                                    </object>
+                                </child>
+                                <child>
+                                    <object class="GtkTreeViewColumn" id="orig_artist_column">
+                                        <property name="clickable">True</property>
+                                        <property name="resizable">True</property>
+                                        <property name="title" translatable="yes">Original Artist</property>
+                                        <child>
+                                            <object class="GtkCellRendererText" id="orig_artist_renderer"/>
+                                            <attributes>
+                                                <attribute name="background-rgba">19</attribute>
+                                                <attribute name="foreground-rgba">20</attribute>
+                                                <attribute name="text">11</attribute>
+                                                <attribute name="weight">18</attribute>
+                                            </attributes>
+                                        </child>
+                                    </object>
+                                </child>
+                                <child>
+                                    <object class="GtkTreeViewColumn" id="copyright_column">
+                                        <property name="clickable">True</property>
+                                        <property name="resizable">True</property>
+                                        <property name="title" translatable="yes">Copyright</property>
+                                        <child>
+                                            <object class="GtkCellRendererText" id="copyright_renderer"/>
+                                            <attributes>
+                                                <attribute name="background-rgba">19</attribute>
+                                                <attribute name="foreground-rgba">20</attribute>
+                                                <attribute name="text">12</attribute>
+                                                <attribute name="weight">18</attribute>
+                                            </attributes>
+                                        </child>
+                                    </object>
+                                </child>
+                                <child>
+                                    <object class="GtkTreeViewColumn" id="url_column">
+                                        <property name="clickable">True</property>
+                                        <property name="resizable">True</property>
+                                        <property name="title" translatable="yes">URL</property>
+                                        <child>
+                                            <object class="GtkCellRendererText" id="url_renderer"/>
+                                            <attributes>
+                                                <attribute name="background-rgba">19</attribute>
+                                                <attribute name="foreground-rgba">20</attribute>
+                                                <attribute name="text">13</attribute>
+                                                <attribute name="weight">18</attribute>
+                                            </attributes>
+                                        </child>
+                                    </object>
+                                </child>
+                                <child>
+                                    <object class="GtkTreeViewColumn" id="encoded_by_column">
+                                        <property name="clickable">True</property>
+                                        <property name="resizable">True</property>
+                                        <property name="title" translatable="yes">Encoded By</property>
+                                        <child>
+                                            <object class="GtkCellRendererText" id="encoded_by_renderer"/>
+                                            <attributes>
+                                                <attribute name="background-rgba">19</attribute>
+                                                <attribute name="foreground-rgba">20</attribute>
+                                                <attribute name="text">14</attribute>
+                                                <attribute name="weight">18</attribute>
+                                            </attributes>
+                                        </child>
+                                    </object>
+                                </child>
+                                <child internal-child="selection">
+                                    <object class="GtkTreeSelection" id="files_selection">
+                                        <property name="mode">multiple</property>
+                                    </object>
+                                </child>
+                            </object>
+                        </child>
+                    </object>
+                </child>
+            </object>
+            <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">1</property>
+                <property name="width">3</property>
+            </packing>
+        </child>
+    </object>
+</interface>
diff --git a/data/cddb_dialog.ui b/data/cddb_dialog.ui
new file mode 100644
index 0000000..528b18b
--- /dev/null
+++ b/data/cddb_dialog.ui
@@ -0,0 +1,668 @@
+<interface domain="easytag">
+    <requires lib="gtk+" version="3.4"/>
+    <object class="GtkListStore" id="album_list_model">
+        <columns>
+            <column type="GdkPixbuf"/>
+            <column type="gchararray"/>
+            <column type="gchararray"/>
+            <column type="gpointer"/>
+            <column type="PangoStyle"/>
+            <column type="gint"/>
+            <column type="GdkRGBA"/>
+        </columns>
+    </object>
+    <object class="GtkListStore" id="track_list_model">
+        <columns>
+            <column type="guint"/>
+            <column type="gchararray"/>
+            <column type="gchararray"/>
+            <column type="gpointer"/>
+            <column type="gpointer"/>
+        </columns>
+    </object>
+    <object class="GtkGrid" id="cddb_grid">
+        <property name="column-spacing">6</property>
+        <property name="row-spacing">6</property>
+        <child>
+            <object class="GtkLabel" id="search_label">
+                <property name="halign">start</property>
+                <property name="label" translatable="yes">Search</property>
+                <property name="visible">True</property>
+                <attributes>
+                    <attribute name="weight" value="bold"/>
+                </attributes>
+            </object>
+            <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">0</property>
+            </packing>
+        </child>
+        <child>
+            <object class="GtkEntry" id="search_entry">
+                <property name="margin-left">12</property>
+                <property name="tooltip-text" translatable="yes">Enter the words to search (separated by a space or ‘+’)</property>
+                <property name="visible">True</property>
+            </object>
+            <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">1</property>
+            </packing>
+        </child>
+        <child>
+            <object class="GtkButton" id="manual_search_button">
+                <property name="label" translatable="yes">_Search</property>
+                <property name="use-underline">True</property>
+                <property name="visible">True</property>
+            </object>
+            <packing>
+                <property name="left-attach">1</property>
+                <property name="top-attach">1</property>
+            </packing>
+        </child>
+        <child>
+            <object class="GtkButton" id="automatic_search_button">
+                <property name="label" translatable="yes">Search Using Selected _Files</property>
+                <property name="tooltip-text" translatable="yes">Generate the CDDB disc ID using the selected files (the order is important)</property>
+                <property name="use-underline">True</property>
+                <property name="visible">True</property>
+            </object>
+            <packing>
+                <property name="left-attach">2</property>
+                <property name="top-attach">1</property>
+            </packing>
+        </child>
+        <child>
+            <object class="GtkButton" id="stop_button">
+                <property name="label" translatable="yes">Stop</property>
+                <property name="sensitive">False</property>
+                <property name="tooltip-text" translatable="yes">Stop the search</property>
+                <property name="visible">True</property>
+            </object>
+            <packing>
+                <property name="left-attach">3</property>
+                <property name="top-attach">1</property>
+            </packing>
+        </child>
+        <child>
+            <object class="GtkLabel" id="manual_search_label">
+                <property name="halign">start</property>
+                <property name="label" translatable="yes">Manual Search Options</property>
+                <property name="margin-left">12</property>
+                <property name="visible">True</property>
+                <attributes>
+                    <attribute name="weight" value="bold"/>
+                </attributes>
+            </object>
+            <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">2</property>
+            </packing>
+        </child>
+        <child>
+            <object class="GtkGrid" id="search_options_grid">
+                <property name="column-spacing">6</property>
+                <property name="margin-left">24</property>
+                <property name="row-spacing">6</property>
+                <property name="visible">True</property>
+                <child>
+                    <object class="GtkLabel" id="search_fields_label">
+                        <property name="halign">start</property>
+                        <property name="label" translatable="yes">Search Fields</property>
+                        <property name="visible">True</property>
+                        <attributes>
+                            <attribute name="weight" value="bold"/>
+                        </attributes>
+                    </object>
+                    <packing>
+                        <property name="left-attach">0</property>
+                        <property name="top-attach">0</property>
+                        <property name="width">4</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="artist_check">
+                        <property name="label" translatable="yes">Artist</property>
+                        <property name="margin-left">12</property>
+                        <property name="name">artist</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">0</property>
+                        <property name="top-attach">1</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="album_check">
+                        <property name="label" translatable="yes">Album</property>
+                        <property name="name">title</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">1</property>
+                        <property name="top-attach">1</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="track_check">
+                        <property name="label" translatable="yes">Track Name</property>
+                        <property name="name">track</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">2</property>
+                        <property name="top-attach">1</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="other_check">
+                        <property name="label" translatable="yes">Other</property>
+                        <property name="name">other</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">3</property>
+                        <property name="top-attach">1</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="categories_label">
+                        <property name="halign">start</property>
+                        <property name="label" translatable="yes">Categories</property>
+                        <property name="margin-left">12</property>
+                        <property name="visible">True</property>
+                        <attributes>
+                            <attribute name="weight" value="bold"/>
+                        </attributes>
+                    </object>
+                    <packing>
+                        <property name="left-attach">5</property>
+                        <property name="top-attach">0</property>
+                        <property name="width">5</property>
+                    </packing>
+                </child>
+r               <child>
+                    <object class="GtkCheckButton" id="blues_check">
+                        <property name="label" translatable="yes">Blues</property>
+                        <property name="margin-left">12</property>
+                        <property name="name">blues</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">5</property>
+                        <property name="top-attach">1</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="classical_check">
+                        <property name="label" translatable="yes">Classical</property>
+                        <property name="name">classical</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">6</property>
+                        <property name="top-attach">1</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="country_check">
+                        <property name="label" translatable="yes">Country</property>
+                        <property name="name">country</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">7</property>
+                        <property name="top-attach">1</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="folk_check">
+                        <property name="label" translatable="yes">Folk</property>
+                        <property name="name">folk</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">8</property>
+                        <property name="top-attach">1</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="jazz_check">
+                        <property name="label" translatable="yes">Jazz</property>
+                        <property name="name">jazz</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">9</property>
+                        <property name="top-attach">1</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="misc_check">
+                        <property name="label" translatable="yes">Misc.</property>
+                        <property name="name">misc</property>
+                        <property name="margin-left">12</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">5</property>
+                        <property name="top-attach">2</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="newage_check">
+                        <property name="label" translatable="yes">New Age</property>
+                        <property name="name">newage</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">6</property>
+                        <property name="top-attach">2</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="reggae_check">
+                        <property name="label" translatable="yes">Reggae</property>
+                        <property name="name">reggae</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">7</property>
+                        <property name="top-attach">2</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="rock_check">
+                        <property name="label" translatable="yes">Rock</property>
+                        <property name="name">rock</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">8</property>
+                        <property name="top-attach">2</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="soundtrack_check">
+                        <property name="label" translatable="yes">Soundtrack</property>
+                        <property name="name">soundtrack</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">9</property>
+                        <property name="top-attach">2</property>
+                    </packing>
+                </child>
+            </object>
+            <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">4</property>
+                <property name="width">4</property>
+            </packing>
+        </child>
+        <child>
+            <object class="GtkLabel" id="results_label">
+                <property name="halign">start</property>
+                <property name="label" translatable="yes">Results</property>
+                <property name="margin-top">6</property>
+                <property name="visible">True</property>
+                <attributes>
+                    <attribute name="weight" value="bold"/>
+                </attributes>
+            </object>
+            <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">5</property>
+            </packing>
+        </child>
+        <child>
+            <object class="GtkBox" id="results_box">
+                <property name="visible">True</property>
+                <property name="orientation">vertical</property>
+                <child>
+                    <object class="GtkPaned" id="results_paned">
+                        <property name="orientation">horizontal</property>
+                        <property name="margin-left">12</property>
+                        <property name="visible">True</property>
+                        <child>
+                            <object class="GtkScrolledWindow" id="album_scrolled">
+                                <property name="expand">True</property>
+                                <property name="min-content-height">225</property>
+                                <property name="min-content-width">225</property>
+                                <property name="visible">True</property>
+                                <child>
+                                    <object class="GtkTreeView" id="album_view">
+                                        <property name="model">album_list_model</property>
+                                        <property name="search-column">1</property>
+                                        <property name="visible">True</property>
+                                        <child>
+                                            <object class="GtkTreeViewColumn" id="service_column">
+                                                <child>
+                                                    <object class="GtkCellRendererPixbuf" id="service_renderer"/>
+                                                    <attributes>
+                                                        <attribute name="pixbuf">0</attribute>
+                                                    </attributes>
+                                                </child>
+                                            </object>
+                                        </child>
+                                        <child>
+                                            <object class="GtkTreeViewColumn" id="artist_album_column">
+                                                <property name="title" translatable="yes">Artist / Album</property>
+                                                <child>
+                                                    <object class="GtkCellRendererText" id="artist_album_renderer"/>
+                                                    <attributes>
+                                                        <attribute name="foreground-rgba">6</attribute>
+                                                        <attribute name="style">4</attribute>
+                                                        <attribute name="text">1</attribute>
+                                                        <attribute name="weight">5</attribute>
+                                                    </attributes>
+                                                </child>
+                                            </object>
+                                        </child>
+                                        <child>
+                                            <object class="GtkTreeViewColumn" id="category_column">
+                                                <property name="title" translatable="yes">Category</property>
+                                                <child>
+                                                    <object class="GtkCellRendererText" id="category_renderer"/>
+                                                    <attributes>
+                                                        <attribute name="foreground-rgba">6</attribute>
+                                                        <attribute name="style">4</attribute>
+                                                        <attribute name="text">2</attribute>
+                                                        <attribute name="weight">5</attribute>
+                                                    </attributes>
+                                                </child>
+                                            </object>
+                                        </child>
+                                    </object>
+                                </child>
+                            </object>
+                            <packing>
+                                <property name="resize">True</property>
+                                <property name="shrink">False</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkScrolledWindow" id="track_scrolled">
+                                <property name="expand">True</property>
+                                <property name="min-content-height">225</property>
+                                <property name="min-content-width">225</property>
+                                <property name="visible">True</property>
+                                <child>
+                                    <object class="GtkTreeView" id="track_view">
+                                        <property name="model">track_list_model</property>
+                                        <property name="tooltip-text" translatable="yes">Select lines from which tags will be applied to your files list. All lines will be processed if no line is selected.\nYou can also reorder lines in this list before using the ‘apply’ button</property>
+                                        <property name="visible">True</property>
+                                        <child>
+                                            <object class="GtkTreeViewColumn" id="number_column">
+                                                <property name="sort-column-id">0</property>
+                                                <property name="title" translatable="yes">#</property>
+                                                <child>
+                                                    <object class="GtkCellRendererText" id="number_renderer"/>
+                                                    <attributes>
+                                                        <attribute name="text">0</attribute>
+                                                    </attributes>
+                                                </child>
+                                            </object>
+                                        </child>
+                                        <child>
+                                            <object class="GtkTreeViewColumn" id="track_column">
+                                                <property name="sort-column-id">1</property>
+                                                <property name="title" translatable="yes">Track Name</property>
+                                                <child>
+                                                    <object class="GtkCellRendererText" id="track_renderer"/>
+                                                    <attributes>
+                                                        <attribute name="text">1</attribute>
+                                                    </attributes>
+                                                </child>
+                                            </object>
+                                        </child>
+                                        <child>
+                                            <object class="GtkTreeViewColumn" id="duration_column">
+                                                <property name="title" translatable="yes">Duration</property>
+                                                <child>
+                                                    <object class="GtkCellRendererText" id="duration_renderer"/>
+                                                    <attributes>
+                                                        <attribute name="text">2</attribute>
+                                                    </attributes>
+                                                </child>
+                                            </object>
+                                        </child>
+                                        <child internal-child="selection">
+                                            <object class="GtkTreeSelection" id="track_selection">
+                                                <property name="mode">multiple</property>
+                                            </object>
+                                        </child>
+                                    </object>
+                                </child>
+                            </object>
+                            <packing>
+                                <property name="resize">True</property>
+                                <property name="shrink">False</property>
+                            </packing>
+                        </child>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkToolbar" id="results_toolbar">
+                        <property name="margin-left">12</property>
+                        <property name="visible">True</property>
+                        <style>
+                            <class name="inline-toolbar"/>
+                        </style>
+                        <child>
+                            <object class="GtkToolButton" id="select_all_button">
+                                <property name="icon-name">edit-select-all</property>
+                                <property name="tooltip-text" translatable="yes">Select all lines</property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkToolButton" id="invert_button">
+                                <property name="tooltip-text" translatable="yes">Invert line selection</property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkToolButton" id="unselect_all_button">
+                                <property name="tooltip-text" translatable="yes">Unselect all lines</property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                    </object>
+                </child>
+            </object>
+            <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">7</property>
+                <property name="width">4</property>
+            </packing>
+        </child>
+        <child>
+            <object class="GtkGrid" id="fill_tags_grid">
+                <property name="column-spacing">12</property>
+                <property name="margin-left">12</property>
+                <property name="margin-top">6</property>
+                <property name="row-spacing">12</property>
+                <property name="visible">True</property>
+                <child>
+                    <object class="GtkLabel" id="fill_tags_label">
+                        <property name="halign">start</property>
+                        <property name="label" translatable="yes">Fill Tags</property>
+                        <property name="visible">True</property>
+                        <attributes>
+                            <attribute name="weight" value="bold"/>
+                        </attributes>
+                    </object>
+                    <packing>
+                        <property name="left-attach">0</property>
+                        <property name="top-attach">0</property>
+                        <property name="width">8</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="filename_check">
+                        <property name="label" translatable="yes">Filename</property>
+                        <property name="margin-left">12</property>
+                        <property name="name">filename</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">0</property>
+                        <property name="top-attach">1</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="title_check">
+                        <property name="label" translatable="yes">Title</property>
+                        <property name="name">title</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">1</property>
+                        <property name="top-attach">1</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="fill_artist_check">
+                        <property name="label" translatable="yes">Artist</property>
+                        <property name="name">artist</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">2</property>
+                        <property name="top-attach">1</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="fill_album_check">
+                        <property name="label" translatable="yes">Album</property>
+                        <property name="name">album</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">3</property>
+                        <property name="top-attach">1</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="year_check">
+                        <property name="label" translatable="yes">Year</property>
+                        <property name="name">year</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">4</property>
+                        <property name="top-attach">1</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="fill_track_check">
+                        <property name="label" translatable="yes">Track #</property>
+                        <property name="name">track</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">5</property>
+                        <property name="top-attach">1</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="track_total_check">
+                        <property name="label" translatable="yes"># Tracks</property>
+                        <property name="name">track-total</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">6</property>
+                        <property name="top-attach">1</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="genre_check">
+                        <property name="label" translatable="yes">Genre</property>
+                        <property name="name">genre</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">7</property>
+                        <property name="top-attach">1</property>
+                    </packing>
+                </child>
+            </object>
+            <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">8</property>
+                <property name="width">4</property>
+            </packing>
+        </child>
+        <child>
+            <object class="GtkBox" id="results_check_box">
+                <property name="margin-left">12</property>
+                <property name="margin-top">6</property>
+                <property name="spacing">12</property>
+                <property name="visible">True</property>
+                <child>
+                    <object class="GtkCheckButton" id="scanner_check">
+                        <property name="label" translatable="yes">Run the current scanner for each file</property>
+                        <property name="tooltip-text" translatable="yes">Whether to run the tag scanner, with the current settings, on the CDDB results</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="dlm_check">
+                        <property name="label" translatable="yes">Match lines with the Levenshtein algorithm</property>
+                        <property name="tooltip-text" translatable="yes">Whether to use the DLM algorithm to match CDDB results to files</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+            </object>
+            <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">9</property>
+                <property name="width">4</property>
+            </packing>
+        </child>
+        <child>
+            <object class="GtkBox" id="status_box">
+                <property name="margin-top">6</property>
+                <property name="orientation">horizontal</property>
+                <property name="spacing">6</property>
+                <property name="visible">True</property>
+                <child>
+                    <object class="GtkStatusbar" id="cddb_bar">
+                        <property name="hexpand">True</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkButtonBox" id="button_box">
+                        <property name="layout-style">end</property>
+                        <property name="orientation">horizontal</property>
+                        <property name="spacing">6</property>
+                        <property name="visible">True</property>
+                        <child>
+                            <object class="GtkButton" id="close_button">
+                                <property name="label" translatable="yes">_Close</property>
+                                <property name="use-underline">True</property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkButton" id="apply_button">
+                                <property name="label" translatable="yes">_Apply</property>
+                                <property name="sensitive">False</property>
+                                <property name="tooltip-text" translatable="yes">Load the selected lines or all lines (if no lines are selected)</property>
+                                <property name="use-underline">True</property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                    </object>
+                </child>
+            </object>
+            <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">10</property>
+                <property name="width">4</property>
+            </packing>
+        </child>
+    </object>
+</interface>
diff --git a/data/easytag.desktop.in b/data/easytag.desktop.in
index 4e8a4ef..f39c464 100644
--- a/data/easytag.desktop.in
+++ b/data/easytag.desktop.in
@@ -1,9 +1,9 @@
 [Desktop Entry]
 Name=EasyTAG
-_GenericName=Sound File Metadata Editor
-_Comment=Edit sound file metadata
+_GenericName=Audio File Metadata Editor
+_Comment=Edit audio file metadata
 # Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
-_Keywords=mp3;tag;audio;
+_Keywords=mp3;tag;audio;music;
 Type=Application
 Icon=easytag
 Categories=GTK;AudioVideo;AudioVideoEditing;Audio;
diff --git a/data/file_area.ui b/data/file_area.ui
new file mode 100644
index 0000000..e60ce50
--- /dev/null
+++ b/data/file_area.ui
@@ -0,0 +1,194 @@
+<interface domain="easytag">
+    <requires lib="gtk+" version="3.4"/>
+    <object class="GtkGrid" id="file_grid">
+        <property name="border-width">6</property>
+        <property name="column-spacing">6</property>
+        <property name="row-spacing">6</property>
+        <property name="visible">True</property>
+        <child>
+            <object class="GtkLabel" id="file_label">
+                <property name="halign">start</property>
+                <property name="label" translatable="yes">File</property>
+                <property name="visible">True</property>
+                <attributes>
+                    <attribute name="weight" value="bold"/>
+                </attributes>
+            </object>
+            <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">0</property>
+                <property name="width">2</property>
+            </packing>
+        </child>
+        <child>
+            <object class="GtkLabel" id="index_label">
+                <property name="label" translatable="yes">0/0:</property>
+                <property name="margin-left">12</property>
+                <property name="visible">True</property>
+            </object>
+            <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">1</property>
+            </packing>
+        </child>
+        <child>
+            <object class="GtkEntry" id="filename_entry">
+                <property name="hexpand">True</property>
+                <property name="visible">True</property>
+            </object>
+            <packing>
+                <property name="left-attach">1</property>
+                <property name="top-attach">1</property>
+            </packing>
+        </child>
+        <child>
+            <object class="GtkGrid" id="header_grid">
+                <property name="column-spacing">6</property>
+                <property name="margin-left">12</property>
+                <property name="visible">true</property>
+                <child>
+                    <object class="GtkLabel" id="version_label">
+                        <property name="halign">end</property>
+                        <property name="label" translatable="yes">Encoder:</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">0</property>
+                        <property name="top-attach">0</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="version_value_label">
+                        <property name="halign">start</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">1</property>
+                        <property name="top-attach">0</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="bitrate_label">
+                        <property name="halign">end</property>
+                        <property name="label" translatable="yes">Bitrate:</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">0</property>
+                        <property name="top-attach">1</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="bitrate_value_label">
+                        <property name="halign">start</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">1</property>
+                        <property name="top-attach">1</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="samplerate_label">
+                        <property name="halign">end</property>
+                        <property name="label" translatable="yes">Sample rate:</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">0</property>
+                        <property name="top-attach">2</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="samplerate_value_label">
+                        <property name="halign">start</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">1</property>
+                        <property name="top-attach">2</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkSeparator" id="field_separator">
+                        <property name="orientation">vertical</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="height">3</property>
+                        <property name="left-attach">2</property>
+                        <property name="top-attach">0</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="mode_label">
+                        <property name="halign">end</property>
+                        <property name="label" translatable="yes">Mode:</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">3</property>
+                        <property name="top-attach">0</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="mode_value_label">
+                        <property name="halign">start</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">4</property>
+                        <property name="top-attach">0</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="size_label">
+                        <property name="halign">end</property>
+                        <property name="label" translatable="yes">Size:</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">3</property>
+                        <property name="top-attach">1</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="size_value_label">
+                        <property name="halign">start</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">4</property>
+                        <property name="top-attach">1</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="duration_label">
+                        <property name="halign">end</property>
+                        <property name="label" translatable="yes">Duration:</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">3</property>
+                        <property name="top-attach">2</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="duration_value_label">
+                        <property name="halign">start</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">4</property>
+                        <property name="top-attach">2</property>
+                    </packing>
+                </child>
+            </object>
+            <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">3</property>
+                <property name="width">2</property>
+            </packing>
+        </child>
+    </object>
+</interface>
diff --git a/data/images/all-lowercase.png b/data/images/all-lowercase.png
new file mode 100644
index 0000000..e076e3f
Binary files /dev/null and b/data/images/all-lowercase.png differ
diff --git a/data/images/all-uppercase.png b/data/images/all-uppercase.png
new file mode 100644
index 0000000..7ca2c1b
Binary files /dev/null and b/data/images/all-uppercase.png differ
diff --git a/data/images/artist-album.png b/data/images/artist-album.png
new file mode 100644
index 0000000..a45b624
Binary files /dev/null and b/data/images/artist-album.png differ
diff --git a/data/images/artist.png b/data/images/artist.png
new file mode 100644
index 0000000..7c298a3
Binary files /dev/null and b/data/images/artist.png differ
diff --git a/data/images/first-letter-uppercase-word.png b/data/images/first-letter-uppercase-word.png
new file mode 100644
index 0000000..4329f95
Binary files /dev/null and b/data/images/first-letter-uppercase-word.png differ
diff --git a/data/images/first-letter-uppercase.png b/data/images/first-letter-uppercase.png
new file mode 100644
index 0000000..a2f7058
Binary files /dev/null and b/data/images/first-letter-uppercase.png differ
diff --git a/data/images/freedb.png b/data/images/freedb.png
new file mode 100644
index 0000000..8194b6e
Binary files /dev/null and b/data/images/freedb.png differ
diff --git a/data/images/gnudb.png b/data/images/gnudb.png
new file mode 100644
index 0000000..ca8a1ac
Binary files /dev/null and b/data/images/gnudb.png differ
diff --git a/data/images/invert-selection.png b/data/images/invert-selection.png
new file mode 100644
index 0000000..f9df227
Binary files /dev/null and b/data/images/invert-selection.png differ
diff --git a/data/images/mask.png b/data/images/mask.png
new file mode 100644
index 0000000..9ab0d81
Binary files /dev/null and b/data/images/mask.png differ
diff --git a/data/images/musicbrainz.png b/data/images/musicbrainz.png
new file mode 100644
index 0000000..41d1223
Binary files /dev/null and b/data/images/musicbrainz.png differ
diff --git a/data/images/red-lines.png b/data/images/red-lines.png
new file mode 100644
index 0000000..e5bfafd
Binary files /dev/null and b/data/images/red-lines.png differ
diff --git a/data/images/sequence-track.png b/data/images/sequence-track.png
new file mode 100644
index 0000000..49ae3b8
Binary files /dev/null and b/data/images/sequence-track.png differ
diff --git a/data/images/unselect-all.png b/data/images/unselect-all.png
new file mode 100644
index 0000000..2bdcb16
Binary files /dev/null and b/data/images/unselect-all.png differ
diff --git a/data/load_files_dialog.ui b/data/load_files_dialog.ui
new file mode 100644
index 0000000..42edf0b
--- /dev/null
+++ b/data/load_files_dialog.ui
@@ -0,0 +1,280 @@
+<interface domain="easytag">
+    <requires lib="gtk+" version="3.4"/>
+    <object class="GtkListStore" id="file_content_model">
+        <columns>
+            <column type="gchararray"/>
+        </columns>
+    </object>
+    <object class="GtkListStore" id="file_name_model">
+        <columns>
+            <column type="gchararray"/>
+            <column type="gpointer"/>
+        </columns>
+    </object>
+    <object class="GtkGrid" id="file_grid">
+        <property name="column-spacing">6</property>
+        <property name="row-spacing">6</property>
+        <child>
+            <object class="GtkLabel" id="file_label">
+                <property name="halign">end</property>
+                <property name="label" translatable="yes">File:</property>
+                <property name="visible">True</property>
+            </object>
+            <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">0</property>
+            </packing>
+        </child>
+        <child>
+            <object class="GtkFileChooserButton" id="file_chooser">
+                <property name="hexpand">True</property>
+                <property name="title" translatable="yes">Choose a Text File</property>
+                <property name="visible">True</property>
+            </object>
+            <packing>
+                <property name="left-attach">1</property>
+                <property name="top-attach">0</property>
+            </packing>
+        </child>
+        <child>
+            <object class="GtkButton" id="file_load_button">
+                <property name="can-default">True</property>
+                <property name="label" translatable="yes">_Load</property>
+                <property name="use-underline">True</property>
+                <property name="visible">True</property>
+            </object>
+            <packing>
+                <property name="left-attach">2</property>
+                <property name="top-attach">0</property>
+            </packing>
+        </child>
+        <child>
+            <object class="GtkPaned" id="file_paned">
+                <property name="orientation">horizontal</property>
+                <property name="visible">True</property>
+                <child>
+                    <object class="GtkGrid" id="file_content_grid">
+                        <property name="orientation">vertical</property>
+                        <property name="visible">True</property>
+                        <child>
+                            <object class="GtkScrolledWindow" id="file_content_scrolled">
+                                <property name="expand">True</property>
+                                <property name="min-content-height">275</property>
+                                <property name="min-content-width">275</property>
+                                <property name="visible">True</property>
+                                <child>
+                                    <object class="GtkTreeView" id="file_content_view">
+                                        <property name="model">file_content_model</property>
+                                        <property name="reorderable">True</property>
+                                        <property name="visible">True</property>
+                                        <child>
+                                            <object class="GtkTreeViewColumn" id="file_content_column">
+                                                <property name="title" translatable="yes">Content of Text File</property>
+                                                <child>
+                                                    <object class="GtkCellRendererText" id="filecontent_renderer"/>
+                                                    <attributes>
+                                                        <attribute name="text">0</attribute>
+                                                    </attributes>
+                                                </child>
+                                            </object>
+                                        </child>
+                                    </object>
+                                </child>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkToolbar" id="file_content_bar">
+                                <property name="visible">True</property>
+                                <style>
+                                    <class name="inline-toolbar"/>
+                                </style>
+                                <child>
+                                    <object class="GtkToolButton" id="content_insert_blank">
+                                        <property name="icon-name">list-add</property>
+                                        <property name="tooltip-text" translatable="yes">Insert a blank line before the selected line</property>
+                                        <property name="visible">True</property>
+                                    </object>
+                                </child>
+                                <child>
+                                    <object class="GtkToolButton" id="content_remove">
+                                        <property name="icon-name">list-remove</property>
+                                        <property name="tooltip-text" translatable="yes">Delete the selected line</property>
+                                        <property name="visible">True</property>
+                                    </object>
+                                </child>
+                                <child>
+                                    <object class="GtkToolButton" id="content_remove_blank">
+                                        <property name="icon-name">edit-delete</property>
+                                        <property name="tooltip-text" translatable="yes">Delete all blank lines</property>
+                                        <property name="visible">True</property>
+                                    </object>
+                                </child>
+                                <child>
+                                    <object class="GtkToolButton" id="content_up">
+                                        <property name="icon-name">go-up</property>
+                                        <property name="tooltip-text" translatable="yes">Move the selected line up</property>
+                                        <property name="visible">True</property>
+                                    </object>
+                                </child>
+                                <child>
+                                    <object class="GtkToolButton" id="content_down">
+                                        <property name="icon-name">go-down</property>
+                                        <property name="tooltip-text" translatable="yes">Move the selected line down</property>
+                                        <property name="visible">True</property>
+                                    </object>
+                                </child>
+                                <child>
+                                    <object class="GtkToolButton" id="content_reload">
+                                        <property name="icon-name">view-refresh</property>
+                                        <property name="tooltip-text" translatable="yes">Reload</property>
+                                        <property name="visible">True</property>
+                                    </object>
+                                </child>
+                            </object>
+                        </child>
+                    </object>
+                    <packing>
+                        <property name="resize">True</property>
+                        <property name="shrink">False</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkGrid" id="file_name_grid">
+                        <property name="orientation">vertical</property>
+                        <property name="visible">True</property>
+                        <child>
+                            <object class="GtkScrolledWindow" id="file_name_scrolled">
+                                <property name="expand">True</property>
+                                <property name="min-content-height">275</property>
+                                <property name="min-content-width">275</property>
+                                <property name="visible">True</property>
+                                <child>
+                                    <object class="GtkTreeView" id="file_name_view">
+                                        <property name="model">file_name_model</property>
+                                        <property name="reorderable">True</property>
+                                        <property name="visible">True</property>
+                                        <child>
+                                            <object class="GtkTreeViewColumn" id="file_name_column">
+                                                <property name="title" translatable="yes">List of Files</property>
+                                                <child>
+                                                    <object class="GtkCellRendererText" id="file_name_renderer"/>
+                                                    <attributes>
+                                                        <attribute name="text">0</attribute>
+                                                    </attributes>
+                                                </child>
+                                            </object>
+                                        </child>
+                                    </object>
+                                </child>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkToolbar" id="file_name_bar">
+                                <property name="visible">True</property>
+                                <style>
+                                    <class name="inline-toolbar"/>
+                                </style>
+                                <child>
+                                    <object class="GtkToolButton" id="name_insert_blank">
+                                        <property name="icon-name">list-add</property>
+                                        <property name="tooltip-text" translatable="yes">Insert a blank line before the selected line</property>
+                                        <property name="visible">True</property>
+                                    </object>
+                                </child>
+                                <child>
+                                    <object class="GtkToolButton" id="name_remove">
+                                        <property name="icon-name">list-remove</property>
+                                        <property name="tooltip-text" translatable="yes">Delete the selected line</property>
+                                        <property name="visible">True</property>
+                                    </object>
+                                </child>
+                                <child>
+                                    <object class="GtkToolButton" id="name_remove_blank">
+                                        <property name="icon-name">edit-delete</property>
+                                        <property name="tooltip-text" translatable="yes">Delete all blank lines</property>
+                                        <property name="visible">True</property>
+                                    </object>
+                                </child>
+                                <child>
+                                    <object class="GtkToolButton" id="name_up">
+                                        <property name="icon-name">go-up</property>
+                                        <property name="tooltip-text" translatable="yes">Move the selected line up</property>
+                                        <property name="visible">True</property>
+                                    </object>
+                                </child>
+                                <child>
+                                    <object class="GtkToolButton" id="name_down">
+                                        <property name="icon-name">go-down</property>
+                                        <property name="tooltip-text" translatable="yes">Move the selected line down</property>
+                                        <property name="visible">True</property>
+                                    </object>
+                                </child>
+                                <child>
+                                    <object class="GtkToolButton" id="name_reload">
+                                        <property name="icon-name">view-refresh</property>
+                                        <property name="tooltip-text" translatable="yes">Reload</property>
+                                        <property name="visible">True</property>
+                                    </object>
+                                </child>
+                            </object>
+                        </child>
+                    </object>
+                    <packing>
+                        <property name="resize">True</property>
+                        <property name="shrink">False</property>
+                    </packing>
+                </child>
+            </object>
+            <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">1</property>
+                <property name="width">3</property>
+            </packing>
+        </child>
+        <child>
+            <object class="GtkLabel" id="file_entry_label">
+                <property name="halign">end</property>
+                <property name="label" translatable="yes">Selected line:</property>
+                <property name="visible">True</property>
+            </object>
+            <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">2</property>
+            </packing>
+        </child>
+        <child>
+            <object class="GtkEntry" id="file_entry">
+                <property name="visible">True</property>
+            </object>
+            <packing>
+                <property name="left-attach">1</property>
+                <property name="top-attach">2</property>
+                <property name="width">2</property>
+            </packing>
+        </child>
+        <child>
+            <object class="GtkSeparator" id="file_separator">
+                <property name="orientation">horizontal</property>
+                <property name="visible">True</property>
+            </object>
+            <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">3</property>
+                <property name="width">3</property>
+            </packing>
+        </child>
+        <child>
+            <object class="GtkCheckButton" id="file_scanner_check">
+                <property name="label" translatable="yes">Run the current scanner for each file</property>
+                <property name="tooltip-text" translatable="yes">Whether to run the current scanner on files loaded from a text file</property>
+                <property name="visible">True</property>
+            </object>
+            <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">4</property>
+                <property name="width">3</property>
+            </packing>
+        </child>
+    </object>
+</interface>
+
diff --git a/data/log_area.ui b/data/log_area.ui
new file mode 100644
index 0000000..8921b4f
--- /dev/null
+++ b/data/log_area.ui
@@ -0,0 +1,63 @@
+<interface domain="easytag">
+    <requires lib="gtk+" version="3.4"/>
+    <object class="GtkListStore" id="log_model">
+        <columns>
+            <column type="gchararray"/>
+            <column type="gchararray"/>
+            <column type="gchararray"/>
+        </columns>
+    </object>
+    <object class="GtkGrid" id="log_grid">
+        <property name="orientation">vertical</property>
+        <property name="row-spacing">6</property>
+        <property name="visible">True</property>
+        <child>
+            <object class="GtkLabel" id="log_label">
+                <property name="halign">start</property>
+                <property name="label" translatable="yes">Log</property>
+                <property name="visible">True</property>
+                <attributes>
+                    <attribute name="weight" value="bold"/>
+                </attributes>
+            </object>
+        </child>
+        <child>
+            <object class="GtkScrolledWindow" id="log_scrolled">
+                <property name="expand">True</property>
+                <property name="margin-left">12</property>
+                <property name="shadow-type">etched-in</property>
+                <property name="visible">True</property>
+                <child>
+                    <object class="GtkTreeView" id="log_view">
+                        <property name="model">log_model</property>
+                        <property name="headers-visible">False</property>
+                        <property name="visible">True</property>
+                        <child>
+                            <object class="GtkTreeViewColumn" id="log_icon_column">
+                                <property name="sizing">autosize</property>
+                                <child>
+                                    <object class="GtkCellRendererPixbuf" id="log_icon_renderer"/>
+                                    <attributes>
+                                        <attribute name="icon-name">0</attribute>
+                                    </attributes>
+                                </child>
+                                <child>
+                                    <object class="GtkCellRendererText" id="log_time_renderer"/>
+                                    <attributes>
+                                        <attribute name="text">1</attribute>
+                                    </attributes>
+                                </child>
+                                <child>
+                                    <object class="GtkCellRendererText" id="log_text_renderer"/>
+                                    <attributes>
+                                        <attribute name="text">2</attribute>
+                                    </attributes>
+                                </child>
+                            </object>
+                        </child>
+                    </object>
+                </child>
+            </object>
+        </child>
+    </object>
+</interface>
diff --git a/data/menus.ui b/data/menus.ui
new file mode 100644
index 0000000..365e7fd
--- /dev/null
+++ b/data/menus.ui
@@ -0,0 +1,904 @@
+<interface domain='easytag'>
+    <menu id='app-menu'>
+        <section>
+            <item>
+                <attribute name="accel">F1</attribute>
+                <attribute name="label" translatable="yes">_Help</attribute>
+                <attribute name="action">app.help</attribute>
+            </item>
+            <item>
+                <attribute name="label" translatable="yes">_About</attribute>
+                <attribute name="action">app.about</attribute>
+            </item>
+            <item>
+                <attribute name="accel"><Primary>q</attribute>
+                <attribute name="label" translatable="yes">_Quit</attribute>
+                <attribute name="action">app.quit</attribute>
+            </item>
+        </section>
+    </menu>
+    <menu id='menubar'>
+        <submenu>
+            <attribute name="label" translatable="yes">_File</attribute>
+            <section>
+                <item>
+                    <attribute name="accel"><Primary><Shift>o</attribute>
+                    <attribute name="action">win.open-with</attribute>
+                    <attribute name="label" translatable="yes">Open Files With…</attribute>
+                </item>
+                <item>
+                    <attribute name="action">win.run-player</attribute>
+                    <attribute name="label" translatable="yes">Run Audio Player</attribute>
+                </item>
+            </section>
+            <section>
+                <item>
+                    <attribute name="accel"><Primary>i</attribute>
+                    <attribute name="action">win.invert-selection</attribute>
+                    <attribute name="label" translatable="yes">Invert File Selection</attribute>
+                </item>
+            </section>
+            <section>
+                <item>
+                    <attribute name="action">win.delete</attribute>
+                    <attribute name="label" translatable="yes">Delete Files</attribute>
+                </item>
+            </section>
+            <section>
+                <item>
+                    <attribute name="accel"><Primary>z</attribute>
+                    <attribute name="action">win.undo-file-changes</attribute>
+                    <attribute name="label" translatable="yes">Undo for File</attribute>
+                </item>
+                <item>
+                    <attribute name="accel"><Primary>y</attribute>
+                    <attribute name="action">win.redo-file-changes</attribute>
+                    <attribute name="label" translatable="yes">Redo for File</attribute>
+                </item>
+                <item>
+                    <attribute name="accel"><Primary>s</attribute>
+                    <attribute name="action">win.save</attribute>
+                    <attribute name="label" translatable="yes">_Save Files</attribute>
+                </item>
+                <item>
+                    <attribute name="accel"><Primary><Shift>s</attribute>
+                    <attribute name="action">win.save-force</attribute>
+                    <attribute name="label" translatable="yes">_Force Save Files</attribute>
+                </item>
+            </section>
+        </submenu>
+        <submenu>
+            <attribute name="label" translatable="yes">_Edit</attribute>
+            <section>
+                <item>
+                    <attribute name="accel"><Primary>f</attribute>
+                    <attribute name="action">win.find</attribute>
+                    <attribute name="label" translatable="yes">_Find…</attribute>
+                </item>
+                <item>
+                    <attribute name="accel"><Primary>a</attribute>
+                    <attribute name="action">win.select-all</attribute>
+                    <attribute name="label" translatable="yes">Select All</attribute>
+                </item>
+                <item>
+                    <attribute name="accel"><Primary><Shift>a</attribute>
+                    <attribute name="action">win.unselect-all</attribute>
+                    <attribute name="label" translatable="yes">Unselect All</attribute>
+                </item>
+            </section>
+            <section>
+                <item>
+                    <attribute name="action">win.undo-last-changes</attribute>
+                    <attribute name="label" translatable="yes">Undo</attribute>
+                </item>
+                <item>
+                    <attribute name="action">win.redo-last-changes</attribute>
+                    <attribute name="label" translatable="yes">Redo</attribute>
+                </item>
+            </section>
+            <section>
+                <item>
+                    <attribute name="accel"><Primary>e</attribute>
+                    <attribute name="action">win.remove-tags</attribute>
+                    <attribute name="label" translatable="yes">_Remove Tags</attribute>
+                </item>
+            </section>
+            <section>
+                <item>
+                    <attribute name="action">win.preferences</attribute>
+                    <attribute name="label" translatable="yes">_Preferences</attribute>
+                </item>
+            </section>
+        </submenu>
+        <submenu>
+            <attribute name="label" translatable="yes">_View</attribute>
+            <section>
+                <item>
+                    <attribute name="action">win.scanner</attribute>
+                    <attribute name="label" translatable="yes">Show Scanner</attribute>
+                </item>
+                <submenu>
+                    <attribute name="label" translatable="yes">Scanner Mode</attribute>
+                    <item>
+                        <attribute name="action">win.scan-mode</attribute>
+                        <attribute name="label" translatable="yes">Fill Tags</attribute>
+                        <attribute name="target">fill-tag</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.scan-mode</attribute>
+                        <attribute name="label" translatable="yes">Rename Files and Directories</attribute>
+                        <attribute name="target">rename-file</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.scan-mode</attribute>
+                        <attribute name="label" translatable="yes">Process Fields</attribute>
+                        <attribute name="target">process-fields</attribute>
+                    </item>
+                </submenu>
+            </section>
+            <section>
+                <item>
+                    <attribute name="action">win.file-artist-view</attribute>
+                    <attribute name="label" translatable="yes">Directory Tree</attribute>
+                    <attribute name="target">file</attribute>
+                </item>
+                <item>
+                    <attribute name="action">win.file-artist-view</attribute>
+                    <attribute name="label" translatable="yes">Artists and Albums</attribute>
+                    <attribute name="target">artist</attribute>
+                </item>
+            </section>
+            <submenu>
+                <attribute name="label" translatable="yes">Sort List by Tag</attribute>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by track number</attribute>
+                        <attribute name="target">ascending-track-number</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by track number</attribute>
+                        <attribute name="target">descending-track-number</attribute>
+                    </item>
+                </section>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by title</attribute>
+                        <attribute name="target">ascending-title</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by title</attribute>
+                        <attribute name="target">descending-title</attribute>
+                    </item>
+                </section>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by artist</attribute>
+                        <attribute name="target">ascending-artist</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by artist</attribute>
+                        <attribute name="target">descending-artist</attribute>
+                    </item>
+                </section>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by album artist</attribute>
+                        <attribute name="target">ascending-album-artist</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by album artist</attribute>
+                        <attribute name="target">descending-album-artist</attribute>
+                    </item>
+                </section>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by album</attribute>
+                        <attribute name="target">ascending-album</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by album</attribute>
+                        <attribute name="target">descending-album</attribute>
+                    </item>
+                </section>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by year</attribute>
+                        <attribute name="target">ascending-year</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by year</attribute>
+                        <attribute name="target">descending-year</attribute>
+                    </item>
+                </section>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by genre</attribute>
+                        <attribute name="target">ascending-genre</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by genre</attribute>
+                        <attribute name="target">descending-genre</attribute>
+                    </item>
+                </section>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by comment</attribute>
+                        <attribute name="target">ascending-comment</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by comment</attribute>
+                        <attribute name="target">descending-comment</attribute>
+                    </item>
+                </section>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by composer</attribute>
+                        <attribute name="target">ascending-composer</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by composer</attribute>
+                        <attribute name="target">descending-composer</attribute>
+                    </item>
+                </section>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by original artist</attribute>
+                        <attribute name="target">ascending-orig-artist</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by original artist</attribute>
+                        <attribute name="target">descending-orig-artist</attribute>
+                    </item>
+                </section>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by copyright</attribute>
+                        <attribute name="target">ascending-copyright</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by copyright</attribute>
+                        <attribute name="target">descending-copyright</attribute>
+                    </item>
+                </section>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by URL</attribute>
+                        <attribute name="target">ascending-url</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by URL</attribute>
+                        <attribute name="target">descending-url</attribute>
+                    </item>
+                </section>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by encoder name</attribute>
+                        <attribute name="target">ascending-encoded-by</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by encoder name</attribute>
+                        <attribute name="target">descending-encoded-by</attribute>
+                    </item>
+                </section>
+            </submenu>
+            <submenu>
+                <attribute name="label" translatable="yes">Sort List by Property</attribute>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by filename</attribute>
+                        <attribute name="target">ascending-filename</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by filename</attribute>
+                        <attribute name="target">descending-filename</attribute>
+                    </item>
+                </section>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by creation date</attribute>
+                        <attribute name="target">ascending-creation-date</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by creation date</attribute>
+                        <attribute name="target">descending-creation-date</attribute>
+                    </item>
+                </section>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by file type</attribute>
+                        <attribute name="target">ascending-file-type</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by file type</attribute>
+                        <attribute name="target">descending-file-type</attribute>
+                    </item>
+                </section>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by file size</attribute>
+                        <attribute name="target">ascending-file-size</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by file size</attribute>
+                        <attribute name="target">descending-file-size</attribute>
+                    </item>
+                </section>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by duration</attribute>
+                        <attribute name="target">ascending-file-duration</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by duration</attribute>
+                        <attribute name="target">descending-file-duration</attribute>
+                    </item>
+                </section>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by bit rate</attribute>
+                        <attribute name="target">ascending-file-bitrate</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by bit rate</attribute>
+                        <attribute name="target">descending-file-bitrate</attribute>
+                    </item>
+                </section>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by sample rate</attribute>
+                        <attribute name="target">ascending-file-samplerate</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by sample rate</attribute>
+                        <attribute name="target">descending-file-samplerate</attribute>
+                    </item>
+                </section>
+            </submenu>
+            <section>
+                <item>
+                    <attribute name="accel"><Primary><Shift>c</attribute>
+                    <attribute name="action">win.collapse-tree</attribute>
+                    <attribute name="label" translatable="yes">Collapse Tree</attribute>
+                </item>
+                <item>
+                    <attribute name="accel"><Primary><Shift>r</attribute>
+                    <attribute name="action">win.reload-tree</attribute>
+                    <attribute name="label" translatable="yes">Reload Tree</attribute>
+                </item>
+            </section>
+            <section>
+                <item>
+                    <attribute name="accel"><Primary>r</attribute>
+                    <attribute name="action">win.reload-directory</attribute>
+                    <attribute name="label" translatable="yes">Reload Directory</attribute>
+                </item>
+            </section>
+            <section>
+                <item>
+                    <attribute name="action">win.browse-show-hidden</attribute>
+                    <attribute name="label" translatable="yes">Show Hidden Directories</attribute>
+                </item>
+            </section>
+        </submenu>
+        <submenu>
+            <attribute name="label" translatable="yes">_Browser</attribute>
+            <section>
+                <item>
+                    <attribute name="action">win.set-default-path</attribute>
+                    <attribute name="label" translatable="yes">Set _Current Path as Default</attribute>
+                </item>
+            </section>
+            <section>
+                <item>
+                    <attribute name="accel">F2</attribute>
+                    <attribute name="action">win.rename-directory</attribute>
+                    <attribute name="label" translatable="yes">Rename Directory…</attribute>
+                </item>
+                <item>
+                    <attribute name="action">win.browse-directory</attribute>
+                    <attribute name="label" translatable="yes">Browse Directory With…</attribute>
+                </item>
+            </section>
+            <section>
+                <item>
+                    <attribute name="action">win.browse-subdir</attribute>
+                    <attribute name="label" translatable="yes">Browse _Subdirectories</attribute>
+                </item>
+            </section>
+        </submenu>
+        <submenu>
+            <attribute name="label" translatable="yes">_Miscellaneous</attribute>
+            <item>
+                <attribute name="accel"><Primary>b</attribute>
+                <attribute name="action">win.show-cddb</attribute>
+                <attribute name="label" translatable="yes">CDD_B Search…</attribute>
+            </item>
+            <item>
+                <attribute name="accel"><Primary>t</attribute>
+                <attribute name="action">win.show-load-filenames</attribute>
+                <attribute name="label" translatable="yes">Load Filenames From a Text File…</attribute>
+            </item>
+            <item>
+                <attribute name="accel"><Primary>w</attribute>
+                <attribute name="action">win.show-playlist</attribute>
+                <attribute name="label" translatable="yes">Generate Playlist…</attribute>
+            </item>
+        </submenu>
+        <submenu>
+            <attribute name="label" translatable="yes">_Go</attribute>
+            <section>
+            <item>
+                <attribute name="accel"><Alt>Home</attribute>
+                <attribute name="action">win.go-home</attribute>
+                <attribute name="label" translatable="yes">_Home Directory</attribute>
+            </item>
+            <item>
+                <attribute name="action">win.go-desktop</attribute>
+                <attribute name="label" translatable="yes">Desktop Directory</attribute>
+            </item>
+            <item>
+                <attribute name="action">win.go-documents</attribute>
+                <attribute name="label" translatable="yes">Documents Directory</attribute>
+            </item>
+            <item>
+                <attribute name="action">win.go-downloads</attribute>
+                <attribute name="label" translatable="yes">Downloads Directory</attribute>
+            </item>
+            <item>
+                <attribute name="action">win.go-music</attribute>
+                <attribute name="label" translatable="yes">Music Directory</attribute>
+            </item>
+            <item>
+                <attribute name="accel"><Alt>Up</attribute>
+                <attribute name="action">win.go-parent</attribute>
+                <attribute name="label" translatable="yes">_Parent Directory</attribute>
+            </item>
+            <item>
+                <attribute name="accel"><Primary>d</attribute>
+                <attribute name="action">win.go-default</attribute>
+                <attribute name="label" translatable="yes">_Default Directory</attribute>
+            </item>
+            </section>
+            <section>
+            <item>
+                <attribute name="accel"><Primary>Home</attribute>
+                <attribute name="action">win.go-first</attribute>
+                <attribute name="label" translatable="yes">_First File</attribute>
+            </item>
+            <item>
+                <attribute name="accel">Page_Up</attribute>
+                <attribute name="action">win.go-previous</attribute>
+                <attribute name="label" translatable="yes">Previous File</attribute>
+            </item>
+            <item>
+                <attribute name="accel">Page_Down</attribute>
+                <attribute name="action">win.go-next</attribute>
+                <attribute name="label" translatable="yes">_Next File</attribute>
+            </item>
+            <item>
+                <attribute name="accel"><Primary>End</attribute>
+                <attribute name="action">win.go-last</attribute>
+                <attribute name="label" translatable="yes">_Last File</attribute>
+            </item>
+            </section>
+        </submenu>
+    </menu>
+    <menu id='directory-menu'>
+        <section>
+            <item>
+                <attribute name="action">win.run-player-directory</attribute>
+                <attribute name="label" translatable="yes">Run Audio Player</attribute>
+            </item>
+        </section>
+        <section>
+            <item>
+                <attribute name="action">win.go-home</attribute>
+                <attribute name="label" translatable="yes">Home Directory</attribute>
+            </item>
+            <item>
+                <attribute name="action">win.go-default</attribute>
+                <attribute name="label" translatable="yes">Default Directory</attribute>
+            </item>
+            <item>
+                <attribute name="action">win.set-default-path</attribute>
+                <attribute name="label" translatable="yes">Set Current Path as Default</attribute>
+            </item>
+        </section>
+        <section>
+            <item>
+                <attribute name="action">win.rename-directory</attribute>
+                <attribute name="label" translatable="yes">Rename Directory</attribute>
+            </item>
+            <item>
+                <attribute name="action">win.reload-directory</attribute>
+                <attribute name="label" translatable="yes">Reload Directory</attribute>
+            </item>
+            <item>
+                <attribute name="action">win.browse-directory</attribute>
+                <attribute name="label" translatable="yes">Browse Directory With…</attribute>
+            </item>
+        </section>
+        <section>
+            <item>
+                <attribute name="action">win.browse-subdir</attribute>
+                <attribute name="label" translatable="yes">Browse Subdirectories</attribute>
+            </item>
+            <item>
+                <attribute name="action">win.browse-show-hidden</attribute>
+                <attribute name="label" translatable="yes">Show Hidden Directories</attribute>
+            </item>
+        </section>
+        <section>
+            <item>
+                <attribute name="action">win.collapse-tree</attribute>
+                <attribute name="label" translatable="yes">Collapse Tree</attribute>
+            </item>
+            <item>
+                <attribute name="action">win.reload-tree</attribute>
+                <attribute name="label" translatable="yes">Reload Tree</attribute>
+            </item>
+        </section>
+    </menu>
+    <menu id='directory-album-menu'>
+        <section>
+            <item>
+                <attribute name="action">win.run-player-album</attribute>
+                <attribute name="label" translatable="yes">Run Audio Player</attribute>
+            </item>
+        </section>
+    </menu>
+    <menu id='directory-artist-menu'>
+        <section>
+            <item>
+                <attribute name="action">win.run-player-artist</attribute>
+                <attribute name="label" translatable="yes">Run Audio Player</attribute>
+            </item>
+        </section>
+    </menu>
+    <menu id='file-menu'>
+        <section>
+            <item>
+                <attribute name="action">win.select-all</attribute>
+                <attribute name="label" translatable="yes">Select All</attribute>
+            </item>
+            <item>
+                <attribute name="action">win.unselect-all</attribute>
+                <attribute name="label" translatable="yes">Unselect All</attribute>
+            </item>
+            <item>
+                <attribute name="action">win.invert-selection</attribute>
+                <attribute name="label" translatable="yes">Invert Selection</attribute>
+            </item>
+        </section>
+        <section>
+            <item>
+                <attribute name="action">win.run-player</attribute>
+                <attribute name="label" translatable="yes">Run Audio Player</attribute>
+            </item>
+        </section>
+        <section>
+            <item>
+                <attribute name="action">win.scanner</attribute>
+                <attribute name="label" translatable="yes">Show Scanner</attribute>
+            </item>
+        </section>
+        <section>
+            <item>
+                <attribute name="action">win.show-cddb-selection</attribute>
+                <attribute name="label" translatable="yes">CDDB Search Files…</attribute>
+            </item>
+            <item>
+                <attribute name="action">win.find</attribute>
+                <attribute name="label" translatable="yes">Find…</attribute>
+            </item>
+            <item>
+                <attribute name="action">win.delete</attribute>
+                <attribute name="label" translatable="yes">Delete Files</attribute>
+            </item>
+            <item>
+                <attribute name="action">win.reload-directory</attribute>
+                <attribute name="label" translatable="yes">Reload Directory</attribute>
+            </item>
+            <item>
+                <attribute name="action">win.open-with</attribute>
+                <attribute name="label" translatable="yes">Open Files With…</attribute>
+            </item>
+        </section>
+        <section>
+            <submenu>
+                <attribute name="label" translatable="yes">Sort List by Tag</attribute>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by track number</attribute>
+                        <attribute name="target">ascending-track-number</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by track number</attribute>
+                        <attribute name="target">descending-track-number</attribute>
+                    </item>
+                </section>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by title</attribute>
+                        <attribute name="target">ascending-title</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by title</attribute>
+                        <attribute name="target">descending-title</attribute>
+                    </item>
+                </section>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by artist</attribute>
+                        <attribute name="target">ascending-artist</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by artist</attribute>
+                        <attribute name="target">descending-artist</attribute>
+                    </item>
+                </section>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by album artist</attribute>
+                        <attribute name="target">ascending-album-artist</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by album artist</attribute>
+                        <attribute name="target">descending-album-artist</attribute>
+                    </item>
+                </section>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by album</attribute>
+                        <attribute name="target">ascending-album</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by album</attribute>
+                        <attribute name="target">descending-album</attribute>
+                    </item>
+                </section>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by year</attribute>
+                        <attribute name="target">ascending-year</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by year</attribute>
+                        <attribute name="target">descending-year</attribute>
+                    </item>
+                </section>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by genre</attribute>
+                        <attribute name="target">ascending-genre</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by genre</attribute>
+                        <attribute name="target">descending-genre</attribute>
+                    </item>
+                </section>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by comment</attribute>
+                        <attribute name="target">ascending-comment</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by comment</attribute>
+                        <attribute name="target">descending-comment</attribute>
+                    </item>
+                </section>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by composer</attribute>
+                        <attribute name="target">ascending-composer</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by composer</attribute>
+                        <attribute name="target">descending-composer</attribute>
+                    </item>
+                </section>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by original artist</attribute>
+                        <attribute name="target">ascending-orig-artist</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by original artist</attribute>
+                        <attribute name="target">descending-orig-artist</attribute>
+                    </item>
+                </section>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by copyright</attribute>
+                        <attribute name="target">ascending-copyright</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by copyright</attribute>
+                        <attribute name="target">descending-copyright</attribute>
+                    </item>
+                </section>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by URL</attribute>
+                        <attribute name="target">ascending-url</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by URL</attribute>
+                        <attribute name="target">descending-url</attribute>
+                    </item>
+                </section>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by encoder name</attribute>
+                        <attribute name="target">ascending-encoded-by</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by encoder name</attribute>
+                        <attribute name="target">descending-encoded-by</attribute>
+                    </item>
+                </section>
+            </submenu>
+            <submenu>
+                <attribute name="label" translatable="yes">Sort List by Property</attribute>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by filename</attribute>
+                        <attribute name="target">ascending-filename</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by filename</attribute>
+                        <attribute name="target">descending-filename</attribute>
+                    </item>
+                </section>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by creation date</attribute>
+                        <attribute name="target">ascending-creation-date</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by creation date</attribute>
+                        <attribute name="target">descending-creation-date</attribute>
+                    </item>
+                </section>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by file type</attribute>
+                        <attribute name="target">ascending-file-type</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by file type</attribute>
+                        <attribute name="target">descending-file-type</attribute>
+                    </item>
+                </section>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by file size</attribute>
+                        <attribute name="target">ascending-file-size</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by file size</attribute>
+                        <attribute name="target">descending-file-size</attribute>
+                    </item>
+                </section>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by duration</attribute>
+                        <attribute name="target">ascending-file-duration</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by duration</attribute>
+                        <attribute name="target">descending-file-duration</attribute>
+                    </item>
+                </section>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by bit rate</attribute>
+                        <attribute name="target">ascending-file-bitrate</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by bit rate</attribute>
+                        <attribute name="target">descending-file-bitrate</attribute>
+                    </item>
+                </section>
+                <section>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Ascending by sample rate</attribute>
+                        <attribute name="target">ascending-file-samplerate</attribute>
+                    </item>
+                    <item>
+                        <attribute name="action">win.sort-mode</attribute>
+                        <attribute name="label" translatable="yes">Descending by sample rate</attribute>
+                        <attribute name="target">descending-file-samplerate</attribute>
+                    </item>
+                </section>
+            </submenu>
+        </section>
+    </menu>
+    <menu id='log-menu'>
+        <section>
+            <item>
+                <attribute name="action">win.clear-log</attribute>
+                <attribute name="label" translatable="yes">Clear Log</attribute>
+            </item>
+        </section>
+    </menu>
+</interface>
diff --git a/data/nsis/easytag-header.bmp b/data/nsis/easytag-header.bmp
index 4752da6..fa21df3 100644
Binary files a/data/nsis/easytag-header.bmp and b/data/nsis/easytag-header.bmp differ
diff --git a/data/nsis/easytag-sidebar.bmp b/data/nsis/easytag-sidebar.bmp
index 67be247..fd2734d 100644
Binary files a/data/nsis/easytag-sidebar.bmp and b/data/nsis/easytag-sidebar.bmp differ
diff --git a/data/org.gnome.EasyTAG.gresource.xml b/data/org.gnome.EasyTAG.gresource.xml
new file mode 100644
index 0000000..b49f6fd
--- /dev/null
+++ b/data/org.gnome.EasyTAG.gresource.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+    <gresource prefix='/org/gnome/EasyTAG'>
+        <file preprocess='xml-stripblanks'>browser.ui</file>
+        <file preprocess='xml-stripblanks'>cddb_dialog.ui</file>
+        <file preprocess='xml-stripblanks'>file_area.ui</file>
+        <file preprocess='xml-stripblanks'>log_area.ui</file>
+        <file preprocess='xml-stripblanks'>load_files_dialog.ui</file>
+        <file preprocess='xml-stripblanks'>menus.ui</file>
+        <file preprocess='xml-stripblanks'>playlist_dialog.ui</file>
+        <file preprocess='xml-stripblanks'>preferences_dialog.ui</file>
+        <file preprocess='xml-stripblanks'>scan_dialog.ui</file>
+        <file preprocess='xml-stripblanks'>search_dialog.ui</file>
+        <file preprocess='xml-stripblanks'>tag_area.ui</file>
+        <file preprocess='xml-stripblanks'>toolbar.ui</file>
+        <file preprocess='to-pixdata'>images/all-lowercase.png</file>
+        <file preprocess='to-pixdata'>images/all-uppercase.png</file>
+        <file preprocess='to-pixdata'>images/artist-album.png</file>
+        <file preprocess='to-pixdata'>images/artist.png</file>
+        <file preprocess='to-pixdata'>images/first-letter-uppercase.png</file>
+        <file preprocess='to-pixdata'>images/first-letter-uppercase-word.png</file>
+        <file preprocess='to-pixdata'>images/freedb.png</file>
+        <file preprocess='to-pixdata'>images/gnudb.png</file>
+        <file preprocess='to-pixdata'>images/invert-selection.png</file>
+        <file preprocess='to-pixdata'>images/mask.png</file>
+        <file preprocess='to-pixdata'>images/musicbrainz.png</file>
+        <file preprocess='to-pixdata'>images/red-lines.png</file>
+        <file preprocess='to-pixdata'>images/sequence-track.png</file>
+        <file preprocess='to-pixdata'>images/unselect-all.png</file>
+    </gresource>
+</gresources>
diff --git a/data/org.gnome.EasyTAG.gschema.xml b/data/org.gnome.EasyTAG.gschema.xml
new file mode 100644
index 0000000..b589e34
--- /dev/null
+++ b/data/org.gnome.EasyTAG.gschema.xml
@@ -0,0 +1,699 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schemalist>
+
+  <schema id="org.gnome.EasyTAG" path="/org/gnome/easytag/">
+    <key name="load-on-startup" type="b">
+      <summary>Load on startup</summary>
+      <description>Whether to load the default path (or the path passed as an argument) on application startup</description>
+      <default>true</default>
+    </key>
+
+    <key name="default-path" type="ay">
+      <summary>Default path</summary>
+      <description>The default path to search for music files</description>
+      <default>b''</default>
+    </key>
+
+    <key name="browse-subdir" type="b">
+      <summary>Browse subdirectories</summary>
+      <description>Whether to search subdirectories for audio files when reading a directory in the browser</description>
+      <default>true</default>
+    </key>
+
+    <key name="browse-show-hidden" type="b">
+      <summary>Show hidden directories while browsing</summary>
+      <description>Whether to show hidden directories when showing a directory in the browser</description>
+      <default>false</default>
+    </key>
+
+    <key name="browse-expand-children" type="b">
+      <summary>Expand the subdirectories of the selected directory</summary>
+      <description>Whether to expand the subdirectories of a node in the directory browser when selecting it</description>
+      <default>true</default>
+    </key>
+
+    <key name="cddb-automatic-search-hostname" type="s">
+      <summary>CDDB server hostname for automatic search</summary>
+      <description>The CDDB server to use for the automatic search</description>
+      <default>'freedb.freedb.org'</default>
+    </key>
+
+    <key name="cddb-automatic-search-port" type="u">
+      <summary>CDDB server port for automatic search</summary>
+      <description>The CDDB server port to use for the automatic search</description>
+      <default>80</default>
+      <range min="0" max="65535" />
+    </key>
+
+    <key name="cddb-automatic-search-path" type="s">
+      <summary>CDDB server path for automatic search</summary>
+      <description>The CDDB server path to use for the automatic search</description>
+      <default>'/~cddb/cddb.cgi'</default>
+    </key>
+
+    <key name="cddb-automatic-search-hostname2" type="s">
+      <summary>CDDB server hostname for automatic search</summary>
+      <description>The CDDB server to use for the automatic search</description>
+      <default>'freedb.musicbrainz.org'</default>
+    </key>
+
+    <key name="cddb-automatic-search-port2" type="u">
+      <summary>CDDB server port for automatic search</summary>
+      <description>The CDDB server port to use for the automatic search</description>
+      <default>80</default>
+      <range min="0" max="65535" />
+    </key>
+
+    <key name="cddb-automatic-search-path2" type="s">
+      <summary>CDDB server path for automatic search</summary>
+      <description>The CDDB server path to use for the automatic search</description>
+      <default>'/~cddb/cddb.cgi'</default>
+    </key>
+
+    <key name="cddb-manual-search-hostname" type="s">
+      <summary>CDDB server hostname for manual search</summary>
+      <description>The CDDB server to use for a manual search</description>
+      <default>'www.gnudb.org'</default>
+    </key>
+
+    <key name="cddb-manual-search-port" type="u">
+      <summary>CDDB server port for manual search</summary>
+      <description>The CDDB server port to use for a manual search</description>
+      <default>80</default>
+      <range min="0" max="65535" />
+    </key>
+
+    <key name="cddb-manual-search-path" type="s">
+      <summary>CDDB server path for manual search</summary>
+      <description>The CDDB server path to use for a manual search</description>
+      <default>'/~cddb/cddb.cgi'</default>
+    </key>
+
+    <key name="cddb-dlm-enabled" type="b">
+      <summary>Use DLM to match CDDB results to files</summary>
+      <description>Whether to use the DLM algorithm to match CDDB results to files</description>
+      <default>false</default>
+    </key>
+
+    <key name="cddb-follow-file" type="b">
+      <summary>Select the file with the position which matches the position of the CDDB result</summary>
+      <description>Whether to select the file in the file list which matches the position in the CDDB results list</description>
+      <default>true</default>
+    </key>
+
+    <key name="cddb-proxy-enabled" type="b">
+      <summary>Enable proxy for remote CDDB</summary>
+      <description>Whether to access remote CDDB through a proxy</description>
+      <default>false</default>
+    </key>
+
+    <key name="cddb-proxy-hostname" type="s">
+      <summary>CDDB proxy hostname</summary>
+      <description>Hostname for a proxy to access remote CDDB</description>
+      <default>''</default>
+    </key>
+
+    <key name="cddb-proxy-port" type="u">
+      <summary>CDDB proxy port</summary>
+      <description>Port for a proxy to access remote CDDB</description>
+      <default>8080</default>
+      <range min="0" max="65535" />
+    </key>
+
+    <key name="cddb-proxy-username" type="s">
+      <summary>CDDB proxy username</summary>
+      <description>Username for a proxy to access remote CDDB</description>
+      <default>''</default>
+    </key>
+
+    <key name="cddb-proxy-password" type="s">
+      <summary>CDDB proxy password</summary>
+      <description>Password for a proxy to access remote CDDB</description>
+      <default>''</default>
+    </key>
+
+    <key name="cddb-run-scanner" type="b">
+      <summary>Run the scanner on CDDB results</summary>
+      <description>Whether to run the tag scanner, with the current settings, on the CDDB results</description>
+      <default>false</default>
+    </key>
+
+    <key name="cddb-search-fields" flags="org.gnome.EasyTAG.EtCddbSearchField">
+      <summary>The fields to use in a manual CDDB search</summary>
+      <description>Which fields to search for matches of the returned CDDB results</description>
+      <default>['artist','title','track','other']</default>
+    </key>
+
+    <key name="cddb-search-categories" flags="org.gnome.EasyTAG.EtCddbSearchCategory">
+      <summary>The categories to use in a CDDB search</summary>
+      <description>Which categories to search for matches in the returned CDDB results</description>
+      <default>['blues','classical','country','folk','jazz','misc','newage','reggae','rock','soundtrack']</default>
+    </key>
+
+    <key name="cddb-set-fields" flags="org.gnome.EasyTAG.EtCddbSetField">
+      <summary>The tag fields to set when matching against CDDB results</summary>
+      <description>Which tag fields should be set when matching against selected files and CDDB results</description>
+      <default>['title','artist','album','year','track','track-total','genre','filename']</default>
+    </key>
+
+    <key name="file-preserve-modification-time" type="b">
+      <summary>Preserve modification time when writing files</summary>
+      <description>Whether to preserve the existing modification time when editing files</description>
+      <default>false</default>
+    </key>
+
+    <key name="file-update-parent-modification-time" type="b">
+      <summary>Update parent directory modification time when writing
+      files</summary>
+      <description>Whether to update the modification time on the parent directory when editing files</description>
+      <default>true</default>
+    </key>
+
+    <key name="file-show-header" type="b">
+      <summary>Show audio file header summary</summary>
+      <description>Whether to show header information, such as bit rate and duration, for audio files</description>
+      <default>true</default>
+    </key>
+
+    <key name="file-changed-bold" type="b">
+      <summary>Show changed files in bold</summary>
+      <description>Whether to highlight changed files in the file list by making them bold, or alternatively by making them red</description>
+      <default>true</default>
+    </key>
+
+    <key name="sort-case-sensitive" type="b">
+      <summary>Sort files case-sensitively</summary>
+      <description>Whether file sorting is case-sensitive</description>
+      <default>true</default>
+    </key>
+
+    <key name="sort-mode" enum="org.gnome.EasyTAG.EtSortMode">
+      <summary>How to sort audio files in the file list</summary>
+      <description>Sort files in ascending or descending order for the selected type</description>
+      <default>'ascending-track-number'</default>
+    </key>
+
+    <key name="log-lines" type="u">
+      <summary>Number of log lines</summary>
+      <description>The maximum number of lines to keep in the log</description>
+      <default>50</default>
+      <range min="10" max="1500" />
+    </key>
+
+    <key name="log-show" type="b">
+      <summary>Show the log</summary>
+      <description>Whether to show the log in the main window</description>
+      <default>true</default>
+    </key>
+
+    <key name="id3-override-read-encoding" type="b">
+      <summary>Use a non-standard character encoding when reading ID3 tags</summary>
+      <description>Whether to use a non-standard character encoding when reading ID3 tags</description>
+      <default>false</default>
+    </key>
+
+    <key name="id3-strip-empty" type="b">
+      <summary>Strip ID3 tags if all ID3 tags are empty</summary>
+      <description>Whether to remove the ID3 tag from the audio file if all the individual tag fields are empty</description>
+      <default>true</default>
+    </key>
+
+    <key name="id3v1-enabled" type="b">
+      <summary>Write ID3v1 tags</summary>
+      <description>Whether to write ID3v1 tags when writing ID3 tags into audio files</description>
+      <default>false</default>
+    </key>
+
+    <key name="id3v1-charset" enum="org.gnome.EasyTAG.EtCharset">
+      <summary>The character set for writing ID3v1 tags</summary>
+      <description>Choose the character set to be used when writing ID3v1 tags</description>
+      <default>'iso-8859-1'</default>
+    </key>
+
+    <key name="id3v1-encoding-option" enum="org.gnome.EasyTAG.EtTagEncoding">
+      <summary>Encoding options when writing ID3v1 tags</summary>
+      <description>Additional options to pass to iconv() when converting between encodings when writing ID3v1 tags</description>
+      <default>'none'</default>
+    </key>
+
+    <key name="id3v1v2-charset" enum="org.gnome.EasyTAG.EtCharset">
+      <summary>The character set for reading ID3v1 and ID3v2 tags</summary>
+      <description>Choose the character set to be used when reading ID3v1 and ID3v2 tags</description>
+      <default>'utf-8'</default>
+    </key>
+
+    <key name="id3v2-enabled" type="b">
+      <summary>Write ID3v2 tags</summary>
+      <description>Whether to write ID3v2 tags when writing ID3 tags into audio files</description>
+      <default>true</default>
+    </key>
+
+    <key name="id3v2-version-4" type="b">
+      <summary>Enable ID3v2.4 support</summary>
+      <description>Whether to write ID3v2.4 tags when ID3v2 support is enabled</description>
+      <default>false</default>
+    </key>
+
+    <key name="id3v2-convert-old" type="b">
+      <summary>Convert old ID3 tag versions to new ones</summary>
+      <description>Whether to convert ID3 tags written against old version of the specification, such as ID3v2.2, to newer ones, such as ID3v2.3 or ID3v2.4</description>
+      <default>true</default>
+    </key>
+
+    <key name="id3v2-compression" type="b">
+      <summary>Compress data in ID3v2 tags</summary>
+      <description>Whether to compress data in ID3v2 tags</description>
+      <default>false</default>
+    </key>
+
+    <key name="id3v2-crc32" type="b">
+      <summary>Use CRC-32 in ID3v2 tags</summary>
+      <description>Whether to embed a CRC-32 checksum of the audio file data in ID3v2 tags</description>
+      <default>true</default>
+    </key>
+
+    <key name="id3v2-text-only-genre" type="b">
+      <summary>Use text-only genre in ID3v2 tags</summary>
+      <description>Whether to use only a string, and not the integer-base ID3v1 genre field, when writing a genre field to ID3v2 tags</description>
+      <default>false</default>
+    </key>
+
+    <key name="id3v2-enable-unicode" type="b">
+      <summary>Use Unicode character encoding in ID3v2 tags</summary>
+      <description>Whether to use a Unicode character set when writing ID3v2 tags</description>
+      <default>true</default>
+    </key>
+
+    <key name="id3v2-unicode-charset" type="s">
+      <summary>The Unicode character set for writing ID3v2 tags</summary>
+      <description>Choose the Unicode character set to be used when writing ID3v2 tags</description>
+      <choices>
+        <choice value="UTF-8" />
+        <choice value="UTF-16" />
+      </choices>
+      <default>'UTF-8'</default>
+    </key>
+
+    <key name="id3v2-no-unicode-charset" enum="org.gnome.EasyTAG.EtCharset">
+      <summary>The character set for writing ID3v2 tags</summary>
+      <description>Override the typical Unicode character set to be used when writing ID3v2 tags</description>
+      <default>'iso-8859-1'</default>
+    </key>
+
+    <key name="id3v2-encoding-option" enum="org.gnome.EasyTAG.EtTagEncoding">
+      <summary>Encoding options when writing ID3v2 tags</summary>
+      <description>Additional options to pass to iconv() when converting between encodings when writing ID3v2 tags</description>
+      <default>'none'</default>
+    </key>
+
+    <key name="tag-date-autocomplete" type="b">
+      <summary>Automatically complete the date</summary>
+      <description>Whether to automatically complete the date tag</description>
+      <default>true</default>
+    </key>
+
+    <key name="tag-disc-padded" type="b">
+      <summary>Pad the disc number tag field</summary>
+      <description>Whether the disc number tag field should be padded with
+      leading zeroes</description>
+      <default>true</default>
+    </key>
+
+    <key name="tag-disc-length" type="u">
+      <summary>The length of the disc number field</summary>
+      <description>The length of the disc number field, which controls if the
+      field is padded with leading zeroes</description>
+      <default>2</default>
+      <range min="0" max="6" />
+    </key>
+
+    <key name="tag-image-type-automatic" type="b">
+      <summary>Automatically select the type of the image based on its filename</summary>
+      <description>Whether to, when adding cover art, automatically select the type for an image based on its filename</description>
+      <default>true</default>
+    </key>
+
+    <key name="tag-number-padded" type="b">
+      <summary>Pad the track number tag field</summary>
+      <description>Whether the track number tag field should be padded with leading zeroes</description>
+      <default>true</default>
+    </key>
+
+    <key name="tag-number-length" type="u">
+      <summary>The length of the track number field</summary>
+      <description>The length of the track number field, which controls if the field is padded with leading zeroes</description>
+      <default>2</default>
+      <range min="0" max="6" />
+    </key>
+
+    <key name="tag-preserve-focus" type="b">
+      <summary>Preserve the tag field focus</summary>
+      <description>Whether to preserve focus on the current tag field when switching file</description>
+      <default>true</default>
+    </key>
+
+    <key name="fill-convert-spaces" enum="org.gnome.EasyTAG.EtConvertSpaces">
+      <summary>Convert spaces and underscores when filling tag fields</summary>
+      <description>Whether to convert to spaces (and %20) or underscores when filling tag fields from filenames</description>
+      <default>'spaces'</default>
+    </key>
+
+    <key name="fill-overwrite-tag-fields" type="b">
+      <summary>Overwrite tag field</summary>
+      <description>Whether to overwrite the tag field values when filling tags. Otherwise, only blank tag fields will be filled</description>
+      <default>true</default>
+    </key>
+
+    <key name="fill-set-default-comment" type="b">
+      <summary>Set the default comment</summary>
+      <description>Whether to set the comment tag field to the provided default value when filling tags</description>
+      <default>true</default>
+    </key>
+
+    <key name="fill-default-comment" type="s">
+      <summary>Default comment for filling tags</summary>
+      <description>The default comment to use when filling tags</description>
+      <default>'Encoded by EasyTAG'</default>
+    </key>
+
+    <key name="fill-crc32-comment" type="b">
+      <summary>Use the CRC-32 as the default comment</summary>
+      <description>Whether to use the CRC-32 of the audio file data as the default comment, for files with ID3 tags only</description>
+      <default>false</default>
+    </key>
+
+    <key name="confirm-quit" type="b">
+      <summary>Confirm before quitting the application</summary>
+      <description>Whether to ask for confirmation from the user before quitting the application</description>
+      <default>false</default>
+    </key>
+
+    <key name="confirm-write-tags" type="b">
+      <summary>Confirm before writing tags</summary>
+      <description>Whether to ask for confirmation from the user before writing tags to audio files</description>
+      <default>false</default>
+    </key>
+
+    <key name="confirm-rename-file" type="b">
+      <summary>Confirm before renaming a file</summary>
+      <description>Whether to ask for confirmation from the user before renaming a file</description>
+      <default>false</default>
+    </key>
+
+    <key name="confirm-write-playlist" type="b">
+      <summary>Confirm before writing a playlist</summary>
+      <description>Whether to ask for confirmation from the user before writing a playlist</description>
+      <default>false</default>
+    </key>
+
+    <key name="confirm-delete-file" type="b">
+      <summary>Confirm before deleting a file</summary>
+      <description>Whether to ask for confirmation from the user before deleting a file</description>
+      <default>true</default>
+    </key>
+
+    <key name="confirm-when-unsaved-files" type="b">
+      <summary>Confirm before losing unsaved changes to files</summary>
+      <description>Whether to ask for confirmation from the user before performing an operation that would lose unsaved changes on files</description>
+      <default>true</default>
+    </key>
+
+    <key name="load-filenames-run-scanner" type="b">
+      <summary>Run the current scanner when loading filenames from a file</summary>
+      <description>Whether to run the current scanner on files loaded from a text file</description>
+      <default>false</default>
+    </key>
+
+    <key name="process-fields" flags="org.gnome.EasyTAG.EtProcessField">
+      <summary>Process these tag fields</summary>
+      <description>The tag fields to process when using the scanner</description>
+      <default>['title','artist','album-artist','album','genre','comment','composer','original-artist','copyright','url','encoded-by']</default>
+    </key>
+
+    <key name="process-convert" enum="org.gnome.EasyTAG.EtProcessFieldsConvert">
+      <summary>Convert tag fields when processing</summary>
+      <description>Whether to convert to spaces (and %20), underscores or other characters when processing tag fields</description>
+      <default>'spaces'</default>
+    </key>
+
+    <key name="process-convert-characters" type="b">
+      <summary>Convert characters in tags</summary>
+      <description>Whether to convert characters of the tag from one value to another when processing tag fields</description>
+      <default>false</default>
+    </key>
+
+    <key name="process-convert-characters-from" type="s">
+      <summary>Convert characters in tags</summary>
+      <description>Convert the following characters when processing tag fields</description>
+      <default>''</default>
+    </key>
+
+    <key name="process-convert-characters-to" type="s">
+      <summary>Convert characters in tags</summary>
+      <description>Replace any matched sequence of characters with this string when processing tag fields</description>
+      <default>''</default>
+    </key>
+
+    <key name="process-lowercase-all" type="b">
+      <summary>Lower-case all characters</summary>
+      <description>Whether to lower-case all characters of the tag when processing tag fields</description>
+      <default>false</default>
+    </key>
+
+    <key name="process-uppercase-all" type="b">
+      <summary>Upper-case all characters</summary>
+      <description>Whether to upper-case all characters of the tag when processing tag fields</description>
+      <default>false</default>
+    </key>
+
+    <key name="process-uppercase-first-letter" type="b">
+      <summary>Upper-case the first letter of the tag</summary>
+      <description>Whether to upper-case the first letter of the tag when processing tag fields</description>
+      <default>false</default>
+    </key>
+
+    <key name="process-uppercase-first-letters" type="b">
+      <summary>Upper-case the first letter of each word</summary>
+      <description>Whether to upper-case the first letter of each word when processing tag fields</description>
+      <default>true</default>
+    </key>
+
+    <key name="process-uppercase-prepositions" type="b">
+      <summary>Upper-case prepositions</summary>
+      <description>Whether to upper-case the first letter of all words, including prepositions and other short words such as “feat.”, when processing tag fields</description>
+      <default>false</default>
+    </key>
+
+    <key name="process-detect-roman-numerals" type="b">
+      <summary>Detect roman numerals</summary>
+      <description>Whether to detect Roman numerals when applying upper-case conversions while processing tag fields</description>
+      <default>true</default>
+    </key>
+
+    <key name="process-remove-spaces" type="b">
+      <summary>Remove spaces</summary>
+      <description>Whether to remove all spaces when processing tag fields</description>
+      <default>false</default>
+    </key>
+
+    <key name="process-insert-capital-spaces" type="b">
+      <summary>Insert spaces before capital letters</summary>
+      <description>Whether to insert spaces before capital letters when processing tag fields</description>
+      <default>false</default>
+    </key>
+
+    <key name="process-remove-duplicate-spaces" type="b">
+      <summary>Remove duplicate spaces</summary>
+      <description>Whether to remove duplicate spaces and underscores when processing tag fields</description>
+      <default>true</default>
+    </key>
+
+    <key name="playlist-filename-mask" type="s">
+      <summary>Playlist filename mask</summary>
+      <description>The default filename mask to use for a new playlist</description>
+      <default>'playlist_%a_-_%b'</default>
+    </key>
+
+    <key name="playlist-use-mask" type="b">
+      <summary>Use a filename mask when generating a playlist</summary>
+      <description>Whether to use a filename mask when creating playlists</description>
+      <default>false</default>
+    </key>
+
+    <key name="playlist-selected-only" type="b">
+      <summary>Create playlists with only the selected files</summary>
+      <description>Whether to use only the selected files or all files when creating playlists</description>
+      <default>false</default>
+    </key>
+
+    <key name="playlist-relative" type="b">
+      <summary>Use relative paths when creating playlists</summary>
+      <description>Whether to use relative paths for files when creating playlists</description>
+      <default>false</default>
+    </key>
+
+    <key name="playlist-parent-directory" type="b">
+      <summary>Create the playlist in the parent directory</summary>
+      <description>Whether to create the playlist in the parent directory</description>
+      <default>false</default>
+    </key>
+
+    <key name="playlist-dos-separator" type="b">
+      <summary>Use DOS separators for playlists</summary>
+      <description>Whether to use backslash as directory separator when generating playlists</description>
+      <default>false</default>
+    </key>
+
+    <key name="playlist-content" enum="org.gnome.EasyTAG.EtPlaylistContent">
+      <summary>Content of generated playlists</summary>
+      <description>Write a plain list of files, include extended information from the filename or extended information using a supplied mask</description>
+      <default>'extended'</default>
+    </key>
+
+    <key name="playlist-default-mask" type="s">
+      <summary>Playlist default mask</summary>
+      <description>The default mask to use for files in a playlist</description>
+      <default>'%n/%l - %a - %b - %t'</default>
+    </key>
+
+    <key name="search-case-sensitive" type="b">
+      <summary>Search for files case-sensitively</summary>
+      <description>Whether matches when searching for files are case-sensitive</description>
+      <default>true</default>
+    </key>
+
+    <key name="search-filename" type="b">
+      <summary>Search in filenames</summary>
+      <description>Perform the search on filenames</description>
+      <default>true</default>
+    </key>
+
+    <key name="search-tag" type="b">
+      <summary>Search in tags</summary>
+      <description>Perform the search on tags</description>
+      <default>true</default>
+    </key>
+
+    <key name="scan-tag-default-mask" type="s">
+      <summary>Mask for filling tags from filenames</summary>
+      <description>The default mask to use when automatically filling tags with information from filenames</description>
+      <default>'%b/%a - %t'</default>
+    </key>
+
+    <key name="rename-file-default-mask" type="s">
+      <summary>Mask for renaming files</summary>
+      <description>The default mask to use when renaming files</description>
+      <default>'%a - %t'</default>
+    </key>
+
+    <key name="rename-directory-default-mask" type="s">
+      <summary>Mask for renaming directories</summary>
+      <description>The default mask to use when renaming directories</description>
+      <default>'%b'</default>
+    </key>
+
+    <key name="rename-directory-with-mask" type="b">
+      <summary>Use a mask when renaming directories</summary>
+      <description>Whether to use a mask when renaming directories</description>
+      <default>true</default>
+    </key>
+
+    <key name="rename-convert-spaces" enum="org.gnome.EasyTAG.EtConvertSpaces">
+      <summary>Convert spaces and underscores when renaming files</summary>
+      <description>Whether to convert to spaces or underscores when renaming files</description>
+      <default>'spaces'</default>
+    </key>
+
+    <key name="rename-extension-mode" enum="org.gnome.EasyTAG.EtFilenameExtensionMode">
+      <summary>How to modify filename extensions when renaming</summary>
+      <description>Change the file extension to all lower-case, all upper-case or do not change it</description>
+      <default>'lower-case'</default>
+    </key>
+
+    <key name="rename-encoding" enum="org.gnome.EasyTAG.EtRenameEncoding">
+      <summary>Encoding options when renaming files</summary>
+      <description>If the encoding of the filename does not match the filesystem encoding, choose whether to try another encoding, approximate the filesystem encoding with transliteration or discard the offending characters</description>
+      <default>'try-alternative'</default>
+    </key>
+
+    <key name="rename-replace-illegal-chars" type="b">
+      <summary>Replace illegal characters when renaming</summary>
+      <description>Whether to replace illegal characters in a filename when using the rename function</description>
+      <default>true</default>
+    </key>
+
+    <key name="scan-mask-editor-show" type="b">
+      <summary>Show the scanner mask editor</summary>
+      <description>Whether to show the scanner mask editor in the tag scanner</description>
+      <default>false</default>
+    </key>
+
+    <key name="scan-legend-show" type="b">
+      <summary>Show the scanner legend</summary>
+      <description>Whether to show the scanner legend in the tag scanner</description>
+      <default>true</default>
+    </key>
+
+    <key name="scan-startup" type="b">
+      <summary>Show the scanner window on startup</summary>
+      <description>Whether to show the scanner window on application startup</description>
+      <default>false</default>
+    </key>
+
+    <key name="scan-mode" enum="org.gnome.EasyTAG.EtScanMode">
+      <summary>The scan mode</summary>
+      <description>Which type of scan to show in the scanner</description>
+      <default>'rename-file'</default>
+    </key>
+
+    <key name="ogg-split-title" type="b">
+      <summary>Split Ogg title fields</summary>
+      <description>Whether to split title fields at a “ - ” separator in Ogg comments</description>
+      <default>false</default>
+    </key>
+
+    <key name="ogg-split-artist" type="b">
+      <summary>Split Ogg artist fields</summary>
+      <description>Whether to split artist fields at a “ - ” separator in Ogg comments</description>
+      <default>false</default>
+    </key>
+
+    <key name="ogg-split-album" type="b">
+      <summary>Split Ogg album fields</summary>
+      <description>Whether to split album fields at a “ - ” separator in Ogg comments</description>
+      <default>false</default>
+    </key>
+
+    <key name="ogg-split-genre" type="b">
+      <summary>Split Ogg genre fields</summary>
+      <description>Whether to split genre fields at a “ - ” separator in Ogg comments</description>
+      <default>false</default>
+    </key>
+
+    <key name="ogg-split-comment" type="b">
+      <summary>Split Ogg comment fields</summary>
+      <description>Whether to split comment fields at a “ - ” separator in Ogg comments</description>
+      <default>false</default>
+    </key>
+
+    <key name="ogg-split-composer" type="b">
+      <summary>Split Ogg composer fields</summary>
+      <description>Whether to split composer fields at a “ - ” separator in Ogg comments</description>
+      <default>false</default>
+    </key>
+
+    <key name="ogg-split-original-artist" type="b">
+      <summary>Split Ogg original artist fields</summary>
+      <description>Whether to split original artist fields at a “ - ” separator in Ogg comments</description>
+      <default>false</default>
+    </key>
+
+    <key name="preferences-page" type="u">
+      <summary>Page to show in the preferences dialog</summary>
+      <description>The page in the notebook of the preferences dialog</description>
+      <default>0</default>
+      <range min="0" max="7" />
+    </key>
+
+  </schema>
+</schemalist>
diff --git a/data/pixmaps/all_downcase.xpm b/data/pixmaps/all_downcase.xpm
deleted file mode 100644
index 136d71c..0000000
--- a/data/pixmaps/all_downcase.xpm
+++ /dev/null
@@ -1,25 +0,0 @@
-/* XPM */
-static char * all_downcase_xpm[] = {
-"20 20 2 1",
-" 	c None",
-".	c #000000",
-"                    ",
-"                    ",
-"                    ",
-"                    ",
-"                    ",
-"                    ",
-"                    ",
-"                    ",
-"  ....  ....  ....  ",
-"     .     .     .  ",
-"  ....  ....  ....  ",
-"  .  .  .  .  .  .  ",
-"  ..... ..... ..... ",
-"                    ",
-"                    ",
-"                    ",
-"                    ",
-"                    ",
-"                    ",
-"                    "};
diff --git a/data/pixmaps/all_uppercase.xpm b/data/pixmaps/all_uppercase.xpm
deleted file mode 100644
index 61f7192..0000000
--- a/data/pixmaps/all_uppercase.xpm
+++ /dev/null
@@ -1,25 +0,0 @@
-/* XPM */
-static char * all_uppercase_xpm[] = {
-"20 20 2 1",
-" 	c None",
-".	c #000000",
-"                    ",
-"                    ",
-"                    ",
-"                    ",
-"                    ",
-"                    ",
-"                    ",
-"  ...   ...   ...   ",
-"   ..    ..    ..   ",
-"  . ..  . ..  . ..  ",
-"  ....  ....  ....  ",
-"  .  .  .  .  .  .  ",
-" .. ..... ..... ... ",
-"                    ",
-"                    ",
-"                    ",
-"                    ",
-"                    ",
-"                    ",
-"                    "};
diff --git a/data/pixmaps/artist.xpm b/data/pixmaps/artist.xpm
deleted file mode 100644
index a1cdf90..0000000
--- a/data/pixmaps/artist.xpm
+++ /dev/null
@@ -1,220 +0,0 @@
-/* XPM */
-static char * artist_xpm[] = {
-"24 24 193 2",
-"  	c None",
-". 	c #1D1802",
-"+ 	c #2C2502",
-"@ 	c #2C2300",
-"# 	c #221C00",
-"$ 	c #211C00",
-"% 	c #655A26",
-"& 	c #D5B935",
-"* 	c #F7D636",
-"= 	c #F7D530",
-"- 	c #F0CD23",
-"; 	c #CCAC11",
-"> 	c #4F4100",
-", 	c #1A1500",
-"' 	c #8E813D",
-") 	c #F9DE5B",
-"! 	c #F9E067",
-"~ 	c #F9E069",
-"{ 	c #F9DF60",
-"] 	c #F8DB4E",
-"^ 	c #F7D637",
-"/ 	c #F6D11C",
-"( 	c #846E00",
-"_ 	c #1B1700",
-": 	c #48411E",
-"< 	c #F9E065",
-"[ 	c #FAE581",
-"} 	c #FBEA97",
-"| 	c #FBEB9C",
-"1 	c #FAE78B",
-"2 	c #F9E270",
-"3 	c #F8DC52",
-"4 	c #F7D532",
-"5 	c #F6CF12",
-"6 	c #6A5700",
-"7 	c #B6A13E",
-"8 	c #F9E16E",
-"9 	c #FBE88E",
-"0 	c #FCEEAD",
-"a 	c #FCF0B7",
-"b 	c #FBEA9A",
-"c 	c #FAE479",
-"d 	c #F8DD59",
-"e 	c #F4D124",
-"f 	c #F2CC13",
-"g 	c #D5B100",
-"h 	c #221B00",
-"i 	c #D9BD32",
-"j 	c #F8DA4B",
-"k 	c #F7DC5B",
-"l 	c #FAE685",
-"m 	c #FAE788",
-"n 	c #FAE47C",
-"o 	c #F8DA4A",
-"p 	c #6A5C19",
-"q 	c #816C07",
-"r 	c #F5CB00",
-"s 	c #302800",
-"t 	c #211B00",
-"u 	c #CCAD14",
-"v 	c #60520E",
-"w 	c #3B3213",
-"x 	c #E4C42B",
-"y 	c #F8DB4F",
-"z 	c #F8D840",
-"A 	c #F7D42B",
-"B 	c #564813",
-"C 	c #282109",
-"D 	c #312800",
-"E 	c #201B02",
-"F 	c #413828",
-"G 	c #837064",
-"H 	c #3A311E",
-"I 	c #453A12",
-"J 	c #92790B",
-"K 	c #B99B05",
-"L 	c #D4B001",
-"M 	c #3A310D",
-"N 	c #3C3426",
-"O 	c #8D7400",
-"P 	c #1C1A16",
-"Q 	c #D4B7A2",
-"R 	c #D3B5A0",
-"S 	c #D0B39E",
-"T 	c #C4A895",
-"U 	c #907C6E",
-"V 	c #746350",
-"W 	c #5D5038",
-"X 	c #786755",
-"Y 	c #BBA18F",
-"Z 	c #201C0B",
-"` 	c #231E1B",
-" .	c #D6B8A3",
-"..	c #F4D2BA",
-"+.	c #E7C6B0",
-"@.	c #211E1A",
-"#.	c #6B5C53",
-"$.	c #806E61",
-"%.	c #0D1319",
-"&.	c #5B524A",
-"*.	c #F2D0B9",
-"=.	c #9B8677",
-"-.	c #161311",
-";.	c #060F1A",
-">.	c #2A5984",
-",.	c #25547E",
-"'.	c #0D1721",
-").	c #5C5049",
-"!.	c #B39A88",
-"~.	c #8D786B",
-"{.	c #3D342F",
-"].	c #101417",
-"^.	c #081825",
-"/.	c #0C2336",
-"(.	c #7BB4E7",
-"_.	c #93C1EB",
-":.	c #68A6DF",
-"<.	c #20415F",
-"[.	c #15181B",
-"}.	c #707070",
-"|.	c #C8C8C8",
-"1.	c #141F27",
-"2.	c #2F81CB",
-"3.	c #07141F",
-"4.	c #3C6F9D",
-"5.	c #ABCFF0",
-"6.	c #B8D7F2",
-"7.	c #90C0EB",
-"8.	c #27425B",
-"9.	c #777A7C",
-"0.	c #E9E9E9",
-"a.	c #0D1F2F",
-"b.	c #328ADA",
-"c.	c #173E62",
-"d.	c #07141E",
-"e.	c #75ADE0",
-"f.	c #B3D4F1",
-"g.	c #C6DEF5",
-"h.	c #B2D3F1",
-"i.	c #96C3EC",
-"j.	c #75B0E5",
-"k.	c #182F45",
-"l.	c #0B151F",
-"m.	c #2465A0",
-"n.	c #276CAA",
-"o.	c #05101A",
-"p.	c #081724",
-"q.	c #79B2E7",
-"r.	c #9CC7ED",
-"s.	c #A4CBEF",
-"t.	c #9BC6ED",
-"u.	c #89BCEA",
-"v.	c #71AEE5",
-"w.	c #559EE0",
-"x.	c #398EDB",
-"y.	c #2B78BD",
-"z.	c #06141F",
-"A.	c #0A1D2E",
-"B.	c #69A9E4",
-"C.	c #7EB5E8",
-"D.	c #82B8E9",
-"E.	c #70ADE5",
-"F.	c #5DA3E2",
-"G.	c #4896DE",
-"H.	c #2F82CD",
-"I.	c #071320",
-"J.	c #081826",
-"K.	c #529CE0",
-"L.	c #5DA2E2",
-"M.	c #61A5E2",
-"N.	c #539DE0",
-"O.	c #4495DD",
-"P.	c #286EAE",
-"Q.	c #05111C",
-"R.	c #07121B",
-"S.	c #205789",
-"T.	c #3C90DC",
-"U.	c #3F91DC",
-"V.	c #348BDA",
-"W.	c #3289D9",
-"X.	c #102D46",
-"Y.	c #051119",
-"Z.	c #102D47",
-"`.	c #276CAB",
-" +	c #2669A6",
-".+	c #0C2337",
-"++	c #07111B",
-"@+	c #071521",
-"#+	c #0A1B2B",
-"$+	c #0B1E31",
-"%+	c #0A1C2B",
-"&+	c #081623",
-"*+	c #06111C",
-"                                                ",
-"                  . + @ # $                     ",
-"                % & * = - ; > ,                 ",
-"              ' ) ! ~ { ] ^ / ( _               ",
-"            : < [ } | 1 2 3 4 5 6               ",
-"            7 8 9 0 a b c d e f g #             ",
-"          h i j k l m n < o p q r s             ",
-"          t u v w x ] y z A B C r D             ",
-"            E F G H I J K L M N O $             ",
-"            P Q R S T U V W X Y Z               ",
-"            `  ...............+. at .              ",
-"              #...............$.                ",
-"              %.&.*.........=.-.                ",
-"            ;.>.,.'.).!.~.{.].^.                ",
-"            /.(._.:.<.[.}.|.1.2.3.              ",
-"            4.5.6.5.7.8.9.0.a.b.c.              ",
-"          d.e.f.g.h.i.j.k.l.m.b.n.o.            ",
-"          p.q.r.s.t.u.v.w.x.b.b.y.z.            ",
-"          A.B.C.D.C.E.F.G.b.b.b.H.I.            ",
-"          J.K.L.M.L.N.O.b.b.b.b.P.Q.            ",
-"          R.S.T.U.T.V.b.b.b.b.W.X.              ",
-"            Y.Z.`.b.b.b.b.W. +.+                ",
-"                ++ at +#+$+%+&+*+                  ",
-"                                                "};
diff --git a/data/pixmaps/artist_album.xpm b/data/pixmaps/artist_album.xpm
deleted file mode 100644
index d31026c..0000000
--- a/data/pixmaps/artist_album.xpm
+++ /dev/null
@@ -1,348 +0,0 @@
-/* XPM */
-static char * artist_album_xpm[] = {
-"24 24 321 2",
-"  	c None",
-". 	c #292201",
-"+ 	c #362D00",
-"@ 	c #2A2300",
-"# 	c #272000",
-"$ 	c #28230A",
-"% 	c #9C892E",
-"& 	c #ECCD37",
-"* 	c #F7D636",
-"= 	c #F7D42C",
-"- 	c #E1C01B",
-"; 	c #977E05",
-"> 	c #211C00",
-", 	c #2C260B",
-"' 	c #C7B24A",
-") 	c #F9DF62",
-"! 	c #F9E16D",
-"~ 	c #F9E16B",
-"{ 	c #F9DE5C",
-"] 	c #F8D945",
-"^ 	c #F7D329",
-"/ 	c #CBAA0A",
-"( 	c #282100",
-"_ 	c #786C31",
-": 	c #F9E16C",
-"< 	c #FAE78B",
-"[ 	c #FBECA2",
-"} 	c #FBEB9D",
-"| 	c #FAE682",
-"1 	c #F8D840",
-"2 	c #F6D11D",
-"3 	c #AD8F00",
-"4 	c #1E1900",
-"5 	c #D2BA47",
-"6 	c #F9E271",
-"7 	c #FBE992",
-"8 	c #FCEEAE",
-"9 	c #FCEDA7",
-"0 	c #FAE788",
-"a 	c #F9E066",
-"b 	c #EECE35",
-"c 	c #D1B111",
-"d 	c #F2C900",
-"e 	c #2B2300",
-"f 	c #E6C734",
-"g 	c #D6B82B",
-"h 	c #EACE43",
-"i 	c #FAE47B",
-"j 	c #FAE479",
-"k 	c #F9E068",
-"l 	c #F8DB4F",
-"m 	c #C1A521",
-"n 	c #251F05",
-"o 	c #F5CB00",
-"p 	c #3B3100",
-"q 	c #8E770A",
-"r 	c #302813",
-"s 	c #393016",
-"t 	c #BD9F0E",
-"u 	c #F5D32E",
-"v 	c #F7D531",
-"w 	c #F7D327",
-"x 	c #AB9009",
-"y 	c #0F0D08",
-"z 	c #D3AF00",
-"A 	c #201B09",
-"B 	c #937E70",
-"C 	c #A18A7B",
-"D 	c #6A5A49",
-"E 	c #453B1F",
-"F 	c #4E4117",
-"G 	c #4F4317",
-"H 	c #3A3111",
-"I 	c #67594E",
-"J 	c #211C06",
-"K 	c #3E4826",
-"L 	c #6FA572",
-"M 	c #569659",
-"N 	c #519255",
-"O 	c #5F9D63",
-"P 	c #71A974",
-"Q 	c #89B98C",
-"R 	c #302A25",
-"S 	c #F0CFB7",
-"T 	c #EDCCB5",
-"U 	c #EACAB3",
-"V 	c #E8C7B1",
-"W 	c #E5C5AE",
-"X 	c #E3C3AD",
-"Y 	c #E0C1AB",
-"Z 	c #DDBEA8",
-"` 	c #3B3B30",
-" .	c #3C7A3E",
-"..	c #3D7B40",
-"+.	c #427E45",
-"@.	c #48814B",
-"#.	c #4C8550",
-"$.	c #538855",
-"%.	c #5A905E",
-"&.	c #76AA7A",
-"*.	c #9EC3A0",
-"=.	c #25201D",
-"-.	c #DBBDA7",
-";.	c #F4D2BA",
-">.	c #EECDB6",
-",.	c #313A2A",
-"'.	c #509154",
-").	c #57955A",
-"!.	c #5D9961",
-"~.	c #659E67",
-"{.	c #6AA26D",
-"].	c #71A775",
-"^.	c #78AB7B",
-"/.	c #7FB081",
-"(.	c #88B88B",
-"_.	c #A7CAAA",
-":.	c #342C28",
-"<.	c #F1CFB8",
-"[.	c #5E584A",
-"}.	c #548555",
-"|.	c #6FAE72",
-"1.	c #76B279",
-"2.	c #7CB57F",
-"3.	c #83B985",
-"4.	c #89BD8C",
-"5.	c #90C192",
-"6.	c #96C498",
-"7.	c #9CC89F",
-"8.	c #A3CCA5",
-"9.	c #A9D0AB",
-"0.	c #BFD8C0",
-"a.	c #11293F",
-"b.	c #101B26",
-"c.	c #88776C",
-"d.	c #F2D0B9",
-"e.	c #CCAF9B",
-"f.	c #3E3931",
-"g.	c #0C1519",
-"h.	c #628D65",
-"i.	c #84BA87",
-"j.	c #8BBE8D",
-"k.	c #91C294",
-"l.	c #98C59A",
-"m.	c #9EC9A0",
-"n.	c #A4CDA7",
-"o.	c #ABD1AD",
-"p.	c #B1D4B3",
-"q.	c #B8D8BA",
-"r.	c #BEDCC0",
-"s.	c #C5DFC6",
-"t.	c #D3E1D4",
-"u.	c #0A1D2D",
-"v.	c #76B0E5",
-"w.	c #6AA8E1",
-"x.	c #285278",
-"y.	c #0F171E",
-"z.	c #302B28",
-"A.	c #3F3E3A",
-"B.	c #5F5F60",
-"C.	c #205381",
-"D.	c #1C3035",
-"E.	c #97C49A",
-"F.	c #A0CAA2",
-"G.	c #A4CCA6",
-"H.	c #B0C5B1",
-"I.	c #BACBBC",
-"J.	c #B8D4BA",
-"K.	c #C0DDC2",
-"L.	c #C6E0C8",
-"M.	c #CDE4CE",
-"N.	c #D3E8D5",
-"O.	c #DAECDB",
-"P.	c #E2EFE3",
-"Q.	c #3D6E9C",
-"R.	c #A7CDEF",
-"S.	c #ADD0F0",
-"T.	c #9CC7ED",
-"U.	c #5382AD",
-"V.	c #2D353B",
-"W.	c #FFFFFF",
-"X.	c #2F383F",
-"Y.	c #2C79BF",
-"Z.	c #23527B",
-"`.	c #7F9981",
-" +	c #B2D3B5",
-".+	c #B2B5B2",
-"++	c #D5D5D5",
-"@+	c #DADADA",
-"#+	c #CBCBCB",
-"$+	c #D6E2D6",
-"%+	c #DBEDDC",
-"&+	c #E2F0E3",
-"*+	c #E8F4E9",
-"=+	c #3D7A40",
-"-+	c #48824A",
-";+	c #081623",
-">+	c #7BB1E2",
-",+	c #BAD8F3",
-"'+	c #C8E0F5",
-")+	c #ABCFF0",
-"!+	c #8CBDEA",
-"~+	c #3A658B",
-"{+	c #172027",
-"]+	c #142B3E",
-"^+	c #328ADA",
-"/+	c #2C7AC1",
-"(+	c #4A5C5B",
-"_+	c #C2D2C3",
-":+	c #DEDEDE",
-"<+	c #EDEDED",
-"[+	c #D2D4D3",
-"}+	c #417E44",
-"|+	c #4A844D",
-"1+	c #558C57",
-"2+	c #5F9361",
-"3+	c #699B6C",
-"4+	c #96B597",
-"5+	c #0A1C2C",
-"6+	c #85B9E9",
-"7+	c #A3CBEE",
-"8+	c #A9CEEF",
-"9+	c #9BC6ED",
-"0+	c #82B8E9",
-"a+	c #66A8E3",
-"b+	c #3E89CC",
-"c+	c #3188D7",
-"d+	c #3289D8",
-"e+	c #3F4E53",
-"f+	c #D5E0D7",
-"g+	c #E8E8E8",
-"h+	c #639465",
-"i+	c #6C9D6E",
-"j+	c #76A579",
-"k+	c #81AC83",
-"l+	c #8BB48D",
-"m+	c #A9C2AA",
-"n+	c #0C2134",
-"o+	c #72AFE6",
-"p+	c #86BAE9",
-"q+	c #7EB5E8",
-"r+	c #6CABE4",
-"s+	c #569FE1",
-"t+	c #3C90DC",
-"u+	c #193331",
-"v+	c #458048",
-"w+	c #7E987F",
-"x+	c #95A395",
-"y+	c #83AE85",
-"z+	c #8EB690",
-"A+	c #98BE9A",
-"B+	c #A3C5A4",
-"C+	c #ADCDAF",
-"D+	c #BBCEBC",
-"E+	c #0B1D2E",
-"F+	c #559EE0",
-"G+	c #60A4E2",
-"H+	c #62A6E3",
-"I+	c #5DA2E2",
-"J+	c #509BDF",
-"K+	c #3E91DC",
-"L+	c #2E80CB",
-"M+	c #203A34",
-"N+	c #669969",
-"O+	c #739F75",
-"P+	c #8BA98D",
-"Q+	c #8D9F8E",
-"R+	c #98AF99",
-"S+	c #9BBE9D",
-"T+	c #A5C7A7",
-"U+	c #B0CFB1",
-"V+	c #BAD7BC",
-"W+	c #C4DEC6",
-"X+	c #CFE6D0",
-"Y+	c #C8D5C9",
-"Z+	c #07131E",
-"`+	c #245E94",
-" @	c #3F91DC",
-".@	c #3A8FDB",
-"+@	c #1D4769",
-"@@	c #57775B",
-"#@	c #89B28B",
-"$@	c #93BA95",
-"%@	c #9DC29F",
-"&@	c #A8C9AA",
-"*@	c #B2D1B4",
-"=@	c #BDD9BE",
-"-@	c #C7E0C8",
-";@	c #D1E8D2",
-">@	c #D3E9D4",
-",@	c #D4EAD5",
-"'@	c #07121C",
-")@	c #0E283F",
-"!@	c #1D5180",
-"~@	c #2A75B9",
-"{@	c #276BA9",
-"]@	c #1B394D",
-"^@	c #4E675A",
-"/@	c #A0C3A1",
-"(@	c #AACBAC",
-"_@	c #B5D3B6",
-":@	c #BFDAC0",
-"<@	c #CAE2CB",
-"[@	c #C6D3C7",
-"}@	c #091927",
-"|@	c #0A1B2B",
-"1@	c #091825",
-"2@	c #0C161C",
-"3@	c #9CB39D",
-"4@	c #B7D5B9",
-"5@	c #C2DDC3",
-"6@	c #CCE4CD",
-"7@	c #D5E8D6",
-"8@	c #CBDBCC",
-"9@	c #CDDDCE",
-"0@	c #676E67",
-"a@	c #CCDCCD",
-"b@	c #D4E9D5",
-"c@	c #D0E2D1",
-"d@	c #AEBBAF",
-"e@	c #7C857C",
-"f@	c #8C968C",
-"        . + @ #                                 ",
-"    $ % & * = - ; >                             ",
-"  , ' ) ! ~ { ] ^ / (                           ",
-"  _ : < [ } | ) 1 2 3                           ",
-"4 5 6 7 8 9 0 a b c d e                         ",
-"# f g h i j k l m n o p                         ",
-"  q r s t u v w x y z @                         ",
-"  A B C D E F G H I J K L M N O P Q             ",
-"  R S T U V W X Y Z `  ...+. at .#.$.%.&.*.        ",
-"  =.-.;.;.;.;.;.;.>.,.'.).!.~.{.].^./.(._.      ",
-"    :.<.;.;.;.;.;.[.}.|.1.2.3.4.5.6.7.8.9.0.    ",
-"    a.b.c.S d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.  ",
-"  u.v.w.x.y.z.A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.  ",
-"  Q.R.S.T.U.V.W.X.Y.Z.`. +.+++ at +#+$+%+&+*+=+-+  ",
-";+>+,+'+)+!+~+{+]+^+/+(+_+:+    <+[+}+|+1+2+3+4+",
-"5+6+7+8+9+0+a+b+c+^+d+e+f+g+        h+i+j+k+l+m+",
-"n+o+0+p+q+r+s+t+^+^+^+u+v+w+      x+y+z+A+B+C+D+",
-"E+F+G+H+I+J+K+^+^+^+L+M+N+O+P+Q+R+S+T+U+V+W+X+Y+",
-"Z+`+t+ @.@^+^+^+^+^++@@@#@$@%@&@*@=@-@;@>@>@,@  ",
-"  '@)@!@~@^+^+^+{@]@^@/@(@_@:@<@>@>@>@>@>@>@[@  ",
-"        Z+}@|@1 at 2@3 at 4@5 at 6@>@>@>@>@>@>@>@>@7@    ",
-"                    8@>@>@>@>@>@>@>@>@>@9@      ",
-"                      0 at a@>@>@>@>@b at c@d@        ",
-"                              e at f@              "};
diff --git a/data/pixmaps/first_letter_uppercase.xpm b/data/pixmaps/first_letter_uppercase.xpm
deleted file mode 100644
index 4777c54..0000000
--- a/data/pixmaps/first_letter_uppercase.xpm
+++ /dev/null
@@ -1,25 +0,0 @@
-/* XPM */
-static char * first_letter_uppercase_xpm[] = {
-"20 20 2 1",
-" 	c None",
-".	c #000000",
-"                    ",
-"                    ",
-"                    ",
-"                    ",
-"                    ",
-"                    ",
-"                    ",
-"  ...               ",
-"   ..         ....  ",
-"  . ..           .  ",
-"  ....        ....  ",
-"  .  .        .  .  ",
-" .. ...       ..... ",
-"                    ",
-"                    ",
-"                    ",
-"                    ",
-"                    ",
-"                    ",
-"                    "};
diff --git a/data/pixmaps/first_letter_uppercase_word.xpm b/data/pixmaps/first_letter_uppercase_word.xpm
deleted file mode 100644
index 17509ed..0000000
--- a/data/pixmaps/first_letter_uppercase_word.xpm
+++ /dev/null
@@ -1,25 +0,0 @@
-/* XPM */
-static char * first_letter_uppercase_word_xpm[] = {
-"20 20 2 1",
-" 	c None",
-".	c #000000",
-"                    ",
-"                    ",
-"                    ",
-"                    ",
-"                    ",
-"                    ",
-"                    ",
-"  ...         ...   ",
-"   ..          ..   ",
-"  . ..        . ..  ",
-"  ....        ....  ",
-"  .  .        .  .  ",
-" .. ...      .. ... ",
-"                    ",
-"                    ",
-"                    ",
-"                    ",
-"                    ",
-"                    ",
-"                    "};
diff --git a/data/pixmaps/freedb.xpm b/data/pixmaps/freedb.xpm
deleted file mode 100644
index e995153..0000000
--- a/data/pixmaps/freedb.xpm
+++ /dev/null
@@ -1,86 +0,0 @@
-/* XPM */
-static const char * freedb_xpm[] = {
-"16 16 67 1",
-" 	c None",
-".	c #C8D4E6",
-"+	c #D0DAEA",
-"@	c #829DC6",
-"#	c #7492C0",
-"$	c #7392C0",
-"%	c #9BB1D1",
-"&	c #D7DFEC",
-"*	c #EDF1F7",
-"=	c #AABDD9",
-"-	c #FEFEFE",
-";	c #FFFFFF",
-">	c #F9FAFC",
-",	c #456EAB",
-"'	c #94ACCE",
-")	c #6889BA",
-"!	c #4E75AF",
-"~	c #94ABCE",
-"{	c #6284B8",
-"]	c #587CB3",
-"^	c #CDD8E8",
-"/	c #B2C3DC",
-"(	c #95ACCF",
-"_	c #7694C1",
-":	c #849FC7",
-"<	c #A4B8D6",
-"[	c #7493C0",
-"}	c #C5D2E5",
-"|	c #7593C0",
-"1	c #859FC7",
-"2	c #CFD9E9",
-"3	c #99AFD1",
-"4	c #B8C7DE",
-"5	c #9AB0D1",
-"6	c #CDD7E8",
-"7	c #9FB4D3",
-"8	c #B7C6DE",
-"9	c #BECCE1",
-"0	c #7795C1",
-"a	c #7F9BC5",
-"b	c #7190BE",
-"c	c #A2B7D5",
-"d	c #BBCAE0",
-"e	c #9EB3D3",
-"f	c #C0CDE2",
-"g	c #B1C2DC",
-"h	c #88A2C9",
-"i	c #ADBFDA",
-"j	c #C6D2E5",
-"k	c #EFF2F7",
-"l	c #F0F4F8",
-"m	c #F2F5F9",
-"n	c #EEF2F7",
-"o	c #EDF1F6",
-"p	c #F0F3F8",
-"q	c #EAEFF5",
-"r	c #28579E",
-"s	c #24549C",
-"t	c #29589E",
-"u	c #28589E",
-"v	c #27569D",
-"w	c #DDE5EF",
-"x	c #D6DFEC",
-"y	c #D6DFED",
-"z	c #D4DDEB",
-"A	c #D3DCEB",
-"B	c #E0E7F1",
-"                ",
-"                ",
-"                ",
-"                ",
-"                ",
-" .+++++++@#$#$#%",
-"&*=-;;;;>,')!~{]",
-"^/(_:_<[}|12345@",
-"6789[0abc7defghi",
-"jklmnopqarrstuvw",
-" xyyyyyxzAAAAAB ",
-"                ",
-"                ",
-"                ",
-"                ",
-"                "};
diff --git a/data/pixmaps/gnudb.xpm b/data/pixmaps/gnudb.xpm
deleted file mode 100644
index c0afcc3..0000000
--- a/data/pixmaps/gnudb.xpm
+++ /dev/null
@@ -1,91 +0,0 @@
-/* XPM */
-static const char * gnudb_xpm[] = {
-"16 16 72 1",
-" 	c None",
-".	c #F9FAFF",
-"+	c #F4F5FF",
-"@	c #F5F6FF",
-"#	c #F6F7FF",
-"$	c #F7F8FF",
-"%	c #F8F9FF",
-"&	c #F2F3FF",
-"*	c #F3F4FF",
-"=	c #C5CDE4",
-"-	c #9EABCC",
-";	c #A3B0D0",
-">	c #DEE2F3",
-",	c #7C8EB8",
-"'	c #647AAA",
-")	c #B2BCD9",
-"!	c #7689B5",
-"~	c #7285B2",
-"{	c #C1C9E1",
-"]	c #BFC7E0",
-"^	c #A4B0D0",
-"/	c #788BB6",
-"(	c #687DAC",
-"_	c #576FA2",
-":	c #7B8DB8",
-"<	c #B9C2DD",
-"[	c #B1BBD8",
-"}	c #C8CFE6",
-"|	c #9BA9CB",
-"1	c #ACB7D5",
-"2	c #AEB9D6",
-"3	c #697DAC",
-"4	c #DFE3F4",
-"5	c #BAC3DD",
-"6	c #99A7C9",
-"7	c #E8EBF9",
-"8	c #8E9EC3",
-"9	c #CFD5EA",
-"0	c #8596BE",
-"a	c #657AAA",
-"b	c #B7C0DC",
-"c	c #AFB9D6",
-"d	c #B3BDD9",
-"e	c #798CB6",
-"f	c #8D9CC2",
-"g	c #899AC0",
-"h	c #7488B4",
-"i	c #5D74A6",
-"j	c #94A3C6",
-"k	c #A8B4D2",
-"l	c #D9DEF0",
-"m	c #9EABCD",
-"n	c #EAECFA",
-"o	c #EBEDFB",
-"p	c #D8DDEF",
-"q	c #DDE1F2",
-"r	c #DCE0F2",
-"s	c #E6E9F8",
-"t	c #DBE0F1",
-"u	c #D6DBEE",
-"v	c #EFF0FD",
-"w	c #F0F1FE",
-"x	c #B6BFDB",
-"y	c #C3CBE2",
-"z	c #F1F3FF",
-"A	c #F1F2FF",
-"B	c #EBECFF",
-"C	c #ECEDFF",
-"D	c #EDEEFF",
-"E	c #EEEFFF",
-"F	c #EFF0FF",
-"G	c #F0F1FF",
-"................",
-"+@##$$%%........",
-"&&&&&&&&&**++++@",
-"&&&&&&&&&&&&&&&&",
-"&&&&&&&&&&&&&&&&",
-"&&&&&&&&&&&=-;&&",
-">,')!~{)]^/(-_:<",
-"[}|1[211<345-678",
-"90a1bcd,efgh-ijk",
-"lme4n7opqnprstuv",
-"wxyz&&&&&&&&&&&&",
-"&&&&&&&&&&&&&&&&",
-"A&&&&&&&&&&&&&&&",
-"BCCDEFFGAA&&&&&&",
-"BBBBBBBBBBCDDEFG",
-"BBBBBBBBBBBBBBBB"};
diff --git a/data/pixmaps/invert_selection.xpm b/data/pixmaps/invert_selection.xpm
deleted file mode 100644
index a760b01..0000000
--- a/data/pixmaps/invert_selection.xpm
+++ /dev/null
@@ -1,27 +0,0 @@
-/* XPM */
-static const char const * invert_selection_xpm[] = {
-"20 20 4 1",
-" 	c None",
-".	c #000000",
-"+	c #8D8DEC",
-"@	c #5D5DE4",
-"                    ",
-"                    ",
-"  ................  ",
-"  .              .  ",
-"  .              .  ",
-"  ................  ",
-"  .              .  ",
-"  .              .  ",
-"  ................  ",
-"  .              .  ",
-"  .              .  ",
-"  ................  ",
-"  .++++++++++++++.  ",
-"  .@@@@@@@@@@@@@@.  ",
-"  ................  ",
-"  .++++++++++++++.  ",
-"  .@@@@@@@@@@@@@@.  ",
-"  ................  ",
-"                    ",
-"                    "};
diff --git a/data/pixmaps/mask.xpm b/data/pixmaps/mask.xpm
deleted file mode 100644
index 7e2c170..0000000
--- a/data/pixmaps/mask.xpm
+++ /dev/null
@@ -1,123 +0,0 @@
-/* XPM */
-static char * mask_xpm[] = {
-"20 20 100 2",
-"  	c None",
-". 	c #000000",
-"+ 	c #B892F1",
-"@ 	c #8559C9",
-"# 	c #DCCB94",
-"$ 	c #B48DEE",
-"% 	c #8B60CD",
-"& 	c #885CCA",
-"* 	c #8E7D45",
-"= 	c #B690F0",
-"- 	c #B38CED",
-"; 	c #AF88EA",
-"> 	c #AB83E7",
-", 	c #A77FE4",
-"' 	c #A47BE1",
-") 	c #A077DE",
-"! 	c #9C73DB",
-"~ 	c #996FD8",
-"{ 	c #956BD5",
-"] 	c #9166D2",
-"^ 	c #8E62CF",
-"/ 	c #8A5ECC",
-"( 	c #B58EEF",
-"_ 	c #B18AEC",
-": 	c #AD86E9",
-"< 	c #AA82E6",
-"[ 	c #A67EE3",
-"} 	c #A27AE0",
-"| 	c #9F75DD",
-"1 	c #9B71DA",
-"2 	c #976DD7",
-"3 	c #9469D4",
-"4 	c #9065D1",
-"5 	c #8C61CE",
-"6 	c #B791F0",
-"7 	c #B38DED",
-"8 	c #B089EA",
-"9 	c #AC84E8",
-"0 	c #A880E5",
-"a 	c #A57CE2",
-"b 	c #A178DF",
-"c 	c #9D74DC",
-"d 	c #9A70D9",
-"e 	c #966CD6",
-"f 	c #9267D3",
-"g 	c #9165D2",
-"h 	c #040206",
-"i 	c #B68FEF",
-"j 	c #B28BEC",
-"k 	c #AE87E9",
-"l 	c #4A356B",
-"m 	c #A076DE",
-"n 	c #9C72DB",
-"o 	c #986ED8",
-"p 	c #946AD5",
-"q 	c #4E3871",
-"r 	c #8356C8",
-"s 	c #B48EEE",
-"t 	c #B18AEB",
-"u 	c #AD85E8",
-"v 	c #9E75DC",
-"w 	c #9A71D9",
-"x 	c #976CD7",
-"y 	c #9368D4",
-"z 	c #8154C6",
-"A 	c #AB84E7",
-"B 	c #A880E4",
-"C 	c #9D73DB",
-"D 	c #8356C7",
-"E 	c #AE86E9",
-"F 	c #A37AE0",
-"G 	c #9F76DD",
-"H 	c #9B72DA",
-"I 	c #D4C38D",
-"J 	c #8559C8",
-"K 	c #AC85E8",
-"L 	c #A981E5",
-"M 	c #9E74DC",
-"N 	c #9368D3",
-"O 	c #0E0914",
-"P 	c #261A38",
-"Q 	c #875BCA",
-"R 	c #8457C7",
-"S 	c #956AD5",
-"T 	c #8D62CF",
-"U 	c #865AC9",
-"V 	c #8255C6",
-"W 	c #A67DE3",
-"X 	c #A279E0",
-"Y 	c #9E75DD",
-"Z 	c #966BD6",
-"` 	c #8E63D0",
-" .	c #8B5FCD",
-"..	c #8558C8",
-"+.	c #A178DE",
-"@.	c #9D73DC",
-"#.	c #986ED7",
-"$.	c #9C72DA",
-"%.	c #8F64D0",
-"&.	c #8457C8",
-"                                        ",
-"                                        ",
-"  .                             .   .   ",
-". + . .                     . . @ . # . ",
-". + + $ . . . . . . . . . . % & . # * . ",
-". + = - ; > , ' ) ! ~ { ] ^ / . # * .   ",
-". + ( _ : < [ } | 1 2 3 4 5 . # * .     ",
-". 6 7 8 9 0 a b c d e f g . # * . h     ",
-". i j k l . l m n o p q . # * . r .     ",
-". s t u l . l v w x y . # * . z z .     ",
-"  . ; A B ' ) C ~ p . # * . D z .       ",
-"  . E < [ F G H x . I * . J z z .       ",
-"  . K L a b M d e N O P Q R z z .       ",
-"    . , ' ) ! o S ] T / U V z .         ",
-"    . W X Y l Z f `  .l ..z z .         ",
-"      . +. at .#.. . . . @ D z .           ",
-"        . $.#.Z %.% & &.V .             ",
-"          . e N %.% & &..               ",
-"            . ] ^ / U .                 ",
-"              . . . .                   "};
diff --git a/data/pixmaps/musicbrainz.xpm b/data/pixmaps/musicbrainz.xpm
deleted file mode 100644
index 7fb74cf..0000000
--- a/data/pixmaps/musicbrainz.xpm
+++ /dev/null
@@ -1,36 +0,0 @@
-/* XPM */
-static const char * musicbrainz_xpm[] = {
-"16 16 17 1",
-" 	c None",
-".	c #736CAE",
-"+	c #1A1624",
-"@	c #000000",
-"#	c #474C49",
-"$	c #29292E",
-"%	c #6E6E77",
-"&	c #CBD6CF",
-"*	c #FDFFFF",
-"=	c #9C9E93",
-"-	c #BDBDBC",
-";	c #616259",
-">	c #FFFFFF",
-",	c #4D4A64",
-"'	c #FFC961",
-")	c #AC833E",
-"!	c #A1A9A4",
-" .........+@#$. ",
-".......$@+%&*@..",
-".....$@$=****@..",
-"....$#-******@..",
-".... at -***&;@*@..",
-"....@>*=$@+@*@..",
-"....@>+@$,,@*@..",
-"....@>@,+@@@*@..",
-"....@>@@#&***@..",
-"''''@>@$****&@''",
-"')+@@>@+!**=$$''",
-")+%--&@$@@@@$'''",
-"@&****@'''''''''",
-"@&***#+'''''''''",
-")@$#@+''''''''''",
-" '))''''''''''' "};
diff --git a/data/pixmaps/red_lines.xpm b/data/pixmaps/red_lines.xpm
deleted file mode 100644
index 7b536d8..0000000
--- a/data/pixmaps/red_lines.xpm
+++ /dev/null
@@ -1,25 +0,0 @@
-/* XPM */
-static char * red_lines_xpm[] = {
-"20 20 2 1",
-" 	c None",
-".	c #FF0000",
-"                    ",
-"                    ",
-"                    ",
-"  ..........        ",
-"  ................  ",
-"                    ",
-"  ................  ",
-"                    ",
-"                    ",
-"                    ",
-"  ............      ",
-"  ................  ",
-"                    ",
-"  ......            ",
-"                    ",
-"  ..............    ",
-"                    ",
-"  ................  ",
-"                    ",
-"                    "};
diff --git a/data/pixmaps/sequence_track.xpm b/data/pixmaps/sequence_track.xpm
deleted file mode 100644
index a429450..0000000
--- a/data/pixmaps/sequence_track.xpm
+++ /dev/null
@@ -1,10 +0,0 @@
-/* XPM */
-static char * sequence_track_xpm[] = {
-"5 5 2 1",
-" 	c None",
-".	c #050570",
-" . . ",
-".....",
-" . . ",
-".....",
-" . . "};
diff --git a/data/pixmaps/unselect_all.xpm b/data/pixmaps/unselect_all.xpm
deleted file mode 100644
index 8a1ebb9..0000000
--- a/data/pixmaps/unselect_all.xpm
+++ /dev/null
@@ -1,25 +0,0 @@
-/* XPM */
-static const char const * unselect_all_xpm[] = {
-"20 20 2 1",
-" 	c None",
-".	c #000000",
-"                    ",
-"                    ",
-"  ................  ",
-"  .              .  ",
-"  .              .  ",
-"  ................  ",
-"  .              .  ",
-"  .              .  ",
-"  ................  ",
-"  .              .  ",
-"  .              .  ",
-"  ................  ",
-"  .              .  ",
-"  .              .  ",
-"  ................  ",
-"  .              .  ",
-"  .              .  ",
-"  ................  ",
-"                    ",
-"                    "};
diff --git a/data/playlist_dialog.ui b/data/playlist_dialog.ui
new file mode 100644
index 0000000..6695465
--- /dev/null
+++ b/data/playlist_dialog.ui
@@ -0,0 +1,143 @@
+<interface domain="easytag">
+    <requires lib="gtk+" version="3.4"/>
+    <object class="GtkGrid" id="playlist_grid">
+        <property name="border-width">12</property>
+        <property name="orientation">vertical</property>
+        <property name="row-spacing">6</property>
+        <property name="visible">True</property>
+        <child>
+            <object class="GtkLabel" id="name_label">
+                <property name="halign">start</property>
+                <property name="label" translatable="yes">Filename</property>
+                <property name="visible">True</property>
+                <attributes>
+                    <attribute name="weight" value="bold"/>
+                </attributes>
+            </object>
+        </child>
+        <child>
+            <object class="GtkBox" id="name_mask_box">
+                <property name="margin-left">12</property>
+                <property name="spacing">12</property>
+                <property name="visible">True</property>
+                <child>
+                    <object class="GtkRadioButton" id="name_mask_radio">
+                        <property name="label" translatable="yes">Use mask:</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkEntry" id="name_mask_entry">
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+            </object>
+        </child>
+        <child>
+            <object class="GtkRadioButton" id="name_directory_radio">
+                <property name="group">name_mask_radio</property>
+                <property name="label" translatable="yes">Use directory name</property>
+                <property name="margin-left">12</property>
+                <property name="visible">True</property>
+            </object>
+        </child>
+        <child>
+            <object class="GtkLabel" id="options_label">
+                <property name="halign">start</property>
+                <property name="label" translatable="yes">Options</property>
+                <property name="margin-top">12</property>
+                <property name="visible">True</property>
+                <attributes>
+                    <attribute name="weight" value="bold"/>
+                </attributes>
+            </object>
+        </child>
+        <child>
+            <object class="GtkCheckButton" id="selected_files_check">
+                <property name="label" translatable="yes">Include only the selected files</property>
+                <property name="margin-left">12</property>
+                <property name="tooltip-text" translatable="yes">Whether to use only the selected files or all files when creating playlists</property>
+                <property name="visible">True</property>
+            </object>
+        </child>
+        <child>
+            <object class="GtkRadioButton" id="path_full_radio">
+                <property name="label" translatable="yes">Use full path for files in playlist</property>
+                <property name="margin-left">12</property>
+                <property name="visible">True</property>
+            </object>
+        </child>
+        <child>
+            <object class="GtkRadioButton" id="path_relative_radio">
+                <property name="group">path_full_radio</property>
+                <property name="label" translatable="yes">Use relative path for files in playlist</property>
+                <property name="margin-left">12</property>
+                <property name="visible">True</property>
+            </object>
+        </child>
+        <child>
+            <object class="GtkCheckButton" id="playlist_parent_check">
+                <property name="label" translatable="yes">Create playlist in the parent directory</property>
+                <property name="margin-left">12</property>
+                <property name="tooltip-text" translatable="yes">Whether to create the playlist in the parent directory</property>
+                <property name="visible">True</property>
+            </object>
+        </child>
+        <child>
+            <object class="GtkCheckButton" id="playlist_dos_check">
+                <property name="label" translatable="yes">Use DOS directory separator</property>
+                <property name="margin-left">12</property>
+                <property name="tooltip-text" translatable="yes">Whether to use backslash as directory separator when generating playlists</property>
+                <property name="visible">True</property>
+            </object>
+        </child>
+        <child>
+            <object class="GtkLabel" id="content_label">
+                <property name="halign">start</property>
+                <property name="label" translatable="yes">Content</property>
+                <property name="margin-top">12</property>
+                <property name="visible">True</property>
+                <attributes>
+                    <attribute name="weight" value="bold"/>
+                </attributes>
+            </object>
+        </child>
+        <child>
+            <object class="GtkRadioButton" id="content_filenames_radio">
+                <property name="label" translatable="yes">Write only list of files</property>
+                <property name="margin-left">12</property>
+                <property name="name">filenames</property>
+                <property name="visible">True</property>
+            </object>
+        </child>
+        <child>
+            <object class="GtkRadioButton" id="content_extended_radio">
+                <property name="group">content_filenames_radio</property>
+                <property name="label" translatable="yes">Write information using filename</property>
+                <property name="name">extended</property>
+                <property name="margin-left">12</property>
+                <property name="visible">True</property>
+            </object>
+        </child>
+        <child>
+            <object class="GtkBox" id="content_box">
+                <property name="margin-left">12</property>
+                <property name="spacing">12</property>
+                <property name="visible">True</property>
+                <child>
+                    <object class="GtkRadioButton" id="content_extended_mask_radio">
+                        <property name="group">content_filenames_radio</property>
+                        <property name="label" translatable="yes">Write information using:</property>
+                        <property name="name">extended-mask</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkEntry" id="content_mask_entry">
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+            </object>
+        </child>
+    </object>
+</interface>
diff --git a/data/preferences_dialog.ui b/data/preferences_dialog.ui
new file mode 100644
index 0000000..8bd44fa
--- /dev/null
+++ b/data/preferences_dialog.ui
@@ -0,0 +1,1556 @@
+<interface domain="easytag">
+    <requires lib="gtk+" version="3.4"/>
+    <object class="GtkAdjustment" id="cddb_automatic_host1_adjustment">
+        <property name="lower">0.0</property>
+        <property name="step-increment">1.0</property>
+        <property name="upper">65535.0</property>
+    </object>
+    <object class="GtkAdjustment" id="cddb_automatic_host2_adjustment">
+        <property name="lower">0.0</property>
+        <property name="step-increment">1.0</property>
+        <property name="upper">65535.0</property>
+    </object>
+    <object class="GtkAdjustment" id="cddb_manual_host_adjustment">
+        <property name="lower">0.0</property>
+        <property name="step-increment">1.0</property>
+        <property name="upper">65535.0</property>
+    </object>
+    <object class="GtkAdjustment" id="cddb_proxy_adjustment">
+        <property name="lower">0.0</property>
+        <property name="step-increment">1.0</property>
+        <property name="upper">65535.0</property>
+    </object>
+    <object class="GtkAdjustment" id="log_lines_adjustment">
+        <property name="lower">10.0</property>
+        <property name="step-increment">10.0</property>
+        <property name="upper">1500.0</property>
+    </object>
+    <object class="GtkAdjustment" id="tags_disc_adjustment">
+        <property name="lower">1.0</property>
+        <property name="step-increment">1.0</property>
+        <property name="upper">6.0</property>
+    </object>
+    <object class="GtkAdjustment" id="tags_track_adjustment">
+        <property name="lower">2.0</property>
+        <property name="step-increment">1.0</property>
+        <property name="upper">6.0</property>
+    </object>
+    <object class="GtkNotebook" id="preferences_notebook">
+        <property name="enable-popup">True</property>
+        <property name="scrollable">True</property>
+        <property name="visible">True</property>
+        <child>
+            <object class="GtkGrid" id="ui_grid">
+                <property name="border-width">12</property>
+                <property name="orientation">vertical</property>
+                <property name="row-spacing">6</property>
+                <property name="visible">True</property>
+                <child>
+                    <object class="GtkLabel" id="browser_label">
+                        <property name="halign">start</property>
+                        <property name="label" translatable="yes">Browser</property>
+                        <property name="visible">True</property>
+                        <attributes>
+                            <attribute name="weight" value="bold"/>
+                        </attributes>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkBox" id="default_path_box">
+                        <property name="margin-left">12</property>
+                        <property name="spacing">12</property>
+                        <property name="visible">True</property>
+                        <child>
+                            <object class="GtkLabel" id="default_path_label">
+                                <property name="label" translatable="yes">Default Directory:</property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkFileChooserButton" id="default_path_button">
+                                <property name="action">select-folder</property>
+                                <property name="tooltip-text" translatable="yes">The default path to search for music files</property>
+                                <property name="width-chars">30</property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="browser_startup_check">
+                        <property name="label" translatable="yes">Load on startup the default directory or the directory passed as argument</property>
+                        <property name="margin-left">12</property>
+                        <property name="tooltip-text" translatable="yes">Whether to load the default path (or the path passed as an argument) on application startup</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="browser_subdirs_check">
+                        <property name="label" translatable="yes">Browse subdirectories</property>
+                        <property name="margin-left">12</property>
+                        <property name="tooltip-text" translatable="yes">Whether to search subdirectories for audio files when reading a directory in the browser</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="browser_expand_subdirs_check">
+                        <property name="label" translatable="yes">Expand the subdirectories of the selected directory</property>
+                        <property name="margin-left">12</property>
+                        <property name="tooltip-text" translatable="yes">Whether to expand the subdirectories of a node in the directory browser when selecting it</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="browser_hidden_check">
+                        <property name="label" translatable="yes">Search hidden directories</property>
+                        <property name="margin-left">12</property>
+                        <property name="tooltip-text" translatable="yes">Whether to show hidden directories when showing a directory in the browser</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="browser_case_check">
+                        <property name="label" translatable="yes">Sort files case-sensitively</property>
+                        <property name="margin-left">12</property>
+                        <property name="tooltip-text" translatable="yes">Whether file sorting is case-sensitive</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="log_label">
+                        <property name="halign">start</property>
+                        <property name="label" translatable="yes">Log</property>
+                        <property name="visible">True</property>
+                        <attributes>
+                            <attribute name="weight" value="bold"/>
+                        </attributes>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="log_show_check">
+                        <property name="label" translatable="yes">Show the log</property>
+                        <property name="margin-left">12</property>
+                        <property name="tooltip-text" translatable="yes">Whether to show the log in the main window</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkBox" id="log_lines_box">
+                        <property name="margin-left">12</property>
+                        <property name="spacing">12</property>
+                        <property name="visible">True</property>
+                        <child>
+                            <object class="GtkLabel" id="log_lines_label">
+                                <property name="label" translatable="yes">Maximum number of lines:</property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkSpinButton" id="log_lines_button">
+                                <property name="adjustment">log_lines_adjustment</property>
+                                <property name="tooltip-text" translatable="yes">The maximum number of lines to keep in the log</property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="general_label">
+                        <property name="halign">start</property>
+                        <property name="label" translatable="yes">General</property>
+                        <property name="visible">True</property>
+                        <attributes>
+                            <attribute name="weight" value="bold"/>
+                        </attributes>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="header_show_check">
+                        <property name="label" translatable="yes">Show audio file header summary</property>
+                        <property name="margin-left">12</property>
+                        <property name="tooltip-text" translatable="yes">Whether to show header information, such as bit rate and duration, for audio files</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkBox" id="general_list_box">
+                        <property name="margin-left">12</property>
+                        <property name="spacing">12</property>
+                        <property name="visible">True</property>
+                        <child>
+                            <object class="GtkLabel" id="list_label">
+                                <property name="label" translatable="yes">Display changed files in list using:</property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkRadioButton" id="list_red_radio">
+                                <property name="label" translatable="yes">Red color</property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkRadioButton" id="list_bold_radio">
+                                <property name="group">list_red_radio</property>
+                                <property name="label" translatable="yes">Bold style</property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                    </object>
+                </child>
+            </object>
+        </child>
+        <child type="tab">
+            <object class="GtkLabel" id="interface_tab_label">
+                <property name="label" translatable="yes">Interface</property>
+            </object>
+        </child>
+        <child>
+            <object class="GtkGrid" id="file_grid">
+                <property name="border-width">12</property>
+                <property name="orientation">vertical</property>
+                <property name="row-spacing">6</property>
+                <property name="visible">True</property>
+                <child>
+                    <object class="GtkLabel" id="file_label">
+                        <property name="halign">start</property>
+                        <property name="label" translatable="yes">File Settings</property>
+                        <property name="visible">True</property>
+                        <attributes>
+                            <attribute name="weight" value="bold"/>
+                        </attributes>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="file_preserve_check">
+                        <property name="label" translatable="yes">Preserve modification time when writing files</property>
+                        <property name="margin-left">12</property>
+                        <property name="tooltip-text" translatable="yes">Whether to preserve the existing modification time when editing files</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="file_parent_check">
+                        <property name="label" translatable="yes">Update parent directory modification time when writing files</property>
+                        <property name="margin-left">12</property>
+                        <property name="tooltip-text" translatable="yes">Whether to update the modification time on the parent directory when editing files</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="file_name_label">
+                        <property name="halign">start</property>
+                        <property name="label" translatable="yes">Filenames</property>
+                        <property name="margin-top">12</property>
+                        <property name="visible">True</property>
+                        <attributes>
+                            <attribute name="weight" value="bold"/>
+                        </attributes>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="file_name_replace_check">
+                        <property name="label" translatable="yes">Replace illegal characters when renaming</property>
+                        <property name="margin-left">12</property>
+                        <property name="tooltip-text" translatable="yes">Convert characters which cannot be represented in filenames on the FAT32/16 and Joliet filesystems (‘\’, ‘:’, ‘;’, ‘*’, ‘?’, ‘"’, ‘<’, ‘>’, ‘|’)</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkBox" id="file_name_convert_box">
+                        <property name="margin-left">12</property>
+                        <property name="spacing">12</property>
+                        <property name="visible">True</property>
+                        <child>
+                            <object class="GtkLabel" id="name_convert_label">
+                                <property name="label" translatable="yes">Convert filename extension to:</property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkRadioButton" id="name_lower_radio">
+                                <property name="label" translatable="yes">Lower Case</property>
+                                <property name="name">lower-case</property>
+                                <property name="tooltip-text" translatable="yes">For example, the extension will be converted to ‘.mp3’</property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkRadioButton" id="name_upper_radio">
+                                <property name="group">name_lower_radio</property>
+                                <property name="label" translatable="yes">Upper Case</property>
+                                <property name="name">upper-case</property>
+                                <property name="tooltip-text" translatable="yes">For example, the extension will be converted to ‘.MP3’</property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkRadioButton" id="name_no_change_radio">
+                                <property name="group">name_lower_radio</property>
+                                <property name="label" translatable="yes">No Change</property>
+                                <property name="name">no-change</property>
+                                <property name="tooltip-text" translatable="yes">The extension will not be modified</property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="file_encoding_label">
+                        <property name="halign">start</property>
+                        <property name="label" translatable="yes">Filename Encoding</property>
+                        <property name="margin-left">12</property>
+                        <property name="margin-top">12</property>
+                        <property name="visible">True</property>
+                        <attributes>
+                            <attribute name="weight" value="bold"/>
+                        </attributes>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkRadioButton" id="file_encoding_try_alternative_radio">
+                        <property name="label" translatable="yes">Try another character encoding</property>
+                        <property name="margin-left">24</property>
+                        <property name="name">try-alternative</property>
+                        <property name="tooltip-text" translatable="yes">Try to use the encoding associated with your locale and if this fails, try the ISO-8859-1 character encoding</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkRadioButton" id="file_encoding_transliterate_radio">
+                        <property name="group">file_encoding_try_alternative_radio</property>
+                        <property name="label" translatable="yes">Transliterate characters into the system character encoding</property>
+                        <property name="margin-left">24</property>
+                        <property name="name">transliterate</property>
+                        <property name="tooltip-text" translatable="yes">Replace unsupported characters with a similar character from the target character encoding</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkRadioButton" id="file_encoding_ignore_radio">
+                        <property name="group">file_encoding_try_alternative_radio</property>
+                        <property name="label" translatable="yes">Use the system character encoding and silently discard unsupported characters</property>
+                        <property name="margin-left">24</property>
+                        <property name="name">ignore</property>
+                        <property name="tooltip-text" translatable="yes">Discard characters which cannot be represented in the target character encoding</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+            </object>
+        </child>
+        <child type="tab">
+            <object class="GtkLabel" id="files_tab_label">
+                <property name="label" translatable="yes">Files</property>
+            </object>
+        </child>
+        <child>
+            <object class="GtkGrid" id="tags_grid">
+                <property name="border-width">12</property>
+                <property name="orientation">vertical</property>
+                <property name="row-spacing">6</property>
+                <property name="visible">True</property>
+                <child>
+                    <object class="GtkLabel" id="tags_label">
+                        <property name="halign">start</property>
+                        <property name="label" translatable="yes">General</property>
+                        <property name="visible">True</property>
+                        <attributes>
+                            <attribute name="weight" value="bold"/>
+                        </attributes>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="tags_auto_date_check">
+                        <property name="label" translatable="yes">Automatically complete date field</property>
+                        <property name="margin-left">12</property>
+                        <property name="tooltip-text" translatable="yes">Whether to automatically complete the date tag</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="tags_auto_image_type_check">
+                        <property name="label" translatable="yes">Automatically select the type of the image based on its filename</property>
+                        <property name="margin-left">12</property>
+                        <property name="tooltip-text" translatable="yes">Whether to, when adding cover art, automatically select a type for an image based on its filename</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="tags_preserve_focus_check">
+                        <property name="label" translatable="yes">Preserve the tag field focus</property>
+                        <property name="margin-left">12</property>
+                        <property name="tooltip-text" translatable="yes">Whether to preserve focus on the current tag field when switching file</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkGrid" id="tags_padding_grid">
+                        <property name="column-spacing">12</property>
+                        <property name="margin-left">12</property>
+                        <property name="row-spacing">6</property>
+                        <property name="visible">True</property>
+                        <child>
+                            <object class="GtkCheckButton" id="tags_disc_check">
+                                <property name="label" translatable="yes">Pad the number of digits in the disc field to:</property>
+                                <property name="tooltip-text" translatable="yes">Whether the disc number tag field should be padded with leading zeroes</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">0</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkSpinButton" id="tags_disc_button">
+                                <property name="adjustment">tags_disc_adjustment</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">1</property>
+                                <property name="top_attach">0</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkCheckButton" id="tags_track_check">
+                                <property name="label" translatable="yes">Pad the number of digits in the track field to:</property>
+                                <property name="tooltip-text" translatable="yes">Whether the track number tag field should be padded with leading zeroes</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">1</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkSpinButton" id="tags_track_button">
+                                <property name="adjustment">tags_track_adjustment</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">1</property>
+                                <property name="top_attach">1</property>
+                            </packing>
+                        </child>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="tags_splitting_label">
+                        <property name="halign">start</property>
+                        <property name="label" translatable="yes">Splitting</property>
+                        <property name="margin-top">12</property>
+                        <property name="visible">True</property>
+                        <attributes>
+                            <attribute name="weight" value="bold"/>
+                        </attributes>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="tags_splitting_description_label">
+                        <property name="halign">start</property>
+                        <property name="label" translatable="yes">For Vorbis tags, selected fields will be split at dashes and saved as separate tags</property>
+                        <property name="margin-left">12</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkGrid" id="tags_splitting_grid">
+                        <property name="column-spacing">18</property>
+                        <property name="margin-left">12</property>
+                        <property name="row-spacing">6</property>
+                        <property name="visible">True</property>
+                        <child>
+                            <object class="GtkCheckButton" id="split_title_check">
+                                <property name="label" translatable="yes">Title</property>
+                                <property name="tooltip-text" translatable="yes">Whether to split title fields at a “ - ” separator in Ogg comments</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">0</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkCheckButton" id="split_artist_check">
+                                <property name="label" translatable="yes">Artist</property>
+                                <property name="tooltip-text" translatable="yes">Whether to split artist fields at a “ - ” separator in Ogg comments</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">1</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkCheckButton" id="split_album_check">
+                                <property name="label" translatable="yes">Album</property>
+                                <property name="tooltip-text" translatable="yes">Whether to split album fields at a “ - ” separator in Ogg comments</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">2</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkCheckButton" id="split_genre_check">
+                                <property name="label" translatable="yes">Genre</property>
+                                <property name="tooltip-text" translatable="yes">Whether to split genre fields at a “ - ” separator in Ogg comments</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">3</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkCheckButton" id="split_comment_check">
+                                <property name="label" translatable="yes">Comment</property>
+                                <property name="tooltip-text" translatable="yes">Whether to split comment fields at a “ - ” separator in Ogg comments</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">1</property>
+                                <property name="top_attach">0</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkCheckButton" id="split_composer_check">
+                                <property name="label" translatable="yes">Composer</property>
+                                <property name="tooltip-text" translatable="yes">Whether to split composer fields at a “ - ” separator in Ogg comments</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">1</property>
+                                <property name="top_attach">1</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkCheckButton" id="split_orig_artist_check">
+                                <property name="label" translatable="yes">Original artist</property>
+                                <property name="tooltip-text" translatable="yes">Whether to split original artist fields at a “ - ” separator in Ogg comments</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">1</property>
+                                <property name="top_attach">2</property>
+                            </packing>
+                        </child>
+                    </object>
+                </child>
+            </object>
+        </child>
+        <child type="tab">
+            <object class="GtkLabel" id="tags_tab_label">
+                <property name="label" translatable="yes">Tags</property>
+            </object>
+        </child>
+        <child>
+            <object class="GtkGrid" id="id3_tags_grid">
+                <property name="border-width">12</property>
+                <property name="orientation">vertical</property>
+                <property name="row-spacing">6</property>
+                <property name="visible">True</property>
+                <child>
+                    <object class="GtkLabel" id="id3_tags_label">
+                        <property name="halign">start</property>
+                        <property name="label" translatable="yes">General</property>
+                        <property name="visible">True</property>
+                        <attributes>
+                            <attribute name="weight" value="bold"/>
+                        </attributes>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="id3_strip_check">
+                        <property name="label" translatable="yes">Strip ID3 tags if all ID3 tags are empty</property>
+                        <property name="margin-left">12</property>
+                        <property name="tooltip-text" translatable="yes">Whether to remove the ID3 tag from the audio file if all the individual tag fields are empty</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkBox" id="id3_read_encoding_box">
+                        <property name="margin-left">12</property>
+                        <property name="spacing">12</property>
+                        <property name="visible">True</property>
+                        <child>
+                            <object class="GtkCheckButton" id="id3_read_encoding_check">
+                                <property name="label" translatable="yes">Non-standard encoding for reading ID3 tags:</property>
+                                <property name="tooltip-text" translatable="yes">Whether to use a non-standard character encoding when reading ID3 tags</property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkComboBoxText" id="id3_read_encoding_combo">
+                                <property name="tooltip-text" translatable="yes">Choose the character set to be used when reading ID3v1 and ID3v2 tags</property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="id3_v2_label">
+                        <property name="halign">start</property>
+                        <property name="label" translatable="yes">ID3v2</property>
+                        <property name="margin-top">12</property>
+                        <property name="visible">True</property>
+                        <attributes>
+                            <attribute name="weight" value="bold"/>
+                        </attributes>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkGrid" id="id3_v2_encoding_grid">
+                        <property name="column-spacing">12</property>
+                        <property name="margin-left">12</property>
+                        <property name="row-spacing">6</property>
+                        <property name="visible">True</property>
+                        <child>
+                            <object class="GtkCheckButton" id="id3_v2_check">
+                                <property name="label" translatable="yes">Write ID3v2 tag</property>
+                                <property name="tooltip-text" translatable="yes">Whether to write ID3v2 tags when writing ID3 tags into audio files</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">0</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="id3_v2_version_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">Version:</property>
+                                <property name="margin-left">12</property>
+                                <property name="tooltip-text" translatable="yes">Whether to write ID3v2 tags when writing ID3 tags into audio files</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">1</property>
+                                <property name="top_attach">0</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkComboBoxText" id="id3_v2_version_combo">
+                                <items>
+                                    <item id="id3v2.3">ID3v2.3</item>
+                                    <item id="id3v2.4">ID3v2.4</item>
+                                </items>
+                                <property name="tooltip-text" translatable="yes">Select the ID3v2 tag version to write:
+ • ID3v2.3 is written using id3lib,
+ • ID3v2.4 is written using libid3tag (recommended)</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">2</property>
+                                <property name="top_attach">0</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="id3_v2_encoding_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">Character encoding:</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">1</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkRadioButton" id="id3_v2_unicode_radio">
+                                <property name="label" translatable="yes">Unicode</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">1</property>
+                                <property name="top_attach">1</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkComboBoxText" id="id3_v2_unicode_encoding_combo">
+                                <items>
+                                    <item id="utf-8">UTF-8</item>
+                                    <item id="utf-16">UTF-16</item>
+                                </items>
+                                <property name="tooltip-text" translatable="yes">Choose the Unicode character encoding to be used when writing ID3v2 tags</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">2</property>
+                                <property name="top_attach">1</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkRadioButton" id="id3_v2_other_radio">
+                                <property name="group">id3_v2_unicode_radio</property>
+                                <property name="label" translatable="yes">Other</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">1</property>
+                                <property name="top_attach">2</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkComboBoxText" id="id3_v2_override_encoding_combo">
+                                <property name="tooltip-text" translatable="yes">Override the standard Unicode character encoding to be used when writing ID3v2 tags</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">2</property>
+                                <property name="top_attach">2</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="id3_v2_iconv_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">When encoding conversion fails:</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">3</property>
+                                <property name="width">2</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkBox" id="id3_v2_iconv_box">
+                                <property name="spacing">12</property>
+                                <child>
+                                    <object class="GtkRadioButton" id="id3_v2_none_radio">
+                                        <property name="label" translatable="yes">Report error</property>
+                                        <property name="name">none</property>
+                                        <property name="tooltip-text" translatable="yes">Display an error message when a character cannot be represented in the target character encoding and keep the original character</property>
+                                        <property name="visible">True</property>
+                                    </object>
+                                </child>
+                                <child>
+                                    <object class="GtkRadioButton" id="id3_v2_transliterate_radio">
+                                        <property name="group">id3_v1_none_radio</property>
+                                        <property name="label" translatable="yes">Transliterate</property>
+                                        <property name="name">transliterate</property>
+                                        <property name="tooltip-text" translatable="yes">Replace unsupported characters with a similar character from the target character encoding</property>
+                                        <property name="visible">True</property>
+                                    </object>
+                                </child>
+                                <child>
+                                    <object class="GtkRadioButton" id="id3_v2_ignore_radio">
+                                        <property name="group">id3_v1_none_radio</property>
+                                        <property name="label" translatable="yes">Discard</property>
+                                        <property name="name">ignore</property>
+                                        <property name="tooltip-text" translatable="yes">Discard characters which cannot be represented in the target character encoding</property>
+                                        <property name="visible">True</property>
+                                    </object>
+                                </child>
+                            </object>
+                            <packing>
+                                <property name="left_attach">2</property>
+                                <property name="top_attach">3</property>
+                                <property name="width">2</property>
+                            </packing>
+                        </child>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkGrid" id="id3_v2_check_grid">
+                        <property name="column-spacing">12</property>
+                        <property name="margin-left">12</property>
+                        <property name="row-spacing">6</property>
+                        <property name="visible">True</property>
+                        <child>
+                            <object class="GtkCheckButton" id="id3_v2_convert_check">
+                                <property name="label" translatable="yes">Automatically convert old ID3v2 tag versions</property>
+                                <property name="tooltip-text" translatable="yes">Whether to convert ID3 tags written against old version of the specification, such as ID3v2.2, to newer ones, such as ID3v2.3 or ID3v2.4</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">0</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkCheckButton" id="id3_v2_crc32_check">
+                                <property name="label" translatable="yes">Use CRC-32</property>
+                                <property name="tooltip-text" translatable="yes">Whether to embed a CRC-32 checksum of the audio file data in ID3v2 tags</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">1</property>
+                                <property name="top_attach">0</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkCheckButton" id="id3_v2_compression_check">
+                                <property name="label" translatable="yes">Compress data in ID3v2 tags</property>
+                                <property name="tooltip-text" translatable="yes">Whether to compress data in ID3v2 tags</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">1</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkCheckButton" id="id3_v2_genre_check">
+                                <property name="label" translatable="yes">Use text-only genre in ID3v2 tags</property>
+                                <property name="tooltip-text" translatable="yes">Whether to use only a string, and not the integer-base ID3v1 genre field, when writing a genre field to ID3v2 tags</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">1</property>
+                                <property name="top_attach">1</property>
+                            </packing>
+                        </child>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="id3_v1_label">
+                        <property name="halign">start</property>
+                        <property name="label" translatable="yes">ID3v1</property>
+                        <property name="margin-top">12</property>
+                        <property name="visible">True</property>
+                        <attributes>
+                            <attribute name="weight" value="bold"/>
+                        </attributes>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="id3_v1_check">
+                        <property name="label" translatable="yes">Write ID3v1 tag</property>
+                        <property name="margin-left">12</property>
+                        <property name="tooltip-text" translatable="yes">Whether to write ID3v1 tags when writing ID3 tags into audio files</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkGrid" id="id3_v1_encoding_grid">
+                        <property name="column-spacing">12</property>
+                        <property name="margin-left">12</property>
+                        <property name="row-spacing">6</property>
+                        <property name="visible">True</property>
+                        <child>
+                            <object class="GtkLabel" id="id3_v1_encoding_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">Character encoding:</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">0</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkComboBoxText" id="id3_v1_encoding_combo">
+                                <property name="tooltip-text" translatable="yes">Choose the character set to be used when writing ID3v1 tag</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">1</property>
+                                <property name="top_attach">0</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="id3_v1_iconv_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">When encoding conversion fails:</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">1</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkBox" id="id3_v1_iconv_box">
+                                <property name="spacing">12</property>
+                                <child>
+                                    <object class="GtkRadioButton" id="id3_v1_none_radio">
+                                        <property name="label" translatable="yes">Report error</property>
+                                        <property name="name">none</property>
+                                        <property name="tooltip-text" translatable="yes">Display an error message when a character cannot be represented in the target character encoding and keep the original character</property>
+                                        <property name="visible">True</property>
+                                    </object>
+                                </child>
+                                <child>
+                                    <object class="GtkRadioButton" id="id3_v1_transliterate_radio">
+                                        <property name="group">id3_v1_none_radio</property>
+                                        <property name="label" translatable="yes">Transliterate</property>
+                                        <property name="name">transliterate</property>
+                                        <property name="tooltip-text" translatable="yes">Replace unsupported characters with a similar character from the target character encoding</property>
+                                        <property name="visible">True</property>
+                                    </object>
+                                </child>
+                                <child>
+                                    <object class="GtkRadioButton" id="id3_v1_ignore_radio">
+                                        <property name="group">id3_v1_none_radio</property>
+                                        <property name="label" translatable="yes">Discard</property>
+                                        <property name="name">ignore</property>
+                                        <property name="tooltip-text" translatable="yes">Discard characters which cannot be represented in the target character encoding</property>
+                                        <property name="visible">True</property>
+                                    </object>
+                                </child>
+                            </object>
+                            <packing>
+                                <property name="left_attach">1</property>
+                                <property name="top_attach">1</property>
+                                <property name="width">2</property>
+                            </packing>
+                        </child>
+                    </object>
+                </child>
+            </object>
+        </child>
+        <child type="tab">
+            <object class="GtkLabel" id="id3_tags_tab_label">
+                <property name="label" translatable="yes">ID3 Tags</property>
+            </object>
+        </child>
+        <child>
+            <object class="GtkGrid" id="scanner_grid">
+                <property name="border-width">12</property>
+                <property name="orientation">vertical</property>
+                <property name="row-spacing">6</property>
+                <property name="visible">True</property>
+                <child>
+                    <object class="GtkLabel" id="character_conversion_label">
+                        <property name="halign">start</property>
+                        <property name="label" translatable="yes">Character Conversion</property>
+                        <property name="visible">True</property>
+                        <attributes>
+                            <attribute name="weight" value="bold"/>
+                        </attributes>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="fill_tag_scanner_label">
+                        <property name="halign">start</property>
+                        <property name="label" translatable="yes">Fill Tag Scanner</property>
+                        <property name="margin-left">12</property>
+                        <property name="margin-top">12</property>
+                        <property name="visible">True</property>
+                        <attributes>
+                            <attribute name="weight" value="bold"/>
+                        </attributes>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkRadioButton" id="fts_underscore_p20_radio">
+                        <property name="label" translatable="yes">Convert underscores and ‘%20’ to spaces</property>
+                        <property name="margin-left">24</property>
+                        <property name="name">spaces</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkRadioButton" id="fts_spaces_radio">
+                        <property name="group">fts_underscore_p20_radio</property>
+                        <property name="label" translatable="yes">Convert spaces and ‘%20’ to underscores</property>
+                        <property name="margin-left">24</property>
+                        <property name="name">underscores</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkRadioButton" id="fts_none_radio">
+                        <property name="group">fts_underscore_p20_radio</property>
+                        <property name="label" translatable="yes">No conversion</property>
+                        <property name="margin-left">24</property>
+                        <property name="name">no-change</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="rename_file_directory_scanner_label">
+                        <property name="halign">start</property>
+                        <property name="label" translatable="yes">Rename File and Directory Scanner</property>
+                        <property name="margin-left">12</property>
+                        <property name="margin-top">12</property>
+                        <property name="visible">True</property>
+                        <attributes>
+                            <attribute name="weight" value="bold"/>
+                        </attributes>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkRadioButton" id="rfs_underscore_p20_radio">
+                        <property name="label" translatable="yes">Convert underscores and ‘%20’ to spaces</property>
+                        <property name="margin-left">24</property>
+                        <property name="name">spaces</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkRadioButton" id="rfs_spaces_radio">
+                        <property name="group">rfs_underscore_p20_radio</property>
+                        <property name="label" translatable="yes">Convert spaces and ‘%20’ to underscores</property>
+                        <property name="margin-left">24</property>
+                        <property name="name">underscores</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkRadioButton" id="rfs_remove_radio">
+                        <property name="group">rfs_underscore_p20_radio</property>
+                        <property name="label" translatable="yes">No conversion</property>
+                        <property name="margin-left">24</property>
+                        <property name="name">remove</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="process_fields_scanner_label">
+                        <property name="halign">start</property>
+                        <property name="label" translatable="yes">Process Fields Scanner</property>
+                        <property name="margin-left">12</property>
+                        <property name="margin-top">12</property>
+                        <property name="visible">True</property>
+                        <attributes>
+                            <attribute name="weight" value="bold"/>
+                        </attributes>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="pfs_uppercase_prep_check">
+                        <property name="label" translatable="yes">Upper-case the first letters of all words</property>
+                        <property name="margin-left">24</property>
+                        <property name="tooltip-text" translatable="yes">Whether to upper-case the first letter of all words, including prepositions and other short words such as “feat.”, when processing tag fields</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="fields_label">
+                        <property name="halign">start</property>
+                        <property name="label" translatable="yes">Fields</property>
+                        <property name="margin-top">12</property>
+                        <property name="visible">True</property>
+                        <attributes>
+                            <attribute name="weight" value="bold"/>
+                        </attributes>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="overwrite_fields_check">
+                        <property name="label" translatable="yes">Overwrite fields when scanning tags</property>
+                        <property name="margin-left">12</property>
+                        <property name="tooltip-text" translatable="yes">Whether to overwrite the tag field values when filling tags. Otherwise, only blank tag fields will be filled</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkBox" id="default_comment_box">
+                        <property name="margin-left">12</property>
+                        <property name="spacing">12</property>
+                        <property name="visible">True</property>
+                        <child>
+                            <object class="GtkCheckButton" id="default_comment_check">
+                                <property name="label" translatable="yes">Set this text as default comment:</property>
+                                <property name="tooltip-text" translatable="yes">Whether to set the comment tag field to the provided default value when filling tags</property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkEntry" id="default_comment_entry">
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="crc32_default_check">
+                        <property name="label" translatable="yes">Use CRC-32 as the default comment (for files with ID3 tags only)</property>
+                        <property name="margin-left">12</property>
+                        <property name="tooltip-text" translatable="yes">Whether to use the CRC-32 of the audio file data as the default comment, for files with ID3 tags only</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+            </object>
+        </child>
+        <child type="tab">
+            <object class="GtkLabel" id="scanner_tab_label">
+                <property name="label" translatable="yes">Scanner</property>
+            </object>
+        </child>
+        <child>
+            <object class="GtkGrid" id="cddb_grid">
+                <property name="border-width">12</property>
+                <property name="orientation">vertical</property>
+                <property name="row-spacing">6</property>
+                <property name="visible">True</property>
+                <child>
+                    <object class="GtkGrid" id="cddb_search_grid">
+                        <property name="column-spacing">12</property>
+                        <property name="orientation">vertical</property>
+                        <property name="row-spacing">6</property>
+                        <property name="visible">True</property>
+                        <child>
+                            <object class="GtkLabel" id="automatic_search_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">Automatic Search Servers</property>
+                                <property name="visible">True</property>
+                                <attributes>
+                                    <attribute name="weight" value="bold"/>
+                                </attributes>
+                            </object>
+                            <packing>
+                                <property name="width">6</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="cddb_automatic_host1_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">Host:</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">1</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkComboBoxText" id="cddb_automatic_host1_combo">
+                                <property name="has-entry">True</property>
+                                <property name="visible">True</property>
+                                <items>
+                                    <item id="host_a">freedb.freedb.org</item>
+                                    <item id="host_b">www.gnudb.org</item>
+                                    <item id="host_c">at.freedb.org</item>
+                                    <item id="host_d">au.freedb.org</item>
+                                    <item id="host_e">ca.freedb.org</item>
+                                    <item id="host_f">es.freedb.org</item>
+                                    <item id="host_g">fi.freedb.org</item>
+                                    <item id="host_h">ru.freedb.org</item>
+                                    <item id="host_i">uk.freedb.org</item>
+                                    <item id="host_j">us.freedb.org</item>
+                                </items>
+                            </object>
+                            <packing>
+                                <property name="left_attach">1</property>
+                                <property name="top_attach">1</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="cddb_automatic_port1_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">Port:</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">2</property>
+                                <property name="top_attach">1</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkSpinButton" id="cddb_automatic_port1_button">
+                                <property name="adjustment">cddb_automatic_host1_adjustment</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">3</property>
+                                <property name="top_attach">1</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="cddb_automatic_path1_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">CGI Path:</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">4</property>
+                                <property name="top_attach">1</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkEntry" id="cddb_automatic_path1_entry">
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">5</property>
+                                <property name="top_attach">1</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="cddb_automatic_host2_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">Host:</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">2</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkComboBoxText" id="cddb_automatic_host2_combo">
+                                <property name="has-entry">True</property>
+                                <property name="visible">True</property>
+                                <items>
+                                    <item id="host_musicbrainz">freedb.musicbrainz.org</item>
+                                </items>
+                            </object>
+                            <packing>
+                                <property name="left_attach">1</property>
+                                <property name="top_attach">2</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="cddb_automatic_port2_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">Port:</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">2</property>
+                                <property name="top_attach">2</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkSpinButton" id="cddb_automatic_port2_button">
+                                <property name="adjustment">cddb_automatic_host2_adjustment</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">3</property>
+                                <property name="top_attach">2</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="cddb_automatic_path2_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">CGI Path:</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">4</property>
+                                <property name="top_attach">2</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkEntry" id="cddb_automatic_path2_entry">
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">5</property>
+                                <property name="top_attach">2</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="manual_search_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">Manual Search Server</property>
+                                <property name="margin-top">12</property>
+                                <property name="visible">True</property>
+                                <attributes>
+                                    <attribute name="weight" value="bold"/>
+                                </attributes>
+                            </object>
+                            <packing>
+                                <property name="width">6</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="cddb_manual_host_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">Host:</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">4</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkComboBoxText" id="cddb_manual_host_combo">
+                                <property name="has-entry">True</property>
+                                <property name="visible">True</property>
+                                <items>
+                                    <item id="host_freedb">www.freedb.org</item>
+                                    <item id="host_gnudb">www.gnudb.org</item>
+                                </items>
+                            </object>
+                            <packing>
+                                <property name="left_attach">1</property>
+                                <property name="top_attach">4</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="cddb_manual_port_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">Port:</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">2</property>
+                                <property name="top_attach">4</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkSpinButton" id="cddb_manual_port_button">
+                                <property name="adjustment">cddb_manual_host_adjustment</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">3</property>
+                                <property name="top_attach">4</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="cddb_manual_path_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">CGI Path:</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">4</property>
+                                <property name="top_attach">4</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkEntry" id="cddb_manual_path_entry">
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left_attach">5</property>
+                                <property name="top_attach">4</property>
+                            </packing>
+                        </child>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="cddb_proxy_label">
+                        <property name="halign">start</property>
+                        <property name="label" translatable="yes">Proxy</property>
+                        <property name="margin-top">12</property>
+                        <property name="visible">True</property>
+                        <attributes>
+                            <attribute name="weight" value="bold"/>
+                        </attributes>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="cddb_proxy_check">
+                        <property name="label" translatable="yes">Use a proxy server</property>
+                        <property name="margin-left">12</property>
+                        <property name="tooltip-text" translatable="yes">Whether to access remote CDDB through a proxy</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkGrid" id="cddb_proxy_grid">
+                        <property name="column-spacing">12</property>
+                        <property name="row-spacing">6</property>
+                        <property name="visible">True</property>
+                        <child>
+                            <object class="GtkLabel" id="cddb_host_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">Host:</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">0</property>
+                                <property name="top-attach">0</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkEntry" id="cddb_host_entry">
+                                <property name="tooltip-text" translatable="yes">Hostname for a proxy to access remote CDDB</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">1</property>
+                                <property name="top-attach">0</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="cddb_port_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">Port:</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">2</property>
+                                <property name="top-attach">0</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkSpinButton" id="cddb_port_button">
+                                <property name="adjustment">cddb_proxy_adjustment</property>
+                                <property name="tooltip-text" translatable="yes">Port for a proxy to access remote CDDB</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">3</property>
+                                <property name="top-attach">0</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="cddb_user_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">User:</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">0</property>
+                                <property name="top-attach">1</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkEntry" id="cddb_user_entry">
+                                <property name="tooltip-text" translatable="yes">Username for a proxy to access remote CDDB</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">1</property>
+                                <property name="top-attach">1</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="cddb_password_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">Password:</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">2</property>
+                                <property name="top-attach">1</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkEntry" id="cddb_password_entry">
+                                <property name="tooltip-text" translatable="yes">Password for a proxy to access remote CDDB</property>
+                                <property name="visibility">False</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">3</property>
+                                <property name="top-attach">1</property>
+                            </packing>
+                        </child>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="cddb_list_label">
+                        <property name="halign">start</property>
+                        <property name="label" translatable="yes">Results List</property>
+                        <property name="margin-top">12</property>
+                        <property name="visible">True</property>
+                        <attributes>
+                            <attribute name="weight" value="bold"/>
+                        </attributes>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="cddb_follow_check">
+                        <property name="label" translatable="yes">Select corresponding file (according to position or DLM if activated below)</property>
+                        <property name="margin-left">12</property>
+                        <property name="tooltip-text" translatable="yes">Whether to select the file in the file list which matches the position in the CDDB results list</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="cddb_dlm_check">
+                        <property name="label" translatable="yes">Use the Levenshtein algorithm (DLM) to match results (using title) with audio files (using filename)</property>
+                        <property name="margin-left">12</property>
+                        <property name="tooltip-text" translatable="yes">Whether to use the DLM algorithm to match CDDB results to files</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+            </object>
+        </child>
+        <child type="tab">
+            <object class="GtkLabel" id="cddb_tab_label">
+                <property name="label" translatable="yes">CDDB</property>
+            </object>
+        </child>
+        <child>
+            <object class="GtkGrid" id="application_grid">
+                <property name="border-width">12</property>
+                <property name="orientation">vertical</property>
+                <property name="row-spacing">6</property>
+                <property name="visible">True</property>
+                <child>
+                    <object class="GtkLabel" id="confirmation_label">
+                        <property name="halign">start</property>
+                        <property name="label" translatable="yes">Confirmation</property>
+                        <property name="visible">True</property>
+                        <attributes>
+                            <attribute name="weight" value="bold"/>
+                        </attributes>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="confirm_quit_check">
+                        <property name="label" translatable="yes">Confirm before quitting the application</property>
+                        <property name="margin-left">12</property>
+                        <property name="tooltip-text" translatable="yes">Whether to ask for confirmation from the user before quitting the application</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="confirm_write_check">
+                        <property name="label" translatable="yes">Confirm before writing tags</property>
+                        <property name="margin-left">12</property>
+                        <property name="tooltip-text" translatable="yes">Whether to ask for confirmation from the user before writing tags to audio files</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="confirm_rename_check">
+                        <property name="label" translatable="yes">Confirm before renaming a file</property>
+                        <property name="margin-left">12</property>
+                        <property name="tooltip-text" translatable="yes">Whether to ask for confirmation from the user before renaming a file</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="confirm_delete_check">
+                        <property name="label" translatable="yes">Confirm before deleting a file</property>
+                        <property name="margin-left">12</property>
+                        <property name="tooltip-text" translatable="yes">Whether to ask for confirmation from the user before deleting a file</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="confirm_write_playlist_check">
+                        <property name="label" translatable="yes">Confirm before writing a playlist</property>
+                        <property name="margin-left">12</property>
+                        <property name="tooltip-text" translatable="yes">Whether to ask for confirmation from the user before writing a playlist</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="confirm_unsaved_files_check">
+                        <property name="label" translatable="yes">Confirm before losing unsaved changes to files</property>
+                        <property name="margin-left">12</property>
+                        <property name="tooltip-text" translatable="yes">Whether to ask for confirmation from the user before performing an operation that would lose unsaved changes on files</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="scanner_dialog_label">
+                        <property name="halign">start</property>
+                        <property name="label" translatable="yes">Scanner Dialog</property>
+                        <property name="margin-top">12</property>
+                        <property name="visible">True</property>
+                        <attributes>
+                            <attribute name="weight" value="bold"/>
+                        </attributes>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkCheckButton" id="scanner_dialog_startup_check">
+                        <property name="label" translatable="yes">Show the scanner dialog on startup</property>
+                        <property name="margin-left">12</property>
+                        <property name="tooltip-text" translatable="yes">Whether to show the scanner window on application startup</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+            </object>
+        </child>
+        <child type="tab">
+            <object class="GtkLabel" id="application_tab_label">
+                <property name="label" translatable="yes">Application</property>
+            </object>
+        </child>
+    </object>
+</interface>
diff --git a/data/scan_dialog.ui b/data/scan_dialog.ui
new file mode 100644
index 0000000..31967bd
--- /dev/null
+++ b/data/scan_dialog.ui
@@ -0,0 +1,867 @@
+<interface domain="easytag">
+    <requires lib="gtk+" version="3.4"/>
+    <object class="GtkListStore" id="fill_masks_model">
+        <columns>
+            <column type="gchararray"/>
+        </columns>
+    </object>
+    <object class="GtkListStore" id="rename_masks_model">
+        <columns>
+            <column type="gchararray"/>
+        </columns>
+    </object>
+    <object class="GtkNotebook" id="scan_notebook">
+        <property name="enable-popup">True</property>
+        <property name="scrollable">True</property>
+        <property name="visible">True</property>
+        <child>
+            <object class="GtkGrid" id="fill_grid">
+                <property name="border-width">12</property>
+                <property name="column-spacing">12</property>
+                <property name="orientation">vertical</property>
+                <property name="row-spacing">6</property>
+                <property name="visible">True</property>
+                <child>
+                    <object class="GtkComboBox" id="fill_combo">
+                        <property name="has-entry">True</property>
+                        <property name="model">fill_masks_model</property>
+                        <property name="entry-text-column">0</property>
+                        <property name="hexpand">True</property>
+                        <property name="tooltip-text" translatable="yes">Select or type in a mask using codes (see Legend) to parse filename and directory. Used to fill in tag fields</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="fill_preview_label">
+                        <property name="label" translatable="yes">Fill tag preview</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkGrid" id="editor_grid">
+                        <property name="column-spacing">12</property>
+                        <property name="orientation">vertical</property>
+                        <property name="visible">True</property>
+                        <child>
+                            <object class="GtkLabel" id="editor_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">Mask Editor</property>
+                                <property name="visible">True</property>
+                                <attributes>
+                                    <attribute name="weight" value="bold"/>
+                                </attributes>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkScrolledWindow" id="mask_scrolled">
+                                <property name="margin-left">12</property>
+                                <property name="margin-top">6</property>
+                                <property name="min-content-height">150</property>
+                                <property name="shadow-type">etched-in</property>
+                                <property name="visible">True</property>
+                                <child>
+                                    <object class="GtkTreeView" id="mask_view">
+                                        <property name="expand">True</property>
+                                        <property name="headers-visible">False</property>
+                                        <property name="model">fill_masks_model</property>
+                                        <property name="reorderable">True</property>
+                                        <property name="visible">True</property>
+                                        <child>
+                                            <object class="GtkTreeViewColumn" id="mask_column">
+                                                <child>
+                                                    <object class="GtkCellRendererText" id="mask_renderer"/>
+                                                    <attributes>
+                                                        <attribute name="text">0</attribute>
+                                                    </attributes>
+                                                </child>
+                                            </object>
+                                        </child>
+                                    </object>
+                                </child>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkToolbar" id="editor_toolbar">
+                                <property name="margin-left">12</property>
+                                <property name="visible">True</property>
+                                <style>
+                                    <class name="inline-toolbar"/>
+                                </style>
+                                <child>
+                                    <object class="GtkToolButton" id="mask_new_button">
+                                        <property name="icon-name">document-new</property>
+                                        <property name="tooltip-text" translatable="yes">Create a new mask</property>
+                                        <property name="visible">True</property>
+                                    </object>
+                                </child>
+                                <child>
+                                    <object class="GtkToolButton" id="mask_up_button">
+                                        <property name="icon-name">go-up</property>
+                                        <property name="tooltip-text" translatable="yes">Move the selected mask up</property>
+                                        <property name="visible">True</property>
+                                    </object>
+                                </child>
+                                <child>
+                                    <object class="GtkToolButton" id="mask_down_button">
+                                        <property name="icon-name">go-down</property>
+                                        <property name="tooltip-text" translatable="yes">Move the selected mask down</property>
+                                        <property name="visible">True</property>
+                                    </object>
+                                </child>
+                                <child>
+                                    <object class="GtkToolButton" id="mask_copy_button">
+                                        <property name="icon-name">edit-copy</property>
+                                        <property name="tooltip-text" translatable="yes">Duplicate the selected mask</property>
+                                        <property name="visible">True</property>
+                                    </object>
+                                </child>
+                                <child>
+                                    <object class="GtkToolButton" id="mask_add_button">
+                                        <property name="icon-name">list-add</property>
+                                        <property name="tooltip-text" translatable="yes">Add default masks</property>
+                                        <property name="visible">True</property>
+                                    </object>
+                                </child>
+                                <child>
+                                    <object class="GtkToolButton" id="mask_remove_button">
+                                        <property name="icon-name">list-remove</property>
+                                        <property name="tooltip-text" translatable="yes">Remove the selected mask</property>
+                                        <property name="visible">True</property>
+                                    </object>
+                                </child>
+                                <child>
+                                    <object class="GtkToolButton" id="mask_save_button">
+                                        <property name="icon-name">document-save</property>
+                                        <property name="tooltip-text" translatable="yes">Save masks</property>
+                                        <property name="visible">True</property>
+                                    </object>
+                                </child>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkEntry" id="mask_entry">
+                                <property name="margin-left">12</property>
+                                <property name="margin-top">6</property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkGrid" id="legend_grid">
+                        <property name="column-spacing">12</property>
+                        <property name="row-spacing">6</property>
+                        <property name="visible">True</property>
+                        <child>
+                            <object class="GtkLabel" id="legend_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">Legend</property>
+                                <property name="visible">True</property>
+                                <attributes>
+                                    <attribute name="weight" value="bold"/>
+                                </attributes>
+                            </object>
+                            <packing>
+                                <property name="left-attach">0</property>
+                                <property name="top-attach">0</property>
+                                <property name="width">3</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="artist_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">%a: artist</property>
+                                <property name="margin-left">12</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">0</property>
+                                <property name="top-attach">1</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="album_artist_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">%a: album artist</property>
+                                <property name="margin-left">12</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">0</property>
+                                <property name="top-attach">2</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="album_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">%b: album</property>
+                                <property name="margin-left">12</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">0</property>
+                                <property name="top-attach">3</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="comment_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">%c: comment</property>
+                                <property name="margin-left">12</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">0</property>
+                                <property name="top-attach">4</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="composer_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">%p: composer</property>
+                                <property name="margin-left">12</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">0</property>
+                                <property name="top-attach">5</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="copyright_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">%r: copyright</property>
+                                <property name="margin-left">12</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">0</property>
+                                <property name="top-attach">6</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="disc_number_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">%d: disc number</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">1</property>
+                                <property name="top-attach">1</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="encoded_by_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">%e: encoded by</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">1</property>
+                                <property name="top-attach">2</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="genre_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">%g: genre</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">1</property>
+                                <property name="top-attach">3</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="ignored_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">%i: ignored</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">1</property>
+                                <property name="top-attach">4</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="number_of_tracks_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">%l: number of tracks</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">1</property>
+                                <property name="top-attach">5</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="orig_artist_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">%o: original artist</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">1</property>
+                                <property name="top-attach">6</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="track_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">%n: track</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">2</property>
+                                <property name="top-attach">1</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="title_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">%t: title</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">2</property>
+                                <property name="top-attach">2</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="url_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">%u: URL</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">2</property>
+                                <property name="top-attach">3</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="number_of_discs_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">%x: number of discs</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">2</property>
+                                <property name="top-attach">4</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="year_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">%y: year</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">2</property>
+                                <property name="top-attach">5</property>
+                            </packing>
+                        </child>
+                    </object>
+                </child>
+            </object>
+        </child>
+        <child type="tab">
+            <object class="GtkLabel" id="fill_tab_label">
+                <property name="label" translatable="yes">Fill Tag</property>
+            </object>
+        </child>
+        <child>
+            <object class="GtkGrid" id="rename_grid">
+                <property name="border-width">12</property>
+                <property name="column-spacing">6</property>
+                <property name="orientation">vertical</property>
+                <property name="row-spacing">6</property>
+                <property name="visible">True</property>
+                <child>
+                    <object class="GtkBox" id="rename_box">
+                        <property name="orientation">horizontal</property>
+                        <property name="spacing">6</property>
+                        <property name="visible">True</property>
+                        <child>
+                            <object class="GtkButton" id="rename_prefix_button">
+                                <property name="tooltip-text" translatable="yes">Prefix mask with current directory</property>
+                                <property name="visible">True</property>
+                                <child>
+                                    <object class="GtkImage" id="rename_prefix_image">
+                                        <property name="icon-name">folder-new</property>
+                                        <property name="visible">True</property>
+                                    </object>
+                                </child>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkComboBox" id="rename_combo">
+                                <property name="has-entry">True</property>
+                                <property name="model">rename_masks_model</property>
+                                <property name="entry-text-column">0</property>
+                                <property name="hexpand">True</property>
+                                <property name="tooltip-text" translatable="yes">Select or type in a mask using codes (see Legend) to parse tag fields. Used to rename the file.
+        Use ‘/’ to make directories. If the first character is ‘/’, it is an absolute path, otherwise is relative to the old path</property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="rename_preview_label">
+                        <property name="label" translatable="yes">Rename file preview</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+            </object>
+        </child>
+        <child type="tab">
+            <object class="GtkLabel" id="rename_tab_label">
+                <property name="label" translatable="yes">Rename File</property>
+            </object>
+        </child>
+        <child>
+            <object class="GtkGrid" id="process_grid">
+                <property name="border-width">12</property>
+                <property name="orientation">vertical</property>
+                <property name="row-spacing">6</property>
+                <property name="visible">True</property>
+                <child>
+                    <object class="GtkLabel" id="tag_fields_label">
+                        <property name="halign">start</property>
+                        <property name="label" translatable="yes">Tag Fields</property>
+                        <property name="visible">True</property>
+                        <attributes>
+                            <attribute name="weight" value="bold"/>
+                        </attributes>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkGrid" id="fill_tags_grid">
+                        <property name="column-spacing">12</property>
+                        <property name="margin-left">12</property>
+                        <property name="row-spacing">6</property>
+                        <property name="visible">True</property>
+                        <child>
+                            <object class="GtkCheckButton" id="process_filename_check">
+                                <property name="label" translatable="yes">Filename</property>
+                                <property name="name">filename</property>
+                                <property name="tooltip-text" translatable="yes">Process filename</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">0</property>
+                                <property name="top-attach">0</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkCheckButton" id="process_title_check">
+                                <property name="label" translatable="yes">Title</property>
+                                <property name="name">title</property>
+                                <property name="tooltip-text" translatable="yes">Process title field</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">1</property>
+                                <property name="top-attach">0</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkCheckButton" id="process_artist_check">
+                                <property name="label" translatable="yes">Artist</property>
+                                <property name="name">artist</property>
+                                <property name="tooltip-text" translatable="yes">Process artist field</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">2</property>
+                                <property name="top-attach">0</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkCheckButton" id="process_album_artist_check">
+                                <property name="label" translatable="yes">Album Artist</property>
+                                <property name="name">album-artist</property>
+                                <property name="tooltip-text" translatable="yes">Process artist field</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">3</property>
+                                <property name="top-attach">0</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkCheckButton" id="process_album_check">
+                                <property name="label" translatable="yes">Album</property>
+                                <property name="name">album</property>
+                                <property name="tooltip-text" translatable="yes">Process album field</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">4</property>
+                                <property name="top-attach">0</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkCheckButton" id="process_genre_check">
+                                <property name="label" translatable="yes">Genre</property>
+                                <property name="name">genre</property>
+                                <property name="tooltip-text" translatable="yes">Process genre field</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">5</property>
+                                <property name="top-attach">0</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkCheckButton" id="process_comment_check">
+                                <property name="label" translatable="yes">Comment</property>
+                                <property name="name">comment</property>
+                                <property name="tooltip-text" translatable="yes">Process comment field</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">0</property>
+                                <property name="top-attach">1</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkCheckButton" id="process_composer_check">
+                                <property name="label" translatable="yes">Composer</property>
+                                <property name="name">composer</property>
+                                <property name="tooltip-text" translatable="yes">Process composer field</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">1</property>
+                                <property name="top-attach">1</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkCheckButton" id="process_orig_artist_check">
+                                <property name="label" translatable="yes">Orig. Artist</property>
+                                <property name="name">original-artist</property>
+                                <property name="tooltip-text" translatable="yes">Process original artist field</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">2</property>
+                                <property name="top-attach">1</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkCheckButton" id="process_copyright_check">
+                                <property name="label" translatable="yes">Copyright</property>
+                                <property name="name">copyright</property>
+                                <property name="tooltip-text" translatable="yes">Process copyright field</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">3</property>
+                                <property name="top-attach">1</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkCheckButton" id="process_url_check">
+                                <property name="label" translatable="yes">URL</property>
+                                <property name="name">url</property>
+                                <property name="tooltip-text" translatable="yes">Process URL field</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">4</property>
+                                <property name="top-attach">1</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkCheckButton" id="process_encoded_by_check">
+                                <property name="label" translatable="yes">Encoded By</property>
+                                <property name="name">encoded-by</property>
+                                <property name="tooltip-text" translatable="yes">Process encoded-by field</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">5</property>
+                                <property name="top-attach">1</property>
+                            </packing>
+                        </child>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkGrid" id="capital_spaces_grid">
+                        <property name="column-spacing">12</property>
+                        <property name="row-spacing">6</property>
+                        <property name="visible">True</property>
+                        <child>
+                            <object class="GtkLabel" id="capitalization_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">Capitalization</property>
+                                <property name="visible">True</property>
+                                <attributes>
+                                    <attribute name="weight" value="bold"/>
+                                </attributes>
+                            </object>
+                            <packing>
+                                <property name="left-attach">0</property>
+                                <property name="top-attach">0</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkRadioButton" id="capitalize_all_radio">
+                                <property name="label" translatable="yes">Capitalize all</property>
+                                <property name="margin-left">12</property>
+                                <property name="tooltip-text" translatable="yes">Whether to upper-case all characters of the tag when processing tag fields</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">0</property>
+                                <property name="top-attach">1</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkRadioButton" id="capitalize_lower_radio">
+                                <property name="group">capitalize_all_radio</property>
+                                <property name="label" translatable="yes">Lowercase all</property>
+                                <property name="margin-left">12</property>
+                                <property name="tooltip-text" translatable="yes">Whether to lower-case all characters of the tag when processing tag fields</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">0</property>
+                                <property name="top-attach">2</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkRadioButton" id="capitalize_first_radio">
+                                <property name="group">capitalize_all_radio</property>
+                                <property name="label" translatable="yes">Capitalize first letter</property>
+                                <property name="margin-left">12</property>
+                                <property name="tooltip-text" translatable="yes">Whether to upper-case the first letter of the tag when processing tag fields</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">0</property>
+                                <property name="top-attach">3</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkRadioButton" id="capitalize_first_style_radio">
+                                <property name="group">capitalize_all_radio</property>
+                                <property name="label" translatable="yes">Capitalize the first letter of each word</property>
+                                <property name="margin-left">12</property>
+                                <property name="tooltip-text" translatable="yes">Whether to upper-case the first letter of each word when processing tag fields</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">0</property>
+                                <property name="top-attach">4</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkCheckButton" id="capitalize_roman_check">
+                                <property name="label" translatable="yes">Detect Roman numerals</property>
+                                <property name="margin-left">24</property>
+                                <property name="tooltip-text" translatable="yes">Whether to detect Roman numerals when applying upper-case conversions while processing tag fields</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">0</property>
+                                <property name="top-attach">5</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkRadioButton" id="capitalize_none_radio">
+                                <property name="group">capitalize_all_radio</property>
+                                <property name="label" translatable="yes">Do not change capitalization</property>
+                                <property name="margin-left">12</property>
+                                <property name="tooltip-text" translatable="yes"></property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">0</property>
+                                <property name="top-attach">6</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="spaces_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">Spaces Conversions</property>
+                                <property name="visible">True</property>
+                                <attributes>
+                                    <attribute name="weight" value="bold"/>
+                                </attributes>
+                            </object>
+                            <packing>
+                                <property name="left-attach">1</property>
+                                <property name="top-attach">0</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkRadioButton" id="spaces_remove_radio">
+                                <property name="label" translatable="yes">Remove spaces</property>
+                                <property name="margin-left">12</property>
+                                <property name="tooltip-text" translatable="yes">Whether to remove all spaces when processing tag fields</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">1</property>
+                                <property name="top-attach">1</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkRadioButton" id="spaces_insert_radio">
+                                <property name="group">spaces_remove_radio</property>
+                                <property name="label" translatable="yes">Insert a space before uppercase letters</property>
+                                <property name="margin-left">12</property>
+                                <property name="tooltip-text" translatable="yes">Whether to insert spaces before capital letters when processing tag fields</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">1</property>
+                                <property name="top-attach">2</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkRadioButton" id="spaces_insert_one_radio">
+                                <property name="group">spaces_remove_radio</property>
+                                <property name="label" translatable="yes">Remove duplicate spaces and underscores</property>
+                                <property name="margin-left">12</property>
+                                <property name="tooltip-text" translatable="yes">Whether to remove duplicate spaces and underscores when processing tag fields</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">1</property>
+                                <property name="top-attach">3</property>
+                            </packing>
+                        </child>
+                        <child>
+                            <object class="GtkRadioButton" id="spaces_none_radio">
+                                <property name="group">spaces_remove_radio</property>
+                                <property name="label" translatable="yes">Do not change word separators</property>
+                                <property name="margin-left">12</property>
+                                <property name="visible">True</property>
+                            </object>
+                            <packing>
+                                <property name="left-attach">1</property>
+                                <property name="top-attach">4</property>
+                            </packing>
+                        </child>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="convert_characters_label">
+                        <property name="halign">start</property>
+                        <property name="label" translatable="yes">Character Conversions</property>
+                        <property name="visible">True</property>
+                        <attributes>
+                            <attribute name="weight" value="bold"/>
+                        </attributes>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkRadioButton" id="convert_space_radio">
+                        <property name="label" translatable="yes">Convert ‘_’ and ‘%20’ to spaces</property>
+                        <property name="margin-left">12</property>
+                        <property name="name">spaces</property>
+                        <property name="tooltip-text" translatable="yes">The underscore character or the string ‘%20’ is replaced by one space. Example, before: ‘Text%20In%20An_Entry‘, after: ‘Text In An Entry’</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkRadioButton" id="convert_underscores_radio">
+                        <property name="group">convert_space_radio</property>
+                        <property name="label" translatable="yes">Convert ‘ ’ to ‘_’</property>
+                        <property name="margin-left">12</property>
+                        <property name="name">underscores</property>
+                        <property name="tooltip-text" translatable="yes">The space character is replaced by one underscore character. Example, before: ‘Text In An Entry’, after: ‘Text_In_An_Entry’</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkBox" id="convert_string_box">
+                        <property name="margin-left">12</property>
+                        <property name="orientation">horizontal</property>
+                        <property name="spacing">6</property>
+                        <property name="visible">True</property>
+                        <child>
+                            <object class="GtkRadioButton" id="convert_string_radio">
+                                <property name="group">convert_space_radio</property>
+                                <property name="label" translatable="yes">Convert:</property>
+                                <property name="name">characters</property>
+                                <property name="tooltip-text" translatable="yes">Replace a string by another one. Note that the search is case sensitive</property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkEntry" id="convert_from_entry">
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="convert_to_label">
+<!-- FIXME: translation context. -->
+                                <property name="label" translatable="yes">to: </property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkEntry" id="convert_to_entry">
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkRadioButton" id="convert_none_radio">
+                        <property name="group">convert_space_radio</property>
+                        <property name="label" translatable="yes">Do not convert</property>
+                        <property name="margin-left">12</property>
+                        <property name="name">no-change</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+            </object>
+        </child>
+        <child type="tab">
+            <object class="GtkLabel" id="process_tab_label">
+                <property name="label" translatable="yes">Process Fields</property>
+            </object>
+        </child>
+        <child type="action-end">
+            <object class="GtkBox" id="action_box">
+                <property name="orientation">horizontal</property>
+                <property name="visible">True</property>
+                <child>
+                    <object class="GtkToggleButton" id="scanner_mask_toggle">
+                        <property name="tooltip-text" translatable="yes">Show / Hide Masks Editor</property>
+                        <property name="visible">True</property>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkToggleButton" id="scanner_legend_toggle">
+                        <property name="tooltip-text" translatable="yes">Show / Hide Legend</property>
+                        <property name="visible">True</property>
+                        <child>
+                            <object class="GtkImage" id="scanner_legend_image">
+                                <property name="icon-name">help-faq</property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkButton" id="scanner_preferences_button">
+                        <property name="tooltip-text" translatable="yes">Scanner Preferences</property>
+                        <property name="visible">True</property>
+                        <child>
+                            <object class="GtkImage" id="scanner_preferences_image">
+                                <property name="icon-name">preferences-other</property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                    </object>
+                </child>
+            </object>
+        </child>
+    </object>
+</interface>
diff --git a/data/search_dialog.ui b/data/search_dialog.ui
new file mode 100644
index 0000000..104a9f4
--- /dev/null
+++ b/data/search_dialog.ui
@@ -0,0 +1,385 @@
+<interface domain="easytag">
+    <requires lib="gtk+" version="3.4"/>
+    <object class="GtkListStore" id="search_model">
+        <columns>
+            <column type="gchararray"/>
+            <column type="gchararray"/>
+            <column type="gchararray"/>
+            <column type="gchararray"/>
+            <column type="gchararray"/>
+            <column type="gchararray"/>
+            <column type="gchararray"/>
+            <column type="gchararray"/>
+            <column type="gchararray"/>
+            <column type="gchararray"/>
+            <column type="gchararray"/>
+            <column type="gchararray"/>
+            <column type="gchararray"/>
+            <column type="gchararray"/>
+            <column type="gchararray"/>
+            <column type="gint"/>
+            <column type="gint"/>
+            <column type="gint"/>
+            <column type="gint"/>
+            <column type="gint"/>
+            <column type="gint"/>
+            <column type="gint"/>
+            <column type="gint"/>
+            <column type="gint"/>
+            <column type="gint"/>
+            <column type="gint"/>
+            <column type="gint"/>
+            <column type="gint"/>
+            <column type="gint"/>
+            <column type="gint"/>
+            <column type="GdkRGBA"/>
+            <column type="GdkRGBA"/>
+            <column type="GdkRGBA"/>
+            <column type="GdkRGBA"/>
+            <column type="GdkRGBA"/>
+            <column type="GdkRGBA"/>
+            <column type="GdkRGBA"/>
+            <column type="GdkRGBA"/>
+            <column type="GdkRGBA"/>
+            <column type="GdkRGBA"/>
+            <column type="GdkRGBA"/>
+            <column type="GdkRGBA"/>
+            <column type="GdkRGBA"/>
+            <column type="GdkRGBA"/>
+            <column type="GdkRGBA"/>
+            <column type="gpointer"/>
+        </columns>
+    </object>
+    <object class="GtkGrid" id="search_grid">
+        <property name="column-spacing">6</property>
+        <property name="row-spacing">6</property>
+        <child>
+            <object class="GtkLabel" id="search_label">
+                <property name="halign">end</property>
+                <property name="label" translatable="yes">Search:</property>
+                <property name="visible">True</property>
+            </object>
+            <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">0</property>
+            </packing>
+        </child>
+        <child>
+            <object class="GtkComboBox" id="search_combo">
+                <property name="has-entry">True</property>
+                <property name="entry-text-column">0</property>
+                <property name="tooltip-text" translatable="yes">Type the text to search for in the file list, or leave the field empty to display all files</property>
+                <property name="visible">True</property>
+            </object>
+            <packing>
+                <property name="left-attach">1</property>
+                <property name="top-attach">0</property>
+                <property name="width">4</property>
+            </packing>
+        </child>
+        <child>
+            <object class="GtkButton" id="search_find_button">
+                <property name="can-default">True</property>
+                <property name="label" translatable="yes">_Find</property>
+                <property name="use-underline">True</property>
+                <property name="visible">True</property>
+            </object>
+            <packing>
+                <property name="left-attach">5</property>
+                <property name="top-attach">0</property>
+            </packing>
+        </child>
+        <child>
+            <object class="GtkLabel" id="search_in_label">
+                <property name="halign">end</property>
+                <property name="label" translatable="yes">In:</property>
+                <property name="visible">True</property>
+            </object>
+            <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">1</property>
+            </packing>
+        </child>
+        <child>
+            <object class="GtkCheckButton" id="search_filename_check">
+                <property name="label" translatable="yes" comments="This option is for the previous 'in' option. For instance, translate this as 'Search' 'In:' 'the Filename'.">the Filename</property>
+                <property name="visible">True</property>
+            </object>
+            <packing>
+                <property name="left-attach">1</property>
+                <property name="top-attach">1</property>
+            </packing>
+        </child>
+        <child>
+            <object class="GtkCheckButton" id="search_tag_check">
+                <property name="label" translatable="yes" comments="This option is for the previous 'in' option. For instance, translate this as 'Search' 'In:' 'the Tag'.">the Tag</property>
+                <property name="visible">True</property>
+            </object>
+            <packing>
+                <property name="left-attach">2</property>
+                <property name="top-attach">1</property>
+            </packing>
+        </child>
+        <child>
+            <object class="GtkSeparator" id="search_separator">
+                <property name="orientation">vertical</property>
+                <property name="visible">True</property>
+            </object>
+            <packing>
+                <property name="left-attach">3</property>
+                <property name="top-attach">1</property>
+            </packing>
+        </child>
+        <child>
+            <object class="GtkCheckButton" id="search_case_check">
+                <property name="label" translatable="yes">Case sensitive</property>
+                <property name="visible">True</property>
+            </object>
+            <packing>
+                <property name="left-attach">4</property>
+                <property name="top-attach">1</property>
+            </packing>
+        </child>
+        <child>
+            <object class="GtkButton" id="search_close_button">
+                <property name="label" translatable="yes">_Close</property>
+                <property name="use-underline">True</property>
+                <property name="visible">True</property>
+            </object>
+            <packing>
+                <property name="left-attach">5</property>
+                <property name="top-attach">1</property>
+            </packing>
+        </child>
+        <child>
+            <object class="GtkScrolledWindow" id="search_scrolled">
+                <property name="min-content-height">300</property>
+                <property name="min-content-width">400</property>
+                <property name="visible">True</property>
+                <child>
+                    <object class="GtkTreeView" id="search_view">
+                        <property name="model">search_model</property>
+                        <property name="sensitive">False</property>
+                        <property name="visible">True</property>
+                        <child internal-child="selection">
+                            <object class="GtkTreeSelection" id="search_selection">
+                                <property name="mode">multiple</property>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkTreeViewColumn" id="filename_column">
+                                <property name="title" translatable="yes">Filename</property>
+                                <child>
+                                    <object class="GtkCellRendererText" id="filename_renderer"/>
+                                    <attributes>
+                                        <attribute name="text">0</attribute>
+                                        <attribute name="weight">15</attribute>
+                                        <attribute name="foreground-rgba">30</attribute>
+                                    </attributes>
+                                </child>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkTreeViewColumn" id="title_column">
+                                <property name="title" translatable="yes">Title</property>
+                                <child>
+                                    <object class="GtkCellRendererText" id="title_renderer"/>
+                                    <attributes>
+                                        <attribute name="text">1</attribute>
+                                        <attribute name="weight">16</attribute>
+                                        <attribute name="foreground-rgba">31</attribute>
+                                    </attributes>
+                                </child>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkTreeViewColumn" id="artist_column">
+                                <property name="title" translatable="yes">Artist</property>
+                                <child>
+                                    <object class="GtkCellRendererText" id="artist_renderer"/>
+                                    <attributes>
+                                        <attribute name="text">2</attribute>
+                                        <attribute name="weight">17</attribute>
+                                        <attribute name="foreground-rgba">32</attribute>
+                                    </attributes>
+                                </child>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkTreeViewColumn" id="album_artist_column">
+                                <property name="title" translatable="yes">Album Artist</property>
+                                <child>
+                                    <object class="GtkCellRendererText" id="album_artist_renderer"/>
+                                    <attributes>
+                                        <attribute name="text">3</attribute>
+                                        <attribute name="weight">18</attribute>
+                                        <attribute name="foreground-rgba">33</attribute>
+                                    </attributes>
+                                </child>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkTreeViewColumn" id="album_column">
+                                <property name="title" translatable="yes">Album</property>
+                                <child>
+                                    <object class="GtkCellRendererText" id="album_renderer"/>
+                                    <attributes>
+                                        <attribute name="text">4</attribute>
+                                        <attribute name="weight">19</attribute>
+                                        <attribute name="foreground-rgba">34</attribute>
+                                    </attributes>
+                                </child>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkTreeViewColumn" id="cd_column">
+                                <property name="title" translatable="yes">CD</property>
+                                <child>
+                                    <object class="GtkCellRendererText" id="cd_renderer"/>
+                                    <attributes>
+                                        <attribute name="text">5</attribute>
+                                        <attribute name="weight">20</attribute>
+                                        <attribute name="foreground-rgba">35</attribute>
+                                    </attributes>
+                                </child>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkTreeViewColumn" id="year_column">
+                                <property name="title" translatable="yes">Year</property>
+                                <child>
+                                    <object class="GtkCellRendererText" id="year_renderer"/>
+                                    <attributes>
+                                        <attribute name="text">6</attribute>
+                                        <attribute name="weight">21</attribute>
+                                        <attribute name="foreground-rgba">36</attribute>
+                                    </attributes>
+                                </child>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkTreeViewColumn" id="track_column">
+                                <property name="title" translatable="yes">Track</property>
+                                <child>
+                                    <object class="GtkCellRendererText" id="track_renderer"/>
+                                    <attributes>
+                                        <attribute name="text">7</attribute>
+                                        <attribute name="weight">22</attribute>
+                                        <attribute name="foreground-rgba">37</attribute>
+                                    </attributes>
+                                </child>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkTreeViewColumn" id="genre_column">
+                                <property name="title" translatable="yes">Genre</property>
+                                <child>
+                                    <object class="GtkCellRendererText" id="genre_renderer"/>
+                                    <attributes>
+                                        <attribute name="text">8</attribute>
+                                        <attribute name="weight">23</attribute>
+                                        <attribute name="foreground-rgba">38</attribute>
+                                    </attributes>
+                                </child>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkTreeViewColumn" id="comment_column">
+                                <property name="title" translatable="yes">Comment</property>
+                                <child>
+                                    <object class="GtkCellRendererText" id="comment_renderer"/>
+                                    <attributes>
+                                        <attribute name="text">9</attribute>
+                                        <attribute name="weight">24</attribute>
+                                        <attribute name="foreground-rgba">39</attribute>
+                                    </attributes>
+                                </child>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkTreeViewColumn" id="composer_column">
+                                <property name="title" translatable="yes">Composer</property>
+                                <child>
+                                    <object class="GtkCellRendererText" id="composer_renderer"/>
+                                    <attributes>
+                                        <attribute name="text">10</attribute>
+                                        <attribute name="weight">25</attribute>
+                                        <attribute name="foreground-rgba">40</attribute>
+                                    </attributes>
+                                </child>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkTreeViewColumn" id="orig_artist_column">
+                                <property name="title" translatable="yes">Original Artist</property>
+                                <child>
+                                    <object class="GtkCellRendererText" id="orig_artist_renderer"/>
+                                    <attributes>
+                                        <attribute name="text">11</attribute>
+                                        <attribute name="weight">26</attribute>
+                                        <attribute name="foreground-rgba">41</attribute>
+                                    </attributes>
+                                </child>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkTreeViewColumn" id="copyright_column">
+                                <property name="title" translatable="yes">Copyright</property>
+                                <child>
+                                    <object class="GtkCellRendererText" id="copyright_renderer"/>
+                                    <attributes>
+                                        <attribute name="text">12</attribute>
+                                        <attribute name="weight">27</attribute>
+                                        <attribute name="foreground-rgba">42</attribute>
+                                    </attributes>
+                                </child>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkTreeViewColumn" id="url_column">
+                                <property name="title" translatable="yes">URL</property>
+                                <child>
+                                    <object class="GtkCellRendererText" id="url_renderer"/>
+                                    <attributes>
+                                        <attribute name="text">13</attribute>
+                                        <attribute name="weight">28</attribute>
+                                        <attribute name="foreground-rgba">43</attribute>
+                                    </attributes>
+                                </child>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkTreeViewColumn" id="encoded_by_column">
+                                <property name="title" translatable="yes">Encoded By</property>
+                                <child>
+                                    <object class="GtkCellRendererText" id="encoced_by_renderer"/>
+                                    <attributes>
+                                        <attribute name="text">14</attribute>
+                                        <attribute name="weight">29</attribute>
+                                        <attribute name="foreground-rgba">44</attribute>
+                                    </attributes>
+                                </child>
+                            </object>
+                        </child>
+                    </object>
+                </child>
+            </object>
+            <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">2</property>
+                <property name="width">6</property>
+            </packing>
+        </child>
+        <child>
+            <object class="GtkStatusbar" id="search_status">
+                <property name="visible">True</property>
+            </object>
+            <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">3</property>
+                <property name="width">6</property>
+            </packing>
+        </child>
+    </object>
+</interface>
+
diff --git a/data/tag_area.ui b/data/tag_area.ui
new file mode 100644
index 0000000..73cd5fd
--- /dev/null
+++ b/data/tag_area.ui
@@ -0,0 +1,602 @@
+<interface domain="easytag">
+    <requires lib="gtk+" version="3.4"/>
+    <object class="GtkListStore" id="genre_combo_model">
+        <columns>
+            <column type="gchararray"/>
+        </columns>
+    </object>
+    <object class="GtkListStore" id="images_model">
+        <columns>
+            <column type="GdkPixbuf"/>
+            <column type="gchararray"/>
+            <column type="gpointer"/>
+        </columns>
+    </object>
+    <object class="GtkListStore" id="track_combo_model">
+        <columns>
+            <column type="gchararray"/>
+        </columns>
+    </object>
+    <object class="GtkDialog" id="image_properties_dialog">
+        <property name="border-width">12</property>
+        <property name="destroy-with-parent">True</property>
+        <property name="modal">True</property>
+        <child internal-child="vbox">
+            <object class="GtkBox" id="vbox">
+                <property name="spacing">12</property>
+                <child>
+                    <object class="GtkGrid" id="properties_grid">
+                        <property name="column-spacing">12</property>
+                        <property name="orientation">vertical</property>
+                        <property name="row-spacing">6</property>
+                        <property name="visible">True</property>
+                        <child>
+                            <object class="GtkScrolledWindow" id="types_scrolled">
+                                <property name="min-content-height">300</property>
+                                <property name="min-content-width">400</property>
+                                <property name="visible">True</property>
+                                <child>
+                                    <object class="GtkTreeView" id="types_view">
+                                        <property name="visible">True</property>
+                                        <child>
+                                            <object class="GtkTreeViewColumn" id="types_column">
+                                                <property name="title" translatable="yes">Image Type</property>
+                                                <child>
+                                                    <object class="GtkCellRendererText" id="types_renderer"/>
+                                                    <attributes>
+                                                        <attribute name="text">0</attribute>
+                                                    </attributes>
+                                                </child>
+                                            </object>
+                                        </child>
+                                    </object>
+                                </child>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkLabel" id="description_label">
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">Description</property>
+                                <property name="margin-top">12</property>
+                                <property name="visible">True</property>
+                                <attributes>
+                                    <attribute name="weight" value="bold"/>
+                                </attributes>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkEntry" id="description_entry">
+                                <property name="margin-left">12</property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                    </object>
+                </child>
+                <child internal-child="action_area">
+                    <object class="GtkButtonBox" id="button_box">
+                        <child>
+                            <object class="GtkButton" id="cancel_button">
+                                <property name="label" translatable="yes">_Cancel</property>
+                                <property name="use-underline">True</property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkButton" id="accept_button">
+                                <property name="can-default">True</property>
+                                <property name="label" translatable="yes">_Accept</property>
+                                <property name="use-underline">True</property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                    </object>
+                </child>
+            </object>
+        </child>
+        <action-widgets>
+            <action-widget response="-3">accept_button</action-widget>
+            <action-widget response="-2">cancel_button</action-widget>
+        </action-widgets>
+    </object>
+    <object class="GtkNotebook" id="tag_notebook">
+        <property name="border-width">2</property>
+        <property name="visible">True</property>
+        <child type="action-start">
+            <object class="GtkLabel" id="tag_label">
+                <property name="halign">start</property>
+                <property name="label" translatable="yes">Tag</property>
+                <property name="margin-left">6</property>
+                <property name="margin-right">6</property>
+                <property name="visible">True</property>
+                <attributes>
+                    <attribute name="weight" value="bold"/>
+                </attributes>
+            </object>
+        </child>
+        <child>
+            <object class="GtkGrid" id="common_grid">
+                <property name="border-width">2</property>
+                <property name="column-spacing">2</property>
+                <property name="row-spacing">2</property>
+                <property name="visible">True</property>
+                <child>
+                    <object class="GtkLabel" id="title_label">
+                        <property name="halign">end</property>
+                        <property name="label" translatable="yes">Title:</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">0</property>
+                        <property name="top-attach">0</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkEntry" id="title_entry">
+                        <property name="secondary-icon-name">insert-text</property>
+                        <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected files with this title</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">1</property>
+                        <property name="top-attach">0</property>
+                        <property name="width">8</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="artist_label">
+                        <property name="halign">end</property>
+                        <property name="label" translatable="yes">Artist:</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">0</property>
+                        <property name="top-attach">1</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkEntry" id="artist_entry">
+                        <property name="secondary-icon-name">insert-text</property>
+                        <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected files with this artist</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">1</property>
+                        <property name="top-attach">1</property>
+                        <property name="width">8</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="album_artist_label">
+                        <property name="halign">end</property>
+                        <property name="label" translatable="yes">Album artist:</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">0</property>
+                        <property name="top-attach">2</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkEntry" id="album_artist_entry">
+                        <property name="secondary-icon-name">insert-text</property>
+                        <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected files with this album artist</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">1</property>
+                        <property name="top-attach">2</property>
+                        <property name="width">8</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="album_label">
+                        <property name="halign">end</property>
+                        <property name="label" translatable="yes">Album:</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">0</property>
+                        <property name="top-attach">3</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkEntry" id="album_entry">
+                        <property name="secondary-icon-name">insert-text</property>
+                        <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected files with this album name</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">1</property>
+                        <property name="top-attach">3</property>
+                        <property name="width">6</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="disc_label">
+                        <property name="halign">end</property>
+                        <property name="label" translatable="yes">CD:</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">7</property>
+                        <property name="top-attach">3</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkEntry" id="disc_entry">
+                        <property name="hexpand">True</property>
+                        <property name="secondary-icon-name">insert-text</property>
+                        <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected files with this disc number</property>
+                        <property name="visible">True</property>
+                        <property name="width-chars">3</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">8</property>
+                        <property name="top-attach">3</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="year_label">
+                        <property name="halign">end</property>
+                        <property name="label" translatable="yes">Year:</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">0</property>
+                        <property name="top-attach">4</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkEntry" id="year_entry">
+                        <property name="hexpand">True</property>
+                        <property name="max-length">4</property>
+                        <property name="secondary-icon-name">insert-text</property>
+                        <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected files with this year</property>
+                        <property name="visible">True</property>
+                        <property name="width-chars">5</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">1</property>
+                        <property name="top-attach">4</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkSeparator" id="tag_separator">
+                        <property name="orientation">vertical</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">2</property>
+                        <property name="top-attach">4</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkButton" id="track_sequence_button">
+                        <property name="tooltip-text" translatable="yes">Number selected tracks sequentially. Starts at 01 in each subdirectory</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">3</property>
+                        <property name="top-attach">4</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="track_label">
+                        <property name="halign">end</property>
+                        <property name="label" translatable="yes">Track #:</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">4</property>
+                        <property name="top-attach">4</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkComboBox" id="track_combo">
+                        <property name="has-entry">True</property>
+                        <property name="model">track_combo_model</property>
+                        <property name="entry-text-column">0</property>
+                        <property name="expand">True</property>
+                        <property name="visible">True</property>
+                        <property name="wrap-width">3</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">5</property>
+                        <property name="top-attach">4</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="track_separator_label">
+                        <property name="label">/</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">6</property>
+                        <property name="top-attach">4</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkButton" id="track_number_button">
+                        <property name="tooltip-text" translatable="yes">Set the number of files, in the same directory of the displayed file, to the selected tracks</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">7</property>
+                        <property name="top-attach">4</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkEntry" id="track_total_entry">
+                        <property name="secondary-icon-name">insert-text</property>
+                        <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected files with this number of tracks</property>
+                        <property name="visible">True</property>
+                        <property name="width-chars">3</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">8</property>
+                        <property name="top-attach">4</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="genre_label">
+                        <property name="halign">end</property>
+                        <property name="label" translatable="yes">Genre:</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">0</property>
+                        <property name="top-attach">5</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkComboBox" id="genre_combo">
+                        <property name="has-entry">True</property>
+                        <property name="model">genre_combo_model</property>
+                        <property name="entry-text-column">0</property>
+                        <property name="visible">True</property>
+                        <property name="wrap-width">2</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">1</property>
+                        <property name="top-attach">5</property>
+                        <property name="width">8</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="comment_label">
+                        <property name="halign">end</property>
+                        <property name="label" translatable="yes">Comment:</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">0</property>
+                        <property name="top-attach">6</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkEntry" id="comment_entry">
+                        <property name="secondary-icon-name">insert-text</property>
+                        <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected files with this comment</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">1</property>
+                        <property name="top-attach">6</property>
+                        <property name="width">8</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="composer_label">
+                        <property name="halign">end</property>
+                        <property name="label" translatable="yes">Composer:</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">0</property>
+                        <property name="top-attach">7</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkEntry" id="composer_entry">
+                        <property name="secondary-icon-name">insert-text</property>
+                        <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected files with this composer</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">1</property>
+                        <property name="top-attach">7</property>
+                        <property name="width">8</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="orig_artist_label">
+                        <property name="halign">end</property>
+                        <property name="label" translatable="yes">Orig. artist:</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">0</property>
+                        <property name="top-attach">8</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkEntry" id="orig_artist_entry">
+                        <property name="secondary-icon-name">insert-text</property>
+                        <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected files with this original artist</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">1</property>
+                        <property name="top-attach">8</property>
+                        <property name="width">8</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="copyright_label">
+                        <property name="halign">end</property>
+                        <property name="label" translatable="yes">Copyright:</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">0</property>
+                        <property name="top-attach">9</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkEntry" id="copyright_entry">
+                        <property name="secondary-icon-name">insert-text</property>
+                        <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected files with this copyright</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">1</property>
+                        <property name="top-attach">9</property>
+                        <property name="width">8</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="url_label">
+                        <property name="halign">end</property>
+                        <property name="label" translatable="yes">URL:</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">0</property>
+                        <property name="top-attach">10</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkEntry" id="url_entry">
+                        <property name="secondary-icon-name">insert-text</property>
+                        <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected files with this URL</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">1</property>
+                        <property name="top-attach">10</property>
+                        <property name="width">8</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkLabel" id="encoded_by_label">
+                        <property name="halign">end</property>
+                        <property name="label" translatable="yes">Encoded by:</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">0</property>
+                        <property name="top-attach">11</property>
+                    </packing>
+                </child>
+                <child>
+                    <object class="GtkEntry" id="encoded_by_entry">
+                        <property name="secondary-icon-name">insert-text</property>
+                        <property name="secondary-icon-tooltip-text" translatable="yes">Tag selected files with this encoder name</property>
+                        <property name="visible">True</property>
+                    </object>
+                    <packing>
+                        <property name="left-attach">1</property>
+                        <property name="top-attach">11</property>
+                        <property name="width">8</property>
+                    </packing>
+                </child>
+            </object>
+        </child>
+        <child type="tab">
+            <object class="GtkLabel" id="common_label">
+                <property name="label" translatable="yes">Common</property>
+                <property name="visible">True</property>
+            </object>
+        </child>
+        <child>
+            <object class="GtkGrid" id="images_grid">
+                <property name="orientation">vertical</property>
+                <property name="visible">True</property>
+                <child>
+                    <object class="GtkScrolledWindow" id="images_scrolled">
+                        <property name="expand">True</property>
+                        <property name="shadow-type">etched-in</property>
+                        <property name="tooltip-text" translatable="yes">You can use drag and drop to add an image</property>
+                        <property name="visible">True</property>
+                        <child>
+                            <object class="GtkTreeView" id="images_view">
+                                <property name="model">images_model</property>
+                                <property name="headers-visible">False</property>
+                                <property name="visible">True</property>
+                                <child>
+                                    <object class="GtkTreeViewColumn" id="images_column">
+                                        <property name="sizing">autosize</property>
+                                        <child>
+                                            <object class="GtkCellRendererPixbuf" id="images_thumbnail_renderer"/>
+                                            <attributes>
+                                                <attribute name="pixbuf">0</attribute>
+                                            </attributes>
+                                        </child>
+                                        <child>
+                                            <object class="GtkCellRendererText" id="images_text_renderer"/>
+                                            <attributes>
+                                                <attribute name="text">1</attribute>
+                                            </attributes>
+                                        </child>
+                                    </object>
+                                </child>
+                            </object>
+                        </child>
+                    </object>
+                </child>
+                <child>
+                    <object class="GtkToolbar" id="images_toolbar">
+                        <property name="visible">True</property>
+                        <style>
+                            <class name="inline-toolbar"/>
+                        </style>
+                        <child>
+                            <object class="GtkToolButton" id="image_add_button">
+                                <property name="icon-name">list-add</property>
+                                <property name="tooltip-text" translatable="yes">Add images to the tag</property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkToolButton" id="image_remove_button">
+                                <property name="icon-name">list-remove</property>
+                                <property name="sensitive">False</property>
+                                <property name="tooltip-text" translatable="yes">Remove selected images from the tag</property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkToolButton" id="image_save_button">
+                                <property name="icon-name">document-save</property>
+                                <property name="sensitive">False</property>
+                                <property name="tooltip-text" translatable="yes">Save the selected images to files</property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkToolButton" id="image_properties_button">
+                                <property name="icon-name">document-properties</property>
+                                <property name="sensitive">False</property>
+                                <property name="tooltip-text" translatable="yes">Edit image properties</property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                        <child>
+                            <object class="GtkToolButton" id="image_apply_button">
+                                <property name="icon-name">insert-image</property>
+                                <property name="tooltip-text" translatable="yes">Tag selected files with these images</property>
+                                <property name="visible">True</property>
+                            </object>
+                        </child>
+                    </object>
+                </child>
+            </object>
+        </child>
+        <child type="tab">
+            <object class="GtkLabel" id="images_label">
+                <property name="label" translatable="yes">Images</property>
+                <property name="visible">True</property>
+            </object>
+        </child>
+    </object>
+</interface>
diff --git a/data/toolbar.ui b/data/toolbar.ui
new file mode 100644
index 0000000..6adb884
--- /dev/null
+++ b/data/toolbar.ui
@@ -0,0 +1,169 @@
+<interface domain="easytag">
+    <object class="GtkToolbar" id="main_toolbar">
+        <property name="visible">True</property>
+        <style>
+            <class name="primary-toolbar"/>
+        </style>
+        <child>
+            <object class="GtkToolButton" id="first_button">
+                <property name="action-name">win.go-first</property>
+                <property name="icon-name">go-first</property>
+                <property name="label" translatable="yes">_First File</property>
+                <property name="tooltip-text" translatable="yes">First file</property>
+                <property name="visible">True</property>
+            </object>
+        </child>
+        <child>
+            <object class="GtkToolButton" id="previous_button">
+                <property name="action-name">win.go-previous</property>
+                <property name="icon-name">go-previous</property>
+                <property name="label" translatable="yes">_Previous File</property>
+                <property name="tooltip-text" translatable="yes">Previous file</property>
+                <property name="visible">True</property>
+            </object>
+        </child>
+        <child>
+            <object class="GtkToolButton" id="next_button">
+                <property name="action-name">win.go-next</property>
+                <property name="icon-name">go-next</property>
+                <property name="label" translatable="yes">_Next File</property>
+                <property name="tooltip-text" translatable="yes">Next file</property>
+                <property name="visible">True</property>
+            </object>
+        </child>
+        <child>
+            <object class="GtkToolButton" id="last_button">
+                <property name="action-name">win.go-last</property>
+                <property name="icon-name">go-last</property>
+                <property name="label" translatable="yes">_Last File</property>
+                <property name="tooltip-text" translatable="yes">Last file</property>
+                <property name="visible">True</property>
+            </object>
+        </child>
+        <child>
+            <object class="GtkSeparatorToolItem" id="separator1"/>
+        </child>
+        <child>
+            <object class="GtkToggleToolButton" id="scanner_button">
+                <property name="action-name">win.scanner</property>
+                <property name="icon-name">document-properties</property>
+                <property name="label" translatable="yes">_Show Scanner</property>
+                <property name="tooltip-text" translatable="yes">Show scanner</property>
+                <property name="visible">True</property>
+            </object>
+        </child>
+        <child>
+            <object class="GtkToolButton" id="remove_tags_button">
+                <property name="action-name">win.remove-tags</property>
+                <property name="icon-name">edit-clear</property>
+                <property name="label" translatable="yes">_Remove Tags</property>
+                <property name="tooltip-text" translatable="yes">Remove tags</property>
+                <property name="visible">True</property>
+            </object>
+        </child>
+        <child>
+            <object class="GtkToolButton" id="undo_file_changes_button">
+                <property name="action-name">win.undo-file-changes</property>
+                <property name="icon-name">edit-undo</property>
+                <property name="label" translatable="yes">_Undo</property>
+                <property name="tooltip-text" translatable="yes">Undo for file</property>
+                <property name="visible">True</property>
+            </object>
+        </child>
+        <child>
+            <object class="GtkToolButton" id="redo_file_changes_button">
+                <property name="action-name">win.redo-file-changes</property>
+                <property name="icon-name">edit-redo</property>
+                <property name="label" translatable="yes">R_edo</property>
+                <property name="tooltip-text" translatable="yes">Redo for file</property>
+                <property name="visible">True</property>
+            </object>
+        </child>
+        <child>
+            <object class="GtkToolButton" id="save_button">
+                <property name="action-name">win.save</property>
+                <property name="icon-name">document-save</property>
+                <property name="label" translatable="yes">_Save Files</property>
+                <property name="tooltip-text" translatable="yes">Save changes to selected files</property>
+                <property name="visible">True</property>
+            </object>
+        </child>
+        <child>
+            <object class="GtkSeparatorToolItem" id="separator2"/>
+        </child>
+        <child>
+            <object class="GtkToggleToolButton" id="file_view_button">
+                <property name="action-name">win.file-artist-view</property>
+                <property name="action-target">'file'</property>
+                <property name="icon-name">audio-x-generic</property>
+                <property name="label" translatable="yes">Directory Tree</property>
+                <property name="tooltip-text" translatable="yes">Browse directory tree</property>
+                <property name="visible">True</property>
+            </object>
+        </child>
+        <child>
+            <object class="GtkToggleToolButton" id="artist_view_button">
+                <property name="action-name">win.file-artist-view</property>
+                <property name="action-target">'artist'</property>
+                <property name="label" translatable="yes">Artists and Albums</property>
+                <!--<property name="icon-widget">artist_view_image</property>-->
+                <property name="tooltip-text" translatable="yes">Browse artists and albums</property>
+                <property name="visible">True</property>
+            </object>
+        </child>
+        <child>
+            <object class="GtkSeparatorToolItem" id="separator3"/>
+        </child>
+        <child>
+            <object class="GtkToolButton" id="invert_selection_button">
+                <property name="action-name">win.invert-selection</property>
+                <property name="label" translatable="yes">Invert File Selection</property>
+                <!--<property name="stock-id">easytag-invert-selection</property>-->
+                <property name="tooltip-text" translatable="yes">Invert file selection</property>
+                <property name="visible">True</property>
+            </object>
+        </child>
+        <child>
+            <object class="GtkSeparatorToolItem" id="separator4"/>
+        </child>
+        <child>
+            <object class="GtkToolButton" id="find_button">
+                <property name="action-name">win.find</property>
+                <property name="icon-name">edit-find</property>
+                <property name="label" translatable="yes">_Find…</property>
+                <property name="tooltip-text" translatable="yes">Search filenames and tags</property>
+                <property name="visible">True</property>
+            </object>
+        </child>
+        <child>
+            <object class="GtkToolButton" id="cddb_button">
+                <property name="action-name">win.show-cddb</property>
+                <property name="icon-name">media-optical</property>
+                <property name="label" translatable="yes">CDDB Search…</property>
+                <property name="tooltip-text" translatable="yes">CDDB Search</property>
+                <property name="visible">True</property>
+            </object>
+        </child>
+        <child>
+            <object class="GtkToolButton" id="playlist_button">
+                <property name="action-name">win.show-playlist</property>
+                <property name="icon-name">document-save-as</property>
+                <property name="label" translatable="yes">Generate Playlist…</property>
+                <property name="tooltip-text" translatable="yes">Generate a playlist</property>
+                <property name="visible">True</property>
+            </object>
+        </child>
+        <child>
+            <object class="GtkSeparatorToolItem" id="separator5"/>
+        </child>
+        <child>
+            <object class="GtkToolButton" id="stop_button">
+                <property name="action-name">win.stop</property>
+                <property name="icon-name">process-stop</property>
+                <property name="label" translatable="yes">Stop</property>
+                <property name="tooltip-text" translatable="yes">Stop the current action</property>
+                <property name="visible">True</property>
+            </object>
+        </child>
+    </object>
+</interface>
diff --git a/easytag-win32-installer.nsi.in b/easytag-win32-installer.nsi.in
index f65d22b..45bce14 100644
--- a/easytag-win32-installer.nsi.in
+++ b/easytag-win32-installer.nsi.in
@@ -232,6 +232,8 @@ Section "Core ${PRODUCT_NAME} Files" SecProgram
   File "${DESTDIR}${PREFIX}/share/icons/hicolor/48x48/apps/easytag.png"
 
   SetOutPath "$INSTDIR\share\glib-2.0\schemas"
+  File "${DESTDIR}${PREFIX}/share/glib-2.0/schemas/org.gnome.EasyTAG.enums.xml"
+  File "${DESTDIR}${PREFIX}/share/glib-2.0/schemas/org.gnome.EasyTAG.gschema.xml"
   File "${PREFIX}/share/glib-2.0/schemas/org.gtk.Settings.FileChooser.gschema.xml"
 
   SetOutPath "$INSTDIR\bin"
diff --git a/help/Makefile.am b/help/Makefile.am
index 1bc5dee..ec50e60 100644
--- a/help/Makefile.am
+++ b/help/Makefile.am
@@ -25,4 +25,4 @@ HELP_FILES = \
 HELP_MEDIA = \
 	media/icon.png
 
-HELP_LINGUAS = el es
+HELP_LINGUAS =	el es
diff --git a/help/Makefile.in b/help/Makefile.in
index bae0194..6e639e3 100644
--- a/help/Makefile.in
+++ b/help/Makefile.in
@@ -82,7 +82,10 @@ DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/gtkdoc_jh_check_xml_catalog.m4 \
 	$(top_srcdir)/m4/gtkdoc_jh_path_xml_catalog.m4 \
-	$(top_srcdir)/m4/intltool.m4 $(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -115,6 +118,7 @@ ALL_LINGUAS = @ALL_LINGUAS@
 AMTAR = @AMTAR@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 APPDATA_VALIDATE = @APPDATA_VALIDATE@
+AR = @AR@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
@@ -134,6 +138,9 @@ DEFS = @DEFS@
 DEPDIR = @DEPDIR@
 DEPRECATED_CPPFLAGS = @DEPRECATED_CPPFLAGS@
 DESKTOP_FILE_VALIDATE = @DESKTOP_FILE_VALIDATE@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
 EASYTAG_CFLAGS = @EASYTAG_CFLAGS@
 EASYTAG_LIBS = @EASYTAG_LIBS@
 ECHO_C = @ECHO_C@
@@ -141,13 +148,17 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GDK_PIXBUF_PIXDATA = @GDK_PIXBUF_PIXDATA@
 GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GLIB_COMPILE_RESOURCES = @GLIB_COMPILE_RESOURCES@
+GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
 GMSGFMT = @GMSGFMT@
 GREP = @GREP@
+GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
 GTESTER = @GTESTER@
 GTESTER_REPORT = @GTESTER_REPORT@
-GTK_CFLAGS = @GTK_CFLAGS@
-GTK_LIBS = @GTK_LIBS@
 HELP_DIR = @HELP_DIR@
 ID3LIB_LIBS = @ID3LIB_LIBS@
 INSTALL = @INSTALL@
@@ -164,17 +175,29 @@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@
 INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@
 INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@
 ITSTOOL = @ITSTOOL@
+LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MKDIR_P = @MKDIR_P@
 MSGFMT = @MSGFMT@
 MSGMERGE = @MSGMERGE@
+NAUTILUS_CFLAGS = @NAUTILUS_CFLAGS@
+NAUTILUS_EXTENSION_DIR = @NAUTILUS_EXTENSION_DIR@
+NAUTILUS_LIBS = @NAUTILUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
 OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
 PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
@@ -186,6 +209,7 @@ PATH_SEPARATOR = @PATH_SEPARATOR@
 PKG_CONFIG = @PKG_CONFIG@
 PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
 PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
@@ -206,8 +230,10 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
@@ -226,6 +252,7 @@ datarootdir = @datarootdir@
 docdir = @docdir@
 dvidir = @dvidir@
 exec_prefix = @exec_prefix@
+gsettingsschemadir = @gsettingsschemadir@
 host = @host@
 host_alias = @host_alias@
 host_cpu = @host_cpu@
@@ -314,6 +341,12 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
 $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 $(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
 tags TAGS:
 
 ctags CTAGS:
@@ -387,7 +420,7 @@ maintainer-clean-generic:
 	@echo "it deletes files that may require special tools to rebuild."
 clean: clean-am
 
-clean-am: clean-generic mostlyclean-am
+clean-am: clean-generic clean-libtool mostlyclean-am
 
 distclean: distclean-am
 	-rm -f Makefile
@@ -439,7 +472,7 @@ maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
 
-mostlyclean-am: mostlyclean-generic
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
 
 pdf: pdf-am
 
@@ -453,16 +486,17 @@ uninstall-am:
 
 .MAKE: install-am install-strip
 
-.PHONY: all all-am check check-am clean clean-generic cscopelist-am \
-	ctags-am distclean distclean-generic distdir dvi dvi-am html \
-	html-am info info-am install install-am install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
-	install-exec-am install-html install-html-am install-info \
-	install-info-am install-man install-pdf install-pdf-am \
-	install-ps install-ps-am install-strip installcheck \
-	installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
-	pdf-am ps ps-am tags-am uninstall uninstall-am
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+	cscopelist-am ctags-am distclean distclean-generic \
+	distclean-libtool distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags-am uninstall uninstall-am
 
 @YELP_HELP_RULES@
 
diff --git a/help/es/cddb-search.page b/help/es/cddb-search.page
index dddeafe..a9c7881 100644
--- a/help/es/cddb-search.page
+++ b/help/es/cddb-search.page
@@ -32,8 +32,7 @@
       <gui style="menuitem">CDDB Search…</gui></guiseq>.</p>
     </item>
     <item>
-      <p>Press <gui style="button">Find</gui> and wait for the search to
-      finish.</p>
+      <p>Pulse <gui style="button">Buscar</gui> y espere a que la búsqueda termine.</p>
     </item>
     <item>
       <!-- TODO Split Manual search into a tip? -->
diff --git a/help/es/es.po b/help/es/es.po
index c131439..ada2611 100644
--- a/help/es/es.po
+++ b/help/es/es.po
@@ -6,8 +6,8 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: easytag master\n"
-"POT-Creation-Date: 2014-07-04 10:40+0000\n"
-"PO-Revision-Date: 2014-07-04 12:47+0200\n"
+"POT-Creation-Date: 2014-07-08 03:13+0000\n"
+"PO-Revision-Date: 2014-07-08 17:35+0200\n"
 "Last-Translator: Daniel Mustieles <daniel.mustieles at gmail.com>\n"
 "Language-Team: Español; Castellano <gnome-es-list at gnome.org>\n"
 "Language: es\n"
@@ -70,6 +70,7 @@ msgstr ""
 msgid ""
 "Press <gui style=\"button\">Find</gui> and wait for the search to finish."
 msgstr ""
+"Pulse <gui style=\"button\">Buscar</gui> y espere a que la búsqueda termine."
 
 #. (itstool) path: item/p
 #: C/cddb-search.page:43
@@ -146,6 +147,8 @@ msgid ""
 "Select <guiseq><gui style=\"menu\">Scanner</gui> <gui style=\"menuitem"
 "\">Rename Files and Directories…</gui></guiseq>."
 msgstr ""
+"Seleccione <guiseq><gui style=\"menu\">Analizador</gui> <gui style=\"menuitem"
+"\">Renombrar archivos y carpetas…</gui></guiseq>."
 
 #. (itstool) path: item/p
 #: C/file-rename.page:34
@@ -162,6 +165,8 @@ msgid ""
 "To apply the changes to all files, select <guiseq><gui style=\"menu\">File</"
 "gui> <gui style=\"menuitem\">Scan Files…</gui></guiseq>."
 msgstr ""
+"Para aplicar los cambios a todos los archivos, seleccione <guiseq><gui style="
+"\"menu\">Archivo</gui> <gui style=\"menuitem\">Analizar archivos</gui></guiseq>."
 
 #. (itstool) path: item/p
 #: C/file-rename.page:46
@@ -174,16 +179,18 @@ msgid ""
 "To save the applied changes, select <guiseq><gui style=\"menu\">File</gui> "
 "<gui style=\"menuitem\">Save Files</gui></guiseq>."
 msgstr ""
+"Para guardar los cambios aplicados, seleccione <guiseq><gui style=\"menu"
+"\">Archivo</gui> <gui style=\"menuitem\">Guardar archivos</gui></guiseq>."
 
 #. (itstool) path: note/p
 #: C/file-rename.page:56
 msgid "If you close the application without saving, your changes will be lost."
-msgstr ""
+msgstr "Si cierra la aplicación sin guardar los cambios, éstos se perderán."
 
 #. (itstool) path: info/desc
 #: C/file-select.page:17
 msgid "Choose files in the file list"
-msgstr ""
+msgstr "Elegir archivos en la lista"
 
 #. (itstool) path: page/title
 #: C/file-select.page:20
@@ -204,12 +211,12 @@ msgstr ""
 #. (itstool) path: info/desc
 #: C/format-specifier.page:17
 msgid "What is a format-specifier and which ones can I use?"
-msgstr ""
+msgstr "¿Qué es un especificador de formato y cuáles puedo usar?"
 
 #. (itstool) path: page/title
 #: C/format-specifier.page:21
 msgid "Format specifiers"
-msgstr ""
+msgstr "Especificadores de formato"
 
 #. (itstool) path: page/p
 #: C/format-specifier.page:23
@@ -218,16 +225,20 @@ msgid ""
 "name a file or playlist based on existing tags using <link xref=\"scanner"
 "\">the scanner</link>."
 msgstr ""
+"Los <em>especificadores de formato</em> se pueden usar para dividir el "
+"nombre de un archivo en etiquetas y para nombrar un archivo o una lista de "
+"reproducción basándose en las etiquetas existentes usando <link xref="
+"\"scanner\">el analizador</link>."
 
 #. (itstool) path: td/p
 #: C/format-specifier.page:31
 msgid "Format specifier"
-msgstr ""
+msgstr "Especificador de formato"
 
 #. (itstool) path: td/p
 #: C/format-specifier.page:34
 msgid "Corresponding tag field"
-msgstr ""
+msgstr "Campo de etiqueta correspondiente"
 
 #. (itstool) path: td/p
 #: C/format-specifier.page:41
@@ -240,6 +251,8 @@ msgid ""
 "Artist: this is the artist or artists who created the track, this field may "
 "contact a featured artist as well as the album artist"
 msgstr ""
+"Artista: esto es el artista o artistas que crearon la pista. Este campo debe "
+"contener un artista destacado así como el álbum del artista."
 
 #. (itstool) path: td/p
 #: C/format-specifier.page:50
@@ -249,7 +262,7 @@ msgstr "%z"
 #. (itstool) path: td/p
 #: C/format-specifier.page:53
 msgid "Album artist"
-msgstr ""
+msgstr "Artista del álbum"
 
 #. (itstool) path: td/p
 #: C/format-specifier.page:58
@@ -259,7 +272,7 @@ msgstr "%b"
 #. (itstool) path: td/p
 #: C/format-specifier.page:61
 msgid "Album title"
-msgstr ""
+msgstr "Título del álbum"
 
 #. (itstool) path: td/p
 #: C/format-specifier.page:66
@@ -269,7 +282,7 @@ msgstr "%c"
 #. (itstool) path: td/p
 #: C/format-specifier.page:69
 msgid "Comment: this is the free-form comment field"
-msgstr ""
+msgstr "Comentario: esto es un campo libre para comentarios"
 
 #. (itstool) path: td/p
 #: C/format-specifier.page:74
@@ -279,7 +292,7 @@ msgstr "%p"
 #. (itstool) path: td/p
 #: C/format-specifier.page:77
 msgid "Composer: this is the creator of the track"
-msgstr ""
+msgstr "Compositor: esto es el creado de la pista"
 
 #. (itstool) path: td/p
 #: C/format-specifier.page:82
@@ -292,6 +305,8 @@ msgid ""
 "Copyright holder: this is usually the artist, but it can also be the record "
 "label"
 msgstr ""
+"Propietario del copyright: normalmente esto es el artista, pero también "
+"puede ser el sello del disco"
 
 #. (itstool) path: td/p
 #: C/format-specifier.page:91
@@ -301,7 +316,7 @@ msgstr "%d"
 #. (itstool) path: td/p
 #: C/format-specifier.page:94
 msgid "Disc number"
-msgstr ""
+msgstr "Número de disco"
 
 #. (itstool) path: td/p
 #: C/format-specifier.page:99
@@ -314,6 +329,9 @@ msgid ""
 "Encoded by: this is usually the person who encoded the file, but the field "
 "is also used for the application that was used to encode the file"
 msgstr ""
+"Codificado por: normalmente esto es la persona que ha codificado el archivo, "
+"pero este campo también lo puede usar la aplicación que se usó para "
+"codificar el archivo"
 
 #. (itstool) path: td/p
 #: C/format-specifier.page:109
@@ -323,7 +341,7 @@ msgstr "%g"
 #. (itstool) path: td/p
 #: C/format-specifier.page:112
 msgid "Genre"
-msgstr ""
+msgstr "Género"
 
 #. (itstool) path: td/p
 #: C/format-specifier.page:117
@@ -336,6 +354,9 @@ msgid ""
 "Ignored: this format specifier can only be used in <gui>Fill Tag</gui> to "
 "specify parts of the file name which should be ignored"
 msgstr ""
+"Ignorado: este especificador de formato sólo se puede usar en <gui>Rellenar "
+"etiqueta</gui> para especificar partes del nombre del archivo que se deben "
+"ignorar"
 
 #. (itstool) path: td/p
 #: C/format-specifier.page:127
@@ -345,12 +366,12 @@ msgstr "%l"
 #. (itstool) path: td/p
 #: C/format-specifier.page:130
 msgid "Number of tracks: the total number of tracks on the medium"
-msgstr "Number of tracks: the total number of tracks on the medium"
+msgstr "Número de pistas: el número total de pistas del medio"
 
 #. (itstool) path: td/p
 #: C/format-specifier.page:135
 msgid "%o"
-msgstr ""
+msgstr "%o"
 
 #. (itstool) path: td/p
 #: C/format-specifier.page:138
@@ -406,6 +427,8 @@ msgstr "%y"
 #: C/format-specifier.page:178
 msgid "Year of recording, sometimes the date of release is used instead"
 msgstr ""
+"Año de la grabación, aunque algunas veces se usa el año de publicación en su "
+"lugar"
 
 #. (itstool) path: page/title
 #: C/image-delete.page:19
@@ -424,6 +447,7 @@ msgstr ""
 msgid ""
 "To delete more than one image, select those images before deleting them."
 msgstr ""
+"Para eliminar más de una imane, seleccione las imágenes antes de eliminarlas."
 
 #. (itstool) path: page/p
 #: C/image-delete.page:27
@@ -458,12 +482,12 @@ msgstr ""
 #. (itstool) path: info/desc
 #: C/image.page:19
 msgid "Add images, such as cover art to the tag"
-msgstr ""
+msgstr "Añadir imágenes, como la carátula, a la etiqueta"
 
 #. (itstool) path: page/title
 #: C/image.page:23
 msgid "Add an image to a file"
-msgstr ""
+msgstr "Añadir una imagen a un archivo"
 
 #. (itstool) path: page/p
 #: C/image.page:25
@@ -493,7 +517,7 @@ msgstr ""
 #. (itstool) path: note/p
 #: C/image.page:40
 msgid "Your changes will not be saved automatically."
-msgstr ""
+msgstr "Sus cambios no se guardará automáticamente."
 
 #. (itstool) path: page/p
 #: C/image.page:43
@@ -541,7 +565,7 @@ msgstr "Etiquetas"
 #. (itstool) path: section/title
 #: C/index.page:36
 msgid "The image tag field"
-msgstr ""
+msgstr "El campo de etiqueta de la imagen"
 
 #. (itstool) path: section/title
 #: C/index.page:44
@@ -586,7 +610,7 @@ msgstr "Atajo"
 #. (itstool) path: td/p
 #: C/keyboard-shortcuts.page:39
 msgid "Apply tag to selected files"
-msgstr ""
+msgstr "Aplicar la etiqueta a los archivos seleccionados"
 
 #. (itstool) path: td/p
 #: C/keyboard-shortcuts.page:42
@@ -596,7 +620,7 @@ msgstr "<keyseq><key>Ctrl</key><key>Intro</key></keyseq>"
 #. (itstool) path: td/p
 #: C/keyboard-shortcuts.page:47
 msgid "Search all files, including filenames and tags"
-msgstr ""
+msgstr "Buscar todos los archivos, incluyendo nombres de archivos y etiquetas"
 
 #. (itstool) path: td/p
 #: C/keyboard-shortcuts.page:50
@@ -607,6 +631,7 @@ msgstr "<keyseq><key>Ctrl</key><key>F</key></keyseq>"
 #: C/keyboard-shortcuts.page:55
 msgid "Go to previous file while keeping focus on the same tag field"
 msgstr ""
+"Ir al archivo anterior manteniendo el foco en el mismo campo de etiqueta"
 
 #. (itstool) path: td/p
 #: C/keyboard-shortcuts.page:58
@@ -617,6 +642,7 @@ msgstr "<key>Re Pág</key>"
 #: C/keyboard-shortcuts.page:63
 msgid "Go to next file while keeping focus on the same tag field"
 msgstr ""
+"Ir al siguiente archivo manteniendo el foco en el mismo campo de etiqueta"
 
 #. (itstool) path: td/p
 #: C/keyboard-shortcuts.page:66
@@ -636,7 +662,7 @@ msgstr "Este trabajo está licenciado bajo la <_:link-1/>."
 #. (itstool) path: info/desc
 #: C/playlist-generate.page:17
 msgid "Generate a playlist from the file list"
-msgstr ""
+msgstr "Generar una lista de reproducción de la lista de archivos"
 
 #. (itstool) path: page/title
 #: C/playlist-generate.page:20
@@ -656,6 +682,8 @@ msgid ""
 "<link xref=\"file-select\">Select the files</link> that you wish to be in "
 "the playlist in the file list."
 msgstr ""
+"En la lista de archivos, <link xref=\"file-select\">seleccione los archivos</"
+"link> que quiere incluir en la lista de reproducción."
 
 #. (itstool) path: item/p
 #: C/playlist-generate.page:31
@@ -663,6 +691,8 @@ msgid ""
 "Select <guiseq><gui style=\"menu\">Miscellaneous</gui> <gui style=\"menuitem"
 "\">Generate Playlist…</gui></guiseq>."
 msgstr ""
+"Seleccione <guiseq><gui style=\"menu\">Varios</gui> <gui style=\"menuitem"
+"\">Generar lista de reproducción…</gui></guiseq>."
 
 #. (itstool) path: item/p
 #: C/playlist-generate.page:35
@@ -722,6 +752,8 @@ msgstr ""
 #: C/playlist-generate.page:77
 msgid "To generate the playlist, select <gui style=\"button\">Save</gui>."
 msgstr ""
+"Para generar la lista de reproducción, seleccione <gui style=\"button"
+"\">Guardar</gui>."
 
 #. (itstool) path: credit/name
 #: C/problems-id3.page:13 C/problems-ogg-split.page:13
@@ -736,7 +768,7 @@ msgstr ""
 #. (itstool) path: page/title
 #: C/problems-id3.page:21
 msgid "MP3 tags not showing correctly"
-msgstr ""
+msgstr "Las etiquetas MP3 no se muestran correctamente"
 
 #. (itstool) path: page/p
 #: C/problems-id3.page:23
@@ -794,6 +826,7 @@ msgstr ""
 #: C/problems-id3.page:54 C/problems-ogg-split.page:56
 msgid "Click <gui style=\"button\">OK</gui> to save the settings"
 msgstr ""
+"Pulse <gui style=\"button\">Aceptar</gui> para guardar la configuración"
 
 #. (itstool) path: info/desc
 #: C/problems-ogg-split.page:21
@@ -805,7 +838,7 @@ msgstr ""
 #. (itstool) path: page/title
 #: C/problems-ogg-split.page:25
 msgid "Split tag fields when saving"
-msgstr ""
+msgstr "Dividir campos de etiquetas al guardar"
 
 #. (itstool) path: page/p
 #: C/problems-ogg-split.page:27
@@ -832,7 +865,7 @@ msgstr ""
 #. (itstool) path: page/p
 #: C/problems-ogg-split.page:41
 msgid "To split fields when you save the files:"
-msgstr ""
+msgstr "Para dividir campos cuando guarda los archivos:"
 
 #. (itstool) path: item/p
 #: C/problems-ogg-split.page:49
@@ -849,12 +882,12 @@ msgstr ""
 #. (itstool) path: info/desc
 #: C/scanner.page:17
 msgid "Update tags automatically."
-msgstr ""
+msgstr "Actualizar las etiquetas automáticamente"
 
 #. (itstool) path: page/title
 #: C/scanner.page:21
 msgid "The <gui>Scanner</gui>"
-msgstr ""
+msgstr "El <gui>Analizador</gui>"
 
 #. (itstool) path: page/p
 #: C/scanner.page:23
@@ -875,6 +908,8 @@ msgid ""
 "<gui>Fill Tag</gui> can be used to fill in tag fields based on the filename "
 "and its parent directories."
 msgstr ""
+"<gui>Rellenar etiqueta</gui> se puede usar para rellenar campos de etiquetas "
+"basándose en el nombre del archivo o en las carpetas padre."
 
 #. (itstool) path: section/p
 #: C/scanner.page:33
@@ -908,7 +943,7 @@ msgstr ""
 #. (itstool) path: section/title
 #: C/scanner.page:53
 msgid "Rename files and create new directories"
-msgstr ""
+msgstr "Renombrar archivos y crear carpetas nuevas"
 
 #. (itstool) path: section/p
 #: C/scanner.page:55
@@ -935,6 +970,8 @@ msgid ""
 "To prepare the files for moving and renaming, press the <gui style=\"button"
 "\">Scan Files</gui> button."
 msgstr ""
+"Para preparar los archivos para moverlos y renombrarlos, pulse el botón <gui "
+"style=\"button\">Analizar archivos</gui>."
 
 #. (itstool) path: section/title
 #: C/scanner.page:72
@@ -955,6 +992,8 @@ msgid ""
 "You can <gui>Convert</gui> characters for a simple find and replace, change "
 "capitalization and add or remove spaces."
 msgstr ""
+"Puede <gui>Convertir</gui> caracteres para una búsqueda con reemplazamiento "
+"sencilla, cambiar la capitalización o eliminar espacios."
 
 #. (itstool) path: section/p
 #: C/scanner.page:81
@@ -966,12 +1005,12 @@ msgstr ""
 #. (itstool) path: info/desc
 #: C/starting.page:16
 msgid "Using <app>EasyTAG</app> for the first time"
-msgstr ""
+msgstr "Usar <app>EasyTAG</app> por primera vez"
 
 #. (itstool) path: page/title
 #: C/starting.page:19
 msgid "Start using <app>EasyTAG</app>"
-msgstr ""
+msgstr "Empezar a usar <app>EasyTAG</app>"
 
 #. (itstool) path: page/p
 #: C/starting.page:21
@@ -1004,12 +1043,12 @@ msgstr ""
 #. (itstool) path: info/desc
 #: C/tag-field.page:18
 msgid "Add text tags to a file"
-msgstr ""
+msgstr "Añadir etiquetas de texto a un archivo"
 
 #. (itstool) path: page/title
 #: C/tag-field.page:22
 msgid "Tag a file"
-msgstr ""
+msgstr "Etiquetar un archivo"
 
 #. (itstool) path: page/p
 #: C/tag-field.page:24
@@ -1017,21 +1056,24 @@ msgid ""
 "Audio files can support a number of different tag <em>fields</em> which "
 "depend on the file format."
 msgstr ""
+"Los archivos de sonido pueden soportar varios <em>campos</em> de etiqueta "
+"que dependen del formato del archivo."
 
 #. (itstool) path: steps/title
 #: C/tag-field.page:28
 msgid "Update a tag field in a file"
-msgstr ""
+msgstr "Actualizar un campo de etiqueta en un archivo"
 
 #. (itstool) path: item/p
 #: C/tag-field.page:30
 msgid "Select the file that you wish to tag."
-msgstr ""
+msgstr "Seleccione el archivo que quiere etiquetar"
 
 #. (itstool) path: item/p
 #: C/tag-field.page:33
 msgid "Update the field that you want to change in the <gui>Tag</gui> panel."
 msgstr ""
+"Actualice el campo que quiere cambiar en el panel <gui>Etiqueta</gui> panel."
 
 #. (itstool) path: item/p
 #: C/tag-field.page:37
@@ -1059,12 +1101,12 @@ msgstr ""
 #. (itstool) path: info/desc
 #: C/tag.page:17
 msgid "What is a tag and what are fields?"
-msgstr ""
+msgstr "¿Qué es un etiqueta e qué son los campos?"
 
 #. (itstool) path: page/title
 #: C/tag.page:21
 msgid "Audio file tags"
-msgstr ""
+msgstr "Etiquetas de archivos de sonido"
 
 #. (itstool) path: page/p
 #: C/tag.page:23
diff --git a/help/es/file-rename.page b/help/es/file-rename.page
index de1188b..694453b 100644
--- a/help/es/file-rename.page
+++ b/help/es/file-rename.page
@@ -46,15 +46,12 @@
       <p>Close the <gui style="dialog">Tag and Filename Scan</gui> dialog.</p>
     </item>
     <item>
-      <p>To save the applied changes, select
-      <guiseq><gui style="menu">File</gui>
-      <gui style="menuitem">Save Files</gui></guiseq>.</p>
+      <p>Para guardar los cambios aplicados, seleccione <guiseq><gui style="menu">Archivo</gui> <gui style="menuitem">Guardar archivos</gui></guiseq>.</p>
     </item>
   </steps>
 
   <note style="tip">
-    <p>If you close the application without saving, your changes will be
-    lost.</p>
+    <p>Si cierra la aplicación sin guardar los cambios, éstos se perderán.</p>
   </note>
 
 </page>
diff --git a/help/es/file-select.page b/help/es/file-select.page
index c1b9c70..8d6c34a 100644
--- a/help/es/file-select.page
+++ b/help/es/file-select.page
@@ -12,7 +12,7 @@
 
     <include xmlns="http://www.w3.org/2001/XInclude" href="legal.xml"/>
 
-    <desc>Choose files in the file list</desc>
+    <desc>Elegir archivos en la lista</desc>
   </info>
 
   <title>Seleccionar archivos</title>
diff --git a/help/es/format-specifier.page b/help/es/format-specifier.page
index 88828db..e885a19 100644
--- a/help/es/format-specifier.page
+++ b/help/es/format-specifier.page
@@ -12,24 +12,22 @@
 
     <include xmlns="http://www.w3.org/2001/XInclude" href="legal.xml"/>
 
-    <desc>What is a format-specifier and which ones can I use?</desc>
+    <desc>¿Qué es un especificador de formato y cuáles puedo usar?</desc>
 
   </info>
 
-  <title>Format specifiers</title>
+  <title>Especificadores de formato</title>
 
-  <p><em>Format specifiers</em> can be used to split a file name into tags and
-  to name a file or playlist based on existing tags using
-  <link xref="scanner">the scanner</link>.</p>
+  <p>Los <em>especificadores de formato</em> se pueden usar para dividir el nombre de un archivo en etiquetas y para nombrar un archivo o una lista de reproducción basándose en las etiquetas existentes usando <link xref="scanner">el analizador</link>.</p>
 
   <table rules="rows" frame="top bottom">
     <thead>
       <tr>
         <td>
-          <p>Format specifier</p>
+          <p>Especificador de formato</p>
         </td>
         <td>
-          <p>Corresponding tag field</p>
+          <p>Campo de etiqueta correspondiente</p>
         </td>
       </tr>
     </thead>
@@ -39,8 +37,7 @@
           <p>%a</p>
         </td>
         <td>
-          <p>Artist: this is the artist or artists who created the track, this
-          field may contact a featured artist as well as the album artist</p>
+          <p>Artista: esto es el artista o artistas que crearon la pista. Este campo debe contener un artista destacado así como el álbum del artista.</p>
         </td>
       </tr>
       <tr>
@@ -48,7 +45,7 @@
           <p>%z</p>
         </td>
         <td>
-          <p>Album artist</p>
+          <p>Artista del álbum</p>
         </td>
       </tr>
       <tr>
@@ -56,7 +53,7 @@
           <p>%b</p>
         </td>
         <td>
-          <p>Album title</p>
+          <p>Título del álbum</p>
         </td>
       </tr>
       <tr>
@@ -64,7 +61,7 @@
           <p>%c</p>
         </td>
         <td>
-          <p>Comment: this is the free-form comment field</p>
+          <p>Comentario: esto es un campo libre para comentarios</p>
         </td>
       </tr>
       <tr>
@@ -72,7 +69,7 @@
           <p>%p</p>
         </td>
         <td>
-          <p>Composer: this is the creator of the track</p>
+          <p>Compositor: esto es el creado de la pista</p>
         </td>
       </tr>
       <tr>
@@ -80,8 +77,7 @@
           <p>%r</p>
         </td>
         <td>
-          <p>Copyright holder: this is usually the artist, but it can also be
-          the record label</p>
+          <p>Propietario del copyright: normalmente esto es el artista, pero también puede ser el sello del disco</p>
         </td>
       </tr>
       <tr>
@@ -89,7 +85,7 @@
           <p>%d</p>
         </td>
         <td>
-          <p>Disc number</p>
+          <p>Número de disco</p>
         </td>
       </tr>
       <tr>
@@ -97,9 +93,7 @@
           <p>%e</p>
         </td>
         <td>
-          <p>Encoded by: this is usually the person who encoded the file, but
-          the field is also used for the application that was used to encode
-          the file</p>
+          <p>Codificado por: normalmente esto es la persona que ha codificado el archivo, pero este campo también lo puede usar la aplicación que se usó para codificar el archivo</p>
         </td>
       </tr>
       <tr>
@@ -107,7 +101,7 @@
           <p>%g</p>
         </td>
         <td>
-          <p>Genre</p>
+          <p>Género</p>
         </td>
       </tr>
       <tr>
@@ -115,9 +109,7 @@
           <p>%i</p>
         </td>
         <td>
-          <p>Ignored: this format specifier can only be used in <gui>Fill
-          Tag</gui> to specify parts of the file name which should be
-          ignored</p>
+          <p>Ignorado: este especificador de formato sólo se puede usar en <gui>Rellenar etiqueta</gui> para especificar partes del nombre del archivo que se deben ignorar</p>
         </td>
       </tr>
       <tr>
@@ -125,7 +117,7 @@
           <p>%l</p>
         </td>
         <td>
-          <p>Number of tracks: the total number of tracks on the medium</p>
+          <p>Número de pistas: el número total de pistas del medio</p>
         </td>
       </tr>
       <tr>
@@ -173,8 +165,7 @@
           <p>%y</p>
         </td>
         <td>
-          <p>Year of recording, sometimes the date of release is used
-          instead</p>
+          <p>Año de la grabación, aunque algunas veces se usa el año de publicación en su lugar</p>
         </td>
       </tr>
     </tbody>
diff --git a/help/es/image-delete.page b/help/es/image-delete.page
index 815c2f5..c9a4bd7 100644
--- a/help/es/image-delete.page
+++ b/help/es/image-delete.page
@@ -19,8 +19,7 @@
   <p>To delete an image from a tag, select it and press the
   <gui style="button">Remove selected images from the tag</gui> button.</p>
 
-  <p>To delete more than one image, select those images before deleting
-  them.</p>
+  <p>Para eliminar más de una imane, seleccione las imágenes antes de eliminarlas.</p>
 
   <p>It is also possible to delete all images from more than one file. To do
   this, select the files from which you want to delete the images, delete all
diff --git a/help/es/image.page b/help/es/image.page
index b372c0a..603d2ec 100644
--- a/help/es/image.page
+++ b/help/es/image.page
@@ -14,11 +14,11 @@
       <email its:translate="no">kittykat3756 at googlemail.com</email>
     </credit>
 
-    <desc>Add images, such as cover art to the tag</desc>
+    <desc>Añadir imágenes, como la carátula, a la etiqueta</desc>
 
   </info>
 
-  <title>Add an image to a file</title>
+  <title>Añadir una imagen a un archivo</title>
 
   <p>Most audio file formats support an <sys>image</sys> tag field which can
   be used to add cover art and other related images to the audio file.</p>
@@ -35,7 +35,7 @@
   the changes, press <gui style="button">OK</gui> to apply the changes.</p>
 
   <note>
-    <p>Your changes will not be saved automatically.</p>
+    <p>Sus cambios no se guardará automáticamente.</p>
   </note>
 
   <p>You can tag multiple files with the same image by selecting them in the
diff --git a/help/es/index.page b/help/es/index.page
index 54531b1..30239cd 100644
--- a/help/es/index.page
+++ b/help/es/index.page
@@ -27,7 +27,7 @@
   </section>
 
   <section id="image" style="2column">
-    <title>The image tag field</title>
+    <title>El campo de etiqueta de la imagen</title>
   </section>
 
 <!--  <section id="preferences" style="2column">
diff --git a/help/es/keyboard-shortcuts.page b/help/es/keyboard-shortcuts.page
index b80b24f..36a55dc 100644
--- a/help/es/keyboard-shortcuts.page
+++ b/help/es/keyboard-shortcuts.page
@@ -34,7 +34,7 @@
     <tbody>
       <tr>
         <td>
-          <p>Apply tag to selected files</p>
+          <p>Aplicar la etiqueta a los archivos seleccionados</p>
         </td>
         <td>
           <p><keyseq><key>Ctrl</key><key>Intro</key></keyseq></p>
@@ -42,7 +42,7 @@
       </tr>
       <tr>
         <td>
-          <p>Search all files, including filenames and tags</p>
+          <p>Buscar todos los archivos, incluyendo nombres de archivos y etiquetas</p>
         </td>
         <td>
           <p><keyseq><key>Ctrl</key><key>F</key></keyseq></p>
@@ -50,7 +50,7 @@
       </tr>
       <tr>
         <td>
-          <p>Go to previous file while keeping focus on the same tag field</p>
+          <p>Ir al archivo anterior manteniendo el foco en el mismo campo de etiqueta</p>
         </td>
         <td>
           <p><key>Re Pág</key></p>
@@ -58,7 +58,7 @@
       </tr>
       <tr>
         <td>
-          <p>Go to next file while keeping focus on the same tag field</p>
+          <p>Ir al siguiente archivo manteniendo el foco en el mismo campo de etiqueta</p>
         </td>
         <td>
           <p><key>Av Pág</key></p>
diff --git a/help/es/playlist-generate.page b/help/es/playlist-generate.page
index ab9045b..414be11 100644
--- a/help/es/playlist-generate.page
+++ b/help/es/playlist-generate.page
@@ -12,7 +12,7 @@
 
     <include xmlns="http://www.w3.org/2001/XInclude" href="legal.xml"/>
 
-    <desc>Generate a playlist from the file list</desc>
+    <desc>Generar una lista de reproducción de la lista de archivos</desc>
   </info>
 
   <title>Crear una lista de reproducción</title>
@@ -22,12 +22,10 @@
 
   <steps>
     <item>
-      <p><link xref="file-select">Select the files</link> that you wish to be
-      in the playlist in the file list.</p>
+      <p>En la lista de archivos, <link xref="file-select">seleccione los archivos</link> que quiere incluir en la lista de reproducción.</p>
     </item>
     <item>
-      <p>Select <guiseq><gui style="menu">Miscellaneous</gui>
-      <gui style="menuitem">Generate Playlist…</gui></guiseq>.</p>
+      <p>Seleccione <guiseq><gui style="menu">Varios</gui> <gui style="menuitem">Generar lista de reproducción…</gui></guiseq>.</p>
     </item>
     <item>
       <p>Select <gui style="radiobutton">Use mask</gui> and enter a mask, using
@@ -72,7 +70,7 @@
       information to the playlist.</p>
     </item>
     <item>
-      <p>To generate the playlist, select <gui style="button">Save</gui>.</p>
+      <p>Para generar la lista de reproducción, seleccione <gui style="button">Guardar</gui>.</p>
     </item>
   </steps>
 
diff --git a/help/es/problems-id3.page b/help/es/problems-id3.page
index 11ce9cb..f82b352 100644
--- a/help/es/problems-id3.page
+++ b/help/es/problems-id3.page
@@ -16,7 +16,7 @@
     applications</desc>
   </info>
 
-  <title>MP3 tags not showing correctly</title>
+  <title>Las etiquetas MP3 no se muestran correctamente</title>
 
   <p><em>ID3</em> tags, which are used for MP3 files, can be of one of several
   different versions. <app>EasyTAG</app> supports ID3v2.4, ID3v2.3 and ID3v1.1.
@@ -49,7 +49,7 @@
       in the <gui style="group">ID3v1 tags</gui> section</p>
     </item>
     <item>
-      <p>Click <gui style="button">OK</gui> to save the settings</p>
+      <p>Pulse <gui style="button">Aceptar</gui> para guardar la configuración</p>
     </item>
   </steps>
 
diff --git a/help/es/problems-ogg-split.page b/help/es/problems-ogg-split.page
index 81f1979..ddf2208 100644
--- a/help/es/problems-ogg-split.page
+++ b/help/es/problems-ogg-split.page
@@ -20,7 +20,7 @@
     FLAC files</desc>
   </info>
 
-  <title>Split tag fields when saving</title>
+  <title>Dividir campos de etiquetas al guardar</title>
 
   <p>In Ogg and FLAC files, it is possible to have more than one
   <link xref="tag">tag field</link> of each type. For example, if two artists
@@ -36,7 +36,7 @@
   the field "David Bowie - Queen", two fields would be saved: "David Bowie" and
   "Queen".</p>
 
-  <p>To split fields when you save the files:</p>
+  <p>Para dividir campos cuando guarda los archivos:</p>
 
   <steps>
     <item>
@@ -51,7 +51,7 @@
       that you want to be split into multiple fields when saving</p>
     </item>
     <item>
-      <p>Click <gui style="button">OK</gui> to save the settings</p>
+      <p>Pulse <gui style="button">Aceptar</gui> para guardar la configuración</p>
     </item>
   </steps>
 
diff --git a/help/es/scanner.page b/help/es/scanner.page
index 4955c3e..b71c2ef 100644
--- a/help/es/scanner.page
+++ b/help/es/scanner.page
@@ -12,11 +12,11 @@
 
     <include xmlns="http://www.w3.org/2001/XInclude" href="legal.xml"/>
 
-    <desc>Update tags automatically.</desc>
+    <desc>Actualizar las etiquetas automáticamente</desc>
 
   </info>
 
-  <title>The <gui>Scanner</gui></title>
+  <title>El <gui>Analizador</gui></title>
 
   <p>The scanner can be used to fill in fields based on the filename, rename a
   file and create a new directory based on the filled fields, and process the
@@ -25,8 +25,7 @@
 <section id="fill-tag">
   <title>Fill fields from a filename and directory structure</title>
 
-  <p><gui>Fill Tag</gui> can be used to fill in tag fields based on the
-  filename and its parent directories.</p>
+  <p><gui>Rellenar etiqueta</gui> se puede usar para rellenar campos de etiquetas basándose en el nombre del archivo o en las carpetas padre.</p>
 
   <p>Use <em xref="format-specifier">format specifiers</em> and
   <em>separators</em> to split the filename and parent directories into
@@ -48,7 +47,7 @@
 </section>
 
 <section id="rename">
-  <title>Rename files and create new directories</title>
+  <title>Renombrar archivos y crear carpetas nuevas</title>
 
   <p><gui xref="file-rename">Rename File and Directory</gui> can be used to
   create a directory hierarchy and update filenames using the filled tag
@@ -61,8 +60,7 @@
   structure and filename. You will see a preview of the naming scheme below
   your specified format string.</p>
 
-  <p>To prepare the files for moving and renaming, press the
-  <gui style="button">Scan Files</gui> button.</p>
+  <p>Para preparar los archivos para moverlos y renombrarlos, pulse el botón <gui style="button">Analizar archivos</gui>.</p>
 
 </section>
 
@@ -73,8 +71,7 @@
   which allows you to select which tag fields to process. It also allows for
   the filename to be processed as well.</p>
 
-  <p>You can <gui>Convert</gui> characters for a simple find and replace,
-  change capitalization and add or remove spaces.</p>
+  <p>Puede <gui>Convertir</gui> caracteres para una búsqueda con reemplazamiento sencilla, cambiar la capitalización o eliminar espacios.</p>
 
   <p>Use the <gui>Select fields</gui> buttons to specify which fields to
   change. You can also select or deselect all fields and invert your
diff --git a/help/es/starting.page b/help/es/starting.page
index a2b2e39..fb6dc8b 100644
--- a/help/es/starting.page
+++ b/help/es/starting.page
@@ -12,10 +12,10 @@
 
     <include xmlns="http://www.w3.org/2001/XInclude" href="legal.xml"/>
 
-    <desc>Using <app>EasyTAG</app> for the first time</desc>
+    <desc>Usar <app>EasyTAG</app> por primera vez</desc>
   </info>
 
-  <title>Start using <app>EasyTAG</app></title>
+  <title>Empezar a usar <app>EasyTAG</app></title>
 
   <p>When you start <app>EasyTAG</app> for the first time, it will search your
   <file>Music</file> directory or your home directory for audio files. If you
diff --git a/help/es/tag-field.page b/help/es/tag-field.page
index 2b370c9..c0ad5eb 100644
--- a/help/es/tag-field.page
+++ b/help/es/tag-field.page
@@ -13,23 +13,21 @@
       <email>kittykat3756 at googlemail.com</email>
     </credit>
 
-    <desc>Add text tags to a file</desc>
+    <desc>Añadir etiquetas de texto a un archivo</desc>
 
   </info>
 
-  <title>Tag a file</title>
+  <title>Etiquetar un archivo</title>
 
-  <p>Audio files can support a number of different tag <em>fields</em> which
-  depend on the file format.</p>
+  <p>Los archivos de sonido pueden soportar varios <em>campos</em> de etiqueta que dependen del formato del archivo.</p>
 
   <steps>
-    <title>Update a tag field in a file</title>
+    <title>Actualizar un campo de etiqueta en un archivo</title>
     <item>
-      <p>Select the file that you wish to tag.</p>
+      <p>Seleccione el archivo que quiere etiquetar</p>
     </item>
     <item>
-      <p>Update the field that you want to change in the <gui>Tag</gui>
-      panel.</p>
+      <p>Actualice el campo que quiere cambiar en el panel <gui>Etiqueta</gui> panel.</p>
     </item>
     <item>
       <p>Select
diff --git a/help/es/tag.page b/help/es/tag.page
index e57279f..ca92019 100644
--- a/help/es/tag.page
+++ b/help/es/tag.page
@@ -12,11 +12,11 @@
       <email its:translate="no">kittykat3756 at googlemail.com</email>
     </credit>
 
-    <desc>What is a tag and what are fields?</desc>
+    <desc>¿Qué es un etiqueta e qué son los campos?</desc>
 
   </info>
 
-  <title>Audio file tags</title>
+  <title>Etiquetas de archivos de sonido</title>
 
   <p>An audio file can contain <em>metadata</em> — information about itself —
   inside a <em>tag</em>. Each tag can contain one or more <em>fields</em>, such
diff --git a/m4/libtool.m4 b/m4/libtool.m4
new file mode 100644
index 0000000..f12cfdf
--- /dev/null
+++ b/m4/libtool.m4
@@ -0,0 +1,7992 @@
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+#
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+#                 Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+m4_define([_LT_COPYING], [dnl
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+#                 Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+#   This file is part of GNU Libtool.
+#
+# GNU Libtool 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 (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+])
+
+# serial 57 LT_INIT
+
+
+# LT_PREREQ(VERSION)
+# ------------------
+# Complain and exit if this libtool version is less that VERSION.
+m4_defun([LT_PREREQ],
+[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
+       [m4_default([$3],
+		   [m4_fatal([Libtool version $1 or higher is required],
+		             63)])],
+       [$2])])
+
+
+# _LT_CHECK_BUILDDIR
+# ------------------
+# Complain if the absolute build directory name contains unusual characters
+m4_defun([_LT_CHECK_BUILDDIR],
+[case `pwd` in
+  *\ * | *\	*)
+    AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
+esac
+])
+
+
+# LT_INIT([OPTIONS])
+# ------------------
+AC_DEFUN([LT_INIT],
+[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
+AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+AC_BEFORE([$0], [LT_LANG])dnl
+AC_BEFORE([$0], [LT_OUTPUT])dnl
+AC_BEFORE([$0], [LTDL_INIT])dnl
+m4_require([_LT_CHECK_BUILDDIR])dnl
+
+dnl Autoconf doesn't catch unexpanded LT_ macros by default:
+m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
+m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
+dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
+dnl unless we require an AC_DEFUNed macro:
+AC_REQUIRE([LTOPTIONS_VERSION])dnl
+AC_REQUIRE([LTSUGAR_VERSION])dnl
+AC_REQUIRE([LTVERSION_VERSION])dnl
+AC_REQUIRE([LTOBSOLETE_VERSION])dnl
+m4_require([_LT_PROG_LTMAIN])dnl
+
+_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}])
+
+dnl Parse OPTIONS
+_LT_SET_OPTIONS([$0], [$1])
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+_LT_SETUP
+
+# Only expand once:
+m4_define([LT_INIT])
+])# LT_INIT
+
+# Old names:
+AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
+AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
+dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
+
+
+# _LT_CC_BASENAME(CC)
+# -------------------
+# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+m4_defun([_LT_CC_BASENAME],
+[for cc_temp in $1""; do
+  case $cc_temp in
+    compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+    distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+])
+
+
+# _LT_FILEUTILS_DEFAULTS
+# ----------------------
+# It is okay to use these file commands and assume they have been set
+# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
+m4_defun([_LT_FILEUTILS_DEFAULTS],
+[: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+])# _LT_FILEUTILS_DEFAULTS
+
+
+# _LT_SETUP
+# ---------
+m4_defun([_LT_SETUP],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl
+
+_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl
+dnl
+_LT_DECL([], [host_alias], [0], [The host system])dnl
+_LT_DECL([], [host], [0])dnl
+_LT_DECL([], [host_os], [0])dnl
+dnl
+_LT_DECL([], [build_alias], [0], [The build system])dnl
+_LT_DECL([], [build], [0])dnl
+_LT_DECL([], [build_os], [0])dnl
+dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+dnl
+AC_REQUIRE([AC_PROG_LN_S])dnl
+test -z "$LN_S" && LN_S="ln -s"
+_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
+dnl
+AC_REQUIRE([LT_CMD_MAX_LEN])dnl
+_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
+_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
+dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl
+m4_require([_LT_CMD_RELOAD])dnl
+m4_require([_LT_CHECK_MAGIC_METHOD])dnl
+m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl
+m4_require([_LT_CMD_OLD_ARCHIVE])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_WITH_SYSROOT])dnl
+
+_LT_CONFIG_LIBTOOL_INIT([
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+])
+if test -n "${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+_LT_CHECK_OBJDIR
+
+m4_require([_LT_TAG_COMPILER])dnl
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+_LT_CC_BASENAME([$compiler])
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    _LT_PATH_MAGIC
+  fi
+  ;;
+esac
+
+# Use C for the default configuration in the libtool script
+LT_SUPPORTED_TAG([CC])
+_LT_LANG_C_CONFIG
+_LT_LANG_DEFAULT_CONFIG
+_LT_CONFIG_COMMANDS
+])# _LT_SETUP
+
+
+# _LT_PREPARE_SED_QUOTE_VARS
+# --------------------------
+# Define a few sed substitution that help us do robust quoting.
+m4_defun([_LT_PREPARE_SED_QUOTE_VARS],
+[# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([["`\\]]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+])
+
+# _LT_PROG_LTMAIN
+# ---------------
+# Note that this code is called both from `configure', and `config.status'
+# now that we use AC_CONFIG_COMMANDS to generate libtool.  Notably,
+# `config.status' has no value for ac_aux_dir unless we are using Automake,
+# so we pass a copy along to make sure it has a sensible value anyway.
+m4_defun([_LT_PROG_LTMAIN],
+[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
+_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
+ltmain="$ac_aux_dir/ltmain.sh"
+])# _LT_PROG_LTMAIN
+
+
+## ------------------------------------- ##
+## Accumulate code for creating libtool. ##
+## ------------------------------------- ##
+
+# So that we can recreate a full libtool script including additional
+# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
+# in macros and then make a single call at the end using the `libtool'
+# label.
+
+
+# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
+# ----------------------------------------
+# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL_INIT],
+[m4_ifval([$1],
+          [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
+                     [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_INIT])
+
+
+# _LT_CONFIG_LIBTOOL([COMMANDS])
+# ------------------------------
+# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL],
+[m4_ifval([$1],
+          [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
+                     [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
+
+
+# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
+# -----------------------------------------------------
+m4_defun([_LT_CONFIG_SAVE_COMMANDS],
+[_LT_CONFIG_LIBTOOL([$1])
+_LT_CONFIG_LIBTOOL_INIT([$2])
+])
+
+
+# _LT_FORMAT_COMMENT([COMMENT])
+# -----------------------------
+# Add leading comment marks to the start of each line, and a trailing
+# full-stop to the whole comment if one is not present already.
+m4_define([_LT_FORMAT_COMMENT],
+[m4_ifval([$1], [
+m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
+              [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
+)])
+
+
+
+## ------------------------ ##
+## FIXME: Eliminate VARNAME ##
+## ------------------------ ##
+
+
+# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
+# -------------------------------------------------------------------
+# CONFIGNAME is the name given to the value in the libtool script.
+# VARNAME is the (base) name used in the configure script.
+# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
+# VARNAME.  Any other value will be used directly.
+m4_define([_LT_DECL],
+[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
+    [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
+	[m4_ifval([$1], [$1], [$2])])
+    lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
+    m4_ifval([$4],
+	[lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
+    lt_dict_add_subkey([lt_decl_dict], [$2],
+	[tagged?], [m4_ifval([$5], [yes], [no])])])
+])
+
+
+# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
+# --------------------------------------------------------
+m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
+
+
+# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_tag_varnames],
+[_lt_decl_filter([tagged?], [yes], $@)])
+
+
+# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
+# ---------------------------------------------------------
+m4_define([_lt_decl_filter],
+[m4_case([$#],
+  [0], [m4_fatal([$0: too few arguments: $#])],
+  [1], [m4_fatal([$0: too few arguments: $#: $1])],
+  [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
+  [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
+  [lt_dict_filter([lt_decl_dict], $@)])[]dnl
+])
+
+
+# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
+# --------------------------------------------------
+m4_define([lt_decl_quote_varnames],
+[_lt_decl_filter([value], [1], $@)])
+
+
+# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_dquote_varnames],
+[_lt_decl_filter([value], [2], $@)])
+
+
+# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_varnames_tagged],
+[m4_assert([$# <= 2])dnl
+_$0(m4_quote(m4_default([$1], [[, ]])),
+    m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),
+    m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])
+m4_define([_lt_decl_varnames_tagged],
+[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])
+
+
+# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_all_varnames],
+[_$0(m4_quote(m4_default([$1], [[, ]])),
+     m4_if([$2], [],
+	   m4_quote(lt_decl_varnames),
+	m4_quote(m4_shift($@))))[]dnl
+])
+m4_define([_lt_decl_all_varnames],
+[lt_join($@, lt_decl_varnames_tagged([$1],
+			lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
+])
+
+
+# _LT_CONFIG_STATUS_DECLARE([VARNAME])
+# ------------------------------------
+# Quote a variable value, and forward it to `config.status' so that its
+# declaration there will have the same value as in `configure'.  VARNAME
+# must have a single quote delimited value for this to work.
+m4_define([_LT_CONFIG_STATUS_DECLARE],
+[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`'])
+
+
+# _LT_CONFIG_STATUS_DECLARATIONS
+# ------------------------------
+# We delimit libtool config variables with single quotes, so when
+# we write them to config.status, we have to be sure to quote all
+# embedded single quotes properly.  In configure, this macro expands
+# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
+#
+#    <var>='`$ECHO "$<var>" | $SED "$delay_single_quote_subst"`'
+m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
+    [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAGS
+# ----------------
+# Output comment and list of tags supported by the script
+m4_defun([_LT_LIBTOOL_TAGS],
+[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
+available_tags="_LT_TAGS"dnl
+])
+
+
+# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
+# -----------------------------------
+# Extract the dictionary values for VARNAME (optionally with TAG) and
+# expand to a commented shell variable setting:
+#
+#    # Some comment about what VAR is for.
+#    visible_name=$lt_internal_name
+m4_define([_LT_LIBTOOL_DECLARE],
+[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
+					   [description])))[]dnl
+m4_pushdef([_libtool_name],
+    m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
+m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
+    [0], [_libtool_name=[$]$1],
+    [1], [_libtool_name=$lt_[]$1],
+    [2], [_libtool_name=$lt_[]$1],
+    [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
+m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
+])
+
+
+# _LT_LIBTOOL_CONFIG_VARS
+# -----------------------
+# Produce commented declarations of non-tagged libtool config variables
+# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
+# script.  Tagged libtool config variables (even for the LIBTOOL CONFIG
+# section) are produced by _LT_LIBTOOL_TAG_VARS.
+m4_defun([_LT_LIBTOOL_CONFIG_VARS],
+[m4_foreach([_lt_var],
+    m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
+    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAG_VARS(TAG)
+# -------------------------
+m4_define([_LT_LIBTOOL_TAG_VARS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
+    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
+
+
+# _LT_TAGVAR(VARNAME, [TAGNAME])
+# ------------------------------
+m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
+
+
+# _LT_CONFIG_COMMANDS
+# -------------------
+# Send accumulated output to $CONFIG_STATUS.  Thanks to the lists of
+# variables for single and double quote escaping we saved from calls
+# to _LT_DECL, we can put quote escaped variables declarations
+# into `config.status', and then the shell code to quote escape them in
+# for loops in `config.status'.  Finally, any additional code accumulated
+# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
+m4_defun([_LT_CONFIG_COMMANDS],
+[AC_PROVIDE_IFELSE([LT_OUTPUT],
+	dnl If the libtool generation code has been placed in $CONFIG_LT,
+	dnl instead of duplicating it all over again into config.status,
+	dnl then we will have config.status run $CONFIG_LT later, so it
+	dnl needs to know what name is stored there:
+        [AC_CONFIG_COMMANDS([libtool],
+            [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
+    dnl If the libtool generation code is destined for config.status,
+    dnl expand the accumulated commands and init code now:
+    [AC_CONFIG_COMMANDS([libtool],
+        [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
+])#_LT_CONFIG_COMMANDS
+
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
+[
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+_LT_CONFIG_STATUS_DECLARATIONS
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$[]1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_quote_varnames); do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[[\\\\\\\`\\"\\\$]]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_dquote_varnames); do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[[\\\\\\\`\\"\\\$]]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+_LT_OUTPUT_LIBTOOL_INIT
+])
+
+# _LT_GENERATED_FILE_INIT(FILE, [COMMENT])
+# ------------------------------------
+# Generate a child script FILE with all initialization necessary to
+# reuse the environment learned by the parent script, and make the
+# file executable.  If COMMENT is supplied, it is inserted after the
+# `#!' sequence but before initialization text begins.  After this
+# macro, additional text can be appended to FILE to form the body of
+# the child script.  The macro ends with non-zero status if the
+# file could not be fully written (such as if the disk is full).
+m4_ifdef([AS_INIT_GENERATED],
+[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])],
+[m4_defun([_LT_GENERATED_FILE_INIT],
+[m4_require([AS_PREPARE])]dnl
+[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl
+[lt_write_fail=0
+cat >$1 <<_ASEOF || lt_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+$2
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$1 <<\_ASEOF || lt_write_fail=1
+AS_SHELL_SANITIZE
+_AS_PREPARE
+exec AS_MESSAGE_FD>&1
+_ASEOF
+test $lt_write_fail = 0 && chmod +x $1[]dnl
+m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT
+
+# LT_OUTPUT
+# ---------
+# This macro allows early generation of the libtool script (before
+# AC_OUTPUT is called), incase it is used in configure for compilation
+# tests.
+AC_DEFUN([LT_OUTPUT],
+[: ${CONFIG_LT=./config.lt}
+AC_MSG_NOTICE([creating $CONFIG_LT])
+_LT_GENERATED_FILE_INIT(["$CONFIG_LT"],
+[# Run this file to recreate a libtool stub with the current configuration.])
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+lt_cl_silent=false
+exec AS_MESSAGE_LOG_FD>>config.log
+{
+  echo
+  AS_BOX([Running $as_me.])
+} >&AS_MESSAGE_LOG_FD
+
+lt_cl_help="\
+\`$as_me' creates a local libtool stub from the current configuration,
+for use in further configure time tests before the real libtool is
+generated.
+
+Usage: $[0] [[OPTIONS]]
+
+  -h, --help      print this help, then exit
+  -V, --version   print version number, then exit
+  -q, --quiet     do not print progress messages
+  -d, --debug     don't remove temporary files
+
+Report bugs to <bug-libtool at gnu.org>."
+
+lt_cl_version="\
+m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
+m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
+configured by $[0], generated by m4_PACKAGE_STRING.
+
+Copyright (C) 2011 Free Software Foundation, Inc.
+This config.lt script is free software; the Free Software Foundation
+gives unlimited permision to copy, distribute and modify it."
+
+while test $[#] != 0
+do
+  case $[1] in
+    --version | --v* | -V )
+      echo "$lt_cl_version"; exit 0 ;;
+    --help | --h* | -h )
+      echo "$lt_cl_help"; exit 0 ;;
+    --debug | --d* | -d )
+      debug=: ;;
+    --quiet | --q* | --silent | --s* | -q )
+      lt_cl_silent=: ;;
+
+    -*) AC_MSG_ERROR([unrecognized option: $[1]
+Try \`$[0] --help' for more information.]) ;;
+
+    *) AC_MSG_ERROR([unrecognized argument: $[1]
+Try \`$[0] --help' for more information.]) ;;
+  esac
+  shift
+done
+
+if $lt_cl_silent; then
+  exec AS_MESSAGE_FD>/dev/null
+fi
+_LTEOF
+
+cat >>"$CONFIG_LT" <<_LTEOF
+_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AC_MSG_NOTICE([creating $ofile])
+_LT_OUTPUT_LIBTOOL_COMMANDS
+AS_EXIT(0)
+_LTEOF
+chmod +x "$CONFIG_LT"
+
+# configure is writing to config.log, but config.lt does its own redirection,
+# appending to config.log, which fails on DOS, as config.log is still kept
+# open by configure.  Here we exec the FD to /dev/null, effectively closing
+# config.log, so it can be properly (re)opened and appended to by config.lt.
+lt_cl_success=:
+test "$silent" = yes &&
+  lt_config_lt_args="$lt_config_lt_args --quiet"
+exec AS_MESSAGE_LOG_FD>/dev/null
+$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+exec AS_MESSAGE_LOG_FD>>config.log
+$lt_cl_success || AS_EXIT(1)
+])# LT_OUTPUT
+
+
+# _LT_CONFIG(TAG)
+# ---------------
+# If TAG is the built-in tag, create an initial libtool script with a
+# default configuration from the untagged config vars.  Otherwise add code
+# to config.status for appending the configuration named by TAG from the
+# matching tagged config vars.
+m4_defun([_LT_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_CONFIG_SAVE_COMMANDS([
+  m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
+  m4_if(_LT_TAG, [C], [
+    # See if we are running on zsh, and set the options which allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}" ; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile="${ofile}T"
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+_LT_COPYING
+_LT_LIBTOOL_TAGS
+
+# ### BEGIN LIBTOOL CONFIG
+_LT_LIBTOOL_CONFIG_VARS
+_LT_LIBTOOL_TAG_VARS
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+  _LT_PROG_LTMAIN
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '$q' "$ltmain" >> "$cfgfile" \
+     || (rm -f "$cfgfile"; exit 1)
+
+  _LT_PROG_REPLACE_SHELLFNS
+
+   mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+],
+[cat <<_LT_EOF >> "$ofile"
+
+dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
+dnl in a comment (ie after a #).
+# ### BEGIN LIBTOOL TAG CONFIG: $1
+_LT_LIBTOOL_TAG_VARS(_LT_TAG)
+# ### END LIBTOOL TAG CONFIG: $1
+_LT_EOF
+])dnl /m4_if
+],
+[m4_if([$1], [], [
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    TIMESTAMP='$TIMESTAMP'
+    RM='$RM'
+    ofile='$ofile'], [])
+])dnl /_LT_CONFIG_SAVE_COMMANDS
+])# _LT_CONFIG
+
+
+# LT_SUPPORTED_TAG(TAG)
+# ---------------------
+# Trace this macro to discover what tags are supported by the libtool
+# --tag option, using:
+#    autoconf --trace 'LT_SUPPORTED_TAG:$1'
+AC_DEFUN([LT_SUPPORTED_TAG], [])
+
+
+# C support is built-in for now
+m4_define([_LT_LANG_C_enabled], [])
+m4_define([_LT_TAGS], [])
+
+
+# LT_LANG(LANG)
+# -------------
+# Enable libtool support for the given language if not already enabled.
+AC_DEFUN([LT_LANG],
+[AC_BEFORE([$0], [LT_OUTPUT])dnl
+m4_case([$1],
+  [C],			[_LT_LANG(C)],
+  [C++],		[_LT_LANG(CXX)],
+  [Go],			[_LT_LANG(GO)],
+  [Java],		[_LT_LANG(GCJ)],
+  [Fortran 77],		[_LT_LANG(F77)],
+  [Fortran],		[_LT_LANG(FC)],
+  [Windows Resource],	[_LT_LANG(RC)],
+  [m4_ifdef([_LT_LANG_]$1[_CONFIG],
+    [_LT_LANG($1)],
+    [m4_fatal([$0: unsupported language: "$1"])])])dnl
+])# LT_LANG
+
+
+# _LT_LANG(LANGNAME)
+# ------------------
+m4_defun([_LT_LANG],
+[m4_ifdef([_LT_LANG_]$1[_enabled], [],
+  [LT_SUPPORTED_TAG([$1])dnl
+  m4_append([_LT_TAGS], [$1 ])dnl
+  m4_define([_LT_LANG_]$1[_enabled], [])dnl
+  _LT_LANG_$1_CONFIG($1)])dnl
+])# _LT_LANG
+
+
+m4_ifndef([AC_PROG_GO], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into   #
+#  GNU Autoconf as AC_PROG_GO.  When it is available in    #
+#  a released version of Autoconf we should remove this    #
+#  macro and use it instead.                               #
+############################################################
+m4_defun([AC_PROG_GO],
+[AC_LANG_PUSH(Go)dnl
+AC_ARG_VAR([GOC],     [Go compiler command])dnl
+AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl
+_AC_ARG_VAR_LDFLAGS()dnl
+AC_CHECK_TOOL(GOC, gccgo)
+if test -z "$GOC"; then
+  if test -n "$ac_tool_prefix"; then
+    AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo])
+  fi
+fi
+if test -z "$GOC"; then
+  AC_CHECK_PROG(GOC, gccgo, gccgo, false)
+fi
+])#m4_defun
+])#m4_ifndef
+
+
+# _LT_LANG_DEFAULT_CONFIG
+# -----------------------
+m4_defun([_LT_LANG_DEFAULT_CONFIG],
+[AC_PROVIDE_IFELSE([AC_PROG_CXX],
+  [LT_LANG(CXX)],
+  [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_F77],
+  [LT_LANG(F77)],
+  [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_FC],
+  [LT_LANG(FC)],
+  [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
+
+dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
+dnl pulling things in needlessly.
+AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+  [LT_LANG(GCJ)],
+  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+    [LT_LANG(GCJ)],
+    [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
+      [LT_LANG(GCJ)],
+      [m4_ifdef([AC_PROG_GCJ],
+	[m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
+       m4_ifdef([A][M_PROG_GCJ],
+	[m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
+       m4_ifdef([LT_PROG_GCJ],
+	[m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
+
+AC_PROVIDE_IFELSE([AC_PROG_GO],
+  [LT_LANG(GO)],
+  [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])])
+
+AC_PROVIDE_IFELSE([LT_PROG_RC],
+  [LT_LANG(RC)],
+  [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
+])# _LT_LANG_DEFAULT_CONFIG
+
+# Obsolete macros:
+AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
+AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
+AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
+AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
+AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
+dnl AC_DEFUN([AC_LIBTOOL_F77], [])
+dnl AC_DEFUN([AC_LIBTOOL_FC], [])
+dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
+dnl AC_DEFUN([AC_LIBTOOL_RC], [])
+
+
+# _LT_TAG_COMPILER
+# ----------------
+m4_defun([_LT_TAG_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
+_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
+_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
+_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_TAG_COMPILER
+
+
+# _LT_COMPILER_BOILERPLATE
+# ------------------------
+# Check for compiler boilerplate output or warnings with
+# the simple compiler test code.
+m4_defun([_LT_COMPILER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+])# _LT_COMPILER_BOILERPLATE
+
+
+# _LT_LINKER_BOILERPLATE
+# ----------------------
+# Check for linker boilerplate output or warnings with
+# the simple link test code.
+m4_defun([_LT_LINKER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+])# _LT_LINKER_BOILERPLATE
+
+# _LT_REQUIRED_DARWIN_CHECKS
+# -------------------------
+m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
+  case $host_os in
+    rhapsody* | darwin*)
+    AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
+    AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
+    AC_CHECK_TOOL([LIPO], [lipo], [:])
+    AC_CHECK_TOOL([OTOOL], [otool], [:])
+    AC_CHECK_TOOL([OTOOL64], [otool64], [:])
+    _LT_DECL([], [DSYMUTIL], [1],
+      [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
+    _LT_DECL([], [NMEDIT], [1],
+      [Tool to change global to local symbols on Mac OS X])
+    _LT_DECL([], [LIPO], [1],
+      [Tool to manipulate fat objects and archives on Mac OS X])
+    _LT_DECL([], [OTOOL], [1],
+      [ldd/readelf like tool for Mach-O binaries on Mac OS X])
+    _LT_DECL([], [OTOOL64], [1],
+      [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
+
+    AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
+      [lt_cv_apple_cc_single_mod=no
+      if test -z "${LT_MULTI_MODULE}"; then
+	# By default we will add the -single_module flag. You can override
+	# by either setting the environment variable LT_MULTI_MODULE
+	# non-empty at configure time, or by adding -multi_module to the
+	# link flags.
+	rm -rf libconftest.dylib*
+	echo "int foo(void){return 1;}" > conftest.c
+	echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
+	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+        _lt_result=$?
+	# If there is a non-empty error log, and "single_module"
+	# appears in it, assume the flag caused a linker warning
+        if test -s conftest.err && $GREP single_module conftest.err; then
+	  cat conftest.err >&AS_MESSAGE_LOG_FD
+	# Otherwise, if the output was created with a 0 exit code from
+	# the compiler, it worked.
+	elif test -f libconftest.dylib && test $_lt_result -eq 0; then
+	  lt_cv_apple_cc_single_mod=yes
+	else
+	  cat conftest.err >&AS_MESSAGE_LOG_FD
+	fi
+	rm -rf libconftest.dylib*
+	rm -f conftest.*
+      fi])
+
+    AC_CACHE_CHECK([for -exported_symbols_list linker flag],
+      [lt_cv_ld_exported_symbols_list],
+      [lt_cv_ld_exported_symbols_list=no
+      save_LDFLAGS=$LDFLAGS
+      echo "_main" > conftest.sym
+      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+      AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+	[lt_cv_ld_exported_symbols_list=yes],
+	[lt_cv_ld_exported_symbols_list=no])
+	LDFLAGS="$save_LDFLAGS"
+    ])
+
+    AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load],
+      [lt_cv_ld_force_load=no
+      cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD
+      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD
+      echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD
+      $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD
+      echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD
+      $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD
+      cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD
+      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+      _lt_result=$?
+      if test -s conftest.err && $GREP force_load conftest.err; then
+	cat conftest.err >&AS_MESSAGE_LOG_FD
+      elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then
+	lt_cv_ld_force_load=yes
+      else
+	cat conftest.err >&AS_MESSAGE_LOG_FD
+      fi
+        rm -f conftest.err libconftest.a conftest conftest.c
+        rm -rf conftest.dSYM
+    ])
+    case $host_os in
+    rhapsody* | darwin1.[[012]])
+      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+    darwin1.*)
+      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+    darwin*) # darwin 5.x on
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it?
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+	10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+	10.[[012]]*)
+	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+	10.*)
+	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+      esac
+    ;;
+  esac
+    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    fi
+    if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
+])
+
+
+# _LT_DARWIN_LINKER_FEATURES([TAG])
+# ---------------------------------
+# Checks for linker and compiler features on darwin
+m4_defun([_LT_DARWIN_LINKER_FEATURES],
+[
+  m4_require([_LT_REQUIRED_DARWIN_CHECKS])
+  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+  _LT_TAGVAR(hardcode_direct, $1)=no
+  _LT_TAGVAR(hardcode_automatic, $1)=yes
+  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  if test "$lt_cv_ld_force_load" = "yes"; then
+    _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+    m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes],
+                  [FC],  [_LT_TAGVAR(compiler_needs_object, $1)=yes])
+  else
+    _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+  fi
+  _LT_TAGVAR(link_all_deplibs, $1)=yes
+  _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
+  case $cc_basename in
+     ifort*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test "$_lt_dar_can_shared" = "yes"; then
+    output_verbose_link_cmd=func_echo_all
+    _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+    m4_if([$1], [CXX],
+[   if test "$lt_cv_apple_cc_single_mod" != "yes"; then
+      _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
+      _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+    fi
+],[])
+  else
+  _LT_TAGVAR(ld_shlibs, $1)=no
+  fi
+])
+
+# _LT_SYS_MODULE_PATH_AIX([TAGNAME])
+# ----------------------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+# Store the results from the different compilers for each TAGNAME.
+# Allow to override them for all tags through lt_cv_aix_libpath.
+m4_defun([_LT_SYS_MODULE_PATH_AIX],
+[m4_require([_LT_DECL_SED])dnl
+if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])],
+  [AC_LINK_IFELSE([AC_LANG_PROGRAM],[
+  lt_aix_libpath_sed='[
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }]'
+  _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi],[])
+  if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib"
+  fi
+  ])
+  aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])
+fi
+])# _LT_SYS_MODULE_PATH_AIX
+
+
+# _LT_SHELL_INIT(ARG)
+# -------------------
+m4_define([_LT_SHELL_INIT],
+[m4_divert_text([M4SH-INIT], [$1
+])])# _LT_SHELL_INIT
+
+
+
+# _LT_PROG_ECHO_BACKSLASH
+# -----------------------
+# Find how we can fake an echo command that does not interpret backslash.
+# In particular, with Autoconf 2.60 or later we add some code to the start
+# of the generated configure script which will find a shell with a builtin
+# printf (which we can use as an echo command).
+m4_defun([_LT_PROG_ECHO_BACKSLASH],
+[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+AC_MSG_CHECKING([how to print strings])
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+   test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='printf %s\n'
+else
+  # Use this function as a fallback that always works.
+  func_fallback_echo ()
+  {
+    eval 'cat <<_LTECHO_EOF
+$[]1
+_LTECHO_EOF'
+  }
+  ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO "$*" 
+}
+
+case "$ECHO" in
+  printf*) AC_MSG_RESULT([printf]) ;;
+  print*) AC_MSG_RESULT([print -r]) ;;
+  *) AC_MSG_RESULT([cat]) ;;
+esac
+
+m4_ifdef([_AS_DETECT_SUGGESTED],
+[_AS_DETECT_SUGGESTED([
+  test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || (
+    ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+    ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+    ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+    PATH=/empty FPATH=/empty; export PATH FPATH
+    test "X`printf %s $ECHO`" = "X$ECHO" \
+      || test "X`print -r -- $ECHO`" = "X$ECHO" )])])
+
+_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
+_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes])
+])# _LT_PROG_ECHO_BACKSLASH
+
+
+# _LT_WITH_SYSROOT
+# ----------------
+AC_DEFUN([_LT_WITH_SYSROOT],
+[AC_MSG_CHECKING([for sysroot])
+AC_ARG_WITH([sysroot],
+[  --with-sysroot[=DIR] Search for dependent libraries within DIR
+                        (or the compiler's sysroot if not specified).],
+[], [with_sysroot=no])
+
+dnl lt_sysroot will always be passed unquoted.  We quote it here
+dnl in case the user passed a directory name.
+lt_sysroot=
+case ${with_sysroot} in #(
+ yes)
+   if test "$GCC" = yes; then
+     lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+   fi
+   ;; #(
+ /*)
+   lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+   ;; #(
+ no|'')
+   ;; #(
+ *)
+   AC_MSG_RESULT([${with_sysroot}])
+   AC_MSG_ERROR([The sysroot must be an absolute path.])
+   ;;
+esac
+
+ AC_MSG_RESULT([${lt_sysroot:-no}])
+_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl
+[dependent libraries, and in which our libraries should be installed.])])
+
+# _LT_ENABLE_LOCK
+# ---------------
+m4_defun([_LT_ENABLE_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+  [AS_HELP_STRING([--disable-libtool-lock],
+    [avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.$ac_objext` in
+      *ELF-32*)
+	HPUX_IA64_MODE="32"
+	;;
+      *ELF-64*)
+	HPUX_IA64_MODE="64"
+	;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    if test "$lt_cv_prog_gnu_ld" = yes; then
+      case `/usr/bin/file conftest.$ac_objext` in
+	*32-bit*)
+	  LD="${LD-ld} -melf32bsmip"
+	  ;;
+	*N32*)
+	  LD="${LD-ld} -melf32bmipn32"
+	  ;;
+	*64-bit*)
+	  LD="${LD-ld} -melf64bmip"
+	;;
+      esac
+    else
+      case `/usr/bin/file conftest.$ac_objext` in
+	*32-bit*)
+	  LD="${LD-ld} -32"
+	  ;;
+	*N32*)
+	  LD="${LD-ld} -n32"
+	  ;;
+	*64-bit*)
+	  LD="${LD-ld} -64"
+	  ;;
+      esac
+    fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.o` in
+      *32-bit*)
+	case $host in
+	  x86_64-*kfreebsd*-gnu)
+	    LD="${LD-ld} -m elf_i386_fbsd"
+	    ;;
+	  x86_64-*linux*)
+	    LD="${LD-ld} -m elf_i386"
+	    ;;
+	  powerpc64le-*linux*)
+	    LD="${LD-ld} -m elf32lppclinux"
+	    ;;
+	  powerpc64-*linux*)
+	    LD="${LD-ld} -m elf32ppclinux"
+	    ;;
+	  s390x-*linux*)
+	    LD="${LD-ld} -m elf_s390"
+	    ;;
+	  sparc64-*linux*)
+	    LD="${LD-ld} -m elf32_sparc"
+	    ;;
+	esac
+	;;
+      *64-bit*)
+	case $host in
+	  x86_64-*kfreebsd*-gnu)
+	    LD="${LD-ld} -m elf_x86_64_fbsd"
+	    ;;
+	  x86_64-*linux*)
+	    LD="${LD-ld} -m elf_x86_64"
+	    ;;
+	  powerpcle-*linux*)
+	    LD="${LD-ld} -m elf64lppc"
+	    ;;
+	  powerpc-*linux*)
+	    LD="${LD-ld} -m elf64ppc"
+	    ;;
+	  s390*-*linux*|s390*-*tpf*)
+	    LD="${LD-ld} -m elf64_s390"
+	    ;;
+	  sparc*-*linux*)
+	    LD="${LD-ld} -m elf64_sparc"
+	    ;;
+	esac
+	;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+    [AC_LANG_PUSH(C)
+     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+     AC_LANG_POP])
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+*-*solaris*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*)
+        case $host in
+        i?86-*-solaris*)
+          LD="${LD-ld} -m elf_x86_64"
+          ;;
+        sparc*-*-solaris*)
+          LD="${LD-ld} -m elf64_sparc"
+          ;;
+        esac
+        # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.
+        if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+          LD="${LD-ld}_sol2"
+        fi
+        ;;
+      *)
+	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+	  LD="${LD-ld} -64"
+	fi
+	;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+esac
+
+need_locks="$enable_libtool_lock"
+])# _LT_ENABLE_LOCK
+
+
+# _LT_PROG_AR
+# -----------
+m4_defun([_LT_PROG_AR],
+[AC_CHECK_TOOLS(AR, [ar], false)
+: ${AR=ar}
+: ${AR_FLAGS=cru}
+_LT_DECL([], [AR], [1], [The archiver])
+_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive])
+
+AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file],
+  [lt_cv_ar_at_file=no
+   AC_COMPILE_IFELSE([AC_LANG_PROGRAM],
+     [echo conftest.$ac_objext > conftest.lst
+      lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD'
+      AC_TRY_EVAL([lt_ar_try])
+      if test "$ac_status" -eq 0; then
+	# Ensure the archiver fails upon bogus file names.
+	rm -f conftest.$ac_objext libconftest.a
+	AC_TRY_EVAL([lt_ar_try])
+	if test "$ac_status" -ne 0; then
+          lt_cv_ar_at_file=@
+        fi
+      fi
+      rm -f conftest.* libconftest.a
+     ])
+  ])
+
+if test "x$lt_cv_ar_at_file" = xno; then
+  archiver_list_spec=
+else
+  archiver_list_spec=$lt_cv_ar_at_file
+fi
+_LT_DECL([], [archiver_list_spec], [1],
+  [How to feed a file listing to the archiver])
+])# _LT_PROG_AR
+
+
+# _LT_CMD_OLD_ARCHIVE
+# -------------------
+m4_defun([_LT_CMD_OLD_ARCHIVE],
+[_LT_PROG_AR
+
+AC_CHECK_TOOL(STRIP, strip, :)
+test -z "$STRIP" && STRIP=:
+_LT_DECL([], [STRIP], [1], [A symbol stripping program])
+
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+test -z "$RANLIB" && RANLIB=:
+_LT_DECL([], [RANLIB], [1],
+    [Commands used to install an old-style archive])
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
+fi
+
+case $host_os in
+  darwin*)
+    lock_old_archive_extraction=yes ;;
+  *)
+    lock_old_archive_extraction=no ;;
+esac
+_LT_DECL([], [old_postinstall_cmds], [2])
+_LT_DECL([], [old_postuninstall_cmds], [2])
+_LT_TAGDECL([], [old_archive_cmds], [2],
+    [Commands used to build an old-style archive])
+_LT_DECL([], [lock_old_archive_extraction], [0],
+    [Whether to use a lock for old archive extraction])
+])# _LT_CMD_OLD_ARCHIVE
+
+
+# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#		[OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([_LT_COMPILER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$3"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       $2=yes
+     fi
+   fi
+   $RM conftest*
+])
+
+if test x"[$]$2" = xyes; then
+    m4_if([$5], , :, [$5])
+else
+    m4_if([$6], , :, [$6])
+fi
+])# _LT_COMPILER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
+
+
+# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#                  [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------
+# Check whether the given linker option works
+AC_DEFUN([_LT_LINKER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $3"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&AS_MESSAGE_LOG_FD
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         $2=yes
+       fi
+     else
+       $2=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+])
+
+if test x"[$]$2" = xyes; then
+    m4_if([$4], , :, [$4])
+else
+    m4_if([$5], , :, [$5])
+fi
+])# _LT_LINKER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
+
+
+# LT_CMD_MAX_LEN
+#---------------
+AC_DEFUN([LT_CMD_MAX_LEN],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+  i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw* | cegcc*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  mint*)
+    # On MiNT this can take a long time and run out of memory.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536	# usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  os2*)
+    # The test takes a long time on OS/2.
+    lt_cv_sys_max_cmd_len=8192
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[	 ]]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8 ; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \
+	         = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+	      test $i != 17 # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
+])
+if test -n $lt_cv_sys_max_cmd_len ; then
+  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+  AC_MSG_RESULT(none)
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+_LT_DECL([], [max_cmd_len], [0],
+    [What is the maximum length of a command?])
+])# LT_CMD_MAX_LEN
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
+
+
+# _LT_HEADER_DLFCN
+# ----------------
+m4_defun([_LT_HEADER_DLFCN],
+[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
+])# _LT_HEADER_DLFCN
+
+
+# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+#                      ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ----------------------------------------------------------------
+m4_defun([_LT_TRY_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "$cross_compiling" = yes; then :
+  [$4]
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+[#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+/* When -fvisbility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else
+        {
+	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+	}
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}]
+_LT_EOF
+  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) $1 ;;
+      x$lt_dlneed_uscore) $2 ;;
+      x$lt_dlunknown|x*) $3 ;;
+    esac
+  else :
+    # compilation failed
+    $3
+  fi
+fi
+rm -fr conftest*
+])# _LT_TRY_DLOPEN_SELF
+
+
+# LT_SYS_DLOPEN_SELF
+# ------------------
+AC_DEFUN([LT_SYS_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32* | cegcc*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    AC_CHECK_LIB([dl], [dlopen],
+		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ])
+    ;;
+
+  *)
+    AC_CHECK_FUNC([shl_load],
+	  [lt_cv_dlopen="shl_load"],
+      [AC_CHECK_LIB([dld], [shl_load],
+	    [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
+	[AC_CHECK_FUNC([dlopen],
+	      [lt_cv_dlopen="dlopen"],
+	  [AC_CHECK_LIB([dl], [dlopen],
+		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+	    [AC_CHECK_LIB([svld], [dlopen],
+		  [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+	      [AC_CHECK_LIB([dld], [dld_link],
+		    [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
+	      ])
+	    ])
+	  ])
+	])
+      ])
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    AC_CACHE_CHECK([whether a program can dlopen itself],
+	  lt_cv_dlopen_self, [dnl
+	  _LT_TRY_DLOPEN_SELF(
+	    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+	    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+    ])
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+	  lt_cv_dlopen_self_static, [dnl
+	  _LT_TRY_DLOPEN_SELF(
+	    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+	    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
+      ])
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+_LT_DECL([dlopen_support], [enable_dlopen], [0],
+	 [Whether dlopen is supported])
+_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
+	 [Whether dlopen of programs is supported])
+_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
+	 [Whether dlopen of statically linked programs is supported])
+])# LT_SYS_DLOPEN_SELF
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
+
+
+# _LT_COMPILER_C_O([TAGNAME])
+# ---------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler.
+# This macro does not hard code the compiler like AC_PROG_CC_C_O.
+m4_defun([_LT_COMPILER_C_O],
+[m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+     fi
+   fi
+   chmod u+w . 2>&AS_MESSAGE_LOG_FD
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+])
+_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
+	[Does compiler simultaneously support -c and -o options?])
+])# _LT_COMPILER_C_O
+
+
+# _LT_COMPILER_FILE_LOCKS([TAGNAME])
+# ----------------------------------
+# Check to see if we can do hard links to lock some files if needed
+m4_defun([_LT_COMPILER_FILE_LOCKS],
+[m4_require([_LT_ENABLE_LOCK])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_COMPILER_C_O([$1])
+
+hard_links="nottested"
+if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  AC_MSG_CHECKING([if we can lock with hard links])
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  AC_MSG_RESULT([$hard_links])
+  if test "$hard_links" = no; then
+    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
+])# _LT_COMPILER_FILE_LOCKS
+
+
+# _LT_CHECK_OBJDIR
+# ----------------
+m4_defun([_LT_CHECK_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+_LT_DECL([], [objdir], [0],
+         [The name of the directory that contains temporary libtool files])dnl
+m4_pattern_allow([LT_OBJDIR])dnl
+AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
+  [Define to the sub-directory in which libtool stores uninstalled libraries.])
+])# _LT_CHECK_OBJDIR
+
+
+# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
+# --------------------------------------
+# Check hardcoding attributes.
+m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
+   test -n "$_LT_TAGVAR(runpath_var, $1)" ||
+   test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+     test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
+    # Linking always hardcodes the temporary library directory.
+    _LT_TAGVAR(hardcode_action, $1)=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    _LT_TAGVAR(hardcode_action, $1)=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  _LT_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
+
+if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
+   test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+_LT_TAGDECL([], [hardcode_action], [0],
+    [How to hardcode a shared library path into an executable])
+])# _LT_LINKER_HARDCODE_LIBPATH
+
+
+# _LT_CMD_STRIPLIB
+# ----------------
+m4_defun([_LT_CMD_STRIPLIB],
+[m4_require([_LT_DECL_EGREP])
+striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  AC_MSG_RESULT([yes])
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP" ; then
+      striplib="$STRIP -x"
+      old_striplib="$STRIP -S"
+      AC_MSG_RESULT([yes])
+    else
+      AC_MSG_RESULT([no])
+    fi
+    ;;
+  *)
+    AC_MSG_RESULT([no])
+    ;;
+  esac
+fi
+_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
+_LT_DECL([], [striplib], [1])
+])# _LT_CMD_STRIPLIB
+
+
+# _LT_SYS_DYNAMIC_LINKER([TAG])
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+m4_defun([_LT_SYS_DYNAMIC_LINKER],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_OBJDUMP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+AC_MSG_CHECKING([dynamic linker characteristics])
+m4_if([$1],
+	[], [
+if test "$GCC" = yes; then
+  case $host_os in
+    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+    *) lt_awk_arg="/^libraries:/" ;;
+  esac
+  case $host_os in
+    mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;;
+    *) lt_sed_strip_eq="s,=/,/,g" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+  case $lt_search_path_spec in
+  *\;*)
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+    ;;
+  *)
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+    ;;
+  esac
+  # Ok, now we have the path, separated by spaces, we can step through it
+  # and add multilib dir if necessary.
+  lt_tmp_lt_search_path_spec=
+  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  for lt_sys_path in $lt_search_path_spec; do
+    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+    else
+      test -d "$lt_sys_path" && \
+	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+    fi
+  done
+  lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+  lt_foo="";
+  lt_count=0;
+  for (lt_i = NF; lt_i > 0; lt_i--) {
+    if ($lt_i != "" && $lt_i != ".") {
+      if ($lt_i == "..") {
+        lt_count++;
+      } else {
+        if (lt_count == 0) {
+          lt_foo="/" $lt_i lt_foo;
+        } else {
+          lt_count--;
+        }
+      }
+    }
+  }
+  if (lt_foo != "") { lt_freq[[lt_foo]]++; }
+  if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
+}'`
+  # AWK program above erroneously prepends '/' to C:/dos/paths
+  # for these hosts.
+  case $host_os in
+    mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+      $SED 's,/\([[A-Za-z]]:\),\1,g'` ;;
+  esac
+  sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[[4-9]]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[[01]] | aix4.[[01]].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[[45]]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+m4_if([$1], [],[
+      sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"])
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+    library_names_spec='${libname}.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec="$LIB"
+      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
+    ;;
+
+  *)
+    # Assume MSVC wrapper
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    dynamic_linker='Win32 ld.exe'
+    ;;
+  esac
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+m4_if([$1], [],[
+  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[[23]].*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2.*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
+  freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+haiku*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+  postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
+  ;;
+
+interix[[3-9]]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux # correct to gnu/linux during the next big refactor
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+
+  # Some binutils ld are patched to set DT_RUNPATH
+  AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath],
+    [lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
+	 LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
+    AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+      [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
+	 [lt_cv_shlibpath_overrides_runpath=yes])])
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+    ])
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Add ABI-specific directories to the system library path.
+  sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib"
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra"
+
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*)	need_version=yes ;;
+    *)				need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[[89]] | openbsd2.[[89]].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux # correct to gnu/linux during the next big refactor
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+	;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+_LT_DECL([], [variables_saved_for_relink], [1],
+    [Variables whose values should be saved in libtool wrapper scripts and
+    restored at link time])
+_LT_DECL([], [need_lib_prefix], [0],
+    [Do we need the "lib" prefix for modules?])
+_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
+_LT_DECL([], [version_type], [0], [Library versioning type])
+_LT_DECL([], [runpath_var], [0],  [Shared library runtime path variable])
+_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
+_LT_DECL([], [shlibpath_overrides_runpath], [0],
+    [Is shlibpath searched before the hard-coded library search path?])
+_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
+_LT_DECL([], [library_names_spec], [1],
+    [[List of archive names.  First name is the real one, the rest are links.
+    The last name is the one that the linker finds with -lNAME]])
+_LT_DECL([], [soname_spec], [1],
+    [[The coded name of the library, if different from the real name]])
+_LT_DECL([], [install_override_mode], [1],
+    [Permission mode override for installation of shared libraries])
+_LT_DECL([], [postinstall_cmds], [2],
+    [Command to use after installation of a shared archive])
+_LT_DECL([], [postuninstall_cmds], [2],
+    [Command to use after uninstallation of a shared archive])
+_LT_DECL([], [finish_cmds], [2],
+    [Commands used to finish a libtool library installation in a directory])
+_LT_DECL([], [finish_eval], [1],
+    [[As "finish_cmds", except a single script fragment to be evaled but
+    not shown]])
+_LT_DECL([], [hardcode_into_libs], [0],
+    [Whether we should hardcode library paths into libraries])
+_LT_DECL([], [sys_lib_search_path_spec], [2],
+    [Compile-time system search path for libraries])
+_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
+    [Run-time system search path for libraries])
+])# _LT_SYS_DYNAMIC_LINKER
+
+
+# _LT_PATH_TOOL_PREFIX(TOOL)
+# --------------------------
+# find a file program which can recognize shared library
+AC_DEFUN([_LT_PATH_TOOL_PREFIX],
+[m4_require([_LT_DECL_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] |  ?:[\\/]*])
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word.  This closes a longstanding sh security hole.
+  ac_dummy="m4_if([$2], , $PATH, [$2])"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$1; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+_LT_EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac])
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  AC_MSG_RESULT($MAGIC_CMD)
+else
+  AC_MSG_RESULT(no)
+fi
+_LT_DECL([], [MAGIC_CMD], [0],
+	 [Used to examine libraries when file_magic_cmd begins with "file"])dnl
+])# _LT_PATH_TOOL_PREFIX
+
+# Old name:
+AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
+
+
+# _LT_PATH_MAGIC
+# --------------
+# find a file program which can recognize a shared library
+m4_defun([_LT_PATH_MAGIC],
+[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+  else
+    MAGIC_CMD=:
+  fi
+fi
+])# _LT_PATH_MAGIC
+
+
+# LT_PATH_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([LT_PATH_LD],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PROG_ECHO_BACKSLASH])dnl
+
+AC_ARG_WITH([gnu-ld],
+    [AS_HELP_STRING([--with-gnu-ld],
+	[assume the C compiler uses GNU ld @<:@default=no@:>@])],
+    [test "$withval" = no || with_gnu_ld=yes],
+    [with_gnu_ld=no])dnl
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by $CC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]]* | ?:[[\\/]]*)
+      re_direlt='/[[^/]][[^/]]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break
+	;;
+      *)
+	test "$with_gnu_ld" != yes && break
+	;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  AC_MSG_RESULT($LD)
+else
+  AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+_LT_PATH_LD_GNU
+AC_SUBST([LD])
+
+_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
+])# LT_PATH_LD
+
+# Old names:
+AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
+AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_LD], [])
+dnl AC_DEFUN([AC_PROG_LD], [])
+
+
+# _LT_PATH_LD_GNU
+#- --------------
+m4_defun([_LT_PATH_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# _LT_PATH_LD_GNU
+
+
+# _LT_CMD_RELOAD
+# --------------
+# find reload flag for linker
+#   -- PORTME Some linkers may need a different reload flag.
+m4_defun([_LT_CMD_RELOAD],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+  lt_cv_ld_reload_flag,
+  [lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    if test "$GCC" != yes; then
+      reload_cmds=false
+    fi
+    ;;
+  darwin*)
+    if test "$GCC" = yes; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
+_LT_TAGDECL([], [reload_flag], [1], [How to create reloadable object files])dnl
+_LT_TAGDECL([], [reload_cmds], [2])dnl
+])# _LT_CMD_RELOAD
+
+
+# _LT_CHECK_MAGIC_METHOD
+# ----------------------
+# how to check for library dependencies
+#  -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_MAGIC_METHOD],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+AC_CACHE_CHECK([how to recognize dependent libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[[4-9]]*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi[[45]]*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+  # unless we find 'file', for example because we are cross-compiling.
+  # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
+  if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
+    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+    lt_cv_file_magic_cmd='func_win32_libid'
+  else
+    # Keep this pattern in sync with the one in func_win32_libid.
+    lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+    lt_cv_file_magic_cmd='$OBJDUMP -f'
+  fi
+  ;;
+
+cegcc*)
+  # use the weaker test based on 'objdump'. See mingw*.
+  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | dragonfly*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+haiku*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]']
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+interix[[3-9]]*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+*nto* | *qnx*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+openbsd*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+rdos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+tpf*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+])
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+  case $host_os in
+  mingw* | pw32*)
+    if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+      want_nocaseglob=yes
+    else
+      file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"`
+    fi
+    ;;
+  esac
+fi
+
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+_LT_DECL([], [deplibs_check_method], [1],
+    [Method to check whether dependent libraries are shared objects])
+_LT_DECL([], [file_magic_cmd], [1],
+    [Command to use when deplibs_check_method = "file_magic"])
+_LT_DECL([], [file_magic_glob], [1],
+    [How to find potential files when deplibs_check_method = "file_magic"])
+_LT_DECL([], [want_nocaseglob], [1],
+    [Find potential files using nocaseglob when deplibs_check_method = "file_magic"])
+])# _LT_CHECK_MAGIC_METHOD
+
+
+# LT_PATH_NM
+# ----------
+# find the pathname to a BSD- or MS-compatible name lister
+AC_DEFUN([LT_PATH_NM],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
+[if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_nm_to_check="${ac_tool_prefix}nm"
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS="$lt_save_ifs"
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm="$ac_dir/$lt_tmp_nm"
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+	# Check to see if the nm accepts a BSD-compat flag.
+	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
+	#   nm: unknown option "B" ignored
+	# Tru64's nm complains that /dev/null is an invalid object file
+	case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+	*/dev/null* | *'Invalid file or object type'*)
+	  lt_cv_path_NM="$tmp_nm -B"
+	  break
+	  ;;
+	*)
+	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+	  */dev/null*)
+	    lt_cv_path_NM="$tmp_nm -p"
+	    break
+	    ;;
+	  *)
+	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+	    continue # so that we can try to find one that supports BSD flags
+	    ;;
+	  esac
+	  ;;
+	esac
+      fi
+    done
+    IFS="$lt_save_ifs"
+  done
+  : ${lt_cv_path_NM=no}
+fi])
+if test "$lt_cv_path_NM" != "no"; then
+  NM="$lt_cv_path_NM"
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  if test -n "$DUMPBIN"; then :
+    # Let the user override the test.
+  else
+    AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :)
+    case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
+    *COFF*)
+      DUMPBIN="$DUMPBIN -symbols"
+      ;;
+    *)
+      DUMPBIN=:
+      ;;
+    esac
+  fi
+  AC_SUBST([DUMPBIN])
+  if test "$DUMPBIN" != ":"; then
+    NM="$DUMPBIN"
+  fi
+fi
+test -z "$NM" && NM=nm
+AC_SUBST([NM])
+_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
+
+AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
+  [lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD)
+  cat conftest.out >&AS_MESSAGE_LOG_FD
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*])
+])# LT_PATH_NM
+
+# Old names:
+AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
+AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_NM], [])
+dnl AC_DEFUN([AC_PROG_NM], [])
+
+# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
+# --------------------------------
+# how to determine the name of the shared library
+# associated with a specific link library.
+#  -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+m4_require([_LT_DECL_DLLTOOL])
+AC_CACHE_CHECK([how to associate runtime and link libraries],
+lt_cv_sharedlib_from_linklib_cmd,
+[lt_cv_sharedlib_from_linklib_cmd='unknown'
+
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+  # two different shell functions defined in ltmain.sh
+  # decide which to use based on capabilities of $DLLTOOL
+  case `$DLLTOOL --help 2>&1` in
+  *--identify-strict*)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+    ;;
+  *)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+    ;;
+  esac
+  ;;
+*)
+  # fallback: assume linklib IS sharedlib
+  lt_cv_sharedlib_from_linklib_cmd="$ECHO"
+  ;;
+esac
+])
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
+_LT_DECL([], [sharedlib_from_linklib_cmd], [1],
+    [Command to associate shared and link libraries])
+])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
+
+
+# _LT_PATH_MANIFEST_TOOL
+# ----------------------
+# locate the manifest tool
+m4_defun([_LT_PATH_MANIFEST_TOOL],
+[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :)
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool],
+  [lt_cv_path_mainfest_tool=no
+  echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD
+  $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+    lt_cv_path_mainfest_tool=yes
+  fi
+  rm -f conftest*])
+if test "x$lt_cv_path_mainfest_tool" != xyes; then
+  MANIFEST_TOOL=:
+fi
+_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl
+])# _LT_PATH_MANIFEST_TOOL
+
+
+# LT_LIB_M
+# --------
+# check for math library
+AC_DEFUN([LT_LIB_M],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*)
+  # These system don't have libm, or don't need it
+  ;;
+*-ncr-sysv4.3*)
+  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+  ;;
+*)
+  AC_CHECK_LIB(m, cos, LIBM="-lm")
+  ;;
+esac
+AC_SUBST([LIBM])
+])# LT_LIB_M
+
+# Old name:
+AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_CHECK_LIBM], [])
+
+
+# _LT_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------
+m4_defun([_LT_COMPILER_NO_RTTI],
+[m4_require([_LT_TAG_COMPILER])dnl
+
+_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test "$GCC" = yes; then
+  case $cc_basename in
+  nvcc*)
+    _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;;
+  *)
+    _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;;
+  esac
+
+  _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+    lt_cv_prog_compiler_rtti_exceptions,
+    [-fno-rtti -fno-exceptions], [],
+    [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
+	[Compiler flag to turn off builtin functions])
+])# _LT_COMPILER_NO_RTTI
+
+
+# _LT_CMD_GLOBAL_SYMBOLS
+# ----------------------
+m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[[BCDT]]'
+  ;;
+cygwin* | mingw* | pw32* | cegcc*)
+  symcode='[[ABCDGISTW]]'
+  ;;
+hpux*)
+  if test "$host_cpu" = ia64; then
+    symcode='[[ABCDEGRST]]'
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[[BCDEGRST]]'
+  ;;
+osf*)
+  symcode='[[BCDEGQRST]]'
+  ;;
+solaris*)
+  symcode='[[BDRT]]'
+  ;;
+sco3.2v5*)
+  symcode='[[DT]]'
+  ;;
+sysv4.2uw2*)
+  symcode='[[DT]]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[[ABDT]]'
+  ;;
+sysv4)
+  symcode='[[DFNSTU]]'
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+    # Fake it for dumpbin and say T for any non-static function
+    # and D for any global variable.
+    # Also find C++ and __fastcall symbols from MSVC++,
+    # which start with @ or ?.
+    lt_cv_sys_global_symbol_pipe="$AWK ['"\
+"     {last_section=section; section=\$ 3};"\
+"     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
+"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     \$ 0!~/External *\|/{next};"\
+"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+"     {if(hide[section]) next};"\
+"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+"     ' prfx=^$ac_symprfx]"
+  else
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[	 ]]\($symcode$symcode*\)[[	 ]][[	 ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+  fi
+  lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+  if AC_TRY_EVAL(ac_compile); then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+	mv -f "$nlist"T "$nlist"
+      else
+	rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+	  cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
+/* DATA imports from DLLs on WIN32 con't be const, because runtime
+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
+# define LT@&t at _DLSYM_CONST
+#elif defined(__osf__)
+/* This system does not cope well with relocations in const data.  */
+# define LT@&t at _DLSYM_CONST
+#else
+# define LT@&t at _DLSYM_CONST const
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+	  # Now generate the symbol file.
+	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+	  cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols.  */
+LT@&t at _DLSYM_CONST struct {
+  const char *name;
+  void       *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[[]] =
+{
+  { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+	  cat <<\_LT_EOF >> conftest.$ac_ext
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+	  # Now try linking the two files.
+	  mv conftest.$ac_objext conftstm.$ac_objext
+	  lt_globsym_save_LIBS=$LIBS
+	  lt_globsym_save_CFLAGS=$CFLAGS
+	  LIBS="conftstm.$ac_objext"
+	  CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+	  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+	    pipe_works=yes
+	  fi
+	  LIBS=$lt_globsym_save_LIBS
+	  CFLAGS=$lt_globsym_save_CFLAGS
+	else
+	  echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+	fi
+      else
+	echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+    fi
+  else
+    echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+    cat conftest.$ac_ext >&5
+  fi
+  rm -rf conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  AC_MSG_RESULT(failed)
+else
+  AC_MSG_RESULT(ok)
+fi
+
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then
+  nm_file_list_spec='@'
+fi
+
+_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
+    [Take the output of nm and produce a listing of raw symbols and C names])
+_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
+    [Transform the output of nm in a proper C declaration])
+_LT_DECL([global_symbol_to_c_name_address],
+    [lt_cv_sys_global_symbol_to_c_name_address], [1],
+    [Transform the output of nm in a C name address pair])
+_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
+    [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
+    [Transform the output of nm in a C name address pair when lib prefix is needed])
+_LT_DECL([], [nm_file_list_spec], [1],
+    [Specify filename containing input files for $NM])
+]) # _LT_CMD_GLOBAL_SYMBOLS
+
+
+# _LT_COMPILER_PIC([TAGNAME])
+# ---------------------------
+m4_defun([_LT_COMPILER_PIC],
+[m4_require([_LT_TAG_COMPILER])dnl
+_LT_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_TAGVAR(lt_prog_compiler_static, $1)=
+
+m4_if([$1], [CXX], [
+  # C++ specific cases for pic, static, wl, etc.
+  if test "$GXX" = yes; then
+    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | cygwin* | os2* | pw32* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      m4_if([$1], [GCJ], [],
+	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+      ;;
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)=
+      ;;
+    interix[[3-9]]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+	;;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	;;
+      esac
+      ;;
+    *qnx* | *nto*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+    *)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+  else
+    case $host_os in
+      aix[[4-9]]*)
+	# All AIX code is PIC.
+	if test "$host_cpu" = ia64; then
+	  # AIX 5 now supports IA64 processor
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	else
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+	fi
+	;;
+      chorus*)
+	case $cc_basename in
+	cxch68*)
+	  # Green Hills C++ Compiler
+	  # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+	  ;;
+	esac
+	;;
+      mingw* | cygwin* | os2* | pw32* | cegcc*)
+	# This hack is so that the source file can tell whether it is being
+	# built for inclusion in a dll (and should export symbols for example).
+	m4_if([$1], [GCJ], [],
+	  [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+	;;
+      dgux*)
+	case $cc_basename in
+	  ec++*)
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    ;;
+	  ghcx*)
+	    # Green Hills C++ Compiler
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      freebsd* | dragonfly*)
+	# FreeBSD uses GNU C++
+	;;
+      hpux9* | hpux10* | hpux11*)
+	case $cc_basename in
+	  CC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+	    if test "$host_cpu" != ia64; then
+	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	    fi
+	    ;;
+	  aCC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+	    case $host_cpu in
+	    hppa*64*|ia64*)
+	      # +Z the default
+	      ;;
+	    *)
+	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	      ;;
+	    esac
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      interix*)
+	# This is c89, which is MS Visual C++ (no shared libs)
+	# Anyone wants to do a port?
+	;;
+      irix5* | irix6* | nonstopux*)
+	case $cc_basename in
+	  CC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    # CC pic flag -KPIC is the default.
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+	case $cc_basename in
+	  KCC*)
+	    # KAI C++ Compiler
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	    ;;
+	  ecpc* )
+	    # old Intel C++ for x86_64 which still supported -KPIC.
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+	    ;;
+	  icpc* )
+	    # Intel C++, used to be incompatible with GCC.
+	    # ICC 10 doesn't accept -KPIC any more.
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+	    ;;
+	  pgCC* | pgcpp*)
+	    # Portland Group C++ compiler
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    ;;
+	  cxx*)
+	    # Compaq C++
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    ;;
+	  xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*)
+	    # IBM XL 8.0, 9.0 on PPC and BlueGene
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+	    ;;
+	  *)
+	    case `$CC -V 2>&1 | sed 5q` in
+	    *Sun\ C*)
+	      # Sun C++ 5.9
+	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+	      ;;
+	    esac
+	    ;;
+	esac
+	;;
+      lynxos*)
+	;;
+      m88k*)
+	;;
+      mvs*)
+	case $cc_basename in
+	  cxx*)
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      netbsd*)
+	;;
+      *qnx* | *nto*)
+        # QNX uses GNU C++, but need to define -shared option too, otherwise
+        # it will coredump.
+        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+        ;;
+      osf3* | osf4* | osf5*)
+	case $cc_basename in
+	  KCC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+	    ;;
+	  RCC*)
+	    # Rational C++ 2.4.1
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  cxx*)
+	    # Digital/Compaq C++
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      psos*)
+	;;
+      solaris*)
+	case $cc_basename in
+	  CC* | sunCC*)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+	    ;;
+	  gcx*)
+	    # Green Hills C++ Compiler
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sunos4*)
+	case $cc_basename in
+	  CC*)
+	    # Sun C++ 4.x
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    ;;
+	  lcc*)
+	    # Lucid
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+	case $cc_basename in
+	  CC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    ;;
+	esac
+	;;
+      tandem*)
+	case $cc_basename in
+	  NCC*)
+	    # NonStop-UX NCC 3.20
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      vxworks*)
+	;;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+	;;
+    esac
+  fi
+],
+[
+  if test "$GCC" = yes; then
+    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      m4_if([$1], [GCJ], [],
+	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)=
+      ;;
+
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+	# +Z the default
+	;;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	;;
+      esac
+      ;;
+
+    interix[[3-9]]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      enable_shared=no
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+
+    *)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+
+    case $cc_basename in
+    nvcc*) # Cuda Compiler Driver 2.2
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker '
+      if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+        _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)"
+      fi
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      else
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      m4_if([$1], [GCJ], [],
+	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC (with -KPIC) is the default.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    linux* | k*bsd*-gnu | kopensolaris*-gnu)
+      case $cc_basename in
+      # old Intel for x86_64 which still supported -KPIC.
+      ecc*)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+        ;;
+      # icc used to be incompatible with GCC.
+      # ICC 10 doesn't accept -KPIC any more.
+      icc* | ifort*)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+        ;;
+      # Lahey Fortran 8.1.
+      lf95*)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
+	;;
+      nagfor*)
+	# NAG Fortran compiler
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	;;
+      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+	# which looks to be a dead project)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+        ;;
+      ccc*)
+        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+        # All Alpha code is PIC.
+        _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+        ;;
+      xl* | bgxl* | bgf* | mpixl*)
+	# IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+	;;
+      *)
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*)
+	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
+	  ;;
+	*Sun\ F* | *Sun*Fortran*)
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+	  ;;
+	*Sun\ C*)
+	  # Sun C 5.9
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	  ;;
+        *Intel*\ [[CF]]*Compiler*)
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+	  ;;
+	*Portland\ Group*)
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	  ;;
+	esac
+	;;
+      esac
+      ;;
+
+    newsos6)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # All OSF/1 code is PIC.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    rdos*)
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    solaris*)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    unicos*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+
+    uts4*)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *)
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+    esac
+  fi
+])
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+    ;;
+  *)
+    _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t at m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
+    ;;
+esac
+
+AC_CACHE_CHECK([for $compiler option to produce PIC],
+  [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)],
+  [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+  _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
+    [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
+    [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t at m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
+    [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
+     "" | " "*) ;;
+     *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+     esac],
+    [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+     _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
+	[Additional compiler flags for building library objects])
+
+_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
+	[How to pass a linker flag through the compiler])
+#
+# Check to make sure the static flag actually works.
+#
+wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
+_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
+  _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
+  $lt_tmp_static_flag,
+  [],
+  [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
+_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
+	[Compiler flag to prevent dynamic linking])
+])# _LT_COMPILER_PIC
+
+
+# _LT_LINKER_SHLIBS([TAGNAME])
+# ----------------------------
+# See if the linker supports building shared libraries.
+m4_defun([_LT_LINKER_SHLIBS],
+[AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+m4_if([$1], [CXX], [
+  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+  case $host_os in
+  aix[[4-9]]*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    # Also, AIX nm treats weak defined symbols like other global defined
+    # symbols, whereas GNU nm marks them as "W".
+    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    else
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+    ;;
+  cygwin* | mingw* | cegcc*)
+    case $cc_basename in
+    cl*)
+      _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+      ;;
+    *)
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+      _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
+      ;;
+    esac
+    ;;
+  *)
+    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+    ;;
+  esac
+], [
+  runpath_var=
+  _LT_TAGVAR(allow_undefined_flag, $1)=
+  _LT_TAGVAR(always_export_symbols, $1)=no
+  _LT_TAGVAR(archive_cmds, $1)=
+  _LT_TAGVAR(archive_expsym_cmds, $1)=
+  _LT_TAGVAR(compiler_needs_object, $1)=no
+  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+  _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  _LT_TAGVAR(hardcode_automatic, $1)=no
+  _LT_TAGVAR(hardcode_direct, $1)=no
+  _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+  _LT_TAGVAR(hardcode_libdir_separator, $1)=
+  _LT_TAGVAR(hardcode_minus_L, $1)=no
+  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  _LT_TAGVAR(inherit_rpath, $1)=no
+  _LT_TAGVAR(link_all_deplibs, $1)=unknown
+  _LT_TAGVAR(module_cmds, $1)=
+  _LT_TAGVAR(module_expsym_cmds, $1)=
+  _LT_TAGVAR(old_archive_from_new_cmds, $1)=
+  _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+  _LT_TAGVAR(thread_safe_flag_spec, $1)=
+  _LT_TAGVAR(whole_archive_flag_spec, $1)=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  _LT_TAGVAR(include_expsyms, $1)=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+dnl Note also adjust exclude_expsyms for C++ above.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  _LT_TAGVAR(ld_shlibs, $1)=yes
+
+  # On some targets, GNU ld is compatible enough with the native linker
+  # that we're better off using the native interface for both.
+  lt_use_gnu_ld_interface=no
+  if test "$with_gnu_ld" = yes; then
+    case $host_os in
+      aix*)
+	# The AIX port of GNU ld has always aspired to compatibility
+	# with the native linker.  However, as the warning in the GNU ld
+	# block says, versions before 2.19.5* couldn't really create working
+	# shared libraries, regardless of the interface used.
+	case `$LD -v 2>&1` in
+	  *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+	  *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;;
+	  *\ \(GNU\ Binutils\)\ [[3-9]]*) ;;
+	  *)
+	    lt_use_gnu_ld_interface=yes
+	    ;;
+	esac
+	;;
+      *)
+	lt_use_gnu_ld_interface=yes
+	;;
+    esac
+  fi
+
+  if test "$lt_use_gnu_ld_interface" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      _LT_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v 2>&1` in
+      *GNU\ gold*) supports_anon_versioning=yes ;;
+      *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[[3-9]]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.19, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
+
+_LT_EOF
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            _LT_TAGVAR(archive_expsym_cmds, $1)=''
+        ;;
+      m68k)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes
+        ;;
+      esac
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	# Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	_LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+      # as there is no search path for DLLs.
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(always_export_symbols, $1)=no
+      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+      _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	# If the export-symbols file already is a .def file (1st line
+	# is EXPORTS), use it as is; otherwise, prepend...
+	_LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	  cp $export_symbols $output_objdir/$soname.def;
+	else
+	  echo EXPORTS > $output_objdir/$soname.def;
+	  cat $export_symbols >> $output_objdir/$soname.def;
+	fi~
+	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    haiku*)
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    interix[[3-9]]*)
+      _LT_TAGVAR(hardcode_direct, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+      tmp_diet=no
+      if test "$host_os" = linux-dietlibc; then
+	case $cc_basename in
+	  diet\ *) tmp_diet=yes;;	# linux-dietlibc with static linking (!diet-dyn)
+	esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+	 && test "$tmp_diet" = no
+      then
+	tmp_addflag=' $pic_flag'
+	tmp_sharedflag='-shared'
+	case $cc_basename,$host_cpu in
+        pgcc*)				# Portland Group C compiler
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_addflag=' $pic_flag'
+	  ;;
+	pgf77* | pgf90* | pgf95* | pgfortran*)
+					# Portland Group f77 and f90 compilers
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_addflag=' $pic_flag -Mnomain' ;;
+	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
+	  tmp_addflag=' -i_dynamic' ;;
+	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
+	  tmp_addflag=' -i_dynamic -nofor_main' ;;
+	ifc* | ifort*)			# Intel Fortran compiler
+	  tmp_addflag=' -nofor_main' ;;
+	lf95*)				# Lahey Fortran 8.1
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)=
+	  tmp_sharedflag='--shared' ;;
+	xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+	  tmp_sharedflag='-qmkshrobj'
+	  tmp_addflag= ;;
+	nvcc*)	# Cuda Compiler Driver 2.2
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  _LT_TAGVAR(compiler_needs_object, $1)=yes
+	  ;;
+	esac
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ C*)			# Sun C 5.9
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  _LT_TAGVAR(compiler_needs_object, $1)=yes
+	  tmp_sharedflag='-G' ;;
+	*Sun\ F*)			# Sun Fortran 8.3
+	  tmp_sharedflag='-G' ;;
+	esac
+	_LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+        if test "x$supports_anon_versioning" = xyes; then
+          _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+	    cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+	    echo "local: *; };" >> $output_objdir/$libname.ver~
+	    $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+        fi
+
+	case $cc_basename in
+	xlf* | bgf* | bgxlf* | mpixlf*)
+	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+	  if test "x$supports_anon_versioning" = xyes; then
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+	      echo "local: *; };" >> $output_objdir/$libname.ver~
+	      $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+	  fi
+	  ;;
+	esac
+      else
+        _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+	;;
+	*)
+	  # For security reasons, it is highly recommended that you always
+	  # use absolute paths for naming shared libraries, and exclude the
+	  # DT_RUNPATH tag from executables and libraries.  But doing so
+	  # requires that you compile everything twice, which is a pain.
+	  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	  else
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	  fi
+	;;
+      esac
+      ;;
+
+    sunos4*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+    esac
+
+    if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
+      runpath_var=
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+      _LT_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(always_export_symbols, $1)=yes
+      _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	_LT_TAGVAR(hardcode_direct, $1)=unsupported
+      fi
+      ;;
+
+    aix[[4-9]]*)
+      if test "$host_cpu" = ia64; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=""
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	# Also, AIX nm treats weak defined symbols like other global
+	# defined symbols, whereas GNU nm marks them as "W".
+	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	else
+	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# need to do runtime linking.
+	case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+	  for ld_flag in $LDFLAGS; do
+	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+	    aix_use_runtimelinking=yes
+	    break
+	  fi
+	  done
+	  ;;
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      _LT_TAGVAR(archive_cmds, $1)=''
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+      if test "$GCC" = yes; then
+	case $host_os in aix4.[[012]]|aix4.[[012]].*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" &&
+	   strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+	  then
+	  # We have reworked collect2
+	  :
+	  else
+	  # We have old collect2
+	  _LT_TAGVAR(hardcode_direct, $1)=unsupported
+	  # It fails to find uninstalled libraries when the uninstalled
+	  # path is not listed in the libpath.  Setting hardcode_minus_L
+	  # to unsupported forces relinking
+	  _LT_TAGVAR(hardcode_minus_L, $1)=yes
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+	  _LT_TAGVAR(hardcode_libdir_separator, $1)=
+	  fi
+	  ;;
+	esac
+	shared_flag='-shared'
+	if test "$aix_use_runtimelinking" = yes; then
+	  shared_flag="$shared_flag "'${wl}-G'
+	fi
+      else
+	# not using gcc
+	if test "$host_cpu" = ia64; then
+	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+	  if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag='${wl}-G'
+	  else
+	    shared_flag='${wl}-bM:SRE'
+	  fi
+	fi
+      fi
+
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      _LT_TAGVAR(always_export_symbols, $1)=yes
+      if test "$aix_use_runtimelinking" = yes; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	_LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        _LT_SYS_MODULE_PATH_AIX([$1])
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+      else
+	if test "$host_cpu" = ia64; then
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+	  _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an
+	 # empty executable.
+	 _LT_SYS_MODULE_PATH_AIX([$1])
+	 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+	  _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+	  if test "$with_gnu_ld" = yes; then
+	    # We only use this code for GNU lds that support --whole-archive.
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	  else
+	    # Exported symbols can be pulled into shared objects from archives
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+	  fi
+	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+	  # This is similar to how AIX traditionally builds its shared libraries.
+	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            _LT_TAGVAR(archive_expsym_cmds, $1)=''
+        ;;
+      m68k)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes
+        ;;
+      esac
+      ;;
+
+    bsdi[[45]]*)
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      case $cc_basename in
+      cl*)
+	# Native MSVC
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	_LT_TAGVAR(always_export_symbols, $1)=yes
+	_LT_TAGVAR(file_list_spec, $1)='@'
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=".dll"
+	# FIXME: Setting linknames here is a bad hack.
+	_LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+	_LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	    sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+	  else
+	    sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+	  fi~
+	  $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+	  linknames='
+	# The linker will not automatically build a static lib if we build a DLL.
+	# _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+	_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+	_LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+	_LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+	# Don't use ranlib
+	_LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
+	_LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
+	  lt_tool_outputfile="@TOOL_OUTPUT@"~
+	  case $lt_outputfile in
+	    *.exe|*.EXE) ;;
+	    *)
+	      lt_outputfile="$lt_outputfile.exe"
+	      lt_tool_outputfile="$lt_tool_outputfile.exe"
+	      ;;
+	  esac~
+	  if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+	    $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+	    $RM "$lt_outputfile.manifest";
+	  fi'
+	;;
+      *)
+	# Assume MSVC wrapper
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=".dll"
+	# FIXME: Setting linknames here is a bad hack.
+	_LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+	# The linker will automatically build a .lib file if we build a DLL.
+	_LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+	# FIXME: Should let the user specify the lib program.
+	_LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+	_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+	;;
+      esac
+      ;;
+
+    darwin* | rhapsody*)
+      _LT_DARWIN_LINKER_FEATURES($1)
+      ;;
+
+    dgux*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2.*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      ;;
+
+    hpux10*)
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test "$with_gnu_ld" = no; then
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
+	_LT_TAGVAR(hardcode_direct, $1)=yes
+	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+	# hardcode_minus_L: Not really in the search PATH,
+	# but as the default location of the library.
+	_LT_TAGVAR(hardcode_minus_L, $1)=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+	case $host_cpu in
+	hppa*64*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case $host_cpu in
+	hppa*64*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	m4_if($1, [], [
+	  # Older versions of the 11.00 compiler do not understand -b yet
+	  # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+	  _LT_LINKER_OPTION([if $CC understands -b],
+	    _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b],
+	    [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'],
+	    [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])],
+	  [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'])
+	  ;;
+	esac
+      fi
+      if test "$with_gnu_ld" = no; then
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	case $host_cpu in
+	hppa*64*|ia64*)
+	  _LT_TAGVAR(hardcode_direct, $1)=no
+	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	  ;;
+	*)
+	  _LT_TAGVAR(hardcode_direct, $1)=yes
+	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  _LT_TAGVAR(hardcode_minus_L, $1)=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	# Try to use the -exported_symbol ld option, if it does not
+	# work, assume that -exports_file does not work either and
+	# implicitly export all symbols.
+	# This should be the same for all languages, so no per-tag cache variable.
+	AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol],
+	  [lt_cv_irix_exported_symbol],
+	  [save_LDFLAGS="$LDFLAGS"
+	   LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+	   AC_LINK_IFELSE(
+	     [AC_LANG_SOURCE(
+	        [AC_LANG_CASE([C], [[int foo (void) { return 0; }]],
+			      [C++], [[int foo (void) { return 0; }]],
+			      [Fortran 77], [[
+      subroutine foo
+      end]],
+			      [Fortran], [[
+      subroutine foo
+      end]])])],
+	      [lt_cv_irix_exported_symbol=yes],
+	      [lt_cv_irix_exported_symbol=no])
+           LDFLAGS="$save_LDFLAGS"])
+	if test "$lt_cv_irix_exported_symbol" = yes; then
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+	fi
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(inherit_rpath, $1)=yes
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    newsos6)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *nto* | *qnx*)
+      ;;
+
+    openbsd*)
+      if test -f /usr/libexec/ld.so; then
+	_LT_TAGVAR(hardcode_direct, $1)=yes
+	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+	if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+	else
+	  case $host_os in
+	   openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+	     _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	     ;;
+	   *)
+	     _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	     ;;
+	  esac
+	fi
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    os2*)
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      else
+	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    solaris*)
+      _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
+      if test "$GCC" = yes; then
+	wlarc='${wl}'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+	case `$CC -V 2>&1` in
+	*"Compilers 5.0"*)
+	  wlarc=''
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+	  ;;
+	*)
+	  wlarc='${wl}'
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	  $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+	  ;;
+	esac
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      case $host_os in
+      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+      *)
+	# The compiler driver will combine and reorder linker options,
+	# but understands `-z linker_flag'.  GCC discards it without `$wl',
+	# but is careful enough not to reorder.
+	# Supported since Solaris 2.6 (maybe 2.5.1?)
+	if test "$GCC" = yes; then
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+	else
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+	fi
+	;;
+      esac
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+	  _LT_TAGVAR(hardcode_direct, $1)=no
+        ;;
+	motorola)
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4.3*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	_LT_TAGVAR(ld_shlibs, $1)=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We can NOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      _LT_TAGVAR(ld_shlibs, $1)=no
+      ;;
+    esac
+
+    if test x$host_vendor = xsni; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
+	;;
+      esac
+    fi
+  fi
+])
+AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
+
+_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
+_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
+_LT_DECL([], [extract_expsyms_cmds], [2],
+    [The commands to extract the exported symbol list from a shared archive])
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+  # Assume -lc should be added
+  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $_LT_TAGVAR(archive_cmds, $1) in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      AC_CACHE_CHECK([whether -lc should be explicitly linked in],
+	[lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1),
+	[$RM conftest*
+	echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+	if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+	  soname=conftest
+	  lib=conftest
+	  libobjs=conftest.$ac_objext
+	  deplibs=
+	  wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
+	  pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
+	  compiler_flags=-v
+	  linker_flags=-v
+	  verstring=
+	  output_objdir=.
+	  libname=conftest
+	  lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
+	  _LT_TAGVAR(allow_undefined_flag, $1)=
+	  if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
+	  then
+	    lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+	  else
+	    lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+	  fi
+	  _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+	else
+	  cat conftest.err 1>&5
+	fi
+	$RM conftest*
+	])
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
+    [Whether or not to add -lc for building shared libraries])
+_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
+    [enable_shared_with_static_runtimes], [0],
+    [Whether or not to disallow shared libs when runtime libs are static])
+_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
+    [Compiler flag to allow reflexive dlopens])
+_LT_TAGDECL([], [whole_archive_flag_spec], [1],
+    [Compiler flag to generate shared objects directly from archives])
+_LT_TAGDECL([], [compiler_needs_object], [1],
+    [Whether the compiler copes with passing no objects directly])
+_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
+    [Create an old-style archive from a shared archive])
+_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
+    [Create a temporary old-style archive to link instead of a shared archive])
+_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
+_LT_TAGDECL([], [archive_expsym_cmds], [2])
+_LT_TAGDECL([], [module_cmds], [2],
+    [Commands used to build a loadable module if different from building
+    a shared archive.])
+_LT_TAGDECL([], [module_expsym_cmds], [2])
+_LT_TAGDECL([], [with_gnu_ld], [1],
+    [Whether we are building with GNU ld or not])
+_LT_TAGDECL([], [allow_undefined_flag], [1],
+    [Flag that allows shared libraries with undefined symbols to be built])
+_LT_TAGDECL([], [no_undefined_flag], [1],
+    [Flag that enforces no undefined symbols])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
+    [Flag to hardcode $libdir into a binary during linking.
+    This must work even if $libdir does not exist])
+_LT_TAGDECL([], [hardcode_libdir_separator], [1],
+    [Whether we need a single "-rpath" flag with a separated argument])
+_LT_TAGDECL([], [hardcode_direct], [0],
+    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+    DIR into the resulting binary])
+_LT_TAGDECL([], [hardcode_direct_absolute], [0],
+    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+    DIR into the resulting binary and the resulting library dependency is
+    "absolute", i.e impossible to change by setting ${shlibpath_var} if the
+    library is relocated])
+_LT_TAGDECL([], [hardcode_minus_L], [0],
+    [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+    into the resulting binary])
+_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
+    [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+    into the resulting binary])
+_LT_TAGDECL([], [hardcode_automatic], [0],
+    [Set to "yes" if building a shared library automatically hardcodes DIR
+    into the library and all subsequent libraries and executables linked
+    against it])
+_LT_TAGDECL([], [inherit_rpath], [0],
+    [Set to yes if linker adds runtime paths of dependent libraries
+    to runtime path list])
+_LT_TAGDECL([], [link_all_deplibs], [0],
+    [Whether libtool must link a program against all its dependency libraries])
+_LT_TAGDECL([], [always_export_symbols], [0],
+    [Set to "yes" if exported symbols are required])
+_LT_TAGDECL([], [export_symbols_cmds], [2],
+    [The commands to list exported symbols])
+_LT_TAGDECL([], [exclude_expsyms], [1],
+    [Symbols that should not be listed in the preloaded symbols])
+_LT_TAGDECL([], [include_expsyms], [1],
+    [Symbols that must always be exported])
+_LT_TAGDECL([], [prelink_cmds], [2],
+    [Commands necessary for linking programs (against libraries) with templates])
+_LT_TAGDECL([], [postlink_cmds], [2],
+    [Commands necessary for finishing linking programs])
+_LT_TAGDECL([], [file_list_spec], [1],
+    [Specify filename containing input files])
+dnl FIXME: Not yet implemented
+dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
+dnl    [Compiler flag to generate thread safe objects])
+])# _LT_LINKER_SHLIBS
+
+
+# _LT_LANG_C_CONFIG([TAG])
+# ------------------------
+# Ensure that the configuration variables for a C compiler are suitably
+# defined.  These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_C_CONFIG],
+[m4_require([_LT_DECL_EGREP])dnl
+lt_save_CC="$CC"
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+_LT_TAG_COMPILER
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_SYS_DYNAMIC_LINKER($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+  LT_SYS_DLOPEN_SELF
+  _LT_CMD_STRIPLIB
+
+  # Report which library types will actually be built
+  AC_MSG_CHECKING([if libtool supports shared libraries])
+  AC_MSG_RESULT([$can_build_shared])
+
+  AC_MSG_CHECKING([whether to build shared libraries])
+  test "$can_build_shared" = "no" && enable_shared=no
+
+  # On AIX, shared libraries and static libraries use the same namespace, and
+  # are all built from PIC.
+  case $host_os in
+  aix3*)
+    test "$enable_shared" = yes && enable_static=no
+    if test -n "$RANLIB"; then
+      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+      postinstall_cmds='$RANLIB $lib'
+    fi
+    ;;
+
+  aix[[4-9]]*)
+    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+      test "$enable_shared" = yes && enable_static=no
+    fi
+    ;;
+  esac
+  AC_MSG_RESULT([$enable_shared])
+
+  AC_MSG_CHECKING([whether to build static libraries])
+  # Make sure either enable_shared or enable_static is yes.
+  test "$enable_shared" = yes || enable_static=yes
+  AC_MSG_RESULT([$enable_static])
+
+  _LT_CONFIG($1)
+fi
+AC_LANG_POP
+CC="$lt_save_CC"
+])# _LT_LANG_C_CONFIG
+
+
+# _LT_LANG_CXX_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a C++ compiler are suitably
+# defined.  These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_CXX_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+    (test "X$CXX" != "Xg++"))) ; then
+  AC_PROG_CXXCPP
+else
+  _lt_caught_CXX_error=yes
+fi
+
+AC_LANG_PUSH(C++)
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(compiler_needs_object, $1)=no
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_caught_CXX_error" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="int some_variable = 0;"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC=$CC
+  lt_save_CFLAGS=$CFLAGS
+  lt_save_LD=$LD
+  lt_save_GCC=$GCC
+  GCC=$GXX
+  lt_save_with_gnu_ld=$with_gnu_ld
+  lt_save_path_LD=$lt_cv_path_LD
+  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+  else
+    $as_unset lt_cv_prog_gnu_ld
+  fi
+  if test -n "${lt_cv_path_LDCXX+set}"; then
+    lt_cv_path_LD=$lt_cv_path_LDCXX
+  else
+    $as_unset lt_cv_path_LD
+  fi
+  test -z "${LDCXX+set}" || LD=$LDCXX
+  CC=${CXX-"c++"}
+  CFLAGS=$CXXFLAGS
+  compiler=$CC
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+
+  if test -n "$compiler"; then
+    # We don't want -fno-exception when compiling C++ code, so set the
+    # no_builtin_flag separately
+    if test "$GXX" = yes; then
+      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+    else
+      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+    fi
+
+    if test "$GXX" = yes; then
+      # Set up default GNU C++ configuration
+
+      LT_PATH_LD
+
+      # Check if GNU C++ uses GNU ld as the underlying linker, since the
+      # archiving commands below assume that GNU ld is being used.
+      if test "$with_gnu_ld" = yes; then
+        _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+        # If archive_cmds runs LD, not CC, wlarc should be empty
+        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+        #     investigate it a little bit more. (MM)
+        wlarc='${wl}'
+
+        # ancient GNU ld didn't support --whole-archive et. al.
+        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+	  $GREP 'no-whole-archive' > /dev/null; then
+          _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+        else
+          _LT_TAGVAR(whole_archive_flag_spec, $1)=
+        fi
+      else
+        with_gnu_ld=no
+        wlarc=
+
+        # A generic and very simple default shared library creation
+        # command for GNU C++ for the case where it uses the native
+        # linker, instead of GNU ld.  If possible, this setting should
+        # overridden to take advantage of the native linker features on
+        # the platform it is being used on.
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+      fi
+
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+    else
+      GXX=no
+      with_gnu_ld=no
+      wlarc=
+    fi
+
+    # PORTME: fill in a description of your system's C++ link characteristics
+    AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+    _LT_TAGVAR(ld_shlibs, $1)=yes
+    case $host_os in
+      aix3*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+      aix[[4-9]]*)
+        if test "$host_cpu" = ia64; then
+          # On IA64, the linker does run time linking by default, so we don't
+          # have to do anything special.
+          aix_use_runtimelinking=no
+          exp_sym_flag='-Bexport'
+          no_entry_flag=""
+        else
+          aix_use_runtimelinking=no
+
+          # Test if we are trying to use run time linking or normal
+          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+          # need to do runtime linking.
+          case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+	    for ld_flag in $LDFLAGS; do
+	      case $ld_flag in
+	      *-brtl*)
+	        aix_use_runtimelinking=yes
+	        break
+	        ;;
+	      esac
+	    done
+	    ;;
+          esac
+
+          exp_sym_flag='-bexport'
+          no_entry_flag='-bnoentry'
+        fi
+
+        # When large executables or shared objects are built, AIX ld can
+        # have problems creating the table of contents.  If linking a library
+        # or program results in "error TOC overflow" add -mminimal-toc to
+        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+        _LT_TAGVAR(archive_cmds, $1)=''
+        _LT_TAGVAR(hardcode_direct, $1)=yes
+        _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+        _LT_TAGVAR(link_all_deplibs, $1)=yes
+        _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+        if test "$GXX" = yes; then
+          case $host_os in aix4.[[012]]|aix4.[[012]].*)
+          # We only want to do this on AIX 4.2 and lower, the check
+          # below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" &&
+	     strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+	  then
+	    # We have reworked collect2
+	    :
+	  else
+	    # We have old collect2
+	    _LT_TAGVAR(hardcode_direct, $1)=unsupported
+	    # It fails to find uninstalled libraries when the uninstalled
+	    # path is not listed in the libpath.  Setting hardcode_minus_L
+	    # to unsupported forces relinking
+	    _LT_TAGVAR(hardcode_minus_L, $1)=yes
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+	    _LT_TAGVAR(hardcode_libdir_separator, $1)=
+	  fi
+          esac
+          shared_flag='-shared'
+	  if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag="$shared_flag "'${wl}-G'
+	  fi
+        else
+          # not using gcc
+          if test "$host_cpu" = ia64; then
+	  # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	  # chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+          else
+	    if test "$aix_use_runtimelinking" = yes; then
+	      shared_flag='${wl}-G'
+	    else
+	      shared_flag='${wl}-bM:SRE'
+	    fi
+          fi
+        fi
+
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+        # It seems that -bexpall does not export symbols beginning with
+        # underscore (_), so it is better to generate a list of symbols to
+	# export.
+        _LT_TAGVAR(always_export_symbols, $1)=yes
+        if test "$aix_use_runtimelinking" = yes; then
+          # Warning - without using the other runtime loading flags (-brtl),
+          # -berok will link without error, but may produce a broken library.
+          _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+          # Determine the default libpath from the value encoded in an empty
+          # executable.
+          _LT_SYS_MODULE_PATH_AIX([$1])
+          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        else
+          if test "$host_cpu" = ia64; then
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+	    _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+          else
+	    # Determine the default libpath from the value encoded in an
+	    # empty executable.
+	    _LT_SYS_MODULE_PATH_AIX([$1])
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+	    # Warning - without using the other run time loading flags,
+	    # -berok will link without error, but may produce a broken library.
+	    _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+	    _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+	    if test "$with_gnu_ld" = yes; then
+	      # We only use this code for GNU lds that support --whole-archive.
+	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	    else
+	      # Exported symbols can be pulled into shared objects from archives
+	      _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+	    fi
+	    _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+	    # This is similar to how AIX traditionally builds its shared
+	    # libraries.
+	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+          fi
+        fi
+        ;;
+
+      beos*)
+	if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	  # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+	  # support --undefined.  This deserves some investigation.  FIXME
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	else
+	  _LT_TAGVAR(ld_shlibs, $1)=no
+	fi
+	;;
+
+      chorus*)
+        case $cc_basename in
+          *)
+	  # FIXME: insert proper C++ library support
+	  _LT_TAGVAR(ld_shlibs, $1)=no
+	  ;;
+        esac
+        ;;
+
+      cygwin* | mingw* | pw32* | cegcc*)
+	case $GXX,$cc_basename in
+	,cl* | no,cl*)
+	  # Native MSVC
+	  # hardcode_libdir_flag_spec is actually meaningless, as there is
+	  # no search path for DLLs.
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	  _LT_TAGVAR(always_export_symbols, $1)=yes
+	  _LT_TAGVAR(file_list_spec, $1)='@'
+	  # Tell ltmain to make .lib files, not .a files.
+	  libext=lib
+	  # Tell ltmain to make .dll files, not .so files.
+	  shrext_cmds=".dll"
+	  # FIXME: Setting linknames here is a bad hack.
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	      $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+	    else
+	      $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+	    fi~
+	    $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+	    linknames='
+	  # The linker will not automatically build a static lib if we build a DLL.
+	  # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+	  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+	  # Don't use ranlib
+	  _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
+	  _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
+	    lt_tool_outputfile="@TOOL_OUTPUT@"~
+	    case $lt_outputfile in
+	      *.exe|*.EXE) ;;
+	      *)
+		lt_outputfile="$lt_outputfile.exe"
+		lt_tool_outputfile="$lt_tool_outputfile.exe"
+		;;
+	    esac~
+	    func_to_tool_file "$lt_outputfile"~
+	    if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+	      $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+	      $RM "$lt_outputfile.manifest";
+	    fi'
+	  ;;
+	*)
+	  # g++
+	  # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+	  # as there is no search path for DLLs.
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
+	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	  _LT_TAGVAR(always_export_symbols, $1)=no
+	  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+	  if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	    # If the export-symbols file already is a .def file (1st line
+	    # is EXPORTS), use it as is; otherwise, prepend...
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	      cp $export_symbols $output_objdir/$soname.def;
+	    else
+	      echo EXPORTS > $output_objdir/$soname.def;
+	      cat $export_symbols >> $output_objdir/$soname.def;
+	    fi~
+	    $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	  else
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	  fi
+	  ;;
+	esac
+	;;
+      darwin* | rhapsody*)
+        _LT_DARWIN_LINKER_FEATURES($1)
+	;;
+
+      dgux*)
+        case $cc_basename in
+          ec++*)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          ghcx*)
+	    # Green Hills C++ Compiler
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+        esac
+        ;;
+
+      freebsd2.*)
+        # C++ shared libraries reported to be fairly broken before
+	# switch to ELF
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      freebsd-elf*)
+        _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+        ;;
+
+      freebsd* | dragonfly*)
+        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+        # conventions
+        _LT_TAGVAR(ld_shlibs, $1)=yes
+        ;;
+
+      gnu*)
+        ;;
+
+      haiku*)
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        _LT_TAGVAR(link_all_deplibs, $1)=yes
+        ;;
+
+      hpux9*)
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+        _LT_TAGVAR(hardcode_direct, $1)=yes
+        _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+				             # but as the default
+				             # location of the library.
+
+        case $cc_basename in
+          CC*)
+            # FIXME: insert proper C++ library support
+            _LT_TAGVAR(ld_shlibs, $1)=no
+            ;;
+          aCC*)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            # Commands to make compiler produce verbose output that lists
+            # what "hidden" libraries, object files and flags are used when
+            # linking a shared library.
+            #
+            # There doesn't appear to be a way to prevent this compiler from
+            # explicitly linking system object files so we need to strip them
+            # from the output so that they don't get included in the library
+            # dependencies.
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+            ;;
+          *)
+            if test "$GXX" = yes; then
+              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            else
+              # FIXME: insert proper C++ library support
+              _LT_TAGVAR(ld_shlibs, $1)=no
+            fi
+            ;;
+        esac
+        ;;
+
+      hpux10*|hpux11*)
+        if test $with_gnu_ld = no; then
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	  _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+          case $host_cpu in
+            hppa*64*|ia64*)
+              ;;
+            *)
+	      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+              ;;
+          esac
+        fi
+        case $host_cpu in
+          hppa*64*|ia64*)
+            _LT_TAGVAR(hardcode_direct, $1)=no
+            _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+            ;;
+          *)
+            _LT_TAGVAR(hardcode_direct, $1)=yes
+            _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+					         # but as the default
+					         # location of the library.
+            ;;
+        esac
+
+        case $cc_basename in
+          CC*)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          aCC*)
+	    case $host_cpu in
+	      hppa*64*)
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	      ia64*)
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	      *)
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	    esac
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+	    ;;
+          *)
+	    if test "$GXX" = yes; then
+	      if test $with_gnu_ld = no; then
+	        case $host_cpu in
+	          hppa*64*)
+	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	          ia64*)
+	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	          *)
+	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	        esac
+	      fi
+	    else
+	      # FIXME: insert proper C++ library support
+	      _LT_TAGVAR(ld_shlibs, $1)=no
+	    fi
+	    ;;
+        esac
+        ;;
+
+      interix[[3-9]]*)
+	_LT_TAGVAR(hardcode_direct, $1)=no
+	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+	# Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+	# Instead, shared libraries are loaded at an image base (0x10000000 by
+	# default) and relocated if they conflict, which is a slow very memory
+	# consuming and fragmenting process.  To avoid this, we pick a random,
+	# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+	# time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+	;;
+      irix5* | irix6*)
+        case $cc_basename in
+          CC*)
+	    # SGI C++
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+	    # necessary to make sure instantiated templates are included
+	    # in the archive.
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+	    ;;
+          *)
+	    if test "$GXX" = yes; then
+	      if test "$with_gnu_ld" = no; then
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	      else
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
+	      fi
+	    fi
+	    _LT_TAGVAR(link_all_deplibs, $1)=yes
+	    ;;
+        esac
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+        _LT_TAGVAR(inherit_rpath, $1)=yes
+        ;;
+
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+        case $cc_basename in
+          KCC*)
+	    # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	    # KCC will only create a shared library if the output file
+	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
+	    # to its proper name (with version) after linking.
+	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+	    ;;
+	  icpc* | ecpc* )
+	    # Intel C++
+	    with_gnu_ld=yes
+	    # version 8.0 and above of icpc choke on multiply defined symbols
+	    # if we add $predep_objects and $postdep_objects, however 7.1 and
+	    # earlier do not add the objects themselves.
+	    case `$CC -V 2>&1` in
+	      *"Version 7."*)
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+		;;
+	      *)  # Version 8.0 or newer
+	        tmp_idyn=
+	        case $host_cpu in
+		  ia64*) tmp_idyn=' -i_dynamic';;
+		esac
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+		;;
+	    esac
+	    _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	    ;;
+          pgCC* | pgcpp*)
+            # Portland Group C++ compiler
+	    case `$CC -V` in
+	    *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*)
+	      _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+		compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
+	      _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
+		$RANLIB $oldlib'
+	      _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+	      _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
+		rm -rf $tpldir~
+		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+	      ;;
+	    *) # Version 6 and above use weak symbols
+	      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+	      ;;
+	    esac
+
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+            ;;
+	  cxx*)
+	    # Compaq C++
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+	    runpath_var=LD_RUN_PATH
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
+	    ;;
+	  xl* | mpixl* | bgxl*)
+	    # IBM XL 8.0 on PPC, with GNU ld
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	    if test "x$supports_anon_versioning" = xyes; then
+	      _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+		cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+		echo "local: *; };" >> $output_objdir/$libname.ver~
+		$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+	    fi
+	    ;;
+	  *)
+	    case `$CC -V 2>&1 | sed 5q` in
+	    *Sun\ C*)
+	      # Sun C++ 5.9
+	      _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+	      _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	      _LT_TAGVAR(compiler_needs_object, $1)=yes
+
+	      # Not sure whether something based on
+	      # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+	      # would be better.
+	      output_verbose_link_cmd='func_echo_all'
+
+	      # Archives containing C++ object files must be created using
+	      # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	      # necessary to make sure instantiated templates are included
+	      # in the archive.
+	      _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+	      ;;
+	    esac
+	    ;;
+	esac
+	;;
+
+      lynxos*)
+        # FIXME: insert proper C++ library support
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	;;
+
+      m88k*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+	;;
+
+      mvs*)
+        case $cc_basename in
+          cxx*)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+	  *)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+	esac
+	;;
+
+      netbsd*)
+        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+	  wlarc=
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	  _LT_TAGVAR(hardcode_direct, $1)=yes
+	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	fi
+	# Workaround some broken pre-1.5 toolchains
+	output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+	;;
+
+      *nto* | *qnx*)
+        _LT_TAGVAR(ld_shlibs, $1)=yes
+	;;
+
+      openbsd2*)
+        # C++ shared libraries are fairly broken
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	;;
+
+      openbsd*)
+	if test -f /usr/libexec/ld.so; then
+	  _LT_TAGVAR(hardcode_direct, $1)=yes
+	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+	  fi
+	  output_verbose_link_cmd=func_echo_all
+	else
+	  _LT_TAGVAR(ld_shlibs, $1)=no
+	fi
+	;;
+
+      osf3* | osf4* | osf5*)
+        case $cc_basename in
+          KCC*)
+	    # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	    # KCC will only create a shared library if the output file
+	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
+	    # to its proper name (with version) after linking.
+	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	    # Archives containing C++ object files must be created using
+	    # the KAI C++ compiler.
+	    case $host in
+	      osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
+	      *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
+	    esac
+	    ;;
+          RCC*)
+	    # Rational C++ 2.4.1
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          cxx*)
+	    case $host in
+	      osf3*)
+	        _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+		;;
+	      *)
+	        _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	        _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+	          echo "-hidden">> $lib.exp~
+	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~
+	          $RM $lib.exp'
+	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+		;;
+	    esac
+
+	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+	    ;;
+	  *)
+	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	      _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	      case $host in
+	        osf3*)
+	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+		  ;;
+	        *)
+	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+		  ;;
+	      esac
+
+	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	      # Commands to make compiler produce verbose output that lists
+	      # what "hidden" libraries, object files and flags are used when
+	      # linking a shared library.
+	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+	    else
+	      # FIXME: insert proper C++ library support
+	      _LT_TAGVAR(ld_shlibs, $1)=no
+	    fi
+	    ;;
+        esac
+        ;;
+
+      psos*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      sunos4*)
+        case $cc_basename in
+          CC*)
+	    # Sun C++ 4.x
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          lcc*)
+	    # Lucid
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+        esac
+        ;;
+
+      solaris*)
+        case $cc_basename in
+          CC* | sunCC*)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+            _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
+	    _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+	      $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	    _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	    case $host_os in
+	      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+	      *)
+		# The compiler driver will combine and reorder linker options,
+		# but understands `-z linker_flag'.
+	        # Supported since Solaris 2.6 (maybe 2.5.1?)
+		_LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+	        ;;
+	    esac
+	    _LT_TAGVAR(link_all_deplibs, $1)=yes
+
+	    output_verbose_link_cmd='func_echo_all'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	    # necessary to make sure instantiated templates are included
+	    # in the archive.
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+	    ;;
+          gcx*)
+	    # Green Hills C++ Compiler
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+	    # The C++ compiler must be used to create the archive.
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+	    ;;
+          *)
+	    # GNU C++ compiler with Solaris linker
+	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	      _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+	      if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+		  $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	        # Commands to make compiler produce verbose output that lists
+	        # what "hidden" libraries, object files and flags are used when
+	        # linking a shared library.
+	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+	      else
+	        # g++ 2.7 appears to require `-G' NOT `-shared' on this
+	        # platform.
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+		  $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	        # Commands to make compiler produce verbose output that lists
+	        # what "hidden" libraries, object files and flags are used when
+	        # linking a shared library.
+	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+	      fi
+
+	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+	      case $host_os in
+		solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+		*)
+		  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+		  ;;
+	      esac
+	    fi
+	    ;;
+        esac
+        ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+
+      case $cc_basename in
+        CC*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+      esac
+      ;;
+
+      sysv5* | sco3.2v5* | sco5v6*)
+	# Note: We can NOT use -z defs as we might desire, because we do not
+	# link with -lc, and that would cause any symbols used from libc to
+	# always be unresolved, which means just about no library would
+	# ever link correctly.  If we're not using GNU ld we use -z text
+	# though, which does catch some bad symbols but isn't as heavy-handed
+	# as -z defs.
+	_LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+	_LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+	_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+	_LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+	_LT_TAGVAR(link_all_deplibs, $1)=yes
+	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+	runpath_var='LD_RUN_PATH'
+
+	case $cc_basename in
+          CC*)
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~
+	      '"$_LT_TAGVAR(old_archive_cmds, $1)"
+	    _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~
+	      '"$_LT_TAGVAR(reload_cmds, $1)"
+	    ;;
+	  *)
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    ;;
+	esac
+      ;;
+
+      tandem*)
+        case $cc_basename in
+          NCC*)
+	    # NonStop-UX NCC 3.20
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+        esac
+        ;;
+
+      vxworks*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      *)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+    esac
+
+    AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+    test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+    _LT_TAGVAR(GCC, $1)="$GXX"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_SYS_HIDDEN_LIBDEPS($1)
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
+  LDCXX=$LD
+  LD=$lt_save_LD
+  GCC=$lt_save_GCC
+  with_gnu_ld=$lt_save_with_gnu_ld
+  lt_cv_path_LDCXX=$lt_cv_path_LD
+  lt_cv_path_LD=$lt_save_path_LD
+  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test "$_lt_caught_CXX_error" != yes
+
+AC_LANG_POP
+])# _LT_LANG_CXX_CONFIG
+
+
+# _LT_FUNC_STRIPNAME_CNF
+# ----------------------
+# func_stripname_cnf prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+#
+# This function is identical to the (non-XSI) version of func_stripname,
+# except this one can be used by m4 code that may be executed by configure,
+# rather than the libtool script.
+m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl
+AC_REQUIRE([_LT_DECL_SED])
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])
+func_stripname_cnf ()
+{
+  case ${2} in
+  .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+  *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+  esac
+} # func_stripname_cnf
+])# _LT_FUNC_STRIPNAME_CNF
+
+# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
+# ---------------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl
+# Dependencies to place before and after the object being linked:
+_LT_TAGVAR(predep_objects, $1)=
+_LT_TAGVAR(postdep_objects, $1)=
+_LT_TAGVAR(predeps, $1)=
+_LT_TAGVAR(postdeps, $1)=
+_LT_TAGVAR(compiler_lib_search_path, $1)=
+
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library.  It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
+int a;
+void foo (void) { a = 0; }
+_LT_EOF
+], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+_LT_EOF
+], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
+      subroutine foo
+      implicit none
+      integer*4 a
+      a=0
+      return
+      end
+_LT_EOF
+], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
+      subroutine foo
+      implicit none
+      integer a
+      a=0
+      return
+      end
+_LT_EOF
+], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
+public class foo {
+  private int a;
+  public void bar (void) {
+    a = 0;
+  }
+};
+_LT_EOF
+], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF
+package foo
+func foo() {
+}
+_LT_EOF
+])
+
+_lt_libdeps_save_CFLAGS=$CFLAGS
+case "$CC $CFLAGS " in #(
+*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
+*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;;
+esac
+
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  for p in `eval "$output_verbose_link_cmd"`; do
+    case ${prev}${p} in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test $p = "-L" ||
+          test $p = "-R"; then
+	 prev=$p
+	 continue
+       fi
+
+       # Expand the sysroot to ease extracting the directories later.
+       if test -z "$prev"; then
+         case $p in
+         -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
+         -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
+         -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
+         esac
+       fi
+       case $p in
+       =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
+       esac
+       if test "$pre_test_object_deps_done" = no; then
+	 case ${prev} in
+	 -L | -R)
+	   # Internal compiler library paths should come after those
+	   # provided the user.  The postdeps already come after the
+	   # user supplied libs so there is no need to process them.
+	   if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
+	     _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+	   else
+	     _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+	   fi
+	   ;;
+	 # The "-l" case would never come before the object being
+	 # linked, so don't bother handling this case.
+	 esac
+       else
+	 if test -z "$_LT_TAGVAR(postdeps, $1)"; then
+	   _LT_TAGVAR(postdeps, $1)="${prev}${p}"
+	 else
+	   _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
+	 fi
+       fi
+       prev=
+       ;;
+
+    *.lto.$objext) ;; # Ignore GCC LTO objects
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+	 pre_test_object_deps_done=yes
+	 continue
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
+	   _LT_TAGVAR(predep_objects, $1)="$p"
+	 else
+	   _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
+	 fi
+       else
+	 if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
+	   _LT_TAGVAR(postdep_objects, $1)="$p"
+	 else
+	   _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
+	 fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$RM -f confest.$objext
+CFLAGS=$_lt_libdeps_save_CFLAGS
+
+# PORTME: override above test on systems where it is broken
+m4_if([$1], [CXX],
+[case $host_os in
+interix[[3-9]]*)
+  # Interix 3.5 installs completely hosed .la files for C++, so rather than
+  # hack all around it, let's just trust "g++" to DTRT.
+  _LT_TAGVAR(predep_objects,$1)=
+  _LT_TAGVAR(postdep_objects,$1)=
+  _LT_TAGVAR(postdeps,$1)=
+  ;;
+
+linux*)
+  case `$CC -V 2>&1 | sed 5q` in
+  *Sun\ C*)
+    # Sun C++ 5.9
+
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    if test "$solaris_use_stlport4" != yes; then
+      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+
+solaris*)
+  case $cc_basename in
+  CC* | sunCC*)
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    # Adding this requires a known-good setup of shared libraries for
+    # Sun compiler versions before 5.6, else PIC objects from an old
+    # archive will be linked into the output, leading to subtle bugs.
+    if test "$solaris_use_stlport4" != yes; then
+      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+esac
+])
+
+case " $_LT_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=
+if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+fi
+_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
+    [The directories searched by this compiler when creating a shared library])
+_LT_TAGDECL([], [predep_objects], [1],
+    [Dependencies to place before and after the objects being linked to
+    create a shared library])
+_LT_TAGDECL([], [postdep_objects], [1])
+_LT_TAGDECL([], [predeps], [1])
+_LT_TAGDECL([], [postdeps], [1])
+_LT_TAGDECL([], [compiler_lib_search_path], [1],
+    [The library search path used internally by the compiler when linking
+    a shared library])
+])# _LT_SYS_HIDDEN_LIBDEPS
+
+
+# _LT_LANG_F77_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a Fortran 77 compiler are
+# suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_F77_CONFIG],
+[AC_LANG_PUSH(Fortran 77)
+if test -z "$F77" || test "X$F77" = "Xno"; then
+  _lt_disable_F77=yes
+fi
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the F77 compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_F77" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="\
+      subroutine t
+      return
+      end
+"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code="\
+      program t
+      end
+"
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC="$CC"
+  lt_save_GCC=$GCC
+  lt_save_CFLAGS=$CFLAGS
+  CC=${F77-"f77"}
+  CFLAGS=$FFLAGS
+  compiler=$CC
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+  GCC=$G77
+  if test -n "$compiler"; then
+    AC_MSG_CHECKING([if libtool supports shared libraries])
+    AC_MSG_RESULT([$can_build_shared])
+
+    AC_MSG_CHECKING([whether to build shared libraries])
+    test "$can_build_shared" = "no" && enable_shared=no
+
+    # On AIX, shared libraries and static libraries use the same namespace, and
+    # are all built from PIC.
+    case $host_os in
+      aix3*)
+        test "$enable_shared" = yes && enable_static=no
+        if test -n "$RANLIB"; then
+          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+          postinstall_cmds='$RANLIB $lib'
+        fi
+        ;;
+      aix[[4-9]]*)
+	if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+	  test "$enable_shared" = yes && enable_static=no
+	fi
+        ;;
+    esac
+    AC_MSG_RESULT([$enable_shared])
+
+    AC_MSG_CHECKING([whether to build static libraries])
+    # Make sure either enable_shared or enable_static is yes.
+    test "$enable_shared" = yes || enable_static=yes
+    AC_MSG_RESULT([$enable_static])
+
+    _LT_TAGVAR(GCC, $1)="$G77"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  GCC=$lt_save_GCC
+  CC="$lt_save_CC"
+  CFLAGS="$lt_save_CFLAGS"
+fi # test "$_lt_disable_F77" != yes
+
+AC_LANG_POP
+])# _LT_LANG_F77_CONFIG
+
+
+# _LT_LANG_FC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for a Fortran compiler are
+# suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_FC_CONFIG],
+[AC_LANG_PUSH(Fortran)
+
+if test -z "$FC" || test "X$FC" = "Xno"; then
+  _lt_disable_FC=yes
+fi
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for fc test sources.
+ac_ext=${ac_fc_srcext-f}
+
+# Object file extension for compiled fc test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the FC compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_FC" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="\
+      subroutine t
+      return
+      end
+"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code="\
+      program t
+      end
+"
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC="$CC"
+  lt_save_GCC=$GCC
+  lt_save_CFLAGS=$CFLAGS
+  CC=${FC-"f95"}
+  CFLAGS=$FCFLAGS
+  compiler=$CC
+  GCC=$ac_cv_fc_compiler_gnu
+
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+
+  if test -n "$compiler"; then
+    AC_MSG_CHECKING([if libtool supports shared libraries])
+    AC_MSG_RESULT([$can_build_shared])
+
+    AC_MSG_CHECKING([whether to build shared libraries])
+    test "$can_build_shared" = "no" && enable_shared=no
+
+    # On AIX, shared libraries and static libraries use the same namespace, and
+    # are all built from PIC.
+    case $host_os in
+      aix3*)
+        test "$enable_shared" = yes && enable_static=no
+        if test -n "$RANLIB"; then
+          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+          postinstall_cmds='$RANLIB $lib'
+        fi
+        ;;
+      aix[[4-9]]*)
+	if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+	  test "$enable_shared" = yes && enable_static=no
+	fi
+        ;;
+    esac
+    AC_MSG_RESULT([$enable_shared])
+
+    AC_MSG_CHECKING([whether to build static libraries])
+    # Make sure either enable_shared or enable_static is yes.
+    test "$enable_shared" = yes || enable_static=yes
+    AC_MSG_RESULT([$enable_static])
+
+    _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_SYS_HIDDEN_LIBDEPS($1)
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  GCC=$lt_save_GCC
+  CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
+fi # test "$_lt_disable_FC" != yes
+
+AC_LANG_POP
+])# _LT_LANG_FC_CONFIG
+
+
+# _LT_LANG_GCJ_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Java Compiler compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_GCJ_CONFIG],
+[AC_REQUIRE([LT_PROG_GCJ])dnl
+AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GCJ-"gcj"}
+CFLAGS=$GCJFLAGS
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)="$LD"
+_LT_CC_BASENAME([$compiler])
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+
+  _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_GCJ_CONFIG
+
+
+# _LT_LANG_GO_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Go compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_GO_CONFIG],
+[AC_REQUIRE([LT_PROG_GO])dnl
+AC_LANG_SAVE
+
+# Source file extension for Go test sources.
+ac_ext=go
+
+# Object file extension for compiled Go test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="package main; func main() { }"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='package main; func main() { }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GOC-"gccgo"}
+CFLAGS=$GOFLAGS
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)="$LD"
+_LT_CC_BASENAME([$compiler])
+
+# Go did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+
+  _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_GO_CONFIG
+
+
+# _LT_LANG_RC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for the Windows resource compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_RC_CONFIG],
+[AC_REQUIRE([LT_PROG_RC])dnl
+AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=
+CC=${RC-"windres"}
+CFLAGS=
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+if test -n "$compiler"; then
+  :
+  _LT_CONFIG($1)
+fi
+
+GCC=$lt_save_GCC
+AC_LANG_RESTORE
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_RC_CONFIG
+
+
+# LT_PROG_GCJ
+# -----------
+AC_DEFUN([LT_PROG_GCJ],
+[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
+  [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
+    [AC_CHECK_TOOL(GCJ, gcj,)
+      test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+      AC_SUBST(GCJFLAGS)])])[]dnl
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
+
+
+# LT_PROG_GO
+# ----------
+AC_DEFUN([LT_PROG_GO],
+[AC_CHECK_TOOL(GOC, gccgo,)
+])
+
+
+# LT_PROG_RC
+# ----------
+AC_DEFUN([LT_PROG_RC],
+[AC_CHECK_TOOL(RC, windres,)
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_RC], [])
+
+
+# _LT_DECL_EGREP
+# --------------
+# If we don't have a new enough Autoconf to choose the best grep
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_EGREP],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_REQUIRE([AC_PROG_FGREP])dnl
+test -z "$GREP" && GREP=grep
+_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
+_LT_DECL([], [EGREP], [1], [An ERE matcher])
+_LT_DECL([], [FGREP], [1], [A literal string matcher])
+dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
+AC_SUBST([GREP])
+])
+
+
+# _LT_DECL_OBJDUMP
+# --------------
+# If we don't have a new enough Autoconf to choose the best objdump
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_OBJDUMP],
+[AC_CHECK_TOOL(OBJDUMP, objdump, false)
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
+AC_SUBST([OBJDUMP])
+])
+
+# _LT_DECL_DLLTOOL
+# ----------------
+# Ensure DLLTOOL variable is set.
+m4_defun([_LT_DECL_DLLTOOL],
+[AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])
+AC_SUBST([DLLTOOL])
+])
+
+# _LT_DECL_SED
+# ------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible.  Prefer GNU sed if found.
+m4_defun([_LT_DECL_SED],
+[AC_PROG_SED
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
+_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
+    [Sed that helps us avoid accidentally triggering echo(1) options like -n])
+])# _LT_DECL_SED
+
+m4_ifndef([AC_PROG_SED], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into   #
+#  GNU Autoconf as AC_PROG_SED.  When it is available in   #
+#  a released version of Autoconf we should remove this    #
+#  macro and use it instead.                               #
+############################################################
+
+m4_defun([AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for lt_ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+      fi
+    done
+  done
+done
+IFS=$as_save_IFS
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+  test ! -f $lt_ac_sed && continue
+  cat /dev/null > conftest.in
+  lt_ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+  # Check for GNU sed and select it if it is found.
+  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+    lt_cv_path_SED=$lt_ac_sed
+    break
+  fi
+  while true; do
+    cat conftest.in conftest.in >conftest.tmp
+    mv conftest.tmp conftest.in
+    cp conftest.in conftest.nl
+    echo >>conftest.nl
+    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+    cmp -s conftest.out conftest.nl || break
+    # 10000 chars as input seems more than enough
+    test $lt_ac_count -gt 10 && break
+    lt_ac_count=`expr $lt_ac_count + 1`
+    if test $lt_ac_count -gt $lt_ac_max; then
+      lt_ac_max=$lt_ac_count
+      lt_cv_path_SED=$lt_ac_sed
+    fi
+  done
+done
+])
+SED=$lt_cv_path_SED
+AC_SUBST([SED])
+AC_MSG_RESULT([$SED])
+])#AC_PROG_SED
+])#m4_ifndef
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_SED], [])
+
+
+# _LT_CHECK_SHELL_FEATURES
+# ------------------------
+# Find out whether the shell is Bourne or XSI compatible,
+# or has some other useful features.
+m4_defun([_LT_CHECK_SHELL_FEATURES],
+[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+  test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,b/c, \
+    && eval 'test $(( 1 + 1 )) -eq 2 \
+    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+  && xsi_shell=yes
+AC_MSG_RESULT([$xsi_shell])
+_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
+
+AC_MSG_CHECKING([whether the shell understands "+="])
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
+    >/dev/null 2>&1 \
+  && lt_shell_append=yes
+AC_MSG_RESULT([$lt_shell_append])
+_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  lt_unset=unset
+else
+  lt_unset=false
+fi
+_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  lt_SP2NL='tr \040 \012'
+  lt_NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  lt_SP2NL='tr \100 \n'
+  lt_NL2SP='tr \r\n \100\100'
+  ;;
+esac
+_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
+_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
+])# _LT_CHECK_SHELL_FEATURES
+
+
+# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY)
+# ------------------------------------------------------
+# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and
+# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY.
+m4_defun([_LT_PROG_FUNCTION_REPLACE],
+[dnl {
+sed -e '/^$1 ()$/,/^} # $1 /c\
+$1 ()\
+{\
+m4_bpatsubsts([$2], [$], [\\], [^\([	 ]\)], [\\\1])
+} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+])
+
+
+# _LT_PROG_REPLACE_SHELLFNS
+# -------------------------
+# Replace existing portable implementations of several shell functions with
+# equivalent extended shell implementations where those features are available..
+m4_defun([_LT_PROG_REPLACE_SHELLFNS],
+[if test x"$xsi_shell" = xyes; then
+  _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl
+    case ${1} in
+      */*) func_dirname_result="${1%/*}${2}" ;;
+      *  ) func_dirname_result="${3}" ;;
+    esac])
+
+  _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl
+    func_basename_result="${1##*/}"])
+
+  _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl
+    case ${1} in
+      */*) func_dirname_result="${1%/*}${2}" ;;
+      *  ) func_dirname_result="${3}" ;;
+    esac
+    func_basename_result="${1##*/}"])
+
+  _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl
+    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+    # positional parameters, so assign one to ordinary parameter first.
+    func_stripname_result=${3}
+    func_stripname_result=${func_stripname_result#"${1}"}
+    func_stripname_result=${func_stripname_result%"${2}"}])
+
+  _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl
+    func_split_long_opt_name=${1%%=*}
+    func_split_long_opt_arg=${1#*=}])
+
+  _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl
+    func_split_short_opt_arg=${1#??}
+    func_split_short_opt_name=${1%"$func_split_short_opt_arg"}])
+
+  _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl
+    case ${1} in
+      *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+      *)    func_lo2o_result=${1} ;;
+    esac])
+
+  _LT_PROG_FUNCTION_REPLACE([func_xform], [    func_xform_result=${1%.*}.lo])
+
+  _LT_PROG_FUNCTION_REPLACE([func_arith], [    func_arith_result=$(( $[*] ))])
+
+  _LT_PROG_FUNCTION_REPLACE([func_len], [    func_len_result=${#1}])
+fi
+
+if test x"$lt_shell_append" = xyes; then
+  _LT_PROG_FUNCTION_REPLACE([func_append], [    eval "${1}+=\\${2}"])
+
+  _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl
+    func_quote_for_eval "${2}"
+dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \
+    eval "${1}+=\\\\ \\$func_quote_for_eval_result"])
+
+  # Save a `func_append' function call where possible by direct use of '+='
+  sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+else
+  # Save a `func_append' function call even when '+=' is not available
+  sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+fi
+
+if test x"$_lt_function_replace_fail" = x":"; then
+  AC_MSG_WARN([Unable to substitute extended shell functions in $ofile])
+fi
+])
+
+# _LT_PATH_CONVERSION_FUNCTIONS
+# -----------------------------
+# Determine which file name conversion functions should be used by
+# func_to_host_file (and, implicitly, by func_to_host_path).  These are needed
+# for certain cross-compile configurations and native mingw.
+m4_defun([_LT_PATH_CONVERSION_FUNCTIONS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_MSG_CHECKING([how to convert $build file names to $host format])
+AC_CACHE_VAL(lt_cv_to_host_file_cmd,
+[case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+        ;;
+    esac
+    ;;
+  *-*-cygwin* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_noop
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+        ;;
+    esac
+    ;;
+  * ) # unhandled hosts (and "normal" native builds)
+    lt_cv_to_host_file_cmd=func_convert_file_noop
+    ;;
+esac
+])
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+AC_MSG_RESULT([$lt_cv_to_host_file_cmd])
+_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd],
+         [0], [convert $build file names to $host format])dnl
+
+AC_MSG_CHECKING([how to convert $build file names to toolchain format])
+AC_CACHE_VAL(lt_cv_to_tool_file_cmd,
+[#assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+        ;;
+    esac
+    ;;
+esac
+])
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+AC_MSG_RESULT([$lt_cv_to_tool_file_cmd])
+_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd],
+         [0], [convert $build files to toolchain format])dnl
+])# _LT_PATH_CONVERSION_FUNCTIONS
diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4
new file mode 100644
index 0000000..5d9acd8
--- /dev/null
+++ b/m4/ltoptions.m4
@@ -0,0 +1,384 @@
+# Helper functions for option handling.                    -*- Autoconf -*-
+#
+#   Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation,
+#   Inc.
+#   Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 7 ltoptions.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
+
+
+# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
+# ------------------------------------------
+m4_define([_LT_MANGLE_OPTION],
+[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
+
+
+# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
+# ---------------------------------------
+# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
+# matching handler defined, dispatch to it.  Other OPTION-NAMEs are
+# saved as a flag.
+m4_define([_LT_SET_OPTION],
+[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
+m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
+        _LT_MANGLE_DEFUN([$1], [$2]),
+    [m4_warning([Unknown $1 option `$2'])])[]dnl
+])
+
+
+# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
+# ------------------------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+m4_define([_LT_IF_OPTION],
+[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
+
+
+# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
+# -------------------------------------------------------
+# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
+# are set.
+m4_define([_LT_UNLESS_OPTIONS],
+[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+	    [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
+		      [m4_define([$0_found])])])[]dnl
+m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
+])[]dnl
+])
+
+
+# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
+# ----------------------------------------
+# OPTION-LIST is a space-separated list of Libtool options associated
+# with MACRO-NAME.  If any OPTION has a matching handler declared with
+# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
+# the unknown option and exit.
+m4_defun([_LT_SET_OPTIONS],
+[# Set options
+m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+    [_LT_SET_OPTION([$1], _LT_Option)])
+
+m4_if([$1],[LT_INIT],[
+  dnl
+  dnl Simply set some default values (i.e off) if boolean options were not
+  dnl specified:
+  _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
+  ])
+  _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
+  ])
+  dnl
+  dnl If no reference was made to various pairs of opposing options, then
+  dnl we run the default mode handler for the pair.  For example, if neither
+  dnl `shared' nor `disable-shared' was passed, we enable building of shared
+  dnl archives by default:
+  _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
+  _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
+  _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
+  _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
+  		   [_LT_ENABLE_FAST_INSTALL])
+  ])
+])# _LT_SET_OPTIONS
+
+
+## --------------------------------- ##
+## Macros to handle LT_INIT options. ##
+## --------------------------------- ##
+
+# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
+# -----------------------------------------
+m4_define([_LT_MANGLE_DEFUN],
+[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
+
+
+# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
+# -----------------------------------------------
+m4_define([LT_OPTION_DEFINE],
+[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
+])# LT_OPTION_DEFINE
+
+
+# dlopen
+# ------
+LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
+])
+
+AU_DEFUN([AC_LIBTOOL_DLOPEN],
+[_LT_SET_OPTION([LT_INIT], [dlopen])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `dlopen' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
+
+
+# win32-dll
+# ---------
+# Declare package support for building win32 dll's.
+LT_OPTION_DEFINE([LT_INIT], [win32-dll],
+[enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
+  AC_CHECK_TOOL(AS, as, false)
+  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+  AC_CHECK_TOOL(OBJDUMP, objdump, false)
+  ;;
+esac
+
+test -z "$AS" && AS=as
+_LT_DECL([], [AS],      [1], [Assembler program])dnl
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl
+])# win32-dll
+
+AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+_LT_SET_OPTION([LT_INIT], [win32-dll])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `win32-dll' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
+
+
+# _LT_ENABLE_SHARED([DEFAULT])
+# ----------------------------
+# implement the --enable-shared flag, and supports the `shared' and
+# `disable-shared' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_SHARED],
+[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([shared],
+    [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+	[build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_shared=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
+
+    _LT_DECL([build_libtool_libs], [enable_shared], [0],
+	[Whether or not to build shared libraries])
+])# _LT_ENABLE_SHARED
+
+LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
+])
+
+AC_DEFUN([AC_DISABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], [disable-shared])
+])
+
+AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_SHARED], [])
+dnl AC_DEFUN([AM_DISABLE_SHARED], [])
+
+
+
+# _LT_ENABLE_STATIC([DEFAULT])
+# ----------------------------
+# implement the --enable-static flag, and support the `static' and
+# `disable-static' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_STATIC],
+[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([static],
+    [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+	[build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_static=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
+
+    _LT_DECL([build_old_libs], [enable_static], [0],
+	[Whether or not to build static libraries])
+])# _LT_ENABLE_STATIC
+
+LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
+])
+
+AC_DEFUN([AC_DISABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], [disable-static])
+])
+
+AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_STATIC], [])
+dnl AC_DEFUN([AM_DISABLE_STATIC], [])
+
+
+
+# _LT_ENABLE_FAST_INSTALL([DEFAULT])
+# ----------------------------------
+# implement the --enable-fast-install flag, and support the `fast-install'
+# and `disable-fast-install' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_FAST_INSTALL],
+[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([fast-install],
+    [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+    [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_fast_install=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
+
+_LT_DECL([fast_install], [enable_fast_install], [0],
+	 [Whether or not to optimize for fast installation])dnl
+])# _LT_ENABLE_FAST_INSTALL
+
+LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
+
+# Old names:
+AU_DEFUN([AC_ENABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `fast-install' option into LT_INIT's first parameter.])
+])
+
+AU_DEFUN([AC_DISABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `disable-fast-install' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
+dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
+
+
+# _LT_WITH_PIC([MODE])
+# --------------------
+# implement the --with-pic flag, and support the `pic-only' and `no-pic'
+# LT_INIT options.
+# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
+m4_define([_LT_WITH_PIC],
+[AC_ARG_WITH([pic],
+    [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@],
+	[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+    [lt_p=${PACKAGE-default}
+    case $withval in
+    yes|no) pic_mode=$withval ;;
+    *)
+      pic_mode=default
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for lt_pkg in $withval; do
+	IFS="$lt_save_ifs"
+	if test "X$lt_pkg" = "X$lt_p"; then
+	  pic_mode=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [pic_mode=default])
+
+test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
+
+_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
+])# _LT_WITH_PIC
+
+LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
+
+# Old name:
+AU_DEFUN([AC_LIBTOOL_PICMODE],
+[_LT_SET_OPTION([LT_INIT], [pic-only])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `pic-only' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
+
+## ----------------- ##
+## LTDL_INIT Options ##
+## ----------------- ##
+
+m4_define([_LTDL_MODE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
+		 [m4_define([_LTDL_MODE], [nonrecursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [recursive],
+		 [m4_define([_LTDL_MODE], [recursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [subproject],
+		 [m4_define([_LTDL_MODE], [subproject])])
+
+m4_define([_LTDL_TYPE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [installable],
+		 [m4_define([_LTDL_TYPE], [installable])])
+LT_OPTION_DEFINE([LTDL_INIT], [convenience],
+		 [m4_define([_LTDL_TYPE], [convenience])])
diff --git a/m4/ltsugar.m4 b/m4/ltsugar.m4
new file mode 100644
index 0000000..9000a05
--- /dev/null
+++ b/m4/ltsugar.m4
@@ -0,0 +1,123 @@
+# ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-
+#
+# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 6 ltsugar.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
+
+
+# lt_join(SEP, ARG1, [ARG2...])
+# -----------------------------
+# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
+# associated separator.
+# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
+# versions in m4sugar had bugs.
+m4_define([lt_join],
+[m4_if([$#], [1], [],
+       [$#], [2], [[$2]],
+       [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
+m4_define([_lt_join],
+[m4_if([$#$2], [2], [],
+       [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
+
+
+# lt_car(LIST)
+# lt_cdr(LIST)
+# ------------
+# Manipulate m4 lists.
+# These macros are necessary as long as will still need to support
+# Autoconf-2.59 which quotes differently.
+m4_define([lt_car], [[$1]])
+m4_define([lt_cdr],
+[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
+       [$#], 1, [],
+       [m4_dquote(m4_shift($@))])])
+m4_define([lt_unquote], $1)
+
+
+# lt_append(MACRO-NAME, STRING, [SEPARATOR])
+# ------------------------------------------
+# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
+# Note that neither SEPARATOR nor STRING are expanded; they are appended
+# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
+# No SEPARATOR is output if MACRO-NAME was previously undefined (different
+# than defined and empty).
+#
+# This macro is needed until we can rely on Autoconf 2.62, since earlier
+# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
+m4_define([lt_append],
+[m4_define([$1],
+	   m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
+
+
+
+# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
+# ----------------------------------------------------------
+# Produce a SEP delimited list of all paired combinations of elements of
+# PREFIX-LIST with SUFFIX1 through SUFFIXn.  Each element of the list
+# has the form PREFIXmINFIXSUFFIXn.
+# Needed until we can rely on m4_combine added in Autoconf 2.62.
+m4_define([lt_combine],
+[m4_if(m4_eval([$# > 3]), [1],
+       [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
+[[m4_foreach([_Lt_prefix], [$2],
+	     [m4_foreach([_Lt_suffix],
+		]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
+	[_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
+
+
+# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
+# -----------------------------------------------------------------------
+# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
+# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
+m4_define([lt_if_append_uniq],
+[m4_ifdef([$1],
+	  [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
+		 [lt_append([$1], [$2], [$3])$4],
+		 [$5])],
+	  [lt_append([$1], [$2], [$3])$4])])
+
+
+# lt_dict_add(DICT, KEY, VALUE)
+# -----------------------------
+m4_define([lt_dict_add],
+[m4_define([$1($2)], [$3])])
+
+
+# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
+# --------------------------------------------
+m4_define([lt_dict_add_subkey],
+[m4_define([$1($2:$3)], [$4])])
+
+
+# lt_dict_fetch(DICT, KEY, [SUBKEY])
+# ----------------------------------
+m4_define([lt_dict_fetch],
+[m4_ifval([$3],
+	m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
+    m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
+
+
+# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
+# -----------------------------------------------------------------
+m4_define([lt_if_dict_fetch],
+[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
+	[$5],
+    [$6])])
+
+
+# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
+# --------------------------------------------------------------
+m4_define([lt_dict_filter],
+[m4_if([$5], [], [],
+  [lt_join(m4_quote(m4_default([$4], [[, ]])),
+           lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
+		      [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
+])
diff --git a/m4/ltversion.m4 b/m4/ltversion.m4
new file mode 100644
index 0000000..07a8602
--- /dev/null
+++ b/m4/ltversion.m4
@@ -0,0 +1,23 @@
+# ltversion.m4 -- version numbers			-*- Autoconf -*-
+#
+#   Copyright (C) 2004 Free Software Foundation, Inc.
+#   Written by Scott James Remnant, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# @configure_input@
+
+# serial 3337 ltversion.m4
+# This file is part of GNU Libtool
+
+m4_define([LT_PACKAGE_VERSION], [2.4.2])
+m4_define([LT_PACKAGE_REVISION], [1.3337])
+
+AC_DEFUN([LTVERSION_VERSION],
+[macro_version='2.4.2'
+macro_revision='1.3337'
+_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+_LT_DECL(, macro_revision, 0)
+])
diff --git a/m4/lt~obsolete.m4 b/m4/lt~obsolete.m4
new file mode 100644
index 0000000..c573da9
--- /dev/null
+++ b/m4/lt~obsolete.m4
@@ -0,0 +1,98 @@
+# lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
+#
+#   Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc.
+#   Written by Scott James Remnant, 2004.
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 5 lt~obsolete.m4
+
+# These exist entirely to fool aclocal when bootstrapping libtool.
+#
+# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
+# which have later been changed to m4_define as they aren't part of the
+# exported API, or moved to Autoconf or Automake where they belong.
+#
+# The trouble is, aclocal is a bit thick.  It'll see the old AC_DEFUN
+# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
+# using a macro with the same name in our local m4/libtool.m4 it'll
+# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
+# and doesn't know about Autoconf macros at all.)
+#
+# So we provide this file, which has a silly filename so it's always
+# included after everything else.  This provides aclocal with the
+# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
+# because those macros already exist, or will be overwritten later.
+# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. 
+#
+# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
+# Yes, that means every name once taken will need to remain here until
+# we give up compatibility with versions before 1.7, at which point
+# we need to keep only those names which we still refer to.
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
+
+m4_ifndef([AC_LIBTOOL_LINKER_OPTION],	[AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
+m4_ifndef([AC_PROG_EGREP],		[AC_DEFUN([AC_PROG_EGREP])])
+m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH],	[AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_AC_SHELL_INIT],		[AC_DEFUN([_LT_AC_SHELL_INIT])])
+m4_ifndef([_LT_AC_SYS_LIBPATH_AIX],	[AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
+m4_ifndef([_LT_PROG_LTMAIN],		[AC_DEFUN([_LT_PROG_LTMAIN])])
+m4_ifndef([_LT_AC_TAGVAR],		[AC_DEFUN([_LT_AC_TAGVAR])])
+m4_ifndef([AC_LTDL_ENABLE_INSTALL],	[AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
+m4_ifndef([AC_LTDL_PREOPEN],		[AC_DEFUN([AC_LTDL_PREOPEN])])
+m4_ifndef([_LT_AC_SYS_COMPILER],	[AC_DEFUN([_LT_AC_SYS_COMPILER])])
+m4_ifndef([_LT_AC_LOCK],		[AC_DEFUN([_LT_AC_LOCK])])
+m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE],	[AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
+m4_ifndef([_LT_AC_TRY_DLOPEN_SELF],	[AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
+m4_ifndef([AC_LIBTOOL_PROG_CC_C_O],	[AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
+m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
+m4_ifndef([AC_LIBTOOL_OBJDIR],		[AC_DEFUN([AC_LIBTOOL_OBJDIR])])
+m4_ifndef([AC_LTDL_OBJDIR],		[AC_DEFUN([AC_LTDL_OBJDIR])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
+m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP],	[AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
+m4_ifndef([AC_PATH_MAGIC],		[AC_DEFUN([AC_PATH_MAGIC])])
+m4_ifndef([AC_PROG_LD_GNU],		[AC_DEFUN([AC_PROG_LD_GNU])])
+m4_ifndef([AC_PROG_LD_RELOAD_FLAG],	[AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
+m4_ifndef([AC_DEPLIBS_CHECK_METHOD],	[AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
+m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS],	[AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
+m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP],	[AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
+m4_ifndef([LT_AC_PROG_EGREP],		[AC_DEFUN([LT_AC_PROG_EGREP])])
+m4_ifndef([LT_AC_PROG_SED],		[AC_DEFUN([LT_AC_PROG_SED])])
+m4_ifndef([_LT_CC_BASENAME],		[AC_DEFUN([_LT_CC_BASENAME])])
+m4_ifndef([_LT_COMPILER_BOILERPLATE],	[AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
+m4_ifndef([_LT_LINKER_BOILERPLATE],	[AC_DEFUN([_LT_LINKER_BOILERPLATE])])
+m4_ifndef([_AC_PROG_LIBTOOL],		[AC_DEFUN([_AC_PROG_LIBTOOL])])
+m4_ifndef([AC_LIBTOOL_SETUP],		[AC_DEFUN([AC_LIBTOOL_SETUP])])
+m4_ifndef([_LT_AC_CHECK_DLFCN],		[AC_DEFUN([_LT_AC_CHECK_DLFCN])])
+m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER],	[AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
+m4_ifndef([_LT_AC_TAGCONFIG],		[AC_DEFUN([_LT_AC_TAGCONFIG])])
+m4_ifndef([AC_DISABLE_FAST_INSTALL],	[AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
+m4_ifndef([_LT_AC_LANG_CXX],		[AC_DEFUN([_LT_AC_LANG_CXX])])
+m4_ifndef([_LT_AC_LANG_F77],		[AC_DEFUN([_LT_AC_LANG_F77])])
+m4_ifndef([_LT_AC_LANG_GCJ],		[AC_DEFUN([_LT_AC_LANG_GCJ])])
+m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
+m4_ifndef([_LT_AC_LANG_C_CONFIG],	[AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
+m4_ifndef([_LT_AC_LANG_CXX_CONFIG],	[AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
+m4_ifndef([_LT_AC_LANG_F77_CONFIG],	[AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
+m4_ifndef([_LT_AC_LANG_GCJ_CONFIG],	[AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
+m4_ifndef([_LT_AC_LANG_RC_CONFIG],	[AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
+m4_ifndef([AC_LIBTOOL_CONFIG],		[AC_DEFUN([AC_LIBTOOL_CONFIG])])
+m4_ifndef([_LT_AC_FILE_LTDLL_C],	[AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
+m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS],	[AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])])
+m4_ifndef([_LT_AC_PROG_CXXCPP],		[AC_DEFUN([_LT_AC_PROG_CXXCPP])])
+m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS],	[AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])])
+m4_ifndef([_LT_PROG_ECHO_BACKSLASH],	[AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_PROG_F77],		[AC_DEFUN([_LT_PROG_F77])])
+m4_ifndef([_LT_PROG_FC],		[AC_DEFUN([_LT_PROG_FC])])
+m4_ifndef([_LT_PROG_CXX],		[AC_DEFUN([_LT_PROG_CXX])])
diff --git a/nautilus-extension/nautilus-easytag.c b/nautilus-extension/nautilus-easytag.c
new file mode 100644
index 0000000..71620da
--- /dev/null
+++ b/nautilus-extension/nautilus-easytag.c
@@ -0,0 +1,317 @@
+/* EasyTAG - tag editor for audio files
+ * Copyright (C) 2014 Victor A. Santos <victoraur.santos at gmail.com>
+ * Copyright (C) 2014 David King <amigadave at amigadave.com>
+ *
+ * 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
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <gio/gio.h>
+#include <gio/gdesktopappinfo.h>
+#include <glib/gi18n-lib.h>
+#include <libnautilus-extension/nautilus-extension-types.h>
+#include <libnautilus-extension/nautilus-file-info.h>
+#include <libnautilus-extension/nautilus-menu-provider.h>
+
+#define NAUTILUS_TYPE_EASYTAG (nautilus_easytag_get_type ())
+#define NAUTILUS_EASYTAG(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), NAUTILUS_TYPE_EASYTAG, NautilusEasytag))
+#define NAUTILUS_IS_EASYTAG(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), NAUTILUS_TYPE_EASYTAG))
+
+typedef struct _NautilusEasytag NautilusEasytag;
+typedef struct _NautilusEasytagClass NautilusEasytagClass;
+
+struct _NautilusEasytag
+{
+    GObject parent;
+};
+
+struct _NautilusEasytagClass
+{
+    GObjectClass parent_class;
+};
+
+GType nautilus_easytag_get_type (void);
+
+typedef struct
+{
+    gboolean is_directory;
+    gboolean is_file;
+} FileMimeInfo;
+
+static struct
+{
+    const gchar *mime_type;
+    gboolean is_directory;
+    gboolean is_file;
+} easytag_mime_types[] =
+{
+    { "inode/directory", TRUE, FALSE },
+    { "audio/x-mp3", FALSE, TRUE },
+    { "audio/x-mpeg", FALSE, TRUE },
+    { "audio/mpeg", FALSE, TRUE },
+    { "application/ogg", FALSE, TRUE },
+    { "audio/x-vorbis+ogg", FALSE, TRUE },
+    { "audio/x-flac", FALSE, TRUE },
+    { "audio/x-musepack", FALSE, TRUE },
+    { "audio/x-ape", FALSE, TRUE },
+    { "audio/x-speex+ogg", FALSE, TRUE },
+    { "audio/x-opus+ogg", FALSE, TRUE },
+    { NULL, FALSE }
+};
+
+static gboolean
+unsupported_scheme (NautilusFileInfo *file)
+{
+    gboolean result = FALSE;
+    GFile *location;
+    gchar *scheme;
+
+    location = nautilus_file_info_get_location (file);
+    scheme = g_file_get_uri_scheme (location);
+
+    if (scheme != NULL)
+    {
+        const gchar *unsupported[] = { "trash", "computer", NULL };
+        gsize i;
+
+        for (i = 0; unsupported[i] != NULL; i++)
+        {
+            if (strcmp (scheme, unsupported[i]) == 0)
+            {
+                result = TRUE;
+            }
+        }
+    }
+
+    g_free (scheme);
+    g_object_unref (location);
+
+    return result;
+}
+
+static FileMimeInfo
+get_file_mime_info (NautilusFileInfo *file)
+{
+    FileMimeInfo file_mime_info;
+    gsize i;
+
+    file_mime_info.is_directory = FALSE;
+    file_mime_info.is_file = FALSE;
+
+    for (i = 0; easytag_mime_types[i].mime_type != NULL; i++)
+    {
+        if (nautilus_file_info_is_mime_type (file,
+                                             easytag_mime_types[i].mime_type))
+        {
+            file_mime_info.is_directory = easytag_mime_types[i].is_directory;
+            file_mime_info.is_file = easytag_mime_types[i].is_file;
+
+            return file_mime_info;
+        }
+    }
+
+    return file_mime_info;
+}
+
+static void
+on_open_in_easytag (NautilusMenuItem *item,
+                    gpointer data)
+{
+    NautilusFileInfo *dir;
+    GDesktopAppInfo *appinfo;
+
+    dir = g_object_get_data (G_OBJECT (item), "dir");
+
+    appinfo = g_desktop_app_info_new ("easytag.desktop");
+
+    if (appinfo)
+    {
+        GdkAppLaunchContext *context;
+        GList *uris = NULL;
+
+        uris = g_list_append (uris, nautilus_file_info_get_uri (dir));
+        context = gdk_display_get_app_launch_context (gdk_display_get_default ());
+
+        g_app_info_launch_uris (G_APP_INFO (appinfo), uris,
+                                G_APP_LAUNCH_CONTEXT (context), NULL);
+    }
+}
+
+static void
+on_open_with_easytag (NautilusMenuItem *item,
+                      gpointer data)
+{
+    GList *files, *scan;
+    GDesktopAppInfo *appinfo;
+
+    files = g_object_get_data (G_OBJECT (item), "files");
+
+    appinfo = g_desktop_app_info_new ("easytag.desktop");
+
+    if (appinfo)
+    {
+        GdkAppLaunchContext *context;
+        GList *l;
+        GList *uris = NULL;
+
+        for (l = files; l != NULL; l = g_list_next (l))
+        {
+            uris = g_list_append (uris,
+                                  nautilus_file_info_get_uri (l->data));
+        }
+
+        context = gdk_display_get_app_launch_context (gdk_display_get_default ());
+
+        g_app_info_launch_uris (G_APP_INFO (appinfo), uris,
+                                G_APP_LAUNCH_CONTEXT (context), NULL);
+    }
+}
+
+static GList *
+nautilus_easytag_get_file_items (NautilusMenuProvider *provider,
+                                 GtkWidget *window,
+                                 GList *files)
+{
+    GList *items = NULL;
+    GList *l;
+    gboolean one_item;
+    gboolean one_directory = TRUE;
+    gboolean all_files = TRUE;
+
+    if (files == NULL)
+    {
+        return NULL;
+    }
+
+    if (unsupported_scheme ((NautilusFileInfo *)files->data))
+    {
+        return NULL;
+    }
+
+    for (l = files; l != NULL; l = g_list_next (l))
+    {
+        FileMimeInfo file_mime_info;
+        NautilusFileInfo *file = l->data;
+
+        file_mime_info = get_file_mime_info (file);
+
+        if (all_files && !file_mime_info.is_file)
+        {
+            all_files = FALSE;
+        }
+
+        if (one_directory && !file_mime_info.is_directory)
+        {
+            one_directory = FALSE;
+        }
+    }
+
+    one_item = (files != NULL) && (files->next == NULL);
+
+    if (one_directory && one_item)
+    {
+        NautilusMenuItem *item;
+
+        item = nautilus_menu_item_new ("NautilusEasytag::open_directory",
+                                       _("Open in EasyTAG"),
+                                       _("Open the selected directory in EasyTAG"),
+                                       "easytag");
+        g_signal_connect (item,
+                          "activate",
+                          G_CALLBACK (on_open_in_easytag),
+                          provider);
+        g_object_set_data (G_OBJECT (item),
+                           "dir",
+                           files->data);
+
+        items = g_list_append (items, item);
+    }
+    else if (all_files)
+    {
+        NautilusMenuItem *item;
+
+        item = nautilus_menu_item_new ("NautilusEasytag::open_files",
+                                       _("Open with EasyTAG"),
+                                       _("Open the selected files in EasyTAG"),
+                                       "easytag");
+        g_signal_connect (item,
+                          "activate",
+                          G_CALLBACK (on_open_with_easytag),
+                          provider);
+        g_object_set_data_full (G_OBJECT (item),
+                                "files",
+                                nautilus_file_info_list_copy (files),
+                                (GDestroyNotify) nautilus_file_info_list_free);
+
+        items = g_list_append (items, item);
+    }
+
+    return items;
+}
+
+static void
+nautilus_easytag_menu_provider_iface_init (NautilusMenuProviderIface *iface)
+{
+    iface->get_file_items = nautilus_easytag_get_file_items;
+}
+
+G_DEFINE_DYNAMIC_TYPE_EXTENDED (NautilusEasytag,
+                                nautilus_easytag,
+                                G_TYPE_OBJECT,
+                                0,
+                                G_IMPLEMENT_INTERFACE_DYNAMIC (NAUTILUS_TYPE_MENU_PROVIDER,
+                                                               nautilus_easytag_menu_provider_iface_init));
+
+static void
+nautilus_easytag_init (NautilusEasytag *self)
+{
+}
+
+static void
+nautilus_easytag_class_init (NautilusEasytagClass *class)
+{
+    bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
+    bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+}
+
+static void
+nautilus_easytag_class_finalize (NautilusEasytagClass *class)
+{
+}
+
+/* Nautilus extension module. */
+static GType type_list[1];
+
+void
+nautilus_module_initialize (GTypeModule *module)
+{
+    nautilus_easytag_register_type (module);
+
+    type_list[0] = NAUTILUS_TYPE_EASYTAG;
+}
+
+void
+nautilus_module_shutdown (void)
+{
+}
+
+void
+nautilus_module_list_types (const GType **types,
+                            int *num_types)
+{
+    *types = type_list;
+    *num_types = G_N_ELEMENTS (type_list);
+}
diff --git a/po/LINGUAS b/po/LINGUAS
index 2b4fa7d..5043ce6 100644
--- a/po/LINGUAS
+++ b/po/LINGUAS
@@ -15,6 +15,7 @@ it
 ja
 ko
 lt
+nb
 nl
 pl
 pt_BR
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 90110cd..ba1f9ac 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -1,33 +1,53 @@
 data/easytag.appdata.xml.in
 data/easytag.desktop.in
+[type: gettext/glade]data/browser.ui
+[type: gettext/glade]data/cddb_dialog.ui
+[type: gettext/glade]data/file_area.ui
+[type: gettext/glade]data/log_area.ui
+[type: gettext/glade]data/load_files_dialog.ui
+[type: gettext/glade]data/menus.ui
+[type: gettext/glade]data/playlist_dialog.ui
+[type: gettext/glade]data/preferences_dialog.ui
+[type: gettext/glade]data/scan_dialog.ui
+[type: gettext/glade]data/search_dialog.ui
+[type: gettext/glade]data/tag_area.ui
+[type: gettext/glade]data/toolbar.ui
+data/org.gnome.EasyTAG.gschema.xml
+nautilus-extension/nautilus-easytag.c
 src/about.c
-src/ape_tag.c
 src/application.c
-src/bar.c
+src/application_window.c
 src/browser.c
-src/cddb.c
+src/cddb_dialog.c
 src/charset.c
 src/easytag.c
 src/et_core.c
-src/flac_header.c
-src/flac_tag.c
-src/id3_tag.c
-src/id3v24_tag.c
+src/file_area.c
+src/load_files_dialog.c
 src/log.c
 src/misc.c
-src/monkeyaudio_header.c
-src/mp4_header.cc
-src/mp4_tag.cc
-src/mpeg_header.c
-src/musepack_header.c
-src/ogg_header.c
-src/ogg_tag.c
-src/opus_header.c
 src/picture.c
-src/prefs.c
+src/playlist_dialog.c
+src/preferences_dialog.c
 src/scan_dialog.c
+src/search_dialog.c
 src/setting.c
-src/vcedit.c
-src/wavpack_header.c
-src/wavpack_tag.c
+src/status_bar.c
+src/tag_area.c
+src/tags/ape_tag.c
+src/tags/flac_header.c
+src/tags/flac_tag.c
+src/tags/id3_tag.c
+src/tags/id3v24_tag.c
+src/tags/monkeyaudio_header.c
+src/tags/mp4_header.cc
+src/tags/mp4_tag.cc
+src/tags/mpeg_header.c
+src/tags/musepack_header.c
+src/tags/ogg_header.c
+src/tags/ogg_tag.c
+src/tags/opus_header.c
+src/tags/vcedit.c
+src/tags/wavpack_header.c
+src/tags/wavpack_tag.c
 src/win32/win32dep.c
diff --git a/po/cs.po b/po/cs.po
index 4492210..faf2483 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -10,8 +10,8 @@ msgstr ""
 "Project-Id-Version: EasyTAG 2.1.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
 "product=easytag&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2014-04-07 09:21+0000\n"
-"PO-Revision-Date: 2014-04-05 17:15+0200\n"
+"POT-Creation-Date: 2014-06-25 03:13+0000\n"
+"PO-Revision-Date: 2014-06-25 10:55+0200\n"
 "Last-Translator: Marek Černocký <marek at manet.cz>\n"
 "Language-Team: Czech <gnome-cs-list at gnome.org>\n"
 "Language: cs\n"
@@ -53,67 +53,56 @@ msgstr "Editor metadat zvukových souborů"
 
 #: ../data/easytag.desktop.in.h:2
 msgid "Edit sound file metadata"
-msgstr "Upravit metadata zvukového souboru"
+msgstr "Upravujte si metadata zvukových souborů"
 
 #. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
 #: ../data/easytag.desktop.in.h:4
 msgid "mp3;tag;audio;"
 msgstr "mp3;štítek;tag;audio;zvuk;"
 
-#: ../src/about.c:89
-msgid ""
-"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 (at your option) "
-"any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful, but WITHOUT "
-"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
-"FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for "
-"more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License along with "
-"this program. If not, see <http://www.gnu.org/licenses/>."
-msgstr ""
-"Tento program je svobodný software: Můžete jej dále šířit a/nebo upravovat "
-"za podmínek licence GNU General Public License v podobě, v jaké ji vydala "
-"Free Software Foundation, a to buď ve verzi 3 této licence nebo (dle vaší "
-"volby) v libovolné novější verzi.\n"
-"\n"
-"Tento program je šířen ve víře, že bude užitečný, ale BEZ JAKÝCHKOLIV ZÁRUK, "
-"a to i bez předpokládané záruky na PRODEJNOST nebo VHODNOST PRO KONKRÉTNÍ "
-"ÚČEL. Více podrobností najdete přímo v licenci GNU General Public License.\n"
-"\n"
-"Spolu s tímto programem byste měli obdržet kopii licence GNU General Public "
-"License. Pokud se tak nestalo, podívejte se na <http://www.gnu.org/licenses/"
-">."
+#: ../nautilus-extension/nautilus-easytag.c:229
+msgid "Open in EasyTAG"
+msgstr "Otevřít v EasyTAG"
+
+#: ../nautilus-extension/nautilus-easytag.c:230
+msgid "Open the current selected directory in EasyTAG"
+msgstr "Otevřít aktuálně vybranou složku v aplikaci EasyTAG"
+
+#: ../nautilus-extension/nautilus-easytag.c:247
+msgid "Open with EasyTAG"
+msgstr "Otevřít pomocí EasyTAG"
+
+#: ../nautilus-extension/nautilus-easytag.c:248
+msgid "Open selected files in EasyTAG"
+msgstr "Otevřít vybrané soubory v aplikaci EasyTAG"
 
 #. Translators: put your own name here to appear in the about dialog.
-#: ../src/about.c:106
+#: ../src/about.c:89
 msgid "translator-credits"
 msgstr "Marek Černocký <marek at manet.cz>"
 
-#: ../src/about.c:116
+#: ../src/about.c:99
 msgid "View and edit tags in audio files"
 msgstr "Zobrazování a ůpravy štítků ve zvukových souborech"
 
-#. g_print(_("Error while opening file: '%s' (%s)."),filename_utf8,g_strerror(errno));
-#: ../src/ape_tag.c:61 ../src/id3v24_tag.c:112 ../src/mp4_header.c:63
-#: ../src/mp4_tag.c:65 ../src/mp4_tag.c:186
+#: ../src/ape_tag.c:61 ../src/id3v24_tag.c:113 ../src/mp4_header.cc:45
+#: ../src/mp4_header.cc:58 ../src/mp4_tag.cc:69 ../src/mp4_tag.cc:85
+#: ../src/mp4_tag.cc:90 ../src/mp4_tag.cc:262 ../src/mp4_tag.cc:278
+#: ../src/mp4_tag.cc:283
 #, c-format
 msgid "Error while opening file: '%s' (%s)."
 msgstr "Chyba při otevírání souboru: „%s“ (%s)."
 
-#: ../src/application.c:37
+#: ../src/application.c:32
 msgid "Print the version and exit"
 msgstr "Vypsat verzi a skončit"
 
-#: ../src/application.c:89
+#: ../src/application.c:84
 #, c-format
 msgid "Website: %s"
 msgstr "Webové stránky: %s"
 
-#: ../src/application.c:98
+#: ../src/application.c:93
 msgid "- Tag and rename audio files"
 msgstr "– upravovat štítky a názvy zvukových souborů"
 
@@ -368,7 +357,7 @@ msgstr "Poslední soubor"
 msgid "S_can Files"
 msgstr "Prozkoumat _soubory"
 
-#: ../src/bar.c:225 ../src/scan.c:2008
+#: ../src/bar.c:225 ../src/scan_dialog.c:1818
 msgid "Scan selected files"
 msgstr "Prozkoumat vybrané soubory"
 
@@ -432,8 +421,8 @@ msgstr "Zopakovat poslední změny"
 msgid "_Quit"
 msgstr "U_končit"
 
-#: ../src/bar.c:242 ../src/easytag.c:2429 ../src/easytag.c:4565
-#: ../src/easytag.c:4597
+#: ../src/bar.c:242 ../src/easytag.c:2424 ../src/easytag.c:4559
+#: ../src/easytag.c:4591
 msgid "Quit"
 msgstr "Ukončit"
 
@@ -727,7 +716,7 @@ msgstr "Přejmenovat soubory a složky"
 msgid "_Process Fields…"
 msgstr "Z_pracovat pole…"
 
-#: ../src/bar.c:370 ../src/scan.c:182
+#: ../src/bar.c:370 ../src/scan_dialog.c:184
 msgid "Process Fields"
 msgstr "Zpracovat pole"
 
@@ -736,7 +725,7 @@ msgstr "Zpracovat pole"
 msgid "Could not merge UI, error was: %s\n"
 msgstr "Nelze sloučit uživatelské rozhraní, chyba: %s\n"
 
-#: ../src/bar.c:533
+#: ../src/bar.c:535
 msgid "Ready to start"
 msgstr "Připraveno ke spuštění"
 
@@ -744,7 +733,7 @@ msgstr "Připraveno ke spuštění"
 msgid "New default path for files selected"
 msgstr "Vybrána nová výchozí cesta k souborům"
 
-#: ../src/browser.c:678 ../src/easytag.c:4561
+#: ../src/browser.c:678 ../src/easytag.c:4555
 msgid "Some files have been modified but not saved"
 msgstr "Některé soubory byly změněny, ale neuloženy"
 
@@ -756,101 +745,101 @@ msgstr "Chcete je před tím, než se změní složka, uložit?"
 msgid "Confirm Directory Change"
 msgstr "Potvrzení změny složky"
 
-#: ../src/browser.c:2146
+#: ../src/browser.c:2240
 msgid "<All albums>"
 msgstr "<všechna alba>"
 
-#: ../src/browser.c:2607
+#: ../src/browser.c:2703
 #, c-format
 msgid "Error: Searching for %s, could not find node %s in tree."
 msgstr "Chyba: Hledá se %s, nelze najít uzel %s ve stromu."
 
-#: ../src/browser.c:3101 ../src/browser.c:3179
+#: ../src/browser.c:3197 ../src/browser.c:3275
 msgid "Tree"
 msgstr "Strom"
 
-#: ../src/browser.c:3102 ../src/cddb.c:803 ../src/misc.c:1902
+#: ../src/browser.c:3198 ../src/cddb.c:803 ../src/misc.c:1899
 msgid "Filename"
 msgstr "Název souboru"
 
-#: ../src/browser.c:3102 ../src/cddb.c:804 ../src/misc.c:1903
+#: ../src/browser.c:3198 ../src/cddb.c:804 ../src/misc.c:1900
 #: ../src/prefs.c:643
 msgid "Title"
 msgstr "Název"
 
 #. Translators: This option is for the previous 'search in' option. For
 #. * instance, translate this as "Search in:" "Artist".
-#: ../src/browser.c:3103 ../src/browser.c:3110 ../src/cddb.c:483
-#: ../src/cddb.c:805 ../src/misc.c:1904 ../src/prefs.c:644
+#: ../src/browser.c:3199 ../src/browser.c:3206 ../src/cddb.c:483
+#: ../src/cddb.c:805 ../src/misc.c:1901 ../src/prefs.c:644
 msgid "Artist"
 msgstr "Umělec"
 
-#: ../src/browser.c:3103 ../src/misc.c:1905
+#: ../src/browser.c:3199 ../src/misc.c:1902
 msgid "Album Artist"
 msgstr "Umělec alba"
 
 #. Translators: This option is for the previous 'search in' option. For
 #. * instance, translate this as "Search in:" "Album".
-#: ../src/browser.c:3104 ../src/browser.c:3112 ../src/cddb.c:486
-#: ../src/cddb.c:806 ../src/misc.c:1906 ../src/prefs.c:645
+#: ../src/browser.c:3200 ../src/browser.c:3208 ../src/cddb.c:486
+#: ../src/cddb.c:806 ../src/misc.c:1903 ../src/prefs.c:645
 msgid "Album"
 msgstr "Album"
 
-#: ../src/browser.c:3104 ../src/cddb.c:807 ../src/misc.c:1908
+#: ../src/browser.c:3200 ../src/cddb.c:807 ../src/misc.c:1905
 msgid "Year"
 msgstr "Rok"
 
-#: ../src/browser.c:3104
+#: ../src/browser.c:3200
 msgid "Disc"
 msgstr "Disk"
 
-#: ../src/browser.c:3105 ../src/misc.c:1909
+#: ../src/browser.c:3201 ../src/misc.c:1906
 msgid "Track"
 msgstr "Skladba"
 
-#: ../src/browser.c:3105 ../src/cddb.c:810 ../src/misc.c:1910
+#: ../src/browser.c:3201 ../src/cddb.c:810 ../src/misc.c:1907
 #: ../src/prefs.c:646
 msgid "Genre"
 msgstr "Žánr"
 
-#: ../src/browser.c:3106 ../src/misc.c:1911 ../src/prefs.c:647
+#: ../src/browser.c:3202 ../src/misc.c:1908 ../src/prefs.c:647
 msgid "Comment"
 msgstr "Poznámka"
 
-#: ../src/browser.c:3106 ../src/misc.c:1912 ../src/picture.c:1059
+#: ../src/browser.c:3202 ../src/misc.c:1909 ../src/picture.c:884
 #: ../src/prefs.c:648
 msgid "Composer"
 msgstr "Skladatel"
 
-#: ../src/browser.c:3107 ../src/misc.c:1913
+#: ../src/browser.c:3203 ../src/misc.c:1910
 msgid "Original Artist"
 msgstr "Původní umělec"
 
-#: ../src/browser.c:3108 ../src/misc.c:1914
+#: ../src/browser.c:3204 ../src/misc.c:1911
 msgid "Copyright"
 msgstr "Copyright"
 
-#: ../src/browser.c:3108 ../src/misc.c:1915
+#: ../src/browser.c:3204 ../src/misc.c:1912
 msgid "URL"
 msgstr "Adresa URL"
 
-#: ../src/browser.c:3109 ../src/misc.c:1916
+#: ../src/browser.c:3205 ../src/misc.c:1913
 msgid "Encoded By"
 msgstr "Kódováno pomocí"
 
-#: ../src/browser.c:3110
+#: ../src/browser.c:3206
 msgid "# Albums"
 msgstr "Počet alb"
 
-#: ../src/browser.c:3111 ../src/browser.c:3112
+#: ../src/browser.c:3207 ../src/browser.c:3208
 msgid "# Files"
 msgstr "Počet souborů"
 
-#: ../src/browser.c:3137
+#: ../src/browser.c:3233
 msgid "Enter a directory to browse."
 msgstr "Zadejte název složky, kterou chcete procházet."
 
-#: ../src/browser.c:3146
+#: ../src/browser.c:3242
 msgid "Select a directory to browse."
 msgstr "Vybrat složku pro procházení."
 
@@ -858,33 +847,33 @@ msgstr "Vybrat složku pro procházení."
 #. * The label for displaying number of files in path (without subdirs)
 #.
 #. Translators: No files, as in "0 files".
-#: ../src/browser.c:3153 ../src/easytag.c:3468
+#: ../src/browser.c:3249 ../src/easytag.c:3463
 msgid "No files"
 msgstr "žádný soubor"
 
-#: ../src/browser.c:3231
+#: ../src/browser.c:3327
 msgid "Artist & Album"
 msgstr "Umělec a album"
 
 #. Only directories changed
-#: ../src/browser.c:3595 ../src/easytag.c:2880
+#: ../src/browser.c:3692 ../src/easytag.c:2875
 msgid "Rename Directory"
 msgstr "Přejmenování složky"
 
-#: ../src/browser.c:3617
+#: ../src/browser.c:3714
 #, c-format
 msgid "Rename the directory '%s' to:"
 msgstr "Přejmenovat složku „%s“ na:"
 
-#: ../src/browser.c:3636 ../src/misc.c:1171
+#: ../src/browser.c:3733 ../src/misc.c:1168
 msgid "Use mask:"
 msgstr "Použít masku:"
 
-#: ../src/browser.c:3639
+#: ../src/browser.c:3736
 msgid "If activated, it will use masks to rename directory."
 msgstr "Pokud je zapnuto, použijí se k přejmenování složky masky."
 
-#: ../src/browser.c:3657
+#: ../src/browser.c:3754
 msgid ""
 "Select or type in a mask using codes (see Legend in Scanner Window) to "
 "rename the directory from tag fields."
@@ -893,64 +882,64 @@ msgstr ""
 "použitím polí štítků."
 
 #. Preview label
-#: ../src/browser.c:3681
+#: ../src/browser.c:3778
 msgid "Rename directory preview"
 msgstr "Náhled přejmenování složky"
 
-#: ../src/browser.c:3773
+#: ../src/browser.c:3870
 msgid "You must type a directory name"
 msgstr "Musíte vyplnit název složky"
 
-#: ../src/browser.c:3774 ../src/browser.c:3795
+#: ../src/browser.c:3871 ../src/browser.c:3892
 msgid "Directory Name Error"
 msgstr "Chyba v názvu složky"
 
-#: ../src/browser.c:3792
+#: ../src/browser.c:3889
 #, c-format
 msgid "Could not convert '%s' into filename encoding."
 msgstr "Nelze převést „%s“ do kódování názvů souborů"
 
-#: ../src/browser.c:3794
+#: ../src/browser.c:3891
 msgid "Please use another name"
 msgstr "Použijte prosím jiný název"
 
-#: ../src/browser.c:3864
+#: ../src/browser.c:3961
 #, c-format
 msgid "The directory name '%s' already exists"
 msgstr "Složka s názvem „%s“ již existuje"
 
-#: ../src/browser.c:3865 ../src/easytag.c:2963
+#: ../src/browser.c:3962 ../src/easytag.c:2958
 msgid "Rename File Error"
 msgstr "Chyba při přejmenování souboru"
 
-#: ../src/browser.c:3903 ../src/browser.c:3932
+#: ../src/browser.c:4000 ../src/browser.c:4029
 msgid "Rename Directory Error"
 msgstr "Chyba při přejmenování složky"
 
-#: ../src/browser.c:3970
+#: ../src/browser.c:4067
 msgid "Directory renamed"
 msgstr "Složka přejmenována"
 
-#: ../src/browser.c:4006
+#: ../src/browser.c:4103
 msgid "Browse Directory With"
 msgstr "Procházet složku pomocí"
 
-#: ../src/browser.c:4022 ../src/browser.c:4148
+#: ../src/browser.c:4119 ../src/browser.c:4245
 msgid "Program to run:"
 msgstr "Program, který se má spustit:"
 
-#: ../src/browser.c:4034
+#: ../src/browser.c:4131
 msgid ""
 "Enter the program to run. It will receive the current directory as parameter."
 msgstr ""
 "Napište název programu, který se má spustit. Tomuto programu se předá "
 "aktuální složka jako parametr."
 
-#: ../src/browser.c:4128
+#: ../src/browser.c:4225
 msgid "Open Files With"
 msgstr "Otevřít soubory pomocí"
 
-#: ../src/browser.c:4160
+#: ../src/browser.c:4257
 msgid ""
 "Enter the program to run. It will receive the current file as parameter."
 msgstr ""
@@ -1046,7 +1035,7 @@ msgstr "VÅ¡echna pole"
 
 #. Translators: This option is for the previous 'search in' option. For
 #. * instance, translate this as "Search in:" "Other".
-#: ../src/cddb.c:492 ../src/picture.c:1037 ../src/prefs.c:807
+#: ../src/cddb.c:492 ../src/picture.c:862 ../src/prefs.c:807
 msgid "Other"
 msgstr "Další"
 
@@ -1140,7 +1129,7 @@ msgstr "Kategorie"
 msgid "Results:"
 msgstr "Výsledky:"
 
-#: ../src/cddb.c:606 ../src/misc.c:1950
+#: ../src/cddb.c:606 ../src/misc.c:1947
 msgid "Search:"
 msgstr "Hledat:"
 
@@ -1204,7 +1193,7 @@ msgid "# Tracks"
 msgstr "Počet skladeb"
 
 #. Check box to run the scanner
-#: ../src/cddb.c:847 ../src/misc.c:2991
+#: ../src/cddb.c:847 ../src/misc.c:2988
 msgid "Run the current scanner for each file"
 msgstr "Spustí aktuálního průzkumníka pro každý soubor"
 
@@ -1634,47 +1623,47 @@ msgid "The string '%s' couldn't be converted into UTF-8 (%s)."
 msgstr "Řetězec „%s“ nelze převést do UTF-8 (%s)."
 
 #. Starting messages
-#: ../src/easytag.c:184
+#: ../src/easytag.c:185
 #, c-format
 msgid "Starting EasyTAG version %s (PID: %d)…"
 msgstr "Spouští se EasyTAG verze %s (ID procesu: %d)…"
 
-#: ../src/easytag.c:186
+#: ../src/easytag.c:187
 #, c-format
 msgid "Using libid3tag version %s"
 msgstr "Používá se knihovna libid3tag ve verzi %s"
 
-#: ../src/easytag.c:189
+#: ../src/easytag.c:190
 #, c-format
 msgid "Using id3lib version %d.%d.%d"
 msgstr "Používá se knihovna id3lib ve verzi %d.%d.%d"
 
-#: ../src/easytag.c:195
+#: ../src/easytag.c:196
 #, c-format
 msgid "Variable EASYTAGLANG defined. Setting locale: '%s'"
 msgstr ""
 "Je definována proměnná EASYTAGLANG. Nastavuje se národn prostředí: „%s“"
 
-#: ../src/easytag.c:197
+#: ../src/easytag.c:198
 #, c-format
 msgid "Setting locale: '%s'"
 msgstr "Nastavuje se národní prostředí: „%s“"
 
-#: ../src/easytag.c:202
+#: ../src/easytag.c:203
 #, c-format
 msgid "Currently using locale '%s' (and eventually '%s')"
 msgstr "Momentálně se používá národní prostředí „%s“ (a případně „%s“)"
 
-#: ../src/easytag.c:209
+#: ../src/easytag.c:210
 msgid "Unable to create setting directories"
 msgstr "Nelze vytvořit složky s nastavením"
 
-#: ../src/easytag.c:426 ../src/et_core.c:597 ../src/et_core.c:609
+#: ../src/easytag.c:427 ../src/et_core.c:638 ../src/et_core.c:650
 #, c-format
 msgid "Error while querying information for file: '%s' (%s)"
 msgstr "Chyba při dotazování na informace o souboru: „%s“ (%s)"
 
-#: ../src/easytag.c:489
+#: ../src/easytag.c:490
 #, c-format
 msgid "Cannot open path '%s'"
 msgstr "Nelze otevřít cestu „%s“"
@@ -1682,11 +1671,11 @@ msgstr "Nelze otevřít cestu „%s“"
 #.
 #. * Browser
 #.
-#: ../src/easytag.c:581 ../src/prefs.c:142
+#: ../src/easytag.c:583 ../src/prefs.c:142
 msgid "Browser"
 msgstr "Prohlížeč"
 
-#: ../src/easytag.c:603 ../src/et_core.c:2817
+#: ../src/easytag.c:605 ../src/et_core.c:2869
 msgid "File"
 msgstr "Soubor"
 
@@ -1696,113 +1685,113 @@ msgstr "Soubor"
 #. gtk_label_set_text(GTK_LABEL(VersionValueLabel),"");
 #. Version changed to encoder version
 #. Encoder version
-#: ../src/easytag.c:635 ../src/easytag.c:4231 ../src/flac_header.c:201
+#: ../src/easytag.c:637 ../src/easytag.c:4226 ../src/flac_header.c:201
 #: ../src/monkeyaudio_header.c:96 ../src/musepack_header.c:98
 #: ../src/ogg_header.c:389 ../src/opus_header.c:221 ../src/wavpack_header.c:72
 #, c-format
 msgid "Encoder:"
 msgstr "Kodér:"
 
-#: ../src/easytag.c:643
+#: ../src/easytag.c:645
 msgid "Bitrate:"
 msgstr "Datový tok:"
 
 #. Translators: Please try to keep this string as short as possible as it
 #. * is shown in a narrow column.
-#: ../src/easytag.c:653
+#: ../src/easytag.c:655
 msgid "Frequency:"
 msgstr "Vzorkování:"
 
 #. Mode
-#: ../src/easytag.c:664 ../src/easytag.c:4235 ../src/mpeg_header.c:216
+#: ../src/easytag.c:666 ../src/easytag.c:4230 ../src/mpeg_header.c:216
 msgid "Mode:"
 msgstr "Režim:"
 
-#: ../src/easytag.c:671
+#: ../src/easytag.c:673
 msgid "Size:"
 msgstr "Velikost:"
 
-#: ../src/easytag.c:678
+#: ../src/easytag.c:680
 msgid "Duration:"
 msgstr "Délka:"
 
 #. Main Frame
-#: ../src/easytag.c:725 ../src/et_core.c:2747
+#: ../src/easytag.c:726 ../src/et_core.c:2799
 msgid "Tag"
 msgstr "Štítek"
 
 #.
 #. * 1 - Page for common tag fields
 #.
-#: ../src/easytag.c:747
+#: ../src/easytag.c:748
 msgid "Common"
 msgstr "Obecné"
 
 #. Title
-#: ../src/easytag.c:754
+#: ../src/easytag.c:755
 msgid "Title:"
 msgstr "Název:"
 
-#: ../src/easytag.c:768
+#: ../src/easytag.c:769
 msgid "Tag selected files with this title"
 msgstr "Nastavit vybraným souborům tento název"
 
 #. Artist
-#: ../src/easytag.c:773
+#: ../src/easytag.c:774
 msgid "Artist:"
 msgstr "Umělec:"
 
-#: ../src/easytag.c:787
+#: ../src/easytag.c:788
 msgid "Tag selected files with this artist"
 msgstr "Nastavit vybraným souborům tohoto umělce"
 
 #. Album Artist
-#: ../src/easytag.c:792
+#: ../src/easytag.c:793
 msgid "Album artist:"
 msgstr "Umělec alba:"
 
-#: ../src/easytag.c:806
+#: ../src/easytag.c:807
 msgid "Tag selected files with this album artist"
 msgstr "Nastavit vybraným souborům tohoto umělce alba"
 
 #. Album
-#: ../src/easytag.c:811
+#: ../src/easytag.c:812
 msgid "Album:"
 msgstr "Album:"
 
-#: ../src/easytag.c:825
+#: ../src/easytag.c:826
 msgid "Tag selected files with this album name"
 msgstr "Nastavit vybraným souborům tento název alba"
 
 #. Disc Number
-#: ../src/easytag.c:830
+#: ../src/easytag.c:831
 msgid "CD:"
 msgstr "CD:"
 
-#: ../src/easytag.c:847
+#: ../src/easytag.c:848
 msgid "Tag selected files with this disc number"
 msgstr "Nastavit vybraným souborům toto číslo disku"
 
 #. Year
-#: ../src/easytag.c:852
+#: ../src/easytag.c:853
 msgid "Year:"
 msgstr "Rok:"
 
-#: ../src/easytag.c:872
+#: ../src/easytag.c:873
 msgid "Tag selected files with this year"
 msgstr "Nastavit vybraným souborům tento rok"
 
-#: ../src/easytag.c:886
+#: ../src/easytag.c:887
 msgid "Number selected tracks sequentially. Starts at 01 in each subdirectory."
 msgstr "Očíslovat sekvenčně vybrané skladby. Začíná se od 01 v každé složce."
 
 #. To have enough space to display the icon
 #. To have enough space to display the icon
-#: ../src/easytag.c:895
+#: ../src/easytag.c:896
 msgid "Track #:"
 msgstr "Skladba č.:"
 
-#: ../src/easytag.c:926
+#: ../src/easytag.c:927
 msgid ""
 "Set the number of files, in the same directory of the displayed file, to the "
 "selected tracks."
@@ -1810,79 +1799,79 @@ msgstr ""
 "Nastavit počet souborů ve stejné složce, jako je zobrazený soubor, do pole s "
 "počtem skladeb."
 
-#: ../src/easytag.c:946
+#: ../src/easytag.c:947
 msgid "Tag selected files with this number of tracks"
 msgstr "Nastavit vybraným souborům tento počet skladeb"
 
 #. Genre
-#: ../src/easytag.c:950
+#: ../src/easytag.c:951
 msgid "Genre:"
 msgstr "Žánr:"
 
-#: ../src/easytag.c:978
+#: ../src/easytag.c:979
 msgid "Tag selected files with this genre"
 msgstr "Nastavit vybraným souborům tento žánr"
 
 #. Comment
-#: ../src/easytag.c:983
+#: ../src/easytag.c:984
 msgid "Comment:"
 msgstr "Poznámka:"
 
-#: ../src/easytag.c:1010
+#: ../src/easytag.c:1011
 msgid "Tag selected files with this comment"
 msgstr "Nastavit vybraným souborům tuto poznámku"
 
 #. Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(CommentView));
 #. Composer (name of the composers)
-#: ../src/easytag.c:1017
+#: ../src/easytag.c:1018
 msgid "Composer:"
 msgstr "Skladatel:"
 
-#: ../src/easytag.c:1031
+#: ../src/easytag.c:1032
 msgid "Tag selected files with this composer"
 msgstr "Nastavit vybraným souborům tohoto skladatele"
 
 #. Translators: Original Artist / Performer. Please try to keep this string
 #. * as short as possible, as it must fit into a narrow column.
-#: ../src/easytag.c:1038
+#: ../src/easytag.c:1039
 msgid "Orig. artist:"
 msgstr "Původní umělec:"
 
-#: ../src/easytag.c:1052
+#: ../src/easytag.c:1053
 msgid "Tag selected files with this original artist"
 msgstr "Nastavit vybraným souborům tohoto původního umělce"
 
 #. Copyright
-#: ../src/easytag.c:1058
+#: ../src/easytag.c:1059
 msgid "Copyright:"
 msgstr "Copyright:"
 
-#: ../src/easytag.c:1072
+#: ../src/easytag.c:1073
 msgid "Tag selected files with this copyright"
 msgstr "Nastavit vybraným souborům tento copyright"
 
 #. URL
-#: ../src/easytag.c:1078
+#: ../src/easytag.c:1079
 msgid "URL:"
 msgstr "Adresa URL:"
 
-#: ../src/easytag.c:1092
+#: ../src/easytag.c:1093
 msgid "Tag selected files with this URL"
 msgstr "Nastavit vybraným souborům tuto adresu URL"
 
 #. Encoded by
-#: ../src/easytag.c:1098
+#: ../src/easytag.c:1099
 msgid "Encoded by:"
 msgstr "Kódováno pomocí:"
 
-#: ../src/easytag.c:1112
+#: ../src/easytag.c:1113
 msgid "Tag selected files with this encoder name"
 msgstr "Nastavit vybraným souborům tento název kodéru"
 
 #.
 #. * 2 - Page for extra tag fields
 #.
-#: ../src/easytag.c:1146 ../src/et_core.c:3189 ../src/et_core.c:3192
+#: ../src/easytag.c:1146 ../src/et_core.c:3241 ../src/et_core.c:3244
 msgid "Images"
 msgstr "Obrázky"
 
@@ -1890,189 +1879,189 @@ msgstr "Obrázky"
 msgid "You can use drag and drop to add an image"
 msgstr "Pro přidání obrázku můžete použít postup „táhni a upusť“"
 
-#: ../src/easytag.c:1217
+#: ../src/easytag.c:1219
 msgid "Add images to the tag"
 msgstr "Přidat obrázky do štítku"
 
-#: ../src/easytag.c:1235
+#: ../src/easytag.c:1237
 msgid "Remove selected images from the tag"
 msgstr "Odstranit vybrané obrázky ze štítku"
 
-#: ../src/easytag.c:1249
+#: ../src/easytag.c:1248
 msgid "Save the selected images to files"
 msgstr "Uložit vybrané obrázky do souborů"
 
-#: ../src/easytag.c:1260
+#: ../src/easytag.c:1259
 msgid "Edit image properties"
 msgstr "Upravit vlastnosti obrázku"
 
-#: ../src/easytag.c:1274
+#: ../src/easytag.c:1270
 msgid "Tag selected files with these images"
 msgstr "Nastavit vybraným souborům tyto obrázky"
 
-#: ../src/easytag.c:1332
+#: ../src/easytag.c:1328
 #, c-format
 msgid "Selected files tagged with title '%s'."
 msgstr "U vybraných souborů byl nastaven název na „%s“."
 
-#: ../src/easytag.c:1334
+#: ../src/easytag.c:1330
 msgid "Removed title from selected files."
 msgstr "Z vybraných souborů byl vymazán název."
 
-#: ../src/easytag.c:1349
+#: ../src/easytag.c:1345
 #, c-format
 msgid "Selected files tagged with artist '%s'."
 msgstr "U vybraných souborů byl nastaven umělec na „%s“."
 
-#: ../src/easytag.c:1351
+#: ../src/easytag.c:1347
 msgid "Removed artist from selected files."
 msgstr "Z vybraných souborů byl vymazán umělec."
 
-#: ../src/easytag.c:1365
+#: ../src/easytag.c:1361
 #, c-format
 msgid "Selected files tagged with album artist '%s'."
 msgstr "U vybraných souborů byl nastaven umělec alba na „%s“."
 
-#: ../src/easytag.c:1367
+#: ../src/easytag.c:1363
 msgid "Removed album artist from selected files."
 msgstr "Z vybraných souborů byl vymazán umělec alba."
 
-#: ../src/easytag.c:1382
+#: ../src/easytag.c:1378
 #, c-format
 msgid "Selected files tagged with album '%s'."
 msgstr "U vybraných souborů bylo nastaveno album na „%s“."
 
-#: ../src/easytag.c:1384
+#: ../src/easytag.c:1380
 msgid "Removed album name from selected files."
 msgstr "Z vybraných souborů bylo vymazáno album."
 
-#: ../src/easytag.c:1421
+#: ../src/easytag.c:1417
 #, c-format
 msgid "Selected files tagged with disc number '%s/%s'."
 msgstr "U vybraných souborů bylo nastaveno číslo disku na „%s/%s“."
 
-#: ../src/easytag.c:1426
+#: ../src/easytag.c:1422
 #, c-format
 msgid "Selected files tagged with disc number like 'xx'."
 msgstr "U vybraných souborů bylo nastaveno číslo disku ve stylu „xx“."
 
-#: ../src/easytag.c:1431
+#: ../src/easytag.c:1427
 msgid "Removed disc number from selected files."
 msgstr "Z vybraných souborů bylo vymazáno číslo disku."
 
-#: ../src/easytag.c:1447
+#: ../src/easytag.c:1443
 #, c-format
 msgid "Selected files tagged with year '%s'."
 msgstr "U vybraných souborů byl nastaven rok na „%s“."
 
-#: ../src/easytag.c:1449
+#: ../src/easytag.c:1445
 msgid "Removed year from selected files."
 msgstr "Z vybraných souborů byl vymazán rok."
 
-#: ../src/easytag.c:1475 ../src/easytag.c:1566
+#: ../src/easytag.c:1471 ../src/easytag.c:1561
 #, c-format
 msgid "Selected files tagged with track like 'xx/%s'."
 msgstr "U vybraných souborů bylo nastaveno pořadí v podobě „xx/%s“."
 
-#: ../src/easytag.c:1478
+#: ../src/easytag.c:1474
 #, c-format
 msgid "Selected files tagged with track like 'xx'."
 msgstr "U vybraných souborů bylo nastaveno pořadí v podobě „xx“."
 
-#: ../src/easytag.c:1482 ../src/easytag.c:1569
+#: ../src/easytag.c:1478 ../src/easytag.c:1564
 msgid "Removed track number from selected files."
 msgstr "Z vybraných souborů bylo vymazáno číslo skladby."
 
 #. msg = g_strdup_printf(_("All %d tracks numbered sequentially."), ETCore->ETFileSelectionList_Length);
-#: ../src/easytag.c:1539
+#: ../src/easytag.c:1534
 #, c-format
 msgid "Selected tracks numbered sequentially."
 msgstr "Vybrané skladby byly sekvenčně očíslovány."
 
-#: ../src/easytag.c:1585
+#: ../src/easytag.c:1580
 #, c-format
 msgid "Selected files tagged with genre '%s'."
 msgstr "U vybraných souborů byl ve štítku nastaven žánr na „%s“."
 
-#: ../src/easytag.c:1587
+#: ../src/easytag.c:1582
 msgid "Removed genre from selected files."
 msgstr "Z vybraných souborů byl vymazán žánr."
 
-#: ../src/easytag.c:1609
+#: ../src/easytag.c:1604
 #, c-format
 msgid "Selected files tagged with comment '%s'."
 msgstr "U vybraných souborů byla nastavena poznámka na „%s“."
 
-#: ../src/easytag.c:1611
+#: ../src/easytag.c:1606
 msgid "Removed comment from selected files."
 msgstr "Z vybraných souborů byla vymazána poznámka."
 
-#: ../src/easytag.c:1625
+#: ../src/easytag.c:1620
 #, c-format
 msgid "Selected files tagged with composer '%s'."
 msgstr "U vybraných souborů byl nastaven skladatel na „%s“."
 
-#: ../src/easytag.c:1627
+#: ../src/easytag.c:1622
 msgid "Removed composer from selected files."
 msgstr "Z vybraných souborů byl vymazán skladatel."
 
-#: ../src/easytag.c:1642
+#: ../src/easytag.c:1637
 #, c-format
 msgid "Selected files tagged with original artist '%s'."
 msgstr "U vybraných souborů byl nastaven původní umělec na „%s“."
 
-#: ../src/easytag.c:1644
+#: ../src/easytag.c:1639
 msgid "Removed original artist from selected files."
 msgstr "Z vybraných souborů byl vymazán původní umělec."
 
-#: ../src/easytag.c:1659
+#: ../src/easytag.c:1654
 #, c-format
 msgid "Selected files tagged with copyright '%s'."
 msgstr "U vybraných souborů byl nastaven copyright na „%s“."
 
-#: ../src/easytag.c:1661
+#: ../src/easytag.c:1656
 msgid "Removed copyright from selected files."
 msgstr "Z vybraných souborů byl vymazán copyright."
 
-#: ../src/easytag.c:1676
+#: ../src/easytag.c:1671
 #, c-format
 msgid "Selected files tagged with URL '%s'."
 msgstr "U vybraných souborů byla nastaven adresa URL na „%s“."
 
-#: ../src/easytag.c:1678
+#: ../src/easytag.c:1673
 msgid "Removed URL from selected files."
 msgstr "Z vybraných souborů byla vymazána adresa URL."
 
-#: ../src/easytag.c:1693
+#: ../src/easytag.c:1688
 #, c-format
 msgid "Selected files tagged with encoder name '%s'."
 msgstr "U vybraných souborů byl nastaven název kodéru na „%s“."
 
-#: ../src/easytag.c:1695
+#: ../src/easytag.c:1690
 msgid "Removed encoder name from selected files."
 msgstr "Z vybraných souborů byl vymazán název kodéru."
 
-#: ../src/easytag.c:1727
+#: ../src/easytag.c:1722
 msgid "Selected files tagged with images."
 msgstr "U vybraných souborů byly nastaveny obrázky."
 
-#: ../src/easytag.c:1729
+#: ../src/easytag.c:1724
 msgid "Removed images from selected files."
 msgstr "Z vybraných souborů byly vymazány obrázky."
 
-#: ../src/easytag.c:2010
+#: ../src/easytag.c:2005
 msgid "Select Mode and Mask, and redo the same action"
 msgstr "Vyberte režim a masku a zopakujte stejnou akci"
 
-#: ../src/easytag.c:2062
+#: ../src/easytag.c:2057
 msgid "All tags have been scanned"
 msgstr "Všechny štítky byly prozkoumány"
 
-#: ../src/easytag.c:2118
+#: ../src/easytag.c:2113
 msgid "All tags have been removed"
 msgstr "Všechny štítky byly odmazány"
 
-#: ../src/easytag.c:2423
+#: ../src/easytag.c:2418
 #, c-format
 msgid "A file was changed by an external program"
 msgid_plural "%d files were changed by an external program."
@@ -2080,153 +2069,153 @@ msgstr[0] "Soubor byl změněn externím programem."
 msgstr[1] "%d soubory byly změněny externím programem."
 msgstr[2] "%d souborů bylo změněno externím programem."
 
-#: ../src/easytag.c:2428
+#: ../src/easytag.c:2423
 msgid "Do you want to continue saving the file?"
 msgstr "Chcete pokračovat v ukládání souboru?"
 
-#: ../src/easytag.c:2486 ../src/easytag.c:2506
+#: ../src/easytag.c:2481 ../src/easytag.c:2501
 msgid "Saving files was stopped"
 msgstr "Ukládání souborů bylo zastaveno"
 
-#: ../src/easytag.c:2508
+#: ../src/easytag.c:2503
 msgid "All files have been saved"
 msgstr "Všechny soubory byly uloženy"
 
-#: ../src/easytag.c:2643
+#: ../src/easytag.c:2638
 #, c-format
 msgid "Cannot delete file (%s)"
 msgstr "Nelze smazat soubor (%s)"
 
-#: ../src/easytag.c:2664
+#: ../src/easytag.c:2659
 msgid "Files have been partially deleted"
 msgstr "Byly smazány jen některé soubory"
 
-#: ../src/easytag.c:2666
+#: ../src/easytag.c:2661
 msgid "All files have been deleted"
 msgstr "Všechny soubory byly smazány"
 
-#: ../src/easytag.c:2782
+#: ../src/easytag.c:2777
 #, c-format
 msgid "Do you want to write the tag of file '%s'?"
 msgstr "Chcete zapsat štítek do souboru „%s“ ?"
 
-#: ../src/easytag.c:2784
+#: ../src/easytag.c:2779
 msgid "Confirm Tag Writing"
 msgstr "Potvrzení zápisu štítku"
 
-#: ../src/easytag.c:2789 ../src/easytag.c:2909 ../src/easytag.c:3172
+#: ../src/easytag.c:2784 ../src/easytag.c:2904 ../src/easytag.c:3167
 msgid "Repeat action for the remaining files"
 msgstr "Opakovat akci pro zbytek souborů"
 
 #. Directories and filename changed
-#: ../src/easytag.c:2873 ../src/scan.c:181
+#: ../src/easytag.c:2868 ../src/scan_dialog.c:183
 msgid "Rename File and Directory"
 msgstr "Přejmenovat soubor a složku"
 
-#: ../src/easytag.c:2874
+#: ../src/easytag.c:2869
 msgid "File and directory rename confirmation required"
 msgstr "Je požadováno schválení přejmenování souboru a složky"
 
-#: ../src/easytag.c:2875
+#: ../src/easytag.c:2870
 #, c-format
 msgid "Do you want to rename the file and directory '%s' to '%s'?"
 msgstr "Chcete přejmenovat soubor a složku „%s“ na „%s“?"
 
-#: ../src/easytag.c:2881
+#: ../src/easytag.c:2876
 msgid "Directory rename confirmation required"
 msgstr "Je požadováno schválení přejmenování složky"
 
-#: ../src/easytag.c:2882
+#: ../src/easytag.c:2877
 #, c-format
 msgid "Do you want to rename the directory '%s' to '%s'?"
 msgstr "Chcete přejmenovat složku „%s“ na „%s“?"
 
 #. Only filename changed
-#: ../src/easytag.c:2888
+#: ../src/easytag.c:2883
 msgid "Rename File"
 msgstr "Přejmenování souboru"
 
-#: ../src/easytag.c:2889
+#: ../src/easytag.c:2884
 msgid "File rename confirmation required"
 msgstr "Je požadováno schválení přejmenování souboru"
 
-#: ../src/easytag.c:2890
+#: ../src/easytag.c:2885
 #, c-format
 msgid "Do you want to rename the file '%s' to '%s'?"
 msgstr "Chcete přejmenovat soubor „%s“ na „%s“?"
 
-#: ../src/easytag.c:2956
+#: ../src/easytag.c:2951
 #, c-format
 msgid "Cannot rename file '%s' to '%s'"
 msgstr "Nelze přejmenovat soubor „%s“ na „%s“"
 
-#: ../src/easytag.c:2970
+#: ../src/easytag.c:2965
 #, c-format
 msgid "Cannot rename file '%s' to '%s': %s"
 msgstr "Nelze přejmenovat soubor „%s“ na „%s“: %s"
 
-#: ../src/easytag.c:2974
+#: ../src/easytag.c:2969
 msgid "File(s) not renamed"
 msgstr "Soubor či soubory nebyly přejmenovány"
 
-#: ../src/easytag.c:3086
+#: ../src/easytag.c:3081
 #, c-format
 msgid "Writing tag of '%s'"
 msgstr "Zapisuje se štítek do „%s“"
 
-#: ../src/easytag.c:3093
+#: ../src/easytag.c:3088
 msgid "Tag(s) written"
 msgstr "Štítek zapsán"
 
-#: ../src/easytag.c:3108
+#: ../src/easytag.c:3103
 #, c-format
 msgid "Cannot write tag in file '%s' (%s)"
 msgstr "Nelze zapsat štítek do souboru „%s“ (%s)"
 
-#: ../src/easytag.c:3121
+#: ../src/easytag.c:3116
 #, c-format
 msgid "Cannot write tag in file '%s'"
 msgstr "Nelze zapsat štítek do souboru „%s“"
 
-#: ../src/easytag.c:3124
+#: ../src/easytag.c:3119
 msgid "Tag Write Error"
 msgstr "Chyba při zápisu štítku"
 
-#: ../src/easytag.c:3169 ../src/easytag.c:3183
+#: ../src/easytag.c:3164 ../src/easytag.c:3178
 #, c-format
 msgid "Do you really want to delete the file '%s'?"
 msgstr "Opravdu chcete smazat soubor „%s“?"
 
-#: ../src/easytag.c:3175 ../src/easytag.c:3185
+#: ../src/easytag.c:3170 ../src/easytag.c:3180
 msgid "Delete File"
 msgstr "Vymazání souboru"
 
-#: ../src/easytag.c:3210
+#: ../src/easytag.c:3205
 #, c-format
 msgid "File '%s' deleted"
 msgstr "Soubor „%s“ byl vymazán"
 
-#: ../src/easytag.c:3345
+#: ../src/easytag.c:3340
 #, c-format
 msgid "Cannot read directory '%s'"
 msgstr "Nelze číst složku „%s“"
 
-#: ../src/easytag.c:3349
+#: ../src/easytag.c:3344
 msgid "Directory Read Error"
 msgstr "Chyba při čtení složky"
 
 #. Read the directory recursively
-#: ../src/easytag.c:3370
+#: ../src/easytag.c:3365
 #, c-format
 msgid "Search in progress…"
 msgstr "Probíhá hledání…"
 
-#: ../src/easytag.c:3393 ../src/et_core.c:2824
+#: ../src/easytag.c:3388 ../src/et_core.c:2876
 #, c-format
 msgid "File: '%s'"
 msgstr "Soubor: „%s“"
 
-#: ../src/easytag.c:3443
+#: ../src/easytag.c:3438
 #, c-format
 msgid "Found one file in this directory and subdirectories"
 msgid_plural "Found %d files in this directory and subdirectories"
@@ -2234,7 +2223,7 @@ msgstr[0] "Nalezen jeden soubor v této složce a jejích podsložkách"
 msgstr[1] "Nalezeny %d soubory v této složce a jejích podsložkách"
 msgstr[2] "Nalezeno %d souborů v této složce a jejích podsložkách"
 
-#: ../src/easytag.c:3450
+#: ../src/easytag.c:3445
 #, c-format
 msgid "Found one file in this directory"
 msgid_plural "Found %d files in this directory"
@@ -2242,191 +2231,191 @@ msgstr[0] "Nalezen jeden soubor v této složce"
 msgstr[1] "Nalezeny %d soubory v této složce"
 msgstr[2] "Nalezeno %d souborů v této složce"
 
-#: ../src/easytag.c:3472
+#: ../src/easytag.c:3467
 msgid "No file found in this directory and subdirectories"
 msgstr "V této složce ani jejích podsložkách nebyl nalezen žádný soubor"
 
-#: ../src/easytag.c:3474
+#: ../src/easytag.c:3469
 msgid "No file found in this directory"
 msgstr "V této složce nebyl nalezen žádný soubor"
 
-#: ../src/easytag.c:3542
+#: ../src/easytag.c:3537
 #, c-format
 msgid "Error opening directory '%s' (%s)"
 msgstr "Chyba otevírání složky „%s“ (%s)"
 
-#: ../src/easytag.c:3578
+#: ../src/easytag.c:3573
 #, c-format
 msgid "Cannot read directory (%s)"
 msgstr "Nelze číst složku (%s)"
 
-#: ../src/easytag.c:3598
+#: ../src/easytag.c:3593
 msgid "Searching for audio files…"
 msgstr "Vyhledávají se zvukové soubory…"
 
-#: ../src/easytag.c:3599
+#: ../src/easytag.c:3594
 msgid "Searching"
 msgstr "Hledání"
 
-#: ../src/easytag.c:4265
+#: ../src/easytag.c:4260
 msgid "Select a directory to browse"
 msgstr "Vyberte složku, kterou chcete procházet"
 
 #. Menu items
-#: ../src/easytag.c:4412
+#: ../src/easytag.c:4406
 msgid "Tag selected files with this field"
 msgstr "Nastavit vybraným souborům toto pole"
 
-#: ../src/easytag.c:4424 ../src/scan.c:2318
+#: ../src/easytag.c:4418 ../src/scan_dialog.c:2128
 msgid "Convert '_' and '%20' to spaces"
 msgstr "Převést „_“ a „%20“ na mezery"
 
-#: ../src/easytag.c:4431 ../src/scan.c:2320
+#: ../src/easytag.c:4425 ../src/scan_dialog.c:2130
 msgid "Convert ' ' to '_'"
 msgstr "Převést „ “ na „_“"
 
-#: ../src/easytag.c:4442
+#: ../src/easytag.c:4436
 msgid "All uppercase"
 msgstr "Vše velkými písmeny"
 
-#: ../src/easytag.c:4449
+#: ../src/easytag.c:4443
 msgid "All lowercase"
 msgstr "Vše malými písmeny"
 
-#: ../src/easytag.c:4456
+#: ../src/easytag.c:4450
 msgid "First letter uppercase"
 msgstr "První písmeno velké"
 
-#: ../src/easytag.c:4463
+#: ../src/easytag.c:4457
 msgid "First letter uppercase of each word"
 msgstr "První písmeno každého slova velké"
 
-#: ../src/easytag.c:4474 ../src/prefs.c:1023 ../src/scan.c:2418
+#: ../src/easytag.c:4468 ../src/prefs.c:1023 ../src/scan_dialog.c:2254
 msgid "Remove spaces"
 msgstr "Odstranit mezery"
 
-#: ../src/easytag.c:4481
+#: ../src/easytag.c:4475
 msgid "Insert space before uppercase letter"
 msgstr "Vložit mezeru před velká písmena"
 
-#: ../src/easytag.c:4488
+#: ../src/easytag.c:4482
 msgid "Remove duplicate spaces or underscores"
 msgstr "Odstranit zdvojené mezery nebo podtržítka"
 
-#: ../src/easytag.c:4495
+#: ../src/easytag.c:4489
 msgid "Remove all text"
 msgstr "Odstranit všechen text"
 
-#: ../src/easytag.c:4514
+#: ../src/easytag.c:4508
 msgid "EasyTAG: Normal exit."
 msgstr "EasyTAG: Standardní ukončení"
 
-#: ../src/easytag.c:4566
+#: ../src/easytag.c:4560
 msgid "Do you want to save them before quitting?"
 msgstr "Chcete je uložit, než skončíte?"
 
-#: ../src/easytag.c:4593
+#: ../src/easytag.c:4587
 msgid "Do you really want to quit?"
 msgstr "Opravdu chcete skončit?"
 
-#: ../src/et_core.c:510
+#: ../src/et_core.c:551
 #, c-format
 msgid "Error reading tag from ogg file (%s)"
 msgstr "Chyba při čtení štítku ze souboru ogg (%s)"
 
-#: ../src/et_core.c:539
+#: ../src/et_core.c:580
 #, c-format
 msgid "Error reading tag from Opus file (%s)"
 msgstr "Chyba při čtení štítku ze souboru Opus (%s)"
 
-#: ../src/et_core.c:682
+#: ../src/et_core.c:723
 #, c-format
 msgid "Automatic corrections applied for file '%s'."
 msgstr "Pro soubor „%s“ byly použity automatické korekce."
 
-#: ../src/et_core.c:2707
+#: ../src/et_core.c:2759
 msgid "ID3 Tag"
 msgstr "Štítek ID3"
 
-#: ../src/et_core.c:2713
+#: ../src/et_core.c:2765
 msgid "Ogg Vorbis Tag"
 msgstr "Štítek Ogg Vorbis"
 
-#: ../src/et_core.c:2719
+#: ../src/et_core.c:2771
 msgid "FLAC Vorbis Tag"
 msgstr "Štítek FLAC"
 
-#: ../src/et_core.c:2724
+#: ../src/et_core.c:2776
 msgid "APE Tag"
 msgstr "Štítek APE"
 
-#: ../src/et_core.c:2729
+#: ../src/et_core.c:2781
 msgid "MP4/M4A/AAC Tag"
 msgstr "Štítek MP4/M4A/AAC"
 
-#: ../src/et_core.c:2735
+#: ../src/et_core.c:2787
 msgid "Wavpack Tag"
 msgstr "Štítek Wavpack"
 
-#: ../src/et_core.c:2741
+#: ../src/et_core.c:2793
 msgid "Opus Tag"
 msgstr "Štítek Opus"
 
-#: ../src/et_core.c:2761
+#: ../src/et_core.c:2813
 msgid "MP3 File"
 msgstr "Soubor MP3"
 
-#: ../src/et_core.c:2765
+#: ../src/et_core.c:2817
 msgid "MP2 File"
 msgstr "Soubor MP2"
 
-#: ../src/et_core.c:2771
+#: ../src/et_core.c:2823
 msgid "Ogg Vorbis File"
 msgstr "Soubor Ogg Vorbis"
 
-#: ../src/et_core.c:2777
+#: ../src/et_core.c:2829
 msgid "Speex File"
 msgstr "Soubor Speex"
 
-#: ../src/et_core.c:2783
+#: ../src/et_core.c:2835
 msgid "FLAC File"
 msgstr "Soubor FLAC"
 
-#: ../src/et_core.c:2788
+#: ../src/et_core.c:2840
 msgid "MusePack File"
 msgstr "Soubor MusePack"
 
-#: ../src/et_core.c:2792
+#: ../src/et_core.c:2844
 msgid "Monkey's Audio File"
 msgstr "Zvukový soubor Monkey"
 
-#: ../src/et_core.c:2797
+#: ../src/et_core.c:2849
 msgid "MP4/AAC File"
 msgstr "Soubor MP4/AAC"
 
-#: ../src/et_core.c:2803
+#: ../src/et_core.c:2855
 msgid "Wavpack File"
 msgstr "Soubor Wavpack"
 
-#: ../src/et_core.c:2809
+#: ../src/et_core.c:2861
 msgid "Opus File"
 msgstr "Soubor Opus"
 
-#: ../src/et_core.c:2868 ../src/et_core.c:2923
+#: ../src/et_core.c:2920 ../src/et_core.c:2975
 msgid "File not found"
 msgstr "Soubor nebyl nalezen"
 
-#: ../src/et_core.c:2873
+#: ../src/et_core.c:2925
 #, c-format
 msgid "Cannot query file information (%s)"
 msgstr "Nelze se dotázat na informace o souboru (%s)"
 
-#: ../src/et_core.c:2907
+#: ../src/et_core.c:2959
 msgid "Read-only file"
 msgstr "Soubor jen ke čtení"
 
 #. And refresh the number of files in this directory
-#: ../src/et_core.c:2971
+#: ../src/et_core.c:3023
 #, c-format
 msgid "One file"
 msgid_plural "%u files"
@@ -2434,14 +2423,14 @@ msgstr[0] "jeden soubor"
 msgstr[1] "%u soubory"
 msgstr[2] "%u souborů"
 
-#: ../src/et_core.c:3175
+#: ../src/et_core.c:3227
 #, c-format
 msgid "Images (%d)"
 msgstr "Obrázky (%d)"
 
 #. Bitrate
-#: ../src/et_core.c:3217 ../src/flac_header.c:205
-#: ../src/monkeyaudio_header.c:86 ../src/mp4_header.c:134
+#: ../src/et_core.c:3269 ../src/flac_header.c:205
+#: ../src/monkeyaudio_header.c:86 ../src/mp4_header.cc:132
 #: ../src/mpeg_header.c:206 ../src/musepack_header.c:88
 #: ../src/ogg_header.c:401 ../src/opus_header.c:227 ../src/wavpack_header.c:78
 #, c-format
@@ -2449,28 +2438,28 @@ msgid "%d kb/s"
 msgstr "%d kb/s"
 
 #. Samplerate
-#: ../src/et_core.c:3222 ../src/flac_header.c:210
-#: ../src/monkeyaudio_header.c:91 ../src/mp4_header.c:139
+#: ../src/et_core.c:3274 ../src/flac_header.c:210
+#: ../src/monkeyaudio_header.c:91 ../src/mp4_header.cc:137
 #: ../src/mpeg_header.c:211 ../src/musepack_header.c:93
 #: ../src/ogg_header.c:406 ../src/opus_header.c:232 ../src/wavpack_header.c:83
 #, c-format
 msgid "%d Hz"
 msgstr "%d Hz"
 
-#: ../src/et_core.c:3368 ../src/scan.c:686
+#: ../src/et_core.c:3420 ../src/scan_dialog.c:688
 #, c-format
 msgid "Could not convert filename '%s' into system filename encoding"
 msgstr "Nelze převést název souboru „%s“ do systémového kódování názvů soborů"
 
-#: ../src/et_core.c:3370
+#: ../src/et_core.c:3422
 msgid "Try setting the environment variable G_FILENAME_ENCODING."
 msgstr "Zkuste nastavit proměnnou prostředí G_FILENAME_ENCODING"
 
-#: ../src/et_core.c:3371 ../src/scan.c:688
+#: ../src/et_core.c:3423 ../src/scan_dialog.c:690
 msgid "Filename translation"
 msgstr "Překlad názvu souboru"
 
-#: ../src/et_core.c:4076
+#: ../src/et_core.c:4128
 #, c-format
 msgid "Error writing tag type %d to file %s (%s)"
 msgstr "Chyba při zápisu štítku typu %d do souboru %s (%s)"
@@ -2479,7 +2468,7 @@ msgstr "Chyba při zápisu štítku typu %d do souboru %s (%s)"
 #. Mode
 #. mpeg4ip library seems to always return -1
 #. Mode
-#: ../src/flac_header.c:215 ../src/mp4_header.c:145 ../src/ogg_header.c:411
+#: ../src/flac_header.c:215 ../src/mp4_header.cc:143 ../src/ogg_header.c:411
 #: ../src/opus_header.c:237 ../src/wavpack_header.c:88
 msgid "Channels:"
 msgstr "Kanály:"
@@ -2489,7 +2478,7 @@ msgstr "Kanály:"
 msgid "Error while opening file: '%s' as FLAC (%s)."
 msgstr "Chyba při otevírání souboru: „%s“ jako FLAC (%s)."
 
-#: ../src/flac_tag.c:352 ../src/ogg_tag.c:310
+#: ../src/flac_tag.c:352 ../src/ogg_tag.c:304
 #, c-format
 msgid ""
 "The year value '%s' seems to be invalid in file '%s'. The information will "
@@ -2508,17 +2497,17 @@ msgstr "Blok s obrázkem není platný: „%s“"
 msgid "Error: Failed to write comments to file '%s' (%s)."
 msgstr "Chyba: Selhal zápis poznámek do souboru „%s“ (%s)."
 
-#: ../src/flac_tag.c:1099 ../src/ogg_tag.c:1166
+#: ../src/flac_tag.c:1099 ../src/ogg_tag.c:1161
 #, c-format
 msgid "Written tag of '%s'"
 msgstr "Zapsán štítek do „%s“"
 
-#: ../src/id3_tag.c:158
+#: ../src/id3_tag.c:205
 #, c-format
 msgid "Error while reading file: '%s' (%s)"
 msgstr "Chyba při čtení souboru: „%s“ (%s)"
 
-#: ../src/id3_tag.c:170
+#: ../src/id3_tag.c:217
 #, c-format
 msgid ""
 "As the following corrupted file '%s' will cause an error in id3lib, it will "
@@ -2527,31 +2516,31 @@ msgstr ""
 "Protože by následující poškozený soubor „%s“ způsobil chybu v knihovně "
 "id3lib, nebude zpracován"
 
-#: ../src/id3_tag.c:172
+#: ../src/id3_tag.c:219
 msgid "Corrupted file"
 msgstr "Poškozený soubor"
 
-#: ../src/id3_tag.c:555
+#: ../src/id3_tag.c:592
 #, c-format
 msgid "Removed tag of '%s'"
 msgstr "Odstraněn štítek z „%s“"
 
-#: ../src/id3_tag.c:559 ../src/id3_tag.c:659
+#: ../src/id3_tag.c:596 ../src/id3_tag.c:696
 #, c-format
 msgid "Error while removing ID3v1 tag of '%s' (%s)"
 msgstr "Chyba při odstraňování štítku ID3v1 v „%s“ (%s)"
 
-#: ../src/id3_tag.c:561 ../src/id3_tag.c:631
+#: ../src/id3_tag.c:598 ../src/id3_tag.c:668
 #, c-format
 msgid "Error while removing ID3v2 tag of '%s' (%s)"
 msgstr "Chyba při odstraňování štítku ID3v2 v „%s“ (%s)"
 
-#: ../src/id3_tag.c:580
+#: ../src/id3_tag.c:617
 #, c-format
 msgid "Error while updating ID3v2 tag of '%s' (%s)"
 msgstr "Chyba při aktualizaci štítku ID3v1 v „%s“ (%s)"
 
-#: ../src/id3_tag.c:608
+#: ../src/id3_tag.c:645
 msgid ""
 "You have tried to save this tag to Unicode but it was detected that your "
 "version of id3lib is buggy"
@@ -2559,7 +2548,7 @@ msgstr ""
 "Zkoušíte uložit tento šítek v Unikódu, ale bylo zjištěno, že máte verzi "
 "id3lib, která obsahuje chyby."
 
-#: ../src/id3_tag.c:610
+#: ../src/id3_tag.c:647
 #, c-format
 msgid ""
 "If you reload this file, some characters in the tag may not be displayed "
@@ -2578,90 +2567,90 @@ msgstr ""
 "\n"
 "Soubor: %s"
 
-#: ../src/id3_tag.c:617
+#: ../src/id3_tag.c:654
 msgid "Buggy id3lib"
 msgstr "Chybová id3lib"
 
-#: ../src/id3_tag.c:651
+#: ../src/id3_tag.c:688
 #, c-format
 msgid "Error while updating ID3v1 tag of '%s' (%s)"
 msgstr "Chyba při aktualizaci štítku ID3v1 v „%s“ (%s)"
 
-#: ../src/id3_tag.c:665 ../src/id3v24_tag.c:1048
+#: ../src/id3_tag.c:702 ../src/id3v24_tag.c:1108
 #, c-format
 msgid "Updated tag of '%s'"
 msgstr "Aktualizován štítek v „%s“"
 
-#: ../src/id3_tag.c:684
+#: ../src/id3_tag.c:721
 msgid "No error reported"
 msgstr "Neohlášena žádná chyba"
 
-#: ../src/id3_tag.c:686
+#: ../src/id3_tag.c:723
 msgid "No available memory"
 msgstr "Není dostupná žádná pamět"
 
-#: ../src/id3_tag.c:688
+#: ../src/id3_tag.c:725
 msgid "No data to parse"
 msgstr "Žádná data ke zpracování"
 
-#: ../src/id3_tag.c:690
+#: ../src/id3_tag.c:727
 msgid "Improperly formatted data"
 msgstr "Chybně zformátovaná data"
 
-#: ../src/id3_tag.c:692
+#: ../src/id3_tag.c:729
 msgid "No buffer to write to"
 msgstr "Nebyla nalezena vyrovnávací paměť pro zápis"
 
-#: ../src/id3_tag.c:694
+#: ../src/id3_tag.c:731
 msgid "Buffer is too small"
 msgstr "Vyrovnávací paměť je příliš malá"
 
-#: ../src/id3_tag.c:696
+#: ../src/id3_tag.c:733
 msgid "Invalid frame ID"
 msgstr "Neplatné ID rámce"
 
-#: ../src/id3_tag.c:698
+#: ../src/id3_tag.c:735
 msgid "Requested field not found"
 msgstr "Požadované pole nebylo nalezeno"
 
-#: ../src/id3_tag.c:700
+#: ../src/id3_tag.c:737
 msgid "Unknown field type"
 msgstr "Neznámý typ pole"
 
-#: ../src/id3_tag.c:702
+#: ../src/id3_tag.c:739
 msgid "Tag is already attached to a file"
 msgstr "Štítek je již k souboru přiložen"
 
-#: ../src/id3_tag.c:704
+#: ../src/id3_tag.c:741
 msgid "Invalid tag version"
 msgstr "Neplatná verze štítku"
 
-#: ../src/id3_tag.c:706
+#: ../src/id3_tag.c:743
 msgid "No file to parse"
 msgstr "Žádný soubor ke zpracování"
 
-#: ../src/id3_tag.c:708
+#: ../src/id3_tag.c:745
 msgid "Attempting to write to a read-only file"
 msgstr "Pokus o zápis do souboru jen ke čtení"
 
-#: ../src/id3_tag.c:710
+#: ../src/id3_tag.c:747
 msgid "Error in compression/uncompression"
 msgstr "Chyba při komprimaci/dekomprimaci"
 
-#: ../src/id3_tag.c:712
+#: ../src/id3_tag.c:749
 msgid "Unknown error message"
 msgstr "Neznámá chybová zpráva"
 
-#: ../src/id3_tag.c:1316
+#: ../src/id3_tag.c:1357
 #, c-format
 msgid "Error while creating temporary file: '%s'"
 msgstr "Chyba při vytváření dočasného souboru: „%s“"
 
-#: ../src/id3_tag.c:1323
+#: ../src/id3_tag.c:1364
 msgid "Error while creating temporary file"
 msgstr "Chyba při vytváření dočasného souboru"
 
-#: ../src/id3_tag.c:1343
+#: ../src/id3_tag.c:1384
 #, c-format
 msgid "Error while writing to file: '%s' (%s)"
 msgstr "Chyba při zápisu do souboru: „%s“ (%s)"
@@ -2671,7 +2660,7 @@ msgstr "Chyba při zápisu do souboru: „%s“ (%s)"
 #. * missing (not read for some reason) while reading from
 #. * the file.
 #.
-#: ../src/id3v24_tag.c:1503
+#: ../src/id3v24_tag.c:1563
 #, c-format
 msgid "Cannot write tag of file ‘%s’ (a byte was missing)"
 msgid_plural "Cannot write tag of file ‘%s’ (%s bytes were missing)"
@@ -2679,12 +2668,12 @@ msgstr[0] "Nelze zapsat štítek do souboru „%s“ (schází bajt)"
 msgstr[1] "Nelze zapsat štítek do souboru „%s“ (schází %s bajty)"
 msgstr[2] "Nelze zapsat štítek do souboru „%s“ (schází %s bajtů)"
 
-#: ../src/id3v24_tag.c:1524
+#: ../src/id3v24_tag.c:1584
 #, c-format
 msgid "Cannot save tag of file '%s'"
 msgstr "Nelze uložit štítek do souboru „%s“"
 
-#: ../src/id3v24_tag.c:1535
+#: ../src/id3v24_tag.c:1595
 #, c-format
 msgid "Size error while saving tag of '%s'"
 msgstr "Chyba velikosti při ukládání štítku „%s“"
@@ -2693,54 +2682,54 @@ msgstr "Chyba velikosti při ukládání štítku „%s“"
 msgid "Log"
 msgstr "Záznam"
 
-#: ../src/misc.c:719
+#: ../src/misc.c:716
 msgid "You must type a program name"
 msgstr "Musíte vyplnit název programu"
 
-#: ../src/misc.c:720
+#: ../src/misc.c:717
 msgid "Program Name Error"
 msgstr "Chyba v názvu programu"
 
-#: ../src/misc.c:799
+#: ../src/misc.c:796
 #, c-format
 msgid "Executed command: %s"
 msgstr "Proveden příkaz: %s"
 
-#: ../src/misc.c:806
+#: ../src/misc.c:803
 #, c-format
 msgid "Failed to launch program: %s"
 msgstr "Selhalo spuštění programu: %s"
 
-#: ../src/misc.c:823
+#: ../src/misc.c:820
 msgid "Select File"
 msgstr "Výběr souboru"
 
-#: ../src/misc.c:829
+#: ../src/misc.c:826
 msgid "Select Directory"
 msgstr "Výběr složky"
 
-#: ../src/misc.c:1141
+#: ../src/misc.c:1138
 msgid "Generate Playlist"
 msgstr "Generování seznamu skladeb"
 
-#: ../src/misc.c:1165
+#: ../src/misc.c:1162
 msgid "M3U Playlist Name"
 msgstr "Název seznamu M3U"
 
-#: ../src/misc.c:1180
+#: ../src/misc.c:1177
 msgid "Use directory name"
 msgstr "Použít název složky"
 
 #. Playlist options
-#: ../src/misc.c:1197
+#: ../src/misc.c:1194
 msgid "Playlist Options"
 msgstr "Volby seznamu skladeb"
 
-#: ../src/misc.c:1203
+#: ../src/misc.c:1200
 msgid "Include only the selected files"
 msgstr "Zahrnout pouze vybrané soubory"
 
-#: ../src/misc.c:1206
+#: ../src/misc.c:1203
 msgid ""
 "If activated, only the selected files will be written in the playlist file. "
 "Else, all the files will be written."
@@ -2748,29 +2737,29 @@ msgstr ""
 "Pokud je zapnuto, budou do seznamu skladeb zapsány pouze vybrané soubory. "
 "Jinak budou zapsány všechny soubory."
 
-#: ../src/misc.c:1209
+#: ../src/misc.c:1206
 msgid "Use full path for files in playlist"
 msgstr "K souborům v seznamu použít celou cestu"
 
-#: ../src/misc.c:1212
+#: ../src/misc.c:1209
 msgid "Use relative path for files in playlist"
 msgstr "K souborům v seznamu použít relativní cestu"
 
 #. Create playlist in parent directory
-#: ../src/misc.c:1218
+#: ../src/misc.c:1215
 msgid "Create playlist in the parent directory"
 msgstr "Vytvořit seznam skladeb v nadřazené složce"
 
-#: ../src/misc.c:1221
+#: ../src/misc.c:1218
 msgid "If activated, the playlist will be created in the parent directory."
 msgstr "Pokud je zapnuto, bude se seznam skladeb vytvářet v nadřazené složce."
 
 #. DOS Separator
-#: ../src/misc.c:1225
+#: ../src/misc.c:1222
 msgid "Use DOS directory separator"
 msgstr "Používat oddělovač složek jako v systému DOS"
 
-#: ../src/misc.c:1231
+#: ../src/misc.c:1228
 msgid ""
 "This option replaces the UNIX directory separator '/' into DOS separator "
 "'\\'."
@@ -2778,49 +2767,49 @@ msgstr ""
 "Tato volba nahrazuje oddělovač složek „/“ ze systému UNIX oddělovačem „\\“ "
 "ze systému DOS."
 
-#: ../src/misc.c:1240
+#: ../src/misc.c:1237
 msgid "Playlist Content"
 msgstr "Obsah seznamu skladeb"
 
-#: ../src/misc.c:1246
+#: ../src/misc.c:1243
 msgid "Write only list of files"
 msgstr "Zapsat jen seznam souborů"
 
-#: ../src/misc.c:1250
+#: ../src/misc.c:1247
 msgid "Write info using filename"
 msgstr "Zapsat informace za použití názvu souboru"
 
-#: ../src/misc.c:1253
+#: ../src/misc.c:1250
 msgid "Write info using:"
 msgstr "Zapsat informace za použití:"
 
-#: ../src/misc.c:1467
+#: ../src/misc.c:1464
 #, c-format
 msgid "Cannot write playlist file '%s'"
 msgstr "Nelze zapsat do souboru se seznamem skladeb „%s“"
 
-#: ../src/misc.c:1471
+#: ../src/misc.c:1468
 msgid "Playlist File Error"
 msgstr "Chyba souboru se seznamem skladeb"
 
-#: ../src/misc.c:1479
+#: ../src/misc.c:1476
 #, c-format
 msgid "Written playlist file '%s'"
 msgstr "Zapsán soubor se seznamem skladeb „%s“"
 
-#: ../src/misc.c:1543 ../src/scan.c:2903 ../src/scan.c:2965
+#: ../src/misc.c:1540 ../src/scan_dialog.c:2747 ../src/scan_dialog.c:2809
 msgid "Invalid scanner mask"
 msgstr "Neplatná maska průzkumníka"
 
-#: ../src/misc.c:1907
+#: ../src/misc.c:1904
 msgid "CD"
 msgstr "CD"
 
-#: ../src/misc.c:1929
+#: ../src/misc.c:1926
 msgid "Find Files"
 msgstr "Hledání souborů"
 
-#: ../src/misc.c:1961
+#: ../src/misc.c:1958
 msgid ""
 "Type the word to search into files. Or type nothing to display all files."
 msgstr ""
@@ -2828,13 +2817,13 @@ msgstr ""
 "zobrazení všech souborů."
 
 #. Where...
-#: ../src/misc.c:1967
+#: ../src/misc.c:1964
 msgid "In:"
 msgstr "V:"
 
 #. Translators: This option is for the previous 'in' option. For instance,
 #. * translate this as "Search" "In:" "the Filename".
-#: ../src/misc.c:1972
+#: ../src/misc.c:1969
 msgid "the Filename"
 msgstr "názvu souboru"
 
@@ -2843,20 +2832,20 @@ msgstr "názvu souboru"
 #. * Note: label changed to "the Tag" (to be the only one) to fix a Hungarian
 #. * grammatical problem (which uses one word to say "in the tag" like here)
 #.
-#: ../src/misc.c:1978
+#: ../src/misc.c:1975
 msgid "the Tag"
 msgstr "štítku"
 
 #. Property of the search
-#: ../src/misc.c:1989 ../src/prefs.c:335
+#: ../src/misc.c:1986 ../src/prefs.c:335
 msgid "Case sensitive"
 msgstr "Rozlišovat velikost písmen"
 
-#: ../src/misc.c:2216
+#: ../src/misc.c:2213
 msgid "Ready to search…"
 msgstr "Připraveno k hledání…"
 
-#: ../src/misc.c:2436
+#: ../src/misc.c:2433
 #, c-format
 msgid "Found one file"
 msgid_plural "Found %d files"
@@ -2864,63 +2853,63 @@ msgstr[0] "Nalezen jeden soubor"
 msgstr[1] "Nalezeny %d soubory"
 msgstr[2] "Nalezeno %d souborů"
 
-#: ../src/misc.c:2721
+#: ../src/misc.c:2718
 msgid "Load Filenames From a Text File"
 msgstr "Načtení názvů souborů z textového souboru"
 
-#: ../src/misc.c:2750
+#: ../src/misc.c:2747
 msgid "File:"
 msgstr "Soubor:"
 
 #. Button 'load'
 #. the signal attached to this button, to load the file, is placed after the LoadFileContentList definition
-#: ../src/misc.c:2769
+#: ../src/misc.c:2766
 msgid " Load "
 msgstr "Načíst"
 
-#: ../src/misc.c:2787
+#: ../src/misc.c:2784
 msgid "Content of Text File"
 msgstr "Obsah textového souboru"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2808 ../src/misc.c:2903
+#: ../src/misc.c:2805 ../src/misc.c:2900
 msgid "Insert a blank line before the selected line"
 msgstr "Vložit prázdný řádek před vybraný řádek"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2817 ../src/misc.c:2912
+#: ../src/misc.c:2814 ../src/misc.c:2909
 msgid "Delete the selected line"
 msgstr "Smazat vybraný řádek"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2826 ../src/misc.c:2921 ../src/misc.c:3407
+#: ../src/misc.c:2823 ../src/misc.c:2918 ../src/misc.c:3399
 msgid "Delete all blank lines"
 msgstr "Smazat všechny prázdné řádky"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2838 ../src/misc.c:2933
+#: ../src/misc.c:2835 ../src/misc.c:2930
 msgid "Move up the selected line"
 msgstr "Posunout vybraný řádek výš"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2847 ../src/misc.c:2942
+#: ../src/misc.c:2844 ../src/misc.c:2939
 msgid "Move down the selected line"
 msgstr "Posunout vybraný řádek níž"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2859 ../src/misc.c:2954 ../src/misc.c:3431
+#: ../src/misc.c:2856 ../src/misc.c:2951 ../src/misc.c:3423
 msgid "Reload"
 msgstr "Znovu načíst"
 
-#: ../src/misc.c:2881
+#: ../src/misc.c:2878
 msgid "List of Files"
 msgstr "Seznam souborů"
 
-#: ../src/misc.c:2976
+#: ../src/misc.c:2973
 msgid "Selected line:"
 msgstr "Vybraný řádek:"
 
-#: ../src/misc.c:2994
+#: ../src/misc.c:2991
 msgid ""
 "When activating this option, after loading the filenames, the current "
 "selected scanner will be ran (the scanner window must be opened)."
@@ -2928,34 +2917,34 @@ msgstr ""
 "Když je tato volba zapnuta, bude po načtení názvů souborů spuštěn aktuální "
 "průzkumník (okno průzkumníka musí být otevřeno)."
 
-#: ../src/misc.c:3081
+#: ../src/misc.c:3078
 #, c-format
 msgid "Cannot retrieve file info (%s)"
 msgstr "Nelze získat informace o souboru (%s)"
 
-#: ../src/misc.c:3143
+#: ../src/misc.c:3141
 #, c-format
 msgid "Can't open file '%s' (%s)"
 msgstr "Nelze otevřít soubor „%s“ (%s)"
 
-#: ../src/misc.c:3179
+#: ../src/misc.c:3170
 #, c-format
 msgid "Error reading file (%s)"
 msgstr "Chyba při čtení souboru (%s)"
 
-#: ../src/misc.c:3395
+#: ../src/misc.c:3387
 msgid "Insert a blank line"
 msgstr "Vložit prázdný řádek"
 
-#: ../src/misc.c:3401
+#: ../src/misc.c:3393
 msgid "Delete this line"
 msgstr "Smazat tento řádek"
 
-#: ../src/misc.c:3416
+#: ../src/misc.c:3408
 msgid "Move up this line"
 msgstr "Posunout tento řádek výš"
 
-#: ../src/misc.c:3422
+#: ../src/misc.c:3414
 msgid "Move down this line"
 msgstr "Posunout tento řádek níž"
 
@@ -2965,26 +2954,21 @@ msgstr "Posunout tento řádek níž"
 msgid "Profile:"
 msgstr "Profil:"
 
-#: ../src/mp4_header.c:63 ../src/mp4_tag.c:65 ../src/mp4_tag.c:186
+#: ../src/mp4_header.cc:59 ../src/mp4_tag.cc:91 ../src/mp4_tag.cc:284
 msgid "MP4 format invalid"
 msgstr "Neplatný formát MP4"
 
-#: ../src/mp4_header.c:72 ../src/mp4_tag.c:74
-#, c-format
-msgid "File contains no audio track: '%s'"
-msgstr "Soubor neobsahuje žádnou zvukovou stopu: „%s“"
-
-#: ../src/mp4_header.c:82
+#: ../src/mp4_header.cc:69
 #, c-format
 msgid "Error reading properties from file: '%s'"
 msgstr "Chyba při čtení vlastností ze souboru: „%s“"
 
-#: ../src/mp4_header.c:132 ../src/mpeg_header.c:204
+#: ../src/mp4_header.cc:130 ../src/mpeg_header.c:204
 #, c-format
 msgid "~%d kb/s"
 msgstr "~%d kb/s"
 
-#: ../src/mp4_tag.c:85 ../src/mp4_tag.c:194
+#: ../src/mp4_tag.cc:101 ../src/mp4_tag.cc:293
 #, c-format
 msgid "Error reading tags from file: '%s'"
 msgstr "Chyba při čtení štítků ze souboru: „%s“"
@@ -3059,184 +3043,184 @@ msgstr ""
 msgid "Error: Failed to open file: '%s' as Vorbis (%s)."
 msgstr "Chyba: Selhalo otevření souboru: „%s“ jako Vorbis (%s)."
 
-#: ../src/ogg_tag.c:712 ../src/ogg_tag.c:887
+#: ../src/ogg_tag.c:706 ../src/ogg_tag.c:881
 #, c-format
 msgid "Warning: The Ogg Vorbis file '%s' contains an ID3v2 tag."
 msgstr "Varování : Soubor Ogg Vorbis „%s“ obsahuje štítek ID3v2."
 
-#: ../src/ogg_tag.c:1035 ../src/picture.c:1257
+#: ../src/ogg_tag.c:1030 ../src/picture.c:1082
 #, c-format
 msgid "Error with 'loader_write': %s"
 msgstr "Chyba při použití „loader_write“: %s"
 
-#: ../src/ogg_tag.c:1050 ../src/picture.c:1180
+#: ../src/ogg_tag.c:1045 ../src/picture.c:1005
 #, c-format
 msgid "Error with 'loader_close': %s"
 msgstr "Chyba při použití „loader_close“: %s"
 
-#: ../src/picture.c:104
+#: ../src/picture.c:244 ../src/picture.c:269
 #, c-format
-msgid "Image file not saved: %s"
-msgstr "Soubor s obrázkem nebyl uložen: %s"
+msgid "Image file not loaded: %s"
+msgstr "Soubor s obrázkem nebyl načten: %s"
 
-#: ../src/picture.c:154
+#: ../src/picture.c:261
 #, c-format
 msgid "Cannot open file: '%s'"
 msgstr "Nelze otevřít soubor: „%s“"
 
-#: ../src/picture.c:158
+#: ../src/picture.c:265
 msgid "Image File Error"
 msgstr "Chyba souboru s obrázkem"
 
-#: ../src/picture.c:162 ../src/picture.c:424
-#, c-format
-msgid "Image file not loaded: %s"
-msgstr "Soubor s obrázkem nebyl načten: %s"
-
-#: ../src/picture.c:446
+#: ../src/picture.c:276
 msgid "Image file loaded"
 msgstr "Soubor s obrázkem načten"
 
-#: ../src/picture.c:504
+#: ../src/picture.c:334
 msgid "Add Images"
 msgstr "Přidání obrázků"
 
-#: ../src/picture.c:514 ../src/picture.c:874
+#: ../src/picture.c:344 ../src/picture.c:701
 msgid "All Files"
 msgstr "VÅ¡echny soubory"
 
-#: ../src/picture.c:520 ../src/picture.c:880
+#: ../src/picture.c:350 ../src/picture.c:707
 msgid "PNG and JPEG"
 msgstr "PNG a JPEG"
 
-#: ../src/picture.c:651
+#: ../src/picture.c:477
 #, c-format
 msgid "Image Properties %d/%d"
 msgstr "Vlastnosti obrázku %d/%d"
 
-#: ../src/picture.c:675
+#: ../src/picture.c:503
 msgid "Image Type"
 msgstr "Typ obrázku"
 
 #. Description of the picture
-#: ../src/picture.c:734
+#: ../src/picture.c:561
 msgid "Image Description:"
 msgstr "Popis obrázku:"
 
-#: ../src/picture.c:861
+#: ../src/picture.c:688
 #, c-format
 msgid "Save Image %d/%d"
 msgstr "Ukládání obrázku %d/%d"
 
-#: ../src/picture.c:1021
+#: ../src/picture.c:763
+#, c-format
+msgid "Image file not saved: %s"
+msgstr "Soubor s obrázkem nebyl uložen: %s"
+
+#: ../src/picture.c:846
 msgid "JPEG image"
 msgstr "Obrázek JPEG"
 
-#: ../src/picture.c:1023
+#: ../src/picture.c:848
 msgid "PNG image"
 msgstr "Obrázek PNG"
 
-#: ../src/picture.c:1025
+#: ../src/picture.c:850
 msgid "GIF image"
 msgstr "Obrázek GIF"
 
-#: ../src/picture.c:1027
+#: ../src/picture.c:852
 msgid "Unknown image"
 msgstr "Neznámý obrázek"
 
-#: ../src/picture.c:1039
+#: ../src/picture.c:864
 msgid "32x32 pixel PNG file icon"
 msgstr "Ikona souboru 32×32 pixelu PNG"
 
-#: ../src/picture.c:1041
+#: ../src/picture.c:866
 msgid "Other file icon"
 msgstr "Jiná ikona souboru"
 
-#: ../src/picture.c:1043
+#: ../src/picture.c:868
 msgid "Cover (front)"
 msgstr "Přebal (přední)"
 
-#: ../src/picture.c:1045
+#: ../src/picture.c:870
 msgid "Cover (back)"
 msgstr "Přebal (zadní)"
 
-#: ../src/picture.c:1047
+#: ../src/picture.c:872
 msgid "Leaflet page"
 msgstr "Stránka brožury"
 
-#: ../src/picture.c:1049
+#: ../src/picture.c:874
 msgid "Media (e.g. label side of CD)"
 msgstr "Médium (např. potisklá strana CD)"
 
-#: ../src/picture.c:1051
+#: ../src/picture.c:876
 msgid "Lead artist/lead performer/soloist"
 msgstr "Hlavní umělec/hlavní účinkující/sólista"
 
-#: ../src/picture.c:1053
+#: ../src/picture.c:878
 msgid "Artist/performer"
 msgstr "Umělec/účinkující"
 
-#: ../src/picture.c:1055
+#: ../src/picture.c:880
 msgid "Conductor"
 msgstr "Dirigent"
 
-#: ../src/picture.c:1057
+#: ../src/picture.c:882
 msgid "Band/Orchestra"
 msgstr "Skupina/orchestr"
 
-#: ../src/picture.c:1061
+#: ../src/picture.c:886
 msgid "Lyricist/text writer"
 msgstr "TextaÅ™"
 
-#: ../src/picture.c:1063
+#: ../src/picture.c:888
 msgid "Recording location"
 msgstr "Místo nahrávání"
 
-#: ../src/picture.c:1065
+#: ../src/picture.c:890
 msgid "During recording"
 msgstr "Během nahrávání"
 
-#: ../src/picture.c:1067
+#: ../src/picture.c:892
 msgid "During performance"
 msgstr "Během představení"
 
-#: ../src/picture.c:1069
+#: ../src/picture.c:894
 msgid "Movie/video screen capture"
 msgstr "Zachytávání filmu/videa"
 
-#: ../src/picture.c:1071
+#: ../src/picture.c:896
 msgid "A bright colored fish"
 msgstr "Pestrobarevná ryba"
 
-#: ../src/picture.c:1073
+#: ../src/picture.c:898
 msgid "Illustration"
 msgstr "Ilustrace"
 
-#: ../src/picture.c:1075
+#: ../src/picture.c:900
 msgid "Band/Artist logotype"
 msgstr "Logo skupiny/umělce"
 
-#: ../src/picture.c:1077
+#: ../src/picture.c:902
 msgid "Publisher/studio logotype"
 msgstr "Logo vydavatele/studia"
 
-#: ../src/picture.c:1081
+#: ../src/picture.c:906
 msgid "Unknown image type"
 msgstr "Neznámý typ obrázku"
 
-#: ../src/picture.c:1111 ../src/picture.c:1122
+#: ../src/picture.c:936 ../src/picture.c:947
 msgid "pixels"
 msgstr "pixely"
 
-#: ../src/picture.c:1112 ../src/picture.c:1123
+#: ../src/picture.c:937 ../src/picture.c:948
 msgid "Type"
 msgstr "Typ"
 
-#: ../src/picture.c:1124
+#: ../src/picture.c:949
 msgid "Description"
 msgstr "Popis"
 
-#: ../src/picture.c:1240
+#: ../src/picture.c:1065
 msgid ""
 "Cannot display the image because not enough data has been read to determine "
 "how to create the image buffer."
@@ -3244,18 +3228,18 @@ msgstr ""
 "Nelze zobrazit obrázek, protože nebyl načten dostatek dat, podle kterých by "
 "se dalo určit, jaká se má vytvořit vyrovnávací paměť pro obrázek."
 
-#: ../src/picture.c:1247
+#: ../src/picture.c:1072
 msgid "Cannot display the image"
 msgstr "Nelze zobrazit obrázek"
 
-#: ../src/picture.c:1249
+#: ../src/picture.c:1074
 msgid ""
 "Not enough data has been read to determine how to create the image buffer."
 msgstr ""
 "Nebyl načten dostatek dat, podle kterých by se dalo určit, jaká se má "
 "vytvořit vyrovnávací paměť pro obrázek."
 
-#: ../src/picture.c:1251
+#: ../src/picture.c:1076
 msgid "Load Image File"
 msgstr "Načtení souboru s obrázkem"
 
@@ -4328,82 +4312,82 @@ msgstr "Hudební přehrávač „%s“ nebyl nalezen"
 msgid "Audio Player Error"
 msgstr "Chyba hudebního přehrávače"
 
-#: ../src/scan.c:180
+#: ../src/scan_dialog.c:182
 msgid "Fill Tag"
 msgstr "Vyplnit štítek"
 
-#: ../src/scan.c:354
+#: ../src/scan_dialog.c:356
 #, c-format
 msgid "Cannot calculate CRC value of file (%s)"
 msgstr "Nelze vypočítat hodnotu kontrolního součtu CRC pro soubor (%s)"
 
-#: ../src/scan.c:369
+#: ../src/scan_dialog.c:371
 msgid "Tag successfully scanned"
 msgstr "Štítek byl úspěšně prozkoumán"
 
-#: ../src/scan.c:371
+#: ../src/scan_dialog.c:373
 #, c-format
 msgid "Tag successfully scanned: %s"
 msgstr "Štítek byl úspěšně prozkoumán: %s"
 
-#: ../src/scan.c:412
+#: ../src/scan_dialog.c:414
 #, c-format
 msgid "Tag scanner: strange… the extension '%s' was not found in filename '%s'"
 msgstr ""
 "Průzkumník štítků: podivné…, ale přípona „%s“ nebyla v názvu souboru „%s“ "
 "nalezena"
 
-#: ../src/scan.c:494 ../src/scan.c:523
+#: ../src/scan_dialog.c:496 ../src/scan_dialog.c:525
 #, c-format
 msgid "Scan Error: can't find separator '%s' within '%s'"
 msgstr "Chyba průzkumníka: nelze nalézt oddělovač „%s“ vrámci „%s“"
 
-#: ../src/scan.c:710
+#: ../src/scan_dialog.c:712
 msgid "New filename successfully scanned"
 msgstr "Nový název souboru byl úspěšně prozkoumán"
 
-#: ../src/scan.c:713
+#: ../src/scan_dialog.c:715
 #, c-format
 msgid "New filename successfully scanned: %s"
 msgstr "Nový název souboru byl úspěšně prozkoumán: %s"
 
-#: ../src/scan.c:1822
+#: ../src/scan_dialog.c:1632
 #, c-format
 msgid "Error while processing fields: %s"
 msgstr "Chyba při zpracování polí: %s"
 
 #. The window
-#: ../src/scan.c:1992
+#: ../src/scan_dialog.c:1802
 msgid "Tag and Filename Scan"
 msgstr "Průzkum štítků a názvů souborů"
 
 #. TODO: Set related action to match AM_SCAN_FILES.
-#: ../src/scan.c:2001
+#: ../src/scan_dialog.c:1811
 msgid "Scan Files"
 msgstr "Prozkoumat soubory"
 
 #. Option Menu
-#: ../src/scan.c:2029
+#: ../src/scan_dialog.c:1839
 msgid "Scanner:"
 msgstr "Průzkumník:"
 
-#: ../src/scan.c:2050
+#: ../src/scan_dialog.c:1860
 msgid "Select the type of scanner to use"
 msgstr "Vyberte druh průzkumníka, které se má použít"
 
-#: ../src/scan.c:2059
+#: ../src/scan_dialog.c:1869
 msgid "Scanner Preferences"
 msgstr "Předvolby průzkumníka"
 
-#: ../src/scan.c:2068
+#: ../src/scan_dialog.c:1878
 msgid "Show / Hide Masks Editor"
 msgstr "Zobrazit/skrýt editor masky"
 
-#: ../src/scan.c:2078
+#: ../src/scan_dialog.c:1888
 msgid "Show / Hide Legend"
 msgstr "Zobrazit/skrýt legendu"
 
-#: ../src/scan.c:2108
+#: ../src/scan_dialog.c:1918
 msgid ""
 "Select or type in a mask using codes (see Legend) to parse filename and "
 "path. Used to fill in tag fields"
@@ -4412,15 +4396,15 @@ msgstr ""
 "zpracovávat název souboru a cesta. Použije se k vyplnění polí štítku."
 
 #. Preview label
-#: ../src/scan.c:2132
+#: ../src/scan_dialog.c:1942
 msgid "Fill tag preview"
 msgstr "Náhled vyplnění štítku"
 
-#: ../src/scan.c:2162
+#: ../src/scan_dialog.c:1972
 msgid "Prefix mask with current path"
 msgstr "Úvodní maska s aktuální cestou"
 
-#: ../src/scan.c:2176
+#: ../src/scan_dialog.c:1986
 msgid ""
 "Select or type in a mask using codes (see Legend) to parse tag fields. Used "
 "to rename the file.\n"
@@ -4433,15 +4417,15 @@ msgstr ""
 "považováno za absolutní cestu, jinak za relativní ke staré cestě."
 
 #. Preview label
-#: ../src/scan.c:2201
+#: ../src/scan_dialog.c:2011
 msgid "Rename file preview"
 msgstr "Náhled přejmenování souboru"
 
-#: ../src/scan.c:2220
+#: ../src/scan_dialog.c:2030
 msgid "Select fields:"
 msgstr "Vyberte pole:"
 
-#: ../src/scan.c:2223
+#: ../src/scan_dialog.c:2033
 msgid ""
 "The buttons on the right represent the fields which can be processed. Select "
 "those which interest you"
@@ -4450,134 +4434,134 @@ msgstr ""
 "která chcete upravit."
 
 #. Advice for Translators: set the first letter of filename translated
-#: ../src/scan.c:2227
+#: ../src/scan_dialog.c:2037
 msgid "F"
 msgstr "F"
 
-#: ../src/scan.c:2229
+#: ../src/scan_dialog.c:2039
 msgid "Process filename field"
 msgstr "Upravit pole názvu souboru"
 
 #. Advice for Translators: set the first letter of title translated
-#: ../src/scan.c:2231
+#: ../src/scan_dialog.c:2041
 msgid "T"
 msgstr "T"
 
-#: ../src/scan.c:2232
+#: ../src/scan_dialog.c:2042
 msgid "Process title field"
 msgstr "Upravit pole s názvem"
 
 #. Advice for Translators: set the first letter of artist translated
-#: ../src/scan.c:2234
+#: ../src/scan_dialog.c:2044
 msgid "Ar"
 msgstr "Ar"
 
-#: ../src/scan.c:2235
+#: ../src/scan_dialog.c:2045
 msgid "Process file artist field"
 msgstr "Upravit pole s autorem"
 
 #. Advice for Translators: set the first letter of album artist translated
-#: ../src/scan.c:2237
+#: ../src/scan_dialog.c:2047
 msgid "AA"
 msgstr "AA"
 
-#: ../src/scan.c:2238
+#: ../src/scan_dialog.c:2048
 msgid "Process album artist field"
 msgstr "Upravit pole s autorem alba"
 
 #. Advice for Translators: set the first letter of album translated
-#: ../src/scan.c:2240
+#: ../src/scan_dialog.c:2050
 msgid "Al"
 msgstr "Al"
 
-#: ../src/scan.c:2241
+#: ../src/scan_dialog.c:2051
 msgid "Process album field"
 msgstr "Upravit pole s albem"
 
 #. Advice for Translators: set the first letter of genre translated
-#: ../src/scan.c:2243
+#: ../src/scan_dialog.c:2053
 msgid "G"
 msgstr "G"
 
-#: ../src/scan.c:2244
+#: ../src/scan_dialog.c:2054
 msgid "Process genre field"
 msgstr "Upravit pole se žánrem"
 
 #. Advice for Translators: set the first letter of comment translated
-#: ../src/scan.c:2246
+#: ../src/scan_dialog.c:2056
 msgid "Cm"
 msgstr "Cm"
 
-#: ../src/scan.c:2247
+#: ../src/scan_dialog.c:2057
 msgid "Process comment field"
 msgstr "Upravit pole s poznámkou"
 
 #. Advice for Translators: set the first letter of composer translated
-#: ../src/scan.c:2249
+#: ../src/scan_dialog.c:2059
 msgid "Cp"
 msgstr "Cp"
 
-#: ../src/scan.c:2250
+#: ../src/scan_dialog.c:2060
 msgid "Process composer field"
 msgstr "Upravit pole se skladatelem"
 
 #. Advice for Translators: set the first letter of orig artist translated
-#: ../src/scan.c:2252
+#: ../src/scan_dialog.c:2062
 msgid "O"
 msgstr "O"
 
-#: ../src/scan.c:2253
+#: ../src/scan_dialog.c:2063
 msgid "Process original artist field"
 msgstr "Upravit pole s původním umělcem"
 
 #. Advice for Translators: set the first letter of copyright translated
-#: ../src/scan.c:2255
+#: ../src/scan_dialog.c:2065
 msgid "Cr"
 msgstr "Cr"
 
-#: ../src/scan.c:2256
+#: ../src/scan_dialog.c:2066
 msgid "Process copyright field"
 msgstr "Upravit pole s copyrightem"
 
 #. Advice for Translators: set the first letter of URL translated
-#: ../src/scan.c:2258
+#: ../src/scan_dialog.c:2068
 msgid "U"
 msgstr "U"
 
-#: ../src/scan.c:2259
+#: ../src/scan_dialog.c:2069
 msgid "Process URL field"
 msgstr "Upravit pole s adresou URL"
 
 #. Advice for Translators: set the first letter of encoder name translated
-#: ../src/scan.c:2261
+#: ../src/scan_dialog.c:2071
 msgid "E"
 msgstr "E"
 
-#: ../src/scan.c:2262
+#: ../src/scan_dialog.c:2072
 msgid "Process encoder name field"
 msgstr "Upravit pole s názvem kodéru"
 
-#: ../src/scan.c:2306
+#: ../src/scan_dialog.c:2116
 msgid "Invert selection"
 msgstr "Invertovat výběr"
 
-#: ../src/scan.c:2313
+#: ../src/scan_dialog.c:2123
 msgid "Select/Unselect all"
 msgstr "Vybrat vše/zrušit výběr všeho"
 
-#: ../src/scan.c:2328
+#: ../src/scan_dialog.c:2138
 msgid "Convert:"
 msgstr "Převést:"
 
-#: ../src/scan.c:2330
+#: ../src/scan_dialog.c:2140
 msgid "to: "
 msgstr "na : "
 
-#: ../src/scan.c:2337
+#: ../src/scan_dialog.c:2147
 msgid "Do not convert"
 msgstr "Nepřevádět"
 
-#: ../src/scan.c:2356
+#: ../src/scan_dialog.c:2177
 msgid ""
 "The underscore character or the string '%20' are replaced by one space. "
 "Example, before: 'Text%20In%20An_Entry', after: 'Text In An Entry'."
@@ -4585,7 +4569,7 @@ msgstr ""
 "Podtržítka nebo řetězec „%20“ budou nahrazovány jednou mezerou. Příklad "
 "před: „Text%20v%20nějaké_položce“ a po: „Text v nějaké položce“."
 
-#: ../src/scan.c:2359
+#: ../src/scan_dialog.c:2180
 msgid ""
 "The space character is replaced by one underscore character. Example, "
 "before: 'Text In An Entry', after: 'Text_In_An_Entry'."
@@ -4593,38 +4577,38 @@ msgstr ""
 "Mezera bude nahrazována jedním podtržítkem. Příklad před: „Text v nějaké "
 "položce“ a po: „Text_v_nějaké_položce“."
 
-#: ../src/scan.c:2362
+#: ../src/scan_dialog.c:2183
 msgid ""
 "Replace a string by another one. Note that the search is case sensitive."
 msgstr ""
 "Nahradit jeden řetězec jiným řetězcem. Upozorňujeme, že se při hledání "
 "rozlišuje velikost písmen."
 
-#: ../src/scan.c:2369
+#: ../src/scan_dialog.c:2190
 msgid "Capitalize all"
 msgstr "Vše na velká písmena"
 
-#: ../src/scan.c:2371
+#: ../src/scan_dialog.c:2192
 msgid "Lowercase all"
 msgstr "Vše na malá písmena"
 
-#: ../src/scan.c:2373
+#: ../src/scan_dialog.c:2194
 msgid "Capitalize first letter"
 msgstr "První písmeno na velké"
 
-#: ../src/scan.c:2375
+#: ../src/scan_dialog.c:2196
 msgid "Capitalize the first letter of each word"
 msgstr "První písmeno každého slova na velké"
 
-#: ../src/scan.c:2376
+#: ../src/scan_dialog.c:2197
 msgid "Detect Roman numerals"
 msgstr "Zjištěny římské číslice"
 
-#: ../src/scan.c:2378
+#: ../src/scan_dialog.c:2199
 msgid "Do not change capitalization"
 msgstr "Neměnit velikost písmen"
 
-#: ../src/scan.c:2400
+#: ../src/scan_dialog.c:2236
 msgid ""
 "Convert all words in all fields to upper case. Example, before: 'Text IN AN "
 "entry', after: 'TEXT IN AN ENTRY'."
@@ -4632,7 +4616,7 @@ msgstr ""
 "Převést všechna slova ve všech polích na velká písmena. Příklad před: „Text "
 "V NĚJAKÉM poli“ a po: „TEXT V NĚJAKÉM POLI“."
 
-#: ../src/scan.c:2403
+#: ../src/scan_dialog.c:2239
 msgid ""
 "Convert all words in all fields to lower case. Example, before: 'TEXT IN an "
 "entry', after: 'text in an entry'."
@@ -4640,7 +4624,7 @@ msgstr ""
 "Převést všechna slova ve všech polích na malá písmena. Příklad před: „TEXT V "
 "nějakém poli“ a po: „text v nějakém poli“."
 
-#: ../src/scan.c:2406
+#: ../src/scan_dialog.c:2242
 msgid ""
 "Convert the initial of the first word in all fields to upper case. Example, "
 "before: 'text IN An ENTRY', after: 'Text in an entry'."
@@ -4648,7 +4632,7 @@ msgstr ""
 "Převést první písmeno u prvních slov ve všech polích na velké písmeno. "
 "Příklad před: „text V Nějakém POLI“ a po: „Text v nějakém poli“."
 
-#: ../src/scan.c:2409
+#: ../src/scan_dialog.c:2245
 msgid ""
 "Convert the initial of each word in all fields to upper case. Example, "
 "before: 'Text in an ENTRY', after: 'Text In An Entry'."
@@ -4656,7 +4640,7 @@ msgstr ""
 "Převést první písmeno u každého slova ve všech polích na velké písmeno. "
 "Příklad před: „Text v nějakém POLI“ a po: „Text V Nějakém Poli“."
 
-#: ../src/scan.c:2412
+#: ../src/scan_dialog.c:2248
 msgid ""
 "Force to convert to upper case the Roman numerals. Example, before: 'ix. "
 "text in an entry', after: 'IX. Text In An Entry'."
@@ -4664,19 +4648,19 @@ msgstr ""
 "Vynutit převod na velká písmena u římských číslic. Příklad před: „ix. text v "
 "nějakém poli“ a po: „IX. text v nějakém poli“."
 
-#: ../src/scan.c:2420
+#: ../src/scan_dialog.c:2256
 msgid "Insert a space before uppercase letters"
 msgstr "Vložit mezeru před velká písmena"
 
-#: ../src/scan.c:2422
+#: ../src/scan_dialog.c:2258
 msgid "Remove duplicate spaces and underscores"
 msgstr "Odstranit zdvojené mezery a podtržítka"
 
-#: ../src/scan.c:2424
+#: ../src/scan_dialog.c:2260
 msgid "Do not change word separators"
 msgstr "Neměnit oddělovače slov"
 
-#: ../src/scan.c:2438
+#: ../src/scan_dialog.c:2282
 msgid ""
 "All spaces between words are removed. Example, before: 'Text In An Entry', "
 "after: 'TextInAnEntry'."
@@ -4684,7 +4668,7 @@ msgstr ""
 "Odstranit všechny mezery mezi slovy. Příklad před: „Text v nějakém poli“ a "
 "po: „TextVNějakémPoli“."
 
-#: ../src/scan.c:2441
+#: ../src/scan_dialog.c:2285
 msgid ""
 "A space is inserted before each upper case letter. Example, before: "
 "'TextInAnEntry', after: 'Text In An Entry'."
@@ -4692,7 +4676,7 @@ msgstr ""
 "Před každé velké písmeno vložit mezeru. Příklad před: „TextVNějakémPoli“ a "
 "po: „Text V Nějakém Poli“."
 
-#: ../src/scan.c:2444
+#: ../src/scan_dialog.c:2288
 msgid ""
 "Duplicate spaces and underscores are removed. Example, before: "
 "'Text__In__An   Entry', after: 'Text_In_An Entry'."
@@ -4703,141 +4687,141 @@ msgstr ""
 #.
 #. * Frame to display codes legend
 #.
-#: ../src/scan.c:2451
+#: ../src/scan_dialog.c:2295
 msgid "Legend"
 msgstr "Legenda"
 
-#: ../src/scan.c:2457
+#: ../src/scan_dialog.c:2301
 #, c-format
 msgid "%a: artist"
 msgstr "%a: umělec"
 
-#: ../src/scan.c:2460
+#: ../src/scan_dialog.c:2304
 msgid "%z: album artist"
 msgstr "%a: umělec alba"
 
-#: ../src/scan.c:2463
+#: ../src/scan_dialog.c:2307
 msgid "%b: album"
 msgstr "%b: album"
 
-#: ../src/scan.c:2466
+#: ../src/scan_dialog.c:2310
 #, c-format
 msgid "%c: comment"
 msgstr "%c: poznámka"
 
-#: ../src/scan.c:2469
+#: ../src/scan_dialog.c:2313
 #, c-format
 msgid "%p: composer"
 msgstr "%p: skladatel"
 
-#: ../src/scan.c:2472
+#: ../src/scan_dialog.c:2316
 msgid "%r: copyright"
 msgstr "%r: copyright"
 
-#: ../src/scan.c:2475
+#: ../src/scan_dialog.c:2319
 #, c-format
 msgid "%d: disc number"
 msgstr "%d: číslo disku"
 
-#: ../src/scan.c:2478
+#: ../src/scan_dialog.c:2322
 #, c-format
 msgid "%e: encoded by"
 msgstr "%e: kódováno pomocí"
 
-#: ../src/scan.c:2481
+#: ../src/scan_dialog.c:2325
 #, c-format
 msgid "%g: genre"
 msgstr "%g: žánr"
 
-#: ../src/scan.c:2484
+#: ../src/scan_dialog.c:2328
 #, c-format
 msgid "%i: ignored"
 msgstr "%i: ignorováno"
 
-#: ../src/scan.c:2487
+#: ../src/scan_dialog.c:2331
 msgid "%l: number of tracks"
 msgstr "%l: počet skladeb"
 
-#: ../src/scan.c:2490
+#: ../src/scan_dialog.c:2334
 #, c-format
 msgid "%o: orig. artist"
 msgstr "%o: původní umělec"
 
-#: ../src/scan.c:2493
+#: ../src/scan_dialog.c:2337
 #, c-format
 msgid "%n: track"
 msgstr "%n: pořadí"
 
-#: ../src/scan.c:2496
+#: ../src/scan_dialog.c:2340
 msgid "%t: title"
 msgstr "%t: název"
 
-#: ../src/scan.c:2499
+#: ../src/scan_dialog.c:2343
 #, c-format
 msgid "%u: URL"
 msgstr "%u: adresa URL"
 
-#: ../src/scan.c:2502
+#: ../src/scan_dialog.c:2346
 #, c-format
 msgid "%x: number of discs"
 msgstr "%x: počet disků"
 
-#: ../src/scan.c:2505
+#: ../src/scan_dialog.c:2349
 msgid "%y: year"
 msgstr "%y: rok"
 
 #.
 #. * Masks Editor
 #.
-#: ../src/scan.c:2512
+#: ../src/scan_dialog.c:2356
 msgid "Mask Editor"
 msgstr "Editor masky"
 
-#: ../src/scan.c:2566
+#: ../src/scan_dialog.c:2410
 msgid "Create New Mask"
 msgstr "Vytvořit novou masku"
 
-#: ../src/scan.c:2576
+#: ../src/scan_dialog.c:2420
 msgid "Move Up this Mask"
 msgstr "Posunout masku nahoru"
 
-#: ../src/scan.c:2586
+#: ../src/scan_dialog.c:2430
 msgid "Move Down this Mask"
 msgstr "Posunout masku dolů"
 
-#: ../src/scan.c:2596
+#: ../src/scan_dialog.c:2440
 msgid "Duplicate Mask"
 msgstr "Duplikovat masku"
 
-#: ../src/scan.c:2606
+#: ../src/scan_dialog.c:2450
 msgid "Add Default Masks"
 msgstr "Přidat výchozí masky"
 
-#: ../src/scan.c:2616
+#: ../src/scan_dialog.c:2460
 msgid "Remove Mask"
 msgstr "Odebrat masku"
 
-#: ../src/scan.c:2626
+#: ../src/scan_dialog.c:2470
 msgid "Save Masks"
 msgstr "Uložit masky"
 
-#: ../src/scan.c:3206
+#: ../src/scan_dialog.c:3050
 msgid "New_mask"
 msgstr "Nová _maska"
 
-#: ../src/scan.c:3245
+#: ../src/scan_dialog.c:3089
 msgid "Copy: No row selected"
 msgstr "Kopírování: Není vybrán žádný řádek"
 
-#: ../src/scan.c:3338
+#: ../src/scan_dialog.c:3182
 msgid "Remove: No row selected"
 msgstr "Odebírání: Není vybrán žádný řádek"
 
-#: ../src/scan.c:3385
+#: ../src/scan_dialog.c:3229
 msgid "Move Up: No row selected"
 msgstr "Posun výš: Není vybrán žádný řádek"
 
-#: ../src/scan.c:3429
+#: ../src/scan_dialog.c:3273
 msgid "Move Down: No row selected"
 msgstr "Posun níž: Není vybrán žádný řádek"
 
diff --git a/po/de.po b/po/de.po
index 500ddbc..474e441 100644
--- a/po/de.po
+++ b/po/de.po
@@ -18,7 +18,7 @@ msgstr ""
 "Project-Id-Version: EasyTAG master\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
 "product=easytag&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2014-04-07 09:21+0000\n"
+"POT-Creation-Date: 2014-06-11 19:50+0000\n"
 "PO-Revision-Date: 2014-04-07 15:47+0100\n"
 "Last-Translator: Wolfgang Stoeggl <c72578 at yahoo.de>\n"
 "Language-Team: Deutsch <gnome-de at gnome.org>\n"
@@ -67,66 +67,52 @@ msgstr "Metadaten von Audio-Dateien bearbeiten"
 msgid "mp3;tag;audio;"
 msgstr "mp3;tag;metainfo;audio;"
 
-#: ../src/about.c:89
-msgid ""
-"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 (at your option) "
-"any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful, but WITHOUT "
-"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
-"FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for "
-"more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License along with "
-"this program. If not, see <http://www.gnu.org/licenses/>."
-msgstr ""
-"Dieses Programm ist freie Software. Sie können es weitergeben und/oder "
-"verändern, solange Sie sich an die Regeln der »GNU General Public License« "
-"halten, so wie sie von der Free Software Foundation festgelegt wurden; "
-"entweder in Version 2 der Lizenz oder (nach Ihrem Ermessen) in jeder neueren "
-"Lizenz.\n"
-"\n"
-"Dieses Programm wurde mit dem Ziel veröffentlicht, dass Sie es nützlich "
-"finden, jedoch OHNE JEGLICHE GARANTIE, sogar ohne eine implizite Garantie "
-"der VERKAUFBARKEIT oder der VERWENDBARKEIT FÃœR EINEN SPEZIELLEN ZWECK. "
-"Schauen Sie für weitere Informationen bitte in der »GNU General Public "
-"License« (GNU GPL) nach.\n"
-"\n"
-"Zusammen mit diesem Programm sollten Sie außerdem eine Kopie der »GNU "
-"General Public License« erhalten haben. Wenn dem nicht so ist, so lesen Sie "
-"bitte <http://www.gnu.org/licenses/>."
+#: ../nautilus-extension/nautilus-easytag.c:229
+msgid "Open in EasyTAG"
+msgstr "In EasyTAG öffnen"
+
+#: ../nautilus-extension/nautilus-easytag.c:230
+msgid "Open the current selected directory in EasyTAG"
+msgstr "Ausgewähltes Verzeichnis in EasyTAG öffnen"
+
+#: ../nautilus-extension/nautilus-easytag.c:247
+msgid "Open with EasyTAG"
+msgstr "Mit EasyTAG öffnen"
+
+#: ../nautilus-extension/nautilus-easytag.c:248
+msgid "Open selected files in EasyTAG"
+msgstr "Ausgewählte Dateien in EasyTAG öffnen"
 
 #. Translators: put your own name here to appear in the about dialog.
-#: ../src/about.c:106
+#: ../src/about.c:89
 msgid "translator-credits"
 msgstr ""
 "Christian Kirbach <Christian.Kirbach at gmail.com>\n"
 "Mario Blättermann <mario.blaettermann at gmail.com>\n"
 "Wolfgang Stöggl <c72578 at yahoo.de>"
 
-#: ../src/about.c:116
+#: ../src/about.c:99
 msgid "View and edit tags in audio files"
 msgstr "Metainformationen in Audio-Dateien ansehen und bearbeiten"
 
-#. g_print(_("Error while opening file: '%s' (%s)."),filename_utf8,g_strerror(errno));
-#: ../src/ape_tag.c:61 ../src/id3v24_tag.c:112 ../src/mp4_header.c:63
-#: ../src/mp4_tag.c:65 ../src/mp4_tag.c:186
+#: ../src/ape_tag.c:61 ../src/id3v24_tag.c:113 ../src/mp4_header.cc:45
+#: ../src/mp4_header.cc:58 ../src/mp4_tag.cc:69 ../src/mp4_tag.cc:85
+#: ../src/mp4_tag.cc:90 ../src/mp4_tag.cc:262 ../src/mp4_tag.cc:278
+#: ../src/mp4_tag.cc:283
 #, c-format
 msgid "Error while opening file: '%s' (%s)."
 msgstr "Fehler beim Öffnen der Datei: »%s« (%s)."
 
-#: ../src/application.c:37
+#: ../src/application.c:32
 msgid "Print the version and exit"
 msgstr "Die Version ausgeben und beenden"
 
-#: ../src/application.c:89
+#: ../src/application.c:84
 #, c-format
 msgid "Website: %s"
 msgstr "Webseite: %s"
 
-#: ../src/application.c:98
+#: ../src/application.c:93
 msgid "- Tag and rename audio files"
 msgstr "- Metainformationen in Audio-Dateien einfügen und diese umbenennen"
 
@@ -381,7 +367,7 @@ msgstr "Letzte Datei"
 msgid "S_can Files"
 msgstr "Dateien einle_sen"
 
-#: ../src/bar.c:225 ../src/scan.c:2008
+#: ../src/bar.c:225 ../src/scan_dialog.c:1818
 msgid "Scan selected files"
 msgstr "Ausgewählte Dateien einlesen"
 
@@ -445,8 +431,8 @@ msgstr "Letzte Änderungen wiederholen"
 msgid "_Quit"
 msgstr "_Beenden"
 
-#: ../src/bar.c:242 ../src/easytag.c:2429 ../src/easytag.c:4565
-#: ../src/easytag.c:4597
+#: ../src/bar.c:242 ../src/easytag.c:2424 ../src/easytag.c:4559
+#: ../src/easytag.c:4591
 msgid "Quit"
 msgstr "Beenden"
 
@@ -740,7 +726,7 @@ msgstr "Datei und Ordner umbenennen"
 msgid "_Process Fields…"
 msgstr "Felder _verarbeiten …"
 
-#: ../src/bar.c:370 ../src/scan.c:182
+#: ../src/bar.c:370 ../src/scan_dialog.c:184
 msgid "Process Fields"
 msgstr "Felder verarbeiten"
 
@@ -749,7 +735,7 @@ msgstr "Felder verarbeiten"
 msgid "Could not merge UI, error was: %s\n"
 msgstr "Oberfläche konnte nicht verschmolzen werden, der Fehler war: %s\n"
 
-#: ../src/bar.c:533
+#: ../src/bar.c:535
 msgid "Ready to start"
 msgstr "Bereit zum Start"
 
@@ -757,7 +743,7 @@ msgstr "Bereit zum Start"
 msgid "New default path for files selected"
 msgstr "Neuer Vorgabepfad für Dateien ausgewählt"
 
-#: ../src/browser.c:678 ../src/easytag.c:4561
+#: ../src/browser.c:678 ../src/easytag.c:4555
 msgid "Some files have been modified but not saved"
 msgstr "Einige Dateien wurden geändert, aber noch nicht gespeichert"
 
@@ -769,103 +755,103 @@ msgstr "Wollen Sie diese vor dem Wechseln des Ordners speichern?"
 msgid "Confirm Directory Change"
 msgstr "Ordnerwechsel bestätigen"
 
-#: ../src/browser.c:2146
+#: ../src/browser.c:2152
 msgid "<All albums>"
 msgstr "<Alle Alben>"
 
-#: ../src/browser.c:2607
+#: ../src/browser.c:2613
 #, c-format
 msgid "Error: Searching for %s, could not find node %s in tree."
 msgstr ""
 "Fehler: Bei der Suche nach %s konnte der Knoten %s nicht im Baum gefunden "
 "werden."
 
-#: ../src/browser.c:3101 ../src/browser.c:3179
+#: ../src/browser.c:3107 ../src/browser.c:3185
 msgid "Tree"
 msgstr "Baum"
 
-#: ../src/browser.c:3102 ../src/cddb.c:803 ../src/misc.c:1902
+#: ../src/browser.c:3108 ../src/cddb.c:803 ../src/misc.c:1899
 msgid "Filename"
 msgstr "Dateiname"
 
-#: ../src/browser.c:3102 ../src/cddb.c:804 ../src/misc.c:1903
+#: ../src/browser.c:3108 ../src/cddb.c:804 ../src/misc.c:1900
 #: ../src/prefs.c:643
 msgid "Title"
 msgstr "Titel"
 
 #. Translators: This option is for the previous 'search in' option. For
 #. * instance, translate this as "Search in:" "Artist".
-#: ../src/browser.c:3103 ../src/browser.c:3110 ../src/cddb.c:483
-#: ../src/cddb.c:805 ../src/misc.c:1904 ../src/prefs.c:644
+#: ../src/browser.c:3109 ../src/browser.c:3116 ../src/cddb.c:483
+#: ../src/cddb.c:805 ../src/misc.c:1901 ../src/prefs.c:644
 msgid "Artist"
 msgstr "Künstler"
 
-#: ../src/browser.c:3103 ../src/misc.c:1905
+#: ../src/browser.c:3109 ../src/misc.c:1902
 msgid "Album Artist"
 msgstr "Künstler de Albums"
 
 #. Translators: This option is for the previous 'search in' option. For
 #. * instance, translate this as "Search in:" "Album".
-#: ../src/browser.c:3104 ../src/browser.c:3112 ../src/cddb.c:486
-#: ../src/cddb.c:806 ../src/misc.c:1906 ../src/prefs.c:645
+#: ../src/browser.c:3110 ../src/browser.c:3118 ../src/cddb.c:486
+#: ../src/cddb.c:806 ../src/misc.c:1903 ../src/prefs.c:645
 msgid "Album"
 msgstr "Album"
 
-#: ../src/browser.c:3104 ../src/cddb.c:807 ../src/misc.c:1908
+#: ../src/browser.c:3110 ../src/cddb.c:807 ../src/misc.c:1905
 msgid "Year"
 msgstr "Jahr"
 
-#: ../src/browser.c:3104
+#: ../src/browser.c:3110
 msgid "Disc"
 msgstr "Medium"
 
-#: ../src/browser.c:3105 ../src/misc.c:1909
+#: ../src/browser.c:3111 ../src/misc.c:1906
 msgid "Track"
 msgstr "Titel"
 
-#: ../src/browser.c:3105 ../src/cddb.c:810 ../src/misc.c:1910
+#: ../src/browser.c:3111 ../src/cddb.c:810 ../src/misc.c:1907
 #: ../src/prefs.c:646
 msgid "Genre"
 msgstr "Genre"
 
-#: ../src/browser.c:3106 ../src/misc.c:1911 ../src/prefs.c:647
+#: ../src/browser.c:3112 ../src/misc.c:1908 ../src/prefs.c:647
 msgid "Comment"
 msgstr "Kommentar"
 
-#: ../src/browser.c:3106 ../src/misc.c:1912 ../src/picture.c:1059
+#: ../src/browser.c:3112 ../src/misc.c:1909 ../src/picture.c:884
 #: ../src/prefs.c:648
 msgid "Composer"
 msgstr "Komponist"
 
-#: ../src/browser.c:3107 ../src/misc.c:1913
+#: ../src/browser.c:3113 ../src/misc.c:1910
 msgid "Original Artist"
 msgstr "Originalkünstler"
 
-#: ../src/browser.c:3108 ../src/misc.c:1914
+#: ../src/browser.c:3114 ../src/misc.c:1911
 msgid "Copyright"
 msgstr "Copyright"
 
-#: ../src/browser.c:3108 ../src/misc.c:1915
+#: ../src/browser.c:3114 ../src/misc.c:1912
 msgid "URL"
 msgstr "Adresse"
 
-#: ../src/browser.c:3109 ../src/misc.c:1916
+#: ../src/browser.c:3115 ../src/misc.c:1913
 msgid "Encoded By"
 msgstr "Kodiert mit"
 
-#: ../src/browser.c:3110
+#: ../src/browser.c:3116
 msgid "# Albums"
 msgstr "# Alben"
 
-#: ../src/browser.c:3111 ../src/browser.c:3112
+#: ../src/browser.c:3117 ../src/browser.c:3118
 msgid "# Files"
 msgstr "# Dateien"
 
-#: ../src/browser.c:3137
+#: ../src/browser.c:3143
 msgid "Enter a directory to browse."
 msgstr "Geben Sie den zu durchsuchenden Ordner an."
 
-#: ../src/browser.c:3146
+#: ../src/browser.c:3152
 msgid "Select a directory to browse."
 msgstr "Wählen Sie einen Ordner zum Durchsuchen aus."
 
@@ -873,33 +859,33 @@ msgstr "Wählen Sie einen Ordner zum Durchsuchen aus."
 #. * The label for displaying number of files in path (without subdirs)
 #.
 #. Translators: No files, as in "0 files".
-#: ../src/browser.c:3153 ../src/easytag.c:3468
+#: ../src/browser.c:3159 ../src/easytag.c:3463
 msgid "No files"
 msgstr "Keine Dateien"
 
-#: ../src/browser.c:3231
+#: ../src/browser.c:3237
 msgid "Artist & Album"
 msgstr "Künstler und Album"
 
 #. Only directories changed
-#: ../src/browser.c:3595 ../src/easytag.c:2880
+#: ../src/browser.c:3601 ../src/easytag.c:2875
 msgid "Rename Directory"
 msgstr "Ordner umbenennen"
 
-#: ../src/browser.c:3617
+#: ../src/browser.c:3623
 #, c-format
 msgid "Rename the directory '%s' to:"
 msgstr "Ordner »%s« umbenennen in:"
 
-#: ../src/browser.c:3636 ../src/misc.c:1171
+#: ../src/browser.c:3642 ../src/misc.c:1168
 msgid "Use mask:"
 msgstr "Maske verwenden:"
 
-#: ../src/browser.c:3639
+#: ../src/browser.c:3645
 msgid "If activated, it will use masks to rename directory."
 msgstr "Falls aktiviert, werden Masken zur Umbenennung des Ordners verwendet."
 
-#: ../src/browser.c:3657
+#: ../src/browser.c:3663
 msgid ""
 "Select or type in a mask using codes (see Legend in Scanner Window) to "
 "rename the directory from tag fields."
@@ -908,64 +894,64 @@ msgstr ""
 "Scanner), um den Ordner aus Metainfo-Feldern umzubenennen."
 
 #. Preview label
-#: ../src/browser.c:3681
+#: ../src/browser.c:3687
 msgid "Rename directory preview"
 msgstr "Vorschau der Ordnerumbenennung"
 
-#: ../src/browser.c:3773
+#: ../src/browser.c:3779
 msgid "You must type a directory name"
 msgstr "Sie müssen einen Ordnernamen eingeben"
 
-#: ../src/browser.c:3774 ../src/browser.c:3795
+#: ../src/browser.c:3780 ../src/browser.c:3801
 msgid "Directory Name Error"
 msgstr "Fehler im Ordnernamen"
 
-#: ../src/browser.c:3792
+#: ../src/browser.c:3798
 #, c-format
 msgid "Could not convert '%s' into filename encoding."
 msgstr "»%s« konnte nicht in die Dateinamenskodierung umgewandelt werden."
 
-#: ../src/browser.c:3794
+#: ../src/browser.c:3800
 msgid "Please use another name"
 msgstr "Bitte verwenden Sie einen anderen Namen"
 
-#: ../src/browser.c:3864
+#: ../src/browser.c:3870
 #, c-format
 msgid "The directory name '%s' already exists"
 msgstr "Der Ordnername »%s« existiert bereits"
 
-#: ../src/browser.c:3865 ../src/easytag.c:2963
+#: ../src/browser.c:3871 ../src/easytag.c:2958
 msgid "Rename File Error"
 msgstr "Fehler beim Umbenennen der Datei"
 
-#: ../src/browser.c:3903 ../src/browser.c:3932
+#: ../src/browser.c:3909 ../src/browser.c:3938
 msgid "Rename Directory Error"
 msgstr "Fehler beim Umbenennen des Ordners"
 
-#: ../src/browser.c:3970
+#: ../src/browser.c:3976
 msgid "Directory renamed"
 msgstr "Ordner umbenannt"
 
-#: ../src/browser.c:4006
+#: ../src/browser.c:4012
 msgid "Browse Directory With"
 msgstr "Ordner durchsuchen mit"
 
-#: ../src/browser.c:4022 ../src/browser.c:4148
+#: ../src/browser.c:4028 ../src/browser.c:4154
 msgid "Program to run:"
 msgstr "Auszuführendes Programm:"
 
-#: ../src/browser.c:4034
+#: ../src/browser.c:4040
 msgid ""
 "Enter the program to run. It will receive the current directory as parameter."
 msgstr ""
 "Gib den Namen des Programms an, das gestartet werden soll. Es wird der "
 "aktuelle Ordner als Parameter verwendet."
 
-#: ../src/browser.c:4128
+#: ../src/browser.c:4134
 msgid "Open Files With"
 msgstr "Dateien öffnen mit"
 
-#: ../src/browser.c:4160
+#: ../src/browser.c:4166
 msgid ""
 "Enter the program to run. It will receive the current file as parameter."
 msgstr ""
@@ -1062,7 +1048,7 @@ msgstr "Alle Felder"
 
 #. Translators: This option is for the previous 'search in' option. For
 #. * instance, translate this as "Search in:" "Other".
-#: ../src/cddb.c:492 ../src/picture.c:1037 ../src/prefs.c:807
+#: ../src/cddb.c:492 ../src/picture.c:862 ../src/prefs.c:807
 msgid "Other"
 msgstr "Andere"
 
@@ -1156,7 +1142,7 @@ msgstr "Kategorien"
 msgid "Results:"
 msgstr "Ergebnisse:"
 
-#: ../src/cddb.c:606 ../src/misc.c:1950
+#: ../src/cddb.c:606 ../src/misc.c:1947
 msgid "Search:"
 msgstr "Suche:"
 
@@ -1220,7 +1206,7 @@ msgid "# Tracks"
 msgstr "# Titel"
 
 #. Check box to run the scanner
-#: ../src/cddb.c:847 ../src/misc.c:2991
+#: ../src/cddb.c:847 ../src/misc.c:2988
 msgid "Run the current scanner for each file"
 msgstr "Aktuellen Scanner für alle Dateien ausführen"
 
@@ -1652,46 +1638,46 @@ msgid "The string '%s' couldn't be converted into UTF-8 (%s)."
 msgstr "Die Zeichenkette »%s« konnte nicht nach UTF-8 konvertiert werden (%s)."
 
 #. Starting messages
-#: ../src/easytag.c:184
+#: ../src/easytag.c:185
 #, c-format
 msgid "Starting EasyTAG version %s (PID: %d)…"
 msgstr "EasyTAG %s wird gestartet (PID: %d) …"
 
-#: ../src/easytag.c:186
+#: ../src/easytag.c:187
 #, c-format
 msgid "Using libid3tag version %s"
 msgstr "Es wird libid3tag Version %s verwendet"
 
-#: ../src/easytag.c:189
+#: ../src/easytag.c:190
 #, c-format
 msgid "Using id3lib version %d.%d.%d"
 msgstr "Es wird id3lib Version %d.%d.%d verwendet"
 
-#: ../src/easytag.c:195
+#: ../src/easytag.c:196
 #, c-format
 msgid "Variable EASYTAGLANG defined. Setting locale: '%s'"
 msgstr "Variable EASYTAGLANG definiert. Sprache wird festgelegt: »%s«"
 
-#: ../src/easytag.c:197
+#: ../src/easytag.c:198
 #, c-format
 msgid "Setting locale: '%s'"
 msgstr "Sprache wird festgelegt: »%s«"
 
-#: ../src/easytag.c:202
+#: ../src/easytag.c:203
 #, c-format
 msgid "Currently using locale '%s' (and eventually '%s')"
 msgstr "Momentan wird die Spracheinstellung »%s« verwendet (letztendlich »%s«)"
 
-#: ../src/easytag.c:209
+#: ../src/easytag.c:210
 msgid "Unable to create setting directories"
 msgstr "Konfigurationsordner können nicht angelegt werden"
 
-#: ../src/easytag.c:426 ../src/et_core.c:597 ../src/et_core.c:609
+#: ../src/easytag.c:427 ../src/et_core.c:638 ../src/et_core.c:650
 #, c-format
 msgid "Error while querying information for file: '%s' (%s)"
 msgstr "Fehler beim Abfragen von Informationen für die Datei: »%s« (%s)"
 
-#: ../src/easytag.c:489
+#: ../src/easytag.c:490
 #, c-format
 msgid "Cannot open path '%s'"
 msgstr "Pfad »%s« kann nicht geöffnet werden"
@@ -1699,11 +1685,11 @@ msgstr "Pfad »%s« kann nicht geöffnet werden"
 #.
 #. * Browser
 #.
-#: ../src/easytag.c:581 ../src/prefs.c:142
+#: ../src/easytag.c:583 ../src/prefs.c:142
 msgid "Browser"
 msgstr "Auswahl"
 
-#: ../src/easytag.c:603 ../src/et_core.c:2817
+#: ../src/easytag.c:605 ../src/et_core.c:2858
 msgid "File"
 msgstr "Datei"
 
@@ -1713,103 +1699,103 @@ msgstr "Datei"
 #. gtk_label_set_text(GTK_LABEL(VersionValueLabel),"");
 #. Version changed to encoder version
 #. Encoder version
-#: ../src/easytag.c:635 ../src/easytag.c:4231 ../src/flac_header.c:201
+#: ../src/easytag.c:637 ../src/easytag.c:4226 ../src/flac_header.c:201
 #: ../src/monkeyaudio_header.c:96 ../src/musepack_header.c:98
 #: ../src/ogg_header.c:389 ../src/opus_header.c:221 ../src/wavpack_header.c:72
 #, c-format
 msgid "Encoder:"
 msgstr "Encoder:"
 
-#: ../src/easytag.c:643
+#: ../src/easytag.c:645
 msgid "Bitrate:"
 msgstr "Bitrate:"
 
 #. Translators: Please try to keep this string as short as possible as it
 #. * is shown in a narrow column.
-#: ../src/easytag.c:653
+#: ../src/easytag.c:655
 msgid "Frequency:"
 msgstr "Frequenz:"
 
 #. Mode
-#: ../src/easytag.c:664 ../src/easytag.c:4235 ../src/mpeg_header.c:216
+#: ../src/easytag.c:666 ../src/easytag.c:4230 ../src/mpeg_header.c:216
 msgid "Mode:"
 msgstr "Modus:"
 
-#: ../src/easytag.c:671
+#: ../src/easytag.c:673
 msgid "Size:"
 msgstr "Größe:"
 
-#: ../src/easytag.c:678
+#: ../src/easytag.c:680
 msgid "Duration:"
 msgstr "Dauer:"
 
 #. Main Frame
-#: ../src/easytag.c:725 ../src/et_core.c:2747
+#: ../src/easytag.c:726 ../src/et_core.c:2788
 msgid "Tag"
 msgstr "Metainfo"
 
 #.
 #. * 1 - Page for common tag fields
 #.
-#: ../src/easytag.c:747
+#: ../src/easytag.c:748
 msgid "Common"
 msgstr "Allgemein"
 
 #. Title
-#: ../src/easytag.c:754
+#: ../src/easytag.c:755
 msgid "Title:"
 msgstr "Titel:"
 
-#: ../src/easytag.c:768
+#: ../src/easytag.c:769
 msgid "Tag selected files with this title"
 msgstr "Diesen Titel in allen ausgewählten Dateien eintragen"
 
 #. Artist
-#: ../src/easytag.c:773
+#: ../src/easytag.c:774
 msgid "Artist:"
 msgstr "Künstler:"
 
-#: ../src/easytag.c:787
+#: ../src/easytag.c:788
 msgid "Tag selected files with this artist"
 msgstr "Diesen Künstler in allen ausgewählten Dateien eintragen"
 
 #. Album Artist
-#: ../src/easytag.c:792
+#: ../src/easytag.c:793
 msgid "Album artist:"
 msgstr "Alben-Künstler:"
 
-#: ../src/easytag.c:806
+#: ../src/easytag.c:807
 msgid "Tag selected files with this album artist"
 msgstr "Diesen Alben-Künstler in allen ausgewählten Dateien eintragen"
 
 #. Album
-#: ../src/easytag.c:811
+#: ../src/easytag.c:812
 msgid "Album:"
 msgstr "Album:"
 
-#: ../src/easytag.c:825
+#: ../src/easytag.c:826
 msgid "Tag selected files with this album name"
 msgstr "Diesen Albumnamen in allen ausgewählten Dateien eintragen"
 
 #. Disc Number
-#: ../src/easytag.c:830
+#: ../src/easytag.c:831
 msgid "CD:"
 msgstr "CD:"
 
-#: ../src/easytag.c:847
+#: ../src/easytag.c:848
 msgid "Tag selected files with this disc number"
 msgstr "Diese CD-Nummer in allen ausgewählten Dateien eintragen"
 
 #. Year
-#: ../src/easytag.c:852
+#: ../src/easytag.c:853
 msgid "Year:"
 msgstr "Jahr:"
 
-#: ../src/easytag.c:872
+#: ../src/easytag.c:873
 msgid "Tag selected files with this year"
 msgstr "Dieses Jahr in allen ausgewählten Dateien eintragen"
 
-#: ../src/easytag.c:886
+#: ../src/easytag.c:887
 msgid "Number selected tracks sequentially. Starts at 01 in each subdirectory."
 msgstr ""
 "Alle ausgewählten Titel sequenziell durchnummerieren. Beginnt mit 01 in "
@@ -1817,11 +1803,11 @@ msgstr ""
 
 #. To have enough space to display the icon
 #. To have enough space to display the icon
-#: ../src/easytag.c:895
+#: ../src/easytag.c:896
 msgid "Track #:"
 msgstr "Titel #:"
 
-#: ../src/easytag.c:926
+#: ../src/easytag.c:927
 msgid ""
 "Set the number of files, in the same directory of the displayed file, to the "
 "selected tracks."
@@ -1829,79 +1815,79 @@ msgstr ""
 "Fügt die Anzahl der Dateien, die in dem gleichen Ordner wie die aktuelle "
 "Datei sind, den ausgewählten Dateien hinzu."
 
-#: ../src/easytag.c:946
+#: ../src/easytag.c:947
 msgid "Tag selected files with this number of tracks"
 msgstr "Diese Gesamtzahl an Titeln in allen ausgewählten Dateien eintragen"
 
 #. Genre
-#: ../src/easytag.c:950
+#: ../src/easytag.c:951
 msgid "Genre:"
 msgstr "Genre:"
 
-#: ../src/easytag.c:978
+#: ../src/easytag.c:979
 msgid "Tag selected files with this genre"
 msgstr "Dieses Genre in allen ausgewählten Dateien eintragen"
 
 #. Comment
-#: ../src/easytag.c:983
+#: ../src/easytag.c:984
 msgid "Comment:"
 msgstr "Kommentar:"
 
-#: ../src/easytag.c:1010
+#: ../src/easytag.c:1011
 msgid "Tag selected files with this comment"
 msgstr "Diesen Kommentar in allen ausgewählten Dateien eintragen"
 
 #. Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(CommentView));
 #. Composer (name of the composers)
-#: ../src/easytag.c:1017
+#: ../src/easytag.c:1018
 msgid "Composer:"
 msgstr "Komponist:"
 
-#: ../src/easytag.c:1031
+#: ../src/easytag.c:1032
 msgid "Tag selected files with this composer"
 msgstr "Diesen Komponisten in allen ausgewählten Dateien eintragen"
 
 #. Translators: Original Artist / Performer. Please try to keep this string
 #. * as short as possible, as it must fit into a narrow column.
-#: ../src/easytag.c:1038
+#: ../src/easytag.c:1039
 msgid "Orig. artist:"
 msgstr "Originalkünstler:"
 
-#: ../src/easytag.c:1052
+#: ../src/easytag.c:1053
 msgid "Tag selected files with this original artist"
 msgstr "Diesen Originalkünstler in allen ausgewählten Dateien eintragen"
 
 #. Copyright
-#: ../src/easytag.c:1058
+#: ../src/easytag.c:1059
 msgid "Copyright:"
 msgstr "Copyright:"
 
-#: ../src/easytag.c:1072
+#: ../src/easytag.c:1073
 msgid "Tag selected files with this copyright"
 msgstr "Dieses Copyright in allen ausgewählten Dateien eintragen"
 
 #. URL
-#: ../src/easytag.c:1078
+#: ../src/easytag.c:1079
 msgid "URL:"
 msgstr "URL:"
 
-#: ../src/easytag.c:1092
+#: ../src/easytag.c:1093
 msgid "Tag selected files with this URL"
 msgstr "Diese URL in allen ausgewählten Dateien eintragen"
 
 #. Encoded by
-#: ../src/easytag.c:1098
+#: ../src/easytag.c:1099
 msgid "Encoded by:"
 msgstr "Kodierer:"
 
-#: ../src/easytag.c:1112
+#: ../src/easytag.c:1113
 msgid "Tag selected files with this encoder name"
 msgstr "Diesen Kodierer in allen ausgewählten Dateien eintragen"
 
 #.
 #. * 2 - Page for extra tag fields
 #.
-#: ../src/easytag.c:1146 ../src/et_core.c:3189 ../src/et_core.c:3192
+#: ../src/easytag.c:1146 ../src/et_core.c:3230 ../src/et_core.c:3233
 msgid "Images"
 msgstr "Bilder"
 
@@ -1909,556 +1895,556 @@ msgstr "Bilder"
 msgid "You can use drag and drop to add an image"
 msgstr "Sie können Bilder durch Ziehen und Ablegen hinzufügen"
 
-#: ../src/easytag.c:1217
+#: ../src/easytag.c:1219
 msgid "Add images to the tag"
 msgstr "Bilder der Metainfo hinzufügen"
 
-#: ../src/easytag.c:1235
+#: ../src/easytag.c:1237
 msgid "Remove selected images from the tag"
 msgstr "Die gewählten Bilder aus der Metainfo entfernen"
 
-#: ../src/easytag.c:1249
+#: ../src/easytag.c:1248
 msgid "Save the selected images to files"
 msgstr "Ausgewählte Bilder als Dateien speichern"
 
-#: ../src/easytag.c:1260
+#: ../src/easytag.c:1259
 msgid "Edit image properties"
 msgstr "Bildeigenschaften bearbeiten"
 
-#: ../src/easytag.c:1274
+#: ../src/easytag.c:1270
 msgid "Tag selected files with these images"
 msgstr "Diese Bilder in allen ausgewählten Dateien eintragen"
 
-#: ../src/easytag.c:1332
+#: ../src/easytag.c:1328
 #, c-format
 msgid "Selected files tagged with title '%s'."
 msgstr "In allen ausgewählten Dateien wurde der Titel »%s« eingetragen."
 
-#: ../src/easytag.c:1334
+#: ../src/easytag.c:1330
 msgid "Removed title from selected files."
 msgstr "Dieser Titel wurde aus allen ausgewählten Dateien entfernt."
 
-#: ../src/easytag.c:1349
+#: ../src/easytag.c:1345
 #, c-format
 msgid "Selected files tagged with artist '%s'."
 msgstr "Künstler »%s« wurde in allen ausgewählten Dateien eingetragen."
 
-#: ../src/easytag.c:1351
+#: ../src/easytag.c:1347
 msgid "Removed artist from selected files."
 msgstr "Künstler wurde(n) aus allen ausgewählten Dateien entfernt."
 
-#: ../src/easytag.c:1365
+#: ../src/easytag.c:1361
 #, c-format
 msgid "Selected files tagged with album artist '%s'."
 msgstr "Künstler »%s« wurde in allen ausgewählten Dateien eingetragen."
 
-#: ../src/easytag.c:1367
+#: ../src/easytag.c:1363
 msgid "Removed album artist from selected files."
 msgstr "Alben-Künstler wurde aus allen ausgewählten Dateien entfernt."
 
-#: ../src/easytag.c:1382
+#: ../src/easytag.c:1378
 #, c-format
 msgid "Selected files tagged with album '%s'."
 msgstr "Album »%s« wurde in allen ausgewählten Dateien eingetragen."
 
-#: ../src/easytag.c:1384
+#: ../src/easytag.c:1380
 msgid "Removed album name from selected files."
 msgstr "Albumname wurde aus allen ausgewählten Dateien entfernt."
 
-#: ../src/easytag.c:1421
+#: ../src/easytag.c:1417
 #, c-format
 msgid "Selected files tagged with disc number '%s/%s'."
 msgstr "CD-Nummer »%s/%s« wurde in allen ausgewählten Dateien eingetragen."
 
-#: ../src/easytag.c:1426
+#: ../src/easytag.c:1422
 #, c-format
 msgid "Selected files tagged with disc number like 'xx'."
 msgstr "CD-Nummer »xx« wurde in allen ausgewählten Dateien eingetragen."
 
-#: ../src/easytag.c:1431
+#: ../src/easytag.c:1427
 msgid "Removed disc number from selected files."
 msgstr "CD-Nummer aus allen ausgewählten Dateien entfernt."
 
-#: ../src/easytag.c:1447
+#: ../src/easytag.c:1443
 #, c-format
 msgid "Selected files tagged with year '%s'."
 msgstr "Jahr »%s« wurde in allen ausgewählten Dateien eingetragen."
 
-#: ../src/easytag.c:1449
+#: ../src/easytag.c:1445
 msgid "Removed year from selected files."
 msgstr "Jahr wurde aus allen ausgewählten Dateien entfernt."
 
-#: ../src/easytag.c:1475 ../src/easytag.c:1566
+#: ../src/easytag.c:1471 ../src/easytag.c:1561
 #, c-format
 msgid "Selected files tagged with track like 'xx/%s'."
 msgstr ""
 "In allen ausgewählten Dateien wurden Titelnummern wie »xx/%s« eingetragen."
 
-#: ../src/easytag.c:1478
+#: ../src/easytag.c:1474
 #, c-format
 msgid "Selected files tagged with track like 'xx'."
 msgstr ""
 "In allen ausgewählten Dateien wurden Titelnummern wie »xx« eingetragen."
 
-#: ../src/easytag.c:1482 ../src/easytag.c:1569
+#: ../src/easytag.c:1478 ../src/easytag.c:1564
 msgid "Removed track number from selected files."
 msgstr "Titelnummer aus allen ausgewählten Dateien entfernt."
 
 #. msg = g_strdup_printf(_("All %d tracks numbered sequentially."), ETCore->ETFileSelectionList_Length);
-#: ../src/easytag.c:1539
+#: ../src/easytag.c:1534
 #, c-format
 msgid "Selected tracks numbered sequentially."
 msgstr "Alle ausgewählten Titel wurden durchnummeriert."
 
-#: ../src/easytag.c:1585
+#: ../src/easytag.c:1580
 #, c-format
 msgid "Selected files tagged with genre '%s'."
 msgstr "Genre »%s« wurde in allen ausgewählten Dateien eingetragen."
 
-#: ../src/easytag.c:1587
+#: ../src/easytag.c:1582
 msgid "Removed genre from selected files."
 msgstr "Genre wurde aus allen ausgewählten Dateien entfernt."
 
-#: ../src/easytag.c:1609
+#: ../src/easytag.c:1604
 #, c-format
 msgid "Selected files tagged with comment '%s'."
 msgstr "Kommentar »%s« wurde in allen ausgewählten Dateien eingetragen."
 
-#: ../src/easytag.c:1611
+#: ../src/easytag.c:1606
 msgid "Removed comment from selected files."
 msgstr "Kommentar wurde aus allen ausgewählten Dateien entfernt."
 
-#: ../src/easytag.c:1625
+#: ../src/easytag.c:1620
 #, c-format
 msgid "Selected files tagged with composer '%s'."
 msgstr "Komponist »%s« wurde in allen ausgewählten Dateien eingetragen."
 
-#: ../src/easytag.c:1627
+#: ../src/easytag.c:1622
 msgid "Removed composer from selected files."
 msgstr "Komponist wurde aus allen ausgewählten Dateien entfernt."
 
-#: ../src/easytag.c:1642
+#: ../src/easytag.c:1637
 #, c-format
 msgid "Selected files tagged with original artist '%s'."
 msgstr "Originalkünstler »%s« wurde in allen ausgewählten Dateien eingetragen."
 
-#: ../src/easytag.c:1644
+#: ../src/easytag.c:1639
 msgid "Removed original artist from selected files."
 msgstr "Originalkünstler wurde aus allen ausgewählten Dateien entfernt."
 
-#: ../src/easytag.c:1659
+#: ../src/easytag.c:1654
 #, c-format
 msgid "Selected files tagged with copyright '%s'."
 msgstr "Copyright »%s« wurde in allen ausgewählten Dateien eingetragen."
 
-#: ../src/easytag.c:1661
+#: ../src/easytag.c:1656
 msgid "Removed copyright from selected files."
 msgstr "Copyright wurde aus allen ausgewählten Dateien entfernt."
 
-#: ../src/easytag.c:1676
+#: ../src/easytag.c:1671
 #, c-format
 msgid "Selected files tagged with URL '%s'."
 msgstr "URL »%s« wurde in allen ausgewählten Dateien eingetragen."
 
-#: ../src/easytag.c:1678
+#: ../src/easytag.c:1673
 msgid "Removed URL from selected files."
 msgstr "URL wurde aus allen ausgewählten Dateien entfernt."
 
-#: ../src/easytag.c:1693
+#: ../src/easytag.c:1688
 #, c-format
 msgid "Selected files tagged with encoder name '%s'."
 msgstr "Kodierer »%s« wurde in allen ausgewählten Dateien eingetragen."
 
-#: ../src/easytag.c:1695
+#: ../src/easytag.c:1690
 msgid "Removed encoder name from selected files."
 msgstr "Kodierer wurde aus allen ausgewählten Dateien entfernt."
 
-#: ../src/easytag.c:1727
+#: ../src/easytag.c:1722
 msgid "Selected files tagged with images."
 msgstr "In allen ausgewählten Dateien wurden die Bilder eingetragen."
 
-#: ../src/easytag.c:1729
+#: ../src/easytag.c:1724
 msgid "Removed images from selected files."
 msgstr "Bilder wurden aus ausgewählten Dateien entfernt."
 
-#: ../src/easytag.c:2010
+#: ../src/easytag.c:2005
 msgid "Select Mode and Mask, and redo the same action"
 msgstr "Wählen Sie Modus und Maske und wiederholen Sie die Aktion"
 
-#: ../src/easytag.c:2062
+#: ../src/easytag.c:2057
 msgid "All tags have been scanned"
 msgstr "Alle Metainformationen wurden durchsucht"
 
-#: ../src/easytag.c:2118
+#: ../src/easytag.c:2113
 msgid "All tags have been removed"
 msgstr "Alle Metainformationen wurden entfernt"
 
-#: ../src/easytag.c:2423
+#: ../src/easytag.c:2418
 #, c-format
 msgid "A file was changed by an external program"
 msgid_plural "%d files were changed by an external program."
 msgstr[0] "Eine Datei wurde von einem externen Programm geändert"
 msgstr[1] "%d Dateien wurden von einem externen Programm geändert"
 
-#: ../src/easytag.c:2428
+#: ../src/easytag.c:2423
 msgid "Do you want to continue saving the file?"
 msgstr "Wollen Sie die Datei speichern?"
 
-#: ../src/easytag.c:2486 ../src/easytag.c:2506
+#: ../src/easytag.c:2481 ../src/easytag.c:2501
 msgid "Saving files was stopped"
 msgstr "Speichern der Dateien wurde gestoppt"
 
-#: ../src/easytag.c:2508
+#: ../src/easytag.c:2503
 msgid "All files have been saved"
 msgstr "Alle Dateien wurden gespeichert"
 
-#: ../src/easytag.c:2643
+#: ../src/easytag.c:2638
 #, c-format
 msgid "Cannot delete file (%s)"
 msgstr "Datei kann nicht gelöscht werden (%s)"
 
-#: ../src/easytag.c:2664
+#: ../src/easytag.c:2659
 msgid "Files have been partially deleted"
 msgstr "Dateien wurden teilweise gelöscht"
 
-#: ../src/easytag.c:2666
+#: ../src/easytag.c:2661
 msgid "All files have been deleted"
 msgstr "Alle Dateien wurden gelöscht"
 
-#: ../src/easytag.c:2782
+#: ../src/easytag.c:2777
 #, c-format
 msgid "Do you want to write the tag of file '%s'?"
 msgstr "Wollen Sie die Metainfo der Datei »%s« schreiben?"
 
-#: ../src/easytag.c:2784
+#: ../src/easytag.c:2779
 msgid "Confirm Tag Writing"
 msgstr "Schreiben von Metainformationen bestätigen"
 
-#: ../src/easytag.c:2789 ../src/easytag.c:2909 ../src/easytag.c:3172
+#: ../src/easytag.c:2784 ../src/easytag.c:2904 ../src/easytag.c:3167
 msgid "Repeat action for the remaining files"
 msgstr "Aktion für die übrigen Dateien wiederholen"
 
 #. Directories and filename changed
-#: ../src/easytag.c:2873 ../src/scan.c:181
+#: ../src/easytag.c:2868 ../src/scan_dialog.c:183
 msgid "Rename File and Directory"
 msgstr "Datei und Ordner umbenennen"
 
-#: ../src/easytag.c:2874
+#: ../src/easytag.c:2869
 msgid "File and directory rename confirmation required"
 msgstr "Bestätigung zum Umbenennen von Dateien und Ordnern ist erforderlich"
 
-#: ../src/easytag.c:2875
+#: ../src/easytag.c:2870
 #, c-format
 msgid "Do you want to rename the file and directory '%s' to '%s'?"
 msgstr "Wollen Sie die Dateien und den Ordner »%s« in »%s« umbenennen?"
 
-#: ../src/easytag.c:2881
+#: ../src/easytag.c:2876
 msgid "Directory rename confirmation required"
 msgstr "Bestätigung zum Umbenennen von Ordnern ist erforderlich"
 
-#: ../src/easytag.c:2882
+#: ../src/easytag.c:2877
 #, c-format
 msgid "Do you want to rename the directory '%s' to '%s'?"
 msgstr "Wollen Sie den Ordner »%s« in »%s« umbenennen?"
 
 #. Only filename changed
-#: ../src/easytag.c:2888
+#: ../src/easytag.c:2883
 msgid "Rename File"
 msgstr "Datei umbenennen"
 
-#: ../src/easytag.c:2889
+#: ../src/easytag.c:2884
 msgid "File rename confirmation required"
 msgstr "Bestätigung zur Dateiumbenennung ist erforderlich"
 
-#: ../src/easytag.c:2890
+#: ../src/easytag.c:2885
 #, c-format
 msgid "Do you want to rename the file '%s' to '%s'?"
 msgstr "Wollen Sie die Datei »%s« in »%s« umbenennen?"
 
-#: ../src/easytag.c:2956
+#: ../src/easytag.c:2951
 #, c-format
 msgid "Cannot rename file '%s' to '%s'"
 msgstr "Datei »%s« kann nicht in »%s« umbenannt werden"
 
-#: ../src/easytag.c:2970
+#: ../src/easytag.c:2965
 #, c-format
 msgid "Cannot rename file '%s' to '%s': %s"
 msgstr "Datei »%s« kann nicht in »%s« umbenannt werden: %s"
 
-#: ../src/easytag.c:2974
+#: ../src/easytag.c:2969
 msgid "File(s) not renamed"
 msgstr "Datei(en) nicht umbenannt"
 
-#: ../src/easytag.c:3086
+#: ../src/easytag.c:3081
 #, c-format
 msgid "Writing tag of '%s'"
 msgstr "Metainfo von »%s« wird geschrieben"
 
-#: ../src/easytag.c:3093
+#: ../src/easytag.c:3088
 msgid "Tag(s) written"
 msgstr "Metainfo wurde geschrieben"
 
-#: ../src/easytag.c:3108
+#: ../src/easytag.c:3103
 #, c-format
 msgid "Cannot write tag in file '%s' (%s)"
 msgstr "Metainfo kann nicht in Datei »%s« geschrieben werden (%s)"
 
-#: ../src/easytag.c:3121
+#: ../src/easytag.c:3116
 #, c-format
 msgid "Cannot write tag in file '%s'"
 msgstr "Metainfo kann nicht in Datei »%s« geschrieben werden"
 
-#: ../src/easytag.c:3124
+#: ../src/easytag.c:3119
 msgid "Tag Write Error"
 msgstr "Fehler beim Schreiben der Metainfo"
 
-#: ../src/easytag.c:3169 ../src/easytag.c:3183
+#: ../src/easytag.c:3164 ../src/easytag.c:3178
 #, c-format
 msgid "Do you really want to delete the file '%s'?"
 msgstr "Wollen Sie die Datei »%s« wirklich löschen?"
 
-#: ../src/easytag.c:3175 ../src/easytag.c:3185
+#: ../src/easytag.c:3170 ../src/easytag.c:3180
 msgid "Delete File"
 msgstr "Datei löschen"
 
-#: ../src/easytag.c:3210
+#: ../src/easytag.c:3205
 #, c-format
 msgid "File '%s' deleted"
 msgstr "Datei »%s« gelöscht"
 
-#: ../src/easytag.c:3345
+#: ../src/easytag.c:3340
 #, c-format
 msgid "Cannot read directory '%s'"
 msgstr "Der Ordner »%s« kann nicht gelesen werden"
 
-#: ../src/easytag.c:3349
+#: ../src/easytag.c:3344
 msgid "Directory Read Error"
 msgstr "Ordner-Lesefehler"
 
 #. Read the directory recursively
-#: ../src/easytag.c:3370
+#: ../src/easytag.c:3365
 #, c-format
 msgid "Search in progress…"
 msgstr "Suche läuft …"
 
-#: ../src/easytag.c:3393 ../src/et_core.c:2824
+#: ../src/easytag.c:3388 ../src/et_core.c:2865
 #, c-format
 msgid "File: '%s'"
 msgstr "Datei: »%s«"
 
-#: ../src/easytag.c:3443
+#: ../src/easytag.c:3438
 #, c-format
 msgid "Found one file in this directory and subdirectories"
 msgid_plural "Found %d files in this directory and subdirectories"
 msgstr[0] "Eine Datei wurde in diesem Ordner und Unterordnern gefunden"
 msgstr[1] "%d Dateien wurden in diesem Ordner und Unterordnern gefunden"
 
-#: ../src/easytag.c:3450
+#: ../src/easytag.c:3445
 #, c-format
 msgid "Found one file in this directory"
 msgid_plural "Found %d files in this directory"
 msgstr[0] "Eine Datei wurde in diesem Ordner gefunden"
 msgstr[1] "%d Dateien wurde in diesem Ordner gefunden"
 
-#: ../src/easytag.c:3472
+#: ../src/easytag.c:3467
 msgid "No file found in this directory and subdirectories"
 msgstr "Keine Datei in diesem Ordner oder Unterordnern gefunden"
 
-#: ../src/easytag.c:3474
+#: ../src/easytag.c:3469
 msgid "No file found in this directory"
 msgstr "Keine Datei in diesem Ordner gefunden"
 
-#: ../src/easytag.c:3542
+#: ../src/easytag.c:3537
 #, c-format
 msgid "Error opening directory '%s' (%s)"
 msgstr "Fehler beim Öffnen des Ordners »%s« (%s)"
 
-#: ../src/easytag.c:3578
+#: ../src/easytag.c:3573
 #, c-format
 msgid "Cannot read directory (%s)"
 msgstr "Der Ordner kann nicht gelesen werden (%s)"
 
-#: ../src/easytag.c:3598
+#: ../src/easytag.c:3593
 msgid "Searching for audio files…"
 msgstr "Suche nach Audio-Dateien läuft …"
 
-#: ../src/easytag.c:3599
+#: ../src/easytag.c:3594
 msgid "Searching"
 msgstr "Suche läuft …"
 
-#: ../src/easytag.c:4265
+#: ../src/easytag.c:4260
 msgid "Select a directory to browse"
 msgstr "Wählen Sie einen Ordner zum Durchsuchen aus"
 
 #. Menu items
-#: ../src/easytag.c:4412
+#: ../src/easytag.c:4406
 msgid "Tag selected files with this field"
 msgstr "Dieses Feld in allen ausgewählten Dateien eintragen"
 
-#: ../src/easytag.c:4424 ../src/scan.c:2318
+#: ../src/easytag.c:4418 ../src/scan_dialog.c:2128
 msgid "Convert '_' and '%20' to spaces"
 msgstr "»_« und »%20« in Leerzeichen umwandeln"
 
-#: ../src/easytag.c:4431 ../src/scan.c:2320
+#: ../src/easytag.c:4425 ../src/scan_dialog.c:2130
 msgid "Convert ' ' to '_'"
 msgstr "» « in »_« umwandeln"
 
-#: ../src/easytag.c:4442
+#: ../src/easytag.c:4436
 msgid "All uppercase"
 msgstr "Alles groß schreiben"
 
-#: ../src/easytag.c:4449
+#: ../src/easytag.c:4443
 msgid "All lowercase"
 msgstr "Alles klein schreiben"
 
-#: ../src/easytag.c:4456
+#: ../src/easytag.c:4450
 msgid "First letter uppercase"
 msgstr "Ersten Buchstaben groß schreiben"
 
-#: ../src/easytag.c:4463
+#: ../src/easytag.c:4457
 msgid "First letter uppercase of each word"
 msgstr "Der erste Buchstabe jedes Wortes wird groß geschrieben"
 
-#: ../src/easytag.c:4474 ../src/prefs.c:1023 ../src/scan.c:2418
+#: ../src/easytag.c:4468 ../src/prefs.c:1023 ../src/scan_dialog.c:2254
 msgid "Remove spaces"
 msgstr "Leerzeichen entfernen"
 
-#: ../src/easytag.c:4481
+#: ../src/easytag.c:4475
 msgid "Insert space before uppercase letter"
 msgstr "Vor Großbuchstaben ein Leerzeichen einfügen"
 
-#: ../src/easytag.c:4488
+#: ../src/easytag.c:4482
 msgid "Remove duplicate spaces or underscores"
 msgstr "Doppelte Leerzeichen oder Unterstriche entfernen"
 
-#: ../src/easytag.c:4495
+#: ../src/easytag.c:4489
 msgid "Remove all text"
 msgstr "Allen Text entfernen"
 
-#: ../src/easytag.c:4514
+#: ../src/easytag.c:4508
 msgid "EasyTAG: Normal exit."
 msgstr "EasyTAG: Normal beendet."
 
-#: ../src/easytag.c:4566
+#: ../src/easytag.c:4560
 msgid "Do you want to save them before quitting?"
 msgstr "Wollen Sie diese vor dem Beenden speichern?"
 
-#: ../src/easytag.c:4593
+#: ../src/easytag.c:4587
 msgid "Do you really want to quit?"
 msgstr "Möchten Sie das Programm wirklich beenden?"
 
-#: ../src/et_core.c:510
+#: ../src/et_core.c:551
 #, c-format
 msgid "Error reading tag from ogg file (%s)"
 msgstr "Fehler beim Lesen der Metainfo der ogg-Datei (%s)"
 
-#: ../src/et_core.c:539
+#: ../src/et_core.c:580
 #, c-format
 msgid "Error reading tag from Opus file (%s)"
 msgstr "Fehler beim Lesen der Metainfo der Opus-Datei (%s)"
 
-#: ../src/et_core.c:682
+#: ../src/et_core.c:723
 #, c-format
 msgid "Automatic corrections applied for file '%s'."
 msgstr "Automatische Korrekturen wurden für die Datei »%s« angewendet."
 
-#: ../src/et_core.c:2707
+#: ../src/et_core.c:2748
 msgid "ID3 Tag"
 msgstr "ID3-Metainfo"
 
-#: ../src/et_core.c:2713
+#: ../src/et_core.c:2754
 msgid "Ogg Vorbis Tag"
 msgstr "Ogg-Vorbis-Metainfo"
 
-#: ../src/et_core.c:2719
+#: ../src/et_core.c:2760
 msgid "FLAC Vorbis Tag"
 msgstr "FLAC-Vorbis-Metainfo"
 
-#: ../src/et_core.c:2724
+#: ../src/et_core.c:2765
 msgid "APE Tag"
 msgstr "APE-Metainfo"
 
-#: ../src/et_core.c:2729
+#: ../src/et_core.c:2770
 msgid "MP4/M4A/AAC Tag"
 msgstr "MP4/M4A/AAC-Metainfo"
 
-#: ../src/et_core.c:2735
+#: ../src/et_core.c:2776
 msgid "Wavpack Tag"
 msgstr "Wavpack-Metainfo"
 
-#: ../src/et_core.c:2741
+#: ../src/et_core.c:2782
 msgid "Opus Tag"
 msgstr "Opus-Metainfo"
 
-#: ../src/et_core.c:2761
+#: ../src/et_core.c:2802
 msgid "MP3 File"
 msgstr "MP3-Datei"
 
-#: ../src/et_core.c:2765
+#: ../src/et_core.c:2806
 msgid "MP2 File"
 msgstr "MP2-Datei"
 
-#: ../src/et_core.c:2771
+#: ../src/et_core.c:2812
 msgid "Ogg Vorbis File"
 msgstr "Ogg-Vorbis-Datei"
 
-#: ../src/et_core.c:2777
+#: ../src/et_core.c:2818
 msgid "Speex File"
 msgstr "Speex-Datei"
 
-#: ../src/et_core.c:2783
+#: ../src/et_core.c:2824
 msgid "FLAC File"
 msgstr "FLAC-Datei"
 
-#: ../src/et_core.c:2788
+#: ../src/et_core.c:2829
 msgid "MusePack File"
 msgstr "MusePack-Datei"
 
-#: ../src/et_core.c:2792
+#: ../src/et_core.c:2833
 msgid "Monkey's Audio File"
 msgstr "Monkey's-Audio-Datei"
 
-#: ../src/et_core.c:2797
+#: ../src/et_core.c:2838
 msgid "MP4/AAC File"
 msgstr "MP4/AAC-Datei"
 
-#: ../src/et_core.c:2803
+#: ../src/et_core.c:2844
 msgid "Wavpack File"
 msgstr "Wavpack-Datei"
 
-#: ../src/et_core.c:2809
+#: ../src/et_core.c:2850
 msgid "Opus File"
 msgstr "Opus-Datei"
 
-#: ../src/et_core.c:2868 ../src/et_core.c:2923
+#: ../src/et_core.c:2909 ../src/et_core.c:2964
 msgid "File not found"
 msgstr "Datei nicht gefunden"
 
-#: ../src/et_core.c:2873
+#: ../src/et_core.c:2914
 #, c-format
 msgid "Cannot query file information (%s)"
 msgstr "Dateiinformation kann nicht abgefragt werden (%s)"
 
-#: ../src/et_core.c:2907
+#: ../src/et_core.c:2948
 msgid "Read-only file"
 msgstr "Datei ist nur lesbar"
 
 #. And refresh the number of files in this directory
-#: ../src/et_core.c:2971
+#: ../src/et_core.c:3012
 #, c-format
 msgid "One file"
 msgid_plural "%u files"
 msgstr[0] "Eine Datei"
 msgstr[1] "%u Dateien"
 
-#: ../src/et_core.c:3175
+#: ../src/et_core.c:3216
 #, c-format
 msgid "Images (%d)"
 msgstr "Bilder (%d)"
 
 #. Bitrate
-#: ../src/et_core.c:3217 ../src/flac_header.c:205
-#: ../src/monkeyaudio_header.c:86 ../src/mp4_header.c:134
+#: ../src/et_core.c:3258 ../src/flac_header.c:205
+#: ../src/monkeyaudio_header.c:86 ../src/mp4_header.cc:132
 #: ../src/mpeg_header.c:206 ../src/musepack_header.c:88
 #: ../src/ogg_header.c:401 ../src/opus_header.c:227 ../src/wavpack_header.c:78
 #, c-format
@@ -2466,30 +2452,30 @@ msgid "%d kb/s"
 msgstr "%d kb/s"
 
 #. Samplerate
-#: ../src/et_core.c:3222 ../src/flac_header.c:210
-#: ../src/monkeyaudio_header.c:91 ../src/mp4_header.c:139
+#: ../src/et_core.c:3263 ../src/flac_header.c:210
+#: ../src/monkeyaudio_header.c:91 ../src/mp4_header.cc:137
 #: ../src/mpeg_header.c:211 ../src/musepack_header.c:93
 #: ../src/ogg_header.c:406 ../src/opus_header.c:232 ../src/wavpack_header.c:83
 #, c-format
 msgid "%d Hz"
 msgstr "%d Hz"
 
-#: ../src/et_core.c:3368 ../src/scan.c:686
+#: ../src/et_core.c:3409 ../src/scan_dialog.c:688
 #, c-format
 msgid "Could not convert filename '%s' into system filename encoding"
 msgstr ""
 "Dateiname »%s« konnte nicht in die Dateinamenskodierung des Systems "
 "konvertiert werden."
 
-#: ../src/et_core.c:3370
+#: ../src/et_core.c:3411
 msgid "Try setting the environment variable G_FILENAME_ENCODING."
 msgstr "Versuchen Sie, die Umgebungsvariable G_FILENAME_ENCODING festzulegen."
 
-#: ../src/et_core.c:3371 ../src/scan.c:688
+#: ../src/et_core.c:3412 ../src/scan_dialog.c:690
 msgid "Filename translation"
 msgstr "Dateinamensübersetzung"
 
-#: ../src/et_core.c:4076
+#: ../src/et_core.c:4117
 #, c-format
 msgid "Error writing tag type %d to file %s (%s)"
 msgstr "Fehler beim Schreiben von Metainfo-Typ %d in die Datei »%s« (%s)"
@@ -2498,7 +2484,7 @@ msgstr "Fehler beim Schreiben von Metainfo-Typ %d in die Datei »%s« (%s)"
 #. Mode
 #. mpeg4ip library seems to always return -1
 #. Mode
-#: ../src/flac_header.c:215 ../src/mp4_header.c:145 ../src/ogg_header.c:411
+#: ../src/flac_header.c:215 ../src/mp4_header.cc:143 ../src/ogg_header.c:411
 #: ../src/opus_header.c:237 ../src/wavpack_header.c:88
 msgid "Channels:"
 msgstr "Kanäle:"
@@ -2508,7 +2494,7 @@ msgstr "Kanäle:"
 msgid "Error while opening file: '%s' as FLAC (%s)."
 msgstr "Fehler beim Öffnen der Datei: »%s« als FLAC (%s)."
 
-#: ../src/flac_tag.c:352 ../src/ogg_tag.c:310
+#: ../src/flac_tag.c:352 ../src/ogg_tag.c:304
 #, c-format
 msgid ""
 "The year value '%s' seems to be invalid in file '%s'. The information will "
@@ -2528,17 +2514,17 @@ msgid "Error: Failed to write comments to file '%s' (%s)."
 msgstr ""
 "Fehler: Kommentare können nicht in Datei geschrieben werden: »%s« (%s)."
 
-#: ../src/flac_tag.c:1099 ../src/ogg_tag.c:1166
+#: ../src/flac_tag.c:1099 ../src/ogg_tag.c:1161
 #, c-format
 msgid "Written tag of '%s'"
 msgstr "Metainfo von »%s« wurde geschrieben"
 
-#: ../src/id3_tag.c:158
+#: ../src/id3_tag.c:205
 #, c-format
 msgid "Error while reading file: '%s' (%s)"
 msgstr "Fehler beim Lesen der Datei: »%s« (%s)"
 
-#: ../src/id3_tag.c:170
+#: ../src/id3_tag.c:217
 #, c-format
 msgid ""
 "As the following corrupted file '%s' will cause an error in id3lib, it will "
@@ -2547,31 +2533,31 @@ msgstr ""
 "Weil die beschädigte Datei »%s« einen Fehler mit id3lib auslöst, wird sie "
 "nicht bearbeitet."
 
-#: ../src/id3_tag.c:172
+#: ../src/id3_tag.c:219
 msgid "Corrupted file"
 msgstr "Beschädigte Datei"
 
-#: ../src/id3_tag.c:555
+#: ../src/id3_tag.c:592
 #, c-format
 msgid "Removed tag of '%s'"
 msgstr "Metainfo von »%s« wurde entfernt"
 
-#: ../src/id3_tag.c:559 ../src/id3_tag.c:659
+#: ../src/id3_tag.c:596 ../src/id3_tag.c:696
 #, c-format
 msgid "Error while removing ID3v1 tag of '%s' (%s)"
 msgstr "Fehler beim Entfernen der ID3v1-Metainfo von »%s« (%s)"
 
-#: ../src/id3_tag.c:561 ../src/id3_tag.c:631
+#: ../src/id3_tag.c:598 ../src/id3_tag.c:668
 #, c-format
 msgid "Error while removing ID3v2 tag of '%s' (%s)"
 msgstr "Fehler beim Entfernen der ID3v2-Metainfo von »%s« (%s)"
 
-#: ../src/id3_tag.c:580
+#: ../src/id3_tag.c:617
 #, c-format
 msgid "Error while updating ID3v2 tag of '%s' (%s)"
 msgstr "Fehler beim Aktualisieren der ID3v2-Metainfo von »%s« (%s)"
 
-#: ../src/id3_tag.c:608
+#: ../src/id3_tag.c:645
 msgid ""
 "You have tried to save this tag to Unicode but it was detected that your "
 "version of id3lib is buggy"
@@ -2579,7 +2565,7 @@ msgstr ""
 "Sie haben versucht, diese Metainfo als Unicode zu speichern, aber Ihre "
 "Version von id3lib ist fehlerhaft."
 
-#: ../src/id3_tag.c:610
+#: ../src/id3_tag.c:647
 #, c-format
 msgid ""
 "If you reload this file, some characters in the tag may not be displayed "
@@ -2599,90 +2585,90 @@ msgstr ""
 "\n"
 "Datei : %s"
 
-#: ../src/id3_tag.c:617
+#: ../src/id3_tag.c:654
 msgid "Buggy id3lib"
 msgstr "Fehlerhafte id3lib"
 
-#: ../src/id3_tag.c:651
+#: ../src/id3_tag.c:688
 #, c-format
 msgid "Error while updating ID3v1 tag of '%s' (%s)"
 msgstr "Fehler beim Aktualisieren der ID3v1-Metainfo von »%s« (%s)"
 
-#: ../src/id3_tag.c:665 ../src/id3v24_tag.c:1048
+#: ../src/id3_tag.c:702 ../src/id3v24_tag.c:1108
 #, c-format
 msgid "Updated tag of '%s'"
 msgstr "Metainfo von »%s« wurde aktualisiert"
 
-#: ../src/id3_tag.c:684
+#: ../src/id3_tag.c:721
 msgid "No error reported"
 msgstr "Kein Fehler gemeldet"
 
-#: ../src/id3_tag.c:686
+#: ../src/id3_tag.c:723
 msgid "No available memory"
 msgstr "Kein Speicher verfügbar"
 
-#: ../src/id3_tag.c:688
+#: ../src/id3_tag.c:725
 msgid "No data to parse"
 msgstr "Keine Daten zu analysieren"
 
-#: ../src/id3_tag.c:690
+#: ../src/id3_tag.c:727
 msgid "Improperly formatted data"
 msgstr "Ungeeignet formatierte Daten"
 
-#: ../src/id3_tag.c:692
+#: ../src/id3_tag.c:729
 msgid "No buffer to write to"
 msgstr "Kein Schreibpuffer vorhanden"
 
-#: ../src/id3_tag.c:694
+#: ../src/id3_tag.c:731
 msgid "Buffer is too small"
 msgstr "Puffer zu klein"
 
-#: ../src/id3_tag.c:696
+#: ../src/id3_tag.c:733
 msgid "Invalid frame ID"
 msgstr "Ungültige Frame-ID"
 
-#: ../src/id3_tag.c:698
+#: ../src/id3_tag.c:735
 msgid "Requested field not found"
 msgstr "Angefordertes Feld nicht gefunden"
 
-#: ../src/id3_tag.c:700
+#: ../src/id3_tag.c:737
 msgid "Unknown field type"
 msgstr "Unbekannter Feldtyp"
 
-#: ../src/id3_tag.c:702
+#: ../src/id3_tag.c:739
 msgid "Tag is already attached to a file"
 msgstr "Metainfo ist bereits an eine Datei angefügt"
 
-#: ../src/id3_tag.c:704
+#: ../src/id3_tag.c:741
 msgid "Invalid tag version"
 msgstr "Ungültige Metainfo-Version"
 
-#: ../src/id3_tag.c:706
+#: ../src/id3_tag.c:743
 msgid "No file to parse"
 msgstr "Keine Datei zu analysieren"
 
-#: ../src/id3_tag.c:708
+#: ../src/id3_tag.c:745
 msgid "Attempting to write to a read-only file"
 msgstr "Versuch, in eine nur lesbare Datei zu schreiben"
 
-#: ../src/id3_tag.c:710
+#: ../src/id3_tag.c:747
 msgid "Error in compression/uncompression"
 msgstr "Fehler beim Komprimieren/Dekomprimieren"
 
-#: ../src/id3_tag.c:712
+#: ../src/id3_tag.c:749
 msgid "Unknown error message"
 msgstr "Unbekannte Fehlermeldung"
 
-#: ../src/id3_tag.c:1316
+#: ../src/id3_tag.c:1357
 #, c-format
 msgid "Error while creating temporary file: '%s'"
 msgstr "Fehler beim Erstellen der temporären Datei: »%s«"
 
-#: ../src/id3_tag.c:1323
+#: ../src/id3_tag.c:1364
 msgid "Error while creating temporary file"
 msgstr "Fehler beim Erstellen der temporären Datei"
 
-#: ../src/id3_tag.c:1343
+#: ../src/id3_tag.c:1384
 #, c-format
 msgid "Error while writing to file: '%s' (%s)"
 msgstr "Fehler beim Schreiben in die Datei: »%s« (%s)"
@@ -2692,7 +2678,7 @@ msgstr "Fehler beim Schreiben in die Datei: »%s« (%s)"
 #. * missing (not read for some reason) while reading from
 #. * the file.
 #.
-#: ../src/id3v24_tag.c:1503
+#: ../src/id3v24_tag.c:1563
 #, c-format
 msgid "Cannot write tag of file ‘%s’ (a byte was missing)"
 msgid_plural "Cannot write tag of file ‘%s’ (%s bytes were missing)"
@@ -2701,12 +2687,12 @@ msgstr[0] ""
 msgstr[1] ""
 "Metainfo der Datei »%s« konnte nicht geschrieben werden (%s Bytes fehlten)"
 
-#: ../src/id3v24_tag.c:1524
+#: ../src/id3v24_tag.c:1584
 #, c-format
 msgid "Cannot save tag of file '%s'"
 msgstr "Metainfo der Datei »%s« kann nicht gespeichert werden"
 
-#: ../src/id3v24_tag.c:1535
+#: ../src/id3v24_tag.c:1595
 #, c-format
 msgid "Size error while saving tag of '%s'"
 msgstr "Größenfehler beim Speichern der Metainformationen von »%s«"
@@ -2715,54 +2701,54 @@ msgstr "Größenfehler beim Speichern der Metainformationen von »%s«"
 msgid "Log"
 msgstr "Protokoll"
 
-#: ../src/misc.c:719
+#: ../src/misc.c:716
 msgid "You must type a program name"
 msgstr "Sie müssen einen Programmnamen angeben"
 
-#: ../src/misc.c:720
+#: ../src/misc.c:717
 msgid "Program Name Error"
 msgstr "Fehler im Programmnamen"
 
-#: ../src/misc.c:799
+#: ../src/misc.c:796
 #, c-format
 msgid "Executed command: %s"
 msgstr "Ausgeführter Befehl: »%s«"
 
-#: ../src/misc.c:806
+#: ../src/misc.c:803
 #, c-format
 msgid "Failed to launch program: %s"
 msgstr "Starten des Programms gescheitert: %s"
 
-#: ../src/misc.c:823
+#: ../src/misc.c:820
 msgid "Select File"
 msgstr "Datei wählen"
 
-#: ../src/misc.c:829
+#: ../src/misc.c:826
 msgid "Select Directory"
 msgstr "Ordner auswählen"
 
-#: ../src/misc.c:1141
+#: ../src/misc.c:1138
 msgid "Generate Playlist"
 msgstr "Eine Wiedergabeliste erzeugen"
 
-#: ../src/misc.c:1165
+#: ../src/misc.c:1162
 msgid "M3U Playlist Name"
 msgstr "M3U-Wiedergabelistenname"
 
-#: ../src/misc.c:1180
+#: ../src/misc.c:1177
 msgid "Use directory name"
 msgstr "Ordnernamen verwenden"
 
 #. Playlist options
-#: ../src/misc.c:1197
+#: ../src/misc.c:1194
 msgid "Playlist Options"
 msgstr "Wiedergabelisten-Optionen"
 
-#: ../src/misc.c:1203
+#: ../src/misc.c:1200
 msgid "Include only the selected files"
 msgstr "Nur ausgewählte Dateien einfügen"
 
-#: ../src/misc.c:1206
+#: ../src/misc.c:1203
 msgid ""
 "If activated, only the selected files will be written in the playlist file. "
 "Else, all the files will be written."
@@ -2770,30 +2756,30 @@ msgstr ""
 "Falls aktiviert, werden nur die ausgewählten Dateien in die Wiedergabeliste "
 "geschrieben, ansonsten werden alle Dateien verwendet."
 
-#: ../src/misc.c:1209
+#: ../src/misc.c:1206
 msgid "Use full path for files in playlist"
 msgstr "Vollen Pfad für Dateien in der Wiedergabeliste verwenden"
 
-#: ../src/misc.c:1212
+#: ../src/misc.c:1209
 msgid "Use relative path for files in playlist"
 msgstr "Relativen Pfad für Dateien in der Wiedergabeliste verwenden"
 
 #. Create playlist in parent directory
-#: ../src/misc.c:1218
+#: ../src/misc.c:1215
 msgid "Create playlist in the parent directory"
 msgstr "Wiedergabeliste im Elternordner erzeugen"
 
-#: ../src/misc.c:1221
+#: ../src/misc.c:1218
 msgid "If activated, the playlist will be created in the parent directory."
 msgstr ""
 "Falls aktiviert, wird die Wiedergabelistendatei im Elternordner erzeugt."
 
 #. DOS Separator
-#: ../src/misc.c:1225
+#: ../src/misc.c:1222
 msgid "Use DOS directory separator"
 msgstr "DOS-Ordnertrennsymbol verwenden"
 
-#: ../src/misc.c:1231
+#: ../src/misc.c:1228
 msgid ""
 "This option replaces the UNIX directory separator '/' into DOS separator "
 "'\\'."
@@ -2801,49 +2787,49 @@ msgstr ""
 "Diese Option ersetzt das UNIX-Ordnertrennzeichen »/« durch das DOS-Zeichen "
 "»\\«."
 
-#: ../src/misc.c:1240
+#: ../src/misc.c:1237
 msgid "Playlist Content"
 msgstr "Inhalt der Wiedergabeliste"
 
-#: ../src/misc.c:1246
+#: ../src/misc.c:1243
 msgid "Write only list of files"
 msgstr "Nur Liste der Dateien schreiben."
 
-#: ../src/misc.c:1250
+#: ../src/misc.c:1247
 msgid "Write info using filename"
 msgstr "Dateinamen beim Schreiben der Informationen verwenden"
 
-#: ../src/misc.c:1253
+#: ../src/misc.c:1250
 msgid "Write info using:"
 msgstr "Information schreiben mit:"
 
-#: ../src/misc.c:1467
+#: ../src/misc.c:1464
 #, c-format
 msgid "Cannot write playlist file '%s'"
 msgstr "Die Wiedergabelistendatei »%s« kann nicht geschrieben werden"
 
-#: ../src/misc.c:1471
+#: ../src/misc.c:1468
 msgid "Playlist File Error"
 msgstr "Fehler in der Wiedergabelistendatei"
 
-#: ../src/misc.c:1479
+#: ../src/misc.c:1476
 #, c-format
 msgid "Written playlist file '%s'"
 msgstr "Wiedergabelistendatei »%s« wurde geschrieben."
 
-#: ../src/misc.c:1543 ../src/scan.c:2903 ../src/scan.c:2965
+#: ../src/misc.c:1540 ../src/scan_dialog.c:2747 ../src/scan_dialog.c:2809
 msgid "Invalid scanner mask"
 msgstr "Ungültige Scannermaske"
 
-#: ../src/misc.c:1907
+#: ../src/misc.c:1904
 msgid "CD"
 msgstr "CD"
 
-#: ../src/misc.c:1929
+#: ../src/misc.c:1926
 msgid "Find Files"
 msgstr "Dateien suchen"
 
-#: ../src/misc.c:1961
+#: ../src/misc.c:1958
 msgid ""
 "Type the word to search into files. Or type nothing to display all files."
 msgstr ""
@@ -2851,13 +2837,13 @@ msgstr ""
 "zur Anzeige aller Dateien."
 
 #. Where...
-#: ../src/misc.c:1967
+#: ../src/misc.c:1964
 msgid "In:"
 msgstr "In:"
 
 #. Translators: This option is for the previous 'in' option. For instance,
 #. * translate this as "Search" "In:" "the Filename".
-#: ../src/misc.c:1972
+#: ../src/misc.c:1969
 msgid "the Filename"
 msgstr "der Dateiname"
 
@@ -2866,83 +2852,83 @@ msgstr "der Dateiname"
 #. * Note: label changed to "the Tag" (to be the only one) to fix a Hungarian
 #. * grammatical problem (which uses one word to say "in the tag" like here)
 #.
-#: ../src/misc.c:1978
+#: ../src/misc.c:1975
 msgid "the Tag"
 msgstr "der Metainfo"
 
 #. Property of the search
-#: ../src/misc.c:1989 ../src/prefs.c:335
+#: ../src/misc.c:1986 ../src/prefs.c:335
 msgid "Case sensitive"
 msgstr "Groß/Kleinschreibung beachten"
 
-#: ../src/misc.c:2216
+#: ../src/misc.c:2213
 msgid "Ready to search…"
 msgstr "Bereit zur Suche …"
 
-#: ../src/misc.c:2436
+#: ../src/misc.c:2433
 #, c-format
 msgid "Found one file"
 msgid_plural "Found %d files"
 msgstr[0] "Eine Datei gefunden"
 msgstr[1] "%d Dateien gefunden"
 
-#: ../src/misc.c:2721
+#: ../src/misc.c:2718
 msgid "Load Filenames From a Text File"
 msgstr "Dateinamen aus Textdatei laden"
 
-#: ../src/misc.c:2750
+#: ../src/misc.c:2747
 msgid "File:"
 msgstr "Datei:"
 
 #. Button 'load'
 #. the signal attached to this button, to load the file, is placed after the LoadFileContentList definition
-#: ../src/misc.c:2769
+#: ../src/misc.c:2766
 msgid " Load "
 msgstr " Laden "
 
-#: ../src/misc.c:2787
+#: ../src/misc.c:2784
 msgid "Content of Text File"
 msgstr "Inhalt der Textdatei"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2808 ../src/misc.c:2903
+#: ../src/misc.c:2805 ../src/misc.c:2900
 msgid "Insert a blank line before the selected line"
 msgstr "Vor der ausgewählten Zeile eine Leerzeile einfügen"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2817 ../src/misc.c:2912
+#: ../src/misc.c:2814 ../src/misc.c:2909
 msgid "Delete the selected line"
 msgstr "Ausgewählte Zeile löschen"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2826 ../src/misc.c:2921 ../src/misc.c:3407
+#: ../src/misc.c:2823 ../src/misc.c:2918 ../src/misc.c:3399
 msgid "Delete all blank lines"
 msgstr "Alle Leerzeilen löschen"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2838 ../src/misc.c:2933
+#: ../src/misc.c:2835 ../src/misc.c:2930
 msgid "Move up the selected line"
 msgstr "Ausgewählte Zeile nach oben verschieben"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2847 ../src/misc.c:2942
+#: ../src/misc.c:2844 ../src/misc.c:2939
 msgid "Move down the selected line"
 msgstr "Ausgewählte Zeile nach unten verschieben"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2859 ../src/misc.c:2954 ../src/misc.c:3431
+#: ../src/misc.c:2856 ../src/misc.c:2951 ../src/misc.c:3423
 msgid "Reload"
 msgstr "Neu laden"
 
-#: ../src/misc.c:2881
+#: ../src/misc.c:2878
 msgid "List of Files"
 msgstr "Liste der Dateien"
 
-#: ../src/misc.c:2976
+#: ../src/misc.c:2973
 msgid "Selected line:"
 msgstr "Ausgewählte Zeile:"
 
-#: ../src/misc.c:2994
+#: ../src/misc.c:2991
 msgid ""
 "When activating this option, after loading the filenames, the current "
 "selected scanner will be ran (the scanner window must be opened)."
@@ -2950,34 +2936,34 @@ msgstr ""
 "Wenn diese Option aktiviert wird, dann wird der ausgewählte Scanner nach dem "
 "Laden der Dateinamen gestartet (das Scannerfenster muss offen sein)."
 
-#: ../src/misc.c:3081
+#: ../src/misc.c:3078
 #, c-format
 msgid "Cannot retrieve file info (%s)"
 msgstr "Dateiinformation kann nicht abgerufen werden (%s)"
 
-#: ../src/misc.c:3143
+#: ../src/misc.c:3141
 #, c-format
 msgid "Can't open file '%s' (%s)"
 msgstr "Datei »%s« kann nicht geöffnet werden (%s)"
 
-#: ../src/misc.c:3179
+#: ../src/misc.c:3170
 #, c-format
 msgid "Error reading file (%s)"
 msgstr "Fehler beim Lesen der Datei: (%s)"
 
-#: ../src/misc.c:3395
+#: ../src/misc.c:3387
 msgid "Insert a blank line"
 msgstr "Eine Leerzeile einfügen"
 
-#: ../src/misc.c:3401
+#: ../src/misc.c:3393
 msgid "Delete this line"
 msgstr "Diese Zeile löschen"
 
-#: ../src/misc.c:3416
+#: ../src/misc.c:3408
 msgid "Move up this line"
 msgstr "Diese Zeile nach oben verschieben"
 
-#: ../src/misc.c:3422
+#: ../src/misc.c:3414
 msgid "Move down this line"
 msgstr "Diese Zeile nach unten verschieben"
 
@@ -2987,26 +2973,21 @@ msgstr "Diese Zeile nach unten verschieben"
 msgid "Profile:"
 msgstr "Profil:"
 
-#: ../src/mp4_header.c:63 ../src/mp4_tag.c:65 ../src/mp4_tag.c:186
+#: ../src/mp4_header.cc:59 ../src/mp4_tag.cc:91 ../src/mp4_tag.cc:284
 msgid "MP4 format invalid"
 msgstr "MP4-Format ungültig"
 
-#: ../src/mp4_header.c:72 ../src/mp4_tag.c:74
-#, c-format
-msgid "File contains no audio track: '%s'"
-msgstr "Datei enthält keine Musiktitel: »%s«"
-
-#: ../src/mp4_header.c:82
+#: ../src/mp4_header.cc:69
 #, c-format
 msgid "Error reading properties from file: '%s'"
 msgstr "Fehler beim Lesen der Eigenschaften der Datei: »%s«"
 
-#: ../src/mp4_header.c:132 ../src/mpeg_header.c:204
+#: ../src/mp4_header.cc:130 ../src/mpeg_header.c:204
 #, c-format
 msgid "~%d kb/s"
 msgstr "~%d kb/s"
 
-#: ../src/mp4_tag.c:85 ../src/mp4_tag.c:194
+#: ../src/mp4_tag.cc:101 ../src/mp4_tag.cc:293
 #, c-format
 msgid "Error reading tags from file: '%s'"
 msgstr "Fehler beim Lesen der Metainformationen der Datei: »%s«"
@@ -3081,184 +3062,184 @@ msgstr ""
 msgid "Error: Failed to open file: '%s' as Vorbis (%s)."
 msgstr "Fehler: Öffnen der Datei: »%s« als Vorbis (%s) schlug fehl."
 
-#: ../src/ogg_tag.c:712 ../src/ogg_tag.c:887
+#: ../src/ogg_tag.c:706 ../src/ogg_tag.c:881
 #, c-format
 msgid "Warning: The Ogg Vorbis file '%s' contains an ID3v2 tag."
 msgstr "Warnung: Die Ogg Vorbis-Datei »%s« enthält eine ID3v2-Metainfo."
 
-#: ../src/ogg_tag.c:1035 ../src/picture.c:1257
+#: ../src/ogg_tag.c:1030 ../src/picture.c:1082
 #, c-format
 msgid "Error with 'loader_write': %s"
 msgstr "Fehler bei »loader_write«: %s"
 
-#: ../src/ogg_tag.c:1050 ../src/picture.c:1180
+#: ../src/ogg_tag.c:1045 ../src/picture.c:1005
 #, c-format
 msgid "Error with 'loader_close': %s"
 msgstr "Fehler bei »loader_close«: %s"
 
-#: ../src/picture.c:104
+#: ../src/picture.c:244 ../src/picture.c:269
 #, c-format
-msgid "Image file not saved: %s"
-msgstr "Bilddatei nicht gespeichert: %s"
+msgid "Image file not loaded: %s"
+msgstr "Bilddatei nicht geladen: %s"
 
-#: ../src/picture.c:154
+#: ../src/picture.c:261
 #, c-format
 msgid "Cannot open file: '%s'"
 msgstr "Datei kann nicht geöffnet werden: »%s«"
 
-#: ../src/picture.c:158
+#: ../src/picture.c:265
 msgid "Image File Error"
 msgstr "Fehler in Bilddatei"
 
-#: ../src/picture.c:162 ../src/picture.c:424
-#, c-format
-msgid "Image file not loaded: %s"
-msgstr "Bilddatei nicht geladen: %s"
-
-#: ../src/picture.c:446
+#: ../src/picture.c:276
 msgid "Image file loaded"
 msgstr "Bilddatei geladen"
 
-#: ../src/picture.c:504
+#: ../src/picture.c:334
 msgid "Add Images"
 msgstr "Bilder hinzufügen"
 
-#: ../src/picture.c:514 ../src/picture.c:874
+#: ../src/picture.c:344 ../src/picture.c:701
 msgid "All Files"
 msgstr "Alle Dateien"
 
-#: ../src/picture.c:520 ../src/picture.c:880
+#: ../src/picture.c:350 ../src/picture.c:707
 msgid "PNG and JPEG"
 msgstr "PNG und JPEG"
 
-#: ../src/picture.c:651
+#: ../src/picture.c:477
 #, c-format
 msgid "Image Properties %d/%d"
 msgstr "Bildeigenschaften %d/%d"
 
-#: ../src/picture.c:675
+#: ../src/picture.c:503
 msgid "Image Type"
 msgstr "Bildtyp"
 
 #. Description of the picture
-#: ../src/picture.c:734
+#: ../src/picture.c:561
 msgid "Image Description:"
 msgstr "Bildbeschreibung:"
 
-#: ../src/picture.c:861
+#: ../src/picture.c:688
 #, c-format
 msgid "Save Image %d/%d"
 msgstr "Bild speichern %d/%d"
 
-#: ../src/picture.c:1021
+#: ../src/picture.c:763
+#, c-format
+msgid "Image file not saved: %s"
+msgstr "Bilddatei nicht gespeichert: %s"
+
+#: ../src/picture.c:846
 msgid "JPEG image"
 msgstr "JPEG-Bild"
 
-#: ../src/picture.c:1023
+#: ../src/picture.c:848
 msgid "PNG image"
 msgstr "PNG-Bild"
 
-#: ../src/picture.c:1025
+#: ../src/picture.c:850
 msgid "GIF image"
 msgstr "GIF-Bild"
 
-#: ../src/picture.c:1027
+#: ../src/picture.c:852
 msgid "Unknown image"
 msgstr "Unbekanntes Bild"
 
-#: ../src/picture.c:1039
+#: ../src/picture.c:864
 msgid "32x32 pixel PNG file icon"
 msgstr "32x32-Pixel PNG-Symboldatei"
 
-#: ../src/picture.c:1041
+#: ../src/picture.c:866
 msgid "Other file icon"
 msgstr "Andere Symboldatei"
 
-#: ../src/picture.c:1043
+#: ../src/picture.c:868
 msgid "Cover (front)"
 msgstr "Vorderseite"
 
-#: ../src/picture.c:1045
+#: ../src/picture.c:870
 msgid "Cover (back)"
 msgstr "Rückseite"
 
-#: ../src/picture.c:1047
+#: ../src/picture.c:872
 msgid "Leaflet page"
 msgstr "Faltblatt"
 
-#: ../src/picture.c:1049
+#: ../src/picture.c:874
 msgid "Media (e.g. label side of CD)"
 msgstr "Medium (z.B. Label der CD)"
 
-#: ../src/picture.c:1051
+#: ../src/picture.c:876
 msgid "Lead artist/lead performer/soloist"
 msgstr "Führender Künstler/Darsteller/Solist"
 
-#: ../src/picture.c:1053
+#: ../src/picture.c:878
 msgid "Artist/performer"
 msgstr "Künstler/Darsteller"
 
-#: ../src/picture.c:1055
+#: ../src/picture.c:880
 msgid "Conductor"
 msgstr "Dirigent"
 
-#: ../src/picture.c:1057
+#: ../src/picture.c:882
 msgid "Band/Orchestra"
 msgstr "Band/Orchester"
 
-#: ../src/picture.c:1061
+#: ../src/picture.c:886
 msgid "Lyricist/text writer"
 msgstr "Lyriker/Textautor"
 
-#: ../src/picture.c:1063
+#: ../src/picture.c:888
 msgid "Recording location"
 msgstr "Aufnahmeort"
 
-#: ../src/picture.c:1065
+#: ../src/picture.c:890
 msgid "During recording"
 msgstr "Während der Aufnahme"
 
-#: ../src/picture.c:1067
+#: ../src/picture.c:892
 msgid "During performance"
 msgstr "Während der Aufführung"
 
-#: ../src/picture.c:1069
+#: ../src/picture.c:894
 msgid "Movie/video screen capture"
 msgstr "Film/Video-Bildschirmfoto"
 
-#: ../src/picture.c:1071
+#: ../src/picture.c:896
 msgid "A bright colored fish"
 msgstr "Ein heller, farbiger Fisch"
 
-#: ../src/picture.c:1073
+#: ../src/picture.c:898
 msgid "Illustration"
 msgstr "Illustration"
 
-#: ../src/picture.c:1075
+#: ../src/picture.c:900
 msgid "Band/Artist logotype"
 msgstr "Band-/Künstlerlogo"
 
-#: ../src/picture.c:1077
+#: ../src/picture.c:902
 msgid "Publisher/studio logotype"
 msgstr "Verlags-/Studiologo"
 
-#: ../src/picture.c:1081
+#: ../src/picture.c:906
 msgid "Unknown image type"
 msgstr "Unbekannter Bildtyp"
 
-#: ../src/picture.c:1111 ../src/picture.c:1122
+#: ../src/picture.c:936 ../src/picture.c:947
 msgid "pixels"
 msgstr "Pixel"
 
-#: ../src/picture.c:1112 ../src/picture.c:1123
+#: ../src/picture.c:937 ../src/picture.c:948
 msgid "Type"
 msgstr "Typ"
 
-#: ../src/picture.c:1124
+#: ../src/picture.c:949
 msgid "Description"
 msgstr "Beschreibung"
 
-#: ../src/picture.c:1240
+#: ../src/picture.c:1065
 msgid ""
 "Cannot display the image because not enough data has been read to determine "
 "how to create the image buffer."
@@ -3266,18 +3247,18 @@ msgstr ""
 "Das Bild kann nicht angezeigt werden, weil nicht genug Daten geladen wurden, "
 "um zu bestimmen, wie der Bildpuffer erstellt werden muss."
 
-#: ../src/picture.c:1247
+#: ../src/picture.c:1072
 msgid "Cannot display the image"
 msgstr "Das Bild kann nicht angezeigt werden"
 
-#: ../src/picture.c:1249
+#: ../src/picture.c:1074
 msgid ""
 "Not enough data has been read to determine how to create the image buffer."
 msgstr ""
 "Es wurden nicht genug Daten geladen, um zu bestimmen, wie der Bildpuffer "
 "erstellt werden muss."
 
-#: ../src/picture.c:1251
+#: ../src/picture.c:1076
 msgid "Load Image File"
 msgstr "Bilddatei laden"
 
@@ -4251,7 +4232,6 @@ msgid "User Password:"
 msgstr "Benutzer-Passwort:"
 
 #: ../src/prefs.c:1338
-#| msgid "Password of user for the the proxy server."
 msgid "Password of user for the proxy server."
 msgstr "Passwort des Benutzers des Proxy-Servers."
 
@@ -4371,82 +4351,82 @@ msgstr "Das Wiedergabeprogramm »%s« wurde nicht gefunden"
 msgid "Audio Player Error"
 msgstr "Fehler in der Audio-Wiedergabe"
 
-#: ../src/scan.c:180
+#: ../src/scan_dialog.c:182
 msgid "Fill Tag"
 msgstr "Metainfo füllen"
 
-#: ../src/scan.c:354
+#: ../src/scan_dialog.c:356
 #, c-format
 msgid "Cannot calculate CRC value of file (%s)"
 msgstr "CRC-Wert der Datei kann nicht berechnet werden (%s)"
 
-#: ../src/scan.c:369
+#: ../src/scan_dialog.c:371
 msgid "Tag successfully scanned"
 msgstr "Metainfo wurde erfolgreich gescannt"
 
-#: ../src/scan.c:371
+#: ../src/scan_dialog.c:373
 #, c-format
 msgid "Tag successfully scanned: %s"
 msgstr "Metainfo wurde erfolgreich gescannt: %s"
 
-#: ../src/scan.c:412
+#: ../src/scan_dialog.c:414
 #, c-format
 msgid "Tag scanner: strange… the extension '%s' was not found in filename '%s'"
 msgstr ""
 "Metainfo-Scanner: Seltsam … die Erweiterung »%s« wurde nicht im Dateinamen "
 "»%s« gefunden"
 
-#: ../src/scan.c:494 ../src/scan.c:523
+#: ../src/scan_dialog.c:496 ../src/scan_dialog.c:525
 #, c-format
 msgid "Scan Error: can't find separator '%s' within '%s'"
 msgstr "Scan-Fehler: Trenner »%s« in »%s« nicht auffindbar"
 
-#: ../src/scan.c:710
+#: ../src/scan_dialog.c:712
 msgid "New filename successfully scanned"
 msgstr "Neuer Dateiname wurde erfolgreich eingelesen"
 
-#: ../src/scan.c:713
+#: ../src/scan_dialog.c:715
 #, c-format
 msgid "New filename successfully scanned: %s"
 msgstr "Neuer Dateiname wurde erfolgreich eingelesen: %s"
 
-#: ../src/scan.c:1822
+#: ../src/scan_dialog.c:1632
 #, c-format
 msgid "Error while processing fields: %s"
 msgstr "Fehler beim Verarbeiten der Felder: %s"
 
 #. The window
-#: ../src/scan.c:1992
+#: ../src/scan_dialog.c:1802
 msgid "Tag and Filename Scan"
 msgstr "Scan von Metainformationen und Dateinamen"
 
 #. TODO: Set related action to match AM_SCAN_FILES.
-#: ../src/scan.c:2001
+#: ../src/scan_dialog.c:1811
 msgid "Scan Files"
 msgstr "Datei(en) einlesen"
 
 #. Option Menu
-#: ../src/scan.c:2029
+#: ../src/scan_dialog.c:1839
 msgid "Scanner:"
 msgstr "Scanner:"
 
-#: ../src/scan.c:2050
+#: ../src/scan_dialog.c:1860
 msgid "Select the type of scanner to use"
 msgstr "Typ des zu verwendenden Scanners auswählen"
 
-#: ../src/scan.c:2059
+#: ../src/scan_dialog.c:1869
 msgid "Scanner Preferences"
 msgstr "Scanner-Einstellungen"
 
-#: ../src/scan.c:2068
+#: ../src/scan_dialog.c:1878
 msgid "Show / Hide Masks Editor"
 msgstr "Maskeneditor anzeigen/verstecken"
 
-#: ../src/scan.c:2078
+#: ../src/scan_dialog.c:1888
 msgid "Show / Hide Legend"
 msgstr "Legende anzeigen/verstecken"
 
-#: ../src/scan.c:2108
+#: ../src/scan_dialog.c:1918
 msgid ""
 "Select or type in a mask using codes (see Legend) to parse filename and "
 "path. Used to fill in tag fields"
@@ -4456,15 +4436,15 @@ msgstr ""
 "Ausfüllen der Metainfo-Felder verwendet."
 
 #. Preview label
-#: ../src/scan.c:2132
+#: ../src/scan_dialog.c:1942
 msgid "Fill tag preview"
 msgstr "Vorschau für Metainfo-Füllung"
 
-#: ../src/scan.c:2162
+#: ../src/scan_dialog.c:1972
 msgid "Prefix mask with current path"
 msgstr "Aktuellen Pfad vor die Maske stellen"
 
-#: ../src/scan.c:2176
+#: ../src/scan_dialog.c:1986
 msgid ""
 "Select or type in a mask using codes (see Legend) to parse tag fields. Used "
 "to rename the file.\n"
@@ -4478,15 +4458,15 @@ msgstr ""
 "so ist es ein absoluter Pfad, andernfalls relativ zum bisherigen Pfad."
 
 #. Preview label
-#: ../src/scan.c:2201
+#: ../src/scan_dialog.c:2011
 msgid "Rename file preview"
 msgstr "Vorschau der Datei-Umbenennung"
 
-#: ../src/scan.c:2220
+#: ../src/scan_dialog.c:2030
 msgid "Select fields:"
 msgstr "Felder auswählen:"
 
-#: ../src/scan.c:2223
+#: ../src/scan_dialog.c:2033
 msgid ""
 "The buttons on the right represent the fields which can be processed. Select "
 "those which interest you"
@@ -4495,134 +4475,134 @@ msgstr ""
 "können. Wählen Sie die geeigneten aus."
 
 #. Advice for Translators: set the first letter of filename translated
-#: ../src/scan.c:2227
+#: ../src/scan_dialog.c:2037
 msgid "F"
 msgstr "F"
 
-#: ../src/scan.c:2229
+#: ../src/scan_dialog.c:2039
 msgid "Process filename field"
 msgstr "Dateinamensfeld verarbeiten"
 
 #. Advice for Translators: set the first letter of title translated
-#: ../src/scan.c:2231
+#: ../src/scan_dialog.c:2041
 msgid "T"
 msgstr "T"
 
-#: ../src/scan.c:2232
+#: ../src/scan_dialog.c:2042
 msgid "Process title field"
 msgstr "Titelfeld bearbeiten"
 
 #. Advice for Translators: set the first letter of artist translated
-#: ../src/scan.c:2234
+#: ../src/scan_dialog.c:2044
 msgid "Ar"
 msgstr "Kü"
 
-#: ../src/scan.c:2235
+#: ../src/scan_dialog.c:2045
 msgid "Process file artist field"
 msgstr "Künstlerfeld dieser Datei bearbeiten"
 
 #. Advice for Translators: set the first letter of album artist translated
-#: ../src/scan.c:2237
+#: ../src/scan_dialog.c:2047
 msgid "AA"
 msgstr "AA"
 
-#: ../src/scan.c:2238
+#: ../src/scan_dialog.c:2048
 msgid "Process album artist field"
 msgstr "Künstlerfeld dieses Albums bearbeiten"
 
 #. Advice for Translators: set the first letter of album translated
-#: ../src/scan.c:2240
+#: ../src/scan_dialog.c:2050
 msgid "Al"
 msgstr "Al"
 
-#: ../src/scan.c:2241
+#: ../src/scan_dialog.c:2051
 msgid "Process album field"
 msgstr "Albumfeld bearbeiten"
 
 #. Advice for Translators: set the first letter of genre translated
-#: ../src/scan.c:2243
+#: ../src/scan_dialog.c:2053
 msgid "G"
 msgstr "G"
 
-#: ../src/scan.c:2244
+#: ../src/scan_dialog.c:2054
 msgid "Process genre field"
 msgstr "Genrefeld bearbeiten"
 
 #. Advice for Translators: set the first letter of comment translated
-#: ../src/scan.c:2246
+#: ../src/scan_dialog.c:2056
 msgid "Cm"
 msgstr "K"
 
-#: ../src/scan.c:2247
+#: ../src/scan_dialog.c:2057
 msgid "Process comment field"
 msgstr "Kommentarfeld bearbeiten"
 
 #. Advice for Translators: set the first letter of composer translated
-#: ../src/scan.c:2249
+#: ../src/scan_dialog.c:2059
 msgid "Cp"
 msgstr "Ko"
 
-#: ../src/scan.c:2250
+#: ../src/scan_dialog.c:2060
 msgid "Process composer field"
 msgstr "Komponistenfeld bearbeiten"
 
 #. Advice for Translators: set the first letter of orig artist translated
-#: ../src/scan.c:2252
+#: ../src/scan_dialog.c:2062
 msgid "O"
 msgstr "O"
 
-#: ../src/scan.c:2253
+#: ../src/scan_dialog.c:2063
 msgid "Process original artist field"
 msgstr "Originalkünstlerfeld dieser Datei bearbeiten"
 
 #. Advice for Translators: set the first letter of copyright translated
-#: ../src/scan.c:2255
+#: ../src/scan_dialog.c:2065
 msgid "Cr"
 msgstr "Co"
 
-#: ../src/scan.c:2256
+#: ../src/scan_dialog.c:2066
 msgid "Process copyright field"
 msgstr "Copyright-Feld bearbeiten"
 
 #. Advice for Translators: set the first letter of URL translated
-#: ../src/scan.c:2258
+#: ../src/scan_dialog.c:2068
 msgid "U"
 msgstr "U"
 
-#: ../src/scan.c:2259
+#: ../src/scan_dialog.c:2069
 msgid "Process URL field"
 msgstr "URL-Feld bearbeiten"
 
 #. Advice for Translators: set the first letter of encoder name translated
-#: ../src/scan.c:2261
+#: ../src/scan_dialog.c:2071
 msgid "E"
 msgstr "K"
 
-#: ../src/scan.c:2262
+#: ../src/scan_dialog.c:2072
 msgid "Process encoder name field"
 msgstr "Kodiererfeld bearbeiten"
 
-#: ../src/scan.c:2306
+#: ../src/scan_dialog.c:2116
 msgid "Invert selection"
 msgstr "Auswahl umkehren"
 
-#: ../src/scan.c:2313
+#: ../src/scan_dialog.c:2123
 msgid "Select/Unselect all"
 msgstr "Alle aus-/abwählen"
 
-#: ../src/scan.c:2328
+#: ../src/scan_dialog.c:2138
 msgid "Convert:"
 msgstr "Umwandeln:"
 
-#: ../src/scan.c:2330
+#: ../src/scan_dialog.c:2140
 msgid "to: "
 msgstr "nach: "
 
-#: ../src/scan.c:2337
+#: ../src/scan_dialog.c:2147
 msgid "Do not convert"
 msgstr "Nicht umwandeln"
 
-#: ../src/scan.c:2356
+#: ../src/scan_dialog.c:2177
 msgid ""
 "The underscore character or the string '%20' are replaced by one space. "
 "Example, before: 'Text%20In%20An_Entry', after: 'Text In An Entry'."
@@ -4631,7 +4611,7 @@ msgstr ""
 "ersetzt. (Beispiel, vorher: »Text%20in%20einem_Eintrag«, danach: »Text in "
 "einem Eintrag«)."
 
-#: ../src/scan.c:2359
+#: ../src/scan_dialog.c:2180
 msgid ""
 "The space character is replaced by one underscore character. Example, "
 "before: 'Text In An Entry', after: 'Text_In_An_Entry'."
@@ -4639,38 +4619,38 @@ msgstr ""
 "Ein Leerzeichen wird durch einen Unterstrich ersetzt. Beispiel, vorher: "
 "»Text in einem Eintrag«, danach: »Text_in_einem_Eintrag«."
 
-#: ../src/scan.c:2362
+#: ../src/scan_dialog.c:2183
 msgid ""
 "Replace a string by another one. Note that the search is case sensitive."
 msgstr ""
 "Eine Zeichenkette durch eine andere ersetzen. Beachten Sie, dass die Suche "
 "Groß- und Kleinschreibung unterscheidet."
 
-#: ../src/scan.c:2369
+#: ../src/scan_dialog.c:2190
 msgid "Capitalize all"
 msgstr "Alles in Großbuchstaben umwandeln"
 
-#: ../src/scan.c:2371
+#: ../src/scan_dialog.c:2192
 msgid "Lowercase all"
 msgstr "Alles in Kleinbuchstaben umwandeln"
 
-#: ../src/scan.c:2373
+#: ../src/scan_dialog.c:2194
 msgid "Capitalize first letter"
 msgstr "Ersten Buchstaben groß schreiben"
 
-#: ../src/scan.c:2375
+#: ../src/scan_dialog.c:2196
 msgid "Capitalize the first letter of each word"
 msgstr "Der erste Buchstabe jeden Wortes groß schreiben"
 
-#: ../src/scan.c:2376
+#: ../src/scan_dialog.c:2197
 msgid "Detect Roman numerals"
 msgstr "Römische Zahlen erkennen"
 
-#: ../src/scan.c:2378
+#: ../src/scan_dialog.c:2199
 msgid "Do not change capitalization"
 msgstr "Großschreibung nicht ändern"
 
-#: ../src/scan.c:2400
+#: ../src/scan_dialog.c:2236
 msgid ""
 "Convert all words in all fields to upper case. Example, before: 'Text IN AN "
 "entry', after: 'TEXT IN AN ENTRY'."
@@ -4678,7 +4658,7 @@ msgstr ""
 "Alle Wörter in allen Feldern werden in Großbuchstaben geschrieben. Beispiel, "
 "vorher: »Text IN EINEM Eintrag«, danach: »TEXT IN EINEM EINTRAG«."
 
-#: ../src/scan.c:2403
+#: ../src/scan_dialog.c:2239
 msgid ""
 "Convert all words in all fields to lower case. Example, before: 'TEXT IN an "
 "entry', after: 'text in an entry'."
@@ -4686,7 +4666,7 @@ msgstr ""
 "Wörter in allen Feldern klein schreiben. Beispiel, vorher: »TEXT IN einem "
 "Eintrag«, danach: »text in einem eintrag«."
 
-#: ../src/scan.c:2406
+#: ../src/scan_dialog.c:2242
 msgid ""
 "Convert the initial of the first word in all fields to upper case. Example, "
 "before: 'text IN An ENTRY', after: 'Text in an entry'."
@@ -4695,7 +4675,7 @@ msgstr ""
 "geschrieben. Beispiel, vorher: »text IN Einem EINTRAG«, danach: »Text in "
 "einem eintrag«."
 
-#: ../src/scan.c:2409
+#: ../src/scan_dialog.c:2245
 msgid ""
 "Convert the initial of each word in all fields to upper case. Example, "
 "before: 'Text in an ENTRY', after: 'Text In An Entry'."
@@ -4703,7 +4683,7 @@ msgstr ""
 "Der erste Buchstabe jedes Wortes in allen Feldern wird groß geschrieben. "
 "Beispiel, vorher: »Text in einem EINTRAG«, danach: »Text In Einem Eintrag«."
 
-#: ../src/scan.c:2412
+#: ../src/scan_dialog.c:2248
 msgid ""
 "Force to convert to upper case the Roman numerals. Example, before: 'ix. "
 "text in an entry', after: 'IX. Text In An Entry'."
@@ -4711,19 +4691,19 @@ msgstr ""
 "Großbuchstaben bei römischen Zahlen erzwingen, z.B. wird »ix. text in einem "
 "feld« zu »IX. Text In Einem Feld«."
 
-#: ../src/scan.c:2420
+#: ../src/scan_dialog.c:2256
 msgid "Insert a space before uppercase letters"
 msgstr "Vor Großbuchstaben ein Leerzeichen einfügen"
 
-#: ../src/scan.c:2422
+#: ../src/scan_dialog.c:2258
 msgid "Remove duplicate spaces and underscores"
 msgstr "Doppelte Leerzeichen und Unterstriche entfernen"
 
-#: ../src/scan.c:2424
+#: ../src/scan_dialog.c:2260
 msgid "Do not change word separators"
 msgstr "Worttrenner nicht ändern"
 
-#: ../src/scan.c:2438
+#: ../src/scan_dialog.c:2282
 msgid ""
 "All spaces between words are removed. Example, before: 'Text In An Entry', "
 "after: 'TextInAnEntry'."
@@ -4731,7 +4711,7 @@ msgstr ""
 "Alle Leerzeichen zwischen Wörtern werden entfernt. Beispiel, vorher: »Text "
 "In Einem Eintrag«, danach: »TextInEinemEintrag«."
 
-#: ../src/scan.c:2441
+#: ../src/scan_dialog.c:2285
 msgid ""
 "A space is inserted before each upper case letter. Example, before: "
 "'TextInAnEntry', after: 'Text In An Entry'."
@@ -4739,7 +4719,7 @@ msgstr ""
 "Vor jedem Großbuchstaben wird ein Leerzeichen eingefügt. Beispiel, vorher: "
 "»TextInEinemEintrag«, danach: »Text In Einem Eintrag«."
 
-#: ../src/scan.c:2444
+#: ../src/scan_dialog.c:2288
 msgid ""
 "Duplicate spaces and underscores are removed. Example, before: "
 "'Text__In__An   Entry', after: 'Text_In_An Entry'."
@@ -4750,141 +4730,141 @@ msgstr ""
 #.
 #. * Frame to display codes legend
 #.
-#: ../src/scan.c:2451
+#: ../src/scan_dialog.c:2295
 msgid "Legend"
 msgstr "Legende"
 
-#: ../src/scan.c:2457
+#: ../src/scan_dialog.c:2301
 #, c-format
 msgid "%a: artist"
 msgstr "%a: Künstler"
 
-#: ../src/scan.c:2460
+#: ../src/scan_dialog.c:2304
 msgid "%z: album artist"
 msgstr "%a: Albenkünstler"
 
-#: ../src/scan.c:2463
+#: ../src/scan_dialog.c:2307
 msgid "%b: album"
 msgstr "%b: Album"
 
-#: ../src/scan.c:2466
+#: ../src/scan_dialog.c:2310
 #, c-format
 msgid "%c: comment"
 msgstr "%c: Kommentar"
 
-#: ../src/scan.c:2469
+#: ../src/scan_dialog.c:2313
 #, c-format
 msgid "%p: composer"
 msgstr "%p: Komponist"
 
-#: ../src/scan.c:2472
+#: ../src/scan_dialog.c:2316
 msgid "%r: copyright"
 msgstr "%r: Copyright"
 
-#: ../src/scan.c:2475
+#: ../src/scan_dialog.c:2319
 #, c-format
 msgid "%d: disc number"
 msgstr "%d: CD-Nummer"
 
-#: ../src/scan.c:2478
+#: ../src/scan_dialog.c:2322
 #, c-format
 msgid "%e: encoded by"
 msgstr "%e: Kodierer"
 
-#: ../src/scan.c:2481
+#: ../src/scan_dialog.c:2325
 #, c-format
 msgid "%g: genre"
 msgstr "%g: Genre"
 
-#: ../src/scan.c:2484
+#: ../src/scan_dialog.c:2328
 #, c-format
 msgid "%i: ignored"
 msgstr "%i: wird ignoriert"
 
-#: ../src/scan.c:2487
+#: ../src/scan_dialog.c:2331
 msgid "%l: number of tracks"
 msgstr "%l: Anzahl der Titel"
 
-#: ../src/scan.c:2490
+#: ../src/scan_dialog.c:2334
 #, c-format
 msgid "%o: orig. artist"
 msgstr "%o: Originalkünstler"
 
-#: ../src/scan.c:2493
+#: ../src/scan_dialog.c:2337
 #, c-format
 msgid "%n: track"
 msgstr "%n: Stück"
 
-#: ../src/scan.c:2496
+#: ../src/scan_dialog.c:2340
 msgid "%t: title"
 msgstr "%t: Titel"
 
-#: ../src/scan.c:2499
+#: ../src/scan_dialog.c:2343
 #, c-format
 msgid "%u: URL"
 msgstr "%u: URL"
 
-#: ../src/scan.c:2502
+#: ../src/scan_dialog.c:2346
 #, c-format
 msgid "%x: number of discs"
 msgstr "%x: Anzahl der Medien"
 
-#: ../src/scan.c:2505
+#: ../src/scan_dialog.c:2349
 msgid "%y: year"
 msgstr "%y: Jahr"
 
 #.
 #. * Masks Editor
 #.
-#: ../src/scan.c:2512
+#: ../src/scan_dialog.c:2356
 msgid "Mask Editor"
 msgstr "Maskeneditor"
 
-#: ../src/scan.c:2566
+#: ../src/scan_dialog.c:2410
 msgid "Create New Mask"
 msgstr "Neue Maske erstellen"
 
-#: ../src/scan.c:2576
+#: ../src/scan_dialog.c:2420
 msgid "Move Up this Mask"
 msgstr "Maske nach oben verschieben"
 
-#: ../src/scan.c:2586
+#: ../src/scan_dialog.c:2430
 msgid "Move Down this Mask"
 msgstr "Maske nach unten verschieben"
 
-#: ../src/scan.c:2596
+#: ../src/scan_dialog.c:2440
 msgid "Duplicate Mask"
 msgstr "Maske duplizieren"
 
-#: ../src/scan.c:2606
+#: ../src/scan_dialog.c:2450
 msgid "Add Default Masks"
 msgstr "Vorgabemasken hinzufügen"
 
-#: ../src/scan.c:2616
+#: ../src/scan_dialog.c:2460
 msgid "Remove Mask"
 msgstr "Maske löschen"
 
-#: ../src/scan.c:2626
+#: ../src/scan_dialog.c:2470
 msgid "Save Masks"
 msgstr "Masken speichern"
 
-#: ../src/scan.c:3206
+#: ../src/scan_dialog.c:3050
 msgid "New_mask"
 msgstr "Neue_Maske"
 
-#: ../src/scan.c:3245
+#: ../src/scan_dialog.c:3089
 msgid "Copy: No row selected"
 msgstr "Kopieren: keine Zeile ausgewählt"
 
-#: ../src/scan.c:3338
+#: ../src/scan_dialog.c:3182
 msgid "Remove: No row selected"
 msgstr "Löschen: keine Zeile ausgewählt"
 
-#: ../src/scan.c:3385
+#: ../src/scan_dialog.c:3229
 msgid "Move Up: No row selected"
 msgstr "Nach oben verschieben: keine Zeile ausgewählt"
 
-#: ../src/scan.c:3429
+#: ../src/scan_dialog.c:3273
 msgid "Move Down: No row selected"
 msgstr "Nach unten verschieben: keine Zeile ausgewählt"
 
@@ -4952,6 +4932,39 @@ msgstr "Konfigurationsdatei »%s« kann nicht migriert werden"
 msgid "Error: Cannot create directory '%s' (%s)"
 msgstr "Fehler: Ordner »%s« kann nicht angelegt werden (%s)"
 
+#~ msgid ""
+#~ "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 (at your "
+#~ "option) any later version.\n"
+#~ "\n"
+#~ "This program is distributed in the hope that it will be useful, but "
+#~ "WITHOUT ANY WARRANTY; without even the implied warranty of "
+#~ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General "
+#~ "Public License for more details.\n"
+#~ "\n"
+#~ "You should have received a copy of the GNU General Public License along "
+#~ "with this program. If not, see <http://www.gnu.org/licenses/>."
+#~ msgstr ""
+#~ "Dieses Programm ist freie Software. Sie können es weitergeben und/oder "
+#~ "verändern, solange Sie sich an die Regeln der »GNU General Public "
+#~ "License« halten, so wie sie von der Free Software Foundation festgelegt "
+#~ "wurden; entweder in Version 2 der Lizenz oder (nach Ihrem Ermessen) in "
+#~ "jeder neueren Lizenz.\n"
+#~ "\n"
+#~ "Dieses Programm wurde mit dem Ziel veröffentlicht, dass Sie es nützlich "
+#~ "finden, jedoch OHNE JEGLICHE GARANTIE, sogar ohne eine implizite Garantie "
+#~ "der VERKAUFBARKEIT oder der VERWENDBARKEIT FÃœR EINEN SPEZIELLEN ZWECK. "
+#~ "Schauen Sie für weitere Informationen bitte in der »GNU General Public "
+#~ "License« (GNU GPL) nach.\n"
+#~ "\n"
+#~ "Zusammen mit diesem Programm sollten Sie außerdem eine Kopie der »GNU "
+#~ "General Public License« erhalten haben. Wenn dem nicht so ist, so lesen "
+#~ "Sie bitte <http://www.gnu.org/licenses/>."
+
+#~ msgid "File contains no audio track: '%s'"
+#~ msgstr "Datei enthält keine Musiktitel: »%s«"
+
 #~ msgid "The program '%s' cannot be found"
 #~ msgstr "Das Programm »%s« wurde nicht gefunden"
 
@@ -5506,9 +5519,8 @@ msgstr "Fehler: Ordner »%s« kann nicht angelegt werden (%s)"
 #~ msgid "(Serbian translation)"
 #~ msgstr "(Serbische Ãœbersetzung)"
 
-#, fuzzy
 #~ msgid "(Lithuanian translation)"
-#~ msgstr "(Italienische Ãœbersetzung)"
+#~ msgstr "(Litauische Ãœbersetzung)"
 
 #~ msgid "Extension Name"
 #~ msgstr "Erweiterungsname"
@@ -5516,7 +5528,6 @@ msgstr "Fehler: Ordner »%s« kann nicht angelegt werden (%s)"
 #~ msgid "Status"
 #~ msgstr "Status"
 
-#, fuzzy
 #~ msgid "About…"
 #~ msgstr "Ãœber"
 
@@ -6365,9 +6376,6 @@ msgstr "Fehler: Ordner »%s« kann nicht angelegt werden (%s)"
 #~ msgid "Redo last changes of selected files"
 #~ msgstr "Letzte Änderungen an den ausgewählten Dateien wiederholen"
 
-#~ msgid "Exit EasyTAG!"
-#~ msgstr "EasyTAG beenden!"
-
 #~ msgid "Reload the directory"
 #~ msgstr "Verzeichnis neu einlesen"
 
diff --git a/po/en_GB.po b/po/en_GB.po
index 24affe5..b83a1b5 100644
--- a/po/en_GB.po
+++ b/po/en_GB.po
@@ -7,11 +7,11 @@ msgid ""
 msgstr ""
 "Project-Id-Version: easytag-2.1.10\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-04-09 09:31+0100\n"
+"POT-Creation-Date: 2014-06-11 21:58+0100\n"
 "PO-Revision-Date: 2014-03-20 10:18+0000\n"
 "Last-Translator: David King <amigadave at amigadave.com>\n"
 "Language-Team: British English <gnome-i18n at gnome.org>\n"
-"Language: \n"
+"Language: en_GB\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -54,60 +54,49 @@ msgstr "Edit sound file metadata"
 msgid "mp3;tag;audio;"
 msgstr "mp3;tag;audio;"
 
-#: ../src/about.c:89
-msgid ""
-"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 (at your option) "
-"any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful, but WITHOUT "
-"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
-"FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for "
-"more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License along with "
-"this program. If not, see <http://www.gnu.org/licenses/>."
-msgstr ""
-"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 (at your option) "
-"any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful, but WITHOUT "
-"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
-"FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for "
-"more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License along with "
-"this program. If not, see <http://www.gnu.org/licenses/>."
+#: ../nautilus-extension/nautilus-easytag.c:229
+msgid "Open in EasyTAG"
+msgstr "Open in EasyTAG"
+
+#: ../nautilus-extension/nautilus-easytag.c:230
+msgid "Open the current selected directory in EasyTAG"
+msgstr "Open the current selected directory in EasyTAG"
+
+#: ../nautilus-extension/nautilus-easytag.c:247
+msgid "Open with EasyTAG"
+msgstr "Open with EasyTAG"
+
+#: ../nautilus-extension/nautilus-easytag.c:248
+msgid "Open selected files in EasyTAG"
+msgstr "Open selected files in EasyTAG"
 
 #. Translators: put your own name here to appear in the about dialog.
-#: ../src/about.c:106
+#: ../src/about.c:89
 msgid "translator-credits"
 msgstr "David King <amigadave at amigadave.com>"
 
-#: ../src/about.c:116
+#: ../src/about.c:99
 msgid "View and edit tags in audio files"
 msgstr "View and edit tags in audio files"
 
-#. g_print(_("Error while opening file: '%s' (%s)."),filename_utf8,g_strerror(errno));
-#: ../src/ape_tag.c:61 ../src/id3v24_tag.c:112 ../src/mp4_header.c:63
-#: ../src/mp4_tag.c:65 ../src/mp4_tag.c:186
+#: ../src/ape_tag.c:61 ../src/id3v24_tag.c:113 ../src/mp4_header.cc:45
+#: ../src/mp4_header.cc:58 ../src/mp4_tag.cc:69 ../src/mp4_tag.cc:85
+#: ../src/mp4_tag.cc:90 ../src/mp4_tag.cc:262 ../src/mp4_tag.cc:278
+#: ../src/mp4_tag.cc:283
 #, c-format
 msgid "Error while opening file: '%s' (%s)."
 msgstr "Error while opening file: '%s' (%s)."
 
-#: ../src/application.c:37
+#: ../src/application.c:32
 msgid "Print the version and exit"
 msgstr "Print the version and exit"
 
-#: ../src/application.c:89
+#: ../src/application.c:84
 #, c-format
 msgid "Website: %s"
 msgstr "Website: %s"
 
-#: ../src/application.c:98
+#: ../src/application.c:93
 msgid "- Tag and rename audio files"
 msgstr "- Tag and rename audio files"
 
@@ -362,7 +351,7 @@ msgstr "Last file"
 msgid "S_can Files"
 msgstr "S_can Files"
 
-#: ../src/bar.c:225 ../src/scan_dialog.c:1814
+#: ../src/bar.c:225 ../src/scan_dialog.c:1818
 msgid "Scan selected files"
 msgstr "Scan selected files"
 
@@ -426,8 +415,8 @@ msgstr "Redo last changes"
 msgid "_Quit"
 msgstr "_Quit"
 
-#: ../src/bar.c:242 ../src/easytag.c:2430 ../src/easytag.c:4565
-#: ../src/easytag.c:4597
+#: ../src/bar.c:242 ../src/easytag.c:2424 ../src/easytag.c:4559
+#: ../src/easytag.c:4591
 msgid "Quit"
 msgstr "Quit"
 
@@ -730,7 +719,7 @@ msgstr "Process Fields"
 msgid "Could not merge UI, error was: %s\n"
 msgstr "Could not merge UI, error was: %s\n"
 
-#: ../src/bar.c:533
+#: ../src/bar.c:535
 msgid "Ready to start"
 msgstr "Ready to start"
 
@@ -738,7 +727,7 @@ msgstr "Ready to start"
 msgid "New default path for files selected"
 msgstr "New default path for files selected"
 
-#: ../src/browser.c:678 ../src/easytag.c:4561
+#: ../src/browser.c:678 ../src/easytag.c:4555
 msgid "Some files have been modified but not saved"
 msgstr "Some files have been modified but not saved"
 
@@ -750,101 +739,101 @@ msgstr "Do you want to save them before changing the directory?"
 msgid "Confirm Directory Change"
 msgstr "Confirm Directory Change"
 
-#: ../src/browser.c:2146
+#: ../src/browser.c:2152
 msgid "<All albums>"
 msgstr "<All albums>"
 
-#: ../src/browser.c:2607
+#: ../src/browser.c:2613
 #, c-format
 msgid "Error: Searching for %s, could not find node %s in tree."
 msgstr "Error: Searching for %s, could not find node %s in tree."
 
-#: ../src/browser.c:3101 ../src/browser.c:3179
+#: ../src/browser.c:3107 ../src/browser.c:3185
 msgid "Tree"
 msgstr "Tree"
 
-#: ../src/browser.c:3102 ../src/cddb.c:803 ../src/misc.c:1903
+#: ../src/browser.c:3108 ../src/cddb.c:803 ../src/misc.c:1899
 msgid "Filename"
 msgstr "Filename"
 
-#: ../src/browser.c:3102 ../src/cddb.c:804 ../src/misc.c:1904
+#: ../src/browser.c:3108 ../src/cddb.c:804 ../src/misc.c:1900
 #: ../src/prefs.c:643
 msgid "Title"
 msgstr "Title"
 
 #. Translators: This option is for the previous 'search in' option. For
 #. * instance, translate this as "Search in:" "Artist".
-#: ../src/browser.c:3103 ../src/browser.c:3110 ../src/cddb.c:483
-#: ../src/cddb.c:805 ../src/misc.c:1905 ../src/prefs.c:644
+#: ../src/browser.c:3109 ../src/browser.c:3116 ../src/cddb.c:483
+#: ../src/cddb.c:805 ../src/misc.c:1901 ../src/prefs.c:644
 msgid "Artist"
 msgstr "Artist"
 
-#: ../src/browser.c:3103 ../src/misc.c:1906
+#: ../src/browser.c:3109 ../src/misc.c:1902
 msgid "Album Artist"
 msgstr "Album Artist"
 
 #. Translators: This option is for the previous 'search in' option. For
 #. * instance, translate this as "Search in:" "Album".
-#: ../src/browser.c:3104 ../src/browser.c:3112 ../src/cddb.c:486
-#: ../src/cddb.c:806 ../src/misc.c:1907 ../src/prefs.c:645
+#: ../src/browser.c:3110 ../src/browser.c:3118 ../src/cddb.c:486
+#: ../src/cddb.c:806 ../src/misc.c:1903 ../src/prefs.c:645
 msgid "Album"
 msgstr "Album"
 
-#: ../src/browser.c:3104 ../src/cddb.c:807 ../src/misc.c:1909
+#: ../src/browser.c:3110 ../src/cddb.c:807 ../src/misc.c:1905
 msgid "Year"
 msgstr "Year"
 
-#: ../src/browser.c:3104
+#: ../src/browser.c:3110
 msgid "Disc"
 msgstr "Disc"
 
-#: ../src/browser.c:3105 ../src/misc.c:1910
+#: ../src/browser.c:3111 ../src/misc.c:1906
 msgid "Track"
 msgstr "Track"
 
-#: ../src/browser.c:3105 ../src/cddb.c:810 ../src/misc.c:1911
+#: ../src/browser.c:3111 ../src/cddb.c:810 ../src/misc.c:1907
 #: ../src/prefs.c:646
 msgid "Genre"
 msgstr "Genre"
 
-#: ../src/browser.c:3106 ../src/misc.c:1912 ../src/prefs.c:647
+#: ../src/browser.c:3112 ../src/misc.c:1908 ../src/prefs.c:647
 msgid "Comment"
 msgstr "Comment"
 
-#: ../src/browser.c:3106 ../src/misc.c:1913 ../src/picture.c:1059
+#: ../src/browser.c:3112 ../src/misc.c:1909 ../src/picture.c:884
 #: ../src/prefs.c:648
 msgid "Composer"
 msgstr "Composer"
 
-#: ../src/browser.c:3107 ../src/misc.c:1914
+#: ../src/browser.c:3113 ../src/misc.c:1910
 msgid "Original Artist"
 msgstr "Original Artist"
 
-#: ../src/browser.c:3108 ../src/misc.c:1915
+#: ../src/browser.c:3114 ../src/misc.c:1911
 msgid "Copyright"
 msgstr "Copyright"
 
-#: ../src/browser.c:3108 ../src/misc.c:1916
+#: ../src/browser.c:3114 ../src/misc.c:1912
 msgid "URL"
 msgstr "URL"
 
-#: ../src/browser.c:3109 ../src/misc.c:1917
+#: ../src/browser.c:3115 ../src/misc.c:1913
 msgid "Encoded By"
 msgstr "Encoded By"
 
-#: ../src/browser.c:3110
+#: ../src/browser.c:3116
 msgid "# Albums"
 msgstr "# Albums"
 
-#: ../src/browser.c:3111 ../src/browser.c:3112
+#: ../src/browser.c:3117 ../src/browser.c:3118
 msgid "# Files"
 msgstr "# Files"
 
-#: ../src/browser.c:3137
+#: ../src/browser.c:3143
 msgid "Enter a directory to browse."
 msgstr "Enter a directory to browse."
 
-#: ../src/browser.c:3146
+#: ../src/browser.c:3152
 msgid "Select a directory to browse."
 msgstr "Select a directory to browse."
 
@@ -852,33 +841,33 @@ msgstr "Select a directory to browse."
 #. * The label for displaying number of files in path (without subdirs)
 #.
 #. Translators: No files, as in "0 files".
-#: ../src/browser.c:3153 ../src/easytag.c:3469
+#: ../src/browser.c:3159 ../src/easytag.c:3463
 msgid "No files"
 msgstr "No files"
 
-#: ../src/browser.c:3231
+#: ../src/browser.c:3237
 msgid "Artist & Album"
 msgstr "Artist & Album"
 
 #. Only directories changed
-#: ../src/browser.c:3595 ../src/easytag.c:2881
+#: ../src/browser.c:3601 ../src/easytag.c:2875
 msgid "Rename Directory"
 msgstr "Rename Directory"
 
-#: ../src/browser.c:3617
+#: ../src/browser.c:3623
 #, c-format
 msgid "Rename the directory '%s' to:"
 msgstr "Rename the directory '%s' to:"
 
-#: ../src/browser.c:3636 ../src/misc.c:1172
+#: ../src/browser.c:3642 ../src/misc.c:1168
 msgid "Use mask:"
 msgstr "Use mask:"
 
-#: ../src/browser.c:3639
+#: ../src/browser.c:3645
 msgid "If activated, it will use masks to rename directory."
 msgstr "If activated, it will use masks to rename directory."
 
-#: ../src/browser.c:3657
+#: ../src/browser.c:3663
 msgid ""
 "Select or type in a mask using codes (see Legend in Scanner Window) to "
 "rename the directory from tag fields."
@@ -887,63 +876,63 @@ msgstr ""
 "rename the directory from tag fields."
 
 #. Preview label
-#: ../src/browser.c:3681
+#: ../src/browser.c:3687
 msgid "Rename directory preview"
 msgstr "Rename directory preview"
 
-#: ../src/browser.c:3773
+#: ../src/browser.c:3779
 msgid "You must type a directory name"
 msgstr "You must type a directory name"
 
-#: ../src/browser.c:3774 ../src/browser.c:3795
+#: ../src/browser.c:3780 ../src/browser.c:3801
 msgid "Directory Name Error"
 msgstr "Directory Name Error"
 
-#: ../src/browser.c:3792
+#: ../src/browser.c:3798
 #, c-format
 msgid "Could not convert '%s' into filename encoding."
 msgstr "Could not convert '%s' into filename encoding."
 
-#: ../src/browser.c:3794
+#: ../src/browser.c:3800
 msgid "Please use another name"
 msgstr "Please use another name"
 
-#: ../src/browser.c:3864
+#: ../src/browser.c:3870
 #, c-format
 msgid "The directory name '%s' already exists"
 msgstr "The directory name '%s' already exists"
 
-#: ../src/browser.c:3865 ../src/easytag.c:2964
+#: ../src/browser.c:3871 ../src/easytag.c:2958
 msgid "Rename File Error"
 msgstr "Rename File Error"
 
-#: ../src/browser.c:3903 ../src/browser.c:3932
+#: ../src/browser.c:3909 ../src/browser.c:3938
 msgid "Rename Directory Error"
 msgstr "Rename Directory Error"
 
-#: ../src/browser.c:3970
+#: ../src/browser.c:3976
 msgid "Directory renamed"
 msgstr "Directory renamed"
 
-#: ../src/browser.c:4006
+#: ../src/browser.c:4012
 msgid "Browse Directory With"
 msgstr "Browse Directory With"
 
-#: ../src/browser.c:4022 ../src/browser.c:4148
+#: ../src/browser.c:4028 ../src/browser.c:4154
 msgid "Program to run:"
 msgstr "Program to run:"
 
-#: ../src/browser.c:4034
+#: ../src/browser.c:4040
 msgid ""
 "Enter the program to run. It will receive the current directory as parameter."
 msgstr ""
 "Enter the program to run. It will receive the current directory as parameter."
 
-#: ../src/browser.c:4128
+#: ../src/browser.c:4134
 msgid "Open Files With"
 msgstr "Open Files With"
 
-#: ../src/browser.c:4160
+#: ../src/browser.c:4166
 msgid ""
 "Enter the program to run. It will receive the current file as parameter."
 msgstr ""
@@ -1038,7 +1027,7 @@ msgstr "All Fields"
 
 #. Translators: This option is for the previous 'search in' option. For
 #. * instance, translate this as "Search in:" "Other".
-#: ../src/cddb.c:492 ../src/picture.c:1037 ../src/prefs.c:807
+#: ../src/cddb.c:492 ../src/picture.c:862 ../src/prefs.c:807
 msgid "Other"
 msgstr "Other"
 
@@ -1132,7 +1121,7 @@ msgstr "Categories"
 msgid "Results:"
 msgstr "Results:"
 
-#: ../src/cddb.c:606 ../src/misc.c:1951
+#: ../src/cddb.c:606 ../src/misc.c:1947
 msgid "Search:"
 msgstr "Search:"
 
@@ -1194,7 +1183,7 @@ msgid "# Tracks"
 msgstr "# Tracks"
 
 #. Check box to run the scanner
-#: ../src/cddb.c:847 ../src/misc.c:2992
+#: ../src/cddb.c:847 ../src/misc.c:2988
 msgid "Run the current scanner for each file"
 msgstr "Run the current scanner for each file"
 
@@ -1656,7 +1645,7 @@ msgstr "Currently using locale '%s' (and eventually '%s')"
 msgid "Unable to create setting directories"
 msgstr "Unable to create setting directories"
 
-#: ../src/easytag.c:427 ../src/et_core.c:597 ../src/et_core.c:609
+#: ../src/easytag.c:427 ../src/et_core.c:638 ../src/et_core.c:650
 #, c-format
 msgid "Error while querying information for file: '%s' (%s)"
 msgstr "Error while querying information for file: '%s' (%s)"
@@ -1669,11 +1658,11 @@ msgstr "Cannot open path '%s'"
 #.
 #. * Browser
 #.
-#: ../src/easytag.c:582 ../src/prefs.c:142
+#: ../src/easytag.c:583 ../src/prefs.c:142
 msgid "Browser"
 msgstr "Browser"
 
-#: ../src/easytag.c:604 ../src/et_core.c:2817
+#: ../src/easytag.c:605 ../src/et_core.c:2858
 msgid "File"
 msgstr "File"
 
@@ -1683,38 +1672,38 @@ msgstr "File"
 #. gtk_label_set_text(GTK_LABEL(VersionValueLabel),"");
 #. Version changed to encoder version
 #. Encoder version
-#: ../src/easytag.c:636 ../src/easytag.c:4232 ../src/flac_header.c:201
+#: ../src/easytag.c:637 ../src/easytag.c:4226 ../src/flac_header.c:201
 #: ../src/monkeyaudio_header.c:96 ../src/musepack_header.c:98
 #: ../src/ogg_header.c:389 ../src/opus_header.c:221 ../src/wavpack_header.c:72
 #, c-format
 msgid "Encoder:"
 msgstr "Encoder:"
 
-#: ../src/easytag.c:644
+#: ../src/easytag.c:645
 msgid "Bitrate:"
 msgstr "Bitrate:"
 
 #. Translators: Please try to keep this string as short as possible as it
 #. * is shown in a narrow column.
-#: ../src/easytag.c:654
+#: ../src/easytag.c:655
 msgid "Frequency:"
 msgstr "Frequency:"
 
 #. Mode
-#: ../src/easytag.c:665 ../src/easytag.c:4236 ../src/mpeg_header.c:216
+#: ../src/easytag.c:666 ../src/easytag.c:4230 ../src/mpeg_header.c:216
 msgid "Mode:"
 msgstr "Mode:"
 
-#: ../src/easytag.c:672
+#: ../src/easytag.c:673
 msgid "Size:"
 msgstr "Size:"
 
-#: ../src/easytag.c:679
+#: ../src/easytag.c:680
 msgid "Duration:"
 msgstr "Duration:"
 
 #. Main Frame
-#: ../src/easytag.c:726 ../src/et_core.c:2747
+#: ../src/easytag.c:726 ../src/et_core.c:2788
 msgid "Tag"
 msgstr "Tag"
 
@@ -1870,562 +1859,562 @@ msgstr "Tag selected files with this encoder name"
 #.
 #. * 2 - Page for extra tag fields
 #.
-#: ../src/easytag.c:1147 ../src/et_core.c:3189 ../src/et_core.c:3192
+#: ../src/easytag.c:1146 ../src/et_core.c:3230 ../src/et_core.c:3233
 msgid "Images"
 msgstr "Images"
 
-#: ../src/easytag.c:1171
+#: ../src/easytag.c:1170
 msgid "You can use drag and drop to add an image"
 msgstr "You can use drag and drop to add an image"
 
-#: ../src/easytag.c:1218
+#: ../src/easytag.c:1219
 msgid "Add images to the tag"
 msgstr "Add images to the tag"
 
-#: ../src/easytag.c:1236
+#: ../src/easytag.c:1237
 msgid "Remove selected images from the tag"
 msgstr "Remove selected images from the tag"
 
-#: ../src/easytag.c:1250
+#: ../src/easytag.c:1248
 msgid "Save the selected images to files"
 msgstr "Save the selected images to files"
 
-#: ../src/easytag.c:1261
+#: ../src/easytag.c:1259
 msgid "Edit image properties"
 msgstr "Edit image properties"
 
-#: ../src/easytag.c:1275
+#: ../src/easytag.c:1270
 msgid "Tag selected files with these images"
 msgstr "Tag selected files with these images"
 
-#: ../src/easytag.c:1333
+#: ../src/easytag.c:1328
 #, c-format
 msgid "Selected files tagged with title '%s'."
 msgstr "Selected files tagged with title '%s'."
 
-#: ../src/easytag.c:1335
+#: ../src/easytag.c:1330
 msgid "Removed title from selected files."
 msgstr "Removed title from selected files."
 
-#: ../src/easytag.c:1350
+#: ../src/easytag.c:1345
 #, c-format
 msgid "Selected files tagged with artist '%s'."
 msgstr "Selected files tagged with artist '%s'."
 
-#: ../src/easytag.c:1352
+#: ../src/easytag.c:1347
 msgid "Removed artist from selected files."
 msgstr "Removed artist from selected files."
 
-#: ../src/easytag.c:1366
+#: ../src/easytag.c:1361
 #, c-format
 msgid "Selected files tagged with album artist '%s'."
 msgstr "Selected files tagged with album artist '%s'."
 
-#: ../src/easytag.c:1368
+#: ../src/easytag.c:1363
 msgid "Removed album artist from selected files."
 msgstr "Removed album artist from selected files."
 
-#: ../src/easytag.c:1383
+#: ../src/easytag.c:1378
 #, c-format
 msgid "Selected files tagged with album '%s'."
 msgstr "Selected files tagged with album '%s'."
 
-#: ../src/easytag.c:1385
+#: ../src/easytag.c:1380
 msgid "Removed album name from selected files."
 msgstr "Removed album name from selected files."
 
-#: ../src/easytag.c:1422
+#: ../src/easytag.c:1417
 #, c-format
 msgid "Selected files tagged with disc number '%s/%s'."
 msgstr "Selected files tagged with disc number '%s/%s'."
 
-#: ../src/easytag.c:1427
+#: ../src/easytag.c:1422
 #, c-format
 msgid "Selected files tagged with disc number like 'xx'."
 msgstr "Selected files tagged with disc number like 'xx'."
 
-#: ../src/easytag.c:1432
+#: ../src/easytag.c:1427
 msgid "Removed disc number from selected files."
 msgstr "Removed disc number from selected files."
 
-#: ../src/easytag.c:1448
+#: ../src/easytag.c:1443
 #, c-format
 msgid "Selected files tagged with year '%s'."
 msgstr "Selected files tagged with year '%s'."
 
-#: ../src/easytag.c:1450
+#: ../src/easytag.c:1445
 msgid "Removed year from selected files."
 msgstr "Removed year from selected files."
 
-#: ../src/easytag.c:1476 ../src/easytag.c:1567
+#: ../src/easytag.c:1471 ../src/easytag.c:1561
 #, c-format
 msgid "Selected files tagged with track like 'xx/%s'."
 msgstr "Selected files tagged with track like 'xx/%s'."
 
-#: ../src/easytag.c:1479
+#: ../src/easytag.c:1474
 #, c-format
 msgid "Selected files tagged with track like 'xx'."
 msgstr "Selected files tagged with track like 'xx'."
 
-#: ../src/easytag.c:1483 ../src/easytag.c:1570
+#: ../src/easytag.c:1478 ../src/easytag.c:1564
 msgid "Removed track number from selected files."
 msgstr "Removed track number from selected files."
 
 #. msg = g_strdup_printf(_("All %d tracks numbered sequentially."), ETCore->ETFileSelectionList_Length);
-#: ../src/easytag.c:1540
+#: ../src/easytag.c:1534
 #, c-format
 msgid "Selected tracks numbered sequentially."
 msgstr "Selected tracks numbered sequentially."
 
-#: ../src/easytag.c:1586
+#: ../src/easytag.c:1580
 #, c-format
 msgid "Selected files tagged with genre '%s'."
 msgstr "Selected files tagged with genre '%s'."
 
-#: ../src/easytag.c:1588
+#: ../src/easytag.c:1582
 msgid "Removed genre from selected files."
 msgstr "Removed genre from selected files."
 
-#: ../src/easytag.c:1610
+#: ../src/easytag.c:1604
 #, c-format
 msgid "Selected files tagged with comment '%s'."
 msgstr "Selected files tagged with comment '%s'."
 
-#: ../src/easytag.c:1612
+#: ../src/easytag.c:1606
 msgid "Removed comment from selected files."
 msgstr "Removed comment from selected files."
 
-#: ../src/easytag.c:1626
+#: ../src/easytag.c:1620
 #, c-format
 msgid "Selected files tagged with composer '%s'."
 msgstr "Selected files tagged with composer '%s'."
 
-#: ../src/easytag.c:1628
+#: ../src/easytag.c:1622
 msgid "Removed composer from selected files."
 msgstr "Removed composer from selected files."
 
-#: ../src/easytag.c:1643
+#: ../src/easytag.c:1637
 #, c-format
 msgid "Selected files tagged with original artist '%s'."
 msgstr "Selected files tagged with original artist '%s'."
 
-#: ../src/easytag.c:1645
+#: ../src/easytag.c:1639
 msgid "Removed original artist from selected files."
 msgstr "Removed original artist from selected files."
 
-#: ../src/easytag.c:1660
+#: ../src/easytag.c:1654
 #, c-format
 msgid "Selected files tagged with copyright '%s'."
 msgstr "Selected files tagged with copyright '%s'."
 
-#: ../src/easytag.c:1662
+#: ../src/easytag.c:1656
 msgid "Removed copyright from selected files."
 msgstr "Removed copyright from selected files."
 
-#: ../src/easytag.c:1677
+#: ../src/easytag.c:1671
 #, c-format
 msgid "Selected files tagged with URL '%s'."
 msgstr "Selected files tagged with URL '%s'."
 
-#: ../src/easytag.c:1679
+#: ../src/easytag.c:1673
 msgid "Removed URL from selected files."
 msgstr "Removed URL from selected files."
 
-#: ../src/easytag.c:1694
+#: ../src/easytag.c:1688
 #, c-format
 msgid "Selected files tagged with encoder name '%s'."
 msgstr "Selected files tagged with encoder name '%s'."
 
-#: ../src/easytag.c:1696
+#: ../src/easytag.c:1690
 msgid "Removed encoder name from selected files."
 msgstr "Removed encoder name from selected files."
 
-#: ../src/easytag.c:1728
+#: ../src/easytag.c:1722
 msgid "Selected files tagged with images."
 msgstr "Selected files tagged with images."
 
-#: ../src/easytag.c:1730
+#: ../src/easytag.c:1724
 msgid "Removed images from selected files."
 msgstr "Removed images from selected files."
 
-#: ../src/easytag.c:2011
+#: ../src/easytag.c:2005
 msgid "Select Mode and Mask, and redo the same action"
 msgstr "Select Mode and Mask, and redo the same action"
 
-#: ../src/easytag.c:2063
+#: ../src/easytag.c:2057
 msgid "All tags have been scanned"
 msgstr "All tags have been scanned"
 
-#: ../src/easytag.c:2119
+#: ../src/easytag.c:2113
 msgid "All tags have been removed"
 msgstr "All tags have been removed"
 
-#: ../src/easytag.c:2424
+#: ../src/easytag.c:2418
 #, c-format
 msgid "A file was changed by an external program"
 msgid_plural "%d files were changed by an external program."
 msgstr[0] "A file was changed by an external program"
 msgstr[1] "%d files were changed by an external program."
 
-#: ../src/easytag.c:2429
+#: ../src/easytag.c:2423
 msgid "Do you want to continue saving the file?"
 msgstr "Do you want to continue saving the file?"
 
-#: ../src/easytag.c:2487 ../src/easytag.c:2507
+#: ../src/easytag.c:2481 ../src/easytag.c:2501
 msgid "Saving files was stopped"
 msgstr "Saving files was stopped"
 
-#: ../src/easytag.c:2509
+#: ../src/easytag.c:2503
 msgid "All files have been saved"
 msgstr "All files have been saved"
 
-#: ../src/easytag.c:2644
+#: ../src/easytag.c:2638
 #, c-format
 msgid "Cannot delete file (%s)"
 msgstr "Cannot delete file (%s)"
 
-#: ../src/easytag.c:2665
+#: ../src/easytag.c:2659
 msgid "Files have been partially deleted"
 msgstr "Files have been partially deleted"
 
-#: ../src/easytag.c:2667
+#: ../src/easytag.c:2661
 msgid "All files have been deleted"
 msgstr "All files have been deleted"
 
-#: ../src/easytag.c:2783
+#: ../src/easytag.c:2777
 #, c-format
 msgid "Do you want to write the tag of file '%s'?"
 msgstr "Do you want to write the tag of file '%s'?"
 
-#: ../src/easytag.c:2785
+#: ../src/easytag.c:2779
 msgid "Confirm Tag Writing"
 msgstr "Confirm Tag Writing"
 
-#: ../src/easytag.c:2790 ../src/easytag.c:2910 ../src/easytag.c:3173
+#: ../src/easytag.c:2784 ../src/easytag.c:2904 ../src/easytag.c:3167
 msgid "Repeat action for the remaining files"
 msgstr "Repeat action for the remaining files"
 
 #. Directories and filename changed
-#: ../src/easytag.c:2874 ../src/scan_dialog.c:183
+#: ../src/easytag.c:2868 ../src/scan_dialog.c:183
 msgid "Rename File and Directory"
 msgstr "Rename File and Directory"
 
-#: ../src/easytag.c:2875
+#: ../src/easytag.c:2869
 msgid "File and directory rename confirmation required"
 msgstr "File and directory rename confirmation required"
 
-#: ../src/easytag.c:2876
+#: ../src/easytag.c:2870
 #, c-format
 msgid "Do you want to rename the file and directory '%s' to '%s'?"
 msgstr "Do you want to rename the file and directory '%s' to '%s'?"
 
-#: ../src/easytag.c:2882
+#: ../src/easytag.c:2876
 msgid "Directory rename confirmation required"
 msgstr "Directory rename confirmation required"
 
-#: ../src/easytag.c:2883
+#: ../src/easytag.c:2877
 #, c-format
 msgid "Do you want to rename the directory '%s' to '%s'?"
 msgstr "Do you want to rename the directory '%s' to '%s'?"
 
 #. Only filename changed
-#: ../src/easytag.c:2889
+#: ../src/easytag.c:2883
 msgid "Rename File"
 msgstr "Rename File"
 
-#: ../src/easytag.c:2890
+#: ../src/easytag.c:2884
 msgid "File rename confirmation required"
 msgstr "File rename confirmation required"
 
-#: ../src/easytag.c:2891
+#: ../src/easytag.c:2885
 #, c-format
 msgid "Do you want to rename the file '%s' to '%s'?"
 msgstr "Do you want to rename the file '%s' to '%s'?"
 
-#: ../src/easytag.c:2957
+#: ../src/easytag.c:2951
 #, c-format
 msgid "Cannot rename file '%s' to '%s'"
 msgstr "Cannot rename file '%s' to '%s'"
 
-#: ../src/easytag.c:2971
+#: ../src/easytag.c:2965
 #, c-format
 msgid "Cannot rename file '%s' to '%s': %s"
 msgstr "Cannot rename file '%s' to '%s': %s"
 
-#: ../src/easytag.c:2975
+#: ../src/easytag.c:2969
 msgid "File(s) not renamed"
 msgstr "File(s) not renamed"
 
-#: ../src/easytag.c:3087
+#: ../src/easytag.c:3081
 #, c-format
 msgid "Writing tag of '%s'"
 msgstr "Writing tag of '%s'"
 
-#: ../src/easytag.c:3094
+#: ../src/easytag.c:3088
 msgid "Tag(s) written"
 msgstr "Tag(s) written"
 
-#: ../src/easytag.c:3109
+#: ../src/easytag.c:3103
 #, c-format
 msgid "Cannot write tag in file '%s' (%s)"
 msgstr "Cannot write tag in file '%s' (%s)"
 
-#: ../src/easytag.c:3122
+#: ../src/easytag.c:3116
 #, c-format
 msgid "Cannot write tag in file '%s'"
 msgstr "Cannot write tag in file '%s'"
 
-#: ../src/easytag.c:3125
+#: ../src/easytag.c:3119
 msgid "Tag Write Error"
 msgstr "Tag Write Error"
 
-#: ../src/easytag.c:3170 ../src/easytag.c:3184
+#: ../src/easytag.c:3164 ../src/easytag.c:3178
 #, c-format
 msgid "Do you really want to delete the file '%s'?"
 msgstr "Do you really want to delete the file '%s'?"
 
-#: ../src/easytag.c:3176 ../src/easytag.c:3186
+#: ../src/easytag.c:3170 ../src/easytag.c:3180
 msgid "Delete File"
 msgstr "Delete File"
 
-#: ../src/easytag.c:3211
+#: ../src/easytag.c:3205
 #, c-format
 msgid "File '%s' deleted"
 msgstr "File '%s' deleted"
 
-#: ../src/easytag.c:3346
+#: ../src/easytag.c:3340
 #, c-format
 msgid "Cannot read directory '%s'"
 msgstr "Cannot read directory '%s'"
 
-#: ../src/easytag.c:3350
+#: ../src/easytag.c:3344
 msgid "Directory Read Error"
 msgstr "Directory Read Error"
 
 #. Read the directory recursively
-#: ../src/easytag.c:3371
+#: ../src/easytag.c:3365
 #, c-format
 msgid "Search in progress…"
 msgstr "Search in progress…"
 
-#: ../src/easytag.c:3394 ../src/et_core.c:2824
+#: ../src/easytag.c:3388 ../src/et_core.c:2865
 #, c-format
 msgid "File: '%s'"
 msgstr "File: '%s'"
 
-#: ../src/easytag.c:3444
+#: ../src/easytag.c:3438
 #, c-format
 msgid "Found one file in this directory and subdirectories"
 msgid_plural "Found %d files in this directory and subdirectories"
 msgstr[0] "Found one file in this directory and subdirectories"
 msgstr[1] "Found %d files in this directory and subdirectories"
 
-#: ../src/easytag.c:3451
+#: ../src/easytag.c:3445
 #, c-format
 msgid "Found one file in this directory"
 msgid_plural "Found %d files in this directory"
 msgstr[0] "Found one file in this directory"
 msgstr[1] "Found %d files in this directory"
 
-#: ../src/easytag.c:3473
+#: ../src/easytag.c:3467
 msgid "No file found in this directory and subdirectories"
 msgstr "No file found in this directory and subdirectories"
 
-#: ../src/easytag.c:3475
+#: ../src/easytag.c:3469
 msgid "No file found in this directory"
 msgstr "No file found in this directory"
 
-#: ../src/easytag.c:3543
+#: ../src/easytag.c:3537
 #, c-format
 msgid "Error opening directory '%s' (%s)"
 msgstr "Error opening directory '%s' (%s)"
 
-#: ../src/easytag.c:3579
+#: ../src/easytag.c:3573
 #, c-format
 msgid "Cannot read directory (%s)"
 msgstr "Cannot read directory (%s)"
 
-#: ../src/easytag.c:3599
+#: ../src/easytag.c:3593
 msgid "Searching for audio files…"
 msgstr "Searching for audio files…"
 
-#: ../src/easytag.c:3600
+#: ../src/easytag.c:3594
 msgid "Searching"
 msgstr "Searching"
 
-#: ../src/easytag.c:4266
+#: ../src/easytag.c:4260
 msgid "Select a directory to browse"
 msgstr "Select a directory to browse"
 
 #. Menu items
-#: ../src/easytag.c:4412
+#: ../src/easytag.c:4406
 msgid "Tag selected files with this field"
 msgstr "Tag selected files with this field"
 
-#: ../src/easytag.c:4424 ../src/scan_dialog.c:2124
+#: ../src/easytag.c:4418 ../src/scan_dialog.c:2128
 msgid "Convert '_' and '%20' to spaces"
 msgstr "Convert '_' and '%20' to spaces"
 
-#: ../src/easytag.c:4431 ../src/scan_dialog.c:2126
+#: ../src/easytag.c:4425 ../src/scan_dialog.c:2130
 msgid "Convert ' ' to '_'"
 msgstr "Convert ' ' to '_'"
 
-#: ../src/easytag.c:4442
+#: ../src/easytag.c:4436
 msgid "All uppercase"
 msgstr "All uppercase"
 
-#: ../src/easytag.c:4449
+#: ../src/easytag.c:4443
 msgid "All lowercase"
 msgstr "All lowercase"
 
-#: ../src/easytag.c:4456
+#: ../src/easytag.c:4450
 msgid "First letter uppercase"
 msgstr "First letter uppercase"
 
-#: ../src/easytag.c:4463
+#: ../src/easytag.c:4457
 msgid "First letter uppercase of each word"
 msgstr "First letter uppercase of each word"
 
-#: ../src/easytag.c:4474 ../src/prefs.c:1023 ../src/scan_dialog.c:2224
+#: ../src/easytag.c:4468 ../src/prefs.c:1023 ../src/scan_dialog.c:2254
 msgid "Remove spaces"
 msgstr "Remove spaces"
 
-#: ../src/easytag.c:4481
+#: ../src/easytag.c:4475
 msgid "Insert space before uppercase letter"
 msgstr "Insert space before uppercase letter"
 
-#: ../src/easytag.c:4488
+#: ../src/easytag.c:4482
 msgid "Remove duplicate spaces or underscores"
 msgstr "Remove duplicate spaces or underscores"
 
-#: ../src/easytag.c:4495
+#: ../src/easytag.c:4489
 msgid "Remove all text"
 msgstr "Remove all text"
 
-#: ../src/easytag.c:4514
+#: ../src/easytag.c:4508
 msgid "EasyTAG: Normal exit."
 msgstr "EasyTAG: Normal exit."
 
-#: ../src/easytag.c:4566
+#: ../src/easytag.c:4560
 msgid "Do you want to save them before quitting?"
 msgstr "Do you want to save them before quitting?"
 
-#: ../src/easytag.c:4593
+#: ../src/easytag.c:4587
 msgid "Do you really want to quit?"
 msgstr "Do you really want to quit?"
 
-#: ../src/et_core.c:510
+#: ../src/et_core.c:551
 #, c-format
 msgid "Error reading tag from ogg file (%s)"
 msgstr "Error reading tag from ogg file (%s)"
 
-#: ../src/et_core.c:539
+#: ../src/et_core.c:580
 #, c-format
 msgid "Error reading tag from Opus file (%s)"
 msgstr "Error reading tag from Opus file (%s)"
 
-#: ../src/et_core.c:682
+#: ../src/et_core.c:723
 #, c-format
 msgid "Automatic corrections applied for file '%s'."
 msgstr "Automatic corrections applied for file '%s'."
 
-#: ../src/et_core.c:2707
+#: ../src/et_core.c:2748
 msgid "ID3 Tag"
 msgstr "ID3 Tag"
 
-#: ../src/et_core.c:2713
+#: ../src/et_core.c:2754
 msgid "Ogg Vorbis Tag"
 msgstr "Ogg Vorbis Tag"
 
-#: ../src/et_core.c:2719
+#: ../src/et_core.c:2760
 msgid "FLAC Vorbis Tag"
 msgstr "FLAC Vorbis Tag"
 
-#: ../src/et_core.c:2724
+#: ../src/et_core.c:2765
 msgid "APE Tag"
 msgstr "APE Tag"
 
-#: ../src/et_core.c:2729
+#: ../src/et_core.c:2770
 msgid "MP4/M4A/AAC Tag"
 msgstr "MP4/M4A/AAC Tag"
 
-#: ../src/et_core.c:2735
+#: ../src/et_core.c:2776
 msgid "Wavpack Tag"
 msgstr "Wavpack Tag"
 
-#: ../src/et_core.c:2741
+#: ../src/et_core.c:2782
 msgid "Opus Tag"
 msgstr "Opus Tag"
 
-#: ../src/et_core.c:2761
+#: ../src/et_core.c:2802
 msgid "MP3 File"
 msgstr "MP3 File"
 
-#: ../src/et_core.c:2765
+#: ../src/et_core.c:2806
 msgid "MP2 File"
 msgstr "MP2 File"
 
-#: ../src/et_core.c:2771
+#: ../src/et_core.c:2812
 msgid "Ogg Vorbis File"
 msgstr "Ogg Vorbis File"
 
-#: ../src/et_core.c:2777
+#: ../src/et_core.c:2818
 msgid "Speex File"
 msgstr "Speex File"
 
-#: ../src/et_core.c:2783
+#: ../src/et_core.c:2824
 msgid "FLAC File"
 msgstr "FLAC File"
 
-#: ../src/et_core.c:2788
+#: ../src/et_core.c:2829
 msgid "MusePack File"
 msgstr "MusePack File"
 
-#: ../src/et_core.c:2792
+#: ../src/et_core.c:2833
 msgid "Monkey's Audio File"
 msgstr "Monkey's Audio File"
 
-#: ../src/et_core.c:2797
+#: ../src/et_core.c:2838
 msgid "MP4/AAC File"
 msgstr "MP4/AAC File"
 
-#: ../src/et_core.c:2803
+#: ../src/et_core.c:2844
 msgid "Wavpack File"
 msgstr "Wavpack File"
 
-#: ../src/et_core.c:2809
+#: ../src/et_core.c:2850
 msgid "Opus File"
 msgstr "Opus File"
 
-#: ../src/et_core.c:2868 ../src/et_core.c:2923
+#: ../src/et_core.c:2909 ../src/et_core.c:2964
 msgid "File not found"
 msgstr "File not found"
 
-#: ../src/et_core.c:2873
+#: ../src/et_core.c:2914
 #, c-format
 msgid "Cannot query file information (%s)"
 msgstr "Cannot query file information (%s)"
 
-#: ../src/et_core.c:2907
+#: ../src/et_core.c:2948
 msgid "Read-only file"
 msgstr "Read-only file"
 
 #. And refresh the number of files in this directory
-#: ../src/et_core.c:2971
+#: ../src/et_core.c:3012
 #, c-format
 msgid "One file"
 msgid_plural "%u files"
 msgstr[0] "One file"
 msgstr[1] "%u files"
 
-#: ../src/et_core.c:3175
+#: ../src/et_core.c:3216
 #, c-format
 msgid "Images (%d)"
 msgstr "Images (%d)"
 
 #. Bitrate
-#: ../src/et_core.c:3217 ../src/flac_header.c:205
-#: ../src/monkeyaudio_header.c:86 ../src/mp4_header.c:134
+#: ../src/et_core.c:3258 ../src/flac_header.c:205
+#: ../src/monkeyaudio_header.c:86 ../src/mp4_header.cc:132
 #: ../src/mpeg_header.c:206 ../src/musepack_header.c:88
 #: ../src/ogg_header.c:401 ../src/opus_header.c:227 ../src/wavpack_header.c:78
 #, c-format
@@ -2433,28 +2422,28 @@ msgid "%d kb/s"
 msgstr "%d kb/s"
 
 #. Samplerate
-#: ../src/et_core.c:3222 ../src/flac_header.c:210
-#: ../src/monkeyaudio_header.c:91 ../src/mp4_header.c:139
+#: ../src/et_core.c:3263 ../src/flac_header.c:210
+#: ../src/monkeyaudio_header.c:91 ../src/mp4_header.cc:137
 #: ../src/mpeg_header.c:211 ../src/musepack_header.c:93
 #: ../src/ogg_header.c:406 ../src/opus_header.c:232 ../src/wavpack_header.c:83
 #, c-format
 msgid "%d Hz"
 msgstr "%d Hz"
 
-#: ../src/et_core.c:3368 ../src/scan_dialog.c:688
+#: ../src/et_core.c:3409 ../src/scan_dialog.c:688
 #, c-format
 msgid "Could not convert filename '%s' into system filename encoding"
 msgstr "Could not convert filename '%s' into system filename encoding"
 
-#: ../src/et_core.c:3370
+#: ../src/et_core.c:3411
 msgid "Try setting the environment variable G_FILENAME_ENCODING."
 msgstr "Try setting the environment variable G_FILENAME_ENCODING."
 
-#: ../src/et_core.c:3371 ../src/scan_dialog.c:690
+#: ../src/et_core.c:3412 ../src/scan_dialog.c:690
 msgid "Filename translation"
 msgstr "Filename translation"
 
-#: ../src/et_core.c:4076
+#: ../src/et_core.c:4117
 #, c-format
 msgid "Error writing tag type %d to file %s (%s)"
 msgstr "Error writing tag type %d to file %s (%s)"
@@ -2463,7 +2452,7 @@ msgstr "Error writing tag type %d to file %s (%s)"
 #. Mode
 #. mpeg4ip library seems to always return -1
 #. Mode
-#: ../src/flac_header.c:215 ../src/mp4_header.c:145 ../src/ogg_header.c:411
+#: ../src/flac_header.c:215 ../src/mp4_header.cc:143 ../src/ogg_header.c:411
 #: ../src/opus_header.c:237 ../src/wavpack_header.c:88
 msgid "Channels:"
 msgstr "Channels:"
@@ -2473,7 +2462,7 @@ msgstr "Channels:"
 msgid "Error while opening file: '%s' as FLAC (%s)."
 msgstr "Error while opening file: '%s' as FLAC (%s)."
 
-#: ../src/flac_tag.c:352 ../src/ogg_tag.c:310
+#: ../src/flac_tag.c:352 ../src/ogg_tag.c:304
 #, c-format
 msgid ""
 "The year value '%s' seems to be invalid in file '%s'. The information will "
@@ -2492,17 +2481,17 @@ msgstr "Picture block isn't valid: '%s'"
 msgid "Error: Failed to write comments to file '%s' (%s)."
 msgstr "Error: Failed to write comments to file '%s' (%s)."
 
-#: ../src/flac_tag.c:1099 ../src/ogg_tag.c:1166
+#: ../src/flac_tag.c:1099 ../src/ogg_tag.c:1161
 #, c-format
 msgid "Written tag of '%s'"
 msgstr "Written tag of '%s'"
 
-#: ../src/id3_tag.c:158
+#: ../src/id3_tag.c:205
 #, c-format
 msgid "Error while reading file: '%s' (%s)"
 msgstr "Error while reading file: '%s' (%s)"
 
-#: ../src/id3_tag.c:170
+#: ../src/id3_tag.c:217
 #, c-format
 msgid ""
 "As the following corrupted file '%s' will cause an error in id3lib, it will "
@@ -2511,31 +2500,31 @@ msgstr ""
 "As the following corrupted file '%s' will cause an error in id3lib, it will "
 "not be processed"
 
-#: ../src/id3_tag.c:172
+#: ../src/id3_tag.c:219
 msgid "Corrupted file"
 msgstr "Corrupted file"
 
-#: ../src/id3_tag.c:555
+#: ../src/id3_tag.c:592
 #, c-format
 msgid "Removed tag of '%s'"
 msgstr "Removed tag of '%s'"
 
-#: ../src/id3_tag.c:559 ../src/id3_tag.c:659
+#: ../src/id3_tag.c:596 ../src/id3_tag.c:696
 #, c-format
 msgid "Error while removing ID3v1 tag of '%s' (%s)"
 msgstr "Error while removing ID3v1 tag of '%s' (%s)"
 
-#: ../src/id3_tag.c:561 ../src/id3_tag.c:631
+#: ../src/id3_tag.c:598 ../src/id3_tag.c:668
 #, c-format
 msgid "Error while removing ID3v2 tag of '%s' (%s)"
 msgstr "Error while removing ID3v2 tag of '%s' (%s)"
 
-#: ../src/id3_tag.c:580
+#: ../src/id3_tag.c:617
 #, c-format
 msgid "Error while updating ID3v2 tag of '%s' (%s)"
 msgstr "Error while updating ID3v2 tag of '%s' (%s)"
 
-#: ../src/id3_tag.c:608
+#: ../src/id3_tag.c:645
 msgid ""
 "You have tried to save this tag to Unicode but it was detected that your "
 "version of id3lib is buggy"
@@ -2543,7 +2532,7 @@ msgstr ""
 "You have tried to save this tag to Unicode but it was detected that your "
 "version of id3lib is buggy"
 
-#: ../src/id3_tag.c:610
+#: ../src/id3_tag.c:647
 #, c-format
 msgid ""
 "If you reload this file, some characters in the tag may not be displayed "
@@ -2562,90 +2551,90 @@ msgstr ""
 "\n"
 "File: %s"
 
-#: ../src/id3_tag.c:617
+#: ../src/id3_tag.c:654
 msgid "Buggy id3lib"
 msgstr "Buggy id3lib"
 
-#: ../src/id3_tag.c:651
+#: ../src/id3_tag.c:688
 #, c-format
 msgid "Error while updating ID3v1 tag of '%s' (%s)"
 msgstr "Error while updating ID3v1 tag of '%s' (%s)"
 
-#: ../src/id3_tag.c:665 ../src/id3v24_tag.c:1048
+#: ../src/id3_tag.c:702 ../src/id3v24_tag.c:1108
 #, c-format
 msgid "Updated tag of '%s'"
 msgstr "Updated tag of '%s'"
 
-#: ../src/id3_tag.c:684
+#: ../src/id3_tag.c:721
 msgid "No error reported"
 msgstr "No error reported"
 
-#: ../src/id3_tag.c:686
+#: ../src/id3_tag.c:723
 msgid "No available memory"
 msgstr "No available memory"
 
-#: ../src/id3_tag.c:688
+#: ../src/id3_tag.c:725
 msgid "No data to parse"
 msgstr "No data to parse"
 
-#: ../src/id3_tag.c:690
+#: ../src/id3_tag.c:727
 msgid "Improperly formatted data"
 msgstr "Improperly formatted data"
 
-#: ../src/id3_tag.c:692
+#: ../src/id3_tag.c:729
 msgid "No buffer to write to"
 msgstr "No buffer to write to"
 
-#: ../src/id3_tag.c:694
+#: ../src/id3_tag.c:731
 msgid "Buffer is too small"
 msgstr "Buffer is too small"
 
-#: ../src/id3_tag.c:696
+#: ../src/id3_tag.c:733
 msgid "Invalid frame ID"
 msgstr "Invalid frame ID"
 
-#: ../src/id3_tag.c:698
+#: ../src/id3_tag.c:735
 msgid "Requested field not found"
 msgstr "Requested field not found"
 
-#: ../src/id3_tag.c:700
+#: ../src/id3_tag.c:737
 msgid "Unknown field type"
 msgstr "Unknown field type"
 
-#: ../src/id3_tag.c:702
+#: ../src/id3_tag.c:739
 msgid "Tag is already attached to a file"
 msgstr "Tag is already attached to a file"
 
-#: ../src/id3_tag.c:704
+#: ../src/id3_tag.c:741
 msgid "Invalid tag version"
 msgstr "Invalid tag version"
 
-#: ../src/id3_tag.c:706
+#: ../src/id3_tag.c:743
 msgid "No file to parse"
 msgstr "No file to parse"
 
-#: ../src/id3_tag.c:708
+#: ../src/id3_tag.c:745
 msgid "Attempting to write to a read-only file"
 msgstr "Attempting to write to a read-only file"
 
-#: ../src/id3_tag.c:710
+#: ../src/id3_tag.c:747
 msgid "Error in compression/uncompression"
 msgstr "Error in compression/uncompression"
 
-#: ../src/id3_tag.c:712
+#: ../src/id3_tag.c:749
 msgid "Unknown error message"
 msgstr "Unknown error message"
 
-#: ../src/id3_tag.c:1316
+#: ../src/id3_tag.c:1357
 #, c-format
 msgid "Error while creating temporary file: '%s'"
 msgstr "Error while creating temporary file: '%s'"
 
-#: ../src/id3_tag.c:1323
+#: ../src/id3_tag.c:1364
 msgid "Error while creating temporary file"
 msgstr "Error while creating temporary file"
 
-#: ../src/id3_tag.c:1343
+#: ../src/id3_tag.c:1384
 #, c-format
 msgid "Error while writing to file: '%s' (%s)"
 msgstr "Error while writing to file: '%s' (%s)"
@@ -2655,19 +2644,19 @@ msgstr "Error while writing to file: '%s' (%s)"
 #. * missing (not read for some reason) while reading from
 #. * the file.
 #.
-#: ../src/id3v24_tag.c:1503
+#: ../src/id3v24_tag.c:1563
 #, c-format
 msgid "Cannot write tag of file ‘%s’ (a byte was missing)"
 msgid_plural "Cannot write tag of file ‘%s’ (%s bytes were missing)"
 msgstr[0] "Cannot write tag of file ‘%s’ (a byte was missing)"
 msgstr[1] "Cannot write tag of file ‘%s’ (%s bytes were missing)"
 
-#: ../src/id3v24_tag.c:1524
+#: ../src/id3v24_tag.c:1584
 #, c-format
 msgid "Cannot save tag of file '%s'"
 msgstr "Cannot save tag of file '%s'"
 
-#: ../src/id3v24_tag.c:1535
+#: ../src/id3v24_tag.c:1595
 #, c-format
 msgid "Size error while saving tag of '%s'"
 msgstr "Size error while saving tag of '%s'"
@@ -2676,54 +2665,54 @@ msgstr "Size error while saving tag of '%s'"
 msgid "Log"
 msgstr "Log"
 
-#: ../src/misc.c:720
+#: ../src/misc.c:716
 msgid "You must type a program name"
 msgstr "You must type a program name"
 
-#: ../src/misc.c:721
+#: ../src/misc.c:717
 msgid "Program Name Error"
 msgstr "Program Name Error"
 
-#: ../src/misc.c:800
+#: ../src/misc.c:796
 #, c-format
 msgid "Executed command: %s"
 msgstr "Executed command: %s"
 
-#: ../src/misc.c:807
+#: ../src/misc.c:803
 #, c-format
 msgid "Failed to launch program: %s"
 msgstr "Failed to launch program: %s"
 
-#: ../src/misc.c:824
+#: ../src/misc.c:820
 msgid "Select File"
 msgstr "Select File"
 
-#: ../src/misc.c:830
+#: ../src/misc.c:826
 msgid "Select Directory"
 msgstr "Select Directory"
 
-#: ../src/misc.c:1142
+#: ../src/misc.c:1138
 msgid "Generate Playlist"
 msgstr "Generate Playlist"
 
-#: ../src/misc.c:1166
+#: ../src/misc.c:1162
 msgid "M3U Playlist Name"
 msgstr "M3U Playlist Name"
 
-#: ../src/misc.c:1181
+#: ../src/misc.c:1177
 msgid "Use directory name"
 msgstr "Use directory name"
 
 #. Playlist options
-#: ../src/misc.c:1198
+#: ../src/misc.c:1194
 msgid "Playlist Options"
 msgstr "Playlist Options"
 
-#: ../src/misc.c:1204
+#: ../src/misc.c:1200
 msgid "Include only the selected files"
 msgstr "Include only the selected files"
 
-#: ../src/misc.c:1207
+#: ../src/misc.c:1203
 msgid ""
 "If activated, only the selected files will be written in the playlist file. "
 "Else, all the files will be written."
@@ -2731,29 +2720,29 @@ msgstr ""
 "If activated, only the selected files will be written in the playlist file. "
 "Else, all the files will be written."
 
-#: ../src/misc.c:1210
+#: ../src/misc.c:1206
 msgid "Use full path for files in playlist"
 msgstr "Use full path for files in playlist"
 
-#: ../src/misc.c:1213
+#: ../src/misc.c:1209
 msgid "Use relative path for files in playlist"
 msgstr "Use relative path for files in playlist"
 
 #. Create playlist in parent directory
-#: ../src/misc.c:1219
+#: ../src/misc.c:1215
 msgid "Create playlist in the parent directory"
 msgstr "Create playlist in the parent directory"
 
-#: ../src/misc.c:1222
+#: ../src/misc.c:1218
 msgid "If activated, the playlist will be created in the parent directory."
 msgstr "If activated, the playlist will be created in the parent directory."
 
 #. DOS Separator
-#: ../src/misc.c:1226
+#: ../src/misc.c:1222
 msgid "Use DOS directory separator"
 msgstr "Use DOS directory separator"
 
-#: ../src/misc.c:1232
+#: ../src/misc.c:1228
 msgid ""
 "This option replaces the UNIX directory separator '/' into DOS separator "
 "'\\'."
@@ -2761,62 +2750,62 @@ msgstr ""
 "This option replaces the UNIX directory separator '/' into DOS separator "
 "'\\'."
 
-#: ../src/misc.c:1241
+#: ../src/misc.c:1237
 msgid "Playlist Content"
 msgstr "Playlist Content"
 
-#: ../src/misc.c:1247
+#: ../src/misc.c:1243
 msgid "Write only list of files"
 msgstr "Write only list of files"
 
-#: ../src/misc.c:1251
+#: ../src/misc.c:1247
 msgid "Write info using filename"
 msgstr "Write info using filename"
 
-#: ../src/misc.c:1254
+#: ../src/misc.c:1250
 msgid "Write info using:"
 msgstr "Write info using:"
 
-#: ../src/misc.c:1468
+#: ../src/misc.c:1464
 #, c-format
 msgid "Cannot write playlist file '%s'"
 msgstr "Cannot write playlist file '%s'"
 
-#: ../src/misc.c:1472
+#: ../src/misc.c:1468
 msgid "Playlist File Error"
 msgstr "Playlist File Error"
 
-#: ../src/misc.c:1480
+#: ../src/misc.c:1476
 #, c-format
 msgid "Written playlist file '%s'"
 msgstr "Written playlist file '%s'"
 
-#: ../src/misc.c:1544 ../src/scan_dialog.c:2709 ../src/scan_dialog.c:2771
+#: ../src/misc.c:1540 ../src/scan_dialog.c:2747 ../src/scan_dialog.c:2809
 msgid "Invalid scanner mask"
 msgstr "Invalid scanner mask"
 
-#: ../src/misc.c:1908
+#: ../src/misc.c:1904
 msgid "CD"
 msgstr "CD"
 
-#: ../src/misc.c:1930
+#: ../src/misc.c:1926
 msgid "Find Files"
 msgstr "Find Files"
 
-#: ../src/misc.c:1962
+#: ../src/misc.c:1958
 msgid ""
 "Type the word to search into files. Or type nothing to display all files."
 msgstr ""
 "Type the word to search into files. Or type nothing to display all files."
 
 #. Where...
-#: ../src/misc.c:1968
+#: ../src/misc.c:1964
 msgid "In:"
 msgstr "In:"
 
 #. Translators: This option is for the previous 'in' option. For instance,
 #. * translate this as "Search" "In:" "the Filename".
-#: ../src/misc.c:1973
+#: ../src/misc.c:1969
 msgid "the Filename"
 msgstr "the Filename"
 
@@ -2825,83 +2814,83 @@ msgstr "the Filename"
 #. * Note: label changed to "the Tag" (to be the only one) to fix a Hungarian
 #. * grammatical problem (which uses one word to say "in the tag" like here)
 #.
-#: ../src/misc.c:1979
+#: ../src/misc.c:1975
 msgid "the Tag"
 msgstr "the Tag"
 
 #. Property of the search
-#: ../src/misc.c:1990 ../src/prefs.c:335
+#: ../src/misc.c:1986 ../src/prefs.c:335
 msgid "Case sensitive"
 msgstr "Case sensitive"
 
-#: ../src/misc.c:2217
+#: ../src/misc.c:2213
 msgid "Ready to search…"
 msgstr "Ready to search…"
 
-#: ../src/misc.c:2437
+#: ../src/misc.c:2433
 #, c-format
 msgid "Found one file"
 msgid_plural "Found %d files"
 msgstr[0] "Found one file"
 msgstr[1] "Found %d files"
 
-#: ../src/misc.c:2722
+#: ../src/misc.c:2718
 msgid "Load Filenames From a Text File"
 msgstr "Load Filenames From a Text File"
 
-#: ../src/misc.c:2751
+#: ../src/misc.c:2747
 msgid "File:"
 msgstr "File:"
 
 #. Button 'load'
 #. the signal attached to this button, to load the file, is placed after the LoadFileContentList definition
-#: ../src/misc.c:2770
+#: ../src/misc.c:2766
 msgid " Load "
 msgstr " Load "
 
-#: ../src/misc.c:2788
+#: ../src/misc.c:2784
 msgid "Content of Text File"
 msgstr "Content of Text File"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2809 ../src/misc.c:2904
+#: ../src/misc.c:2805 ../src/misc.c:2900
 msgid "Insert a blank line before the selected line"
 msgstr "Insert a blank line before the selected line"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2818 ../src/misc.c:2913
+#: ../src/misc.c:2814 ../src/misc.c:2909
 msgid "Delete the selected line"
 msgstr "Delete the selected line"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2827 ../src/misc.c:2922 ../src/misc.c:3408
+#: ../src/misc.c:2823 ../src/misc.c:2918 ../src/misc.c:3399
 msgid "Delete all blank lines"
 msgstr "Delete all blank lines"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2839 ../src/misc.c:2934
+#: ../src/misc.c:2835 ../src/misc.c:2930
 msgid "Move up the selected line"
 msgstr "Move up the selected line"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2848 ../src/misc.c:2943
+#: ../src/misc.c:2844 ../src/misc.c:2939
 msgid "Move down the selected line"
 msgstr "Move down the selected line"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2860 ../src/misc.c:2955 ../src/misc.c:3432
+#: ../src/misc.c:2856 ../src/misc.c:2951 ../src/misc.c:3423
 msgid "Reload"
 msgstr "Reload"
 
-#: ../src/misc.c:2882
+#: ../src/misc.c:2878
 msgid "List of Files"
 msgstr "List of Files"
 
-#: ../src/misc.c:2977
+#: ../src/misc.c:2973
 msgid "Selected line:"
 msgstr "Selected line:"
 
-#: ../src/misc.c:2995
+#: ../src/misc.c:2991
 msgid ""
 "When activating this option, after loading the filenames, the current "
 "selected scanner will be ran (the scanner window must be opened)."
@@ -2909,34 +2898,34 @@ msgstr ""
 "When activating this option, after loading the filenames, the current "
 "selected scanner will be ran (the scanner window must be opened)."
 
-#: ../src/misc.c:3082
+#: ../src/misc.c:3078
 #, c-format
 msgid "Cannot retrieve file info (%s)"
 msgstr "Cannot retrieve file info (%s)"
 
-#: ../src/misc.c:3144
+#: ../src/misc.c:3141
 #, c-format
 msgid "Can't open file '%s' (%s)"
 msgstr "Can't open file '%s' (%s)"
 
-#: ../src/misc.c:3180
+#: ../src/misc.c:3170
 #, c-format
 msgid "Error reading file (%s)"
 msgstr "Error reading file (%s)"
 
-#: ../src/misc.c:3396
+#: ../src/misc.c:3387
 msgid "Insert a blank line"
 msgstr "Insert a blank line"
 
-#: ../src/misc.c:3402
+#: ../src/misc.c:3393
 msgid "Delete this line"
 msgstr "Delete this line"
 
-#: ../src/misc.c:3417
+#: ../src/misc.c:3408
 msgid "Move up this line"
 msgstr "Move up this line"
 
-#: ../src/misc.c:3423
+#: ../src/misc.c:3414
 msgid "Move down this line"
 msgstr "Move down this line"
 
@@ -2946,26 +2935,21 @@ msgstr "Move down this line"
 msgid "Profile:"
 msgstr "Profile:"
 
-#: ../src/mp4_header.c:63 ../src/mp4_tag.c:65 ../src/mp4_tag.c:186
+#: ../src/mp4_header.cc:59 ../src/mp4_tag.cc:91 ../src/mp4_tag.cc:284
 msgid "MP4 format invalid"
 msgstr "MP4 format invalid"
 
-#: ../src/mp4_header.c:72 ../src/mp4_tag.c:74
-#, c-format
-msgid "File contains no audio track: '%s'"
-msgstr "File contains no audio track: '%s'"
-
-#: ../src/mp4_header.c:82
+#: ../src/mp4_header.cc:69
 #, c-format
 msgid "Error reading properties from file: '%s'"
 msgstr "Error reading properties from file: '%s'"
 
-#: ../src/mp4_header.c:132 ../src/mpeg_header.c:204
+#: ../src/mp4_header.cc:130 ../src/mpeg_header.c:204
 #, c-format
 msgid "~%d kb/s"
 msgstr "~%d kb/s"
 
-#: ../src/mp4_tag.c:85 ../src/mp4_tag.c:194
+#: ../src/mp4_tag.cc:101 ../src/mp4_tag.cc:293
 #, c-format
 msgid "Error reading tags from file: '%s'"
 msgstr "Error reading tags from file: '%s'"
@@ -3040,184 +3024,184 @@ msgstr ""
 msgid "Error: Failed to open file: '%s' as Vorbis (%s)."
 msgstr "Error: Failed to open file: '%s' as Vorbis (%s)."
 
-#: ../src/ogg_tag.c:712 ../src/ogg_tag.c:887
+#: ../src/ogg_tag.c:706 ../src/ogg_tag.c:881
 #, c-format
 msgid "Warning: The Ogg Vorbis file '%s' contains an ID3v2 tag."
 msgstr "Warning: The Ogg Vorbis file '%s' contains an ID3v2 tag."
 
-#: ../src/ogg_tag.c:1035 ../src/picture.c:1257
+#: ../src/ogg_tag.c:1030 ../src/picture.c:1082
 #, c-format
 msgid "Error with 'loader_write': %s"
 msgstr "Error with 'loader_write': %s"
 
-#: ../src/ogg_tag.c:1050 ../src/picture.c:1180
+#: ../src/ogg_tag.c:1045 ../src/picture.c:1005
 #, c-format
 msgid "Error with 'loader_close': %s"
 msgstr "Error with 'loader_close': %s"
 
-#: ../src/picture.c:104
+#: ../src/picture.c:244 ../src/picture.c:269
 #, c-format
-msgid "Image file not saved: %s"
-msgstr "Image file not saved: %s"
+msgid "Image file not loaded: %s"
+msgstr "Image file not loaded: %s"
 
-#: ../src/picture.c:154
+#: ../src/picture.c:261
 #, c-format
 msgid "Cannot open file: '%s'"
 msgstr "Cannot open file: '%s'"
 
-#: ../src/picture.c:158
+#: ../src/picture.c:265
 msgid "Image File Error"
 msgstr "Image File Error"
 
-#: ../src/picture.c:162 ../src/picture.c:424
-#, c-format
-msgid "Image file not loaded: %s"
-msgstr "Image file not loaded: %s"
-
-#: ../src/picture.c:446
+#: ../src/picture.c:276
 msgid "Image file loaded"
 msgstr "Image file loaded"
 
-#: ../src/picture.c:504
+#: ../src/picture.c:334
 msgid "Add Images"
 msgstr "Add Images"
 
-#: ../src/picture.c:514 ../src/picture.c:874
+#: ../src/picture.c:344 ../src/picture.c:701
 msgid "All Files"
 msgstr "All Files"
 
-#: ../src/picture.c:520 ../src/picture.c:880
+#: ../src/picture.c:350 ../src/picture.c:707
 msgid "PNG and JPEG"
 msgstr "PNG and JPEG"
 
-#: ../src/picture.c:651
+#: ../src/picture.c:477
 #, c-format
 msgid "Image Properties %d/%d"
 msgstr "Image Properties %d/%d"
 
-#: ../src/picture.c:675
+#: ../src/picture.c:503
 msgid "Image Type"
 msgstr "Image Type"
 
 #. Description of the picture
-#: ../src/picture.c:734
+#: ../src/picture.c:561
 msgid "Image Description:"
 msgstr "Image Description:"
 
-#: ../src/picture.c:861
+#: ../src/picture.c:688
 #, c-format
 msgid "Save Image %d/%d"
 msgstr "Save Image %d/%d"
 
-#: ../src/picture.c:1021
+#: ../src/picture.c:763
+#, c-format
+msgid "Image file not saved: %s"
+msgstr "Image file not saved: %s"
+
+#: ../src/picture.c:846
 msgid "JPEG image"
 msgstr "JPEG image"
 
-#: ../src/picture.c:1023
+#: ../src/picture.c:848
 msgid "PNG image"
 msgstr "PNG image"
 
-#: ../src/picture.c:1025
+#: ../src/picture.c:850
 msgid "GIF image"
 msgstr "GIF image"
 
-#: ../src/picture.c:1027
+#: ../src/picture.c:852
 msgid "Unknown image"
 msgstr "Unknown image"
 
-#: ../src/picture.c:1039
+#: ../src/picture.c:864
 msgid "32x32 pixel PNG file icon"
 msgstr "32x32 pixel PNG file icon"
 
-#: ../src/picture.c:1041
+#: ../src/picture.c:866
 msgid "Other file icon"
 msgstr "Other file icon"
 
-#: ../src/picture.c:1043
+#: ../src/picture.c:868
 msgid "Cover (front)"
 msgstr "Cover (front)"
 
-#: ../src/picture.c:1045
+#: ../src/picture.c:870
 msgid "Cover (back)"
 msgstr "Cover (back)"
 
-#: ../src/picture.c:1047
+#: ../src/picture.c:872
 msgid "Leaflet page"
 msgstr "Leaflet page"
 
-#: ../src/picture.c:1049
+#: ../src/picture.c:874
 msgid "Media (e.g. label side of CD)"
 msgstr "Media (e.g. label side of CD)"
 
-#: ../src/picture.c:1051
+#: ../src/picture.c:876
 msgid "Lead artist/lead performer/soloist"
 msgstr "Lead artist/lead performer/soloist"
 
-#: ../src/picture.c:1053
+#: ../src/picture.c:878
 msgid "Artist/performer"
 msgstr "Artist/performer"
 
-#: ../src/picture.c:1055
+#: ../src/picture.c:880
 msgid "Conductor"
 msgstr "Conductor"
 
-#: ../src/picture.c:1057
+#: ../src/picture.c:882
 msgid "Band/Orchestra"
 msgstr "Band/Orchestra"
 
-#: ../src/picture.c:1061
+#: ../src/picture.c:886
 msgid "Lyricist/text writer"
 msgstr "Lyricist/text writer"
 
-#: ../src/picture.c:1063
+#: ../src/picture.c:888
 msgid "Recording location"
 msgstr "Recording location"
 
-#: ../src/picture.c:1065
+#: ../src/picture.c:890
 msgid "During recording"
 msgstr "During recording"
 
-#: ../src/picture.c:1067
+#: ../src/picture.c:892
 msgid "During performance"
 msgstr "During performance"
 
-#: ../src/picture.c:1069
+#: ../src/picture.c:894
 msgid "Movie/video screen capture"
 msgstr "Movie/video screen capture"
 
-#: ../src/picture.c:1071
+#: ../src/picture.c:896
 msgid "A bright colored fish"
 msgstr "A bright coloured fish"
 
-#: ../src/picture.c:1073
+#: ../src/picture.c:898
 msgid "Illustration"
 msgstr "Illustration"
 
-#: ../src/picture.c:1075
+#: ../src/picture.c:900
 msgid "Band/Artist logotype"
 msgstr "Band/Artist logotype"
 
-#: ../src/picture.c:1077
+#: ../src/picture.c:902
 msgid "Publisher/studio logotype"
 msgstr "Publisher/studio logotype"
 
-#: ../src/picture.c:1081
+#: ../src/picture.c:906
 msgid "Unknown image type"
 msgstr "Unknown image type"
 
-#: ../src/picture.c:1111 ../src/picture.c:1122
+#: ../src/picture.c:936 ../src/picture.c:947
 msgid "pixels"
 msgstr "pixels"
 
-#: ../src/picture.c:1112 ../src/picture.c:1123
+#: ../src/picture.c:937 ../src/picture.c:948
 msgid "Type"
 msgstr "Type"
 
-#: ../src/picture.c:1124
+#: ../src/picture.c:949
 msgid "Description"
 msgstr "Description"
 
-#: ../src/picture.c:1240
+#: ../src/picture.c:1065
 msgid ""
 "Cannot display the image because not enough data has been read to determine "
 "how to create the image buffer."
@@ -3225,17 +3209,17 @@ msgstr ""
 "Cannot display the image because not enough data has been read to determine "
 "how to create the image buffer."
 
-#: ../src/picture.c:1247
+#: ../src/picture.c:1072
 msgid "Cannot display the image"
 msgstr "Cannot display the image"
 
-#: ../src/picture.c:1249
+#: ../src/picture.c:1074
 msgid ""
 "Not enough data has been read to determine how to create the image buffer."
 msgstr ""
 "Not enough data has been read to determine how to create the image buffer."
 
-#: ../src/picture.c:1251
+#: ../src/picture.c:1076
 msgid "Load Image File"
 msgstr "Load Image File"
 
@@ -4353,43 +4337,43 @@ msgstr "New filename successfully scanned"
 msgid "New filename successfully scanned: %s"
 msgstr "New filename successfully scanned: %s"
 
-#: ../src/scan_dialog.c:1628
+#: ../src/scan_dialog.c:1632
 #, c-format
 msgid "Error while processing fields: %s"
 msgstr "Error while processing fields: %s"
 
 #. The window
-#: ../src/scan_dialog.c:1798
+#: ../src/scan_dialog.c:1802
 msgid "Tag and Filename Scan"
 msgstr "Tag and Filename Scan"
 
 #. TODO: Set related action to match AM_SCAN_FILES.
-#: ../src/scan_dialog.c:1807
+#: ../src/scan_dialog.c:1811
 msgid "Scan Files"
 msgstr "Scan Files"
 
 #. Option Menu
-#: ../src/scan_dialog.c:1835
+#: ../src/scan_dialog.c:1839
 msgid "Scanner:"
 msgstr "Scanner:"
 
-#: ../src/scan_dialog.c:1856
+#: ../src/scan_dialog.c:1860
 msgid "Select the type of scanner to use"
 msgstr "Select the type of scanner to use"
 
-#: ../src/scan_dialog.c:1865
+#: ../src/scan_dialog.c:1869
 msgid "Scanner Preferences"
 msgstr "Scanner Preferences"
 
-#: ../src/scan_dialog.c:1874
+#: ../src/scan_dialog.c:1878
 msgid "Show / Hide Masks Editor"
 msgstr "Show / Hide Masks Editor"
 
-#: ../src/scan_dialog.c:1884
+#: ../src/scan_dialog.c:1888
 msgid "Show / Hide Legend"
 msgstr "Show / Hide Legend"
 
-#: ../src/scan_dialog.c:1914
+#: ../src/scan_dialog.c:1918
 msgid ""
 "Select or type in a mask using codes (see Legend) to parse filename and "
 "path. Used to fill in tag fields"
@@ -4398,15 +4382,15 @@ msgstr ""
 "path. Used to fill in tag fields"
 
 #. Preview label
-#: ../src/scan_dialog.c:1938
+#: ../src/scan_dialog.c:1942
 msgid "Fill tag preview"
 msgstr "Fill tag preview"
 
-#: ../src/scan_dialog.c:1968
+#: ../src/scan_dialog.c:1972
 msgid "Prefix mask with current path"
 msgstr "Prefix mask with current path"
 
-#: ../src/scan_dialog.c:1982
+#: ../src/scan_dialog.c:1986
 msgid ""
 "Select or type in a mask using codes (see Legend) to parse tag fields. Used "
 "to rename the file.\n"
@@ -4419,15 +4403,15 @@ msgstr ""
 "path, otherwise is relative to the old path."
 
 #. Preview label
-#: ../src/scan_dialog.c:2007
+#: ../src/scan_dialog.c:2011
 msgid "Rename file preview"
 msgstr "Rename file preview"
 
-#: ../src/scan_dialog.c:2026
+#: ../src/scan_dialog.c:2030
 msgid "Select fields:"
 msgstr "Select fields:"
 
-#: ../src/scan_dialog.c:2029
+#: ../src/scan_dialog.c:2033
 msgid ""
 "The buttons on the right represent the fields which can be processed. Select "
 "those which interest you"
@@ -4436,134 +4420,134 @@ msgstr ""
 "those which interest you"
 
 #. Advice for Translators: set the first letter of filename translated
-#: ../src/scan_dialog.c:2033
+#: ../src/scan_dialog.c:2037
 msgid "F"
 msgstr "F"
 
-#: ../src/scan_dialog.c:2035
+#: ../src/scan_dialog.c:2039
 msgid "Process filename field"
 msgstr "Process filename field"
 
 #. Advice for Translators: set the first letter of title translated
-#: ../src/scan_dialog.c:2037
+#: ../src/scan_dialog.c:2041
 msgid "T"
 msgstr "T"
 
-#: ../src/scan_dialog.c:2038
+#: ../src/scan_dialog.c:2042
 msgid "Process title field"
 msgstr "Process title field"
 
 #. Advice for Translators: set the first letter of artist translated
-#: ../src/scan_dialog.c:2040
+#: ../src/scan_dialog.c:2044
 msgid "Ar"
 msgstr "Ar"
 
-#: ../src/scan_dialog.c:2041
+#: ../src/scan_dialog.c:2045
 msgid "Process file artist field"
 msgstr "Process file artist field"
 
 #. Advice for Translators: set the first letter of album artist translated
-#: ../src/scan_dialog.c:2043
+#: ../src/scan_dialog.c:2047
 msgid "AA"
 msgstr "AA"
 
-#: ../src/scan_dialog.c:2044
+#: ../src/scan_dialog.c:2048
 msgid "Process album artist field"
 msgstr "Process album artist field"
 
 #. Advice for Translators: set the first letter of album translated
-#: ../src/scan_dialog.c:2046
+#: ../src/scan_dialog.c:2050
 msgid "Al"
 msgstr "Al"
 
-#: ../src/scan_dialog.c:2047
+#: ../src/scan_dialog.c:2051
 msgid "Process album field"
 msgstr "Process album field"
 
 #. Advice for Translators: set the first letter of genre translated
-#: ../src/scan_dialog.c:2049
+#: ../src/scan_dialog.c:2053
 msgid "G"
 msgstr "G"
 
-#: ../src/scan_dialog.c:2050
+#: ../src/scan_dialog.c:2054
 msgid "Process genre field"
 msgstr "Process genre field"
 
 #. Advice for Translators: set the first letter of comment translated
-#: ../src/scan_dialog.c:2052
+#: ../src/scan_dialog.c:2056
 msgid "Cm"
 msgstr "Cm"
 
-#: ../src/scan_dialog.c:2053
+#: ../src/scan_dialog.c:2057
 msgid "Process comment field"
 msgstr "Process comment field"
 
 #. Advice for Translators: set the first letter of composer translated
-#: ../src/scan_dialog.c:2055
+#: ../src/scan_dialog.c:2059
 msgid "Cp"
 msgstr "Cp"
 
-#: ../src/scan_dialog.c:2056
+#: ../src/scan_dialog.c:2060
 msgid "Process composer field"
 msgstr "Process composer field"
 
 #. Advice for Translators: set the first letter of orig artist translated
-#: ../src/scan_dialog.c:2058
+#: ../src/scan_dialog.c:2062
 msgid "O"
 msgstr "O"
 
-#: ../src/scan_dialog.c:2059
+#: ../src/scan_dialog.c:2063
 msgid "Process original artist field"
 msgstr "Process original artist field"
 
 #. Advice for Translators: set the first letter of copyright translated
-#: ../src/scan_dialog.c:2061
+#: ../src/scan_dialog.c:2065
 msgid "Cr"
 msgstr "Cr"
 
-#: ../src/scan_dialog.c:2062
+#: ../src/scan_dialog.c:2066
 msgid "Process copyright field"
 msgstr "Process copyright field"
 
 #. Advice for Translators: set the first letter of URL translated
-#: ../src/scan_dialog.c:2064
+#: ../src/scan_dialog.c:2068
 msgid "U"
 msgstr "U"
 
-#: ../src/scan_dialog.c:2065
+#: ../src/scan_dialog.c:2069
 msgid "Process URL field"
 msgstr "Process URL field"
 
 #. Advice for Translators: set the first letter of encoder name translated
-#: ../src/scan_dialog.c:2067
+#: ../src/scan_dialog.c:2071
 msgid "E"
 msgstr "E"
 
-#: ../src/scan_dialog.c:2068
+#: ../src/scan_dialog.c:2072
 msgid "Process encoder name field"
 msgstr "Process encoder name field"
 
-#: ../src/scan_dialog.c:2112
+#: ../src/scan_dialog.c:2116
 msgid "Invert selection"
 msgstr "Invert selection"
 
-#: ../src/scan_dialog.c:2119
+#: ../src/scan_dialog.c:2123
 msgid "Select/Unselect all"
 msgstr "Select/Unselect all"
 
-#: ../src/scan_dialog.c:2134
+#: ../src/scan_dialog.c:2138
 msgid "Convert:"
 msgstr "Convert:"
 
-#: ../src/scan_dialog.c:2136
+#: ../src/scan_dialog.c:2140
 msgid "to: "
 msgstr "to: "
 
-#: ../src/scan_dialog.c:2143
+#: ../src/scan_dialog.c:2147
 msgid "Do not convert"
 msgstr "Do not convert"
 
-#: ../src/scan_dialog.c:2162
+#: ../src/scan_dialog.c:2177
 msgid ""
 "The underscore character or the string '%20' are replaced by one space. "
 "Example, before: 'Text%20In%20An_Entry', after: 'Text In An Entry'."
@@ -4571,7 +4555,7 @@ msgstr ""
 "The underscore character or the string '%20' are replaced by one space. "
 "Example, before: 'Text%20In%20An_Entry', after: 'Text In An Entry'."
 
-#: ../src/scan_dialog.c:2165
+#: ../src/scan_dialog.c:2180
 msgid ""
 "The space character is replaced by one underscore character. Example, "
 "before: 'Text In An Entry', after: 'Text_In_An_Entry'."
@@ -4579,37 +4563,37 @@ msgstr ""
 "The space character is replaced by one underscore character. Example, "
 "before: 'Text In An Entry', after: 'Text_In_An_Entry'."
 
-#: ../src/scan_dialog.c:2168
+#: ../src/scan_dialog.c:2183
 msgid ""
 "Replace a string by another one. Note that the search is case sensitive."
 msgstr ""
 "Replace a string by another one. Note that the search is case sensitive."
 
-#: ../src/scan_dialog.c:2175
+#: ../src/scan_dialog.c:2190
 msgid "Capitalize all"
 msgstr "Capitalize all"
 
-#: ../src/scan_dialog.c:2177
+#: ../src/scan_dialog.c:2192
 msgid "Lowercase all"
 msgstr "Lowercase all"
 
-#: ../src/scan_dialog.c:2179
+#: ../src/scan_dialog.c:2194
 msgid "Capitalize first letter"
 msgstr "Capitalize first letter"
 
-#: ../src/scan_dialog.c:2181
+#: ../src/scan_dialog.c:2196
 msgid "Capitalize the first letter of each word"
 msgstr "Capitalize the first letter of each word"
 
-#: ../src/scan_dialog.c:2182
+#: ../src/scan_dialog.c:2197
 msgid "Detect Roman numerals"
 msgstr "Detect Roman numerals"
 
-#: ../src/scan_dialog.c:2184
+#: ../src/scan_dialog.c:2199
 msgid "Do not change capitalization"
 msgstr "Do not change capitalization"
 
-#: ../src/scan_dialog.c:2206
+#: ../src/scan_dialog.c:2236
 msgid ""
 "Convert all words in all fields to upper case. Example, before: 'Text IN AN "
 "entry', after: 'TEXT IN AN ENTRY'."
@@ -4617,7 +4601,7 @@ msgstr ""
 "Convert all words in all fields to upper case. Example, before: 'Text IN AN "
 "entry', after: 'TEXT IN AN ENTRY'."
 
-#: ../src/scan_dialog.c:2209
+#: ../src/scan_dialog.c:2239
 msgid ""
 "Convert all words in all fields to lower case. Example, before: 'TEXT IN an "
 "entry', after: 'text in an entry'."
@@ -4625,7 +4609,7 @@ msgstr ""
 "Convert all words in all fields to lower case. Example, before: 'TEXT IN an "
 "entry', after: 'text in an entry'."
 
-#: ../src/scan_dialog.c:2212
+#: ../src/scan_dialog.c:2242
 msgid ""
 "Convert the initial of the first word in all fields to upper case. Example, "
 "before: 'text IN An ENTRY', after: 'Text in an entry'."
@@ -4633,7 +4617,7 @@ msgstr ""
 "Convert the initial of the first word in all fields to upper case. Example, "
 "before: 'text IN An ENTRY', after: 'Text in an entry'."
 
-#: ../src/scan_dialog.c:2215
+#: ../src/scan_dialog.c:2245
 msgid ""
 "Convert the initial of each word in all fields to upper case. Example, "
 "before: 'Text in an ENTRY', after: 'Text In An Entry'."
@@ -4641,7 +4625,7 @@ msgstr ""
 "Convert the initial of each word in all fields to upper case. Example, "
 "before: 'Text in an ENTRY', after: 'Text In An Entry'."
 
-#: ../src/scan_dialog.c:2218
+#: ../src/scan_dialog.c:2248
 msgid ""
 "Force to convert to upper case the Roman numerals. Example, before: 'ix. "
 "text in an entry', after: 'IX. Text In An Entry'."
@@ -4649,19 +4633,19 @@ msgstr ""
 "Force to convert to upper case the Roman numerals. Example, before: 'ix. "
 "text in an entry', after: 'IX. Text In An Entry'."
 
-#: ../src/scan_dialog.c:2226
+#: ../src/scan_dialog.c:2256
 msgid "Insert a space before uppercase letters"
 msgstr "Insert a space before uppercase letters"
 
-#: ../src/scan_dialog.c:2228
+#: ../src/scan_dialog.c:2258
 msgid "Remove duplicate spaces and underscores"
 msgstr "Remove duplicate spaces and underscores"
 
-#: ../src/scan_dialog.c:2230
+#: ../src/scan_dialog.c:2260
 msgid "Do not change word separators"
 msgstr "Do not change word separators"
 
-#: ../src/scan_dialog.c:2244
+#: ../src/scan_dialog.c:2282
 msgid ""
 "All spaces between words are removed. Example, before: 'Text In An Entry', "
 "after: 'TextInAnEntry'."
@@ -4669,7 +4653,7 @@ msgstr ""
 "All spaces between words are removed. Example, before: 'Text In An Entry', "
 "after: 'TextInAnEntry'."
 
-#: ../src/scan_dialog.c:2247
+#: ../src/scan_dialog.c:2285
 msgid ""
 "A space is inserted before each upper case letter. Example, before: "
 "'TextInAnEntry', after: 'Text In An Entry'."
@@ -4677,7 +4661,7 @@ msgstr ""
 "A space is inserted before each upper case letter. Example, before: "
 "'TextInAnEntry', after: 'Text In An Entry'."
 
-#: ../src/scan_dialog.c:2250
+#: ../src/scan_dialog.c:2288
 msgid ""
 "Duplicate spaces and underscores are removed. Example, before: "
 "'Text__In__An   Entry', after: 'Text_In_An Entry'."
@@ -4688,141 +4672,141 @@ msgstr ""
 #.
 #. * Frame to display codes legend
 #.
-#: ../src/scan_dialog.c:2257
+#: ../src/scan_dialog.c:2295
 msgid "Legend"
 msgstr "Legend"
 
-#: ../src/scan_dialog.c:2263
+#: ../src/scan_dialog.c:2301
 #, c-format
 msgid "%a: artist"
 msgstr "%a: artist"
 
-#: ../src/scan_dialog.c:2266
+#: ../src/scan_dialog.c:2304
 msgid "%z: album artist"
 msgstr "%z: album artist"
 
-#: ../src/scan_dialog.c:2269
+#: ../src/scan_dialog.c:2307
 msgid "%b: album"
 msgstr "%b: album"
 
-#: ../src/scan_dialog.c:2272
+#: ../src/scan_dialog.c:2310
 #, c-format
 msgid "%c: comment"
 msgstr "%c: comment"
 
-#: ../src/scan_dialog.c:2275
+#: ../src/scan_dialog.c:2313
 #, c-format
 msgid "%p: composer"
 msgstr "%p: composer"
 
-#: ../src/scan_dialog.c:2278
+#: ../src/scan_dialog.c:2316
 msgid "%r: copyright"
 msgstr "%r: copyright"
 
-#: ../src/scan_dialog.c:2281
+#: ../src/scan_dialog.c:2319
 #, c-format
 msgid "%d: disc number"
 msgstr "%d: disc number"
 
-#: ../src/scan_dialog.c:2284
+#: ../src/scan_dialog.c:2322
 #, c-format
 msgid "%e: encoded by"
 msgstr "%e: encoded by"
 
-#: ../src/scan_dialog.c:2287
+#: ../src/scan_dialog.c:2325
 #, c-format
 msgid "%g: genre"
 msgstr "%g: genre"
 
-#: ../src/scan_dialog.c:2290
+#: ../src/scan_dialog.c:2328
 #, c-format
 msgid "%i: ignored"
 msgstr "%i: ignored"
 
-#: ../src/scan_dialog.c:2293
+#: ../src/scan_dialog.c:2331
 msgid "%l: number of tracks"
 msgstr "%l: number of tracks"
 
-#: ../src/scan_dialog.c:2296
+#: ../src/scan_dialog.c:2334
 #, c-format
 msgid "%o: orig. artist"
 msgstr "%o: orig. artist"
 
-#: ../src/scan_dialog.c:2299
+#: ../src/scan_dialog.c:2337
 #, c-format
 msgid "%n: track"
 msgstr "%n: track"
 
-#: ../src/scan_dialog.c:2302
+#: ../src/scan_dialog.c:2340
 msgid "%t: title"
 msgstr "%t: title"
 
-#: ../src/scan_dialog.c:2305
+#: ../src/scan_dialog.c:2343
 #, c-format
 msgid "%u: URL"
 msgstr "%u: URL"
 
-#: ../src/scan_dialog.c:2308
+#: ../src/scan_dialog.c:2346
 #, c-format
 msgid "%x: number of discs"
 msgstr "%x: number of discs"
 
-#: ../src/scan_dialog.c:2311
+#: ../src/scan_dialog.c:2349
 msgid "%y: year"
 msgstr "%y: year"
 
 #.
 #. * Masks Editor
 #.
-#: ../src/scan_dialog.c:2318
+#: ../src/scan_dialog.c:2356
 msgid "Mask Editor"
 msgstr "Mask Editor"
 
-#: ../src/scan_dialog.c:2372
+#: ../src/scan_dialog.c:2410
 msgid "Create New Mask"
 msgstr "Create New Mask"
 
-#: ../src/scan_dialog.c:2382
+#: ../src/scan_dialog.c:2420
 msgid "Move Up this Mask"
 msgstr "Move Up this Mask"
 
-#: ../src/scan_dialog.c:2392
+#: ../src/scan_dialog.c:2430
 msgid "Move Down this Mask"
 msgstr "Move Down this Mask"
 
-#: ../src/scan_dialog.c:2402
+#: ../src/scan_dialog.c:2440
 msgid "Duplicate Mask"
 msgstr "Duplicate Mask"
 
-#: ../src/scan_dialog.c:2412
+#: ../src/scan_dialog.c:2450
 msgid "Add Default Masks"
 msgstr "Add Default Masks"
 
-#: ../src/scan_dialog.c:2422
+#: ../src/scan_dialog.c:2460
 msgid "Remove Mask"
 msgstr "Remove Mask"
 
-#: ../src/scan_dialog.c:2432
+#: ../src/scan_dialog.c:2470
 msgid "Save Masks"
 msgstr "Save Masks"
 
-#: ../src/scan_dialog.c:3012
+#: ../src/scan_dialog.c:3050
 msgid "New_mask"
 msgstr "New_mask"
 
-#: ../src/scan_dialog.c:3051
+#: ../src/scan_dialog.c:3089
 msgid "Copy: No row selected"
 msgstr "Copy: No row selected"
 
-#: ../src/scan_dialog.c:3144
+#: ../src/scan_dialog.c:3182
 msgid "Remove: No row selected"
 msgstr "Remove: No row selected"
 
-#: ../src/scan_dialog.c:3191
+#: ../src/scan_dialog.c:3229
 msgid "Move Up: No row selected"
 msgstr "Move Up: No row selected"
 
-#: ../src/scan_dialog.c:3235
+#: ../src/scan_dialog.c:3273
 msgid "Move Down: No row selected"
 msgstr "Move Down: No row selected"
 
@@ -4889,3 +4873,33 @@ msgstr "Failed to migrate configuration file '%s'"
 #, c-format
 msgid "Error: Cannot create directory '%s' (%s)"
 msgstr "Error: Cannot create directory '%s' (%s)"
+
+#~ msgid ""
+#~ "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 (at your "
+#~ "option) any later version.\n"
+#~ "\n"
+#~ "This program is distributed in the hope that it will be useful, but "
+#~ "WITHOUT ANY WARRANTY; without even the implied warranty of "
+#~ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General "
+#~ "Public License for more details.\n"
+#~ "\n"
+#~ "You should have received a copy of the GNU General Public License along "
+#~ "with this program. If not, see <http://www.gnu.org/licenses/>."
+#~ msgstr ""
+#~ "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 (at your "
+#~ "option) any later version.\n"
+#~ "\n"
+#~ "This program is distributed in the hope that it will be useful, but "
+#~ "WITHOUT ANY WARRANTY; without even the implied warranty of "
+#~ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General "
+#~ "Public License for more details.\n"
+#~ "\n"
+#~ "You should have received a copy of the GNU General Public License along "
+#~ "with this program. If not, see <http://www.gnu.org/licenses/>."
+
+#~ msgid "File contains no audio track: '%s'"
+#~ msgstr "File contains no audio track: '%s'"
diff --git a/po/es.po b/po/es.po
index c232604..57b07ad 100644
--- a/po/es.po
+++ b/po/es.po
@@ -13,16 +13,16 @@ msgstr ""
 "Project-Id-Version: easytag-1.99.11\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
 "product=easytag&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2014-04-07 09:21+0000\n"
-"PO-Revision-Date: 2014-04-07 12:16+0200\n"
+"POT-Creation-Date: 2014-06-17 15:13+0000\n"
+"PO-Revision-Date: 2014-06-17 18:58+0200\n"
 "Last-Translator: Daniel Mustieles <daniel.mustieles at gmail.com>\n"
-"Language-Team: Español <gnome-es-list at gnome.org>\n"
+"Language-Team: Español; Castellano <gnome-es-list at gnome.org>\n"
 "Language: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n!=1);\n"
-"X-Generator: Gtranslator 2.91.5\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Gtranslator 2.91.6\n"
 
 #: ../data/easytag.appdata.xml.in.h:1
 msgid ""
@@ -61,63 +61,54 @@ msgstr "Editar los metadatos de archivos de sonido"
 msgid "mp3;tag;audio;"
 msgstr "mp3;etiqueta;sonido;"
 
-#: ../src/about.c:89
-msgid ""
-"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 (at your option) "
-"any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful, but WITHOUT "
-"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
-"FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for "
-"more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License along with "
-"this program. If not, see <http://www.gnu.org/licenses/>."
-msgstr ""
-"Este programa es software libre; puede redistribuirlo y/o modificarlo bajo "
-"los términos de la Licencia Pública General GNU como está publicada por la "
-"Fundación de Software Libre; de la versión 2 de la licencia, o (a su opción) "
-"cualquier versión posterior.\n"
-"\n"
-"Este programa se distribuye con la esperanza de que sea útil, pero SIN "
-"NINGUNA GARANTÍA; incluso sin la garantía implícita de COMERCIALIZACIÓN o "
-"CONVENIENCIA PARA UN PROPÓSITO EN PARTICULAR. Ver la Licencia Pública "
-"General GNU para más detalles.\n"
-"\n"
-"Puede recibir una copia de la Licencia Pública General GNU junto con este "
-"programa. Sino, ver <http://www.gnu.org/licenses/>."
+#: ../nautilus-extension/nautilus-easytag.c:229
+msgid "Open in EasyTAG"
+msgstr "Abierto en EasyTAG"
+
+#: ../nautilus-extension/nautilus-easytag.c:230
+#| msgid "Clear the current selection"
+msgid "Open the current selected directory in EasyTAG"
+msgstr "Abre la carpeta seleccionada actualmente en EasyTAG"
+
+#: ../nautilus-extension/nautilus-easytag.c:247
+msgid "Open with EasyTAG"
+msgstr "Abrir con EasyTAG"
+
+#: ../nautilus-extension/nautilus-easytag.c:248
+#| msgid "Scan selected files"
+msgid "Open selected files in EasyTAG"
+msgstr "Abrir los archivos seleccionados en EasyTAG"
 
 #. Translators: put your own name here to appear in the about dialog.
-#: ../src/about.c:106
+#: ../src/about.c:89
 msgid "translator-credits"
 msgstr ""
 "Daniel Mustieles <daniel.mustieles at gmail.com>, 2012 - 2014\n"
 "Nicolás Satragno <nsatragno at gnome.org>, 2012, 2013\n"
 "Milagros Alessandra Infante Montero <maim92 at gmail.com>, 2012, 2013"
 
-#: ../src/about.c:116
+#: ../src/about.c:99
 msgid "View and edit tags in audio files"
 msgstr "Ver y editar etiquetas en archivos de sonido"
 
-#. g_print(_("Error while opening file: '%s' (%s)."),filename_utf8,g_strerror(errno));
-#: ../src/ape_tag.c:61 ../src/id3v24_tag.c:112 ../src/mp4_header.c:63
-#: ../src/mp4_tag.c:65 ../src/mp4_tag.c:186
+#: ../src/ape_tag.c:61 ../src/id3v24_tag.c:113 ../src/mp4_header.cc:45
+#: ../src/mp4_header.cc:58 ../src/mp4_tag.cc:69 ../src/mp4_tag.cc:85
+#: ../src/mp4_tag.cc:90 ../src/mp4_tag.cc:262 ../src/mp4_tag.cc:278
+#: ../src/mp4_tag.cc:283
 #, c-format
 msgid "Error while opening file: '%s' (%s)."
 msgstr "Error al abrir archivo: «%s» (%s)."
 
-#: ../src/application.c:37
+#: ../src/application.c:32
 msgid "Print the version and exit"
 msgstr "Imprimir la versión y salir"
 
-#: ../src/application.c:89
+#: ../src/application.c:84
 #, c-format
 msgid "Website: %s"
 msgstr "Sitio web: %s"
 
-#: ../src/application.c:98
+#: ../src/application.c:93
 msgid "- Tag and rename audio files"
 msgstr "- Etiquetar y renombrar archivos de sonido"
 
@@ -372,7 +363,7 @@ msgstr "Último archivo"
 msgid "S_can Files"
 msgstr "A_nalizar archivos"
 
-#: ../src/bar.c:225 ../src/scan.c:2008
+#: ../src/bar.c:225 ../src/scan_dialog.c:1818
 msgid "Scan selected files"
 msgstr "Analizar archivos seleccionados"
 
@@ -436,8 +427,8 @@ msgstr "Rehacer los últimos cambios"
 msgid "_Quit"
 msgstr "_Salir"
 
-#: ../src/bar.c:242 ../src/easytag.c:2429 ../src/easytag.c:4565
-#: ../src/easytag.c:4597
+#: ../src/bar.c:242 ../src/easytag.c:2424 ../src/easytag.c:4559
+#: ../src/easytag.c:4591
 msgid "Quit"
 msgstr "Salir"
 
@@ -731,7 +722,7 @@ msgstr "Renombrar archivos y carpetas"
 msgid "_Process Fields…"
 msgstr "_Procesar campos…"
 
-#: ../src/bar.c:370 ../src/scan.c:182
+#: ../src/bar.c:370 ../src/scan_dialog.c:184
 msgid "Process Fields"
 msgstr "Procesar campos"
 
@@ -740,7 +731,7 @@ msgstr "Procesar campos"
 msgid "Could not merge UI, error was: %s\n"
 msgstr "No se pudo combinar el IU, el error fue: %s\n"
 
-#: ../src/bar.c:533
+#: ../src/bar.c:535
 msgid "Ready to start"
 msgstr "Listo para empezar"
 
@@ -748,7 +739,7 @@ msgstr "Listo para empezar"
 msgid "New default path for files selected"
 msgstr "Seleccionada la nueva ruta predeterminada para los archivos"
 
-#: ../src/browser.c:678 ../src/easytag.c:4561
+#: ../src/browser.c:678 ../src/easytag.c:4555
 msgid "Some files have been modified but not saved"
 msgstr "Se han modificado algunos archivos pero no se han guardado"
 
@@ -760,101 +751,101 @@ msgstr "¿Quiere guardarlos antes de cambiar de carpeta?"
 msgid "Confirm Directory Change"
 msgstr "Confirmar el cambio de carpeta"
 
-#: ../src/browser.c:2146
+#: ../src/browser.c:2152
 msgid "<All albums>"
 msgstr "<Todos los álbumes>"
 
-#: ../src/browser.c:2607
+#: ../src/browser.c:2613
 #, c-format
 msgid "Error: Searching for %s, could not find node %s in tree."
 msgstr "Error: buscando %s, no se pudo encontrar el nodo %s en el árbol."
 
-#: ../src/browser.c:3101 ../src/browser.c:3179
+#: ../src/browser.c:3107 ../src/browser.c:3185
 msgid "Tree"
 msgstr "Árbol"
 
-#: ../src/browser.c:3102 ../src/cddb.c:803 ../src/misc.c:1902
+#: ../src/browser.c:3108 ../src/cddb.c:803 ../src/misc.c:1899
 msgid "Filename"
 msgstr "Nombre de archivo"
 
-#: ../src/browser.c:3102 ../src/cddb.c:804 ../src/misc.c:1903
+#: ../src/browser.c:3108 ../src/cddb.c:804 ../src/misc.c:1900
 #: ../src/prefs.c:643
 msgid "Title"
 msgstr "Título"
 
 #. Translators: This option is for the previous 'search in' option. For
 #. * instance, translate this as "Search in:" "Artist".
-#: ../src/browser.c:3103 ../src/browser.c:3110 ../src/cddb.c:483
-#: ../src/cddb.c:805 ../src/misc.c:1904 ../src/prefs.c:644
+#: ../src/browser.c:3109 ../src/browser.c:3116 ../src/cddb.c:483
+#: ../src/cddb.c:805 ../src/misc.c:1901 ../src/prefs.c:644
 msgid "Artist"
 msgstr "Artista"
 
-#: ../src/browser.c:3103 ../src/misc.c:1905
+#: ../src/browser.c:3109 ../src/misc.c:1902
 msgid "Album Artist"
 msgstr "Artista del álbum"
 
 #. Translators: This option is for the previous 'search in' option. For
 #. * instance, translate this as "Search in:" "Album".
-#: ../src/browser.c:3104 ../src/browser.c:3112 ../src/cddb.c:486
-#: ../src/cddb.c:806 ../src/misc.c:1906 ../src/prefs.c:645
+#: ../src/browser.c:3110 ../src/browser.c:3118 ../src/cddb.c:486
+#: ../src/cddb.c:806 ../src/misc.c:1903 ../src/prefs.c:645
 msgid "Album"
 msgstr "Álbum"
 
-#: ../src/browser.c:3104 ../src/cddb.c:807 ../src/misc.c:1908
+#: ../src/browser.c:3110 ../src/cddb.c:807 ../src/misc.c:1905
 msgid "Year"
 msgstr "Año"
 
-#: ../src/browser.c:3104
+#: ../src/browser.c:3110
 msgid "Disc"
 msgstr "Disco"
 
-#: ../src/browser.c:3105 ../src/misc.c:1909
+#: ../src/browser.c:3111 ../src/misc.c:1906
 msgid "Track"
 msgstr "Pista"
 
-#: ../src/browser.c:3105 ../src/cddb.c:810 ../src/misc.c:1910
+#: ../src/browser.c:3111 ../src/cddb.c:810 ../src/misc.c:1907
 #: ../src/prefs.c:646
 msgid "Genre"
 msgstr "Género"
 
-#: ../src/browser.c:3106 ../src/misc.c:1911 ../src/prefs.c:647
+#: ../src/browser.c:3112 ../src/misc.c:1908 ../src/prefs.c:647
 msgid "Comment"
 msgstr "Comentario"
 
-#: ../src/browser.c:3106 ../src/misc.c:1912 ../src/picture.c:1059
+#: ../src/browser.c:3112 ../src/misc.c:1909 ../src/picture.c:884
 #: ../src/prefs.c:648
 msgid "Composer"
 msgstr "Compositor"
 
-#: ../src/browser.c:3107 ../src/misc.c:1913
+#: ../src/browser.c:3113 ../src/misc.c:1910
 msgid "Original Artist"
 msgstr "Artista original"
 
-#: ../src/browser.c:3108 ../src/misc.c:1914
+#: ../src/browser.c:3114 ../src/misc.c:1911
 msgid "Copyright"
 msgstr "Copyright"
 
-#: ../src/browser.c:3108 ../src/misc.c:1915
+#: ../src/browser.c:3114 ../src/misc.c:1912
 msgid "URL"
 msgstr "URL"
 
-#: ../src/browser.c:3109 ../src/misc.c:1916
+#: ../src/browser.c:3115 ../src/misc.c:1913
 msgid "Encoded By"
 msgstr "Codificado por"
 
-#: ../src/browser.c:3110
+#: ../src/browser.c:3116
 msgid "# Albums"
 msgstr "N.º de álbumes"
 
-#: ../src/browser.c:3111 ../src/browser.c:3112
+#: ../src/browser.c:3117 ../src/browser.c:3118
 msgid "# Files"
 msgstr "N.º de archivos"
 
-#: ../src/browser.c:3137
+#: ../src/browser.c:3143
 msgid "Enter a directory to browse."
 msgstr "Introducir una carpeta que examinar."
 
-#: ../src/browser.c:3146
+#: ../src/browser.c:3152
 msgid "Select a directory to browse."
 msgstr "Seleccionar una carpeta para examinarla."
 
@@ -862,33 +853,33 @@ msgstr "Seleccionar una carpeta para examinarla."
 #. * The label for displaying number of files in path (without subdirs)
 #.
 #. Translators: No files, as in "0 files".
-#: ../src/browser.c:3153 ../src/easytag.c:3468
+#: ../src/browser.c:3159 ../src/easytag.c:3463
 msgid "No files"
 msgstr "No hay archivos"
 
-#: ../src/browser.c:3231
+#: ../src/browser.c:3237
 msgid "Artist & Album"
 msgstr "Artista y álbum"
 
 #. Only directories changed
-#: ../src/browser.c:3595 ../src/easytag.c:2880
+#: ../src/browser.c:3601 ../src/easytag.c:2875
 msgid "Rename Directory"
 msgstr "Renombrar la carpeta"
 
-#: ../src/browser.c:3617
+#: ../src/browser.c:3623
 #, c-format
 msgid "Rename the directory '%s' to:"
 msgstr "Renombrar la carpeta «%s» a:"
 
-#: ../src/browser.c:3636 ../src/misc.c:1171
+#: ../src/browser.c:3642 ../src/misc.c:1168
 msgid "Use mask:"
 msgstr "Usar máscara:"
 
-#: ../src/browser.c:3639
+#: ../src/browser.c:3645
 msgid "If activated, it will use masks to rename directory."
 msgstr "Si está activado, usará máscaras para renombrar la carpeta."
 
-#: ../src/browser.c:3657
+#: ../src/browser.c:3663
 msgid ""
 "Select or type in a mask using codes (see Legend in Scanner Window) to "
 "rename the directory from tag fields."
@@ -898,64 +889,64 @@ msgstr ""
 "etiquetas."
 
 #. Preview label
-#: ../src/browser.c:3681
+#: ../src/browser.c:3687
 msgid "Rename directory preview"
 msgstr "Previsualización del renombrado de carpeta"
 
-#: ../src/browser.c:3773
+#: ../src/browser.c:3779
 msgid "You must type a directory name"
 msgstr "Debe introducir un nombre de directorio"
 
-#: ../src/browser.c:3774 ../src/browser.c:3795
+#: ../src/browser.c:3780 ../src/browser.c:3801
 msgid "Directory Name Error"
 msgstr "Error en el nombre de la carpeta"
 
-#: ../src/browser.c:3792
+#: ../src/browser.c:3798
 #, c-format
 msgid "Could not convert '%s' into filename encoding."
 msgstr "No se puede convertir «%s» a la codificación del nombre de archivo."
 
-#: ../src/browser.c:3794
+#: ../src/browser.c:3800
 msgid "Please use another name"
 msgstr "Use otro nombre"
 
-#: ../src/browser.c:3864
+#: ../src/browser.c:3870
 #, c-format
 msgid "The directory name '%s' already exists"
 msgstr "El nombre de la carpeta «%s» ya existe"
 
-#: ../src/browser.c:3865 ../src/easytag.c:2963
+#: ../src/browser.c:3871 ../src/easytag.c:2958
 msgid "Rename File Error"
 msgstr "Error al renombrar el archivo"
 
-#: ../src/browser.c:3903 ../src/browser.c:3932
+#: ../src/browser.c:3909 ../src/browser.c:3938
 msgid "Rename Directory Error"
 msgstr "Error al renombrar la carpeta"
 
-#: ../src/browser.c:3970
+#: ../src/browser.c:3976
 msgid "Directory renamed"
 msgstr "Carpeta renombrada"
 
-#: ../src/browser.c:4006
+#: ../src/browser.c:4012
 msgid "Browse Directory With"
 msgstr "Explorar carpeta con"
 
-#: ../src/browser.c:4022 ../src/browser.c:4148
+#: ../src/browser.c:4028 ../src/browser.c:4154
 msgid "Program to run:"
 msgstr "Programa que ejecutar:"
 
-#: ../src/browser.c:4034
+#: ../src/browser.c:4040
 msgid ""
 "Enter the program to run. It will receive the current directory as parameter."
 msgstr ""
 "Introduzca el programa que ejecutar. Recibirá la carpeta actual como "
 "parámetro."
 
-#: ../src/browser.c:4128
+#: ../src/browser.c:4134
 msgid "Open Files With"
 msgstr "Abrir archivos con"
 
-#: ../src/browser.c:4160
+#: ../src/browser.c:4166
 msgid ""
 "Enter the program to run. It will receive the current file as parameter."
 msgstr ""
@@ -1052,7 +1043,7 @@ msgstr "Todos los campos"
 
 #. Translators: This option is for the previous 'search in' option. For
 #. * instance, translate this as "Search in:" "Other".
-#: ../src/cddb.c:492 ../src/picture.c:1037 ../src/prefs.c:807
+#: ../src/cddb.c:492 ../src/picture.c:862 ../src/prefs.c:807
 msgid "Other"
 msgstr "Otro"
 
@@ -1146,7 +1137,7 @@ msgstr "Categorías"
 msgid "Results:"
 msgstr "Resultados:"
 
-#: ../src/cddb.c:606 ../src/misc.c:1950
+#: ../src/cddb.c:606 ../src/misc.c:1947
 msgid "Search:"
 msgstr "Buscar:"
 
@@ -1210,7 +1201,7 @@ msgid "# Tracks"
 msgstr "N.º de pistas"
 
 #. Check box to run the scanner
-#: ../src/cddb.c:847 ../src/misc.c:2991
+#: ../src/cddb.c:847 ../src/misc.c:2988
 msgid "Run the current scanner for each file"
 msgstr "Ejecutar el analizador actual para cada archivo"
 
@@ -1643,47 +1634,47 @@ msgid "The string '%s' couldn't be converted into UTF-8 (%s)."
 msgstr "La cadena «%s» no se pudo convertir a UTF-8 (%s)."
 
 #. Starting messages
-#: ../src/easytag.c:184
+#: ../src/easytag.c:185
 #, c-format
 msgid "Starting EasyTAG version %s (PID: %d)…"
 msgstr "Iniciando EasyTAG versión %s (PID: %d)…"
 
-#: ../src/easytag.c:186
+#: ../src/easytag.c:187
 #, c-format
 msgid "Using libid3tag version %s"
 msgstr "Usando libid3tag versión %s"
 
-#: ../src/easytag.c:189
+#: ../src/easytag.c:190
 #, c-format
 msgid "Using id3lib version %d.%d.%d"
 msgstr "Usando id3lib versión %d.%d.%d"
 
-#: ../src/easytag.c:195
+#: ../src/easytag.c:196
 #, c-format
 msgid "Variable EASYTAGLANG defined. Setting locale: '%s'"
 msgstr "Variable EASYTAGLANG definida. Configuración regional: «%s»"
 
-#: ../src/easytag.c:197
+#: ../src/easytag.c:198
 #, c-format
 msgid "Setting locale: '%s'"
 msgstr "Configuración regional: «%s»"
 
-#: ../src/easytag.c:202
+#: ../src/easytag.c:203
 #, c-format
 msgid "Currently using locale '%s' (and eventually '%s')"
 msgstr ""
 "Usando actualmente la configuración regional «%s» (y eventualmente «%s»)"
 
-#: ../src/easytag.c:209
+#: ../src/easytag.c:210
 msgid "Unable to create setting directories"
 msgstr "No se puede crear la carpeta de configuraciones"
 
-#: ../src/easytag.c:426 ../src/et_core.c:597 ../src/et_core.c:609
+#: ../src/easytag.c:427 ../src/et_core.c:638 ../src/et_core.c:650
 #, c-format
 msgid "Error while querying information for file: '%s' (%s)"
 msgstr "Error al consultar la información del archivo: «%s» (%s)"
 
-#: ../src/easytag.c:489
+#: ../src/easytag.c:490
 #, c-format
 msgid "Cannot open path '%s'"
 msgstr "No se puede abrir la ruta: «%s»"
@@ -1691,11 +1682,11 @@ msgstr "No se puede abrir la ruta: «%s»"
 #.
 #. * Browser
 #.
-#: ../src/easytag.c:581 ../src/prefs.c:142
+#: ../src/easytag.c:583 ../src/prefs.c:142
 msgid "Browser"
 msgstr "Examinador"
 
-#: ../src/easytag.c:603 ../src/et_core.c:2817
+#: ../src/easytag.c:605 ../src/et_core.c:2858
 msgid "File"
 msgstr "Archivo"
 
@@ -1705,103 +1696,103 @@ msgstr "Archivo"
 #. gtk_label_set_text(GTK_LABEL(VersionValueLabel),"");
 #. Version changed to encoder version
 #. Encoder version
-#: ../src/easytag.c:635 ../src/easytag.c:4231 ../src/flac_header.c:201
+#: ../src/easytag.c:637 ../src/easytag.c:4226 ../src/flac_header.c:201
 #: ../src/monkeyaudio_header.c:96 ../src/musepack_header.c:98
 #: ../src/ogg_header.c:389 ../src/opus_header.c:221 ../src/wavpack_header.c:72
 #, c-format
 msgid "Encoder:"
 msgstr "Codificador:"
 
-#: ../src/easytag.c:643
+#: ../src/easytag.c:645
 msgid "Bitrate:"
 msgstr "Tasa de bits:"
 
 #. Translators: Please try to keep this string as short as possible as it
 #. * is shown in a narrow column.
-#: ../src/easytag.c:653
+#: ../src/easytag.c:655
 msgid "Frequency:"
 msgstr "Frecuencia:"
 
 #. Mode
-#: ../src/easytag.c:664 ../src/easytag.c:4235 ../src/mpeg_header.c:216
+#: ../src/easytag.c:666 ../src/easytag.c:4230 ../src/mpeg_header.c:216
 msgid "Mode:"
 msgstr "Modo:"
 
-#: ../src/easytag.c:671
+#: ../src/easytag.c:673
 msgid "Size:"
 msgstr "Tamaño:"
 
-#: ../src/easytag.c:678
+#: ../src/easytag.c:680
 msgid "Duration:"
 msgstr "Duración:"
 
 #. Main Frame
-#: ../src/easytag.c:725 ../src/et_core.c:2747
+#: ../src/easytag.c:726 ../src/et_core.c:2788
 msgid "Tag"
 msgstr "Etiqueta"
 
 #.
 #. * 1 - Page for common tag fields
 #.
-#: ../src/easytag.c:747
+#: ../src/easytag.c:748
 msgid "Common"
 msgstr "General"
 
 #. Title
-#: ../src/easytag.c:754
+#: ../src/easytag.c:755
 msgid "Title:"
 msgstr "Título:"
 
-#: ../src/easytag.c:768
+#: ../src/easytag.c:769
 msgid "Tag selected files with this title"
 msgstr "Etiquetar archivos seleccionados con este título"
 
 #. Artist
-#: ../src/easytag.c:773
+#: ../src/easytag.c:774
 msgid "Artist:"
 msgstr "Artista:"
 
-#: ../src/easytag.c:787
+#: ../src/easytag.c:788
 msgid "Tag selected files with this artist"
 msgstr "Etiquetar archivos seleccionados con este artista"
 
 #. Album Artist
-#: ../src/easytag.c:792
+#: ../src/easytag.c:793
 msgid "Album artist:"
 msgstr "Artista del álbum:"
 
-#: ../src/easytag.c:806
+#: ../src/easytag.c:807
 msgid "Tag selected files with this album artist"
 msgstr "Etiquetar archivos seleccionados con este artista del álbum"
 
 #. Album
-#: ../src/easytag.c:811
+#: ../src/easytag.c:812
 msgid "Album:"
 msgstr "Álbum:"
 
-#: ../src/easytag.c:825
+#: ../src/easytag.c:826
 msgid "Tag selected files with this album name"
 msgstr "Etiquetar archivos seleccionados con este nombre de álbum"
 
 #. Disc Number
-#: ../src/easytag.c:830
+#: ../src/easytag.c:831
 msgid "CD:"
 msgstr "CD:"
 
-#: ../src/easytag.c:847
+#: ../src/easytag.c:848
 msgid "Tag selected files with this disc number"
 msgstr "Etiquetar archivos seleccionados con este número de disco"
 
 #. Year
-#: ../src/easytag.c:852
+#: ../src/easytag.c:853
 msgid "Year:"
 msgstr "Año:"
 
-#: ../src/easytag.c:872
+#: ../src/easytag.c:873
 msgid "Tag selected files with this year"
 msgstr "Etiquetar archivos seleccionados con este año"
 
-#: ../src/easytag.c:886
+#: ../src/easytag.c:887
 msgid "Number selected tracks sequentially. Starts at 01 in each subdirectory."
 msgstr ""
 "Numerar todas las pistas seleccionadas secuencialmente. Empieza con 01 en "
@@ -1809,11 +1800,11 @@ msgstr ""
 
 #. To have enough space to display the icon
 #. To have enough space to display the icon
-#: ../src/easytag.c:895
+#: ../src/easytag.c:896
 msgid "Track #:"
 msgstr "Pista n.º:"
 
-#: ../src/easytag.c:926
+#: ../src/easytag.c:927
 msgid ""
 "Set the number of files, in the same directory of the displayed file, to the "
 "selected tracks."
@@ -1821,79 +1812,79 @@ msgstr ""
 "Establecer el número de archivos, en la misma carpeta del archivo mostrado, "
 "a las pistas seleccionadas."
 
-#: ../src/easytag.c:946
+#: ../src/easytag.c:947
 msgid "Tag selected files with this number of tracks"
 msgstr "Etiquetar archivos seleccionados con este número de pistas"
 
 #. Genre
-#: ../src/easytag.c:950
+#: ../src/easytag.c:951
 msgid "Genre:"
 msgstr "Género:"
 
-#: ../src/easytag.c:978
+#: ../src/easytag.c:979
 msgid "Tag selected files with this genre"
 msgstr "Etiquetar archivos seleccionados con este género"
 
 #. Comment
-#: ../src/easytag.c:983
+#: ../src/easytag.c:984
 msgid "Comment:"
 msgstr "Comentario:"
 
-#: ../src/easytag.c:1010
+#: ../src/easytag.c:1011
 msgid "Tag selected files with this comment"
 msgstr "Etiquetar archivos seleccionados con este comentario"
 
 #. Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(CommentView));
 #. Composer (name of the composers)
-#: ../src/easytag.c:1017
+#: ../src/easytag.c:1018
 msgid "Composer:"
 msgstr "Compositor:"
 
-#: ../src/easytag.c:1031
+#: ../src/easytag.c:1032
 msgid "Tag selected files with this composer"
 msgstr "Etiquetar archivos seleccionados con este compositor"
 
 #. Translators: Original Artist / Performer. Please try to keep this string
 #. * as short as possible, as it must fit into a narrow column.
-#: ../src/easytag.c:1038
+#: ../src/easytag.c:1039
 msgid "Orig. artist:"
 msgstr "Artista orig.:"
 
-#: ../src/easytag.c:1052
+#: ../src/easytag.c:1053
 msgid "Tag selected files with this original artist"
 msgstr "Etiquetar archivos seleccionados con este artista original"
 
 #. Copyright
-#: ../src/easytag.c:1058
+#: ../src/easytag.c:1059
 msgid "Copyright:"
 msgstr "Copyright:"
 
-#: ../src/easytag.c:1072
+#: ../src/easytag.c:1073
 msgid "Tag selected files with this copyright"
 msgstr "Etiquetar archivos seleccionados con este copyright"
 
 #. URL
-#: ../src/easytag.c:1078
+#: ../src/easytag.c:1079
 msgid "URL:"
 msgstr "URL:"
 
-#: ../src/easytag.c:1092
+#: ../src/easytag.c:1093
 msgid "Tag selected files with this URL"
 msgstr "Etiquetar archivos seleccionados con este URL"
 
 #. Encoded by
-#: ../src/easytag.c:1098
+#: ../src/easytag.c:1099
 msgid "Encoded by:"
 msgstr "Codificado por:"
 
-#: ../src/easytag.c:1112
+#: ../src/easytag.c:1113
 msgid "Tag selected files with this encoder name"
 msgstr "Etiquetar archivos seleccionados con este nombre de codificador"
 
 #.
 #. * 2 - Page for extra tag fields
 #.
-#: ../src/easytag.c:1146 ../src/et_core.c:3189 ../src/et_core.c:3192
+#: ../src/easytag.c:1146 ../src/et_core.c:3230 ../src/et_core.c:3233
 msgid "Images"
 msgstr "Imágenes"
 
@@ -1901,554 +1892,554 @@ msgstr "Imágenes"
 msgid "You can use drag and drop to add an image"
 msgstr "Puede arrastrar y soltar para añadir una imagen"
 
-#: ../src/easytag.c:1217
+#: ../src/easytag.c:1219
 msgid "Add images to the tag"
 msgstr "Añadir imágenes a la etiqueta"
 
-#: ../src/easytag.c:1235
+#: ../src/easytag.c:1237
 msgid "Remove selected images from the tag"
 msgstr "Quitar las imágenes seleccionadas de la etiqueta"
 
-#: ../src/easytag.c:1249
+#: ../src/easytag.c:1248
 msgid "Save the selected images to files"
 msgstr "Guardar las imágenes seleccionadas a archivos"
 
-#: ../src/easytag.c:1260
+#: ../src/easytag.c:1259
 msgid "Edit image properties"
 msgstr "Editar las propiedades de la imagen"
 
-#: ../src/easytag.c:1274
+#: ../src/easytag.c:1270
 msgid "Tag selected files with these images"
 msgstr "Etiquetar archivos seleccionados con estas imágenes"
 
-#: ../src/easytag.c:1332
+#: ../src/easytag.c:1328
 #, c-format
 msgid "Selected files tagged with title '%s'."
 msgstr "Archivos seleccionados etiquetados con el título «%s»."
 
-#: ../src/easytag.c:1334
+#: ../src/easytag.c:1330
 msgid "Removed title from selected files."
 msgstr "Título eliminado de los archivos seleccionados."
 
-#: ../src/easytag.c:1349
+#: ../src/easytag.c:1345
 #, c-format
 msgid "Selected files tagged with artist '%s'."
 msgstr "Archivos seleccionados etiquetados con el artista «%s»."
 
-#: ../src/easytag.c:1351
+#: ../src/easytag.c:1347
 msgid "Removed artist from selected files."
 msgstr "Artista eliminado de los archivos seleccionados."
 
-#: ../src/easytag.c:1365
+#: ../src/easytag.c:1361
 #, c-format
 msgid "Selected files tagged with album artist '%s'."
 msgstr "Archivos seleccionados etiquetados con el artista del álbum «%s»."
 
-#: ../src/easytag.c:1367
+#: ../src/easytag.c:1363
 msgid "Removed album artist from selected files."
 msgstr "Eliminado artista del álbum de los archivos seleccionados."
 
-#: ../src/easytag.c:1382
+#: ../src/easytag.c:1378
 #, c-format
 msgid "Selected files tagged with album '%s'."
 msgstr "Archivos seleccionados etiquetados con álbum «%s»."
 
-#: ../src/easytag.c:1384
+#: ../src/easytag.c:1380
 msgid "Removed album name from selected files."
 msgstr "Nombre de álbum eliminado de los archivos seleccionados."
 
-#: ../src/easytag.c:1421
+#: ../src/easytag.c:1417
 #, c-format
 msgid "Selected files tagged with disc number '%s/%s'."
 msgstr "Archivos seleccionados etiquetados con el número de disco «%s/%s»."
 
-#: ../src/easytag.c:1426
+#: ../src/easytag.c:1422
 #, c-format
 msgid "Selected files tagged with disc number like 'xx'."
 msgstr "Archivos seleccionados etiquetados con el número de disco como «xx»."
 
-#: ../src/easytag.c:1431
+#: ../src/easytag.c:1427
 msgid "Removed disc number from selected files."
 msgstr "Número de disco eliminado de los archivos seleccionados."
 
-#: ../src/easytag.c:1447
+#: ../src/easytag.c:1443
 #, c-format
 msgid "Selected files tagged with year '%s'."
 msgstr "Archivos seleccionados etiquetados con el año «%s»."
 
-#: ../src/easytag.c:1449
+#: ../src/easytag.c:1445
 msgid "Removed year from selected files."
 msgstr "Año eliminado de los archivos seleccionados."
 
-#: ../src/easytag.c:1475 ../src/easytag.c:1566
+#: ../src/easytag.c:1471 ../src/easytag.c:1561
 #, c-format
 msgid "Selected files tagged with track like 'xx/%s'."
 msgstr "Archivos seleccionados etiquetados con la pista como «xx/%s»."
 
-#: ../src/easytag.c:1478
+#: ../src/easytag.c:1474
 #, c-format
 msgid "Selected files tagged with track like 'xx'."
 msgstr "Archivos seleccionados etiquetados con la pista como «xx»."
 
-#: ../src/easytag.c:1482 ../src/easytag.c:1569
+#: ../src/easytag.c:1478 ../src/easytag.c:1564
 msgid "Removed track number from selected files."
 msgstr "Número de pista eliminado de los archivos seleccionados."
 
 #. msg = g_strdup_printf(_("All %d tracks numbered sequentially."), ETCore->ETFileSelectionList_Length);
-#: ../src/easytag.c:1539
+#: ../src/easytag.c:1534
 #, c-format
 msgid "Selected tracks numbered sequentially."
 msgstr "Pistas seleccionadas numeradas secuencialmente."
 
-#: ../src/easytag.c:1585
+#: ../src/easytag.c:1580
 #, c-format
 msgid "Selected files tagged with genre '%s'."
 msgstr "Archivos seleccionados etiquetados con el género «%s»."
 
-#: ../src/easytag.c:1587
+#: ../src/easytag.c:1582
 msgid "Removed genre from selected files."
 msgstr "Género eliminado de los archivos seleccionados."
 
-#: ../src/easytag.c:1609
+#: ../src/easytag.c:1604
 #, c-format
 msgid "Selected files tagged with comment '%s'."
 msgstr "Archivos seleccionados etiquetados con el comentario «%s»."
 
-#: ../src/easytag.c:1611
+#: ../src/easytag.c:1606
 msgid "Removed comment from selected files."
 msgstr "Comentario eliminado de los archivos seleccionados."
 
-#: ../src/easytag.c:1625
+#: ../src/easytag.c:1620
 #, c-format
 msgid "Selected files tagged with composer '%s'."
 msgstr "Archivos seleccionados etiquetados con el compositor «%s»."
 
-#: ../src/easytag.c:1627
+#: ../src/easytag.c:1622
 msgid "Removed composer from selected files."
 msgstr "Eliminado el compositor de los archivos seleccionados."
 
-#: ../src/easytag.c:1642
+#: ../src/easytag.c:1637
 #, c-format
 msgid "Selected files tagged with original artist '%s'."
 msgstr "Archivos seleccionados etiquetados con el artista original «%s»."
 
-#: ../src/easytag.c:1644
+#: ../src/easytag.c:1639
 msgid "Removed original artist from selected files."
 msgstr "Eliminado el artista original de los archivos seleccionados."
 
-#: ../src/easytag.c:1659
+#: ../src/easytag.c:1654
 #, c-format
 msgid "Selected files tagged with copyright '%s'."
 msgstr "Archivos seleccionados etiquetados con copyright «%s»."
 
-#: ../src/easytag.c:1661
+#: ../src/easytag.c:1656
 msgid "Removed copyright from selected files."
 msgstr "Eliminado el copyright de los archivos seleccionados."
 
-#: ../src/easytag.c:1676
+#: ../src/easytag.c:1671
 #, c-format
 msgid "Selected files tagged with URL '%s'."
 msgstr "Archivos seleccionados etiquetados con el URL «%s»."
 
-#: ../src/easytag.c:1678
+#: ../src/easytag.c:1673
 msgid "Removed URL from selected files."
 msgstr "URL eliminado de los archivos seleccionados."
 
-#: ../src/easytag.c:1693
+#: ../src/easytag.c:1688
 #, c-format
 msgid "Selected files tagged with encoder name '%s'."
 msgstr "Archivos seleccionados etiquetados con el nombre de codificador «%s»."
 
-#: ../src/easytag.c:1695
+#: ../src/easytag.c:1690
 msgid "Removed encoder name from selected files."
 msgstr "Eliminado el nombre del codificador de los archivos seleccionados."
 
-#: ../src/easytag.c:1727
+#: ../src/easytag.c:1722
 msgid "Selected files tagged with images."
 msgstr "Archivos seleccionados etiquetados con imágenes."
 
-#: ../src/easytag.c:1729
+#: ../src/easytag.c:1724
 msgid "Removed images from selected files."
 msgstr "Imágenes eliminadas de los archivos seleccionados."
 
-#: ../src/easytag.c:2010
+#: ../src/easytag.c:2005
 msgid "Select Mode and Mask, and redo the same action"
 msgstr "Seleccionar Modo y Máscara y rehacer la misma acción"
 
-#: ../src/easytag.c:2062
+#: ../src/easytag.c:2057
 msgid "All tags have been scanned"
 msgstr "Todas las etiquetas han sido analizadas"
 
-#: ../src/easytag.c:2118
+#: ../src/easytag.c:2113
 msgid "All tags have been removed"
 msgstr "Todas las etiquetas han sido eliminadas"
 
-#: ../src/easytag.c:2423
+#: ../src/easytag.c:2418
 #, c-format
 msgid "A file was changed by an external program"
 msgid_plural "%d files were changed by an external program."
 msgstr[0] "Se ha cambiado un archivo por un programa externo"
 msgstr[1] "Se han cambiado %d archivos por un programa externo."
 
-#: ../src/easytag.c:2428
+#: ../src/easytag.c:2423
 msgid "Do you want to continue saving the file?"
 msgstr "¿Quiere continuar guardando el archivo?"
 
-#: ../src/easytag.c:2486 ../src/easytag.c:2506
+#: ../src/easytag.c:2481 ../src/easytag.c:2501
 msgid "Saving files was stopped"
 msgstr "Se detuvo al guardar archivos"
 
-#: ../src/easytag.c:2508
+#: ../src/easytag.c:2503
 msgid "All files have been saved"
 msgstr "Todos los archivos se han guardado"
 
-#: ../src/easytag.c:2643
+#: ../src/easytag.c:2638
 #, c-format
 msgid "Cannot delete file (%s)"
 msgstr "No se puede eliminar el archivo (%s)"
 
-#: ../src/easytag.c:2664
+#: ../src/easytag.c:2659
 msgid "Files have been partially deleted"
 msgstr "Se han eliminado los archivos parcialmente"
 
-#: ../src/easytag.c:2666
+#: ../src/easytag.c:2661
 msgid "All files have been deleted"
 msgstr "Se han eliminado todos los archivos"
 
-#: ../src/easytag.c:2782
+#: ../src/easytag.c:2777
 #, c-format
 msgid "Do you want to write the tag of file '%s'?"
 msgstr "¿Quiere escribir la etiqueta del archivo «%s»?"
 
-#: ../src/easytag.c:2784
+#: ../src/easytag.c:2779
 msgid "Confirm Tag Writing"
 msgstr "Confirmar escritura de etiqueta"
 
-#: ../src/easytag.c:2789 ../src/easytag.c:2909 ../src/easytag.c:3172
+#: ../src/easytag.c:2784 ../src/easytag.c:2904 ../src/easytag.c:3167
 msgid "Repeat action for the remaining files"
 msgstr "Repetir acción para el resto de los archivos"
 
 #. Directories and filename changed
-#: ../src/easytag.c:2873 ../src/scan.c:181
+#: ../src/easytag.c:2868 ../src/scan_dialog.c:183
 msgid "Rename File and Directory"
 msgstr "Renombrar archivo y carpeta"
 
-#: ../src/easytag.c:2874
+#: ../src/easytag.c:2869
 msgid "File and directory rename confirmation required"
 msgstr "Se requiere confirmación para renombrar el archivo y la carpeta"
 
-#: ../src/easytag.c:2875
+#: ../src/easytag.c:2870
 #, c-format
 msgid "Do you want to rename the file and directory '%s' to '%s'?"
 msgstr "¿Quiere renombrar el archivo y carpeta «%s» a «%s»?"
 
-#: ../src/easytag.c:2881
+#: ../src/easytag.c:2876
 msgid "Directory rename confirmation required"
 msgstr "Se requiere confirmar el renombrado de la carpeta"
 
-#: ../src/easytag.c:2882
+#: ../src/easytag.c:2877
 #, c-format
 msgid "Do you want to rename the directory '%s' to '%s'?"
 msgstr "¿Quiere renombrar la carpeta «%s» a «%s»?"
 
 #. Only filename changed
-#: ../src/easytag.c:2888
+#: ../src/easytag.c:2883
 msgid "Rename File"
 msgstr "Renombrar el archivo"
 
-#: ../src/easytag.c:2889
+#: ../src/easytag.c:2884
 msgid "File rename confirmation required"
 msgstr "Se requiere confirmación para renombrar el archivo"
 
-#: ../src/easytag.c:2890
+#: ../src/easytag.c:2885
 #, c-format
 msgid "Do you want to rename the file '%s' to '%s'?"
 msgstr "¿Quiere renombrar el archivo «%s» a «%s»?"
 
-#: ../src/easytag.c:2956
+#: ../src/easytag.c:2951
 #, c-format
 msgid "Cannot rename file '%s' to '%s'"
 msgstr "No se puede renombrar el archivo «%s» a «%s»"
 
-#: ../src/easytag.c:2970
+#: ../src/easytag.c:2965
 #, c-format
 msgid "Cannot rename file '%s' to '%s': %s"
 msgstr "No se puede renombrar el archivo «%s» a «%s»: %s"
 
-#: ../src/easytag.c:2974
+#: ../src/easytag.c:2969
 msgid "File(s) not renamed"
 msgstr "Archivo(s) no renombrados"
 
-#: ../src/easytag.c:3086
+#: ../src/easytag.c:3081
 #, c-format
 msgid "Writing tag of '%s'"
 msgstr "Escribiendo etiqueta de «%s»"
 
-#: ../src/easytag.c:3093
+#: ../src/easytag.c:3088
 msgid "Tag(s) written"
 msgstr "Etiqueta(s) escritas"
 
-#: ../src/easytag.c:3108
+#: ../src/easytag.c:3103
 #, c-format
 msgid "Cannot write tag in file '%s' (%s)"
 msgstr "No se puede escribir la etiqueta en el archivo «%s» (%s)"
 
-#: ../src/easytag.c:3121
+#: ../src/easytag.c:3116
 #, c-format
 msgid "Cannot write tag in file '%s'"
 msgstr "No se puede escribir la etiqueta en el archivo «%s»"
 
-#: ../src/easytag.c:3124
+#: ../src/easytag.c:3119
 msgid "Tag Write Error"
 msgstr " Error al escribir etiqueta"
 
-#: ../src/easytag.c:3169 ../src/easytag.c:3183
+#: ../src/easytag.c:3164 ../src/easytag.c:3178
 #, c-format
 msgid "Do you really want to delete the file '%s'?"
 msgstr "¿Realmente quiere eliminar el archivo «%s»?"
 
-#: ../src/easytag.c:3175 ../src/easytag.c:3185
+#: ../src/easytag.c:3170 ../src/easytag.c:3180
 msgid "Delete File"
 msgstr "Eliminar archivo"
 
-#: ../src/easytag.c:3210
+#: ../src/easytag.c:3205
 #, c-format
 msgid "File '%s' deleted"
 msgstr "Archivo «%s» eliminado"
 
-#: ../src/easytag.c:3345
+#: ../src/easytag.c:3340
 #, c-format
 msgid "Cannot read directory '%s'"
 msgstr "No se puede leer carpeta «%s»"
 
-#: ../src/easytag.c:3349
+#: ../src/easytag.c:3344
 msgid "Directory Read Error"
 msgstr "Error al leer carpeta"
 
 #. Read the directory recursively
-#: ../src/easytag.c:3370
+#: ../src/easytag.c:3365
 #, c-format
 msgid "Search in progress…"
 msgstr "Búsqueda en progreso…"
 
-#: ../src/easytag.c:3393 ../src/et_core.c:2824
+#: ../src/easytag.c:3388 ../src/et_core.c:2865
 #, c-format
 msgid "File: '%s'"
 msgstr "Archivo: «%s»"
 
-#: ../src/easytag.c:3443
+#: ../src/easytag.c:3438
 #, c-format
 msgid "Found one file in this directory and subdirectories"
 msgid_plural "Found %d files in this directory and subdirectories"
 msgstr[0] "Encontrado un archivo en esta carpeta y subcarpetas."
 msgstr[1] "Encontrados %d archivos en esta carpeta y subcarpetas."
 
-#: ../src/easytag.c:3450
+#: ../src/easytag.c:3445
 #, c-format
 msgid "Found one file in this directory"
 msgid_plural "Found %d files in this directory"
 msgstr[0] "Encontrado un archivo en esta carpeta"
 msgstr[1] "Encontrados %d archivos en esta carpeta"
 
-#: ../src/easytag.c:3472
+#: ../src/easytag.c:3467
 msgid "No file found in this directory and subdirectories"
 msgstr "No se han encontrados archivos en esta carpeta y subcarpetas"
 
-#: ../src/easytag.c:3474
+#: ../src/easytag.c:3469
 msgid "No file found in this directory"
 msgstr "No se han encontrado archivos en esta carpeta"
 
-#: ../src/easytag.c:3542
+#: ../src/easytag.c:3537
 #, c-format
 msgid "Error opening directory '%s' (%s)"
 msgstr "Error al abrir la carpeta «%s» (%s)"
 
-#: ../src/easytag.c:3578
+#: ../src/easytag.c:3573
 #, c-format
 msgid "Cannot read directory (%s)"
 msgstr "No se puede leer carpeta (%s)"
 
-#: ../src/easytag.c:3598
+#: ../src/easytag.c:3593
 msgid "Searching for audio files…"
 msgstr "Buscando por archivos de sonido…"
 
-#: ../src/easytag.c:3599
+#: ../src/easytag.c:3594
 msgid "Searching"
 msgstr "Buscando"
 
-#: ../src/easytag.c:4265
+#: ../src/easytag.c:4260
 msgid "Select a directory to browse"
 msgstr "Seleccione una carpeta para examinar"
 
 #. Menu items
-#: ../src/easytag.c:4412
+#: ../src/easytag.c:4406
 msgid "Tag selected files with this field"
 msgstr "Etiquetar archivos seleccionados con este campo"
 
-#: ../src/easytag.c:4424 ../src/scan.c:2318
+#: ../src/easytag.c:4418 ../src/scan_dialog.c:2128
 msgid "Convert '_' and '%20' to spaces"
 msgstr "Convertir «_» y «%20» a espacios"
 
-#: ../src/easytag.c:4431 ../src/scan.c:2320
+#: ../src/easytag.c:4425 ../src/scan_dialog.c:2130
 msgid "Convert ' ' to '_'"
 msgstr "Convertir « » a «_»"
 
-#: ../src/easytag.c:4442
+#: ../src/easytag.c:4436
 msgid "All uppercase"
 msgstr "Todas mayúsculas"
 
-#: ../src/easytag.c:4449
+#: ../src/easytag.c:4443
 msgid "All lowercase"
 msgstr "Todas minúsculas"
 
-#: ../src/easytag.c:4456
+#: ../src/easytag.c:4450
 msgid "First letter uppercase"
 msgstr "Primera letra mayúscula"
 
-#: ../src/easytag.c:4463
+#: ../src/easytag.c:4457
 msgid "First letter uppercase of each word"
 msgstr "Primera letra de cada palabra en mayúscula"
 
-#: ../src/easytag.c:4474 ../src/prefs.c:1023 ../src/scan.c:2418
+#: ../src/easytag.c:4468 ../src/prefs.c:1023 ../src/scan_dialog.c:2254
 msgid "Remove spaces"
 msgstr "Quitar espacios"
 
-#: ../src/easytag.c:4481
+#: ../src/easytag.c:4475
 msgid "Insert space before uppercase letter"
 msgstr "Insertar espacios antes de letra en mayúsculas"
 
-#: ../src/easytag.c:4488
+#: ../src/easytag.c:4482
 msgid "Remove duplicate spaces or underscores"
 msgstr "Quitar espacios o subrayados duplicados"
 
-#: ../src/easytag.c:4495
+#: ../src/easytag.c:4489
 msgid "Remove all text"
 msgstr "Quitar todo el texto"
 
-#: ../src/easytag.c:4514
+#: ../src/easytag.c:4508
 msgid "EasyTAG: Normal exit."
 msgstr "EasyTAG: salida normal."
 
-#: ../src/easytag.c:4566
+#: ../src/easytag.c:4560
 msgid "Do you want to save them before quitting?"
 msgstr "¿Quiere guardarlos antes de salir?"
 
-#: ../src/easytag.c:4593
+#: ../src/easytag.c:4587
 msgid "Do you really want to quit?"
 msgstr "¿Seguro que desea salir?"
 
-#: ../src/et_core.c:510
+#: ../src/et_core.c:551
 #, c-format
 msgid "Error reading tag from ogg file (%s)"
 msgstr "Error al leer etiqueta del archivo ogg: (%s)"
 
-#: ../src/et_core.c:539
+#: ../src/et_core.c:580
 #, c-format
 msgid "Error reading tag from Opus file (%s)"
 msgstr "Error al leer etiqueta del archivo Opus (%s)"
 
-#: ../src/et_core.c:682
+#: ../src/et_core.c:723
 #, c-format
 msgid "Automatic corrections applied for file '%s'."
 msgstr "Correcciones automáticas aplicadas para el archivo «%s»."
 
-#: ../src/et_core.c:2707
+#: ../src/et_core.c:2748
 msgid "ID3 Tag"
 msgstr "Etiqueta ID3"
 
-#: ../src/et_core.c:2713
+#: ../src/et_core.c:2754
 msgid "Ogg Vorbis Tag"
 msgstr "Etiqueta Ogg Vorbis"
 
-#: ../src/et_core.c:2719
+#: ../src/et_core.c:2760
 msgid "FLAC Vorbis Tag"
 msgstr "Etiqueta FLAC Vorbis"
 
-#: ../src/et_core.c:2724
+#: ../src/et_core.c:2765
 msgid "APE Tag"
 msgstr "Etiqueta APE"
 
-#: ../src/et_core.c:2729
+#: ../src/et_core.c:2770
 msgid "MP4/M4A/AAC Tag"
 msgstr "Etiqueta MP4/M4A/AAC"
 
-#: ../src/et_core.c:2735
+#: ../src/et_core.c:2776
 msgid "Wavpack Tag"
 msgstr "Etiqueta Wavpack"
 
-#: ../src/et_core.c:2741
+#: ../src/et_core.c:2782
 msgid "Opus Tag"
 msgstr "Etiqueta Opus"
 
-#: ../src/et_core.c:2761
+#: ../src/et_core.c:2802
 msgid "MP3 File"
 msgstr "Archivo MP3"
 
-#: ../src/et_core.c:2765
+#: ../src/et_core.c:2806
 msgid "MP2 File"
 msgstr "Archivo MP2"
 
-#: ../src/et_core.c:2771
+#: ../src/et_core.c:2812
 msgid "Ogg Vorbis File"
 msgstr "Archivo Ogg Vorbis"
 
-#: ../src/et_core.c:2777
+#: ../src/et_core.c:2818
 msgid "Speex File"
 msgstr "Archivo Speex"
 
-#: ../src/et_core.c:2783
+#: ../src/et_core.c:2824
 msgid "FLAC File"
 msgstr "Archivo FLAC"
 
-#: ../src/et_core.c:2788
+#: ../src/et_core.c:2829
 msgid "MusePack File"
 msgstr "Archivo MusePack"
 
-#: ../src/et_core.c:2792
+#: ../src/et_core.c:2833
 msgid "Monkey's Audio File"
 msgstr "Archivo de sonido Monkey"
 
-#: ../src/et_core.c:2797
+#: ../src/et_core.c:2838
 msgid "MP4/AAC File"
 msgstr "Archivo MP4/AAC"
 
-#: ../src/et_core.c:2803
+#: ../src/et_core.c:2844
 msgid "Wavpack File"
 msgstr "Archivo Wavpack"
 
-#: ../src/et_core.c:2809
+#: ../src/et_core.c:2850
 msgid "Opus File"
 msgstr "Archivo Opus"
 
-#: ../src/et_core.c:2868 ../src/et_core.c:2923
+#: ../src/et_core.c:2909 ../src/et_core.c:2964
 msgid "File not found"
 msgstr "Archivo no encontrado"
 
-#: ../src/et_core.c:2873
+#: ../src/et_core.c:2914
 #, c-format
 msgid "Cannot query file information (%s)"
 msgstr "No se puede consultar la información del archivo (%s)"
 
-#: ../src/et_core.c:2907
+#: ../src/et_core.c:2948
 msgid "Read-only file"
 msgstr "Archivo de solo lectura"
 
 #. And refresh the number of files in this directory
-#: ../src/et_core.c:2971
+#: ../src/et_core.c:3012
 #, c-format
 msgid "One file"
 msgid_plural "%u files"
 msgstr[0] "Un archivo"
 msgstr[1] "%u archivos"
 
-#: ../src/et_core.c:3175
+#: ../src/et_core.c:3216
 #, c-format
 msgid "Images (%d)"
 msgstr "Imágenes (%d)"
 
 #. Bitrate
-#: ../src/et_core.c:3217 ../src/flac_header.c:205
-#: ../src/monkeyaudio_header.c:86 ../src/mp4_header.c:134
+#: ../src/et_core.c:3258 ../src/flac_header.c:205
+#: ../src/monkeyaudio_header.c:86 ../src/mp4_header.cc:132
 #: ../src/mpeg_header.c:206 ../src/musepack_header.c:88
 #: ../src/ogg_header.c:401 ../src/opus_header.c:227 ../src/wavpack_header.c:78
 #, c-format
@@ -2456,30 +2447,30 @@ msgid "%d kb/s"
 msgstr "%d kb/s"
 
 #. Samplerate
-#: ../src/et_core.c:3222 ../src/flac_header.c:210
-#: ../src/monkeyaudio_header.c:91 ../src/mp4_header.c:139
+#: ../src/et_core.c:3263 ../src/flac_header.c:210
+#: ../src/monkeyaudio_header.c:91 ../src/mp4_header.cc:137
 #: ../src/mpeg_header.c:211 ../src/musepack_header.c:93
 #: ../src/ogg_header.c:406 ../src/opus_header.c:232 ../src/wavpack_header.c:83
 #, c-format
 msgid "%d Hz"
 msgstr "%d Hz"
 
-#: ../src/et_core.c:3368 ../src/scan.c:686
+#: ../src/et_core.c:3409 ../src/scan_dialog.c:688
 #, c-format
 msgid "Could not convert filename '%s' into system filename encoding"
 msgstr ""
 "No se puede convertir el nombre de archivo «%s» a la codificación de nombres "
 "de archivo del sistema"
 
-#: ../src/et_core.c:3370
+#: ../src/et_core.c:3411
 msgid "Try setting the environment variable G_FILENAME_ENCODING."
 msgstr "Intente configurar la variable de entorno G_FILENAME_ENCODING."
 
-#: ../src/et_core.c:3371 ../src/scan.c:688
+#: ../src/et_core.c:3412 ../src/scan_dialog.c:690
 msgid "Filename translation"
 msgstr "Traducción del nombre de archivo"
 
-#: ../src/et_core.c:4076
+#: ../src/et_core.c:4117
 #, c-format
 msgid "Error writing tag type %d to file %s (%s)"
 msgstr "Error al escribir el tipo de etiqueta %d al archivo %s (%s)"
@@ -2488,7 +2479,7 @@ msgstr "Error al escribir el tipo de etiqueta %d al archivo %s (%s)"
 #. Mode
 #. mpeg4ip library seems to always return -1
 #. Mode
-#: ../src/flac_header.c:215 ../src/mp4_header.c:145 ../src/ogg_header.c:411
+#: ../src/flac_header.c:215 ../src/mp4_header.cc:143 ../src/ogg_header.c:411
 #: ../src/opus_header.c:237 ../src/wavpack_header.c:88
 msgid "Channels:"
 msgstr "Canales:"
@@ -2498,7 +2489,7 @@ msgstr "Canales:"
 msgid "Error while opening file: '%s' as FLAC (%s)."
 msgstr "Error al abrir archivo: «%s» como FLAC (%s)."
 
-#: ../src/flac_tag.c:352 ../src/ogg_tag.c:310
+#: ../src/flac_tag.c:352 ../src/ogg_tag.c:304
 #, c-format
 msgid ""
 "The year value '%s' seems to be invalid in file '%s'. The information will "
@@ -2517,17 +2508,17 @@ msgstr "El bloque de imagen no es válido: «%s»"
 msgid "Error: Failed to write comments to file '%s' (%s)."
 msgstr "Error: fallo al escribir comentarios al archivo «%s» (%s)."
 
-#: ../src/flac_tag.c:1099 ../src/ogg_tag.c:1166
+#: ../src/flac_tag.c:1099 ../src/ogg_tag.c:1161
 #, c-format
 msgid "Written tag of '%s'"
 msgstr "Etiqueta escrita de «%s»"
 
-#: ../src/id3_tag.c:158
+#: ../src/id3_tag.c:205
 #, c-format
 msgid "Error while reading file: '%s' (%s)"
 msgstr "Error al leer el archivo: «%s» (%s)"
 
-#: ../src/id3_tag.c:170
+#: ../src/id3_tag.c:217
 #, c-format
 msgid ""
 "As the following corrupted file '%s' will cause an error in id3lib, it will "
@@ -2536,31 +2527,31 @@ msgstr ""
 "Como el siguiente archivo corrupto «%s» causará un error en id3lib, no se "
 "procesará"
 
-#: ../src/id3_tag.c:172
+#: ../src/id3_tag.c:219
 msgid "Corrupted file"
 msgstr "Archivo dañado"
 
-#: ../src/id3_tag.c:555
+#: ../src/id3_tag.c:592
 #, c-format
 msgid "Removed tag of '%s'"
 msgstr "Etiqueta eliminada de «%s»"
 
-#: ../src/id3_tag.c:559 ../src/id3_tag.c:659
+#: ../src/id3_tag.c:596 ../src/id3_tag.c:696
 #, c-format
 msgid "Error while removing ID3v1 tag of '%s' (%s)"
 msgstr "Error al eliminar la etiqueta ID3v1 de «%s» (%s)"
 
-#: ../src/id3_tag.c:561 ../src/id3_tag.c:631
+#: ../src/id3_tag.c:598 ../src/id3_tag.c:668
 #, c-format
 msgid "Error while removing ID3v2 tag of '%s' (%s)"
 msgstr "Error al eliminar la etiqueta ID3v2 de «%s» (%s)"
 
-#: ../src/id3_tag.c:580
+#: ../src/id3_tag.c:617
 #, c-format
 msgid "Error while updating ID3v2 tag of '%s' (%s)"
 msgstr "Error al actualizar la etiqueta ID3v2 de «%s» (%s)"
 
-#: ../src/id3_tag.c:608
+#: ../src/id3_tag.c:645
 msgid ""
 "You have tried to save this tag to Unicode but it was detected that your "
 "version of id3lib is buggy"
@@ -2568,7 +2559,7 @@ msgstr ""
 "Ha intentado guardar esta etiqueta en Unicode pero se detectó que su versión "
 "de id3lib tiene errores"
 
-#: ../src/id3_tag.c:610
+#: ../src/id3_tag.c:647
 #, c-format
 msgid ""
 "If you reload this file, some characters in the tag may not be displayed "
@@ -2587,90 +2578,90 @@ msgstr ""
 "\n"
 "Archivo: %s"
 
-#: ../src/id3_tag.c:617
+#: ../src/id3_tag.c:654
 msgid "Buggy id3lib"
 msgstr "id3lib con errores"
 
-#: ../src/id3_tag.c:651
+#: ../src/id3_tag.c:688
 #, c-format
 msgid "Error while updating ID3v1 tag of '%s' (%s)"
 msgstr "Error al actualizar la etiqueta ID3v1 de «%s» (%s)"
 
-#: ../src/id3_tag.c:665 ../src/id3v24_tag.c:1048
+#: ../src/id3_tag.c:702 ../src/id3v24_tag.c:1108
 #, c-format
 msgid "Updated tag of '%s'"
 msgstr "Actualizada la etiqueta de «%s»"
 
-#: ../src/id3_tag.c:684
+#: ../src/id3_tag.c:721
 msgid "No error reported"
 msgstr "No se han reportado errores"
 
-#: ../src/id3_tag.c:686
+#: ../src/id3_tag.c:723
 msgid "No available memory"
 msgstr "No hay memoria disponible"
 
-#: ../src/id3_tag.c:688
+#: ../src/id3_tag.c:725
 msgid "No data to parse"
 msgstr "No hay datos que analizar"
 
-#: ../src/id3_tag.c:690
+#: ../src/id3_tag.c:727
 msgid "Improperly formatted data"
 msgstr "Datos incorrectamente formateados"
 
-#: ../src/id3_tag.c:692
+#: ../src/id3_tag.c:729
 msgid "No buffer to write to"
 msgstr "No hay búfer para escribir"
 
-#: ../src/id3_tag.c:694
+#: ../src/id3_tag.c:731
 msgid "Buffer is too small"
 msgstr "El búfer es demasiado pequeño"
 
-#: ../src/id3_tag.c:696
+#: ../src/id3_tag.c:733
 msgid "Invalid frame ID"
 msgstr "ID de marco no válido"
 
-#: ../src/id3_tag.c:698
+#: ../src/id3_tag.c:735
 msgid "Requested field not found"
 msgstr "Campo solicitado no encontrado"
 
-#: ../src/id3_tag.c:700
+#: ../src/id3_tag.c:737
 msgid "Unknown field type"
 msgstr "Tipo de campo desconocido"
 
-#: ../src/id3_tag.c:702
+#: ../src/id3_tag.c:739
 msgid "Tag is already attached to a file"
 msgstr "La etiqueta ya está adjuntada a un archivo"
 
-#: ../src/id3_tag.c:704
+#: ../src/id3_tag.c:741
 msgid "Invalid tag version"
 msgstr "Versión de etiqueta no válida"
 
-#: ../src/id3_tag.c:706
+#: ../src/id3_tag.c:743
 msgid "No file to parse"
 msgstr "Ningún archivo que procesar"
 
-#: ../src/id3_tag.c:708
+#: ../src/id3_tag.c:745
 msgid "Attempting to write to a read-only file"
 msgstr "Intentando escribir en un archivo de sólo lectura"
 
-#: ../src/id3_tag.c:710
+#: ../src/id3_tag.c:747
 msgid "Error in compression/uncompression"
 msgstr "Error en compresión/descompresión"
 
-#: ../src/id3_tag.c:712
+#: ../src/id3_tag.c:749
 msgid "Unknown error message"
 msgstr "Mensaje de error desconocido"
 
-#: ../src/id3_tag.c:1316
+#: ../src/id3_tag.c:1357
 #, c-format
 msgid "Error while creating temporary file: '%s'"
 msgstr "Error al crear archivo temporal: «%s»"
 
-#: ../src/id3_tag.c:1323
+#: ../src/id3_tag.c:1364
 msgid "Error while creating temporary file"
 msgstr "Error al crear archivo temporal"
 
-#: ../src/id3_tag.c:1343
+#: ../src/id3_tag.c:1384
 #, c-format
 msgid "Error while writing to file: '%s' (%s)"
 msgstr "Error al escribir al archivo: «%s» (%s)"
@@ -2680,7 +2671,7 @@ msgstr "Error al escribir al archivo: «%s» (%s)"
 #. * missing (not read for some reason) while reading from
 #. * the file.
 #.
-#: ../src/id3v24_tag.c:1503
+#: ../src/id3v24_tag.c:1563
 #, c-format
 msgid "Cannot write tag of file ‘%s’ (a byte was missing)"
 msgid_plural "Cannot write tag of file ‘%s’ (%s bytes were missing)"
@@ -2688,12 +2679,12 @@ msgstr[0] "No se puede escribir la etiqueta del archivo «%s» (faltaba un byte)
 msgstr[1] ""
 "No se puede escribir la etiqueta del archivo «%s» (faltaban %s bytes)"
 
-#: ../src/id3v24_tag.c:1524
+#: ../src/id3v24_tag.c:1584
 #, c-format
 msgid "Cannot save tag of file '%s'"
 msgstr "No se puede guardar etiqueta del archivo «%s»"
 
-#: ../src/id3v24_tag.c:1535
+#: ../src/id3v24_tag.c:1595
 #, c-format
 msgid "Size error while saving tag of '%s'"
 msgstr "Error de tamaño al guardar etiqueta de «%s»"
@@ -2702,54 +2693,54 @@ msgstr "Error de tamaño al guardar etiqueta de «%s»"
 msgid "Log"
 msgstr "Registro"
 
-#: ../src/misc.c:719
+#: ../src/misc.c:716
 msgid "You must type a program name"
 msgstr "Debe introducir un nombre de programa"
 
-#: ../src/misc.c:720
+#: ../src/misc.c:717
 msgid "Program Name Error"
 msgstr "Error del nombre del programa"
 
-#: ../src/misc.c:799
+#: ../src/misc.c:796
 #, c-format
 msgid "Executed command: %s"
 msgstr "Comando ejecutado: %s"
 
-#: ../src/misc.c:806
+#: ../src/misc.c:803
 #, c-format
 msgid "Failed to launch program: %s"
 msgstr "Falló al lanzar el programa: %s"
 
-#: ../src/misc.c:823
+#: ../src/misc.c:820
 msgid "Select File"
 msgstr "Seleccionar archivo"
 
-#: ../src/misc.c:829
+#: ../src/misc.c:826
 msgid "Select Directory"
 msgstr "Seleccionar una carpeta"
 
-#: ../src/misc.c:1141
+#: ../src/misc.c:1138
 msgid "Generate Playlist"
 msgstr "Generar lista de reproducción"
 
-#: ../src/misc.c:1165
+#: ../src/misc.c:1162
 msgid "M3U Playlist Name"
 msgstr "Nombre de la lista de reproducción M3U"
 
-#: ../src/misc.c:1180
+#: ../src/misc.c:1177
 msgid "Use directory name"
 msgstr "Usar nombre de la carpeta"
 
 #. Playlist options
-#: ../src/misc.c:1197
+#: ../src/misc.c:1194
 msgid "Playlist Options"
 msgstr "Opciones de la lista de reproducción"
 
-#: ../src/misc.c:1203
+#: ../src/misc.c:1200
 msgid "Include only the selected files"
 msgstr "Incluir sólo los archivos seleccionados"
 
-#: ../src/misc.c:1206
+#: ../src/misc.c:1203
 msgid ""
 "If activated, only the selected files will be written in the playlist file. "
 "Else, all the files will be written."
@@ -2758,30 +2749,30 @@ msgstr ""
 "archivo de la lista de reproducción. De lo contrario, se escribirán todos "
 "los archivos."
 
-#: ../src/misc.c:1209
+#: ../src/misc.c:1206
 msgid "Use full path for files in playlist"
 msgstr "Usar ruta completa para los archivos en la lista de reproducción"
 
-#: ../src/misc.c:1212
+#: ../src/misc.c:1209
 msgid "Use relative path for files in playlist"
 msgstr "Usar ruta relativa para los archivos en la lista de reproducción"
 
 #. Create playlist in parent directory
-#: ../src/misc.c:1218
+#: ../src/misc.c:1215
 msgid "Create playlist in the parent directory"
 msgstr "Crear lista de reproducción en la carpeta padre"
 
-#: ../src/misc.c:1221
+#: ../src/misc.c:1218
 msgid "If activated, the playlist will be created in the parent directory."
 msgstr ""
 "Si está activado, la lista de reproducción se creará en la carpeta padre."
 
 #. DOS Separator
-#: ../src/misc.c:1225
+#: ../src/misc.c:1222
 msgid "Use DOS directory separator"
 msgstr "Usar el separador de carpetas de DOS"
 
-#: ../src/misc.c:1231
+#: ../src/misc.c:1228
 msgid ""
 "This option replaces the UNIX directory separator '/' into DOS separator "
 "'\\'."
@@ -2789,49 +2780,49 @@ msgstr ""
 "Esta opción reemplaza el separador de carpetas UNIX «/» por el separador DOS "
 "«\\»."
 
-#: ../src/misc.c:1240
+#: ../src/misc.c:1237
 msgid "Playlist Content"
 msgstr "Contenido de la lista de reproducción"
 
-#: ../src/misc.c:1246
+#: ../src/misc.c:1243
 msgid "Write only list of files"
 msgstr "Escribir sólo la lista de archivos"
 
-#: ../src/misc.c:1250
+#: ../src/misc.c:1247
 msgid "Write info using filename"
 msgstr "Escribir información usando el nombre de archivo"
 
-#: ../src/misc.c:1253
+#: ../src/misc.c:1250
 msgid "Write info using:"
 msgstr "Escribir información usando:"
 
-#: ../src/misc.c:1467
+#: ../src/misc.c:1464
 #, c-format
 msgid "Cannot write playlist file '%s'"
 msgstr "No se puede escribir el archivo de lista de reproducción «%s»"
 
-#: ../src/misc.c:1471
+#: ../src/misc.c:1468
 msgid "Playlist File Error"
 msgstr "Error del archivo de lista de reproducción"
 
-#: ../src/misc.c:1479
+#: ../src/misc.c:1476
 #, c-format
 msgid "Written playlist file '%s'"
 msgstr "Se ha escrito el archivo de la lista «%s»"
 
-#: ../src/misc.c:1543 ../src/scan.c:2903 ../src/scan.c:2965
+#: ../src/misc.c:1540 ../src/scan_dialog.c:2747 ../src/scan_dialog.c:2809
 msgid "Invalid scanner mask"
 msgstr "Máscara del analizador no válida"
 
-#: ../src/misc.c:1907
+#: ../src/misc.c:1904
 msgid "CD"
 msgstr "CD"
 
-#: ../src/misc.c:1929
+#: ../src/misc.c:1926
 msgid "Find Files"
 msgstr "Buscar archivos"
 
-#: ../src/misc.c:1961
+#: ../src/misc.c:1958
 msgid ""
 "Type the word to search into files. Or type nothing to display all files."
 msgstr ""
@@ -2839,13 +2830,13 @@ msgstr ""
 "mostrar todos los archivos."
 
 #. Where...
-#: ../src/misc.c:1967
+#: ../src/misc.c:1964
 msgid "In:"
 msgstr "En:"
 
 #. Translators: This option is for the previous 'in' option. For instance,
 #. * translate this as "Search" "In:" "the Filename".
-#: ../src/misc.c:1972
+#: ../src/misc.c:1969
 msgid "the Filename"
 msgstr "el nombre del archivo"
 
@@ -2854,83 +2845,83 @@ msgstr "el nombre del archivo"
 #. * Note: label changed to "the Tag" (to be the only one) to fix a Hungarian
 #. * grammatical problem (which uses one word to say "in the tag" like here)
 #.
-#: ../src/misc.c:1978
+#: ../src/misc.c:1975
 msgid "the Tag"
 msgstr "la etiqueta"
 
 #. Property of the search
-#: ../src/misc.c:1989 ../src/prefs.c:335
+#: ../src/misc.c:1986 ../src/prefs.c:335
 msgid "Case sensitive"
 msgstr "Sensible a capitalización"
 
-#: ../src/misc.c:2216
+#: ../src/misc.c:2213
 msgid "Ready to search…"
 msgstr "Listo para buscar…"
 
-#: ../src/misc.c:2436
+#: ../src/misc.c:2433
 #, c-format
 msgid "Found one file"
 msgid_plural "Found %d files"
 msgstr[0] "Se encontró un archivo"
 msgstr[1] "Se encontraron %d archivos"
 
-#: ../src/misc.c:2721
+#: ../src/misc.c:2718
 msgid "Load Filenames From a Text File"
 msgstr "Cargar nombres de archivos desde un archivo de texto"
 
-#: ../src/misc.c:2750
+#: ../src/misc.c:2747
 msgid "File:"
 msgstr "Archivo:"
 
 #. Button 'load'
 #. the signal attached to this button, to load the file, is placed after the LoadFileContentList definition
-#: ../src/misc.c:2769
+#: ../src/misc.c:2766
 msgid " Load "
 msgstr " Cargar "
 
-#: ../src/misc.c:2787
+#: ../src/misc.c:2784
 msgid "Content of Text File"
 msgstr "Contenido del archivo de texto"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2808 ../src/misc.c:2903
+#: ../src/misc.c:2805 ../src/misc.c:2900
 msgid "Insert a blank line before the selected line"
 msgstr "Insertar un línea en blanco antes de la línea seleccionada"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2817 ../src/misc.c:2912
+#: ../src/misc.c:2814 ../src/misc.c:2909
 msgid "Delete the selected line"
 msgstr "Eliminar la línea seleccionada"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2826 ../src/misc.c:2921 ../src/misc.c:3407
+#: ../src/misc.c:2823 ../src/misc.c:2918 ../src/misc.c:3399
 msgid "Delete all blank lines"
 msgstr "Eliminar todas las líneas en blanco"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2838 ../src/misc.c:2933
+#: ../src/misc.c:2835 ../src/misc.c:2930
 msgid "Move up the selected line"
 msgstr "Subir la línea seleccionada"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2847 ../src/misc.c:2942
+#: ../src/misc.c:2844 ../src/misc.c:2939
 msgid "Move down the selected line"
 msgstr "Bajar la línea seleccionada"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2859 ../src/misc.c:2954 ../src/misc.c:3431
+#: ../src/misc.c:2856 ../src/misc.c:2951 ../src/misc.c:3423
 msgid "Reload"
 msgstr "Recargar"
 
-#: ../src/misc.c:2881
+#: ../src/misc.c:2878
 msgid "List of Files"
 msgstr "Lista de archivos"
 
-#: ../src/misc.c:2976
+#: ../src/misc.c:2973
 msgid "Selected line:"
 msgstr "Línea seleccionada:"
 
-#: ../src/misc.c:2994
+#: ../src/misc.c:2991
 msgid ""
 "When activating this option, after loading the filenames, the current "
 "selected scanner will be ran (the scanner window must be opened)."
@@ -2939,34 +2930,34 @@ msgstr ""
 "analizador seleccionado actual se ejecutará (la ventana del analizador debe "
 "estar abierta)."
 
-#: ../src/misc.c:3081
+#: ../src/misc.c:3078
 #, c-format
 msgid "Cannot retrieve file info (%s)"
 msgstr "No se puede recuperar la información del archivo (%s)"
 
-#: ../src/misc.c:3143
+#: ../src/misc.c:3141
 #, c-format
 msgid "Can't open file '%s' (%s)"
 msgstr "No se puede abrir el archivo «%s» (%s)"
 
-#: ../src/misc.c:3179
+#: ../src/misc.c:3170
 #, c-format
 msgid "Error reading file (%s)"
 msgstr "Error al leer el archivo (%s)"
 
-#: ../src/misc.c:3395
+#: ../src/misc.c:3387
 msgid "Insert a blank line"
 msgstr "Insertar una línea en blanco"
 
-#: ../src/misc.c:3401
+#: ../src/misc.c:3393
 msgid "Delete this line"
 msgstr "Eliminar esta línea"
 
-#: ../src/misc.c:3416
+#: ../src/misc.c:3408
 msgid "Move up this line"
 msgstr "Subir esta línea"
 
-#: ../src/misc.c:3422
+#: ../src/misc.c:3414
 msgid "Move down this line"
 msgstr "Bajar esta línea"
 
@@ -2976,26 +2967,21 @@ msgstr "Bajar esta línea"
 msgid "Profile:"
 msgstr "Perfil:"
 
-#: ../src/mp4_header.c:63 ../src/mp4_tag.c:65 ../src/mp4_tag.c:186
+#: ../src/mp4_header.cc:59 ../src/mp4_tag.cc:91 ../src/mp4_tag.cc:284
 msgid "MP4 format invalid"
 msgstr "Formato MP4 no válido"
 
-#: ../src/mp4_header.c:72 ../src/mp4_tag.c:74
-#, c-format
-msgid "File contains no audio track: '%s'"
-msgstr "El archivo no contiene ninguna pista de sonido: «%s»"
-
-#: ../src/mp4_header.c:82
+#: ../src/mp4_header.cc:69
 #, c-format
 msgid "Error reading properties from file: '%s'"
 msgstr "Error al leer las propiedades del archivo: «%s»"
 
-#: ../src/mp4_header.c:132 ../src/mpeg_header.c:204
+#: ../src/mp4_header.cc:130 ../src/mpeg_header.c:204
 #, c-format
 msgid "~%d kb/s"
 msgstr "~%d kb/s"
 
-#: ../src/mp4_tag.c:85 ../src/mp4_tag.c:194
+#: ../src/mp4_tag.cc:101 ../src/mp4_tag.cc:293
 #, c-format
 msgid "Error reading tags from file: '%s'"
 msgstr "Error al leer las etiquetas del archivo: «%s»"
@@ -3071,184 +3057,184 @@ msgstr ""
 msgid "Error: Failed to open file: '%s' as Vorbis (%s)."
 msgstr "Error: falló al abrir el archivo: «%s» como vorbis (%s)."
 
-#: ../src/ogg_tag.c:712 ../src/ogg_tag.c:887
+#: ../src/ogg_tag.c:706 ../src/ogg_tag.c:881
 #, c-format
 msgid "Warning: The Ogg Vorbis file '%s' contains an ID3v2 tag."
 msgstr "Advertencia: el archivo Ogg Vorbis «%s» contiene una etiqueta ID3v2."
 
-#: ../src/ogg_tag.c:1035 ../src/picture.c:1257
+#: ../src/ogg_tag.c:1030 ../src/picture.c:1082
 #, c-format
 msgid "Error with 'loader_write': %s"
 msgstr "Error con «loader_write»: %s"
 
-#: ../src/ogg_tag.c:1050 ../src/picture.c:1180
+#: ../src/ogg_tag.c:1045 ../src/picture.c:1005
 #, c-format
 msgid "Error with 'loader_close': %s"
 msgstr "Error con «loader_close»: %s"
 
-#: ../src/picture.c:104
+#: ../src/picture.c:244 ../src/picture.c:269
 #, c-format
-msgid "Image file not saved: %s"
-msgstr "No se guardó el archivo de imagen: %s"
+msgid "Image file not loaded: %s"
+msgstr "No se cargó el archivo de imagen: %s"
 
-#: ../src/picture.c:154
+#: ../src/picture.c:261
 #, c-format
 msgid "Cannot open file: '%s'"
 msgstr "No se puede abrir el archivo: «%s»"
 
-#: ../src/picture.c:158
+#: ../src/picture.c:265
 msgid "Image File Error"
 msgstr "Error en el archivo de imagen"
 
-#: ../src/picture.c:162 ../src/picture.c:424
-#, c-format
-msgid "Image file not loaded: %s"
-msgstr "No se cargó el archivo de imagen: %s"
-
-#: ../src/picture.c:446
+#: ../src/picture.c:276
 msgid "Image file loaded"
 msgstr "Archivo de imagen cargado"
 
-#: ../src/picture.c:504
+#: ../src/picture.c:334
 msgid "Add Images"
 msgstr "Añadir imágenes"
 
-#: ../src/picture.c:514 ../src/picture.c:874
+#: ../src/picture.c:344 ../src/picture.c:701
 msgid "All Files"
 msgstr "Todos los archivos"
 
-#: ../src/picture.c:520 ../src/picture.c:880
+#: ../src/picture.c:350 ../src/picture.c:707
 msgid "PNG and JPEG"
 msgstr "PNG y JPEG"
 
-#: ../src/picture.c:651
+#: ../src/picture.c:477
 #, c-format
 msgid "Image Properties %d/%d"
 msgstr "Propiedades de la imagen %d/%d"
 
-#: ../src/picture.c:675
+#: ../src/picture.c:503
 msgid "Image Type"
 msgstr "Tipo de imagen"
 
 #. Description of the picture
-#: ../src/picture.c:734
+#: ../src/picture.c:561
 msgid "Image Description:"
 msgstr "Descripción de la imagen:"
 
-#: ../src/picture.c:861
+#: ../src/picture.c:688
 #, c-format
 msgid "Save Image %d/%d"
 msgstr "Guardar la imagen %d/%d"
 
-#: ../src/picture.c:1021
+#: ../src/picture.c:763
+#, c-format
+msgid "Image file not saved: %s"
+msgstr "No se guardó el archivo de imagen: %s"
+
+#: ../src/picture.c:846
 msgid "JPEG image"
 msgstr "Imagen JPEG"
 
-#: ../src/picture.c:1023
+#: ../src/picture.c:848
 msgid "PNG image"
 msgstr "Imagen PNG"
 
-#: ../src/picture.c:1025
+#: ../src/picture.c:850
 msgid "GIF image"
 msgstr "Imagen GIF"
 
-#: ../src/picture.c:1027
+#: ../src/picture.c:852
 msgid "Unknown image"
 msgstr "Imagen desconocida"
 
-#: ../src/picture.c:1039
+#: ../src/picture.c:864
 msgid "32x32 pixel PNG file icon"
 msgstr "Icono de archivo PNG de 32x32 píxeles"
 
-#: ../src/picture.c:1041
+#: ../src/picture.c:866
 msgid "Other file icon"
 msgstr "Otro icono de archivo"
 
-#: ../src/picture.c:1043
+#: ../src/picture.c:868
 msgid "Cover (front)"
 msgstr "Carátula (frontal)"
 
-#: ../src/picture.c:1045
+#: ../src/picture.c:870
 msgid "Cover (back)"
 msgstr "Carátula (trasera)"
 
-#: ../src/picture.c:1047
+#: ../src/picture.c:872
 msgid "Leaflet page"
 msgstr "Página del folleto"
 
-#: ../src/picture.c:1049
+#: ../src/picture.c:874
 msgid "Media (e.g. label side of CD)"
 msgstr "Medios (ej. etiqueta lateral del CD)"
 
-#: ../src/picture.c:1051
+#: ../src/picture.c:876
 msgid "Lead artist/lead performer/soloist"
 msgstr "Artista líder/intérprete líder/solista"
 
-#: ../src/picture.c:1053
+#: ../src/picture.c:878
 msgid "Artist/performer"
 msgstr "Artista/intérprete"
 
-#: ../src/picture.c:1055
+#: ../src/picture.c:880
 msgid "Conductor"
 msgstr "Director"
 
-#: ../src/picture.c:1057
+#: ../src/picture.c:882
 msgid "Band/Orchestra"
 msgstr "Banda/Orquesta"
 
-#: ../src/picture.c:1061
+#: ../src/picture.c:886
 msgid "Lyricist/text writer"
 msgstr "Escritor de las letras/texto"
 
-#: ../src/picture.c:1063
+#: ../src/picture.c:888
 msgid "Recording location"
 msgstr "Lugar de grabación"
 
-#: ../src/picture.c:1065
+#: ../src/picture.c:890
 msgid "During recording"
 msgstr "Durante la grabación"
 
-#: ../src/picture.c:1067
+#: ../src/picture.c:892
 msgid "During performance"
 msgstr "Durante la ejecución"
 
-#: ../src/picture.c:1069
+#: ../src/picture.c:894
 msgid "Movie/video screen capture"
 msgstr "Captura de pantalla de la película/vídeo"
 
-#: ../src/picture.c:1071
+#: ../src/picture.c:896
 msgid "A bright colored fish"
 msgstr "Un pez brillante coloreado"
 
-#: ../src/picture.c:1073
+#: ../src/picture.c:898
 msgid "Illustration"
 msgstr "Ilustración"
 
-#: ../src/picture.c:1075
+#: ../src/picture.c:900
 msgid "Band/Artist logotype"
 msgstr "Logotipo de banda/artista"
 
-#: ../src/picture.c:1077
+#: ../src/picture.c:902
 msgid "Publisher/studio logotype"
 msgstr "Logotipo del editor/estudio"
 
-#: ../src/picture.c:1081
+#: ../src/picture.c:906
 msgid "Unknown image type"
 msgstr "Tipo de imagen desconocido"
 
-#: ../src/picture.c:1111 ../src/picture.c:1122
+#: ../src/picture.c:936 ../src/picture.c:947
 msgid "pixels"
 msgstr "píxeles"
 
-#: ../src/picture.c:1112 ../src/picture.c:1123
+#: ../src/picture.c:937 ../src/picture.c:948
 msgid "Type"
 msgstr "Tipo"
 
-#: ../src/picture.c:1124
+#: ../src/picture.c:949
 msgid "Description"
 msgstr "Descripción"
 
-#: ../src/picture.c:1240
+#: ../src/picture.c:1065
 msgid ""
 "Cannot display the image because not enough data has been read to determine "
 "how to create the image buffer."
@@ -3256,18 +3242,18 @@ msgstr ""
 "No se puede mostrar la imagen, debido a que no se han leído suficientes "
 "datos para determinar cómo crear el búfer de la imagen."
 
-#: ../src/picture.c:1247
+#: ../src/picture.c:1072
 msgid "Cannot display the image"
 msgstr "No se puede mostrar la imagen"
 
-#: ../src/picture.c:1249
+#: ../src/picture.c:1074
 msgid ""
 "Not enough data has been read to determine how to create the image buffer."
 msgstr ""
 "No se han leído suficientes datos para determinar cómo crear el búfer de la "
 "imagen."
 
-#: ../src/picture.c:1251
+#: ../src/picture.c:1076
 msgid "Load Image File"
 msgstr "Cargar archivo de imagen"
 
@@ -4122,7 +4108,7 @@ msgstr "Campos"
 #. Overwrite text into tag fields
 #: ../src/prefs.c:1078
 msgid "Overwrite fields when scanning tags"
-msgstr "Sobreescribir campos al analizar etiquetas"
+msgstr "Sobrescribir campos al analizar etiquetas"
 
 #: ../src/prefs.c:1081
 msgid ""
@@ -4249,7 +4235,6 @@ msgid "User Password:"
 msgstr "Contraseña de usuario:"
 
 #: ../src/prefs.c:1338
-#| msgid "Password of user for the the proxy server."
 msgid "Password of user for the proxy server."
 msgstr "Contraseña de usuario para el servidor proxy."
 
@@ -4370,82 +4355,82 @@ msgstr "No se puede encontrar el reproductor del archivo de sonido «%s»"
 msgid "Audio Player Error"
 msgstr "Error del reproductor de audio"
 
-#: ../src/scan.c:180
+#: ../src/scan_dialog.c:182
 msgid "Fill Tag"
 msgstr "Rellenar etiqueta"
 
-#: ../src/scan.c:354
+#: ../src/scan_dialog.c:356
 #, c-format
 msgid "Cannot calculate CRC value of file (%s)"
 msgstr "No se puede calcular el valor CRC del archivo (%s)"
 
-#: ../src/scan.c:369
+#: ../src/scan_dialog.c:371
 msgid "Tag successfully scanned"
 msgstr "Etiqueta analizada con éxito"
 
-#: ../src/scan.c:371
+#: ../src/scan_dialog.c:373
 #, c-format
 msgid "Tag successfully scanned: %s"
 msgstr "Etiqueta analizada con éxito: %s"
 
-#: ../src/scan.c:412
+#: ../src/scan_dialog.c:414
 #, c-format
 msgid "Tag scanner: strange… the extension '%s' was not found in filename '%s'"
 msgstr ""
 "Etiqueta del analizador: extraño… la extensión «%s» no se encuentra en el "
 "nombre de archivo «%s»"
 
-#: ../src/scan.c:494 ../src/scan.c:523
+#: ../src/scan_dialog.c:496 ../src/scan_dialog.c:525
 #, c-format
 msgid "Scan Error: can't find separator '%s' within '%s'"
 msgstr "Error al analizar: no se puede encontrar el separador «%s» entre «%s»"
 
-#: ../src/scan.c:710
+#: ../src/scan_dialog.c:712
 msgid "New filename successfully scanned"
 msgstr "Nombre de archivo nuevo analizado con éxito"
 
-#: ../src/scan.c:713
+#: ../src/scan_dialog.c:715
 #, c-format
 msgid "New filename successfully scanned: %s"
 msgstr "Nombre de archivo nuevo analizado con éxito: %s"
 
-#: ../src/scan.c:1822
+#: ../src/scan_dialog.c:1632
 #, c-format
 msgid "Error while processing fields: %s"
 msgstr "Error al procesar campos: %s"
 
 #. The window
-#: ../src/scan.c:1992
+#: ../src/scan_dialog.c:1802
 msgid "Tag and Filename Scan"
 msgstr "Análisis de etiquetas y nombres de archivo"
 
 #. TODO: Set related action to match AM_SCAN_FILES.
-#: ../src/scan.c:2001
+#: ../src/scan_dialog.c:1811
 msgid "Scan Files"
 msgstr "Analizar archivos"
 
 #. Option Menu
-#: ../src/scan.c:2029
+#: ../src/scan_dialog.c:1839
 msgid "Scanner:"
 msgstr "Analizador:"
 
-#: ../src/scan.c:2050
+#: ../src/scan_dialog.c:1860
 msgid "Select the type of scanner to use"
 msgstr "Seleccionar el tipo de analizador que usar"
 
-#: ../src/scan.c:2059
+#: ../src/scan_dialog.c:1869
 msgid "Scanner Preferences"
 msgstr "Preferencias del analizador"
 
-#: ../src/scan.c:2068
+#: ../src/scan_dialog.c:1878
 msgid "Show / Hide Masks Editor"
 msgstr "Mostrar u ocultar editor de máscaras"
 
-#: ../src/scan.c:2078
+#: ../src/scan_dialog.c:1888
 msgid "Show / Hide Legend"
 msgstr "Mostrar u ocultar leyenda"
 
-#: ../src/scan.c:2108
+#: ../src/scan_dialog.c:1918
 msgid ""
 "Select or type in a mask using codes (see Legend) to parse filename and "
 "path. Used to fill in tag fields"
@@ -4455,15 +4440,15 @@ msgstr ""
 "etiquetas."
 
 #. Preview label
-#: ../src/scan.c:2132
+#: ../src/scan_dialog.c:1942
 msgid "Fill tag preview"
 msgstr "Rellenar vista previa de la etiqueta"
 
-#: ../src/scan.c:2162
+#: ../src/scan_dialog.c:1972
 msgid "Prefix mask with current path"
 msgstr "Máscara del prefijo con la ruta actual"
 
-#: ../src/scan.c:2176
+#: ../src/scan_dialog.c:1986
 msgid ""
 "Select or type in a mask using codes (see Legend) to parse tag fields. Used "
 "to rename the file.\n"
@@ -4476,15 +4461,15 @@ msgstr ""
 "absoluta, de lo contrario es relativa a la ruta anterior."
 
 #. Preview label
-#: ../src/scan.c:2201
+#: ../src/scan_dialog.c:2011
 msgid "Rename file preview"
 msgstr "Renombrar vista previa del archivo"
 
-#: ../src/scan.c:2220
+#: ../src/scan_dialog.c:2030
 msgid "Select fields:"
 msgstr "Seleccionar campos:"
 
-#: ../src/scan.c:2223
+#: ../src/scan_dialog.c:2033
 msgid ""
 "The buttons on the right represent the fields which can be processed. Select "
 "those which interest you"
@@ -4493,134 +4478,134 @@ msgstr ""
 "Seleccione aquellos que le interesen"
 
 #. Advice for Translators: set the first letter of filename translated
-#: ../src/scan.c:2227
+#: ../src/scan_dialog.c:2037
 msgid "F"
 msgstr "F"
 
-#: ../src/scan.c:2229
+#: ../src/scan_dialog.c:2039
 msgid "Process filename field"
 msgstr "Procesar campo del nombre de archivo"
 
 #. Advice for Translators: set the first letter of title translated
-#: ../src/scan.c:2231
+#: ../src/scan_dialog.c:2041
 msgid "T"
 msgstr "T"
 
-#: ../src/scan.c:2232
+#: ../src/scan_dialog.c:2042
 msgid "Process title field"
 msgstr "Procesar campo de título"
 
 #. Advice for Translators: set the first letter of artist translated
-#: ../src/scan.c:2234
+#: ../src/scan_dialog.c:2044
 msgid "Ar"
 msgstr "Ar"
 
-#: ../src/scan.c:2235
+#: ../src/scan_dialog.c:2045
 msgid "Process file artist field"
 msgstr "Procesar campo de artista de archivo"
 
 #. Advice for Translators: set the first letter of album artist translated
-#: ../src/scan.c:2237
+#: ../src/scan_dialog.c:2047
 msgid "AA"
 msgstr "AA"
 
-#: ../src/scan.c:2238
+#: ../src/scan_dialog.c:2048
 msgid "Process album artist field"
 msgstr "Procesar campo de artista del álbum"
 
 #. Advice for Translators: set the first letter of album translated
-#: ../src/scan.c:2240
+#: ../src/scan_dialog.c:2050
 msgid "Al"
 msgstr "Al"
 
-#: ../src/scan.c:2241
+#: ../src/scan_dialog.c:2051
 msgid "Process album field"
 msgstr "Procesar campo de álbum"
 
 #. Advice for Translators: set the first letter of genre translated
-#: ../src/scan.c:2243
+#: ../src/scan_dialog.c:2053
 msgid "G"
 msgstr "G"
 
-#: ../src/scan.c:2244
+#: ../src/scan_dialog.c:2054
 msgid "Process genre field"
 msgstr "Procesar campo de género"
 
 #. Advice for Translators: set the first letter of comment translated
-#: ../src/scan.c:2246
+#: ../src/scan_dialog.c:2056
 msgid "Cm"
 msgstr "Cm"
 
-#: ../src/scan.c:2247
+#: ../src/scan_dialog.c:2057
 msgid "Process comment field"
 msgstr "Procesar campo de comentario"
 
 #. Advice for Translators: set the first letter of composer translated
-#: ../src/scan.c:2249
+#: ../src/scan_dialog.c:2059
 msgid "Cp"
 msgstr "Cp"
 
-#: ../src/scan.c:2250
+#: ../src/scan_dialog.c:2060
 msgid "Process composer field"
 msgstr "Procesar campo del compositor"
 
 #. Advice for Translators: set the first letter of orig artist translated
-#: ../src/scan.c:2252
+#: ../src/scan_dialog.c:2062
 msgid "O"
 msgstr "O"
 
-#: ../src/scan.c:2253
+#: ../src/scan_dialog.c:2063
 msgid "Process original artist field"
 msgstr "Procesar campo de artista original"
 
 #. Advice for Translators: set the first letter of copyright translated
-#: ../src/scan.c:2255
+#: ../src/scan_dialog.c:2065
 msgid "Cr"
 msgstr "Cr"
 
-#: ../src/scan.c:2256
+#: ../src/scan_dialog.c:2066
 msgid "Process copyright field"
 msgstr "Procesar campo de copyright"
 
 #. Advice for Translators: set the first letter of URL translated
-#: ../src/scan.c:2258
+#: ../src/scan_dialog.c:2068
 msgid "U"
 msgstr "U"
 
-#: ../src/scan.c:2259
+#: ../src/scan_dialog.c:2069
 msgid "Process URL field"
 msgstr "Procesar campo de URL"
 
 #. Advice for Translators: set the first letter of encoder name translated
-#: ../src/scan.c:2261
+#: ../src/scan_dialog.c:2071
 msgid "E"
 msgstr "E"
 
-#: ../src/scan.c:2262
+#: ../src/scan_dialog.c:2072
 msgid "Process encoder name field"
 msgstr "Procesar campo de nombre de codificador"
 
-#: ../src/scan.c:2306
+#: ../src/scan_dialog.c:2116
 msgid "Invert selection"
 msgstr "Invertir la selección"
 
-#: ../src/scan.c:2313
+#: ../src/scan_dialog.c:2123
 msgid "Select/Unselect all"
 msgstr "Seleccionar/deseleccionar todo"
 
-#: ../src/scan.c:2328
+#: ../src/scan_dialog.c:2138
 msgid "Convert:"
 msgstr "Convertir:"
 
-#: ../src/scan.c:2330
+#: ../src/scan_dialog.c:2140
 msgid "to: "
 msgstr "a:"
 
-#: ../src/scan.c:2337
+#: ../src/scan_dialog.c:2147
 msgid "Do not convert"
 msgstr "No convertir"
 
-#: ../src/scan.c:2356
+#: ../src/scan_dialog.c:2177
 msgid ""
 "The underscore character or the string '%20' are replaced by one space. "
 "Example, before: 'Text%20In%20An_Entry', after: 'Text In An Entry'."
@@ -4628,7 +4613,7 @@ msgstr ""
 "El carácter de subrayado o la cadena «%20» se reemplazan por un espacio. "
 "Ejemplo, antes: «Texto%20En%20Una_Entrada», después: «Texto En Una Entrada»."
 
-#: ../src/scan.c:2359
+#: ../src/scan_dialog.c:2180
 msgid ""
 "The space character is replaced by one underscore character. Example, "
 "before: 'Text In An Entry', after: 'Text_In_An_Entry'."
@@ -4636,38 +4621,38 @@ msgstr ""
 "El carácter de espacio se reemplaza por un carácter de subrayado. Ejemplo, "
 "antes: «Texto En Una Entrada», después: «Texto_En_Una_Entrada»."
 
-#: ../src/scan.c:2362
+#: ../src/scan_dialog.c:2183
 msgid ""
 "Replace a string by another one. Note that the search is case sensitive."
 msgstr ""
 "Reemplazar una cadena por otra. Tenga en cuneta que la búsqueda es sensible "
 "a capitalización."
 
-#: ../src/scan.c:2369
+#: ../src/scan_dialog.c:2190
 msgid "Capitalize all"
 msgstr "Todo en mayúscula"
 
-#: ../src/scan.c:2371
+#: ../src/scan_dialog.c:2192
 msgid "Lowercase all"
 msgstr "Todo en minúscula"
 
-#: ../src/scan.c:2373
+#: ../src/scan_dialog.c:2194
 msgid "Capitalize first letter"
 msgstr "Primera letra en mayúscula"
 
-#: ../src/scan.c:2375
+#: ../src/scan_dialog.c:2196
 msgid "Capitalize the first letter of each word"
 msgstr "Primera letra de cada palabra en mayúscula"
 
-#: ../src/scan.c:2376
+#: ../src/scan_dialog.c:2197
 msgid "Detect Roman numerals"
 msgstr "Detectar números romanos"
 
-#: ../src/scan.c:2378
+#: ../src/scan_dialog.c:2199
 msgid "Do not change capitalization"
 msgstr "No cambiar la capitalización"
 
-#: ../src/scan.c:2400
+#: ../src/scan_dialog.c:2236
 msgid ""
 "Convert all words in all fields to upper case. Example, before: 'Text IN AN "
 "entry', after: 'TEXT IN AN ENTRY'."
@@ -4675,7 +4660,7 @@ msgstr ""
 "Convertir todas las palabras en todos los campos a mayúsculas. Ejemplo, "
 "antes: «Texto EN UNA entrada», después: «TEXTO EN UNA ENTRADA»."
 
-#: ../src/scan.c:2403
+#: ../src/scan_dialog.c:2239
 msgid ""
 "Convert all words in all fields to lower case. Example, before: 'TEXT IN an "
 "entry', after: 'text in an entry'."
@@ -4683,7 +4668,7 @@ msgstr ""
 "Convertir todas las palabras en todos los campos a minúsculas. Ejemplo, "
 "antes: «TEXTO EN una entrada», después: «texto en una entrada»."
 
-#: ../src/scan.c:2406
+#: ../src/scan_dialog.c:2242
 msgid ""
 "Convert the initial of the first word in all fields to upper case. Example, "
 "before: 'text IN An ENTRY', after: 'Text in an entry'."
@@ -4691,7 +4676,7 @@ msgstr ""
 "Convertir la inicial de la primera palabra en todos los campos a mayúsculas. "
 "Ejemplo, antes: «texto EN Una ENTRADA», después: «Texto en una entrada»."
 
-#: ../src/scan.c:2409
+#: ../src/scan_dialog.c:2245
 msgid ""
 "Convert the initial of each word in all fields to upper case. Example, "
 "before: 'Text in an ENTRY', after: 'Text In An Entry'."
@@ -4699,7 +4684,7 @@ msgstr ""
 "Convertir la inicial de cada palabra en todos los campos a mayúsculas. "
 "Ejemplo, antes: «Texto en una ENTRADA», después: «Texto En Una Entrada»."
 
-#: ../src/scan.c:2412
+#: ../src/scan_dialog.c:2248
 msgid ""
 "Force to convert to upper case the Roman numerals. Example, before: 'ix. "
 "text in an entry', after: 'IX. Text In An Entry'."
@@ -4707,19 +4692,19 @@ msgstr ""
 "Forzar a convertir a mayúsculas los números romanos. Ejemplo, antes: «ix. "
 "texto en una entrada», después: «IX. Texto En Una Entrada»."
 
-#: ../src/scan.c:2420
+#: ../src/scan_dialog.c:2256
 msgid "Insert a space before uppercase letters"
 msgstr "Insertar un espacio antes de las letras en mayúscula"
 
-#: ../src/scan.c:2422
+#: ../src/scan_dialog.c:2258
 msgid "Remove duplicate spaces and underscores"
 msgstr "Quitar espacios duplicados y subrayados"
 
-#: ../src/scan.c:2424
+#: ../src/scan_dialog.c:2260
 msgid "Do not change word separators"
 msgstr "No cambiar los separadores de palabra"
 
-#: ../src/scan.c:2438
+#: ../src/scan_dialog.c:2282
 msgid ""
 "All spaces between words are removed. Example, before: 'Text In An Entry', "
 "after: 'TextInAnEntry'."
@@ -4727,7 +4712,7 @@ msgstr ""
 "Todos los espacios entre palabras se eliminan. Ejemplo, antes: «Texto En Una "
 "Entrada», después: «TextoEnUnaEntrada»."
 
-#: ../src/scan.c:2441
+#: ../src/scan_dialog.c:2285
 msgid ""
 "A space is inserted before each upper case letter. Example, before: "
 "'TextInAnEntry', after: 'Text In An Entry'."
@@ -4735,7 +4720,7 @@ msgstr ""
 "Se inserta un espacio antes de cada letra mayúscula. Ejemplo, antes: "
 "«TextoEnUnaEntrada», después: «Texto En Una Entrada»."
 
-#: ../src/scan.c:2444
+#: ../src/scan_dialog.c:2288
 msgid ""
 "Duplicate spaces and underscores are removed. Example, before: "
 "'Text__In__An   Entry', after: 'Text_In_An Entry'."
@@ -4746,141 +4731,141 @@ msgstr ""
 #.
 #. * Frame to display codes legend
 #.
-#: ../src/scan.c:2451
+#: ../src/scan_dialog.c:2295
 msgid "Legend"
 msgstr "Leyenda"
 
-#: ../src/scan.c:2457
+#: ../src/scan_dialog.c:2301
 #, c-format
 msgid "%a: artist"
 msgstr "%a: artista"
 
-#: ../src/scan.c:2460
+#: ../src/scan_dialog.c:2304
 msgid "%z: album artist"
 msgstr "%z: artista del álbum"
 
-#: ../src/scan.c:2463
+#: ../src/scan_dialog.c:2307
 msgid "%b: album"
 msgstr "%b: álbum"
 
-#: ../src/scan.c:2466
+#: ../src/scan_dialog.c:2310
 #, c-format
 msgid "%c: comment"
 msgstr "%c: comentario"
 
-#: ../src/scan.c:2469
+#: ../src/scan_dialog.c:2313
 #, c-format
 msgid "%p: composer"
 msgstr "%p: compositor"
 
-#: ../src/scan.c:2472
+#: ../src/scan_dialog.c:2316
 msgid "%r: copyright"
 msgstr "%r: copyright"
 
-#: ../src/scan.c:2475
+#: ../src/scan_dialog.c:2319
 #, c-format
 msgid "%d: disc number"
 msgstr "%d: número de disco"
 
-#: ../src/scan.c:2478
+#: ../src/scan_dialog.c:2322
 #, c-format
 msgid "%e: encoded by"
 msgstr "%e: codificado por"
 
-#: ../src/scan.c:2481
+#: ../src/scan_dialog.c:2325
 #, c-format
 msgid "%g: genre"
 msgstr "%g: género"
 
-#: ../src/scan.c:2484
+#: ../src/scan_dialog.c:2328
 #, c-format
 msgid "%i: ignored"
 msgstr "%i: ignorado"
 
-#: ../src/scan.c:2487
+#: ../src/scan_dialog.c:2331
 msgid "%l: number of tracks"
 msgstr "%l: número de pistas"
 
-#: ../src/scan.c:2490
+#: ../src/scan_dialog.c:2334
 #, c-format
 msgid "%o: orig. artist"
 msgstr "%o: artista orig."
 
-#: ../src/scan.c:2493
+#: ../src/scan_dialog.c:2337
 #, c-format
 msgid "%n: track"
 msgstr "%n: pista"
 
-#: ../src/scan.c:2496
+#: ../src/scan_dialog.c:2340
 msgid "%t: title"
 msgstr "%t: título"
 
-#: ../src/scan.c:2499
+#: ../src/scan_dialog.c:2343
 #, c-format
 msgid "%u: URL"
 msgstr "%u: URL"
 
-#: ../src/scan.c:2502
+#: ../src/scan_dialog.c:2346
 #, c-format
 msgid "%x: number of discs"
 msgstr "%x: número de discos"
 
-#: ../src/scan.c:2505
+#: ../src/scan_dialog.c:2349
 msgid "%y: year"
 msgstr "%y: año"
 
 #.
 #. * Masks Editor
 #.
-#: ../src/scan.c:2512
+#: ../src/scan_dialog.c:2356
 msgid "Mask Editor"
 msgstr "Editor de máscara"
 
-#: ../src/scan.c:2566
+#: ../src/scan_dialog.c:2410
 msgid "Create New Mask"
 msgstr "Crear nueva máscara"
 
-#: ../src/scan.c:2576
+#: ../src/scan_dialog.c:2420
 msgid "Move Up this Mask"
 msgstr "Subir esta máscara"
 
-#: ../src/scan.c:2586
+#: ../src/scan_dialog.c:2430
 msgid "Move Down this Mask"
 msgstr "Bajar esta máscara"
 
-#: ../src/scan.c:2596
+#: ../src/scan_dialog.c:2440
 msgid "Duplicate Mask"
 msgstr "Duplicar máscara"
 
-#: ../src/scan.c:2606
+#: ../src/scan_dialog.c:2450
 msgid "Add Default Masks"
 msgstr "Añadir máscaras predeterminadas"
 
-#: ../src/scan.c:2616
+#: ../src/scan_dialog.c:2460
 msgid "Remove Mask"
 msgstr "Eliminar máscara"
 
-#: ../src/scan.c:2626
+#: ../src/scan_dialog.c:2470
 msgid "Save Masks"
 msgstr "Guardar máscaras"
 
-#: ../src/scan.c:3206
+#: ../src/scan_dialog.c:3050
 msgid "New_mask"
 msgstr "Máscara_nueva"
 
-#: ../src/scan.c:3245
+#: ../src/scan_dialog.c:3089
 msgid "Copy: No row selected"
 msgstr "Copiar: ninguna fila seleccionada"
 
-#: ../src/scan.c:3338
+#: ../src/scan_dialog.c:3182
 msgid "Remove: No row selected"
 msgstr "Quitar: ninguna fila seleccionada"
 
-#: ../src/scan.c:3385
+#: ../src/scan_dialog.c:3229
 msgid "Move Up: No row selected"
 msgstr "Subir: ninguna fila seleccionada"
 
-#: ../src/scan.c:3429
+#: ../src/scan_dialog.c:3273
 msgid "Move Down: No row selected"
 msgstr "Bajar: ninguna fila seleccionada"
 
@@ -4948,6 +4933,36 @@ msgstr "Falló al migrar el archivo de configuración «%s»"
 msgid "Error: Cannot create directory '%s' (%s)"
 msgstr "Error: no se puede crear la carpeta «%s» (%s)"
 
+#~ msgid "File contains no audio track: '%s'"
+#~ msgstr "El archivo no contiene ninguna pista de sonido: «%s»"
+
+#~ msgid ""
+#~ "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 (at your "
+#~ "option) any later version.\n"
+#~ "\n"
+#~ "This program is distributed in the hope that it will be useful, but "
+#~ "WITHOUT ANY WARRANTY; without even the implied warranty of "
+#~ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General "
+#~ "Public License for more details.\n"
+#~ "\n"
+#~ "You should have received a copy of the GNU General Public License along "
+#~ "with this program. If not, see <http://www.gnu.org/licenses/>."
+#~ msgstr ""
+#~ "Este programa es software libre; puede redistribuirlo y/o modificarlo "
+#~ "bajo los términos de la Licencia Pública General GNU como está publicada "
+#~ "por la Fundación de Software Libre; de la versión 2 de la licencia, o (a "
+#~ "su opción) cualquier versión posterior.\n"
+#~ "\n"
+#~ "Este programa se distribuye con la esperanza de que sea útil, pero SIN "
+#~ "NINGUNA GARANTÍA; incluso sin la garantía implícita de COMERCIALIZACIÓN o "
+#~ "CONVENIENCIA PARA UN PROPÓSITO EN PARTICULAR. Ver la Licencia Pública "
+#~ "General GNU para más detalles.\n"
+#~ "\n"
+#~ "Puede recibir una copia de la Licencia Pública General GNU junto con este "
+#~ "programa. Sino, ver <http://www.gnu.org/licenses/>."
+
 #~ msgid "The program '%s' cannot be found"
 #~ msgstr "No se puede encontrar el programa «%s»"
 
diff --git a/po/fr.po b/po/fr.po
index 9b977b0..6e0eb54 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -3,44 +3,49 @@
 # This file is distributed under the same license as the EasyTAG package.
 # Jérôme Couderc <j.couderc at ifrance.com>, 2000, 2001, 2002, 2004, 2005.
 # Jérôme Couderc <easytag at gmail.com>, 2005, 2006, 2007, 2008.
-# Alain Lojewski <allomervan at gmail.com>, 2012.
+# Alain Lojewski <allomervan at gmail.com>, 2012-2014.
 # Alexandre Franke <alexandre.franke at gmail.com>, 2014.
+# Guillaume Bernard <filorin at laposte.net>, 2014.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: EasyTAG 2.1.6\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
 "product=easytag&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2014-04-06 23:47+0000\n"
-"PO-Revision-Date: 2014-04-07 01:52+0200\n"
-"Last-Translator: Alexandre Franke <alexandre.franke at gmail.com>\n"
-"Language-Team: GNOME French Team <gnomefr at traduc.org>\n"
+"POT-Creation-Date: 2014-08-15 17:46+0000\n"
+"PO-Revision-Date: 2014-08-29 09:00+0200\n"
+"Last-Translator: Guillaume Bernard <filorin at laposte.net>\n"
+"Language-Team: français <gnomefr at traduc.org>\n"
 "Language: fr\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n>1;\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
 
 #: ../data/easytag.appdata.xml.in.h:1
 msgid ""
 "View and edit tags for MP3, MP2, MP4/AAC, FLAC, Ogg Opus, Ogg Speex, Ogg "
 "Vorbis, MusePack, Monkey's Audio and WavPack files."
-msgstr "Afficher et modifier les étiquettes pour les fichiers MP3, MP2, MP4/AAC, FLAC, Ogg Opus, Ogg Speex, Ogg "
-"Vorbis, MusePack, Monkey's Audio et WavPack."
+msgstr ""
+"Afficher et modifier les étiquettes pour les fichiers MP3, MP2, MP4/AAC, "
+"FLAC, Ogg Opus, Ogg Speex, Ogg Vorbis, MusePack, Monkey's Audio et WavPack."
 
 #: ../data/easytag.appdata.xml.in.h:2
 msgid ""
 "Look up albums in online databases, bulk edit tags, create playlists and "
 "rename a collection of files."
 msgstr ""
-"Rechercher les albums dans les bases de données en ligne, modifier les étiquettes en masse, créer des listes de lecture et renommer une collection de fichier."
+"Rechercher les albums dans les bases de données en ligne, modifier les "
+"étiquettes en masse, créer des listes de lecture et renommer une collection "
+"de fichier."
 
 #: ../data/easytag.appdata.xml.in.h:3
 msgid ""
 "A simple and nice GTK+ interface makes tagging easier under GNU/Linux and "
 "Windows."
 msgstr ""
-"Une interface simple et agréable en GTK+ qui rend l'étiquetage plus facile sous GNU/Linux et Windows."
+"Une interface simple et agréable en GTK+ qui rend l'étiquetage plus facile "
+"sous GNU/Linux et Windows."
 
 #: ../data/easytag.desktop.in.h:1
 msgid "Sound File Metadata Editor"
@@ -55,62 +60,51 @@ msgstr "Modifier les métadonnées des fichiers audio"
 msgid "mp3;tag;audio;"
 msgstr "mp3;étiquettes;audio;"
 
-#: ../src/about.c:89
-msgid ""
-"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 (at your option) "
-"any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful, but WITHOUT "
-"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
-"FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for "
-"more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License along with "
-"this program. If not, see <http://www.gnu.org/licenses/>."
-msgstr ""
-"Ce programme est un logiciel libre ; vous pouvez le redistribuer et/ou le "
-"modifier au titre des clauses de la Licence Publique Générale GNU, telle que "
-"publiée par la Free Software Foundation ; soit la version 2 de la Licence, "
-"ou (à votre discrétion) une version ultérieure quelconque.\n"
-"Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE "
-"GARANTIE ; sans même une garantie implicite de COMMERCIABILITÉ ou DE "
-"CONFORMITÉ À UNE UTILISATION PARTICULIÈRE. Voir la Licence Publique Générale "
-"GNU pour plus de détails.\n"
-"\n"
-"Vous devriez avoir reçu un exemplaire de la Licence Publique Générale GNU "
-"avec ce programme ; si ce n'est pas le cas, écrivez à la Free Software "
-"Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA."
+#: ../nautilus-extension/nautilus-easytag.c:229
+msgid "Open in EasyTAG"
+msgstr "Ouvrir dans EasyTAG"
+
+#: ../nautilus-extension/nautilus-easytag.c:230
+msgid "Open the current selected directory in EasyTAG"
+msgstr "Ouvre le répertoire actuellement sélectionnné dans EasyTAG"
+
+#: ../nautilus-extension/nautilus-easytag.c:247
+msgid "Open with EasyTAG"
+msgstr "Ouvrir avec EasyTAG"
+
+#: ../nautilus-extension/nautilus-easytag.c:248
+msgid "Open selected files in EasyTAG"
+msgstr "Ouvre les fichiers sélectionnés dans EasyTAG"
 
 #. Translators: put your own name here to appear in the about dialog.
-#: ../src/about.c:106
+#: ../src/about.c:89
 msgid "translator-credits"
 msgstr ""
-"Alain Lojewski <allomervan at gmail.com>, 2012.\n"
+"Alain Lojewski <allomervan at gmail.com>, 2012-2014.\n"
 "Alexandre Franke <alexandre.franke at gmail.com>, 2014."
 
-#: ../src/about.c:116
+#: ../src/about.c:99
 msgid "View and edit tags in audio files"
 msgstr "Afficher et modifier les étiquettes des fichiers audio"
 
-#. g_print(_("Error while opening file: '%s' (%s)."),filename_utf8,g_strerror(errno));
-#: ../src/ape_tag.c:61 ../src/id3v24_tag.c:112 ../src/mp4_header.c:63
-#: ../src/mp4_tag.c:65 ../src/mp4_tag.c:186
+#: ../src/ape_tag.c:61 ../src/id3v24_tag.c:113 ../src/mp4_header.cc:45
+#: ../src/mp4_header.cc:58 ../src/mp4_tag.cc:69 ../src/mp4_tag.cc:85
+#: ../src/mp4_tag.cc:90 ../src/mp4_tag.cc:262 ../src/mp4_tag.cc:278
+#: ../src/mp4_tag.cc:283
 #, c-format
 msgid "Error while opening file: '%s' (%s)."
 msgstr "Erreur lors de l'ouverture du fichier : « %s » (%s)."
 
-#: ../src/application.c:37
+#: ../src/application.c:32
 msgid "Print the version and exit"
 msgstr "Affiche la version et sort"
 
-#: ../src/application.c:89
+#: ../src/application.c:84
 #, c-format
 msgid "Website: %s"
 msgstr "Site Web : %s"
 
-#: ../src/application.c:98
+#: ../src/application.c:93
 msgid "- Tag and rename audio files"
 msgstr "- Étiqueter et renommer des fichiers audio"
 
@@ -365,7 +359,7 @@ msgstr "Dernier fichier"
 msgid "S_can Files"
 msgstr "S_canner les fichiers"
 
-#: ../src/bar.c:225 ../src/scan.c:2008
+#: ../src/bar.c:225 ../src/scan_dialog.c:1818
 msgid "Scan selected files"
 msgstr "Scanner les fichiers sélectionnés"
 
@@ -429,8 +423,8 @@ msgstr "Rétablir les dernières modifications"
 msgid "_Quit"
 msgstr "_Quitter"
 
-#: ../src/bar.c:242 ../src/easytag.c:2429 ../src/easytag.c:4565
-#: ../src/easytag.c:4597
+#: ../src/bar.c:242 ../src/easytag.c:2424 ../src/easytag.c:4546
+#: ../src/easytag.c:4578
 msgid "Quit"
 msgstr "Quitter"
 
@@ -724,7 +718,7 @@ msgstr "Renommer les fichiers et les répertoires"
 msgid "_Process Fields…"
 msgstr "_Traiter les champs…"
 
-#: ../src/bar.c:370 ../src/scan.c:182
+#: ../src/bar.c:370 ../src/scan_dialog.c:184
 msgid "Process Fields"
 msgstr "Traiter les champs"
 
@@ -733,7 +727,7 @@ msgstr "Traiter les champs"
 msgid "Could not merge UI, error was: %s\n"
 msgstr "Impossible de fusionner l'UI, erreur : %s\n"
 
-#: ../src/bar.c:533
+#: ../src/bar.c:535
 msgid "Ready to start"
 msgstr "Prêt à démarrer"
 
@@ -741,7 +735,7 @@ msgstr "Prêt à démarrer"
 msgid "New default path for files selected"
 msgstr "Sélection d'un nouveau chemin par défaut des fichiers"
 
-#: ../src/browser.c:678 ../src/easytag.c:4561
+#: ../src/browser.c:678 ../src/easytag.c:4542
 msgid "Some files have been modified but not saved"
 msgstr "Certains fichiers ont été modifiés mais pas enregistrés"
 
@@ -753,103 +747,103 @@ msgstr "Voulez vous les enregistrer avant de changer de répertoire ?"
 msgid "Confirm Directory Change"
 msgstr "Confirmer le changement de répertoire"
 
-#: ../src/browser.c:2146
+#: ../src/browser.c:2241
 msgid "<All albums>"
 msgstr "<Tous les albums>"
 
-#: ../src/browser.c:2607
+#: ../src/browser.c:2704
 #, c-format
 msgid "Error: Searching for %s, could not find node %s in tree."
 msgstr ""
 "Erreur : recherche de %s, impossible de trouver le noeud %s dans "
 "l'arborescence."
 
-#: ../src/browser.c:3101 ../src/browser.c:3179
+#: ../src/browser.c:3198 ../src/browser.c:3276
 msgid "Tree"
 msgstr "Arborescence"
 
-#: ../src/browser.c:3102 ../src/cddb.c:803 ../src/misc.c:1902
+#: ../src/browser.c:3199 ../src/cddb.c:803 ../src/misc.c:1899
 msgid "Filename"
 msgstr "Nom du fichier"
 
-#: ../src/browser.c:3102 ../src/cddb.c:804 ../src/misc.c:1903
+#: ../src/browser.c:3199 ../src/cddb.c:804 ../src/misc.c:1900
 #: ../src/prefs.c:643
 msgid "Title"
 msgstr "Titre"
 
 #. Translators: This option is for the previous 'search in' option. For
 #. * instance, translate this as "Search in:" "Artist".
-#: ../src/browser.c:3103 ../src/browser.c:3110 ../src/cddb.c:483
-#: ../src/cddb.c:805 ../src/misc.c:1904 ../src/prefs.c:644
+#: ../src/browser.c:3200 ../src/browser.c:3207 ../src/cddb.c:483
+#: ../src/cddb.c:805 ../src/misc.c:1901 ../src/prefs.c:644
 msgid "Artist"
 msgstr "Artiste"
 
-#: ../src/browser.c:3103 ../src/misc.c:1905
+#: ../src/browser.c:3200 ../src/misc.c:1902
 msgid "Album Artist"
 msgstr "Artiste de l'album"
 
 #. Translators: This option is for the previous 'search in' option. For
 #. * instance, translate this as "Search in:" "Album".
-#: ../src/browser.c:3104 ../src/browser.c:3112 ../src/cddb.c:486
-#: ../src/cddb.c:806 ../src/misc.c:1906 ../src/prefs.c:645
+#: ../src/browser.c:3201 ../src/browser.c:3209 ../src/cddb.c:486
+#: ../src/cddb.c:806 ../src/misc.c:1903 ../src/prefs.c:645
 msgid "Album"
 msgstr "Album"
 
-#: ../src/browser.c:3104 ../src/cddb.c:807 ../src/misc.c:1908
+#: ../src/browser.c:3201 ../src/cddb.c:807 ../src/misc.c:1905
 msgid "Year"
 msgstr "Année"
 
-#: ../src/browser.c:3104
+#: ../src/browser.c:3201
 msgid "Disc"
 msgstr "Disque"
 
-#: ../src/browser.c:3105 ../src/misc.c:1909
+#: ../src/browser.c:3202 ../src/misc.c:1906
 msgid "Track"
 msgstr "Piste"
 
-#: ../src/browser.c:3105 ../src/cddb.c:810 ../src/misc.c:1910
+#: ../src/browser.c:3202 ../src/cddb.c:810 ../src/misc.c:1907
 #: ../src/prefs.c:646
 msgid "Genre"
 msgstr "Genre"
 
-#: ../src/browser.c:3106 ../src/misc.c:1911 ../src/prefs.c:647
+#: ../src/browser.c:3203 ../src/misc.c:1908 ../src/prefs.c:647
 msgid "Comment"
 msgstr "Commentaire"
 
-#: ../src/browser.c:3106 ../src/misc.c:1912 ../src/picture.c:1059
+#: ../src/browser.c:3203 ../src/misc.c:1909 ../src/picture.c:884
 #: ../src/prefs.c:648
 msgid "Composer"
 msgstr "Compositeur"
 
-#: ../src/browser.c:3107 ../src/misc.c:1913
+#: ../src/browser.c:3204 ../src/misc.c:1910
 msgid "Original Artist"
 msgstr "Artiste original"
 
-#: ../src/browser.c:3108 ../src/misc.c:1914
+#: ../src/browser.c:3205 ../src/misc.c:1911
 msgid "Copyright"
 msgstr "Copyright"
 
-#: ../src/browser.c:3108 ../src/misc.c:1915
+#: ../src/browser.c:3205 ../src/misc.c:1912
 msgid "URL"
 msgstr "URL"
 
-#: ../src/browser.c:3109 ../src/misc.c:1916
+#: ../src/browser.c:3206 ../src/misc.c:1913
 msgid "Encoded By"
 msgstr "Encodé par"
 
-#: ../src/browser.c:3110
+#: ../src/browser.c:3207
 msgid "# Albums"
 msgstr "Nombre d'albums"
 
-#: ../src/browser.c:3111 ../src/browser.c:3112
+#: ../src/browser.c:3208 ../src/browser.c:3209
 msgid "# Files"
 msgstr "Nombre de fichiers"
 
-#: ../src/browser.c:3137
+#: ../src/browser.c:3234
 msgid "Enter a directory to browse."
 msgstr "Saisir un répertoire à parcourir."
 
-#: ../src/browser.c:3146
+#: ../src/browser.c:3243
 msgid "Select a directory to browse."
 msgstr "Séléctionner un répertoire à parcourir."
 
@@ -857,33 +851,33 @@ msgstr "Séléctionner un répertoire à parcourir."
 #. * The label for displaying number of files in path (without subdirs)
 #.
 #. Translators: No files, as in "0 files".
-#: ../src/browser.c:3153 ../src/easytag.c:3468
+#: ../src/browser.c:3250 ../src/easytag.c:3450
 msgid "No files"
 msgstr "Aucun fichier"
 
-#: ../src/browser.c:3231
+#: ../src/browser.c:3328
 msgid "Artist & Album"
 msgstr "Artiste & album"
 
 #. Only directories changed
-#: ../src/browser.c:3595 ../src/easytag.c:2880
+#: ../src/browser.c:3693 ../src/easytag.c:2875
 msgid "Rename Directory"
 msgstr "Renommer le répertoire"
 
-#: ../src/browser.c:3617
+#: ../src/browser.c:3715
 #, c-format
 msgid "Rename the directory '%s' to:"
 msgstr "Renommer le répertoire « %s » en :"
 
-#: ../src/browser.c:3636 ../src/misc.c:1171
+#: ../src/browser.c:3734 ../src/misc.c:1168
 msgid "Use mask:"
 msgstr "Utiliser le masque :"
 
-#: ../src/browser.c:3639
+#: ../src/browser.c:3737
 msgid "If activated, it will use masks to rename directory."
 msgstr "Si activé, les masques sont utilisés pour renommer le répertoire."
 
-#: ../src/browser.c:3657
+#: ../src/browser.c:3755
 msgid ""
 "Select or type in a mask using codes (see Legend in Scanner Window) to "
 "rename the directory from tag fields."
@@ -893,64 +887,64 @@ msgstr ""
 "données de l'étiquette."
 
 #. Preview label
-#: ../src/browser.c:3681
+#: ../src/browser.c:3779
 msgid "Rename directory preview"
 msgstr "Aperçu du renommage du répertoire"
 
-#: ../src/browser.c:3773
+#: ../src/browser.c:3871
 msgid "You must type a directory name"
 msgstr "Vous devez saisir un nom de répertoire"
 
-#: ../src/browser.c:3774 ../src/browser.c:3795
+#: ../src/browser.c:3872 ../src/browser.c:3893
 msgid "Directory Name Error"
 msgstr "Erreur de nom de répertoire"
 
-#: ../src/browser.c:3792
+#: ../src/browser.c:3890
 #, c-format
 msgid "Could not convert '%s' into filename encoding."
 msgstr "Impossible de convertir « %s » dans le codage du nom de fichier."
 
-#: ../src/browser.c:3794
+#: ../src/browser.c:3892
 msgid "Please use another name"
 msgstr "Veuillez choisir un autre nom"
 
-#: ../src/browser.c:3864
+#: ../src/browser.c:3962
 #, c-format
 msgid "The directory name '%s' already exists"
 msgstr "Le nom du répertoire « %s » existe déjà"
 
-#: ../src/browser.c:3865 ../src/easytag.c:2963
+#: ../src/browser.c:3963 ../src/easytag.c:2958
 msgid "Rename File Error"
 msgstr "Erreur de renommage du fichier"
 
-#: ../src/browser.c:3903 ../src/browser.c:3932
+#: ../src/browser.c:4001 ../src/browser.c:4030
 msgid "Rename Directory Error"
 msgstr "Erreur de renommage du répertoire"
 
-#: ../src/browser.c:3970
+#: ../src/browser.c:4068
 msgid "Directory renamed"
 msgstr "Répertoire renommé"
 
-#: ../src/browser.c:4006
+#: ../src/browser.c:4104
 msgid "Browse Directory With"
 msgstr "Parcourir le répertoire avec"
 
-#: ../src/browser.c:4022 ../src/browser.c:4148
+#: ../src/browser.c:4120 ../src/browser.c:4246
 msgid "Program to run:"
 msgstr "Programme à lancer :"
 
-#: ../src/browser.c:4034
+#: ../src/browser.c:4132
 msgid ""
 "Enter the program to run. It will receive the current directory as parameter."
 msgstr ""
 "Saisissez le programme à lancer. Il aura comme paramètre le répertoire "
 "actuel."
 
-#: ../src/browser.c:4128
+#: ../src/browser.c:4226
 msgid "Open Files With"
 msgstr "Ouvrir les fichiers avec"
 
-#: ../src/browser.c:4160
+#: ../src/browser.c:4258
 msgid ""
 "Enter the program to run. It will receive the current file as parameter."
 msgstr ""
@@ -1046,7 +1040,7 @@ msgstr "Tous les champs"
 
 #. Translators: This option is for the previous 'search in' option. For
 #. * instance, translate this as "Search in:" "Other".
-#: ../src/cddb.c:492 ../src/picture.c:1037 ../src/prefs.c:807
+#: ../src/cddb.c:492 ../src/picture.c:862 ../src/prefs.c:807
 msgid "Other"
 msgstr "Autres"
 
@@ -1140,7 +1134,7 @@ msgstr "Catégories"
 msgid "Results:"
 msgstr "Résultats :"
 
-#: ../src/cddb.c:606 ../src/misc.c:1950
+#: ../src/cddb.c:606 ../src/misc.c:1947
 msgid "Search:"
 msgstr "Rechercher :"
 
@@ -1205,7 +1199,7 @@ msgid "# Tracks"
 msgstr "Nombre de pistes"
 
 #. Check box to run the scanner
-#: ../src/cddb.c:847 ../src/misc.c:2991
+#: ../src/cddb.c:847 ../src/misc.c:2988
 msgid "Run the current scanner for each file"
 msgstr "Exécuter le scanner actuel sur chaque fichier"
 
@@ -1217,7 +1211,7 @@ msgstr "Correspondance des lignes avec l'algorithme Levenshtein"
 #. Doesn't activate it by default because if the new user don't pay attention to it,
 #. it will not understand why the cddb results aren't loaded correctly...
 #. gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbUseDLM2),CDDB_USE_DLM);
-#: ../src/cddb.c:859 ../src/prefs.c:1362
+#: ../src/cddb.c:859 ../src/prefs.c:1363
 msgid ""
 "When activating this option, the Levenshtein algorithm (DLM: Damerau-"
 "Levenshtein Metric) will be used to match the CDDB title against every "
@@ -1315,11 +1309,11 @@ msgstr "Impossible d'ouvrir le fichier « %s » (%s)"
 #. Send the request
 #. g_print("Request Cddb_Get_Album_Tracks_List : '%s'\n", cddb_in);
 #. Send the request
-#: ../src/cddb.c:2314 ../src/cddb.c:2643 ../src/cddb.c:3516
+#: ../src/cddb.c:2362 ../src/cddb.c:2693 ../src/cddb.c:3568
 msgid "Sending request…"
 msgstr "Envoi de la requête…"
 
-#: ../src/cddb.c:2318 ../src/cddb.c:2647 ../src/cddb.c:3216 ../src/cddb.c:3520
+#: ../src/cddb.c:2366 ../src/cddb.c:2697 ../src/cddb.c:3267 ../src/cddb.c:3572
 #, c-format
 msgid "Cannot send the request (%s)"
 msgstr "Impossible d'envoyer la requête (%s)"
@@ -1328,113 +1322,113 @@ msgstr "Impossible d'envoyer la requête (%s)"
 #. * Read the answer
 #.
 #. Read the answer
-#: ../src/cddb.c:2344 ../src/cddb.c:3230 ../src/cddb.c:3529
+#: ../src/cddb.c:2393 ../src/cddb.c:3281 ../src/cddb.c:3581
 msgid "Receiving data…"
 msgstr "Réception des données…"
 
-#: ../src/cddb.c:2351 ../src/cddb.c:2676 ../src/cddb.c:3237 ../src/cddb.c:3536
+#: ../src/cddb.c:2400 ../src/cddb.c:2726 ../src/cddb.c:3288 ../src/cddb.c:3588
 msgid "The server returned a bad response"
 msgstr "Le serveur a renvoyé une mauvaise réponse"
 
-#: ../src/cddb.c:2365 ../src/cddb.c:2692 ../src/cddb.c:3252 ../src/cddb.c:3553
-#: ../src/cddb.c:3568
+#: ../src/cddb.c:2414 ../src/cddb.c:2742 ../src/cddb.c:3303 ../src/cddb.c:3605
+#: ../src/cddb.c:3620
 #, c-format
 msgid "The server returned a bad response: %s"
 msgstr "Le serveur a renvoyé une mauvaise réponse : %s"
 
-#: ../src/cddb.c:2512
+#: ../src/cddb.c:2561
 #, c-format
 msgid "Sorry, the web-based search is currently not available"
 msgstr "Désolé, mais la recherche Web est indisponible pour l'instant"
 
-#: ../src/cddb.c:2514 ../src/cddb.c:2863
+#: ../src/cddb.c:2563 ../src/cddb.c:2913
 #, c-format
 msgid "Found one matching album"
 msgid_plural "Found %d matching albums"
 msgstr[0] "Trouvé %d album correspondant"
 msgstr[1] "Trouvé %d albums correspondants"
 
-#: ../src/cddb.c:2664
+#: ../src/cddb.c:2714
 #, c-format
 msgid "Receiving data of page %d (album %d/%d)…"
 msgstr "Réception des données de la page %d (album %d/%d)…"
 
-#: ../src/cddb.c:2666
+#: ../src/cddb.c:2716
 #, c-format
 msgid "Receiving data of page %d…"
 msgstr "Réception des données de la page %d…"
 
-#: ../src/cddb.c:2830
+#: ../src/cddb.c:2880
 #, c-format
 msgid "More results to load…"
 msgstr "D'autres résultats à charger…"
 
-#: ../src/cddb.c:2959
+#: ../src/cddb.c:3009
 #, c-format
 msgid "No file selected"
 msgstr "Aucun fichier sélectionné"
 
 #. The CD redbook standard defines the maximum number of tracks as 99, any
 #. queries with more than 99 tracks will never return a result.
-#: ../src/cddb.c:2967
+#: ../src/cddb.c:3017
 #, c-format
 msgid "More than 99 files selected. Cannot send request"
 msgstr "Plus de 99 fichiers sélectionnés. Impossible d'envoyer la requête"
 
-#: ../src/cddb.c:2973
+#: ../src/cddb.c:3023
 #, c-format
 msgid "One file selected"
 msgid_plural "%d files selected"
 msgstr[0] "Un fichier sélectionné"
 msgstr[1] "%d fichiers sélectionnés"
 
-#: ../src/cddb.c:3056
+#: ../src/cddb.c:3107
 msgid "The path for 'Local CD Database' was not defined"
 msgstr "Le chemin vers la « base de données CD locale » n'est pas défini"
 
 #. Translators: 'it' in this sentence refers to the local CD
 #. * database path.
-#: ../src/cddb.c:3059
+#: ../src/cddb.c:3110
 msgid "Enter it in the preferences window before using this search."
 msgstr ""
 "Saisissez-la dans la boîte de dialogue des préférences avant d'utiliser "
 "cette recherche."
 
-#: ../src/cddb.c:3061
+#: ../src/cddb.c:3112
 msgid "Local CD search"
 msgstr "Recherche locale de CD"
 
 #. g_print("Request Cddb_Search_Album_From_Selected_Files : '%s'\n", cddb_in);
-#: ../src/cddb.c:3206
+#: ../src/cddb.c:3257
 #, c-format
 msgid "Sending request (CddbId: %s, #tracks: %d, Disc length: %d)…"
 msgstr ""
 "Envoi de la requête (CddbId : %s, nb de pistes : %d, durée du disque : %d)…"
 
-#: ../src/cddb.c:3363
+#: ../src/cddb.c:3414
 #, c-format
 msgid "DiscID '%s' gave one matching album"
 msgid_plural "DiscID '%s' gave %d matching albums"
 msgstr[0] "Le DiscID « %s » donne un album correspondant"
 msgstr[1] "Le DiscID « %s » donne %d albums correspondants"
 
-#: ../src/cddb.c:3460
+#: ../src/cddb.c:3512
 #, c-format
 msgid "Can't load file: '%s' (%s)."
 msgstr "Impossible de charger le fichier : « %s » (%s)."
 
 #. Load the track list of the album
-#: ../src/cddb.c:3759
+#: ../src/cddb.c:3811
 msgid "Loading album track list…"
 msgstr "Chargement de la liste des pistes de l'album…"
 
-#: ../src/cddb.c:3958
+#: ../src/cddb.c:4012
 msgid "The number of CDDB results does not match the number of selected files"
 msgstr ""
 "Le nombre de résultats CDDB ne correspond pas au nombre de fichiers "
 "sélectionnés"
 
-#: ../src/cddb.c:3962
+#: ../src/cddb.c:4016
 msgid "Write Tag from CDDB"
 msgstr "Écriture de l'étiquette à partir de la CDDB"
 
@@ -1642,49 +1636,49 @@ msgid "The string '%s' couldn't be converted into UTF-8 (%s)."
 msgstr "La chaîne « %s » n'a pas pu être convertie en UTF-8 (%s)."
 
 #. Starting messages
-#: ../src/easytag.c:184
+#: ../src/easytag.c:185
 #, c-format
 msgid "Starting EasyTAG version %s (PID: %d)…"
 msgstr "Démarrage de EasyTAG version %s (PID : %d)…"
 
-#: ../src/easytag.c:186
+#: ../src/easytag.c:187
 #, c-format
 msgid "Using libid3tag version %s"
 msgstr "Version %s de libid3tag actuellement utilisée"
 
-#: ../src/easytag.c:189
+#: ../src/easytag.c:190
 #, c-format
 msgid "Using id3lib version %d.%d.%d"
 msgstr "Version %d.%d.%d de id3lib actuellement utilisée"
 
-#: ../src/easytag.c:195
+#: ../src/easytag.c:196
 #, c-format
 msgid "Variable EASYTAGLANG defined. Setting locale: '%s'"
 msgstr "Variable EASYTAGLANG non définie. Paramétrage de la locale à : « %s »"
 
-#: ../src/easytag.c:197
+#: ../src/easytag.c:198
 #, c-format
 msgid "Setting locale: '%s'"
 msgstr "Paramétrage de la locale à : « %s »"
 
-#: ../src/easytag.c:202
+#: ../src/easytag.c:203
 #, c-format
 msgid "Currently using locale '%s' (and eventually '%s')"
 msgstr "Locale « %s » utilisée actuellement (et éventuellement '%s')"
 
 # FIXME setting directories or settings directory?
-#: ../src/easytag.c:209
+#: ../src/easytag.c:210
 msgid "Unable to create setting directories"
 msgstr "Impossible de créer les répertoires de paramètre"
 
-#: ../src/easytag.c:426 ../src/et_core.c:597 ../src/et_core.c:609
+#: ../src/easytag.c:427 ../src/et_core.c:632 ../src/et_core.c:644
 #, c-format
 msgid "Error while querying information for file: '%s' (%s)"
 msgstr ""
 "Erreur lors de la requête d'informations de l'étiquette ID3v2 du fichier "
 "« %s » (%s)"
 
-#: ../src/easytag.c:489
+#: ../src/easytag.c:490
 #, c-format
 msgid "Cannot open path '%s'"
 msgstr "Impossible d'ouvrir le chemin « %s »"
@@ -1692,11 +1686,11 @@ msgstr "Impossible d'ouvrir le chemin « %s »"
 #.
 #. * Browser
 #.
-#: ../src/easytag.c:581 ../src/prefs.c:142
+#: ../src/easytag.c:583 ../src/prefs.c:142
 msgid "Browser"
 msgstr "Sélecteur"
 
-#: ../src/easytag.c:603 ../src/et_core.c:2817
+#: ../src/easytag.c:605 ../src/et_core.c:2863
 msgid "File"
 msgstr "Fichier"
 
@@ -1706,103 +1700,103 @@ msgstr "Fichier"
 #. gtk_label_set_text(GTK_LABEL(VersionValueLabel),"");
 #. Version changed to encoder version
 #. Encoder version
-#: ../src/easytag.c:635 ../src/easytag.c:4231 ../src/flac_header.c:201
+#: ../src/easytag.c:637 ../src/easytag.c:4213 ../src/flac_header.c:201
 #: ../src/monkeyaudio_header.c:96 ../src/musepack_header.c:98
 #: ../src/ogg_header.c:389 ../src/opus_header.c:221 ../src/wavpack_header.c:72
 #, c-format
 msgid "Encoder:"
 msgstr "Encodeur :"
 
-#: ../src/easytag.c:643
+#: ../src/easytag.c:645
 msgid "Bitrate:"
 msgstr "Débit :"
 
 #. Translators: Please try to keep this string as short as possible as it
 #. * is shown in a narrow column.
-#: ../src/easytag.c:653
+#: ../src/easytag.c:655
 msgid "Frequency:"
 msgstr "Fréquence :"
 
 #. Mode
-#: ../src/easytag.c:664 ../src/easytag.c:4235 ../src/mpeg_header.c:216
+#: ../src/easytag.c:666 ../src/easytag.c:4217 ../src/mpeg_header.c:216
 msgid "Mode:"
 msgstr "Mode :"
 
-#: ../src/easytag.c:671
+#: ../src/easytag.c:673
 msgid "Size:"
 msgstr "Taille :"
 
-#: ../src/easytag.c:678
+#: ../src/easytag.c:680
 msgid "Duration:"
 msgstr "Durée :"
 
 #. Main Frame
-#: ../src/easytag.c:725 ../src/et_core.c:2747
+#: ../src/easytag.c:726 ../src/et_core.c:2793
 msgid "Tag"
 msgstr "Étiqueter"
 
 #.
 #. * 1 - Page for common tag fields
 #.
-#: ../src/easytag.c:747
+#: ../src/easytag.c:748
 msgid "Common"
 msgstr "Général"
 
 #. Title
-#: ../src/easytag.c:754
+#: ../src/easytag.c:755
 msgid "Title:"
 msgstr "Titre :"
 
-#: ../src/easytag.c:768
+#: ../src/easytag.c:769
 msgid "Tag selected files with this title"
 msgstr "Étiquette les fichiers sélectionnés avec ce titre"
 
 #. Artist
-#: ../src/easytag.c:773
+#: ../src/easytag.c:774
 msgid "Artist:"
 msgstr "Artiste :"
 
-#: ../src/easytag.c:787
+#: ../src/easytag.c:788
 msgid "Tag selected files with this artist"
 msgstr "Étiquette les fichiers sélectionnés avec cet artiste"
 
 #. Album Artist
-#: ../src/easytag.c:792
+#: ../src/easytag.c:793
 msgid "Album artist:"
 msgstr "Artiste de l'album :"
 
-#: ../src/easytag.c:806
+#: ../src/easytag.c:807
 msgid "Tag selected files with this album artist"
 msgstr "Étiquette les fichiers sélectionnés avec cet artiste de l'album"
 
 #. Album
-#: ../src/easytag.c:811
+#: ../src/easytag.c:812
 msgid "Album:"
 msgstr "Album :"
 
-#: ../src/easytag.c:825
+#: ../src/easytag.c:826
 msgid "Tag selected files with this album name"
 msgstr "Étiquette les fichiers sélectionnés avec ce nom d'album"
 
 #. Disc Number
-#: ../src/easytag.c:830
+#: ../src/easytag.c:831
 msgid "CD:"
 msgstr "CD :"
 
-#: ../src/easytag.c:847
+#: ../src/easytag.c:848
 msgid "Tag selected files with this disc number"
 msgstr "Étiquette les fichiers sélectionnés avec ce numéro de disque"
 
 #. Year
-#: ../src/easytag.c:852
+#: ../src/easytag.c:853
 msgid "Year:"
 msgstr "Année :"
 
-#: ../src/easytag.c:872
+#: ../src/easytag.c:873
 msgid "Tag selected files with this year"
 msgstr "Étiquette les fichiers sélectionnés avec cette année"
 
-#: ../src/easytag.c:886
+#: ../src/easytag.c:887
 msgid "Number selected tracks sequentially. Starts at 01 in each subdirectory."
 msgstr ""
 "Numérote les pistes sélectionnées séquentiellement. Redémarre à 01 dans "
@@ -1810,11 +1804,11 @@ msgstr ""
 
 #. To have enough space to display the icon
 #. To have enough space to display the icon
-#: ../src/easytag.c:895
+#: ../src/easytag.c:896
 msgid "Track #:"
 msgstr "Piste N° :"
 
-#: ../src/easytag.c:926
+#: ../src/easytag.c:927
 msgid ""
 "Set the number of files, in the same directory of the displayed file, to the "
 "selected tracks."
@@ -1822,79 +1816,79 @@ msgstr ""
 "Définit le nombre de fichiers, dans le même répertoire que le fichier "
 "affiché, au nombre de pistes sélectionnées."
 
-#: ../src/easytag.c:946
+#: ../src/easytag.c:947
 msgid "Tag selected files with this number of tracks"
 msgstr "Étiquette les fichiers sélectionnés avec ce nombre de pistes"
 
 #. Genre
-#: ../src/easytag.c:950
+#: ../src/easytag.c:951
 msgid "Genre:"
 msgstr "Genre :"
 
-#: ../src/easytag.c:978
+#: ../src/easytag.c:979
 msgid "Tag selected files with this genre"
 msgstr "Étiquette les fichiers sélectionnés avec ce genre"
 
 #. Comment
-#: ../src/easytag.c:983
+#: ../src/easytag.c:984
 msgid "Comment:"
 msgstr "Commentaire :"
 
-#: ../src/easytag.c:1010
+#: ../src/easytag.c:1011
 msgid "Tag selected files with this comment"
 msgstr "Étiquette les fichiers sélectionnés avec ce commentaire"
 
 #. Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(CommentView));
 #. Composer (name of the composers)
-#: ../src/easytag.c:1017
+#: ../src/easytag.c:1018
 msgid "Composer:"
 msgstr "Compositeur :"
 
-#: ../src/easytag.c:1031
+#: ../src/easytag.c:1032
 msgid "Tag selected files with this composer"
 msgstr "Étiquette les fichiers sélectionnés avec ce compositeur"
 
 #. Translators: Original Artist / Performer. Please try to keep this string
 #. * as short as possible, as it must fit into a narrow column.
-#: ../src/easytag.c:1038
+#: ../src/easytag.c:1039
 msgid "Orig. artist:"
 msgstr "Art. origin. :"
 
-#: ../src/easytag.c:1052
+#: ../src/easytag.c:1053
 msgid "Tag selected files with this original artist"
 msgstr "Étiquette les fichiers sélectionnés avec cet artiste original"
 
 #. Copyright
-#: ../src/easytag.c:1058
+#: ../src/easytag.c:1059
 msgid "Copyright:"
 msgstr "Copyright :"
 
-#: ../src/easytag.c:1072
+#: ../src/easytag.c:1073
 msgid "Tag selected files with this copyright"
 msgstr "Étiquette les fichiers sélectionnés avec ce copyright"
 
 #. URL
-#: ../src/easytag.c:1078
+#: ../src/easytag.c:1079
 msgid "URL:"
 msgstr "URL :"
 
-#: ../src/easytag.c:1092
+#: ../src/easytag.c:1093
 msgid "Tag selected files with this URL"
 msgstr "Étiquette les fichiers sélectionnés avec cet URL"
 
 #. Encoded by
-#: ../src/easytag.c:1098
+#: ../src/easytag.c:1099
 msgid "Encoded by:"
 msgstr "Encodé par :"
 
-#: ../src/easytag.c:1112
+#: ../src/easytag.c:1113
 msgid "Tag selected files with this encoder name"
 msgstr "Étiquette les fichiers sélectionnés avec ce nom d'encodeur"
 
 #.
 #. * 2 - Page for extra tag fields
 #.
-#: ../src/easytag.c:1146 ../src/et_core.c:3189 ../src/et_core.c:3192
+#: ../src/easytag.c:1146 ../src/et_core.c:3235 ../src/et_core.c:3238
 msgid "Images"
 msgstr "Images"
 
@@ -1902,567 +1896,562 @@ msgstr "Images"
 msgid "You can use drag and drop to add an image"
 msgstr "Vous pouvez utiliser le glisser-déposer pour ajouter une image."
 
-#: ../src/easytag.c:1217
+#: ../src/easytag.c:1219
 msgid "Add images to the tag"
 msgstr "Ajouter des images à l'étiquette"
 
-#: ../src/easytag.c:1235
+#: ../src/easytag.c:1237
 msgid "Remove selected images from the tag"
 msgstr "Supprimer les images sélectionnées de l'étiquette"
 
-#: ../src/easytag.c:1249
+#: ../src/easytag.c:1248
 msgid "Save the selected images to files"
 msgstr "Enregistrer les images sélectionnés dans les fichiers"
 
-#: ../src/easytag.c:1260
+#: ../src/easytag.c:1259
 msgid "Edit image properties"
 msgstr "Modifier les propriétés de l'image"
 
-#: ../src/easytag.c:1274
+#: ../src/easytag.c:1270
 msgid "Tag selected files with these images"
 msgstr "Étiquette les fichiers sélectionnés avec ces images"
 
-#: ../src/easytag.c:1332
+#: ../src/easytag.c:1328
 #, c-format
 msgid "Selected files tagged with title '%s'."
 msgstr "Les fichiers sélectionnés sont étiquetés avec le titre « %s »."
 
-#: ../src/easytag.c:1334
+#: ../src/easytag.c:1330
 msgid "Removed title from selected files."
 msgstr "Le titre a été supprimé des fichiers sélectionnés."
 
-#: ../src/easytag.c:1349
+#: ../src/easytag.c:1345
 #, c-format
 msgid "Selected files tagged with artist '%s'."
 msgstr "Les fichiers sélectionnés sont étiquetés avec l'artiste « %s »."
 
-#: ../src/easytag.c:1351
+#: ../src/easytag.c:1347
 msgid "Removed artist from selected files."
 msgstr "L'artiste a été supprimé des fichiers sélectionnés."
 
-#: ../src/easytag.c:1365
+#: ../src/easytag.c:1361
 #, c-format
 msgid "Selected files tagged with album artist '%s'."
 msgstr ""
 "Les fichiers sélectionnés sont étiquetés avec l'artiste de l'album « %s »."
 
-#: ../src/easytag.c:1367
+#: ../src/easytag.c:1363
 msgid "Removed album artist from selected files."
 msgstr "L'artiste de l'album a été supprimé des fichiers sélectionnés."
 
-#: ../src/easytag.c:1382
+#: ../src/easytag.c:1378
 #, c-format
 msgid "Selected files tagged with album '%s'."
 msgstr "Les fichiers sélectionnés sont étiquetés avec l'album « %s »."
 
-#: ../src/easytag.c:1384
+#: ../src/easytag.c:1380
 msgid "Removed album name from selected files."
 msgstr "Le nom d'album a été supprimé des fichiers sélectionnés."
 
-#: ../src/easytag.c:1421
+#: ../src/easytag.c:1417
 #, c-format
 msgid "Selected files tagged with disc number '%s/%s'."
 msgstr ""
 "Les fichiers sélectionnés sont étiquetés avec le numéro de disque « %s/%s »."
 
-#: ../src/easytag.c:1426
+#: ../src/easytag.c:1422
 #, c-format
 msgid "Selected files tagged with disc number like 'xx'."
 msgstr ""
 "Les fichiers sélectionnés sont étiquetés avec le numéro de disque du type "
 "« xx »."
 
-#: ../src/easytag.c:1431
+#: ../src/easytag.c:1427
 msgid "Removed disc number from selected files."
 msgstr "Le numéro de disque a été supprimé des fichiers sélectionnés."
 
-#: ../src/easytag.c:1447
+#: ../src/easytag.c:1443
 #, c-format
 msgid "Selected files tagged with year '%s'."
 msgstr "Les fichiers sélectionnés sont étiquetés avec l'année « %s »."
 
-#: ../src/easytag.c:1449
+#: ../src/easytag.c:1445
 msgid "Removed year from selected files."
 msgstr "L'année a été supprimée des fichiers sélectionnés."
 
-#: ../src/easytag.c:1475 ../src/easytag.c:1566
+#: ../src/easytag.c:1471 ../src/easytag.c:1561
 #, c-format
 msgid "Selected files tagged with track like 'xx/%s'."
 msgstr ""
 "Les fichiers sélectionnés sont étiquetés avec un numéro de piste du type "
 "« xx/%s »."
 
-#: ../src/easytag.c:1478
+#: ../src/easytag.c:1474
 #, c-format
 msgid "Selected files tagged with track like 'xx'."
 msgstr ""
 "Les fichiers sélectionnés sont étiquetés avec un numéro de piste du type "
 "« xx »."
 
-#: ../src/easytag.c:1482 ../src/easytag.c:1569
+#: ../src/easytag.c:1478 ../src/easytag.c:1564
 msgid "Removed track number from selected files."
 msgstr "La piste a été supprimée des fichiers sélectionnés."
 
 #. msg = g_strdup_printf(_("All %d tracks numbered sequentially."), ETCore->ETFileSelectionList_Length);
-#: ../src/easytag.c:1539
+#: ../src/easytag.c:1534
 #, c-format
 msgid "Selected tracks numbered sequentially."
 msgstr "Les pistes sélectionnées ont été renumérotées séquentiellement."
 
-#: ../src/easytag.c:1585
+#: ../src/easytag.c:1580
 #, c-format
 msgid "Selected files tagged with genre '%s'."
 msgstr "Les fichiers sélectionnés sont étiquetés avec le genre « %s »."
 
-#: ../src/easytag.c:1587
+#: ../src/easytag.c:1582
 msgid "Removed genre from selected files."
 msgstr "Le genre a été supprimé des fichiers sélectionnés."
 
-#: ../src/easytag.c:1609
+#: ../src/easytag.c:1604
 #, c-format
 msgid "Selected files tagged with comment '%s'."
 msgstr "Les fichiers sélectionnés sont étiquetés avec le commentaire « %s »."
 
-#: ../src/easytag.c:1611
+#: ../src/easytag.c:1606
 msgid "Removed comment from selected files."
 msgstr "Le commentaire a été supprimé des fichiers sélectionnés."
 
-#: ../src/easytag.c:1625
+#: ../src/easytag.c:1620
 #, c-format
 msgid "Selected files tagged with composer '%s'."
 msgstr "Les fichiers sélectionnés sont étiquetés avec le compositeur « %s »."
 
-#: ../src/easytag.c:1627
+#: ../src/easytag.c:1622
 msgid "Removed composer from selected files."
 msgstr "Le compositeur a été supprimé des fichiers sélectionnés."
 
-#: ../src/easytag.c:1642
+#: ../src/easytag.c:1637
 #, c-format
 msgid "Selected files tagged with original artist '%s'."
 msgstr ""
 "Les fichiers sélectionnés sont étiquetés avec l'artiste original « %s »."
 
-#: ../src/easytag.c:1644
+#: ../src/easytag.c:1639
 msgid "Removed original artist from selected files."
 msgstr "L'artiste original a été supprimé des fichiers sélectionnés."
 
-#: ../src/easytag.c:1659
+#: ../src/easytag.c:1654
 #, c-format
 msgid "Selected files tagged with copyright '%s'."
 msgstr "Les fichiers sélectionnés sont étiquetés avec le copyright « %s »."
 
-#: ../src/easytag.c:1661
+#: ../src/easytag.c:1656
 msgid "Removed copyright from selected files."
 msgstr "Le copyright a été supprimé des fichiers sélectionnés."
 
-#: ../src/easytag.c:1676
+#: ../src/easytag.c:1671
 #, c-format
 msgid "Selected files tagged with URL '%s'."
 msgstr "Les fichiers sélectionnés sont étiquetés avec l'URL « %s »."
 
-#: ../src/easytag.c:1678
+#: ../src/easytag.c:1673
 msgid "Removed URL from selected files."
 msgstr "L'URL a été supprimé des fichiers sélectionnés."
 
-#: ../src/easytag.c:1693
+#: ../src/easytag.c:1688
 #, c-format
 msgid "Selected files tagged with encoder name '%s'."
 msgstr ""
 "Les fichiers sélectionnés sont étiquetés avec le nom d'encodeur « %s »."
 
-#: ../src/easytag.c:1695
+#: ../src/easytag.c:1690
 msgid "Removed encoder name from selected files."
 msgstr "Le nom de l'encodeur a été supprimé des fichiers sélectionnés."
 
-#: ../src/easytag.c:1727
+#: ../src/easytag.c:1722
 msgid "Selected files tagged with images."
 msgstr "Les fichiers sélectionnés sont étiquetés avec ces images."
 
-#: ../src/easytag.c:1729
+#: ../src/easytag.c:1724
 msgid "Removed images from selected files."
 msgstr "Les images ont été supprimées des fichiers sélectionnés."
 
-#: ../src/easytag.c:2010
+#: ../src/easytag.c:2005
 msgid "Select Mode and Mask, and redo the same action"
 msgstr "Sélectionner le mode et le masque et refaire la même action"
 
-#: ../src/easytag.c:2062
+#: ../src/easytag.c:2057
 msgid "All tags have been scanned"
 msgstr "Toutes les étiquettes ont été scannées"
 
-#: ../src/easytag.c:2118
+#: ../src/easytag.c:2113
 msgid "All tags have been removed"
 msgstr "Toutes les étiquettes ont été supprimées"
 
-#: ../src/easytag.c:2423
+#: ../src/easytag.c:2418
 #, c-format
 msgid "A file was changed by an external program"
 msgid_plural "%d files were changed by an external program."
 msgstr[0] "Un fichier a été modifié par un programme externe"
 msgstr[1] "%d fichiers ont été modifiés par un programme externe."
 
-#: ../src/easytag.c:2428
+#: ../src/easytag.c:2423
 msgid "Do you want to continue saving the file?"
 msgstr "Souhaitez-vous continuer à enregistrer le fichier ?"
 
-#: ../src/easytag.c:2486 ../src/easytag.c:2506
+#: ../src/easytag.c:2481 ../src/easytag.c:2501
 msgid "Saving files was stopped"
 msgstr "L'enregistrement des fichiers a été arrêté"
 
-#: ../src/easytag.c:2508
+#: ../src/easytag.c:2503
 msgid "All files have been saved"
 msgstr "Tous les fichiers ont été enregistrés"
 
-#: ../src/easytag.c:2643
+#: ../src/easytag.c:2638
 #, c-format
 msgid "Cannot delete file (%s)"
 msgstr "Impossible de supprimer le fichier (%s)"
 
-#: ../src/easytag.c:2664
+#: ../src/easytag.c:2659
 msgid "Files have been partially deleted"
 msgstr "Les fichiers ont été partiellement supprimés"
 
-#: ../src/easytag.c:2666
+#: ../src/easytag.c:2661
 msgid "All files have been deleted"
 msgstr "Tous les fichiers ont été supprimés"
 
-#: ../src/easytag.c:2782
+#: ../src/easytag.c:2777
 #, c-format
 msgid "Do you want to write the tag of file '%s'?"
 msgstr "Voulez-vous écrire l'étiquette du fichier « %s » ?"
 
-#: ../src/easytag.c:2784
+#: ../src/easytag.c:2779
 msgid "Confirm Tag Writing"
 msgstr "Confirmer l'écriture de l'étiquette"
 
-#: ../src/easytag.c:2789 ../src/easytag.c:2909 ../src/easytag.c:3172
+#: ../src/easytag.c:2784 ../src/easytag.c:2904 ../src/easytag.c:3154
 msgid "Repeat action for the remaining files"
 msgstr "Répéter la même action pour les fichiers restants"
 
 #. Directories and filename changed
-#: ../src/easytag.c:2873 ../src/scan.c:181
+#: ../src/easytag.c:2868 ../src/scan_dialog.c:183
 msgid "Rename File and Directory"
 msgstr "Renommer le fichier et le répertoire"
 
-#: ../src/easytag.c:2874
+#: ../src/easytag.c:2869
 msgid "File and directory rename confirmation required"
 msgstr "Confirmation du renommage du fichier et du répertoire nécessaire"
 
-#: ../src/easytag.c:2875
+#: ../src/easytag.c:2870
 #, c-format
 msgid "Do you want to rename the file and directory '%s' to '%s'?"
 msgstr "Voulez-vous renommer le fichier et le répertoire « %s » en « %s » ?"
 
-#: ../src/easytag.c:2881
+#: ../src/easytag.c:2876
 msgid "Directory rename confirmation required"
 msgstr "Confirmation du renommage du répertoire nécessaire"
 
-#: ../src/easytag.c:2882
+#: ../src/easytag.c:2877
 #, c-format
 msgid "Do you want to rename the directory '%s' to '%s'?"
 msgstr "Voulez-vous renommer le répertoire « %s » en « %s » ?"
 
 #. Only filename changed
-#: ../src/easytag.c:2888
+#: ../src/easytag.c:2883
 msgid "Rename File"
 msgstr "Renommer le fichier"
 
-#: ../src/easytag.c:2889
+#: ../src/easytag.c:2884
 msgid "File rename confirmation required"
 msgstr "Confirmation du renommage du fichier nécessaire"
 
-#: ../src/easytag.c:2890
+#: ../src/easytag.c:2885
 #, c-format
 msgid "Do you want to rename the file '%s' to '%s'?"
 msgstr "Voulez-vous renommer le fichier « %s » en « %s » ?"
 
-#: ../src/easytag.c:2956
+#: ../src/easytag.c:2951
 #, c-format
 msgid "Cannot rename file '%s' to '%s'"
 msgstr "Impossible de renommer le fichier « %s » en « %s »"
 
-#: ../src/easytag.c:2970
+#: ../src/easytag.c:2965
 #, c-format
 msgid "Cannot rename file '%s' to '%s': %s"
 msgstr "Impossible de renommer le fichier « %s » en « %s » : %s"
 
 # FIXME ngettext
-#: ../src/easytag.c:2974
+#: ../src/easytag.c:2969
 msgid "File(s) not renamed"
 msgstr "Fichier(s) non renommé(s)"
 
-#: ../src/easytag.c:3086
+#: ../src/easytag.c:3081
 #, c-format
 msgid "Writing tag of '%s'"
 msgstr "Écriture de l'étiquette de « %s »"
 
 # FIXME ngettext
-#: ../src/easytag.c:3093
+#: ../src/easytag.c:3088
 msgid "Tag(s) written"
 msgstr "Étiquette(s) écrite(s)"
 
-#: ../src/easytag.c:3108
-#, c-format
-msgid "Cannot write tag in file '%s' (%s)"
-msgstr "Impossible d'écrire l'étiquette dans le fichier « %s » (%s)"
-
-#: ../src/easytag.c:3121
+#: ../src/easytag.c:3101
 #, c-format
 msgid "Cannot write tag in file '%s'"
 msgstr "Impossible d'écrire l'étiquette dans le fichier « %s »"
 
-#: ../src/easytag.c:3124
+#: ../src/easytag.c:3105
 msgid "Tag Write Error"
 msgstr "Erreur d'écriture de l'étiquette"
 
-#: ../src/easytag.c:3169 ../src/easytag.c:3183
+#: ../src/easytag.c:3151 ../src/easytag.c:3165
 #, c-format
 msgid "Do you really want to delete the file '%s'?"
 msgstr "Voulez-vous vraiment supprimer le fichier « %s » ?"
 
-#: ../src/easytag.c:3175 ../src/easytag.c:3185
+#: ../src/easytag.c:3157 ../src/easytag.c:3167
 msgid "Delete File"
 msgstr "Supprimer le fichier"
 
-#: ../src/easytag.c:3210
+#: ../src/easytag.c:3192
 #, c-format
 msgid "File '%s' deleted"
 msgstr "Fichier « %s » supprimé"
 
-#: ../src/easytag.c:3345
+#: ../src/easytag.c:3327
 #, c-format
 msgid "Cannot read directory '%s'"
 msgstr "Impossible de lire le répertoire « %s »"
 
-#: ../src/easytag.c:3349
+#: ../src/easytag.c:3331
 msgid "Directory Read Error"
 msgstr "Erreur de lecture du répertoire"
 
 #. Read the directory recursively
-#: ../src/easytag.c:3370
+#: ../src/easytag.c:3352
 #, c-format
 msgid "Search in progress…"
 msgstr "Recherche en cours…"
 
-#: ../src/easytag.c:3393 ../src/et_core.c:2824
+#: ../src/easytag.c:3375 ../src/et_core.c:2870
 #, c-format
 msgid "File: '%s'"
 msgstr "Fichier : « %s »"
 
-#: ../src/easytag.c:3443
+#: ../src/easytag.c:3425
 #, c-format
 msgid "Found one file in this directory and subdirectories"
 msgid_plural "Found %d files in this directory and subdirectories"
 msgstr[0] "Un fichier trouvé dans ce répertoire et ses sous-répertoires."
 msgstr[1] "%d fichiers trouvés dans ce répertoire et ses sous-répertoires."
 
-#: ../src/easytag.c:3450
+#: ../src/easytag.c:3432
 #, c-format
 msgid "Found one file in this directory"
 msgid_plural "Found %d files in this directory"
 msgstr[0] "Un fichier trouvé dans ce répertoire."
 msgstr[1] "%d fichiers trouvés dans ce répertoire."
 
-#: ../src/easytag.c:3472
+#: ../src/easytag.c:3454
 msgid "No file found in this directory and subdirectories"
 msgstr "Aucun fichier trouvé dans ce répertoire et ses sous-répertoires"
 
-#: ../src/easytag.c:3474
+#: ../src/easytag.c:3456
 msgid "No file found in this directory"
 msgstr "Aucun fichier trouvé dans ce répertoire"
 
-#: ../src/easytag.c:3542
+#: ../src/easytag.c:3524
 #, c-format
 msgid "Error opening directory '%s' (%s)"
 msgstr "Erreur lors de l'ouverture du répertoire « %s » (%s)"
 
-#: ../src/easytag.c:3578
+#: ../src/easytag.c:3560
 #, c-format
 msgid "Cannot read directory (%s)"
 msgstr "Impossible de lire le répertoire (%s)"
 
-#: ../src/easytag.c:3598
+#: ../src/easytag.c:3580
 msgid "Searching for audio files…"
 msgstr "Recherche de fichiers audio en cours…"
 
-#: ../src/easytag.c:3599
+#: ../src/easytag.c:3581
 msgid "Searching"
 msgstr "Recherche en cours"
 
-#: ../src/easytag.c:4265
+#: ../src/easytag.c:4247
 msgid "Select a directory to browse"
 msgstr "Sélectionner un répertoire à parcourir"
 
 #. Menu items
-#: ../src/easytag.c:4412
+#: ../src/easytag.c:4393
 msgid "Tag selected files with this field"
 msgstr "Étiqueter les fichiers sélectionnés avec ce champ"
 
-#: ../src/easytag.c:4424 ../src/scan.c:2318
+#: ../src/easytag.c:4405 ../src/scan_dialog.c:2128
 msgid "Convert '_' and '%20' to spaces"
 msgstr "Remplacer « _ » et « %20 » par des espaces"
 
-#: ../src/easytag.c:4431 ../src/scan.c:2320
+#: ../src/easytag.c:4412 ../src/scan_dialog.c:2130
 msgid "Convert ' ' to '_'"
 msgstr "Remplacer «   » par « _ »"
 
-#: ../src/easytag.c:4442
+#: ../src/easytag.c:4423
 msgid "All uppercase"
 msgstr "Tout en majuscules"
 
-#: ../src/easytag.c:4449
+#: ../src/easytag.c:4430
 msgid "All lowercase"
 msgstr "Tout en minuscules"
 
-#: ../src/easytag.c:4456
+#: ../src/easytag.c:4437
 msgid "First letter uppercase"
 msgstr "Première lettre en majuscule"
 
-#: ../src/easytag.c:4463
+#: ../src/easytag.c:4444
 msgid "First letter uppercase of each word"
 msgstr "Première lettre de chaque mot en majuscule"
 
-#: ../src/easytag.c:4474 ../src/prefs.c:1023 ../src/scan.c:2418
+#: ../src/easytag.c:4455 ../src/prefs.c:1023 ../src/scan_dialog.c:2254
 msgid "Remove spaces"
 msgstr "Supprimer les espaces"
 
-#: ../src/easytag.c:4481
+#: ../src/easytag.c:4462
 msgid "Insert space before uppercase letter"
 msgstr "Insérer une espace avant une majuscule"
 
-#: ../src/easytag.c:4488
+#: ../src/easytag.c:4469
 msgid "Remove duplicate spaces or underscores"
 msgstr "Supprimer les espaces ou soulignements en double"
 
-#: ../src/easytag.c:4495
+#: ../src/easytag.c:4476
 msgid "Remove all text"
 msgstr "Supprimer tous le texte"
 
-#: ../src/easytag.c:4514
+#: ../src/easytag.c:4495
 msgid "EasyTAG: Normal exit."
 msgstr "EasyTAG : fermeture normale."
 
-#: ../src/easytag.c:4566
+#: ../src/easytag.c:4547
 msgid "Do you want to save them before quitting?"
 msgstr "Voulez vous les enregistrer avant de quitter ?"
 
-#: ../src/easytag.c:4593
+#: ../src/easytag.c:4574
 msgid "Do you really want to quit?"
 msgstr "Voulez-vous réellement quitter le programme ?"
 
-#: ../src/et_core.c:510
+#: ../src/et_core.c:545
 #, c-format
 msgid "Error reading tag from ogg file (%s)"
 msgstr "Erreur lors de la lecture de l'étiquette d'un fichier ogg (%s)"
 
-#: ../src/et_core.c:539
+#: ../src/et_core.c:574
 #, c-format
 msgid "Error reading tag from Opus file (%s)"
 msgstr "Erreur lors de la lecture de l'étiquette d'un fichier Opus (%s)"
 
-#: ../src/et_core.c:682
+#: ../src/et_core.c:717
 #, c-format
 msgid "Automatic corrections applied for file '%s'."
 msgstr "Correction automatique appliquée sur le fichier « %s »."
 
-#: ../src/et_core.c:2707
+#: ../src/et_core.c:2753
 msgid "ID3 Tag"
 msgstr "Étiquette ID3"
 
-#: ../src/et_core.c:2713
+#: ../src/et_core.c:2759
 msgid "Ogg Vorbis Tag"
 msgstr "Étiquette Ogg Vorbis"
 
-#: ../src/et_core.c:2719
+#: ../src/et_core.c:2765
 msgid "FLAC Vorbis Tag"
 msgstr "Étiquette FLAC Vorbis"
 
-#: ../src/et_core.c:2724
+#: ../src/et_core.c:2770
 msgid "APE Tag"
 msgstr "Étiquette APE"
 
-#: ../src/et_core.c:2729
+#: ../src/et_core.c:2775
 msgid "MP4/M4A/AAC Tag"
 msgstr "Étiquette MP4/M4A/AAC"
 
-#: ../src/et_core.c:2735
+#: ../src/et_core.c:2781
 msgid "Wavpack Tag"
 msgstr "Étiquette Wavpack"
 
-#: ../src/et_core.c:2741
+#: ../src/et_core.c:2787
 msgid "Opus Tag"
 msgstr "Étiquette Opus"
 
-#: ../src/et_core.c:2761
+#: ../src/et_core.c:2807
 msgid "MP3 File"
 msgstr "Fichier MP3"
 
-#: ../src/et_core.c:2765
+#: ../src/et_core.c:2811
 msgid "MP2 File"
 msgstr "Fichier MP2"
 
-#: ../src/et_core.c:2771
+#: ../src/et_core.c:2817
 msgid "Ogg Vorbis File"
 msgstr "Fichier Ogg Vorbis"
 
-#: ../src/et_core.c:2777
+#: ../src/et_core.c:2823
 msgid "Speex File"
 msgstr "Fichier Speex"
 
-#: ../src/et_core.c:2783
+#: ../src/et_core.c:2829
 msgid "FLAC File"
 msgstr "Fichier FLAC"
 
-#: ../src/et_core.c:2788
+#: ../src/et_core.c:2834
 msgid "MusePack File"
 msgstr "Fichier MusePack"
 
-#: ../src/et_core.c:2792
+#: ../src/et_core.c:2838
 msgid "Monkey's Audio File"
 msgstr "Fichier Monkey's Audio"
 
-#: ../src/et_core.c:2797
+#: ../src/et_core.c:2843
 msgid "MP4/AAC File"
 msgstr "Fichier MP4/AAC"
 
-#: ../src/et_core.c:2803
+#: ../src/et_core.c:2849
 msgid "Wavpack File"
 msgstr "Fichier Wavpack"
 
-#: ../src/et_core.c:2809
+#: ../src/et_core.c:2855
 msgid "Opus File"
 msgstr "Fichier Opus"
 
-#: ../src/et_core.c:2868 ../src/et_core.c:2923
+#: ../src/et_core.c:2914 ../src/et_core.c:2969
 msgid "File not found"
 msgstr "Fichier introuvable"
 
-#: ../src/et_core.c:2873
+#: ../src/et_core.c:2919
 #, c-format
 msgid "Cannot query file information (%s)"
 msgstr "Impossible d'obtenir les informations du fichier (%s)"
 
-#: ../src/et_core.c:2907
+#: ../src/et_core.c:2953
 msgid "Read-only file"
 msgstr "Fichier en lecture seule"
 
 #. And refresh the number of files in this directory
-#: ../src/et_core.c:2971
+#: ../src/et_core.c:3017
 #, c-format
 msgid "One file"
 msgid_plural "%u files"
 msgstr[0] "Un fichier"
 msgstr[1] "%u fichiers"
 
-#: ../src/et_core.c:3175
+#: ../src/et_core.c:3221
 #, c-format
 msgid "Images (%d)"
 msgstr "Images (%d)"
 
 # Ce sont des kbits/s, pas des koctets/s
 #. Bitrate
-#: ../src/et_core.c:3217 ../src/flac_header.c:205
-#: ../src/monkeyaudio_header.c:86 ../src/mp4_header.c:134
+#: ../src/et_core.c:3263 ../src/flac_header.c:205
+#: ../src/monkeyaudio_header.c:86 ../src/mp4_header.cc:132
 #: ../src/mpeg_header.c:206 ../src/musepack_header.c:88
 #: ../src/ogg_header.c:401 ../src/opus_header.c:227 ../src/wavpack_header.c:78
 #, c-format
@@ -2470,31 +2459,31 @@ msgid "%d kb/s"
 msgstr "%d kb/s"
 
 #. Samplerate
-#: ../src/et_core.c:3222 ../src/flac_header.c:210
-#: ../src/monkeyaudio_header.c:91 ../src/mp4_header.c:139
+#: ../src/et_core.c:3268 ../src/flac_header.c:210
+#: ../src/monkeyaudio_header.c:91 ../src/mp4_header.cc:137
 #: ../src/mpeg_header.c:211 ../src/musepack_header.c:93
 #: ../src/ogg_header.c:406 ../src/opus_header.c:232 ../src/wavpack_header.c:83
 #, c-format
 msgid "%d Hz"
 msgstr "%d Hz"
 
-#: ../src/et_core.c:3368 ../src/scan.c:686
+#: ../src/et_core.c:3414 ../src/scan_dialog.c:688
 #, c-format
 msgid "Could not convert filename '%s' into system filename encoding"
 msgstr ""
 "Impossible de convertir le nom du fichier « %s » vers le codage du nom de "
 "fichiers système"
 
-#: ../src/et_core.c:3370
+#: ../src/et_core.c:3416
 msgid "Try setting the environment variable G_FILENAME_ENCODING."
 msgstr ""
 "Essai de paramétrage de la variable d'environnement G_FILENAME_ENCODING."
 
-#: ../src/et_core.c:3371 ../src/scan.c:688
+#: ../src/et_core.c:3417 ../src/scan_dialog.c:690
 msgid "Filename translation"
 msgstr "Conversion du nom de fichier"
 
-#: ../src/et_core.c:4076
+#: ../src/et_core.c:4123
 #, c-format
 msgid "Error writing tag type %d to file %s (%s)"
 msgstr ""
@@ -2504,7 +2493,7 @@ msgstr ""
 #. Mode
 #. mpeg4ip library seems to always return -1
 #. Mode
-#: ../src/flac_header.c:215 ../src/mp4_header.c:145 ../src/ogg_header.c:411
+#: ../src/flac_header.c:215 ../src/mp4_header.cc:143 ../src/ogg_header.c:411
 #: ../src/opus_header.c:237 ../src/wavpack_header.c:88
 msgid "Channels:"
 msgstr "Canaux :"
@@ -2514,7 +2503,7 @@ msgstr "Canaux :"
 msgid "Error while opening file: '%s' as FLAC (%s)."
 msgstr "Erreur lors de l'ouverture du fichier : « %s » en FLAC (%s)."
 
-#: ../src/flac_tag.c:352 ../src/ogg_tag.c:310
+#: ../src/flac_tag.c:352 ../src/ogg_tag.c:304
 #, c-format
 msgid ""
 "The year value '%s' seems to be invalid in file '%s'. The information will "
@@ -2533,17 +2522,17 @@ msgstr "Le bloc image n'est pas valide : « %s »"
 msgid "Error: Failed to write comments to file '%s' (%s)."
 msgstr "Erreur : impossible d'écrire les commentaires au fichier « %s » (%s)."
 
-#: ../src/flac_tag.c:1099 ../src/ogg_tag.c:1166
+#: ../src/flac_tag.c:1099 ../src/ogg_tag.c:1161
 #, c-format
 msgid "Written tag of '%s'"
 msgstr "L'étiquette de « %s » a été écrite"
 
-#: ../src/id3_tag.c:158
+#: ../src/id3_tag.c:205
 #, c-format
 msgid "Error while reading file: '%s' (%s)"
 msgstr "Erreur lors de l'ouverture du fichier : « %s » (%s)."
 
-#: ../src/id3_tag.c:170
+#: ../src/id3_tag.c:217
 #, c-format
 msgid ""
 "As the following corrupted file '%s' will cause an error in id3lib, it will "
@@ -2552,31 +2541,31 @@ msgstr ""
 "Comme ce fichier corrompu « %s » va causer une erreur dans id3lib, il ne "
 "sera pas traité."
 
-#: ../src/id3_tag.c:172
+#: ../src/id3_tag.c:219
 msgid "Corrupted file"
 msgstr "Fichier corrompu"
 
-#: ../src/id3_tag.c:555
+#: ../src/id3_tag.c:592
 #, c-format
 msgid "Removed tag of '%s'"
 msgstr "L'étiquette de « %s » a été supprimée"
 
-#: ../src/id3_tag.c:559 ../src/id3_tag.c:659
+#: ../src/id3_tag.c:596 ../src/id3_tag.c:696
 #, c-format
 msgid "Error while removing ID3v1 tag of '%s' (%s)"
 msgstr "Erreur lors de la suppression de l'étiquette ID3v1 de « %s » (%s)"
 
-#: ../src/id3_tag.c:561 ../src/id3_tag.c:631
+#: ../src/id3_tag.c:598 ../src/id3_tag.c:668
 #, c-format
 msgid "Error while removing ID3v2 tag of '%s' (%s)"
 msgstr "Erreur lors de la suppression de l'étiquette ID3v2 de « %s » (%s)"
 
-#: ../src/id3_tag.c:580
+#: ../src/id3_tag.c:617
 #, c-format
 msgid "Error while updating ID3v2 tag of '%s' (%s)"
 msgstr "Erreur lors de la mise à jour de l'étiquette ID3v2 de « %s » (%s)"
 
-#: ../src/id3_tag.c:608
+#: ../src/id3_tag.c:645
 msgid ""
 "You have tried to save this tag to Unicode but it was detected that your "
 "version of id3lib is buggy"
@@ -2584,7 +2573,7 @@ msgstr ""
 "Vous avez essayé d'enregistrer cette étiquette en Unicode, mais il a été "
 "détecté que votre version d'id3lib est buggée."
 
-#: ../src/id3_tag.c:610
+#: ../src/id3_tag.c:647
 #, c-format
 msgid ""
 "If you reload this file, some characters in the tag may not be displayed "
@@ -2603,90 +2592,90 @@ msgstr ""
 "\n"
 "Fichier : %s"
 
-#: ../src/id3_tag.c:617
+#: ../src/id3_tag.c:654
 msgid "Buggy id3lib"
 msgstr "Bug d'id3lib"
 
-#: ../src/id3_tag.c:651
+#: ../src/id3_tag.c:688
 #, c-format
 msgid "Error while updating ID3v1 tag of '%s' (%s)"
 msgstr "Erreur lors de la mise à jour de l'étiquette ID3v1 de « %s » (%s)"
 
-#: ../src/id3_tag.c:665 ../src/id3v24_tag.c:1048
+#: ../src/id3_tag.c:702 ../src/id3v24_tag.c:1108
 #, c-format
 msgid "Updated tag of '%s'"
 msgstr "L'étiquette de « %s » a été mise à jour"
 
-#: ../src/id3_tag.c:684
+#: ../src/id3_tag.c:721
 msgid "No error reported"
 msgstr "Aucune erreur n'a été rapportée"
 
-#: ../src/id3_tag.c:686
+#: ../src/id3_tag.c:723
 msgid "No available memory"
 msgstr "Pas de mémoire disponible"
 
-#: ../src/id3_tag.c:688
+#: ../src/id3_tag.c:725
 msgid "No data to parse"
 msgstr "Aucune donnée à analyser"
 
-#: ../src/id3_tag.c:690
+#: ../src/id3_tag.c:727
 msgid "Improperly formatted data"
 msgstr "Données mal formatées"
 
-#: ../src/id3_tag.c:692
+#: ../src/id3_tag.c:729
 msgid "No buffer to write to"
 msgstr "Aucun tampon vers lequel écrire"
 
-#: ../src/id3_tag.c:694
+#: ../src/id3_tag.c:731
 msgid "Buffer is too small"
 msgstr "Le tampon est trop petit"
 
-#: ../src/id3_tag.c:696
+#: ../src/id3_tag.c:733
 msgid "Invalid frame ID"
 msgstr "Identifiant du cadre non valide"
 
-#: ../src/id3_tag.c:698
+#: ../src/id3_tag.c:735
 msgid "Requested field not found"
 msgstr "Le champ demandé n'a pas été trouvé"
 
-#: ../src/id3_tag.c:700
+#: ../src/id3_tag.c:737
 msgid "Unknown field type"
 msgstr "Type de champ inconnu"
 
-#: ../src/id3_tag.c:702
+#: ../src/id3_tag.c:739
 msgid "Tag is already attached to a file"
 msgstr "L'étiquette est déjà jointe à un fichier"
 
-#: ../src/id3_tag.c:704
+#: ../src/id3_tag.c:741
 msgid "Invalid tag version"
 msgstr "Version de l'étiquette non valide"
 
-#: ../src/id3_tag.c:706
+#: ../src/id3_tag.c:743
 msgid "No file to parse"
 msgstr "Aucun fichier à analyser"
 
-#: ../src/id3_tag.c:708
+#: ../src/id3_tag.c:745
 msgid "Attempting to write to a read-only file"
 msgstr "Tentative d'écriture vers un fichier en lecture seule"
 
-#: ../src/id3_tag.c:710
+#: ../src/id3_tag.c:747
 msgid "Error in compression/uncompression"
 msgstr "Erreur dans la compression/décompression"
 
-#: ../src/id3_tag.c:712
+#: ../src/id3_tag.c:749
 msgid "Unknown error message"
 msgstr "Message d'erreur inconnu"
 
-#: ../src/id3_tag.c:1316
+#: ../src/id3_tag.c:1357
 #, c-format
 msgid "Error while creating temporary file: '%s'"
 msgstr "Erreur lors de la création d'un fichier temporaire : « %s »"
 
-#: ../src/id3_tag.c:1323
+#: ../src/id3_tag.c:1364
 msgid "Error while creating temporary file"
 msgstr "Erreur lors de la création du fichier temporaire"
 
-#: ../src/id3_tag.c:1343
+#: ../src/id3_tag.c:1384
 #, c-format
 msgid "Error while writing to file: '%s' (%s)"
 msgstr "Erreur lors de l'écriture dans le fichier : « %s » (%s)"
@@ -2696,7 +2685,7 @@ msgstr "Erreur lors de l'écriture dans le fichier : « %s » (%s)"
 #. * missing (not read for some reason) while reading from
 #. * the file.
 #.
-#: ../src/id3v24_tag.c:1503
+#: ../src/id3v24_tag.c:1563
 #, c-format
 msgid "Cannot write tag of file ‘%s’ (a byte was missing)"
 msgid_plural "Cannot write tag of file ‘%s’ (%s bytes were missing)"
@@ -2705,68 +2694,68 @@ msgstr[0] ""
 msgstr[1] ""
 "Impossible d'écrire l'étiquette dans le fichier « %s » (%s octets manquaient)"
 
-#: ../src/id3v24_tag.c:1524
+#: ../src/id3v24_tag.c:1584
 #, c-format
 msgid "Cannot save tag of file '%s'"
 msgstr "Impossible d'enregistrer l'étiquette dans le fichier « %s »"
 
-#: ../src/id3v24_tag.c:1535
+#: ../src/id3v24_tag.c:1595
 #, c-format
 msgid "Size error while saving tag of '%s'"
 msgstr "Erreur de taille lors de l'enregistrement de l'étiquette de « %s »"
 
-#: ../src/log.c:100
+#: ../src/log.c:98
 msgid "Log"
 msgstr "Journal"
 
-#: ../src/misc.c:719
+#: ../src/misc.c:716
 msgid "You must type a program name"
 msgstr "Vous devez saisir un nom de programme"
 
-#: ../src/misc.c:720
+#: ../src/misc.c:717
 msgid "Program Name Error"
 msgstr "Erreur de nom de programme"
 
-#: ../src/misc.c:799
+#: ../src/misc.c:796
 #, c-format
 msgid "Executed command: %s"
 msgstr "Commande exécutée : %s"
 
-#: ../src/misc.c:806
+#: ../src/misc.c:803
 #, c-format
 msgid "Failed to launch program: %s"
 msgstr "Échec du lancement du programme : %s"
 
-#: ../src/misc.c:823
+#: ../src/misc.c:820
 msgid "Select File"
 msgstr "Sélectionner un fichier"
 
-#: ../src/misc.c:829
+#: ../src/misc.c:826
 msgid "Select Directory"
 msgstr "Sélectionner un répertoire"
 
-#: ../src/misc.c:1141
+#: ../src/misc.c:1138
 msgid "Generate Playlist"
 msgstr "Générer une liste de lecture"
 
-#: ../src/misc.c:1165
+#: ../src/misc.c:1162
 msgid "M3U Playlist Name"
 msgstr "Nom de la liste de lecture M3U"
 
-#: ../src/misc.c:1180
+#: ../src/misc.c:1177
 msgid "Use directory name"
 msgstr "Utiliser le nom du répertoire"
 
 #. Playlist options
-#: ../src/misc.c:1197
+#: ../src/misc.c:1194
 msgid "Playlist Options"
 msgstr "Options de la liste de lecture"
 
-#: ../src/misc.c:1203
+#: ../src/misc.c:1200
 msgid "Include only the selected files"
 msgstr "Inclure seulement les fichiers sélectionnés"
 
-#: ../src/misc.c:1206
+#: ../src/misc.c:1203
 msgid ""
 "If activated, only the selected files will be written in the playlist file. "
 "Else, all the files will be written."
@@ -2774,29 +2763,29 @@ msgstr ""
 "Si activé, seuls les fichiers sélectionnés sont écrits dans la liste de "
 "lecture. Si désactivé, tous les fichiers sont écrits."
 
-#: ../src/misc.c:1209
+#: ../src/misc.c:1206
 msgid "Use full path for files in playlist"
 msgstr "Utiliser le chemin absolu pour les fichiers de la liste de lecture"
 
-#: ../src/misc.c:1212
+#: ../src/misc.c:1209
 msgid "Use relative path for files in playlist"
 msgstr "Utiliser le chemin relatif pour les fichiers de la liste de lecture"
 
 #. Create playlist in parent directory
-#: ../src/misc.c:1218
+#: ../src/misc.c:1215
 msgid "Create playlist in the parent directory"
 msgstr "Créer la liste de lecture dans le répertoire parent"
 
-#: ../src/misc.c:1221
+#: ../src/misc.c:1218
 msgid "If activated, the playlist will be created in the parent directory."
 msgstr "Si activé, la liste de lecture est créée dans le répertoire parent."
 
 #. DOS Separator
-#: ../src/misc.c:1225
+#: ../src/misc.c:1222
 msgid "Use DOS directory separator"
 msgstr "Utiliser le séparateur de répertoires DOS"
 
-#: ../src/misc.c:1231
+#: ../src/misc.c:1228
 msgid ""
 "This option replaces the UNIX directory separator '/' into DOS separator "
 "'\\'."
@@ -2804,49 +2793,49 @@ msgstr ""
 "Cette option remplace le séparateur de répertoires UNIX « / » par celui de "
 "DOS « \\ »."
 
-#: ../src/misc.c:1240
+#: ../src/misc.c:1237
 msgid "Playlist Content"
 msgstr "Contenu de la liste de lecture"
 
-#: ../src/misc.c:1246
+#: ../src/misc.c:1243
 msgid "Write only list of files"
 msgstr "Écrire seulement la liste des fichiers"
 
-#: ../src/misc.c:1250
+#: ../src/misc.c:1247
 msgid "Write info using filename"
 msgstr "Écrire les informations en utilisant le nom du fichier"
 
-#: ../src/misc.c:1253
+#: ../src/misc.c:1250
 msgid "Write info using:"
 msgstr "Écrire les informations en utilisant :"
 
-#: ../src/misc.c:1467
+#: ../src/misc.c:1464
 #, c-format
 msgid "Cannot write playlist file '%s'"
 msgstr "Impossible d'écrire la liste de lecture « %s »"
 
-#: ../src/misc.c:1471
+#: ../src/misc.c:1468
 msgid "Playlist File Error"
 msgstr "Erreur du fichier liste de lecture"
 
-#: ../src/misc.c:1479
+#: ../src/misc.c:1476
 #, c-format
 msgid "Written playlist file '%s'"
 msgstr "La liste de lecture « %s » a été écrite"
 
-#: ../src/misc.c:1543 ../src/scan.c:2903 ../src/scan.c:2965
+#: ../src/misc.c:1540 ../src/scan_dialog.c:2747 ../src/scan_dialog.c:2809
 msgid "Invalid scanner mask"
 msgstr "Masque de scanner non valide"
 
-#: ../src/misc.c:1907
+#: ../src/misc.c:1904
 msgid "CD"
 msgstr "CD"
 
-#: ../src/misc.c:1929
+#: ../src/misc.c:1926
 msgid "Find Files"
 msgstr "Rechercher des fichiers"
 
-#: ../src/misc.c:1961
+#: ../src/misc.c:1958
 msgid ""
 "Type the word to search into files. Or type nothing to display all files."
 msgstr ""
@@ -2854,13 +2843,13 @@ msgstr ""
 "afficher tous les fichiers."
 
 #. Where...
-#: ../src/misc.c:1967
+#: ../src/misc.c:1964
 msgid "In:"
 msgstr "Dans :"
 
 #. Translators: This option is for the previous 'in' option. For instance,
 #. * translate this as "Search" "In:" "the Filename".
-#: ../src/misc.c:1972
+#: ../src/misc.c:1969
 msgid "the Filename"
 msgstr "le nom du fichier"
 
@@ -2869,83 +2858,83 @@ msgstr "le nom du fichier"
 #. * Note: label changed to "the Tag" (to be the only one) to fix a Hungarian
 #. * grammatical problem (which uses one word to say "in the tag" like here)
 #.
-#: ../src/misc.c:1978
+#: ../src/misc.c:1975
 msgid "the Tag"
 msgstr "l'étiquette"
 
 #. Property of the search
-#: ../src/misc.c:1989 ../src/prefs.c:335
+#: ../src/misc.c:1986 ../src/prefs.c:335
 msgid "Case sensitive"
 msgstr "Sensible à la casse"
 
-#: ../src/misc.c:2216
+#: ../src/misc.c:2213
 msgid "Ready to search…"
 msgstr "Prêt à rechercher…"
 
-#: ../src/misc.c:2436
+#: ../src/misc.c:2433
 #, c-format
 msgid "Found one file"
 msgid_plural "Found %d files"
 msgstr[0] "%d fichier trouvé"
 msgstr[1] "%d fichiers trouvés"
 
-#: ../src/misc.c:2721
+#: ../src/misc.c:2718
 msgid "Load Filenames From a Text File"
 msgstr "Charger les noms de fichiers à partir d'un fichier texte"
 
-#: ../src/misc.c:2750
+#: ../src/misc.c:2747
 msgid "File:"
 msgstr "Fichier :"
 
 #. Button 'load'
 #. the signal attached to this button, to load the file, is placed after the LoadFileContentList definition
-#: ../src/misc.c:2769
+#: ../src/misc.c:2766
 msgid " Load "
 msgstr " Charger "
 
-#: ../src/misc.c:2787
+#: ../src/misc.c:2784
 msgid "Content of Text File"
 msgstr "Contenu du fichier texte"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2808 ../src/misc.c:2903
+#: ../src/misc.c:2805 ../src/misc.c:2900
 msgid "Insert a blank line before the selected line"
 msgstr "Insérer une ligne vide avant la ligne sélectionnée"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2817 ../src/misc.c:2912
+#: ../src/misc.c:2814 ../src/misc.c:2909
 msgid "Delete the selected line"
 msgstr "Supprimer la ligne sélectionnée"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2826 ../src/misc.c:2921 ../src/misc.c:3407
+#: ../src/misc.c:2823 ../src/misc.c:2918 ../src/misc.c:3399
 msgid "Delete all blank lines"
 msgstr "Supprimer toutes les lignes vides"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2838 ../src/misc.c:2933
+#: ../src/misc.c:2835 ../src/misc.c:2930
 msgid "Move up the selected line"
 msgstr "Remonter la ligne sélectionnée"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2847 ../src/misc.c:2942
+#: ../src/misc.c:2844 ../src/misc.c:2939
 msgid "Move down the selected line"
 msgstr "Descendre la ligne sélectionnée"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2859 ../src/misc.c:2954 ../src/misc.c:3431
+#: ../src/misc.c:2856 ../src/misc.c:2951 ../src/misc.c:3423
 msgid "Reload"
 msgstr "Recharger"
 
-#: ../src/misc.c:2881
+#: ../src/misc.c:2878
 msgid "List of Files"
 msgstr "Liste des fichiers"
 
-#: ../src/misc.c:2976
+#: ../src/misc.c:2973
 msgid "Selected line:"
 msgstr "Ligne sélectionnée :"
 
-#: ../src/misc.c:2994
+#: ../src/misc.c:2991
 msgid ""
 "When activating this option, after loading the filenames, the current "
 "selected scanner will be ran (the scanner window must be opened)."
@@ -2953,34 +2942,34 @@ msgstr ""
 "En activant cette option, le scanner actuel sera lancé après le chargement "
 "du nom des fichiers (la boîte de dialogue du scanner doit être ouverte)."
 
-#: ../src/misc.c:3081
+#: ../src/misc.c:3078
 #, c-format
 msgid "Cannot retrieve file info (%s)"
 msgstr "Impossible de récupérer les informations du fichier (%s)"
 
-#: ../src/misc.c:3143
+#: ../src/misc.c:3141
 #, c-format
 msgid "Can't open file '%s' (%s)"
 msgstr "Impossible d'ouvrir le fichier « %s » (%s)"
 
-#: ../src/misc.c:3179
+#: ../src/misc.c:3170
 #, c-format
 msgid "Error reading file (%s)"
 msgstr "Erreur lors de la lecture du fichier (%s)"
 
-#: ../src/misc.c:3395
+#: ../src/misc.c:3387
 msgid "Insert a blank line"
 msgstr "Insérer une ligne vide"
 
-#: ../src/misc.c:3401
+#: ../src/misc.c:3393
 msgid "Delete this line"
 msgstr "Supprimer cette ligne"
 
-#: ../src/misc.c:3416
+#: ../src/misc.c:3408
 msgid "Move up this line"
 msgstr "Remonter cette ligne"
 
-#: ../src/misc.c:3422
+#: ../src/misc.c:3414
 msgid "Move down this line"
 msgstr "Descendre cette ligne"
 
@@ -2990,26 +2979,21 @@ msgstr "Descendre cette ligne"
 msgid "Profile:"
 msgstr "Profil :"
 
-#: ../src/mp4_header.c:63 ../src/mp4_tag.c:65 ../src/mp4_tag.c:186
+#: ../src/mp4_header.cc:59 ../src/mp4_tag.cc:91 ../src/mp4_tag.cc:284
 msgid "MP4 format invalid"
 msgstr "Format MP4 non valide"
 
-#: ../src/mp4_header.c:72 ../src/mp4_tag.c:74
-#, c-format
-msgid "File contains no audio track: '%s'"
-msgstr "Le fichier ne contient aucune piste audio : « %s »"
-
-#: ../src/mp4_header.c:82
+#: ../src/mp4_header.cc:69
 #, c-format
 msgid "Error reading properties from file: '%s'"
 msgstr "Erreur lors de la lecture des propriétés du fichier : « %s »"
 
-#: ../src/mp4_header.c:132 ../src/mpeg_header.c:204
+#: ../src/mp4_header.cc:130 ../src/mpeg_header.c:204
 #, c-format
 msgid "~%d kb/s"
 msgstr "~%d kb/s"
 
-#: ../src/mp4_tag.c:85 ../src/mp4_tag.c:194
+#: ../src/mp4_tag.cc:101 ../src/mp4_tag.cc:293
 #, c-format
 msgid "Error reading tags from file: '%s'"
 msgstr "Erreur lors de la lecture de l'étiquette du fichier : « %s »"
@@ -3087,184 +3071,184 @@ msgstr ""
 msgid "Error: Failed to open file: '%s' as Vorbis (%s)."
 msgstr "Erreur lors de l'ouverture du fichier : « %s » en Vorbis (%s)."
 
-#: ../src/ogg_tag.c:712 ../src/ogg_tag.c:887
+#: ../src/ogg_tag.c:706 ../src/ogg_tag.c:881
 #, c-format
 msgid "Warning: The Ogg Vorbis file '%s' contains an ID3v2 tag."
 msgstr "Attention : le fichier Ogg Vorbis « %s » contient une étiquette ID3v2."
 
-#: ../src/ogg_tag.c:1035 ../src/picture.c:1257
+#: ../src/ogg_tag.c:1030 ../src/picture.c:1082
 #, c-format
 msgid "Error with 'loader_write': %s"
 msgstr "Erreur de « loader_write » : %s"
 
-#: ../src/ogg_tag.c:1050 ../src/picture.c:1180
+#: ../src/ogg_tag.c:1045 ../src/picture.c:1005
 #, c-format
 msgid "Error with 'loader_close': %s"
 msgstr "Erreur de « loader_close » : %s"
 
-#: ../src/picture.c:104
+#: ../src/picture.c:244 ../src/picture.c:269
 #, c-format
-msgid "Image file not saved: %s"
-msgstr "Fichier image non enregistré : %s"
+msgid "Image file not loaded: %s"
+msgstr "Fichier image non chargé : %s"
 
-#: ../src/picture.c:154
+#: ../src/picture.c:261
 #, c-format
 msgid "Cannot open file: '%s'"
 msgstr "Impossible d'ouvrir le fichier : « %s »"
 
-#: ../src/picture.c:158
+#: ../src/picture.c:265
 msgid "Image File Error"
 msgstr "Erreur du fichier image"
 
-#: ../src/picture.c:162 ../src/picture.c:424
-#, c-format
-msgid "Image file not loaded: %s"
-msgstr "Fichier image non chargé : %s"
-
-#: ../src/picture.c:446
+#: ../src/picture.c:276
 msgid "Image file loaded"
 msgstr "Fichier image chargé"
 
-#: ../src/picture.c:504
+#: ../src/picture.c:334
 msgid "Add Images"
 msgstr "Ajouter les images"
 
-#: ../src/picture.c:514 ../src/picture.c:874
+#: ../src/picture.c:344 ../src/picture.c:701
 msgid "All Files"
 msgstr "Tous les fichiers"
 
-#: ../src/picture.c:520 ../src/picture.c:880
+#: ../src/picture.c:350 ../src/picture.c:707
 msgid "PNG and JPEG"
 msgstr "PNG et JPEG"
 
-#: ../src/picture.c:651
+#: ../src/picture.c:477
 #, c-format
 msgid "Image Properties %d/%d"
 msgstr "Propriétés de l'image %d/%d"
 
-#: ../src/picture.c:675
+#: ../src/picture.c:503
 msgid "Image Type"
 msgstr "Type d'image"
 
 #. Description of the picture
-#: ../src/picture.c:734
+#: ../src/picture.c:561
 msgid "Image Description:"
 msgstr "Description de l'image :"
 
-#: ../src/picture.c:861
+#: ../src/picture.c:688
 #, c-format
 msgid "Save Image %d/%d"
 msgstr "Enregistrer l'image %d/%d"
 
-#: ../src/picture.c:1021
+#: ../src/picture.c:763
+#, c-format
+msgid "Image file not saved: %s"
+msgstr "Fichier image non enregistré : %s"
+
+#: ../src/picture.c:846
 msgid "JPEG image"
 msgstr "Image JPEG"
 
-#: ../src/picture.c:1023
+#: ../src/picture.c:848
 msgid "PNG image"
 msgstr "Image PNG"
 
-#: ../src/picture.c:1025
+#: ../src/picture.c:850
 msgid "GIF image"
 msgstr "Image GIF"
 
-#: ../src/picture.c:1027
+#: ../src/picture.c:852
 msgid "Unknown image"
 msgstr "Image inconnue"
 
-#: ../src/picture.c:1039
+#: ../src/picture.c:864
 msgid "32x32 pixel PNG file icon"
 msgstr "Icône PNG de 32x32 pixels"
 
-#: ../src/picture.c:1041
+#: ../src/picture.c:866
 msgid "Other file icon"
 msgstr "Autre icône"
 
-#: ../src/picture.c:1043
+#: ../src/picture.c:868
 msgid "Cover (front)"
 msgstr "Couverture (face avant)"
 
-#: ../src/picture.c:1045
+#: ../src/picture.c:870
 msgid "Cover (back)"
 msgstr "Couverture (face arrière)"
 
-#: ../src/picture.c:1047
+#: ../src/picture.c:872
 msgid "Leaflet page"
 msgstr "Page du livret"
 
-#: ../src/picture.c:1049
+#: ../src/picture.c:874
 msgid "Media (e.g. label side of CD)"
 msgstr "Média (p.ex. le côté imprimé du CD)"
 
-#: ../src/picture.c:1051
+#: ../src/picture.c:876
 msgid "Lead artist/lead performer/soloist"
 msgstr "Artiste principal/interprète principal/soliste"
 
-#: ../src/picture.c:1053
+#: ../src/picture.c:878
 msgid "Artist/performer"
 msgstr "Artiste/interprète"
 
-#: ../src/picture.c:1055
+#: ../src/picture.c:880
 msgid "Conductor"
 msgstr "Chef d'orchestre"
 
-#: ../src/picture.c:1057
+#: ../src/picture.c:882
 msgid "Band/Orchestra"
 msgstr "Groupe/orchestre"
 
-#: ../src/picture.c:1061
+#: ../src/picture.c:886
 msgid "Lyricist/text writer"
 msgstr "Parolier/écrivain"
 
-#: ../src/picture.c:1063
+#: ../src/picture.c:888
 msgid "Recording location"
 msgstr "Lieu d'enregistrement"
 
-#: ../src/picture.c:1065
+#: ../src/picture.c:890
 msgid "During recording"
 msgstr "Pendant l'enregistrement"
 
-#: ../src/picture.c:1067
+#: ../src/picture.c:892
 msgid "During performance"
 msgstr "Pendant l'interprétation"
 
-#: ../src/picture.c:1069
+#: ../src/picture.c:894
 msgid "Movie/video screen capture"
 msgstr "Film/capture d'écran vidéo"
 
-#: ../src/picture.c:1071
+#: ../src/picture.c:896
 msgid "A bright colored fish"
 msgstr "Un poisson aux couleurs vives"
 
-#: ../src/picture.c:1073
+#: ../src/picture.c:898
 msgid "Illustration"
 msgstr "Illustration"
 
-#: ../src/picture.c:1075
+#: ../src/picture.c:900
 msgid "Band/Artist logotype"
 msgstr "Logo du groupe/de l'artiste"
 
-#: ../src/picture.c:1077
+#: ../src/picture.c:902
 msgid "Publisher/studio logotype"
 msgstr "Sigle de la maison d'édition/du studio"
 
-#: ../src/picture.c:1081
+#: ../src/picture.c:906
 msgid "Unknown image type"
 msgstr "Type d'image inconnu"
 
-#: ../src/picture.c:1111 ../src/picture.c:1122
+#: ../src/picture.c:936 ../src/picture.c:947
 msgid "pixels"
 msgstr "pixels"
 
-#: ../src/picture.c:1112 ../src/picture.c:1123
+#: ../src/picture.c:937 ../src/picture.c:948
 msgid "Type"
 msgstr "Type"
 
-#: ../src/picture.c:1124
+#: ../src/picture.c:949
 msgid "Description"
 msgstr "Description"
 
-#: ../src/picture.c:1240
+#: ../src/picture.c:1065
 msgid ""
 "Cannot display the image because not enough data has been read to determine "
 "how to create the image buffer."
@@ -3272,17 +3256,17 @@ msgstr ""
 "Impossible d'afficher l'image, car il n'y a pas assez de données lues pour "
 "déterminer comment créer le tampon de l'image."
 
-#: ../src/picture.c:1247
+#: ../src/picture.c:1072
 msgid "Cannot display the image"
 msgstr "Impossible d'afficher l'image"
 
-#: ../src/picture.c:1249
+#: ../src/picture.c:1074
 msgid ""
 "Not enough data has been read to determine how to create the image buffer."
 msgstr ""
 "Pas assez de données lues pour déterminer comment créer le tampon de l'image."
 
-#: ../src/picture.c:1251
+#: ../src/picture.c:1076
 msgid "Load Image File"
 msgstr "Charger le fichier image"
 
@@ -3782,7 +3766,8 @@ msgstr "Écrire le numéro de disque avec le nombre de chiffres suivant :"
 
 #: ../src/prefs.c:583
 msgid "Whether to pad the disc field with leading zeroes"
-msgstr "Indique s'il faut décaler le contenu du champ disque avec des zéros au début"
+msgstr ""
+"Indique s'il faut décaler le contenu du champ disque avec des zéros au début"
 
 #: ../src/prefs.c:613
 msgid ""
@@ -4268,16 +4253,16 @@ msgstr "Nom de l'utilisateur sur le serveur mandataire."
 msgid "User Password:"
 msgstr "Mot de passe utilisateur :"
 
-#: ../src/prefs.c:1337
-msgid "Password of user for the the proxy server."
+#: ../src/prefs.c:1338
+msgid "Password of user for the proxy server."
 msgstr "Mot de passe de l'utilisateur sur le serveur mandataire."
 
 #. Track Name list (CDDB results)
-#: ../src/prefs.c:1342
+#: ../src/prefs.c:1343
 msgid "Track Name List"
 msgstr "Liste des noms de pistes"
 
-#: ../src/prefs.c:1349
+#: ../src/prefs.c:1350
 msgid ""
 "Select corresponding audio file (according position or DLM if activated "
 "below)"
@@ -4285,7 +4270,7 @@ msgstr ""
 "Sélectionner le fichier audio correspondant (d'après sa position ou "
 "l'algorithme DLM si activé ci-dessous)"
 
-#: ../src/prefs.c:1353
+#: ../src/prefs.c:1354
 msgid ""
 "If activated, when selecting a line in the list of tracks name, the "
 "corresponding audio file in the main list will be also selected."
@@ -4295,7 +4280,7 @@ msgstr ""
 "sélectionné."
 
 #. Check box to use DLM (also used in the cddb window)
-#: ../src/prefs.c:1358
+#: ../src/prefs.c:1359
 msgid ""
 "Use the Levenshtein algorithm (DLM) to match lines (using title) with audio "
 "files (using filename)"
@@ -4306,15 +4291,15 @@ msgstr ""
 #.
 #. * Confirmation
 #.
-#: ../src/prefs.c:1373
+#: ../src/prefs.c:1374
 msgid "Confirmation"
 msgstr "Confirmation"
 
-#: ../src/prefs.c:1378
+#: ../src/prefs.c:1379
 msgid "Confirm exit from program"
 msgstr "Confirmer la fermeture du programme"
 
-#: ../src/prefs.c:1381
+#: ../src/prefs.c:1382
 msgid ""
 "If activated, opens a dialog box to ask confirmation before exiting the "
 "program."
@@ -4322,55 +4307,55 @@ msgstr ""
 "Si cette option est activée, une boîte de dialogue s'ouvre pour demander "
 "confirmation avant la fermeture de l'application."
 
-#: ../src/prefs.c:1384
+#: ../src/prefs.c:1385
 msgid "Confirm writing of file tag"
 msgstr "Confirmer l'écriture de l'étiquette du fichier"
 
-#: ../src/prefs.c:1388
+#: ../src/prefs.c:1389
 msgid "Confirm renaming of file"
 msgstr "Confirmer le renommage du fichier"
 
-#: ../src/prefs.c:1392
+#: ../src/prefs.c:1393
 msgid "Confirm deleting of file"
 msgstr "Confirmer la suppression du fichier"
 
-#: ../src/prefs.c:1396
+#: ../src/prefs.c:1397
 msgid "Confirm writing of playlist"
 msgstr "Confirmer l'écriture de la liste de lecture"
 
-#: ../src/prefs.c:1400
+#: ../src/prefs.c:1401
 msgid "Confirm changing directory when there are unsaved changes"
 msgstr ""
 "Confirmer la fermeture du répertoire s'il y a des modifications non "
 "enregistrées"
 
 #. For translators : be aware to NOT translate '%.*d' in this string
-#: ../src/prefs.c:1438
+#: ../src/prefs.c:1439
 #, c-format
 msgid "(Example: %.*d_-_Track_name_1.mp3)"
 msgstr "(Exemple : %.*d_-_Piste_1.mp3)"
 
 #. Translators: please do NOT translate '%.*d' in this string.
-#: ../src/prefs.c:1471
+#: ../src/prefs.c:1472
 #, c-format
 msgid "(Example: disc_%.*d_of_10/Track_name_1.mp3)"
 msgstr "(Exemple : disque_%.*d_sur_10/Nom_de_la_piste_1.mp3)"
 
-#: ../src/prefs.c:1613 ../src/setting.c:904
+#: ../src/prefs.c:1614 ../src/setting.c:904
 msgid "Configuration saved"
 msgstr "Configuration enregistrée"
 
-#: ../src/prefs.c:1621
+#: ../src/prefs.c:1622
 msgid "Configuration unchanged"
 msgstr "Configuration inchangée"
 
-#: ../src/prefs.c:1712
+#: ../src/prefs.c:1713
 msgid "The selected path for 'Default path to files' is invalid"
 msgstr ""
 "Le chemin sélectionné comme « Chemin par défaut des fichiers » n'est pas "
 "valide"
 
-#: ../src/prefs.c:1714
+#: ../src/prefs.c:1715
 #, c-format
 msgid ""
 "Path: '%s'\n"
@@ -4379,96 +4364,96 @@ msgstr ""
 "Chemin : « %s »\n"
 "Erreur : %s"
 
-#: ../src/prefs.c:1716
+#: ../src/prefs.c:1717
 msgid "Invalid Path Error"
 msgstr "Erreur de chemin non valide"
 
-#: ../src/prefs.c:1830
+#: ../src/prefs.c:1831
 #, c-format
 msgid "The audio file player '%s' cannot be found"
 msgstr "Impossible de trouver le lecteur audio « %s »"
 
-#: ../src/prefs.c:1832
+#: ../src/prefs.c:1833
 msgid "Audio Player Error"
 msgstr "Erreur du lecteur audio"
 
-#: ../src/scan.c:180
+#: ../src/scan_dialog.c:182
 msgid "Fill Tag"
 msgstr "Compléter l'étiquette"
 
-#: ../src/scan.c:354
+#: ../src/scan_dialog.c:356
 #, c-format
 msgid "Cannot calculate CRC value of file (%s)"
 msgstr "Impossible de calculer la valeur CRC du fichier (%s)"
 
-#: ../src/scan.c:369
+#: ../src/scan_dialog.c:371
 msgid "Tag successfully scanned"
 msgstr "Étiquette scannée avec succès"
 
-#: ../src/scan.c:371
+#: ../src/scan_dialog.c:373
 #, c-format
 msgid "Tag successfully scanned: %s"
 msgstr "Étiquette scannée avec succès : %s"
 
-#: ../src/scan.c:412
+#: ../src/scan_dialog.c:414
 #, c-format
 msgid "Tag scanner: strange… the extension '%s' was not found in filename '%s'"
 msgstr ""
 "Scanner d'étiquettes : étrange… l'extension « %s » n'a pas été trouvée dans "
 "le nom de fichier « %s »"
 
-#: ../src/scan.c:494 ../src/scan.c:523
+#: ../src/scan_dialog.c:496 ../src/scan_dialog.c:525
 #, c-format
 msgid "Scan Error: can't find separator '%s' within '%s'"
 msgstr ""
 "Erreur de scanner : impossible de trouver le séparateur « %s » dans « %s »"
 
-#: ../src/scan.c:710
+#: ../src/scan_dialog.c:712
 msgid "New filename successfully scanned"
 msgstr "Nouveau nom de fichier scanné avec succès"
 
-#: ../src/scan.c:713
+#: ../src/scan_dialog.c:715
 #, c-format
 msgid "New filename successfully scanned: %s"
 msgstr "Nouveau nom de fichier scanné avec succès : %s"
 
-#: ../src/scan.c:1822
+#: ../src/scan_dialog.c:1632
 #, c-format
 msgid "Error while processing fields: %s"
 msgstr "Erreur lors du traitement des champs : %s"
 
 #. The window
-#: ../src/scan.c:1992
+#: ../src/scan_dialog.c:1802
 msgid "Tag and Filename Scan"
 msgstr "Scanner l'étiquette et le nom de fichier"
 
 #. TODO: Set related action to match AM_SCAN_FILES.
-#: ../src/scan.c:2001
+#: ../src/scan_dialog.c:1811
 msgid "Scan Files"
 msgstr "Scanner les fichiers"
 
 #. Option Menu
-#: ../src/scan.c:2029
+#: ../src/scan_dialog.c:1839
 msgid "Scanner:"
 msgstr "Scanner : "
 
-#: ../src/scan.c:2050
+#: ../src/scan_dialog.c:1860
 msgid "Select the type of scanner to use"
 msgstr "Sélectionner le type de scanner à utiliser"
 
-#: ../src/scan.c:2059
+#: ../src/scan_dialog.c:1869
 msgid "Scanner Preferences"
 msgstr "Préférences du scanner"
 
-#: ../src/scan.c:2068
+#: ../src/scan_dialog.c:1878
 msgid "Show / Hide Masks Editor"
 msgstr "Montrer / Masquer l'éditeur de masques"
 
-#: ../src/scan.c:2078
+#: ../src/scan_dialog.c:1888
 msgid "Show / Hide Legend"
 msgstr "Montrer / Masquer la légende"
 
-#: ../src/scan.c:2108
+#: ../src/scan_dialog.c:1918
 msgid ""
 "Select or type in a mask using codes (see Legend) to parse filename and "
 "path. Used to fill in tag fields"
@@ -4478,15 +4463,15 @@ msgstr ""
 "de l'étiquette."
 
 #. Preview label
-#: ../src/scan.c:2132
+#: ../src/scan_dialog.c:1942
 msgid "Fill tag preview"
 msgstr "Aperçu du remplissage de l'étiquette"
 
-#: ../src/scan.c:2162
+#: ../src/scan_dialog.c:1972
 msgid "Prefix mask with current path"
 msgstr "Préfixer le masque avec le chemin actuel"
 
-#: ../src/scan.c:2176
+#: ../src/scan_dialog.c:1986
 msgid ""
 "Select or type in a mask using codes (see Legend) to parse tag fields. Used "
 "to rename the file.\n"
@@ -4499,15 +4484,15 @@ msgstr ""
 "s'agit d'un chemin absolu, sinon d'un chemin relatif par rapport à l'ancien."
 
 #. Preview label
-#: ../src/scan.c:2201
+#: ../src/scan_dialog.c:2011
 msgid "Rename file preview"
 msgstr "Aperçu du renommage du fichier"
 
-#: ../src/scan.c:2220
+#: ../src/scan_dialog.c:2030
 msgid "Select fields:"
 msgstr "Sélectionner les champs :"
 
-#: ../src/scan.c:2223
+#: ../src/scan_dialog.c:2033
 msgid ""
 "The buttons on the right represent the fields which can be processed. Select "
 "those which interest you"
@@ -4516,134 +4501,134 @@ msgstr ""
 "Sélectionnez ceux qui vous intéressent."
 
 #. Advice for Translators: set the first letter of filename translated
-#: ../src/scan.c:2227
+#: ../src/scan_dialog.c:2037
 msgid "F"
 msgstr "F"
 
-#: ../src/scan.c:2229
+#: ../src/scan_dialog.c:2039
 msgid "Process filename field"
 msgstr "Traiter le champ nom de fichier"
 
 #. Advice for Translators: set the first letter of title translated
-#: ../src/scan.c:2231
+#: ../src/scan_dialog.c:2041
 msgid "T"
 msgstr "T"
 
-#: ../src/scan.c:2232
+#: ../src/scan_dialog.c:2042
 msgid "Process title field"
 msgstr "Traiter le champ titre"
 
 #. Advice for Translators: set the first letter of artist translated
-#: ../src/scan.c:2234
+#: ../src/scan_dialog.c:2044
 msgid "Ar"
 msgstr "Ar"
 
-#: ../src/scan.c:2235
+#: ../src/scan_dialog.c:2045
 msgid "Process file artist field"
 msgstr "Traiter le champ artiste"
 
 #. Advice for Translators: set the first letter of album artist translated
-#: ../src/scan.c:2237
+#: ../src/scan_dialog.c:2047
 msgid "AA"
 msgstr "AA"
 
-#: ../src/scan.c:2238
+#: ../src/scan_dialog.c:2048
 msgid "Process album artist field"
 msgstr "Traiter le champ artiste de l'album"
 
 #. Advice for Translators: set the first letter of album translated
-#: ../src/scan.c:2240
+#: ../src/scan_dialog.c:2050
 msgid "Al"
 msgstr "Al"
 
-#: ../src/scan.c:2241
+#: ../src/scan_dialog.c:2051
 msgid "Process album field"
 msgstr "Traiter le champ album"
 
 #. Advice for Translators: set the first letter of genre translated
-#: ../src/scan.c:2243
+#: ../src/scan_dialog.c:2053
 msgid "G"
 msgstr "G"
 
-#: ../src/scan.c:2244
+#: ../src/scan_dialog.c:2054
 msgid "Process genre field"
 msgstr "Traiter le champ genre"
 
 #. Advice for Translators: set the first letter of comment translated
-#: ../src/scan.c:2246
+#: ../src/scan_dialog.c:2056
 msgid "Cm"
 msgstr "Cm"
 
-#: ../src/scan.c:2247
+#: ../src/scan_dialog.c:2057
 msgid "Process comment field"
 msgstr "Traiter le champ commentaire"
 
 #. Advice for Translators: set the first letter of composer translated
-#: ../src/scan.c:2249
+#: ../src/scan_dialog.c:2059
 msgid "Cp"
 msgstr "Cp"
 
-#: ../src/scan.c:2250
+#: ../src/scan_dialog.c:2060
 msgid "Process composer field"
 msgstr "Traiter le champ compositeur"
 
 #. Advice for Translators: set the first letter of orig artist translated
-#: ../src/scan.c:2252
+#: ../src/scan_dialog.c:2062
 msgid "O"
 msgstr "O"
 
-#: ../src/scan.c:2253
+#: ../src/scan_dialog.c:2063
 msgid "Process original artist field"
 msgstr "Traiter le champ artiste original"
 
 #. Advice for Translators: set the first letter of copyright translated
-#: ../src/scan.c:2255
+#: ../src/scan_dialog.c:2065
 msgid "Cr"
 msgstr "Cr"
 
-#: ../src/scan.c:2256
+#: ../src/scan_dialog.c:2066
 msgid "Process copyright field"
 msgstr "Traiter le champ copyright"
 
 #. Advice for Translators: set the first letter of URL translated
-#: ../src/scan.c:2258
+#: ../src/scan_dialog.c:2068
 msgid "U"
 msgstr "U"
 
-#: ../src/scan.c:2259
+#: ../src/scan_dialog.c:2069
 msgid "Process URL field"
 msgstr "Traiter le champ URL"
 
 #. Advice for Translators: set the first letter of encoder name translated
-#: ../src/scan.c:2261
+#: ../src/scan_dialog.c:2071
 msgid "E"
 msgstr "N"
 
-#: ../src/scan.c:2262
+#: ../src/scan_dialog.c:2072
 msgid "Process encoder name field"
 msgstr "Traiter le champ nom de l'encodeur"
 
-#: ../src/scan.c:2306
+#: ../src/scan_dialog.c:2116
 msgid "Invert selection"
 msgstr "Inverser la sélection"
 
-#: ../src/scan.c:2313
+#: ../src/scan_dialog.c:2123
 msgid "Select/Unselect all"
 msgstr "Tout sélectionner/désélectionner."
 
-#: ../src/scan.c:2328
+#: ../src/scan_dialog.c:2138
 msgid "Convert:"
 msgstr "Convertir :"
 
-#: ../src/scan.c:2330
+#: ../src/scan_dialog.c:2140
 msgid "to: "
 msgstr "en : "
 
-#: ../src/scan.c:2337
+#: ../src/scan_dialog.c:2147
 msgid "Do not convert"
 msgstr "Ne pas convertir"
 
-#: ../src/scan.c:2356
+#: ../src/scan_dialog.c:2177
 msgid ""
 "The underscore character or the string '%20' are replaced by one space. "
 "Example, before: 'Text%20In%20An_Entry', after: 'Text In An Entry'."
@@ -4652,7 +4637,7 @@ msgstr ""
 "espace. Exemple avant : « Texte%20Dans%20Un_Champ », après : « Texte Dans Un "
 "Champ »."
 
-#: ../src/scan.c:2359
+#: ../src/scan_dialog.c:2180
 msgid ""
 "The space character is replaced by one underscore character. Example, "
 "before: 'Text In An Entry', after: 'Text_In_An_Entry'."
@@ -4660,38 +4645,38 @@ msgstr ""
 "Remplace le caractère espace par un caractère soulignement. Exemple avant : "
 "« Texte Dans Un Chame », après : « Texte_Dans_Un_Champ »."
 
-#: ../src/scan.c:2362
+#: ../src/scan_dialog.c:2183
 msgid ""
 "Replace a string by another one. Note that the search is case sensitive."
 msgstr ""
 "Remplace une chaine par une autre. Notez que la recherche est sensible à la "
 "casse."
 
-#: ../src/scan.c:2369
+#: ../src/scan_dialog.c:2190
 msgid "Capitalize all"
 msgstr "Tout en majuscules"
 
-#: ../src/scan.c:2371
+#: ../src/scan_dialog.c:2192
 msgid "Lowercase all"
 msgstr "Tout en minuscules"
 
-#: ../src/scan.c:2373
+#: ../src/scan_dialog.c:2194
 msgid "Capitalize first letter"
 msgstr "Première lettre en majuscule"
 
-#: ../src/scan.c:2375
+#: ../src/scan_dialog.c:2196
 msgid "Capitalize the first letter of each word"
 msgstr "Première lettre de chaque mot en majuscules"
 
-#: ../src/scan.c:2376
+#: ../src/scan_dialog.c:2197
 msgid "Detect Roman numerals"
 msgstr "Détecter les chiffres romains"
 
-#: ../src/scan.c:2378
+#: ../src/scan_dialog.c:2199
 msgid "Do not change capitalization"
 msgstr "Ne pas changer la casse"
 
-#: ../src/scan.c:2400
+#: ../src/scan_dialog.c:2236
 msgid ""
 "Convert all words in all fields to upper case. Example, before: 'Text IN AN "
 "entry', after: 'TEXT IN AN ENTRY'."
@@ -4699,7 +4684,7 @@ msgstr ""
 "Convertit toutes les lettres de tous les champs en majuscules. Exemple "
 "avant : « Texte DANS UN champ », après : « TEXTE DANS UN CHAMP »."
 
-#: ../src/scan.c:2403
+#: ../src/scan_dialog.c:2239
 msgid ""
 "Convert all words in all fields to lower case. Example, before: 'TEXT IN an "
 "entry', after: 'text in an entry'."
@@ -4707,7 +4692,7 @@ msgstr ""
 "Convertit toutes les lettres de tous les champs en minuscules. Exemple "
 "avant : « Texte DANS UN champ », après : « texte dans un champ."
 
-#: ../src/scan.c:2406
+#: ../src/scan_dialog.c:2242
 msgid ""
 "Convert the initial of the first word in all fields to upper case. Example, "
 "before: 'text IN An ENTRY', after: 'Text in an entry'."
@@ -4715,7 +4700,7 @@ msgstr ""
 "Convertit la première lettre de tous les champs en majuscule. Exemple "
 "avant : « texte DANS Un CHAMP », après : « Texte dans un champ »."
 
-#: ../src/scan.c:2409
+#: ../src/scan_dialog.c:2245
 msgid ""
 "Convert the initial of each word in all fields to upper case. Example, "
 "before: 'Text in an ENTRY', after: 'Text In An Entry'."
@@ -4723,7 +4708,7 @@ msgstr ""
 "Convertit la première lettre de chaque mot de tous les champs en majuscule. "
 "Exemple avant : « texte DANS Un CHAMP », après : « Texte Dans Un Champ »."
 
-#: ../src/scan.c:2412
+#: ../src/scan_dialog.c:2248
 msgid ""
 "Force to convert to upper case the Roman numerals. Example, before: 'ix. "
 "text in an entry', after: 'IX. Text In An Entry'."
@@ -4731,19 +4716,19 @@ msgstr ""
 "Force la conversion des chiffres romains en majuscules. Exemple avant : "
 "« ix. texte dans un champ », après : « IX. Texte Dans Un Champ »."
 
-#: ../src/scan.c:2420
+#: ../src/scan_dialog.c:2256
 msgid "Insert a space before uppercase letters"
 msgstr "Insérer une espace avant une majuscule"
 
-#: ../src/scan.c:2422
+#: ../src/scan_dialog.c:2258
 msgid "Remove duplicate spaces and underscores"
 msgstr "Supprimer les espaces et soulignements en double"
 
-#: ../src/scan.c:2424
+#: ../src/scan_dialog.c:2260
 msgid "Do not change word separators"
 msgstr "Ne pas changer les séparateurs de mots"
 
-#: ../src/scan.c:2438
+#: ../src/scan_dialog.c:2282
 msgid ""
 "All spaces between words are removed. Example, before: 'Text In An Entry', "
 "after: 'TextInAnEntry'."
@@ -4751,7 +4736,7 @@ msgstr ""
 "Supprime tous les espaces entre les mots. Exemple avant : « Texte Dans Un "
 "Champ », après : « TexteDansUnChamp »."
 
-#: ../src/scan.c:2441
+#: ../src/scan_dialog.c:2285
 msgid ""
 "A space is inserted before each upper case letter. Example, before: "
 "'TextInAnEntry', after: 'Text In An Entry'."
@@ -4759,7 +4744,7 @@ msgstr ""
 "Insère une espace devant chaque lettre majuscule. Exemple avant : "
 "« TexteDansUnChamp », après : « Texte Dans Un Champ »."
 
-#: ../src/scan.c:2444
+#: ../src/scan_dialog.c:2288
 msgid ""
 "Duplicate spaces and underscores are removed. Example, before: "
 "'Text__In__An   Entry', after: 'Text_In_An Entry'."
@@ -4770,141 +4755,141 @@ msgstr ""
 #.
 #. * Frame to display codes legend
 #.
-#: ../src/scan.c:2451
+#: ../src/scan_dialog.c:2295
 msgid "Legend"
 msgstr "Légende"
 
-#: ../src/scan.c:2457
+#: ../src/scan_dialog.c:2301
 #, c-format
 msgid "%a: artist"
 msgstr "%a : artiste"
 
-#: ../src/scan.c:2460
+#: ../src/scan_dialog.c:2304
 msgid "%z: album artist"
 msgstr "%a : artiste de l'album"
 
-#: ../src/scan.c:2463
+#: ../src/scan_dialog.c:2307
 msgid "%b: album"
 msgstr "%b : album"
 
-#: ../src/scan.c:2466
+#: ../src/scan_dialog.c:2310
 #, c-format
 msgid "%c: comment"
 msgstr "%c : commentaire"
 
-#: ../src/scan.c:2469
+#: ../src/scan_dialog.c:2313
 #, c-format
 msgid "%p: composer"
 msgstr "%p : compositeur"
 
-#: ../src/scan.c:2472
+#: ../src/scan_dialog.c:2316
 msgid "%r: copyright"
 msgstr "%r : copyright"
 
-#: ../src/scan.c:2475
+#: ../src/scan_dialog.c:2319
 #, c-format
 msgid "%d: disc number"
 msgstr "%d : N° du disque"
 
-#: ../src/scan.c:2478
+#: ../src/scan_dialog.c:2322
 #, c-format
 msgid "%e: encoded by"
 msgstr "%e : encodé en"
 
-#: ../src/scan.c:2481
+#: ../src/scan_dialog.c:2325
 #, c-format
 msgid "%g: genre"
 msgstr "%g : genre"
 
-#: ../src/scan.c:2484
+#: ../src/scan_dialog.c:2328
 #, c-format
 msgid "%i: ignored"
 msgstr "%i : ignoré"
 
-#: ../src/scan.c:2487
+#: ../src/scan_dialog.c:2331
 msgid "%l: number of tracks"
 msgstr "%l : nombre de pistes"
 
-#: ../src/scan.c:2490
+#: ../src/scan_dialog.c:2334
 #, c-format
 msgid "%o: orig. artist"
 msgstr "%o : artiste original"
 
-#: ../src/scan.c:2493
+#: ../src/scan_dialog.c:2337
 #, c-format
 msgid "%n: track"
 msgstr "%n : piste"
 
-#: ../src/scan.c:2496
+#: ../src/scan_dialog.c:2340
 msgid "%t: title"
 msgstr "%t : titre"
 
-#: ../src/scan.c:2499
+#: ../src/scan_dialog.c:2343
 #, c-format
 msgid "%u: URL"
 msgstr "%u : URL"
 
-#: ../src/scan.c:2502
+#: ../src/scan_dialog.c:2346
 #, c-format
 msgid "%x: number of discs"
 msgstr "%x : nombre de disques"
 
-#: ../src/scan.c:2505
+#: ../src/scan_dialog.c:2349
 msgid "%y: year"
 msgstr "%y : année"
 
 #.
 #. * Masks Editor
 #.
-#: ../src/scan.c:2512
+#: ../src/scan_dialog.c:2356
 msgid "Mask Editor"
 msgstr "Éditeur de masques"
 
-#: ../src/scan.c:2566
+#: ../src/scan_dialog.c:2410
 msgid "Create New Mask"
 msgstr "Créer un nouveau masque"
 
-#: ../src/scan.c:2576
+#: ../src/scan_dialog.c:2420
 msgid "Move Up this Mask"
 msgstr "Remonter ce masque"
 
-#: ../src/scan.c:2586
+#: ../src/scan_dialog.c:2430
 msgid "Move Down this Mask"
 msgstr "Descendre ce masque"
 
-#: ../src/scan.c:2596
+#: ../src/scan_dialog.c:2440
 msgid "Duplicate Mask"
 msgstr "Dupliquer le masque"
 
-#: ../src/scan.c:2606
+#: ../src/scan_dialog.c:2450
 msgid "Add Default Masks"
 msgstr "Ajouter les masques par défaut"
 
-#: ../src/scan.c:2616
+#: ../src/scan_dialog.c:2460
 msgid "Remove Mask"
 msgstr "Supprimer le masque"
 
-#: ../src/scan.c:2626
+#: ../src/scan_dialog.c:2470
 msgid "Save Masks"
 msgstr "Enregistrer les masques"
 
-#: ../src/scan.c:3206
+#: ../src/scan_dialog.c:3050
 msgid "New_mask"
 msgstr "Nouveau_masque"
 
-#: ../src/scan.c:3245
+#: ../src/scan_dialog.c:3089
 msgid "Copy: No row selected"
 msgstr "Copier : aucune ligne sélectionnée"
 
-#: ../src/scan.c:3338
+#: ../src/scan_dialog.c:3182
 msgid "Remove: No row selected"
 msgstr "Supprimer : aucune ligne sélectionnée"
 
-#: ../src/scan.c:3385
+#: ../src/scan_dialog.c:3229
 msgid "Move Up: No row selected"
 msgstr "Remonter : aucune ligne sélectionnée"
 
-#: ../src/scan.c:3429
+#: ../src/scan_dialog.c:3273
 msgid "Move Down: No row selected"
 msgstr "Descendre : aucune ligne sélectionnée"
 
@@ -4971,3 +4956,37 @@ msgstr "Impossible de déplacer le fichier de configuration « %s »"
 #, c-format
 msgid "Error: Cannot create directory '%s' (%s)"
 msgstr "Erreur : impossible de créer le répertoire « %s » (%s)"
+
+#~ msgid "Cannot write tag in file '%s' (%s)"
+#~ msgstr "Impossible d'écrire l'étiquette dans le fichier « %s » (%s)"
+
+#~ msgid ""
+#~ "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 (at your "
+#~ "option) any later version.\n"
+#~ "\n"
+#~ "This program is distributed in the hope that it will be useful, but "
+#~ "WITHOUT ANY WARRANTY; without even the implied warranty of "
+#~ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General "
+#~ "Public License for more details.\n"
+#~ "\n"
+#~ "You should have received a copy of the GNU General Public License along "
+#~ "with this program. If not, see <http://www.gnu.org/licenses/>."
+#~ msgstr ""
+#~ "Ce programme est un logiciel libre ; vous pouvez le redistribuer et/ou le "
+#~ "modifier au titre des clauses de la Licence Publique Générale GNU, telle "
+#~ "que publiée par la Free Software Foundation ; soit la version 2 de la "
+#~ "Licence, ou (à votre discrétion) une version ultérieure quelconque.\n"
+#~ "Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS "
+#~ "AUCUNE GARANTIE ; sans même une garantie implicite de COMMERCIABILITÉ ou "
+#~ "DE CONFORMITÉ À UNE UTILISATION PARTICULIÈRE. Voir la Licence Publique "
+#~ "Générale GNU pour plus de détails.\n"
+#~ "\n"
+#~ "Vous devriez avoir reçu un exemplaire de la Licence Publique Générale GNU "
+#~ "avec ce programme ; si ce n'est pas le cas, écrivez à la Free Software "
+#~ "Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, "
+#~ "USA."
+
+#~ msgid "File contains no audio track: '%s'"
+#~ msgstr "Le fichier ne contient aucune piste audio : « %s »"
diff --git a/po/hu.po b/po/hu.po
index e0ba4b3..871e149 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -12,8 +12,8 @@ msgstr ""
 "Project-Id-Version: 914hu\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
 "product=easytag&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2014-04-12 18:50+0000\n"
-"PO-Revision-Date: 2014-04-13 15:48+0200\n"
+"POT-Creation-Date: 2014-06-11 19:50+0000\n"
+"PO-Revision-Date: 2014-06-30 22:23+0200\n"
 "Last-Translator: Balázs Úr <urbalazs at gmail.com>\n"
 "Language-Team: Hungarian <kde-i18n-doc at kde.org>\n"
 "Language: hu\n"
@@ -24,9 +24,6 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
 #: ../data/easytag.appdata.xml.in.h:1
-#| msgid ""
-#| "View and edit tags for MP3, MP2, MP4/AAC, FLAC, Ogg Vorbis, MusePack, "
-#| "Monkey's Audio and WavPack files."
 msgid ""
 "View and edit tags for MP3, MP2, MP4/AAC, FLAC, Ogg Opus, Ogg Speex, Ogg "
 "Vorbis, MusePack, Monkey's Audio and WavPack files."
@@ -63,6 +60,25 @@ msgstr "Hangfájl metaadatok szerkesztése"
 msgid "mp3;tag;audio;"
 msgstr "mp3;címke;hang;"
 
+#: ../nautilus-extension/nautilus-easytag.c:229
+msgid "Open in EasyTAG"
+msgstr "Megnyitás az EasyTAG programban"
+
+#: ../nautilus-extension/nautilus-easytag.c:230
+#| msgid "Clear the current selection"
+msgid "Open the current selected directory in EasyTAG"
+msgstr "A jelenleg kijelölt könyvtár megnyitása az EasyTAG programban"
+
+#: ../nautilus-extension/nautilus-easytag.c:247
+msgid "Open with EasyTAG"
+msgstr "Megnyitás az EasyTAG programmal"
+
+# Fájl menü
+#: ../nautilus-extension/nautilus-easytag.c:248
+#| msgid "Scan selected files"
+msgid "Open selected files in EasyTAG"
+msgstr "A kijelölt fájlok megnyitása az EasyTAG programban"
+
 #. Translators: put your own name here to appear in the about dialog.
 #: ../src/about.c:89
 msgid "translator-credits"
@@ -76,24 +92,24 @@ msgstr ""
 msgid "View and edit tags in audio files"
 msgstr "Hangfájlokban lévő címkék megtekintése és szerkesztése"
 
-#: ../src/ape_tag.c:61 ../src/id3v24_tag.c:112 ../src/mp4_header.cc:46
-#: ../src/mp4_header.cc:59 ../src/mp4_tag.cc:69 ../src/mp4_tag.cc:85
+#: ../src/ape_tag.c:61 ../src/id3v24_tag.c:113 ../src/mp4_header.cc:45
+#: ../src/mp4_header.cc:58 ../src/mp4_tag.cc:69 ../src/mp4_tag.cc:85
 #: ../src/mp4_tag.cc:90 ../src/mp4_tag.cc:262 ../src/mp4_tag.cc:278
 #: ../src/mp4_tag.cc:283
 #, c-format
 msgid "Error while opening file: '%s' (%s)."
 msgstr "Hiba a(z) „%s” fájl megnyitása közben (%s)."
 
-#: ../src/application.c:37
+#: ../src/application.c:32
 msgid "Print the version and exit"
 msgstr "A verzió kiírása és kilépés"
 
-#: ../src/application.c:89
+#: ../src/application.c:84
 #, c-format
 msgid "Website: %s"
 msgstr "Weboldal: %s"
 
-#: ../src/application.c:98
+#: ../src/application.c:93
 msgid "- Tag and rename audio files"
 msgstr "- Hangfájlok címkézése és átnevezése"
 
@@ -365,7 +381,7 @@ msgid "S_can Files"
 msgstr "Fájlok _vizsgálata"
 
 # Fájl menü
-#: ../src/bar.c:225 ../src/scan_dialog.c:1814
+#: ../src/bar.c:225 ../src/scan_dialog.c:1818
 msgid "Scan selected files"
 msgstr "A kijelölt fájlok vizsgálata"
 
@@ -444,8 +460,8 @@ msgid "_Quit"
 msgstr "_Kilépés"
 
 # ikon megjegyzés
-#: ../src/bar.c:242 ../src/easytag.c:2430 ../src/easytag.c:4565
-#: ../src/easytag.c:4597
+#: ../src/bar.c:242 ../src/easytag.c:2424 ../src/easytag.c:4559
+#: ../src/easytag.c:4591
 msgid "Quit"
 msgstr "Kilépés"
 
@@ -780,7 +796,7 @@ msgstr "Mezök feldolgozása"
 msgid "Could not merge UI, error was: %s\n"
 msgstr "Az UI egyesítése nem lehetséges, a hiba: %s\n"
 
-#: ../src/bar.c:533
+#: ../src/bar.c:535
 msgid "Ready to start"
 msgstr "Indításra kész"
 
@@ -788,7 +804,7 @@ msgstr "Indításra kész"
 msgid "New default path for files selected"
 msgstr "Új alapértelmezett útvonal kiválasztva a fájlokhoz"
 
-#: ../src/browser.c:678 ../src/easytag.c:4561
+#: ../src/browser.c:678 ../src/easytag.c:4555
 msgid "Some files have been modified but not saved"
 msgstr "Néhány fájl módosult de nincs elmentve"
 
@@ -800,101 +816,101 @@ msgstr "El szeretné menteni azokat, mielőtt könyvtárat vált?"
 msgid "Confirm Directory Change"
 msgstr "Könyvtárváltás megerősítése"
 
-#: ../src/browser.c:2146
+#: ../src/browser.c:2152
 msgid "<All albums>"
 msgstr "<Minden album>"
 
-#: ../src/browser.c:2607
+#: ../src/browser.c:2613
 #, c-format
 msgid "Error: Searching for %s, could not find node %s in tree."
 msgstr "Hiba: %s kereséskor nem található %s csomópont a fában."
 
-#: ../src/browser.c:3101 ../src/browser.c:3179
+#: ../src/browser.c:3107 ../src/browser.c:3185
 msgid "Tree"
 msgstr "Fa"
 
-#: ../src/browser.c:3102 ../src/cddb.c:803 ../src/misc.c:1899
+#: ../src/browser.c:3108 ../src/cddb.c:803 ../src/misc.c:1899
 msgid "Filename"
 msgstr "Fájlnév"
 
-#: ../src/browser.c:3102 ../src/cddb.c:804 ../src/misc.c:1900
+#: ../src/browser.c:3108 ../src/cddb.c:804 ../src/misc.c:1900
 #: ../src/prefs.c:643
 msgid "Title"
 msgstr "Cím"
 
 #. Translators: This option is for the previous 'search in' option. For
 #. * instance, translate this as "Search in:" "Artist".
-#: ../src/browser.c:3103 ../src/browser.c:3110 ../src/cddb.c:483
+#: ../src/browser.c:3109 ../src/browser.c:3116 ../src/cddb.c:483
 #: ../src/cddb.c:805 ../src/misc.c:1901 ../src/prefs.c:644
 msgid "Artist"
 msgstr "Előadó"
 
-#: ../src/browser.c:3103 ../src/misc.c:1902
+#: ../src/browser.c:3109 ../src/misc.c:1902
 msgid "Album Artist"
 msgstr "Album előadója"
 
 #. Translators: This option is for the previous 'search in' option. For
 #. * instance, translate this as "Search in:" "Album".
-#: ../src/browser.c:3104 ../src/browser.c:3112 ../src/cddb.c:486
+#: ../src/browser.c:3110 ../src/browser.c:3118 ../src/cddb.c:486
 #: ../src/cddb.c:806 ../src/misc.c:1903 ../src/prefs.c:645
 msgid "Album"
 msgstr "Album"
 
-#: ../src/browser.c:3104 ../src/cddb.c:807 ../src/misc.c:1905
+#: ../src/browser.c:3110 ../src/cddb.c:807 ../src/misc.c:1905
 msgid "Year"
 msgstr "Év"
 
-#: ../src/browser.c:3104
+#: ../src/browser.c:3110
 msgid "Disc"
 msgstr "Lemez"
 
-#: ../src/browser.c:3105 ../src/misc.c:1906
+#: ../src/browser.c:3111 ../src/misc.c:1906
 msgid "Track"
 msgstr "Szám"
 
-#: ../src/browser.c:3105 ../src/cddb.c:810 ../src/misc.c:1907
+#: ../src/browser.c:3111 ../src/cddb.c:810 ../src/misc.c:1907
 #: ../src/prefs.c:646
 msgid "Genre"
 msgstr "Műfaj"
 
-#: ../src/browser.c:3106 ../src/misc.c:1908 ../src/prefs.c:647
+#: ../src/browser.c:3112 ../src/misc.c:1908 ../src/prefs.c:647
 msgid "Comment"
 msgstr "Megjegyzés"
 
-#: ../src/browser.c:3106 ../src/misc.c:1909 ../src/picture.c:1060
+#: ../src/browser.c:3112 ../src/misc.c:1909 ../src/picture.c:884
 #: ../src/prefs.c:648
 msgid "Composer"
 msgstr "Zeneszerző"
 
-#: ../src/browser.c:3107 ../src/misc.c:1910
+#: ../src/browser.c:3113 ../src/misc.c:1910
 msgid "Original Artist"
 msgstr "Eredeti előadó"
 
-#: ../src/browser.c:3108 ../src/misc.c:1911
+#: ../src/browser.c:3114 ../src/misc.c:1911
 msgid "Copyright"
 msgstr "Szerzői jog"
 
-#: ../src/browser.c:3108 ../src/misc.c:1912
+#: ../src/browser.c:3114 ../src/misc.c:1912
 msgid "URL"
 msgstr "URL"
 
-#: ../src/browser.c:3109 ../src/misc.c:1913
+#: ../src/browser.c:3115 ../src/misc.c:1913
 msgid "Encoded By"
 msgstr "Kódolta"
 
-#: ../src/browser.c:3110
+#: ../src/browser.c:3116
 msgid "# Albums"
 msgstr "# Albumok"
 
-#: ../src/browser.c:3111 ../src/browser.c:3112
+#: ../src/browser.c:3117 ../src/browser.c:3118
 msgid "# Files"
 msgstr "# Fájlok"
 
-#: ../src/browser.c:3137
+#: ../src/browser.c:3143
 msgid "Enter a directory to browse."
 msgstr "Adja meg az átvizsgálandó könyvtárat."
 
-#: ../src/browser.c:3146
+#: ../src/browser.c:3152
 msgid "Select a directory to browse."
 msgstr "Válassza ki az átvizsgálandó könyvtárat."
 
@@ -902,35 +918,35 @@ msgstr "Válassza ki az átvizsgálandó könyvtárat."
 #. * The label for displaying number of files in path (without subdirs)
 #.
 #. Translators: No files, as in "0 files".
-#: ../src/browser.c:3153 ../src/easytag.c:3469
+#: ../src/browser.c:3159 ../src/easytag.c:3463
 msgid "No files"
 msgstr "Nincsenek fájlok"
 
-#: ../src/browser.c:3231
+#: ../src/browser.c:3237
 msgid "Artist & Album"
 msgstr "Előadó és album"
 
 #. Only directories changed
-#: ../src/browser.c:3595 ../src/easytag.c:2881
+#: ../src/browser.c:3601 ../src/easytag.c:2875
 msgid "Rename Directory"
 msgstr "Könyvtár átnevezése"
 
-#: ../src/browser.c:3617
+#: ../src/browser.c:3623
 #, c-format
 msgid "Rename the directory '%s' to:"
 msgstr "A(z) „%s” könyvtár átnevezése erre:"
 
-#: ../src/browser.c:3636 ../src/misc.c:1168
+#: ../src/browser.c:3642 ../src/misc.c:1168
 msgid "Use mask:"
 msgstr "Használandó maszk:"
 
 # bubblehelp
-#: ../src/browser.c:3639
+#: ../src/browser.c:3645
 msgid "If activated, it will use masks to rename directory."
 msgstr "Ha aktivált, maszkokat fog használni a könyvtár átnevezéséhez."
 
 # bubblehelp
-#: ../src/browser.c:3657
+#: ../src/browser.c:3663
 msgid ""
 "Select or type in a mask using codes (see Legend in Scanner Window) to "
 "rename the directory from tag fields."
@@ -940,67 +956,67 @@ msgstr ""
 "címkemezőkből."
 
 #. Preview label
-#: ../src/browser.c:3681
+#: ../src/browser.c:3687
 msgid "Rename directory preview"
 msgstr "Könyvtár átnevezés előnézet"
 
-#: ../src/browser.c:3773
+#: ../src/browser.c:3779
 msgid "You must type a directory name"
 msgstr "Meg kell adnia egy könyvtárnevet"
 
-#: ../src/browser.c:3774 ../src/browser.c:3795
+#: ../src/browser.c:3780 ../src/browser.c:3801
 msgid "Directory Name Error"
 msgstr "Könyvtárnév hiba"
 
-#: ../src/browser.c:3792
+#: ../src/browser.c:3798
 #, c-format
 msgid "Could not convert '%s' into filename encoding."
 msgstr "„%s” nem alakítható át fájlnév kódolássá."
 
-#: ../src/browser.c:3794
+#: ../src/browser.c:3800
 msgid "Please use another name"
 msgstr "Kérem használjon egy másik nevet"
 
-#: ../src/browser.c:3864
+#: ../src/browser.c:3870
 #, c-format
 msgid "The directory name '%s' already exists"
 msgstr "Már létezik „%s” nevű könyvtár"
 
-#: ../src/browser.c:3865 ../src/easytag.c:2964
+#: ../src/browser.c:3871 ../src/easytag.c:2958
 msgid "Rename File Error"
 msgstr "Fájl átnevezési hiba"
 
 # böngésző menü
-#: ../src/browser.c:3903 ../src/browser.c:3932
+#: ../src/browser.c:3909 ../src/browser.c:3938
 msgid "Rename Directory Error"
 msgstr "Könyvtár átnevezési hiba"
 
-#: ../src/browser.c:3970
+#: ../src/browser.c:3976
 msgid "Directory renamed"
 msgstr "Könyvtár átnevezve"
 
 # böngésző menü
-#: ../src/browser.c:4006
+#: ../src/browser.c:4012
 msgid "Browse Directory With"
 msgstr "Könyvtár böngészése ezzel"
 
-#: ../src/browser.c:4022 ../src/browser.c:4148
+#: ../src/browser.c:4028 ../src/browser.c:4154
 msgid "Program to run:"
 msgstr "Futtatandó program:"
 
 # bubble help?
-#: ../src/browser.c:4034
+#: ../src/browser.c:4040
 msgid ""
 "Enter the program to run. It will receive the current directory as parameter."
 msgstr ""
 "Adja meg a futtatandó programot. Az aktuális könyvtárat fogja megkapni "
 "paraméterként."
 
-#: ../src/browser.c:4128
+#: ../src/browser.c:4134
 msgid "Open Files With"
 msgstr "Fájlok megnyitás ezzel"
 
-#: ../src/browser.c:4160
+#: ../src/browser.c:4166
 msgid ""
 "Enter the program to run. It will receive the current file as parameter."
 msgstr ""
@@ -1100,7 +1116,7 @@ msgstr "Minden mezőben"
 
 #. Translators: This option is for the previous 'search in' option. For
 #. * instance, translate this as "Search in:" "Other".
-#: ../src/cddb.c:492 ../src/picture.c:1038 ../src/prefs.c:807
+#: ../src/cddb.c:492 ../src/picture.c:862 ../src/prefs.c:807
 msgid "Other"
 msgstr "Egyéb"
 
@@ -1770,7 +1786,7 @@ msgstr "A jelenleg használt területi beállítások: „%s” (és végül „
 msgid "Unable to create setting directories"
 msgstr "Nem lehet létrehozni a beállítás könyvtárakat"
 
-#: ../src/easytag.c:427 ../src/et_core.c:637 ../src/et_core.c:649
+#: ../src/easytag.c:427 ../src/et_core.c:638 ../src/et_core.c:650
 #, c-format
 msgid "Error while querying information for file: '%s' (%s)"
 msgstr "Hiba a fájl információinak lekérése közben: „%s” (%s)"
@@ -1783,11 +1799,11 @@ msgstr "Nem nyitható meg az útvonal: „%s”"
 #.
 #. * Browser
 #.
-#: ../src/easytag.c:582 ../src/prefs.c:142
+#: ../src/easytag.c:583 ../src/prefs.c:142
 msgid "Browser"
 msgstr "Böngésző"
 
-#: ../src/easytag.c:604 ../src/et_core.c:2857
+#: ../src/easytag.c:605 ../src/et_core.c:2858
 msgid "File"
 msgstr "Fájl"
 
@@ -1797,38 +1813,38 @@ msgstr "Fájl"
 #. gtk_label_set_text(GTK_LABEL(VersionValueLabel),"");
 #. Version changed to encoder version
 #. Encoder version
-#: ../src/easytag.c:636 ../src/easytag.c:4232 ../src/flac_header.c:201
+#: ../src/easytag.c:637 ../src/easytag.c:4226 ../src/flac_header.c:201
 #: ../src/monkeyaudio_header.c:96 ../src/musepack_header.c:98
 #: ../src/ogg_header.c:389 ../src/opus_header.c:221 ../src/wavpack_header.c:72
 #, c-format
 msgid "Encoder:"
 msgstr "Kódoló:"
 
-#: ../src/easytag.c:644
+#: ../src/easytag.c:645
 msgid "Bitrate:"
 msgstr "Bitsebesség:"
 
 #. Translators: Please try to keep this string as short as possible as it
 #. * is shown in a narrow column.
-#: ../src/easytag.c:654
+#: ../src/easytag.c:655
 msgid "Frequency:"
 msgstr "Frekvencia:"
 
 #. Mode
-#: ../src/easytag.c:665 ../src/easytag.c:4236 ../src/mpeg_header.c:216
+#: ../src/easytag.c:666 ../src/easytag.c:4230 ../src/mpeg_header.c:216
 msgid "Mode:"
 msgstr "Mód:"
 
-#: ../src/easytag.c:672
+#: ../src/easytag.c:673
 msgid "Size:"
 msgstr "Méret:"
 
-#: ../src/easytag.c:679
+#: ../src/easytag.c:680
 msgid "Duration:"
 msgstr "Időtartam:"
 
 #. Main Frame
-#: ../src/easytag.c:726 ../src/et_core.c:2787
+#: ../src/easytag.c:726 ../src/et_core.c:2788
 msgid "Tag"
 msgstr "Címke"
 
@@ -1987,566 +2003,564 @@ msgstr "A kijelölt fájlok címkézése a kódoló nevével"
 #.
 #. * 2 - Page for extra tag fields
 #.
-#: ../src/easytag.c:1147 ../src/et_core.c:3229 ../src/et_core.c:3232
+#: ../src/easytag.c:1146 ../src/et_core.c:3230 ../src/et_core.c:3233
 msgid "Images"
 msgstr "Képek"
 
-#: ../src/easytag.c:1171
+#: ../src/easytag.c:1170
 msgid "You can use drag and drop to add an image"
 msgstr "Fogja meg és húzza ide a képet a hozzáadáshoz"
 
-#: ../src/easytag.c:1218
+#: ../src/easytag.c:1219
 msgid "Add images to the tag"
 msgstr "Képek hozzáadása a címkéhez"
 
-#: ../src/easytag.c:1236
+#: ../src/easytag.c:1237
 msgid "Remove selected images from the tag"
 msgstr "A kijelölt képek eltávolítása a címkéből"
 
-#: ../src/easytag.c:1250
+#: ../src/easytag.c:1248
 msgid "Save the selected images to files"
 msgstr "A kijelölt képek mentése fájlokba"
 
-#: ../src/easytag.c:1261
+#: ../src/easytag.c:1259
 msgid "Edit image properties"
 msgstr "Képtulajdonságok szerkesztése"
 
-#: ../src/easytag.c:1275
+#: ../src/easytag.c:1270
 msgid "Tag selected files with these images"
 msgstr "A kijelölt fájlok címkézése ezekkel a képekkel"
 
-#: ../src/easytag.c:1333
+#: ../src/easytag.c:1328
 #, c-format
 msgid "Selected files tagged with title '%s'."
 msgstr "A kijelölt fájlok megcímkézve a címmel: „%s”."
 
-#: ../src/easytag.c:1335
+#: ../src/easytag.c:1330
 msgid "Removed title from selected files."
 msgstr "A cím eltávolítva a kijelölt fájlokból."
 
-#: ../src/easytag.c:1350
+#: ../src/easytag.c:1345
 #, c-format
 msgid "Selected files tagged with artist '%s'."
 msgstr "A kijelölt fájlok megcímkézve az előadóval: „%s”."
 
-#: ../src/easytag.c:1352
+#: ../src/easytag.c:1347
 msgid "Removed artist from selected files."
 msgstr "Az előadó eltávolítva a kijelölt fájlokból."
 
-#: ../src/easytag.c:1366
+#: ../src/easytag.c:1361
 #, c-format
 msgid "Selected files tagged with album artist '%s'."
 msgstr "A kijelölt fájlok megcímkézve az album előadóval: „%s”."
 
-#: ../src/easytag.c:1368
+#: ../src/easytag.c:1363
 msgid "Removed album artist from selected files."
 msgstr "Az album előadó eltávolítva a kijelölt fájlokból."
 
-#: ../src/easytag.c:1383
+#: ../src/easytag.c:1378
 #, c-format
 msgid "Selected files tagged with album '%s'."
 msgstr "A kijelölt fájlok megcímkézve az albummal: „%s”."
 
-#: ../src/easytag.c:1385
+#: ../src/easytag.c:1380
 msgid "Removed album name from selected files."
 msgstr "Az albumnév eltávolítva a kijelölt fájlokból."
 
-#: ../src/easytag.c:1422
+#: ../src/easytag.c:1417
 #, c-format
 msgid "Selected files tagged with disc number '%s/%s'."
 msgstr "A kijelölt fájlok megcímkézve a lemezszámmal: „%s/%s”."
 
-#: ../src/easytag.c:1427
+#: ../src/easytag.c:1422
 #, c-format
 msgid "Selected files tagged with disc number like 'xx'."
 msgstr "A kijelölt fájlok megcímkézve a lemezszámmal úgymint „xx”."
 
-#: ../src/easytag.c:1432
+#: ../src/easytag.c:1427
 msgid "Removed disc number from selected files."
 msgstr "A lemezszám eltávolítva a kijelölt fájlokból."
 
-#: ../src/easytag.c:1448
+#: ../src/easytag.c:1443
 #, c-format
 msgid "Selected files tagged with year '%s'."
 msgstr "A kijelölt fájlok megcímkézve az évszámmal: „%s”."
 
-#: ../src/easytag.c:1450
+#: ../src/easytag.c:1445
 msgid "Removed year from selected files."
 msgstr "Az évszám eltávolítva a kijelölt fájlokból."
 
-#: ../src/easytag.c:1476 ../src/easytag.c:1567
+#: ../src/easytag.c:1471 ../src/easytag.c:1561
 #, c-format
 msgid "Selected files tagged with track like 'xx/%s'."
 msgstr "A kijelölt fájlok megcímkézve a megadott számmal mint „xx/%s”."
 
-#: ../src/easytag.c:1479
+#: ../src/easytag.c:1474
 #, c-format
 msgid "Selected files tagged with track like 'xx'."
 msgstr "A kijelölt fájlok megcímkézve a megadott számmal mint „xx”."
 
-#: ../src/easytag.c:1483 ../src/easytag.c:1570
+#: ../src/easytag.c:1478 ../src/easytag.c:1564
 msgid "Removed track number from selected files."
 msgstr "A szám sorszáma eltávolítva a kijelölt fájlokból."
 
 #. msg = g_strdup_printf(_("All %d tracks numbered sequentially."), ETCore->ETFileSelectionList_Length);
-#: ../src/easytag.c:1540
+#: ../src/easytag.c:1534
 #, c-format
 msgid "Selected tracks numbered sequentially."
 msgstr "A kijelölt számok növekvően sorszámozva."
 
-#: ../src/easytag.c:1586
+#: ../src/easytag.c:1580
 #, c-format
 msgid "Selected files tagged with genre '%s'."
 msgstr "A kijelölt fájlok megcímkézve a műfajjal: „%s”."
 
-#: ../src/easytag.c:1588
+#: ../src/easytag.c:1582
 msgid "Removed genre from selected files."
 msgstr "A műfaj eltávolítva a kijelölt fájlokból."
 
-#: ../src/easytag.c:1610
+#: ../src/easytag.c:1604
 #, c-format
 msgid "Selected files tagged with comment '%s'."
 msgstr "A kijelölt fájlok megcímkézve a megjegyzéssel: „%s”."
 
-#: ../src/easytag.c:1612
+#: ../src/easytag.c:1606
 msgid "Removed comment from selected files."
 msgstr "A megjegyzés eltávolítva a kijelölt fájlokból."
 
-#: ../src/easytag.c:1626
+#: ../src/easytag.c:1620
 #, c-format
 msgid "Selected files tagged with composer '%s'."
 msgstr "A kijelölt fájlok megcímkézve a zeneszerzővel: „%s”."
 
-#: ../src/easytag.c:1628
+#: ../src/easytag.c:1622
 msgid "Removed composer from selected files."
 msgstr "A zeneszerző eltávolítva a kijelölt fájlokból."
 
-#: ../src/easytag.c:1643
+#: ../src/easytag.c:1637
 #, c-format
 msgid "Selected files tagged with original artist '%s'."
 msgstr "A kijelölt fájlok megcímkézve az eredeti előadóval: „%s”."
 
-#: ../src/easytag.c:1645
+#: ../src/easytag.c:1639
 msgid "Removed original artist from selected files."
 msgstr "Az eredeti előadó eltávolítva a kijelölt fájlokból."
 
-#: ../src/easytag.c:1660
+#: ../src/easytag.c:1654
 #, c-format
 msgid "Selected files tagged with copyright '%s'."
 msgstr "A kijelölt fájlok megcímkézve a szerzői joggal: „%s”."
 
-#: ../src/easytag.c:1662
+#: ../src/easytag.c:1656
 msgid "Removed copyright from selected files."
 msgstr "A szerzői jog eltávolítva a kijelölt fájlokból."
 
-#: ../src/easytag.c:1677
+#: ../src/easytag.c:1671
 #, c-format
 msgid "Selected files tagged with URL '%s'."
 msgstr "A kijelölt fájlok megcímkézve az URL-lel: „%s”."
 
-#: ../src/easytag.c:1679
+#: ../src/easytag.c:1673
 msgid "Removed URL from selected files."
 msgstr "Az URL eltávolítva a kijelölt fájlokból."
 
-#: ../src/easytag.c:1694
+#: ../src/easytag.c:1688
 #, c-format
 msgid "Selected files tagged with encoder name '%s'."
 msgstr "A kijelölt fájlok megcímkézve a kódoló nevével: „%s”."
 
-#: ../src/easytag.c:1696
+#: ../src/easytag.c:1690
 msgid "Removed encoder name from selected files."
 msgstr "A kodoló neve eltávolítva a kijelölt fájlokból."
 
-#: ../src/easytag.c:1728
+#: ../src/easytag.c:1722
 msgid "Selected files tagged with images."
 msgstr "A kijelölt fájlok megcímkézve a képekkel."
 
-#: ../src/easytag.c:1730
+#: ../src/easytag.c:1724
 msgid "Removed images from selected files."
 msgstr "A képek eltávolítva a kijelölt fájlokból."
 
-#: ../src/easytag.c:2011
+#: ../src/easytag.c:2005
 msgid "Select Mode and Mask, and redo the same action"
 msgstr "Válasszon módot és maszkot, és ismételje meg a műveletet"
 
-#: ../src/easytag.c:2063
+#: ../src/easytag.c:2057
 msgid "All tags have been scanned"
 msgstr "Minden címke feldolgozva"
 
-#: ../src/easytag.c:2119
+#: ../src/easytag.c:2113
 msgid "All tags have been removed"
 msgstr "Minden címke eltávolítva"
 
-#: ../src/easytag.c:2424
+#: ../src/easytag.c:2418
 #, c-format
 msgid "A file was changed by an external program"
 msgid_plural "%d files were changed by an external program."
 msgstr[0] "Egy fájlt egy külső program módosított"
 msgstr[1] "%d fájlt egy külső program módosított"
 
-#: ../src/easytag.c:2429
+#: ../src/easytag.c:2423
 msgid "Do you want to continue saving the file?"
 msgstr "Szeretné folytatni a fájl mentését?"
 
-#: ../src/easytag.c:2487 ../src/easytag.c:2507
+#: ../src/easytag.c:2481 ../src/easytag.c:2501
 msgid "Saving files was stopped"
 msgstr "A fájlok mentése le lett állítva"
 
-#: ../src/easytag.c:2509
+#: ../src/easytag.c:2503
 msgid "All files have been saved"
 msgstr "Minden fájl elmentve"
 
-#: ../src/easytag.c:2644
+#: ../src/easytag.c:2638
 #, c-format
 msgid "Cannot delete file (%s)"
 msgstr "Nem törölhető a fájl (%s)"
 
-#: ../src/easytag.c:2665
+#: ../src/easytag.c:2659
 msgid "Files have been partially deleted"
 msgstr "A fájlok részlegesen törölve"
 
-#: ../src/easytag.c:2667
+#: ../src/easytag.c:2661
 msgid "All files have been deleted"
 msgstr "Minden fájl törölve"
 
-#: ../src/easytag.c:2783
+#: ../src/easytag.c:2777
 #, c-format
 msgid "Do you want to write the tag of file '%s'?"
 msgstr "Szeretné beírni a(z) „%s” fájl címkéjét?"
 
-#: ../src/easytag.c:2785
+#: ../src/easytag.c:2779
 msgid "Confirm Tag Writing"
 msgstr "Címke írásának megerősítése"
 
-#: ../src/easytag.c:2790 ../src/easytag.c:2910 ../src/easytag.c:3173
+#: ../src/easytag.c:2784 ../src/easytag.c:2904 ../src/easytag.c:3167
 msgid "Repeat action for the remaining files"
 msgstr "Művelet ismétlése a hátralevő fájlokra"
 
 #. Directories and filename changed
-#: ../src/easytag.c:2874 ../src/scan_dialog.c:183
+#: ../src/easytag.c:2868 ../src/scan_dialog.c:183
 msgid "Rename File and Directory"
 msgstr "Fájl és könyvtár átnevezése"
 
-#: ../src/easytag.c:2875
+#: ../src/easytag.c:2869
 msgid "File and directory rename confirmation required"
 msgstr "A fájl és könyvtár átnevezése megerősítést igényel"
 
-#: ../src/easytag.c:2876
+#: ../src/easytag.c:2870
 #, c-format
 msgid "Do you want to rename the file and directory '%s' to '%s'?"
 msgstr "Szeretné átnevezni a fájlt és a könyvtárat („%s”) erre: „%s”?"
 
-#: ../src/easytag.c:2882
+#: ../src/easytag.c:2876
 msgid "Directory rename confirmation required"
 msgstr "A könyvtár átnevezése megerősítést igényel"
 
-#: ../src/easytag.c:2883
+#: ../src/easytag.c:2877
 #, c-format
 msgid "Do you want to rename the directory '%s' to '%s'?"
 msgstr "Szeretné átnevezni a könyvtárat („%s”) erre: „%s”?"
 
 #. Only filename changed
-#: ../src/easytag.c:2889
+#: ../src/easytag.c:2883
 msgid "Rename File"
 msgstr "Fájl átnevezése"
 
-#: ../src/easytag.c:2890
+#: ../src/easytag.c:2884
 msgid "File rename confirmation required"
 msgstr "A fájl átnevezése megerősítést igényel"
 
-#: ../src/easytag.c:2891
+#: ../src/easytag.c:2885
 #, c-format
 msgid "Do you want to rename the file '%s' to '%s'?"
 msgstr "Szeretné átnevezni a fájlt („%s”) erre: „%s”?"
 
-#: ../src/easytag.c:2957
+#: ../src/easytag.c:2951
 #, c-format
 msgid "Cannot rename file '%s' to '%s'"
 msgstr "Nem nevezhető át a(z) „%s” fájl erre: „%s”"
 
-#: ../src/easytag.c:2971
+#: ../src/easytag.c:2965
 #, c-format
 msgid "Cannot rename file '%s' to '%s': %s"
 msgstr "Nem nevezhető át a(z) „%s” fájl erre: „%s”: %s"
 
-#: ../src/easytag.c:2975
+#: ../src/easytag.c:2969
 msgid "File(s) not renamed"
 msgstr "A fájlok nem lettek átnevezve"
 
-#: ../src/easytag.c:3087
+#: ../src/easytag.c:3081
 #, c-format
 msgid "Writing tag of '%s'"
 msgstr "„%s” címkéjének írása"
 
-#: ../src/easytag.c:3094
+#: ../src/easytag.c:3088
 msgid "Tag(s) written"
 msgstr "Címkék kiírva"
 
-#: ../src/easytag.c:3109
+#: ../src/easytag.c:3103
 #, c-format
 msgid "Cannot write tag in file '%s' (%s)"
 msgstr "Nem írható címke a(z) „%s” fájlba (%s)"
 
-#: ../src/easytag.c:3122
+#: ../src/easytag.c:3116
 #, c-format
 msgid "Cannot write tag in file '%s'"
 msgstr "Nem írható címke a(z) „%s” fájlba"
 
-#: ../src/easytag.c:3125
+#: ../src/easytag.c:3119
 msgid "Tag Write Error"
 msgstr "Címkeírási hiba"
 
-#: ../src/easytag.c:3170 ../src/easytag.c:3184
+#: ../src/easytag.c:3164 ../src/easytag.c:3178
 #, c-format
 msgid "Do you really want to delete the file '%s'?"
 msgstr "Biztosan törölni szeretné a(z) „%s” fájlt?"
 
 # Fájl menü
-#: ../src/easytag.c:3176 ../src/easytag.c:3186
+#: ../src/easytag.c:3170 ../src/easytag.c:3180
 msgid "Delete File"
 msgstr "Fájl törlése"
 
-#: ../src/easytag.c:3211
+#: ../src/easytag.c:3205
 #, c-format
 msgid "File '%s' deleted"
 msgstr "A(z) „%s” fájl törölve"
 
-#: ../src/easytag.c:3346
+#: ../src/easytag.c:3340
 #, c-format
 msgid "Cannot read directory '%s'"
 msgstr "A(z) „%s” könyvtár nem olvasható"
 
-#: ../src/easytag.c:3350
+#: ../src/easytag.c:3344
 msgid "Directory Read Error"
 msgstr "Könyvtárolvasási hiba"
 
 #. Read the directory recursively
-#: ../src/easytag.c:3371
+#: ../src/easytag.c:3365
 #, c-format
 msgid "Search in progress…"
 msgstr "Keresés folyamatban…"
 
-#: ../src/easytag.c:3394 ../src/et_core.c:2864
+#: ../src/easytag.c:3388 ../src/et_core.c:2865
 #, c-format
 msgid "File: '%s'"
 msgstr "Fájl: „%s”"
 
-#: ../src/easytag.c:3444
+#: ../src/easytag.c:3438
 #, c-format
 msgid "Found one file in this directory and subdirectories"
 msgid_plural "Found %d files in this directory and subdirectories"
 msgstr[0] "Ebben a könyvtárban és az alkönyvtárakban egy fájl található"
 msgstr[1] "Ebben a könyvtárban és az alkönyvtárakban %d fájl található"
 
-#: ../src/easytag.c:3451
+#: ../src/easytag.c:3445
 #, c-format
 msgid "Found one file in this directory"
 msgid_plural "Found %d files in this directory"
 msgstr[0] "Ebben a könyvtárban egy fájl található"
 msgstr[1] "Ebben a könyvtárban %d fájl található"
 
-#: ../src/easytag.c:3473
+#: ../src/easytag.c:3467
 msgid "No file found in this directory and subdirectories"
 msgstr "Ebben a könyvtárban és az alkönyvtárakban nem található fájl"
 
-#: ../src/easytag.c:3475
+#: ../src/easytag.c:3469
 msgid "No file found in this directory"
 msgstr "Ebben a könyvtárban nem található fájl"
 
-#: ../src/easytag.c:3543
+#: ../src/easytag.c:3537
 #, c-format
 msgid "Error opening directory '%s' (%s)"
 msgstr "Hiba a könyvtár megnyitása közben: „%s” (%s)"
 
-#: ../src/easytag.c:3579
+#: ../src/easytag.c:3573
 #, c-format
 msgid "Cannot read directory (%s)"
 msgstr "A könyvtár nem olvasható (%s)"
 
-#: ../src/easytag.c:3599
+#: ../src/easytag.c:3593
 msgid "Searching for audio files…"
 msgstr "Hangfájlok keresése…"
 
-#: ../src/easytag.c:3600
+#: ../src/easytag.c:3594
 msgid "Searching"
 msgstr "Keresés"
 
-#: ../src/easytag.c:4266
+#: ../src/easytag.c:4260
 msgid "Select a directory to browse"
 msgstr "Válassza ki az átvizsgálandó könyvtárat"
 
 #. Menu items
-#: ../src/easytag.c:4412
+#: ../src/easytag.c:4406
 msgid "Tag selected files with this field"
 msgstr "A kijelölt fájlok címkézése ezzel a mezővel"
 
-#: ../src/easytag.c:4424 ../src/scan_dialog.c:2124
+#: ../src/easytag.c:4418 ../src/scan_dialog.c:2128
 msgid "Convert '_' and '%20' to spaces"
 msgstr "Az „_” és a „%20” átalakítása szóközre"
 
-#: ../src/easytag.c:4431 ../src/scan_dialog.c:2126
+#: ../src/easytag.c:4425 ../src/scan_dialog.c:2130
 msgid "Convert ' ' to '_'"
 msgstr "A „ ” átalakítása erre: „_”"
 
-#: ../src/easytag.c:4442
+#: ../src/easytag.c:4436
 msgid "All uppercase"
 msgstr "MINDENT NAGYBETÅ°SRE"
 
-#: ../src/easytag.c:4449
+#: ../src/easytag.c:4443
 msgid "All lowercase"
 msgstr "mindent kisbetűsre"
 
-#: ../src/easytag.c:4456
+#: ../src/easytag.c:4450
 msgid "First letter uppercase"
 msgstr "Első betű legyen nagybetű"
 
-#: ../src/easytag.c:4463
+#: ../src/easytag.c:4457
 msgid "First letter uppercase of each word"
 msgstr "Minden Szó Első Betűje Legyen Nagybetű"
 
-#: ../src/easytag.c:4474 ../src/prefs.c:1023 ../src/scan_dialog.c:2224
+#: ../src/easytag.c:4468 ../src/prefs.c:1023 ../src/scan_dialog.c:2254
 msgid "Remove spaces"
 msgstr "Szóközök eltávolítása"
 
-#: ../src/easytag.c:4481
+#: ../src/easytag.c:4475
 msgid "Insert space before uppercase letter"
 msgstr "Szóköz beszúrása minden nagybetű elé"
 
-#: ../src/easytag.c:4488
+#: ../src/easytag.c:4482
 msgid "Remove duplicate spaces or underscores"
 msgstr "Dupla szóközök vagy alsóvonások eltávolítása"
 
-#: ../src/easytag.c:4495
+#: ../src/easytag.c:4489
 msgid "Remove all text"
 msgstr "Minden szöveg eltávolítása"
 
-#: ../src/easytag.c:4514
+#: ../src/easytag.c:4508
 msgid "EasyTAG: Normal exit."
 msgstr "EasyTAG: Normális kilépés."
 
-#: ../src/easytag.c:4566
+#: ../src/easytag.c:4560
 msgid "Do you want to save them before quitting?"
 msgstr "El szeretné menteni azokat kilépés előtt?"
 
-#: ../src/easytag.c:4593
+#: ../src/easytag.c:4587
 msgid "Do you really want to quit?"
 msgstr "Biztosan ki szeretne lépni?"
 
-#: ../src/et_core.c:550
+#: ../src/et_core.c:551
 #, c-format
 msgid "Error reading tag from ogg file (%s)"
 msgstr "Hiba a címkék olvasása közben az ogg fájlból (%s)"
 
-#: ../src/et_core.c:579
+#: ../src/et_core.c:580
 #, c-format
-#| msgid "Error reading tag from ogg file (%s)"
 msgid "Error reading tag from Opus file (%s)"
 msgstr "Hiba a címkék olvasása közben az Opus fájlból (%s)"
 
-#: ../src/et_core.c:722
+#: ../src/et_core.c:723
 #, c-format
 msgid "Automatic corrections applied for file '%s'."
 msgstr "Automatikus javítások alkalmazva a(z) „%s” fájlhoz."
 
-#: ../src/et_core.c:2747
+#: ../src/et_core.c:2748
 msgid "ID3 Tag"
 msgstr "ID3 címke"
 
-#: ../src/et_core.c:2753
+#: ../src/et_core.c:2754
 msgid "Ogg Vorbis Tag"
 msgstr "Ogg Vorbis címke"
 
-#: ../src/et_core.c:2759
+#: ../src/et_core.c:2760
 msgid "FLAC Vorbis Tag"
 msgstr "FLAC Vorbis címke"
 
-#: ../src/et_core.c:2764
+#: ../src/et_core.c:2765
 msgid "APE Tag"
 msgstr "APE címke"
 
-#: ../src/et_core.c:2769
+#: ../src/et_core.c:2770
 msgid "MP4/M4A/AAC Tag"
 msgstr "MP4/M4A/AAC címke"
 
-#: ../src/et_core.c:2775
+#: ../src/et_core.c:2776
 msgid "Wavpack Tag"
 msgstr "Wavpack címke"
 
-#: ../src/et_core.c:2781
+#: ../src/et_core.c:2782
 msgid "Opus Tag"
 msgstr "Opus címke"
 
-#: ../src/et_core.c:2801
+#: ../src/et_core.c:2802
 msgid "MP3 File"
 msgstr "MP3 fájl"
 
-#: ../src/et_core.c:2805
+#: ../src/et_core.c:2806
 msgid "MP2 File"
 msgstr "MP2 fájl"
 
-#: ../src/et_core.c:2811
+#: ../src/et_core.c:2812
 msgid "Ogg Vorbis File"
 msgstr "Ogg Vorbis fájl"
 
 # ikon megjegyzés
-#: ../src/et_core.c:2817
+#: ../src/et_core.c:2818
 msgid "Speex File"
 msgstr "Speex fájl"
 
-#: ../src/et_core.c:2823
+#: ../src/et_core.c:2824
 msgid "FLAC File"
 msgstr "FLAC fájl"
 
-#: ../src/et_core.c:2828
+#: ../src/et_core.c:2829
 msgid "MusePack File"
 msgstr "MusePack fájl"
 
-#: ../src/et_core.c:2832
+#: ../src/et_core.c:2833
 msgid "Monkey's Audio File"
 msgstr "Monkey's hangfájl"
 
-#: ../src/et_core.c:2837
+#: ../src/et_core.c:2838
 msgid "MP4/AAC File"
 msgstr "MP4/AAC fájl"
 
-#: ../src/et_core.c:2843
+#: ../src/et_core.c:2844
 msgid "Wavpack File"
 msgstr "Wavpack fájl"
 
-#: ../src/et_core.c:2849
-#| msgid "MusePack File"
+#: ../src/et_core.c:2850
 msgid "Opus File"
 msgstr "Opus fájl"
 
-#: ../src/et_core.c:2908 ../src/et_core.c:2963
+#: ../src/et_core.c:2909 ../src/et_core.c:2964
 msgid "File not found"
 msgstr "A fájl nem található"
 
-#: ../src/et_core.c:2913
+#: ../src/et_core.c:2914
 #, c-format
 msgid "Cannot query file information (%s)"
 msgstr "Nem kérdezhetők le a fájlinformációk (%s)"
 
-#: ../src/et_core.c:2947
+#: ../src/et_core.c:2948
 msgid "Read-only file"
 msgstr "Csak olvasható fájl"
 
 #. And refresh the number of files in this directory
-#: ../src/et_core.c:3011
+#: ../src/et_core.c:3012
 #, c-format
 msgid "One file"
 msgid_plural "%u files"
 msgstr[0] "Egy fájl"
 msgstr[1] "%u fájl"
 
-#: ../src/et_core.c:3215
+#: ../src/et_core.c:3216
 #, c-format
 msgid "Images (%d)"
 msgstr "Képek (%d)"
 
 #. Bitrate
-#: ../src/et_core.c:3257 ../src/flac_header.c:205
-#: ../src/monkeyaudio_header.c:86 ../src/mp4_header.cc:142
+#: ../src/et_core.c:3258 ../src/flac_header.c:205
+#: ../src/monkeyaudio_header.c:86 ../src/mp4_header.cc:132
 #: ../src/mpeg_header.c:206 ../src/musepack_header.c:88
 #: ../src/ogg_header.c:401 ../src/opus_header.c:227 ../src/wavpack_header.c:78
 #, c-format
@@ -2554,28 +2568,28 @@ msgid "%d kb/s"
 msgstr "%d kb/s"
 
 #. Samplerate
-#: ../src/et_core.c:3262 ../src/flac_header.c:210
-#: ../src/monkeyaudio_header.c:91 ../src/mp4_header.cc:147
+#: ../src/et_core.c:3263 ../src/flac_header.c:210
+#: ../src/monkeyaudio_header.c:91 ../src/mp4_header.cc:137
 #: ../src/mpeg_header.c:211 ../src/musepack_header.c:93
 #: ../src/ogg_header.c:406 ../src/opus_header.c:232 ../src/wavpack_header.c:83
 #, c-format
 msgid "%d Hz"
 msgstr "%d Hz"
 
-#: ../src/et_core.c:3408 ../src/scan_dialog.c:688
+#: ../src/et_core.c:3409 ../src/scan_dialog.c:688
 #, c-format
 msgid "Could not convert filename '%s' into system filename encoding"
 msgstr "Nem alakítható át a(z) „%s” fájlnév rendszer fájlnév kodolássá"
 
-#: ../src/et_core.c:3410
+#: ../src/et_core.c:3411
 msgid "Try setting the environment variable G_FILENAME_ENCODING."
 msgstr "Próbálja meg beállítani a G_FILENAME_ENCODING környezeti változót."
 
-#: ../src/et_core.c:3411 ../src/scan_dialog.c:690
+#: ../src/et_core.c:3412 ../src/scan_dialog.c:690
 msgid "Filename translation"
 msgstr "Fájlnév fordítások"
 
-#: ../src/et_core.c:4116
+#: ../src/et_core.c:4117
 #, c-format
 msgid "Error writing tag type %d to file %s (%s)"
 msgstr "Hiba a(z) %d. címketípus fájlba írása közben: „%s” (%s)"
@@ -2584,7 +2598,7 @@ msgstr "Hiba a(z) %d. címketípus fájlba írása közben: „%s” (%s)"
 #. Mode
 #. mpeg4ip library seems to always return -1
 #. Mode
-#: ../src/flac_header.c:215 ../src/mp4_header.cc:153 ../src/ogg_header.c:411
+#: ../src/flac_header.c:215 ../src/mp4_header.cc:143 ../src/ogg_header.c:411
 #: ../src/opus_header.c:237 ../src/wavpack_header.c:88
 msgid "Channels:"
 msgstr "Csatornák:"
@@ -2594,7 +2608,7 @@ msgstr "Csatornák:"
 msgid "Error while opening file: '%s' as FLAC (%s)."
 msgstr "Hiba történt a(z) „%s” fájl mint FLAC megnyitása közben (%s)."
 
-#: ../src/flac_tag.c:352 ../src/ogg_tag.c:310
+#: ../src/flac_tag.c:352 ../src/ogg_tag.c:304
 #, c-format
 msgid ""
 "The year value '%s' seems to be invalid in file '%s'. The information will "
@@ -2613,17 +2627,17 @@ msgstr "A képblokk nem érvényes: „%s”"
 msgid "Error: Failed to write comments to file '%s' (%s)."
 msgstr "Hiba: Nem sikerült a megjegyzések írása a(z) „%s” fájlba (%s)."
 
-#: ../src/flac_tag.c:1099 ../src/ogg_tag.c:1166
+#: ../src/flac_tag.c:1099 ../src/ogg_tag.c:1161
 #, c-format
 msgid "Written tag of '%s'"
 msgstr "A(z) „%s” címkéje kiírva"
 
-#: ../src/id3_tag.c:158
+#: ../src/id3_tag.c:205
 #, c-format
 msgid "Error while reading file: '%s' (%s)"
 msgstr "Hiba a fájl olvasása közben: „%s” (%s)"
 
-#: ../src/id3_tag.c:170
+#: ../src/id3_tag.c:217
 #, c-format
 msgid ""
 "As the following corrupted file '%s' will cause an error in id3lib, it will "
@@ -2632,31 +2646,31 @@ msgstr ""
 "Amint a következő sérült fájl („%s”) hibát fog okozni az id3lib fájlban, az "
 "nem lesz feldolgozva"
 
-#: ../src/id3_tag.c:172
+#: ../src/id3_tag.c:219
 msgid "Corrupted file"
 msgstr "Sérült fájl"
 
-#: ../src/id3_tag.c:555
+#: ../src/id3_tag.c:592
 #, c-format
 msgid "Removed tag of '%s'"
 msgstr "A(z) „%s” címkéje eltávolítva"
 
-#: ../src/id3_tag.c:559 ../src/id3_tag.c:659
+#: ../src/id3_tag.c:596 ../src/id3_tag.c:696
 #, c-format
 msgid "Error while removing ID3v1 tag of '%s' (%s)"
 msgstr "Hiba történt a(z) „%s” ID3v1 címkéjének eltávolításakor (%s)"
 
-#: ../src/id3_tag.c:561 ../src/id3_tag.c:631
+#: ../src/id3_tag.c:598 ../src/id3_tag.c:668
 #, c-format
 msgid "Error while removing ID3v2 tag of '%s' (%s)"
 msgstr "Hiba történt a(z) „%s” ID3v2 címkéjének eltávolításakor (%s)"
 
-#: ../src/id3_tag.c:580
+#: ../src/id3_tag.c:617
 #, c-format
 msgid "Error while updating ID3v2 tag of '%s' (%s)"
 msgstr "Hiba történt a(z) „%s” ID3v1 címkéjének frissítésekor (%s)"
 
-#: ../src/id3_tag.c:608
+#: ../src/id3_tag.c:645
 msgid ""
 "You have tried to save this tag to Unicode but it was detected that your "
 "version of id3lib is buggy"
@@ -2664,7 +2678,7 @@ msgstr ""
 "Ezt a címkét Unicode formátumban próbálta meg elmenteni, de azt észleltük, "
 "hogy az id3lib verziója hibás"
 
-#: ../src/id3_tag.c:610
+#: ../src/id3_tag.c:647
 #, c-format
 msgid ""
 "If you reload this file, some characters in the tag may not be displayed "
@@ -2683,90 +2697,90 @@ msgstr ""
 "\n"
 "File: %s"
 
-#: ../src/id3_tag.c:617
+#: ../src/id3_tag.c:654
 msgid "Buggy id3lib"
 msgstr "Hibás id3lib"
 
-#: ../src/id3_tag.c:651
+#: ../src/id3_tag.c:688
 #, c-format
 msgid "Error while updating ID3v1 tag of '%s' (%s)"
 msgstr "Hiba történt a(z) „%s” ID3v2 címkéjének frissítésekor (%s)"
 
-#: ../src/id3_tag.c:665 ../src/id3v24_tag.c:1048
+#: ../src/id3_tag.c:702 ../src/id3v24_tag.c:1108
 #, c-format
 msgid "Updated tag of '%s'"
 msgstr "A(z) „%s” címkéje frissítve"
 
-#: ../src/id3_tag.c:684
+#: ../src/id3_tag.c:721
 msgid "No error reported"
 msgstr "Nem történt hiba"
 
-#: ../src/id3_tag.c:686
+#: ../src/id3_tag.c:723
 msgid "No available memory"
 msgstr "Nincs elérhető memória"
 
-#: ../src/id3_tag.c:688
+#: ../src/id3_tag.c:725
 msgid "No data to parse"
 msgstr "Nincs feldolgozandó adat"
 
-#: ../src/id3_tag.c:690
+#: ../src/id3_tag.c:727
 msgid "Improperly formatted data"
 msgstr "Helytelenül formázott adatok"
 
-#: ../src/id3_tag.c:692
+#: ../src/id3_tag.c:729
 msgid "No buffer to write to"
 msgstr "Nincs írható puffer"
 
-#: ../src/id3_tag.c:694
+#: ../src/id3_tag.c:731
 msgid "Buffer is too small"
 msgstr "A puffer túl kicsi"
 
-#: ../src/id3_tag.c:696
+#: ../src/id3_tag.c:733
 msgid "Invalid frame ID"
 msgstr "Érvénytelen keret azonosító"
 
-#: ../src/id3_tag.c:698
+#: ../src/id3_tag.c:735
 msgid "Requested field not found"
 msgstr "A kért mező nem található"
 
-#: ../src/id3_tag.c:700
+#: ../src/id3_tag.c:737
 msgid "Unknown field type"
 msgstr "Ismeretlen mezőtípus"
 
-#: ../src/id3_tag.c:702
+#: ../src/id3_tag.c:739
 msgid "Tag is already attached to a file"
 msgstr "A címke már csatolva van egy fájlhoz"
 
-#: ../src/id3_tag.c:704
+#: ../src/id3_tag.c:741
 msgid "Invalid tag version"
 msgstr "Érvénytelen címke verzió"
 
-#: ../src/id3_tag.c:706
+#: ../src/id3_tag.c:743
 msgid "No file to parse"
 msgstr "Nincs feldolgozandó fájl"
 
-#: ../src/id3_tag.c:708
+#: ../src/id3_tag.c:745
 msgid "Attempting to write to a read-only file"
 msgstr "Írási kísérlet csak olvasható fájlba"
 
-#: ../src/id3_tag.c:710
+#: ../src/id3_tag.c:747
 msgid "Error in compression/uncompression"
 msgstr "Hiba a tömörítésben/kibontásban"
 
-#: ../src/id3_tag.c:712
+#: ../src/id3_tag.c:749
 msgid "Unknown error message"
 msgstr "Ismeretlen hibaüzenet"
 
-#: ../src/id3_tag.c:1316
+#: ../src/id3_tag.c:1357
 #, c-format
 msgid "Error while creating temporary file: '%s'"
 msgstr "Hiba az átmeneti fájl létrehozása közben: „%s”"
 
-#: ../src/id3_tag.c:1323
+#: ../src/id3_tag.c:1364
 msgid "Error while creating temporary file"
 msgstr "Hiba az átmeneti fájl létrehozása közben"
 
-#: ../src/id3_tag.c:1343
+#: ../src/id3_tag.c:1384
 #, c-format
 msgid "Error while writing to file: '%s' (%s)"
 msgstr "Hiba a fájl írása közben: „%s” (%s)"
@@ -2776,19 +2790,19 @@ msgstr "Hiba a fájl írása közben: „%s” (%s)"
 #. * missing (not read for some reason) while reading from
 #. * the file.
 #.
-#: ../src/id3v24_tag.c:1503
+#: ../src/id3v24_tag.c:1563
 #, c-format
 msgid "Cannot write tag of file ‘%s’ (a byte was missing)"
 msgid_plural "Cannot write tag of file ‘%s’ (%s bytes were missing)"
 msgstr[0] "Nem írható a(z) „%s” fájl címkéje (egy bájt hiányzik)"
 msgstr[1] "Nem írható a(z) „%s” fájl címkéje (%s bájt hiányzik)"
 
-#: ../src/id3v24_tag.c:1524
+#: ../src/id3v24_tag.c:1584
 #, c-format
 msgid "Cannot save tag of file '%s'"
 msgstr "Nem menthető a(z) „%s” fájl címkéje"
 
-#: ../src/id3v24_tag.c:1535
+#: ../src/id3v24_tag.c:1595
 #, c-format
 msgid "Size error while saving tag of '%s'"
 msgstr "Mérethiba a(z) „%s” címkéjének mentése közben"
@@ -2913,7 +2927,7 @@ msgstr "Lejátszólista fájl hiba"
 msgid "Written playlist file '%s'"
 msgstr "A(z) „%s” lejátszólista fájl kiírva"
 
-#: ../src/misc.c:1540 ../src/scan_dialog.c:2709 ../src/scan_dialog.c:2771
+#: ../src/misc.c:1540 ../src/scan_dialog.c:2747 ../src/scan_dialog.c:2809
 msgid "Invalid scanner mask"
 msgstr "Érvénytelen feldolgozómaszk"
 
@@ -2999,7 +3013,7 @@ msgid "Delete the selected line"
 msgstr "A kijelölt sor törlése"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2823 ../src/misc.c:2918 ../src/misc.c:3404
+#: ../src/misc.c:2823 ../src/misc.c:2918 ../src/misc.c:3399
 msgid "Delete all blank lines"
 msgstr "Minden üres sor törlése"
 
@@ -3014,7 +3028,7 @@ msgid "Move down the selected line"
 msgstr "Kijelölt sor mozgatása le"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2856 ../src/misc.c:2951 ../src/misc.c:3428
+#: ../src/misc.c:2856 ../src/misc.c:2951 ../src/misc.c:3423
 msgid "Reload"
 msgstr "Újratöltés"
 
@@ -3041,29 +3055,29 @@ msgstr ""
 msgid "Cannot retrieve file info (%s)"
 msgstr "Nem fogadhatók a fájlinformációk (%s)"
 
-#: ../src/misc.c:3140
+#: ../src/misc.c:3141
 #, c-format
 msgid "Can't open file '%s' (%s)"
 msgstr "Nem nyitható meg a(z) „%s” fájl (%s)"
 
-#: ../src/misc.c:3176
+#: ../src/misc.c:3170
 #, c-format
 msgid "Error reading file (%s)"
 msgstr "Hiba a fájl olvasása közben (%s)"
 
-#: ../src/misc.c:3392
+#: ../src/misc.c:3387
 msgid "Insert a blank line"
 msgstr "Üres sor beszúrása"
 
-#: ../src/misc.c:3398
+#: ../src/misc.c:3393
 msgid "Delete this line"
 msgstr "Aktuális sor törlése"
 
-#: ../src/misc.c:3413
+#: ../src/misc.c:3408
 msgid "Move up this line"
 msgstr "Aktuális sor mozgatása fel"
 
-#: ../src/misc.c:3419
+#: ../src/misc.c:3414
 msgid "Move down this line"
 msgstr "Aktuális sor mozgatása le"
 
@@ -3073,21 +3087,16 @@ msgstr "Aktuális sor mozgatása le"
 msgid "Profile:"
 msgstr "Profil:"
 
-#: ../src/mp4_header.cc:60 ../src/mp4_tag.cc:91 ../src/mp4_tag.cc:284
+#: ../src/mp4_header.cc:59 ../src/mp4_tag.cc:91 ../src/mp4_tag.cc:284
 msgid "MP4 format invalid"
 msgstr "Érvénytelen MP4 formátum"
 
-#: ../src/mp4_header.cc:68
-#, c-format
-msgid "File contains no audio track: '%s'"
-msgstr "A fájl nem tartalmaz hangszámot: „%s”"
-
-#: ../src/mp4_header.cc:79
+#: ../src/mp4_header.cc:69
 #, c-format
 msgid "Error reading properties from file: '%s'"
 msgstr "Hiba a tulajdonságok fájlból olvasása közben: „%s”"
 
-#: ../src/mp4_header.cc:140 ../src/mpeg_header.c:204
+#: ../src/mp4_header.cc:130 ../src/mpeg_header.c:204
 #, c-format
 msgid "~%d kb/s"
 msgstr "~%d kb/s"
@@ -3167,184 +3176,184 @@ msgstr ""
 msgid "Error: Failed to open file: '%s' as Vorbis (%s)."
 msgstr "Hiba: Nem sikerült a(z) „%s” fájl Vorbisként való megnyitása (%s)."
 
-#: ../src/ogg_tag.c:712 ../src/ogg_tag.c:887
+#: ../src/ogg_tag.c:706 ../src/ogg_tag.c:881
 #, c-format
 msgid "Warning: The Ogg Vorbis file '%s' contains an ID3v2 tag."
 msgstr "Figyelem: Az Ogg Vorbis fájl „%s” ID3v2 címkét tartalmaz."
 
-#: ../src/ogg_tag.c:1035 ../src/picture.c:1258
+#: ../src/ogg_tag.c:1030 ../src/picture.c:1082
 #, c-format
 msgid "Error with 'loader_write': %s"
 msgstr "Hiba a „loader_write” közben: %s"
 
-#: ../src/ogg_tag.c:1050 ../src/picture.c:1181
+#: ../src/ogg_tag.c:1045 ../src/picture.c:1005
 #, c-format
 msgid "Error with 'loader_close': %s"
 msgstr "Hiba a „loader_close” közben: %s"
 
-#: ../src/picture.c:104
+#: ../src/picture.c:244 ../src/picture.c:269
 #, c-format
-msgid "Image file not saved: %s"
-msgstr "A képfájl nincs mentve: %s"
+msgid "Image file not loaded: %s"
+msgstr "A képfájl nincs betöltve: %s"
 
-#: ../src/picture.c:154
+#: ../src/picture.c:261
 #, c-format
 msgid "Cannot open file: '%s'"
 msgstr "Nem nyitható meg a fájl: „%s”"
 
-#: ../src/picture.c:158
+#: ../src/picture.c:265
 msgid "Image File Error"
 msgstr "Képfájl hiba"
 
-#: ../src/picture.c:162 ../src/picture.c:424
-#, c-format
-msgid "Image file not loaded: %s"
-msgstr "A képfájl nincs betöltve: %s"
-
-#: ../src/picture.c:446
+#: ../src/picture.c:276
 msgid "Image file loaded"
 msgstr "A képfájl betöltve"
 
-#: ../src/picture.c:504
+#: ../src/picture.c:334
 msgid "Add Images"
 msgstr "Képek hozzáadása"
 
-#: ../src/picture.c:514 ../src/picture.c:875
+#: ../src/picture.c:344 ../src/picture.c:701
 msgid "All Files"
 msgstr "Minden fájl"
 
-#: ../src/picture.c:520 ../src/picture.c:881
+#: ../src/picture.c:350 ../src/picture.c:707
 msgid "PNG and JPEG"
 msgstr "PNG és JPEG"
 
-#: ../src/picture.c:651
+#: ../src/picture.c:477
 #, c-format
 msgid "Image Properties %d/%d"
 msgstr "Képtulajdonságok %d/%d"
 
-#: ../src/picture.c:677
+#: ../src/picture.c:503
 msgid "Image Type"
 msgstr "Képtípus"
 
 #. Description of the picture
-#: ../src/picture.c:735
+#: ../src/picture.c:561
 msgid "Image Description:"
 msgstr "Kép leírása:"
 
-#: ../src/picture.c:862
+#: ../src/picture.c:688
 #, c-format
 msgid "Save Image %d/%d"
 msgstr "Kép mentése %d/%d"
 
-#: ../src/picture.c:1022
+#: ../src/picture.c:763
+#, c-format
+msgid "Image file not saved: %s"
+msgstr "A képfájl nincs mentve: %s"
+
+#: ../src/picture.c:846
 msgid "JPEG image"
 msgstr "JPEG-kép"
 
-#: ../src/picture.c:1024
+#: ../src/picture.c:848
 msgid "PNG image"
 msgstr "PNG-kép"
 
-#: ../src/picture.c:1026
+#: ../src/picture.c:850
 msgid "GIF image"
 msgstr "GIF-kép"
 
-#: ../src/picture.c:1028
+#: ../src/picture.c:852
 msgid "Unknown image"
 msgstr "Ismeretlen kép"
 
-#: ../src/picture.c:1040
+#: ../src/picture.c:864
 msgid "32x32 pixel PNG file icon"
 msgstr "32x32 képpontos PNG fájl ikon"
 
-#: ../src/picture.c:1042
+#: ../src/picture.c:866
 msgid "Other file icon"
 msgstr "Egyéb fájl ikon"
 
-#: ../src/picture.c:1044
+#: ../src/picture.c:868
 msgid "Cover (front)"
 msgstr "Borító (első)"
 
-#: ../src/picture.c:1046
+#: ../src/picture.c:870
 msgid "Cover (back)"
 msgstr "Borító (hátsó)"
 
-#: ../src/picture.c:1048
+#: ../src/picture.c:872
 msgid "Leaflet page"
 msgstr "Szórólap oldal"
 
-#: ../src/picture.c:1050
+#: ../src/picture.c:874
 msgid "Media (e.g. label side of CD)"
 msgstr "Média (például a CD címke oldala)"
 
-#: ../src/picture.c:1052
+#: ../src/picture.c:876
 msgid "Lead artist/lead performer/soloist"
 msgstr "Vezető szerző / vezető előadó / szólista"
 
-#: ../src/picture.c:1054
+#: ../src/picture.c:878
 msgid "Artist/performer"
 msgstr "Szerző / előadó"
 
-#: ../src/picture.c:1056
+#: ../src/picture.c:880
 msgid "Conductor"
 msgstr "Karmester"
 
-#: ../src/picture.c:1058
+#: ../src/picture.c:882
 msgid "Band/Orchestra"
 msgstr "Banda / Zenekar"
 
-#: ../src/picture.c:1062
+#: ../src/picture.c:886
 msgid "Lyricist/text writer"
 msgstr "Dalszövegíró / szövegíró"
 
-#: ../src/picture.c:1064
+#: ../src/picture.c:888
 msgid "Recording location"
 msgstr "Felvétel helyszíne"
 
-#: ../src/picture.c:1066
+#: ../src/picture.c:890
 msgid "During recording"
 msgstr "Felvétel közben"
 
-#: ../src/picture.c:1068
+#: ../src/picture.c:892
 msgid "During performance"
 msgstr "Előadás közben"
 
-#: ../src/picture.c:1070
+#: ../src/picture.c:894
 msgid "Movie/video screen capture"
 msgstr "Film / videófelvétel"
 
-#: ../src/picture.c:1072
+#: ../src/picture.c:896
 msgid "A bright colored fish"
 msgstr "Egy világos színes hal"
 
-#: ../src/picture.c:1074
+#: ../src/picture.c:898
 msgid "Illustration"
 msgstr "Illusztráció"
 
-#: ../src/picture.c:1076
+#: ../src/picture.c:900
 msgid "Band/Artist logotype"
 msgstr "Banda / Előadó logója"
 
-#: ../src/picture.c:1078
+#: ../src/picture.c:902
 msgid "Publisher/studio logotype"
 msgstr "Kiadó / stúdió logója"
 
-#: ../src/picture.c:1082
+#: ../src/picture.c:906
 msgid "Unknown image type"
 msgstr "Ismeretlen képtípus"
 
-#: ../src/picture.c:1112 ../src/picture.c:1123
+#: ../src/picture.c:936 ../src/picture.c:947
 msgid "pixels"
 msgstr "képpont"
 
-#: ../src/picture.c:1113 ../src/picture.c:1124
+#: ../src/picture.c:937 ../src/picture.c:948
 msgid "Type"
 msgstr "Típus"
 
-#: ../src/picture.c:1125
+#: ../src/picture.c:949
 msgid "Description"
 msgstr "Leírás"
 
-#: ../src/picture.c:1241
+#: ../src/picture.c:1065
 msgid ""
 "Cannot display the image because not enough data has been read to determine "
 "how to create the image buffer."
@@ -3352,18 +3361,18 @@ msgstr ""
 "Nem jeleníthető meg a kép, mert nem lett elegendő adat beolvasva annak "
 "meghatározásához, hogy hogyan jöjjön létre a képpuffer."
 
-#: ../src/picture.c:1248
+#: ../src/picture.c:1072
 msgid "Cannot display the image"
 msgstr "Nem jeleníthető meg a kép"
 
-#: ../src/picture.c:1250
+#: ../src/picture.c:1074
 msgid ""
 "Not enough data has been read to determine how to create the image buffer."
 msgstr ""
 "Nem lett elegendő adat beolvasva annak meghatározásához, hogy hogyan jöjjön "
 "létre a képpuffer."
 
-#: ../src/picture.c:1252
+#: ../src/picture.c:1076
 msgid "Load Image File"
 msgstr "Képfájl betöltése"
 
@@ -4371,7 +4380,6 @@ msgstr "Felhasználói jelszó:"
 
 # bubble help
 #: ../src/prefs.c:1338
-#| msgid "Password of user for the the proxy server."
 msgid "Password of user for the proxy server."
 msgstr "A felhasználó jelszava a proxy-kiszolgálóhoz."
 
@@ -4535,44 +4543,44 @@ msgstr "Az új fájlnév sikeresen feldolgozva"
 msgid "New filename successfully scanned: %s"
 msgstr "Az új fájlnév sikeresen feldolgozva: %s"
 
-#: ../src/scan_dialog.c:1628
+#: ../src/scan_dialog.c:1632
 #, c-format
 msgid "Error while processing fields: %s"
 msgstr "Hiba a mezők feldolgozása közben: %s"
 
 #. The window
-#: ../src/scan_dialog.c:1798
+#: ../src/scan_dialog.c:1802
 msgid "Tag and Filename Scan"
 msgstr "Címke és fájlnév feldolgozás"
 
 # ikon megjegyzés
 #. TODO: Set related action to match AM_SCAN_FILES.
-#: ../src/scan_dialog.c:1807
+#: ../src/scan_dialog.c:1811
 msgid "Scan Files"
 msgstr "Fájlok vizsgálata"
 
 #. Option Menu
-#: ../src/scan_dialog.c:1835
+#: ../src/scan_dialog.c:1839
 msgid "Scanner:"
 msgstr "Feldolgozó: "
 
-#: ../src/scan_dialog.c:1856
+#: ../src/scan_dialog.c:1860
 msgid "Select the type of scanner to use"
 msgstr "A használandó feldolgozó típusának kiválasztása"
 
-#: ../src/scan_dialog.c:1865
+#: ../src/scan_dialog.c:1869
 msgid "Scanner Preferences"
 msgstr "Feldolgozó beállítások"
 
-#: ../src/scan_dialog.c:1874
+#: ../src/scan_dialog.c:1878
 msgid "Show / Hide Masks Editor"
 msgstr "Maszkszerkesztő megjelenítése / elrejtése"
 
-#: ../src/scan_dialog.c:1884
+#: ../src/scan_dialog.c:1888
 msgid "Show / Hide Legend"
 msgstr "Jelmagyarázat megjelenítése / elrejtése"
 
-#: ../src/scan_dialog.c:1914
+#: ../src/scan_dialog.c:1918
 msgid ""
 "Select or type in a mask using codes (see Legend) to parse filename and "
 "path. Used to fill in tag fields"
@@ -4582,16 +4590,16 @@ msgstr ""
 "a címkemezők kitöltéséhez."
 
 #. Preview label
-#: ../src/scan_dialog.c:1938
+#: ../src/scan_dialog.c:1942
 msgid "Fill tag preview"
 msgstr "Címke kitöltése előnézet"
 
 # bubble help
-#: ../src/scan_dialog.c:1968
+#: ../src/scan_dialog.c:1972
 msgid "Prefix mask with current path"
 msgstr "Előtag maszk a jelenlegi útvonallal"
 
-#: ../src/scan_dialog.c:1982
+#: ../src/scan_dialog.c:1986
 msgid ""
 "Select or type in a mask using codes (see Legend) to parse tag fields. Used "
 "to rename the file.\n"
@@ -4605,16 +4613,16 @@ msgstr ""
 "akkor ez egy abszolút elérési út, egyébként relatív a régi útvonalhoz."
 
 #. Preview label
-#: ../src/scan_dialog.c:2007
+#: ../src/scan_dialog.c:2011
 msgid "Rename file preview"
 msgstr "Fájl átnevezése előnézet"
 
-#: ../src/scan_dialog.c:2026
+#: ../src/scan_dialog.c:2030
 msgid "Select fields:"
 msgstr "Mezők kijelölése:"
 
 # bubble help
-#: ../src/scan_dialog.c:2029
+#: ../src/scan_dialog.c:2033
 msgid ""
 "The buttons on the right represent the fields which can be processed. Select "
 "those which interest you"
@@ -4623,147 +4631,147 @@ msgstr ""
 "dolgozni. Válassza ki azokat, amelyek érdeklik."
 
 #. Advice for Translators: set the first letter of filename translated
-#: ../src/scan_dialog.c:2033
+#: ../src/scan_dialog.c:2037
 msgid "F"
 msgstr "F"
 
 # bubble help
-#: ../src/scan_dialog.c:2035
+#: ../src/scan_dialog.c:2039
 msgid "Process filename field"
 msgstr "Fájlnév mező feldolgozása"
 
 #. Advice for Translators: set the first letter of title translated
-#: ../src/scan_dialog.c:2037
+#: ../src/scan_dialog.c:2041
 msgid "T"
 msgstr "C"
 
 # bubble help
-#: ../src/scan_dialog.c:2038
+#: ../src/scan_dialog.c:2042
 msgid "Process title field"
 msgstr "A cím mező feldolgozása"
 
 #. Advice for Translators: set the first letter of artist translated
-#: ../src/scan_dialog.c:2040
+#: ../src/scan_dialog.c:2044
 msgid "Ar"
 msgstr "E"
 
 # bubble help
-#: ../src/scan_dialog.c:2041
+#: ../src/scan_dialog.c:2045
 msgid "Process file artist field"
 msgstr "Az előadó mező feldolgozása"
 
 #. Advice for Translators: set the first letter of album artist translated
-#: ../src/scan_dialog.c:2043
+#: ../src/scan_dialog.c:2047
 msgid "AA"
 msgstr "AE"
 
 # bubble help
-#: ../src/scan_dialog.c:2044
+#: ../src/scan_dialog.c:2048
 msgid "Process album artist field"
 msgstr "Az album előadója mező feldolgozása"
 
 #. Advice for Translators: set the first letter of album translated
-#: ../src/scan_dialog.c:2046
+#: ../src/scan_dialog.c:2050
 msgid "Al"
 msgstr "A"
 
 # bubble help
-#: ../src/scan_dialog.c:2047
+#: ../src/scan_dialog.c:2051
 msgid "Process album field"
 msgstr "Az album mező feldolgozása"
 
 #. Advice for Translators: set the first letter of genre translated
-#: ../src/scan_dialog.c:2049
+#: ../src/scan_dialog.c:2053
 msgid "G"
 msgstr "M"
 
 # bubble help
-#: ../src/scan_dialog.c:2050
+#: ../src/scan_dialog.c:2054
 msgid "Process genre field"
 msgstr "A műfaj mező feldolgozása"
 
 #. Advice for Translators: set the first letter of comment translated
-#: ../src/scan_dialog.c:2052
+#: ../src/scan_dialog.c:2056
 msgid "Cm"
 msgstr "MJ"
 
 # bubble help
-#: ../src/scan_dialog.c:2053
+#: ../src/scan_dialog.c:2057
 msgid "Process comment field"
 msgstr "A megjegyzés mező feldolgozása"
 
 #. Advice for Translators: set the first letter of composer translated
-#: ../src/scan_dialog.c:2055
+#: ../src/scan_dialog.c:2059
 msgid "Cp"
 msgstr "Z"
 
 # bubble help
-#: ../src/scan_dialog.c:2056
+#: ../src/scan_dialog.c:2060
 msgid "Process composer field"
 msgstr "A zeneszerző mező feldolgozása"
 
 #. Advice for Translators: set the first letter of orig artist translated
-#: ../src/scan_dialog.c:2058
+#: ../src/scan_dialog.c:2062
 msgid "O"
 msgstr "EE"
 
 # bubble help
-#: ../src/scan_dialog.c:2059
+#: ../src/scan_dialog.c:2063
 msgid "Process original artist field"
 msgstr "Az eredeti előadó mező feldolgozása"
 
 #. Advice for Translators: set the first letter of copyright translated
-#: ../src/scan_dialog.c:2061
+#: ../src/scan_dialog.c:2065
 msgid "Cr"
 msgstr "Sz"
 
 # bubble help
-#: ../src/scan_dialog.c:2062
+#: ../src/scan_dialog.c:2066
 msgid "Process copyright field"
 msgstr "A szerzői jog mező feldolgozása"
 
 #. Advice for Translators: set the first letter of URL translated
-#: ../src/scan_dialog.c:2064
+#: ../src/scan_dialog.c:2068
 msgid "U"
 msgstr "U"
 
 # bubble help
-#: ../src/scan_dialog.c:2065
+#: ../src/scan_dialog.c:2069
 msgid "Process URL field"
 msgstr "Az URL mező feldolgozása"
 
 #. Advice for Translators: set the first letter of encoder name translated
-#: ../src/scan_dialog.c:2067
+#: ../src/scan_dialog.c:2071
 msgid "E"
 msgstr "K"
 
 # bubble help
-#: ../src/scan_dialog.c:2068
+#: ../src/scan_dialog.c:2072
 msgid "Process encoder name field"
 msgstr "A kódoló neve mező feldolgozása"
 
-#: ../src/scan_dialog.c:2112
+#: ../src/scan_dialog.c:2116
 msgid "Invert selection"
 msgstr "Kijelölés megfordítása"
 
-#: ../src/scan_dialog.c:2119
+#: ../src/scan_dialog.c:2123
 msgid "Select/Unselect all"
 msgstr "Összes kijelölése / Kijelölés megszüntetése"
 
-#: ../src/scan_dialog.c:2134
+#: ../src/scan_dialog.c:2138
 msgid "Convert:"
 msgstr "Átalakítás:"
 
-#: ../src/scan_dialog.c:2136
+#: ../src/scan_dialog.c:2140
 msgid "to: "
 msgstr "ebbe: "
 
-#: ../src/scan_dialog.c:2143
+#: ../src/scan_dialog.c:2147
 msgid "Do not convert"
 msgstr "Ne alakítsa át"
 
 # bubble help
-#: ../src/scan_dialog.c:2162
+#: ../src/scan_dialog.c:2177
 msgid ""
 "The underscore character or the string '%20' are replaced by one space. "
 "Example, before: 'Text%20In%20An_Entry', after: 'Text In An Entry'."
@@ -4773,7 +4781,7 @@ msgstr ""
 "bejegyzés tartalmában”."
 
 # bubble help
-#: ../src/scan_dialog.c:2165
+#: ../src/scan_dialog.c:2180
 msgid ""
 "The space character is replaced by one underscore character. Example, "
 "before: 'Text In An Entry', after: 'Text_In_An_Entry'."
@@ -4781,39 +4789,39 @@ msgstr ""
 "A szóköz karakter cserélve lesz egy alsóvonás karakterre. Például előtte: "
 "„Szöveg egy bejegyzésben”, utána: „Szöveg_egy_bejegyzésben”."
 
-#: ../src/scan_dialog.c:2168
+#: ../src/scan_dialog.c:2183
 msgid ""
 "Replace a string by another one. Note that the search is case sensitive."
 msgstr ""
 "Egy karakterlánc cseréje egy másikkal. Figyeljen arra, hogy a keresés kis- "
 "és nagybetű érzékeny."
 
-#: ../src/scan_dialog.c:2175
+#: ../src/scan_dialog.c:2190
 msgid "Capitalize all"
 msgstr "Összes nagy kezdőbetűsre"
 
-#: ../src/scan_dialog.c:2177
+#: ../src/scan_dialog.c:2192
 msgid "Lowercase all"
 msgstr "Összes kisbetűsre"
 
-#: ../src/scan_dialog.c:2179
+#: ../src/scan_dialog.c:2194
 msgid "Capitalize first letter"
 msgstr "Első betű nagybetűsre"
 
-#: ../src/scan_dialog.c:2181
+#: ../src/scan_dialog.c:2196
 msgid "Capitalize the first letter of each word"
 msgstr "Minden szó első betűje legyen nagybetű"
 
-#: ../src/scan_dialog.c:2182
+#: ../src/scan_dialog.c:2197
 msgid "Detect Roman numerals"
 msgstr "Római számok felismerése"
 
-#: ../src/scan_dialog.c:2184
+#: ../src/scan_dialog.c:2199
 msgid "Do not change capitalization"
 msgstr "Ne változtassa meg a kis- és nagybetűket"
 
 # bubble help
-#: ../src/scan_dialog.c:2206
+#: ../src/scan_dialog.c:2236
 msgid ""
 "Convert all words in all fields to upper case. Example, before: 'Text IN AN "
 "entry', after: 'TEXT IN AN ENTRY'."
@@ -4822,7 +4830,7 @@ msgstr ""
 "EGY bejegyzésben”, utána: „SZÖVEG EGY BEJEGYZÉSBEN”."
 
 # bubble help
-#: ../src/scan_dialog.c:2209
+#: ../src/scan_dialog.c:2239
 msgid ""
 "Convert all words in all fields to lower case. Example, before: 'TEXT IN an "
 "entry', after: 'text in an entry'."
@@ -4831,7 +4839,7 @@ msgstr ""
 "EGY bejegyzésben”, utána: „szöveg egy bejegyzésben”."
 
 # bubble help
-#: ../src/scan_dialog.c:2212
+#: ../src/scan_dialog.c:2242
 msgid ""
 "Convert the initial of the first word in all fields to upper case. Example, "
 "before: 'text IN An ENTRY', after: 'Text in an entry'."
@@ -4840,7 +4848,7 @@ msgstr ""
 "„Szöveg EGY Bejegyzésben”, utána: „Szöveg egy bejegyzésben”."
 
 # bubble help
-#: ../src/scan_dialog.c:2215
+#: ../src/scan_dialog.c:2245
 msgid ""
 "Convert the initial of each word in all fields to upper case. Example, "
 "before: 'Text in an ENTRY', after: 'Text In An Entry'."
@@ -4849,7 +4857,7 @@ msgstr ""
 "előtte: „Szöveg egy BEJEGYZÉSBEN”, utána: „Szöveg Egy Bejegyzésben”."
 
 # bubble help
-#: ../src/scan_dialog.c:2218
+#: ../src/scan_dialog.c:2248
 msgid ""
 "Force to convert to upper case the Roman numerals. Example, before: 'ix. "
 "text in an entry', after: 'IX. Text In An Entry'."
@@ -4857,20 +4865,20 @@ msgstr ""
 "A római számok nagybetűsre alakításának erőltetése. Például előtte: „ix. "
 "szöveg egy bejegyzésben, utána: „IX. Szöveg Egy Bejegyzésben”."
 
-#: ../src/scan_dialog.c:2226
+#: ../src/scan_dialog.c:2256
 msgid "Insert a space before uppercase letters"
 msgstr "Szóköz beszúrása minden nagybetű elé"
 
-#: ../src/scan_dialog.c:2228
+#: ../src/scan_dialog.c:2258
 msgid "Remove duplicate spaces and underscores"
 msgstr "Dupla szóközök és alsóvonások eltávolítása"
 
-#: ../src/scan_dialog.c:2230
+#: ../src/scan_dialog.c:2260
 msgid "Do not change word separators"
 msgstr "Ne változtassa meg a szóelválasztókat"
 
 # bubble help
-#: ../src/scan_dialog.c:2244
+#: ../src/scan_dialog.c:2282
 msgid ""
 "All spaces between words are removed. Example, before: 'Text In An Entry', "
 "after: 'TextInAnEntry'."
@@ -4879,7 +4887,7 @@ msgstr ""
 "Bejegyzésben”, utána: „SzövegEgyBejegyzésben”."
 
 # bubble help
-#: ../src/scan_dialog.c:2247
+#: ../src/scan_dialog.c:2285
 msgid ""
 "A space is inserted before each upper case letter. Example, before: "
 "'TextInAnEntry', after: 'Text In An Entry'."
@@ -4888,7 +4896,7 @@ msgstr ""
 "„SzövegEgyBejegyzésben”, utána: „Szöveg Egy Bejegyzésben”."
 
 # bubble help
-#: ../src/scan_dialog.c:2250
+#: ../src/scan_dialog.c:2288
 msgid ""
 "Duplicate spaces and underscores are removed. Example, before: "
 "'Text__In__An   Entry', after: 'Text_In_An Entry'."
@@ -4899,141 +4907,141 @@ msgstr ""
 #.
 #. * Frame to display codes legend
 #.
-#: ../src/scan_dialog.c:2257
+#: ../src/scan_dialog.c:2295
 msgid "Legend"
 msgstr "Jelmagyarázat"
 
-#: ../src/scan_dialog.c:2263
+#: ../src/scan_dialog.c:2301
 #, c-format
 msgid "%a: artist"
 msgstr "%a: előadó"
 
-#: ../src/scan_dialog.c:2266
+#: ../src/scan_dialog.c:2304
 msgid "%z: album artist"
 msgstr "%z: album előadó"
 
-#: ../src/scan_dialog.c:2269
+#: ../src/scan_dialog.c:2307
 msgid "%b: album"
 msgstr "%b: album"
 
-#: ../src/scan_dialog.c:2272
+#: ../src/scan_dialog.c:2310
 #, c-format
 msgid "%c: comment"
 msgstr "%c: megjegyzés"
 
-#: ../src/scan_dialog.c:2275
+#: ../src/scan_dialog.c:2313
 #, c-format
 msgid "%p: composer"
 msgstr "%p: zeneszerző"
 
-#: ../src/scan_dialog.c:2278
+#: ../src/scan_dialog.c:2316
 msgid "%r: copyright"
 msgstr "%r: szerzői jog"
 
-#: ../src/scan_dialog.c:2281
+#: ../src/scan_dialog.c:2319
 #, c-format
 msgid "%d: disc number"
 msgstr "%d: lemez száma"
 
-#: ../src/scan_dialog.c:2284
+#: ../src/scan_dialog.c:2322
 #, c-format
 msgid "%e: encoded by"
 msgstr "%e: kódoló neve"
 
-#: ../src/scan_dialog.c:2287
+#: ../src/scan_dialog.c:2325
 #, c-format
 msgid "%g: genre"
 msgstr "%g: műfaj"
 
-#: ../src/scan_dialog.c:2290
+#: ../src/scan_dialog.c:2328
 #, c-format
 msgid "%i: ignored"
 msgstr "%i: mellőzött"
 
-#: ../src/scan_dialog.c:2293
+#: ../src/scan_dialog.c:2331
 msgid "%l: number of tracks"
 msgstr "%l: sávok száma"
 
-#: ../src/scan_dialog.c:2296
+#: ../src/scan_dialog.c:2334
 #, c-format
 msgid "%o: orig. artist"
 msgstr "%o: eredeti előadó"
 
-#: ../src/scan_dialog.c:2299
+#: ../src/scan_dialog.c:2337
 #, c-format
 msgid "%n: track"
 msgstr "%n: szám"
 
-#: ../src/scan_dialog.c:2302
+#: ../src/scan_dialog.c:2340
 msgid "%t: title"
 msgstr "%t: cím"
 
-#: ../src/scan_dialog.c:2305
+#: ../src/scan_dialog.c:2343
 #, c-format
 msgid "%u: URL"
 msgstr "%u: URL"
 
-#: ../src/scan_dialog.c:2308
+#: ../src/scan_dialog.c:2346
 #, c-format
 msgid "%x: number of discs"
 msgstr "%x: lemezek száma"
 
-#: ../src/scan_dialog.c:2311
+#: ../src/scan_dialog.c:2349
 msgid "%y: year"
 msgstr "%y: év"
 
 #.
 #. * Masks Editor
 #.
-#: ../src/scan_dialog.c:2318
+#: ../src/scan_dialog.c:2356
 msgid "Mask Editor"
 msgstr "Maszkszerkesztő"
 
-#: ../src/scan_dialog.c:2372
+#: ../src/scan_dialog.c:2410
 msgid "Create New Mask"
 msgstr "Új maszk létrehozása"
 
-#: ../src/scan_dialog.c:2382
+#: ../src/scan_dialog.c:2420
 msgid "Move Up this Mask"
 msgstr "Maszk felfelé mozgatása"
 
-#: ../src/scan_dialog.c:2392
+#: ../src/scan_dialog.c:2430
 msgid "Move Down this Mask"
 msgstr "Maszk lefelé mozgatása"
 
-#: ../src/scan_dialog.c:2402
+#: ../src/scan_dialog.c:2440
 msgid "Duplicate Mask"
 msgstr "Maszk kettőzése"
 
-#: ../src/scan_dialog.c:2412
+#: ../src/scan_dialog.c:2450
 msgid "Add Default Masks"
 msgstr "Alapértelmezett maszkok hozzáadása"
 
-#: ../src/scan_dialog.c:2422
+#: ../src/scan_dialog.c:2460
 msgid "Remove Mask"
 msgstr "Maszk eltávolítása"
 
-#: ../src/scan_dialog.c:2432
+#: ../src/scan_dialog.c:2470
 msgid "Save Masks"
 msgstr "Maszkok mentése"
 
-#: ../src/scan_dialog.c:3012
+#: ../src/scan_dialog.c:3050
 msgid "New_mask"
 msgstr "Új_maszk"
 
-#: ../src/scan_dialog.c:3051
+#: ../src/scan_dialog.c:3089
 msgid "Copy: No row selected"
 msgstr "Másolás: Nincs kijelölt sor"
 
-#: ../src/scan_dialog.c:3144
+#: ../src/scan_dialog.c:3182
 msgid "Remove: No row selected"
 msgstr "Eltávolítás: Nincs kijelölt sor"
 
-#: ../src/scan_dialog.c:3191
+#: ../src/scan_dialog.c:3229
 msgid "Move Up: No row selected"
 msgstr "Felfelé mozgatás: Nincs kijelölt sor"
 
-#: ../src/scan_dialog.c:3235
+#: ../src/scan_dialog.c:3273
 msgid "Move Down: No row selected"
 msgstr "Lefelé mozgatás: Nincs kijelölt sor"
 
@@ -5101,6 +5109,9 @@ msgstr "A(z) „%s” beállítófájl költöztetése nem sikerült"
 msgid "Error: Cannot create directory '%s' (%s)"
 msgstr "Hiba: Nem lehet létrehozni a könyvtárat: „%s” (%s)"
 
+#~ msgid "File contains no audio track: '%s'"
+#~ msgstr "A fájl nem tartalmaz hangszámot: „%s”"
+
 #~ msgid ""
 #~ "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 "
diff --git a/po/id.po b/po/id.po
index f1ae2d0..bbde8a3 100644
--- a/po/id.po
+++ b/po/id.po
@@ -5,11 +5,11 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: easytag easytag-2-2\n"
+"Project-Id-Version: easytag master\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
 "product=easytag&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2014-09-05 03:13+0000\n"
-"PO-Revision-Date: 2014-09-05 23:11+0700\n"
+"POT-Creation-Date: 2014-09-07 03:13+0000\n"
+"PO-Revision-Date: 2014-09-07 11:48+0700\n"
 "Last-Translator: Andika Triwidada <andika at gmail.com>\n"
 "Language-Team: Indonesian <gnome-l10n-id at googlegroups.com>\n"
 "Language: id\n"
@@ -45,4776 +45,5275 @@ msgstr ""
 "GNU/Linux dan Windows."
 
 #: ../data/easytag.desktop.in.h:1
-msgid "Sound File Metadata Editor"
+#, fuzzy
+#| msgid "Sound File Metadata Editor"
+msgid "Audio File Metadata Editor"
 msgstr "Penyunting Metadata Berkas Suara"
 
 #: ../data/easytag.desktop.in.h:2
-msgid "Edit sound file metadata"
+#, fuzzy
+#| msgid "Edit sound file metadata"
+msgid "Edit audio file metadata"
 msgstr "Sunting metadata berkas suara"
 
 #. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
 #: ../data/easytag.desktop.in.h:4
-msgid "mp3;tag;audio;"
+#, fuzzy
+#| msgid "mp3;tag;audio;"
+msgid "mp3;tag;audio;music;"
 msgstr "mp3;tag;audio;"
 
-#: ../src/about.c:89
+#: ../data/browser.ui.h:1
+msgid "Browse Directory With"
+msgstr "Ramban Direktori Dengan"
+
+#: ../data/browser.ui.h:2
+msgid "Run Program"
+msgstr "Jalankan Program"
+
+#: ../data/browser.ui.h:3
+#, fuzzy
+#| msgid ""
+#| "Enter the program to run. It will receive the current directory as "
+#| "parameter."
 msgid ""
-"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 (at your option) "
-"any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful, but WITHOUT "
-"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
-"FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for "
-"more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License along with "
-"this program. If not, see <http://www.gnu.org/licenses/>."
+"Enter the program to run; it will receive the current directory as a "
+"parameter"
 msgstr ""
-"Program ini adalah perangkat lunak bebas; Anda dapat menyebarkan dan/atau "
-"mengubahnya di bawah syarat GNU General Public License sebagaimana "
-"dipublikasikan oleh Free Software Foundation, apakah Lisensi versi 2 atau "
-"(sesuai pilihan Anda) versi selanjutnya.\n"
-"\n"
-"Program ini didistribusikan dengan harapan bahwa program ini akan berguna, "
-"tetapi TANPA GARANSI; tanpa garansi yang termasuk dari DAGANGAN atau "
-"KECOCOKAN UNTUK TUJUAN TERTENTU sekalipun. Lihat GNU General Public License "
-"untuk rincian lebih lanjut.\n"
-"\n"
-"Anda mestinya menerima salinan dari GNU General Public License bersama "
-"dengan program ini. Bila tidak, lihat <http://www.gnu.org/licenses/>."
+"Masukkan nama program yang akan dijalankan. Itu akan menerima direktori saat "
+"ini sebagai parameter."
 
-#. Translators: put your own name here to appear in the about dialog.
-#: ../src/about.c:106
-msgid "translator-credits"
-msgstr "Andika Triwidada <andika at gmail.com>, 2014"
+#.
+#. * The button to select a directory to browse
+#.
+#: ../data/browser.ui.h:4 ../src/browser.c:3838 ../src/misc.c:393
+#: ../src/tag_area.c:1469
+msgid "_Open"
+msgstr "_Buka"
+
+#: ../data/browser.ui.h:5 ../data/tag_area.ui.h:3
+#: ../src/application_window.c:342 ../src/application_window.c:356
+#: ../src/application_window.c:2638 ../src/application_window.c:2676
+#: ../src/browser.c:848 ../src/cddb_dialog.c:2347 ../src/easytag.c:516
+#: ../src/easytag.c:523 ../src/easytag.c:640 ../src/misc.c:391
+#: ../src/playlist_dialog.c:655 ../src/tag_area.c:1467 ../src/tag_area.c:1829
+msgid "_Cancel"
+msgstr "_Batal"
+
+#: ../data/browser.ui.h:6
+msgid "_Execute"
+msgstr "_Jalankan"
+
+#: ../data/browser.ui.h:7
+msgid "Open Files With"
+msgstr "Buka Berkas Dengan"
 
-#: ../src/about.c:116
-msgid "View and edit tags in audio files"
-msgstr "Lihat dan sunting tag dalam berkas audio"
+#: ../data/browser.ui.h:8
+#, fuzzy
+#| msgid ""
+#| "Enter the program to run. It will receive the current file as parameter."
+msgid ""
+"Enter the program to run; it will receive the current files as a parameter"
+msgstr ""
+"Masukkan nama program yang akan dijalankan. Itu akan menerima berkas saat "
+"ini sebagai parameter."
 
-#: ../src/ape_tag.c:61 ../src/id3v24_tag.c:113 ../src/mp4_header.cc:46
-#: ../src/mp4_header.cc:59 ../src/mp4_tag.cc:69 ../src/mp4_tag.cc:85
-#: ../src/mp4_tag.cc:90 ../src/mp4_tag.cc:262 ../src/mp4_tag.cc:278
-#: ../src/mp4_tag.cc:283
-#, c-format
-msgid "Error while opening file: '%s' (%s)."
-msgstr "Galat saat membuka berkas: '%s' (%s)."
+#. Only directories changed
+#: ../data/browser.ui.h:9 ../data/menus.ui.h:99 ../src/easytag.c:606
+msgid "Rename Directory"
+msgstr "Ubah Nama Direktori"
 
-#: ../src/application.c:37
-msgid "Print the version and exit"
-msgstr "Cetak versi dan keluar"
+#: ../data/browser.ui.h:10
+#, fuzzy
+#| msgid "User Name:"
+msgid "Literal name:"
+msgstr "Nama Pengguna:"
 
-#: ../src/application.c:89
-#, c-format
-msgid "Website: %s"
-msgstr "Situs web: %s"
+#: ../data/browser.ui.h:11 ../data/playlist_dialog.ui.h:2
+#, fuzzy
+msgid "Use mask:"
+msgstr "Mask Subnet:"
 
-#: ../src/application.c:98
-msgid "- Tag and rename audio files"
-msgstr "- Tag dan ubah nama berkas audio"
+#: ../data/browser.ui.h:12 ../data/org.gnome.EasyTAG.gschema.xml.h:188
+#, fuzzy
+msgid "Whether to use a mask when renaming directories"
+msgstr "Tak dapat membuat tampilan transien: "
 
-#.
-#. * Main Menu Actions
-#.
-#: ../src/bar.c:155
+#: ../data/browser.ui.h:13
+#, fuzzy
+#| msgid ""
+#| "Select or type in a mask using codes (see Legend in Scanner Window) to "
+#| "rename the directory from tag fields."
+msgid ""
+"Select or type in a mask using codes (see Legend in Scanner Window) to "
+"rename the directory from tag fields"
+msgstr ""
+"Pilih atau ketikkan masker memakai kode (lihat Legenda dalam Jendela "
+"Pemindai) untuk mengubah nama direktori dari ruas tag."
+
+#: ../data/browser.ui.h:14
+msgid "Rename directory preview"
+msgstr "Pratinjau ubah nama direktori"
+
+#: ../data/browser.ui.h:15
+#, fuzzy
+#| msgid "Rename File"
+msgid "_Rename"
+msgstr "Ubah Nama Berkas"
+
+#: ../data/load_files_dialog.ui.h:1
+msgid "File:"
+msgstr "Berkas:"
+
+#: ../data/load_files_dialog.ui.h:2
+#, fuzzy
+#| msgid "Content of Text File"
+msgid "Choose a Text File"
+msgstr "Isi Berkas Teks"
+
+#: ../data/load_files_dialog.ui.h:3
+#, fuzzy
+#| msgid " Load "
+msgid "_Load"
+msgstr " Muat "
+
+#: ../data/load_files_dialog.ui.h:4
+msgid "Content of Text File"
+msgstr "Isi Berkas Teks"
+
+#: ../data/load_files_dialog.ui.h:5
+msgid "Insert a blank line before the selected line"
+msgstr "Sisipkan satu baris kosong sebelum baris yang dipilih"
+
+#: ../data/load_files_dialog.ui.h:6
+msgid "Delete the selected line"
+msgstr "Hapus baris yang dipilih"
+
+#: ../data/load_files_dialog.ui.h:7 ../src/load_files_dialog.c:636
+#: ../src/load_files_dialog.c:739
+msgid "Delete all blank lines"
+msgstr "Hapus semua baris kosong"
+
+#: ../data/load_files_dialog.ui.h:8
+#, fuzzy
+msgid "Move the selected line up"
+msgstr "Memindah baris yang dipilih sebaris ke atas"
+
+#: ../data/load_files_dialog.ui.h:9
+#, fuzzy
+msgid "Move the selected line down"
+msgstr "Memindah baris yang dipilih sebaris ke atas"
+
+#: ../data/load_files_dialog.ui.h:10 ../src/load_files_dialog.c:654
+#: ../src/load_files_dialog.c:757
+msgid "Reload"
+msgstr "Muat Ulang"
+
+#: ../data/load_files_dialog.ui.h:11
+msgid "List of Files"
+msgstr "Daftar Berkas"
+
+#: ../data/load_files_dialog.ui.h:12
+msgid "Selected line:"
+msgstr "Baris yang dipilih"
+
+#. Check box to run the scanner
+#: ../data/load_files_dialog.ui.h:13 ../src/cddb_dialog.c:3295
+msgid "Run the current scanner for each file"
+msgstr "Jalankan pemindai saat ini bagi setiap berkas"
+
+#: ../data/load_files_dialog.ui.h:14
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:131
+#, fuzzy
+#| msgid "Run the current scanner for each file"
+msgid "Whether to run the current scanner on files loaded from a text file"
+msgstr "Jalankan pemindai saat ini bagi setiap berkas"
+
+#: ../data/menus.ui.h:1
+msgid "_Help"
+msgstr "Ba_ntuan"
+
+#: ../data/menus.ui.h:2
+msgid "_About"
+msgstr "Tent_ang"
+
+#: ../data/menus.ui.h:3 ../src/application_window.c:2677
+msgid "_Quit"
+msgstr "_Keluar"
+
+#: ../data/menus.ui.h:4
 msgid "_File"
 msgstr "_Berkas"
 
-#: ../src/bar.c:156
-msgid "Sort List by Tag"
-msgstr "Urutkan Daftar berdasar Tag"
+#: ../data/menus.ui.h:5
+msgid "Open Files With…"
+msgstr "Buka Berkas Dengan..."
 
-#: ../src/bar.c:159
-msgid "Sort List by Property"
-msgstr "Urutkan Daftar berdasar Properti"
+#: ../data/menus.ui.h:6
+msgid "Run Audio Player"
+msgstr "Jalankan Pemutar Audio"
 
-#: ../src/bar.c:160
-msgid "Ascending by filename"
-msgstr "Urut naik berdasar nama berkas"
+#: ../data/menus.ui.h:7 ../data/toolbar.ui.h:23
+msgid "Invert File Selection"
+msgstr "Balikkan Pilihan Berkas"
 
-#: ../src/bar.c:161
-msgid "Descending by filename"
-msgstr "Urut turun berdasar nama berkas"
+#: ../data/menus.ui.h:8
+msgid "Delete Files"
+msgstr "Hapus Berkas"
 
-#: ../src/bar.c:162
-msgid "Ascending by creation date"
-msgstr "Urut naik berdasar tanggal pembuatan"
+#: ../data/menus.ui.h:9
+#, fuzzy
+#| msgid "Find Files"
+msgid "Undo for File"
+msgstr "Cari Berkas"
 
-#: ../src/bar.c:163
-msgid "Descending by creation date"
-msgstr "Urut turun berdasar tanggal pembuatan"
+#: ../data/menus.ui.h:10
+msgid "Redo for File"
+msgstr "Jadi Lagi untuk Berkas"
+
+#: ../data/menus.ui.h:11 ../data/toolbar.ui.h:17
+msgid "_Save Files"
+msgstr "_Simpan Berkas"
+
+#: ../data/menus.ui.h:12
+msgid "_Force Save Files"
+msgstr "_Paksa Simpan Berkas"
+
+#: ../data/menus.ui.h:13
+msgid "_Edit"
+msgstr "_Sunting"
+
+#: ../data/menus.ui.h:14 ../data/toolbar.ui.h:25
+msgid "_Find…"
+msgstr "_Cari…"
+
+#: ../data/menus.ui.h:15
+#, fuzzy
+#| msgid "Select all"
+msgid "Select All"
+msgstr "Pilih semua"
+
+#: ../data/menus.ui.h:16
+msgid "Unselect All"
+msgstr "Pilih Tak Satupun"
+
+#: ../data/menus.ui.h:17
+msgid "Undo"
+msgstr "Tak Jadi"
+
+#: ../data/menus.ui.h:18
+msgid "Redo"
+msgstr "Jadi Lagi"
+
+#: ../data/menus.ui.h:19 ../data/toolbar.ui.h:11
+msgid "_Remove Tags"
+msgstr "_Hapus Tag"
+
+#: ../data/menus.ui.h:20
+msgid "_Preferences"
+msgstr "_Preferensi"
 
-#: ../src/bar.c:164
+#: ../data/menus.ui.h:21
+msgid "_View"
+msgstr "_Tilik"
+
+#: ../data/menus.ui.h:22
+#, fuzzy
+#| msgid "_Show Scanner"
+msgid "Show Scanner"
+msgstr "_Tampilkan Pemindai"
+
+#: ../data/menus.ui.h:23
+#, fuzzy
+#| msgid "S_canner Mode"
+msgid "Scanner Mode"
+msgstr "Mode _Pemindai"
+
+#: ../data/menus.ui.h:24
+#, fuzzy
+msgid "Fill Tags"
+msgstr "Tag Git:"
+
+#: ../data/menus.ui.h:25
+#, fuzzy
+#| msgid "_Rename Files and Directories…"
+msgid "Rename Files and Directories"
+msgstr "Ubah Nama Berkas dan Di_rektori…"
+
+#: ../data/menus.ui.h:26 ../src/scan_dialog.c:165
+msgid "Process Fields"
+msgstr "Proses ruas"
+
+#: ../data/menus.ui.h:27 ../data/toolbar.ui.h:19
+#, fuzzy
+#| msgid "Directory renamed"
+msgid "Directory Tree"
+msgstr "Direktori diubah nama"
+
+#: ../data/menus.ui.h:28 ../data/toolbar.ui.h:21
+#, fuzzy
+#| msgid "Artist and Album"
+msgid "Artists and Albums"
+msgstr "Artis dan album"
+
+#: ../data/menus.ui.h:29
+msgid "Sort List by Tag"
+msgstr "Urutkan Daftar berdasar Tag"
+
+#: ../data/menus.ui.h:30
 msgid "Ascending by track number"
 msgstr "Urut naik berdasar nomor trek"
 
-#: ../src/bar.c:165
+#: ../data/menus.ui.h:31
 msgid "Descending by track number"
 msgstr "Urut turun berdasar nomor trek"
 
-#: ../src/bar.c:166
+#: ../data/menus.ui.h:32
 msgid "Ascending by title"
 msgstr "Urut naik berdasar judul"
 
-#: ../src/bar.c:167
+#: ../data/menus.ui.h:33
 msgid "Descending by title"
 msgstr "Urut turun berdasar judul"
 
-#: ../src/bar.c:168
+#: ../data/menus.ui.h:34
 msgid "Ascending by artist"
 msgstr "Urut naik berdasar artis"
 
-#: ../src/bar.c:169
+#: ../data/menus.ui.h:35
 msgid "Descending by artist"
 msgstr "Urut turun berdasar artis"
 
-#: ../src/bar.c:170
+#: ../data/menus.ui.h:36
 msgid "Ascending by album artist"
 msgstr "Urut naik berdasar artis album"
 
-#: ../src/bar.c:171
+#: ../data/menus.ui.h:37
 msgid "Descending by album artist"
 msgstr "Urut turun berdasar artis album"
 
-#: ../src/bar.c:172
+#: ../data/menus.ui.h:38
 msgid "Ascending by album"
 msgstr "Urut naik berdasar album"
 
-#: ../src/bar.c:173
+#: ../data/menus.ui.h:39
 msgid "Descending by album"
 msgstr "Urut turun berdasar album"
 
-#: ../src/bar.c:174
+#: ../data/menus.ui.h:40
 msgid "Ascending by year"
 msgstr "Urut naik berdasar tahun"
 
-#: ../src/bar.c:175
+#: ../data/menus.ui.h:41
 msgid "Descending by year"
 msgstr "Urut turun berdasar tahun"
 
-#: ../src/bar.c:176
+#: ../data/menus.ui.h:42
 msgid "Ascending by genre"
 msgstr "Urut naik berdasar aliran"
 
-#: ../src/bar.c:177
+#: ../data/menus.ui.h:43
 msgid "Descending by genre"
 msgstr "Urut turun berdasar aliran"
 
-#: ../src/bar.c:178
+#: ../data/menus.ui.h:44
 msgid "Ascending by comment"
 msgstr "Urut naik berdasar komentar"
 
-#: ../src/bar.c:179
+#: ../data/menus.ui.h:45
 msgid "Descending by comment"
 msgstr "Urut turun berdasar komentar"
 
-#: ../src/bar.c:180
+#: ../data/menus.ui.h:46
 msgid "Ascending by composer"
 msgstr "Urut naik berdasar komponis"
 
-#: ../src/bar.c:181
+#: ../data/menus.ui.h:47
 msgid "Descending by composer"
 msgstr "Urut turun berdasar komponis"
 
-#: ../src/bar.c:182
+#: ../data/menus.ui.h:48
 msgid "Ascending by original artist"
 msgstr "Urut naik berdasar artis asli"
 
-#: ../src/bar.c:183
+#: ../data/menus.ui.h:49
 msgid "Descending by original artist"
 msgstr "Urut turun berdasar artis asli"
 
-#: ../src/bar.c:184
+#: ../data/menus.ui.h:50
 msgid "Ascending by copyright"
 msgstr "Urut naik berdasar hak cipta"
 
-#: ../src/bar.c:185
+#: ../data/menus.ui.h:51
 msgid "Descending by copyright"
 msgstr "Urut turun berdasar hak cipta"
 
-#: ../src/bar.c:186
+#: ../data/menus.ui.h:52
 msgid "Ascending by URL"
 msgstr "Urut naik berdasar URL"
 
-#: ../src/bar.c:187
+#: ../data/menus.ui.h:53
 msgid "Descending by URL"
 msgstr "Urut turun berdasar URL"
 
-#. Translators: the encoder name is supposed to be the name of a person
-#. * or organisation, but can sometimes be the name of an application.
-#: ../src/bar.c:190
+#: ../data/menus.ui.h:54
 msgid "Ascending by encoder name"
 msgstr "Urut naik berdasar nama enkoder"
 
-#. Translators: the encoder name is supposed to be the name of a person
-#. * or organisation, but can sometimes be the name of an application.
-#: ../src/bar.c:193
+#: ../data/menus.ui.h:55
 msgid "Descending by encoder name"
 msgstr "Urut turun berdasar nama enkoder"
 
-#: ../src/bar.c:194
+#: ../data/menus.ui.h:56
+msgid "Sort List by Property"
+msgstr "Urutkan Daftar berdasar Properti"
+
+#: ../data/menus.ui.h:57
+msgid "Ascending by filename"
+msgstr "Urut naik berdasar nama berkas"
+
+#: ../data/menus.ui.h:58
+msgid "Descending by filename"
+msgstr "Urut turun berdasar nama berkas"
+
+#: ../data/menus.ui.h:59
+msgid "Ascending by creation date"
+msgstr "Urut naik berdasar tanggal pembuatan"
+
+#: ../data/menus.ui.h:60
+msgid "Descending by creation date"
+msgstr "Urut turun berdasar tanggal pembuatan"
+
+#: ../data/menus.ui.h:61
 msgid "Ascending by file type"
 msgstr "Urut naik berdasar tipe berkas"
 
-#: ../src/bar.c:195
+#: ../data/menus.ui.h:62
 msgid "Descending by file type"
 msgstr "Urut turun berdasar tipe berkas"
 
-#: ../src/bar.c:196
+#: ../data/menus.ui.h:63
 msgid "Ascending by file size"
 msgstr "Urut naik berdasar ukuran berkas"
 
-#: ../src/bar.c:197
+#: ../data/menus.ui.h:64
 msgid "Descending by file size"
 msgstr "Urut turun berdasar ukuran berkas"
 
-#: ../src/bar.c:198
+#: ../data/menus.ui.h:65
 msgid "Ascending by duration"
 msgstr "Urut naik berdasar durasi"
 
-#: ../src/bar.c:199
+#: ../data/menus.ui.h:66
 msgid "Descending by duration"
 msgstr "Urut turun berdasar durasi"
 
-#: ../src/bar.c:200
-msgid "Ascending by bitrate"
+#: ../data/menus.ui.h:67
+#, fuzzy
+#| msgid "Ascending by bitrate"
+msgid "Ascending by bit rate"
 msgstr "Urut naik berdasar laju bit"
 
-#: ../src/bar.c:201
-msgid "Descending by bitrate"
+#: ../data/menus.ui.h:68
+#, fuzzy
+#| msgid "Descending by bitrate"
+msgid "Descending by bit rate"
 msgstr "Urut turun berdasar laju bit"
 
-#: ../src/bar.c:202
-msgid "Ascending by samplerate"
+#: ../data/menus.ui.h:69
+#, fuzzy
+#| msgid "Ascending by samplerate"
+msgid "Ascending by sample rate"
 msgstr "Urut naik berdasar laju cuplik"
 
-#: ../src/bar.c:203
-msgid "Descending by samplerate"
+#: ../data/menus.ui.h:70
+#, fuzzy
+#| msgid "Descending by samplerate"
+msgid "Descending by sample rate"
 msgstr "Urut turun berdasar laju cuplik"
 
-#: ../src/bar.c:205
-msgid "Open Files With…"
-msgstr "Buka Berkas Dengan..."
+#: ../data/menus.ui.h:71
+#, fuzzy
+#| msgid "_Collapse Tree"
+msgid "Collapse Tree"
+msgstr "_Lipat Pohon"
 
-#: ../src/bar.c:206
-msgid "Run a command on the selected files"
-msgstr "Jalankan suatu perintah pada berkas-berkas yang dipilih"
+#: ../data/menus.ui.h:72
+#, fuzzy
+#| msgid "_Reload Tree"
+msgid "Reload Tree"
+msgstr "_Muat Ulang Pohon"
 
-#: ../src/bar.c:209
-msgid "Select all"
-msgstr "Pilih semua"
+#: ../data/menus.ui.h:73
+msgid "Reload Directory"
+msgstr "Muat Ulang Direktori"
 
-#: ../src/bar.c:210
-msgid "Unselect All"
-msgstr "Pilih Tak Satupun"
+#: ../data/menus.ui.h:74
+msgid "Show Hidden Directories"
+msgstr "Tampilkan Direktori Tersembunyi"
 
-#: ../src/bar.c:211
-msgid "Clear the current selection"
-msgstr "Bersihkan pilihan saat ini"
+#: ../data/menus.ui.h:75
+msgid "_Browser"
+msgstr "Peram_ban"
 
-#: ../src/bar.c:214
-msgid "Invert File Selection"
-msgstr "Balikkan Pilihan Berkas"
+#: ../data/menus.ui.h:76
+msgid "Set _Current Path as Default"
+msgstr "_Atur Path Saat Ini sebagai Bawaan"
 
-#: ../src/bar.c:215
-msgid "Invert file selection"
-msgstr "Balikkan pilihan berkas"
+#: ../data/menus.ui.h:77
+msgid "Rename Directory…"
+msgstr "Ubah Nama Direktori…"
 
-#: ../src/bar.c:217
-msgid "Delete Files"
-msgstr "Hapus Berkas"
+#: ../data/menus.ui.h:78
+msgid "Browse Directory With…"
+msgstr "Ramban Direktori Dengan…"
 
-#: ../src/bar.c:217
-msgid "Delete files"
-msgstr "Hapus berkas"
+#: ../data/menus.ui.h:79
+msgid "Browse _Subdirectories"
+msgstr "Ramban _Subdirektori"
 
-#: ../src/bar.c:218
-msgid "_First File"
-msgstr "Berkas _Pertama"
+#: ../data/menus.ui.h:80
+msgid "_Miscellaneous"
+msgstr "_Rupa-rupa"
 
-#: ../src/bar.c:219
-msgid "First file"
-msgstr "Berkas pertama"
+#: ../data/menus.ui.h:81
+msgid "CDD_B Search…"
+msgstr "Pencarian CDD_B…"
 
-#: ../src/bar.c:220
-msgid "_Previous File"
-msgstr "Berkas Se_belumnya"
+#: ../data/menus.ui.h:82
+msgid "Load Filenames From a Text File…"
+msgstr "Muat Nama-nama Berkas Dari Berkas Teks..."
 
-#: ../src/bar.c:220
-msgid "Previous file"
-msgstr "Berkas sebelumnya"
+#: ../data/menus.ui.h:83 ../data/toolbar.ui.h:29
+msgid "Generate Playlist…"
+msgstr "Buat Daftar Putar..."
 
-#: ../src/bar.c:221
-msgid "_Next File"
-msgstr "Berkas Selanjut_nya"
+#: ../data/menus.ui.h:84
+msgid "_Go"
+msgstr ""
 
-#: ../src/bar.c:221
-msgid "Next file"
-msgstr "Berkas selanjutnya"
-
-#: ../src/bar.c:222
-msgid "_Last File"
-msgstr "Berkas Ter_akhir"
-
-#: ../src/bar.c:223
-msgid "Last file"
-msgstr "Berkas terakhir"
-
-#: ../src/bar.c:224
-msgid "S_can Files"
-msgstr "Pindai Berka_s"
-
-#: ../src/bar.c:225 ../src/scan_dialog.c:1818
-msgid "Scan selected files"
-msgstr "Pindai berkas yang dipilih"
-
-#: ../src/bar.c:226
-msgid "_Remove Tags"
-msgstr "_Hapus Tag"
-
-#: ../src/bar.c:227
-msgid "Remove tags"
-msgstr "Hapus tag"
-
-#: ../src/bar.c:228
-msgid "_Undo Last Files Changes"
-msgstr "Batalkan Per_ubahan Berkas Terakhir"
-
-#: ../src/bar.c:229
-msgid "Undo last files changes"
-msgstr "Batalkan perubahan berkas yang terakhir"
-
-#: ../src/bar.c:231
-msgid "R_edo Last Files Changes"
-msgstr "Jadikan Lagi Per_ubahan Berkas Terakhir"
-
-#: ../src/bar.c:232
-msgid "Redo last files changes"
-msgstr "Jadikan lagi perubahan Berkas yang terakhir"
-
-#: ../src/bar.c:234
-msgid "_Save Files"
-msgstr "_Simpan Berkas"
-
-#: ../src/bar.c:235
-msgid "Save changes to selected files"
-msgstr "Simpan perubahan ke berkas-berkas yang dipilih"
-
-#: ../src/bar.c:237
-msgid "_Force Save Files"
-msgstr "_Paksa Simpan Berkas"
-
-#: ../src/bar.c:238
-msgid "Force saving files"
-msgstr "Memaksa menyimpan berkas"
-
-#: ../src/bar.c:240
-msgid "Undo Last Changes"
-msgstr "Batalkan Perubahan Terakhir"
-
-#: ../src/bar.c:240
-msgid "Undo last changes"
-msgstr "Batalkan perubahan terakhir"
-
-#: ../src/bar.c:241
-msgid "Redo Last Changes"
-msgstr "Jadikan Lagi Perubahan Terakhir"
-
-#: ../src/bar.c:241
-msgid "Redo last changes"
-msgstr "Jadikan lagi perubahan terakhir"
-
-#: ../src/bar.c:242
-msgid "_Quit"
-msgstr "_Keluar"
-
-#: ../src/bar.c:242 ../src/easytag.c:2428 ../src/easytag.c:4550
-#: ../src/easytag.c:4582
-msgid "Quit"
-msgstr "Keluar"
-
-#: ../src/bar.c:245
-msgid "_Browser"
-msgstr "Peram_ban"
-
-#: ../src/bar.c:246
+#: ../data/menus.ui.h:85
 msgid "_Home Directory"
 msgstr "Direktori Ruma_h"
 
-#: ../src/bar.c:247
-msgid "Go to home directory"
-msgstr "Ke direktori rumah"
-
-#: ../src/bar.c:249
+#: ../data/menus.ui.h:86
 msgid "Desktop Directory"
 msgstr "Direktori Desktop"
 
-#: ../src/bar.c:250
-msgid "Go to desktop directory"
-msgstr "Ke direktori desktop"
-
-#: ../src/bar.c:252
+#: ../data/menus.ui.h:87
 msgid "Documents Directory"
 msgstr "Direktori Dokumen"
 
-#: ../src/bar.c:253
-msgid "Go to documents directory"
-msgstr "Ke direktori dokumen"
-
-#: ../src/bar.c:255
+#: ../data/menus.ui.h:88
 msgid "Downloads Directory"
 msgstr "Direktori Unduh"
 
-#: ../src/bar.c:256
-msgid "Go to downloads directory"
-msgstr "Ke direktori unduh"
-
-#: ../src/bar.c:258
+#: ../data/menus.ui.h:89
 msgid "Music Directory"
 msgstr "Direktori Musik"
 
-#: ../src/bar.c:259
-msgid "Go to music directory"
-msgstr "Ke direktori musik"
-
-#: ../src/bar.c:261
+#: ../data/menus.ui.h:90
 msgid "_Parent Directory"
 msgstr "_Direktori Induk"
 
-#: ../src/bar.c:262
-msgid "Go to parent directory"
-msgstr "Ke direktori induk"
-
-#: ../src/bar.c:264
+#: ../data/menus.ui.h:91
 msgid "_Default Directory"
 msgstr "_Direktori Baku"
 
-#: ../src/bar.c:265
-msgid "Go to default directory"
-msgstr "Ke direktori baku"
-
-#: ../src/bar.c:267
-msgid "Set _Current Path as Default"
-msgstr "_Atur Path Saat Ini sebagai Bawaan"
-
-#: ../src/bar.c:267
-msgid "Set current path as default"
-msgstr "Atur path saat ini sebagai bawaan"
-
-#: ../src/bar.c:268
-msgid "Rename Directory…"
-msgstr "Ubah Nama Direktori…"
-
-#: ../src/bar.c:268
-msgid "Rename directory"
-msgstr "Ubah nama direktori"
-
-#: ../src/bar.c:269
-msgid "Reload Directory"
-msgstr "Muat Ulang Direktori"
+#: ../data/menus.ui.h:92 ../data/toolbar.ui.h:1
+msgid "_First File"
+msgstr "Berkas _Pertama"
 
-#: ../src/bar.c:270
-msgid "Reload directory"
-msgstr "Muat ulang direktori"
+#: ../data/menus.ui.h:93
+#, fuzzy
+#| msgid "_Previous File"
+msgid "Previous File"
+msgstr "Berkas Se_belumnya"
 
-#: ../src/bar.c:273
-msgid "Browse Directory With…"
-msgstr "Ramban Direktori Dengan…"
+#: ../data/menus.ui.h:94 ../data/toolbar.ui.h:5
+msgid "_Next File"
+msgstr "Berkas Selanjut_nya"
 
-#: ../src/bar.c:274
-msgid "Run a command on the directory"
-msgstr "Jalankan suatu perintah pada direktori"
+#: ../data/menus.ui.h:95 ../data/toolbar.ui.h:7
+msgid "_Last File"
+msgstr "Berkas Ter_akhir"
 
-#: ../src/bar.c:276
-msgid "_Collapse Tree"
-msgstr "_Lipat Pohon"
+#: ../data/menus.ui.h:96
+#, fuzzy
+#| msgid "_Home Directory"
+msgid "Home Directory"
+msgstr "Direktori Ruma_h"
 
-#: ../src/bar.c:277
-msgid "Collapse directory tree"
-msgstr "Lipat pohon direktori"
+#: ../data/menus.ui.h:97
+#, fuzzy
+#| msgid "_Default Directory"
+msgid "Default Directory"
+msgstr "_Direktori Baku"
 
-#: ../src/bar.c:278
-msgid "_Reload Tree"
-msgstr "_Muat Ulang Pohon"
+#: ../data/menus.ui.h:98
+#, fuzzy
+#| msgid "Set _Current Path as Default"
+msgid "Set Current Path as Default"
+msgstr "_Atur Path Saat Ini sebagai Bawaan"
 
-#: ../src/bar.c:279
-msgid "Reload directory tree"
-msgstr "Muat ulang pohon direktori"
+#: ../data/menus.ui.h:100
+#, fuzzy
+#| msgid "Browse _Subdirectories"
+msgid "Browse Subdirectories"
+msgstr "Ramban _Subdirektori"
 
-#: ../src/bar.c:282
-msgid "S_canner Mode"
-msgstr "Mode _Pemindai"
+#: ../data/menus.ui.h:101
+#, fuzzy
+#| msgid "Invert selection"
+msgid "Invert Selection"
+msgstr "Balik pilihan"
 
-#: ../src/bar.c:284
-msgid "_Miscellaneous"
-msgstr "_Rupa-rupa"
+#: ../data/menus.ui.h:102
+msgid "CDDB Search Files…"
+msgstr "Cari Berkas CDDB…"
 
-#: ../src/bar.c:285
-msgid "_Find…"
+#: ../data/menus.ui.h:103
+#, fuzzy
+#| msgid "_Find…"
+msgid "Find…"
 msgstr "_Cari…"
 
-#: ../src/bar.c:286
-msgid "Search filenames and tags"
-msgstr "Cari nama berkas dan tag"
-
-#: ../src/bar.c:288
-msgid "CDD_B Search…"
-msgstr "Pencarian CDD_B…"
-
-#: ../src/bar.c:289
-msgid "CDDB search"
-msgstr "Pencarian CDDB"
+#: ../data/menus.ui.h:104
+#, fuzzy
+#| msgid "Clear log"
+msgid "Clear Log"
+msgstr "Bersihkan log"
 
-#: ../src/bar.c:291
-msgid "Load Filenames From a Text File…"
-msgstr "Muat Nama-nama Berkas Dari Berkas Teks..."
+#: ../data/playlist_dialog.ui.h:1 ../data/search_dialog.ui.h:11
+#: ../src/browser.c:3795 ../src/cddb_dialog.c:3254
+msgid "Filename"
+msgstr "Nama berkas"
 
-#: ../src/bar.c:292
-msgid "Load filenames from a text file"
-msgstr "Muat nama berkas dari suatu berkas teks"
+#: ../data/playlist_dialog.ui.h:3
+#, fuzzy
+msgid "Use directory name"
+msgstr ""
+"%s\n"
+"adalah suatu nama direktori"
 
-#: ../src/bar.c:294
-msgid "Generate Playlist…"
-msgstr "Buat Daftar Putar..."
+#: ../data/playlist_dialog.ui.h:4
+#, fuzzy
+#| msgid "Log Options"
+msgid "Options"
+msgstr "Opsi Log"
 
-#: ../src/bar.c:295
-msgid "Generate a playlist"
-msgstr "Membuat suatu daftar putar"
+#: ../data/playlist_dialog.ui.h:5
+#, fuzzy
+msgid "Include only the selected files"
+msgstr "Hanya boleh memilih berkas lokal"
 
-#: ../src/bar.c:297 ../src/bar.c:328 ../src/bar.c:329 ../src/bar.c:330
-msgid "Run Audio Player"
-msgstr "Jalankan Pemutar Audio"
+#: ../data/playlist_dialog.ui.h:6 ../data/org.gnome.EasyTAG.gschema.xml.h:164
+msgid ""
+"Whether to use only the selected files or all files when creating playlists"
+msgstr ""
 
-#: ../src/bar.c:298 ../src/bar.c:328 ../src/bar.c:329 ../src/bar.c:330
-msgid "Run audio player"
-msgstr "Menjalankan pemutar audio"
+#: ../data/playlist_dialog.ui.h:7
+msgid "Use full path for files in playlist"
+msgstr ""
 
-#: ../src/bar.c:301
-msgid "_Edit"
-msgstr "_Sunting"
+#: ../data/playlist_dialog.ui.h:8
+msgid "Use relative path for files in playlist"
+msgstr ""
 
-#: ../src/bar.c:302
-msgid "_Preferences"
-msgstr "_Preferensi"
+#: ../data/playlist_dialog.ui.h:9
+msgid "Create playlist in the parent directory"
+msgstr "Buat daftar putar di direktori induk"
 
-#. The window
-#: ../src/bar.c:303 ../src/prefs.c:110
-msgid "Preferences"
-msgstr "Preferensi"
+#: ../data/playlist_dialog.ui.h:10 ../data/org.gnome.EasyTAG.gschema.xml.h:168
+#, fuzzy
+#| msgid "Create playlist in the parent directory"
+msgid "Whether to create the playlist in the parent directory"
+msgstr "Buat daftar putar di direktori induk"
 
-#: ../src/bar.c:305
-msgid "_View"
-msgstr "_Tilik"
+#: ../data/playlist_dialog.ui.h:11
+#, fuzzy
+msgid "Use DOS directory separator"
+msgstr "Direktori untuk berkas temporer"
 
-#: ../src/bar.c:306
-msgid "_Go"
+#: ../data/playlist_dialog.ui.h:12 ../data/org.gnome.EasyTAG.gschema.xml.h:170
+msgid ""
+"Whether to use backslash as directory separator when generating playlists"
 msgstr ""
 
-#: ../src/bar.c:308
-msgid "_Help"
-msgstr "Ba_ntuan"
-
-#: ../src/bar.c:311
-msgid "_Contents"
+#: ../data/playlist_dialog.ui.h:13
+#, fuzzy
+#| msgid "_Contents"
+msgid "Content"
 msgstr "_Isi"
 
-#: ../src/bar.c:312
-msgid "Show help"
-msgstr "Tampilkan bantuan"
-
-#: ../src/bar.c:314
-msgid "_About"
-msgstr "Tent_ang"
-
-#: ../src/bar.c:314
-msgid "About"
-msgstr "Tentang"
+#: ../data/playlist_dialog.ui.h:14
+#, fuzzy
+msgid "Write only list of files"
+msgstr "* list       daftar berkas dalam arsip\n"
 
-#.
-#. * Following items are on toolbar but not on menu
-#.
-#: ../src/bar.c:320
-msgid "Stop the current action"
-msgstr "Hentikan aksi saat ini"
+#: ../data/playlist_dialog.ui.h:15
+#, fuzzy
+msgid "Write information using filename"
+msgstr "Sedang mengganti info paket yang tersedia, dengan %s.\n"
 
-#.
-#. * Popup menu's Actions
-#.
-#: ../src/bar.c:326
-msgid "_File Operations"
-msgstr "Operasi _Berkas"
+#: ../data/playlist_dialog.ui.h:16
+#, fuzzy
+msgid "Write information using:"
+msgstr "Sedang mengganti info paket yang tersedia, dengan %s.\n"
 
-#: ../src/bar.c:327
-msgid "S_canner"
-msgstr "Pe_mindai"
+#: ../data/preferences_dialog.ui.h:1 ../src/application_window.c:271
+msgid "Browser"
+msgstr "Peramban"
 
-#: ../src/bar.c:331
-msgid "CDDB Search Files…"
-msgstr "Cari Berkas CDDB…"
+#: ../data/preferences_dialog.ui.h:2
+#, fuzzy
+#| msgid "_Default Directory"
+msgid "Default Directory:"
+msgstr "_Direktori Baku"
 
-#: ../src/bar.c:331
-msgid "CDDB search files…"
-msgstr "Cari berkas CDDB…"
+#: ../data/preferences_dialog.ui.h:3 ../data/org.gnome.EasyTAG.gschema.xml.h:4
+#, fuzzy
+#| msgid "New default path for files selected"
+msgid "The default path to search for music files"
+msgstr "Dipilih path baku baru bagi berkas"
 
-#. { AM_ARTIST_OPEN_FILE_WITH,     GTK_STOCK_OPEN,    _("Open File(s) with…"),     NULL, _("Open File(s) with…"),     G_CALLBACK(Browser_Open_Run_Program_List_Window??? Browser_Open_Run_Program_Tree_Window???) },
-#. { AM_ALBUM_OPEN_FILE_WITH,      GTK_STOCK_OPEN,    _("Open File(s) with…"),     NULL, _("Open File(s) with…"),     G_CALLBACK(Browser_Open_Run_Program_List_Window??? Browser_Open_Run_Program_Tree_Window???) },
-#: ../src/bar.c:335
-msgid "Clear log"
-msgstr "Bersihkan log"
+#: ../data/preferences_dialog.ui.h:4
+msgid ""
+"Load on startup the default directory or the directory passed as argument"
+msgstr ""
 
-#. { AM_BROWSE_SUBDIR,      GTK_STOCK_INDEX,        _("Browse _Subdirectories"),                         NULL, _("Browse _Sub-directories"),                         NULL,                                    FALSE },
-#: ../src/bar.c:342
-msgid "Browse _Subdirectories"
-msgstr "Ramban _Subdirektori"
+#: ../data/preferences_dialog.ui.h:5 ../data/org.gnome.EasyTAG.gschema.xml.h:2
+msgid ""
+"Whether to load the default path (or the path passed as an argument) on "
+"application startup"
+msgstr ""
 
-#: ../src/bar.c:342
+#: ../data/preferences_dialog.ui.h:6 ../data/org.gnome.EasyTAG.gschema.xml.h:5
 msgid "Browse subdirectories"
 msgstr "Meramban subdirektori"
 
-#: ../src/bar.c:346
-msgid "Show Hidden Directories"
-msgstr "Tampilkan Direktori Tersembunyi"
+#: ../data/preferences_dialog.ui.h:7 ../data/org.gnome.EasyTAG.gschema.xml.h:6
+msgid ""
+"Whether to search subdirectories for audio files when reading a directory in "
+"the browser"
+msgstr ""
 
-#: ../src/bar.c:346
-msgid "Show hidden directories"
-msgstr "Tampilkan direktori-direktori yang tersembunyi"
+#: ../data/preferences_dialog.ui.h:8 ../data/org.gnome.EasyTAG.gschema.xml.h:9
+msgid "Expand the subdirectories of the selected directory"
+msgstr ""
 
-#: ../src/bar.c:348
-msgid "_Show Scanner"
-msgstr "_Tampilkan Pemindai"
+#: ../data/preferences_dialog.ui.h:9
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:10
+msgid ""
+"Whether to expand the subdirectories of a node in the directory browser when "
+"selecting it"
+msgstr ""
 
-#: ../src/bar.c:349
-msgid "Show scanner"
-msgstr "Tampilkan pemindai"
+#: ../data/preferences_dialog.ui.h:10
+msgid "Search hidden directories"
+msgstr "Cari direktori-direktori tersembunyi"
 
-#: ../src/bar.c:355
-msgid "Tree Browser"
-msgstr "Peramban Pohon"
+#: ../data/preferences_dialog.ui.h:11
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:8
+msgid ""
+"Whether to show hidden directories when showing a directory in the browser"
+msgstr ""
 
-#: ../src/bar.c:356
-msgid "View by directory tree"
-msgstr "Tilik menurut pohon direktori"
+#: ../data/preferences_dialog.ui.h:12
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:55
+msgid "Sort files case-sensitively"
+msgstr ""
 
-#: ../src/bar.c:358
-msgid "Artist and Album"
-msgstr "Artis dan album"
+#: ../data/preferences_dialog.ui.h:13
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:56
+msgid "Whether file sorting is case-sensitive"
+msgstr ""
 
-#: ../src/bar.c:359
-msgid "View by artist and album"
-msgstr "Tilik menurut artis dan album"
+#: ../data/preferences_dialog.ui.h:14 ../src/log.c:244
+msgid "Log"
+msgstr "Log"
 
-#: ../src/bar.c:364
-msgid "_Fill Tags…"
-msgstr "_Penuhi Tag…"
+#: ../data/preferences_dialog.ui.h:15
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:61
+#, fuzzy
+#| msgid "Show help"
+msgid "Show the log"
+msgstr "Tampilkan bantuan"
 
-#: ../src/bar.c:365
-msgid "Fill tags"
-msgstr "Penuhi tag"
+#: ../data/preferences_dialog.ui.h:16
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:62
+#, fuzzy
+#| msgid "Show log view in main window"
+msgid "Whether to show the log in the main window"
+msgstr "Tampilkan tilikan log dalam jendela utama"
 
-#: ../src/bar.c:367
-msgid "_Rename Files and Directories…"
-msgstr "Ubah Nama Berkas dan Di_rektori…"
+#: ../data/preferences_dialog.ui.h:17
+#, fuzzy
+#| msgid "Max number of lines:"
+msgid "Maximum number of lines:"
+msgstr "Banyaknya baris maks:"
 
-#: ../src/bar.c:368
-msgid "Rename files and directories"
-msgstr "Ubah nama-nama berkas dan direktori"
+#: ../data/preferences_dialog.ui.h:18
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:60
+msgid "The maximum number of lines to keep in the log"
+msgstr ""
 
-#: ../src/bar.c:370
-msgid "_Process Fields…"
-msgstr "_Proses Ruas…"
+#: ../data/preferences_dialog.ui.h:19
+msgid "General"
+msgstr "Umum"
 
-#: ../src/bar.c:370 ../src/scan_dialog.c:184
-msgid "Process Fields"
-msgstr "Proses ruas"
+#: ../data/preferences_dialog.ui.h:20
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:51
+msgid "Show audio file header summary"
+msgstr ""
 
-#: ../src/bar.c:428
-#, c-format
-msgid "Could not merge UI, error was: %s\n"
-msgstr "Tak dapat menggabung UI, galat: %s\n"
+#: ../data/preferences_dialog.ui.h:21
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:52
+msgid ""
+"Whether to show header information, such as bit rate and duration, for audio "
+"files"
+msgstr ""
 
-#: ../src/bar.c:533
-msgid "Ready to start"
-msgstr "Siap memulai"
+#: ../data/preferences_dialog.ui.h:22
+msgid "Display changed files in list using:"
+msgstr "Tampilkan berkas yang berubah dalam daftar memakai:"
 
-#: ../src/browser.c:376
-msgid "New default path for files selected"
-msgstr "Dipilih path baku baru bagi berkas"
+#: ../data/preferences_dialog.ui.h:23
+msgid "Red color"
+msgstr "Warna merah"
 
-#: ../src/browser.c:678 ../src/easytag.c:4546
-msgid "Some files have been modified but not saved"
-msgstr "Beberapa berkas telah diubah tapi tak disimpan"
+#: ../data/preferences_dialog.ui.h:24
+msgid "Bold style"
+msgstr "Gaya tebal"
 
-#: ../src/browser.c:679
-msgid "Do you want to save them before changing the directory?"
-msgstr "Apakah Anda ingin menyimpan mereka sebelum mengubah direktori?"
+#: ../data/preferences_dialog.ui.h:25
+#, fuzzy
+#| msgid "User Interface"
+msgid "Interface"
+msgstr "Antarmuka Pengguna"
 
-#: ../src/browser.c:683
-msgid "Confirm Directory Change"
-msgstr "Konfirmasikan Perubahan Direktori"
+#: ../data/preferences_dialog.ui.h:26
+msgid "File Settings"
+msgstr "Pengaturan Berkas"
 
-#: ../src/browser.c:2244
-msgid "<All albums>"
-msgstr "<Semua album>"
+#: ../data/preferences_dialog.ui.h:27
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:47
+#, fuzzy
+msgid "Preserve modification time when writing files"
+msgstr "Sistem berkas waktu mount tidak cocok %u\n"
 
-#: ../src/browser.c:2707
-#, c-format
-msgid "Error: Searching for %s, could not find node %s in tree."
-msgstr "Galat: Mencari %s, tak bisa temukan node %s dalam pohon."
+#: ../data/preferences_dialog.ui.h:28
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:48
+#, fuzzy
+msgid "Whether to preserve the existing modification time when editing files"
+msgstr "Sistem berkas waktu mount tidak cocok %u\n"
 
-#: ../src/browser.c:3201 ../src/browser.c:3279
-msgid "Tree"
-msgstr "Pohon"
+#: ../data/preferences_dialog.ui.h:29
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:49
+#, fuzzy
+msgid "Update parent directory modification time when writing files"
+msgstr "Sistem berkas waktu mount tidak cocok %u\n"
 
-#: ../src/browser.c:3202 ../src/cddb.c:803 ../src/misc.c:1903
-msgid "Filename"
+#: ../data/preferences_dialog.ui.h:30
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:50
+msgid ""
+"Whether to update the modification time on the parent directory when editing "
+"files"
+msgstr ""
+
+#: ../data/preferences_dialog.ui.h:31
+#, fuzzy
+#| msgid "Filename"
+msgid "Filenames"
 msgstr "Nama berkas"
 
-#: ../src/browser.c:3202 ../src/cddb.c:804 ../src/misc.c:1904
-#: ../src/prefs.c:643
-msgid "Title"
-msgstr "Judul"
+#: ../data/preferences_dialog.ui.h:32
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:195
+msgid "Replace illegal characters when renaming"
+msgstr ""
 
-#. Translators: This option is for the previous 'search in' option. For
-#. * instance, translate this as "Search in:" "Artist".
-#: ../src/browser.c:3203 ../src/browser.c:3210 ../src/cddb.c:483
-#: ../src/cddb.c:805 ../src/misc.c:1905 ../src/prefs.c:644
-msgid "Artist"
-msgstr "Artis"
+#: ../data/preferences_dialog.ui.h:33
+msgid ""
+"Convert characters which cannot be represented in filenames on the FAT32/16 "
+"and Joliet filesystems (‘\\’, ‘:’, ‘;’, ‘*’, ‘?’, ‘\"’, ‘<’, ‘>’, ‘|’)"
+msgstr ""
 
-#: ../src/browser.c:3203 ../src/misc.c:1906
-msgid "Album Artist"
-msgstr "Artis Album"
+#: ../data/preferences_dialog.ui.h:34
+msgid "Convert filename extension to:"
+msgstr "Konversikan ekstensi nama berkas menjadi:"
 
-#. Translators: This option is for the previous 'search in' option. For
-#. * instance, translate this as "Search in:" "Album".
-#: ../src/browser.c:3204 ../src/browser.c:3212 ../src/cddb.c:486
-#: ../src/cddb.c:806 ../src/misc.c:1907 ../src/prefs.c:645
-msgid "Album"
-msgstr "Album"
+#: ../data/preferences_dialog.ui.h:35
+msgid "Lower Case"
+msgstr "Huruf Kecil"
 
-#: ../src/browser.c:3204 ../src/cddb.c:807 ../src/misc.c:1909
-msgid "Year"
-msgstr "Tahun"
+#: ../data/preferences_dialog.ui.h:36
+#, fuzzy
+msgid "For example, the extension will be converted to ‘.mp3’"
+msgstr "\"%s\" tidak ditemukan"
 
-#: ../src/browser.c:3204
-msgid "Disc"
-msgstr "Diska"
+#: ../data/preferences_dialog.ui.h:37
+msgid "Upper Case"
+msgstr "Huruf Besar"
 
-#: ../src/browser.c:3205 ../src/misc.c:1910
-msgid "Track"
-msgstr "Trek"
+#: ../data/preferences_dialog.ui.h:38
+msgid "For example, the extension will be converted to ‘.MP3’"
+msgstr ""
 
-#: ../src/browser.c:3205 ../src/cddb.c:810 ../src/misc.c:1911
-#: ../src/prefs.c:646
-msgid "Genre"
-msgstr "Aliran"
+#: ../data/preferences_dialog.ui.h:39
+#, fuzzy
+msgid "No Change"
+msgstr "Bulan Tetap"
 
-#: ../src/browser.c:3206 ../src/misc.c:1912 ../src/prefs.c:647
-msgid "Comment"
-msgstr "Komentar"
+#: ../data/preferences_dialog.ui.h:40
+#, fuzzy
+msgid "The extension will not be modified"
+msgstr "\"%s\" tidak ditemukan"
 
-#: ../src/browser.c:3206 ../src/misc.c:1913 ../src/picture.c:884
-#: ../src/prefs.c:648
-msgid "Composer"
-msgstr "Komposer"
+#: ../data/preferences_dialog.ui.h:41
+#, fuzzy
+#| msgid "Filename translation"
+msgid "Filename Encoding"
+msgstr "Terjemahan nama berkas"
 
-#: ../src/browser.c:3207 ../src/misc.c:1914
-msgid "Original Artist"
-msgstr "Artis Asli"
+#: ../data/preferences_dialog.ui.h:42
+#, fuzzy
+msgid "Try another character encoding"
+msgstr "Kehilangan karakter untuk pengkodean karakter"
 
-#: ../src/browser.c:3208 ../src/misc.c:1915
-msgid "Copyright"
-msgstr "Hak Cipta"
+#: ../data/preferences_dialog.ui.h:43
+msgid ""
+"Try to use the encoding associated with your locale and if this fails, try "
+"the ISO-8859-1 character encoding"
+msgstr ""
 
-#: ../src/browser.c:3208 ../src/misc.c:1916
-msgid "URL"
-msgstr "URL"
+#: ../data/preferences_dialog.ui.h:44
+#, fuzzy
+msgid "Transliterate characters into the system character encoding"
+msgstr "Kehilangan karakter untuk pengkodean karakter"
 
-#: ../src/browser.c:3209 ../src/misc.c:1917
-msgid "Encoded By"
-msgstr "Dienkode Oleh"
+#: ../data/preferences_dialog.ui.h:45
+msgid ""
+"Replace unsupported characters with a similar character from the target "
+"character encoding"
+msgstr ""
 
-#: ../src/browser.c:3210
-msgid "# Albums"
-msgstr "# Album"
+#: ../data/preferences_dialog.ui.h:46
+msgid ""
+"Use the system character encoding and silently discard unsupported characters"
+msgstr ""
 
-#: ../src/browser.c:3211 ../src/browser.c:3212
-msgid "# Files"
-msgstr "# Berkas"
+#: ../data/preferences_dialog.ui.h:47
+msgid ""
+"Discard characters which cannot be represented in the target character "
+"encoding"
+msgstr ""
 
-#: ../src/browser.c:3237
-msgid "Enter a directory to browse."
-msgstr "Masukkan direktori yang akan diramban."
+#: ../data/preferences_dialog.ui.h:48
+#, fuzzy
+#| msgid "File"
+msgid "Files"
+msgstr "Berkas"
 
-#: ../src/browser.c:3246
-msgid "Select a directory to browse."
-msgstr "Pilih direktori yang akan diramban."
+#: ../data/preferences_dialog.ui.h:49
+msgid "Automatically complete date field"
+msgstr ""
 
-#.
-#. * The label for displaying number of files in path (without subdirs)
-#.
-#. Translators: No files, as in "0 files".
-#: ../src/browser.c:3253 ../src/easytag.c:3454
-msgid "No files"
-msgstr "Tak ada berkas"
+#: ../data/preferences_dialog.ui.h:50
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:96
+msgid "Whether to automatically complete the date tag"
+msgstr ""
 
-#: ../src/browser.c:3331
-msgid "Artist & Album"
-msgstr "Artis & Album"
+#: ../data/preferences_dialog.ui.h:51
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:105
+msgid "Preserve the tag field focus"
+msgstr ""
 
-#. Only directories changed
-#: ../src/browser.c:3696 ../src/easytag.c:2879
-msgid "Rename Directory"
-msgstr "Ubah Nama Direktori"
+#: ../data/preferences_dialog.ui.h:52
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:106
+msgid "Whether to preserve focus on the current tag field when switching file"
+msgstr ""
 
-#: ../src/browser.c:3718
-#, c-format
-msgid "Rename the directory '%s' to:"
-msgstr "Ubah nama direktori '%s' menjadi:"
+#: ../data/preferences_dialog.ui.h:53
+msgid "Pad the number of digits in the disc field to:"
+msgstr ""
 
-#: ../src/browser.c:3737 ../src/misc.c:1172
-#, fuzzy
-msgid "Use mask:"
-msgstr "Mask Subnet:"
+#: ../data/preferences_dialog.ui.h:54
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:98
+msgid "Whether the disc number tag field should be padded with leading zeroes"
+msgstr ""
+
+#: ../data/preferences_dialog.ui.h:55
+msgid "Pad the number of digits in the track field to:"
+msgstr ""
+
+#: ../data/preferences_dialog.ui.h:56
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:102
+msgid "Whether the track number tag field should be padded with leading zeroes"
+msgstr ""
 
-#: ../src/browser.c:3740
-msgid "If activated, it will use masks to rename directory."
-msgstr "Bila diaktifkan, itu akan memakai mask untuk mengubah nama direktori."
+#: ../data/preferences_dialog.ui.h:57
+#, fuzzy
+msgid "Splitting"
+msgstr "Tag Git:"
 
-#: ../src/browser.c:3758
+#: ../data/preferences_dialog.ui.h:58
 msgid ""
-"Select or type in a mask using codes (see Legend in Scanner Window) to "
-"rename the directory from tag fields."
+"For Vorbis tags, selected fields will be split at dashes and saved as "
+"separate tags"
 msgstr ""
-"Pilih atau ketikkan masker memakai kode (lihat Legenda dalam Jendela "
-"Pemindai) untuk mengubah nama direktori dari ruas tag."
 
-#. Preview label
-#: ../src/browser.c:3782
-msgid "Rename directory preview"
-msgstr "Pratinjau ubah nama direktori"
+#: ../data/preferences_dialog.ui.h:59 ../data/search_dialog.ui.h:12
+#: ../src/browser.c:3795 ../src/cddb_dialog.c:3255
+msgid "Title"
+msgstr "Judul"
 
-#: ../src/browser.c:3874
-msgid "You must type a directory name"
-msgstr "Anda mesti mengetikkan suatu nama direktori"
+#: ../data/preferences_dialog.ui.h:60
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:206
+msgid "Whether to split title fields at a “ - ” separator in Ogg comments"
+msgstr ""
 
-#: ../src/browser.c:3875 ../src/browser.c:3896
-msgid "Directory Name Error"
-msgstr "Galat Nama Direktori"
+#. Translators: This option is for the previous 'search in' option.
+#. * For instance, translate this as "Search in:" "Artist".
+#: ../data/preferences_dialog.ui.h:61 ../data/search_dialog.ui.h:13
+#: ../src/browser.c:3796 ../src/browser.c:3803 ../src/cddb_dialog.c:2932
+#: ../src/cddb_dialog.c:3256
+msgid "Artist"
+msgstr "Artis"
 
-#: ../src/browser.c:3893
-#, c-format
-msgid "Could not convert '%s' into filename encoding."
-msgstr "Tak bisa mengonversi '%s' ke dalam pengodean nama berkas."
+#: ../data/preferences_dialog.ui.h:62
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:208
+msgid "Whether to split artist fields at a “ - ” separator in Ogg comments"
+msgstr ""
 
-#: ../src/browser.c:3895
-msgid "Please use another name"
-msgstr "Silakan pakai nama lain"
+#. Translators: This option is for the previous 'search in' option.
+#. * For instance, translate this as "Search in:" "Album".
+#: ../data/preferences_dialog.ui.h:63 ../data/search_dialog.ui.h:15
+#: ../src/browser.c:3797 ../src/browser.c:3805 ../src/cddb_dialog.c:2935
+#: ../src/cddb_dialog.c:3257
+msgid "Album"
+msgstr "Album"
 
-#: ../src/browser.c:3965
-#, c-format
-msgid "The directory name '%s' already exists"
-msgstr "Nama direktori '%s' sudah ada"
+#: ../data/preferences_dialog.ui.h:64
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:210
+msgid "Whether to split album fields at a “ - ” separator in Ogg comments"
+msgstr ""
 
-#: ../src/browser.c:3966 ../src/easytag.c:2962
-msgid "Rename File Error"
-msgstr "Galat Pengubahan Nama Berkas"
+#: ../data/preferences_dialog.ui.h:65 ../data/search_dialog.ui.h:19
+#: ../src/browser.c:3798 ../src/cddb_dialog.c:3261
+msgid "Genre"
+msgstr "Aliran"
 
-#: ../src/browser.c:4004 ../src/browser.c:4033
-msgid "Rename Directory Error"
-msgstr "Galat Pengubahan Nama Direktori"
+#: ../data/preferences_dialog.ui.h:66
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:212
+msgid "Whether to split genre fields at a “ - ” separator in Ogg comments"
+msgstr ""
 
-#: ../src/browser.c:4071
-msgid "Directory renamed"
-msgstr "Direktori diubah nama"
+#: ../data/preferences_dialog.ui.h:67 ../data/search_dialog.ui.h:20
+#: ../src/browser.c:3799
+msgid "Comment"
+msgstr "Komentar"
 
-#: ../src/browser.c:4107
-msgid "Browse Directory With"
-msgstr "Ramban Direktori Dengan"
+#: ../data/preferences_dialog.ui.h:68
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:214
+msgid "Whether to split comment fields at a “ - ” separator in Ogg comments"
+msgstr ""
+
+#: ../data/preferences_dialog.ui.h:69 ../data/search_dialog.ui.h:21
+#: ../src/browser.c:3799 ../src/picture.c:223
+msgid "Composer"
+msgstr "Komposer"
 
-#: ../src/browser.c:4123 ../src/browser.c:4249
-msgid "Program to run:"
-msgstr "Program yang akan dijalankan:"
+#: ../data/preferences_dialog.ui.h:70
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:216
+msgid "Whether to split composer fields at a “ - ” separator in Ogg comments"
+msgstr ""
+
+#: ../data/preferences_dialog.ui.h:71
+msgid "Original artist"
+msgstr "Artis asli"
 
-#: ../src/browser.c:4135
+#: ../data/preferences_dialog.ui.h:72
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:218
 msgid ""
-"Enter the program to run. It will receive the current directory as parameter."
+"Whether to split original artist fields at a “ - ” separator in Ogg comments"
 msgstr ""
-"Masukkan nama program yang akan dijalankan. Itu akan menerima direktori saat "
-"ini sebagai parameter."
 
-#: ../src/browser.c:4229
-msgid "Open Files With"
-msgstr "Buka Berkas Dengan"
+#: ../data/preferences_dialog.ui.h:73
+msgid "Tags"
+msgstr ""
+
+#: ../data/preferences_dialog.ui.h:74
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:65
+msgid "Strip ID3 tags if all ID3 tags are empty"
+msgstr ""
 
-#: ../src/browser.c:4261
+#: ../data/preferences_dialog.ui.h:75
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:66
 msgid ""
-"Enter the program to run. It will receive the current file as parameter."
+"Whether to remove the ID3 tag from the audio file if all the individual tag "
+"fields are empty"
 msgstr ""
-"Masukkan nama program yang akan dijalankan. Itu akan menerima berkas saat "
-"ini sebagai parameter."
 
-#: ../src/cddb.c:313
-msgid "Artist / Album"
-msgstr "Artis / Album"
+#: ../data/preferences_dialog.ui.h:76
+msgid "Non-standard encoding for reading ID3 tags:"
+msgstr ""
 
-#: ../src/cddb.c:313
-msgid "Category"
-msgstr "Kategori"
+#: ../data/preferences_dialog.ui.h:77
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:64
+msgid "Whether to use a non-standard character encoding when reading ID3 tags"
+msgstr ""
 
-#. Note: don't set "" instead of NULL else this will cause problem with translation language
-#. Translators: This option is for the previous 'search in' option. For
-#. * instance, translate this as "Search in:" "Track Name".
-#: ../src/cddb.c:314 ../src/cddb.c:489
-msgid "Track Name"
-msgstr "Nama Trek"
+#: ../data/preferences_dialog.ui.h:78
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:74
+msgid "Choose the character set to be used when reading ID3v1 and ID3v2 tags"
+msgstr ""
 
-#: ../src/cddb.c:314
-msgid "Duration"
-msgstr "Durasi"
+#: ../data/preferences_dialog.ui.h:79
+#, fuzzy
+#| msgid "ID3v2 tags"
+msgid "ID3v2"
+msgstr "Tag ID3v2"
 
-#: ../src/cddb.c:326
-msgid "CDDB Search"
-msgstr "Pencarian CDDB"
+#: ../data/preferences_dialog.ui.h:80
+#, fuzzy
+msgid "Write ID3v2 tag"
+msgstr "rangka tag id3v3 tak diurai"
 
-#.
-#. * 1 - Page for automatic search (generate the CDDBId from files)
-#.
-#: ../src/cddb.c:346
-msgid "Automatic Search"
-msgstr "Pencarian Otomatis"
+#: ../data/preferences_dialog.ui.h:81
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:76
+msgid "Whether to write ID3v2 tags when writing ID3 tags into audio files"
+msgstr ""
 
-#: ../src/cddb.c:356
-msgid "Request CDDB"
-msgstr "Permintaan CDDB"
+#: ../data/preferences_dialog.ui.h:82
+msgid "Version:"
+msgstr "Versi:"
 
-#: ../src/cddb.c:366
+#: ../data/preferences_dialog.ui.h:83
 msgid ""
-"Request automatically the CDDB using the selected files (the order is "
-"important) to generate the CddbID"
+"Select the ID3v2 tag version to write:\n"
+" • ID3v2.3 is written using id3lib,\n"
+" • ID3v2.4 is written using libid3tag (recommended)"
 msgstr ""
-"Minta CDDB secara otomatis memakai berkas yang dipilih (urutan penting) "
-"untuk membuat CddbID"
 
-#: ../src/cddb.c:377 ../src/cddb.c:457
-msgid "Stop the search"
-msgstr "Hentikan pencarian"
+#: ../data/preferences_dialog.ui.h:86
+#, fuzzy
+msgid "Character encoding:"
+msgstr "Kehilangan karakter untuk pengkodean karakter"
 
-#. Check box to run the scanner
-#: ../src/cddb.c:384
-msgid "Use local CDDB"
-msgstr "Pakai CDDB lokal"
+#: ../data/preferences_dialog.ui.h:87
+#, fuzzy
+#| msgid "Unicode "
+msgid "Unicode"
+msgstr "Unicode"
 
-#: ../src/cddb.c:387 ../src/cddb.c:850
+#: ../data/preferences_dialog.ui.h:88
 msgid ""
-"When activating this option, after loading the fields, the current selected "
-"scanner will be ran (the scanner window must be opened)."
+"Choose the Unicode character encoding to be used when writing ID3v2 tags"
 msgstr ""
-"Ketika mengaktifkan opsi ini, setelah memuat ruas, pemindai yang saat ini "
-"dipilih akan dijalankan (jendela pemindai mesti dibuka)."
 
-#.
-#. * 2 - Page for manual search
-#.
-#: ../src/cddb.c:404
-msgid "Manual Search"
-msgstr "Pencarian Manual"
+#. Translators: This option is for the previous 'search in' option.
+#. * For instance, translate this as "Search in:" "Other".
+#: ../data/preferences_dialog.ui.h:89 ../src/cddb_dialog.c:2941
+#: ../src/picture.c:201
+msgid "Other"
+msgstr "Lainnya"
 
-#: ../src/cddb.c:416
-msgid "Words:"
-msgstr "Kata:"
+#: ../data/preferences_dialog.ui.h:90
+msgid ""
+"Override the standard Unicode character encoding to be used when writing "
+"ID3v2 tags"
+msgstr ""
 
-#: ../src/cddb.c:429
-msgid "Enter the words to search (separated by a space or '+')"
-msgstr "Masukkan kata-kata yang akan dicari (dipisah dengan spasi atau '+')"
+#: ../data/preferences_dialog.ui.h:91
+msgid "When encoding conversion fails:"
+msgstr ""
 
-#.
-#. * Search options
-#.
-#: ../src/cddb.c:469
-msgid "Search In:"
-msgstr "Cari Di:"
+#: ../data/preferences_dialog.ui.h:92
+msgid "Report error"
+msgstr ""
 
-#. Translators: This option is for the previous 'search in' option. For
-#. * instance, translate this as "Search in:" "All fields".
-#: ../src/cddb.c:479
-msgid "All Fields"
-msgstr "Semua Ruas"
+#: ../data/preferences_dialog.ui.h:93
+msgid ""
+"Display an error message when a character cannot be represented in the "
+"target character encoding and keep the original character"
+msgstr ""
 
-#. Translators: This option is for the previous 'search in' option. For
-#. * instance, translate this as "Search in:" "Other".
-#: ../src/cddb.c:492 ../src/picture.c:862 ../src/prefs.c:807
-msgid "Other"
-msgstr "Lainnya"
+#: ../data/preferences_dialog.ui.h:94
+msgid "Transliterate"
+msgstr "Transliterasi"
 
-#. Translators: This option is for the previous 'search in' option. For
-#. * instance, translate this as "Search in:" "All Categories".
-#: ../src/cddb.c:516
-msgid "All Categories"
-msgstr "Semua Kategori"
+#: ../data/preferences_dialog.ui.h:95
+#, fuzzy
+#| msgid "Disc"
+msgid "Discard"
+msgstr "Diska"
 
-#. Translators: This option is for the previous 'search in' option. For
-#. * instance, translate this as "Search in:" "Blues".
-#: ../src/cddb.c:520
-msgid "Blues"
-msgstr "Blues"
+#: ../data/preferences_dialog.ui.h:96
+msgid "Automatically convert old ID3v2 tag versions"
+msgstr ""
 
-#. Translators: This option is for the previous 'search in' option. For
-#. * instance, translate this as "Search in:" "Classical".
-#: ../src/cddb.c:523
-msgid "Classical"
-msgstr "Klasik"
+#: ../data/preferences_dialog.ui.h:97
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:80
+msgid ""
+"Whether to convert ID3 tags written against old version of the "
+"specification, such as ID3v2.2, to newer ones, such as ID3v2.3 or ID3v2.4"
+msgstr ""
 
-#. Translators: This option is for the previous 'search in' option. For
-#. * instance, translate this as "Search in:" "Country".
-#: ../src/cddb.c:526
-msgid "Country"
-msgstr "Country"
+#: ../data/preferences_dialog.ui.h:98
+#, fuzzy
+#| msgid "Use CRC32"
+msgid "Use CRC-32"
+msgstr "Pakai CRC32"
 
-#. Translators: This option is for the previous 'search in' option. For
-#. * instance, translate this as "Search in:" "Folk".
-#: ../src/cddb.c:529
-msgid "Folk"
-msgstr "Folk"
+#: ../data/preferences_dialog.ui.h:99
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:84
+msgid "Whether to embed a CRC-32 checksum of the audio file data in ID3v2 tags"
+msgstr ""
 
-#. Translators: This option is for the previous 'search in' option. For
-#. * instance, translate this as "Search in:" "Jazz".
-#: ../src/cddb.c:532
-msgid "Jazz"
-msgstr "Jazz"
+#: ../data/preferences_dialog.ui.h:100
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:81
+msgid "Compress data in ID3v2 tags"
+msgstr ""
 
-#. Translators: This option is for the previous 'search in' option. For
-#. * instance, translate this as "Search in:" "Misc".
-#: ../src/cddb.c:535
-msgid "Misc."
-msgstr "Rupa-rupa"
+#: ../data/preferences_dialog.ui.h:101
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:82
+msgid "Whether to compress data in ID3v2 tags"
+msgstr ""
 
-#. Translators: This option is for the previous 'search in' option. For
-#. * instance, translate this as "Search in:" "New age".
-#: ../src/cddb.c:538
-msgid "New Age"
-msgstr "New Age"
+#: ../data/preferences_dialog.ui.h:102
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:85
+msgid "Use text-only genre in ID3v2 tags"
+msgstr ""
 
-#. Translators: This option is for the previous 'search in' option. For
-#. * instance, translate this as "Search in:" "Reggae".
-#: ../src/cddb.c:541
-msgid "Reggae"
-msgstr "Reggae"
+#: ../data/preferences_dialog.ui.h:103
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:86
+msgid ""
+"Whether to use only a string, and not the integer-base ID3v1 genre field, "
+"when writing a genre field to ID3v2 tags"
+msgstr ""
 
-#. Translators: This option is for the previous 'search in' option. For
-#. * instance, translate this as "Search in:" "Rock".
-#: ../src/cddb.c:544
-msgid "Rock"
-msgstr "Rock"
+#: ../data/preferences_dialog.ui.h:104
+#, fuzzy
+#| msgid "ID3v1 tags"
+msgid "ID3v1"
+msgstr "Tag ID3v1"
 
-#. Translators: This option is for the previous 'search in' option. For
-#. * instance, translate this as "Search in:" "Soundtrack".
-#: ../src/cddb.c:547
-msgid "Soundtrack"
-msgstr "Soundtrack"
+#: ../data/preferences_dialog.ui.h:105
+#, fuzzy
+msgid "Write ID3v1 tag"
+msgstr "Tabel Tag Teks"
 
-#: ../src/cddb.c:587
-msgid "included: funk, soul, rap, pop, industrial, metal, etc."
-msgstr "disertakan: funk, soul, rap, pop, industrial, metal, dsb."
+#: ../data/preferences_dialog.ui.h:106
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:68
+msgid "Whether to write ID3v1 tags when writing ID3 tags into audio files"
+msgstr ""
 
-#: ../src/cddb.c:588
-msgid "movies, shows"
-msgstr "film, pertunjukan"
+#: ../data/preferences_dialog.ui.h:107
+msgid "Choose the character set to be used when writing ID3v1 tag"
+msgstr ""
 
-#: ../src/cddb.c:589
-msgid "others that do not fit in the above categories"
-msgstr "lainnya yang tak masuk ke kategori di atas"
-
-#. Button to display/hide the categories
-#: ../src/cddb.c:592
-msgid "Categories"
-msgstr "Kategori"
-
-#.
-#. * Results command
-#.
-#: ../src/cddb.c:600
-msgid "Results:"
-msgstr "Hasil:"
+#: ../data/preferences_dialog.ui.h:108
+#, fuzzy
+#| msgid "ID3 Tag"
+msgid "ID3 Tags"
+msgstr "Tag ID3"
 
-#: ../src/cddb.c:606 ../src/misc.c:1951
-msgid "Search:"
-msgstr "Cari:"
+#: ../data/preferences_dialog.ui.h:109
+#, fuzzy
+#| msgid "Character Set for Filename"
+msgid "Character Conversion"
+msgstr "Set Karakter untuk Nama Berkas"
 
-#: ../src/cddb.c:620
-msgid "Enter the words to search in the list below"
-msgstr "Masukkan kata-kata yang akan dicari dalam daftar di bawah"
+#: ../data/preferences_dialog.ui.h:110
+#, fuzzy
+msgid "Fill Tag Scanner"
+msgstr "Tag Git:"
 
-#: ../src/cddb.c:632
-msgid "Search Next"
-msgstr "Cari Selanjutnya"
+#: ../data/preferences_dialog.ui.h:112
+#, fuzzy, no-c-format
+#| msgid "Convert '_' and '%20' to spaces"
+msgid "Convert underscores and ‘%20’ to spaces"
+msgstr "Ubah '_' dan '%20' ke spasi"
 
-#: ../src/cddb.c:638
-msgid "Search Previous"
-msgstr "Cari Sebelumnya"
+#: ../data/preferences_dialog.ui.h:114
+#, fuzzy, no-c-format
+#| msgid "Convert space ' ' to underscore '_'"
+msgid "Convert spaces and ‘%20’ to underscores"
+msgstr "Konversikan spasi ‘ ‘ ke garis bawah ‘_’"
 
-#: ../src/cddb.c:649
-msgid "Show only red lines (or show all lines) in the 'Artist / Album' list"
+#: ../data/preferences_dialog.ui.h:115
+msgid "No conversion"
 msgstr ""
-"Hanya tampilkan baris merah (atau tampilkan semua baris) dalam daftar "
-"'Artis / Album'"
 
-#: ../src/cddb.c:655
-msgid "Unselect all lines"
-msgstr "Tak pilih baris manapun"
+#: ../data/preferences_dialog.ui.h:116
+#, fuzzy
+#| msgid "Rename File and Directory"
+msgid "Rename File and Directory Scanner"
+msgstr "Ubah Nama Berkas dan Direktori"
 
-#: ../src/cddb.c:661
-msgid "Invert lines selection"
-msgstr "Balikkan pilihan baris"
+#: ../data/preferences_dialog.ui.h:117
+#, fuzzy
+#| msgid "Process Fields"
+msgid "Process Fields Scanner"
+msgstr "Proses ruas"
 
-#: ../src/cddb.c:670
-msgid "Select all lines"
-msgstr "Pilih semua baris"
+#: ../data/preferences_dialog.ui.h:118
+msgid "Upper-case the first letters of all words"
+msgstr ""
 
-#: ../src/cddb.c:788
+#: ../data/preferences_dialog.ui.h:119
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:150
 msgid ""
-"Select lines to 'apply' to your files list. All lines will be processed if "
-"no line is selected.\n"
-"You can also reorder lines in this list before using 'apply' button."
+"Whether to upper-case the first letter of all words, including prepositions "
+"and other short words such as “feat.”, when processing tag fields"
 msgstr ""
-"Pilih baris yang akan 'diterapkan' ke daftar berkas Anda. Semua baris akan "
-"diproses bila tak ada baris yang dipilih.\n"
-"Anda juga dapat mengatur ulang baris dalam daftar ini sebelum memakai tombol "
-"'terapkan'."
-
-#.
-#. * Apply results to fields...
-#.
-#: ../src/cddb.c:795
-msgid "Set Into:"
-msgstr "Menjadi:"
 
-#: ../src/cddb.c:801
-msgid "All"
-msgstr "Semua"
-
-#: ../src/cddb.c:808
-msgid "Track #"
-msgstr "Trek #"
+#: ../data/preferences_dialog.ui.h:120
+msgid "Fields"
+msgstr "Ruas"
 
-#: ../src/cddb.c:809
-msgid "# Tracks"
-msgstr "# Trek"
+#: ../data/preferences_dialog.ui.h:121
+msgid "Overwrite fields when scanning tags"
+msgstr ""
 
-#. Check box to run the scanner
-#: ../src/cddb.c:847 ../src/misc.c:2992
-msgid "Run the current scanner for each file"
-msgstr "Jalankan pemindai saat ini bagi setiap berkas"
+#: ../data/preferences_dialog.ui.h:122
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:111
+msgid ""
+"Whether to overwrite the tag field values when filling tags. Otherwise, only "
+"blank tag fields will be filled"
+msgstr ""
 
-#. Check box to use DLM (also used in the preferences window)
-#: ../src/cddb.c:854
-msgid "Match lines with the Levenshtein algorithm"
-msgstr "Cocokkan baris dengan algoritma Levenshtein"
+#: ../data/preferences_dialog.ui.h:123
+msgid "Set this text as default comment:"
+msgstr ""
 
-#. Doesn't activate it by default because if the new user don't pay attention to it,
-#. it will not understand why the cddb results aren't loaded correctly...
-#. gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbUseDLM2),CDDB_USE_DLM);
-#: ../src/cddb.c:859 ../src/prefs.c:1363
+#: ../data/preferences_dialog.ui.h:124
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:113
 msgid ""
-"When activating this option, the Levenshtein algorithm (DLM: Damerau-"
-"Levenshtein Metric) will be used to match the CDDB title against every "
-"filename in the current folder, and to select the best match. This will be "
-"used when selecting the corresponding audio file, or applying CDDB results, "
-"instead of using directly the position order."
+"Whether to set the comment tag field to the provided default value when "
+"filling tags"
 msgstr ""
-"Ketika mengaktifkan opsi ini, algoritma Levenshtein (DLM: Damerau-"
-"Levenshtein Metric) akan dipakai untuk mencocokkan judul CDDB terhadap "
-"setiap nama berkas dalam folder saat ini, dan untuk memilih kecocokan "
-"terbaik. Ini akan dipakai ketika memilih berkas audio yang bersesuaian, atau "
-"menerapkan hasil CDDB, sebagai ganti memakai secara langsung urutan posisi."
 
-#: ../src/cddb.c:871
-msgid "Load the selected lines or all lines (if no line selected)."
+#: ../data/preferences_dialog.ui.h:125
+msgid "Use CRC-32 as the default comment (for files with ID3 tags only)"
 msgstr ""
-"Muat baris-baris yang dipilih atau semua baris (bila tak ada baris yang "
-"dipilih)"
-
-#: ../src/cddb.c:881
-msgid "Ready to search"
-msgstr "Siap mencari"
 
-#: ../src/cddb.c:1352
-#, c-format
+#: ../data/preferences_dialog.ui.h:126
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:117
 msgid ""
-"Album: '%s', artist: '%s', length: '%s', year: '%s', genre: '%s', ID: '%s'"
+"Whether to use the CRC-32 of the audio file data as the default comment, for "
+"files with ID3 tags only"
 msgstr ""
-"Album: '%s', artis: '%s', panjang: '%s', tahun: '%s', aliran: '%s', ID: '%s'"
-
-#: ../src/cddb.c:1588
-#, c-format
-msgid "Resolving host '%s'…"
-msgstr "Mengurai host ‘%s’…"
 
-#: ../src/cddb.c:1629
-#, c-format
-msgid "Cannot create a new socket (%s)"
-msgstr "Tak dapat membuat soket baru (%s)"
+#: ../data/preferences_dialog.ui.h:127
+msgid "Scanner"
+msgstr "Pemindai"
 
-#: ../src/cddb.c:1643
-msgid "Cannot set options on the newly-created socket"
-msgstr "Tak bisa menata opsi pada soket yang baru saja dibuat"
+#: ../data/preferences_dialog.ui.h:128
+#, fuzzy
+#| msgid "Automatic Search"
+msgid "Automatic Search Servers"
+msgstr "Pencarian Otomatis"
 
-#. Open connection to the server.
-#: ../src/cddb.c:1647
-#, c-format
-msgid "Connecting to host '%s', port '%d'…"
-msgstr "Menyambung ke host ‘%s’, port ‘%d’…"
+#: ../data/preferences_dialog.ui.h:129
+#, fuzzy
+#| msgid "Host Name:"
+msgid "Host:"
+msgstr "Nama Host:"
 
-#: ../src/cddb.c:1660
-#, c-format
-msgid "Cannot connect to host '%s' (%s)"
-msgstr "Tak dapat menyambung ke host ‘%s’ (%s)"
+#: ../data/preferences_dialog.ui.h:130
+msgid "Port:"
+msgstr "Porta:"
 
-#: ../src/cddb.c:1684
-#, c-format
-msgid "Cannot resolve host '%s' (%s)"
-msgstr "Tak dapat mengurai host ‘%s’ (%s)"
+#: ../data/preferences_dialog.ui.h:131
+msgid "CGI Path:"
+msgstr "Path CGI:"
 
-#: ../src/cddb.c:1697
-#, c-format
-msgid "Connected to host '%s'"
-msgstr "Terhubung ke host '%s'"
+#: ../data/preferences_dialog.ui.h:132
+#, fuzzy
+#| msgid "Manual Search"
+msgid "Manual Search Server"
+msgstr "Pencarian Manual"
 
-#: ../src/cddb.c:1778
-#, c-format
-msgid "Error while writing CDDB results to file '%s'"
-msgstr "Galat saat menulis hasil CDDB ke berkas '%s'"
+#: ../data/preferences_dialog.ui.h:133
+msgid "Proxy"
+msgstr "Proksi"
 
-#: ../src/cddb.c:1789
-#, c-format
-msgid "Receiving data (%s)…"
-msgstr "Sedang menerima data (%s)…"
+#: ../data/preferences_dialog.ui.h:134
+#, fuzzy
+#| msgid "Use a proxy"
+msgid "Use a proxy server"
+msgstr "Pakai proksi"
 
-#: ../src/cddb.c:1801
-#, c-format
-msgid "Error when reading CDDB response (%s)"
-msgstr "Galat saat membaca respon CDDB (%s)"
+#: ../data/preferences_dialog.ui.h:135
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:28
+msgid "Whether to access remote CDDB through a proxy"
+msgstr ""
 
-#: ../src/cddb.c:1808
-#, c-format
-msgid "Cannot create file '%s' (%s)"
-msgstr "Tak dapat membuat berkas '%s' (%s)"
+#: ../data/preferences_dialog.ui.h:136
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:30
+msgid "Hostname for a proxy to access remote CDDB"
+msgstr ""
 
-#: ../src/cddb.c:1849 ../src/setting.c:1256
-#, c-format
-msgid "Cannot open file '%s' (%s)"
-msgstr "Tak dapat membuka berkas '%s' (%s)"
+#: ../data/preferences_dialog.ui.h:137
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:32
+msgid "Port for a proxy to access remote CDDB"
+msgstr ""
 
-#. g_print("Request Cddb_Search_Album_List_From_String_Freedb : '%s'\n", cddb_in);
-#. Send the request
-#. g_print("Request Cddb_Search_Album_List_From_String_Gnudb : '%s'\n", cddb_in);
-#. Send the request
-#. g_print("Request Cddb_Get_Album_Tracks_List : '%s'\n", cddb_in);
-#. Send the request
-#: ../src/cddb.c:2362 ../src/cddb.c:2693 ../src/cddb.c:3568
-msgid "Sending request…"
-msgstr "Sedang mengirim permintaan…"
+#: ../data/preferences_dialog.ui.h:138
+#, fuzzy
+#| msgid "User Name:"
+msgid "User:"
+msgstr "Nama Pengguna:"
 
-#: ../src/cddb.c:2366 ../src/cddb.c:2697 ../src/cddb.c:3267 ../src/cddb.c:3572
-#, c-format
-msgid "Cannot send the request (%s)"
-msgstr "Tak dapat mengirim permintaan (%s)"
+#: ../data/preferences_dialog.ui.h:139
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:34
+msgid "Username for a proxy to access remote CDDB"
+msgstr ""
 
-#.
-#. * Read the answer
-#.
-#. Read the answer
-#: ../src/cddb.c:2393 ../src/cddb.c:3281 ../src/cddb.c:3581
-msgid "Receiving data…"
-msgstr "Sedang menerima data…"
+#: ../data/preferences_dialog.ui.h:140
+#, fuzzy
+msgid "Password:"
+msgstr "Kata sandi"
 
-#: ../src/cddb.c:2400 ../src/cddb.c:2726 ../src/cddb.c:3288 ../src/cddb.c:3588
-msgid "The server returned a bad response"
-msgstr "Server mengembalikan respon yang buruk"
+#: ../data/preferences_dialog.ui.h:141
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:36
+msgid "Password for a proxy to access remote CDDB"
+msgstr ""
 
-#: ../src/cddb.c:2414 ../src/cddb.c:2742 ../src/cddb.c:3303 ../src/cddb.c:3605
-#: ../src/cddb.c:3620
-#, c-format
-msgid "The server returned a bad response: %s"
-msgstr "Server mengembalikan respon yang buruk: %s"
+#: ../data/preferences_dialog.ui.h:142
+#, fuzzy
+#| msgid "Results:"
+msgid "Results List"
+msgstr "Hasil:"
 
-#: ../src/cddb.c:2561
-#, c-format
-msgid "Sorry, the web-based search is currently not available"
-msgstr "Maaf, pencarian berbasis web saat ini tak tersedia"
+#: ../data/preferences_dialog.ui.h:143
+msgid ""
+"Select corresponding file (according to position or DLM if activated below)"
+msgstr ""
 
-#: ../src/cddb.c:2563 ../src/cddb.c:2913
-#, c-format
-msgid "Found one matching album"
-msgid_plural "Found %d matching albums"
-msgstr[0] "Menemukan %d album yang cocok"
+#: ../data/preferences_dialog.ui.h:144
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:26
+msgid ""
+"Whether to select the file in the file list which matches the position in "
+"the CDDB results list"
+msgstr ""
 
-#: ../src/cddb.c:2714
-#, fuzzy, c-format
-msgid "Receiving data of page %d (album %d/%d)…"
-msgstr "album yang berisi data ini"
+#: ../data/preferences_dialog.ui.h:145
+msgid ""
+"Use the Levenshtein algorithm (DLM) to match results (using title) with "
+"audio files (using filename)"
+msgstr ""
 
-#: ../src/cddb.c:2716
-#, fuzzy, c-format
-msgid "Receiving data of page %d…"
-msgstr "Jaringan sedang menerima data."
+#: ../data/preferences_dialog.ui.h:146
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:24 ../src/cddb_dialog.c:3309
+msgid "Whether to use the DLM algorithm to match CDDB results to files"
+msgstr ""
 
-#: ../src/cddb.c:2880
-#, c-format
-msgid "More results to load…"
-msgstr "Lebih banyak hasil untuk dimuat..."
+#: ../data/preferences_dialog.ui.h:147
+msgid "CDDB"
+msgstr "CDDB"
 
-#: ../src/cddb.c:3009
-#, c-format
-msgid "No file selected"
-msgstr "Tak ada berkas yang dipilih"
+#: ../data/preferences_dialog.ui.h:148
+msgid "Confirmation"
+msgstr "Konfirmasi"
 
-#. The CD redbook standard defines the maximum number of tracks as 99, any
-#. queries with more than 99 tracks will never return a result.
-#: ../src/cddb.c:3017
-#, c-format
-msgid "More than 99 files selected. Cannot send request"
-msgstr "Lebih dari 99 berkas dipilih. Tak bisa mengirim permintaan"
+#: ../data/preferences_dialog.ui.h:149
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:118
+#, fuzzy
+#| msgid "Confirm writing of playlist"
+msgid "Confirm before quitting the application"
+msgstr "Konfirmasikan penulisan daftar putar"
 
-#: ../src/cddb.c:3023
-#, c-format
-msgid "One file selected"
-msgid_plural "%d files selected"
-msgstr[0] "%d berkas dipilih"
+#: ../data/preferences_dialog.ui.h:150
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:119
+msgid ""
+"Whether to ask for confirmation from the user before quitting the application"
+msgstr ""
 
-#: ../src/cddb.c:3107
-msgid "The path for 'Local CD Database' was not defined"
-msgstr "Path bagi ‘Basis Data CD Lokal’ tak didefinisikan"
+#: ../data/preferences_dialog.ui.h:151
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:120
+#, fuzzy
+#| msgid "Confirm writing of file tag"
+msgid "Confirm before writing tags"
+msgstr "Konfirmasikan penulisan tag berkas"
 
-#. Translators: 'it' in this sentence refers to the local CD
-#. * database path.
-#: ../src/cddb.c:3110
-msgid "Enter it in the preferences window before using this search."
-msgstr "Masukkan ke dalam jendela preferensi sebelum memakai pencarian ini."
+#: ../data/preferences_dialog.ui.h:152
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:121
+msgid ""
+"Whether to ask for confirmation from the user before writing tags to audio "
+"files"
+msgstr ""
 
-#: ../src/cddb.c:3112
+#: ../data/preferences_dialog.ui.h:153
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:122
 #, fuzzy
-msgid "Local CD search"
-msgstr "Hanya cari direktori lokal saja"
+#| msgid "Confirm renaming of file"
+msgid "Confirm before renaming a file"
+msgstr "Konfirmasikan penggantian nama berkas"
 
-#. g_print("Request Cddb_Search_Album_From_Selected_Files : '%s'\n", cddb_in);
-#: ../src/cddb.c:3257
-#, c-format
-msgid "Sending request (CddbId: %s, #tracks: %d, Disc length: %d)…"
-msgstr "Mengirim permintaan (CddbId: %s, #trek: %d, Panjang cakram: %d)…"
+#: ../data/preferences_dialog.ui.h:154
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:123
+msgid "Whether to ask for confirmation from the user before renaming a file"
+msgstr ""
 
-#: ../src/cddb.c:3414
-#, c-format
-msgid "DiscID '%s' gave one matching album"
-msgid_plural "DiscID '%s' gave %d matching albums"
-msgstr[0] "DiscID ‘%s’ memberikan %d album yang cocok"
+#: ../data/preferences_dialog.ui.h:155
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:126
+#, fuzzy
+#| msgid "Confirm deleting of file"
+msgid "Confirm before deleting a file"
+msgstr "Konfirmasikan penghapusan berkas"
 
-#: ../src/cddb.c:3512
-#, c-format
-msgid "Can't load file: '%s' (%s)."
-msgstr "Tak dapat memuat berkas '%s' (%s)."
+#: ../data/preferences_dialog.ui.h:156
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:127
+msgid "Whether to ask for confirmation from the user before deleting a file"
+msgstr ""
 
-#. Load the track list of the album
-#: ../src/cddb.c:3811
-msgid "Loading album track list…"
-msgstr "Sedang memuat daftar trek album..."
+#: ../data/preferences_dialog.ui.h:157
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:124
+#, fuzzy
+#| msgid "Confirm writing of playlist"
+msgid "Confirm before writing a playlist"
+msgstr "Konfirmasikan penulisan daftar putar"
 
-#: ../src/cddb.c:4010
-msgid "The number of CDDB results does not match the number of selected files"
-msgstr "Banyaknya hasil CDDB tak cocok dengan cacah berkas yang dipilih"
+#: ../data/preferences_dialog.ui.h:158
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:125
+msgid "Whether to ask for confirmation from the user before writing a playlist"
+msgstr ""
 
-#: ../src/cddb.c:4014
+#: ../data/preferences_dialog.ui.h:159
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:128
 #, fuzzy
-msgid "Write Tag from CDDB"
-msgstr "Hapus tag dari entri"
+#| msgid "Confirm renaming of file"
+msgid "Confirm before losing unsaved changes to files"
+msgstr "Konfirmasikan penggantian nama berkas"
 
-#: ../src/charset.c:47
-msgid "Arabic (IBM-864)"
-msgstr "Arab (IBM-864)"
+#: ../data/preferences_dialog.ui.h:160
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:129
+msgid ""
+"Whether to ask for confirmation from the user before performing an operation "
+"that would lose unsaved changes on files"
+msgstr ""
 
-#: ../src/charset.c:48
-msgid "Arabic (ISO-8859-6)"
-msgstr "Arab (ISO-8859-6)"
+#: ../data/preferences_dialog.ui.h:161
+#, fuzzy
+#| msgid "Scanner Window"
+msgid "Scanner Dialog"
+msgstr "Jendela Pemindai"
 
-#: ../src/charset.c:49
-msgid "Arabic (Windows-1256)"
-msgstr "Arab (Windows-1256)"
+#: ../data/preferences_dialog.ui.h:162
+#, fuzzy
+msgid "Show the scanner dialog on startup"
+msgstr "Buka pengatur katalog pada saat Poedit dimulai"
 
-#: ../src/charset.c:50
-msgid "Baltic (ISO-8859-13)"
-msgstr "Baltik (ISO-8859-13)"
+#: ../data/preferences_dialog.ui.h:163
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:202
+#, fuzzy
+msgid "Whether to show the scanner window on application startup"
+msgstr "Buka pengatur katalog pada saat Poedit dimulai"
 
-#: ../src/charset.c:51
-msgid "Baltic (ISO-8859-4)"
-msgstr "Baltik (ISO-8859-4)"
+#: ../data/preferences_dialog.ui.h:164
+msgid "Application"
+msgstr "Aplikasi"
 
-#: ../src/charset.c:52
-msgid "Baltic (Windows-1257)"
-msgstr "Baltik (Windows-1257)"
+#: ../data/search_dialog.ui.h:1
+msgid "Search:"
+msgstr "Cari:"
 
-#: ../src/charset.c:53
-msgid "Celtic (ISO-8859-14)"
-msgstr "Celtic (ISO-8859-14)"
+#: ../data/search_dialog.ui.h:2
+msgid ""
+"Type the text to search for in the file list, or leave the field empty to "
+"display all files"
+msgstr ""
 
-#: ../src/charset.c:54
-msgid "Central European (IBM-852)"
-msgstr "Eropa Tengah (IBM-852)"
+#: ../data/search_dialog.ui.h:3
+#, fuzzy
+#| msgid "_Find…"
+msgid "_Find"
+msgstr "_Cari…"
 
-#: ../src/charset.c:55
-msgid "Central European (ISO-8859-2)"
-msgstr "Eropa Tengah (ISO-8859-2)"
+#: ../data/search_dialog.ui.h:4
+#, fuzzy
+msgid "In:"
+msgstr "Masuk:"
 
-#: ../src/charset.c:56
-msgid "Central European (Windows-1250)"
-msgstr "Eropa Tengah (Windows-1250)"
+#. This option is for the previous 'in' option. For instance, translate this as 'Search' 'In:' 'the Filename'.
+#: ../data/search_dialog.ui.h:6
+#, fuzzy
+msgid "the Filename"
+msgstr "Nama file"
 
-#: ../src/charset.c:57
-msgid "Chinese Simplified (GB18030)"
-msgstr "Cina Disederhanakan (GB18030)"
+#. This option is for the previous 'in' option. For instance, translate this as 'Search' 'In:' 'the Tag'.
+#: ../data/search_dialog.ui.h:8
+#, fuzzy
+msgid "the Tag"
+msgstr "Tag"
 
-#: ../src/charset.c:58
-msgid "Chinese Simplified (GB2312)"
-msgstr "Cina Disederhanakan (GB2312)"
+#: ../data/search_dialog.ui.h:9
+msgid "Case sensitive"
+msgstr "Peka huruf besar kecil"
 
-#: ../src/charset.c:59
-msgid "Chinese Traditional (Big5)"
-msgstr "Cina Tradisional (Big5)"
+#. Button to quit.
+#: ../data/search_dialog.ui.h:10 ../src/cddb_dialog.c:2831
+#: ../src/cddb_dialog.c:2904 ../src/load_files_dialog.c:895
+#: ../src/preferences_dialog.c:294 ../src/scan_dialog.c:2519
+msgid "_Close"
+msgstr "_Tutup"
 
-#: ../src/charset.c:60
-msgid "Chinese Traditional (Big5-HKSCS)"
-msgstr "Cina Tradisional (Big5-HKSCS)"
+#: ../data/search_dialog.ui.h:14 ../src/browser.c:3796
+msgid "Album Artist"
+msgstr "Artis Album"
 
-#: ../src/charset.c:61
-msgid "Cyrillic (IBM-855)"
-msgstr "Cyrillic (IBM-855)"
+#: ../data/search_dialog.ui.h:16
+msgid "CD"
+msgstr "CD"
 
-#: ../src/charset.c:62
-msgid "Cyrillic (ISO-8859-5)"
-msgstr "Cyrillic (ISO-8859-6)"
+#: ../data/search_dialog.ui.h:17 ../src/browser.c:3797
+#: ../src/cddb_dialog.c:3258
+msgid "Year"
+msgstr "Tahun"
 
-#: ../src/charset.c:63
-msgid "Cyrillic (ISO-IR-111)"
-msgstr "Cyrillic (ISO-IR-111)"
+#: ../data/search_dialog.ui.h:18 ../src/browser.c:3798
+msgid "Track"
+msgstr "Trek"
 
-#: ../src/charset.c:64
-msgid "Cyrillic (KOI8-R)"
-msgstr "Cyrillic (KOI8-R)"
+#: ../data/search_dialog.ui.h:22 ../src/browser.c:3800
+msgid "Original Artist"
+msgstr "Artis Asli"
 
-#: ../src/charset.c:65
-msgid "Cyrillic (Windows-1251)"
-msgstr "Cyrillic (Windows-1251)"
+#: ../data/search_dialog.ui.h:23 ../src/browser.c:3801
+msgid "Copyright"
+msgstr "Hak Cipta"
 
-#: ../src/charset.c:66
-msgid "Cyrillic/Russian (CP-866)"
-msgstr "Cyrillic/Rusia (CP-866)"
+#: ../data/search_dialog.ui.h:24 ../src/browser.c:3801
+msgid "URL"
+msgstr "URL"
 
-#: ../src/charset.c:67
-msgid "Cyrillic/Ukrainian (KOI8-U)"
-msgstr "Cyrillic/Ukrania (KOI8-U)"
+#: ../data/search_dialog.ui.h:25 ../src/browser.c:3802
+msgid "Encoded By"
+msgstr "Dienkode Oleh"
 
-#: ../src/charset.c:68
-msgid "English (US-ASCII)"
-msgstr "Inggris (US-ASCII)"
+#: ../data/tag_area.ui.h:1
+msgid "Image Type"
+msgstr "Tipe Citra"
 
-#: ../src/charset.c:69
-msgid "Greek (ISO-8859-7)"
-msgstr "Yunani (ISO-8859-7)"
+#: ../data/tag_area.ui.h:2 ../src/picture.c:288
+msgid "Description"
+msgstr "Deskripsi"
 
-#: ../src/charset.c:70
-msgid "Greek (Windows-1253)"
-msgstr "Yunani (Windows-1253)"
+#: ../data/tag_area.ui.h:4
+msgid "_Accept"
+msgstr "Terim_a"
 
-#: ../src/charset.c:71
-msgid "Hebrew (IBM-862)"
-msgstr "Ibrani (IBM-862)"
+#: ../data/toolbar.ui.h:2
+msgid "First file"
+msgstr "Berkas pertama"
 
-#: ../src/charset.c:72
-msgid "Hebrew (Windows-1255)"
-msgstr "Ibrani (Windows-1255)"
+#: ../data/toolbar.ui.h:3
+msgid "_Previous File"
+msgstr "Berkas Se_belumnya"
 
-#: ../src/charset.c:73
-msgid "Japanese (EUC-JP)"
-msgstr "Jepang (EUC-JP)"
+#: ../data/toolbar.ui.h:4
+msgid "Previous file"
+msgstr "Berkas sebelumnya"
 
-#: ../src/charset.c:74
-msgid "Japanese (ISO-2022-JP)"
-msgstr "Jepang (ISO-2022-JP)"
+#: ../data/toolbar.ui.h:6
+msgid "Next file"
+msgstr "Berkas selanjutnya"
 
-#: ../src/charset.c:75
-msgid "Japanese (Shift_JIS)"
-msgstr "Jepang (Shift-JIS)"
+#: ../data/toolbar.ui.h:8
+msgid "Last file"
+msgstr "Berkas terakhir"
 
-#: ../src/charset.c:76
-msgid "Korean (EUC-KR)"
-msgstr "Korea (EUC-KR)"
+#: ../data/toolbar.ui.h:9
+msgid "_Show Scanner"
+msgstr "_Tampilkan Pemindai"
 
-#: ../src/charset.c:77
-msgid "Nordic (ISO-8859-10)"
-msgstr "Norwegia (ISO-8859-10)"
+#: ../data/toolbar.ui.h:10
+msgid "Show scanner"
+msgstr "Tampilkan pemindai"
 
-#: ../src/charset.c:78
-msgid "South European (ISO-8859-3)"
-msgstr "Eropa Selatan (ISO-8859-3)"
+#: ../data/toolbar.ui.h:12
+msgid "Remove tags"
+msgstr "Hapus tag"
 
-#: ../src/charset.c:79
-msgid "Thai (TIS-620)"
-msgstr "Thailand (TIS-620)"
+#: ../data/toolbar.ui.h:13
+msgid "_Undo"
+msgstr "Ta_k Jadi"
 
-#: ../src/charset.c:80
-msgid "Turkish (IBM-857)"
-msgstr "Turki (IBM-857)"
+#: ../data/toolbar.ui.h:14
+#, fuzzy
+#| msgid "Found one file"
+#| msgid_plural "Found %d files"
+msgid "Undo for file"
+msgstr "Menemukan %d berkas"
 
-#: ../src/charset.c:81
-msgid "Turkish (ISO-8859-9)"
-msgstr "Turki (ISO-8859-9)"
+#: ../data/toolbar.ui.h:15
+msgid "R_edo"
+msgstr "Jadi _Lagi"
 
-#: ../src/charset.c:82
-msgid "Turkish (Windows-1254)"
-msgstr "Turki (WIndows-1254)"
+#: ../data/toolbar.ui.h:16
+#, fuzzy
+#| msgid "Read-only file"
+msgid "Redo for file"
+msgstr "Berkas hanya-baca"
 
-#. {N_("Unicode (UTF-7)"),                   "UTF-7"         },
-#: ../src/charset.c:84
-msgid "Unicode (UTF-8)"
-msgstr "Unicode (UTF-8)"
+#: ../data/toolbar.ui.h:18
+msgid "Save changes to selected files"
+msgstr "Simpan perubahan ke berkas-berkas yang dipilih"
 
-#. {N_("Unicode (UTF-16BE)"),                "UTF-16BE"      },
-#. {N_("Unicode (UTF-16LE)"),                "UTF-16LE"      },
-#. {N_("Unicode (UTF-32BE)"),                "UTF-32BE"      },
-#. {N_("Unicode (UTF-32LE)"),                "UTF-32LE"      },
-#: ../src/charset.c:91
-msgid "Vietnamese (VISCII)"
-msgstr "Vietnam (VISCII)"
+#: ../data/toolbar.ui.h:20
+#, fuzzy
+#| msgid "Collapse directory tree"
+msgid "Browse directory tree"
+msgstr "Lipat pohon direktori"
 
-#: ../src/charset.c:92
-msgid "Vietnamese (Windows-1258)"
-msgstr "Vietnam (Windows-1258)"
+#: ../data/toolbar.ui.h:22
+#, fuzzy
+#| msgid "View by artist and album"
+msgid "Browse artists and albums"
+msgstr "Tilik menurut artis dan album"
 
-#: ../src/charset.c:93
-msgid "Visual Hebrew (ISO-8859-8)"
-msgstr "Ibrani Visual (ISO-8859-8)"
+#: ../data/toolbar.ui.h:24
+msgid "Invert file selection"
+msgstr "Balikkan pilihan berkas"
 
-#: ../src/charset.c:94
-msgid "Western (IBM-850)"
-msgstr "Barat (IBM-850)"
+#: ../data/toolbar.ui.h:26
+msgid "Search filenames and tags"
+msgstr "Cari nama berkas dan tag"
 
-#: ../src/charset.c:95
-msgid "Western (ISO-8859-1)"
-msgstr "Barat (ISO-8859-1)"
+#: ../data/toolbar.ui.h:27
+#, fuzzy
+#| msgid "CDD_B Search…"
+msgid "CDDB Search…"
+msgstr "Pencarian CDD_B…"
 
-#: ../src/charset.c:96
-msgid "Western (ISO-8859-15)"
-msgstr "Barat (ISO-8859-15)"
+#: ../data/toolbar.ui.h:28 ../src/cddb_dialog.c:2769
+msgid "CDDB Search"
+msgstr "Pencarian CDDB"
 
-#: ../src/charset.c:97
-msgid "Western (Windows-1252)"
-msgstr "Barat (Windows-1252)"
+#: ../data/toolbar.ui.h:30
+msgid "Generate a playlist"
+msgstr "Membuat suatu daftar putar"
 
-#: ../src/charset.c:511
-#, c-format
-msgid "The filename '%s' couldn't be converted into UTF-8 (%s)."
-msgstr "Nama berkas ‘%s’ tak bisa dikonversi ke dalam UTF-8 (%s)."
+#: ../data/toolbar.ui.h:31
+msgid "Stop"
+msgstr "Berhenti"
 
-#: ../src/charset.c:512 ../src/charset.c:611 ../src/charset.c:674
-msgid "Invalid UTF-8"
-msgstr "UTF-8 tak valid"
+#: ../data/toolbar.ui.h:32
+msgid "Stop the current action"
+msgstr "Hentikan aksi saat ini"
 
-#: ../src/charset.c:610
-#, c-format
-msgid ""
-"The UTF-8 string '%s' couldn't be converted into filename encoding (%s)."
-msgstr ""
-"String UTF-8 ‘%s’ tak dapat dikonversi ke dalam enkoding nama berkas (%s)."
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:1
+#, fuzzy
+#| msgid "Ready to start"
+msgid "Load on startup"
+msgstr "Siap memulai"
 
-#: ../src/charset.c:673
-#, c-format
-msgid "The string '%s' couldn't be converted into UTF-8 (%s)."
-msgstr "String ‘%s’ tak dapat dikonversi ke dalam UTF-8 (%s)."
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:3
+#, fuzzy
+msgid "Default path"
+msgstr "Jarak luar default"
 
-#. Starting messages
-#: ../src/easytag.c:185
-#, fuzzy, c-format
-msgid "Starting EasyTAG version %s (PID: %d)…"
-msgstr "memulai (versi %s), pid %u pengguna '%s'"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:7
+#, fuzzy
+#| msgid "Show hidden directories"
+msgid "Show hidden directories while browsing"
+msgstr "Tampilkan direktori-direktori yang tersembunyi"
 
-#: ../src/easytag.c:187
-#, fuzzy, c-format
-msgid "Using libid3tag version %s"
-msgstr "Cetak versi program"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:11
+#, fuzzy
+#| msgid "Server Settings for Automatic Search"
+msgid "CDDB server hostname for automatic search"
+msgstr "Pengaturan Server untuk Pencarian Otomatis"
 
-#: ../src/easytag.c:190
-#, fuzzy, c-format
-msgid "Using id3lib version %d.%d.%d"
-msgstr "Cetak versi program"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:12
+#, fuzzy
+#| msgid "Server Settings for Automatic Search"
+msgid "The CDDB server to use for the automatic search"
+msgstr "Pengaturan Server untuk Pencarian Otomatis"
 
-#: ../src/easytag.c:196
-#, c-format
-msgid "Variable EASYTAGLANG defined. Setting locale: '%s'"
-msgstr "Variabel EASYTAGLAG didefinisikan. Menata locale: ‘%s’"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:13
+#, fuzzy
+#| msgid "Server Settings for Automatic Search"
+msgid "CDDB server port for automatic search"
+msgstr "Pengaturan Server untuk Pencarian Otomatis"
 
-#: ../src/easytag.c:198
-#, c-format
-msgid "Setting locale: '%s'"
-msgstr "Menata locale: '%s'"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:14
+#, fuzzy
+#| msgid "Server Settings for Automatic Search"
+msgid "The CDDB server port to use for the automatic search"
+msgstr "Pengaturan Server untuk Pencarian Otomatis"
 
-#: ../src/easytag.c:203
-#, c-format
-msgid "Currently using locale '%s' (and eventually '%s')"
-msgstr "Saat ini memakai locale ‘%s’ (dan pada akhirnya ‘%s’)"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:15
+#, fuzzy
+#| msgid "Server Settings for Automatic Search"
+msgid "CDDB server path for automatic search"
+msgstr "Pengaturan Server untuk Pencarian Otomatis"
 
-#: ../src/easytag.c:210
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:16
 #, fuzzy
-msgid "Unable to create setting directories"
-msgstr "Tak dapat membuat tampilan transien: "
+#| msgid "Server Settings for Automatic Search"
+msgid "The CDDB server path to use for the automatic search"
+msgstr "Pengaturan Server untuk Pencarian Otomatis"
 
-#: ../src/easytag.c:427 ../src/et_core.c:638 ../src/et_core.c:650
-#, c-format
-msgid "Error while querying information for file: '%s' (%s)"
-msgstr "Galat saat mengambil informasi bagi berkas ‘%s’: %s"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:17
+#, fuzzy
+#| msgid "Server Settings for Manual Search"
+msgid "CDDB server hostname for manual search"
+msgstr "Pengaturan Server untuk Pencarian Manual"
 
-#: ../src/easytag.c:490
-#, c-format
-msgid "Cannot open path '%s'"
-msgstr "Tak dapat membuka path '%s'"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:18
+#, fuzzy
+#| msgid "Server Settings for Manual Search"
+msgid "The CDDB server to use for a manual search"
+msgstr "Pengaturan Server untuk Pencarian Manual"
 
-#.
-#. * Browser
-#.
-#: ../src/easytag.c:582 ../src/prefs.c:142
-msgid "Browser"
-msgstr "Peramban"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:19
+#, fuzzy
+#| msgid "Server Settings for Manual Search"
+msgid "CDDB server port for manual search"
+msgstr "Pengaturan Server untuk Pencarian Manual"
 
-#: ../src/easytag.c:604 ../src/et_core.c:2869
-msgid "File"
-msgstr "Berkas"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:20
+#, fuzzy
+#| msgid "Server Settings for Manual Search"
+msgid "The CDDB server port to use for a manual search"
+msgstr "Pengaturan Server untuk Pencarian Manual"
 
-#. Default values are MPs data
-#. Nothing to display
-#. gtk_label_set_text(GTK_LABEL(VersionLabel),"");
-#. gtk_label_set_text(GTK_LABEL(VersionValueLabel),"");
-#. Version changed to encoder version
-#. Encoder version
-#: ../src/easytag.c:636 ../src/easytag.c:4217 ../src/flac_header.c:201
-#: ../src/monkeyaudio_header.c:96 ../src/musepack_header.c:98
-#: ../src/ogg_header.c:389 ../src/opus_header.c:221 ../src/wavpack_header.c:72
-#, c-format
-msgid "Encoder:"
-msgstr "Enkoder:"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:21
+#, fuzzy
+#| msgid "Server Settings for Manual Search"
+msgid "CDDB server path for manual search"
+msgstr "Pengaturan Server untuk Pencarian Manual"
 
-#: ../src/easytag.c:644
-msgid "Bitrate:"
-msgstr "Laju bit:"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:22
+#, fuzzy
+#| msgid "Server Settings for Manual Search"
+msgid "The CDDB server path to use for a manual search"
+msgstr "Pengaturan Server untuk Pencarian Manual"
 
-#. Translators: Please try to keep this string as short as possible as it
-#. * is shown in a narrow column.
-#: ../src/easytag.c:654
-msgid "Frequency:"
-msgstr "Frekuensi:"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:23
+#, fuzzy
+#| msgid "Error while writing CDDB results to file '%s'"
+msgid "Use DLM to match CDDB results to files"
+msgstr "Galat saat menulis hasil CDDB ke berkas '%s'"
 
-#. Mode
-#: ../src/easytag.c:665 ../src/easytag.c:4221 ../src/mpeg_header.c:216
-msgid "Mode:"
-msgstr "Mode:"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:25
+msgid ""
+"Select the file with the position which matches the position of the CDDB "
+"result"
+msgstr ""
 
-#: ../src/easytag.c:672
-msgid "Size:"
-msgstr "Ukuran:"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:27
+msgid "Enable proxy for remote CDDB"
+msgstr ""
 
-#: ../src/easytag.c:679
-msgid "Duration:"
-msgstr "Durasi:"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:29
+msgid "CDDB proxy hostname"
+msgstr "Nama host proksi CDDB"
 
-#. Main Frame
-#: ../src/easytag.c:726 ../src/et_core.c:2799
-msgid "Tag"
-msgstr "Tag"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:31
+msgid "CDDB proxy port"
+msgstr "Port proksi CDDB"
 
-#.
-#. * 1 - Page for common tag fields
-#.
-#: ../src/easytag.c:748
-msgid "Common"
-msgstr "Umum"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:33
+msgid "CDDB proxy username"
+msgstr "Nama pengguna proksi CDDB"
 
-#. Title
-#: ../src/easytag.c:755
-msgid "Title:"
-msgstr "Judul:"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:35
+msgid "CDDB proxy password"
+msgstr "Sandi proksi CDDB"
 
-#: ../src/easytag.c:769
-msgid "Tag selected files with this title"
-msgstr "Berkas yang dipilih tag dengan judul ini"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:37
+msgid "Run the scanner on CDDB results"
+msgstr ""
 
-#. Artist
-#: ../src/easytag.c:774
-msgid "Artist:"
-msgstr "Artis:"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:38 ../src/cddb_dialog.c:3301
+msgid ""
+"Whether to run the tag scanner, with the current settings, on the CDDB "
+"results"
+msgstr ""
 
-#: ../src/easytag.c:788
-msgid "Tag selected files with this artist"
-msgstr "Berkas yang dipilih tag dengan artis ini"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:39
+msgid "The fields to use in a manual CDDB search"
+msgstr ""
 
-#. Album Artist
-#: ../src/easytag.c:793
-msgid "Album artist:"
-msgstr "Artis album:"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:40
+msgid "Which fields to search for matches of the returned CDDB results"
+msgstr ""
 
-#: ../src/easytag.c:807
-msgid "Tag selected files with this album artist"
-msgstr "Berkas yang dipilih tag dengan artis album ini"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:41
+msgid "The categories to use in a CDDB search"
+msgstr ""
 
-#. Album
-#: ../src/easytag.c:812
-msgid "Album:"
-msgstr "Album:"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:42
+msgid "Which categories to search for matches in the returned CDDB results"
+msgstr ""
 
-#: ../src/easytag.c:826
-msgid "Tag selected files with this album name"
-msgstr "Berkas yang dipilih tag dengan nama album ini"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:43
+msgid "Show the categories list in the CDDB manual search"
+msgstr ""
 
-#. Disc Number
-#: ../src/easytag.c:831
-msgid "CD:"
-msgstr "CD:"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:44
+msgid ""
+"Whether to show the list of categories which can be searched with a manual "
+"CDDB query"
+msgstr ""
 
-#: ../src/easytag.c:848
-msgid "Tag selected files with this disc number"
-msgstr "Berkas yang dipilih tag dengan nomor cakram ini"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:45
+msgid "The tag fields to set when matching against CDDB results"
+msgstr ""
 
-#. Year
-#: ../src/easytag.c:853
-msgid "Year:"
-msgstr "Tahun:"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:46
+msgid ""
+"Which tag fields should be set when matching against selected files and CDDB "
+"results"
+msgstr ""
 
-#: ../src/easytag.c:873
-msgid "Tag selected files with this year"
-msgstr "Berkas yang dipilih tag dengan tahun ini"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:53
+#, fuzzy
+#| msgid "Display changed files in list using:"
+msgid "Show changed files in bold"
+msgstr "Tampilkan berkas yang berubah dalam daftar memakai:"
 
-#: ../src/easytag.c:887
-msgid "Number selected tracks sequentially. Starts at 01 in each subdirectory."
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:54
+msgid ""
+"Whether to highlight changed files in the file list by making them bold, or "
+"alternatively by making them red"
 msgstr ""
-"Banyaknya trek yang dipilih secara berurutan. Mulai dari 01 dalam setiap "
-"subdirektori."
 
-#. To have enough space to display the icon
-#. To have enough space to display the icon
-#: ../src/easytag.c:896
-msgid "Track #:"
-msgstr "Trek #:"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:57
+msgid "How to sort audio files in the file list"
+msgstr ""
 
-#: ../src/easytag.c:927
-msgid ""
-"Set the number of files, in the same directory of the displayed file, to the "
-"selected tracks."
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:58
+msgid "Sort files in ascending or descending order for the selected type"
 msgstr ""
 
-#: ../src/easytag.c:947
-msgid "Tag selected files with this number of tracks"
-msgstr "Tag berkas yang dipilih dengan nomor trek ini"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:59
+#, fuzzy
+#| msgid "Max number of lines:"
+msgid "Number of log lines"
+msgstr "Banyaknya baris maks:"
 
-#. Genre
-#: ../src/easytag.c:951
-msgid "Genre:"
-msgstr "Aliran:"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:63
+msgid "Use a non-standard character encoding when reading ID3 tags"
+msgstr ""
 
-#: ../src/easytag.c:979
-msgid "Tag selected files with this genre"
-msgstr "Tag berkas yang dipilih dengan genre ini"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:67
+#, fuzzy
+msgid "Write ID3v1 tags"
+msgstr "Tabel Tag Teks"
 
-#. Comment
-#: ../src/easytag.c:984
-msgid "Comment:"
-msgstr "Komentar:"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:69
+msgid "The character set for writing ID3v1 tags"
+msgstr ""
 
-#: ../src/easytag.c:1011
-msgid "Tag selected files with this comment"
-msgstr "Tag berkas yang dipilih dengan komentar ini"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:70
+msgid "Choose the character set to be used when writing ID3v1 tags"
+msgstr ""
 
-#. Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(CommentView));
-#. Composer (name of the composers)
-#: ../src/easytag.c:1018
-msgid "Composer:"
-msgstr "Komposer:"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:71
+msgid "Encoding options when writing ID3v1 tags"
+msgstr ""
 
-#: ../src/easytag.c:1032
-msgid "Tag selected files with this composer"
-msgstr "Tag berkas yang dipilih dengan komposer ini"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:72
+msgid ""
+"Additional options to pass to iconv() when converting between encodings when "
+"writing ID3v1 tags"
+msgstr ""
 
-#. Translators: Original Artist / Performer. Please try to keep this string
-#. * as short as possible, as it must fit into a narrow column.
-#: ../src/easytag.c:1039
-msgid "Orig. artist:"
-msgstr "Artis asli:"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:73
+msgid "The character set for reading ID3v1 and ID3v2 tags"
+msgstr ""
 
-#: ../src/easytag.c:1053
-msgid "Tag selected files with this original artist"
-msgstr "Tag berkas yang dipilih dengan artis asli ini"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:75
+#, fuzzy
+msgid "Write ID3v2 tags"
+msgstr "rangka tag id3v3 tak diurai"
 
-#. Copyright
-#: ../src/easytag.c:1059
-msgid "Copyright:"
-msgstr "Hak Cipta:"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:77
+msgid "Enable ID3v2.4 support"
+msgstr ""
 
-#: ../src/easytag.c:1073
-msgid "Tag selected files with this copyright"
-msgstr "Tag berkas yang dipilih dengan hak cipta ini"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:78
+msgid "Whether to write ID3v2.4 tags when ID3v2 support is enabled"
+msgstr ""
 
-#. URL
-#: ../src/easytag.c:1079
-msgid "URL:"
-msgstr "URL:"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:79
+msgid "Convert old ID3 tag versions to new ones"
+msgstr ""
 
-#: ../src/easytag.c:1093
-msgid "Tag selected files with this URL"
-msgstr "Tag berkas yang dipilih dengan URL ini"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:83
+msgid "Use CRC-32 in ID3v2 tags"
+msgstr ""
 
-#. Encoded by
-#: ../src/easytag.c:1099
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:87
 #, fuzzy
-msgid "Encoded by:"
-msgstr "Dienkode Oleh"
+msgid "Use Unicode character encoding in ID3v2 tags"
+msgstr "Kehilangan karakter untuk pengkodean karakter"
 
-#: ../src/easytag.c:1113
-msgid "Tag selected files with this encoder name"
-msgstr "Tag berkas yang dipilih dengan nama enkoder ini"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:88
+msgid "Whether to use a Unicode character set when writing ID3v2 tags"
+msgstr ""
 
-#.
-#. * 2 - Page for extra tag fields
-#.
-#: ../src/easytag.c:1146 ../src/et_core.c:3241 ../src/et_core.c:3244
-msgid "Images"
-msgstr "Citra"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:89
+msgid "The Unicode character set for writing ID3v2 tags"
+msgstr ""
 
-#: ../src/easytag.c:1170
-msgid "You can use drag and drop to add an image"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:90
+msgid "Choose the Unicode character set to be used when writing ID3v2 tags"
 msgstr ""
 
-#: ../src/easytag.c:1217
-msgid "Add images to the tag"
-msgstr "Tambahkan citra ke tag"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:91
+msgid "The character set for writing ID3v2 tags"
+msgstr ""
 
-#: ../src/easytag.c:1235
-msgid "Remove selected images from the tag"
-msgstr "Buang citra yang dipilih dari tag"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:92
+msgid ""
+"Override the typical Unicode character set to be used when writing ID3v2 tags"
+msgstr ""
 
-#: ../src/easytag.c:1249
-msgid "Save the selected images to files"
-msgstr "Simpan citra yang dipilih ke berkas"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:93
+msgid "Encoding options when writing ID3v2 tags"
+msgstr ""
 
-#: ../src/easytag.c:1260
-msgid "Edit image properties"
-msgstr "Sunting properti citra"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:94
+msgid ""
+"Additional options to pass to iconv() when converting between encodings when "
+"writing ID3v2 tags"
+msgstr ""
 
-#: ../src/easytag.c:1274
-msgid "Tag selected files with these images"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:95
+msgid "Automatically complete the date"
 msgstr ""
 
-#: ../src/easytag.c:1332
-#, c-format
-msgid "Selected files tagged with title '%s'."
-msgstr "Berkas yang dipilih ditag dengan judul ‘%s’."
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:97
+msgid "Pad the disc number tag field"
+msgstr ""
 
-#: ../src/easytag.c:1334
-#, fuzzy
-msgid "Removed title from selected files."
-msgstr "Menghapus berkas yang dipilih dari proyek"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:99
+msgid "The length of the disc number field"
+msgstr ""
 
-#: ../src/easytag.c:1349
-#, c-format
-msgid "Selected files tagged with artist '%s'."
-msgstr "Berkas yang dipilih ditag dengan artis ‘%s’."
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:100
+msgid ""
+"The length of the disc number field, which controls if the field is padded "
+"with leading zeroes"
+msgstr ""
 
-#: ../src/easytag.c:1351
-#, fuzzy
-msgid "Removed artist from selected files."
-msgstr "Menghapus berkas yang dipilih dari proyek"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:101
+msgid "Pad the track number tag field"
+msgstr ""
 
-#: ../src/easytag.c:1365
-#, c-format
-msgid "Selected files tagged with album artist '%s'."
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:103
+msgid "The length of the track number field"
 msgstr ""
 
-#: ../src/easytag.c:1367
-msgid "Removed album artist from selected files."
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:104
+msgid ""
+"The length of the track number field, which controls if the field is padded "
+"with leading zeroes"
 msgstr ""
 
-#: ../src/easytag.c:1382
-#, c-format
-msgid "Selected files tagged with album '%s'."
-msgstr "Berkas yang dipilih ditag dengan album ‘%s’."
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:107
+msgid "Convert spaces and underscores when filling tag fields"
+msgstr ""
 
-#: ../src/easytag.c:1384
-msgid "Removed album name from selected files."
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:109
+#, no-c-format
+msgid ""
+"Whether to convert to spaces (and %20) or underscores when filling tag "
+"fields from filenames"
 msgstr ""
 
-#: ../src/easytag.c:1421
-#, c-format
-msgid "Selected files tagged with disc number '%s/%s'."
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:110
+msgid "Overwrite tag field"
 msgstr ""
 
-#: ../src/easytag.c:1426
-#, c-format
-msgid "Selected files tagged with disc number like 'xx'."
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:112
+msgid "Set the default comment"
 msgstr ""
 
-#: ../src/easytag.c:1431
-msgid "Removed disc number from selected files."
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:114
+msgid "Default comment for filling tags"
 msgstr ""
 
-#: ../src/easytag.c:1447
-#, c-format
-msgid "Selected files tagged with year '%s'."
-msgstr "Berkas yang dipilih ditag dengan tahun ‘%s’."
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:115
+msgid "The default comment to use when filling tags"
+msgstr ""
 
-#: ../src/easytag.c:1449
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:116
+msgid "Use the CRC-32 as the default comment"
+msgstr ""
+
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:130
 #, fuzzy
-msgid "Removed year from selected files."
-msgstr "Menghapus berkas yang dipilih dari proyek"
+#| msgid "Run the current scanner for each file"
+msgid "Run the current scanner when loading filenames from a file"
+msgstr "Jalankan pemindai saat ini bagi setiap berkas"
 
-#: ../src/easytag.c:1475 ../src/easytag.c:1565
-#, c-format
-msgid "Selected files tagged with track like 'xx/%s'."
-msgstr ""
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:132
+#, fuzzy
+#| msgid "Process title field"
+msgid "Process these tag fields"
+msgstr "Proses ruas judul"
 
-#: ../src/easytag.c:1478
-#, c-format
-msgid "Selected files tagged with track like 'xx'."
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:133
+msgid "The tag fields to process when using the scanner"
 msgstr ""
 
-#: ../src/easytag.c:1482 ../src/easytag.c:1568
-msgid "Removed track number from selected files."
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:134
+msgid "Convert tag fields when processing"
 msgstr ""
 
-#. msg = g_strdup_printf(_("All %d tracks numbered sequentially."), ETCore->ETFileSelectionList_Length);
-#: ../src/easytag.c:1538
-#, c-format
-msgid "Selected tracks numbered sequentially."
-msgstr "Trek yang dipilih dinomori secara berurutan."
-
-#: ../src/easytag.c:1584
-#, c-format
-msgid "Selected files tagged with genre '%s'."
-msgstr "Berkas yang dipilih ditag dengan aliran ‘%s’."
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:136
+#, no-c-format
+msgid ""
+"Whether to convert to spaces (and %20), underscores or other characters when "
+"processing tag fields"
+msgstr ""
 
-#: ../src/easytag.c:1586
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:137
 #, fuzzy
-msgid "Removed genre from selected files."
-msgstr "Menghapus berkas yang dipilih dari proyek"
+msgid "Convert characters in tags"
+msgstr "Kehilangan karakter untuk pengkodean karakter"
 
-#: ../src/easytag.c:1608
-#, c-format
-msgid "Selected files tagged with comment '%s'."
-msgstr "Berkas yang dipilih ditag dengan komentar ‘%s’."
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:138
+msgid ""
+"Whether to convert characters of the tag from one value to another when "
+"processing tag fields"
+msgstr ""
 
-#: ../src/easytag.c:1610
-#, fuzzy
-msgid "Removed comment from selected files."
-msgstr "Menghapus berkas yang dipilih dari proyek"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:139
+msgid "Convert the following characters when processing tag fields"
+msgstr ""
 
-#: ../src/easytag.c:1624
-#, c-format
-msgid "Selected files tagged with composer '%s'."
-msgstr "Berkas yang dipilih ditag dengan komponis ‘%s’."
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:140
+msgid ""
+"Replace any matched sequence of characters with this string when processing "
+"tag fields"
+msgstr ""
 
-#: ../src/easytag.c:1626
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:141
 #, fuzzy
-msgid "Removed composer from selected files."
-msgstr "Menghapus berkas yang dipilih dari proyek"
+#| msgid "Lowercase all"
+msgid "Lower-case all characters"
+msgstr "Semua huruf kecil"
 
-#: ../src/easytag.c:1641
-#, c-format
-msgid "Selected files tagged with original artist '%s'."
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:142 ../src/scan_dialog.c:2977
+msgid ""
+"Whether to lower-case all characters of the tag when processing tag fields"
 msgstr ""
 
-#: ../src/easytag.c:1643
-msgid "Removed original artist from selected files."
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:143
+msgid "Upper-case all characters"
 msgstr ""
 
-#: ../src/easytag.c:1658
-#, c-format
-msgid "Selected files tagged with copyright '%s'."
-msgstr "Berkas yang dipilih ditag dengan hak cipta ‘%s’."
-
-#: ../src/easytag.c:1660
-#, fuzzy
-msgid "Removed copyright from selected files."
-msgstr "Menghapus berkas yang dipilih dari proyek"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:144 ../src/scan_dialog.c:2975
+msgid ""
+"Whether to upper-case all characters of the tag when processing tag fields"
+msgstr ""
 
-#: ../src/easytag.c:1675
-#, c-format
-msgid "Selected files tagged with URL '%s'."
-msgstr "Berkas yang dipilih ditag dengan URL ‘%s’."
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:145
+msgid "Upper-case the first letter of the tag"
+msgstr ""
 
-#: ../src/easytag.c:1677
-#, fuzzy
-msgid "Removed URL from selected files."
-msgstr "Menghapus berkas yang dipilih dari proyek"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:146 ../src/scan_dialog.c:2979
+msgid ""
+"Whether to upper-case the first letter of the tag when processing tag fields"
+msgstr ""
 
-#: ../src/easytag.c:1692
-#, c-format
-msgid "Selected files tagged with encoder name '%s'."
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:147
+msgid "Upper-case the first letter of each word"
 msgstr ""
 
-#: ../src/easytag.c:1694
-msgid "Removed encoder name from selected files."
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:148 ../src/scan_dialog.c:2981
+msgid ""
+"Whether to upper-case the first letter of each word when processing tag "
+"fields"
 msgstr ""
 
-#: ../src/easytag.c:1726
-msgid "Selected files tagged with images."
-msgstr "Berkas yang dipilih ditag dengan citra."
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:149
+msgid "Upper-case prepositions"
+msgstr ""
 
-#: ../src/easytag.c:1728
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:151
 #, fuzzy
-msgid "Removed images from selected files."
-msgstr "Menghapus berkas yang dipilih dari proyek"
+#| msgid "Detect Roman numerals"
+msgid "Detect roman numerals"
+msgstr "Deteksi angka Romawi"
 
-#: ../src/easytag.c:2009
-msgid "Select Mode and Mask, and redo the same action"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:152 ../src/scan_dialog.c:2983
+msgid ""
+"Whether to detect Roman numerals when applying upper-case conversions while "
+"processing tag fields"
 msgstr ""
 
-#: ../src/easytag.c:2061
-msgid "All tags have been scanned"
-msgstr "Semua tag telah dipindai"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:153 ../src/scan_dialog.c:2988
+#: ../src/tag_area.c:861
+msgid "Remove spaces"
+msgstr "Buang spasi"
 
-#: ../src/easytag.c:2117
-msgid "All tags have been removed"
-msgstr "Semua tag telah dihapus"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:154 ../src/scan_dialog.c:3014
+msgid "Whether to remove all spaces when processing tag fields"
+msgstr ""
 
-#: ../src/easytag.c:2422
-#, c-format
-msgid "A file was changed by an external program"
-msgid_plural "%d files were changed by an external program."
-msgstr[0] ""
-msgstr[1] ""
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:155
+msgid "Insert spaces before capital letters"
+msgstr ""
 
-#: ../src/easytag.c:2427
-msgid "Do you want to continue saving the file?"
-msgstr "Apakah Anda ingin melanjutkan menyimpan berkas?"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:156 ../src/scan_dialog.c:3016
+msgid ""
+"Whether to insert spaces before capital letters when processing tag fields"
+msgstr ""
 
-#: ../src/easytag.c:2485 ../src/easytag.c:2505
-msgid "Saving files was stopped"
-msgstr "Penyimpanan berkas dihentikan"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:157
+#, fuzzy
+#| msgid "Remove spaces"
+msgid "Remove duplicate spaces"
+msgstr "Buang spasi"
 
-#: ../src/easytag.c:2507
-msgid "All files have been saved"
-msgstr "Semua berkas telah disimpan"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:158 ../src/scan_dialog.c:3018
+msgid ""
+"Whether to remove duplicate spaces and underscores when processing tag fields"
+msgstr ""
 
-#: ../src/easytag.c:2642
-#, c-format
-msgid "Cannot delete file (%s)"
-msgstr "Tak dapat menghapus berkas (%s)"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:159
+#, fuzzy
+#| msgid "Playlist File Error"
+msgid "Playlist filename mask"
+msgstr "Galat Berkas Daftar Putar"
 
-#: ../src/easytag.c:2663
-msgid "Files have been partially deleted"
-msgstr "Berkas-berkas telah dihapus sebagian"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:160
+msgid "The default filename mask to use for a new playlist"
+msgstr ""
 
-#: ../src/easytag.c:2665
-msgid "All files have been deleted"
-msgstr "Semua berkas telah dihapus"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:161
+msgid "Use a filename mask when generating a playlist"
+msgstr ""
 
-#: ../src/easytag.c:2781
-#, c-format
-msgid "Do you want to write the tag of file '%s'?"
-msgstr "Anda ingin menulis tag dari berkas '%s'?"
-
-#: ../src/easytag.c:2783
-msgid "Confirm Tag Writing"
-msgstr "Konfirmasikan Penulisan Tag"
-
-#: ../src/easytag.c:2788 ../src/easytag.c:2908 ../src/easytag.c:3158
-msgid "Repeat action for the remaining files"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:162
+msgid "Whether to use a filename mask when creating playlists"
 msgstr ""
 
-#. Directories and filename changed
-#: ../src/easytag.c:2872 ../src/scan_dialog.c:183
-msgid "Rename File and Directory"
-msgstr "Ubah Nama Berkas dan Direktori"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:163
+#, fuzzy
+#| msgid "Create playlist in the parent directory"
+msgid "Create playlists with only the selected files"
+msgstr "Buat daftar putar di direktori induk"
 
-#: ../src/easytag.c:2873
-msgid "File and directory rename confirmation required"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:165
+msgid "Use relative paths when creating playlists"
 msgstr ""
 
-#: ../src/easytag.c:2874
-#, fuzzy, c-format
-msgid "Do you want to rename the file and directory '%s' to '%s'?"
-msgstr "Anda ingin membuang perubahan dan memuat ulang berkas?"
-
-#: ../src/easytag.c:2880
-msgid "Directory rename confirmation required"
-msgstr "Diperlukan konfirmasi pengubahan nama direktori"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:166
+msgid "Whether to use relative paths for files when creating playlists"
+msgstr ""
 
-#: ../src/easytag.c:2881
-#, c-format
-msgid "Do you want to rename the directory '%s' to '%s'?"
-msgstr "Apakah Anda ingin mengubah nama direktori ‘%s’ menjadi ‘%s’?"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:167
+#, fuzzy
+#| msgid "Create playlist in the parent directory"
+msgid "Create the playlist in the parent directory"
+msgstr "Buat daftar putar di direktori induk"
 
-#. Only filename changed
-#: ../src/easytag.c:2887
-msgid "Rename File"
-msgstr "Ubah Nama Berkas"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:169
+msgid "Use DOS separators for playlists"
+msgstr ""
 
-#: ../src/easytag.c:2888
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:171
 #, fuzzy
-msgid "File rename confirmation required"
-msgstr "Berkas berikut diperlukan:"
+#| msgid "Generate a playlist"
+msgid "Content of generated playlists"
+msgstr "Membuat suatu daftar putar"
 
-#: ../src/easytag.c:2889
-#, fuzzy, c-format
-msgid "Do you want to rename the file '%s' to '%s'?"
-msgstr "Anda ingin memuat ulang berkas?"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:172
+msgid ""
+"Write a plain list of files, include extended information from the filename "
+"or extended information using a supplied mask"
+msgstr ""
 
-#: ../src/easytag.c:2955
-#, c-format
-msgid "Cannot rename file '%s' to '%s'"
-msgstr "Tak bisa mengubah nama berkas ‘%s’ menjadi ‘%s’"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:173
+msgid "Playlist default mask"
+msgstr ""
 
-#: ../src/easytag.c:2969
-#, c-format
-msgid "Cannot rename file '%s' to '%s': %s"
-msgstr "Tak bisa mengubah nama berkas ‘%s’ menjadi ‘%s’: %s"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:174
+#, fuzzy
+#| msgid "New default path for files selected"
+msgid "The default mask to use for files in a playlist"
+msgstr "Dipilih path baku baru bagi berkas"
 
-#: ../src/easytag.c:2973
-msgid "File(s) not renamed"
-msgstr "Berkas tak diubah nama"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:175
+msgid "Search for files case-sensitively"
+msgstr ""
 
-#: ../src/easytag.c:3085
-#, fuzzy, c-format
-msgid "Writing tag of '%s'"
-msgstr "Tag Git:"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:176
+msgid "Whether matches when searching for files are case-sensitive"
+msgstr ""
 
-#: ../src/easytag.c:3092
-msgid "Tag(s) written"
-msgstr "Tag ditulis"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:177
+#, fuzzy
+#| msgid "Search filenames and tags"
+msgid "Search in filenames"
+msgstr "Cari nama berkas dan tag"
 
-#: ../src/easytag.c:3105
-#, c-format
-msgid "Cannot write tag in file '%s'"
-msgstr "Tak dapat menulis tag dalam berkas '%s'"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:178
+msgid "Perform the search on filenames"
+msgstr ""
 
-#: ../src/easytag.c:3109
-msgid "Tag Write Error"
-msgstr "Galat Tulis Tag"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:179
+#, fuzzy
+#| msgid "Searching"
+msgid "Search in tags"
+msgstr "Mencari"
 
-#: ../src/easytag.c:3155 ../src/easytag.c:3169
-#, c-format
-msgid "Do you really want to delete the file '%s'?"
-msgstr "Apakah Anda benar-benar ingin menghapus berkas ‘%s’?"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:180
+msgid "Perform the search on tags"
+msgstr ""
 
-#: ../src/easytag.c:3161 ../src/easytag.c:3171
-msgid "Delete File"
-msgstr "Hapus Berkas"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:181
+#, fuzzy
+#| msgid "Error reading tags from file: '%s'"
+msgid "Mask for filling tags from filenames"
+msgstr "Galat saat membaca tag dari berkas: '%s'"
 
-#: ../src/easytag.c:3196
-#, c-format
-msgid "File '%s' deleted"
-msgstr "Berkas '%s' dihapus"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:182
+msgid ""
+"The default mask to use when automatically filling tags with information "
+"from filenames"
+msgstr ""
 
-#: ../src/easytag.c:3331
-#, c-format
-msgid "Cannot read directory '%s'"
-msgstr "Tak bisa membaca direktori '%s'"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:183
+#, fuzzy
+#| msgid "Confirm renaming of file"
+msgid "Mask for renaming files"
+msgstr "Konfirmasikan penggantian nama berkas"
 
-#: ../src/easytag.c:3335
-msgid "Directory Read Error"
-msgstr "Galat Baca Direktori"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:184
+msgid "The default mask to use when renaming files"
+msgstr ""
 
-#. Read the directory recursively
-#: ../src/easytag.c:3356
-#, c-format
-msgid "Search in progress…"
-msgstr "Pencarian tengah berlangsung…"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:185
+#, fuzzy
+msgid "Mask for renaming directories"
+msgstr "Tak dapat membuat tampilan transien: "
 
-#: ../src/easytag.c:3379 ../src/et_core.c:2876
-#, c-format
-msgid "File: '%s'"
-msgstr "Berkas: '%s'"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:186
+msgid "The default mask to use when renaming directories"
+msgstr ""
 
-#: ../src/easytag.c:3429
-#, c-format
-msgid "Found one file in this directory and subdirectories"
-msgid_plural "Found %d files in this directory and subdirectories"
-msgstr[0] ""
-msgstr[1] ""
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:187
+#, fuzzy
+msgid "Use a mask when renaming directories"
+msgstr "Tak dapat membuat tampilan transien: "
 
-#: ../src/easytag.c:3436
-#, c-format
-msgid "Found one file in this directory"
-msgid_plural "Found %d files in this directory"
-msgstr[0] "Menemukan %d berkas dalam direktori ini"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:189
+#, fuzzy
+#| msgid "Convert space ' ' to underscore '_'"
+msgid "Convert spaces and underscores when renaming files"
+msgstr "Konversikan spasi ‘ ‘ ke garis bawah ‘_’"
 
-#: ../src/easytag.c:3458
-msgid "No file found in this directory and subdirectories"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:190
+msgid "Whether to convert to spaces or underscores when renaming files"
 msgstr ""
 
-#: ../src/easytag.c:3460
-msgid "No file found in this directory"
-msgstr "Tak ditemukan berkas pada direktori ini"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:191
+msgid "How to modify filename extensions when renaming"
+msgstr ""
 
-#: ../src/easytag.c:3528
-#, c-format
-msgid "Error opening directory '%s' (%s)"
-msgstr "Galat saat membuka direktori '%s': (%s)"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:192
+msgid ""
+"Change the file extension to all lower-case, all upper-case or do not change "
+"it"
+msgstr ""
 
-#: ../src/easytag.c:3564
-#, c-format
-msgid "Cannot read directory (%s)"
-msgstr "Tak dapat membaca direktori (%s)"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:193
+msgid "Encoding options when renaming files"
+msgstr ""
 
-#: ../src/easytag.c:3584
-msgid "Searching for audio files…"
-msgstr "Sedang mencari berkas audio…"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:194
+msgid ""
+"If the encoding of the filename does not match the filesystem encoding, "
+"choose whether to try another encoding, approximate the filesystem encoding "
+"with transliteration or discard the offending characters"
+msgstr ""
 
-#: ../src/easytag.c:3585
-msgid "Searching"
-msgstr "Mencari"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:196
+msgid ""
+"Whether to replace illegal characters in a filename when using the rename "
+"function"
+msgstr ""
 
-#: ../src/easytag.c:4251
-msgid "Select a directory to browse"
-msgstr "Pilih direktori untuk diramban"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:197
+#, fuzzy
+msgid "Show the scanner mask editor"
+msgstr "Tampilkan atau sembunyikan pembidik silang"
 
-#. Menu items
-#: ../src/easytag.c:4397
-msgid "Tag selected files with this field"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:198
+msgid "Whether to show the scanner mask editor in the tag scanner"
 msgstr ""
 
-#: ../src/easytag.c:4409 ../src/scan_dialog.c:2128
-msgid "Convert '_' and '%20' to spaces"
-msgstr "Ubah '_' dan '%20' ke spasi"
-
-#: ../src/easytag.c:4416 ../src/scan_dialog.c:2130
-msgid "Convert ' ' to '_'"
-msgstr "Ubah ' ' menjadi '_'"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:199
+#, fuzzy
+#| msgid "Show scanner"
+msgid "Show the scanner legend"
+msgstr "Tampilkan pemindai"
 
-#: ../src/easytag.c:4427
-msgid "All uppercase"
-msgstr "Semua huruf besar"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:200
+msgid "Whether to show the scanner legend in the tag scanner"
+msgstr ""
 
-#: ../src/easytag.c:4434
-msgid "All lowercase"
-msgstr "Semua huruf kecil"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:201
+#, fuzzy
+msgid "Show the scanner window on startup"
+msgstr "Buka pengatur katalog pada saat Poedit dimulai"
 
-#: ../src/easytag.c:4441
-msgid "First letter uppercase"
-msgstr "Huruf pertama kapital"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:203
+msgid "The scan mode"
+msgstr ""
 
-#: ../src/easytag.c:4448
-msgid "First letter uppercase of each word"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:204 ../src/scan_dialog.c:2571
+msgid "Which type of scan to show in the scanner"
 msgstr ""
 
-#: ../src/easytag.c:4459 ../src/prefs.c:1023 ../src/scan_dialog.c:2254
-msgid "Remove spaces"
-msgstr "Buang spasi"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:205
+msgid "Split Ogg title fields"
+msgstr ""
 
-#: ../src/easytag.c:4466
-msgid "Insert space before uppercase letter"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:207
+msgid "Split Ogg artist fields"
 msgstr ""
 
-#: ../src/easytag.c:4473
-msgid "Remove duplicate spaces or underscores"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:209
+msgid "Split Ogg album fields"
 msgstr ""
 
-#: ../src/easytag.c:4480
-msgid "Remove all text"
-msgstr "Buang semua teks"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:211
+msgid "Split Ogg genre fields"
+msgstr ""
 
-#: ../src/easytag.c:4499
-msgid "EasyTAG: Normal exit."
-msgstr "EasyTAG: Keluar normal."
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:213
+#, fuzzy
+#| msgid "Process comment field"
+msgid "Split Ogg comment fields"
+msgstr "Proses ruas komentar"
 
-#: ../src/easytag.c:4551
-msgid "Do you want to save them before quitting?"
-msgstr ""
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:215
+#, fuzzy
+#| msgid "Process composer field"
+msgid "Split Ogg composer fields"
+msgstr "Proses ruas komposer"
 
-#: ../src/easytag.c:4578
-msgid "Do you really want to quit?"
-msgstr "Anda benar-benar ingin berhenti?"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:217
+#, fuzzy
+#| msgid "Process original artist field"
+msgid "Split Ogg original artist fields"
+msgstr "Proses ruas artis asli"
 
-#: ../src/et_core.c:551
-#, c-format
-msgid "Error reading tag from ogg file (%s)"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:219
+msgid "Page to show in the preferences dialog"
 msgstr ""
 
-#: ../src/et_core.c:580
-#, c-format
-msgid "Error reading tag from Opus file (%s)"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:220
+msgid "The page in the notebook of the preferences dialog"
 msgstr ""
 
-#: ../src/et_core.c:723
-#, c-format
-msgid "Automatic corrections applied for file '%s'."
+#: ../nautilus-extension/nautilus-easytag.c:229
+msgid "Open in EasyTAG"
 msgstr ""
 
-#: ../src/et_core.c:2759
-msgid "ID3 Tag"
-msgstr "Tag ID3"
+#: ../nautilus-extension/nautilus-easytag.c:230
+#, fuzzy
+#| msgid "Save the selected images to files"
+msgid "Open the selected directory in EasyTAG"
+msgstr "Simpan citra yang dipilih ke berkas"
 
-#: ../src/et_core.c:2765
-msgid "Ogg Vorbis Tag"
-msgstr "Tag Ogg Vorbis"
+#: ../nautilus-extension/nautilus-easytag.c:247
+msgid "Open with EasyTAG"
+msgstr ""
 
-#: ../src/et_core.c:2771
-msgid "FLAC Vorbis Tag"
-msgstr "Tag FLAC Vorbis"
+#: ../nautilus-extension/nautilus-easytag.c:248
+#, fuzzy
+msgid "Open the selected files in EasyTAG"
+msgstr "Hanya boleh memilih berkas lokal"
 
-#: ../src/et_core.c:2776
-msgid "APE Tag"
-msgstr "Tag APE"
+#. Translators: put your own name here to appear in the about dialog.
+#: ../src/about.c:90
+msgid "translator-credits"
+msgstr "Andika Triwidada <andika at gmail.com>, 2014"
 
-#: ../src/et_core.c:2781
-msgid "MP4/M4A/AAC Tag"
-msgstr "Tag MP4/M4A/AAC"
+#: ../src/about.c:100
+msgid "View and edit tags in audio files"
+msgstr "Lihat dan sunting tag dalam berkas audio"
 
-#: ../src/et_core.c:2787
-msgid "Wavpack Tag"
-msgstr "Tag Wavpack"
+#: ../src/application.c:46
+msgid "Print the version and exit"
+msgstr "Cetak versi dan keluar"
 
-#: ../src/et_core.c:2793
-msgid "Opus Tag"
-msgstr "Tag Opus"
+#: ../src/application.c:129 ../src/browser.c:3844
+msgid "Select a directory to browse"
+msgstr "Pilih direktori untuk diramban"
 
-#: ../src/et_core.c:2813
-msgid "MP3 File"
-msgstr "Berkas MP3"
+#. Starting messages
+#: ../src/application.c:177
+#, fuzzy, c-format
+msgid "Starting EasyTAG version %s (PID: %d)…"
+msgstr "memulai (versi %s), pid %u pengguna '%s'"
 
-#: ../src/et_core.c:2817
-msgid "MP2 File"
-msgstr "Berkas MP2"
+#: ../src/application.c:183
+#, fuzzy, c-format
+#| msgid "Variable EASYTAGLANG defined. Setting locale: '%s'"
+msgid "Variable EASYTAGLANG defined, setting locale ‘%s’"
+msgstr "Variabel EASYTAGLAG didefinisikan. Menata locale: ‘%s’"
 
-#: ../src/et_core.c:2823
-msgid "Ogg Vorbis File"
-msgstr "Berkas Ogg Vorbis"
+#: ../src/application.c:188
+#, fuzzy, c-format
+#| msgid "Setting locale: '%s'"
+msgid "Setting locale: ‘%s’"
+msgstr "Menata locale: '%s'"
 
-#: ../src/et_core.c:2829
-msgid "Speex File"
-msgstr "Berkas Speex"
+#: ../src/application.c:194
+#, c-format
+msgid "System locale is ‘%s’, using ‘%s’"
+msgstr ""
 
-#: ../src/et_core.c:2835
-msgid "FLAC File"
-msgstr "Berkas FLAC"
+#: ../src/application.c:199
+#, fuzzy
+msgid "Unable to create setting directories"
+msgstr "Tak dapat membuat tampilan transien: "
 
-#: ../src/et_core.c:2840
-msgid "MusePack File"
-msgstr "Berkas MusePack"
+#: ../src/application.c:340
+#, c-format
+msgid "Website: %s"
+msgstr "Situs web: %s"
 
-#: ../src/et_core.c:2844
-#, fuzzy
-msgid "Monkey's Audio File"
-msgstr "Peringkat dari berkas audio."
+#: ../src/application.c:349
+msgid "- Tag and rename audio files"
+msgstr "- Tag dan ubah nama berkas audio"
 
-#: ../src/et_core.c:2849
-msgid "MP4/AAC File"
-msgstr "Berkas MP4/AAC"
+#: ../src/application.c:433 ../src/et_core.c:630 ../src/et_core.c:644
+#, fuzzy, c-format
+#| msgid "Error while querying information for file: '%s' (%s)"
+msgid "Error while querying information for file ‘%s’: %s"
+msgstr "Galat saat mengambil informasi bagi berkas ‘%s’: %s"
 
-#: ../src/et_core.c:2855
-msgid "Wavpack File"
-msgstr "Berkas WavPack"
+#: ../src/application.c:497
+#, fuzzy, c-format
+#| msgid "Cannot open path '%s'"
+msgid "Cannot open path ‘%s’"
+msgstr "Tak dapat membuka path '%s'"
 
-#: ../src/et_core.c:2861
-msgid "Opus File"
-msgstr "Berkas Opus"
+#: ../src/application_window.c:336 ../src/application_window.c:353
+#, fuzzy, c-format
+#| msgid "Do you really want to delete the file '%s'?"
+msgid "Do you really want to delete the file ‘%s’?"
+msgstr "Apakah Anda benar-benar ingin menghapus berkas ‘%s’?"
 
-#: ../src/et_core.c:2920 ../src/et_core.c:2975
-msgid "File not found"
-msgstr "Berkas tak ditemukan"
+#: ../src/application_window.c:339 ../src/easytag.c:511 ../src/easytag.c:636
+msgid "Repeat action for the remaining files"
+msgstr ""
 
-#: ../src/et_core.c:2925
-#, c-format
-msgid "Cannot query file information (%s)"
-msgstr "Tak dapat meminta informasi berkas (%s)"
+#: ../src/application_window.c:341
+msgid "_Skip"
+msgstr ""
 
-#: ../src/et_core.c:2959
-msgid "Read-only file"
-msgstr "Berkas hanya-baca"
+#: ../src/application_window.c:343 ../src/application_window.c:357
+#| msgid "Delete File"
+msgid "_Delete"
+msgstr "_Hapus"
 
-#. And refresh the number of files in this directory
-#: ../src/et_core.c:3023
-#, c-format
-msgid "One file"
-msgid_plural "%u files"
-msgstr[0] "%u berkas"
+#: ../src/application_window.c:345 ../src/application_window.c:355
+msgid "Delete File"
+msgstr "Hapus Berkas"
 
-#: ../src/et_core.c:3227
-#, c-format
-msgid "Images (%d)"
-msgstr "Citra (%d)"
+#: ../src/application_window.c:382
+#, fuzzy, c-format
+#| msgid "File '%s' deleted"
+msgid "File ‘%s’ deleted"
+msgstr "Berkas '%s' dihapus"
 
-#. Bitrate
-#: ../src/et_core.c:3269 ../src/flac_header.c:205
-#: ../src/monkeyaudio_header.c:86 ../src/mp4_header.cc:142
-#: ../src/mpeg_header.c:206 ../src/musepack_header.c:88
-#: ../src/ogg_header.c:401 ../src/opus_header.c:227 ../src/wavpack_header.c:78
-#, c-format
-msgid "%d kb/s"
-msgstr "%d kb/s"
+#: ../src/application_window.c:559
+#, fuzzy, c-format
+#| msgid "Cannot delete file (%s)"
+msgid "Cannot delete file ‘%s’"
+msgstr "Tak dapat menghapus berkas (%s)"
 
-#. Samplerate
-#: ../src/et_core.c:3274 ../src/flac_header.c:210
-#: ../src/monkeyaudio_header.c:91 ../src/mp4_header.cc:147
-#: ../src/mpeg_header.c:211 ../src/musepack_header.c:93
-#: ../src/ogg_header.c:406 ../src/opus_header.c:232 ../src/wavpack_header.c:83
-#, c-format
-msgid "%d Hz"
-msgstr "%d Hz"
+#: ../src/application_window.c:580
+#| msgid "All files have been deleted"
+msgid "Some files were not deleted"
+msgstr "Beberapa berkas tak dihapus"
 
-#: ../src/et_core.c:3420 ../src/scan_dialog.c:688
-#, c-format
-msgid "Could not convert filename '%s' into system filename encoding"
-msgstr ""
+#: ../src/application_window.c:582
+msgid "All files have been deleted"
+msgstr "Semua berkas telah dihapus"
 
-#: ../src/et_core.c:3422
-msgid "Try setting the environment variable G_FILENAME_ENCODING."
+#: ../src/application_window.c:921
+msgid "All tags have been removed"
+msgstr "Semua tag telah dihapus"
+
+#. Quit EasyTAG.
+#: ../src/application_window.c:2599
+#| msgid "EasyTAG: Normal exit."
+msgid "Normal exit"
+msgstr "Keluar normal"
+
+#: ../src/application_window.c:2636 ../src/browser.c:843
+msgid "Some files have been modified but not saved"
+msgstr "Beberapa berkas telah diubah tapi tak disimpan"
+
+#: ../src/application_window.c:2637 ../src/browser.c:847 ../src/easytag.c:294
+#: ../src/easytag.c:515 ../src/easytag.c:639 ../src/easytag.c:647
+#, fuzzy
+#| msgid "Disc"
+msgid "_Discard"
+msgstr "Diska"
+
+#: ../src/application_window.c:2639 ../src/browser.c:849 ../src/easytag.c:295
+#: ../src/easytag.c:517 ../src/easytag.c:524 ../src/easytag.c:641
+#: ../src/easytag.c:648 ../src/playlist_dialog.c:656 ../src/tag_area.c:1831
+#| msgid "_Save Files"
+msgid "_Save"
+msgstr "_Simpan"
+
+#: ../src/application_window.c:2643 ../src/application_window.c:2681
+#: ../src/easytag.c:300
+msgid "Quit"
+msgstr "Keluar"
+
+#: ../src/application_window.c:2646
+msgid "Do you want to save them before quitting?"
 msgstr ""
 
-#: ../src/et_core.c:3423 ../src/scan_dialog.c:690
-msgid "Filename translation"
-msgstr "Terjemahan nama berkas"
+#: ../src/application_window.c:2675
+msgid "Do you really want to quit?"
+msgstr "Anda benar-benar ingin berhenti?"
 
-#: ../src/et_core.c:4129
+#: ../src/browser.c:553
+#, fuzzy
+#| msgid "Select a directory to browse"
+msgid "New default directory selected for browser"
+msgstr "Pilih direktori untuk diramban"
+
+#: ../src/browser.c:846
+#, fuzzy
+#| msgid "Do you want to save them before changing the directory?"
+msgid "Do you want to save them before changing directory?"
+msgstr "Apakah Anda ingin menyimpan mereka sebelum mengubah direktori?"
+
+#: ../src/browser.c:853
+msgid "Confirm Directory Change"
+msgstr "Konfirmasikan Perubahan Direktori"
+
+#: ../src/browser.c:2531
+msgid "<All albums>"
+msgstr "<Semua album>"
+
+#: ../src/browser.c:3794 ../src/browser.c:3876
+msgid "Tree"
+msgstr "Pohon"
+
+#: ../src/browser.c:3797
+msgid "Disc"
+msgstr "Diska"
+
+#: ../src/browser.c:3803
+msgid "# Albums"
+msgstr "# Album"
+
+#: ../src/browser.c:3804 ../src/browser.c:3805
+msgid "# Files"
+msgstr "# Berkas"
+
+#: ../src/browser.c:3833
+#, fuzzy
+#| msgid "Enter a directory to browse."
+msgid "Choose a directory to show in the browser"
+msgstr "Masukkan direktori yang akan diramban."
+
+#.
+#. * The label for displaying number of files in path (without subdirs)
+#.
+#. Translators: No files, as in "0 files".
+#: ../src/browser.c:3851 ../src/easytag.c:1037
+msgid "No files"
+msgstr "Tak ada berkas"
+
+#: ../src/browser.c:3945
+msgid "Artist & Album"
+msgstr "Artis & Album"
+
+#: ../src/browser.c:4385
 #, fuzzy, c-format
-msgid "Error writing tag type %d to file %s (%s)"
-msgstr "Galat ketika menulis ke berkas unduhan."
+#| msgid "Rename the directory '%s' to:"
+msgid "Rename the directory ‘%s’ to:"
+msgstr "Ubah nama direktori '%s' menjadi:"
 
-#. Mode
-#. Mode
-#. mpeg4ip library seems to always return -1
-#. Mode
-#: ../src/flac_header.c:215 ../src/mp4_header.cc:153 ../src/ogg_header.c:411
-#: ../src/opus_header.c:237 ../src/wavpack_header.c:88
-msgid "Channels:"
-msgstr "Kanal:"
+#: ../src/browser.c:4525
+msgid "You must type a directory name"
+msgstr "Anda mesti mengetikkan suatu nama direktori"
 
-#: ../src/flac_tag.c:131 ../src/flac_tag.c:850 ../src/flac_tag.c:860
-#, c-format
-msgid "Error while opening file: '%s' as FLAC (%s)."
-msgstr "Galat saat membuka berkas: '%s' sebagai FLAC (%s)."
+#: ../src/browser.c:4526 ../src/browser.c:4548
+msgid "Directory Name Error"
+msgstr "Galat Nama Direktori"
 
-#: ../src/flac_tag.c:352 ../src/ogg_tag.c:304
-#, c-format
+#: ../src/browser.c:4544
+#, fuzzy, c-format
+#| msgid "Could not convert '%s' into filename encoding."
+msgid "Could not convert ‘%s’ into filename encoding"
+msgstr "Tak bisa mengonversi '%s' ke dalam pengodean nama berkas."
+
+#: ../src/browser.c:4547
+#, fuzzy
+#| msgid "Please use another name"
+msgid "Please use another name."
+msgstr "Silakan pakai nama lain"
+
+#: ../src/browser.c:4618
+#, fuzzy, c-format
+#| msgid "The directory name '%s' already exists"
+msgid "The directory name ‘%s’ already exists."
+msgstr "Nama direktori '%s' sudah ada"
+
+#: ../src/browser.c:4619 ../src/easytag.c:696
+msgid "Rename File Error"
+msgstr "Galat Pengubahan Nama Berkas"
+
+#: ../src/browser.c:4657 ../src/browser.c:4686
+msgid "Rename Directory Error"
+msgstr "Galat Pengubahan Nama Direktori"
+
+#: ../src/browser.c:4725
+msgid "Directory renamed"
+msgstr "Direktori diubah nama"
+
+#: ../src/cddb_dialog.c:311
+#, fuzzy, c-format
+#| msgid ""
+#| "Album: '%s', artist: '%s', length: '%s', year: '%s', genre: '%s', ID: '%s'"
 msgid ""
-"The year value '%s' seems to be invalid in file '%s'. The information will "
-"be lost while saving tag."
+"Album: ‘%s’, artist: ‘%s’, length: ‘%s’, year: ‘%s’, genre: ‘%s’, disc ID: "
+"‘%s’"
 msgstr ""
+"Album: '%s', artis: '%s', panjang: '%s', tahun: '%s', aliran: '%s', ID: '%s'"
 
-#: ../src/flac_tag.c:1061
+#: ../src/cddb_dialog.c:629
 #, c-format
-msgid "Picture block isn't valid: '%s'"
-msgstr ""
+msgid "Resolving host '%s'…"
+msgstr "Mengurai host ‘%s’…"
 
-#: ../src/flac_tag.c:1094
-#, c-format
-msgid "Error: Failed to write comments to file '%s' (%s)."
-msgstr "Gagal menulis file kunci privat ‘%s’: %s"
+#: ../src/cddb_dialog.c:671
+#, fuzzy, c-format
+#| msgid "Cannot create a new socket (%s)"
+msgid "Cannot create a new socket ‘%s’"
+msgstr "Tak dapat membuat soket baru (%s)"
+
+#: ../src/cddb_dialog.c:685
+msgid "Cannot set options on the newly-created socket"
+msgstr "Tak bisa menata opsi pada soket yang baru saja dibuat"
 
-#: ../src/flac_tag.c:1099 ../src/ogg_tag.c:1161
+#. Open connection to the server.
+#: ../src/cddb_dialog.c:689
 #, fuzzy, c-format
-msgid "Written tag of '%s'"
-msgstr "Tag Git:"
+#| msgid "Connecting to host '%s', port '%d'…"
+msgid "Connecting to host ‘%s’, port ‘%d’…"
+msgstr "Menyambung ke host ‘%s’, port ‘%d’…"
 
-#: ../src/id3_tag.c:205
-#, c-format
-msgid "Error while reading file: '%s' (%s)"
-msgstr "Galat saat membaca berkas: '%s' (%s)"
+#: ../src/cddb_dialog.c:702
+#, fuzzy, c-format
+#| msgid "Cannot connect to host '%s' (%s)"
+msgid "Cannot connect to host ‘%s’: %s"
+msgstr "Tak dapat menyambung ke host ‘%s’ (%s)"
 
-#: ../src/id3_tag.c:217
+#: ../src/cddb_dialog.c:726
+#, fuzzy, c-format
+#| msgid "Cannot resolve host '%s' (%s)"
+msgid "Cannot resolve host ‘%s’: %s"
+msgstr "Tak dapat mengurai host ‘%s’ (%s)"
+
+#: ../src/cddb_dialog.c:739
+#, fuzzy, c-format
+#| msgid "Connected to host '%s'"
+msgid "Connected to host ‘%s’"
+msgstr "Terhubung ke host '%s'"
+
+#: ../src/cddb_dialog.c:826
+#, fuzzy, c-format
+#| msgid "Error while writing CDDB results to file '%s'"
+msgid "Error while writing CDDB results to file ‘%s’"
+msgstr "Galat saat menulis hasil CDDB ke berkas '%s'"
+
+#: ../src/cddb_dialog.c:837
 #, c-format
-msgid ""
-"As the following corrupted file '%s' will cause an error in id3lib, it will "
-"not be processed"
-msgstr ""
+msgid "Receiving data (%s)…"
+msgstr "Sedang menerima data (%s)…"
 
-#: ../src/id3_tag.c:219
-msgid "Corrupted file"
-msgstr "Berkas terkorupsi"
+#: ../src/cddb_dialog.c:850
+#, fuzzy, c-format
+#| msgid "Error when reading CDDB response (%s)"
+msgid "Error when reading CDDB response ‘%s’"
+msgstr "Galat saat membaca respon CDDB (%s)"
 
-#: ../src/id3_tag.c:592
+#: ../src/cddb_dialog.c:857
 #, fuzzy, c-format
-msgid "Removed tag of '%s'"
-msgstr "Tag berhasil dihapus"
+#| msgid "Cannot create file '%s' (%s)"
+msgid "Cannot create file ‘%s’: %s"
+msgstr "Tak dapat membuat berkas '%s' (%s)"
 
-#: ../src/id3_tag.c:596 ../src/id3_tag.c:696
+#: ../src/cddb_dialog.c:919
 #, fuzzy, c-format
-msgid "Error while removing ID3v1 tag of '%s' (%s)"
-msgstr "Suatu galat terjadi ketika menghapus grup"
+#| msgid "Can't load file: '%s' (%s)."
+msgid "Cannot load file ‘%s’: %s"
+msgstr "Tak dapat memuat berkas '%s' (%s)."
+
+#. g_print("Request Cddb_Get_Album_Tracks_List : '%s'\n", cddb_in);
+#. Send the request
+#. g_print("Request Cddb_Search_Album_List_From_String_Freedb : '%s'\n", cddb_in);
+#. Send the request
+#. g_print("Request Cddb_Search_Album_List_From_String_Gnudb : '%s'\n", cddb_in);
+#. Send the request
+#: ../src/cddb_dialog.c:990 ../src/cddb_dialog.c:1616
+#: ../src/cddb_dialog.c:1967
+msgid "Sending request…"
+msgstr "Sedang mengirim permintaan…"
 
-#: ../src/id3_tag.c:598 ../src/id3_tag.c:668
+#: ../src/cddb_dialog.c:994 ../src/cddb_dialog.c:1620
+#: ../src/cddb_dialog.c:1971 ../src/cddb_dialog.c:3819
 #, fuzzy, c-format
-msgid "Error while removing ID3v2 tag of '%s' (%s)"
-msgstr "Suatu galat terjadi ketika menghapus grup"
+#| msgid "Cannot send the request (%s)"
+msgid "Cannot send the request ‘%s’"
+msgstr "Tak dapat mengirim permintaan (%s)"
 
-#: ../src/id3_tag.c:617
+#. Read the answer
+#.
+#. * Read the answer
+#.
+#: ../src/cddb_dialog.c:1006 ../src/cddb_dialog.c:1649
+#: ../src/cddb_dialog.c:3835
+msgid "Receiving data…"
+msgstr "Sedang menerima data…"
+
+#: ../src/cddb_dialog.c:1013 ../src/cddb_dialog.c:1656
+#: ../src/cddb_dialog.c:2004 ../src/cddb_dialog.c:3842
+msgid "The server returned a bad response"
+msgstr "Server mengembalikan respon yang buruk"
+
+#: ../src/cddb_dialog.c:1030 ../src/cddb_dialog.c:1046
+#: ../src/cddb_dialog.c:1670 ../src/cddb_dialog.c:2021
+#: ../src/cddb_dialog.c:3858
 #, fuzzy, c-format
-msgid "Error while updating ID3v2 tag of '%s' (%s)"
-msgstr "Terjadi galat sewaktu memperbaharui berkas."
+#| msgid "The server returned a bad response: %s"
+msgid "The server returned a bad response ‘%s’"
+msgstr "Server mengembalikan respon yang buruk: %s"
 
-#: ../src/id3_tag.c:645
-msgid ""
-"You have tried to save this tag to Unicode but it was detected that your "
-"version of id3lib is buggy"
-msgstr ""
+#. Load the track list of the album
+#: ../src/cddb_dialog.c:1237
+msgid "Loading album track list…"
+msgstr "Sedang memuat daftar trek album..."
 
-#: ../src/id3_tag.c:647
+#: ../src/cddb_dialog.c:1820
 #, c-format
-msgid ""
-"If you reload this file, some characters in the tag may not be displayed "
-"correctly. Please, apply the patch src/id3lib/"
-"patch_id3lib_3.8.3_UTF16_writing_bug.diff to id3lib, which is available in "
-"the EasyTAG package sources.\n"
-"Note that this message will appear only once.\n"
-"\n"
-"File: %s"
-msgstr ""
+msgid "Sorry, the web-based search is currently not available"
+msgstr "Maaf, pencarian berbasis web saat ini tak tersedia"
 
-#: ../src/id3_tag.c:654
-msgid "Buggy id3lib"
-msgstr ""
+#: ../src/cddb_dialog.c:1822 ../src/cddb_dialog.c:2195
+#, c-format
+msgid "Found one matching album"
+msgid_plural "Found %d matching albums"
+msgstr[0] "Menemukan %d album yang cocok"
 
-#: ../src/id3_tag.c:688
+#: ../src/cddb_dialog.c:1992
 #, fuzzy, c-format
-msgid "Error while updating ID3v1 tag of '%s' (%s)"
-msgstr "Terjadi galat sewaktu memperbaharui berkas."
+msgid "Receiving data of page %d (album %d/%d)…"
+msgstr "album yang berisi data ini"
 
-#: ../src/id3_tag.c:702 ../src/id3v24_tag.c:1108
+#: ../src/cddb_dialog.c:1994
+#, fuzzy, c-format
+msgid "Receiving data of page %d…"
+msgstr "Jaringan sedang menerima data."
+
+#: ../src/cddb_dialog.c:2161
 #, c-format
-msgid "Updated tag of '%s'"
+msgid "More results to load…"
+msgstr "Lebih banyak hasil untuk dimuat..."
+
+#: ../src/cddb_dialog.c:2346
+msgid "The number of CDDB results does not match the number of selected files"
+msgstr "Banyaknya hasil CDDB tak cocok dengan cacah berkas yang dipilih"
+
+#. Button to apply.
+#: ../src/cddb_dialog.c:2348 ../src/cddb_dialog.c:3312
+#: ../src/load_files_dialog.c:896
+msgid "_Apply"
 msgstr ""
 
-#: ../src/id3_tag.c:721
-msgid "No error reported"
-msgstr "Tak ada galat yang dilaporkan"
+#: ../src/cddb_dialog.c:2352
+#, fuzzy
+msgid "Write Tag from CDDB"
+msgstr "Hapus tag dari entri"
 
-#: ../src/id3_tag.c:723
-msgid "No available memory"
-msgstr "Tak ada memori tersedia"
+#: ../src/cddb_dialog.c:2761
+msgid "Artist / Album"
+msgstr "Artis / Album"
 
-#: ../src/id3_tag.c:725
-msgid "No data to parse"
-msgstr "Tak ada data untuk diurai"
+#: ../src/cddb_dialog.c:2761
+msgid "Category"
+msgstr "Kategori"
 
-#: ../src/id3_tag.c:727
-#, fuzzy
-msgid "Improperly formatted data"
-msgstr "Token kesalahan yang diformat tidak benar"
+#. Note: don't set "" instead of NULL else this will cause problem with translation language
+#. Translators: This option is for the previous 'search in' option.
+#. * For instance, translate this as "Search in:" "Track Name".
+#: ../src/cddb_dialog.c:2762 ../src/cddb_dialog.c:2938
+msgid "Track Name"
+msgstr "Nama Trek"
 
-#: ../src/id3_tag.c:729
-#, fuzzy
-msgid "No buffer to write to"
-msgstr "Tulis singgahan query ke berkas"
+#: ../src/cddb_dialog.c:2762
+msgid "Duration"
+msgstr "Durasi"
 
-#: ../src/id3_tag.c:731
-msgid "Buffer is too small"
-msgstr "Penyangga terlalu kecil"
+#.
+#. * 1 - Page for automatic search (generate the CDDBId from files)
+#.
+#: ../src/cddb_dialog.c:2789
+msgid "Automatic Search"
+msgstr "Pencarian Otomatis"
 
-#: ../src/id3_tag.c:733
-#, fuzzy
-msgid "Invalid frame ID"
-msgstr "id aplikasi tak valid: '%s'\n"
+#: ../src/cddb_dialog.c:2798
+msgid "Request CDDB"
+msgstr "Permintaan CDDB"
+
+#. Button to generate CddbId and request string from the selected files.
+#. Button to run the search.
+#: ../src/cddb_dialog.c:2803 ../src/cddb_dialog.c:2880
+#| msgid "Search:"
+msgid "_Search"
+msgstr "_Cari"
 
-#: ../src/id3_tag.c:735
+#: ../src/cddb_dialog.c:2811
 #, fuzzy
-msgid "Requested field not found"
-msgstr "Item '%s' yang dipinta tidak ada"
+#| msgid ""
+#| "Request automatically the CDDB using the selected files (the order is "
+#| "important) to generate the CddbID"
+msgid ""
+"Generate the CDDB disc ID using the selected files (the order is important)"
+msgstr ""
+"Minta CDDB secara otomatis memakai berkas yang dipilih (urutan penting) "
+"untuk membuat CddbID"
+
+#: ../src/cddb_dialog.c:2824 ../src/cddb_dialog.c:2901
+msgid "Stop the search"
+msgstr "Hentikan pencarian"
+
+#.
+#. * 2 - Page for manual search
+#.
+#: ../src/cddb_dialog.c:2840
+msgid "Manual Search"
+msgstr "Pencarian Manual"
+
+#: ../src/cddb_dialog.c:2851
+msgid "Words:"
+msgstr "Kata:"
 
-#: ../src/id3_tag.c:737
+#: ../src/cddb_dialog.c:2866
 #, fuzzy
-msgid "Unknown field type"
-msgstr "%d. tipe ruas '%c' tak dikenal."
+#| msgid "Enter the words to search (separated by a space or '+')"
+msgid "Enter the words to search (separated by a space or ‘+’)"
+msgstr "Masukkan kata-kata yang akan dicari (dipisah dengan spasi atau '+')"
 
-#: ../src/id3_tag.c:739
-msgid "Tag is already attached to a file"
-msgstr ""
+#.
+#. * Search options
+#.
+#: ../src/cddb_dialog.c:2913
+msgid "Search In:"
+msgstr "Cari Di:"
 
-#: ../src/id3_tag.c:741
+#. Translators: This option is for the previous 'search in' option.
+#. * For instance, translate this as "Search in:" "Blues".
+#: ../src/cddb_dialog.c:2983
+msgid "Blues"
+msgstr "Blues"
+
+#. Translators: This option is for the previous 'search in' option.
+#. * For instance, translate this as "Search in:" "Classical".
+#: ../src/cddb_dialog.c:2986
+msgid "Classical"
+msgstr "Klasik"
+
+#. Translators: This option is for the previous 'search in' option.
+#. * For instance, translate this as "Search in:" "Country".
+#: ../src/cddb_dialog.c:2989
+msgid "Country"
+msgstr "Country"
+
+#. Translators: This option is for the previous 'search in' option.
+#. * For instance, translate this as "Search in:" "Folk".
+#: ../src/cddb_dialog.c:2992
+msgid "Folk"
+msgstr "Folk"
+
+#. Translators: This option is for the previous 'search in' option.
+#. * For instance, translate this as "Search in:" "Jazz".
+#: ../src/cddb_dialog.c:2995
+msgid "Jazz"
+msgstr "Jazz"
+
+#. Translators: This option is for the previous 'search in' option.
+#. * For instance, translate this as "Search in:" "Misc".
+#: ../src/cddb_dialog.c:2998
+msgid "Misc."
+msgstr "Rupa-rupa"
+
+#: ../src/cddb_dialog.c:2999
+msgid "others that do not fit in the above categories"
+msgstr "lainnya yang tak masuk ke kategori di atas"
+
+#. Translators: This option is for the previous 'search in' option.
+#. * For instance, translate this as "Search in:" "New age".
+#: ../src/cddb_dialog.c:3002
+msgid "New Age"
+msgstr "New Age"
+
+#. Translators: This option is for the previous 'search in' option.
+#. * For instance, translate this as "Search in:" "Reggae".
+#: ../src/cddb_dialog.c:3005
+msgid "Reggae"
+msgstr "Reggae"
+
+#. Translators: This option is for the previous 'search in' option.
+#. * For instance, translate this as "Search in:" "Rock".
+#: ../src/cddb_dialog.c:3008
+msgid "Rock"
+msgstr "Rock"
+
+#: ../src/cddb_dialog.c:3009
 #, fuzzy
-msgid "Invalid tag version"
-msgstr "Versi Tag GPS"
+#| msgid "included: funk, soul, rap, pop, industrial, metal, etc."
+msgid "includes: funk, soul, rap, pop, industrial, metal and so on"
+msgstr "disertakan: funk, soul, rap, pop, industrial, metal, dsb."
+
+#. Translators: This option is for the previous 'search in' option.
+#. * For instance, translate this as "Search in:" "Soundtrack".
+#: ../src/cddb_dialog.c:3012
+msgid "Soundtrack"
+msgstr "Soundtrack"
 
-#: ../src/id3_tag.c:743
+#: ../src/cddb_dialog.c:3012
+msgid "movies, shows"
+msgstr "film, pertunjukan"
+
+#. Button to display/hide the categories.
+#: ../src/cddb_dialog.c:3048
+msgid "Categories"
+msgstr "Kategori"
+
+#.
+#. * Results command
+#.
+#: ../src/cddb_dialog.c:3061
+msgid "Results:"
+msgstr "Hasil:"
+
+#: ../src/cddb_dialog.c:3073
 #, fuzzy
-msgid "No file to parse"
-msgstr "Gagal mengurai berkas: %s"
+#| msgid "Show only red lines (or show all lines) in the 'Artist / Album' list"
+msgid "Show only red lines (or show all lines) in the ‘Artist / Album’ list"
+msgstr ""
+"Hanya tampilkan baris merah (atau tampilkan semua baris) dalam daftar "
+"'Artis / Album'"
 
-#: ../src/id3_tag.c:745
-msgid "Attempting to write to a read-only file"
-msgstr "Mencoba menulis ke suatu berkas yang hanya-baca"
+#: ../src/cddb_dialog.c:3083
+msgid "Unselect all lines"
+msgstr "Tak pilih baris manapun"
 
-#: ../src/id3_tag.c:747
-msgid "Error in compression/uncompression"
+#: ../src/cddb_dialog.c:3092
+msgid "Invert lines selection"
+msgstr "Balikkan pilihan baris"
+
+#: ../src/cddb_dialog.c:3103
+msgid "Select all lines"
+msgstr "Pilih semua baris"
+
+#: ../src/cddb_dialog.c:3229
+#, fuzzy
+#| msgid ""
+#| "Select lines to 'apply' to your files list. All lines will be processed "
+#| "if no line is selected.\n"
+#| "You can also reorder lines in this list before using 'apply' button."
+msgid ""
+"Select lines from which tags will be applied to your files list. All lines "
+"will be processed if no line is selected.\n"
+"You can also reorder lines in this list before using the ‘apply’ button"
 msgstr ""
+"Pilih baris yang akan 'diterapkan' ke daftar berkas Anda. Semua baris akan "
+"diproses bila tak ada baris yang dipilih.\n"
+"Anda juga dapat mengatur ulang baris dalam daftar ini sebelum memakai tombol "
+"'terapkan'."
 
-#: ../src/id3_tag.c:749
+#.
+#. * Apply results to fields...
+#.
+#: ../src/cddb_dialog.c:3236
+msgid "Set Into:"
+msgstr "Menjadi:"
+
+#: ../src/cddb_dialog.c:3259
+msgid "Track #"
+msgstr "Trek #"
+
+#: ../src/cddb_dialog.c:3260
+msgid "# Tracks"
+msgstr "# Trek"
+
+#. Check box to use DLM (also used in the preferences window)
+#: ../src/cddb_dialog.c:3304
+msgid "Match lines with the Levenshtein algorithm"
+msgstr "Cocokkan baris dengan algoritma Levenshtein"
+
+#: ../src/cddb_dialog.c:3318
 #, fuzzy
-msgid "Unknown error message"
-msgstr "Galat saat menerima pesan: %s"
+#| msgid "Load the selected lines or all lines (if no line selected)."
+msgid "Load the selected lines or all lines (if no lines are selected)"
+msgstr ""
+"Muat baris-baris yang dipilih atau semua baris (bila tak ada baris yang "
+"dipilih)"
 
-#: ../src/id3_tag.c:1357
-#, c-format
-msgid "Error while creating temporary file: '%s'"
-msgstr "Galat ketika membuat berkas sementara: ‘%s’"
+#: ../src/cddb_dialog.c:3328
+msgid "Ready to search"
+msgstr "Siap mencari"
 
-#: ../src/id3_tag.c:1364
-msgid "Error while creating temporary file"
-msgstr "Galat ketika membuat berkas sementara"
+#: ../src/cddb_dialog.c:3433 ../src/load_files_dialog.c:261
+#: ../src/setting.c:250
+#, fuzzy, c-format
+#| msgid "Cannot open file '%s' (%s)"
+msgid "Cannot open file ‘%s’: %s"
+msgstr "Tak dapat membuka berkas '%s' (%s)"
 
-#: ../src/id3_tag.c:1384
+#: ../src/cddb_dialog.c:3655
 #, c-format
-msgid "Error while writing to file: '%s' (%s)"
-msgstr "Galat ketika menulis ke berkas: '%s' (%s)"
+msgid "No file selected"
+msgstr "Tak ada berkas yang dipilih"
 
-#. Translators: The first string is a filename, the
-#. * second string is the number of bytes that were
-#. * missing (not read for some reason) while reading from
-#. * the file.
-#.
-#: ../src/id3v24_tag.c:1563
+#. The CD redbook standard defines the maximum number of tracks as 99, any
+#. queries with more than 99 tracks will never return a result.
+#: ../src/cddb_dialog.c:3663
 #, c-format
-msgid "Cannot write tag of file ‘%s’ (a byte was missing)"
-msgid_plural "Cannot write tag of file ‘%s’ (%s bytes were missing)"
-msgstr[0] ""
-msgstr[1] ""
+msgid "More than 99 files selected. Cannot send request"
+msgstr "Lebih dari 99 berkas dipilih. Tak bisa mengirim permintaan"
 
-#: ../src/id3v24_tag.c:1584
+#: ../src/cddb_dialog.c:3669
 #, c-format
-msgid "Cannot save tag of file '%s'"
-msgstr "Tak dapat menyimpan tag berkas ‘%s’"
+msgid "One file selected"
+msgid_plural "%d files selected"
+msgstr[0] "%d berkas dipilih"
 
-#: ../src/id3v24_tag.c:1595
+#. g_print("Request Cddb_Search_Album_From_Selected_Files : '%s'\n", cddb_in);
+#: ../src/cddb_dialog.c:3809
 #, fuzzy, c-format
-msgid "Size error while saving tag of '%s'"
-msgstr "Galat saat menyimpan informasi lagu"
+#| msgid "Sending request (CddbId: %s, #tracks: %d, Disc length: %d)…"
+msgid "Sending request (disc ID: %s, #tracks: %d, Disc length: %d)…"
+msgstr "Mengirim permintaan (CddbId: %s, #trek: %d, Panjang cakram: %d)…"
 
-#: ../src/log.c:100
-msgid "Log"
-msgstr "Log"
+#: ../src/cddb_dialog.c:3972
+#, fuzzy, c-format
+#| msgid "DiscID '%s' gave one matching album"
+#| msgid_plural "DiscID '%s' gave %d matching albums"
+msgid "DiscID ‘%s’ gave one matching album"
+msgid_plural "DiscID ‘%s’ gave %d matching albums"
+msgstr[0] "DiscID ‘%s’ memberikan %d album yang cocok"
 
-#: ../src/misc.c:720
-msgid "You must type a program name"
-msgstr "Anda harus mengetikkan suatu nama program"
+#: ../src/charset.c:47
+msgid "Arabic (IBM-864)"
+msgstr "Arab (IBM-864)"
 
-#: ../src/misc.c:721
-#, fuzzy
-msgid "Program Name Error"
-msgstr "Nama program salah: %s"
+#: ../src/charset.c:48
+msgid "Arabic (ISO-8859-6)"
+msgstr "Arab (ISO-8859-6)"
 
-#: ../src/misc.c:800
-#, c-format
-msgid "Executed command: %s"
-msgstr "Perintah yang dieksekusi: %s"
+#: ../src/charset.c:49
+msgid "Arabic (Windows-1256)"
+msgstr "Arab (Windows-1256)"
 
-#: ../src/misc.c:807
-#, c-format
-msgid "Failed to launch program: %s"
-msgstr "Gagal meluncurkan program: %s"
+#: ../src/charset.c:50
+msgid "Baltic (ISO-8859-13)"
+msgstr "Baltik (ISO-8859-13)"
 
-#: ../src/misc.c:824
-msgid "Select File"
-msgstr "Pilih Berkas"
+#: ../src/charset.c:51
+msgid "Baltic (ISO-8859-4)"
+msgstr "Baltik (ISO-8859-4)"
+
+#: ../src/charset.c:52
+msgid "Baltic (Windows-1257)"
+msgstr "Baltik (Windows-1257)"
+
+#: ../src/charset.c:53
+msgid "Celtic (ISO-8859-14)"
+msgstr "Celtic (ISO-8859-14)"
+
+#: ../src/charset.c:54
+msgid "Central European (IBM-852)"
+msgstr "Eropa Tengah (IBM-852)"
+
+#: ../src/charset.c:55
+msgid "Central European (ISO-8859-2)"
+msgstr "Eropa Tengah (ISO-8859-2)"
+
+#: ../src/charset.c:56
+msgid "Central European (Windows-1250)"
+msgstr "Eropa Tengah (Windows-1250)"
+
+#: ../src/charset.c:57
+msgid "Chinese Simplified (GB18030)"
+msgstr "Cina Disederhanakan (GB18030)"
+
+#: ../src/charset.c:58
+msgid "Chinese Simplified (GB2312)"
+msgstr "Cina Disederhanakan (GB2312)"
+
+#: ../src/charset.c:59
+msgid "Chinese Traditional (Big5)"
+msgstr "Cina Tradisional (Big5)"
+
+#: ../src/charset.c:60
+msgid "Chinese Traditional (Big5-HKSCS)"
+msgstr "Cina Tradisional (Big5-HKSCS)"
+
+#: ../src/charset.c:61
+msgid "Cyrillic (IBM-855)"
+msgstr "Cyrillic (IBM-855)"
+
+#: ../src/charset.c:62
+msgid "Cyrillic (ISO-8859-5)"
+msgstr "Cyrillic (ISO-8859-6)"
+
+#: ../src/charset.c:63
+msgid "Cyrillic (ISO-IR-111)"
+msgstr "Cyrillic (ISO-IR-111)"
+
+#: ../src/charset.c:64
+msgid "Cyrillic (KOI8-R)"
+msgstr "Cyrillic (KOI8-R)"
+
+#: ../src/charset.c:65
+msgid "Cyrillic (Windows-1251)"
+msgstr "Cyrillic (Windows-1251)"
 
-#: ../src/misc.c:830
-msgid "Select Directory"
-msgstr "Pilih Direktori"
+#: ../src/charset.c:66
+msgid "Cyrillic/Russian (CP-866)"
+msgstr "Cyrillic/Rusia (CP-866)"
 
-#: ../src/misc.c:1142
-#, fuzzy
-msgid "Generate Playlist"
-msgstr "Gagal menghasilkan daftar putar"
+#: ../src/charset.c:67
+msgid "Cyrillic/Ukrainian (KOI8-U)"
+msgstr "Cyrillic/Ukrania (KOI8-U)"
 
-#: ../src/misc.c:1166
-#, fuzzy
-msgid "M3U Playlist Name"
-msgstr "Simpan proyek sebagai playlist M3U"
+#: ../src/charset.c:68
+msgid "English (US-ASCII)"
+msgstr "Inggris (US-ASCII)"
 
-#: ../src/misc.c:1181
-#, fuzzy
-msgid "Use directory name"
-msgstr ""
-"%s\n"
-"adalah suatu nama direktori"
+#: ../src/charset.c:69
+msgid "Greek (ISO-8859-7)"
+msgstr "Yunani (ISO-8859-7)"
 
-#. Playlist options
-#: ../src/misc.c:1198
-msgid "Playlist Options"
-msgstr ""
+#: ../src/charset.c:70
+msgid "Greek (Windows-1253)"
+msgstr "Yunani (Windows-1253)"
 
-#: ../src/misc.c:1204
-#, fuzzy
-msgid "Include only the selected files"
-msgstr "Hanya boleh memilih berkas lokal"
+#: ../src/charset.c:71
+msgid "Hebrew (IBM-862)"
+msgstr "Ibrani (IBM-862)"
 
-#: ../src/misc.c:1207
-msgid ""
-"If activated, only the selected files will be written in the playlist file. "
-"Else, all the files will be written."
-msgstr ""
+#: ../src/charset.c:72
+msgid "Hebrew (Windows-1255)"
+msgstr "Ibrani (Windows-1255)"
 
-#: ../src/misc.c:1210
-msgid "Use full path for files in playlist"
-msgstr ""
+#: ../src/charset.c:73
+msgid "Japanese (EUC-JP)"
+msgstr "Jepang (EUC-JP)"
 
-#: ../src/misc.c:1213
-msgid "Use relative path for files in playlist"
-msgstr ""
+#: ../src/charset.c:74
+msgid "Japanese (ISO-2022-JP)"
+msgstr "Jepang (ISO-2022-JP)"
 
-#. Create playlist in parent directory
-#: ../src/misc.c:1219
-msgid "Create playlist in the parent directory"
-msgstr "Buat daftar putar di direktori induk"
+#: ../src/charset.c:75
+msgid "Japanese (Shift_JIS)"
+msgstr "Jepang (Shift-JIS)"
 
-#: ../src/misc.c:1222
-msgid "If activated, the playlist will be created in the parent directory."
-msgstr ""
+#: ../src/charset.c:76
+msgid "Korean (EUC-KR)"
+msgstr "Korea (EUC-KR)"
 
-#. DOS Separator
-#: ../src/misc.c:1226
-#, fuzzy
-msgid "Use DOS directory separator"
-msgstr "Direktori untuk berkas temporer"
+#: ../src/charset.c:77
+msgid "Nordic (ISO-8859-10)"
+msgstr "Norwegia (ISO-8859-10)"
 
-#: ../src/misc.c:1232
-msgid ""
-"This option replaces the UNIX directory separator '/' into DOS separator "
-"'\\'."
-msgstr ""
+#: ../src/charset.c:78
+msgid "South European (ISO-8859-3)"
+msgstr "Eropa Selatan (ISO-8859-3)"
 
-#: ../src/misc.c:1241
-msgid "Playlist Content"
-msgstr "Isi Daftar Putar"
+#: ../src/charset.c:79
+msgid "Thai (TIS-620)"
+msgstr "Thailand (TIS-620)"
 
-#: ../src/misc.c:1247
-#, fuzzy
-msgid "Write only list of files"
-msgstr "* list       daftar berkas dalam arsip\n"
+#: ../src/charset.c:80
+msgid "Turkish (IBM-857)"
+msgstr "Turki (IBM-857)"
 
-#: ../src/misc.c:1251
-#, fuzzy
-msgid "Write info using filename"
-msgstr "Sedang mengganti info paket yang tersedia, dengan %s.\n"
+#: ../src/charset.c:81
+msgid "Turkish (ISO-8859-9)"
+msgstr "Turki (ISO-8859-9)"
 
-#: ../src/misc.c:1254
-#, fuzzy
-msgid "Write info using:"
-msgstr "Sedang mengganti info paket yang tersedia, dengan %s.\n"
+#: ../src/charset.c:82
+msgid "Turkish (Windows-1254)"
+msgstr "Turki (WIndows-1254)"
 
-#: ../src/misc.c:1468
-#, c-format
-msgid "Cannot write playlist file '%s'"
-msgstr "Tak bisa menulis berkas daftar putar ‘%s’"
+#. {N_("Unicode (UTF-7)"),                   "UTF-7"         },
+#: ../src/charset.c:84
+msgid "Unicode (UTF-8)"
+msgstr "Unicode (UTF-8)"
 
-#: ../src/misc.c:1472
-msgid "Playlist File Error"
-msgstr "Galat Berkas Daftar Putar"
+#. {N_("Unicode (UTF-16BE)"),                "UTF-16BE"      },
+#. {N_("Unicode (UTF-16LE)"),                "UTF-16LE"      },
+#. {N_("Unicode (UTF-32BE)"),                "UTF-32BE"      },
+#. {N_("Unicode (UTF-32LE)"),                "UTF-32LE"      },
+#: ../src/charset.c:91
+msgid "Vietnamese (VISCII)"
+msgstr "Vietnam (VISCII)"
 
-#: ../src/misc.c:1480
-#, fuzzy, c-format
-msgid "Written playlist file '%s'"
-msgstr "Untuk menyimpan daftar putar ke berkas"
+#: ../src/charset.c:92
+msgid "Vietnamese (Windows-1258)"
+msgstr "Vietnam (Windows-1258)"
 
-#: ../src/misc.c:1544 ../src/scan_dialog.c:2747 ../src/scan_dialog.c:2809
-#, fuzzy
-msgid "Invalid scanner mask"
-msgstr "Mask pengubah bagi akselerator"
+#: ../src/charset.c:93
+msgid "Visual Hebrew (ISO-8859-8)"
+msgstr "Ibrani Visual (ISO-8859-8)"
 
-#: ../src/misc.c:1908
-msgid "CD"
-msgstr "CD"
+#: ../src/charset.c:94
+msgid "Western (IBM-850)"
+msgstr "Barat (IBM-850)"
 
-#: ../src/misc.c:1930
-msgid "Find Files"
-msgstr "Cari Berkas"
+#: ../src/charset.c:95
+msgid "Western (ISO-8859-1)"
+msgstr "Barat (ISO-8859-1)"
 
-#: ../src/misc.c:1962
-msgid ""
-"Type the word to search into files. Or type nothing to display all files."
-msgstr ""
+#: ../src/charset.c:96
+msgid "Western (ISO-8859-15)"
+msgstr "Barat (ISO-8859-15)"
 
-#. Where...
-#: ../src/misc.c:1968
-#, fuzzy
-msgid "In:"
-msgstr "Masuk:"
+#: ../src/charset.c:97
+msgid "Western (Windows-1252)"
+msgstr "Barat (Windows-1252)"
 
-#. Translators: This option is for the previous 'in' option. For instance,
-#. * translate this as "Search" "In:" "the Filename".
-#: ../src/misc.c:1973
-#, fuzzy
-msgid "the Filename"
-msgstr "Nama file"
+#: ../src/charset.c:515
+#, fuzzy, c-format
+#| msgid "The filename '%s' couldn't be converted into UTF-8 (%s)."
+msgid "The filename ‘%s’ could not be converted into UTF-8: %s"
+msgstr "Nama berkas ‘%s’ tak bisa dikonversi ke dalam UTF-8 (%s)."
 
-#. Translators: This option is for the previous 'in' option. For instance,
-#. * translate this as "Search" "In:" "the Tag".
-#. * Note: label changed to "the Tag" (to be the only one) to fix a Hungarian
-#. * grammatical problem (which uses one word to say "in the tag" like here)
-#.
-#: ../src/misc.c:1979
-#, fuzzy
-msgid "the Tag"
-msgstr "Tag"
+#: ../src/charset.c:517 ../src/charset.c:630 ../src/charset.c:695
+msgid "Invalid UTF-8"
+msgstr "UTF-8 tak valid"
 
-#. Property of the search
-#: ../src/misc.c:1990 ../src/prefs.c:335
-msgid "Case sensitive"
-msgstr "Peka huruf besar kecil"
+#: ../src/charset.c:628
+#, fuzzy, c-format
+#| msgid ""
+#| "The UTF-8 string '%s' couldn't be converted into filename encoding (%s)."
+msgid "The UTF-8 string ‘%s’ could not be converted into filename encoding: %s"
+msgstr ""
+"String UTF-8 ‘%s’ tak dapat dikonversi ke dalam enkoding nama berkas (%s)."
 
-#: ../src/misc.c:2217
-#, fuzzy
-msgid "Ready to search…"
-msgstr "Ketik untuk mencari…"
+#: ../src/charset.c:693
+#, fuzzy, c-format
+#| msgid "The string '%s' couldn't be converted into UTF-8 (%s)."
+msgid "The string ‘%s’ could not be converted into UTF-8: %s"
+msgstr "String ‘%s’ tak dapat dikonversi ke dalam UTF-8 (%s)."
 
-#: ../src/misc.c:2437
+#: ../src/easytag.c:290
 #, c-format
-msgid "Found one file"
-msgid_plural "Found %d files"
-msgstr[0] "Menemukan %d berkas"
+msgid "A file was changed by an external program"
+msgid_plural "%d files were changed by an external program"
+msgstr[0] ""
+msgstr[1] ""
 
-#: ../src/misc.c:2722
-#, fuzzy
-msgid "Load Filenames From a Text File"
-msgstr "Muat berkas core dari disk"
+#: ../src/easytag.c:299
+msgid "Do you want to continue saving the file?"
+msgstr "Apakah Anda ingin melanjutkan menyimpan berkas?"
 
-#: ../src/misc.c:2751
-msgid "File:"
-msgstr "Berkas:"
+#: ../src/easytag.c:360 ../src/easytag.c:381
+msgid "Saving files was stopped"
+msgstr "Penyimpanan berkas dihentikan"
 
-#. Button 'load'
-#. the signal attached to this button, to load the file, is placed after the LoadFileContentList definition
-#: ../src/misc.c:2770
-msgid " Load "
-msgstr " Muat "
+#: ../src/easytag.c:383
+msgid "All files have been saved"
+msgstr "Semua berkas telah disimpan"
 
-#: ../src/misc.c:2788
-msgid "Content of Text File"
-msgstr "Isi Berkas Teks"
+#: ../src/easytag.c:504
+#, fuzzy, c-format
+#| msgid "Do you want to write the tag of file '%s'?"
+msgid "Do you want to write the tag of file ‘%s’?"
+msgstr "Anda ingin menulis tag dari berkas '%s'?"
 
-#. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2809 ../src/misc.c:2904
-msgid "Insert a blank line before the selected line"
-msgstr ""
+#: ../src/easytag.c:506
+msgid "Confirm Tag Writing"
+msgstr "Konfirmasikan Penulisan Tag"
 
-#. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2818 ../src/misc.c:2913
-msgid "Delete the selected line"
-msgstr "Hapus baris yang dipilih"
+#. Directories and filename changed
+#: ../src/easytag.c:599 ../src/scan_dialog.c:164
+msgid "Rename File and Directory"
+msgstr "Ubah Nama Berkas dan Direktori"
 
-#. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2827 ../src/misc.c:2922 ../src/misc.c:3403
-msgid "Delete all blank lines"
-msgstr "Hapus semua baris kosong"
+#: ../src/easytag.c:600
+msgid "File and directory rename confirmation required"
+msgstr ""
 
-#. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2839 ../src/misc.c:2934
-#, fuzzy
-msgid "Move up the selected line"
-msgstr "Memindah baris yang dipilih sebaris ke atas"
+#: ../src/easytag.c:601
+#, fuzzy, c-format
+msgid "Do you want to rename the file and directory ‘%s’ to ‘%s’?"
+msgstr "Anda ingin membuang perubahan dan memuat ulang berkas?"
 
-#. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2848 ../src/misc.c:2943
-#, fuzzy
-msgid "Move down the selected line"
-msgstr "Memindah baris yang dipilih sebaris ke bawah"
+#: ../src/easytag.c:607
+msgid "Directory rename confirmation required"
+msgstr "Diperlukan konfirmasi pengubahan nama direktori"
 
-#. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2860 ../src/misc.c:2955 ../src/misc.c:3427
-msgid "Reload"
-msgstr "Muat Ulang"
+#: ../src/easytag.c:608
+#, fuzzy, c-format
+#| msgid "Do you want to rename the directory '%s' to '%s'?"
+msgid "Do you want to rename the directory ‘%s’ to ‘%s’?"
+msgstr "Apakah Anda ingin mengubah nama direktori ‘%s’ menjadi ‘%s’?"
 
-#: ../src/misc.c:2882
-msgid "List of Files"
-msgstr "Daftar Berkas"
+#. Only filename changed
+#: ../src/easytag.c:615
+msgid "Rename File"
+msgstr "Ubah Nama Berkas"
 
-#: ../src/misc.c:2977
-msgid "Selected line:"
-msgstr "Baris yang dipilih"
+#: ../src/easytag.c:616
+#, fuzzy
+msgid "File rename confirmation required"
+msgstr "Berkas berikut diperlukan:"
 
-#: ../src/misc.c:2995
-msgid ""
-"When activating this option, after loading the filenames, the current "
-"selected scanner will be ran (the scanner window must be opened)."
-msgstr ""
+#: ../src/easytag.c:617
+#, fuzzy, c-format
+msgid "Do you want to rename the file ‘%s’ to ‘%s’?"
+msgstr "Anda ingin memuat ulang berkas?"
 
-#: ../src/misc.c:3082
-#, c-format
-msgid "Cannot retrieve file info (%s)"
-msgstr "Tak bisa mengambil info berkas (%s)"
+#: ../src/easytag.c:689
+#, fuzzy, c-format
+#| msgid "Cannot rename file '%s' to '%s'"
+msgid "Cannot rename file ‘%s’ to ‘%s’"
+msgstr "Tak bisa mengubah nama berkas ‘%s’ menjadi ‘%s’"
 
-#: ../src/misc.c:3145
-#, c-format
-msgid "Can't open file '%s' (%s)"
-msgstr "Tak dapat membuka berkas '%s' (%s)"
+#: ../src/easytag.c:703
+#, fuzzy, c-format
+#| msgid "Cannot rename file '%s' to '%s': %s"
+msgid "Cannot rename file ‘%s’ to ‘%s’: %s"
+msgstr "Tak bisa mengubah nama berkas ‘%s’ menjadi ‘%s’: %s"
 
-#: ../src/misc.c:3174
-#, c-format
-msgid "Error reading file (%s)"
-msgstr "Galat saat membaca berkas (%s)"
+#: ../src/easytag.c:708
+msgid "File(s) not renamed"
+msgstr "Berkas tak diubah nama"
 
-#: ../src/misc.c:3391
-msgid "Insert a blank line"
-msgstr "Menyisipkan suatu baris kosong"
+#: ../src/easytag.c:821
+#, fuzzy, c-format
+msgid "Writing tag of ‘%s’"
+msgstr "Tag Git:"
 
-#: ../src/misc.c:3397
-msgid "Delete this line"
-msgstr "Menghapus baris ini"
+#: ../src/easytag.c:830
+msgid "Tag(s) written"
+msgstr "Tag ditulis"
 
-#: ../src/misc.c:3412
-msgid "Move up this line"
-msgstr "Memindah baris ini ke atas"
+#: ../src/easytag.c:843
+#, fuzzy, c-format
+#| msgid "Cannot write tag in file '%s'"
+msgid "Cannot write tag in file ‘%s’"
+msgstr "Tak dapat menulis tag dalam berkas '%s'"
 
-#: ../src/misc.c:3418
-msgid "Move down this line"
-msgstr "Memindah baris ini ke bawah"
+#: ../src/easytag.c:847
+msgid "Tag Write Error"
+msgstr "Galat Tulis Tag"
 
-#. Mode changed to profile name
-#: ../src/monkeyaudio_header.c:78 ../src/musepack_header.c:80
-#, c-format
-msgid "Profile:"
-msgstr "Profil:"
+#: ../src/easytag.c:921 ../src/easytag.c:1149
+#, fuzzy, c-format
+#| msgid "Cannot read directory '%s'"
+msgid "Cannot read directory ‘%s’"
+msgstr "Tak bisa membaca direktori '%s'"
 
-#: ../src/mp4_header.cc:60 ../src/mp4_tag.cc:91 ../src/mp4_tag.cc:284
-msgid "MP4 format invalid"
-msgstr "Format MP4 tak valid"
+#: ../src/easytag.c:925
+msgid "Directory Read Error"
+msgstr "Galat Baca Direktori"
 
-#: ../src/mp4_header.cc:68
+#. Read the directory recursively
+#: ../src/easytag.c:946
 #, c-format
-msgid "File contains no audio track: '%s'"
-msgstr "Berkas tak memuat trek audio: '%s'"
+msgid "Search in progress…"
+msgstr "Pencarian tengah berlangsung…"
 
-#: ../src/mp4_header.cc:79
-#, c-format
-msgid "Error reading properties from file: '%s'"
-msgstr "Galat saat membaca properti dari berkas: '%s'"
+#: ../src/easytag.c:970 ../src/et_core.c:2863
+#, fuzzy, c-format
+#| msgid "File: '%s'"
+msgid "File: ‘%s’"
+msgstr "Berkas: '%s'"
 
-#: ../src/mp4_header.cc:140 ../src/mpeg_header.c:204
+#: ../src/easytag.c:1017
 #, c-format
-msgid "~%d kb/s"
-msgstr "~%d kb/s"
+msgid "Found one file in this directory and subdirectories"
+msgid_plural "Found %d files in this directory and subdirectories"
+msgstr[0] ""
+msgstr[1] ""
 
-#: ../src/mp4_tag.cc:101 ../src/mp4_tag.cc:293
+#: ../src/easytag.c:1024
 #, c-format
-msgid "Error reading tags from file: '%s'"
-msgstr "Galat saat membaca tag dari berkas: '%s'"
-
-#: ../src/mpeg_header.c:64
-msgid "Stereo"
-msgstr "Stereo"
+msgid "Found one file in this directory"
+msgid_plural "Found %d files in this directory"
+msgstr[0] "Menemukan %d berkas dalam direktori ini"
 
-#: ../src/mpeg_header.c:65
-#, fuzzy
-msgid "Joint stereo"
-msgstr "Stereo gabungan"
+#: ../src/easytag.c:1041
+msgid "No file found in this directory and subdirectories"
+msgstr ""
 
-#: ../src/mpeg_header.c:66
-msgid "Dual channel"
-msgstr "Kanal ganda"
+#: ../src/easytag.c:1043
+msgid "No file found in this directory"
+msgstr "Tak ditemukan berkas pada direktori ini"
 
-#: ../src/mpeg_header.c:67
-msgid "Single channel"
-msgstr "Kanal tunggal"
+#: ../src/easytag.c:1113
+#, fuzzy, c-format
+#| msgid "Error opening directory '%s' (%s)"
+msgid "Error opening directory ‘%s’: %s"
+msgstr "Galat saat membuka direktori '%s': (%s)"
 
-#. MPEG, Layer versions
-#: ../src/mpeg_header.c:194
-msgid "MPEG"
-msgstr "MPEG"
+#: ../src/easytag.c:1169
+msgid "Searching for audio files…"
+msgstr "Sedang mencari berkas audio…"
 
-#. FIXME: Pass error back to calling function.
-#: ../src/ogg_header.c:227
-#, c-format
-msgid "Error while opening file: '%s' (%s)"
-msgstr "Galat saat membuka berkas: '%s' (%s)"
+#: ../src/easytag.c:1170
+msgid "Searching"
+msgstr "Mencari"
 
-#: ../src/ogg_header.c:243
-#, c-format
-msgid ""
-"Ogg Vorbis: The specified bitstream does not exist or the file has been "
-"initialized improperly (file: '%s')."
+#: ../src/easytag.c:1171
+msgid "_Stop"
 msgstr ""
 
-#: ../src/ogg_header.c:279
-#, c-format
-msgid "Ogg Vorbis: Read from media returned an error (file: '%s')."
-msgstr ""
+#: ../src/et_core.c:541
+#, fuzzy, c-format
+#| msgid "Error reading tags from file: '%s'"
+msgid "Error reading tag from Ogg file ‘%s’"
+msgstr "Galat saat membaca tag dari berkas: '%s'"
 
-#: ../src/ogg_header.c:282
+#: ../src/et_core.c:570
+#, fuzzy, c-format
+#| msgid "Error reading tags from file: '%s'"
+msgid "Error reading tag from Opus file ‘%s’"
+msgstr "Galat saat membaca tag dari berkas: '%s'"
+
+#: ../src/et_core.c:717
 #, c-format
-msgid "Ogg Vorbis: Bitstream is not Vorbis data (file: '%s')."
+msgid "Automatic corrections applied for file ‘%s’"
 msgstr ""
 
-#: ../src/ogg_header.c:285
+#. And refresh the number of files in this directory
+#: ../src/et_core.c:2887
 #, c-format
-msgid "Ogg Vorbis: Vorbis version mismatch (file: '%s')."
-msgstr ""
+msgid "One file"
+msgid_plural "%u files"
+msgstr[0] "%u berkas"
 
-#: ../src/ogg_header.c:288
+#. Default values are MPEG data.
+#: ../src/et_core.c:2911 ../src/file_area.c:86 ../src/file_area.c:220
+msgid "File"
+msgstr "Berkas"
+
+#. Bitrate
+#: ../src/et_core.c:2918 ../src/tags/flac_header.c:208
+#: ../src/tags/monkeyaudio_header.c:86 ../src/tags/mp4_header.cc:139
+#: ../src/tags/mpeg_header.c:223 ../src/tags/musepack_header.c:90
+#: ../src/tags/ogg_header.c:429 ../src/tags/opus_header.c:232
+#: ../src/tags/wavpack_header.c:84
 #, c-format
-msgid "Ogg Vorbis: Invalid Vorbis bitstream header (file: '%s')."
-msgstr ""
+msgid "%d kb/s"
+msgstr "%d kb/s"
 
-#: ../src/ogg_header.c:291
+#. Samplerate
+#: ../src/et_core.c:2921 ../src/tags/flac_header.c:211
+#: ../src/tags/monkeyaudio_header.c:89 ../src/tags/mp4_header.cc:143
+#: ../src/tags/mpeg_header.c:228 ../src/tags/musepack_header.c:93
+#: ../src/tags/ogg_header.c:432 ../src/tags/opus_header.c:235
+#: ../src/tags/wavpack_header.c:87
 #, c-format
-msgid ""
-"Ogg Vorbis: Internal logic fault, indicates a bug or heap/stack corruption "
-"(file: '%s')."
+msgid "%d Hz"
+msgstr "%d Hz"
+
+#: ../src/et_core.c:3052
+#, fuzzy, c-format
+#| msgid "Could not convert '%s' into filename encoding."
+msgid "Could not convert filename ‘%s’ to system filename encoding"
+msgstr "Tak bisa mengonversi '%s' ke dalam pengodean nama berkas."
+
+#: ../src/et_core.c:3054
+msgid "Try setting the environment variable G_FILENAME_ENCODING."
 msgstr ""
 
-#: ../src/ogg_header.c:337
-#, c-format
-msgid "Error: Failed to open file: '%s' as Vorbis (%s)."
-msgstr "Galat: Ggagal membuka berkas: '%s' sebagai Vorbis (%s)."
+#: ../src/et_core.c:3055 ../src/scan_dialog.c:719
+msgid "Filename translation"
+msgstr "Terjemahan nama berkas"
 
-#: ../src/ogg_tag.c:706 ../src/ogg_tag.c:881
-#, c-format
-msgid "Warning: The Ogg Vorbis file '%s' contains an ID3v2 tag."
+#: ../src/et_core.c:3512
+#, fuzzy, c-format
+msgid "Error writing tag type ‘%d’ to file ‘%s’: %s"
+msgstr "Galat ketika menulis ke berkas unduhan."
+
+#. Nothing to display
+#. Version changed to encoder version
+#. Encoder version
+#: ../src/file_area.c:116 ../src/file_area.c:221 ../src/tags/flac_header.c:204
+#: ../src/tags/monkeyaudio_header.c:92 ../src/tags/musepack_header.c:96
+#: ../src/tags/ogg_header.c:417 ../src/tags/opus_header.c:228
+#: ../src/tags/wavpack_header.c:80
+msgid "Encoder:"
+msgstr "Enkoder:"
+
+#: ../src/file_area.c:125
+msgid "Bitrate:"
+msgstr "Laju bit:"
+
+#. Translators: Please try to keep this string as short as possible as it
+#. * is shown in a narrow column.
+#: ../src/file_area.c:136
+msgid "Sample rate:"
 msgstr ""
 
-#: ../src/ogg_tag.c:1030 ../src/picture.c:1082
-#, c-format
-msgid "Error with 'loader_write': %s"
-msgstr "Galat dengan 'loader_write': %s"
+#. Mode
+#: ../src/file_area.c:148 ../src/file_area.c:225 ../src/tags/mpeg_header.c:231
+msgid "Mode:"
+msgstr "Mode:"
 
-#: ../src/ogg_tag.c:1045 ../src/picture.c:1005
-#, c-format
-msgid "Error with 'loader_close': %s"
-msgstr "Galat dengan 'loader_close': %s"
+#: ../src/file_area.c:157
+msgid "Size:"
+msgstr "Ukuran:"
 
-#: ../src/picture.c:244 ../src/picture.c:269
-#, c-format
-msgid "Image file not loaded: %s"
-msgstr "Berkas citra tak dimuat: %s"
+#: ../src/file_area.c:166
+msgid "Duration:"
+msgstr "Durasi:"
 
-#: ../src/picture.c:261
-#, c-format
-msgid "Cannot open file: '%s'"
-msgstr "Tak dapat membuka berkas: '%s'"
+#: ../src/file_area.c:307 ../src/file_area.c:362
+msgid "File not found"
+msgstr "Berkas tak ditemukan"
 
-#: ../src/picture.c:265
-msgid "Image File Error"
-msgstr "Galat Berkas Citra"
+#: ../src/file_area.c:312 ../src/load_files_dialog.c:221
+#, fuzzy, c-format
+#| msgid "Cannot query file information (%s)"
+msgid "Cannot query file information ‘%s’"
+msgstr "Tak dapat meminta informasi berkas (%s)"
 
-#: ../src/picture.c:276
-msgid "Image file loaded"
-msgstr "Berkas citra dimuat"
+#: ../src/file_area.c:346
+msgid "Read-only file"
+msgstr "Berkas hanya-baca"
 
-#: ../src/picture.c:334
-msgid "Add Images"
-msgstr "Tambah Citra"
+#: ../src/load_files_dialog.c:291
+#, fuzzy, c-format
+#| msgid "Error reading file (%s)"
+msgid "Error reading file ‘%s’"
+msgstr "Galat saat membaca berkas (%s)"
 
-#: ../src/picture.c:344 ../src/picture.c:701
-msgid "All Files"
-msgstr "Semua Berkas"
+#: ../src/load_files_dialog.c:628 ../src/load_files_dialog.c:731
+msgid "Insert a blank line"
+msgstr "Menyisipkan suatu baris kosong"
 
-#: ../src/picture.c:350 ../src/picture.c:707
-msgid "PNG and JPEG"
-msgstr "PNG dan JPEG"
+#: ../src/load_files_dialog.c:632 ../src/load_files_dialog.c:735
+msgid "Delete this line"
+msgstr "Menghapus baris ini"
 
-#: ../src/picture.c:477
-#, c-format
-msgid "Image Properties %d/%d"
-msgstr "Properti Citra %d/%d"
+#: ../src/load_files_dialog.c:643 ../src/load_files_dialog.c:746
+#, fuzzy
+#| msgid "Move up this line"
+msgid "Move this line up"
+msgstr "Memindah baris ini ke atas"
 
-#: ../src/picture.c:503
-msgid "Image Type"
-msgstr "Tipe Citra"
+#: ../src/load_files_dialog.c:647 ../src/load_files_dialog.c:750
+#, fuzzy
+#| msgid "Move up this line"
+msgid "Move this line down"
+msgstr "Memindah baris ini ke atas"
 
-#. Description of the picture
-#: ../src/picture.c:561
-msgid "Image Description:"
-msgstr "Deskripsi Citra"
+#: ../src/load_files_dialog.c:893
+#, fuzzy
+msgid "Load Filenames From a Text File"
+msgstr "Muat berkas core dari disk"
 
-#: ../src/picture.c:688
-#, c-format
-msgid "Save Image %d/%d"
-msgstr "Simpan Citra %d/%d"
+#: ../src/misc.c:257
+msgid "You must type a program name"
+msgstr "Anda harus mengetikkan suatu nama program"
 
-#: ../src/picture.c:763
-#, c-format
-msgid "Image file not saved: %s"
-msgstr "Berkas citra tak disimpan: %s"
+#: ../src/misc.c:258
+#, fuzzy
+msgid "Program Name Error"
+msgstr "Nama program salah: %s"
 
-#: ../src/picture.c:846
+#: ../src/misc.c:336
+#, fuzzy, c-format
+#| msgid "Executed command: %s"
+msgid "Executed command ‘%s’"
+msgstr "Perintah yang dieksekusi: %s"
+
+#: ../src/misc.c:344 ../src/misc.c:455
+#, fuzzy, c-format
+#| msgid "Failed to launch program: %s"
+msgid "Failed to launch program ‘%s’"
+msgstr "Gagal meluncurkan program: %s"
+
+#: ../src/misc.c:361
+msgid "Select File"
+msgstr "Pilih Berkas"
+
+#: ../src/misc.c:367
+msgid "Select Directory"
+msgstr "Pilih Direktori"
+
+#: ../src/picture.c:185
 msgid "JPEG image"
 msgstr "Citra JPEG"
 
-#: ../src/picture.c:848
+#: ../src/picture.c:187
 msgid "PNG image"
 msgstr "Citra PNG"
 
-#: ../src/picture.c:850
+#: ../src/picture.c:189
 msgid "GIF image"
 msgstr "Citra GIF"
 
-#: ../src/picture.c:852
+#: ../src/picture.c:191
 msgid "Unknown image"
 msgstr "Citra tak dikenal"
 
-#: ../src/picture.c:864
-msgid "32x32 pixel PNG file icon"
+#: ../src/picture.c:203
+msgid "32×32 pixel PNG file icon"
 msgstr ""
 
-#: ../src/picture.c:866
+#: ../src/picture.c:205
 msgid "Other file icon"
 msgstr "Ikon berkas lain"
 
-#: ../src/picture.c:868
+#: ../src/picture.c:207
 msgid "Cover (front)"
 msgstr "Sampul (depan)"
 
-#: ../src/picture.c:870
+#: ../src/picture.c:209
 msgid "Cover (back)"
 msgstr "Sampul (belakang)"
 
-#: ../src/picture.c:872
+#: ../src/picture.c:211
 msgid "Leaflet page"
 msgstr "Halaman leaflet"
 
-#: ../src/picture.c:874
-msgid "Media (e.g. label side of CD)"
+#: ../src/picture.c:213
+msgid "Media (such as label side of CD)"
 msgstr ""
 
-#: ../src/picture.c:876
+#: ../src/picture.c:215
 msgid "Lead artist/lead performer/soloist"
 msgstr ""
 
-#: ../src/picture.c:878
+#: ../src/picture.c:217
 #, fuzzy
 msgid "Artist/performer"
 msgstr "Artis Album"
 
-#: ../src/picture.c:880
+#: ../src/picture.c:219
 msgid "Conductor"
 msgstr "Dirigen"
 
-#: ../src/picture.c:882
+#: ../src/picture.c:221
 msgid "Band/Orchestra"
 msgstr "Band/Orkestra"
 
-#: ../src/picture.c:886
+#: ../src/picture.c:225
 #, fuzzy
 msgid "Lyricist/text writer"
 msgstr "Penulis Image Diska"
 
-#: ../src/picture.c:888
+#: ../src/picture.c:227
 msgid "Recording location"
 msgstr "Lokasi perekaman"
 
-#: ../src/picture.c:890
+#: ../src/picture.c:229
 msgid "During recording"
 msgstr "Saat perekaman"
 
-#: ../src/picture.c:892
+#: ../src/picture.c:231
 #, fuzzy
 msgid "During performance"
 msgstr "Saat "
 
-#: ../src/picture.c:894
+#: ../src/picture.c:233
 #, fuzzy
 msgid "Movie/video screen capture"
 msgstr "Rekam video pendek atas layar"
 
-#: ../src/picture.c:896
+#: ../src/picture.c:235
 msgid "A bright colored fish"
 msgstr "Seekor ikan berwarna cerah"
 
-#: ../src/picture.c:898
+#: ../src/picture.c:237
 msgid "Illustration"
 msgstr "Ilustrasi"
 
-#: ../src/picture.c:900
+#: ../src/picture.c:239
 msgid "Band/Artist logotype"
 msgstr ""
 
-#: ../src/picture.c:902
+#: ../src/picture.c:241
 #, fuzzy
 msgid "Publisher/studio logotype"
 msgstr "Citra 3D Studio"
 
-#: ../src/picture.c:906
+#: ../src/picture.c:245
 msgid "Unknown image type"
 msgstr "Tipe citra tak dikenal"
 
-#: ../src/picture.c:936 ../src/picture.c:947
+#: ../src/picture.c:275 ../src/picture.c:286
 msgid "pixels"
 msgstr "piksel"
 
-#: ../src/picture.c:937 ../src/picture.c:948
+#: ../src/picture.c:276 ../src/picture.c:287
 msgid "Type"
 msgstr "Tipe"
 
-#: ../src/picture.c:949
-msgid "Description"
-msgstr "Deskripsi"
-
-#: ../src/picture.c:1065
-msgid ""
-"Cannot display the image because not enough data has been read to determine "
-"how to create the image buffer."
-msgstr ""
+#: ../src/playlist_dialog.c:528
+#, fuzzy, c-format
+#| msgid "Cannot write playlist file '%s'"
+msgid "Cannot write playlist file ‘%s’"
+msgstr "Tak bisa menulis berkas daftar putar ‘%s’"
 
-#: ../src/picture.c:1072
-msgid "Cannot display the image"
-msgstr "Tak data menampilkan citra"
+#: ../src/playlist_dialog.c:532
+msgid "Playlist File Error"
+msgstr "Galat Berkas Daftar Putar"
 
-#: ../src/picture.c:1074
-msgid ""
-"Not enough data has been read to determine how to create the image buffer."
-msgstr ""
+#: ../src/playlist_dialog.c:540
+#, fuzzy, c-format
+msgid "Wrote playlist file ‘%s’"
+msgstr "Untuk menyimpan daftar putar ke berkas"
 
-#: ../src/picture.c:1076
-msgid "Load Image File"
-msgstr "Muat Berkas Citra"
+#: ../src/playlist_dialog.c:622 ../src/scan_dialog.c:3338
+#: ../src/scan_dialog.c:3400
+#, fuzzy
+msgid "Invalid scanner mask"
+msgstr "Mask pengubah bagi akselerator"
 
-#. Label
-#: ../src/prefs.c:152
-msgid "Default directory:"
-msgstr "Direktori baku:"
+#: ../src/playlist_dialog.c:653
+#, fuzzy
+msgid "Generate Playlist"
+msgstr "Gagal menghasilkan daftar putar"
 
-#: ../src/prefs.c:165
-msgid ""
-"Specify the directory where your files are located. This path will be loaded "
-"when EasyTAG starts without parameter."
-msgstr ""
+#. The window
+#: ../src/preferences_dialog.c:292
+msgid "Preferences"
+msgstr "Preferensi"
 
-#. Load directory on startup
-#: ../src/prefs.c:186
-msgid ""
-"Load on startup the default directory or the directory passed as argument"
-msgstr ""
+#: ../src/preferences_dialog.c:1124
+#, fuzzy
+#| msgid "Tag selected files with this title"
+msgid "The selected default path is invalid"
+msgstr "Berkas yang dipilih tag dengan judul ini"
 
-#: ../src/prefs.c:189
+#: ../src/preferences_dialog.c:1126
+#, fuzzy, c-format
 msgid ""
-"Automatically search files, when EasyTAG starts, into the default directory. "
-"Note that this path may be overridden by the parameter passed to easytag "
-"(easytag /path_to/mp3_files)."
-msgstr ""
+"Path: ‘%s’\n"
+"Error: %s"
+msgstr "Path Akselerator"
 
-#. Browse subdirectories
-#: ../src/prefs.c:194
-msgid "Search subdirectories"
-msgstr "Cari subdirektori"
+#: ../src/preferences_dialog.c:1130
+#, fuzzy
+msgid "Invalid Path Error"
+msgstr "Galat format path: %s"
 
-#: ../src/prefs.c:197
-msgid "Search subdirectories for files when reading a directory into the tree."
-msgstr ""
+#: ../src/scan_dialog.c:163
+#, fuzzy
+msgid "Fill Tag"
+msgstr "Tag Git:"
 
-#. Open the node to show subdirectories
-#: ../src/prefs.c:201
-msgid "Show subdirectories when selecting a directory"
-msgstr ""
+#: ../src/scan_dialog.c:310
+#, fuzzy, c-format
+#| msgid "Cannot save tag of file '%s'"
+msgid "Cannot calculate CRC value of file ‘%s’"
+msgstr "Tak dapat menyimpan tag berkas ‘%s’"
 
-#: ../src/prefs.c:205
-msgid ""
-"This expands the selected node into the file browser to display the sub-"
-"directories."
-msgstr ""
+#: ../src/scan_dialog.c:326
+#, fuzzy
+msgid "Tag successfully scanned"
+msgstr "Tag berhasil ditambahkan"
 
-#. Browse hidden directories
-#: ../src/prefs.c:209
-msgid "Search hidden directories"
-msgstr "Cari direktori-direktori tersembunyi"
+#: ../src/scan_dialog.c:329
+#, fuzzy, c-format
+msgid "Tag successfully scanned ‘%s’"
+msgstr "Tag berhasil ditambahkan"
 
-#: ../src/prefs.c:214
-msgid "Search hidden directories for files (directories starting by a '.')."
+#: ../src/scan_dialog.c:372
+#, c-format
+msgid "The extension ‘%s’ was not found in filename ‘%s’"
 msgstr ""
 
-#.
-#. * Misc
-#.
-#: ../src/prefs.c:222
-msgid "Misc"
-msgstr "Rupa-rupa"
-
-#. User interface
-#: ../src/prefs.c:228
-msgid "User Interface"
-msgstr "Antarmuka Pengguna"
-
-#. Show header infos
-#: ../src/prefs.c:235
-msgid "Show header information of file"
-msgstr "Tampilkan informasi kepala berkas"
-
-#: ../src/prefs.c:238
-msgid ""
-"If activated, information about the file as the bitrate, the time, the size, "
-"will be displayed under the filename entry."
+#: ../src/scan_dialog.c:462 ../src/scan_dialog.c:493
+#, c-format
+msgid "Cannot find separator ‘%s’ within ‘%s’"
 msgstr ""
 
-#: ../src/prefs.c:244
-msgid "Display changed files in list using:"
-msgstr "Tampilkan berkas yang berubah dalam daftar memakai:"
-
-#: ../src/prefs.c:247
-msgid "Red color"
-msgstr "Warna merah"
-
-#: ../src/prefs.c:253
-msgid "Bold style"
-msgstr "Gaya tebal"
-
-#. Sorting List Options
-#: ../src/prefs.c:259
-msgid "Sorting List Options"
-msgstr "Opsi Daftar Pengurutan"
-
-#. Sorting method
-#: ../src/prefs.c:268
-msgid "Sort the file list by:"
-msgstr "Urutkan daftar berkas menurut:"
-
-#: ../src/prefs.c:278
-msgid "Ascending filename"
-msgstr "Nama berkas urut naik"
-
-#: ../src/prefs.c:280
-msgid "Descending filename"
-msgstr "Nama berkas urut turun"
-
-#: ../src/prefs.c:281
-msgid "Ascending title"
-msgstr "Judul urut naik"
-
-#: ../src/prefs.c:282
-msgid "Descending title"
-msgstr "Judul urut turun"
-
-#: ../src/prefs.c:283
-msgid "Ascending artist"
-msgstr "Artis urut naik"
-
-#: ../src/prefs.c:284
-msgid "Descending artist"
-msgstr "Artis urut turun"
-
-#: ../src/prefs.c:286
-msgid "Ascending album artist"
-msgstr "Artis album urut naik"
-
-#: ../src/prefs.c:288
-msgid "Descending album artist"
-msgstr "Artis album urut turun"
-
-#: ../src/prefs.c:289
-msgid "Ascending album"
-msgstr "Album urut naik"
-
-#: ../src/prefs.c:290
-msgid "Descending album"
-msgstr "Album urut turun"
-
-#: ../src/prefs.c:291
-msgid "Ascending year"
-msgstr "Tahun urut naik"
-
-#: ../src/prefs.c:292
-msgid "Descending year"
-msgstr "Tahun urut turun"
-
-#: ../src/prefs.c:294
-msgid "Ascending disc number"
-msgstr "Nomor cakram urut naik"
-
-#: ../src/prefs.c:296
-msgid "Descending disc number"
-msgstr "Nomor cakram urut turun"
-
-#: ../src/prefs.c:298
-msgid "Ascending track number"
-msgstr "Nomor trek urut naik"
-
-#: ../src/prefs.c:300
-msgid "Descending track number"
-msgstr "Nomor trek urut turun"
-
-#: ../src/prefs.c:301
-msgid "Ascending genre"
-msgstr "Aliran urut naik"
+#: ../src/scan_dialog.c:717
+#, fuzzy, c-format
+#| msgid "Could not convert '%s' into filename encoding."
+msgid "Could not convert filename ‘%s’ into system filename encoding"
+msgstr "Tak bisa mengonversi '%s' ke dalam pengodean nama berkas."
 
-#: ../src/prefs.c:302
-msgid "Descending genre"
-msgstr "Aliran urut turun"
+#: ../src/scan_dialog.c:742
+#, fuzzy
+msgid "New filename successfully scanned"
+msgstr "Proyek baru telah sukses dibuat."
 
-#: ../src/prefs.c:303
-msgid "Ascending comment"
-msgstr "Komentar urut naik"
+#: ../src/scan_dialog.c:746
+#, fuzzy, c-format
+msgid "New filename successfully scanned ‘%s’"
+msgstr "Proyek baru telah sukses dibuat."
 
-#: ../src/prefs.c:304
-msgid "Descending comment"
-msgstr "Komentar urut turun"
+#: ../src/scan_dialog.c:1102
+#, fuzzy, c-format
+#| msgid "Error while processing fields: %s"
+msgid "Error while processing fields ‘%s’"
+msgstr "Galat saat memroses ruas: %s"
 
-#: ../src/prefs.c:306
+#: ../src/scan_dialog.c:2275
 #, fuzzy
-msgid "Ascending composer"
-msgstr "nama singkat komposer"
+msgid "New_mask"
+msgstr "Mask Subnet:"
 
-#: ../src/prefs.c:308
-msgid "Descending composer"
-msgstr "Komposer menurun"
+#. The window
+#: ../src/scan_dialog.c:2517
+#, fuzzy
+msgid "Tag and Filename Scan"
+msgstr "Nama file yang hendak dibuka dan ditampilkan"
 
-#: ../src/prefs.c:310
-msgid "Ascending original artist"
-msgstr "Artis asli meningkat"
+#. 'Scan selected files' button
+#: ../src/scan_dialog.c:2523
+msgid "Scan Files"
+msgstr "Pindai Berkas"
 
-#: ../src/prefs.c:312
-msgid "Descending original artist"
-msgstr "Artis asli menurun"
+#: ../src/scan_dialog.c:2529
+msgid "Scan selected files"
+msgstr "Pindai berkas yang dipilih"
 
-#: ../src/prefs.c:314
-msgid "Ascending copyright"
-msgstr "Hak cipta meningkat"
+#. Option Menu
+#: ../src/scan_dialog.c:2550
+msgid "Scanner:"
+msgstr "Pemindai:"
 
-#: ../src/prefs.c:316
-msgid "Descending copyright"
-msgstr "Hak cipta menurun"
+#: ../src/scan_dialog.c:2587
+msgid "Scanner Preferences"
+msgstr "Preferensi Pemindai"
 
-#: ../src/prefs.c:318
-msgid "Ascending URL"
-msgstr "URL urut naik"
+#: ../src/scan_dialog.c:2596
+#, fuzzy
+msgid "Show / Hide Masks Editor"
+msgstr "Tampilkan atau sembunyikan pembidik silang"
 
-#: ../src/prefs.c:320
-msgid "Descending URL"
-msgstr "URL urut turun"
+#: ../src/scan_dialog.c:2610
+msgid "Show / Hide Legend"
+msgstr "Tampilkan / Sembunyikan Legenda"
 
-#: ../src/prefs.c:322
+#: ../src/scan_dialog.c:2643
 #, fuzzy
-msgid "Ascending encoded by"
-msgstr "Terakhir Disimpan Oleh"
+#| msgid ""
+#| "Select or type in a mask using codes (see Legend in Scanner Window) to "
+#| "rename the directory from tag fields."
+msgid ""
+"Select or type in a mask using codes (see Legend) to parse filename and "
+"directory. Used to fill in tag fields"
+msgstr ""
+"Pilih atau ketikkan masker memakai kode (lihat Legenda dalam Jendela "
+"Pemindai) untuk mengubah nama direktori dari ruas tag."
 
-#: ../src/prefs.c:324
+#. Preview label.
+#: ../src/scan_dialog.c:2667
 #, fuzzy
-msgid "Descending encoded by"
-msgstr "Terakhir Disimpan Oleh"
-
-#: ../src/prefs.c:326
-msgid "Ascending creation date"
-msgstr "Tanggal pembuatan meningkat"
-
-#: ../src/prefs.c:328
-msgid "Descending creation date"
-msgstr "Tanggal pembuatan menurun"
+msgid "Fill tag preview"
+msgstr "Contoh Wdiget Aktif"
 
-#: ../src/prefs.c:332
-msgid "Select the type of file sorting when loading a directory."
-msgstr ""
+#: ../src/scan_dialog.c:2698
+#, fuzzy
+#| msgid "Create playlist in the parent directory"
+msgid "Prefix mask with current directory"
+msgstr "Buat daftar putar di direktori induk"
 
-#: ../src/prefs.c:344
-msgid "If activated, the sorting of the list will be dependent on the case."
+#: ../src/scan_dialog.c:2712
+msgid ""
+"Select or type in a mask using codes (see Legend) to parse tag fields. Used "
+"to rename the file.\n"
+"Use ‘/’ to make directories. If the first character is ‘/’, it is an "
+"absolute path, otherwise is relative to the old path"
 msgstr ""
 
-#. File Player
-#: ../src/prefs.c:348
+#. Preview label
+#: ../src/scan_dialog.c:2737
 #, fuzzy
-msgid "File Audio Player"
-msgstr "Pemutar CD Audio"
+msgid "Rename file preview"
+msgstr "Pratinjau Format Berkas"
 
-#: ../src/prefs.c:360
-#, fuzzy
-msgid "Player to run:"
-msgstr "Jalankan sampai Kursor"
+#: ../src/scan_dialog.c:2756
+msgid "Select fields:"
+msgstr "Pilih ruas:"
 
-#: ../src/prefs.c:366
+#: ../src/scan_dialog.c:2759
 msgid ""
-"Enter the program used to play the files. Some arguments can be passed for "
-"the program (as 'xmms -p') before to receive files as other arguments."
+"The buttons on the right represent the fields which can be processed. Select "
+"those which interest you"
 msgstr ""
 
-#. Log options
-#: ../src/prefs.c:384
-msgid "Log Options"
-msgstr "Opsi Log"
-
-#. Show / hide log view
-#: ../src/prefs.c:391
-msgid "Show log view in main window"
-msgstr "Tampilkan tilikan log dalam jendela utama"
+#. Translators: the first letter of "filename".
+#: ../src/scan_dialog.c:2773
+msgid "F"
+msgstr "F"
 
-#: ../src/prefs.c:394
-msgid "If activated, the log view would be visible in the main window."
-msgstr ""
+#: ../src/scan_dialog.c:2773
+#, fuzzy
+#| msgid "Process filename field"
+msgid "Process filename"
+msgstr "Proses ruas nama berkas"
 
-#: ../src/prefs.c:400
-msgid "Max number of lines:"
-msgstr "Banyaknya baris maks:"
+#. Translators: the first letter of the track "title".
+#: ../src/scan_dialog.c:2775
+msgid "T"
+msgstr "T"
 
-#. g_signal_connect(G_OBJECT(NumberTrackFormated),"toggled",G_CALLBACK(Number_Track_Formatted_Toggled),NULL);
-#. * g_signal_emit_by_name(G_OBJECT(NumberTrackFormated),"toggled");
-#. gtk_tooltips_set_tip(Tips,GTK_BIN(FilePlayerCombo)->child,_("Enter the program used to "
-#. "play the files. Some arguments can be passed for the program (as 'xmms -p') before "
-#. "to receive files as other arguments."),NULL);
-#.
-#.
-#. * File Settings
-#.
-#: ../src/prefs.c:418
-msgid "File Settings"
-msgstr "Pengaturan Berkas"
+#: ../src/scan_dialog.c:2775
+msgid "Process title field"
+msgstr "Proses ruas judul"
 
-#. File (name) Options
-#: ../src/prefs.c:424
-msgid "File Options"
-msgstr "Opsi Berkas"
+#. Translators: the first letter of the track "artist".
+#: ../src/scan_dialog.c:2777
+msgid "Ar"
+msgstr "Ar"
 
-#: ../src/prefs.c:430
-msgid "Replace illegal characters in filename (for Windows and CD-Rom)"
-msgstr ""
+#: ../src/scan_dialog.c:2777
+#, fuzzy
+#| msgid "Process file artist field"
+msgid "Process artist field"
+msgstr "Proses ruas artis berkas"
 
-#: ../src/prefs.c:433
-msgid ""
-"Convert illegal characters for FAT32/16 and ISO9660 + Joliet filesystems "
-"('\\', ':', ';', '*', '?', '\"', '<', '>', '|') of the filename to avoid "
-"problem when renaming the file. This is useful when renaming the file from "
-"the tag with the scanner."
-msgstr ""
+#. Translators: the first letter of the track "album artist".
+#: ../src/scan_dialog.c:2779
+msgid "AA"
+msgstr "AA"
 
-#. Extension case (lower/upper?)
-#: ../src/prefs.c:441
-msgid "Convert filename extension to:"
-msgstr "Konversikan ekstensi nama berkas menjadi:"
+#: ../src/scan_dialog.c:2779
+msgid "Process album artist field"
+msgstr "Proses ruas artis album"
 
-#: ../src/prefs.c:444
-msgid "Lower Case"
-msgstr "Huruf Kecil"
+#. Translators: the first letter of the track "album".
+#: ../src/scan_dialog.c:2781
+msgid "Al"
+msgstr "Al"
 
-#: ../src/prefs.c:447
-msgid "For example, the extension will be converted to '.mp3'"
-msgstr ""
+#: ../src/scan_dialog.c:2781
+msgid "Process album field"
+msgstr "Proses ruas album"
 
-#: ../src/prefs.c:450
-msgid "Upper Case"
-msgstr "Huruf Besar"
+#. Translators: the first letter of the track "genre".
+#: ../src/scan_dialog.c:2783
+msgid "G"
+msgstr "G"
 
-#: ../src/prefs.c:453
-msgid "For example, the extension will be converted to '.MP3'"
-msgstr ""
+#: ../src/scan_dialog.c:2783
+msgid "Process genre field"
+msgstr "Proses ruas aliran"
 
-#: ../src/prefs.c:456
-#, fuzzy
-msgid "No Change"
-msgstr "Bulan Tetap"
+#. Translators: the first letter of the track "comment".
+#: ../src/scan_dialog.c:2785
+msgid "Cm"
+msgstr "Cm"
 
-#: ../src/prefs.c:459
-#, fuzzy
-msgid "The extension will not be converted"
-msgstr "\"%s\" tidak ditemukan"
+#: ../src/scan_dialog.c:2785
+msgid "Process comment field"
+msgstr "Proses ruas komentar"
 
-#. Preserve modification time
-#: ../src/prefs.c:462
-#, fuzzy
-msgid "Preserve modification time of the file"
-msgstr "Sistem berkas waktu mount tidak cocok %u\n"
+#. Translators: the first letter of the track "composer".
+#: ../src/scan_dialog.c:2787
+msgid "Cp"
+msgstr "Cp"
 
-#: ../src/prefs.c:465
-msgid ""
-"Preserve the modification time (in file properties) when saving the file."
-msgstr ""
+#: ../src/scan_dialog.c:2787
+msgid "Process composer field"
+msgstr "Proses ruas komposer"
 
-#. Change directory modification time
-#: ../src/prefs.c:469
-msgid ""
-"Update modification time of the parent directory of the file (recommended "
-"when using Amarok)"
-msgstr ""
+#. Translators: the first letter of the track "original artist".
+#: ../src/scan_dialog.c:2789
+msgid "O"
+msgstr "O"
 
-#: ../src/prefs.c:473
-msgid ""
-"The modification time of the parent directory of the file will be updated "
-"when saving tag the file. At the present time it is automatically done only "
-"when renaming a file.\n"
-"This feature is interesting when using applications like Amarok. For "
-"performance reasons, they refresh file information by detecting changes of "
-"the parent directory."
-msgstr ""
+#: ../src/scan_dialog.c:2789
+msgid "Process original artist field"
+msgstr "Proses ruas artis asli"
 
-#. Character Set for Filename
-#: ../src/prefs.c:481
-msgid "Character Set for Filename"
-msgstr "Set Karakter untuk Nama Berkas"
+#. Translators: the first letter of the track "copyright".
+#: ../src/scan_dialog.c:2791
+msgid "Cr"
+msgstr "Cr"
 
-#. Rules for character set
-#: ../src/prefs.c:493
-msgid ""
-"Rules to apply if some characters can't be converted to the system character "
-"encoding when writing filename:"
-msgstr ""
+#: ../src/scan_dialog.c:2791
+msgid "Process copyright field"
+msgstr "Proses ruas hak cipta"
 
-#: ../src/prefs.c:499
-#, fuzzy
-msgid "Try another character encoding"
-msgstr "Kehilangan karakter untuk pengkodean karakter"
+#. Translators: the first letter of "URL".
+#: ../src/scan_dialog.c:2793
+msgid "U"
+msgstr "U"
 
-#: ../src/prefs.c:503
-msgid ""
-"With this option, it will try the conversion to the encoding associated to "
-"your locale (for example: ISO-8859-1 for 'fr', KOI8-R for 'ru', ISO-8859-2 "
-"for 'ro'). If it fails, it will try the character encoding ISO-8859-1."
-msgstr ""
+#: ../src/scan_dialog.c:2793
+msgid "Process URL field"
+msgstr "Proses ruas URL"
 
-#: ../src/prefs.c:510
-msgid ""
-"Force using the system character encoding and activate the transliteration"
-msgstr ""
+#. Translators: the first letter of "encoded-by".
+#: ../src/scan_dialog.c:2795
+msgid "E"
+msgstr "E"
 
-#: ../src/prefs.c:514 ../src/prefs.c:844 ../src/prefs.c:913
-msgid ""
-"With this option, when a character cannot be represented in the target "
-"character set, it can be approximated through one or several similarly "
-"looking characters."
-msgstr ""
+#: ../src/scan_dialog.c:2795
+#, fuzzy
+msgid "Process encoded-by field"
+msgstr "Nama ruas kotak kombo"
 
-#: ../src/prefs.c:520
-msgid ""
-"Force using the system character encoding and silently discard some "
-"characters"
-msgstr ""
+#: ../src/scan_dialog.c:2833
+msgid "Invert selection"
+msgstr "Balik pilihan"
 
-#: ../src/prefs.c:524 ../src/prefs.c:854 ../src/prefs.c:923
-msgid ""
-"With this option, when a character cannot be represented in the target "
-"character set, it will be silently discarded."
-msgstr ""
+#: ../src/scan_dialog.c:2842
+#, fuzzy
+msgid "Select/Unselect all"
+msgstr "Keluarkan semua trek dari pilihan"
 
-#.
-#. * Tag Settings
-#.
-#: ../src/prefs.c:533
+#: ../src/scan_dialog.c:2847 ../src/tag_area.c:817
 #, fuzzy
-msgid "Tag Settings"
-msgstr "Tatanan pencetak"
+#| msgid "Convert '_' and '%20' to spaces"
+msgid "Convert ‘_’ and ‘%20’ to spaces"
+msgstr "Ubah '_' dan '%20' ke spasi"
 
-#. Tag Options
-#: ../src/prefs.c:539
+#: ../src/scan_dialog.c:2850 ../src/tag_area.c:823
 #, fuzzy
-msgid "Tag Options"
-msgstr "[ opsi ... ] [ modul ... ]"
+#| msgid "Convert ' ' to '_'"
+msgid "Convert ‘ ’ to ‘_’"
+msgstr "Ubah ' ' menjadi '_'"
 
-#: ../src/prefs.c:545
-msgid "Auto completion of date if not complete"
-msgstr ""
+#: ../src/scan_dialog.c:2860
+msgid "Convert:"
+msgstr "Konversikan:"
 
-#: ../src/prefs.c:548
-msgid ""
-"Try to complete the year field if you enter only the last numerals of the "
-"date (for instance, if the current year is 2005: 5 => 2005, 4 => 2004, 6 => "
-"1996, 95 => 1995…)."
-msgstr ""
+#. FIXME Use translation context. A "space" at the end to allow another
+#. * translation for "to :" (needed in French!)
+#: ../src/scan_dialog.c:2865
+msgid "to: "
+msgstr "Ke ‘%s’:"
 
-#: ../src/prefs.c:556
-msgid "Write the track field with the following number of digits:"
-msgstr ""
+#: ../src/scan_dialog.c:2872
+msgid "Do not convert"
+msgstr "Jangan konversikan"
 
-#: ../src/prefs.c:559
+#: ../src/scan_dialog.c:2921
 msgid ""
-"If activated, the track field is written using the number '0' as padding to "
-"obtain a number with 'n' digits (for example, with two digits: '05', '09', "
-"'10'…). Else it keeps the 'raw' track value."
-msgstr ""
-
-#: ../src/prefs.c:578
-msgid "Write the disc field with the following number of digits:"
-msgstr ""
-
-#: ../src/prefs.c:583
-msgid "Whether to pad the disc field with leading zeroes"
+"The underscore character or the string ‘%20’ is replaced by one space. "
+"Example, before: ‘Text%20In%20An_Entry‘, after: ‘Text In An Entry’"
 msgstr ""
 
-#: ../src/prefs.c:613
+#: ../src/scan_dialog.c:2924
 msgid ""
-"Tag field focus when switching files in list with shortcuts Page Up/Page "
-"Down:"
-msgstr ""
-
-#: ../src/prefs.c:619
-msgid "Keep focus to the same tag field"
+"The space character is replaced by one underscore character. Example, "
+"before: ‘Text In An Entry’, after: ‘Text_In_An_Entry’"
 msgstr ""
 
-#: ../src/prefs.c:625
-msgid "Return focus to the first tag field (i.e. 'Title' field)"
+#: ../src/scan_dialog.c:2927
+msgid "Replace a string by another one. Note that the search is case sensitive"
 msgstr ""
 
-#. gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(SetFocusToFirstTagField),SET_FOCUS_TO_FIRST_TAG_FIELD);
-#. Tag Splitting
-#: ../src/prefs.c:630
-#, fuzzy
-msgid "Tag Splitting"
-msgstr "Tag Git:"
+#: ../src/scan_dialog.c:2934
+msgid "Capitalize all"
+msgstr "Kapitalkan semua"
 
-#: ../src/prefs.c:639
-msgid ""
-"For Vorbis tags, selected fields will be split at dashes and saved as "
-"separate tags"
-msgstr ""
+#: ../src/scan_dialog.c:2936
+msgid "Lowercase all"
+msgstr "Semua huruf kecil"
 
-#: ../src/prefs.c:649
-msgid "Original artist"
-msgstr "Artis asli"
+#: ../src/scan_dialog.c:2938
+msgid "Capitalize first letter"
+msgstr "Kapitalkan huruf pertama"
 
-#.
-#. * ID3 Tag Settings
-#.
-#: ../src/prefs.c:670
-#, fuzzy
-msgid "ID3 Tag Settings"
-msgstr "Timpa pengaturan server"
+#: ../src/scan_dialog.c:2940
+msgid "Capitalize the first letter of each word"
+msgstr ""
 
-#. Tag Rules frame
-#: ../src/prefs.c:679
-#, fuzzy
-msgid "ID3 Tag Rules"
-msgstr "semua aturan berikut"
+#: ../src/scan_dialog.c:2941
+msgid "Detect Roman numerals"
+msgstr "Deteksi angka Romawi"
 
-#. Strip tag when fields (managed by EasyTAG) are empty
-#: ../src/prefs.c:691
-msgid "Strip tags if all fields are set to blank"
-msgstr ""
+#: ../src/scan_dialog.c:2943
+msgid "Do not change capitalization"
+msgstr "Jangan ubah kapitalisasi"
 
-#: ../src/prefs.c:694
-msgid ""
-"As ID3v2 tags may contain other data than Title, Artist, Album, Year, Track, "
-"Genre or Comment (as an attached image, lyrics…), this option allows you to "
-"strip the whole tag when these seven standard data fields have been set to "
-"blank."
+#: ../src/scan_dialog.c:2990
+msgid "Insert a space before uppercase letters"
 msgstr ""
 
-#. Convert old ID3v2 tag version
-#: ../src/prefs.c:700
-msgid "Automatically convert old ID3v2 tag versions"
+#: ../src/scan_dialog.c:2992
+msgid "Remove duplicate spaces and underscores"
 msgstr ""
 
-#: ../src/prefs.c:703
-msgid ""
-"If activated, an old ID3v2 tag version (as ID3v2.2) will be updated to the "
-"ID3v2.3 version."
+#: ../src/scan_dialog.c:2994
+msgid "Do not change word separators"
 msgstr ""
 
-#. Use CRC32
-#: ../src/prefs.c:707
-msgid "Use CRC32"
-msgstr "Pakai CRC32"
-
-#: ../src/prefs.c:710
-msgid "Set CRC32 in the ID3v2 tags"
-msgstr ""
+#.
+#. * Frame to display codes legend
+#.
+#: ../src/scan_dialog.c:3024
+msgid "Legend"
+msgstr "Legenda"
 
-#. Use Compression
-#: ../src/prefs.c:713
-msgid "Use Compression"
-msgstr "Pakai Kompresi"
+#: ../src/scan_dialog.c:3030
+#, c-format
+msgid "%a: artist"
+msgstr "%a: artis"
 
-#: ../src/prefs.c:717
-msgid "Set Compression in the ID3v2 tags"
-msgstr ""
+#: ../src/scan_dialog.c:3032
+#, fuzzy
+msgid "%z: album artist"
+msgstr "Artis Album"
 
-#. Write Genre in text
-#: ../src/prefs.c:720
-msgid "Write Genre in text only"
-msgstr ""
+#: ../src/scan_dialog.c:3034
+msgid "%b: album"
+msgstr "%b: album"
 
-#: ../src/prefs.c:724
-msgid ""
-"Don't use ID3v1 number references in genre tag. Enable this if you see "
-"numbers as genre in your music player."
-msgstr ""
+#: ../src/scan_dialog.c:3036
+#, c-format
+msgid "%c: comment"
+msgstr "%c: komentar"
 
-#. Character Set for writing ID3 tag
-#: ../src/prefs.c:727
-msgid "Character Set for writing ID3 tags"
-msgstr ""
+#: ../src/scan_dialog.c:3038
+#, fuzzy, c-format
+msgid "%p: composer"
+msgstr "Komposer"
 
-#. ID3v2 tags
-#: ../src/prefs.c:734
-msgid "ID3v2 tags"
-msgstr "Tag ID3v2"
+#: ../src/scan_dialog.c:3040
+msgid "%r: copyright"
+msgstr "%r: hak cipta"
 
-#. Write ID3v2 tag
-#: ../src/prefs.c:747
-#, fuzzy
-msgid "Write ID3v2 tag"
-msgstr "rangka tag id3v3 tak diurai"
+#: ../src/scan_dialog.c:3042
+#, c-format
+msgid "%d: disc number"
+msgstr "%d: nomor cakram"
 
-#: ../src/prefs.c:750
-msgid ""
-"If activated, an ID3v2.4 tag will be added or updated at the beginning of "
-"the MP3 files. Else it will be stripped."
-msgstr ""
+#: ../src/scan_dialog.c:3044
+#, fuzzy, c-format
+msgid "%e: encoded by"
+msgstr "Dienkode Oleh"
 
-#. ID3v2 tag version
-#: ../src/prefs.c:757
-msgid "Version:"
-msgstr "Versi:"
+#: ../src/scan_dialog.c:3046
+#, c-format
+msgid "%g: genre"
+msgstr "%g: aliran"
 
-#: ../src/prefs.c:763
-msgid ""
-"Select the ID3v2 tag version to write:\n"
-" - ID3v2.3 is written using id3lib,\n"
-" - ID3v2.4 is written using libid3tag (recommended)."
-msgstr ""
+#: ../src/scan_dialog.c:3048
+#, c-format
+msgid "%i: ignored"
+msgstr "%i: diabaikan"
 
-#. Charset
-#. Id3V1 writing character set
-#: ../src/prefs.c:778 ../src/prefs.c:882
-msgid "Charset:"
-msgstr "Set karakter:"
+#: ../src/scan_dialog.c:3050
+msgid "%l: number of tracks"
+msgstr "%l: cacah trek"
 
-#. Unicode
-#: ../src/prefs.c:783
-msgid "Unicode "
-msgstr "Unicode"
+#: ../src/scan_dialog.c:3052
+#, fuzzy, c-format
+msgid "%o: orig. artist"
+msgstr "Artis Album"
 
-#: ../src/prefs.c:791
-#, fuzzy
-msgid "Unicode type to use"
-msgstr "Jenis sistem berkas yang akan dipakai"
+#: ../src/scan_dialog.c:3054
+#, c-format
+msgid "%n: track"
+msgstr "%n: trek"
 
-#: ../src/prefs.c:815
-msgid "Character set used to write the tag data in the file."
-msgstr ""
+#: ../src/scan_dialog.c:3056
+msgid "%t: title"
+msgstr "%t: judul"
 
-#. ID3v2 Additional iconv() options
-#. ID3V1 Additional iconv() options
-#: ../src/prefs.c:825 ../src/prefs.c:894
-msgid "Additional settings for iconv():"
-msgstr "Pengaturan tambahan bagi iconv():"
+#: ../src/scan_dialog.c:3058
+#, c-format
+msgid "%u: URL"
+msgstr "%u: URL"
 
-#: ../src/prefs.c:831 ../src/prefs.c:900
-msgid "No"
-msgstr "Tidak"
+#: ../src/scan_dialog.c:3060
+#, c-format
+msgid "%x: number of discs"
+msgstr "%x: cacah cakram"
 
-#: ../src/prefs.c:835 ../src/prefs.c:904
-msgid ""
-"With this option, when a character cannot be represented in the target "
-"character set, it isn't changed. But note that an error message will be "
-"displayed for information."
-msgstr ""
+#: ../src/scan_dialog.c:3062
+msgid "%y: year"
+msgstr "%y: tahun"
 
-#: ../src/prefs.c:840 ../src/prefs.c:909
-msgid "//TRANSLIT"
-msgstr ""
+#.
+#. * Masks Editor
+#.
+#: ../src/scan_dialog.c:3068
+#, fuzzy
+msgid "Mask Editor"
+msgstr "Penulis/Penyunting"
 
-#: ../src/prefs.c:850 ../src/prefs.c:919
-msgid "//IGNORE"
-msgstr "//ABAIKAN"
+#: ../src/scan_dialog.c:3124
+#, fuzzy
+msgid "Create New Mask"
+msgstr "Buat topik baru"
 
-#. ID3v1 tags
-#: ../src/prefs.c:859
-msgid "ID3v1 tags"
-msgstr "Tag ID3v1"
+#: ../src/scan_dialog.c:3134
+#, fuzzy
+msgid "Move Up this Mask"
+msgstr "Pindah ke Area Kerja _Atas"
 
-#. Write ID3v1 tag
-#: ../src/prefs.c:873
+#: ../src/scan_dialog.c:3145
 #, fuzzy
-msgid "Write ID3v1.x tag"
-msgstr "Tabel Tag Teks"
+msgid "Move Down this Mask"
+msgstr "Catan URL ini"
 
-#: ../src/prefs.c:876
-msgid ""
-"If activated, an ID3v1 tag will be added or updated at the end of the MP3 "
-"files. Else it will be stripped."
-msgstr ""
+#: ../src/scan_dialog.c:3156
+#, fuzzy
+msgid "Duplicate Mask"
+msgstr "Mask Subnet:"
 
-#: ../src/prefs.c:890
-msgid "Character set used to write ID3v1 tag data in the file."
-msgstr ""
+#: ../src/scan_dialog.c:3167
+#, fuzzy
+msgid "Add Default Masks"
+msgstr "Jarak luar default"
 
-#. Character Set for reading tag
-#: ../src/prefs.c:928
-msgid "Character Set for reading ID3 tags"
-msgstr ""
+#: ../src/scan_dialog.c:3178
+#, fuzzy
+msgid "Remove Mask"
+msgstr "Mask Subnet:"
 
-#: ../src/prefs.c:942
+#: ../src/scan_dialog.c:3189
 #, fuzzy
-msgid "Non-standard:"
-msgstr "Program standar"
+msgid "Save Masks"
+msgstr "Simp_an Sebagai"
 
-#: ../src/prefs.c:948
-msgid ""
-"This character set will be used when reading the tag data, to convert each "
-"string found in an ISO-8859-1 field in the tag (for ID3v2 or/and ID3v1 "
-"tag).\n"
-"\n"
-"For example:\n"
-"  - In previous versions of EasyTAG, you could save UTF-8 strings in an "
-"ISO-8859-1 field. This is not correct. To convert these tags to Unicode: "
-"activate this option and select UTF-8. You must also activate above the "
-"option 'Try to save tags to ISO-8859-1. If it isn't possible then use "
-"UNICODE (recommended)' or 'Always save tags to UNICODE character set'.\n"
-"  - If Unicode was not used, Russian people can select the character set "
-"'Windows-1251' to load tags written under Windows. And 'KOI8-R' to load tags "
-"written under Unix systems."
-msgstr ""
+#: ../src/scan_dialog.c:3475
+msgid "All tags have been scanned"
+msgstr "Semua tag telah dipindai"
 
-#: ../src/prefs.c:966
-msgid "Character set used to read tag data in the file."
-msgstr ""
+#: ../src/search_dialog.c:542
+#, c-format
+msgid "Found one file"
+msgid_plural "Found %d files"
+msgstr[0] "Menemukan %d berkas"
 
-#.
-#. * Scanner
-#.
-#: ../src/prefs.c:980
-msgid "Scanner"
-msgstr "Pemindai"
+#: ../src/search_dialog.c:591
+msgid "Find Files"
+msgstr "Cari Berkas"
 
-#. Character conversion for the 'Fill Tag' scanner (=> FTS...)
-#: ../src/prefs.c:990
-msgid "Fill Tag Scanner - Character Conversion"
-msgstr ""
+#: ../src/search_dialog.c:675
+#, fuzzy
+msgid "Ready to search…"
+msgstr "Ketik untuk mencari…"
 
-#: ../src/prefs.c:996 ../src/prefs.c:1021
-msgid "Convert underscore character '_' and string '%20' to space ' '"
-msgstr ""
+#: ../src/setting.c:146
+#, fuzzy, c-format
+#| msgid "Cannot create or open file '%s' (%s)"
+msgid "Cannot create or open file ‘%s’: %s"
+msgstr "Tak bisa membuat atau membuka berkas ‘%s’ (%s)"
 
-#: ../src/prefs.c:998 ../src/prefs.c:1022
-msgid "Convert space ' ' to underscore '_'"
-msgstr "Konversikan spasi ‘ ‘ ke garis bawah ‘_’"
+#: ../src/setting.c:197
+#, fuzzy, c-format
+msgid "Cannot write list to file ‘%s’: %s"
+msgstr "Kesalahan saat coba menulis berkas CSV"
 
-#: ../src/prefs.c:1010 ../src/prefs.c:1012
-msgid ""
-"If activated, this conversion will be used when applying a mask from the "
-"scanner for tags."
-msgstr ""
+#: ../src/setting.c:215
+#, fuzzy, c-format
+#| msgid "Error while writing list file: %s"
+msgid "Error while writing list file ‘%s’"
+msgstr "Galat ketika menulis berkas daftar: %s"
 
-#. Character conversion for the 'Rename File' scanner (=> RFS...)
-#: ../src/prefs.c:1016
-msgid "Rename File Scanner - Character Conversion"
+#. Fall back to defaults.
+#: ../src/setting.c:295
+msgid "Loading default ‘Fill Tag’ masks…"
 msgstr ""
 
-#: ../src/prefs.c:1033 ../src/prefs.c:1035 ../src/prefs.c:1037
-msgid ""
-"If activated, this conversion will be used when applying a mask from the "
-"scanner for filenames."
+#. Fall back to defaults.
+#: ../src/setting.c:325
+msgid "Loading default ‘Rename File’ masks…"
 msgstr ""
 
-#. Character conversion for the 'Process Fields' scanner (=> PFS...)
-#: ../src/prefs.c:1040
-msgid "Process Fields Scanner - Character Conversion"
-msgstr ""
+#: ../src/setting.c:425
+#, fuzzy, c-format
+msgid "Migrating configuration from directory ‘%s’ to ‘%s’"
+msgstr "Direktori bawaan untuk memilih gambar avatar"
 
-#. Don't convert some words like to, feat. first letter uppercase.
-#: ../src/prefs.c:1047
-msgid ""
-"Don't uppercase first letter of words for some prepositions and articles."
-msgstr ""
+#: ../src/setting.c:449
+#, fuzzy, c-format
+msgid "Failed to migrate configuration file ‘%s’"
+msgstr "gagal membaca berkas konfigurasi"
 
-#: ../src/prefs.c:1051
-msgid ""
-"Don't convert first letter of words like prepositions, articles and words "
-"like feat., when using the scanner 'First letter uppercase of each "
-"word' (for example, you will obtain 'Text in an Entry' instead of 'Text In "
-"An Entry')."
-msgstr ""
+#: ../src/setting.c:486
+#, fuzzy, c-format
+msgid "Cannot create directory ‘%s’: %s"
+msgstr "Tak bisa membuat direktori sementara."
 
-#. Properties of the scanner window
-#: ../src/prefs.c:1057
-msgid "Scanner Window"
-msgstr "Jendela Pemindai"
+#: ../src/status_bar.c:145
+msgid "Ready to start"
+msgstr "Siap memulai"
 
-#: ../src/prefs.c:1063
-#, fuzzy
-msgid "Open the Scanner Window on startup"
-msgstr "Buka pengatur katalog pada saat Poedit dimulai"
+#: ../src/tag_area.c:187
+#, fuzzy, c-format
+#| msgid "Selected files tagged with title '%s'."
+msgid "Selected files tagged with title ‘%s’"
+msgstr "Berkas yang dipilih ditag dengan judul ‘%s’."
 
-#: ../src/prefs.c:1066
-msgid ""
-"Activate this option to open automatically the scanner window when EasyTAG "
-"starts."
-msgstr ""
+#: ../src/tag_area.c:192
+#, fuzzy
+msgid "Removed title from selected files"
+msgstr "Menghapus berkas yang dipilih dari proyek"
 
-#. Other options
-#: ../src/prefs.c:1071
-msgid "Fields"
-msgstr "Ruas"
+#: ../src/tag_area.c:209
+#, fuzzy, c-format
+#| msgid "Selected files tagged with artist '%s'."
+msgid "Selected files tagged with artist ‘%s’"
+msgstr "Berkas yang dipilih ditag dengan artis ‘%s’."
 
-#. Overwrite text into tag fields
-#: ../src/prefs.c:1078
-msgid "Overwrite fields when scanning tags"
-msgstr ""
+#: ../src/tag_area.c:214
+#, fuzzy
+msgid "Removed artist from selected files"
+msgstr "Menghapus berkas yang dipilih dari proyek"
 
-#: ../src/prefs.c:1081
-msgid ""
-"If activated, the scanner will replace existing text in fields by the new "
-"one. If deactivated, only blank fields of the tag will be filled."
-msgstr ""
+#: ../src/tag_area.c:230
+#, fuzzy, c-format
+#| msgid "Selected files tagged with artist '%s'."
+msgid "Selected files tagged with album artist ‘%s’"
+msgstr "Berkas yang dipilih ditag dengan artis ‘%s’."
 
-#: ../src/prefs.c:1092
-msgid "Set this text as default comment:"
-msgstr ""
+#: ../src/tag_area.c:235
+#, fuzzy
+msgid "Removed album artist from selected files"
+msgstr "Menghapus berkas yang dipilih dari proyek"
 
-#: ../src/prefs.c:1095
-msgid ""
-"Activate this option if you want to put the following string into the "
-"comment field when using the 'Fill Tag' scanner."
-msgstr ""
+#: ../src/tag_area.c:252
+#, fuzzy, c-format
+#| msgid "Selected files tagged with album '%s'."
+msgid "Selected files tagged with album ‘%s’"
+msgstr "Berkas yang dipilih ditag dengan album ‘%s’."
 
-#. CRC32 comment
-#: ../src/prefs.c:1113
-msgid "Use CRC32 as the default comment (for files with ID3 tags only)."
-msgstr ""
+#: ../src/tag_area.c:257
+#, fuzzy
+msgid "Removed album name from selected files"
+msgstr "Menghapus berkas yang dipilih dari proyek"
 
-#: ../src/prefs.c:1117
-msgid ""
-"Calculates the CRC-32 value of the file and writes it into the comment field "
-"when using the 'Fill Tag' scanner."
-msgstr ""
+#: ../src/tag_area.c:295
+#, fuzzy, c-format
+#| msgid "Selected files tagged with composer '%s'."
+msgid "Selected files tagged with disc number ‘%s/%s’"
+msgstr "Berkas yang dipilih ditag dengan komponis ‘%s’."
 
-#.
-#. * CDDB
-#.
-#: ../src/prefs.c:1128
-msgid "CDDB"
-msgstr "CDDB"
+#: ../src/tag_area.c:300
+#, fuzzy, c-format
+#| msgid "Selected files tagged with images."
+msgid "Selected files tagged with disc number like ‘xx’"
+msgstr "Berkas yang dipilih ditag dengan citra."
 
-#. CDDB Server Settings (Automatic Search)
-#: ../src/prefs.c:1134
-msgid "Server Settings for Automatic Search"
-msgstr "Pengaturan Server untuk Pencarian Otomatis"
+#: ../src/tag_area.c:305
+#, fuzzy
+msgid "Removed disc number from selected files"
+msgstr "Menghapus berkas yang dipilih dari proyek"
 
-#: ../src/prefs.c:1143 ../src/prefs.c:1182 ../src/prefs.c:1216
-msgid "Name:"
-msgstr "Nama:"
+#: ../src/tag_area.c:322
+#, fuzzy, c-format
+#| msgid "Selected files tagged with year '%s'."
+msgid "Selected files tagged with year ‘%s’"
+msgstr "Berkas yang dipilih ditag dengan tahun ‘%s’."
 
-#: ../src/prefs.c:1162 ../src/prefs.c:1190 ../src/prefs.c:1225
-#: ../src/prefs.c:1310
-msgid "Port:"
-msgstr "Porta:"
+#: ../src/tag_area.c:327
+#, fuzzy
+msgid "Removed year from selected files"
+msgstr "Menghapus berkas yang dipilih dari proyek"
 
-#: ../src/prefs.c:1172 ../src/prefs.c:1200 ../src/prefs.c:1234
-msgid "CGI Path:"
-msgstr "Path CGI:"
+#: ../src/tag_area.c:354 ../src/tag_area.c:448
+#, fuzzy, c-format
+#| msgid "Selected files tagged with title '%s'."
+msgid "Selected files tagged with track like ‘xx/%s’"
+msgstr "Berkas yang dipilih ditag dengan judul ‘%s’."
 
-#. CDDB Server Settings (Manual Search)
-#: ../src/prefs.c:1208
-msgid "Server Settings for Manual Search"
-msgstr "Pengaturan Server untuk Pencarian Manual"
+#: ../src/tag_area.c:358
+#, fuzzy, c-format
+#| msgid "Selected files tagged with title '%s'."
+msgid "Selected files tagged with track like ‘xx’"
+msgstr "Berkas yang dipilih ditag dengan judul ‘%s’."
 
-#. Local access for CDDB (Automatic Search)
-#: ../src/prefs.c:1242
-msgid "Local CDDB"
-msgstr "CDDB Lokal"
+#: ../src/tag_area.c:363 ../src/tag_area.c:453
+#, fuzzy
+msgid "Removed track number from selected files"
+msgstr "Menghapus berkas yang dipilih dari proyek"
 
-#: ../src/prefs.c:1250
-msgid "Path:"
-msgstr "Path:"
+#. msg = g_strdup_printf(_("All %d tracks numbered sequentially."), ETCore->ETFileSelectionList_Length);
+#: ../src/tag_area.c:421
+#, fuzzy, c-format
+#| msgid "Selected tracks numbered sequentially."
+msgid "Selected tracks numbered sequentially"
+msgstr "Trek yang dipilih dinomori secara berurutan."
 
-#: ../src/prefs.c:1262
-msgid ""
-"Specify the directory where the local CD database is located. The local CD "
-"database contains the eleven following directories 'blues', 'classical', "
-"'country', 'data', 'folk', 'jazz', 'newage', 'reggae', 'rock', 'soundtrack' "
-"and 'misc'."
-msgstr ""
+#: ../src/tag_area.c:470
+#, fuzzy, c-format
+#| msgid "Selected files tagged with genre '%s'."
+msgid "Selected files tagged with genre ‘%s’"
+msgstr "Berkas yang dipilih ditag dengan aliran ‘%s’."
 
-#. CDDB Proxy Settings
-#: ../src/prefs.c:1288
-msgid "Proxy Settings"
-msgstr "Pengaturan Proksi"
+#: ../src/tag_area.c:475
+#, fuzzy
+msgid "Removed genre from selected files"
+msgstr "Menghapus berkas yang dipilih dari proyek"
 
-#: ../src/prefs.c:1297
-msgid "Use a proxy"
-msgstr "Pakai proksi"
+#: ../src/tag_area.c:499
+#, fuzzy, c-format
+#| msgid "Selected files tagged with comment '%s'."
+msgid "Selected files tagged with comment ‘%s’"
+msgstr "Berkas yang dipilih ditag dengan komentar ‘%s’."
 
-#: ../src/prefs.c:1300
-msgid "Set active the settings of the proxy server."
-msgstr ""
+#: ../src/tag_area.c:504
+#, fuzzy
+msgid "Removed comment from selected files"
+msgstr "Menghapus berkas yang dipilih dari proyek"
 
-#: ../src/prefs.c:1302
-msgid "Host Name:"
-msgstr "Nama Host:"
+#: ../src/tag_area.c:520
+#, fuzzy, c-format
+#| msgid "Selected files tagged with composer '%s'."
+msgid "Selected files tagged with composer ‘%s’"
+msgstr "Berkas yang dipilih ditag dengan komponis ‘%s’."
 
-#: ../src/prefs.c:1309
+#: ../src/tag_area.c:525
 #, fuzzy
-msgid "Name of the proxy server."
-msgstr "Server Proxy SIP"
-
-#: ../src/prefs.c:1317
-msgid "Port of the proxy server."
-msgstr "Port server proksi."
+msgid "Removed composer from selected files"
+msgstr "Menghapus berkas yang dipilih dari proyek"
 
-#: ../src/prefs.c:1321
-msgid "User Name:"
-msgstr "Nama Pengguna:"
+#: ../src/tag_area.c:542
+#, fuzzy, c-format
+#| msgid "Selected files tagged with artist '%s'."
+msgid "Selected files tagged with original artist ‘%s’"
+msgstr "Berkas yang dipilih ditag dengan artis ‘%s’."
 
-#: ../src/prefs.c:1328
+#: ../src/tag_area.c:547
 #, fuzzy
-msgid "Name of user for the the proxy server."
-msgstr "Nama server surat untuk _surat masuk:"
+msgid "Removed original artist from selected files"
+msgstr "Menghapus berkas yang dipilih dari proyek"
 
-#: ../src/prefs.c:1329
-#, fuzzy
-msgid "User Password:"
-msgstr "Kata sandi"
+#: ../src/tag_area.c:564
+#, fuzzy, c-format
+#| msgid "Selected files tagged with copyright '%s'."
+msgid "Selected files tagged with copyright ‘%s’"
+msgstr "Berkas yang dipilih ditag dengan hak cipta ‘%s’."
 
-#: ../src/prefs.c:1338
+#: ../src/tag_area.c:569
 #, fuzzy
-msgid "Password of user for the proxy server."
-msgstr "Silakan masukkan sandi server basis data bagi pengguna %1:"
+msgid "Removed copyright from selected files"
+msgstr "Menghapus berkas yang dipilih dari proyek"
 
-#. Track Name list (CDDB results)
-#: ../src/prefs.c:1343
-msgid "Track Name List"
-msgstr "Daftar Nama Trek"
+#: ../src/tag_area.c:586
+#, fuzzy, c-format
+#| msgid "Selected files tagged with URL '%s'."
+msgid "Selected files tagged with URL ‘%s’"
+msgstr "Berkas yang dipilih ditag dengan URL ‘%s’."
 
-#: ../src/prefs.c:1350
-msgid ""
-"Select corresponding audio file (according position or DLM if activated "
-"below)"
-msgstr ""
+#: ../src/tag_area.c:591
+#, fuzzy
+msgid "Removed URL from selected files"
+msgstr "Menghapus berkas yang dipilih dari proyek"
 
-#: ../src/prefs.c:1354
-msgid ""
-"If activated, when selecting a line in the list of tracks name, the "
-"corresponding audio file in the main list will be also selected."
-msgstr ""
+#: ../src/tag_area.c:608
+#, fuzzy, c-format
+#| msgid "Selected files tagged with genre '%s'."
+msgid "Selected files tagged with encoder name ‘%s’"
+msgstr "Berkas yang dipilih ditag dengan aliran ‘%s’."
 
-#. Check box to use DLM (also used in the cddb window)
-#: ../src/prefs.c:1359
-msgid ""
-"Use the Levenshtein algorithm (DLM) to match lines (using title) with audio "
-"files (using filename)"
-msgstr ""
+#: ../src/tag_area.c:613
+#, fuzzy
+msgid "Removed encoder name from selected files"
+msgstr "Menghapus berkas yang dipilih dari proyek"
 
-#.
-#. * Confirmation
-#.
-#: ../src/prefs.c:1374
-msgid "Confirmation"
-msgstr "Konfirmasi"
+#: ../src/tag_area.c:647
+#, fuzzy
+#| msgid "Selected files tagged with images."
+msgid "Selected files tagged with images"
+msgstr "Berkas yang dipilih ditag dengan citra."
 
-#: ../src/prefs.c:1379
-msgid "Confirm exit from program"
-msgstr "Konfirmasikan keluar dari program"
+#: ../src/tag_area.c:651
+#, fuzzy
+msgid "Removed images from selected files"
+msgstr "Menghapus berkas yang dipilih dari proyek"
 
-#: ../src/prefs.c:1382
-msgid ""
-"If activated, opens a dialog box to ask confirmation before exiting the "
-"program."
+#. Menu items
+#: ../src/tag_area.c:806
+msgid "Tag selected files with this field"
 msgstr ""
 
-#: ../src/prefs.c:1385
-msgid "Confirm writing of file tag"
-msgstr "Konfirmasikan penulisan tag berkas"
+#: ../src/tag_area.c:833
+msgid "All uppercase"
+msgstr "Semua huruf besar"
 
-#: ../src/prefs.c:1389
-msgid "Confirm renaming of file"
-msgstr "Konfirmasikan penggantian nama berkas"
+#: ../src/tag_area.c:839
+msgid "All lowercase"
+msgstr "Semua huruf kecil"
 
-#: ../src/prefs.c:1393
-msgid "Confirm deleting of file"
-msgstr "Konfirmasikan penghapusan berkas"
+#: ../src/tag_area.c:845
+msgid "First letter uppercase"
+msgstr "Huruf pertama kapital"
 
-#: ../src/prefs.c:1397
-msgid "Confirm writing of playlist"
-msgstr "Konfirmasikan penulisan daftar putar"
+#: ../src/tag_area.c:851
+msgid "First letter uppercase of each word"
+msgstr ""
 
-#: ../src/prefs.c:1401
-msgid "Confirm changing directory when there are unsaved changes"
+#: ../src/tag_area.c:867
+msgid "Insert space before uppercase letter"
 msgstr ""
 
-#. For translators : be aware to NOT translate '%.*d' in this string
-#: ../src/prefs.c:1439
-#, c-format
-msgid "(Example: %.*d_-_Track_name_1.mp3)"
+#: ../src/tag_area.c:873
+msgid "Remove duplicate spaces or underscores"
 msgstr ""
 
-#. Translators: please do NOT translate '%.*d' in this string.
-#: ../src/prefs.c:1472
+#: ../src/tag_area.c:879
+msgid "Remove all text"
+msgstr "Buang semua teks"
+
+#: ../src/tag_area.c:1255 ../src/tag_area.c:1332 ../src/tags/ogg_tag.c:1047
+#: ../src/tags/ogg_tag.c:1062
 #, c-format
-msgid "(Example: disc_%.*d_of_10/Track_name_1.mp3)"
+msgid "Error parsing image data ‘%s’"
 msgstr ""
 
-#: ../src/prefs.c:1614 ../src/setting.c:904
-msgid "Configuration saved"
-msgstr "Konfigurasi disimpan"
+#: ../src/tag_area.c:1314
+msgid ""
+"Cannot display the image because not enough data has been read to determine "
+"how to create the image buffer"
+msgstr ""
 
-#: ../src/prefs.c:1622
-msgid "Configuration unchanged"
-msgstr "Konfigurasi tidak berubah"
+#: ../src/tag_area.c:1321
+msgid "Cannot display the image"
+msgstr "Tak data menampilkan citra"
 
-#: ../src/prefs.c:1713
-msgid "The selected path for 'Default path to files' is invalid"
+#: ../src/tag_area.c:1323
+msgid ""
+"Not enough data has been read to determine how to create the image buffer."
 msgstr ""
 
-#: ../src/prefs.c:1715
+#: ../src/tag_area.c:1325
+msgid "Load Image File"
+msgstr "Muat Berkas Citra"
+
+#: ../src/tag_area.c:1369 ../src/tag_area.c:1394
 #, fuzzy, c-format
-msgid ""
-"Path: '%s'\n"
-"Error: %s"
-msgstr "Path Akselerator"
+#| msgid "Image file not loaded: %s"
+msgid "Image file not loaded ‘%s’"
+msgstr "Berkas citra tak dimuat: %s"
 
-#: ../src/prefs.c:1717
-#, fuzzy
-msgid "Invalid Path Error"
-msgstr "Galat format path: %s"
+#: ../src/tag_area.c:1386
+#, fuzzy, c-format
+#| msgid "Cannot open file: '%s'"
+msgid "Cannot open file ‘%s’"
+msgstr "Tak dapat membuka berkas: '%s'"
 
-#: ../src/prefs.c:1831
-#, c-format
-msgid "The audio file player '%s' cannot be found"
-msgstr ""
+#: ../src/tag_area.c:1390
+msgid "Image File Error"
+msgstr "Galat Berkas Citra"
+
+#: ../src/tag_area.c:1401
+msgid "Image file loaded"
+msgstr "Berkas citra dimuat"
 
-#: ../src/prefs.c:1833
-msgid "Audio Player Error"
-msgstr "Galat Pemutar Audio"
+#: ../src/tag_area.c:1464
+msgid "Add Images"
+msgstr "Tambah Citra"
 
-#: ../src/scan_dialog.c:182
-#, fuzzy
-msgid "Fill Tag"
-msgstr "Tag Git:"
+#: ../src/tag_area.c:1475 ../src/tag_area.c:1839
+msgid "All Files"
+msgstr "Semua Berkas"
+
+#: ../src/tag_area.c:1481 ../src/tag_area.c:1845
+msgid "PNG and JPEG"
+msgstr "PNG dan JPEG"
 
-#: ../src/scan_dialog.c:356
+#: ../src/tag_area.c:1625
 #, c-format
-msgid "Cannot calculate CRC value of file (%s)"
-msgstr ""
+msgid "Image Properties %d/%d"
+msgstr "Properti Citra %d/%d"
 
-#: ../src/scan_dialog.c:371
-#, fuzzy
-msgid "Tag successfully scanned"
-msgstr "Tag berhasil ditambahkan"
+#: ../src/tag_area.c:1824
+#, c-format
+msgid "Save Image %d/%d"
+msgstr "Simpan Citra %d/%d"
 
-#: ../src/scan_dialog.c:373
+#: ../src/tag_area.c:1901
 #, fuzzy, c-format
-msgid "Tag successfully scanned: %s"
-msgstr "Tag berhasil ditambahkan"
+#| msgid "Image file not saved: %s"
+msgid "Image file not saved ‘%s’"
+msgstr "Berkas citra tak disimpan: %s"
 
-#: ../src/scan_dialog.c:414
-#, c-format
-msgid "Tag scanner: strange… the extension '%s' was not found in filename '%s'"
-msgstr ""
+#. Main Frame
+#: ../src/tag_area.c:2117 ../src/tag_area.c:3279
+msgid "Tag"
+msgstr "Tag"
 
-#: ../src/scan_dialog.c:496 ../src/scan_dialog.c:525
-#, c-format
-msgid "Scan Error: can't find separator '%s' within '%s'"
-msgstr ""
+#.
+#. * 1 - Page for common tag fields
+#.
+#: ../src/tag_area.c:2137
+msgid "Common"
+msgstr "Umum"
 
-#: ../src/scan_dialog.c:712
-#, fuzzy
-msgid "New filename successfully scanned"
-msgstr "Proyek baru telah sukses dibuat."
+#. Title
+#: ../src/tag_area.c:2144
+msgid "Title:"
+msgstr "Judul:"
 
-#: ../src/scan_dialog.c:715
-#, fuzzy, c-format
-msgid "New filename successfully scanned: %s"
-msgstr "Proyek baru telah sukses dibuat."
+#: ../src/tag_area.c:2158
+msgid "Tag selected files with this title"
+msgstr "Berkas yang dipilih tag dengan judul ini"
 
-#: ../src/scan_dialog.c:1632
-#, c-format
-msgid "Error while processing fields: %s"
-msgstr "Galat saat memroses ruas: %s"
+#. Artist
+#: ../src/tag_area.c:2161
+msgid "Artist:"
+msgstr "Artis:"
 
-#. The window
-#: ../src/scan_dialog.c:1802
-#, fuzzy
-msgid "Tag and Filename Scan"
-msgstr "Nama file yang hendak dibuka dan ditampilkan"
+#: ../src/tag_area.c:2175
+msgid "Tag selected files with this artist"
+msgstr "Berkas yang dipilih tag dengan artis ini"
 
-#. TODO: Set related action to match AM_SCAN_FILES.
-#: ../src/scan_dialog.c:1811
-msgid "Scan Files"
-msgstr "Pindai Berkas"
+#. Album Artist
+#: ../src/tag_area.c:2178
+msgid "Album artist:"
+msgstr "Artis album:"
 
-#. Option Menu
-#: ../src/scan_dialog.c:1839
-msgid "Scanner:"
-msgstr "Pemindai:"
+#: ../src/tag_area.c:2192
+msgid "Tag selected files with this album artist"
+msgstr "Berkas yang dipilih tag dengan artis album ini"
 
-#: ../src/scan_dialog.c:1860
-#, fuzzy
-msgid "Select the type of scanner to use"
-msgstr "(Usang) Tipe proksi yang akan dipakai"
+#. Album
+#: ../src/tag_area.c:2195
+msgid "Album:"
+msgstr "Album:"
 
-#: ../src/scan_dialog.c:1869
-msgid "Scanner Preferences"
-msgstr "Preferensi Pemindai"
+#: ../src/tag_area.c:2209
+msgid "Tag selected files with this album name"
+msgstr "Berkas yang dipilih tag dengan nama album ini"
 
-#: ../src/scan_dialog.c:1878
-#, fuzzy
-msgid "Show / Hide Masks Editor"
-msgstr "Tampilkan atau sembunyikan pembidik silang"
+#. Disc Number
+#: ../src/tag_area.c:2212
+msgid "CD:"
+msgstr "CD:"
 
-#: ../src/scan_dialog.c:1888
-msgid "Show / Hide Legend"
-msgstr "Tampilkan / Sembunyikan Legenda"
+#: ../src/tag_area.c:2229
+msgid "Tag selected files with this disc number"
+msgstr "Berkas yang dipilih tag dengan nomor cakram ini"
 
-#: ../src/scan_dialog.c:1918
-msgid ""
-"Select or type in a mask using codes (see Legend) to parse filename and "
-"path. Used to fill in tag fields"
-msgstr ""
+#. Year
+#: ../src/tag_area.c:2232
+msgid "Year:"
+msgstr "Tahun:"
 
-#. Preview label
-#: ../src/scan_dialog.c:1942
-#, fuzzy
-msgid "Fill tag preview"
-msgstr "Contoh Wdiget Aktif"
+#: ../src/tag_area.c:2254
+msgid "Tag selected files with this year"
+msgstr "Berkas yang dipilih tag dengan tahun ini"
 
-#: ../src/scan_dialog.c:1972
-msgid "Prefix mask with current path"
+#: ../src/tag_area.c:2270
+#, fuzzy
+#| msgid ""
+#| "Number selected tracks sequentially. Starts at 01 in each subdirectory."
+msgid "Number selected tracks sequentially. Starts at 01 in each subdirectory"
 msgstr ""
+"Banyaknya trek yang dipilih secara berurutan. Mulai dari 01 dalam setiap "
+"subdirektori."
+
+#: ../src/tag_area.c:2278
+msgid "Track #:"
+msgstr "Trek #:"
 
-#: ../src/scan_dialog.c:1986
+#: ../src/tag_area.c:2319
 msgid ""
-"Select or type in a mask using codes (see Legend) to parse tag fields. Used "
-"to rename the file.\n"
-"Use / to make directories. If the first character is /, it's a absolute "
-"path, otherwise is relative to the old path."
+"Set the number of files, in the same directory of the displayed file, to the "
+"selected tracks"
 msgstr ""
 
-#. Preview label
-#: ../src/scan_dialog.c:2011
-#, fuzzy
-msgid "Rename file preview"
-msgstr "Pratinjau Format Berkas"
+#: ../src/tag_area.c:2338
+msgid "Tag selected files with this number of tracks"
+msgstr "Tag berkas yang dipilih dengan nomor trek ini"
 
-#: ../src/scan_dialog.c:2030
-msgid "Select fields:"
-msgstr "Pilih ruas:"
+#. Genre
+#: ../src/tag_area.c:2341
+msgid "Genre:"
+msgstr "Aliran:"
 
-#: ../src/scan_dialog.c:2033
-msgid ""
-"The buttons on the right represent the fields which can be processed. Select "
-"those which interest you"
-msgstr ""
+#: ../src/tag_area.c:2381
+msgid "Tag selected files with this genre"
+msgstr "Tag berkas yang dipilih dengan genre ini"
 
-#. Advice for Translators: set the first letter of filename translated
-#: ../src/scan_dialog.c:2037
-msgid "F"
-msgstr "F"
+#. Comment
+#: ../src/tag_area.c:2384
+msgid "Comment:"
+msgstr "Komentar:"
 
-#: ../src/scan_dialog.c:2039
-msgid "Process filename field"
-msgstr "Proses ruas nama berkas"
+#: ../src/tag_area.c:2398
+msgid "Tag selected files with this comment"
+msgstr "Tag berkas yang dipilih dengan komentar ini"
 
-#. Advice for Translators: set the first letter of title translated
-#: ../src/scan_dialog.c:2041
-msgid "T"
-msgstr "T"
+#. Composer (name of the composers)
+#: ../src/tag_area.c:2401
+msgid "Composer:"
+msgstr "Komposer:"
 
-#: ../src/scan_dialog.c:2042
-msgid "Process title field"
-msgstr "Proses ruas judul"
+#: ../src/tag_area.c:2415
+msgid "Tag selected files with this composer"
+msgstr "Tag berkas yang dipilih dengan komposer ini"
 
-#. Advice for Translators: set the first letter of artist translated
-#: ../src/scan_dialog.c:2044
-msgid "Ar"
-msgstr "Ar"
+#. Translators: Original Artist / Performer. Please try to keep this string
+#. * as short as possible, as it must fit into a narrow column.
+#: ../src/tag_area.c:2419
+msgid "Orig. artist:"
+msgstr "Artis asli:"
 
-#: ../src/scan_dialog.c:2045
-msgid "Process file artist field"
-msgstr "Proses ruas artis berkas"
+#: ../src/tag_area.c:2433
+msgid "Tag selected files with this original artist"
+msgstr "Tag berkas yang dipilih dengan artis asli ini"
 
-#. Advice for Translators: set the first letter of album artist translated
-#: ../src/scan_dialog.c:2047
-msgid "AA"
-msgstr "AA"
+#. Copyright
+#: ../src/tag_area.c:2436
+msgid "Copyright:"
+msgstr "Hak Cipta:"
 
-#: ../src/scan_dialog.c:2048
-msgid "Process album artist field"
-msgstr "Proses ruas artis album"
+#: ../src/tag_area.c:2450
+msgid "Tag selected files with this copyright"
+msgstr "Tag berkas yang dipilih dengan hak cipta ini"
 
-#. Advice for Translators: set the first letter of album translated
-#: ../src/scan_dialog.c:2050
-msgid "Al"
-msgstr "Al"
+#. URL
+#: ../src/tag_area.c:2455
+msgid "URL:"
+msgstr "URL:"
 
-#: ../src/scan_dialog.c:2051
-msgid "Process album field"
-msgstr "Proses ruas album"
+#: ../src/tag_area.c:2469
+msgid "Tag selected files with this URL"
+msgstr "Tag berkas yang dipilih dengan URL ini"
 
-#. Advice for Translators: set the first letter of genre translated
-#: ../src/scan_dialog.c:2053
-msgid "G"
-msgstr "G"
+#. Encoded by
+#: ../src/tag_area.c:2472
+#, fuzzy
+msgid "Encoded by:"
+msgstr "Dienkode Oleh"
 
-#: ../src/scan_dialog.c:2054
-msgid "Process genre field"
-msgstr "Proses ruas aliran"
+#: ../src/tag_area.c:2486
+msgid "Tag selected files with this encoder name"
+msgstr "Tag berkas yang dipilih dengan nama enkoder ini"
 
-#. Advice for Translators: set the first letter of comment translated
-#: ../src/scan_dialog.c:2056
-msgid "Cm"
-msgstr "Cm"
+#.
+#. * 2 - Page for extra tag fields
+#.
+#. Also used in ET_Display_File_Tag_To_UI.
+#: ../src/tag_area.c:2514 ../src/tag_area.c:3532 ../src/tag_area.c:3535
+msgid "Images"
+msgstr "Citra"
 
-#: ../src/scan_dialog.c:2057
-msgid "Process comment field"
-msgstr "Proses ruas komentar"
+#: ../src/tag_area.c:2537
+msgid "You can use drag and drop to add an image"
+msgstr ""
 
-#. Advice for Translators: set the first letter of composer translated
-#: ../src/scan_dialog.c:2059
-msgid "Cp"
-msgstr "Cp"
+#: ../src/tag_area.c:2588
+msgid "Add images to the tag"
+msgstr "Tambahkan citra ke tag"
 
-#: ../src/scan_dialog.c:2060
-msgid "Process composer field"
-msgstr "Proses ruas komposer"
+#: ../src/tag_area.c:2607
+msgid "Remove selected images from the tag"
+msgstr "Buang citra yang dipilih dari tag"
 
-#. Advice for Translators: set the first letter of orig artist translated
-#: ../src/scan_dialog.c:2062
-msgid "O"
-msgstr "O"
+#: ../src/tag_area.c:2618
+msgid "Save the selected images to files"
+msgstr "Simpan citra yang dipilih ke berkas"
 
-#: ../src/scan_dialog.c:2063
-msgid "Process original artist field"
-msgstr "Proses ruas artis asli"
+#: ../src/tag_area.c:2630
+msgid "Edit image properties"
+msgstr "Sunting properti citra"
 
-#. Advice for Translators: set the first letter of copyright translated
-#: ../src/scan_dialog.c:2065
-msgid "Cr"
-msgstr "Cr"
+#: ../src/tag_area.c:2642
+msgid "Tag selected files with these images"
+msgstr ""
 
-#: ../src/scan_dialog.c:2066
-msgid "Process copyright field"
-msgstr "Proses ruas hak cipta"
+#: ../src/tag_area.c:3244
+msgid "ID3 Tag"
+msgstr "Tag ID3"
 
-#. Advice for Translators: set the first letter of URL translated
-#: ../src/scan_dialog.c:2068
-msgid "U"
-msgstr "U"
+#: ../src/tag_area.c:3249
+msgid "Ogg Vorbis Tag"
+msgstr "Tag Ogg Vorbis"
 
-#: ../src/scan_dialog.c:2069
-msgid "Process URL field"
-msgstr "Proses ruas URL"
+#: ../src/tag_area.c:3255
+msgid "FLAC Vorbis Tag"
+msgstr "Tag FLAC Vorbis"
 
-#. Advice for Translators: set the first letter of encoder name translated
-#: ../src/scan_dialog.c:2071
-msgid "E"
-msgstr "E"
+#: ../src/tag_area.c:3259
+msgid "APE Tag"
+msgstr "Tag APE"
 
-#: ../src/scan_dialog.c:2072
-#, fuzzy
-msgid "Process encoder name field"
-msgstr "Nama ruas kotak kombo"
+#: ../src/tag_area.c:3264
+msgid "MP4/M4A/AAC Tag"
+msgstr "Tag MP4/M4A/AAC"
 
-#: ../src/scan_dialog.c:2116
-msgid "Invert selection"
-msgstr "Balik pilihan"
+#: ../src/tag_area.c:3269
+msgid "Wavpack Tag"
+msgstr "Tag Wavpack"
 
-#: ../src/scan_dialog.c:2123
-#, fuzzy
-msgid "Select/Unselect all"
-msgstr "Keluarkan semua trek dari pilihan"
+#: ../src/tag_area.c:3274
+msgid "Opus Tag"
+msgstr "Tag Opus"
 
-#: ../src/scan_dialog.c:2138
-msgid "Convert:"
-msgstr "Konversikan:"
+#: ../src/tag_area.c:3514
+#, c-format
+msgid "Images (%d)"
+msgstr "Citra (%d)"
 
-#: ../src/scan_dialog.c:2140
-msgid "to: "
-msgstr "Ke ‘%s’:"
+#. FIXME: Pass error back to calling function.
+#: ../src/tags/ape_tag.c:61 ../src/tags/id3v24_tag.c:112
+#: ../src/tags/mp4_header.cc:45 ../src/tags/mp4_header.cc:58
+#: ../src/tags/mp4_tag.cc:69 ../src/tags/mp4_tag.cc:85
+#: ../src/tags/mp4_tag.cc:90 ../src/tags/mp4_tag.cc:262
+#: ../src/tags/mp4_tag.cc:278 ../src/tags/mp4_tag.cc:283
+#: ../src/tags/ogg_header.c:226
+#, fuzzy, c-format
+#| msgid "Error while opening file: '%s' (%s)"
+msgid "Error while opening file ‘%s’: %s"
+msgstr "Galat saat membuka berkas: '%s' (%s)"
 
-#: ../src/scan_dialog.c:2147
-msgid "Do not convert"
-msgstr "Jangan konversikan"
+#: ../src/tags/flac_header.c:201
+msgid "FLAC File"
+msgstr "Berkas FLAC"
 
-#: ../src/scan_dialog.c:2177
-msgid ""
-"The underscore character or the string '%20' are replaced by one space. "
-"Example, before: 'Text%20In%20An_Entry', after: 'Text In An Entry'."
-msgstr ""
+#. Mode
+#. Mode
+#. mpeg4ip library seems to always return -1
+#. Mode
+#: ../src/tags/flac_header.c:214 ../src/tags/mp4_header.cc:147
+#: ../src/tags/ogg_header.c:435 ../src/tags/opus_header.c:238
+#: ../src/tags/wavpack_header.c:90
+msgid "Channels:"
+msgstr "Kanal:"
 
-#: ../src/scan_dialog.c:2180
+#: ../src/tags/flac_tag.c:131 ../src/tags/flac_tag.c:855
+#: ../src/tags/flac_tag.c:866
+#, fuzzy, c-format
+#| msgid "Error while opening file: '%s' as FLAC (%s)."
+msgid "Error while opening file ‘%s’ as FLAC: %s"
+msgstr "Galat saat membuka berkas: '%s' sebagai FLAC (%s)."
+
+#: ../src/tags/flac_tag.c:355 ../src/tags/ogg_tag.c:306
+#, c-format
 msgid ""
-"The space character is replaced by one underscore character. Example, "
-"before: 'Text In An Entry', after: 'Text_In_An_Entry'."
+"The year value ‘%s’ seems to be invalid in file ‘%s’. The information will "
+"be lost when saving"
 msgstr ""
 
-#: ../src/scan_dialog.c:2183
-msgid ""
-"Replace a string by another one. Note that the search is case sensitive."
+#: ../src/tags/flac_tag.c:1086
+#, c-format
+msgid "Picture block is invalid ‘%s’"
 msgstr ""
 
-#: ../src/scan_dialog.c:2190
-msgid "Capitalize all"
-msgstr "Kapitalkan semua"
+#: ../src/tags/flac_tag.c:1122
+#, fuzzy, c-format
+#| msgid "Error: Failed to write comments to file '%s' (%s)."
+msgid "Failed to write comments to file ‘%s’: %s"
+msgstr "Gagal menulis file kunci privat ‘%s’: %s"
 
-#: ../src/scan_dialog.c:2192
-msgid "Lowercase all"
-msgstr "Semua huruf kecil"
+#: ../src/tags/flac_tag.c:1128 ../src/tags/ogg_tag.c:1178
+#, fuzzy, c-format
+msgid "Wrote tag of ‘%s’"
+msgstr "Tag Git:"
 
-#: ../src/scan_dialog.c:2194
-msgid "Capitalize first letter"
-msgstr "Kapitalkan huruf pertama"
+#: ../src/tags/id3_tag.c:205
+#, fuzzy, c-format
+#| msgid "Error while reading file: '%s' (%s)"
+msgid "Error while reading file ‘%s’: %s"
+msgstr "Galat saat membaca berkas: '%s' (%s)"
 
-#: ../src/scan_dialog.c:2196
-msgid "Capitalize the first letter of each word"
+#: ../src/tags/id3_tag.c:217
+#, c-format
+msgid ""
+"As the following corrupted file ‘%s’ will cause an error in id3lib, it will "
+"not be processed"
 msgstr ""
 
-#: ../src/scan_dialog.c:2197
-msgid "Detect Roman numerals"
-msgstr "Deteksi angka Romawi"
+#: ../src/tags/id3_tag.c:219
+msgid "Corrupted file"
+msgstr "Berkas terkorupsi"
 
-#: ../src/scan_dialog.c:2199
-msgid "Do not change capitalization"
-msgstr "Jangan ubah kapitalisasi"
+#: ../src/tags/id3_tag.c:597
+#, fuzzy, c-format
+msgid "Removed tag of ‘%s’"
+msgstr "Tag berhasil dihapus"
 
-#: ../src/scan_dialog.c:2236
-msgid ""
-"Convert all words in all fields to upper case. Example, before: 'Text IN AN "
-"entry', after: 'TEXT IN AN ENTRY'."
-msgstr ""
+#: ../src/tags/id3_tag.c:604 ../src/tags/id3_tag.c:727
+#, fuzzy, c-format
+msgid "Error while removing ID3v1 tag of ‘%s’: %s"
+msgstr "Suatu galat terjadi ketika menghapus grup"
 
-#: ../src/scan_dialog.c:2239
-msgid ""
-"Convert all words in all fields to lower case. Example, before: 'TEXT IN an "
-"entry', after: 'text in an entry'."
-msgstr ""
+#: ../src/tags/id3_tag.c:612 ../src/tags/id3_tag.c:692
+#, fuzzy, c-format
+msgid "Error while removing ID3v2 tag of ‘%s’: %s"
+msgstr "Suatu galat terjadi ketika menghapus grup"
 
-#: ../src/scan_dialog.c:2242
-msgid ""
-"Convert the initial of the first word in all fields to upper case. Example, "
-"before: 'text IN An ENTRY', after: 'Text in an entry'."
-msgstr ""
+#: ../src/tags/id3_tag.c:637
+#, fuzzy, c-format
+msgid "Error while updating ID3v2 tag of ‘%s’: %s"
+msgstr "Terjadi galat sewaktu memperbaharui berkas."
 
-#: ../src/scan_dialog.c:2245
+#: ../src/tags/id3_tag.c:668
 msgid ""
-"Convert the initial of each word in all fields to upper case. Example, "
-"before: 'Text in an ENTRY', after: 'Text In An Entry'."
+"You have tried to save this tag to Unicode but it was detected that your "
+"version of id3lib is buggy"
 msgstr ""
 
-#: ../src/scan_dialog.c:2248
+#: ../src/tags/id3_tag.c:670
+#, c-format
 msgid ""
-"Force to convert to upper case the Roman numerals. Example, before: 'ix. "
-"text in an entry', after: 'IX. Text In An Entry'."
+"If you reload this file, some characters in the tag may not be displayed "
+"correctly. Please, apply the patch src/id3lib/"
+"patch_id3lib_3.8.3_UTF16_writing_bug.diff to id3lib, which is available in "
+"the EasyTAG package sources.\n"
+"Note that this message will appear only once.\n"
+"\n"
+"File: %s"
 msgstr ""
 
-#: ../src/scan_dialog.c:2256
-msgid "Insert a space before uppercase letters"
+#: ../src/tags/id3_tag.c:677
+msgid "Buggy id3lib"
 msgstr ""
 
-#: ../src/scan_dialog.c:2258
-msgid "Remove duplicate spaces and underscores"
-msgstr ""
+#: ../src/tags/id3_tag.c:716
+#, fuzzy, c-format
+msgid "Error while updating ID3v1 tag of ‘%s’: %s"
+msgstr "Terjadi galat sewaktu memperbaharui berkas."
 
-#: ../src/scan_dialog.c:2260
-msgid "Do not change word separators"
+#: ../src/tags/id3_tag.c:736 ../src/tags/id3v24_tag.c:1146
+#, c-format
+msgid "Updated tag of ‘%s’"
 msgstr ""
 
-#: ../src/scan_dialog.c:2282
-msgid ""
-"All spaces between words are removed. Example, before: 'Text In An Entry', "
-"after: 'TextInAnEntry'."
-msgstr ""
+#: ../src/tags/id3_tag.c:756
+msgid "No error reported"
+msgstr "Tak ada galat yang dilaporkan"
 
-#: ../src/scan_dialog.c:2285
-msgid ""
-"A space is inserted before each upper case letter. Example, before: "
-"'TextInAnEntry', after: 'Text In An Entry'."
-msgstr ""
+#: ../src/tags/id3_tag.c:758
+msgid "No available memory"
+msgstr "Tak ada memori tersedia"
 
-#: ../src/scan_dialog.c:2288
-msgid ""
-"Duplicate spaces and underscores are removed. Example, before: "
-"'Text__In__An   Entry', after: 'Text_In_An Entry'."
-msgstr ""
+#: ../src/tags/id3_tag.c:760
+msgid "No data to parse"
+msgstr "Tak ada data untuk diurai"
 
-#.
-#. * Frame to display codes legend
-#.
-#: ../src/scan_dialog.c:2295
-msgid "Legend"
-msgstr "Legenda"
+#: ../src/tags/id3_tag.c:762
+#, fuzzy
+msgid "Improperly formatted data"
+msgstr "Token kesalahan yang diformat tidak benar"
 
-#: ../src/scan_dialog.c:2301
-#, c-format
-msgid "%a: artist"
-msgstr "%a: artis"
+#: ../src/tags/id3_tag.c:764
+msgid "No buffer to write to"
+msgstr "Tak ada penyangga tempat menulis"
 
-#: ../src/scan_dialog.c:2304
-#, fuzzy
-msgid "%z: album artist"
-msgstr "Artis Album"
+#: ../src/tags/id3_tag.c:766
+msgid "Buffer is too small"
+msgstr "Penyangga terlalu kecil"
 
-#: ../src/scan_dialog.c:2307
-msgid "%b: album"
-msgstr "%b: album"
+#: ../src/tags/id3_tag.c:768
+#, fuzzy
+msgid "Invalid frame ID"
+msgstr "id aplikasi tak valid: '%s'\n"
 
-#: ../src/scan_dialog.c:2310
-#, c-format
-msgid "%c: comment"
-msgstr "%c: komentar"
+#: ../src/tags/id3_tag.c:770
+msgid "Requested field not found"
+msgstr "Ruas yang diminta tak ditemukan"
 
-#: ../src/scan_dialog.c:2313
-#, fuzzy, c-format
-msgid "%p: composer"
-msgstr "Komposer"
+#: ../src/tags/id3_tag.c:772
+msgid "Unknown field type"
+msgstr "Tipe ruas tak dikenal"
 
-#: ../src/scan_dialog.c:2316
-msgid "%r: copyright"
-msgstr "%r: hak cipta"
+#: ../src/tags/id3_tag.c:774
+msgid "Tag is already attached to a file"
+msgstr ""
 
-#: ../src/scan_dialog.c:2319
-#, c-format
-msgid "%d: disc number"
-msgstr "%d: nomor cakram"
+#: ../src/tags/id3_tag.c:776
+msgid "Invalid tag version"
+msgstr "Versi tag tak valid"
 
-#: ../src/scan_dialog.c:2322
-#, fuzzy, c-format
-msgid "%e: encoded by"
-msgstr "Dienkode Oleh"
+#: ../src/tags/id3_tag.c:778
+msgid "No file to parse"
+msgstr "Tak ada berkas yang akan diurai"
 
-#: ../src/scan_dialog.c:2325
-#, c-format
-msgid "%g: genre"
-msgstr "%g: aliran"
+#: ../src/tags/id3_tag.c:780
+msgid "Attempting to write to a read-only file"
+msgstr "Mencoba menulis ke suatu berkas yang hanya-baca"
 
-#: ../src/scan_dialog.c:2328
-#, c-format
-msgid "%i: ignored"
-msgstr "%i: diabaikan"
+#: ../src/tags/id3_tag.c:782
+msgid "Error in compression/uncompression"
+msgstr ""
 
-#: ../src/scan_dialog.c:2331
-msgid "%l: number of tracks"
-msgstr "%l: cacah trek"
+#: ../src/tags/id3_tag.c:784
+msgid "Unknown error message"
+msgstr "Pesan galat tak dikenal"
 
-#: ../src/scan_dialog.c:2334
+#: ../src/tags/id3_tag.c:1454
 #, fuzzy, c-format
-msgid "%o: orig. artist"
-msgstr "Artis Album"
+#| msgid "Error while creating temporary file: '%s'"
+msgid "Error while creating temporary file ‘%s’"
+msgstr "Galat ketika membuat berkas sementara: ‘%s’"
 
-#: ../src/scan_dialog.c:2337
-#, c-format
-msgid "%n: track"
-msgstr "%n: trek"
+#: ../src/tags/id3_tag.c:1461
+msgid "Error while creating temporary file"
+msgstr "Galat ketika membuat berkas sementara"
 
-#: ../src/scan_dialog.c:2340
-msgid "%t: title"
-msgstr "%t: judul"
+#: ../src/tags/id3_tag.c:1481
+#, fuzzy, c-format
+#| msgid "Error while writing to file: '%s' (%s)"
+msgid "Error while writing to file ‘%s’: %s"
+msgstr "Galat ketika menulis ke berkas: '%s' (%s)"
 
-#: ../src/scan_dialog.c:2343
+#. Translators: The first string is a filename, the
+#. * second string is the number of bytes that were
+#. * missing (not read for some reason) while reading from
+#. * the file.
+#.
+#: ../src/tags/id3v24_tag.c:1636
 #, c-format
-msgid "%u: URL"
-msgstr "%u: URL"
+msgid "Cannot write tag of file ‘%s’ (a byte was missing)"
+msgid_plural "Cannot write tag of file ‘%s’ (%s bytes were missing)"
+msgstr[0] ""
+msgstr[1] ""
 
-#: ../src/scan_dialog.c:2346
-#, c-format
-msgid "%x: number of discs"
-msgstr "%x: cacah cakram"
+#: ../src/tags/id3v24_tag.c:1657
+#, fuzzy, c-format
+#| msgid "Cannot save tag of file '%s'"
+msgid "Cannot save tag of file ‘%s’"
+msgstr "Tak dapat menyimpan tag berkas ‘%s’"
 
-#: ../src/scan_dialog.c:2349
-msgid "%y: year"
-msgstr "%y: tahun"
+#: ../src/tags/id3v24_tag.c:1669
+#, fuzzy, c-format
+msgid "Size error while saving tag of ‘%s’"
+msgstr "Galat saat menyimpan informasi lagu"
 
-#.
-#. * Masks Editor
-#.
-#: ../src/scan_dialog.c:2356
-#, fuzzy
-msgid "Mask Editor"
-msgstr "Penulis/Penyunting"
+#. Mode changed to profile name
+#: ../src/tags/monkeyaudio_header.c:82 ../src/tags/musepack_header.c:85
+msgid "Profile:"
+msgstr "Profil:"
 
-#: ../src/scan_dialog.c:2410
-#, fuzzy
-msgid "Create New Mask"
-msgstr "Buat topik baru"
+#: ../src/tags/mp4_header.cc:59 ../src/tags/mp4_tag.cc:91
+#: ../src/tags/mp4_tag.cc:284
+msgid "MP4 format invalid"
+msgstr "Format MP4 tak valid"
 
-#: ../src/scan_dialog.c:2420
-#, fuzzy
-msgid "Move Up this Mask"
-msgstr "Pindah ke Area Kerja _Atas"
+#: ../src/tags/mp4_header.cc:69
+#, fuzzy, c-format
+#| msgid "Error reading properties from file: '%s'"
+msgid "Error reading properties from file ‘%s’"
+msgstr "Galat saat membaca properti dari berkas: '%s'"
 
-#: ../src/scan_dialog.c:2430
-#, fuzzy
-msgid "Move Down this Mask"
-msgstr "Catan URL ini"
+#: ../src/tags/mp4_header.cc:126
+msgid "MP4/AAC File"
+msgstr "Berkas MP4/AAC"
 
-#: ../src/scan_dialog.c:2440
-#, fuzzy
-msgid "Duplicate Mask"
-msgstr "Mask Subnet:"
+#: ../src/tags/mp4_header.cc:135 ../src/tags/mpeg_header.c:219
+#, c-format
+msgid "~%d kb/s"
+msgstr "~%d kb/s"
 
-#: ../src/scan_dialog.c:2450
-#, fuzzy
-msgid "Add Default Masks"
-msgstr "Jarak luar default"
+#: ../src/tags/mp4_tag.cc:101 ../src/tags/mp4_tag.cc:293
+#, fuzzy, c-format
+#| msgid "Error reading tags from file: '%s'"
+msgid "Error reading tags from file ‘%s’"
+msgstr "Galat saat membaca tag dari berkas: '%s'"
 
-#: ../src/scan_dialog.c:2460
-#, fuzzy
-msgid "Remove Mask"
-msgstr "Mask Subnet:"
+#: ../src/tags/mpeg_header.c:52
+msgid "Stereo"
+msgstr "Stereo"
 
-#: ../src/scan_dialog.c:2470
+#: ../src/tags/mpeg_header.c:53
 #, fuzzy
-msgid "Save Masks"
-msgstr "Simp_an Sebagai"
+msgid "Joint stereo"
+msgstr "Stereo gabungan"
 
-#: ../src/scan_dialog.c:3050
-#, fuzzy
-msgid "New_mask"
-msgstr "Mask Subnet:"
+#: ../src/tags/mpeg_header.c:54
+msgid "Dual channel"
+msgstr "Kanal ganda"
 
-#: ../src/scan_dialog.c:3089
-msgid "Copy: No row selected"
-msgstr "Salin: Tak ada baris yang dipilih"
+#: ../src/tags/mpeg_header.c:55
+msgid "Single channel"
+msgstr "Kanal tunggal"
 
-#: ../src/scan_dialog.c:3182
-#, fuzzy
-msgid "Remove: No row selected"
-msgstr "Tidak ada statistik yang dipilih."
+#: ../src/tags/mpeg_header.c:189
+msgid "MP3 File"
+msgstr "Berkas MP3"
 
-#: ../src/scan_dialog.c:3229
-msgid "Move Up: No row selected"
-msgstr "Pindah Naik: Tak ada baris yang dipilih"
+#: ../src/tags/mpeg_header.c:192
+msgid "MP2 File"
+msgstr "Berkas MP2"
 
-#: ../src/scan_dialog.c:3273
-msgid "Move Down: No row selected"
-msgstr "Pindah Turun: Tak ada baris yang dipilih"
+#. MPEG, Layer versions
+#: ../src/tags/mpeg_header.c:199
+msgid "MPEG"
+msgstr "MPEG"
 
-#: ../src/setting.c:924
-#, c-format
-msgid "Error: Cannot write configuration file: %s (%s)"
-msgstr "Galat: Tak bisa menulis berkas konfigurasi: %s (%s)"
+#: ../src/tags/musepack_header.c:82
+msgid "MusePack File"
+msgstr "Berkas MusePack"
 
-#: ../src/setting.c:944 ../src/setting.c:961 ../src/setting.c:981
+#: ../src/tags/ogg_header.c:243
 #, c-format
-msgid "Error while writing configuration file: %s"
-msgstr "Galat ketika menulis berkas konfigurasi: %s"
+msgid ""
+"The specified bitstream does not exist or the file has been initialized "
+"improperly (file: ‘%s’)"
+msgstr ""
 
-#: ../src/setting.c:1100
+#: ../src/tags/ogg_header.c:281
 #, c-format
-msgid "Cannot open configuration file '%s' (%s)"
-msgstr "Tak bisa membuka berkas konfigurasi '%s' (%s)"
-
-#: ../src/setting.c:1102
-#, fuzzy
-msgid "Loading default configuration"
-msgstr "gunakan berkas konfigurasi bukan bawaan"
+msgid "Read from media returned an error (file: ‘%s’)"
+msgstr ""
 
-#: ../src/setting.c:1143
+#: ../src/tags/ogg_header.c:286
 #, c-format
-msgid "Cannot create or open file '%s' (%s)"
-msgstr "Tak bisa membuat atau membuka berkas ‘%s’ (%s)"
-
-#: ../src/setting.c:1203
-#, fuzzy, c-format
-msgid "Error: Cannot write list to file: %s (%s)"
-msgstr "Kesalahan saat coba menulis berkas CSV"
+msgid "Bitstream is not Vorbis data (file: ‘%s’)"
+msgstr ""
 
-#: ../src/setting.c:1221
+#: ../src/tags/ogg_header.c:291
 #, c-format
-msgid "Error while writing list file: %s"
-msgstr "Galat ketika menulis berkas daftar: %s"
-
-#. Fall back to defaults
-#: ../src/setting.c:1301
-msgid "Loading default 'Fill Tag' masks…"
+msgid "Vorbis version mismatch (file: ‘%s’)"
 msgstr ""
 
-#. Fall back to defaults
-#: ../src/setting.c:1331
-msgid "Loading default 'Rename File' masks…"
+#: ../src/tags/ogg_header.c:296
+#, c-format
+msgid "Invalid Vorbis bitstream header (file: ‘%s’)"
 msgstr ""
 
-#. Fall back to defaults
-#: ../src/setting.c:1357
-msgid "Loading default 'Rename Directory' masks…"
+#: ../src/tags/ogg_header.c:301
+#, c-format
+msgid ""
+"Internal logic fault, indicates a bug or heap/stack corruption (file: ‘%s’)"
 msgstr ""
 
-#: ../src/setting.c:1568
+#: ../src/tags/ogg_header.c:348
 #, fuzzy, c-format
-msgid "Migrating configuration from directory '%s' to '%s'"
-msgstr "Direktori bawaan untuk memilih gambar avatar"
+#| msgid "Error: Failed to open file: '%s' as Vorbis (%s)."
+msgid "Failed to open file ‘%s’ as Vorbis: %s"
+msgstr "Galat: Ggagal membuka berkas: '%s' sebagai Vorbis (%s)."
 
-#: ../src/setting.c:1592
-#, fuzzy, c-format
-msgid "Failed to migrate configuration file '%s'"
-msgstr "gagal membaca berkas konfigurasi"
+#: ../src/tags/ogg_header.c:407
+msgid "Ogg Vorbis File"
+msgstr "Berkas Ogg Vorbis"
 
-#: ../src/setting.c:1629
-#, fuzzy, c-format
-msgid "Error: Cannot create directory '%s' (%s)"
-msgstr "Tak bisa membuat direktori sementara."
+#: ../src/tags/ogg_header.c:410
+msgid "Speex File"
+msgstr "Berkas Speex"
 
-#~ msgid "Cannot write tag in file '%s' (%s)"
-#~ msgstr "Tak dapat menulis tag dalam berkas '%s' (%s)"
+#: ../src/tags/ogg_tag.c:711 ../src/tags/ogg_tag.c:888
+#, c-format
+msgid "The Ogg Vorbis file ‘%s’ contains an ID3v2 tag"
+msgstr ""
+
+#: ../src/tags/opus_header.c:225
+msgid "Opus File"
+msgstr "Berkas Opus"
+
+#: ../src/tags/wavpack_header.c:77
+msgid "Wavpack File"
+msgstr "Berkas WavPack"
diff --git a/po/lt.po b/po/lt.po
index f0a7b54..dd3c76e 100644
--- a/po/lt.po
+++ b/po/lt.po
@@ -9,8 +9,8 @@ msgstr ""
 "Project-Id-Version: EasyTAG 2.1.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
 "product=easytag&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2014-04-12 13:25+0000\n"
-"PO-Revision-Date: 2014-04-13 22:55+0300\n"
+"POT-Creation-Date: 2014-04-12 18:50+0000\n"
+"PO-Revision-Date: 2014-04-13 23:08+0300\n"
 "Last-Translator: Aurimas ÄŒernius <aurisc4 at gmail.com>\n"
 "Language-Team: Lietuvių <gnome-lt at lists.akl.lt>\n"
 "Language: lt\n"
@@ -29,8 +29,8 @@ msgid ""
 "View and edit tags for MP3, MP2, MP4/AAC, FLAC, Ogg Opus, Ogg Speex, Ogg "
 "Vorbis, MusePack, Monkey's Audio and WavPack files."
 msgstr ""
-"Žiūrėkite ir keiskite žymas MP3, MP2, MP4/AAC, FLAC, Ogg Opus, Ogg Speex, "
-"Ogg Vorbis, MusePack, Monkey's Audio bei WavPack failuose."
+"Žiūrėkite ir keiskite žymas MP3, MP2, MP4/AAC, FLAC, gg Opus, Ogg Speex, Ogg "
+"Vorbis, MusePack, Monkey's Audio bei WavPack failuose."
 
 #: ../data/easytag.appdata.xml.in.h:2
 msgid ""
@@ -61,41 +61,14 @@ msgstr "Keiskite garso failo metaduomenis"
 msgid "mp3;tag;audio;"
 msgstr "mp3;žymos;garsas;"
 
-#: ../src/about.c:89
-msgid ""
-"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 (at your option) "
-"any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful, but WITHOUT "
-"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
-"FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for "
-"more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License along with "
-"this program. If not, see <http://www.gnu.org/licenses/>."
-msgstr ""
-"Ši programa yra laisva programinė įranga; galite ją platinti ir (arba) "
-"keisti pagal GNU Bendrosios Viešos Licencijos sąlygas, kaip jas pateikia "
-"Free Software Foundation; licencijos versija 2 arba (jūsų pasirinkta) bet "
-"kuri vÄ—lesnÄ— versija.\n"
-"\n"
-"Ši programa platinama tikintis, kad ji bus naudinga, bet BE JOKIŲ GARANTIJŲ; "
-"netgi be numanomų PREKYBINIŲ ar TINKAMUMO KONKREČIAM TIKSLUI garantijų.  "
-"Daugiau informacijos rasite GNU Bendrojoje Viešoje Licencijoje.\n"
-"\n"
-"Turėjote gauti GNU Bendrosios Viešos Licencijos kopiją kartu su šia "
-"programa. Jei negavote, jÄ… rasite <http://www.gnu.org/licenses/>."
-
 #. Translators: put your own name here to appear in the about dialog.
-#: ../src/about.c:106
+#: ../src/about.c:89
 msgid "translator-credits"
 msgstr ""
 "IÅ¡vertÄ—:\n"
 "Aurimas ÄŒernius <aurisc4 at gmail.com>"
 
-#: ../src/about.c:116
+#: ../src/about.c:99
 msgid "View and edit tags in audio files"
 msgstr "Žiūrėti ir keisti žymas garso failuose"
 
@@ -772,11 +745,11 @@ msgstr "Klaida: ieškant „%s“ medyje nerastas %s"
 msgid "Tree"
 msgstr "Medis"
 
-#: ../src/browser.c:3102 ../src/cddb.c:803 ../src/misc.c:1903
+#: ../src/browser.c:3102 ../src/cddb.c:803 ../src/misc.c:1899
 msgid "Filename"
 msgstr "Failo pavadinimas"
 
-#: ../src/browser.c:3102 ../src/cddb.c:804 ../src/misc.c:1904
+#: ../src/browser.c:3102 ../src/cddb.c:804 ../src/misc.c:1900
 #: ../src/prefs.c:643
 msgid "Title"
 msgstr "Pavadinimas"
@@ -784,22 +757,22 @@ msgstr "Pavadinimas"
 #. Translators: This option is for the previous 'search in' option. For
 #. * instance, translate this as "Search in:" "Artist".
 #: ../src/browser.c:3103 ../src/browser.c:3110 ../src/cddb.c:483
-#: ../src/cddb.c:805 ../src/misc.c:1905 ../src/prefs.c:644
+#: ../src/cddb.c:805 ../src/misc.c:1901 ../src/prefs.c:644
 msgid "Artist"
 msgstr "AtlikÄ—jas"
 
-#: ../src/browser.c:3103 ../src/misc.c:1906
+#: ../src/browser.c:3103 ../src/misc.c:1902
 msgid "Album Artist"
 msgstr "Albumo atlikÄ—jas"
 
 #. Translators: This option is for the previous 'search in' option. For
 #. * instance, translate this as "Search in:" "Album".
 #: ../src/browser.c:3104 ../src/browser.c:3112 ../src/cddb.c:486
-#: ../src/cddb.c:806 ../src/misc.c:1907 ../src/prefs.c:645
+#: ../src/cddb.c:806 ../src/misc.c:1903 ../src/prefs.c:645
 msgid "Album"
 msgstr "Albumas"
 
-#: ../src/browser.c:3104 ../src/cddb.c:807 ../src/misc.c:1909
+#: ../src/browser.c:3104 ../src/cddb.c:807 ../src/misc.c:1905
 msgid "Year"
 msgstr "Metai"
 
@@ -807,37 +780,37 @@ msgstr "Metai"
 msgid "Disc"
 msgstr "Diskas"
 
-#: ../src/browser.c:3105 ../src/misc.c:1910
+#: ../src/browser.c:3105 ../src/misc.c:1906
 msgid "Track"
 msgstr "Takelis"
 
-#: ../src/browser.c:3105 ../src/cddb.c:810 ../src/misc.c:1911
+#: ../src/browser.c:3105 ../src/cddb.c:810 ../src/misc.c:1907
 #: ../src/prefs.c:646
 msgid "Genre"
 msgstr "Žanras"
 
-#: ../src/browser.c:3106 ../src/misc.c:1912 ../src/prefs.c:647
+#: ../src/browser.c:3106 ../src/misc.c:1908 ../src/prefs.c:647
 msgid "Comment"
 msgstr "Komentaras"
 
-#: ../src/browser.c:3106 ../src/misc.c:1913 ../src/picture.c:1060
+#: ../src/browser.c:3106 ../src/misc.c:1909 ../src/picture.c:1060
 #: ../src/prefs.c:648
 msgid "Composer"
 msgstr "Kompozitorius"
 
-#: ../src/browser.c:3107 ../src/misc.c:1914
+#: ../src/browser.c:3107 ../src/misc.c:1910
 msgid "Original Artist"
 msgstr "Originalus atlikÄ—jas"
 
-#: ../src/browser.c:3108 ../src/misc.c:1915
+#: ../src/browser.c:3108 ../src/misc.c:1911
 msgid "Copyright"
 msgstr "AutorinÄ—s teisÄ—s"
 
-#: ../src/browser.c:3108 ../src/misc.c:1916
+#: ../src/browser.c:3108 ../src/misc.c:1912
 msgid "URL"
 msgstr "URL"
 
-#: ../src/browser.c:3109 ../src/misc.c:1917
+#: ../src/browser.c:3109 ../src/misc.c:1913
 msgid "Encoded By"
 msgstr "Kodavo"
 
@@ -879,7 +852,7 @@ msgstr "Pervadinti aplankÄ…"
 msgid "Rename the directory '%s' to:"
 msgstr "Pervadinti aplanką „%s“ į:"
 
-#: ../src/browser.c:3636 ../src/misc.c:1172
+#: ../src/browser.c:3636 ../src/misc.c:1168
 msgid "Use mask:"
 msgstr "Naudoti kaukÄ™:"
 
@@ -1141,7 +1114,7 @@ msgstr "Kategorijos"
 msgid "Results:"
 msgstr "Rezultatai:"
 
-#: ../src/cddb.c:606 ../src/misc.c:1951
+#: ../src/cddb.c:606 ../src/misc.c:1947
 msgid "Search:"
 msgstr "Ieškoti:"
 
@@ -1205,7 +1178,7 @@ msgid "# Tracks"
 msgstr "Takelių nr."
 
 #. Check box to run the scanner
-#: ../src/cddb.c:847 ../src/misc.c:2992
+#: ../src/cddb.c:847 ../src/misc.c:2988
 msgid "Run the current scanner for each file"
 msgstr "Dabartinį skenerį vykdyti kiekvienam failui"
 
@@ -2698,54 +2671,54 @@ msgstr "Dydžio klaida įrašant „%s“ žymą"
 msgid "Log"
 msgstr "Žurnalas"
 
-#: ../src/misc.c:720
+#: ../src/misc.c:716
 msgid "You must type a program name"
 msgstr "Turite nurodyti programÄ…"
 
-#: ../src/misc.c:721
+#: ../src/misc.c:717
 msgid "Program Name Error"
 msgstr "Programos pavadinimo klaida"
 
-#: ../src/misc.c:800
+#: ../src/misc.c:796
 #, c-format
 msgid "Executed command: %s"
 msgstr "Vykdyta komanda: %s"
 
-#: ../src/misc.c:807
+#: ../src/misc.c:803
 #, c-format
 msgid "Failed to launch program: %s"
 msgstr "Nepavyko paleisti programos: %s"
 
-#: ../src/misc.c:824
+#: ../src/misc.c:820
 msgid "Select File"
 msgstr "Pasirinkite failÄ…"
 
-#: ../src/misc.c:830
+#: ../src/misc.c:826
 msgid "Select Directory"
 msgstr "Parinkite aplankÄ…"
 
-#: ../src/misc.c:1142
+#: ../src/misc.c:1138
 msgid "Generate Playlist"
 msgstr "Generuoti grojaraštį"
 
-#: ../src/misc.c:1166
+#: ../src/misc.c:1162
 msgid "M3U Playlist Name"
 msgstr "M3U grojaraščio vardas"
 
-#: ../src/misc.c:1181
+#: ../src/misc.c:1177
 msgid "Use directory name"
 msgstr "Naudoti aplanko vardÄ…"
 
 #. Playlist options
-#: ../src/misc.c:1198
+#: ../src/misc.c:1194
 msgid "Playlist Options"
 msgstr "Grojaraščio nustatymai"
 
-#: ../src/misc.c:1204
+#: ../src/misc.c:1200
 msgid "Include only the selected files"
 msgstr "Įtraukti tik pasirinktus failus"
 
-#: ../src/misc.c:1207
+#: ../src/misc.c:1203
 msgid ""
 "If activated, only the selected files will be written in the playlist file. "
 "Else, all the files will be written."
@@ -2753,77 +2726,77 @@ msgstr ""
 "Jei aktyvuota, į grojaraščio failą bus įrašyti tik pasirinkti failai. Kitu "
 "atveju bus įrašyti visi failai."
 
-#: ../src/misc.c:1210
+#: ../src/misc.c:1206
 msgid "Use full path for files in playlist"
 msgstr "Grojaraštyje naudoti pilnus kelius"
 
-#: ../src/misc.c:1213
+#: ../src/misc.c:1209
 msgid "Use relative path for files in playlist"
 msgstr "Grojaraštyje naudoti reliatyvius kelius"
 
 #. Create playlist in parent directory
-#: ../src/misc.c:1219
+#: ../src/misc.c:1215
 msgid "Create playlist in the parent directory"
 msgstr "Grojraštį sukurti esamame aplanke"
 
-#: ../src/misc.c:1222
+#: ../src/misc.c:1218
 msgid "If activated, the playlist will be created in the parent directory."
 msgstr "Jei aktyvuota, grojaraštis bus sukurtas aukštesniame aplanke."
 
 #. DOS Separator
-#: ../src/misc.c:1226
+#: ../src/misc.c:1222
 msgid "Use DOS directory separator"
 msgstr "Naudoti DOS aplankų skirtuką"
 
-#: ../src/misc.c:1232
+#: ../src/misc.c:1228
 msgid ""
 "This option replaces the UNIX directory separator '/' into DOS separator "
 "'\\'."
 msgstr "Ši parinktis pakeičia UNIX aplanko skirtuką „/“ į DOS skirtuką „\\“."
 
-#: ../src/misc.c:1241
+#: ../src/misc.c:1237
 msgid "Playlist Content"
 msgstr "Grojaraščio turinys"
 
-#: ../src/misc.c:1247
+#: ../src/misc.c:1243
 msgid "Write only list of files"
 msgstr "Rašyti tik failų sąrašą"
 
-#: ../src/misc.c:1251
+#: ../src/misc.c:1247
 msgid "Write info using filename"
 msgstr "Informaciją rašyti naudojant failo vardą"
 
-#: ../src/misc.c:1254
+#: ../src/misc.c:1250
 msgid "Write info using:"
 msgstr "Rašyti informaciją naudojant:"
 
-#: ../src/misc.c:1468
+#: ../src/misc.c:1464
 #, c-format
 msgid "Cannot write playlist file '%s'"
 msgstr "Įrašyti grojaraščio failo „%s“ nepavyko"
 
-#: ../src/misc.c:1472
+#: ../src/misc.c:1468
 msgid "Playlist File Error"
 msgstr "Grojaraščio failo klaida"
 
-#: ../src/misc.c:1480
+#: ../src/misc.c:1476
 #, c-format
 msgid "Written playlist file '%s'"
 msgstr "Grojaraščio failas „%s“ įrašytas"
 
-#: ../src/misc.c:1544 ../src/scan_dialog.c:2709 ../src/scan_dialog.c:2771
+#: ../src/misc.c:1540 ../src/scan_dialog.c:2709 ../src/scan_dialog.c:2771
 msgid "Invalid scanner mask"
 msgstr "Netinkama skenerio kaukÄ—"
 
-#: ../src/misc.c:1908
+#: ../src/misc.c:1904
 msgid "CD"
 msgstr "CD"
 
-#: ../src/misc.c:1930
+#: ../src/misc.c:1926
 msgid "Find Files"
 msgstr "Rasti failus"
 
-#: ../src/misc.c:1962
+#: ../src/misc.c:1958
 msgid ""
 "Type the word to search into files. Or type nothing to display all files."
 msgstr ""
@@ -2831,13 +2804,13 @@ msgstr ""
 "rodomi visi failai."
 
 #. Where...
-#: ../src/misc.c:1968
+#: ../src/misc.c:1964
 msgid "In:"
 msgstr "Kur:"
 
 #. Translators: This option is for the previous 'in' option. For instance,
 #. * translate this as "Search" "In:" "the Filename".
-#: ../src/misc.c:1973
+#: ../src/misc.c:1969
 msgid "the Filename"
 msgstr "failo pavadinime"
 
@@ -2846,20 +2819,20 @@ msgstr "failo pavadinime"
 #. * Note: label changed to "the Tag" (to be the only one) to fix a Hungarian
 #. * grammatical problem (which uses one word to say "in the tag" like here)
 #.
-#: ../src/misc.c:1979
+#: ../src/misc.c:1975
 msgid "the Tag"
 msgstr "žymoje"
 
 #. Property of the search
-#: ../src/misc.c:1990 ../src/prefs.c:335
+#: ../src/misc.c:1986 ../src/prefs.c:335
 msgid "Case sensitive"
 msgstr "Skirti mažąsias ir didžiąsias raides"
 
-#: ../src/misc.c:2217
+#: ../src/misc.c:2213
 msgid "Ready to search…"
 msgstr "Paieškai pasirengta…"
 
-#: ../src/misc.c:2437
+#: ../src/misc.c:2433
 #, c-format
 msgid "Found one file"
 msgid_plural "Found %d files"
@@ -2867,63 +2840,63 @@ msgstr[0] "Rastas %d failas"
 msgstr[1] "Rasti %d failai"
 msgstr[2] "Rasta %d failų"
 
-#: ../src/misc.c:2722
+#: ../src/misc.c:2718
 msgid "Load Filenames From a Text File"
 msgstr "Įkelti failų pavadinimus iš tekstinio failo"
 
-#: ../src/misc.c:2751
+#: ../src/misc.c:2747
 msgid "File:"
 msgstr "Failas:"
 
 #. Button 'load'
 #. the signal attached to this button, to load the file, is placed after the LoadFileContentList definition
-#: ../src/misc.c:2770
+#: ../src/misc.c:2766
 msgid " Load "
 msgstr " Įkelti "
 
-#: ../src/misc.c:2788
+#: ../src/misc.c:2784
 msgid "Content of Text File"
 msgstr "Tekstinio failo turinys"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2809 ../src/misc.c:2904
+#: ../src/misc.c:2805 ../src/misc.c:2900
 msgid "Insert a blank line before the selected line"
 msgstr "Prieš pasirinktą eilutę įterpti tuščią eilutę"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2818 ../src/misc.c:2913
+#: ../src/misc.c:2814 ../src/misc.c:2909
 msgid "Delete the selected line"
 msgstr "Pašalinti pasirinktą eilutę"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2827 ../src/misc.c:2922 ../src/misc.c:3408
+#: ../src/misc.c:2823 ../src/misc.c:2918 ../src/misc.c:3404
 msgid "Delete all blank lines"
 msgstr "Pašalinti visas tuščias eilutes"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2839 ../src/misc.c:2934
+#: ../src/misc.c:2835 ../src/misc.c:2930
 msgid "Move up the selected line"
 msgstr "Pasirinktą eilutę perkelti aukštyn"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2848 ../src/misc.c:2943
+#: ../src/misc.c:2844 ../src/misc.c:2939
 msgid "Move down the selected line"
 msgstr "Pasirinktą eilutę perkelti žemyn"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2860 ../src/misc.c:2955 ../src/misc.c:3432
+#: ../src/misc.c:2856 ../src/misc.c:2951 ../src/misc.c:3428
 msgid "Reload"
 msgstr "Įkelti iš naujo"
 
-#: ../src/misc.c:2882
+#: ../src/misc.c:2878
 msgid "List of Files"
 msgstr "Failų sąrašas"
 
-#: ../src/misc.c:2977
+#: ../src/misc.c:2973
 msgid "Selected line:"
 msgstr "Pasirinkta eilutÄ—:"
 
-#: ../src/misc.c:2995
+#: ../src/misc.c:2991
 msgid ""
 "When activating this option, after loading the filenames, the current "
 "selected scanner will be ran (the scanner window must be opened)."
@@ -2931,34 +2904,34 @@ msgstr ""
 "Aktyvavus šią parinkty, įkėlus failus, bus paleistas pasirinktas skeneris "
 "(skenerio langas turi būt atvertas)."
 
-#: ../src/misc.c:3082
+#: ../src/misc.c:3078
 #, c-format
 msgid "Cannot retrieve file info (%s)"
 msgstr "Nepavyko gauti failo informacijos (%s)"
 
-#: ../src/misc.c:3144
+#: ../src/misc.c:3140
 #, c-format
 msgid "Can't open file '%s' (%s)"
 msgstr "Atverti failo „%s“ nepavyko (%s)"
 
-#: ../src/misc.c:3180
+#: ../src/misc.c:3176
 #, c-format
 msgid "Error reading file (%s)"
 msgstr "Klaida skaitant failÄ… (%s)"
 
-#: ../src/misc.c:3396
+#: ../src/misc.c:3392
 msgid "Insert a blank line"
 msgstr "Įterpti tuščią eilutę"
 
-#: ../src/misc.c:3402
+#: ../src/misc.c:3398
 msgid "Delete this line"
 msgstr "Pašalinti šią eilutę"
 
-#: ../src/misc.c:3417
+#: ../src/misc.c:3413
 msgid "Move up this line"
 msgstr "Perkelti eilutę aukštyn"
 
-#: ../src/misc.c:3423
+#: ../src/misc.c:3419
 msgid "Move down this line"
 msgstr "Perkelti eilutę žemyn"
 
@@ -4897,3 +4870,4 @@ msgstr "Nepavyko migruoti konfigūracijos failo „%s“"
 #, c-format
 msgid "Error: Cannot create directory '%s' (%s)"
 msgstr "Klaida: Nepavyko sukurti aplanko „%s“ (%s)"
+
diff --git a/po/id.po b/po/nb.po
similarity index 64%
copy from po/id.po
copy to po/nb.po
index f1ae2d0..ca53c78 100644
--- a/po/id.po
+++ b/po/nb.po
@@ -1,61 +1,60 @@
-# Indonesian translation for easytag.
-# Copyright (C) 2014 easytag's COPYRIGHT HOLDER
-# This file is distributed under the same license as the easytag package.
-# Andika Triwidada <andika at gmail.com>, 2014.
+# Norwegian translation of easytag.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the easytag-2-2 package.
+# Ã…ka Sikrom <a4 at hush.com>, 2014.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: easytag easytag-2-2\n"
+"Project-Id-Version: easytag-2-2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
 "product=easytag&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2014-09-05 03:13+0000\n"
-"PO-Revision-Date: 2014-09-05 23:11+0700\n"
-"Last-Translator: Andika Triwidada <andika at gmail.com>\n"
-"Language-Team: Indonesian <gnome-l10n-id at googlegroups.com>\n"
-"Language: id\n"
+"POT-Creation-Date: 2014-09-25 17:21+0000\n"
+"PO-Revision-Date: 2014-05-26 10:17+0100\n"
+"Last-Translator: Ã…ka Sikrom <a4 at hush.com>\n"
+"Language-Team: Norwegian bokmål\n"
+"Language: Norwegian bokmål\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Poedit 1.5.7\n"
-"X-Poedit-Bookmarks: 612,-1,-1,-1,-1,-1,-1,-1,-1,-1\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 1.5.4\n"
 
 #: ../data/easytag.appdata.xml.in.h:1
 msgid ""
 "View and edit tags for MP3, MP2, MP4/AAC, FLAC, Ogg Opus, Ogg Speex, Ogg "
 "Vorbis, MusePack, Monkey's Audio and WavPack files."
 msgstr ""
-"Lihat dan sunting tag bagi berkas-berkas MP3, MP2, MP4/AAC, FLAC, Ogg Opus, "
-"Ogg Speex, Ogg Vorbis, MusePack, Monkey’s Audio, dan WavPack."
+"Vis og rediger tagger for MP3-, MP2-, MP4/AAC-, FLAC., Ogg Opus-, Ogg "
+"Speex-, Ogg Vorbis-, MusePack-, Monkey's Audio- og WavPack-filer."
 
 #: ../data/easytag.appdata.xml.in.h:2
 msgid ""
 "Look up albums in online databases, bulk edit tags, create playlists and "
 "rename a collection of files."
 msgstr ""
-"Cari album dalam basis data daring, sunting masal tag, buat daftar putar, "
-"dan ubah nama suatu koleksi berkas."
+"Finn album i databaser på nett, rediger tagger buntvis, lag spillelister og "
+"gi nytt navn til flere filer."
 
 #: ../data/easytag.appdata.xml.in.h:3
 msgid ""
 "A simple and nice GTK+ interface makes tagging easier under GNU/Linux and "
 "Windows."
 msgstr ""
-"Antar muka GTK+ yang sederhana dan manis, yang memudahkan men-tag di bawah "
-"GNU/Linux dan Windows."
+"Et enkelt og greit GTK+-grensesnitt gjør det enklere å tagge med GNU/Linux "
+"og Windows."
 
 #: ../data/easytag.desktop.in.h:1
 msgid "Sound File Metadata Editor"
-msgstr "Penyunting Metadata Berkas Suara"
+msgstr "Metadata-behandler for lydfiler"
 
 #: ../data/easytag.desktop.in.h:2
 msgid "Edit sound file metadata"
-msgstr "Sunting metadata berkas suara"
+msgstr "Rediger metadata i lydfiler"
 
 #. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
 #: ../data/easytag.desktop.in.h:4
 msgid "mp3;tag;audio;"
-msgstr "mp3;tag;audio;"
+msgstr "mp3;tagg;lyd;"
 
 #: ../src/about.c:89
 msgid ""
@@ -72,27 +71,28 @@ msgid ""
 "You should have received a copy of the GNU General Public License along with "
 "this program. If not, see <http://www.gnu.org/licenses/>."
 msgstr ""
-"Program ini adalah perangkat lunak bebas; Anda dapat menyebarkan dan/atau "
-"mengubahnya di bawah syarat GNU General Public License sebagaimana "
-"dipublikasikan oleh Free Software Foundation, apakah Lisensi versi 2 atau "
-"(sesuai pilihan Anda) versi selanjutnya.\n"
+"Dette programmet utgis som fri programvare. Du kan dele det med andre og "
+"endre det i henhold til GNU General Public-lisensen, som utgis av Free "
+"Software Foundation. Du kan selv velge om versjon 2 eller en senere versjon "
+"av lisensen skal være gjeldende.\n"
 "\n"
-"Program ini didistribusikan dengan harapan bahwa program ini akan berguna, "
-"tetapi TANPA GARANSI; tanpa garansi yang termasuk dari DAGANGAN atau "
-"KECOCOKAN UNTUK TUJUAN TERTENTU sekalipun. Lihat GNU General Public License "
-"untuk rincian lebih lanjut.\n"
+"Dette programmet er utgitt i håp om at det kommer til nytte. Det stilles for "
+"øvrig INGEN GARANTI for at programmet fungerer slik du ønsker, og heller "
+"ikke at det egner seg til SALGSVIRKSOMHET eller at det PASSER TIL ET BESTEMT "
+"FORMÃ…L. Les GNU General Public-lisensen for ytterligere detaljer.\n"
 "\n"
-"Anda mestinya menerima salinan dari GNU General Public License bersama "
-"dengan program ini. Bila tidak, lihat <http://www.gnu.org/licenses/>."
+"Det skal ha fulgt med en kopi av GNU General Public-lisensen sammen med "
+"dette programmet. Hvis ikke, kan du lese aktuell versjon på <http://www.gnu."
+"org/licenses/>."
 
 #. Translators: put your own name here to appear in the about dialog.
 #: ../src/about.c:106
 msgid "translator-credits"
-msgstr "Andika Triwidada <andika at gmail.com>, 2014"
+msgstr "Samm Rokki"
 
 #: ../src/about.c:116
 msgid "View and edit tags in audio files"
-msgstr "Lihat dan sunting tag dalam berkas audio"
+msgstr "Vis og rediger tagger i lydfiler"
 
 #: ../src/ape_tag.c:61 ../src/id3v24_tag.c:113 ../src/mp4_header.cc:46
 #: ../src/mp4_header.cc:59 ../src/mp4_tag.cc:69 ../src/mp4_tag.cc:85
@@ -100,692 +100,692 @@ msgstr "Lihat dan sunting tag dalam berkas audio"
 #: ../src/mp4_tag.cc:283
 #, c-format
 msgid "Error while opening file: '%s' (%s)."
-msgstr "Galat saat membuka berkas: '%s' (%s)."
+msgstr "Feil ved åpning av fila «%s» (%s)."
 
 #: ../src/application.c:37
 msgid "Print the version and exit"
-msgstr "Cetak versi dan keluar"
+msgstr "Skriv ut versjonsnummer og avslutt"
 
 #: ../src/application.c:89
 #, c-format
 msgid "Website: %s"
-msgstr "Situs web: %s"
+msgstr "Nettside: %s"
 
 #: ../src/application.c:98
 msgid "- Tag and rename audio files"
-msgstr "- Tag dan ubah nama berkas audio"
+msgstr "- Gi tagger og nytt navn til lydfiler"
 
 #.
 #. * Main Menu Actions
 #.
 #: ../src/bar.c:155
 msgid "_File"
-msgstr "_Berkas"
+msgstr "_Fil"
 
 #: ../src/bar.c:156
 msgid "Sort List by Tag"
-msgstr "Urutkan Daftar berdasar Tag"
+msgstr "Sorter liste etter tagg"
 
 #: ../src/bar.c:159
 msgid "Sort List by Property"
-msgstr "Urutkan Daftar berdasar Properti"
+msgstr "Sorter liste etter egenskap"
 
 #: ../src/bar.c:160
 msgid "Ascending by filename"
-msgstr "Urut naik berdasar nama berkas"
+msgstr "Stigende rekkefølge, etter filnavn"
 
 #: ../src/bar.c:161
 msgid "Descending by filename"
-msgstr "Urut turun berdasar nama berkas"
+msgstr "Synkende rekkefølge, etter filnavn"
 
 #: ../src/bar.c:162
 msgid "Ascending by creation date"
-msgstr "Urut naik berdasar tanggal pembuatan"
+msgstr "Stigende, etter opprettelsesdato"
 
 #: ../src/bar.c:163
 msgid "Descending by creation date"
-msgstr "Urut turun berdasar tanggal pembuatan"
+msgstr "Synkende, etter opprettelsesdato"
 
 #: ../src/bar.c:164
 msgid "Ascending by track number"
-msgstr "Urut naik berdasar nomor trek"
+msgstr "Stigende, etter spornummer"
 
 #: ../src/bar.c:165
 msgid "Descending by track number"
-msgstr "Urut turun berdasar nomor trek"
+msgstr "Synkende, etter spornummer"
 
 #: ../src/bar.c:166
 msgid "Ascending by title"
-msgstr "Urut naik berdasar judul"
+msgstr "Stigende, etter tittel"
 
 #: ../src/bar.c:167
 msgid "Descending by title"
-msgstr "Urut turun berdasar judul"
+msgstr "Synkende, etter tittel"
 
 #: ../src/bar.c:168
 msgid "Ascending by artist"
-msgstr "Urut naik berdasar artis"
+msgstr "Stigende, etter artist"
 
 #: ../src/bar.c:169
 msgid "Descending by artist"
-msgstr "Urut turun berdasar artis"
+msgstr "Synkende, etter artist"
 
 #: ../src/bar.c:170
 msgid "Ascending by album artist"
-msgstr "Urut naik berdasar artis album"
+msgstr "Stigende, etter albumartist"
 
 #: ../src/bar.c:171
 msgid "Descending by album artist"
-msgstr "Urut turun berdasar artis album"
+msgstr "Synkende, etter albumartist"
 
 #: ../src/bar.c:172
 msgid "Ascending by album"
-msgstr "Urut naik berdasar album"
+msgstr "Stigende, etter album"
 
 #: ../src/bar.c:173
 msgid "Descending by album"
-msgstr "Urut turun berdasar album"
+msgstr "Synkende, etter album"
 
 #: ../src/bar.c:174
 msgid "Ascending by year"
-msgstr "Urut naik berdasar tahun"
+msgstr "Stigende, etter år"
 
 #: ../src/bar.c:175
 msgid "Descending by year"
-msgstr "Urut turun berdasar tahun"
+msgstr "Ã¥r"
 
 #: ../src/bar.c:176
 msgid "Ascending by genre"
-msgstr "Urut naik berdasar aliran"
+msgstr "Stigende, etter sjanger"
 
 #: ../src/bar.c:177
 msgid "Descending by genre"
-msgstr "Urut turun berdasar aliran"
+msgstr "Synkende, etter sjanger"
 
 #: ../src/bar.c:178
 msgid "Ascending by comment"
-msgstr "Urut naik berdasar komentar"
+msgstr "Stigende, etter kommentar"
 
 #: ../src/bar.c:179
 msgid "Descending by comment"
-msgstr "Urut turun berdasar komentar"
+msgstr "Synkende, etter kommentar"
 
 #: ../src/bar.c:180
 msgid "Ascending by composer"
-msgstr "Urut naik berdasar komponis"
+msgstr "Stigende, etter komponist"
 
 #: ../src/bar.c:181
 msgid "Descending by composer"
-msgstr "Urut turun berdasar komponis"
+msgstr "Synkende, etter komponist"
 
 #: ../src/bar.c:182
 msgid "Ascending by original artist"
-msgstr "Urut naik berdasar artis asli"
+msgstr "Stigende, etter opprinnelig artist"
 
 #: ../src/bar.c:183
 msgid "Descending by original artist"
-msgstr "Urut turun berdasar artis asli"
+msgstr "Synkende, etter opprinnelig artist"
 
 #: ../src/bar.c:184
 msgid "Ascending by copyright"
-msgstr "Urut naik berdasar hak cipta"
+msgstr "Stigende, etter opphavsrett"
 
 #: ../src/bar.c:185
 msgid "Descending by copyright"
-msgstr "Urut turun berdasar hak cipta"
+msgstr "Synkende, etter opphavsrett"
 
 #: ../src/bar.c:186
 msgid "Ascending by URL"
-msgstr "Urut naik berdasar URL"
+msgstr "Stigende, etter nettadresse"
 
 #: ../src/bar.c:187
 msgid "Descending by URL"
-msgstr "Urut turun berdasar URL"
+msgstr "Synkende, etter nettadresse"
 
 #. Translators: the encoder name is supposed to be the name of a person
 #. * or organisation, but can sometimes be the name of an application.
 #: ../src/bar.c:190
 msgid "Ascending by encoder name"
-msgstr "Urut naik berdasar nama enkoder"
+msgstr "Stigende, etter kodeprogram"
 
 #. Translators: the encoder name is supposed to be the name of a person
 #. * or organisation, but can sometimes be the name of an application.
 #: ../src/bar.c:193
 msgid "Descending by encoder name"
-msgstr "Urut turun berdasar nama enkoder"
+msgstr "Synkende, etter kodeprogram"
 
 #: ../src/bar.c:194
 msgid "Ascending by file type"
-msgstr "Urut naik berdasar tipe berkas"
+msgstr "Stigende, etter filtype"
 
 #: ../src/bar.c:195
 msgid "Descending by file type"
-msgstr "Urut turun berdasar tipe berkas"
+msgstr "Synkende, etter filtype"
 
 #: ../src/bar.c:196
 msgid "Ascending by file size"
-msgstr "Urut naik berdasar ukuran berkas"
+msgstr "Stigende, etter filstørrelse"
 
 #: ../src/bar.c:197
 msgid "Descending by file size"
-msgstr "Urut turun berdasar ukuran berkas"
+msgstr "Synkende, etter filstørrelse"
 
 #: ../src/bar.c:198
 msgid "Ascending by duration"
-msgstr "Urut naik berdasar durasi"
+msgstr "Stigende, etter varighet"
 
 #: ../src/bar.c:199
 msgid "Descending by duration"
-msgstr "Urut turun berdasar durasi"
+msgstr "Synkende, etter varighet"
 
 #: ../src/bar.c:200
 msgid "Ascending by bitrate"
-msgstr "Urut naik berdasar laju bit"
+msgstr "Stigende, etter bitfrekvens"
 
 #: ../src/bar.c:201
 msgid "Descending by bitrate"
-msgstr "Urut turun berdasar laju bit"
+msgstr "Synkende, etter bitfrekvens"
 
 #: ../src/bar.c:202
 msgid "Ascending by samplerate"
-msgstr "Urut naik berdasar laju cuplik"
+msgstr "Stigende, etter sample-frekvens"
 
 #: ../src/bar.c:203
 msgid "Descending by samplerate"
-msgstr "Urut turun berdasar laju cuplik"
+msgstr "Synkende, etter sample-frekvens"
 
 #: ../src/bar.c:205
 msgid "Open Files With…"
-msgstr "Buka Berkas Dengan..."
+msgstr "Åpne filer med …"
 
 #: ../src/bar.c:206
 msgid "Run a command on the selected files"
-msgstr "Jalankan suatu perintah pada berkas-berkas yang dipilih"
+msgstr "Kjør valgte filer gjennom en kommando"
 
 #: ../src/bar.c:209
 msgid "Select all"
-msgstr "Pilih semua"
+msgstr "Velg alle"
 
 #: ../src/bar.c:210
 msgid "Unselect All"
-msgstr "Pilih Tak Satupun"
+msgstr "Velg bort alle"
 
 #: ../src/bar.c:211
 msgid "Clear the current selection"
-msgstr "Bersihkan pilihan saat ini"
+msgstr "Tøm utvalget"
 
 #: ../src/bar.c:214
 msgid "Invert File Selection"
-msgstr "Balikkan Pilihan Berkas"
+msgstr "Inverter filutvalg"
 
 #: ../src/bar.c:215
 msgid "Invert file selection"
-msgstr "Balikkan pilihan berkas"
+msgstr "Inverter filutvalg"
 
 #: ../src/bar.c:217
 msgid "Delete Files"
-msgstr "Hapus Berkas"
+msgstr "Slett filer"
 
 #: ../src/bar.c:217
 msgid "Delete files"
-msgstr "Hapus berkas"
+msgstr "Slett filer"
 
 #: ../src/bar.c:218
 msgid "_First File"
-msgstr "Berkas _Pertama"
+msgstr "_Første fil"
 
 #: ../src/bar.c:219
 msgid "First file"
-msgstr "Berkas pertama"
+msgstr "Første fil"
 
 #: ../src/bar.c:220
 msgid "_Previous File"
-msgstr "Berkas Se_belumnya"
+msgstr "_Forrige fil"
 
 #: ../src/bar.c:220
 msgid "Previous file"
-msgstr "Berkas sebelumnya"
+msgstr "Forrige fil"
 
 #: ../src/bar.c:221
 msgid "_Next File"
-msgstr "Berkas Selanjut_nya"
+msgstr "_Neste fil"
 
 #: ../src/bar.c:221
 msgid "Next file"
-msgstr "Berkas selanjutnya"
+msgstr "Neste fil"
 
 #: ../src/bar.c:222
 msgid "_Last File"
-msgstr "Berkas Ter_akhir"
+msgstr "_Siste fil"
 
 #: ../src/bar.c:223
 msgid "Last file"
-msgstr "Berkas terakhir"
+msgstr "Siste fil"
 
 #: ../src/bar.c:224
 msgid "S_can Files"
-msgstr "Pindai Berka_s"
+msgstr "S_øk gjennom filer"
 
 #: ../src/bar.c:225 ../src/scan_dialog.c:1818
 msgid "Scan selected files"
-msgstr "Pindai berkas yang dipilih"
+msgstr "Søk gjennom valgte filer"
 
 #: ../src/bar.c:226
 msgid "_Remove Tags"
-msgstr "_Hapus Tag"
+msgstr "_Fjern tagger"
 
 #: ../src/bar.c:227
 msgid "Remove tags"
-msgstr "Hapus tag"
+msgstr "Fjern tagger"
 
 #: ../src/bar.c:228
 msgid "_Undo Last Files Changes"
-msgstr "Batalkan Per_ubahan Berkas Terakhir"
+msgstr "_Angre siste filendringer"
 
 #: ../src/bar.c:229
 msgid "Undo last files changes"
-msgstr "Batalkan perubahan berkas yang terakhir"
+msgstr "Angre siste filendringer"
 
 #: ../src/bar.c:231
 msgid "R_edo Last Files Changes"
-msgstr "Jadikan Lagi Per_ubahan Berkas Terakhir"
+msgstr "G_jør om siste filendringer"
 
 #: ../src/bar.c:232
 msgid "Redo last files changes"
-msgstr "Jadikan lagi perubahan Berkas yang terakhir"
+msgstr "Gjør om siste filendringer"
 
 #: ../src/bar.c:234
 msgid "_Save Files"
-msgstr "_Simpan Berkas"
+msgstr "_Lagre filer"
 
 #: ../src/bar.c:235
 msgid "Save changes to selected files"
-msgstr "Simpan perubahan ke berkas-berkas yang dipilih"
+msgstr "Lagre endringer i valgte filer"
 
 #: ../src/bar.c:237
 msgid "_Force Save Files"
-msgstr "_Paksa Simpan Berkas"
+msgstr "_Tvungen lagring av filer"
 
 #: ../src/bar.c:238
 msgid "Force saving files"
-msgstr "Memaksa menyimpan berkas"
+msgstr "Tvungen lagring av filer"
 
 #: ../src/bar.c:240
 msgid "Undo Last Changes"
-msgstr "Batalkan Perubahan Terakhir"
+msgstr "Angre siste endringer"
 
 #: ../src/bar.c:240
 msgid "Undo last changes"
-msgstr "Batalkan perubahan terakhir"
+msgstr "Angre siste endringer"
 
 #: ../src/bar.c:241
 msgid "Redo Last Changes"
-msgstr "Jadikan Lagi Perubahan Terakhir"
+msgstr "Gjør om siste endringer"
 
 #: ../src/bar.c:241
 msgid "Redo last changes"
-msgstr "Jadikan lagi perubahan terakhir"
+msgstr "Gjør om siste endringer"
 
 #: ../src/bar.c:242
 msgid "_Quit"
-msgstr "_Keluar"
+msgstr "_Avslutt"
 
-#: ../src/bar.c:242 ../src/easytag.c:2428 ../src/easytag.c:4550
-#: ../src/easytag.c:4582
+#: ../src/bar.c:242 ../src/easytag.c:2428 ../src/easytag.c:4617
+#: ../src/easytag.c:4649
 msgid "Quit"
-msgstr "Keluar"
+msgstr "Avslutt"
 
 #: ../src/bar.c:245
 msgid "_Browser"
-msgstr "Peram_ban"
+msgstr "_Filutforsker"
 
 #: ../src/bar.c:246
 msgid "_Home Directory"
-msgstr "Direktori Ruma_h"
+msgstr "_Hjemmemappe"
 
 #: ../src/bar.c:247
 msgid "Go to home directory"
-msgstr "Ke direktori rumah"
+msgstr "GÃ¥ til hjemmemappe"
 
 #: ../src/bar.c:249
 msgid "Desktop Directory"
-msgstr "Direktori Desktop"
+msgstr "Skrivebordsmappe"
 
 #: ../src/bar.c:250
 msgid "Go to desktop directory"
-msgstr "Ke direktori desktop"
+msgstr "GÃ¥ til skrivebordsmappa"
 
 #: ../src/bar.c:252
 msgid "Documents Directory"
-msgstr "Direktori Dokumen"
+msgstr "Dokumentmappe"
 
 #: ../src/bar.c:253
 msgid "Go to documents directory"
-msgstr "Ke direktori dokumen"
+msgstr "GÃ¥ til dokumentmappa"
 
 #: ../src/bar.c:255
 msgid "Downloads Directory"
-msgstr "Direktori Unduh"
+msgstr "Nedlastinger-mappe"
 
 #: ../src/bar.c:256
 msgid "Go to downloads directory"
-msgstr "Ke direktori unduh"
+msgstr "GÃ¥ til nedlastingsmappa"
 
 #: ../src/bar.c:258
 msgid "Music Directory"
-msgstr "Direktori Musik"
+msgstr "Musikkmappe"
 
 #: ../src/bar.c:259
 msgid "Go to music directory"
-msgstr "Ke direktori musik"
+msgstr "GÃ¥ til musikkmappa"
 
 #: ../src/bar.c:261
 msgid "_Parent Directory"
-msgstr "_Direktori Induk"
+msgstr "_Foreldermappe"
 
 #: ../src/bar.c:262
 msgid "Go to parent directory"
-msgstr "Ke direktori induk"
+msgstr "GÃ¥ til foreldermappe"
 
 #: ../src/bar.c:264
 msgid "_Default Directory"
-msgstr "_Direktori Baku"
+msgstr "_Standardmappe"
 
 #: ../src/bar.c:265
 msgid "Go to default directory"
-msgstr "Ke direktori baku"
+msgstr "GÃ¥ til standardmappa"
 
 #: ../src/bar.c:267
 msgid "Set _Current Path as Default"
-msgstr "_Atur Path Saat Ini sebagai Bawaan"
+msgstr "Bruk _gjeldende filsti som standard"
 
 #: ../src/bar.c:267
 msgid "Set current path as default"
-msgstr "Atur path saat ini sebagai bawaan"
+msgstr "Bruk gjeldende filsti som standard"
 
 #: ../src/bar.c:268
 msgid "Rename Directory…"
-msgstr "Ubah Nama Direktori…"
+msgstr "Gi nytt navn til mappe …"
 
 #: ../src/bar.c:268
 msgid "Rename directory"
-msgstr "Ubah nama direktori"
+msgstr "Gi nytt navn til mappe"
 
 #: ../src/bar.c:269
 msgid "Reload Directory"
-msgstr "Muat Ulang Direktori"
+msgstr "Last inn mappa på nytt"
 
 #: ../src/bar.c:270
 msgid "Reload directory"
-msgstr "Muat ulang direktori"
+msgstr "Last inn mappa på nytt"
 
 #: ../src/bar.c:273
 msgid "Browse Directory With…"
-msgstr "Ramban Direktori Dengan…"
+msgstr "Utforsk mappa med …"
 
 #: ../src/bar.c:274
 msgid "Run a command on the directory"
-msgstr "Jalankan suatu perintah pada direktori"
+msgstr "Kjør en kommando i mappa"
 
 #: ../src/bar.c:276
 msgid "_Collapse Tree"
-msgstr "_Lipat Pohon"
+msgstr "_Fold sammen trevisninga"
 
 #: ../src/bar.c:277
 msgid "Collapse directory tree"
-msgstr "Lipat pohon direktori"
+msgstr "Fold sammen mappetreet"
 
 #: ../src/bar.c:278
 msgid "_Reload Tree"
-msgstr "_Muat Ulang Pohon"
+msgstr "_Last inn treet på nytt"
 
 #: ../src/bar.c:279
 msgid "Reload directory tree"
-msgstr "Muat ulang pohon direktori"
+msgstr "Last inn mappetreet på nytt"
 
 #: ../src/bar.c:282
 msgid "S_canner Mode"
-msgstr "Mode _Pemindai"
+msgstr "S_kannermodus"
 
 #: ../src/bar.c:284
 msgid "_Miscellaneous"
-msgstr "_Rupa-rupa"
+msgstr "_Diverse"
 
 #: ../src/bar.c:285
 msgid "_Find…"
-msgstr "_Cari…"
+msgstr "_Finn …"
 
 #: ../src/bar.c:286
 msgid "Search filenames and tags"
-msgstr "Cari nama berkas dan tag"
+msgstr "Søk i filnavn og tagger"
 
 #: ../src/bar.c:288
 msgid "CDD_B Search…"
-msgstr "Pencarian CDD_B…"
+msgstr "CDD_B-søk …"
 
 #: ../src/bar.c:289
 msgid "CDDB search"
-msgstr "Pencarian CDDB"
+msgstr "CDDB-søk …"
 
 #: ../src/bar.c:291
 msgid "Load Filenames From a Text File…"
-msgstr "Muat Nama-nama Berkas Dari Berkas Teks..."
+msgstr "Last inn filnavn fra en tekstfil …"
 
 #: ../src/bar.c:292
 msgid "Load filenames from a text file"
-msgstr "Muat nama berkas dari suatu berkas teks"
+msgstr "Last inn filnavn fra en tekstfil"
 
 #: ../src/bar.c:294
 msgid "Generate Playlist…"
-msgstr "Buat Daftar Putar..."
+msgstr "Lag en spilleliste …"
 
 #: ../src/bar.c:295
 msgid "Generate a playlist"
-msgstr "Membuat suatu daftar putar"
+msgstr "Lag en spilleliste"
 
 #: ../src/bar.c:297 ../src/bar.c:328 ../src/bar.c:329 ../src/bar.c:330
 msgid "Run Audio Player"
-msgstr "Jalankan Pemutar Audio"
+msgstr "Kjør lydavspiller"
 
 #: ../src/bar.c:298 ../src/bar.c:328 ../src/bar.c:329 ../src/bar.c:330
 msgid "Run audio player"
-msgstr "Menjalankan pemutar audio"
+msgstr "Kjør lydavspiller"
 
 #: ../src/bar.c:301
 msgid "_Edit"
-msgstr "_Sunting"
+msgstr "_Rediger"
 
 #: ../src/bar.c:302
 msgid "_Preferences"
-msgstr "_Preferensi"
+msgstr "_Innstillinger"
 
 #. The window
 #: ../src/bar.c:303 ../src/prefs.c:110
 msgid "Preferences"
-msgstr "Preferensi"
+msgstr "Innstillinger"
 
 #: ../src/bar.c:305
 msgid "_View"
-msgstr "_Tilik"
+msgstr "_Vis"
 
 #: ../src/bar.c:306
 msgid "_Go"
-msgstr ""
+msgstr "_GÃ¥"
 
 #: ../src/bar.c:308
 msgid "_Help"
-msgstr "Ba_ntuan"
+msgstr "_Hjelp"
 
 #: ../src/bar.c:311
 msgid "_Contents"
-msgstr "_Isi"
+msgstr "_Innhold"
 
 #: ../src/bar.c:312
 msgid "Show help"
-msgstr "Tampilkan bantuan"
+msgstr "Vis hjelp"
 
 #: ../src/bar.c:314
 msgid "_About"
-msgstr "Tent_ang"
+msgstr "_Om"
 
 #: ../src/bar.c:314
 msgid "About"
-msgstr "Tentang"
+msgstr "Om"
 
 #.
 #. * Following items are on toolbar but not on menu
 #.
 #: ../src/bar.c:320
 msgid "Stop the current action"
-msgstr "Hentikan aksi saat ini"
+msgstr "Avbryt pågående handling"
 
 #.
 #. * Popup menu's Actions
 #.
 #: ../src/bar.c:326
 msgid "_File Operations"
-msgstr "Operasi _Berkas"
+msgstr "_Filhandlinger"
 
 #: ../src/bar.c:327
 msgid "S_canner"
-msgstr "Pe_mindai"
+msgstr "S_kanner"
 
 #: ../src/bar.c:331
 msgid "CDDB Search Files…"
-msgstr "Cari Berkas CDDB…"
+msgstr "Søk etter filene på CDDB …"
 
 #: ../src/bar.c:331
 msgid "CDDB search files…"
-msgstr "Cari berkas CDDB…"
+msgstr "Søk etter filene på CDDB …"
 
 #. { AM_ARTIST_OPEN_FILE_WITH,     GTK_STOCK_OPEN,    _("Open File(s) with…"),     NULL, _("Open File(s) with…"),     G_CALLBACK(Browser_Open_Run_Program_List_Window??? Browser_Open_Run_Program_Tree_Window???) },
 #. { AM_ALBUM_OPEN_FILE_WITH,      GTK_STOCK_OPEN,    _("Open File(s) with…"),     NULL, _("Open File(s) with…"),     G_CALLBACK(Browser_Open_Run_Program_List_Window??? Browser_Open_Run_Program_Tree_Window???) },
 #: ../src/bar.c:335
 msgid "Clear log"
-msgstr "Bersihkan log"
+msgstr "Tøm logg"
 
 #. { AM_BROWSE_SUBDIR,      GTK_STOCK_INDEX,        _("Browse _Subdirectories"),                         NULL, _("Browse _Sub-directories"),                         NULL,                                    FALSE },
 #: ../src/bar.c:342
 msgid "Browse _Subdirectories"
-msgstr "Ramban _Subdirektori"
+msgstr "Søk gjennom _undermapper"
 
 #: ../src/bar.c:342
 msgid "Browse subdirectories"
-msgstr "Meramban subdirektori"
+msgstr "Søk gjennom undermapper"
 
 #: ../src/bar.c:346
 msgid "Show Hidden Directories"
-msgstr "Tampilkan Direktori Tersembunyi"
+msgstr "Vis skjulte mapper"
 
 #: ../src/bar.c:346
 msgid "Show hidden directories"
-msgstr "Tampilkan direktori-direktori yang tersembunyi"
+msgstr "Vis skjulte mapper"
 
 #: ../src/bar.c:348
 msgid "_Show Scanner"
-msgstr "_Tampilkan Pemindai"
+msgstr "_Vis skanner"
 
 #: ../src/bar.c:349
 msgid "Show scanner"
-msgstr "Tampilkan pemindai"
+msgstr "Vis skanner"
 
 #: ../src/bar.c:355
 msgid "Tree Browser"
-msgstr "Peramban Pohon"
+msgstr "Trevisning"
 
 #: ../src/bar.c:356
 msgid "View by directory tree"
-msgstr "Tilik menurut pohon direktori"
+msgstr "Vis etter mappetre"
 
 #: ../src/bar.c:358
 msgid "Artist and Album"
-msgstr "Artis dan album"
+msgstr "Artist og album"
 
 #: ../src/bar.c:359
 msgid "View by artist and album"
-msgstr "Tilik menurut artis dan album"
+msgstr "Vis etter artist og album"
 
 #: ../src/bar.c:364
 msgid "_Fill Tags…"
-msgstr "_Penuhi Tag…"
+msgstr "_Fyll inn tagger …"
 
 #: ../src/bar.c:365
 msgid "Fill tags"
-msgstr "Penuhi tag"
+msgstr "Fyll inn tagger"
 
 #: ../src/bar.c:367
 msgid "_Rename Files and Directories…"
-msgstr "Ubah Nama Berkas dan Di_rektori…"
+msgstr "_Gi nytt navn til filer og mapper …"
 
 #: ../src/bar.c:368
 msgid "Rename files and directories"
-msgstr "Ubah nama-nama berkas dan direktori"
+msgstr "Gi nytt navn til filer og mapper"
 
 #: ../src/bar.c:370
 msgid "_Process Fields…"
-msgstr "_Proses Ruas…"
+msgstr "_Behandle felt …"
 
 #: ../src/bar.c:370 ../src/scan_dialog.c:184
 msgid "Process Fields"
-msgstr "Proses ruas"
+msgstr "Behandle felt"
 
 #: ../src/bar.c:428
 #, c-format
 msgid "Could not merge UI, error was: %s\n"
-msgstr "Tak dapat menggabung UI, galat: %s\n"
+msgstr "Klarte ikke å slå sammen UI. Feilen var: %s\n"
 
 #: ../src/bar.c:533
 msgid "Ready to start"
-msgstr "Siap memulai"
+msgstr "Klar til å begynne"
 
 #: ../src/browser.c:376
 msgid "New default path for files selected"
-msgstr "Dipilih path baku baru bagi berkas"
+msgstr "Ny standardfilsti for filer er valgt"
 
-#: ../src/browser.c:678 ../src/easytag.c:4546
+#: ../src/browser.c:678 ../src/easytag.c:4613
 msgid "Some files have been modified but not saved"
-msgstr "Beberapa berkas telah diubah tapi tak disimpan"
+msgstr "Noen filer er markert for endringer, men endringene er ikke lagret"
 
 #: ../src/browser.c:679
 msgid "Do you want to save them before changing the directory?"
-msgstr "Apakah Anda ingin menyimpan mereka sebelum mengubah direktori?"
+msgstr "Vil du lagre dem før du bytter mappe?"
 
 #: ../src/browser.c:683
 msgid "Confirm Directory Change"
-msgstr "Konfirmasikan Perubahan Direktori"
+msgstr "Bekreft hopp til annen mappe"
 
 #: ../src/browser.c:2244
 msgid "<All albums>"
-msgstr "<Semua album>"
+msgstr "<Alle album>"
 
 #: ../src/browser.c:2707
 #, c-format
 msgid "Error: Searching for %s, could not find node %s in tree."
-msgstr "Galat: Mencari %s, tak bisa temukan node %s dalam pohon."
+msgstr "Feil: Ved søk etter «%s» ble ikke noden «%s» funnet i treet."
 
 #: ../src/browser.c:3201 ../src/browser.c:3279
 msgid "Tree"
-msgstr "Pohon"
+msgstr "Trevisning"
 
 #: ../src/browser.c:3202 ../src/cddb.c:803 ../src/misc.c:1903
 msgid "Filename"
-msgstr "Nama berkas"
+msgstr "Filnavn"
 
 #: ../src/browser.c:3202 ../src/cddb.c:804 ../src/misc.c:1904
 #: ../src/prefs.c:643
 msgid "Title"
-msgstr "Judul"
+msgstr "Tittel"
 
 #. Translators: This option is for the previous 'search in' option. For
 #. * instance, translate this as "Search in:" "Artist".
 #: ../src/browser.c:3203 ../src/browser.c:3210 ../src/cddb.c:483
 #: ../src/cddb.c:805 ../src/misc.c:1905 ../src/prefs.c:644
 msgid "Artist"
-msgstr "Artis"
+msgstr "Artist"
 
 #: ../src/browser.c:3203 ../src/misc.c:1906
 msgid "Album Artist"
-msgstr "Artis Album"
+msgstr "Albumartist"
 
 #. Translators: This option is for the previous 'search in' option. For
 #. * instance, translate this as "Search in:" "Album".
@@ -796,169 +796,168 @@ msgstr "Album"
 
 #: ../src/browser.c:3204 ../src/cddb.c:807 ../src/misc.c:1909
 msgid "Year"
-msgstr "Tahun"
+msgstr "Ã…r"
 
 #: ../src/browser.c:3204
 msgid "Disc"
-msgstr "Diska"
+msgstr "Plate"
 
 #: ../src/browser.c:3205 ../src/misc.c:1910
 msgid "Track"
-msgstr "Trek"
+msgstr "Spor"
 
 #: ../src/browser.c:3205 ../src/cddb.c:810 ../src/misc.c:1911
 #: ../src/prefs.c:646
 msgid "Genre"
-msgstr "Aliran"
+msgstr "Sjanger"
 
 #: ../src/browser.c:3206 ../src/misc.c:1912 ../src/prefs.c:647
 msgid "Comment"
-msgstr "Komentar"
+msgstr "Kommentar"
 
 #: ../src/browser.c:3206 ../src/misc.c:1913 ../src/picture.c:884
 #: ../src/prefs.c:648
 msgid "Composer"
-msgstr "Komposer"
+msgstr "Komponist"
 
 #: ../src/browser.c:3207 ../src/misc.c:1914
 msgid "Original Artist"
-msgstr "Artis Asli"
+msgstr "Opprinnelig artist"
 
 #: ../src/browser.c:3208 ../src/misc.c:1915
 msgid "Copyright"
-msgstr "Hak Cipta"
+msgstr "Opphavsrett"
 
 #: ../src/browser.c:3208 ../src/misc.c:1916
 msgid "URL"
-msgstr "URL"
+msgstr "Nettadresse"
 
 #: ../src/browser.c:3209 ../src/misc.c:1917
 msgid "Encoded By"
-msgstr "Dienkode Oleh"
+msgstr "Kodet av"
 
 #: ../src/browser.c:3210
 msgid "# Albums"
-msgstr "# Album"
+msgstr "# album"
 
 #: ../src/browser.c:3211 ../src/browser.c:3212
 msgid "# Files"
-msgstr "# Berkas"
+msgstr "# filer"
 
 #: ../src/browser.c:3237
 msgid "Enter a directory to browse."
-msgstr "Masukkan direktori yang akan diramban."
+msgstr "Skriv inn en mappe som skal utforskes."
 
 #: ../src/browser.c:3246
 msgid "Select a directory to browse."
-msgstr "Pilih direktori yang akan diramban."
+msgstr "Velg en mappe som skal utforskes."
 
 #.
 #. * The label for displaying number of files in path (without subdirs)
 #.
 #. Translators: No files, as in "0 files".
-#: ../src/browser.c:3253 ../src/easytag.c:3454
+#: ../src/browser.c:3253 ../src/easytag.c:3521
 msgid "No files"
-msgstr "Tak ada berkas"
+msgstr "Ingen filer"
 
 #: ../src/browser.c:3331
 msgid "Artist & Album"
-msgstr "Artis & Album"
+msgstr "Artist & album"
 
 #. Only directories changed
 #: ../src/browser.c:3696 ../src/easytag.c:2879
 msgid "Rename Directory"
-msgstr "Ubah Nama Direktori"
+msgstr "Gi nytt navn til mappa"
 
 #: ../src/browser.c:3718
 #, c-format
 msgid "Rename the directory '%s' to:"
-msgstr "Ubah nama direktori '%s' menjadi:"
+msgstr "Endre navnet på mappa «%s» til:"
 
 #: ../src/browser.c:3737 ../src/misc.c:1172
-#, fuzzy
 msgid "Use mask:"
-msgstr "Mask Subnet:"
+msgstr "Bruk maske:"
 
 #: ../src/browser.c:3740
 msgid "If activated, it will use masks to rename directory."
-msgstr "Bila diaktifkan, itu akan memakai mask untuk mengubah nama direktori."
+msgstr "Hvis dette er aktivert, får mappa nytt navn i henhold til en maske."
 
 #: ../src/browser.c:3758
 msgid ""
 "Select or type in a mask using codes (see Legend in Scanner Window) to "
 "rename the directory from tag fields."
 msgstr ""
-"Pilih atau ketikkan masker memakai kode (lihat Legenda dalam Jendela "
-"Pemindai) untuk mengubah nama direktori dari ruas tag."
+"Velg eller skriv inn en maske ved å bruke koder (se Forklaring i "
+"skannervinduet) for å gi mappa nytt navn i henhold til taggefeltene."
 
 #. Preview label
 #: ../src/browser.c:3782
 msgid "Rename directory preview"
-msgstr "Pratinjau ubah nama direktori"
+msgstr "Forhåndsvis nytt mappenavn"
 
 #: ../src/browser.c:3874
 msgid "You must type a directory name"
-msgstr "Anda mesti mengetikkan suatu nama direktori"
+msgstr "Du må skrive inn et mappenavn"
 
 #: ../src/browser.c:3875 ../src/browser.c:3896
 msgid "Directory Name Error"
-msgstr "Galat Nama Direktori"
+msgstr "Feil i mappenavn"
 
 #: ../src/browser.c:3893
 #, c-format
 msgid "Could not convert '%s' into filename encoding."
-msgstr "Tak bisa mengonversi '%s' ke dalam pengodean nama berkas."
+msgstr "Klarte ikke å konvertere «%s» til noe som kan brukes i filnavn."
 
 #: ../src/browser.c:3895
 msgid "Please use another name"
-msgstr "Silakan pakai nama lain"
+msgstr "Bruk et annet navn"
 
 #: ../src/browser.c:3965
 #, c-format
 msgid "The directory name '%s' already exists"
-msgstr "Nama direktori '%s' sudah ada"
+msgstr "Mappenavnet «%s» finnes allerede"
 
 #: ../src/browser.c:3966 ../src/easytag.c:2962
 msgid "Rename File Error"
-msgstr "Galat Pengubahan Nama Berkas"
+msgstr "Feil ved navneendring av fil"
 
 #: ../src/browser.c:4004 ../src/browser.c:4033
 msgid "Rename Directory Error"
-msgstr "Galat Pengubahan Nama Direktori"
+msgstr "Feil ved navneendring av mappe"
 
 #: ../src/browser.c:4071
 msgid "Directory renamed"
-msgstr "Direktori diubah nama"
+msgstr "Mappe har fått nytt navn"
 
 #: ../src/browser.c:4107
 msgid "Browse Directory With"
-msgstr "Ramban Direktori Dengan"
+msgstr "Utforsk mappe med"
 
 #: ../src/browser.c:4123 ../src/browser.c:4249
 msgid "Program to run:"
-msgstr "Program yang akan dijalankan:"
+msgstr "Program som skal kjøres:"
 
 #: ../src/browser.c:4135
 msgid ""
 "Enter the program to run. It will receive the current directory as parameter."
 msgstr ""
-"Masukkan nama program yang akan dijalankan. Itu akan menerima direktori saat "
-"ini sebagai parameter."
+"Skriv navnet på programmet som skal kjøres. Gjeldende mappe blir brukt som "
+"parameter."
 
 #: ../src/browser.c:4229
 msgid "Open Files With"
-msgstr "Buka Berkas Dengan"
+msgstr "Ã…pne filer med"
 
 #: ../src/browser.c:4261
 msgid ""
 "Enter the program to run. It will receive the current file as parameter."
 msgstr ""
-"Masukkan nama program yang akan dijalankan. Itu akan menerima berkas saat "
-"ini sebagai parameter."
+"Skriv navnet på programmet som skal kjøres. Gjeldende fil blir brukt som "
+"parameter."
 
 #: ../src/cddb.c:313
 msgid "Artist / Album"
-msgstr "Artis / Album"
+msgstr "Artist / album"
 
 #: ../src/cddb.c:313
 msgid "Category"
@@ -969,91 +968,91 @@ msgstr "Kategori"
 #. * instance, translate this as "Search in:" "Track Name".
 #: ../src/cddb.c:314 ../src/cddb.c:489
 msgid "Track Name"
-msgstr "Nama Trek"
+msgstr "Spornavn"
 
 #: ../src/cddb.c:314
 msgid "Duration"
-msgstr "Durasi"
+msgstr "Varighet"
 
 #: ../src/cddb.c:326
 msgid "CDDB Search"
-msgstr "Pencarian CDDB"
+msgstr "CDDB-søk"
 
 #.
 #. * 1 - Page for automatic search (generate the CDDBId from files)
 #.
 #: ../src/cddb.c:346
 msgid "Automatic Search"
-msgstr "Pencarian Otomatis"
+msgstr "Automatisk søk"
 
 #: ../src/cddb.c:356
 msgid "Request CDDB"
-msgstr "Permintaan CDDB"
+msgstr "Spør CDDB"
 
 #: ../src/cddb.c:366
 msgid ""
 "Request automatically the CDDB using the selected files (the order is "
 "important) to generate the CddbID"
 msgstr ""
-"Minta CDDB secara otomatis memakai berkas yang dipilih (urutan penting) "
-"untuk membuat CddbID"
+"Spør CDDB automatisk om de valgte filene (rekkefølgen er viktig) for å lage "
+"CddbID"
 
 #: ../src/cddb.c:377 ../src/cddb.c:457
 msgid "Stop the search"
-msgstr "Hentikan pencarian"
+msgstr "Avbryt søket"
 
 #. Check box to run the scanner
 #: ../src/cddb.c:384
 msgid "Use local CDDB"
-msgstr "Pakai CDDB lokal"
+msgstr "Bruk lokal CDDB"
 
 #: ../src/cddb.c:387 ../src/cddb.c:850
 msgid ""
 "When activating this option, after loading the fields, the current selected "
 "scanner will be ran (the scanner window must be opened)."
 msgstr ""
-"Ketika mengaktifkan opsi ini, setelah memuat ruas, pemindai yang saat ini "
-"dipilih akan dijalankan (jendela pemindai mesti dibuka)."
+"Når du slår på dette valget, kjøres valgt skanner (skannervinduet må være "
+"Ã¥pent) etter at feltene er lastet inn."
 
 #.
 #. * 2 - Page for manual search
 #.
 #: ../src/cddb.c:404
 msgid "Manual Search"
-msgstr "Pencarian Manual"
+msgstr "Manuelt søk"
 
 #: ../src/cddb.c:416
 msgid "Words:"
-msgstr "Kata:"
+msgstr "Ord:"
 
 #: ../src/cddb.c:429
 msgid "Enter the words to search (separated by a space or '+')"
-msgstr "Masukkan kata-kata yang akan dicari (dipisah dengan spasi atau '+')"
+msgstr "Skriv inn ordene du vil søke etter (adskilt med mellomrom eller «+»)"
 
 #.
 #. * Search options
 #.
 #: ../src/cddb.c:469
 msgid "Search In:"
-msgstr "Cari Di:"
+msgstr "Søk i:"
 
 #. Translators: This option is for the previous 'search in' option. For
 #. * instance, translate this as "Search in:" "All fields".
 #: ../src/cddb.c:479
 msgid "All Fields"
-msgstr "Semua Ruas"
+msgstr "Alle felt"
 
 #. Translators: This option is for the previous 'search in' option. For
 #. * instance, translate this as "Search in:" "Other".
 #: ../src/cddb.c:492 ../src/picture.c:862 ../src/prefs.c:807
 msgid "Other"
-msgstr "Lainnya"
+msgstr "Annet"
 
 #. Translators: This option is for the previous 'search in' option. For
 #. * instance, translate this as "Search in:" "All Categories".
 #: ../src/cddb.c:516
 msgid "All Categories"
-msgstr "Semua Kategori"
+msgstr "Alle kategorier"
 
 #. Translators: This option is for the previous 'search in' option. For
 #. * instance, translate this as "Search in:" "Blues".
@@ -1065,13 +1064,13 @@ msgstr "Blues"
 #. * instance, translate this as "Search in:" "Classical".
 #: ../src/cddb.c:523
 msgid "Classical"
-msgstr "Klasik"
+msgstr "Klassisk"
 
 #. Translators: This option is for the previous 'search in' option. For
 #. * instance, translate this as "Search in:" "Country".
 #: ../src/cddb.c:526
 msgid "Country"
-msgstr "Country"
+msgstr "Land"
 
 #. Translators: This option is for the previous 'search in' option. For
 #. * instance, translate this as "Search in:" "Folk".
@@ -1089,7 +1088,7 @@ msgstr "Jazz"
 #. * instance, translate this as "Search in:" "Misc".
 #: ../src/cddb.c:535
 msgid "Misc."
-msgstr "Rupa-rupa"
+msgstr "Div."
 
 #. Translators: This option is for the previous 'search in' option. For
 #. * instance, translate this as "Search in:" "New age".
@@ -1117,61 +1116,59 @@ msgstr "Soundtrack"
 
 #: ../src/cddb.c:587
 msgid "included: funk, soul, rap, pop, industrial, metal, etc."
-msgstr "disertakan: funk, soul, rap, pop, industrial, metal, dsb."
+msgstr "inkludert: funk, soul, rap, pop, industrial, metal, etc."
 
 #: ../src/cddb.c:588
 msgid "movies, shows"
-msgstr "film, pertunjukan"
+msgstr "filmer, serier"
 
 #: ../src/cddb.c:589
 msgid "others that do not fit in the above categories"
-msgstr "lainnya yang tak masuk ke kategori di atas"
+msgstr "annet som ikke passer inn i overnevnte kategorier"
 
 #. Button to display/hide the categories
 #: ../src/cddb.c:592
 msgid "Categories"
-msgstr "Kategori"
+msgstr "Kategorier"
 
 #.
 #. * Results command
 #.
 #: ../src/cddb.c:600
 msgid "Results:"
-msgstr "Hasil:"
+msgstr "Resultater:"
 
 #: ../src/cddb.c:606 ../src/misc.c:1951
 msgid "Search:"
-msgstr "Cari:"
+msgstr "Søk:"
 
 #: ../src/cddb.c:620
 msgid "Enter the words to search in the list below"
-msgstr "Masukkan kata-kata yang akan dicari dalam daftar di bawah"
+msgstr "Skriv inn ordene du vil søke etter i lista nedenfor"
 
 #: ../src/cddb.c:632
 msgid "Search Next"
-msgstr "Cari Selanjutnya"
+msgstr "Søk etter neste"
 
 #: ../src/cddb.c:638
 msgid "Search Previous"
-msgstr "Cari Sebelumnya"
+msgstr "Søk etter forrige"
 
 #: ../src/cddb.c:649
 msgid "Show only red lines (or show all lines) in the 'Artist / Album' list"
-msgstr ""
-"Hanya tampilkan baris merah (atau tampilkan semua baris) dalam daftar "
-"'Artis / Album'"
+msgstr "Bare vis røde linjer (eller alle linjer) i «Artist / album»-lista"
 
 #: ../src/cddb.c:655
 msgid "Unselect all lines"
-msgstr "Tak pilih baris manapun"
+msgstr "Velg bort alle linjer"
 
 #: ../src/cddb.c:661
 msgid "Invert lines selection"
-msgstr "Balikkan pilihan baris"
+msgstr "Inverter linjeutvalg"
 
 #: ../src/cddb.c:670
 msgid "Select all lines"
-msgstr "Pilih semua baris"
+msgstr "Velg alle linjer"
 
 #: ../src/cddb.c:788
 msgid ""
@@ -1179,39 +1176,39 @@ msgid ""
 "no line is selected.\n"
 "You can also reorder lines in this list before using 'apply' button."
 msgstr ""
-"Pilih baris yang akan 'diterapkan' ke daftar berkas Anda. Semua baris akan "
-"diproses bila tak ada baris yang dipilih.\n"
-"Anda juga dapat mengatur ulang baris dalam daftar ini sebelum memakai tombol "
-"'terapkan'."
+"Velg linjer som skal «brukes» på fillista. Alle linjer blir behandlet hvis "
+"du ikke velger noen linjer.\n"
+"Du kan også omorganisere linjer i denne lista før du trykker på «bruk»-"
+"knappen."
 
 #.
 #. * Apply results to fields...
 #.
 #: ../src/cddb.c:795
 msgid "Set Into:"
-msgstr "Menjadi:"
+msgstr "Velg dette for:"
 
 #: ../src/cddb.c:801
 msgid "All"
-msgstr "Semua"
+msgstr "Alle"
 
 #: ../src/cddb.c:808
 msgid "Track #"
-msgstr "Trek #"
+msgstr "Spor #"
 
 #: ../src/cddb.c:809
 msgid "# Tracks"
-msgstr "# Trek"
+msgstr "# spor"
 
 #. Check box to run the scanner
 #: ../src/cddb.c:847 ../src/misc.c:2992
 msgid "Run the current scanner for each file"
-msgstr "Jalankan pemindai saat ini bagi setiap berkas"
+msgstr "Kjør gjeldende skanner på hver fil"
 
 #. Check box to use DLM (also used in the preferences window)
 #: ../src/cddb.c:854
 msgid "Match lines with the Levenshtein algorithm"
-msgstr "Cocokkan baris dengan algoritma Levenshtein"
+msgstr "Finn linjer som passer sammen med Levenshtein-algoritmen"
 
 #. Doesn't activate it by default because if the new user don't pay attention to it,
 #. it will not understand why the cddb results aren't loaded correctly...
@@ -1224,88 +1221,86 @@ msgid ""
 "used when selecting the corresponding audio file, or applying CDDB results, "
 "instead of using directly the position order."
 msgstr ""
-"Ketika mengaktifkan opsi ini, algoritma Levenshtein (DLM: Damerau-"
-"Levenshtein Metric) akan dipakai untuk mencocokkan judul CDDB terhadap "
-"setiap nama berkas dalam folder saat ini, dan untuk memilih kecocokan "
-"terbaik. Ini akan dipakai ketika memilih berkas audio yang bersesuaian, atau "
-"menerapkan hasil CDDB, sebagai ganti memakai secara langsung urutan posisi."
+"Når du slår på dette valget, brukes Levenshtein-algoritmen (DLM: Damerau-"
+"Levenshtein Metric) til å koble CDDB-tittelen med hvert filnavn i gjeldende "
+"mappe, og til å velge hvilket treff som passer best. Dette brukes når du "
+"velger hvilken lydfil det gjelder eller når du tar i bruk CDDB-resultater, i "
+"stedet for å bruke posisjonsrekkefølgen direkte."
 
 #: ../src/cddb.c:871
 msgid "Load the selected lines or all lines (if no line selected)."
-msgstr ""
-"Muat baris-baris yang dipilih atau semua baris (bila tak ada baris yang "
-"dipilih)"
+msgstr "Last inn valgte linjer, evt. alle linjer hvis ingen er valgt."
 
 #: ../src/cddb.c:881
 msgid "Ready to search"
-msgstr "Siap mencari"
+msgstr "Klar til å søke"
 
 #: ../src/cddb.c:1352
 #, c-format
 msgid ""
 "Album: '%s', artist: '%s', length: '%s', year: '%s', genre: '%s', ID: '%s'"
 msgstr ""
-"Album: '%s', artis: '%s', panjang: '%s', tahun: '%s', aliran: '%s', ID: '%s'"
+"Album: «%s», artist: «%s», varighet: «%s», år: «%s», sjanger: «%s», ID: «%s»"
 
 #: ../src/cddb.c:1588
 #, c-format
 msgid "Resolving host '%s'…"
-msgstr "Mengurai host ‘%s’…"
+msgstr "Slår opp vertsnavnet «%s» …"
 
 #: ../src/cddb.c:1629
 #, c-format
 msgid "Cannot create a new socket (%s)"
-msgstr "Tak dapat membuat soket baru (%s)"
+msgstr "Klarte ikke å lage en ny nokkel (%s)"
 
 #: ../src/cddb.c:1643
 msgid "Cannot set options on the newly-created socket"
-msgstr "Tak bisa menata opsi pada soket yang baru saja dibuat"
+msgstr "Klarte ikke å foreta valg på sokkelen som nettopp ble satt opp"
 
 #. Open connection to the server.
 #: ../src/cddb.c:1647
 #, c-format
 msgid "Connecting to host '%s', port '%d'…"
-msgstr "Menyambung ke host ‘%s’, port ‘%d’…"
+msgstr "Kobler til verten «%s», port %d …"
 
 #: ../src/cddb.c:1660
 #, c-format
 msgid "Cannot connect to host '%s' (%s)"
-msgstr "Tak dapat menyambung ke host ‘%s’ (%s)"
+msgstr "Klarte ikke å koble til verten «%s» (%s)"
 
 #: ../src/cddb.c:1684
 #, c-format
 msgid "Cannot resolve host '%s' (%s)"
-msgstr "Tak dapat mengurai host ‘%s’ (%s)"
+msgstr "Klarte ikke å gjøre oppslag på vertsnavnet «%s» (%s)"
 
 #: ../src/cddb.c:1697
 #, c-format
 msgid "Connected to host '%s'"
-msgstr "Terhubung ke host '%s'"
+msgstr "Koblet til vert «%s»"
 
 #: ../src/cddb.c:1778
 #, c-format
 msgid "Error while writing CDDB results to file '%s'"
-msgstr "Galat saat menulis hasil CDDB ke berkas '%s'"
+msgstr "Det oppstod en feil ved skriving av resultater fra CDDB til fila «%s»"
 
 #: ../src/cddb.c:1789
 #, c-format
 msgid "Receiving data (%s)…"
-msgstr "Sedang menerima data (%s)…"
+msgstr "Mottar data (%s) …"
 
 #: ../src/cddb.c:1801
 #, c-format
 msgid "Error when reading CDDB response (%s)"
-msgstr "Galat saat membaca respon CDDB (%s)"
+msgstr "Det oppstod en feil ved lesing av svar fra CDDB (%s)"
 
 #: ../src/cddb.c:1808
 #, c-format
 msgid "Cannot create file '%s' (%s)"
-msgstr "Tak dapat membuat berkas '%s' (%s)"
+msgstr "Klarte ikke å lage fila «%s» (%s)"
 
 #: ../src/cddb.c:1849 ../src/setting.c:1256
 #, c-format
 msgid "Cannot open file '%s' (%s)"
-msgstr "Tak dapat membuka berkas '%s' (%s)"
+msgstr "Klarte ikke å åpne fila «%s» (%s)"
 
 #. g_print("Request Cddb_Search_Album_List_From_String_Freedb : '%s'\n", cddb_in);
 #. Send the request
@@ -1315,12 +1310,12 @@ msgstr "Tak dapat membuka berkas '%s' (%s)"
 #. Send the request
 #: ../src/cddb.c:2362 ../src/cddb.c:2693 ../src/cddb.c:3568
 msgid "Sending request…"
-msgstr "Sedang mengirim permintaan…"
+msgstr "Sender forespørsel …"
 
 #: ../src/cddb.c:2366 ../src/cddb.c:2697 ../src/cddb.c:3267 ../src/cddb.c:3572
 #, c-format
 msgid "Cannot send the request (%s)"
-msgstr "Tak dapat mengirim permintaan (%s)"
+msgstr "Klarte ikke å sende forespørselen (%s)"
 
 #.
 #. * Read the answer
@@ -1328,251 +1323,252 @@ msgstr "Tak dapat mengirim permintaan (%s)"
 #. Read the answer
 #: ../src/cddb.c:2393 ../src/cddb.c:3281 ../src/cddb.c:3581
 msgid "Receiving data…"
-msgstr "Sedang menerima data…"
+msgstr "Mottar data …"
 
 #: ../src/cddb.c:2400 ../src/cddb.c:2726 ../src/cddb.c:3288 ../src/cddb.c:3588
 msgid "The server returned a bad response"
-msgstr "Server mengembalikan respon yang buruk"
+msgstr "Tjeneren sendte en negativ responskode"
 
 #: ../src/cddb.c:2414 ../src/cddb.c:2742 ../src/cddb.c:3303 ../src/cddb.c:3605
 #: ../src/cddb.c:3620
 #, c-format
 msgid "The server returned a bad response: %s"
-msgstr "Server mengembalikan respon yang buruk: %s"
+msgstr "Tjeneren sendte en negativ responskode: %s"
 
 #: ../src/cddb.c:2561
 #, c-format
 msgid "Sorry, the web-based search is currently not available"
-msgstr "Maaf, pencarian berbasis web saat ini tak tersedia"
+msgstr "Nettbasert søk er ikke tilgjengelig for øyeblikket"
 
 #: ../src/cddb.c:2563 ../src/cddb.c:2913
 #, c-format
 msgid "Found one matching album"
 msgid_plural "Found %d matching albums"
-msgstr[0] "Menemukan %d album yang cocok"
+msgstr[0] "Fant ett album som samsvarer"
+msgstr[1] "Fant %d album som samsvarer"
 
 #: ../src/cddb.c:2714
-#, fuzzy, c-format
+#, c-format
 msgid "Receiving data of page %d (album %d/%d)…"
-msgstr "album yang berisi data ini"
+msgstr "Mottar data om side %d (album %d/%d) …"
 
 #: ../src/cddb.c:2716
-#, fuzzy, c-format
+#, c-format
 msgid "Receiving data of page %d…"
-msgstr "Jaringan sedang menerima data."
+msgstr "Mottar data om side %d …"
 
 #: ../src/cddb.c:2880
 #, c-format
 msgid "More results to load…"
-msgstr "Lebih banyak hasil untuk dimuat..."
+msgstr "Flere resultater å laste inn …"
 
 #: ../src/cddb.c:3009
 #, c-format
 msgid "No file selected"
-msgstr "Tak ada berkas yang dipilih"
+msgstr "Ingen fil er valgt"
 
 #. The CD redbook standard defines the maximum number of tracks as 99, any
 #. queries with more than 99 tracks will never return a result.
 #: ../src/cddb.c:3017
 #, c-format
 msgid "More than 99 files selected. Cannot send request"
-msgstr "Lebih dari 99 berkas dipilih. Tak bisa mengirim permintaan"
+msgstr "Du har valgt flere enn 99 filer. Forespørselen kan ikke sendes"
 
 #: ../src/cddb.c:3023
 #, c-format
 msgid "One file selected"
 msgid_plural "%d files selected"
-msgstr[0] "%d berkas dipilih"
+msgstr[0] "Én fil valgt"
+msgstr[1] "%d filer valgt"
 
 #: ../src/cddb.c:3107
 msgid "The path for 'Local CD Database' was not defined"
-msgstr "Path bagi ‘Basis Data CD Lokal’ tak didefinisikan"
+msgstr "Stien til «Lokal CD-database» var ikke angitt"
 
 #. Translators: 'it' in this sentence refers to the local CD
 #. * database path.
 #: ../src/cddb.c:3110
 msgid "Enter it in the preferences window before using this search."
-msgstr "Masukkan ke dalam jendela preferensi sebelum memakai pencarian ini."
+msgstr "Skriv det inn i oppsettsvinduet før du bruker denne søkefunksjonen."
 
 #: ../src/cddb.c:3112
-#, fuzzy
 msgid "Local CD search"
-msgstr "Hanya cari direktori lokal saja"
+msgstr "Lokalt CD-søk"
 
 #. g_print("Request Cddb_Search_Album_From_Selected_Files : '%s'\n", cddb_in);
 #: ../src/cddb.c:3257
 #, c-format
 msgid "Sending request (CddbId: %s, #tracks: %d, Disc length: %d)…"
-msgstr "Mengirim permintaan (CddbId: %s, #trek: %d, Panjang cakram: %d)…"
+msgstr "Sender forespørsel (CddbId: %s, #spor: %d, platelengde: %d) …"
 
 #: ../src/cddb.c:3414
 #, c-format
 msgid "DiscID '%s' gave one matching album"
 msgid_plural "DiscID '%s' gave %d matching albums"
-msgstr[0] "DiscID ‘%s’ memberikan %d album yang cocok"
+msgstr[0] "Plate-ID «%s» samsvarte med ett album"
+msgstr[1] "Plate-ID «%s» samsvarte med %d album"
 
 #: ../src/cddb.c:3512
 #, c-format
 msgid "Can't load file: '%s' (%s)."
-msgstr "Tak dapat memuat berkas '%s' (%s)."
+msgstr "Klarte ikke å laste inn fila «%s» (%s)."
 
 #. Load the track list of the album
 #: ../src/cddb.c:3811
 msgid "Loading album track list…"
-msgstr "Sedang memuat daftar trek album..."
+msgstr "Laster inn albumets sporliste …"
 
 #: ../src/cddb.c:4010
 msgid "The number of CDDB results does not match the number of selected files"
-msgstr "Banyaknya hasil CDDB tak cocok dengan cacah berkas yang dipilih"
+msgstr "Antallet i CDDB-resultatene samsvarer ikke med antall valgte filer"
 
 #: ../src/cddb.c:4014
-#, fuzzy
 msgid "Write Tag from CDDB"
-msgstr "Hapus tag dari entri"
+msgstr "Skriv tagg fra CDDB"
 
 #: ../src/charset.c:47
 msgid "Arabic (IBM-864)"
-msgstr "Arab (IBM-864)"
+msgstr "Arabisk (IBM-864)"
 
 #: ../src/charset.c:48
 msgid "Arabic (ISO-8859-6)"
-msgstr "Arab (ISO-8859-6)"
+msgstr "Arabisk (ISO-8859-6)"
 
 #: ../src/charset.c:49
 msgid "Arabic (Windows-1256)"
-msgstr "Arab (Windows-1256)"
+msgstr "Arabisk (Windows-1256)"
 
 #: ../src/charset.c:50
 msgid "Baltic (ISO-8859-13)"
-msgstr "Baltik (ISO-8859-13)"
+msgstr "Baltisk (ISO-8859-13)"
 
 #: ../src/charset.c:51
 msgid "Baltic (ISO-8859-4)"
-msgstr "Baltik (ISO-8859-4)"
+msgstr "Baltisk (ISO-8859-4)"
 
 #: ../src/charset.c:52
 msgid "Baltic (Windows-1257)"
-msgstr "Baltik (Windows-1257)"
+msgstr "Baltisk (Windows-1257)"
 
 #: ../src/charset.c:53
 msgid "Celtic (ISO-8859-14)"
-msgstr "Celtic (ISO-8859-14)"
+msgstr "Keltisk (ISO-8859-14)"
 
 #: ../src/charset.c:54
 msgid "Central European (IBM-852)"
-msgstr "Eropa Tengah (IBM-852)"
+msgstr "Sentraleuropeisk (IBM-852)"
 
 #: ../src/charset.c:55
 msgid "Central European (ISO-8859-2)"
-msgstr "Eropa Tengah (ISO-8859-2)"
+msgstr "Sentraleuropeisk (ISO-8859-2)"
 
 #: ../src/charset.c:56
 msgid "Central European (Windows-1250)"
-msgstr "Eropa Tengah (Windows-1250)"
+msgstr "Sentraleuropeisk (Windows-1250)"
 
 #: ../src/charset.c:57
 msgid "Chinese Simplified (GB18030)"
-msgstr "Cina Disederhanakan (GB18030)"
+msgstr "Kinesisk, forenklet (GB18030)"
 
 #: ../src/charset.c:58
 msgid "Chinese Simplified (GB2312)"
-msgstr "Cina Disederhanakan (GB2312)"
+msgstr "Kinesisk, forenklet (GB2312)"
 
 #: ../src/charset.c:59
 msgid "Chinese Traditional (Big5)"
-msgstr "Cina Tradisional (Big5)"
+msgstr "Kinesisk, tradisjonell (Big5)"
 
 #: ../src/charset.c:60
 msgid "Chinese Traditional (Big5-HKSCS)"
-msgstr "Cina Tradisional (Big5-HKSCS)"
+msgstr "Kinesisk, tradisjonell (Big5-HKSCS)"
 
 #: ../src/charset.c:61
 msgid "Cyrillic (IBM-855)"
-msgstr "Cyrillic (IBM-855)"
+msgstr "Kyrillisk (IBM-855)"
 
 #: ../src/charset.c:62
 msgid "Cyrillic (ISO-8859-5)"
-msgstr "Cyrillic (ISO-8859-6)"
+msgstr "Kyrillisk (ISO-8859-5)"
 
 #: ../src/charset.c:63
 msgid "Cyrillic (ISO-IR-111)"
-msgstr "Cyrillic (ISO-IR-111)"
+msgstr "Kyrillisk (ISO-IR-111)"
 
 #: ../src/charset.c:64
 msgid "Cyrillic (KOI8-R)"
-msgstr "Cyrillic (KOI8-R)"
+msgstr "Kyrillisk (KOI8-R)"
 
 #: ../src/charset.c:65
 msgid "Cyrillic (Windows-1251)"
-msgstr "Cyrillic (Windows-1251)"
+msgstr "Kyrillisk (Windows-1251)"
 
 #: ../src/charset.c:66
 msgid "Cyrillic/Russian (CP-866)"
-msgstr "Cyrillic/Rusia (CP-866)"
+msgstr "Kyrillisk/russisk (CP-866)"
 
 #: ../src/charset.c:67
 msgid "Cyrillic/Ukrainian (KOI8-U)"
-msgstr "Cyrillic/Ukrania (KOI8-U)"
+msgstr "Kyrillisk/ukrainsk (KOI8-U)"
 
 #: ../src/charset.c:68
 msgid "English (US-ASCII)"
-msgstr "Inggris (US-ASCII)"
+msgstr "Engelsk (US-ASCII)"
 
 #: ../src/charset.c:69
 msgid "Greek (ISO-8859-7)"
-msgstr "Yunani (ISO-8859-7)"
+msgstr "Gresk (ISO-8859-7)"
 
 #: ../src/charset.c:70
 msgid "Greek (Windows-1253)"
-msgstr "Yunani (Windows-1253)"
+msgstr "Gresk (Windows-1253)"
 
 #: ../src/charset.c:71
 msgid "Hebrew (IBM-862)"
-msgstr "Ibrani (IBM-862)"
+msgstr "Hebraisk (IBM-862)"
 
 #: ../src/charset.c:72
 msgid "Hebrew (Windows-1255)"
-msgstr "Ibrani (Windows-1255)"
+msgstr "Hebraisk (Windows-1255)"
 
 #: ../src/charset.c:73
 msgid "Japanese (EUC-JP)"
-msgstr "Jepang (EUC-JP)"
+msgstr "Japansk (EUC-JP)"
 
 #: ../src/charset.c:74
 msgid "Japanese (ISO-2022-JP)"
-msgstr "Jepang (ISO-2022-JP)"
+msgstr "Japansk (ISO-2022-JP)"
 
 #: ../src/charset.c:75
 msgid "Japanese (Shift_JIS)"
-msgstr "Jepang (Shift-JIS)"
+msgstr "Japansk (Shift_JIS)"
 
 #: ../src/charset.c:76
 msgid "Korean (EUC-KR)"
-msgstr "Korea (EUC-KR)"
+msgstr "Koreansk (EUC-KR)"
 
 #: ../src/charset.c:77
 msgid "Nordic (ISO-8859-10)"
-msgstr "Norwegia (ISO-8859-10)"
+msgstr "Nordisk (ISO-8859-10)"
 
 #: ../src/charset.c:78
 msgid "South European (ISO-8859-3)"
-msgstr "Eropa Selatan (ISO-8859-3)"
+msgstr "Sør-europeisk (ISO-8859-3)"
 
 #: ../src/charset.c:79
 msgid "Thai (TIS-620)"
-msgstr "Thailand (TIS-620)"
+msgstr "Thai (TIS-620)"
 
 #: ../src/charset.c:80
 msgid "Turkish (IBM-857)"
-msgstr "Turki (IBM-857)"
+msgstr "Tyrkisk (IBM-857)"
 
 #: ../src/charset.c:81
 msgid "Turkish (ISO-8859-9)"
-msgstr "Turki (ISO-8859-9)"
+msgstr "Tyrkisk (ISO-8859-9)"
 
 #: ../src/charset.c:82
 msgid "Turkish (Windows-1254)"
-msgstr "Turki (WIndows-1254)"
+msgstr "Tyrkisk (Windows-1254)"
 
 #. {N_("Unicode (UTF-7)"),                   "UTF-7"         },
 #: ../src/charset.c:84
@@ -1585,109 +1581,108 @@ msgstr "Unicode (UTF-8)"
 #. {N_("Unicode (UTF-32LE)"),                "UTF-32LE"      },
 #: ../src/charset.c:91
 msgid "Vietnamese (VISCII)"
-msgstr "Vietnam (VISCII)"
+msgstr "Vietnamesisk (VISCII)"
 
 #: ../src/charset.c:92
 msgid "Vietnamese (Windows-1258)"
-msgstr "Vietnam (Windows-1258)"
+msgstr "Vietnamesisk (Windows-1258)"
 
 #: ../src/charset.c:93
 msgid "Visual Hebrew (ISO-8859-8)"
-msgstr "Ibrani Visual (ISO-8859-8)"
+msgstr "Visuelt hebraisk (ISO-8859-8)"
 
 #: ../src/charset.c:94
 msgid "Western (IBM-850)"
-msgstr "Barat (IBM-850)"
+msgstr "Vestlig (IBM-850)"
 
 #: ../src/charset.c:95
 msgid "Western (ISO-8859-1)"
-msgstr "Barat (ISO-8859-1)"
+msgstr "Vestlig (ISO-8859-1)"
 
 #: ../src/charset.c:96
 msgid "Western (ISO-8859-15)"
-msgstr "Barat (ISO-8859-15)"
+msgstr "Vestlig (ISO-8859-15)"
 
 #: ../src/charset.c:97
 msgid "Western (Windows-1252)"
-msgstr "Barat (Windows-1252)"
+msgstr "Vestlig (Windows-1252)"
 
 #: ../src/charset.c:511
 #, c-format
 msgid "The filename '%s' couldn't be converted into UTF-8 (%s)."
-msgstr "Nama berkas ‘%s’ tak bisa dikonversi ke dalam UTF-8 (%s)."
+msgstr "Klarte ikke å konvertere filnavnet «%s» til UTF-8 (%s)."
 
 #: ../src/charset.c:512 ../src/charset.c:611 ../src/charset.c:674
 msgid "Invalid UTF-8"
-msgstr "UTF-8 tak valid"
+msgstr "Ugyldig UTF-8"
 
 #: ../src/charset.c:610
 #, c-format
 msgid ""
 "The UTF-8 string '%s' couldn't be converted into filename encoding (%s)."
-msgstr ""
-"String UTF-8 ‘%s’ tak dapat dikonversi ke dalam enkoding nama berkas (%s)."
+msgstr "Klarte ikke å konvertere UTF-8-strengen «%s» til filnavn-koding (%s)."
 
 #: ../src/charset.c:673
 #, c-format
 msgid "The string '%s' couldn't be converted into UTF-8 (%s)."
-msgstr "String ‘%s’ tak dapat dikonversi ke dalam UTF-8 (%s)."
+msgstr "Klarte ikke å konverter strengen «%s» til UTF-8 (%s)."
 
 #. Starting messages
 #: ../src/easytag.c:185
-#, fuzzy, c-format
+#, c-format
 msgid "Starting EasyTAG version %s (PID: %d)…"
-msgstr "memulai (versi %s), pid %u pengguna '%s'"
+msgstr "Starter EasyTAG versjon %s (PID: %d) …"
 
 #: ../src/easytag.c:187
-#, fuzzy, c-format
+#, c-format
 msgid "Using libid3tag version %s"
-msgstr "Cetak versi program"
+msgstr "Bruker libid3tag versjon %s"
 
 #: ../src/easytag.c:190
-#, fuzzy, c-format
+#, c-format
 msgid "Using id3lib version %d.%d.%d"
-msgstr "Cetak versi program"
+msgstr "Bruker id3lib versjon %d.%d.%d"
 
 #: ../src/easytag.c:196
 #, c-format
 msgid "Variable EASYTAGLANG defined. Setting locale: '%s'"
-msgstr "Variabel EASYTAGLAG didefinisikan. Menata locale: ‘%s’"
+msgstr "Variabelen EASYTAGLANG er definert. Velger regioninnstillinga «%s»"
 
 #: ../src/easytag.c:198
 #, c-format
 msgid "Setting locale: '%s'"
-msgstr "Menata locale: '%s'"
+msgstr "Velger regioninnstilling «%s»"
 
 #: ../src/easytag.c:203
 #, c-format
 msgid "Currently using locale '%s' (and eventually '%s')"
-msgstr "Saat ini memakai locale ‘%s’ (dan pada akhirnya ‘%s’)"
+msgstr "Du bruker nå regioninnstillinga «%s» (og eventuelt «%s»)"
 
 #: ../src/easytag.c:210
 #, fuzzy
 msgid "Unable to create setting directories"
-msgstr "Tak dapat membuat tampilan transien: "
+msgstr "Klarte ikke å lage målmapper"
 
 #: ../src/easytag.c:427 ../src/et_core.c:638 ../src/et_core.c:650
 #, c-format
 msgid "Error while querying information for file: '%s' (%s)"
-msgstr "Galat saat mengambil informasi bagi berkas ‘%s’: %s"
+msgstr "Det oppstod en feil ved etterspørring av informasjon om fila «%s» (%s)"
 
 #: ../src/easytag.c:490
 #, c-format
 msgid "Cannot open path '%s'"
-msgstr "Tak dapat membuka path '%s'"
+msgstr "Klarte ikke å åpne stien «%s»"
 
 #.
 #. * Browser
 #.
 #: ../src/easytag.c:582 ../src/prefs.c:142
 msgid "Browser"
-msgstr "Peramban"
+msgstr "Utforsker"
 
 #: ../src/easytag.c:604 ../src/et_core.c:2869
 msgid "File"
-msgstr "Berkas"
+msgstr "Fil"
 
 #. Default values are MPs data
 #. Nothing to display
@@ -1695,83 +1690,83 @@ msgstr "Berkas"
 #. gtk_label_set_text(GTK_LABEL(VersionValueLabel),"");
 #. Version changed to encoder version
 #. Encoder version
-#: ../src/easytag.c:636 ../src/easytag.c:4217 ../src/flac_header.c:201
+#: ../src/easytag.c:636 ../src/easytag.c:4284 ../src/flac_header.c:201
 #: ../src/monkeyaudio_header.c:96 ../src/musepack_header.c:98
 #: ../src/ogg_header.c:389 ../src/opus_header.c:221 ../src/wavpack_header.c:72
 #, c-format
 msgid "Encoder:"
-msgstr "Enkoder:"
+msgstr "Kodeprogram:"
 
 #: ../src/easytag.c:644
 msgid "Bitrate:"
-msgstr "Laju bit:"
+msgstr "Bitfrekvens:"
 
 #. Translators: Please try to keep this string as short as possible as it
 #. * is shown in a narrow column.
 #: ../src/easytag.c:654
 msgid "Frequency:"
-msgstr "Frekuensi:"
+msgstr "Frekvens:"
 
 #. Mode
-#: ../src/easytag.c:665 ../src/easytag.c:4221 ../src/mpeg_header.c:216
+#: ../src/easytag.c:665 ../src/easytag.c:4288 ../src/mpeg_header.c:216
 msgid "Mode:"
-msgstr "Mode:"
+msgstr "Modus:"
 
 #: ../src/easytag.c:672
 msgid "Size:"
-msgstr "Ukuran:"
+msgstr "Størrelse:"
 
 #: ../src/easytag.c:679
 msgid "Duration:"
-msgstr "Durasi:"
+msgstr "Varighet:"
 
 #. Main Frame
 #: ../src/easytag.c:726 ../src/et_core.c:2799
 msgid "Tag"
-msgstr "Tag"
+msgstr "Tagg"
 
 #.
 #. * 1 - Page for common tag fields
 #.
 #: ../src/easytag.c:748
 msgid "Common"
-msgstr "Umum"
+msgstr "Vanlig"
 
 #. Title
 #: ../src/easytag.c:755
 msgid "Title:"
-msgstr "Judul:"
+msgstr "Tittel:"
 
 #: ../src/easytag.c:769
 msgid "Tag selected files with this title"
-msgstr "Berkas yang dipilih tag dengan judul ini"
+msgstr "Tagg valgte filer med denne tittelen"
 
 #. Artist
 #: ../src/easytag.c:774
 msgid "Artist:"
-msgstr "Artis:"
+msgstr "Artist:"
 
 #: ../src/easytag.c:788
 msgid "Tag selected files with this artist"
-msgstr "Berkas yang dipilih tag dengan artis ini"
+msgstr "Tagg valgte filer med denne artisten"
 
 #. Album Artist
 #: ../src/easytag.c:793
 msgid "Album artist:"
-msgstr "Artis album:"
+msgstr "Albumartist:"
 
 #: ../src/easytag.c:807
 msgid "Tag selected files with this album artist"
-msgstr "Berkas yang dipilih tag dengan artis album ini"
+msgstr "Tagg valgte filer med denne albumartisten"
 
 #. Album
 #: ../src/easytag.c:812
 msgid "Album:"
-msgstr "Album:"
+msgstr "Album"
 
 #: ../src/easytag.c:826
 msgid "Tag selected files with this album name"
-msgstr "Berkas yang dipilih tag dengan nama album ini"
+msgstr "Tagg valgte filer med dette albumnavnet"
 
 #. Disc Number
 #: ../src/easytag.c:831
@@ -1780,664 +1775,655 @@ msgstr "CD:"
 
 #: ../src/easytag.c:848
 msgid "Tag selected files with this disc number"
-msgstr "Berkas yang dipilih tag dengan nomor cakram ini"
+msgstr "Tagg valgte filer med dette platenummeret"
 
 #. Year
 #: ../src/easytag.c:853
 msgid "Year:"
-msgstr "Tahun:"
+msgstr "Ã…r:"
 
 #: ../src/easytag.c:873
 msgid "Tag selected files with this year"
-msgstr "Berkas yang dipilih tag dengan tahun ini"
+msgstr "Tagg valgte filer med dette året"
 
 #: ../src/easytag.c:887
 msgid "Number selected tracks sequentially. Starts at 01 in each subdirectory."
 msgstr ""
-"Banyaknya trek yang dipilih secara berurutan. Mulai dari 01 dalam setiap "
-"subdirektori."
+"Nummerer valgte spor i rekkefølge. Tallet begynner på 01 i hver undermappe"
 
 #. To have enough space to display the icon
 #. To have enough space to display the icon
 #: ../src/easytag.c:896
 msgid "Track #:"
-msgstr "Trek #:"
+msgstr "Spornummer:"
 
 #: ../src/easytag.c:927
 msgid ""
 "Set the number of files, in the same directory of the displayed file, to the "
 "selected tracks."
 msgstr ""
+"Velg antall i filer (i samme mappe som fila som vises) som antall spor-tagg "
+"for valgte spor."
 
 #: ../src/easytag.c:947
 msgid "Tag selected files with this number of tracks"
-msgstr "Tag berkas yang dipilih dengan nomor trek ini"
+msgstr "Tagg valgte filer med dette antallet spor"
 
 #. Genre
 #: ../src/easytag.c:951
 msgid "Genre:"
-msgstr "Aliran:"
+msgstr "Sjanger:"
 
 #: ../src/easytag.c:979
 msgid "Tag selected files with this genre"
-msgstr "Tag berkas yang dipilih dengan genre ini"
+msgstr "Tagg valgte filer med denne sjangeren"
 
 #. Comment
 #: ../src/easytag.c:984
 msgid "Comment:"
-msgstr "Komentar:"
+msgstr "Kommentar:"
 
 #: ../src/easytag.c:1011
 msgid "Tag selected files with this comment"
-msgstr "Tag berkas yang dipilih dengan komentar ini"
+msgstr "Tagg valgte filer med denne kommentaren"
 
 #. Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(CommentView));
 #. Composer (name of the composers)
 #: ../src/easytag.c:1018
 msgid "Composer:"
-msgstr "Komposer:"
+msgstr "Komponist:"
 
 #: ../src/easytag.c:1032
 msgid "Tag selected files with this composer"
-msgstr "Tag berkas yang dipilih dengan komposer ini"
+msgstr "Tagg valgte filer med denne komponisten"
 
 #. Translators: Original Artist / Performer. Please try to keep this string
 #. * as short as possible, as it must fit into a narrow column.
 #: ../src/easytag.c:1039
 msgid "Orig. artist:"
-msgstr "Artis asli:"
+msgstr "Oppr. artist:"
 
 #: ../src/easytag.c:1053
 msgid "Tag selected files with this original artist"
-msgstr "Tag berkas yang dipilih dengan artis asli ini"
+msgstr "Tagg valgte filer med denne opprinnelige artisten"
 
 #. Copyright
 #: ../src/easytag.c:1059
 msgid "Copyright:"
-msgstr "Hak Cipta:"
+msgstr "Opphavsrett:"
 
 #: ../src/easytag.c:1073
 msgid "Tag selected files with this copyright"
-msgstr "Tag berkas yang dipilih dengan hak cipta ini"
+msgstr "Tagg valgte filer med denne opphavsrettsmerknaden"
 
 #. URL
 #: ../src/easytag.c:1079
 msgid "URL:"
-msgstr "URL:"
+msgstr "Nettadresse:"
 
 #: ../src/easytag.c:1093
 msgid "Tag selected files with this URL"
-msgstr "Tag berkas yang dipilih dengan URL ini"
+msgstr "Tagg valgte filer med denne nettadressen"
 
 #. Encoded by
 #: ../src/easytag.c:1099
-#, fuzzy
 msgid "Encoded by:"
-msgstr "Dienkode Oleh"
+msgstr "Kodet av:"
 
 #: ../src/easytag.c:1113
 msgid "Tag selected files with this encoder name"
-msgstr "Tag berkas yang dipilih dengan nama enkoder ini"
+msgstr "Tagg valgte filer med dette kodeprogram-navnet"
 
 #.
 #. * 2 - Page for extra tag fields
 #.
 #: ../src/easytag.c:1146 ../src/et_core.c:3241 ../src/et_core.c:3244
 msgid "Images"
-msgstr "Citra"
+msgstr "Bilder"
 
 #: ../src/easytag.c:1170
 msgid "You can use drag and drop to add an image"
-msgstr ""
+msgstr "Du kan dra og slippe for å legge til et bilde"
 
 #: ../src/easytag.c:1217
 msgid "Add images to the tag"
-msgstr "Tambahkan citra ke tag"
+msgstr "Legg til bilder i taggen"
 
 #: ../src/easytag.c:1235
 msgid "Remove selected images from the tag"
-msgstr "Buang citra yang dipilih dari tag"
+msgstr "Fjern valgte bilder fra taggen"
 
 #: ../src/easytag.c:1249
 msgid "Save the selected images to files"
-msgstr "Simpan citra yang dipilih ke berkas"
+msgstr "Lagre valgte bilder til filer"
 
 #: ../src/easytag.c:1260
 msgid "Edit image properties"
-msgstr "Sunting properti citra"
+msgstr "Rediger bildeegenskaper"
 
 #: ../src/easytag.c:1274
 msgid "Tag selected files with these images"
-msgstr ""
+msgstr "Tagg valgte filer med disse bildene"
 
 #: ../src/easytag.c:1332
 #, c-format
 msgid "Selected files tagged with title '%s'."
-msgstr "Berkas yang dipilih ditag dengan judul ‘%s’."
+msgstr "Valgte filer er tagget med «%s» som tittel."
 
 #: ../src/easytag.c:1334
-#, fuzzy
 msgid "Removed title from selected files."
-msgstr "Menghapus berkas yang dipilih dari proyek"
+msgstr "Fjernet tittel fra valgte filer."
 
 #: ../src/easytag.c:1349
 #, c-format
 msgid "Selected files tagged with artist '%s'."
-msgstr "Berkas yang dipilih ditag dengan artis ‘%s’."
+msgstr "Valgte filer er tagget med «%s» som artist."
 
 #: ../src/easytag.c:1351
-#, fuzzy
 msgid "Removed artist from selected files."
-msgstr "Menghapus berkas yang dipilih dari proyek"
+msgstr "Fjernet artist fra valgte filer."
 
 #: ../src/easytag.c:1365
 #, c-format
 msgid "Selected files tagged with album artist '%s'."
-msgstr ""
+msgstr "Valgte filer er tagget med «%s» som albumartist."
 
 #: ../src/easytag.c:1367
 msgid "Removed album artist from selected files."
-msgstr ""
+msgstr "Fjernet albumartist fra valgte filer."
 
 #: ../src/easytag.c:1382
 #, c-format
 msgid "Selected files tagged with album '%s'."
-msgstr "Berkas yang dipilih ditag dengan album ‘%s’."
+msgstr "Valgte filer er tagget med «%s» som album."
 
 #: ../src/easytag.c:1384
 msgid "Removed album name from selected files."
-msgstr ""
+msgstr "Fjernet albumnavn fra valgte filer."
 
 #: ../src/easytag.c:1421
 #, c-format
 msgid "Selected files tagged with disc number '%s/%s'."
-msgstr ""
+msgstr "Valgte filer er tagget med «%s/%s» som platenummer."
 
 #: ../src/easytag.c:1426
 #, c-format
 msgid "Selected files tagged with disc number like 'xx'."
-msgstr ""
+msgstr "Valgte filer er tagget med platenummer som «xx»."
 
 #: ../src/easytag.c:1431
 msgid "Removed disc number from selected files."
-msgstr ""
+msgstr "Fjernet platenummer fra valgte filer."
 
 #: ../src/easytag.c:1447
 #, c-format
 msgid "Selected files tagged with year '%s'."
-msgstr "Berkas yang dipilih ditag dengan tahun ‘%s’."
+msgstr "Valgte filer er tagget med «%s» som år."
 
 #: ../src/easytag.c:1449
-#, fuzzy
 msgid "Removed year from selected files."
-msgstr "Menghapus berkas yang dipilih dari proyek"
+msgstr "Fjernet år fra valgte filer."
 
 #: ../src/easytag.c:1475 ../src/easytag.c:1565
 #, c-format
 msgid "Selected files tagged with track like 'xx/%s'."
-msgstr ""
+msgstr "Valgte filer er tagget med spornummer som «xx/%s»."
 
 #: ../src/easytag.c:1478
 #, c-format
 msgid "Selected files tagged with track like 'xx'."
-msgstr ""
+msgstr "Valgte filer er tagget med spornummer som «xx»."
 
 #: ../src/easytag.c:1482 ../src/easytag.c:1568
 msgid "Removed track number from selected files."
-msgstr ""
+msgstr "Fjernet spornummer fra valgte filer."
 
 #. msg = g_strdup_printf(_("All %d tracks numbered sequentially."), ETCore->ETFileSelectionList_Length);
 #: ../src/easytag.c:1538
 #, c-format
 msgid "Selected tracks numbered sequentially."
-msgstr "Trek yang dipilih dinomori secara berurutan."
+msgstr "Valgte spor er nummerert i rekkefølge."
 
 #: ../src/easytag.c:1584
 #, c-format
 msgid "Selected files tagged with genre '%s'."
-msgstr "Berkas yang dipilih ditag dengan aliran ‘%s’."
+msgstr "Valgte filer er tagget med «%s» som sjanger."
 
 #: ../src/easytag.c:1586
-#, fuzzy
 msgid "Removed genre from selected files."
-msgstr "Menghapus berkas yang dipilih dari proyek"
+msgstr "Fjernet sjanger fra valgte filer."
 
 #: ../src/easytag.c:1608
 #, c-format
 msgid "Selected files tagged with comment '%s'."
-msgstr "Berkas yang dipilih ditag dengan komentar ‘%s’."
+msgstr "Valgte filer er tagget med «%s» som kommentar."
 
 #: ../src/easytag.c:1610
-#, fuzzy
 msgid "Removed comment from selected files."
-msgstr "Menghapus berkas yang dipilih dari proyek"
+msgstr "Fjernet kommentarer fra valgte filer."
 
 #: ../src/easytag.c:1624
 #, c-format
 msgid "Selected files tagged with composer '%s'."
-msgstr "Berkas yang dipilih ditag dengan komponis ‘%s’."
+msgstr "Valgte filer er tagget med «%s» som komponist."
 
 #: ../src/easytag.c:1626
-#, fuzzy
 msgid "Removed composer from selected files."
-msgstr "Menghapus berkas yang dipilih dari proyek"
+msgstr "Fjernet komponist fra valgte filer."
 
 #: ../src/easytag.c:1641
 #, c-format
 msgid "Selected files tagged with original artist '%s'."
-msgstr ""
+msgstr "Valgte filer er tagget med «%s» som opprinnelig artist."
 
 #: ../src/easytag.c:1643
 msgid "Removed original artist from selected files."
-msgstr ""
+msgstr "Fjernet opprinnelig artist fra valgte filer."
 
 #: ../src/easytag.c:1658
 #, c-format
 msgid "Selected files tagged with copyright '%s'."
-msgstr "Berkas yang dipilih ditag dengan hak cipta ‘%s’."
+msgstr "Valgte filer er tagget med «%s» som opphavsrettsmerknad."
 
 #: ../src/easytag.c:1660
-#, fuzzy
 msgid "Removed copyright from selected files."
-msgstr "Menghapus berkas yang dipilih dari proyek"
+msgstr "Fjernet opphavsrettsinfo fra valgte filer."
 
 #: ../src/easytag.c:1675
 #, c-format
 msgid "Selected files tagged with URL '%s'."
-msgstr "Berkas yang dipilih ditag dengan URL ‘%s’."
+msgstr "Valgte filer er tagget med «%s» som nettadresse."
 
 #: ../src/easytag.c:1677
-#, fuzzy
 msgid "Removed URL from selected files."
-msgstr "Menghapus berkas yang dipilih dari proyek"
+msgstr "Fjernet nettadresse fra valgte filer."
 
 #: ../src/easytag.c:1692
 #, c-format
 msgid "Selected files tagged with encoder name '%s'."
-msgstr ""
+msgstr "Valgte filer er tagget med «%s» som kodeprogram."
 
 #: ../src/easytag.c:1694
 msgid "Removed encoder name from selected files."
-msgstr ""
+msgstr "Fjernet kodeprogram-felt fra valgte filer."
 
 #: ../src/easytag.c:1726
 msgid "Selected files tagged with images."
-msgstr "Berkas yang dipilih ditag dengan citra."
+msgstr "Valgte filer er tagget med bilder."
 
 #: ../src/easytag.c:1728
-#, fuzzy
 msgid "Removed images from selected files."
-msgstr "Menghapus berkas yang dipilih dari proyek"
+msgstr "Fjernet bilder fra valgte filer."
 
 #: ../src/easytag.c:2009
 msgid "Select Mode and Mask, and redo the same action"
-msgstr ""
+msgstr "Velg modus og maske, og utfør samme handling på nytt"
 
 #: ../src/easytag.c:2061
 msgid "All tags have been scanned"
-msgstr "Semua tag telah dipindai"
+msgstr "Alle tagger er blitt gjennomsøkt"
 
 #: ../src/easytag.c:2117
 msgid "All tags have been removed"
-msgstr "Semua tag telah dihapus"
+msgstr "Alle tagger er fjernet"
 
 #: ../src/easytag.c:2422
 #, c-format
 msgid "A file was changed by an external program"
 msgid_plural "%d files were changed by an external program."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "En fil ble endret av et eksternt program"
+msgstr[1] "%d filer ble endret av et eksternt program"
 
 #: ../src/easytag.c:2427
 msgid "Do you want to continue saving the file?"
-msgstr "Apakah Anda ingin melanjutkan menyimpan berkas?"
+msgstr "Er du sikker på at du vil lagre fila?"
 
 #: ../src/easytag.c:2485 ../src/easytag.c:2505
 msgid "Saving files was stopped"
-msgstr "Penyimpanan berkas dihentikan"
+msgstr "Fillagring ble stoppet"
 
 #: ../src/easytag.c:2507
 msgid "All files have been saved"
-msgstr "Semua berkas telah disimpan"
+msgstr "Alle filer er lagret"
 
 #: ../src/easytag.c:2642
 #, c-format
 msgid "Cannot delete file (%s)"
-msgstr "Tak dapat menghapus berkas (%s)"
+msgstr "Klarte ikke å slette fil (%s)"
 
 #: ../src/easytag.c:2663
 msgid "Files have been partially deleted"
-msgstr "Berkas-berkas telah dihapus sebagian"
+msgstr "Filer er delvis slettet"
 
 #: ../src/easytag.c:2665
 msgid "All files have been deleted"
-msgstr "Semua berkas telah dihapus"
+msgstr "Alle filer er slettet"
 
 #: ../src/easytag.c:2781
 #, c-format
 msgid "Do you want to write the tag of file '%s'?"
-msgstr "Anda ingin menulis tag dari berkas '%s'?"
+msgstr "Er du sikker på at du vil skrive taggen til fila «%s»?"
 
 #: ../src/easytag.c:2783
 msgid "Confirm Tag Writing"
-msgstr "Konfirmasikan Penulisan Tag"
+msgstr "Bekreft taggskriving"
 
-#: ../src/easytag.c:2788 ../src/easytag.c:2908 ../src/easytag.c:3158
+#: ../src/easytag.c:2788 ../src/easytag.c:2908 ../src/easytag.c:3225
 msgid "Repeat action for the remaining files"
-msgstr ""
+msgstr "Gjenta handling for filene som gjenstår"
 
 #. Directories and filename changed
 #: ../src/easytag.c:2872 ../src/scan_dialog.c:183
 msgid "Rename File and Directory"
-msgstr "Ubah Nama Berkas dan Direktori"
+msgstr "Gi nytt navn til fil og mappe"
 
 #: ../src/easytag.c:2873
 msgid "File and directory rename confirmation required"
-msgstr ""
+msgstr "Navneendring av fil- og mappenavn må bekreftes"
 
 #: ../src/easytag.c:2874
-#, fuzzy, c-format
+#, c-format
 msgid "Do you want to rename the file and directory '%s' to '%s'?"
-msgstr "Anda ingin membuang perubahan dan memuat ulang berkas?"
+msgstr "Er du sikker på at du vil endre navnet på fila og mappa «%s» til «%s»?"
 
 #: ../src/easytag.c:2880
 msgid "Directory rename confirmation required"
-msgstr "Diperlukan konfirmasi pengubahan nama direktori"
+msgstr "Navneendring av mappe må bekreftes"
 
 #: ../src/easytag.c:2881
 #, c-format
 msgid "Do you want to rename the directory '%s' to '%s'?"
-msgstr "Apakah Anda ingin mengubah nama direktori ‘%s’ menjadi ‘%s’?"
+msgstr "Er du sikker på at du vil gi mappa «%s» det nye navnet «%s»?"
 
 #. Only filename changed
 #: ../src/easytag.c:2887
 msgid "Rename File"
-msgstr "Ubah Nama Berkas"
+msgstr "Gi nytt navn til fil"
 
 #: ../src/easytag.c:2888
-#, fuzzy
 msgid "File rename confirmation required"
-msgstr "Berkas berikut diperlukan:"
+msgstr "Navneendring av fil må bekreftes"
 
 #: ../src/easytag.c:2889
-#, fuzzy, c-format
+#, c-format
 msgid "Do you want to rename the file '%s' to '%s'?"
-msgstr "Anda ingin memuat ulang berkas?"
+msgstr "Er du sikker på at du vil endre navnet på fila «%s» til «%s»?"
 
 #: ../src/easytag.c:2955
 #, c-format
 msgid "Cannot rename file '%s' to '%s'"
-msgstr "Tak bisa mengubah nama berkas ‘%s’ menjadi ‘%s’"
+msgstr "Klarte ikke å gi fila «%s» det nye navnet «%s»"
 
 #: ../src/easytag.c:2969
 #, c-format
 msgid "Cannot rename file '%s' to '%s': %s"
-msgstr "Tak bisa mengubah nama berkas ‘%s’ menjadi ‘%s’: %s"
+msgstr "Klarte ikke å gi fila «%s» det nye navnet «%s». %s"
 
 #: ../src/easytag.c:2973
 msgid "File(s) not renamed"
-msgstr "Berkas tak diubah nama"
+msgstr "Filnavn(et/ene) ble ikke endret"
 
-#: ../src/easytag.c:3085
-#, fuzzy, c-format
+#: ../src/easytag.c:3152
+#, c-format
 msgid "Writing tag of '%s'"
-msgstr "Tag Git:"
+msgstr "Skriver tagg til «%s»"
 
-#: ../src/easytag.c:3092
+#: ../src/easytag.c:3159
 msgid "Tag(s) written"
-msgstr "Tag ditulis"
+msgstr "Tagg(er) ble skrevet"
 
-#: ../src/easytag.c:3105
+#: ../src/easytag.c:3172
 #, c-format
 msgid "Cannot write tag in file '%s'"
-msgstr "Tak dapat menulis tag dalam berkas '%s'"
+msgstr "Klarte ikke å skrive tagg til fila «%s»"
 
-#: ../src/easytag.c:3109
+#: ../src/easytag.c:3176
 msgid "Tag Write Error"
-msgstr "Galat Tulis Tag"
+msgstr "Feil ved skriving av tagg"
 
-#: ../src/easytag.c:3155 ../src/easytag.c:3169
+#: ../src/easytag.c:3222 ../src/easytag.c:3236
 #, c-format
 msgid "Do you really want to delete the file '%s'?"
-msgstr "Apakah Anda benar-benar ingin menghapus berkas ‘%s’?"
+msgstr "Er du sikker på at du vil slette fila «%s»?"
 
-#: ../src/easytag.c:3161 ../src/easytag.c:3171
+#: ../src/easytag.c:3228 ../src/easytag.c:3238
 msgid "Delete File"
-msgstr "Hapus Berkas"
+msgstr "Slett fil"
 
-#: ../src/easytag.c:3196
+#: ../src/easytag.c:3263
 #, c-format
 msgid "File '%s' deleted"
-msgstr "Berkas '%s' dihapus"
+msgstr "Fila «%s» er slettet"
 
-#: ../src/easytag.c:3331
+#: ../src/easytag.c:3398
 #, c-format
 msgid "Cannot read directory '%s'"
-msgstr "Tak bisa membaca direktori '%s'"
+msgstr "Klarte ikke å lese mappa «%s»"
 
-#: ../src/easytag.c:3335
+#: ../src/easytag.c:3402
 msgid "Directory Read Error"
-msgstr "Galat Baca Direktori"
+msgstr "Feil ved lesing av mappe"
 
 #. Read the directory recursively
-#: ../src/easytag.c:3356
+#: ../src/easytag.c:3423
 #, c-format
 msgid "Search in progress…"
-msgstr "Pencarian tengah berlangsung…"
+msgstr "Søker …"
 
-#: ../src/easytag.c:3379 ../src/et_core.c:2876
+#: ../src/easytag.c:3446 ../src/et_core.c:2876
 #, c-format
 msgid "File: '%s'"
-msgstr "Berkas: '%s'"
+msgstr "Fil: «%s»"
 
-#: ../src/easytag.c:3429
+#: ../src/easytag.c:3496
 #, c-format
 msgid "Found one file in this directory and subdirectories"
 msgid_plural "Found %d files in this directory and subdirectories"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Fant én fil i denne mappa og dens undermapper"
+msgstr[1] "Fant %d filer i denne mappa og dens undermapper"
 
-#: ../src/easytag.c:3436
+#: ../src/easytag.c:3503
 #, c-format
 msgid "Found one file in this directory"
 msgid_plural "Found %d files in this directory"
-msgstr[0] "Menemukan %d berkas dalam direktori ini"
+msgstr[0] "Fant én fil i denne mappa"
+msgstr[1] "Fant %d filer i denne mappa"
 
-#: ../src/easytag.c:3458
+#: ../src/easytag.c:3525
 msgid "No file found in this directory and subdirectories"
-msgstr ""
+msgstr "Fant ingen filer i denne mappa, og heller ikke i undermappene"
 
-#: ../src/easytag.c:3460
+#: ../src/easytag.c:3527
 msgid "No file found in this directory"
-msgstr "Tak ditemukan berkas pada direktori ini"
+msgstr "Fant ingen filer i denne mappa"
 
-#: ../src/easytag.c:3528
+#: ../src/easytag.c:3595
 #, c-format
 msgid "Error opening directory '%s' (%s)"
-msgstr "Galat saat membuka direktori '%s': (%s)"
+msgstr "Det oppstod en feil ved åpning av mappa «%s» (%s)"
 
-#: ../src/easytag.c:3564
+#: ../src/easytag.c:3631
 #, c-format
 msgid "Cannot read directory (%s)"
-msgstr "Tak dapat membaca direktori (%s)"
+msgstr "Klarte ikke å lese mappa (%s)"
 
-#: ../src/easytag.c:3584
+#: ../src/easytag.c:3651
 msgid "Searching for audio files…"
-msgstr "Sedang mencari berkas audio…"
+msgstr "Søker etter lydfiler …"
 
-#: ../src/easytag.c:3585
+#: ../src/easytag.c:3652
 msgid "Searching"
-msgstr "Mencari"
+msgstr "Søker"
 
-#: ../src/easytag.c:4251
+#: ../src/easytag.c:4318
 msgid "Select a directory to browse"
-msgstr "Pilih direktori untuk diramban"
+msgstr "Velg en mappe som skal utforskes"
 
 #. Menu items
-#: ../src/easytag.c:4397
+#: ../src/easytag.c:4464
 msgid "Tag selected files with this field"
-msgstr ""
+msgstr "Tagg valgte filer med dette feltet"
 
-#: ../src/easytag.c:4409 ../src/scan_dialog.c:2128
+#: ../src/easytag.c:4476 ../src/scan_dialog.c:2128
 msgid "Convert '_' and '%20' to spaces"
-msgstr "Ubah '_' dan '%20' ke spasi"
+msgstr "Bytt ut «_» og «%20» med mellomrom"
 
-#: ../src/easytag.c:4416 ../src/scan_dialog.c:2130
+#: ../src/easytag.c:4483 ../src/scan_dialog.c:2130
 msgid "Convert ' ' to '_'"
-msgstr "Ubah ' ' menjadi '_'"
+msgstr "Bytt ut mellomrom med «_»"
 
-#: ../src/easytag.c:4427
+#: ../src/easytag.c:4494
 msgid "All uppercase"
-msgstr "Semua huruf besar"
+msgstr "Bare store bokstaver"
 
-#: ../src/easytag.c:4434
+#: ../src/easytag.c:4501
 msgid "All lowercase"
-msgstr "Semua huruf kecil"
+msgstr "Bare små bokstaver"
 
-#: ../src/easytag.c:4441
+#: ../src/easytag.c:4508
 msgid "First letter uppercase"
-msgstr "Huruf pertama kapital"
+msgstr "Stor forbokstav"
 
-#: ../src/easytag.c:4448
+#: ../src/easytag.c:4515
 msgid "First letter uppercase of each word"
-msgstr ""
+msgstr "Stor forbokstav i hvert ord"
 
-#: ../src/easytag.c:4459 ../src/prefs.c:1023 ../src/scan_dialog.c:2254
+#: ../src/easytag.c:4526 ../src/prefs.c:1023 ../src/scan_dialog.c:2254
 msgid "Remove spaces"
-msgstr "Buang spasi"
+msgstr "Fjern mellomrom"
 
-#: ../src/easytag.c:4466
+#: ../src/easytag.c:4533
 msgid "Insert space before uppercase letter"
-msgstr ""
+msgstr "Sett inn mellomrom før stor bokstav"
 
-#: ../src/easytag.c:4473
+#: ../src/easytag.c:4540
 msgid "Remove duplicate spaces or underscores"
-msgstr ""
+msgstr "Fjern doble mellomrom eller understreker"
 
-#: ../src/easytag.c:4480
+#: ../src/easytag.c:4547
 msgid "Remove all text"
-msgstr "Buang semua teks"
+msgstr "Fjern all tekst"
 
-#: ../src/easytag.c:4499
+#: ../src/easytag.c:4566
 msgid "EasyTAG: Normal exit."
-msgstr "EasyTAG: Keluar normal."
+msgstr "EasyTAG: Normal avslutning."
 
-#: ../src/easytag.c:4551
+#: ../src/easytag.c:4618
 msgid "Do you want to save them before quitting?"
-msgstr ""
+msgstr "Vil du lagre dem før du avslutter?"
 
-#: ../src/easytag.c:4578
+#: ../src/easytag.c:4645
 msgid "Do you really want to quit?"
-msgstr "Anda benar-benar ingin berhenti?"
+msgstr "Er du sikker på at du vil avslutte?"
 
 #: ../src/et_core.c:551
 #, c-format
 msgid "Error reading tag from ogg file (%s)"
-msgstr ""
+msgstr "Det oppstod en feil ved lesing av tagg fra ogg-fil (%s)"
 
 #: ../src/et_core.c:580
 #, c-format
 msgid "Error reading tag from Opus file (%s)"
-msgstr ""
+msgstr "Det oppstod en feil ved lesing av tagg fra Opus-fil (%s)"
 
 #: ../src/et_core.c:723
 #, c-format
 msgid "Automatic corrections applied for file '%s'."
-msgstr ""
+msgstr "Fila «%s» har blitt automatisk korrigert."
 
 #: ../src/et_core.c:2759
 msgid "ID3 Tag"
-msgstr "Tag ID3"
+msgstr "ID3-tagg"
 
 #: ../src/et_core.c:2765
 msgid "Ogg Vorbis Tag"
-msgstr "Tag Ogg Vorbis"
+msgstr "Ogg Vorbis-tagg"
 
 #: ../src/et_core.c:2771
 msgid "FLAC Vorbis Tag"
-msgstr "Tag FLAC Vorbis"
+msgstr "FLAC Vorbis-tagg"
 
 #: ../src/et_core.c:2776
 msgid "APE Tag"
-msgstr "Tag APE"
+msgstr "APE-tagg"
 
 #: ../src/et_core.c:2781
 msgid "MP4/M4A/AAC Tag"
-msgstr "Tag MP4/M4A/AAC"
+msgstr "MP4-/M4A-/AAC-tagg"
 
 #: ../src/et_core.c:2787
 msgid "Wavpack Tag"
-msgstr "Tag Wavpack"
+msgstr "Wavpack-tagg"
 
 #: ../src/et_core.c:2793
 msgid "Opus Tag"
-msgstr "Tag Opus"
+msgstr "Opus-tagg"
 
 #: ../src/et_core.c:2813
 msgid "MP3 File"
-msgstr "Berkas MP3"
+msgstr "MP3-fil"
 
 #: ../src/et_core.c:2817
 msgid "MP2 File"
-msgstr "Berkas MP2"
+msgstr "MP2-fil"
 
 #: ../src/et_core.c:2823
 msgid "Ogg Vorbis File"
-msgstr "Berkas Ogg Vorbis"
+msgstr "Ogg Vorbis-fil"
 
 #: ../src/et_core.c:2829
 msgid "Speex File"
-msgstr "Berkas Speex"
+msgstr "Speex-fil"
 
 #: ../src/et_core.c:2835
 msgid "FLAC File"
-msgstr "Berkas FLAC"
+msgstr "FLAC-fil"
 
 #: ../src/et_core.c:2840
 msgid "MusePack File"
-msgstr "Berkas MusePack"
+msgstr "MusePack-file"
 
 #: ../src/et_core.c:2844
-#, fuzzy
 msgid "Monkey's Audio File"
-msgstr "Peringkat dari berkas audio."
+msgstr "Monkey's Audio File"
 
 #: ../src/et_core.c:2849
 msgid "MP4/AAC File"
-msgstr "Berkas MP4/AAC"
+msgstr "MP4-/AAC-fil"
 
 #: ../src/et_core.c:2855
 msgid "Wavpack File"
-msgstr "Berkas WavPack"
+msgstr "Wavpack-fil"
 
 #: ../src/et_core.c:2861
 msgid "Opus File"
-msgstr "Berkas Opus"
+msgstr "Opus-fil"
 
 #: ../src/et_core.c:2920 ../src/et_core.c:2975
 msgid "File not found"
-msgstr "Berkas tak ditemukan"
+msgstr "Fant ikke fila"
 
 #: ../src/et_core.c:2925
 #, c-format
 msgid "Cannot query file information (%s)"
-msgstr "Tak dapat meminta informasi berkas (%s)"
+msgstr "Klarte ikke å spørre etter filinformasjon (%s)"
 
 #: ../src/et_core.c:2959
 msgid "Read-only file"
-msgstr "Berkas hanya-baca"
+msgstr "Skrivebeskyttet fil"
 
 #. And refresh the number of files in this directory
 #: ../src/et_core.c:3023
 #, c-format
 msgid "One file"
 msgid_plural "%u files"
-msgstr[0] "%u berkas"
+msgstr[0] "Én fil"
+msgstr[1] "%u filer"
 
 #: ../src/et_core.c:3227
 #, c-format
 msgid "Images (%d)"
-msgstr "Citra (%d)"
+msgstr "Bilder (%d)"
 
 #. Bitrate
 #: ../src/et_core.c:3269 ../src/flac_header.c:205
@@ -2461,19 +2447,20 @@ msgstr "%d Hz"
 #, c-format
 msgid "Could not convert filename '%s' into system filename encoding"
 msgstr ""
+"Klarte ikke å konvertere filnavnet «%s» til systemets filnavn-tegnkoding"
 
 #: ../src/et_core.c:3422
 msgid "Try setting the environment variable G_FILENAME_ENCODING."
-msgstr ""
+msgstr "Prøv å definere miljøvariabelen G_FILENAME_ENCODING."
 
 #: ../src/et_core.c:3423 ../src/scan_dialog.c:690
 msgid "Filename translation"
-msgstr "Terjemahan nama berkas"
+msgstr "Filnavn-oversettelse"
 
 #: ../src/et_core.c:4129
-#, fuzzy, c-format
+#, c-format
 msgid "Error writing tag type %d to file %s (%s)"
-msgstr "Galat ketika menulis ke berkas unduhan."
+msgstr "Det oppstod en feil ved skriving av taggtypen %d til fila «%s» (%s)"
 
 #. Mode
 #. Mode
@@ -2482,12 +2469,12 @@ msgstr "Galat ketika menulis ke berkas unduhan."
 #: ../src/flac_header.c:215 ../src/mp4_header.cc:153 ../src/ogg_header.c:411
 #: ../src/opus_header.c:237 ../src/wavpack_header.c:88
 msgid "Channels:"
-msgstr "Kanal:"
+msgstr "Kanaler:"
 
 #: ../src/flac_tag.c:131 ../src/flac_tag.c:850 ../src/flac_tag.c:860
 #, c-format
 msgid "Error while opening file: '%s' as FLAC (%s)."
-msgstr "Galat saat membuka berkas: '%s' sebagai FLAC (%s)."
+msgstr "Det oppstod en feil ved åpning av fila «%s» som FLAC (%s)."
 
 #: ../src/flac_tag.c:352 ../src/ogg_tag.c:304
 #, c-format
@@ -2495,26 +2482,28 @@ msgid ""
 "The year value '%s' seems to be invalid in file '%s'. The information will "
 "be lost while saving tag."
 msgstr ""
+"År-verdien «%s» i fila «%s» ser ut til å være ugyldig. Denne informasjonen "
+"går tapt når du lagrer taggen."
 
 #: ../src/flac_tag.c:1061
 #, c-format
 msgid "Picture block isn't valid: '%s'"
-msgstr ""
+msgstr "Bildeblokka «%s» er ugyldig"
 
 #: ../src/flac_tag.c:1094
 #, c-format
 msgid "Error: Failed to write comments to file '%s' (%s)."
-msgstr "Gagal menulis file kunci privat ‘%s’: %s"
+msgstr "Feil: klarte ikke å skrive kommentarer til fila «%s» (%s)."
 
 #: ../src/flac_tag.c:1099 ../src/ogg_tag.c:1161
-#, fuzzy, c-format
+#, c-format
 msgid "Written tag of '%s'"
-msgstr "Tag Git:"
+msgstr "Tagg er skrevet til «%s»"
 
 #: ../src/id3_tag.c:205
 #, c-format
 msgid "Error while reading file: '%s' (%s)"
-msgstr "Galat saat membaca berkas: '%s' (%s)"
+msgstr "Det oppstod en feil ved lesing av fila «%s» (%s)"
 
 #: ../src/id3_tag.c:217
 #, c-format
@@ -2522,36 +2511,40 @@ msgid ""
 "As the following corrupted file '%s' will cause an error in id3lib, it will "
 "not be processed"
 msgstr ""
+"Fila «%s» er korrupt, og ville ha forårsaket en feil i id3lib. Den blir "
+"derfor ikke behandlet"
 
 #: ../src/id3_tag.c:219
 msgid "Corrupted file"
-msgstr "Berkas terkorupsi"
+msgstr "Korrupt fil"
 
 #: ../src/id3_tag.c:592
-#, fuzzy, c-format
+#, c-format
 msgid "Removed tag of '%s'"
-msgstr "Tag berhasil dihapus"
+msgstr "Fjernet tagg fra «%s»"
 
 #: ../src/id3_tag.c:596 ../src/id3_tag.c:696
-#, fuzzy, c-format
+#, c-format
 msgid "Error while removing ID3v1 tag of '%s' (%s)"
-msgstr "Suatu galat terjadi ketika menghapus grup"
+msgstr "Det oppstod en feil ved fjerning av ID3v1-tagg fra «%s» (%s)"
 
 #: ../src/id3_tag.c:598 ../src/id3_tag.c:668
-#, fuzzy, c-format
+#, c-format
 msgid "Error while removing ID3v2 tag of '%s' (%s)"
-msgstr "Suatu galat terjadi ketika menghapus grup"
+msgstr "Det oppstod en feil ved fjerning av ID3v1-tagg fra «%s» (%s)"
 
 #: ../src/id3_tag.c:617
-#, fuzzy, c-format
+#, c-format
 msgid "Error while updating ID3v2 tag of '%s' (%s)"
-msgstr "Terjadi galat sewaktu memperbaharui berkas."
+msgstr "Det oppstod en feil ved oppdatering av ID3v2-tagg for «%s» (%s)"
 
 #: ../src/id3_tag.c:645
 msgid ""
 "You have tried to save this tag to Unicode but it was detected that your "
 "version of id3lib is buggy"
 msgstr ""
+"Du har prøvd å lagre denne taggen i Unicode-format, men versjonen du bruker "
+"av id3lib inneholder feil"
 
 #: ../src/id3_tag.c:647
 #, c-format
@@ -2564,102 +2557,101 @@ msgid ""
 "\n"
 "File: %s"
 msgstr ""
+"Hvis du laster inn denne fila på nytt, kan det hende at enkelte tegn i "
+"taggen ikke vises korrekt. Bruk programfikset src/id3lib/"
+"patch_id3lib_3.8.3_UTF16_writing_bug.diff på id3lib, som er tilgjengelig i "
+"EasyTAGs pakkekilder.\n"
+"Denne meldinga vises bare én gang.\n"
+"\n"
+"Fil: %s"
 
 #: ../src/id3_tag.c:654
 msgid "Buggy id3lib"
-msgstr ""
+msgstr "id3lib inneholder feil"
 
 #: ../src/id3_tag.c:688
-#, fuzzy, c-format
+#, c-format
 msgid "Error while updating ID3v1 tag of '%s' (%s)"
-msgstr "Terjadi galat sewaktu memperbaharui berkas."
+msgstr "Det oppstod en feil ved oppdatering av ID3v1-tagg for «%s» (%s)"
 
 #: ../src/id3_tag.c:702 ../src/id3v24_tag.c:1108
 #, c-format
 msgid "Updated tag of '%s'"
-msgstr ""
+msgstr "Oppdatert tag for «%s»"
 
 #: ../src/id3_tag.c:721
 msgid "No error reported"
-msgstr "Tak ada galat yang dilaporkan"
+msgstr "Ingen feil er rapportert"
 
 #: ../src/id3_tag.c:723
 msgid "No available memory"
-msgstr "Tak ada memori tersedia"
+msgstr "Intet minne tilgjengelig"
 
 #: ../src/id3_tag.c:725
 msgid "No data to parse"
-msgstr "Tak ada data untuk diurai"
+msgstr "Ingen data å lese"
 
 #: ../src/id3_tag.c:727
-#, fuzzy
 msgid "Improperly formatted data"
-msgstr "Token kesalahan yang diformat tidak benar"
+msgstr "Feilformaterte data"
 
 #: ../src/id3_tag.c:729
-#, fuzzy
 msgid "No buffer to write to"
-msgstr "Tulis singgahan query ke berkas"
+msgstr "Intet mellomlager å skrive til"
 
 #: ../src/id3_tag.c:731
 msgid "Buffer is too small"
-msgstr "Penyangga terlalu kecil"
+msgstr "Mellomlageret er for lite"
 
 #: ../src/id3_tag.c:733
-#, fuzzy
 msgid "Invalid frame ID"
-msgstr "id aplikasi tak valid: '%s'\n"
+msgstr "Ugyldig ramme-ID"
 
 #: ../src/id3_tag.c:735
-#, fuzzy
 msgid "Requested field not found"
-msgstr "Item '%s' yang dipinta tidak ada"
+msgstr "Fant ikke etterspurt felt"
 
 #: ../src/id3_tag.c:737
-#, fuzzy
 msgid "Unknown field type"
-msgstr "%d. tipe ruas '%c' tak dikenal."
+msgstr "Ukjent felttype"
 
 #: ../src/id3_tag.c:739
 msgid "Tag is already attached to a file"
-msgstr ""
+msgstr "Taggen er allerede festet til en fil"
 
 #: ../src/id3_tag.c:741
-#, fuzzy
 msgid "Invalid tag version"
-msgstr "Versi Tag GPS"
+msgstr "Ugyldig taggversjon"
 
 #: ../src/id3_tag.c:743
-#, fuzzy
 msgid "No file to parse"
-msgstr "Gagal mengurai berkas: %s"
+msgstr "Ingen fil å lese"
 
 #: ../src/id3_tag.c:745
 msgid "Attempting to write to a read-only file"
-msgstr "Mencoba menulis ke suatu berkas yang hanya-baca"
+msgstr "Prøver å skrive til en skrivebeskyttet fil"
 
 #: ../src/id3_tag.c:747
 msgid "Error in compression/uncompression"
-msgstr ""
+msgstr "Feil under komprimering/utpakking"
 
 #: ../src/id3_tag.c:749
-#, fuzzy
 msgid "Unknown error message"
-msgstr "Galat saat menerima pesan: %s"
+msgstr "Ukjent feilmelding"
 
 #: ../src/id3_tag.c:1357
 #, c-format
 msgid "Error while creating temporary file: '%s'"
-msgstr "Galat ketika membuat berkas sementara: ‘%s’"
+msgstr "Det oppstod en feil ved opprettelse av den midlertidige fila «%s»"
 
 #: ../src/id3_tag.c:1364
 msgid "Error while creating temporary file"
-msgstr "Galat ketika membuat berkas sementara"
+msgstr "Det oppstod en feil ved opprettelse av midlertidig fil"
 
 #: ../src/id3_tag.c:1384
 #, c-format
 msgid "Error while writing to file: '%s' (%s)"
-msgstr "Galat ketika menulis ke berkas: '%s' (%s)"
+msgstr "Det oppstod en feil ved skriving til fila «%s» (%s)"
 
 #. Translators: The first string is a filename, the
 #. * second string is the number of bytes that were
@@ -2670,149 +2662,140 @@ msgstr "Galat ketika menulis ke berkas: '%s' (%s)"
 #, c-format
 msgid "Cannot write tag of file ‘%s’ (a byte was missing)"
 msgid_plural "Cannot write tag of file ‘%s’ (%s bytes were missing)"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Klarte ikke å skrive tagg til fila «%s» (den mangler en byte)"
+msgstr[1] "Klarte ikke å skrive tagg til fila «%s» (den mangler %s byte)"
 
 #: ../src/id3v24_tag.c:1584
 #, c-format
 msgid "Cannot save tag of file '%s'"
-msgstr "Tak dapat menyimpan tag berkas ‘%s’"
+msgstr "Klarte ikke å lagre tagg i fila «%s»"
 
 #: ../src/id3v24_tag.c:1595
-#, fuzzy, c-format
+#, c-format
 msgid "Size error while saving tag of '%s'"
-msgstr "Galat saat menyimpan informasi lagu"
+msgstr "Det oppstod en størrelsesfeil da taggen for «%s» ble lagret"
 
 #: ../src/log.c:100
 msgid "Log"
-msgstr "Log"
+msgstr "Logg"
 
 #: ../src/misc.c:720
 msgid "You must type a program name"
-msgstr "Anda harus mengetikkan suatu nama program"
+msgstr "Du må skrive inn et programnavn"
 
 #: ../src/misc.c:721
-#, fuzzy
 msgid "Program Name Error"
-msgstr "Nama program salah: %s"
+msgstr "Feil i programnavn"
 
 #: ../src/misc.c:800
 #, c-format
 msgid "Executed command: %s"
-msgstr "Perintah yang dieksekusi: %s"
+msgstr "Kjørt kommando: %s"
 
 #: ../src/misc.c:807
 #, c-format
 msgid "Failed to launch program: %s"
-msgstr "Gagal meluncurkan program: %s"
+msgstr "Klarte ikke å starte programmet %s"
 
 #: ../src/misc.c:824
 msgid "Select File"
-msgstr "Pilih Berkas"
+msgstr "Velg fil"
 
 #: ../src/misc.c:830
 msgid "Select Directory"
-msgstr "Pilih Direktori"
+msgstr "Velg mappe"
 
 #: ../src/misc.c:1142
-#, fuzzy
 msgid "Generate Playlist"
-msgstr "Gagal menghasilkan daftar putar"
+msgstr "Lag spilleliste"
 
 #: ../src/misc.c:1166
-#, fuzzy
 msgid "M3U Playlist Name"
-msgstr "Simpan proyek sebagai playlist M3U"
+msgstr "M3U-spillelistenavn"
 
 #: ../src/misc.c:1181
-#, fuzzy
 msgid "Use directory name"
-msgstr ""
-"%s\n"
-"adalah suatu nama direktori"
+msgstr "Bruk mappenavn"
 
 #. Playlist options
 #: ../src/misc.c:1198
 msgid "Playlist Options"
-msgstr ""
+msgstr "Spillelistevalg"
 
 #: ../src/misc.c:1204
-#, fuzzy
 msgid "Include only the selected files"
-msgstr "Hanya boleh memilih berkas lokal"
+msgstr "Bare ta med de valgte filene"
 
 #: ../src/misc.c:1207
 msgid ""
 "If activated, only the selected files will be written in the playlist file. "
 "Else, all the files will be written."
 msgstr ""
+"Hvis dette er slått på, tas bare valgte filer med i spillelistefila. Ellers "
+"tas alle filene med."
 
 #: ../src/misc.c:1210
 msgid "Use full path for files in playlist"
-msgstr ""
+msgstr "Bruk fullstendig filsti for filer i spillelista"
 
 #: ../src/misc.c:1213
 msgid "Use relative path for files in playlist"
-msgstr ""
+msgstr "Bruk relativ filsti for filer i spillelista"
 
 #. Create playlist in parent directory
 #: ../src/misc.c:1219
 msgid "Create playlist in the parent directory"
-msgstr "Buat daftar putar di direktori induk"
+msgstr "Lag ny spilleliste i foreldermappa"
 
 #: ../src/misc.c:1222
 msgid "If activated, the playlist will be created in the parent directory."
-msgstr ""
+msgstr "Hvis dette er slått på, lagres spillelister i foreldermapper."
 
 #. DOS Separator
 #: ../src/misc.c:1226
-#, fuzzy
 msgid "Use DOS directory separator"
-msgstr "Direktori untuk berkas temporer"
+msgstr "Bruk DOS-vennlig mappeskilletegn"
 
 #: ../src/misc.c:1232
 msgid ""
 "This option replaces the UNIX directory separator '/' into DOS separator "
 "'\\'."
 msgstr ""
+"Dette valget erstatter UNIX-mappeskilletegnet «/» med DOS-skilletegnet «\\»."
 
 #: ../src/misc.c:1241
 msgid "Playlist Content"
-msgstr "Isi Daftar Putar"
+msgstr "Spilleliste-innhold"
 
 #: ../src/misc.c:1247
-#, fuzzy
 msgid "Write only list of files"
-msgstr "* list       daftar berkas dalam arsip\n"
+msgstr "Bare skriv en liste over filer"
 
 #: ../src/misc.c:1251
-#, fuzzy
 msgid "Write info using filename"
-msgstr "Sedang mengganti info paket yang tersedia, dengan %s.\n"
+msgstr "Skriv info ved bruk av filnavn"
 
 #: ../src/misc.c:1254
-#, fuzzy
 msgid "Write info using:"
-msgstr "Sedang mengganti info paket yang tersedia, dengan %s.\n"
+msgstr "Skriv info ved bruk av:"
 
 #: ../src/misc.c:1468
 #, c-format
 msgid "Cannot write playlist file '%s'"
-msgstr "Tak bisa menulis berkas daftar putar ‘%s’"
+msgstr "Klarte ikke å skrive spilleliste-fila «%s»"
 
 #: ../src/misc.c:1472
 msgid "Playlist File Error"
-msgstr "Galat Berkas Daftar Putar"
+msgstr "Feil med spillelistefil"
 
 #: ../src/misc.c:1480
-#, fuzzy, c-format
+#, c-format
 msgid "Written playlist file '%s'"
-msgstr "Untuk menyimpan daftar putar ke berkas"
+msgstr "Spilleliste-fila «%s» er skrevet"
 
 #: ../src/misc.c:1544 ../src/scan_dialog.c:2747 ../src/scan_dialog.c:2809
-#, fuzzy
 msgid "Invalid scanner mask"
-msgstr "Mask pengubah bagi akselerator"
+msgstr "Ugyldig skannermaske"
 
 #: ../src/misc.c:1908
 msgid "CD"
@@ -2820,25 +2803,25 @@ msgstr "CD"
 
 #: ../src/misc.c:1930
 msgid "Find Files"
-msgstr "Cari Berkas"
+msgstr "Finn filer"
 
 #: ../src/misc.c:1962
 msgid ""
 "Type the word to search into files. Or type nothing to display all files."
 msgstr ""
+"Skriv ordet du vil søke etter, eller la feltet stå tomt for å vise alle "
+"filer."
 
 #. Where...
 #: ../src/misc.c:1968
-#, fuzzy
 msgid "In:"
-msgstr "Masuk:"
+msgstr "I:"
 
 #. Translators: This option is for the previous 'in' option. For instance,
 #. * translate this as "Search" "In:" "the Filename".
 #: ../src/misc.c:1973
-#, fuzzy
 msgid "the Filename"
-msgstr "Nama file"
+msgstr "filnavnet"
 
 #. Translators: This option is for the previous 'in' option. For instance,
 #. * translate this as "Search" "In:" "the Tag".
@@ -2846,121 +2829,119 @@ msgstr "Nama file"
 #. * grammatical problem (which uses one word to say "in the tag" like here)
 #.
 #: ../src/misc.c:1979
-#, fuzzy
 msgid "the Tag"
-msgstr "Tag"
+msgstr "taggen"
 
 #. Property of the search
 #: ../src/misc.c:1990 ../src/prefs.c:335
 msgid "Case sensitive"
-msgstr "Peka huruf besar kecil"
+msgstr "Skill mellom små og store bokstaver"
 
 #: ../src/misc.c:2217
-#, fuzzy
 msgid "Ready to search…"
-msgstr "Ketik untuk mencari…"
+msgstr "Klar til å søke …"
 
 #: ../src/misc.c:2437
 #, c-format
 msgid "Found one file"
 msgid_plural "Found %d files"
-msgstr[0] "Menemukan %d berkas"
+msgstr[0] "Fant én fil"
+msgstr[1] "Fant %d filer"
 
 #: ../src/misc.c:2722
-#, fuzzy
 msgid "Load Filenames From a Text File"
-msgstr "Muat berkas core dari disk"
+msgstr "Last inn filnavn fra en tekstfil"
 
 #: ../src/misc.c:2751
 msgid "File:"
-msgstr "Berkas:"
+msgstr "Fil:"
 
 #. Button 'load'
 #. the signal attached to this button, to load the file, is placed after the LoadFileContentList definition
 #: ../src/misc.c:2770
 msgid " Load "
-msgstr " Muat "
+msgstr "Last inn"
 
 #: ../src/misc.c:2788
 msgid "Content of Text File"
-msgstr "Isi Berkas Teks"
+msgstr "Innhold i tekstfil"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
 #: ../src/misc.c:2809 ../src/misc.c:2904
 msgid "Insert a blank line before the selected line"
-msgstr ""
+msgstr "Sett inn en tom linje før valgt linje"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
 #: ../src/misc.c:2818 ../src/misc.c:2913
 msgid "Delete the selected line"
-msgstr "Hapus baris yang dipilih"
+msgstr "Slett valgt linje"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
 #: ../src/misc.c:2827 ../src/misc.c:2922 ../src/misc.c:3403
 msgid "Delete all blank lines"
-msgstr "Hapus semua baris kosong"
+msgstr "Slett alle tomme linjer"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
 #: ../src/misc.c:2839 ../src/misc.c:2934
-#, fuzzy
 msgid "Move up the selected line"
-msgstr "Memindah baris yang dipilih sebaris ke atas"
+msgstr "Flytt valgt linje opp"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
 #: ../src/misc.c:2848 ../src/misc.c:2943
-#, fuzzy
 msgid "Move down the selected line"
-msgstr "Memindah baris yang dipilih sebaris ke bawah"
+msgstr "Flytt valgt linje ned"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
 #: ../src/misc.c:2860 ../src/misc.c:2955 ../src/misc.c:3427
 msgid "Reload"
-msgstr "Muat Ulang"
+msgstr "Last inn på nytt"
 
 #: ../src/misc.c:2882
 msgid "List of Files"
-msgstr "Daftar Berkas"
+msgstr "Liste over filer"
 
 #: ../src/misc.c:2977
 msgid "Selected line:"
-msgstr "Baris yang dipilih"
+msgstr "Valgt linje:"
 
 #: ../src/misc.c:2995
 msgid ""
 "When activating this option, after loading the filenames, the current "
 "selected scanner will be ran (the scanner window must be opened)."
 msgstr ""
+"Når du slår på dette valget, kjøres valgt skanner (skannervinduet må være "
+"Ã¥pent) etter at filnavnene er lastet inn."
 
 #: ../src/misc.c:3082
 #, c-format
 msgid "Cannot retrieve file info (%s)"
-msgstr "Tak bisa mengambil info berkas (%s)"
+msgstr "Klarte ikke å hente filinfo (%s)"
 
 #: ../src/misc.c:3145
 #, c-format
 msgid "Can't open file '%s' (%s)"
-msgstr "Tak dapat membuka berkas '%s' (%s)"
+msgstr "Klarte ikke å åpne fila «%s» (%s)."
 
 #: ../src/misc.c:3174
 #, c-format
 msgid "Error reading file (%s)"
-msgstr "Galat saat membaca berkas (%s)"
+msgstr "Det oppstod en feil ved lesing av fil (%s)"
 
 #: ../src/misc.c:3391
 msgid "Insert a blank line"
-msgstr "Menyisipkan suatu baris kosong"
+msgstr "Sett inn en tom linje"
 
 #: ../src/misc.c:3397
 msgid "Delete this line"
-msgstr "Menghapus baris ini"
+msgstr "Slett denne linja"
 
 #: ../src/misc.c:3412
 msgid "Move up this line"
-msgstr "Memindah baris ini ke atas"
+msgstr "Flytt denne linja opp"
 
 #: ../src/misc.c:3418
 msgid "Move down this line"
-msgstr "Memindah baris ini ke bawah"
+msgstr "Flytt denne linja ned"
 
 #. Mode changed to profile name
 #: ../src/monkeyaudio_header.c:78 ../src/musepack_header.c:80
@@ -2970,17 +2951,17 @@ msgstr "Profil:"
 
 #: ../src/mp4_header.cc:60 ../src/mp4_tag.cc:91 ../src/mp4_tag.cc:284
 msgid "MP4 format invalid"
-msgstr "Format MP4 tak valid"
+msgstr "Ugyldig MP4-format"
 
 #: ../src/mp4_header.cc:68
 #, c-format
 msgid "File contains no audio track: '%s'"
-msgstr "Berkas tak memuat trek audio: '%s'"
+msgstr "Fila «%s» inneholder ikke avspillbar lyd"
 
 #: ../src/mp4_header.cc:79
 #, c-format
 msgid "Error reading properties from file: '%s'"
-msgstr "Galat saat membaca properti dari berkas: '%s'"
+msgstr "Det oppstod en feil ved lesing av egenskaper for fila «%s»"
 
 #: ../src/mp4_header.cc:140 ../src/mpeg_header.c:204
 #, c-format
@@ -2990,24 +2971,23 @@ msgstr "~%d kb/s"
 #: ../src/mp4_tag.cc:101 ../src/mp4_tag.cc:293
 #, c-format
 msgid "Error reading tags from file: '%s'"
-msgstr "Galat saat membaca tag dari berkas: '%s'"
+msgstr "Det oppstod en feil ved lesing av tagger fra fila «%s»"
 
 #: ../src/mpeg_header.c:64
 msgid "Stereo"
 msgstr "Stereo"
 
 #: ../src/mpeg_header.c:65
-#, fuzzy
 msgid "Joint stereo"
-msgstr "Stereo gabungan"
+msgstr "Kombinert stereo"
 
 #: ../src/mpeg_header.c:66
 msgid "Dual channel"
-msgstr "Kanal ganda"
+msgstr "Dobbeltkanal"
 
 #: ../src/mpeg_header.c:67
 msgid "Single channel"
-msgstr "Kanal tunggal"
+msgstr "Én kanal"
 
 #. MPEG, Layer versions
 #: ../src/mpeg_header.c:194
@@ -3018,7 +2998,7 @@ msgstr "MPEG"
 #: ../src/ogg_header.c:227
 #, c-format
 msgid "Error while opening file: '%s' (%s)"
-msgstr "Galat saat membuka berkas: '%s' (%s)"
+msgstr "Det oppstod en feil ved åpning av fila «%s» (%s)"
 
 #: ../src/ogg_header.c:243
 #, c-format
@@ -3026,26 +3006,28 @@ msgid ""
 "Ogg Vorbis: The specified bitstream does not exist or the file has been "
 "initialized improperly (file: '%s')."
 msgstr ""
+"Ogg Vorbis: Valgt bitstrøm finnes ikke, eller fila har blitt lastet inn på "
+"feil måte (fil: «%s»)."
 
 #: ../src/ogg_header.c:279
 #, c-format
 msgid "Ogg Vorbis: Read from media returned an error (file: '%s')."
-msgstr ""
+msgstr "Ogg Vorbis: Det oppstod en feil ved lesing fra mediet (fil: «%s»)."
 
 #: ../src/ogg_header.c:282
 #, c-format
 msgid "Ogg Vorbis: Bitstream is not Vorbis data (file: '%s')."
-msgstr ""
+msgstr "Ogg Vorbis: Bitstrømmen inneholder ikke Vorbis-data (fil: «%s»)."
 
 #: ../src/ogg_header.c:285
 #, c-format
 msgid "Ogg Vorbis: Vorbis version mismatch (file: '%s')."
-msgstr ""
+msgstr "Ogg Vorbis: Vorbis-versjonene samsvarer ikke (fil: «%s»)."
 
 #: ../src/ogg_header.c:288
 #, c-format
 msgid "Ogg Vorbis: Invalid Vorbis bitstream header (file: '%s')."
-msgstr ""
+msgstr "Ogg Vorbis: Ugyldig Vorbis-bitstrøm-hode (fil: «%s»)."
 
 #: ../src/ogg_header.c:291
 #, c-format
@@ -3053,229 +3035,233 @@ msgid ""
 "Ogg Vorbis: Internal logic fault, indicates a bug or heap/stack corruption "
 "(file: '%s')."
 msgstr ""
+"Ogg Vorbis: Intern logisk feil. Dette tyder ofte på en programfeil eller "
+"ødelagt haug/stabel (fil: «%s»)."
 
 #: ../src/ogg_header.c:337
 #, c-format
 msgid "Error: Failed to open file: '%s' as Vorbis (%s)."
-msgstr "Galat: Ggagal membuka berkas: '%s' sebagai Vorbis (%s)."
+msgstr "Feil: klarte ikke å åpne fila «%s» som Vorbis (%s)."
 
 #: ../src/ogg_tag.c:706 ../src/ogg_tag.c:881
 #, c-format
 msgid "Warning: The Ogg Vorbis file '%s' contains an ID3v2 tag."
-msgstr ""
+msgstr "Advarsel: Ogg Vorbis-fila «%s» inneholder en ID3v2-tagg."
 
 #: ../src/ogg_tag.c:1030 ../src/picture.c:1082
 #, c-format
 msgid "Error with 'loader_write': %s"
-msgstr "Galat dengan 'loader_write': %s"
+msgstr "Det oppstod en feil med «loader_write». %s"
 
 #: ../src/ogg_tag.c:1045 ../src/picture.c:1005
 #, c-format
 msgid "Error with 'loader_close': %s"
-msgstr "Galat dengan 'loader_close': %s"
+msgstr "Det oppstod en feil med «loader_close». %s"
 
 #: ../src/picture.c:244 ../src/picture.c:269
 #, c-format
 msgid "Image file not loaded: %s"
-msgstr "Berkas citra tak dimuat: %s"
+msgstr "Bildefila ble ikke lastet inn. %s"
 
 #: ../src/picture.c:261
 #, c-format
 msgid "Cannot open file: '%s'"
-msgstr "Tak dapat membuka berkas: '%s'"
+msgstr "Klarte ikke å åpne fila: «%s»"
 
 #: ../src/picture.c:265
 msgid "Image File Error"
-msgstr "Galat Berkas Citra"
+msgstr "Feil med bildefil"
 
 #: ../src/picture.c:276
 msgid "Image file loaded"
-msgstr "Berkas citra dimuat"
+msgstr "Bildefil er lastet inn"
 
 #: ../src/picture.c:334
 msgid "Add Images"
-msgstr "Tambah Citra"
+msgstr "Legg til bilder"
 
 #: ../src/picture.c:344 ../src/picture.c:701
 msgid "All Files"
-msgstr "Semua Berkas"
+msgstr "Alle filer"
 
 #: ../src/picture.c:350 ../src/picture.c:707
 msgid "PNG and JPEG"
-msgstr "PNG dan JPEG"
+msgstr "PNG og JPEG"
 
 #: ../src/picture.c:477
 #, c-format
 msgid "Image Properties %d/%d"
-msgstr "Properti Citra %d/%d"
+msgstr "Bildeegenskaper %d/%d"
 
 #: ../src/picture.c:503
 msgid "Image Type"
-msgstr "Tipe Citra"
+msgstr "Bildetype"
 
 #. Description of the picture
 #: ../src/picture.c:561
 msgid "Image Description:"
-msgstr "Deskripsi Citra"
+msgstr "Bildebeskrivelse:"
 
 #: ../src/picture.c:688
 #, c-format
 msgid "Save Image %d/%d"
-msgstr "Simpan Citra %d/%d"
+msgstr "Lagre bilde %d/%d"
 
 #: ../src/picture.c:763
 #, c-format
 msgid "Image file not saved: %s"
-msgstr "Berkas citra tak disimpan: %s"
+msgstr "Bildefila ble ikke lagret. %s"
 
 #: ../src/picture.c:846
 msgid "JPEG image"
-msgstr "Citra JPEG"
+msgstr "JPEG-bilde"
 
 #: ../src/picture.c:848
 msgid "PNG image"
-msgstr "Citra PNG"
+msgstr "PNG-bilde"
 
 #: ../src/picture.c:850
 msgid "GIF image"
-msgstr "Citra GIF"
+msgstr "GIF-bilde"
 
 #: ../src/picture.c:852
 msgid "Unknown image"
-msgstr "Citra tak dikenal"
+msgstr "Ukjent bilde"
 
 #: ../src/picture.c:864
 msgid "32x32 pixel PNG file icon"
-msgstr ""
+msgstr "PNG-filikon av 32x32 piksler"
 
 #: ../src/picture.c:866
 msgid "Other file icon"
-msgstr "Ikon berkas lain"
+msgstr "Annet filikon"
 
 #: ../src/picture.c:868
 msgid "Cover (front)"
-msgstr "Sampul (depan)"
+msgstr "Omslag (framside)"
 
 #: ../src/picture.c:870
 msgid "Cover (back)"
-msgstr "Sampul (belakang)"
+msgstr "Omslag (bakside)"
 
 #: ../src/picture.c:872
 msgid "Leaflet page"
-msgstr "Halaman leaflet"
+msgstr "Leaflet-side"
 
 #: ../src/picture.c:874
 msgid "Media (e.g. label side of CD)"
-msgstr ""
+msgstr "Medium (f.eks. etikettsiden av en CD)"
 
 #: ../src/picture.c:876
 msgid "Lead artist/lead performer/soloist"
-msgstr ""
+msgstr "Hovedartist/hovedutøver/solist"
 
 #: ../src/picture.c:878
-#, fuzzy
 msgid "Artist/performer"
-msgstr "Artis Album"
+msgstr "Artist/utøver"
 
 #: ../src/picture.c:880
 msgid "Conductor"
-msgstr "Dirigen"
+msgstr "Dirigent"
 
 #: ../src/picture.c:882
 msgid "Band/Orchestra"
-msgstr "Band/Orkestra"
+msgstr "Band/Orkester"
 
 #: ../src/picture.c:886
-#, fuzzy
 msgid "Lyricist/text writer"
-msgstr "Penulis Image Diska"
+msgstr "Lyriker/tekstforfatter"
 
 #: ../src/picture.c:888
 msgid "Recording location"
-msgstr "Lokasi perekaman"
+msgstr "Opptakssted"
 
 #: ../src/picture.c:890
 msgid "During recording"
-msgstr "Saat perekaman"
+msgstr "Under opptak"
 
 #: ../src/picture.c:892
-#, fuzzy
 msgid "During performance"
-msgstr "Saat "
+msgstr "Under fremføring"
 
 #: ../src/picture.c:894
-#, fuzzy
 msgid "Movie/video screen capture"
-msgstr "Rekam video pendek atas layar"
+msgstr "Film/video med skjermopptak"
 
 #: ../src/picture.c:896
 msgid "A bright colored fish"
-msgstr "Seekor ikan berwarna cerah"
+msgstr "En lysfarget fisk"
 
 #: ../src/picture.c:898
 msgid "Illustration"
-msgstr "Ilustrasi"
+msgstr "Illustrasjon"
 
 #: ../src/picture.c:900
 msgid "Band/Artist logotype"
-msgstr ""
+msgstr "Band-/artist-logotype"
 
 #: ../src/picture.c:902
-#, fuzzy
 msgid "Publisher/studio logotype"
-msgstr "Citra 3D Studio"
+msgstr "Utgiver/studio-logotype"
 
 #: ../src/picture.c:906
 msgid "Unknown image type"
-msgstr "Tipe citra tak dikenal"
+msgstr "Ukjent bildetype"
 
 #: ../src/picture.c:936 ../src/picture.c:947
 msgid "pixels"
-msgstr "piksel"
+msgstr "piksler"
 
 #: ../src/picture.c:937 ../src/picture.c:948
 msgid "Type"
-msgstr "Tipe"
+msgstr "Type"
 
 #: ../src/picture.c:949
 msgid "Description"
-msgstr "Deskripsi"
+msgstr "Synkende, etter beskrivelse"
 
 #: ../src/picture.c:1065
 msgid ""
 "Cannot display the image because not enough data has been read to determine "
 "how to create the image buffer."
 msgstr ""
+"Klarte ikke å vise bildet, fordi programmet må lese ytterligere data for å "
+"vite hvordan bilde-mellomlageret skal opprettes."
 
 #: ../src/picture.c:1072
 msgid "Cannot display the image"
-msgstr "Tak data menampilkan citra"
+msgstr "Klarte ikke å vise bildet"
 
 #: ../src/picture.c:1074
 msgid ""
 "Not enough data has been read to determine how to create the image buffer."
 msgstr ""
+"Det har ikke blitt lest nok data til å kunne avgjøre hvordan bilde-"
+"mellomlageret skal opprettes."
 
 #: ../src/picture.c:1076
 msgid "Load Image File"
-msgstr "Muat Berkas Citra"
+msgstr "Last inn bildefil"
 
 #. Label
 #: ../src/prefs.c:152
 msgid "Default directory:"
-msgstr "Direktori baku:"
+msgstr "Standardmappe:"
 
 #: ../src/prefs.c:165
 msgid ""
 "Specify the directory where your files are located. This path will be loaded "
 "when EasyTAG starts without parameter."
 msgstr ""
+"Oppgi mappa hvor filene dine ligger. Denne stien blir lastet inn når EasyTAG "
+"startes uten parametre."
 
 #. Load directory on startup
 #: ../src/prefs.c:186
 msgid ""
 "Load on startup the default directory or the directory passed as argument"
 msgstr ""
+"Last inn standardmappa ved oppstart, eller mappa som brukes som argument"
 
 #: ../src/prefs.c:189
 msgid ""
@@ -3283,254 +3269,259 @@ msgid ""
 "Note that this path may be overridden by the parameter passed to easytag "
 "(easytag /path_to/mp3_files)."
 msgstr ""
+"Søk etter filer automatisk i standardmappa når EasyTAG starter opp. Du kan "
+"overstyre dette ved å starte easytag med en annen filsti som parameter (f."
+"eks. «easytag /sti_til/mp3-filer»)."
 
 #. Browse subdirectories
 #: ../src/prefs.c:194
 msgid "Search subdirectories"
-msgstr "Cari subdirektori"
+msgstr "Søk i undermapper"
 
 #: ../src/prefs.c:197
 msgid "Search subdirectories for files when reading a directory into the tree."
-msgstr ""
+msgstr "Se etter filer i undermapper når en mappe leses inn i trevisninga."
 
 #. Open the node to show subdirectories
 #: ../src/prefs.c:201
 msgid "Show subdirectories when selecting a directory"
-msgstr ""
+msgstr "Vis undermapper når en mappe velges"
 
 #: ../src/prefs.c:205
 msgid ""
 "This expands the selected node into the file browser to display the sub-"
 "directories."
-msgstr ""
+msgstr "Dette utvider valgt element i filutforskeren og viser undermappene."
 
 #. Browse hidden directories
 #: ../src/prefs.c:209
 msgid "Search hidden directories"
-msgstr "Cari direktori-direktori tersembunyi"
+msgstr "Søk gjennom skjulte mapper"
 
 #: ../src/prefs.c:214
 msgid "Search hidden directories for files (directories starting by a '.')."
-msgstr ""
+msgstr "Se etter filer i skjulte mapper (mappenavn som begynner på «.»)."
 
 #.
 #. * Misc
 #.
 #: ../src/prefs.c:222
 msgid "Misc"
-msgstr "Rupa-rupa"
+msgstr "Div"
 
 #. User interface
 #: ../src/prefs.c:228
 msgid "User Interface"
-msgstr "Antarmuka Pengguna"
+msgstr "Brukergrensesnitt"
 
 #. Show header infos
 #: ../src/prefs.c:235
 msgid "Show header information of file"
-msgstr "Tampilkan informasi kepala berkas"
+msgstr "Vis filas hodeinformasjon"
 
 #: ../src/prefs.c:238
 msgid ""
 "If activated, information about the file as the bitrate, the time, the size, "
 "will be displayed under the filename entry."
 msgstr ""
+"Hvis dette er slått på, vises informasjon om fila - som bitfrekvens, "
+"varighet og størrelse - under filnavnet."
 
 #: ../src/prefs.c:244
 msgid "Display changed files in list using:"
-msgstr "Tampilkan berkas yang berubah dalam daftar memakai:"
+msgstr "Vis endrede filer i lista med:"
 
 #: ../src/prefs.c:247
 msgid "Red color"
-msgstr "Warna merah"
+msgstr "Rød farge"
 
 #: ../src/prefs.c:253
 msgid "Bold style"
-msgstr "Gaya tebal"
+msgstr "Fet stil"
 
 #. Sorting List Options
 #: ../src/prefs.c:259
 msgid "Sorting List Options"
-msgstr "Opsi Daftar Pengurutan"
+msgstr "Valg for listesortering"
 
 #. Sorting method
 #: ../src/prefs.c:268
 msgid "Sort the file list by:"
-msgstr "Urutkan daftar berkas menurut:"
+msgstr "Sorter fillista etter:"
 
 #: ../src/prefs.c:278
 msgid "Ascending filename"
-msgstr "Nama berkas urut naik"
+msgstr "Stigende, etter filnavn"
 
 #: ../src/prefs.c:280
 msgid "Descending filename"
-msgstr "Nama berkas urut turun"
+msgstr "Synkende, etter filnavn"
 
 #: ../src/prefs.c:281
 msgid "Ascending title"
-msgstr "Judul urut naik"
+msgstr "Stigende, etter tittel"
 
 #: ../src/prefs.c:282
 msgid "Descending title"
-msgstr "Judul urut turun"
+msgstr "Synkende, etter tittel"
 
 #: ../src/prefs.c:283
 msgid "Ascending artist"
-msgstr "Artis urut naik"
+msgstr "Stigende, etter artist"
 
 #: ../src/prefs.c:284
 msgid "Descending artist"
-msgstr "Artis urut turun"
+msgstr "Synkende, etter artist"
 
 #: ../src/prefs.c:286
 msgid "Ascending album artist"
-msgstr "Artis album urut naik"
+msgstr "Stigende, etter albumartist"
 
 #: ../src/prefs.c:288
 msgid "Descending album artist"
-msgstr "Artis album urut turun"
+msgstr "Synkende, etter albumartist"
 
 #: ../src/prefs.c:289
 msgid "Ascending album"
-msgstr "Album urut naik"
+msgstr "Stigende, etter album"
 
 #: ../src/prefs.c:290
 msgid "Descending album"
-msgstr "Album urut turun"
+msgstr "Synkende, etter album"
 
 #: ../src/prefs.c:291
 msgid "Ascending year"
-msgstr "Tahun urut naik"
+msgstr "Stigende, etter år"
 
 #: ../src/prefs.c:292
 msgid "Descending year"
-msgstr "Tahun urut turun"
+msgstr "Synkende, etter år"
 
 #: ../src/prefs.c:294
 msgid "Ascending disc number"
-msgstr "Nomor cakram urut naik"
+msgstr "Stigende, etter platenummer"
 
 #: ../src/prefs.c:296
 msgid "Descending disc number"
-msgstr "Nomor cakram urut turun"
+msgstr "Synkende, etter platenummer"
 
 #: ../src/prefs.c:298
 msgid "Ascending track number"
-msgstr "Nomor trek urut naik"
+msgstr "Stigende, etter spornummer"
 
 #: ../src/prefs.c:300
 msgid "Descending track number"
-msgstr "Nomor trek urut turun"
+msgstr "Synkende, etter spornummer"
 
 #: ../src/prefs.c:301
 msgid "Ascending genre"
-msgstr "Aliran urut naik"
+msgstr "Stigende, etter sjanger"
 
 #: ../src/prefs.c:302
 msgid "Descending genre"
-msgstr "Aliran urut turun"
+msgstr "Synkende, etter sjanger"
 
 #: ../src/prefs.c:303
 msgid "Ascending comment"
-msgstr "Komentar urut naik"
+msgstr "Stigende, etter kommentar"
 
 #: ../src/prefs.c:304
 msgid "Descending comment"
-msgstr "Komentar urut turun"
+msgstr "Synkende, etter kommentar"
 
 #: ../src/prefs.c:306
-#, fuzzy
 msgid "Ascending composer"
-msgstr "nama singkat komposer"
+msgstr "Stigende, etter komponist"
 
 #: ../src/prefs.c:308
 msgid "Descending composer"
-msgstr "Komposer menurun"
+msgstr "Synkende, etter komponist"
 
 #: ../src/prefs.c:310
 msgid "Ascending original artist"
-msgstr "Artis asli meningkat"
+msgstr "Stigende, etter opprinnelig artist"
 
 #: ../src/prefs.c:312
 msgid "Descending original artist"
-msgstr "Artis asli menurun"
+msgstr "Synkende, etter opprinnelig artist"
 
 #: ../src/prefs.c:314
 msgid "Ascending copyright"
-msgstr "Hak cipta meningkat"
+msgstr "Stigende, etter opphavsrett"
 
 #: ../src/prefs.c:316
 msgid "Descending copyright"
-msgstr "Hak cipta menurun"
+msgstr "Synkende, etter opphavsrett"
 
 #: ../src/prefs.c:318
 msgid "Ascending URL"
-msgstr "URL urut naik"
+msgstr "Stigende, etter nettadresse"
 
 #: ../src/prefs.c:320
 msgid "Descending URL"
-msgstr "URL urut turun"
+msgstr "Synkende, etter nettadresse"
 
 #: ../src/prefs.c:322
-#, fuzzy
 msgid "Ascending encoded by"
-msgstr "Terakhir Disimpan Oleh"
+msgstr "Stigende, etter kodeprogram"
 
 #: ../src/prefs.c:324
-#, fuzzy
 msgid "Descending encoded by"
-msgstr "Terakhir Disimpan Oleh"
+msgstr "Synkende, etter kodeprogram"
 
 #: ../src/prefs.c:326
 msgid "Ascending creation date"
-msgstr "Tanggal pembuatan meningkat"
+msgstr "Stigende, etter opprettelsesdato"
 
 #: ../src/prefs.c:328
 msgid "Descending creation date"
-msgstr "Tanggal pembuatan menurun"
+msgstr "Synkende, etter opprettelsesdato"
 
 #: ../src/prefs.c:332
 msgid "Select the type of file sorting when loading a directory."
-msgstr ""
+msgstr "Velg hvordan filer skal sorteres når en mappe lastes inn."
 
 #: ../src/prefs.c:344
 msgid "If activated, the sorting of the list will be dependent on the case."
 msgstr ""
+"Hvis dette er slått på, skiller listesorteringa mellom små og store "
+"bokstaver."
 
 #. File Player
 #: ../src/prefs.c:348
-#, fuzzy
 msgid "File Audio Player"
-msgstr "Pemutar CD Audio"
+msgstr "Lydspiller"
 
 #: ../src/prefs.c:360
-#, fuzzy
 msgid "Player to run:"
-msgstr "Jalankan sampai Kursor"
+msgstr "Spiller som skal kjøres:"
 
 #: ../src/prefs.c:366
 msgid ""
 "Enter the program used to play the files. Some arguments can be passed for "
 "the program (as 'xmms -p') before to receive files as other arguments."
 msgstr ""
+"Skriv inn programmet som skal brukes til å spille av filene. Noen argumenter "
+"kan sendes til programmet (som f.eks. «xmms -p») før filene mottas som "
+"øvrige argumenter."
 
 #. Log options
 #: ../src/prefs.c:384
 msgid "Log Options"
-msgstr "Opsi Log"
+msgstr "Logg-valg"
 
 #. Show / hide log view
 #: ../src/prefs.c:391
 msgid "Show log view in main window"
-msgstr "Tampilkan tilikan log dalam jendela utama"
+msgstr "Vis loggvisning i hovedvinduet"
 
 #: ../src/prefs.c:394
 msgid "If activated, the log view would be visible in the main window."
-msgstr ""
+msgstr "Hvis dette er slått på, er loggvisninga synlig i hovedvinduet."
 
 #: ../src/prefs.c:400
 msgid "Max number of lines:"
-msgstr "Banyaknya baris maks:"
+msgstr "Maksimalt antall linjer:"
 
 #. g_signal_connect(G_OBJECT(NumberTrackFormated),"toggled",G_CALLBACK(Number_Track_Formatted_Toggled),NULL);
 #. * g_signal_emit_by_name(G_OBJECT(NumberTrackFormated),"toggled");
@@ -3543,16 +3534,16 @@ msgstr "Banyaknya baris maks:"
 #.
 #: ../src/prefs.c:418
 msgid "File Settings"
-msgstr "Pengaturan Berkas"
+msgstr "Filinnstillinger"
 
 #. File (name) Options
 #: ../src/prefs.c:424
 msgid "File Options"
-msgstr "Opsi Berkas"
+msgstr "Filvalg"
 
 #: ../src/prefs.c:430
 msgid "Replace illegal characters in filename (for Windows and CD-Rom)"
-msgstr ""
+msgstr "Erstatt ugyldige tegn i filnavnet (for Windows og CD-ROM)"
 
 #: ../src/prefs.c:433
 msgid ""
@@ -3561,48 +3552,49 @@ msgid ""
 "problem when renaming the file. This is useful when renaming the file from "
 "the tag with the scanner."
 msgstr ""
+"Konverter tegn i filnavnet som er ugyldige i FAT32/16-, ISO9660- og Joliet-"
+"filsystemer («\\», «:», «;», «*», «?», «\"», «<», «>» og «|») ved "
+"navneendring for å unngå problemer. Dette er nyttig når du bruker skanneren "
+"til å endre navn på fila basert på taggen."
 
 #. Extension case (lower/upper?)
 #: ../src/prefs.c:441
 msgid "Convert filename extension to:"
-msgstr "Konversikan ekstensi nama berkas menjadi:"
+msgstr "Endre filetternavn til:"
 
 #: ../src/prefs.c:444
 msgid "Lower Case"
-msgstr "Huruf Kecil"
+msgstr "Små bokstaver"
 
 #: ../src/prefs.c:447
 msgid "For example, the extension will be converted to '.mp3'"
-msgstr ""
+msgstr "Filetternavnet blir for eksempel endret til «.mp3»"
 
 #: ../src/prefs.c:450
 msgid "Upper Case"
-msgstr "Huruf Besar"
+msgstr "Store bokstaver"
 
 #: ../src/prefs.c:453
 msgid "For example, the extension will be converted to '.MP3'"
-msgstr ""
+msgstr "Filetternavnet blir for eksempel endret til «.MP3»"
 
 #: ../src/prefs.c:456
-#, fuzzy
 msgid "No Change"
-msgstr "Bulan Tetap"
+msgstr "Ingen endring"
 
 #: ../src/prefs.c:459
-#, fuzzy
 msgid "The extension will not be converted"
-msgstr "\"%s\" tidak ditemukan"
+msgstr "Utvidelsen blir ikke konvertert"
 
 #. Preserve modification time
 #: ../src/prefs.c:462
-#, fuzzy
 msgid "Preserve modification time of the file"
-msgstr "Sistem berkas waktu mount tidak cocok %u\n"
+msgstr "Behold endringstidspunkt for fila"
 
 #: ../src/prefs.c:465
 msgid ""
 "Preserve the modification time (in file properties) when saving the file."
-msgstr ""
+msgstr "Behold endringstidspunktet (i filegenskapene) når fila lagres."
 
 #. Change directory modification time
 #: ../src/prefs.c:469
@@ -3610,6 +3602,7 @@ msgid ""
 "Update modification time of the parent directory of the file (recommended "
 "when using Amarok)"
 msgstr ""
+"Oppdater foreldermappas endringstidspunkt (anbefales ved bruk av Amarok)"
 
 #: ../src/prefs.c:473
 msgid ""
@@ -3620,11 +3613,16 @@ msgid ""
 "performance reasons, they refresh file information by detecting changes of "
 "the parent directory."
 msgstr ""
+"Endringstidspunktet for filas foreldermappe kan bli oppdatert når du tagger "
+"fila. Ved nåværende tidspunkt blir dette bare gjort automatisk når en fil "
+"får nytt navn.\n"
+"Denne funksjonen er interessant når du bruker programmer som frisker opp fil-"
+"biblioteket sitt basert på når foreldermappe(r) blir endret (f.eks. Amarok)."
 
 #. Character Set for Filename
 #: ../src/prefs.c:481
 msgid "Character Set for Filename"
-msgstr "Set Karakter untuk Nama Berkas"
+msgstr "Tegnsett som brukes i filnavn"
 
 #. Rules for character set
 #: ../src/prefs.c:493
@@ -3632,11 +3630,12 @@ msgid ""
 "Rules to apply if some characters can't be converted to the system character "
 "encoding when writing filename:"
 msgstr ""
+"Regler som skal gjelde hvis enkelte tegn ikke kan konverteres til systemets "
+"tegnkoding når filnavnet skrives:"
 
 #: ../src/prefs.c:499
-#, fuzzy
 msgid "Try another character encoding"
-msgstr "Kehilangan karakter untuk pengkodean karakter"
+msgstr "Prøv en annen tegnkoding"
 
 #: ../src/prefs.c:503
 msgid ""
@@ -3644,11 +3643,14 @@ msgid ""
 "your locale (for example: ISO-8859-1 for 'fr', KOI8-R for 'ru', ISO-8859-2 "
 "for 'ro'). If it fails, it will try the character encoding ISO-8859-1."
 msgstr ""
+"Med dette valget forsøker konverteringa å bruke kodingen som gjelder for din "
+"region (for eksempel ISO-8859-1 for «fr», KOI8-R for «ru» eller ISO-8859-2 "
+"for «ro»). Hvis dette mislykkes, brukes tegnkodingen ISO-8859-1."
 
 #: ../src/prefs.c:510
 msgid ""
 "Force using the system character encoding and activate the transliteration"
-msgstr ""
+msgstr "Tving bruk av systemets tegnkoding, og aktiver translitterasjon"
 
 #: ../src/prefs.c:514 ../src/prefs.c:844 ../src/prefs.c:913
 msgid ""
@@ -3656,36 +3658,39 @@ msgid ""
 "character set, it can be approximated through one or several similarly "
 "looking characters."
 msgstr ""
+"Med dette valget erstattes tegn som ikke kan brukes innenfor ønsket tegnsett "
+"med et lignende tegn."
 
 #: ../src/prefs.c:520
 msgid ""
 "Force using the system character encoding and silently discard some "
 "characters"
 msgstr ""
+"Tving bruk av systemets tegnkoding, og fjern enkelte tegn uten å si i fra"
 
 #: ../src/prefs.c:524 ../src/prefs.c:854 ../src/prefs.c:923
 msgid ""
 "With this option, when a character cannot be represented in the target "
 "character set, it will be silently discarded."
 msgstr ""
+"Med dette valget fjernes tegn som ikke kan brukes innenfor ønsket tegnsett, "
+"uten advarsel."
 
 #.
 #. * Tag Settings
 #.
 #: ../src/prefs.c:533
-#, fuzzy
 msgid "Tag Settings"
-msgstr "Tatanan pencetak"
+msgstr "Tagg-innstillinger"
 
 #. Tag Options
 #: ../src/prefs.c:539
-#, fuzzy
 msgid "Tag Options"
-msgstr "[ opsi ... ] [ modul ... ]"
+msgstr "Tagg-valg"
 
 #: ../src/prefs.c:545
 msgid "Auto completion of date if not complete"
-msgstr ""
+msgstr "Autofullføring av evt. ufullstendig dato "
 
 #: ../src/prefs.c:548
 msgid ""
@@ -3693,10 +3698,13 @@ msgid ""
 "date (for instance, if the current year is 2005: 5 => 2005, 4 => 2004, 6 => "
 "1996, 95 => 1995…)."
 msgstr ""
+"Prøv å fullføre år-feltet hvis du skriver inn et ufullstendig tall (f.eks., "
+"hvis nåværende år er 2005: 5 => 2005, 4 => 2004, 6 => 1996, 95 => 1995, "
+"osv.)."
 
 #: ../src/prefs.c:556
 msgid "Write the track field with the following number of digits:"
-msgstr ""
+msgstr "Skriv spornummer-feltet med følgende antall sifre:"
 
 #: ../src/prefs.c:559
 msgid ""
@@ -3704,64 +3712,68 @@ msgid ""
 "obtain a number with 'n' digits (for example, with two digits: '05', '09', "
 "'10'…). Else it keeps the 'raw' track value."
 msgstr ""
+"Hvis dette er slått på, skrives spornummer-feltet med «0» som ledende siffer "
+"der det er nødvendig (f.eks. «05», «09» og «10»). Ellers beholdes alle "
+"spornummer uten ledende sifre."
 
 #: ../src/prefs.c:578
 msgid "Write the disc field with the following number of digits:"
-msgstr ""
+msgstr "Skriv platenummer-feltet med følgende antall sifre:"
 
 #: ../src/prefs.c:583
 msgid "Whether to pad the disc field with leading zeroes"
-msgstr ""
+msgstr "Om platenummer-feltet skal fylles ut med ledende nuller"
 
 #: ../src/prefs.c:613
 msgid ""
 "Tag field focus when switching files in list with shortcuts Page Up/Page "
 "Down:"
 msgstr ""
+"Taggfelt-fokus ved bytte mellom filer i lista med snarveisknappene Page Up / "
+"Page Down:"
 
 #: ../src/prefs.c:619
 msgid "Keep focus to the same tag field"
-msgstr ""
+msgstr "Fokuser på samme tagg-felt"
 
 #: ../src/prefs.c:625
 msgid "Return focus to the first tag field (i.e. 'Title' field)"
-msgstr ""
+msgstr "Fokuser på første taggefeltet («Tittel»-feltet) igjen"
 
 #. gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(SetFocusToFirstTagField),SET_FOCUS_TO_FIRST_TAG_FIELD);
 #. Tag Splitting
 #: ../src/prefs.c:630
-#, fuzzy
 msgid "Tag Splitting"
-msgstr "Tag Git:"
+msgstr "Tagg-splitting"
 
 #: ../src/prefs.c:639
 msgid ""
 "For Vorbis tags, selected fields will be split at dashes and saved as "
 "separate tags"
 msgstr ""
+"I Vorbis-tagger deles valgte felter opp ved streker, og lagres som separate "
+"tagger"
 
 #: ../src/prefs.c:649
 msgid "Original artist"
-msgstr "Artis asli"
+msgstr "Opprinnelig artist"
 
 #.
 #. * ID3 Tag Settings
 #.
 #: ../src/prefs.c:670
-#, fuzzy
 msgid "ID3 Tag Settings"
-msgstr "Timpa pengaturan server"
+msgstr "Innstillinger for ID3-tagger"
 
 #. Tag Rules frame
 #: ../src/prefs.c:679
-#, fuzzy
 msgid "ID3 Tag Rules"
-msgstr "semua aturan berikut"
+msgstr "Regler for ID3-tagger"
 
 #. Strip tag when fields (managed by EasyTAG) are empty
 #: ../src/prefs.c:691
 msgid "Strip tags if all fields are set to blank"
-msgstr ""
+msgstr "Tøm alle tagger hvis alle felter er blanke"
 
 #: ../src/prefs.c:694
 msgid ""
@@ -3770,73 +3782,82 @@ msgid ""
 "strip the whole tag when these seven standard data fields have been set to "
 "blank."
 msgstr ""
+"Ettersom ID3v2-tagger kan inneholde annen data enn spornavn, artist, album, "
+"Ã¥r, spornummer, sjanger og/eller kommentar (som f.eks. cover-bilde og "
+"sangtekst), kan du bruke dette valget til å fjerne hele taggen når "
+"overnevnte standardfelt er tomme."
 
 #. Convert old ID3v2 tag version
 #: ../src/prefs.c:700
 msgid "Automatically convert old ID3v2 tag versions"
-msgstr ""
+msgstr "Konverter gamle ID3v2-tagger automatisk"
 
 #: ../src/prefs.c:703
 msgid ""
 "If activated, an old ID3v2 tag version (as ID3v2.2) will be updated to the "
 "ID3v2.3 version."
 msgstr ""
+"Hvis dette er slått på, oppdateres gamle ID3v2-tagger (som f.eks. ID3v2.2) "
+"til ID3v2.3."
 
 #. Use CRC32
 #: ../src/prefs.c:707
 msgid "Use CRC32"
-msgstr "Pakai CRC32"
+msgstr "Bruk CRC32"
 
 #: ../src/prefs.c:710
 msgid "Set CRC32 in the ID3v2 tags"
-msgstr ""
+msgstr "Ta med CRC32 i ID3v2-taggene"
 
 #. Use Compression
 #: ../src/prefs.c:713
 msgid "Use Compression"
-msgstr "Pakai Kompresi"
+msgstr "Bruk komprimering"
 
 #: ../src/prefs.c:717
 msgid "Set Compression in the ID3v2 tags"
-msgstr ""
+msgstr "Ta med komprimeringsgrad i ID3v2-taggene"
 
 #. Write Genre in text
 #: ../src/prefs.c:720
 msgid "Write Genre in text only"
-msgstr ""
+msgstr "Bare skriv sjanger i tekstform"
 
 #: ../src/prefs.c:724
 msgid ""
 "Don't use ID3v1 number references in genre tag. Enable this if you see "
 "numbers as genre in your music player."
 msgstr ""
+"Ikke bruk ID3v1-tallreferanser i sjanger-taggen. Slå på dette hvis du ser "
+"tallverdier i sjangerfeltet i musikkavspilleren."
 
 #. Character Set for writing ID3 tag
 #: ../src/prefs.c:727
 msgid "Character Set for writing ID3 tags"
-msgstr ""
+msgstr "Tegnsett som brukes til å skrive ID3-tagger"
 
 #. ID3v2 tags
 #: ../src/prefs.c:734
 msgid "ID3v2 tags"
-msgstr "Tag ID3v2"
+msgstr "ID3v2-tagger"
 
 #. Write ID3v2 tag
 #: ../src/prefs.c:747
-#, fuzzy
 msgid "Write ID3v2 tag"
-msgstr "rangka tag id3v3 tak diurai"
+msgstr "Skriv ID3v2-tagg"
 
 #: ../src/prefs.c:750
 msgid ""
 "If activated, an ID3v2.4 tag will be added or updated at the beginning of "
 "the MP3 files. Else it will be stripped."
 msgstr ""
+"Hvis dette er slått på, legges til eller oppdateres en ID3v2.4-tagg i "
+"slutten av MP3-filer. Ellers fjernes ID3v2.4-taggen."
 
 #. ID3v2 tag version
 #: ../src/prefs.c:757
 msgid "Version:"
-msgstr "Versi:"
+msgstr "Versjon:"
 
 #: ../src/prefs.c:763
 msgid ""
@@ -3844,36 +3865,38 @@ msgid ""
 " - ID3v2.3 is written using id3lib,\n"
 " - ID3v2.4 is written using libid3tag (recommended)."
 msgstr ""
+"Velg ID3v2-tagg-versjonen som skal skrives:\n"
+" - ID3v2.3 skrives med id3lib, og\n"
+" - ID3v2.4 skrives med libid3tag (anbefales)."
 
 #. Charset
 #. Id3V1 writing character set
 #: ../src/prefs.c:778 ../src/prefs.c:882
 msgid "Charset:"
-msgstr "Set karakter:"
+msgstr "Tegnsett:"
 
 #. Unicode
 #: ../src/prefs.c:783
 msgid "Unicode "
-msgstr "Unicode"
+msgstr "Unicode "
 
 #: ../src/prefs.c:791
-#, fuzzy
 msgid "Unicode type to use"
-msgstr "Jenis sistem berkas yang akan dipakai"
+msgstr "Unicode-type som skal brukes"
 
 #: ../src/prefs.c:815
 msgid "Character set used to write the tag data in the file."
-msgstr ""
+msgstr "Tegnsett som brukes til å skrive taggdata til fila."
 
 #. ID3v2 Additional iconv() options
 #. ID3V1 Additional iconv() options
 #: ../src/prefs.c:825 ../src/prefs.c:894
 msgid "Additional settings for iconv():"
-msgstr "Pengaturan tambahan bagi iconv():"
+msgstr "Tilleggsinnstillinger for iconv():"
 
 #: ../src/prefs.c:831 ../src/prefs.c:900
 msgid "No"
-msgstr "Tidak"
+msgstr "Nei"
 
 #: ../src/prefs.c:835 ../src/prefs.c:904
 msgid ""
@@ -3881,45 +3904,47 @@ msgid ""
 "character set, it isn't changed. But note that an error message will be "
 "displayed for information."
 msgstr ""
+"Med dette valget fjernes ikke tegn som ligger utenfor ønsket tegnsett. Du "
+"får likevel en feilmelding når slike tegn oppdages."
 
 #: ../src/prefs.c:840 ../src/prefs.c:909
 msgid "//TRANSLIT"
-msgstr ""
+msgstr "//TRANSLIT"
 
 #: ../src/prefs.c:850 ../src/prefs.c:919
 msgid "//IGNORE"
-msgstr "//ABAIKAN"
+msgstr "//IGNORE"
 
 #. ID3v1 tags
 #: ../src/prefs.c:859
 msgid "ID3v1 tags"
-msgstr "Tag ID3v1"
+msgstr "ID3v1-tagger"
 
 #. Write ID3v1 tag
 #: ../src/prefs.c:873
-#, fuzzy
 msgid "Write ID3v1.x tag"
-msgstr "Tabel Tag Teks"
+msgstr "Skriv ID3v1.x-tagg"
 
 #: ../src/prefs.c:876
 msgid ""
 "If activated, an ID3v1 tag will be added or updated at the end of the MP3 "
 "files. Else it will be stripped."
 msgstr ""
+"Hvis dette er slått på, legges til eller oppdateres en ID3v1-tagg i slutten "
+"av MP3-filer. Ellers fjernes ID3v1-taggen."
 
 #: ../src/prefs.c:890
 msgid "Character set used to write ID3v1 tag data in the file."
-msgstr ""
+msgstr "Tegnsett som brukes til å skrive ID3v1-taggdata til fila."
 
 #. Character Set for reading tag
 #: ../src/prefs.c:928
 msgid "Character Set for reading ID3 tags"
-msgstr ""
+msgstr "Tegnsett som brukes til å lese ID3-tagger"
 
 #: ../src/prefs.c:942
-#, fuzzy
 msgid "Non-standard:"
-msgstr "Program standar"
+msgstr "Ikke-standard:"
 
 #: ../src/prefs.c:948
 msgid ""
@@ -3937,58 +3962,76 @@ msgid ""
 "'Windows-1251' to load tags written under Windows. And 'KOI8-R' to load tags "
 "written under Unix systems."
 msgstr ""
+"Dette tegnsettet blir brukt ved lesing av tagg-dataene for å konvertere hver "
+"streng som finnes i et ISO-8859-1-taggfelt (for ID3v2- og/eller ID3v1-"
+"tagger).\n"
+"\n"
+"For eksempel:\n"
+"  - I tildigere versjoner av EasyTAG var det mulig å lagre UTF-8-strenger i "
+"ISO-8859-1-felter. Slik bør det ikke være. Aktiver dette valget og velg "
+"UTF-8 for å konvertere disse taggene til Unicode. Du må også slå på valget "
+"«Prøv å lagre tagger i ISO-8859-1. Hvis det ikke er mulig, bruk UNICODE "
+"(anbefales)» eller «Lagre alltid tagger med UNICODE-tegnsett» ovenfor.\n"
+"  - Russiske brukere kan velge tegnsettet «Windows-1251» for å laste inn "
+"tagger som er skrevet med Windows hvis Unicode ikke er brukt. «KOI8-R» kan "
+"brukes for å laste inn tagger som er skrevet med Unix-systemer."
 
 #: ../src/prefs.c:966
 msgid "Character set used to read tag data in the file."
-msgstr ""
+msgstr "Tegnsett som brukes til å lese taggdata i fila."
 
 #.
 #. * Scanner
 #.
 #: ../src/prefs.c:980
 msgid "Scanner"
-msgstr "Pemindai"
+msgstr "Skanner"
 
 #. Character conversion for the 'Fill Tag' scanner (=> FTS...)
 #: ../src/prefs.c:990
 msgid "Fill Tag Scanner - Character Conversion"
-msgstr ""
+msgstr "Fyll tagg-skanner - tegnkonvertering"
 
 #: ../src/prefs.c:996 ../src/prefs.c:1021
 msgid "Convert underscore character '_' and string '%20' to space ' '"
-msgstr ""
+msgstr "Endre understrek («_») og strengen «%20» til mellomrom"
 
 #: ../src/prefs.c:998 ../src/prefs.c:1022
 msgid "Convert space ' ' to underscore '_'"
-msgstr "Konversikan spasi ‘ ‘ ke garis bawah ‘_’"
+msgstr "Endre mellomrom til understrek «_»"
 
 #: ../src/prefs.c:1010 ../src/prefs.c:1012
 msgid ""
 "If activated, this conversion will be used when applying a mask from the "
 "scanner for tags."
 msgstr ""
+"Hvis dette er slått på, brukes denne konverteringa når en maske brukes på "
+"tagger."
 
 #. Character conversion for the 'Rename File' scanner (=> RFS...)
 #: ../src/prefs.c:1016
 msgid "Rename File Scanner - Character Conversion"
-msgstr ""
+msgstr "Navneendring-skanner - tegnkonvertering"
 
 #: ../src/prefs.c:1033 ../src/prefs.c:1035 ../src/prefs.c:1037
 msgid ""
 "If activated, this conversion will be used when applying a mask from the "
 "scanner for filenames."
 msgstr ""
+"Hvis dette er slått på, brukes denne konverteringa når en skannermaske "
+"brukes på filnavn."
 
 #. Character conversion for the 'Process Fields' scanner (=> PFS...)
 #: ../src/prefs.c:1040
 msgid "Process Fields Scanner - Character Conversion"
-msgstr ""
+msgstr "Feltbehandlingsskanner - tegnkonvertering"
 
 #. Don't convert some words like to, feat. first letter uppercase.
 #: ../src/prefs.c:1047
 msgid ""
 "Don't uppercase first letter of words for some prepositions and articles."
 msgstr ""
+"Ikke gi stor forbokstav til ord som er preposisjoner og bestemt-artikler."
 
 #: ../src/prefs.c:1051
 msgid ""
@@ -3997,59 +4040,69 @@ msgid ""
 "word' (for example, you will obtain 'Text in an Entry' instead of 'Text In "
 "An Entry')."
 msgstr ""
+"Ikke endre første bokstav i ord som er preposisjoner, bestemte artikler og "
+"ord som «feat.» ved bruk av skanneren «Stor forbokstav i hvert ord» (for "
+"eksempel blir «Tekst i en Oppføring» ikke endret til «Tekst I En Oppføring»)."
 
 #. Properties of the scanner window
 #: ../src/prefs.c:1057
 msgid "Scanner Window"
-msgstr "Jendela Pemindai"
+msgstr "Skannervindu"
 
 #: ../src/prefs.c:1063
-#, fuzzy
 msgid "Open the Scanner Window on startup"
-msgstr "Buka pengatur katalog pada saat Poedit dimulai"
+msgstr "Åpne skannervinduet når programmet starter"
 
 #: ../src/prefs.c:1066
 msgid ""
 "Activate this option to open automatically the scanner window when EasyTAG "
 "starts."
 msgstr ""
+"Bruk dette valget for å åpne skannervinduet automatisk når EasyTAG starter "
+"opp."
 
 #. Other options
 #: ../src/prefs.c:1071
 msgid "Fields"
-msgstr "Ruas"
+msgstr "Felt"
 
 #. Overwrite text into tag fields
 #: ../src/prefs.c:1078
 msgid "Overwrite fields when scanning tags"
-msgstr ""
+msgstr "Overskriv felter når tagger gjennomsøkes"
 
 #: ../src/prefs.c:1081
 msgid ""
 "If activated, the scanner will replace existing text in fields by the new "
 "one. If deactivated, only blank fields of the tag will be filled."
 msgstr ""
+"Hvis dette er slått på, erstatter skanneren eksisterende tekst i felter med "
+"ny tekst. Ellers fylles bare tomme tagg-felter med tekst."
 
 #: ../src/prefs.c:1092
 msgid "Set this text as default comment:"
-msgstr ""
+msgstr "Bruk denne teksten som standardkommentar:"
 
 #: ../src/prefs.c:1095
 msgid ""
 "Activate this option if you want to put the following string into the "
 "comment field when using the 'Fill Tag' scanner."
 msgstr ""
+"Bruk dette valget hvis du vil legge følgende streng i kommentarfeltet når du "
+"bruker «Fyll ut tagg»-skanneren."
 
 #. CRC32 comment
 #: ../src/prefs.c:1113
 msgid "Use CRC32 as the default comment (for files with ID3 tags only)."
-msgstr ""
+msgstr "Bruk CRC32 som standardkommentar (bare på filer med ID3-tagger)."
 
 #: ../src/prefs.c:1117
 msgid ""
 "Calculates the CRC-32 value of the file and writes it into the comment field "
 "when using the 'Fill Tag' scanner."
 msgstr ""
+"Regner ut CRC-32-verdien av fila og legger verdien i kommentarfeltet når du "
+"bruker «Fyll ut tagg»-skanneren."
 
 #.
 #. * CDDB
@@ -4061,34 +4114,34 @@ msgstr "CDDB"
 #. CDDB Server Settings (Automatic Search)
 #: ../src/prefs.c:1134
 msgid "Server Settings for Automatic Search"
-msgstr "Pengaturan Server untuk Pencarian Otomatis"
+msgstr "Tjenerinnstillinger for automatisk søk"
 
 #: ../src/prefs.c:1143 ../src/prefs.c:1182 ../src/prefs.c:1216
 msgid "Name:"
-msgstr "Nama:"
+msgstr "Navn:"
 
 #: ../src/prefs.c:1162 ../src/prefs.c:1190 ../src/prefs.c:1225
 #: ../src/prefs.c:1310
 msgid "Port:"
-msgstr "Porta:"
+msgstr "Port:"
 
 #: ../src/prefs.c:1172 ../src/prefs.c:1200 ../src/prefs.c:1234
 msgid "CGI Path:"
-msgstr "Path CGI:"
+msgstr "CGI-sti:"
 
 #. CDDB Server Settings (Manual Search)
 #: ../src/prefs.c:1208
 msgid "Server Settings for Manual Search"
-msgstr "Pengaturan Server untuk Pencarian Manual"
+msgstr "Tjenerinnstillinger for manuelt søk"
 
 #. Local access for CDDB (Automatic Search)
 #: ../src/prefs.c:1242
 msgid "Local CDDB"
-msgstr "CDDB Lokal"
+msgstr "Lokal CDDB"
 
 #: ../src/prefs.c:1250
 msgid "Path:"
-msgstr "Path:"
+msgstr "Sti:"
 
 #: ../src/prefs.c:1262
 msgid ""
@@ -4097,68 +4150,71 @@ msgid ""
 "'country', 'data', 'folk', 'jazz', 'newage', 'reggae', 'rock', 'soundtrack' "
 "and 'misc'."
 msgstr ""
+"Oppgi mappa hvor den lokale CD-databasen ligger. Databasen inneholder de "
+"elleve følgende mappene: «blues», «classical», «country», «data», «folk», "
+"«jazz», «newage», «reggae», «rock», «soundtrack» og «misc»."
 
 #. CDDB Proxy Settings
 #: ../src/prefs.c:1288
 msgid "Proxy Settings"
-msgstr "Pengaturan Proksi"
+msgstr "Mellomtjener-innstillinger"
 
 #: ../src/prefs.c:1297
 msgid "Use a proxy"
-msgstr "Pakai proksi"
+msgstr "Bruk en mellomtjener"
 
 #: ../src/prefs.c:1300
 msgid "Set active the settings of the proxy server."
-msgstr ""
+msgstr "Slå på mellomtjener-innstillingene."
 
 #: ../src/prefs.c:1302
 msgid "Host Name:"
-msgstr "Nama Host:"
+msgstr "Vertsnavn:"
 
 #: ../src/prefs.c:1309
-#, fuzzy
 msgid "Name of the proxy server."
-msgstr "Server Proxy SIP"
+msgstr "Navn på mellomtjeneren."
 
 #: ../src/prefs.c:1317
 msgid "Port of the proxy server."
-msgstr "Port server proksi."
+msgstr "Port på mellomtjeneren."
 
 #: ../src/prefs.c:1321
 msgid "User Name:"
-msgstr "Nama Pengguna:"
+msgstr "Brukernavn:"
 
 #: ../src/prefs.c:1328
-#, fuzzy
 msgid "Name of user for the the proxy server."
-msgstr "Nama server surat untuk _surat masuk:"
+msgstr "Navn på mellomtjener-brukeren."
 
 #: ../src/prefs.c:1329
-#, fuzzy
 msgid "User Password:"
-msgstr "Kata sandi"
+msgstr "Passord:"
 
 #: ../src/prefs.c:1338
-#, fuzzy
 msgid "Password of user for the proxy server."
-msgstr "Silakan masukkan sandi server basis data bagi pengguna %1:"
+msgstr "Mellomtjener-brukerens passord."
 
 #. Track Name list (CDDB results)
 #: ../src/prefs.c:1343
 msgid "Track Name List"
-msgstr "Daftar Nama Trek"
+msgstr "Spornavn-liste"
 
 #: ../src/prefs.c:1350
 msgid ""
 "Select corresponding audio file (according position or DLM if activated "
 "below)"
 msgstr ""
+"Velg tilhørende lydfil (samsvarende posisjon, eller DLM hvis det er aktivert "
+"nedenfor)"
 
 #: ../src/prefs.c:1354
 msgid ""
 "If activated, when selecting a line in the list of tracks name, the "
 "corresponding audio file in the main list will be also selected."
 msgstr ""
+"Hvis dette er slått på, velges relevant(e) lydfil(er) i hovedlista når du "
+"velger en samsvarende linje i lista over spornavn."
 
 #. Check box to use DLM (also used in the cddb window)
 #: ../src/prefs.c:1359
@@ -4166,183 +4222,184 @@ msgid ""
 "Use the Levenshtein algorithm (DLM) to match lines (using title) with audio "
 "files (using filename)"
 msgstr ""
+"Bruk Levenshtein-algoritmen (DLM) til å koble linjer (ved å bruke tittel) "
+"med lydfiler (ved å bruke filnavnet)"
 
 #.
 #. * Confirmation
 #.
 #: ../src/prefs.c:1374
 msgid "Confirmation"
-msgstr "Konfirmasi"
+msgstr "Bekreftelse"
 
 #: ../src/prefs.c:1379
 msgid "Confirm exit from program"
-msgstr "Konfirmasikan keluar dari program"
+msgstr "Bekreft avslutning av program"
 
 #: ../src/prefs.c:1382
 msgid ""
 "If activated, opens a dialog box to ask confirmation before exiting the "
 "program."
 msgstr ""
+"Hvis dette er slått på, må brukeren bekrefte at hun vil avslutte programmet."
 
 #: ../src/prefs.c:1385
 msgid "Confirm writing of file tag"
-msgstr "Konfirmasikan penulisan tag berkas"
+msgstr "Bekreft skriving av filtagg"
 
 #: ../src/prefs.c:1389
 msgid "Confirm renaming of file"
-msgstr "Konfirmasikan penggantian nama berkas"
+msgstr "Bekreft endring av filnavn"
 
 #: ../src/prefs.c:1393
 msgid "Confirm deleting of file"
-msgstr "Konfirmasikan penghapusan berkas"
+msgstr "Bekreft sletting av fil"
 
 #: ../src/prefs.c:1397
 msgid "Confirm writing of playlist"
-msgstr "Konfirmasikan penulisan daftar putar"
+msgstr "Bekreft skriving av spilleliste"
 
 #: ../src/prefs.c:1401
 msgid "Confirm changing directory when there are unsaved changes"
-msgstr ""
+msgstr "Bekreft mappebytte når endringer ikke er lagret"
 
 #. For translators : be aware to NOT translate '%.*d' in this string
 #: ../src/prefs.c:1439
 #, c-format
 msgid "(Example: %.*d_-_Track_name_1.mp3)"
-msgstr ""
+msgstr "(Eksempel: %.*d_-_Spornavn_1.mp3)"
 
 #. Translators: please do NOT translate '%.*d' in this string.
 #: ../src/prefs.c:1472
 #, c-format
 msgid "(Example: disc_%.*d_of_10/Track_name_1.mp3)"
-msgstr ""
+msgstr "(Eksempel: plate_%.*d_av_10/Spornavn_1.mp3)"
 
 #: ../src/prefs.c:1614 ../src/setting.c:904
 msgid "Configuration saved"
-msgstr "Konfigurasi disimpan"
+msgstr "Oppsettet er lagret"
 
 #: ../src/prefs.c:1622
 msgid "Configuration unchanged"
-msgstr "Konfigurasi tidak berubah"
+msgstr "Oppsettet er uendret"
 
 #: ../src/prefs.c:1713
 msgid "The selected path for 'Default path to files' is invalid"
-msgstr ""
+msgstr "Valgt sti for «Standardsti til filer» er ugyldig"
 
 #: ../src/prefs.c:1715
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Path: '%s'\n"
 "Error: %s"
-msgstr "Path Akselerator"
+msgstr ""
+"Sti: «%s»\n"
+"Feil: %s"
 
 #: ../src/prefs.c:1717
-#, fuzzy
 msgid "Invalid Path Error"
-msgstr "Galat format path: %s"
+msgstr "Ugyldig sti-feil"
 
 #: ../src/prefs.c:1831
 #, c-format
 msgid "The audio file player '%s' cannot be found"
-msgstr ""
+msgstr "Fant ikke lydavspilleren «%s»"
 
 #: ../src/prefs.c:1833
 msgid "Audio Player Error"
-msgstr "Galat Pemutar Audio"
+msgstr "Feil i lydavspiller"
 
 #: ../src/scan_dialog.c:182
-#, fuzzy
 msgid "Fill Tag"
-msgstr "Tag Git:"
+msgstr "Fyll ut tagg"
 
 #: ../src/scan_dialog.c:356
 #, c-format
 msgid "Cannot calculate CRC value of file (%s)"
-msgstr ""
+msgstr "Klarte ikke å regne ut CRC-verdi av fila (%s)"
 
 #: ../src/scan_dialog.c:371
-#, fuzzy
 msgid "Tag successfully scanned"
-msgstr "Tag berhasil ditambahkan"
+msgstr "Taggen ble skannet"
 
 #: ../src/scan_dialog.c:373
-#, fuzzy, c-format
+#, c-format
 msgid "Tag successfully scanned: %s"
-msgstr "Tag berhasil ditambahkan"
+msgstr "Taggen «%s» ble skannet"
 
 #: ../src/scan_dialog.c:414
 #, c-format
 msgid "Tag scanner: strange… the extension '%s' was not found in filename '%s'"
 msgstr ""
+"Tagg-skanner: dette er snodig, men utvidelsen «%s» ble ikke funnet i "
+"filnavnet «%s»"
 
 #: ../src/scan_dialog.c:496 ../src/scan_dialog.c:525
 #, c-format
 msgid "Scan Error: can't find separator '%s' within '%s'"
-msgstr ""
+msgstr "Skannefeil: finner ikke skilletegnet «%s» i «%s»"
 
 #: ../src/scan_dialog.c:712
-#, fuzzy
 msgid "New filename successfully scanned"
-msgstr "Proyek baru telah sukses dibuat."
+msgstr "Det nye filnavnet er skannet"
 
 #: ../src/scan_dialog.c:715
-#, fuzzy, c-format
+#, c-format
 msgid "New filename successfully scanned: %s"
-msgstr "Proyek baru telah sukses dibuat."
+msgstr "Det nye filnavnet «%s» er skannet"
 
 #: ../src/scan_dialog.c:1632
 #, c-format
 msgid "Error while processing fields: %s"
-msgstr "Galat saat memroses ruas: %s"
+msgstr "Det oppstod en feil ved behandling av felter: %s"
 
 #. The window
 #: ../src/scan_dialog.c:1802
-#, fuzzy
 msgid "Tag and Filename Scan"
-msgstr "Nama file yang hendak dibuka dan ditampilkan"
+msgstr "Tagg- og filnavnsskanning"
 
 #. TODO: Set related action to match AM_SCAN_FILES.
 #: ../src/scan_dialog.c:1811
 msgid "Scan Files"
-msgstr "Pindai Berkas"
+msgstr "Skann filer"
 
 #. Option Menu
 #: ../src/scan_dialog.c:1839
 msgid "Scanner:"
-msgstr "Pemindai:"
+msgstr "Skanner:"
 
 #: ../src/scan_dialog.c:1860
-#, fuzzy
 msgid "Select the type of scanner to use"
-msgstr "(Usang) Tipe proksi yang akan dipakai"
+msgstr "Velg hva slags skanner som skal brukes"
 
 #: ../src/scan_dialog.c:1869
 msgid "Scanner Preferences"
-msgstr "Preferensi Pemindai"
+msgstr "Skannerinnstillinger"
 
 #: ../src/scan_dialog.c:1878
-#, fuzzy
 msgid "Show / Hide Masks Editor"
-msgstr "Tampilkan atau sembunyikan pembidik silang"
+msgstr "Vis/skjul maskebehandler"
 
 #: ../src/scan_dialog.c:1888
 msgid "Show / Hide Legend"
-msgstr "Tampilkan / Sembunyikan Legenda"
+msgstr "Vis/skjul forklaring"
 
 #: ../src/scan_dialog.c:1918
 msgid ""
 "Select or type in a mask using codes (see Legend) to parse filename and "
 "path. Used to fill in tag fields"
 msgstr ""
+"Velg eller skriv inn en maske som bruker koder (se forklaring) til å tolke "
+"filnavn og sti. Brukes til å fylle ut taggfelt"
 
 #. Preview label
 #: ../src/scan_dialog.c:1942
-#, fuzzy
 msgid "Fill tag preview"
-msgstr "Contoh Wdiget Aktif"
+msgstr "Forhåndsvis utfylling av tagg"
 
 #: ../src/scan_dialog.c:1972
 msgid "Prefix mask with current path"
-msgstr ""
+msgstr "Bruk gjeldende sti som prefiks i maska"
 
 #: ../src/scan_dialog.c:1986
 msgid ""
@@ -4351,22 +4408,27 @@ msgid ""
 "Use / to make directories. If the first character is /, it's a absolute "
 "path, otherwise is relative to the old path."
 msgstr ""
+"Velg eller skriv inn en maske som bruker koder (se forklaring) til å tolke "
+"taggfelt. Brukes til å gi fila nytt navn.\n"
+"Bruk «/» for å lage mapper. Hvis første tegn i stien er «/», så er det en "
+"absolutt sti. Ellers er stien relativ til opprinnelig mappe."
 
 #. Preview label
 #: ../src/scan_dialog.c:2011
-#, fuzzy
 msgid "Rename file preview"
-msgstr "Pratinjau Format Berkas"
+msgstr "Forhåndsvisning av nytt filnavn"
 
 #: ../src/scan_dialog.c:2030
 msgid "Select fields:"
-msgstr "Pilih ruas:"
+msgstr "Velg felter:"
 
 #: ../src/scan_dialog.c:2033
 msgid ""
 "The buttons on the right represent the fields which can be processed. Select "
 "those which interest you"
 msgstr ""
+"Knappene til høyre viser feltene som kan behandles. Velg de du er "
+"interessert i"
 
 #. Advice for Translators: set the first letter of filename translated
 #: ../src/scan_dialog.c:2037
@@ -4375,7 +4437,7 @@ msgstr "F"
 
 #: ../src/scan_dialog.c:2039
 msgid "Process filename field"
-msgstr "Proses ruas nama berkas"
+msgstr "Behandle filnavn-felt"
 
 #. Advice for Translators: set the first letter of title translated
 #: ../src/scan_dialog.c:2041
@@ -4384,7 +4446,7 @@ msgstr "T"
 
 #: ../src/scan_dialog.c:2042
 msgid "Process title field"
-msgstr "Proses ruas judul"
+msgstr "Behandle tittelfelt"
 
 #. Advice for Translators: set the first letter of artist translated
 #: ../src/scan_dialog.c:2044
@@ -4393,7 +4455,7 @@ msgstr "Ar"
 
 #: ../src/scan_dialog.c:2045
 msgid "Process file artist field"
-msgstr "Proses ruas artis berkas"
+msgstr "Behandle filartist-felt"
 
 #. Advice for Translators: set the first letter of album artist translated
 #: ../src/scan_dialog.c:2047
@@ -4402,7 +4464,7 @@ msgstr "AA"
 
 #: ../src/scan_dialog.c:2048
 msgid "Process album artist field"
-msgstr "Proses ruas artis album"
+msgstr "Behandle albumartist-felt"
 
 #. Advice for Translators: set the first letter of album translated
 #: ../src/scan_dialog.c:2050
@@ -4411,34 +4473,34 @@ msgstr "Al"
 
 #: ../src/scan_dialog.c:2051
 msgid "Process album field"
-msgstr "Proses ruas album"
+msgstr "Behandle album-felt"
 
 #. Advice for Translators: set the first letter of genre translated
 #: ../src/scan_dialog.c:2053
 msgid "G"
-msgstr "G"
+msgstr "S"
 
 #: ../src/scan_dialog.c:2054
 msgid "Process genre field"
-msgstr "Proses ruas aliran"
+msgstr "Behandle sjanger-felt"
 
 #. Advice for Translators: set the first letter of comment translated
 #: ../src/scan_dialog.c:2056
 msgid "Cm"
-msgstr "Cm"
+msgstr "K"
 
 #: ../src/scan_dialog.c:2057
 msgid "Process comment field"
-msgstr "Proses ruas komentar"
+msgstr "Behandle kommentarfelt"
 
 #. Advice for Translators: set the first letter of composer translated
 #: ../src/scan_dialog.c:2059
 msgid "Cp"
-msgstr "Cp"
+msgstr "K"
 
 #: ../src/scan_dialog.c:2060
 msgid "Process composer field"
-msgstr "Proses ruas komposer"
+msgstr "Behandle komponist-felt"
 
 #. Advice for Translators: set the first letter of orig artist translated
 #: ../src/scan_dialog.c:2062
@@ -4447,174 +4509,193 @@ msgstr "O"
 
 #: ../src/scan_dialog.c:2063
 msgid "Process original artist field"
-msgstr "Proses ruas artis asli"
+msgstr "Behandle opprinnelig artist-felt"
 
 #. Advice for Translators: set the first letter of copyright translated
 #: ../src/scan_dialog.c:2065
 msgid "Cr"
-msgstr "Cr"
+msgstr "O"
 
 #: ../src/scan_dialog.c:2066
 msgid "Process copyright field"
-msgstr "Proses ruas hak cipta"
+msgstr "Behandle opphavsrett-felt"
 
 #. Advice for Translators: set the first letter of URL translated
 #: ../src/scan_dialog.c:2068
 msgid "U"
-msgstr "U"
+msgstr "N"
 
 #: ../src/scan_dialog.c:2069
 msgid "Process URL field"
-msgstr "Proses ruas URL"
+msgstr "Behandle nettadresse-felt"
 
 #. Advice for Translators: set the first letter of encoder name translated
 #: ../src/scan_dialog.c:2071
 msgid "E"
-msgstr "E"
+msgstr "K"
 
 #: ../src/scan_dialog.c:2072
-#, fuzzy
 msgid "Process encoder name field"
-msgstr "Nama ruas kotak kombo"
+msgstr "Behandle kodeprogram-felt"
 
 #: ../src/scan_dialog.c:2116
 msgid "Invert selection"
-msgstr "Balik pilihan"
+msgstr "Inverter utvalg"
 
 #: ../src/scan_dialog.c:2123
-#, fuzzy
 msgid "Select/Unselect all"
-msgstr "Keluarkan semua trek dari pilihan"
+msgstr "Velg alt/fjern utvalg"
 
 #: ../src/scan_dialog.c:2138
 msgid "Convert:"
-msgstr "Konversikan:"
+msgstr "Konverter:"
 
 #: ../src/scan_dialog.c:2140
 msgid "to: "
-msgstr "Ke ‘%s’:"
+msgstr "til:"
 
 #: ../src/scan_dialog.c:2147
 msgid "Do not convert"
-msgstr "Jangan konversikan"
+msgstr "Ikke konverter"
 
 #: ../src/scan_dialog.c:2177
 msgid ""
 "The underscore character or the string '%20' are replaced by one space. "
 "Example, before: 'Text%20In%20An_Entry', after: 'Text In An Entry'."
 msgstr ""
+"Understrek-tegnet eller strengen «%20» erstattes med enkelt mellomrom. For "
+"eksempel blir «Tekst%20i%20en_oppføring» endret til «Tekst i en oppføring»."
 
 #: ../src/scan_dialog.c:2180
 msgid ""
 "The space character is replaced by one underscore character. Example, "
 "before: 'Text In An Entry', after: 'Text_In_An_Entry'."
 msgstr ""
+"Mellomrom-tegnet erstattes av understrek-tegn. For eksempel endres «Tekst i "
+"en oppføring» til «Tekst_i_en_oppføring»."
 
 #: ../src/scan_dialog.c:2183
 msgid ""
 "Replace a string by another one. Note that the search is case sensitive."
 msgstr ""
+"Erstatt en streng med en annen. Merk at søket skiller mellom små og store "
+"bokstaver."
 
 #: ../src/scan_dialog.c:2190
 msgid "Capitalize all"
-msgstr "Kapitalkan semua"
+msgstr "Bare store bokstaver"
 
 #: ../src/scan_dialog.c:2192
 msgid "Lowercase all"
-msgstr "Semua huruf kecil"
+msgstr "Gjør alle bokstaver små"
 
 #: ../src/scan_dialog.c:2194
 msgid "Capitalize first letter"
-msgstr "Kapitalkan huruf pertama"
+msgstr "Gjør første bokstav til stor bokstav"
 
 #: ../src/scan_dialog.c:2196
 msgid "Capitalize the first letter of each word"
-msgstr ""
+msgstr "Gjør første bokstav i hvert ord til stor bokstav"
 
 #: ../src/scan_dialog.c:2197
 msgid "Detect Roman numerals"
-msgstr "Deteksi angka Romawi"
+msgstr "Oppdag romerske numre"
 
 #: ../src/scan_dialog.c:2199
 msgid "Do not change capitalization"
-msgstr "Jangan ubah kapitalisasi"
+msgstr "Ikke endre små og store bokstaver"
 
 #: ../src/scan_dialog.c:2236
 msgid ""
 "Convert all words in all fields to upper case. Example, before: 'Text IN AN "
 "entry', after: 'TEXT IN AN ENTRY'."
 msgstr ""
+"Endre alle ord i alle felt til store bokstaver. For eksempel blir «Tekst I "
+"EN oppføring» endret til «TEKST I EN OPPFØRING»."
 
 #: ../src/scan_dialog.c:2239
 msgid ""
 "Convert all words in all fields to lower case. Example, before: 'TEXT IN an "
 "entry', after: 'text in an entry'."
 msgstr ""
+"Endre alle ord i alle felt til små bokstaver. For eksempel blir «TEKST I en "
+"oppføring» endret til «tekst i en oppføring»."
 
 #: ../src/scan_dialog.c:2242
 msgid ""
 "Convert the initial of the first word in all fields to upper case. Example, "
 "before: 'text IN An ENTRY', after: 'Text in an entry'."
 msgstr ""
+"Endre første bokstav i første ord i alle felter til store bokstaver. For "
+"eksempel blir «tekst I en OPPFØRING» endret til «Tekst i en oppføring»."
 
 #: ../src/scan_dialog.c:2245
 msgid ""
 "Convert the initial of each word in all fields to upper case. Example, "
 "before: 'Text in an ENTRY', after: 'Text In An Entry'."
 msgstr ""
+"Endre første bokstav i hvert ord i alle felter til store bokstaver. For "
+"eksempel blir «Tekst i en OPPFØRING» endret til «Tekst I En Oppføring»."
 
 #: ../src/scan_dialog.c:2248
 msgid ""
 "Force to convert to upper case the Roman numerals. Example, before: 'ix. "
 "text in an entry', after: 'IX. Text In An Entry'."
 msgstr ""
+"Tving endring av romerske numre til store bokstaver. For eksempel blir «ix. "
+"tekst i en oppføring» endret til «IX. Tekst I En Oppføring»."
 
 #: ../src/scan_dialog.c:2256
 msgid "Insert a space before uppercase letters"
-msgstr ""
+msgstr "Sett inn mellomrom før store bokstaver"
 
 #: ../src/scan_dialog.c:2258
 msgid "Remove duplicate spaces and underscores"
-msgstr ""
+msgstr "Fjern doble mellomrom og understreker"
 
 #: ../src/scan_dialog.c:2260
 msgid "Do not change word separators"
-msgstr ""
+msgstr "Ikke endre orddelere"
 
 #: ../src/scan_dialog.c:2282
 msgid ""
 "All spaces between words are removed. Example, before: 'Text In An Entry', "
 "after: 'TextInAnEntry'."
 msgstr ""
+"Alle mellomrom mellom ord blir fjernet. For eksempel blir «Tekst I En "
+"Oppføring» endret til «TekstIEnOppføring»."
 
 #: ../src/scan_dialog.c:2285
 msgid ""
 "A space is inserted before each upper case letter. Example, before: "
 "'TextInAnEntry', after: 'Text In An Entry'."
 msgstr ""
+"Det settes inn et mellomrom før hver store bokstav. For eksempel blir "
+"«TekstIEnOppføring» gjort om til  «Tekst I En Oppføring»."
 
 #: ../src/scan_dialog.c:2288
 msgid ""
 "Duplicate spaces and underscores are removed. Example, before: "
 "'Text__In__An   Entry', after: 'Text_In_An Entry'."
 msgstr ""
+"Doble mellomrom og understreker fjernes. For eksempel blir «Tekst__I__En "
+"Oppføring» endret til «Tekst_I_En Oppføring»."
 
 #.
 #. * Frame to display codes legend
 #.
 #: ../src/scan_dialog.c:2295
 msgid "Legend"
-msgstr "Legenda"
+msgstr "Forklaring"
 
 #: ../src/scan_dialog.c:2301
 #, c-format
 msgid "%a: artist"
-msgstr "%a: artis"
+msgstr "%a: artist"
 
 #: ../src/scan_dialog.c:2304
-#, fuzzy
 msgid "%z: album artist"
-msgstr "Artis Album"
+msgstr "%z: albumartist"
 
 #: ../src/scan_dialog.c:2307
 msgid "%b: album"
@@ -4623,198 +4704,187 @@ msgstr "%b: album"
 #: ../src/scan_dialog.c:2310
 #, c-format
 msgid "%c: comment"
-msgstr "%c: komentar"
+msgstr "%c: kommentar"
 
 #: ../src/scan_dialog.c:2313
-#, fuzzy, c-format
+#, c-format
 msgid "%p: composer"
-msgstr "Komposer"
+msgstr "%p: komponist"
 
 #: ../src/scan_dialog.c:2316
 msgid "%r: copyright"
-msgstr "%r: hak cipta"
+msgstr "%r: opphavsrett"
 
 #: ../src/scan_dialog.c:2319
 #, c-format
 msgid "%d: disc number"
-msgstr "%d: nomor cakram"
+msgstr "%d: platenummer"
 
 #: ../src/scan_dialog.c:2322
-#, fuzzy, c-format
+#, c-format
 msgid "%e: encoded by"
-msgstr "Dienkode Oleh"
+msgstr "%e: kodet av"
 
 #: ../src/scan_dialog.c:2325
 #, c-format
 msgid "%g: genre"
-msgstr "%g: aliran"
+msgstr "%g: sjanger"
 
 #: ../src/scan_dialog.c:2328
 #, c-format
 msgid "%i: ignored"
-msgstr "%i: diabaikan"
+msgstr "%i: ignorert"
 
 #: ../src/scan_dialog.c:2331
 msgid "%l: number of tracks"
-msgstr "%l: cacah trek"
+msgstr "%l: antall spor"
 
 #: ../src/scan_dialog.c:2334
-#, fuzzy, c-format
+#, c-format
 msgid "%o: orig. artist"
-msgstr "Artis Album"
+msgstr "%o: oppr. artist"
 
 #: ../src/scan_dialog.c:2337
 #, c-format
 msgid "%n: track"
-msgstr "%n: trek"
+msgstr "%n: spornummer"
 
 #: ../src/scan_dialog.c:2340
 msgid "%t: title"
-msgstr "%t: judul"
+msgstr "%t: tittel"
 
 #: ../src/scan_dialog.c:2343
 #, c-format
 msgid "%u: URL"
-msgstr "%u: URL"
+msgstr "%u: nettadresse"
 
 #: ../src/scan_dialog.c:2346
 #, c-format
 msgid "%x: number of discs"
-msgstr "%x: cacah cakram"
+msgstr "%x: antall plater"
 
 #: ../src/scan_dialog.c:2349
 msgid "%y: year"
-msgstr "%y: tahun"
+msgstr "%y: år"
 
 #.
 #. * Masks Editor
 #.
 #: ../src/scan_dialog.c:2356
-#, fuzzy
 msgid "Mask Editor"
-msgstr "Penulis/Penyunting"
+msgstr "Maskebehandler"
 
 #: ../src/scan_dialog.c:2410
-#, fuzzy
 msgid "Create New Mask"
-msgstr "Buat topik baru"
+msgstr "Lag ny maske"
 
 #: ../src/scan_dialog.c:2420
-#, fuzzy
 msgid "Move Up this Mask"
-msgstr "Pindah ke Area Kerja _Atas"
+msgstr "Flytt denne maska opp"
 
 #: ../src/scan_dialog.c:2430
-#, fuzzy
 msgid "Move Down this Mask"
-msgstr "Catan URL ini"
+msgstr "Flytt denne maska ned"
 
 #: ../src/scan_dialog.c:2440
-#, fuzzy
 msgid "Duplicate Mask"
-msgstr "Mask Subnet:"
+msgstr "Dupliser maske"
 
 #: ../src/scan_dialog.c:2450
-#, fuzzy
 msgid "Add Default Masks"
-msgstr "Jarak luar default"
+msgstr "Legg til standardmasker"
 
 #: ../src/scan_dialog.c:2460
-#, fuzzy
 msgid "Remove Mask"
-msgstr "Mask Subnet:"
+msgstr "Fjern maske"
 
 #: ../src/scan_dialog.c:2470
-#, fuzzy
 msgid "Save Masks"
-msgstr "Simp_an Sebagai"
+msgstr "Lagre masker"
 
 #: ../src/scan_dialog.c:3050
-#, fuzzy
 msgid "New_mask"
-msgstr "Mask Subnet:"
+msgstr "New_mask"
 
 #: ../src/scan_dialog.c:3089
 msgid "Copy: No row selected"
-msgstr "Salin: Tak ada baris yang dipilih"
+msgstr "Feil ved kopiering: Du har ikke valgt noen rad"
 
 #: ../src/scan_dialog.c:3182
-#, fuzzy
 msgid "Remove: No row selected"
-msgstr "Tidak ada statistik yang dipilih."
+msgstr "Fjern: Ingen rad valgt"
 
 #: ../src/scan_dialog.c:3229
 msgid "Move Up: No row selected"
-msgstr "Pindah Naik: Tak ada baris yang dipilih"
+msgstr "Flytt opp: Ingen rad er valgt"
 
 #: ../src/scan_dialog.c:3273
 msgid "Move Down: No row selected"
-msgstr "Pindah Turun: Tak ada baris yang dipilih"
+msgstr "Flytt ned: Ingen rad er valgt"
 
 #: ../src/setting.c:924
 #, c-format
 msgid "Error: Cannot write configuration file: %s (%s)"
-msgstr "Galat: Tak bisa menulis berkas konfigurasi: %s (%s)"
+msgstr "Feil: klarte ikke å skrive oppsettsfila «%s» (%s)"
 
 #: ../src/setting.c:944 ../src/setting.c:961 ../src/setting.c:981
 #, c-format
 msgid "Error while writing configuration file: %s"
-msgstr "Galat ketika menulis berkas konfigurasi: %s"
+msgstr "Det oppstod en feil ved skriving av oppsettsfil. %s"
 
 #: ../src/setting.c:1100
 #, c-format
 msgid "Cannot open configuration file '%s' (%s)"
-msgstr "Tak bisa membuka berkas konfigurasi '%s' (%s)"
+msgstr "Klarte ikke å åpne oppsettsfila «%s» (%s)"
 
 #: ../src/setting.c:1102
-#, fuzzy
 msgid "Loading default configuration"
-msgstr "gunakan berkas konfigurasi bukan bawaan"
+msgstr "Laster inn standardoppsett"
 
 #: ../src/setting.c:1143
 #, c-format
 msgid "Cannot create or open file '%s' (%s)"
-msgstr "Tak bisa membuat atau membuka berkas ‘%s’ (%s)"
+msgstr "Klarte ikke å lage eller åpne fila «%s» (%s)"
 
 #: ../src/setting.c:1203
-#, fuzzy, c-format
+#, c-format
 msgid "Error: Cannot write list to file: %s (%s)"
-msgstr "Kesalahan saat coba menulis berkas CSV"
+msgstr "Feil: klarte ikke å skrive lista til fila «%s» (%s)"
 
 #: ../src/setting.c:1221
 #, c-format
 msgid "Error while writing list file: %s"
-msgstr "Galat ketika menulis berkas daftar: %s"
+msgstr "Det oppstod en feil ved skriving av listefil. %s"
 
 #. Fall back to defaults
 #: ../src/setting.c:1301
 msgid "Loading default 'Fill Tag' masks…"
-msgstr ""
+msgstr "Laster inn standard «Fyll ut tagg»-masker …"
 
 #. Fall back to defaults
 #: ../src/setting.c:1331
 msgid "Loading default 'Rename File' masks…"
-msgstr ""
+msgstr "Laster inn standard «Gi nytt navn til fil»-masker …"
 
 #. Fall back to defaults
 #: ../src/setting.c:1357
 msgid "Loading default 'Rename Directory' masks…"
-msgstr ""
+msgstr "Laster inn standard «Gi nytt navn til mappe»-masker …"
 
 #: ../src/setting.c:1568
-#, fuzzy, c-format
+#, c-format
 msgid "Migrating configuration from directory '%s' to '%s'"
-msgstr "Direktori bawaan untuk memilih gambar avatar"
+msgstr "Flytter oppsett fra mappa «%s» til «%s»"
 
 #: ../src/setting.c:1592
-#, fuzzy, c-format
+#, c-format
 msgid "Failed to migrate configuration file '%s'"
-msgstr "gagal membaca berkas konfigurasi"
+msgstr "Klarte ikke å flytte oppsettsfila «%s»"
 
 #: ../src/setting.c:1629
-#, fuzzy, c-format
+#, c-format
 msgid "Error: Cannot create directory '%s' (%s)"
-msgstr "Tak bisa membuat direktori sementara."
+msgstr "Feil: klarte ikke å lage mappa «%s» (%s)"
 
 #~ msgid "Cannot write tag in file '%s' (%s)"
-#~ msgstr "Tak dapat menulis tag dalam berkas '%s' (%s)"
+#~ msgstr "Klarte ikke å skrive tagg til fila «%s» (%s)"
diff --git a/po/pl.po b/po/pl.po
index 24b9ed2..adcc28e 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -14,8 +14,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: easytag\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-09-07 00:59+0200\n"
-"PO-Revision-Date: 2014-09-07 01:00+0200\n"
+"POT-Creation-Date: 2014-10-25 19:08+0200\n"
+"PO-Revision-Date: 2014-10-25 19:10+0200\n"
 "Last-Translator: Piotr DrÄ…g <piotrdrag at gmail.com>\n"
 "Language-Team: Polish <gnomepl at aviary.pl>\n"
 "Language: pl\n"
@@ -52,4886 +52,4837 @@ msgstr ""
 "systemach GNU/Linux i Windows."
 
 #: ../data/easytag.desktop.in.h:1
-msgid "Sound File Metadata Editor"
+msgid "Audio File Metadata Editor"
 msgstr "Edytor metadanych plików dźwiękowych"
 
 #: ../data/easytag.desktop.in.h:2
-msgid "Edit sound file metadata"
+msgid "Edit audio file metadata"
 msgstr "Modyfikowanie metadanych plików dźwiękowych"
 
 #. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
 #: ../data/easytag.desktop.in.h:4
-msgid "mp3;tag;audio;"
-msgstr "mp3;etykieta;znacznik;tag;dźwięk;audio;"
+msgid "mp3;tag;audio;music;"
+msgstr "mp3;etykieta;znacznik;tag;tagowanie;dźwięk;audio;muzyka;"
 
-#: ../src/about.c:89
+#: ../data/browser.ui.h:1
+msgid "Browse Directory With"
+msgstr "PrzeglÄ…daj katalog za pomocÄ…"
+
+#: ../data/browser.ui.h:2
+msgid "Run Program"
+msgstr "Uruchom program"
+
+#: ../data/browser.ui.h:3
 msgid ""
-"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 (at your option) "
-"any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful, but WITHOUT "
-"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
-"FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for "
-"more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License along with "
-"this program. If not, see <http://www.gnu.org/licenses/>."
+"Enter the program to run; it will receive the current directory as a "
+"parameter"
 msgstr ""
-"Niniejszy program jest wolnym oprogramowaniem; można go rozprowadzać dalej i/"
-"lub modyfikować na warunkach Powszechnej Licencji Publicznej GNU, wydanej "
-"przez Fundację Wolnego Oprogramowania (Free Software Foundation) - według "
-"wersji drugiej tej Licencji lub którejś z późniejszych wersji.\n"
-"\n"
-"Niniejszy program rozpowszechniany jest z nadzieją, iż będzie on użyteczny - "
-"jednak BEZ JAKIEJKOLWIEK GWARANCJI, nawet domyślnej gwarancji PRZYDATNOŚCI "
-"HANDLOWEJ albo PRZYDATNOŚCI DO OKREŚLONYCH ZASTOSOWAŃ. W celu uzyskania "
-"bliższych informacji należy zapoznać się z Powszechną Licencją Publiczną "
-"GNU.\n"
-"\n"
-"Z pewnością wraz z niniejszym programem dostarczono także egzemplarz "
-"Powszechnej Licencji Publicznej GNU (GNU General Public License); jeśli nie "
-"- proszę odwiedzić stronę internetową <http://www.gnu.org/licenses/>."
+"Proszę podać program do uruchomienia, otrzyma on bieżący katalog jako "
+"parametr"
+
+#: ../data/browser.ui.h:4 ../src/misc.c:393 ../src/tag_area.c:1491
+msgid "_Open"
+msgstr "_Otwórz"
+
+#: ../data/browser.ui.h:5 ../data/tag_area.ui.h:3
+#: ../src/application_window.c:322 ../src/application_window.c:336
+#: ../src/application_window.c:2612 ../src/application_window.c:2650
+#: ../src/browser.c:848 ../src/cddb_dialog.c:2266 ../src/easytag.c:516
+#: ../src/easytag.c:523 ../src/easytag.c:640 ../src/misc.c:391
+#: ../src/playlist_dialog.c:655 ../src/tag_area.c:1489 ../src/tag_area.c:1851
+msgid "_Cancel"
+msgstr "_Anuluj"
+
+#: ../data/browser.ui.h:6
+msgid "_Execute"
+msgstr "_Wykonaj"
+
+#: ../data/browser.ui.h:7
+msgid "Open Files With"
+msgstr "Otwórz pliki za pomocą"
 
-#. Translators: put your own name here to appear in the about dialog.
-#: ../src/about.c:106
-msgid "translator-credits"
+#: ../data/browser.ui.h:8
+msgid ""
+"Enter the program to run; it will receive the current files as a parameter"
 msgstr ""
-"Maciej Kasprzyk <kapsrzol at o2.pl>, 2002\n"
-"Artur Polaczyński <artii at o2.pl>, 2003-2004\n"
-"Tomasz Sałaciński <tsalacinski at gmail.com>, 2007\n"
-"Michał Smoczyk <msmoczyk at wp.pl>, 2007-2012\n"
-"Piotr DrÄ…g <piotrdrag at gmail.com>, 2012-2014\n"
-"Aviary.pl <gnomepl at aviary.pl>, 2012-2014"
-
-#: ../src/about.c:116
-msgid "View and edit tags in audio files"
-msgstr "Wyświetlanie i modyfikowanie etykiet w plikach dźwiękowych"
-
-#: ../src/ape_tag.c:61 ../src/id3v24_tag.c:113 ../src/mp4_header.cc:46
-#: ../src/mp4_header.cc:59 ../src/mp4_tag.cc:69 ../src/mp4_tag.cc:85
-#: ../src/mp4_tag.cc:90 ../src/mp4_tag.cc:262 ../src/mp4_tag.cc:278
-#: ../src/mp4_tag.cc:283
-#, c-format
-msgid "Error while opening file: '%s' (%s)."
-msgstr "BÅ‚Ä…d podczas otwierania pliku: \"%s\" (%s)."
+"Proszę podać program do uruchomienia, otrzyma on bieżące pliki jako parametr"
 
-#: ../src/application.c:37
-msgid "Print the version and exit"
-msgstr "Wyświetla wersję i kończy działanie"
-
-#: ../src/application.c:89
-#, c-format
-msgid "Website: %s"
-msgstr "Witryna: %s"
+#. Only directories changed
+#: ../data/browser.ui.h:9 ../data/menus.ui.h:99 ../src/easytag.c:606
+msgid "Rename Directory"
+msgstr "Zmień nazwę katalogu"
 
-#: ../src/application.c:98
-msgid "- Tag and rename audio files"
-msgstr "- nadawanie etykiet i zmienianie nazw plikach dźwiękowych"
+#: ../data/browser.ui.h:10
+msgid "Literal name:"
+msgstr "Dosłowna nazwa:"
 
-#.
-#. * Main Menu Actions
-#.
-#: ../src/bar.c:155
-msgid "_File"
-msgstr "_Plik"
+#: ../data/browser.ui.h:11 ../data/playlist_dialog.ui.h:2
+msgid "Use mask:"
+msgstr "Maska:"
 
-#: ../src/bar.c:156
-msgid "Sort List by Tag"
-msgstr "Uporządkuj listę według etykiet"
+#: ../data/browser.ui.h:12 ../data/org.gnome.EasyTAG.gschema.xml.h:188
+msgid "Whether to use a mask when renaming directories"
+msgstr "Czy używać maski podczas zmieniania nazw katalogów"
 
-#: ../src/bar.c:159
-msgid "Sort List by Property"
-msgstr "Uporządkuj listę według właściwości"
+#: ../data/browser.ui.h:13
+msgid ""
+"Select or type in a mask using codes (see Legend in Scanner Window) to "
+"rename the directory from tag fields"
+msgstr ""
+"Proszę wybrać lub wprowadzić maskę używając kodów (proszę zobaczyć \"Legendę"
+"\"), aby zmienić nazwę katalogu z pól etykiet"
 
-#: ../src/bar.c:160
-msgid "Ascending by filename"
-msgstr "Rosnąco według nazw plików"
+#: ../data/browser.ui.h:14
+msgid "Rename directory preview"
+msgstr "PodglÄ…d zmiany nazwy katalogu"
 
-#: ../src/bar.c:161
-msgid "Descending by filename"
-msgstr "Malejąco według nazw plików"
+#: ../data/browser.ui.h:15
+msgid "_Rename"
+msgstr "_Zmień nazwę"
 
-#: ../src/bar.c:162
-msgid "Ascending by creation date"
-msgstr "Rosnąco według daty utworzenia"
+#: ../data/browser.ui.h:16
+msgid "Choose a directory to show in the browser"
+msgstr "Proszę wybrać katalog do wyświetlenia w przeglądarce"
 
-#: ../src/bar.c:163
-msgid "Descending by creation date"
-msgstr "Malejąco według daty utworzenia"
+#: ../data/browser.ui.h:17 ../src/application.c:129
+msgid "Select a directory to browse"
+msgstr "Proszę wybrać katalog do przeglądania"
 
-#: ../src/bar.c:164
-msgid "Ascending by track number"
-msgstr "Rosnąco według numeru ścieżki"
+#: ../data/browser.ui.h:18 ../src/easytag.c:1106
+msgid "No files"
+msgstr "Brak plików"
 
-#: ../src/bar.c:165
-msgid "Descending by track number"
-msgstr "Malejąco według numeru ścieżki"
+#: ../data/browser.ui.h:19 ../data/cddb_dialog.ui.h:10
+#: ../data/preferences_dialog.ui.h:63 ../data/scan_dialog.ui.h:57
+#: ../data/search_dialog.ui.h:13
+msgid "Artist"
+msgstr "Wykonawca"
 
-#: ../src/bar.c:166
-msgid "Ascending by title"
-msgstr "Rosnąco według tytułu"
+#: ../data/browser.ui.h:20
+msgid "# Albums"
+msgstr "# Albumy"
 
-#: ../src/bar.c:167
-msgid "Descending by title"
-msgstr "Malejąco według tytułu"
+#: ../data/browser.ui.h:21
+msgid "# Files"
+msgstr "# Pliki"
 
-#: ../src/bar.c:168
-msgid "Ascending by artist"
-msgstr "Rosnąco według wykonawcy"
+#: ../data/browser.ui.h:22 ../data/cddb_dialog.ui.h:11
+#: ../data/preferences_dialog.ui.h:65 ../data/scan_dialog.ui.h:60
+#: ../data/search_dialog.ui.h:15
+msgid "Album"
+msgstr "Album"
 
-#: ../src/bar.c:169
-msgid "Descending by artist"
-msgstr "Malejąco według wykonawcy"
+#: ../data/browser.ui.h:23 ../data/cddb_dialog.ui.h:35
+#: ../data/playlist_dialog.ui.h:1 ../data/scan_dialog.ui.h:53
+#: ../data/search_dialog.ui.h:11
+msgid "Filename"
+msgstr "Nazwa pliku"
 
-#: ../src/bar.c:170
-msgid "Ascending by album artist"
-msgstr "Rosnąco według wykonawcy albumu"
+#: ../data/browser.ui.h:24 ../data/cddb_dialog.ui.h:36
+#: ../data/preferences_dialog.ui.h:61 ../data/scan_dialog.ui.h:55
+#: ../data/search_dialog.ui.h:12
+msgid "Title"
+msgstr "Tytuł"
 
-#: ../src/bar.c:171
-msgid "Descending by album artist"
-msgstr "Malejąco według wykonawcy albumu"
+#: ../data/browser.ui.h:25 ../data/scan_dialog.ui.h:59
+#: ../data/search_dialog.ui.h:14
+msgid "Album Artist"
+msgstr "Wykonawca albumu"
 
-#: ../src/bar.c:172
-msgid "Ascending by album"
-msgstr "Rosnąco według albumu"
+#: ../data/browser.ui.h:26 ../data/cddb_dialog.ui.h:37
+#: ../data/search_dialog.ui.h:17
+msgid "Year"
+msgstr "Rok"
 
-#: ../src/bar.c:173
-msgid "Descending by album"
-msgstr "Malejąco według albumu"
+#: ../data/browser.ui.h:27
+msgid "Disc"
+msgstr "PÅ‚yta"
 
-#: ../src/bar.c:174
-msgid "Ascending by year"
-msgstr "Rosnąco według roku"
+#: ../data/browser.ui.h:28 ../data/search_dialog.ui.h:18
+msgid "Track"
+msgstr "Ścieżka"
 
-#: ../src/bar.c:175
-msgid "Descending by year"
-msgstr "Malejąco według roku"
+#: ../data/browser.ui.h:29 ../data/cddb_dialog.ui.h:40
+#: ../data/preferences_dialog.ui.h:67 ../data/scan_dialog.ui.h:62
+#: ../data/search_dialog.ui.h:19
+msgid "Genre"
+msgstr "Gatunek"
 
-#: ../src/bar.c:176
-msgid "Ascending by genre"
-msgstr "Rosnąco według gatunku"
+#: ../data/browser.ui.h:30 ../data/preferences_dialog.ui.h:69
+#: ../data/scan_dialog.ui.h:64 ../data/search_dialog.ui.h:20
+msgid "Comment"
+msgstr "Komentarz"
 
-#: ../src/bar.c:177
-msgid "Descending by genre"
-msgstr "Malejąco według gatunku"
+#: ../data/browser.ui.h:31 ../data/preferences_dialog.ui.h:71
+#: ../data/scan_dialog.ui.h:66 ../data/search_dialog.ui.h:21
+#: ../src/picture.c:223
+msgid "Composer"
+msgstr "Kompozytor"
 
-#: ../src/bar.c:178
-msgid "Ascending by comment"
-msgstr "Rosnąco według komentarza"
+#: ../data/browser.ui.h:32 ../data/search_dialog.ui.h:22
+msgid "Original Artist"
+msgstr "Pierwotny wykonawca"
 
-#: ../src/bar.c:179
-msgid "Descending by comment"
-msgstr "Malejąco według komentarza"
+#: ../data/browser.ui.h:33 ../data/scan_dialog.ui.h:70
+#: ../data/search_dialog.ui.h:23
+msgid "Copyright"
+msgstr "Prawa autorskie"
 
-#: ../src/bar.c:180
-msgid "Ascending by composer"
-msgstr "Rosnąco według kompozytora"
+#: ../data/browser.ui.h:34 ../data/scan_dialog.ui.h:72
+#: ../data/search_dialog.ui.h:24
+msgid "URL"
+msgstr "URL"
 
-#: ../src/bar.c:181
-msgid "Descending by composer"
-msgstr "Malejąco według kompozytora"
+#: ../data/browser.ui.h:35 ../data/scan_dialog.ui.h:74
+#: ../data/search_dialog.ui.h:25
+msgid "Encoded By"
+msgstr "Koder"
 
-#: ../src/bar.c:182
-msgid "Ascending by original artist"
-msgstr "Rosnąco według pierwotnego wykonawcy"
+#: ../data/cddb_dialog.ui.h:1
+msgid "Search"
+msgstr "Wyszukiwanie"
 
-#: ../src/bar.c:183
-msgid "Descending by original artist"
-msgstr "Malejąco według pierwotnego wykonawcy"
+#: ../data/cddb_dialog.ui.h:2
+msgid "Enter the words to search (separated by a space or ‘+’)"
+msgstr "Proszę podać wyszukiwane wyrazy (oddzielone spacją lub \"+\")"
 
-#: ../src/bar.c:184
-msgid "Ascending by copyright"
-msgstr "Rosnąco według praw autorskich"
+#: ../data/cddb_dialog.ui.h:3
+msgid "_Search"
+msgstr "_Znajdź"
 
-#: ../src/bar.c:185
-msgid "Descending by copyright"
-msgstr "Malejąco według praw autorskich"
+#: ../data/cddb_dialog.ui.h:4
+msgid ""
+"Generate the CDDB disc ID using the selected files (the order is important)"
+msgstr ""
+"Tworzy identyfikator płyty CDDB używając zaznaczonych plików (kolejność jest "
+"ważna)"
 
-#: ../src/bar.c:186
-msgid "Ascending by URL"
-msgstr "Rosnąco według adresów URL"
+#: ../data/cddb_dialog.ui.h:5
+msgid "Search Using Selected _Files"
+msgstr "Z_najdź używając zaznaczonych plików"
 
-#: ../src/bar.c:187
-msgid "Descending by URL"
-msgstr "Malejąco według adresów URL"
+#: ../data/cddb_dialog.ui.h:6 ../data/toolbar.ui.h:31
+msgid "Stop"
+msgstr "Zatrzymaj"
 
-#. Translators: the encoder name is supposed to be the name of a person
-#. * or organisation, but can sometimes be the name of an application.
-#: ../src/bar.c:190
-msgid "Ascending by encoder name"
-msgstr "Rosnąco według nazwiska kodującego"
+#: ../data/cddb_dialog.ui.h:7
+msgid "Stop the search"
+msgstr "Zatrzymuje wyszukiwanie"
 
-#. Translators: the encoder name is supposed to be the name of a person
-#. * or organisation, but can sometimes be the name of an application.
-#: ../src/bar.c:193
-msgid "Descending by encoder name"
-msgstr "Malejąco według nazwiska kodującego"
+#: ../data/cddb_dialog.ui.h:8
+msgid "Manual Search Options"
+msgstr "Opcje ręcznego wyszukiwania"
 
-#: ../src/bar.c:194
-msgid "Ascending by file type"
-msgstr "Rosnąco według typu pliku"
+#: ../data/cddb_dialog.ui.h:9
+msgid "Search Fields"
+msgstr "Pola wyszukiwania"
 
-#: ../src/bar.c:195
-msgid "Descending by file type"
-msgstr "Malejąco według typu pliku"
+#: ../data/cddb_dialog.ui.h:12
+msgid "Track Name"
+msgstr "Nazwa ścieżki"
 
-#: ../src/bar.c:196
-msgid "Ascending by file size"
-msgstr "Rosnąco według rozmiaru pliku"
+#: ../data/cddb_dialog.ui.h:13 ../data/preferences_dialog.ui.h:91
+#: ../src/picture.c:201
+msgid "Other"
+msgstr "Inne"
 
-#: ../src/bar.c:197
-msgid "Descending by file size"
-msgstr "Malejąco według rozmiaru pliku"
+#: ../data/cddb_dialog.ui.h:14
+msgid "Categories"
+msgstr "Kategorie"
 
-#: ../src/bar.c:198
-msgid "Ascending by duration"
-msgstr "Rosnąco według czasu trwania"
+#: ../data/cddb_dialog.ui.h:15
+msgid "Blues"
+msgstr "Blues"
 
-#: ../src/bar.c:199
-msgid "Descending by duration"
-msgstr "Malejąco według czasu trwania"
+#: ../data/cddb_dialog.ui.h:16
+msgid "Classical"
+msgstr "Klasyczna"
 
-#: ../src/bar.c:200
-msgid "Ascending by bitrate"
-msgstr "Rosnąco według gęstości bitowej"
+#: ../data/cddb_dialog.ui.h:17
+msgid "Country"
+msgstr "Country"
 
-#: ../src/bar.c:201
-msgid "Descending by bitrate"
-msgstr "Malejąco według gęstości bitowej"
+#: ../data/cddb_dialog.ui.h:18
+msgid "Folk"
+msgstr "Folk"
 
-#: ../src/bar.c:202
-msgid "Ascending by samplerate"
-msgstr "Rosnąco według częstotliwości próbkowania"
+#: ../data/cddb_dialog.ui.h:19
+msgid "Jazz"
+msgstr "Jazz"
 
-#: ../src/bar.c:203
-msgid "Descending by samplerate"
-msgstr "Malejąco według częstotliwości próbkowania"
+#: ../data/cddb_dialog.ui.h:20
+msgid "Misc."
+msgstr "Różne"
 
-#: ../src/bar.c:205
-msgid "Open Files With…"
-msgstr "Otwórz pliki za pomocą…"
+#: ../data/cddb_dialog.ui.h:21
+msgid "New Age"
+msgstr "New Age"
 
-#: ../src/bar.c:206
-msgid "Run a command on the selected files"
-msgstr "Wykonaj polecenie na zaznaczonych plików"
+#: ../data/cddb_dialog.ui.h:22
+msgid "Reggae"
+msgstr "Reggae"
 
-#: ../src/bar.c:209
-msgid "Select all"
-msgstr "Zaznacz wszystkie"
+#: ../data/cddb_dialog.ui.h:23
+msgid "Rock"
+msgstr "Rock"
 
-#: ../src/bar.c:210
-msgid "Unselect All"
-msgstr "Odznacz wszystkie"
+#: ../data/cddb_dialog.ui.h:24
+msgid "Soundtrack"
+msgstr "Ścieżka filmowa"
 
-#: ../src/bar.c:211
-msgid "Clear the current selection"
-msgstr "Wyczyść bieżące zaznaczenie"
+#: ../data/cddb_dialog.ui.h:25
+msgid "Results"
+msgstr "Wyniki"
 
-#: ../src/bar.c:214
-msgid "Invert File Selection"
-msgstr "Odwróć zaznaczenie plików"
+#: ../data/cddb_dialog.ui.h:26
+msgid "Artist / Album"
+msgstr "Wykonawca / Album"
 
-#: ../src/bar.c:215
-msgid "Invert file selection"
-msgstr "Odwróć zaznaczenie plików"
+#: ../data/cddb_dialog.ui.h:27
+msgid "Category"
+msgstr "Kategoria"
 
-#: ../src/bar.c:217
-msgid "Delete Files"
-msgstr "Usuń pliki"
+#: ../data/cddb_dialog.ui.h:28
+msgid ""
+"Select lines from which tags will be applied to your files list. All lines "
+"will be processed if no line is selected.\\nYou can also reorder lines in "
+"this list before using the ‘apply’ button"
+msgstr ""
+"Należy zaznaczyć wiersze, których etykiety mają zostać zastosowane na liście "
+"plików. Wszystkie wiersze zostaną przetworzone, jeśli żadnego nie zaznaczono."
+"\\nMożna zmienić kolejność wierszy na tej liście przed użyciem przycisku "
+"\"Zastosuj\""
 
-#: ../src/bar.c:217
-msgid "Delete files"
-msgstr "Usuń pliki"
+#: ../data/cddb_dialog.ui.h:29
+msgid "#"
+msgstr "#"
 
-#: ../src/bar.c:218
-msgid "_First File"
-msgstr "P_ierwszy plik"
+#: ../data/cddb_dialog.ui.h:30
+msgid "Duration"
+msgstr "Czas trwania"
 
-#: ../src/bar.c:219
-msgid "First file"
-msgstr "Pierwszy plik"
+#: ../data/cddb_dialog.ui.h:31
+msgid "Select all lines"
+msgstr "Zaznacz wszystkie wiersze"
 
-#: ../src/bar.c:220
-msgid "_Previous File"
-msgstr "Pop_rzedni plik"
+#: ../data/cddb_dialog.ui.h:32
+msgid "Invert line selection"
+msgstr "Odwróć zaznaczenie wierszy"
 
-#: ../src/bar.c:220
-msgid "Previous file"
-msgstr "Poprzedni plik"
+#: ../data/cddb_dialog.ui.h:33
+msgid "Unselect all lines"
+msgstr "Odznacz wszystkie wiersze"
 
-#: ../src/bar.c:221
-msgid "_Next File"
-msgstr "_Następny plik"
+#: ../data/cddb_dialog.ui.h:34 ../data/menus.ui.h:24
+msgid "Fill Tags"
+msgstr "Wypełnianie etykiet"
 
-#: ../src/bar.c:221
-msgid "Next file"
-msgstr "Następny plik"
+#: ../data/cddb_dialog.ui.h:38
+msgid "Track #"
+msgstr "# ścieżki"
 
-#: ../src/bar.c:222
-msgid "_Last File"
-msgstr "_Ostatni plik"
+#: ../data/cddb_dialog.ui.h:39
+msgid "# Tracks"
+msgstr "# ścieżek"
 
-#: ../src/bar.c:223
-msgid "Last file"
-msgstr "Ostatni plik"
+#: ../data/cddb_dialog.ui.h:41 ../data/load_files_dialog.ui.h:13
+msgid "Run the current scanner for each file"
+msgstr "Wykonanie bieżącego skanera dla każdego pliku"
 
-#: ../src/bar.c:224
-msgid "S_can Files"
-msgstr "S_kanuj pliki"
+#: ../data/cddb_dialog.ui.h:42 ../data/org.gnome.EasyTAG.gschema.xml.h:38
+msgid ""
+"Whether to run the tag scanner, with the current settings, on the CDDB "
+"results"
+msgstr ""
+"Czy wykonać skaner etykiet za pomocą bieżących ustawień na wynikach CDDB"
 
-#: ../src/bar.c:225 ../src/scan_dialog.c:1818
-msgid "Scan selected files"
-msgstr "Skanuj zaznaczone pliki"
+#: ../data/cddb_dialog.ui.h:43
+msgid "Match lines with the Levenshtein algorithm"
+msgstr "Dopasowanie wierszy według algorytmu Levenshteina"
 
-#: ../src/bar.c:226
-msgid "_Remove Tags"
-msgstr "_Usuń etykiety"
+#: ../data/cddb_dialog.ui.h:44 ../data/preferences_dialog.ui.h:148
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:24
+msgid "Whether to use the DLM algorithm to match CDDB results to files"
+msgstr "Czy używać algorytmu DLM do dopasowywania wyników CDDB do plików"
 
-#: ../src/bar.c:227
-msgid "Remove tags"
-msgstr "Usuń etykiety"
+#: ../data/cddb_dialog.ui.h:45 ../data/search_dialog.ui.h:10
+#: ../src/load_files_dialog.c:895 ../src/preferences_dialog.c:295
+#: ../src/scan_dialog.c:2243
+msgid "_Close"
+msgstr "Za_mknij"
 
-#: ../src/bar.c:228
-msgid "_Undo Last Files Changes"
-msgstr "Cof_nij ostatnie zmiany plików"
+#: ../data/cddb_dialog.ui.h:46 ../src/cddb_dialog.c:2267
+#: ../src/load_files_dialog.c:896
+msgid "_Apply"
+msgstr "_Zastosuj"
 
-#: ../src/bar.c:229
-msgid "Undo last files changes"
-msgstr "Cofnij ostatnie zmiany plików"
+#: ../data/cddb_dialog.ui.h:47
+msgid "Load the selected lines or all lines (if no lines are selected)"
+msgstr ""
+"Wczytywanie wybranych wierszy lub wszystkich wierszy (jeśli żadnego nie "
+"zaznaczono)"
 
-#: ../src/bar.c:231
-msgid "R_edo Last Files Changes"
-msgstr "P_onów ostatnie zmiany plików"
+#. Default values are MPEG data.
+#: ../data/file_area.ui.h:1 ../src/et_core.c:3040 ../src/file_area.c:192
+msgid "File"
+msgstr "Plik"
 
-#: ../src/bar.c:232
-msgid "Redo last files changes"
-msgstr "Ponów ostatnie zmiany plików"
+#: ../data/file_area.ui.h:2
+msgid "0/0:"
+msgstr "0/0:"
 
-#: ../src/bar.c:234
-msgid "_Save Files"
-msgstr "Zapi_sz pliki"
+#. Nothing to display
+#. Version changed to encoder version
+#. Encoder version
+#: ../data/file_area.ui.h:3 ../src/file_area.c:193
+#: ../src/tags/flac_header.c:312 ../src/tags/monkeyaudio_header.c:97
+#: ../src/tags/musepack_header.c:101 ../src/tags/ogg_header.c:406
+#: ../src/tags/opus_header.c:228 ../src/tags/wavpack_header.c:88
+msgid "Encoder:"
+msgstr "Koder:"
 
-#: ../src/bar.c:235
-msgid "Save changes to selected files"
-msgstr "Zapisz zmiany zaznaczonych plików"
+#: ../data/file_area.ui.h:4
+msgid "Bitrate:"
+msgstr "Gęstość bitowa:"
 
-#: ../src/bar.c:237
-msgid "_Force Save Files"
-msgstr "_Wymuś zapisanie plików"
+#: ../data/file_area.ui.h:5
+msgid "Sample rate:"
+msgstr "Częstotliwość próbkowania:"
 
-#: ../src/bar.c:238
-msgid "Force saving files"
-msgstr "Wymuś zapisanie plików"
+#. Mode
+#: ../data/file_area.ui.h:6 ../src/file_area.c:197
+#: ../src/tags/mpeg_header.c:236
+msgid "Mode:"
+msgstr "Tryb:"
 
-#: ../src/bar.c:240
-msgid "Undo Last Changes"
-msgstr "Cofnij ostatnie zmiany"
+#: ../data/file_area.ui.h:7
+msgid "Size:"
+msgstr "Rozmiar:"
 
-#: ../src/bar.c:240
-msgid "Undo last changes"
-msgstr "Cofnij ostatnie zmiany"
+#: ../data/file_area.ui.h:8
+msgid "Duration:"
+msgstr "Czas trwania:"
 
-#: ../src/bar.c:241
-msgid "Redo Last Changes"
-msgstr "Ponów ostatnie zmiany"
+#: ../data/log_area.ui.h:1 ../data/preferences_dialog.ui.h:14
+msgid "Log"
+msgstr "Dziennik"
 
-#: ../src/bar.c:241
-msgid "Redo last changes"
-msgstr "Ponów ostatnie zmiany"
+#: ../data/load_files_dialog.ui.h:1
+msgid "File:"
+msgstr "Plik:"
 
-#: ../src/bar.c:242
-msgid "_Quit"
-msgstr "Za_kończ"
+#: ../data/load_files_dialog.ui.h:2
+msgid "Choose a Text File"
+msgstr "Wybór pliku tekstowego"
 
-#: ../src/bar.c:242 ../src/easytag.c:2428 ../src/easytag.c:4550
-#: ../src/easytag.c:4582
-msgid "Quit"
-msgstr "Zakończ"
+#: ../data/load_files_dialog.ui.h:3
+msgid "_Load"
+msgstr "W_czytaj"
 
-#: ../src/bar.c:245
-msgid "_Browser"
-msgstr "_PrzeglÄ…darka"
+#: ../data/load_files_dialog.ui.h:4
+msgid "Content of Text File"
+msgstr "Zawartość pliku tekstowego"
 
-#: ../src/bar.c:246
-msgid "_Home Directory"
-msgstr "_Katalog domowy"
+#: ../data/load_files_dialog.ui.h:5
+msgid "Insert a blank line before the selected line"
+msgstr "Wstaw pusty wiersz przed wybranym wierszem"
 
-#: ../src/bar.c:247
-msgid "Go to home directory"
-msgstr "Przejdź do katalogu domowego"
+#: ../data/load_files_dialog.ui.h:6
+msgid "Delete the selected line"
+msgstr "Usuń zaznaczony wiersz"
 
-#: ../src/bar.c:249
-msgid "Desktop Directory"
-msgstr "Katalog pulpitu"
+#: ../data/load_files_dialog.ui.h:7 ../src/load_files_dialog.c:636
+#: ../src/load_files_dialog.c:739
+msgid "Delete all blank lines"
+msgstr "Usuń wszystkie puste wiersze"
 
-#: ../src/bar.c:250
-msgid "Go to desktop directory"
-msgstr "Przejdź do katalogu pulpitu"
+#: ../data/load_files_dialog.ui.h:8
+msgid "Move the selected line up"
+msgstr "Przesuń zaznaczony wiersz do góry"
 
-#: ../src/bar.c:252
-msgid "Documents Directory"
-msgstr "Katalog dokumentów"
+#: ../data/load_files_dialog.ui.h:9
+msgid "Move the selected line down"
+msgstr "Przesuń zaznaczony wiersz w dół"
 
-#: ../src/bar.c:253
-msgid "Go to documents directory"
-msgstr "Przejdź do katalogu dokumentów"
+#: ../data/load_files_dialog.ui.h:10 ../src/load_files_dialog.c:654
+#: ../src/load_files_dialog.c:757
+msgid "Reload"
+msgstr "Wczytaj ponownie"
 
-#: ../src/bar.c:255
-msgid "Downloads Directory"
-msgstr "Katalog pobranych plików"
+#: ../data/load_files_dialog.ui.h:11
+msgid "List of Files"
+msgstr "Lista plików"
 
-#: ../src/bar.c:256
-msgid "Go to downloads directory"
-msgstr "Przejdź do katalogu pobranych plików"
+#: ../data/load_files_dialog.ui.h:12
+msgid "Selected line:"
+msgstr "Wybrany wiersz:"
 
-#: ../src/bar.c:258
-msgid "Music Directory"
-msgstr "Katalog muzyki"
+#: ../data/load_files_dialog.ui.h:14
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:131
+msgid "Whether to run the current scanner on files loaded from a text file"
+msgstr "Czy wykonać bieżący skaner na plikach wczytanych z pliku tekstowego"
 
-#: ../src/bar.c:259
-msgid "Go to music directory"
-msgstr "Przejdź do katalogu muzyki"
+#: ../data/menus.ui.h:1
+msgid "_Help"
+msgstr "Pomo_c"
 
-#: ../src/bar.c:261
-msgid "_Parent Directory"
-msgstr "Katalog _nadrzędny"
+#: ../data/menus.ui.h:2
+msgid "_About"
+msgstr "_O programie"
 
-#: ../src/bar.c:262
-msgid "Go to parent directory"
-msgstr "Przejdź do katalogu nadrzędnego"
+#: ../data/menus.ui.h:3 ../src/application_window.c:2651
+msgid "_Quit"
+msgstr "Za_kończ"
 
-#: ../src/bar.c:264
-msgid "_Default Directory"
-msgstr "_Domyślny katalog"
+#: ../data/menus.ui.h:4
+msgid "_File"
+msgstr "_Plik"
 
-#: ../src/bar.c:265
-msgid "Go to default directory"
-msgstr "Przejdź do domyślnego katalogu"
+#: ../data/menus.ui.h:5
+msgid "Open Files With…"
+msgstr "Otwórz pliki za pomocą…"
 
-#: ../src/bar.c:267
-msgid "Set _Current Path as Default"
-msgstr "Ustaw _bieżącą ścieżkę jako domyślną"
+#: ../data/menus.ui.h:6
+msgid "Run Audio Player"
+msgstr "Uruchom odtwarzacz dźwięku"
 
-#: ../src/bar.c:267
-msgid "Set current path as default"
-msgstr "Ustaw bieżącą ścieżkę jako domyślną"
+#: ../data/menus.ui.h:7 ../data/toolbar.ui.h:23
+msgid "Invert File Selection"
+msgstr "Odwróć zaznaczenie plików"
 
-#: ../src/bar.c:268
-msgid "Rename Directory…"
-msgstr "Zmień nazwę katalogu…"
+#: ../data/menus.ui.h:8
+msgid "Delete Files"
+msgstr "Usuń pliki"
 
-#: ../src/bar.c:268
-msgid "Rename directory"
-msgstr "Zmień nazwę katalogu"
+#: ../data/menus.ui.h:9
+msgid "Undo for File"
+msgstr "Cofnij dla pliku"
 
-#: ../src/bar.c:269
-msgid "Reload Directory"
-msgstr "Ponownie wczytaj katalog"
+#: ../data/menus.ui.h:10
+msgid "Redo for File"
+msgstr "Ponów dla pliku"
 
-#: ../src/bar.c:270
-msgid "Reload directory"
-msgstr "Ponownie wczytaj katalog"
+#: ../data/menus.ui.h:11 ../data/toolbar.ui.h:17
+msgid "_Save Files"
+msgstr "Zapi_sz pliki"
 
-#: ../src/bar.c:273
-msgid "Browse Directory With…"
-msgstr "Przeglądaj katalog za pomocą…"
+#: ../data/menus.ui.h:12
+msgid "_Force Save Files"
+msgstr "_Wymuś zapisanie plików"
 
-#: ../src/bar.c:274
-msgid "Run a command on the directory"
-msgstr "Wykonaj polecenia na tym katalogu"
+#: ../data/menus.ui.h:13
+msgid "_Edit"
+msgstr "_Edycja"
 
-#: ../src/bar.c:276
-msgid "_Collapse Tree"
-msgstr "_Zwiń drzewo"
+#: ../data/menus.ui.h:14 ../data/toolbar.ui.h:25
+msgid "_Find…"
+msgstr "Z_najdź…"
 
-#: ../src/bar.c:277
-msgid "Collapse directory tree"
-msgstr "Zwiń drzewo katalogów"
+#: ../data/menus.ui.h:15
+msgid "Select All"
+msgstr "Zaznacz wszystkie"
 
-#: ../src/bar.c:278
-msgid "_Reload Tree"
-msgstr "Ponownie _wczytaj drzewo"
+#: ../data/menus.ui.h:16
+msgid "Unselect All"
+msgstr "Odznacz wszystkie"
 
-#: ../src/bar.c:279
-msgid "Reload directory tree"
-msgstr "Ponownie wczytaj drzewo katalogów"
+#: ../data/menus.ui.h:17
+msgid "Undo"
+msgstr "Cofnij"
 
-#: ../src/bar.c:282
-msgid "S_canner Mode"
-msgstr "Tryb s_kanera"
+#: ../data/menus.ui.h:18
+msgid "Redo"
+msgstr "Ponów"
 
-#: ../src/bar.c:284
-msgid "_Miscellaneous"
-msgstr "_Różne"
+#: ../data/menus.ui.h:19 ../data/toolbar.ui.h:11
+msgid "_Remove Tags"
+msgstr "_Usuń etykiety"
 
-#: ../src/bar.c:285
-msgid "_Find…"
-msgstr "Z_najdź…"
+#: ../data/menus.ui.h:20
+msgid "_Preferences"
+msgstr "_Preferencje"
 
-#: ../src/bar.c:286
-msgid "Search filenames and tags"
-msgstr "Wyszukaj nazwy plików i etykiety"
+#: ../data/menus.ui.h:21
+msgid "_View"
+msgstr "_Widok"
 
-#: ../src/bar.c:288
-msgid "CDD_B Search…"
-msgstr "Wyszukaj pliki w CDD_B…"
+#: ../data/menus.ui.h:22
+msgid "Show Scanner"
+msgstr "Wyświetlanie skanera"
 
-#: ../src/bar.c:289
-msgid "CDDB search"
-msgstr "Wyszukaj w CDDB"
+#: ../data/menus.ui.h:23
+msgid "Scanner Mode"
+msgstr "Tryb skanera"
 
-#: ../src/bar.c:291
-msgid "Load Filenames From a Text File…"
-msgstr "Wczytaj nazwy plików z pliku tekstowego…"
+#: ../data/menus.ui.h:25
+msgid "Rename Files and Directories"
+msgstr "Zmiana nazw plików i katalogów"
 
-#: ../src/bar.c:292
-msgid "Load filenames from a text file"
-msgstr "Wczytaj nazwy plików z pliku tekstowego"
+#: ../data/menus.ui.h:26 ../data/scan_dialog.ui.h:107
+msgid "Process Fields"
+msgstr "Przetwarzanie pól"
 
-#: ../src/bar.c:294
-msgid "Generate Playlist…"
-msgstr "Utwórz listę odtwarzania…"
+#: ../data/menus.ui.h:27 ../data/toolbar.ui.h:19
+msgid "Directory Tree"
+msgstr "Drzewo katalogów"
 
-#: ../src/bar.c:295
-msgid "Generate a playlist"
-msgstr "Utwórz listę odtwarzania"
+#: ../data/menus.ui.h:28 ../data/toolbar.ui.h:21
+msgid "Artists and Albums"
+msgstr "Wykonawcy i albumy"
 
-#: ../src/bar.c:297 ../src/bar.c:328 ../src/bar.c:329 ../src/bar.c:330
-msgid "Run Audio Player"
-msgstr "Uruchom odtwarzacz dźwięku"
+#: ../data/menus.ui.h:29
+msgid "Sort List by Tag"
+msgstr "Uporządkuj listę według etykiet"
 
-#: ../src/bar.c:298 ../src/bar.c:328 ../src/bar.c:329 ../src/bar.c:330
-msgid "Run audio player"
-msgstr "Uruchom odtwarzacz dźwięku"
+#: ../data/menus.ui.h:30
+msgid "Ascending by track number"
+msgstr "Rosnąco według numeru ścieżki"
 
-#: ../src/bar.c:301
-msgid "_Edit"
-msgstr "_Edycja"
+#: ../data/menus.ui.h:31
+msgid "Descending by track number"
+msgstr "Malejąco według numeru ścieżki"
 
-#: ../src/bar.c:302
-msgid "_Preferences"
-msgstr "_Preferencje"
+#: ../data/menus.ui.h:32
+msgid "Ascending by title"
+msgstr "Rosnąco według tytułu"
 
-#. The window
-#: ../src/bar.c:303 ../src/prefs.c:110
-msgid "Preferences"
-msgstr "Preferencje"
+#: ../data/menus.ui.h:33
+msgid "Descending by title"
+msgstr "Malejąco według tytułu"
 
-#: ../src/bar.c:305
-msgid "_View"
-msgstr "_Widok"
+#: ../data/menus.ui.h:34
+msgid "Ascending by artist"
+msgstr "Rosnąco według wykonawcy"
 
-#: ../src/bar.c:306
-msgid "_Go"
-msgstr "P_rzejdź"
+#: ../data/menus.ui.h:35
+msgid "Descending by artist"
+msgstr "Malejąco według wykonawcy"
 
-#: ../src/bar.c:308
-msgid "_Help"
-msgstr "Pomo_c"
+#: ../data/menus.ui.h:36
+msgid "Ascending by album artist"
+msgstr "Rosnąco według wykonawcy albumu"
 
-#: ../src/bar.c:311
-msgid "_Contents"
-msgstr "_Spis treści"
+#: ../data/menus.ui.h:37
+msgid "Descending by album artist"
+msgstr "Malejąco według wykonawcy albumu"
 
-#: ../src/bar.c:312
-msgid "Show help"
-msgstr "Wyświetla pomoc"
+#: ../data/menus.ui.h:38
+msgid "Ascending by album"
+msgstr "Rosnąco według albumu"
 
-#: ../src/bar.c:314
-msgid "_About"
-msgstr "_O programie"
+#: ../data/menus.ui.h:39
+msgid "Descending by album"
+msgstr "Malejąco według albumu"
 
-#: ../src/bar.c:314
-msgid "About"
-msgstr "O programie"
+#: ../data/menus.ui.h:40
+msgid "Ascending by year"
+msgstr "Rosnąco według roku"
 
-#.
-#. * Following items are on toolbar but not on menu
-#.
-#: ../src/bar.c:320
-msgid "Stop the current action"
-msgstr "Zatrzymaj bieżące działanie"
+#: ../data/menus.ui.h:41
+msgid "Descending by year"
+msgstr "Malejąco według roku"
 
-#.
-#. * Popup menu's Actions
-#.
-#: ../src/bar.c:326
-msgid "_File Operations"
-msgstr "_Działania na plikach"
+#: ../data/menus.ui.h:42
+msgid "Ascending by genre"
+msgstr "Rosnąco według gatunku"
 
-#: ../src/bar.c:327
-msgid "S_canner"
-msgstr "S_kaner"
+#: ../data/menus.ui.h:43
+msgid "Descending by genre"
+msgstr "Malejąco według gatunku"
 
-#: ../src/bar.c:331
-msgid "CDDB Search Files…"
-msgstr "Wyszukaj pliki w CDDB…"
+#: ../data/menus.ui.h:44
+msgid "Ascending by comment"
+msgstr "Rosnąco według komentarza"
 
-#: ../src/bar.c:331
-msgid "CDDB search files…"
-msgstr "Wyszukaj pliki w CDDB…"
+#: ../data/menus.ui.h:45
+msgid "Descending by comment"
+msgstr "Malejąco według komentarza"
 
-#. { AM_ARTIST_OPEN_FILE_WITH,     GTK_STOCK_OPEN,    _("Open File(s) with…"),     NULL, _("Open File(s) with…"),     G_CALLBACK(Browser_Open_Run_Program_List_Window??? Browser_Open_Run_Program_Tree_Window???) },
-#. { AM_ALBUM_OPEN_FILE_WITH,      GTK_STOCK_OPEN,    _("Open File(s) with…"),     NULL, _("Open File(s) with…"),     G_CALLBACK(Browser_Open_Run_Program_List_Window??? Browser_Open_Run_Program_Tree_Window???) },
-#: ../src/bar.c:335
-msgid "Clear log"
-msgstr "Wyczyść dziennik"
+#: ../data/menus.ui.h:46
+msgid "Ascending by composer"
+msgstr "Rosnąco według kompozytora"
 
-#. { AM_BROWSE_SUBDIR,      GTK_STOCK_INDEX,        _("Browse _Subdirectories"),                         NULL, _("Browse _Sub-directories"),                         NULL,                                    FALSE },
-#: ../src/bar.c:342
-msgid "Browse _Subdirectories"
-msgstr "Przeglądanie p_odkatalogów"
+#: ../data/menus.ui.h:47
+msgid "Descending by composer"
+msgstr "Malejąco według kompozytora"
 
-#: ../src/bar.c:342
-msgid "Browse subdirectories"
-msgstr "Przeglądanie podkatalogów"
+#: ../data/menus.ui.h:48
+msgid "Ascending by original artist"
+msgstr "Rosnąco według pierwotnego wykonawcy"
 
-#: ../src/bar.c:346
-msgid "Show Hidden Directories"
-msgstr "Wyświetlanie ukrytych katalogów"
+#: ../data/menus.ui.h:49
+msgid "Descending by original artist"
+msgstr "Malejąco według pierwotnego wykonawcy"
 
-#: ../src/bar.c:346
-msgid "Show hidden directories"
-msgstr "Wyświetlanie ukrytych katalogów"
+#: ../data/menus.ui.h:50
+msgid "Ascending by copyright"
+msgstr "Rosnąco według praw autorskich"
 
-#: ../src/bar.c:348
-msgid "_Show Scanner"
-msgstr "Wyświetlanie _skanera"
+#: ../data/menus.ui.h:51
+msgid "Descending by copyright"
+msgstr "Malejąco według praw autorskich"
 
-#: ../src/bar.c:349
-msgid "Show scanner"
-msgstr "Wyświetlanie skanera"
+#: ../data/menus.ui.h:52
+msgid "Ascending by URL"
+msgstr "Rosnąco według adresów URL"
 
-#: ../src/bar.c:355
-msgid "Tree Browser"
-msgstr "PrzeglÄ…darka drzewa"
+#: ../data/menus.ui.h:53
+msgid "Descending by URL"
+msgstr "Malejąco według adresów URL"
 
-#: ../src/bar.c:356
-msgid "View by directory tree"
-msgstr "Wyświetlanie według drzewa katalogów"
+#: ../data/menus.ui.h:54
+msgid "Ascending by encoder name"
+msgstr "Rosnąco według nazwiska kodującego"
 
-#: ../src/bar.c:358
-msgid "Artist and Album"
-msgstr "Wykonawca i album"
+#: ../data/menus.ui.h:55
+msgid "Descending by encoder name"
+msgstr "Malejąco według nazwiska kodującego"
 
-#: ../src/bar.c:359
-msgid "View by artist and album"
-msgstr "Wyświetlanie według wykonawcy i albumu"
+#: ../data/menus.ui.h:56
+msgid "Sort List by Property"
+msgstr "Uporządkuj listę według właściwości"
 
-#: ../src/bar.c:364
-msgid "_Fill Tags…"
-msgstr "_Wypełnianie etykiet…"
+#: ../data/menus.ui.h:57
+msgid "Ascending by filename"
+msgstr "Rosnąco według nazw plików"
 
-#: ../src/bar.c:365
-msgid "Fill tags"
-msgstr "Wypełnianie etykiet"
+#: ../data/menus.ui.h:58
+msgid "Descending by filename"
+msgstr "Malejąco według nazw plików"
 
-#: ../src/bar.c:367
-msgid "_Rename Files and Directories…"
-msgstr "Z_miana nazw plików i katalogów…"
+#: ../data/menus.ui.h:59
+msgid "Ascending by creation date"
+msgstr "Rosnąco według daty utworzenia"
 
-#: ../src/bar.c:368
-msgid "Rename files and directories"
-msgstr "Zmiana nazw plików i katalogów"
+#: ../data/menus.ui.h:60
+msgid "Descending by creation date"
+msgstr "Malejąco według daty utworzenia"
 
-#: ../src/bar.c:370
-msgid "_Process Fields…"
-msgstr "_Przetwarzanie pól…"
+#: ../data/menus.ui.h:61
+msgid "Ascending by file type"
+msgstr "Rosnąco według typu pliku"
 
-#: ../src/bar.c:370 ../src/scan_dialog.c:184
-msgid "Process Fields"
-msgstr "Przetwarzanie pól"
+#: ../data/menus.ui.h:62
+msgid "Descending by file type"
+msgstr "Malejąco według typu pliku"
 
-#: ../src/bar.c:428
-#, c-format
-msgid "Could not merge UI, error was: %s\n"
-msgstr "Nie można scalić interfejsu użytkownika, błąd: %s\n"
+#: ../data/menus.ui.h:63
+msgid "Ascending by file size"
+msgstr "Rosnąco według rozmiaru pliku"
 
-#: ../src/bar.c:533
-msgid "Ready to start"
-msgstr "Gotowe do rozpoczęcia"
+#: ../data/menus.ui.h:64
+msgid "Descending by file size"
+msgstr "Malejąco według rozmiaru pliku"
 
-#: ../src/browser.c:376
-msgid "New default path for files selected"
-msgstr "Wybrano nową domyślną ścieżkę do plików"
+#: ../data/menus.ui.h:65
+msgid "Ascending by duration"
+msgstr "Rosnąco według czasu trwania"
 
-#: ../src/browser.c:678 ../src/easytag.c:4546
-msgid "Some files have been modified but not saved"
-msgstr "Niektóre pliki zostały zmodyfikowane, ale nie zostały zapisane"
+#: ../data/menus.ui.h:66
+msgid "Descending by duration"
+msgstr "Malejąco według czasu trwania"
 
-#: ../src/browser.c:679
-msgid "Do you want to save them before changing the directory?"
-msgstr "Zapisać je przed zmianą katalogu?"
+#: ../data/menus.ui.h:67
+msgid "Ascending by bit rate"
+msgstr "Rosnąco według gęstości bitowej"
 
-#: ../src/browser.c:683
-msgid "Confirm Directory Change"
-msgstr "Potwierdzenie zmiany katalogu"
+#: ../data/menus.ui.h:68
+msgid "Descending by bit rate"
+msgstr "Malejąco według gęstości bitowej"
 
-#: ../src/browser.c:2244
-msgid "<All albums>"
-msgstr "<Wszystkie albumy>"
+#: ../data/menus.ui.h:69
+msgid "Ascending by sample rate"
+msgstr "Rosnąco według częstotliwości próbkowania"
 
-#: ../src/browser.c:2707
-#, c-format
-msgid "Error: Searching for %s, could not find node %s in tree."
-msgstr "Błąd: wyszukiwanie %s, nie można odnaleźć węzła %s w drzewie."
+#: ../data/menus.ui.h:70
+msgid "Descending by sample rate"
+msgstr "Malejąco według częstotliwości próbkowania"
 
-#: ../src/browser.c:3201 ../src/browser.c:3279
-msgid "Tree"
-msgstr "Drzewo"
+#: ../data/menus.ui.h:71
+msgid "Collapse Tree"
+msgstr "Zwiń drzewo"
 
-#: ../src/browser.c:3202 ../src/cddb.c:803 ../src/misc.c:1903
-msgid "Filename"
-msgstr "Nazwa pliku"
-
-#: ../src/browser.c:3202 ../src/cddb.c:804 ../src/misc.c:1904
-#: ../src/prefs.c:643
-msgid "Title"
-msgstr "Tytuł"
+#: ../data/menus.ui.h:72
+msgid "Reload Tree"
+msgstr "Ponownie wczytaj drzewo"
 
-#. Translators: This option is for the previous 'search in' option. For
-#. * instance, translate this as "Search in:" "Artist".
-#: ../src/browser.c:3203 ../src/browser.c:3210 ../src/cddb.c:483
-#: ../src/cddb.c:805 ../src/misc.c:1905 ../src/prefs.c:644
-msgid "Artist"
-msgstr "Wykonawca"
-
-#: ../src/browser.c:3203 ../src/misc.c:1906
-msgid "Album Artist"
-msgstr "Wykonawca albumu"
+#: ../data/menus.ui.h:73
+msgid "Reload Directory"
+msgstr "Ponownie wczytaj katalog"
 
-#. Translators: This option is for the previous 'search in' option. For
-#. * instance, translate this as "Search in:" "Album".
-#: ../src/browser.c:3204 ../src/browser.c:3212 ../src/cddb.c:486
-#: ../src/cddb.c:806 ../src/misc.c:1907 ../src/prefs.c:645
-msgid "Album"
-msgstr "Album"
+#: ../data/menus.ui.h:74
+msgid "Show Hidden Directories"
+msgstr "Wyświetlanie ukrytych katalogów"
 
-#: ../src/browser.c:3204 ../src/cddb.c:807 ../src/misc.c:1909
-msgid "Year"
-msgstr "Rok"
+#: ../data/menus.ui.h:75
+msgid "_Browser"
+msgstr "_PrzeglÄ…darka"
 
-#: ../src/browser.c:3204
-msgid "Disc"
-msgstr "PÅ‚yta"
+#: ../data/menus.ui.h:76
+msgid "Set _Current Path as Default"
+msgstr "Ustaw _bieżącą ścieżkę jako domyślną"
 
-#: ../src/browser.c:3205 ../src/misc.c:1910
-msgid "Track"
-msgstr "Ścieżka"
+#: ../data/menus.ui.h:77
+msgid "Rename Directory…"
+msgstr "Zmień nazwę katalogu…"
 
-#: ../src/browser.c:3205 ../src/cddb.c:810 ../src/misc.c:1911
-#: ../src/prefs.c:646
-msgid "Genre"
-msgstr "Gatunek"
+#: ../data/menus.ui.h:78
+msgid "Browse Directory With…"
+msgstr "Przeglądaj katalog za pomocą…"
 
-#: ../src/browser.c:3206 ../src/misc.c:1912 ../src/prefs.c:647
-msgid "Comment"
-msgstr "Komentarz"
+#: ../data/menus.ui.h:79
+msgid "Browse _Subdirectories"
+msgstr "Przeglądanie p_odkatalogów"
 
-#: ../src/browser.c:3206 ../src/misc.c:1913 ../src/picture.c:884
-#: ../src/prefs.c:648
-msgid "Composer"
-msgstr "Kompozytor"
+#: ../data/menus.ui.h:80
+msgid "_Miscellaneous"
+msgstr "_Różne"
 
-#: ../src/browser.c:3207 ../src/misc.c:1914
-msgid "Original Artist"
-msgstr "Pierwotny wykonawca"
+#: ../data/menus.ui.h:81
+msgid "CDD_B Search…"
+msgstr "Wyszukaj pliki w CDD_B…"
 
-#: ../src/browser.c:3208 ../src/misc.c:1915
-msgid "Copyright"
-msgstr "Prawa autorskie"
+#: ../data/menus.ui.h:82
+msgid "Load Filenames From a Text File…"
+msgstr "Wczytaj nazwy plików z pliku tekstowego…"
 
-#: ../src/browser.c:3208 ../src/misc.c:1916
-msgid "URL"
-msgstr "URL"
+#: ../data/menus.ui.h:83 ../data/toolbar.ui.h:29
+msgid "Generate Playlist…"
+msgstr "Utwórz listę odtwarzania…"
 
-#: ../src/browser.c:3209 ../src/misc.c:1917
-msgid "Encoded By"
-msgstr "Koder"
+#: ../data/menus.ui.h:84
+msgid "_Go"
+msgstr "P_rzejdź"
 
-#: ../src/browser.c:3210
-msgid "# Albums"
-msgstr "# Albumy"
+#: ../data/menus.ui.h:85
+msgid "_Home Directory"
+msgstr "_Katalog domowy"
 
-#: ../src/browser.c:3211 ../src/browser.c:3212
-msgid "# Files"
-msgstr "# Pliki"
+#: ../data/menus.ui.h:86
+msgid "Desktop Directory"
+msgstr "Katalog pulpitu"
 
-#: ../src/browser.c:3237
-msgid "Enter a directory to browse."
-msgstr "Proszę podać katalog do przeglądania."
+#: ../data/menus.ui.h:87
+msgid "Documents Directory"
+msgstr "Katalog dokumentów"
 
-#: ../src/browser.c:3246
-msgid "Select a directory to browse."
-msgstr "Proszę wybrać katalog do przeglądania."
+#: ../data/menus.ui.h:88
+msgid "Downloads Directory"
+msgstr "Katalog pobranych plików"
 
-#.
-#. * The label for displaying number of files in path (without subdirs)
-#.
-#. Translators: No files, as in "0 files".
-#: ../src/browser.c:3253 ../src/easytag.c:3454
-msgid "No files"
-msgstr "Brak plików"
+#: ../data/menus.ui.h:89
+msgid "Music Directory"
+msgstr "Katalog muzyki"
 
-#: ../src/browser.c:3331
-msgid "Artist & Album"
-msgstr "Wykonawca i album"
+#: ../data/menus.ui.h:90
+msgid "_Parent Directory"
+msgstr "Katalog _nadrzędny"
 
-#. Only directories changed
-#: ../src/browser.c:3696 ../src/easytag.c:2879
-msgid "Rename Directory"
-msgstr "Zmień nazwę katalogu"
+#: ../data/menus.ui.h:91
+msgid "_Default Directory"
+msgstr "_Domyślny katalog"
 
-#: ../src/browser.c:3718
-#, c-format
-msgid "Rename the directory '%s' to:"
-msgstr "Zmiana nazwy katalogu \"%s\" na:"
+#: ../data/menus.ui.h:92 ../data/toolbar.ui.h:1
+msgid "_First File"
+msgstr "P_ierwszy plik"
 
-#: ../src/browser.c:3737 ../src/misc.c:1172
-msgid "Use mask:"
-msgstr "Maska:"
+#: ../data/menus.ui.h:93
+msgid "Previous File"
+msgstr "Poprzedni plik"
 
-#: ../src/browser.c:3740
-msgid "If activated, it will use masks to rename directory."
-msgstr "Jeśli jest włączone, to użyje maski do zmiany nazwy katalogu."
+#: ../data/menus.ui.h:94 ../data/toolbar.ui.h:5
+msgid "_Next File"
+msgstr "_Następny plik"
 
-#: ../src/browser.c:3758
-msgid ""
-"Select or type in a mask using codes (see Legend in Scanner Window) to "
-"rename the directory from tag fields."
-msgstr ""
-"Proszę wybrać lub wprowadzić maskę używając kodów (proszę zobaczyć \"Legendę"
-"\"), aby zmienić nazwę katalogu z pól etykiet."
+#: ../data/menus.ui.h:95 ../data/toolbar.ui.h:7
+msgid "_Last File"
+msgstr "_Ostatni plik"
 
-#. Preview label
-#: ../src/browser.c:3782
-msgid "Rename directory preview"
-msgstr "PodglÄ…d zmiany nazwy katalogu"
+#: ../data/menus.ui.h:96
+msgid "Home Directory"
+msgstr "Katalog domowy"
 
-#: ../src/browser.c:3874
-msgid "You must type a directory name"
-msgstr "Należy wprowadzić nazwę katalogu"
+#: ../data/menus.ui.h:97
+msgid "Default Directory"
+msgstr "Domyślny katalog"
 
-#: ../src/browser.c:3875 ../src/browser.c:3896
-msgid "Directory Name Error"
-msgstr "BÅ‚Ä…d nazwy katalogu"
+#: ../data/menus.ui.h:98
+msgid "Set Current Path as Default"
+msgstr "Ustaw bieżącą ścieżkę jako domyślną"
 
-#: ../src/browser.c:3893
-#, c-format
-msgid "Could not convert '%s' into filename encoding."
-msgstr "Nie można przekonwertować \"%s\" na kodowanie znaków nazwy pliku."
+#: ../data/menus.ui.h:100
+msgid "Browse Subdirectories"
+msgstr "Przeglądanie podkatalogów"
 
-#: ../src/browser.c:3895
-msgid "Please use another name"
-msgstr "Proszę użyć innej nazwy"
+#: ../data/menus.ui.h:101
+msgid "Invert Selection"
+msgstr "Odwróć zaznaczenie"
 
-#: ../src/browser.c:3965
-#, c-format
-msgid "The directory name '%s' already exists"
-msgstr "Nazwa katalogu \"%s\" już istnieje"
+#: ../data/menus.ui.h:102
+msgid "CDDB Search Files…"
+msgstr "Wyszukaj pliki w CDDB…"
 
-#: ../src/browser.c:3966 ../src/easytag.c:2962
-msgid "Rename File Error"
-msgstr "BÅ‚Ä…d zmiany nazwy pliku"
+#: ../data/menus.ui.h:103
+msgid "Find…"
+msgstr "Znajdź…"
 
-#: ../src/browser.c:4004 ../src/browser.c:4033
-msgid "Rename Directory Error"
-msgstr "BÅ‚Ä…d zmiany nazwy katalogu"
+#: ../data/menus.ui.h:104
+msgid "Clear Log"
+msgstr "Wyczyść dziennik"
 
-#: ../src/browser.c:4071
-msgid "Directory renamed"
-msgstr "Zmieniono nazwÄ™ katalogu"
+#: ../data/playlist_dialog.ui.h:3
+msgid "Use directory name"
+msgstr "Użycie nazwy katalogu"
 
-#: ../src/browser.c:4107
-msgid "Browse Directory With"
-msgstr "PrzeglÄ…daj katalog za pomocÄ…"
+#: ../data/playlist_dialog.ui.h:4
+msgid "Options"
+msgstr "Opcje"
 
-#: ../src/browser.c:4123 ../src/browser.c:4249
-msgid "Program to run:"
-msgstr "Program do uruchomienia:"
+#: ../data/playlist_dialog.ui.h:5
+msgid "Include only the selected files"
+msgstr "Dołączenie tylko zaznaczonych plików"
 
-#: ../src/browser.c:4135
+#: ../data/playlist_dialog.ui.h:6 ../data/org.gnome.EasyTAG.gschema.xml.h:164
 msgid ""
-"Enter the program to run. It will receive the current directory as parameter."
+"Whether to use only the selected files or all files when creating playlists"
 msgstr ""
-"Proszę podać program do uruchomienia. Otrzyma on bieżący katalog jako "
-"parametr."
+"Czy podczas tworzenia list odtwarzania używać tylko zaznaczonych plików, czy "
+"wszystkich"
 
-#: ../src/browser.c:4229
-msgid "Open Files With"
-msgstr "Otwórz pliki za pomocą"
+#: ../data/playlist_dialog.ui.h:7
+msgid "Use full path for files in playlist"
+msgstr "Używanie bezwzględnych ścieżek do plików"
+
+#: ../data/playlist_dialog.ui.h:8
+msgid "Use relative path for files in playlist"
+msgstr "Używanie względnych ścieżek do plików"
+
+#: ../data/playlist_dialog.ui.h:9
+msgid "Create playlist in the parent directory"
+msgstr "Utworzenie listy odtwarzania w katalogu nadrzędnym"
+
+#: ../data/playlist_dialog.ui.h:10 ../data/org.gnome.EasyTAG.gschema.xml.h:168
+msgid "Whether to create the playlist in the parent directory"
+msgstr "Czy tworzyć listę odtwarzania w katalogu nadrzędnym"
+
+#: ../data/playlist_dialog.ui.h:11
+msgid "Use DOS directory separator"
+msgstr "Używanie separatora katalogu systemu DOS"
 
-#: ../src/browser.c:4261
+#: ../data/playlist_dialog.ui.h:12 ../data/org.gnome.EasyTAG.gschema.xml.h:170
 msgid ""
-"Enter the program to run. It will receive the current file as parameter."
+"Whether to use backslash as directory separator when generating playlists"
 msgstr ""
-"Proszę podać program do uruchomienia. Otrzyma on bieżący plik jako parametr."
+"Czy używać wstecznego ukośnika jako separatora katalogów podczas tworzenia "
+"list odtwarzania"
 
-#: ../src/cddb.c:313
-msgid "Artist / Album"
-msgstr "Wykonawca / Album"
+#: ../data/playlist_dialog.ui.h:13
+msgid "Content"
+msgstr "Zawartość"
 
-#: ../src/cddb.c:313
-msgid "Category"
-msgstr "Kategoria"
+#: ../data/playlist_dialog.ui.h:14
+msgid "Write only list of files"
+msgstr "Zapisywanie tylko listy plików"
 
-#. Note: don't set "" instead of NULL else this will cause problem with translation language
-#. Translators: This option is for the previous 'search in' option. For
-#. * instance, translate this as "Search in:" "Track Name".
-#: ../src/cddb.c:314 ../src/cddb.c:489
-msgid "Track Name"
-msgstr "Nazwa ścieżki"
+#: ../data/playlist_dialog.ui.h:15
+msgid "Write information using filename"
+msgstr "Zapisywanie informacji używając nazw plików"
 
-#: ../src/cddb.c:314
-msgid "Duration"
-msgstr "Czas trwania"
+#: ../data/playlist_dialog.ui.h:16
+msgid "Write information using:"
+msgstr "Zapisywanie informacji używając:"
 
-#: ../src/cddb.c:326
-msgid "CDDB Search"
-msgstr "Wyszukiwanie w CDDB"
+#: ../data/preferences_dialog.ui.h:1
+msgid "Browser"
+msgstr "PrzeglÄ…darka"
 
-#.
-#. * 1 - Page for automatic search (generate the CDDBId from files)
-#.
-#: ../src/cddb.c:346
-msgid "Automatic Search"
-msgstr "Automatyczne wyszukiwanie"
+#: ../data/preferences_dialog.ui.h:2
+msgid "Default Directory:"
+msgstr "Domyślny katalog:"
 
-#: ../src/cddb.c:356
-msgid "Request CDDB"
-msgstr "Żądanie CDDB"
+#: ../data/preferences_dialog.ui.h:3 ../data/org.gnome.EasyTAG.gschema.xml.h:4
+msgid "The default path to search for music files"
+msgstr "Domyślna ścieżka do plików muzycznych"
 
-#: ../src/cddb.c:366
+#: ../data/preferences_dialog.ui.h:4
 msgid ""
-"Request automatically the CDDB using the selected files (the order is "
-"important) to generate the CddbID"
+"Load on startup the default directory or the directory passed as argument"
 msgstr ""
-"Automatyczne żądanie danych z CDDB używając zaznaczonych plików (kolejność "
-"jest ważna), aby utworzyć CddbID"
+"Wczytywanie podczas uruchamiania katalogu domyślnego lub katalogu podanego "
+"jako parametr"
 
-#: ../src/cddb.c:377 ../src/cddb.c:457
-msgid "Stop the search"
-msgstr "Zatrzymaj wyszukiwanie"
+#: ../data/preferences_dialog.ui.h:5 ../data/org.gnome.EasyTAG.gschema.xml.h:2
+msgid ""
+"Whether to load the default path (or the path passed as an argument) on "
+"application startup"
+msgstr ""
+"Czy wczytywać domyślną ścieżkę (lub ścieżkę podaną jako parametr) podczas "
+"uruchamiania programu"
 
-#. Check box to run the scanner
-#: ../src/cddb.c:384
-msgid "Use local CDDB"
-msgstr "Użycie lokalnej bazy CDDB"
+#: ../data/preferences_dialog.ui.h:6 ../data/org.gnome.EasyTAG.gschema.xml.h:5
+msgid "Browse subdirectories"
+msgstr "Przeglądanie podkatalogów"
 
-#: ../src/cddb.c:387 ../src/cddb.c:850
+#: ../data/preferences_dialog.ui.h:7 ../data/org.gnome.EasyTAG.gschema.xml.h:6
 msgid ""
-"When activating this option, after loading the fields, the current selected "
-"scanner will be ran (the scanner window must be opened)."
+"Whether to search subdirectories for audio files when reading a directory in "
+"the browser"
 msgstr ""
-"Po aktywowaniu tej opcji, po wczytaniu pól, bieżący skaner zostanie "
-"uruchomiony (okno skanera musi być otwarte)."
+"Czy przeszukiwać podkatalogi podczas wczytywania katalogu w przeglądarce"
 
-#.
-#. * 2 - Page for manual search
-#.
-#: ../src/cddb.c:404
-msgid "Manual Search"
-msgstr "Ręczne wyszukiwanie"
+#: ../data/preferences_dialog.ui.h:8 ../data/org.gnome.EasyTAG.gschema.xml.h:9
+msgid "Expand the subdirectories of the selected directory"
+msgstr "Rozwijanie podkatalogów zaznaczonego katalogu"
 
-#: ../src/cddb.c:416
-msgid "Words:"
-msgstr "Wyrazy:"
+#: ../data/preferences_dialog.ui.h:9
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:10
+msgid ""
+"Whether to expand the subdirectories of a node in the directory browser when "
+"selecting it"
+msgstr ""
+"Czy rozwijać podkatalogi węzła w przeglądarce katalogów podczas jego "
+"wybierania"
 
-#: ../src/cddb.c:429
-msgid "Enter the words to search (separated by a space or '+')"
-msgstr "Proszę podać wyszukiwane wyrazy (oddzielone spacją lub \"+\")"
+#: ../data/preferences_dialog.ui.h:10
+msgid "Search hidden directories"
+msgstr "Przeszukiwanie ukrytych katalogów"
 
-#.
-#. * Search options
-#.
-#: ../src/cddb.c:469
-msgid "Search In:"
-msgstr "Wyszukiwanie w:"
-
-#. Translators: This option is for the previous 'search in' option. For
-#. * instance, translate this as "Search in:" "All fields".
-#: ../src/cddb.c:479
-msgid "All Fields"
-msgstr "Wszystkie pola"
-
-#. Translators: This option is for the previous 'search in' option. For
-#. * instance, translate this as "Search in:" "Other".
-#: ../src/cddb.c:492 ../src/picture.c:862 ../src/prefs.c:807
-msgid "Other"
-msgstr "Inne"
+#: ../data/preferences_dialog.ui.h:11
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:8
+msgid ""
+"Whether to show hidden directories when showing a directory in the browser"
+msgstr ""
+"Czy wyświetlać ukryte katalogi podczas wyświetlania katalogu w przeglądarce"
+
+#: ../data/preferences_dialog.ui.h:12
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:53
+msgid "Sort files case-sensitively"
+msgstr "Rozróżnianie wielkości znaków podczas porządkowania"
+
+#: ../data/preferences_dialog.ui.h:13
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:54
+msgid "Whether file sorting is case-sensitive"
+msgstr "Czy wielkość znaków jest rozróżniana podczas porządkowania plików"
+
+#: ../data/preferences_dialog.ui.h:15
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:59
+msgid "Show the log"
+msgstr "Wyświetlanie dziennika"
+
+#: ../data/preferences_dialog.ui.h:16
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:60
+msgid "Whether to show the log in the main window"
+msgstr "Czy wyświetlać dziennik w głównym oknie"
+
+#: ../data/preferences_dialog.ui.h:17
+msgid "Maximum number of lines:"
+msgstr "Maksymalna liczba wierszy:"
 
-#. Translators: This option is for the previous 'search in' option. For
-#. * instance, translate this as "Search in:" "All Categories".
-#: ../src/cddb.c:516
-msgid "All Categories"
-msgstr "Wszystkie kategorie"
+#: ../data/preferences_dialog.ui.h:18
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:58
+msgid "The maximum number of lines to keep in the log"
+msgstr "Maksymalna liczba wierszy w dzienniku"
 
-#. Translators: This option is for the previous 'search in' option. For
-#. * instance, translate this as "Search in:" "Blues".
-#: ../src/cddb.c:520
-msgid "Blues"
-msgstr "Blues"
+#: ../data/preferences_dialog.ui.h:19
+msgid "General"
+msgstr "Ogólne"
 
-#. Translators: This option is for the previous 'search in' option. For
-#. * instance, translate this as "Search in:" "Classical".
-#: ../src/cddb.c:523
-msgid "Classical"
-msgstr "Klasyczna"
+#: ../data/preferences_dialog.ui.h:20
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:49
+msgid "Show audio file header summary"
+msgstr "Wyświetlanie podsumowania nagłówka pliku dźwiękowego"
 
-#. Translators: This option is for the previous 'search in' option. For
-#. * instance, translate this as "Search in:" "Country".
-#: ../src/cddb.c:526
-msgid "Country"
-msgstr "Country"
+#: ../data/preferences_dialog.ui.h:21
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:50
+msgid ""
+"Whether to show header information, such as bit rate and duration, for audio "
+"files"
+msgstr ""
+"Czy wyświetlać informacje w nagłówku, takie jak gęstość bitowa i czas trwania"
 
-#. Translators: This option is for the previous 'search in' option. For
-#. * instance, translate this as "Search in:" "Folk".
-#: ../src/cddb.c:529
-msgid "Folk"
-msgstr "Folk"
+#: ../data/preferences_dialog.ui.h:22
+msgid "Display changed files in list using:"
+msgstr "Wyświetlanie zmienionych plików na liście używając:"
 
-#. Translators: This option is for the previous 'search in' option. For
-#. * instance, translate this as "Search in:" "Jazz".
-#: ../src/cddb.c:532
-msgid "Jazz"
-msgstr "Jazz"
+#: ../data/preferences_dialog.ui.h:23
+msgid "Red color"
+msgstr "Koloru czerwonego"
 
-#. Translators: This option is for the previous 'search in' option. For
-#. * instance, translate this as "Search in:" "Misc".
-#: ../src/cddb.c:535
-msgid "Misc."
-msgstr "Różne"
+#: ../data/preferences_dialog.ui.h:24
+msgid "Bold style"
+msgstr "Pogrubienia"
 
-#. Translators: This option is for the previous 'search in' option. For
-#. * instance, translate this as "Search in:" "New age".
-#: ../src/cddb.c:538
-msgid "New Age"
-msgstr "New Age"
+#: ../data/preferences_dialog.ui.h:25
+msgid "Interface"
+msgstr "Interfejs"
 
-#. Translators: This option is for the previous 'search in' option. For
-#. * instance, translate this as "Search in:" "Reggae".
-#: ../src/cddb.c:541
-msgid "Reggae"
-msgstr "Reggae"
+#: ../data/preferences_dialog.ui.h:26
+msgid "File Settings"
+msgstr "Ustawienia plików"
 
-#. Translators: This option is for the previous 'search in' option. For
-#. * instance, translate this as "Search in:" "Rock".
-#: ../src/cddb.c:544
-msgid "Rock"
-msgstr "Rock"
+#: ../data/preferences_dialog.ui.h:27
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:45
+msgid "Preserve modification time when writing files"
+msgstr "Zachowywanie czasu modyfikacji podczas zapisywania plików"
 
-#. Translators: This option is for the previous 'search in' option. For
-#. * instance, translate this as "Search in:" "Soundtrack".
-#: ../src/cddb.c:547
-msgid "Soundtrack"
-msgstr "Ścieżka filmowa"
+#: ../data/preferences_dialog.ui.h:28
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:46
+msgid "Whether to preserve the existing modification time when editing files"
+msgstr ""
+"Czy zachowywać istniejący czas modyfikacji podczas modyfikowania plików"
 
-#: ../src/cddb.c:587
-msgid "included: funk, soul, rap, pop, industrial, metal, etc."
-msgstr "zawiera: funk, soul, rap, pop, industrial, metal itp."
+#: ../data/preferences_dialog.ui.h:29
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:47
+msgid "Update parent directory modification time when writing files"
+msgstr ""
+"Aktualizowanie czasu modyfikacji katalogu nadrzędnego podczas zapisywania "
+"plików"
 
-#: ../src/cddb.c:588
-msgid "movies, shows"
-msgstr "filmy, seriale"
+#: ../data/preferences_dialog.ui.h:30
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:48
+msgid ""
+"Whether to update the modification time on the parent directory when editing "
+"files"
+msgstr ""
+"Czy aktualizować czas modyfikacji katalogu nadrzędnego podczas modyfikowania "
+"plików"
 
-#: ../src/cddb.c:589
-msgid "others that do not fit in the above categories"
-msgstr "wszystkie pozostałe niewyszczególnione w powyższych kategoriach"
+#: ../data/preferences_dialog.ui.h:31
+msgid "Filenames"
+msgstr "Nazwy plików"
 
-#. Button to display/hide the categories
-#: ../src/cddb.c:592
-msgid "Categories"
-msgstr "Kategorie"
+#: ../data/preferences_dialog.ui.h:32
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:195
+msgid "Replace illegal characters when renaming"
+msgstr "Zamienianie niedozwolonych znaków podczas zmieniania nazw"
 
-#.
-#. * Results command
-#.
-#: ../src/cddb.c:600
-msgid "Results:"
-msgstr "Wyniki:"
+#: ../data/preferences_dialog.ui.h:33
+msgid ""
+"Convert characters which cannot be represented in filenames on the FAT32/16 "
+"and Joliet filesystems (‘\\’, ‘:’, ‘;’, ‘*’, ‘?’, ‘\"’, ‘<’, ‘>’, ‘|’)"
+msgstr ""
+"Zmienia znaki, które nie mogą znajdować się w nazwach plików w systemach "
+"plików FAT32/16 i Joliet (\"\\\", \":\", \";\", \"*\", \"?\", \"\"\", \"<\", "
+"\">\", \"|\")"
 
-#: ../src/cddb.c:606 ../src/misc.c:1951
-msgid "Search:"
-msgstr "Wyszukiwanie:"
+#: ../data/preferences_dialog.ui.h:34
+msgid "Convert filename extension to:"
+msgstr "Zmienianie rozszerzeń plików na:"
 
-#: ../src/cddb.c:620
-msgid "Enter the words to search in the list below"
-msgstr "Proszę podać wyrazy do wyszukiwania na liście poniżej"
+#: ../data/preferences_dialog.ui.h:35
+msgid "Lower Case"
+msgstr "Małe litery"
 
-#: ../src/cddb.c:632
-msgid "Search Next"
-msgstr "Wyszukaj następny"
+#: ../data/preferences_dialog.ui.h:36
+msgid "For example, the extension will be converted to ‘.mp3’"
+msgstr "Na przykład rozszerzenie pliku zostanie zmienione na \".mp3\""
 
-#: ../src/cddb.c:638
-msgid "Search Previous"
-msgstr "Wyszukaj poprzedni"
+#: ../data/preferences_dialog.ui.h:37
+msgid "Upper Case"
+msgstr "Wielkie litery"
 
-#: ../src/cddb.c:649
-msgid "Show only red lines (or show all lines) in the 'Artist / Album' list"
-msgstr ""
-"Wyświetlanie tylko czerwonych (lub wszystkich) wierszy na liście "
-"\"Wykonawca / Album\""
+#: ../data/preferences_dialog.ui.h:38
+msgid "For example, the extension will be converted to ‘.MP3’"
+msgstr "Na przykład rozszerzenie pliku zostanie zmienione na \".MP3\""
 
-#: ../src/cddb.c:655
-msgid "Unselect all lines"
-msgstr "Odznacz wszystkie wiersze"
+#: ../data/preferences_dialog.ui.h:39
+msgid "No Change"
+msgstr "Bez zmieniania"
 
-#: ../src/cddb.c:661
-msgid "Invert lines selection"
-msgstr "Odwróć zaznaczenie wierszy"
+#: ../data/preferences_dialog.ui.h:40
+msgid "The extension will not be modified"
+msgstr "Rozszerzenie nie zostanie zmodyfikowane"
 
-#: ../src/cddb.c:670
-msgid "Select all lines"
-msgstr "Zaznacz wszystkie wiersze"
+#: ../data/preferences_dialog.ui.h:41
+msgid "Filename Encoding"
+msgstr "Kodowanie nazw plików"
 
-#: ../src/cddb.c:788
+#: ../data/preferences_dialog.ui.h:42
+msgid "Try another character encoding"
+msgstr "Próbowanie innego kodowania znaków"
+
+#: ../data/preferences_dialog.ui.h:43
 msgid ""
-"Select lines to 'apply' to your files list. All lines will be processed if "
-"no line is selected.\n"
-"You can also reorder lines in this list before using 'apply' button."
+"Try to use the encoding associated with your locale and if this fails, try "
+"the ISO-8859-1 character encoding"
 msgstr ""
-"Należy zaznaczyć wiersze do \"zastosowania\" na liście plików. Wszystkie "
-"wiersze zostaną przetworzone, jeśli żadny nie jest zaznaczony.\n"
-"Można zmienić kolejność wierszy na tej liście przed użyciem przycisku "
-"\"Zastosuj\"."
+"Próbowanie kodowania powiązanego z lokalizacją i jeśli się nie powiedzie, "
+"próbuje kodowania znaków ISO-8859-1"
 
-#.
-#. * Apply results to fields...
-#.
-#: ../src/cddb.c:795
-msgid "Set Into:"
-msgstr "Ustawienie w:"
+#: ../data/preferences_dialog.ui.h:44
+msgid "Transliterate characters into the system character encoding"
+msgstr "Transliteracja znaków na systemowe kodowanie znaków"
 
-#: ../src/cddb.c:801
-msgid "All"
-msgstr "Wszystko"
+#: ../data/preferences_dialog.ui.h:45
+msgid ""
+"Replace unsupported characters with a similar character from the target "
+"character encoding"
+msgstr ""
+"Zastępowanie nieobsługiwanych znaków podobnymi znakami z docelowego "
+"kodowania znaków"
 
-#: ../src/cddb.c:808
-msgid "Track #"
-msgstr "# Ścieżki"
+#: ../data/preferences_dialog.ui.h:46
+msgid ""
+"Use the system character encoding and silently discard unsupported characters"
+msgstr ""
+"Używanie systemowego kodowania znaków i odrzucanie nieobsługiwanych znaków"
 
-#: ../src/cddb.c:809
-msgid "# Tracks"
-msgstr "# Ścieżek"
+#: ../data/preferences_dialog.ui.h:47
+msgid ""
+"Discard characters which cannot be represented in the target character "
+"encoding"
+msgstr ""
+"Odrzucanie znaków niemogących być wyświetlanych w docelowym kodowaniu znaków"
 
-#. Check box to run the scanner
-#: ../src/cddb.c:847 ../src/misc.c:2992
-msgid "Run the current scanner for each file"
-msgstr "Wykonanie bieżącego skanera dla każdego pliku"
+#: ../data/preferences_dialog.ui.h:48
+msgid "Files"
+msgstr "Pliki"
 
-#. Check box to use DLM (also used in the preferences window)
-#: ../src/cddb.c:854
-msgid "Match lines with the Levenshtein algorithm"
-msgstr "Dopasowanie wierszy według algorytmu Levenshteina"
+#: ../data/preferences_dialog.ui.h:49
+msgid "Automatically complete date field"
+msgstr "Automatyczne uzupełnianie pola daty"
 
-#. Doesn't activate it by default because if the new user don't pay attention to it,
-#. it will not understand why the cddb results aren't loaded correctly...
-#. gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbUseDLM2),CDDB_USE_DLM);
-#: ../src/cddb.c:859 ../src/prefs.c:1363
-msgid ""
-"When activating this option, the Levenshtein algorithm (DLM: Damerau-"
-"Levenshtein Metric) will be used to match the CDDB title against every "
-"filename in the current folder, and to select the best match. This will be "
-"used when selecting the corresponding audio file, or applying CDDB results, "
-"instead of using directly the position order."
-msgstr ""
-"Po aktywowaniu tej opcji, algorytm Levenshteina (DLM: odległość Damerau-"
-"Levenshteina) będzie używany do dopasowania tytułu w CDDB do każdego pliku w "
-"bieżącym katalogu i do wybrania najlepiej pasującego. Zostanie to użyte przy "
-"zaznaczaniu odpowiedniego pliku dźwiękowego lub zatwierdzaniu wyników CDDB, "
-"zamiast używania kolejności pozycji."
-
-#: ../src/cddb.c:871
-msgid "Load the selected lines or all lines (if no line selected)."
-msgstr ""
-"Wczytywanie wybranych wierszy lub wszystkich wierszy (jeśli żadnego nie "
-"zaznaczono)."
+#: ../data/preferences_dialog.ui.h:50
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:94
+msgid "Whether to automatically complete the date tag"
+msgstr "Czy automatycznie uzupełniać pole daty"
 
-#: ../src/cddb.c:881
-msgid "Ready to search"
-msgstr "Gotowe do wyszukiwania"
+#: ../data/preferences_dialog.ui.h:51
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:99
+msgid "Automatically select the type of the image based on its filename"
+msgstr "Automatyczne wybieranie typu obrazu na podstawie nazwy pliku"
 
-#: ../src/cddb.c:1352
-#, c-format
+#: ../data/preferences_dialog.ui.h:52
 msgid ""
-"Album: '%s', artist: '%s', length: '%s', year: '%s', genre: '%s', ID: '%s'"
+"Whether to, when adding cover art, automatically select a type for an image "
+"based on its filename"
 msgstr ""
-"Album \"%s\", wykonawca: \"%s\", długość: \"%s\", rok: \"%s\", gatunek: \"%s"
-"\", identyfikator: \"%s\""
+"Czy podczas dodawania okładki automatycznie wybierać typ obrazu na podstawie "
+"nazwy pliku"
+
+#: ../data/preferences_dialog.ui.h:53
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:105
+msgid "Preserve the tag field focus"
+msgstr "Zachowywanie aktywności pola etykiety"
+
+#: ../data/preferences_dialog.ui.h:54
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:106
+msgid "Whether to preserve focus on the current tag field when switching file"
+msgstr "Czy zachowywać aktywność pola etykiety po przełączeniu pliku"
+
+#: ../data/preferences_dialog.ui.h:55
+msgid "Pad the number of digits in the disc field to:"
+msgstr "Uzupełnianie cyfr w polu płyty do:"
+
+#: ../data/preferences_dialog.ui.h:56
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:96
+msgid "Whether the disc number tag field should be padded with leading zeroes"
+msgstr "Czy umieszczać zera przed numerem płyty"
 
-#: ../src/cddb.c:1588
-#, c-format
-msgid "Resolving host '%s'…"
-msgstr "Wyszukiwanie serwera \"%s\"…"
+#: ../data/preferences_dialog.ui.h:57
+msgid "Pad the number of digits in the track field to:"
+msgstr "Uzupełnianie cyfr w polu ścieżki do:"
 
-#: ../src/cddb.c:1629
-#, c-format
-msgid "Cannot create a new socket (%s)"
-msgstr "Nie można utworzyć nowego gniazda (%s)"
+#: ../data/preferences_dialog.ui.h:58
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:102
+msgid "Whether the track number tag field should be padded with leading zeroes"
+msgstr "Czy umieszczać zera przed numerem ścieżki"
 
-#: ../src/cddb.c:1643
-msgid "Cannot set options on the newly-created socket"
-msgstr "Nie można ustawić opcji na nowo utworzonym gnieździe"
+#: ../data/preferences_dialog.ui.h:59
+msgid "Splitting"
+msgstr "Rozdzielanie"
 
-#. Open connection to the server.
-#: ../src/cddb.c:1647
-#, c-format
-msgid "Connecting to host '%s', port '%d'…"
-msgstr "Łączenie z serwerem \"%s\", port \"%d\"…"
+#: ../data/preferences_dialog.ui.h:60
+msgid ""
+"For Vorbis tags, selected fields will be split at dashes and saved as "
+"separate tags"
+msgstr ""
+"W przypadku etykiet plików Vorbis, wybrane pola zostaną rozdzielone "
+"myślnikami i zapisane jako oddzielne etykiety"
 
-#: ../src/cddb.c:1660
-#, c-format
-msgid "Cannot connect to host '%s' (%s)"
-msgstr "Nie można połączyć z serwerem \"%s\" (%s)"
+#: ../data/preferences_dialog.ui.h:62
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:206
+msgid "Whether to split title fields at a “ - ” separator in Ogg comments"
+msgstr "Czy rozdzielać pola tytułu na separatorze \" - \" w komentarzach Ogg"
 
-#: ../src/cddb.c:1684
-#, c-format
-msgid "Cannot resolve host '%s' (%s)"
-msgstr "Nie można odnaleźć serwera \"%s\" (%s)"
+#: ../data/preferences_dialog.ui.h:64
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:208
+msgid "Whether to split artist fields at a “ - ” separator in Ogg comments"
+msgstr ""
+"Czy rozdzielać pola wykonawcy na separatorze \" - \" w komentarzach Ogg"
 
-#: ../src/cddb.c:1697
-#, c-format
-msgid "Connected to host '%s'"
-msgstr "Połączono z serwerem \"%s\""
+#: ../data/preferences_dialog.ui.h:66
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:210
+msgid "Whether to split album fields at a “ - ” separator in Ogg comments"
+msgstr "Czy rozdzielać pola abumu na separatorze \" - \" w komentarzach Ogg"
 
-#: ../src/cddb.c:1778
-#, c-format
-msgid "Error while writing CDDB results to file '%s'"
-msgstr "Błąd podczas zapisywania wyników CDDB do pliku \"%s\""
+#: ../data/preferences_dialog.ui.h:68
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:212
+msgid "Whether to split genre fields at a “ - ” separator in Ogg comments"
+msgstr "Czy rozdzielać pola gatunku na separatorze \" - \" w komentarzach Ogg"
 
-#: ../src/cddb.c:1789
-#, c-format
-msgid "Receiving data (%s)…"
-msgstr "Pobieranie danych (%s)…"
+#: ../data/preferences_dialog.ui.h:70
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:214
+msgid "Whether to split comment fields at a “ - ” separator in Ogg comments"
+msgstr ""
+"Czy rozdzielać pola komentarza na separatorze \" - \" w komentarzach Ogg"
 
-#: ../src/cddb.c:1801
-#, c-format
-msgid "Error when reading CDDB response (%s)"
-msgstr "BÅ‚Ä…d podczas odczytywania odpowiedzi CDDB (%s)"
+#: ../data/preferences_dialog.ui.h:72
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:216
+msgid "Whether to split composer fields at a “ - ” separator in Ogg comments"
+msgstr ""
+"Czy rozdzielać pola kompozytora na separatorze \" - \" w komentarzach Ogg"
 
-#: ../src/cddb.c:1808
-#, c-format
-msgid "Cannot create file '%s' (%s)"
-msgstr "Nie można utworzyć pliku \"%s\" (%s)"
+#: ../data/preferences_dialog.ui.h:73
+msgid "Original artist"
+msgstr "Pierwotny wykonawca"
 
-#: ../src/cddb.c:1849 ../src/setting.c:1256
-#, c-format
-msgid "Cannot open file '%s' (%s)"
-msgstr "Nie można otworzyć pliku \"%s\" (%s)"
+#: ../data/preferences_dialog.ui.h:74
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:218
+msgid ""
+"Whether to split original artist fields at a “ - ” separator in Ogg comments"
+msgstr ""
+"Czy rozdzielać pola pierwotnego wykonawcy na separatorze \" - \" w "
+"komentarzach Ogg"
 
-#. g_print("Request Cddb_Search_Album_List_From_String_Freedb : '%s'\n", cddb_in);
-#. Send the request
-#. g_print("Request Cddb_Search_Album_List_From_String_Gnudb : '%s'\n", cddb_in);
-#. Send the request
-#. g_print("Request Cddb_Get_Album_Tracks_List : '%s'\n", cddb_in);
-#. Send the request
-#: ../src/cddb.c:2362 ../src/cddb.c:2693 ../src/cddb.c:3568
-msgid "Sending request…"
-msgstr "Wysyłanie żądania…"
+#: ../data/preferences_dialog.ui.h:75
+msgid "Tags"
+msgstr "Etykiety"
 
-#: ../src/cddb.c:2366 ../src/cddb.c:2697 ../src/cddb.c:3267 ../src/cddb.c:3572
-#, c-format
-msgid "Cannot send the request (%s)"
-msgstr "Nie można wysłać żądania (%s)"
+#: ../data/preferences_dialog.ui.h:76
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:63
+msgid "Strip ID3 tags if all ID3 tags are empty"
+msgstr "Usuwanie etykiet ID3, jeśli wszystkie są puste"
 
-#.
-#. * Read the answer
-#.
-#. Read the answer
-#: ../src/cddb.c:2393 ../src/cddb.c:3281 ../src/cddb.c:3581
-msgid "Receiving data…"
-msgstr "Pobieranie danych…"
+#: ../data/preferences_dialog.ui.h:77
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:64
+msgid ""
+"Whether to remove the ID3 tag from the audio file if all the individual tag "
+"fields are empty"
+msgstr ""
+"Czy usuwać etykiety ID3 z pliku dźwiękowego, jeśli wszystkie poszczególne "
+"pola etykiet zostały usunięte"
 
-#: ../src/cddb.c:2400 ../src/cddb.c:2726 ../src/cddb.c:3288 ../src/cddb.c:3588
-msgid "The server returned a bad response"
-msgstr "Serwer zwrócił błędną odpowiedź"
+#: ../data/preferences_dialog.ui.h:78
+msgid "Non-standard encoding for reading ID3 tags:"
+msgstr "Niestandardowe kodowanie do odczytywania etykiet ID3:"
 
-#: ../src/cddb.c:2414 ../src/cddb.c:2742 ../src/cddb.c:3303 ../src/cddb.c:3605
-#: ../src/cddb.c:3620
-#, c-format
-msgid "The server returned a bad response: %s"
-msgstr "Serwer zwrócił błędną odpowiedź: %s"
+#: ../data/preferences_dialog.ui.h:79
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:62
+msgid "Whether to use a non-standard character encoding when reading ID3 tags"
+msgstr ""
+"Czy używać niestandardowego kodowania znaków do odczytywania etykiet ID3"
 
-#: ../src/cddb.c:2561
-#, c-format
-msgid "Sorry, the web-based search is currently not available"
-msgstr "Wyszukiwanie w sieci obecnie nie jest dostępne"
+#: ../data/preferences_dialog.ui.h:80
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:72
+msgid "Choose the character set to be used when reading ID3v1 and ID3v2 tags"
+msgstr "Wybór zestawu znaków do odczytywania etykiet ID3v1 i ID3v2"
 
-#: ../src/cddb.c:2563 ../src/cddb.c:2913
-#, c-format
-msgid "Found one matching album"
-msgid_plural "Found %d matching albums"
-msgstr[0] "Odnaleziono jeden pasujÄ…cy album"
-msgstr[1] "Odnaleziono %d pasujÄ…ce albumy"
-msgstr[2] "Odnaleziono %d pasujących albumów"
+#: ../data/preferences_dialog.ui.h:81
+msgid "ID3v2"
+msgstr "ID3v2"
 
-#: ../src/cddb.c:2714
-#, c-format
-msgid "Receiving data of page %d (album %d/%d)…"
-msgstr "Pobieranie danych ze strony %d (album %d/%d)…"
+#: ../data/preferences_dialog.ui.h:82
+msgid "Write ID3v2 tag"
+msgstr "Zapisywanie etykiet ID3v2"
 
-#: ../src/cddb.c:2716
-#, c-format
-msgid "Receiving data of page %d…"
-msgstr "Pobieranie danych ze strony %d…"
+#: ../data/preferences_dialog.ui.h:83
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:74
+msgid "Whether to write ID3v2 tags when writing ID3 tags into audio files"
+msgstr ""
+"Czy zapisywać etykiety ID3v2 podczas zapisywania etykiet ID3 w plikach "
+"dźwiękowych"
 
-#: ../src/cddb.c:2880
-#, c-format
-msgid "More results to load…"
-msgstr "Więcej wyników do wczytania…"
+#: ../data/preferences_dialog.ui.h:84
+msgid "Version:"
+msgstr "Wersja:"
 
-#: ../src/cddb.c:3009
-#, c-format
-msgid "No file selected"
-msgstr "Nie zaznaczono pliku"
+#: ../data/preferences_dialog.ui.h:85
+msgid ""
+"Select the ID3v2 tag version to write:\n"
+" • ID3v2.3 is written using id3lib,\n"
+" • ID3v2.4 is written using libid3tag (recommended)"
+msgstr ""
+"Proszę wybrać wersję etykiet ID3v2 do zapisywania:\n"
+" • ID3v2.3 jest zapisywane używając biblioteki id3lib,\n"
+" • ID3v2.4 jest zapisywane używając biblioteki libid3tag (zalecane)"
 
-#. The CD redbook standard defines the maximum number of tracks as 99, any
-#. queries with more than 99 tracks will never return a result.
-#: ../src/cddb.c:3017
-#, c-format
-msgid "More than 99 files selected. Cannot send request"
-msgstr "Zaznaczono więcej niż 99 plików. Nie można wysłać żądania"
+#: ../data/preferences_dialog.ui.h:88
+msgid "Character encoding:"
+msgstr "Kodowanie znaków:"
 
-#: ../src/cddb.c:3023
-#, c-format
-msgid "One file selected"
-msgid_plural "%d files selected"
-msgstr[0] "Zaznaczono jeden plik"
-msgstr[1] "Zaznaczono %d pliki"
-msgstr[2] "Zaznaczono %d plików"
+#: ../data/preferences_dialog.ui.h:89
+msgid "Unicode"
+msgstr "Unicode"
 
-#: ../src/cddb.c:3107
-msgid "The path for 'Local CD Database' was not defined"
-msgstr "Nie podano ścieżki do \"Lokalnej bazy danych CD\""
+#: ../data/preferences_dialog.ui.h:90
+msgid ""
+"Choose the Unicode character encoding to be used when writing ID3v2 tags"
+msgstr "Wybór kodowania znaków Unicode do zapisywania etykiet ID3v2"
 
-#. Translators: 'it' in this sentence refers to the local CD
-#. * database path.
-#: ../src/cddb.c:3110
-msgid "Enter it in the preferences window before using this search."
-msgstr "Proszę wprowadzić ją w oknie preferencji przed użyciem wyszukiwania."
+#: ../data/preferences_dialog.ui.h:92
+msgid ""
+"Override the standard Unicode character encoding to be used when writing "
+"ID3v2 tags"
+msgstr ""
+"Zastępowanie standardowego kodowania znaków Unicode podczas zapisywania "
+"etykiet ID3v2"
 
-#: ../src/cddb.c:3112
-msgid "Local CD search"
-msgstr "Wyszukiwanie lokalnej bazy CD"
+#: ../data/preferences_dialog.ui.h:93
+msgid "When encoding conversion fails:"
+msgstr "Kiedy konwersja kodowania siÄ™ nie powiedzie:"
 
-#. g_print("Request Cddb_Search_Album_From_Selected_Files : '%s'\n", cddb_in);
-#: ../src/cddb.c:3257
-#, c-format
-msgid "Sending request (CddbId: %s, #tracks: %d, Disc length: %d)…"
-msgstr "Wysyłanie żądania (CddbId: %s, # ścieżki: %d, długość płyty: %d)…"
+#: ../data/preferences_dialog.ui.h:94
+msgid "Report error"
+msgstr "Zgłaszanie błędu"
 
-#: ../src/cddb.c:3414
-#, c-format
-msgid "DiscID '%s' gave one matching album"
-msgid_plural "DiscID '%s' gave %d matching albums"
-msgstr[0] "DiscID \"%s\" zwróciło jeden pasujący album"
-msgstr[1] "DiscID \"%s\" zwróciło %d pasujące albumy"
-msgstr[2] "DiscID \"%s\" zwróciło %d pasujących albumów"
+#: ../data/preferences_dialog.ui.h:95
+msgid ""
+"Display an error message when a character cannot be represented in the "
+"target character encoding and keep the original character"
+msgstr ""
+"Wyświetlanie komunikatu błędu, kiedy znak nie może być wyświetlany w "
+"docelowym kodowaniu znaków i pozostawienie pierwotnego znaku"
 
-#: ../src/cddb.c:3512
-#, c-format
-msgid "Can't load file: '%s' (%s)."
-msgstr "Nie można wczytać pliku: \"%s\" (%s)."
+#: ../data/preferences_dialog.ui.h:96
+msgid "Transliterate"
+msgstr "Transliteracja"
 
-#. Load the track list of the album
-#: ../src/cddb.c:3811
-msgid "Loading album track list…"
-msgstr "Wczytywanie listy ścieżek albumu…"
+#: ../data/preferences_dialog.ui.h:97
+msgid "Discard"
+msgstr "Odrzuć"
 
-#: ../src/cddb.c:4010
-msgid "The number of CDDB results does not match the number of selected files"
-msgstr "Liczba wyników CDDB nie pasuje do liczby zaznaczonych plików"
+#: ../data/preferences_dialog.ui.h:98
+msgid "Automatically convert old ID3v2 tag versions"
+msgstr "Automatyczne aktualizowanie poprzednich wersji etykiet ID3v2"
 
-#: ../src/cddb.c:4014
-msgid "Write Tag from CDDB"
-msgstr "Zapisz etykiety z CDDB"
+#: ../data/preferences_dialog.ui.h:99
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:78
+msgid ""
+"Whether to convert ID3 tags written against old version of the "
+"specification, such as ID3v2.2, to newer ones, such as ID3v2.3 or ID3v2.4"
+msgstr ""
+"Czy aktualizować etykiety ID3 zapisane w poprzedniej wersji specyfikacji, "
+"takiej jak ID3v2.2, do nowszej, takiej jak ID3v2.3 lub ID3v2.4"
 
-#: ../src/charset.c:47
-msgid "Arabic (IBM-864)"
-msgstr "arabskie (IBM-864)"
+#: ../data/preferences_dialog.ui.h:100
+msgid "Use CRC-32"
+msgstr "Używanie CRC-32"
 
-#: ../src/charset.c:48
-msgid "Arabic (ISO-8859-6)"
-msgstr "arabskie (ISO-8859-6)"
+#: ../data/preferences_dialog.ui.h:101
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:82
+msgid "Whether to embed a CRC-32 checksum of the audio file data in ID3v2 tags"
+msgstr ""
+"Czy osadzać sumę kontrolną CRC-32 danych pliku dźwiękowego w etykietach ID3v2"
 
-#: ../src/charset.c:49
-msgid "Arabic (Windows-1256)"
-msgstr "arabskie (Windows-1256)"
+#: ../data/preferences_dialog.ui.h:102
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:79
+msgid "Compress data in ID3v2 tags"
+msgstr "Kompresja danych w etykietach ID3v2"
 
-#: ../src/charset.c:50
-msgid "Baltic (ISO-8859-13)"
-msgstr "bałtyckie (ISO-8859-13)"
+#: ../data/preferences_dialog.ui.h:103
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:80
+msgid "Whether to compress data in ID3v2 tags"
+msgstr "Czy kompresować dane w etykietach ID3v2"
 
-#: ../src/charset.c:51
-msgid "Baltic (ISO-8859-4)"
-msgstr "bałtyckie (ISO-8859-4)"
+#: ../data/preferences_dialog.ui.h:104
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:83
+msgid "Use text-only genre in ID3v2 tags"
+msgstr "Używanie tekstowych gatunków w etykietach ID3v2"
 
-#: ../src/charset.c:52
-msgid "Baltic (Windows-1257)"
-msgstr "bałtyckie (Windows-1257)"
+#: ../data/preferences_dialog.ui.h:105
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:84
+msgid ""
+"Whether to use only a string, and not the integer-base ID3v1 genre field, "
+"when writing a genre field to ID3v2 tags"
+msgstr ""
+"Czy używać tylko ciągu, a nie liczbowego pola gatunku ID3v1 podczas "
+"zapisywania pola gatunku w etykietach ID3v2"
 
-#: ../src/charset.c:53
-msgid "Celtic (ISO-8859-14)"
-msgstr "celtyckie (ISO-8859-14)"
+#: ../data/preferences_dialog.ui.h:106
+msgid "ID3v1"
+msgstr "ID3v1"
 
-#: ../src/charset.c:54
-msgid "Central European (IBM-852)"
-msgstr "środkowoeuropejskie (IBM-852)"
+#: ../data/preferences_dialog.ui.h:107
+msgid "Write ID3v1 tag"
+msgstr "Zapisywanie etykiet ID3v1"
 
-#: ../src/charset.c:55
-msgid "Central European (ISO-8859-2)"
-msgstr "środkowoeuropejskie (ISO-8859-2)"
+#: ../data/preferences_dialog.ui.h:108
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:66
+msgid "Whether to write ID3v1 tags when writing ID3 tags into audio files"
+msgstr ""
+"Czy zapisywać etykiety ID3v1 podczas zapisywania etykiet ID3 w plikach "
+"dźwiękowych"
 
-#: ../src/charset.c:56
-msgid "Central European (Windows-1250)"
-msgstr "środkowoeuropejskie (Windows-1250)"
+#: ../data/preferences_dialog.ui.h:109
+msgid "Choose the character set to be used when writing ID3v1 tag"
+msgstr "Wybór zestawu znaków do zapisywania etykiet ID3v1"
 
-#: ../src/charset.c:57
-msgid "Chinese Simplified (GB18030)"
-msgstr "chińskie uproszczone (GB18030)"
+#: ../data/preferences_dialog.ui.h:110
+msgid "ID3 Tags"
+msgstr "Etykiety ID3"
 
-#: ../src/charset.c:58
-msgid "Chinese Simplified (GB2312)"
-msgstr "chińskie uproszczone (GB2312)"
+#: ../data/preferences_dialog.ui.h:111
+msgid "Character Conversion"
+msgstr "Konwersja znaków"
 
-#: ../src/charset.c:59
-msgid "Chinese Traditional (Big5)"
-msgstr "chińskie tradycyjne (Big5)"
+#: ../data/preferences_dialog.ui.h:112
+msgid "Fill Tag Scanner"
+msgstr "Skaner wypełniania etykiet"
 
-#: ../src/charset.c:60
-msgid "Chinese Traditional (Big5-HKSCS)"
-msgstr "chińskie tradycyjne (Big5-HKSCS)"
+#: ../data/preferences_dialog.ui.h:114
+#, no-c-format
+msgid "Convert underscores and ‘%20’ to spaces"
+msgstr "Zmienianie \"_\" i \"%20\" na spacje"
 
-#: ../src/charset.c:61
-msgid "Cyrillic (IBM-855)"
-msgstr "cyrylica (IBM-855)"
+#: ../data/preferences_dialog.ui.h:116
+#, no-c-format
+msgid "Convert spaces and ‘%20’ to underscores"
+msgstr "Zmienianie spacji i \"%20\" na \"_\""
 
-#: ../src/charset.c:62
-msgid "Cyrillic (ISO-8859-5)"
-msgstr "cyrylica (ISO-8859-5)"
+#: ../data/preferences_dialog.ui.h:117
+msgid "No conversion"
+msgstr "Bez zmieniania"
 
-#: ../src/charset.c:63
-msgid "Cyrillic (ISO-IR-111)"
-msgstr "cyrylica (ISO-IR-111)"
+#: ../data/preferences_dialog.ui.h:118
+msgid "Rename File and Directory Scanner"
+msgstr "Skaner zmiany nazw plików i katalogów"
 
-#: ../src/charset.c:64
-msgid "Cyrillic (KOI8-R)"
-msgstr "cyrylica (KOI8-R)"
+#: ../data/preferences_dialog.ui.h:119
+msgid "Process Fields Scanner"
+msgstr "Skaner przetwarzania pól"
 
-#: ../src/charset.c:65
-msgid "Cyrillic (Windows-1251)"
-msgstr "cyrylica (Windows-1251)"
+#: ../data/preferences_dialog.ui.h:120
+msgid "Upper-case the first letters of all words"
+msgstr "Wielka pierwsza litera każdego słowa"
 
-#: ../src/charset.c:66
-msgid "Cyrillic/Russian (CP-866)"
-msgstr "cyrylica/rosyjskie (CP-866)"
+#: ../data/preferences_dialog.ui.h:121
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:150
+msgid ""
+"Whether to upper-case the first letter of all words, including prepositions "
+"and other short words such as “feat.”, when processing tag fields"
+msgstr ""
+"Czy podczas przetwarzania pól etykiet zmieniać pierwszą literę wszystkich "
+"słów na wielką, w tym przyimków i innych krótkich słów, takich jak \"feat.\""
 
-#: ../src/charset.c:67
-msgid "Cyrillic/Ukrainian (KOI8-U)"
-msgstr "cyrylica/ukraińskie (KOI8-U)"
+#: ../data/preferences_dialog.ui.h:122
+msgid "Fields"
+msgstr "Pola"
 
-#: ../src/charset.c:68
-msgid "English (US-ASCII)"
-msgstr "angielskie (US-ASCII)"
+#: ../data/preferences_dialog.ui.h:123
+msgid "Overwrite fields when scanning tags"
+msgstr "Zastępowanie pól podczas skanowania etykiet"
 
-#: ../src/charset.c:69
-msgid "Greek (ISO-8859-7)"
-msgstr "greckie (ISO-8859-7)"
+#: ../data/preferences_dialog.ui.h:124
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:111
+msgid ""
+"Whether to overwrite the tag field values when filling tags. Otherwise, only "
+"blank tag fields will be filled"
+msgstr ""
+"Czy zastępować wartości pól etykiet podczas wypełniania etykiet. W "
+"przeciwnym przypadku tylko puste pola będę wypełniane"
 
-#: ../src/charset.c:70
-msgid "Greek (Windows-1253)"
-msgstr "greckie (Windows-1253)"
+#: ../data/preferences_dialog.ui.h:125
+msgid "Set this text as default comment:"
+msgstr "Ustawianie tego tekstu jako domyślny komentarz:"
 
-#: ../src/charset.c:71
-msgid "Hebrew (IBM-862)"
-msgstr "hebrajskie (IBM-862)"
+#: ../data/preferences_dialog.ui.h:126
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:113
+msgid ""
+"Whether to set the comment tag field to the provided default value when "
+"filling tags"
+msgstr ""
+"Czy ustawiać pole etykiety komentarza podaną domyślną wartością podczas "
+"wypełniania etykiet"
 
-#: ../src/charset.c:72
-msgid "Hebrew (Windows-1255)"
-msgstr "hebrajskie (Windows-1255)"
+#: ../data/preferences_dialog.ui.h:127
+msgid "Use CRC-32 as the default comment (for files with ID3 tags only)"
+msgstr "Ustawianie sumy CRC-32 pliku jako domyślny komentarz (tylko ID3)"
 
-#: ../src/charset.c:73
-msgid "Japanese (EUC-JP)"
-msgstr "japońskie (EUC-JP)"
+#: ../data/preferences_dialog.ui.h:128
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:117
+msgid ""
+"Whether to use the CRC-32 of the audio file data as the default comment, for "
+"files with ID3 tags only"
+msgstr ""
+"Czy używać sumy CRC-32 pliku dźwiękowego jako domyślny komentarz (tylko ID3)"
 
-#: ../src/charset.c:74
-msgid "Japanese (ISO-2022-JP)"
-msgstr "japońskie (ISO-2022-JP)"
+#: ../data/preferences_dialog.ui.h:129
+msgid "Scanner"
+msgstr "Skaner"
 
-#: ../src/charset.c:75
-msgid "Japanese (Shift_JIS)"
-msgstr "japońskie (Shift_JIS)"
+#: ../data/preferences_dialog.ui.h:130
+msgid "Automatic Search Servers"
+msgstr "Serwer automatycznego wyszukiwania"
 
-#: ../src/charset.c:76
-msgid "Korean (EUC-KR)"
-msgstr "koreańskie (EUC-KR)"
+#: ../data/preferences_dialog.ui.h:131
+msgid "Host:"
+msgstr "Serwer:"
 
-#: ../src/charset.c:77
-msgid "Nordic (ISO-8859-10)"
-msgstr "nordyckie (ISO-8859-10)"
+#: ../data/preferences_dialog.ui.h:132
+msgid "Port:"
+msgstr "Port:"
 
-#: ../src/charset.c:78
-msgid "South European (ISO-8859-3)"
-msgstr "południowoeuropejskie (ISO-8859-3)"
+#: ../data/preferences_dialog.ui.h:133
+msgid "CGI Path:"
+msgstr "Ścieżka CGI:"
 
-#: ../src/charset.c:79
-msgid "Thai (TIS-620)"
-msgstr "tajskie (TIS-620)"
+#: ../data/preferences_dialog.ui.h:134
+msgid "Manual Search Server"
+msgstr "Serwer ręcznego wyszukiwania"
 
-#: ../src/charset.c:80
-msgid "Turkish (IBM-857)"
-msgstr "tureckie (IBM-857)"
+#: ../data/preferences_dialog.ui.h:135
+msgid "Proxy"
+msgstr "Pośrednik"
 
-#: ../src/charset.c:81
-msgid "Turkish (ISO-8859-9)"
-msgstr "tureckie (ISO-8859-9)"
+#: ../data/preferences_dialog.ui.h:136
+msgid "Use a proxy server"
+msgstr "Używanie pośrednika"
 
-#: ../src/charset.c:82
-msgid "Turkish (Windows-1254)"
-msgstr "tureckie (Windows-1254)"
+#: ../data/preferences_dialog.ui.h:137
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:28
+msgid "Whether to access remote CDDB through a proxy"
+msgstr "Czy używać zdalnego serwera CDDB przez pośrednika"
 
-#. {N_("Unicode (UTF-7)"),                   "UTF-7"         },
-#: ../src/charset.c:84
-msgid "Unicode (UTF-8)"
-msgstr "unikod (UTF-8)"
-
-#. {N_("Unicode (UTF-16BE)"),                "UTF-16BE"      },
-#. {N_("Unicode (UTF-16LE)"),                "UTF-16LE"      },
-#. {N_("Unicode (UTF-32BE)"),                "UTF-32BE"      },
-#. {N_("Unicode (UTF-32LE)"),                "UTF-32LE"      },
-#: ../src/charset.c:91
-msgid "Vietnamese (VISCII)"
-msgstr "wietnamskie (VISCII)"
+#: ../data/preferences_dialog.ui.h:138
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:30
+msgid "Hostname for a proxy to access remote CDDB"
+msgstr "Nazwa serwera dla pośrednika do zdalnego serwera CDDB"
 
-#: ../src/charset.c:92
-msgid "Vietnamese (Windows-1258)"
-msgstr "wietnamskie (Windows-1258)"
+#: ../data/preferences_dialog.ui.h:139
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:32
+msgid "Port for a proxy to access remote CDDB"
+msgstr "Port pośrednika do zdalnego serwera CDDB"
 
-#: ../src/charset.c:93
-msgid "Visual Hebrew (ISO-8859-8)"
-msgstr "hebrajskie wizualne (ISO-8859-8)"
+#: ../data/preferences_dialog.ui.h:140
+msgid "User:"
+msgstr "Użytkownik:"
 
-#: ../src/charset.c:94
-msgid "Western (IBM-850)"
-msgstr "zachodnie (IBM-850)"
+#: ../data/preferences_dialog.ui.h:141
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:34
+msgid "Username for a proxy to access remote CDDB"
+msgstr "Nazwa użytkownika pośrednika do zdalnego serwera CDDB"
 
-#: ../src/charset.c:95
-msgid "Western (ISO-8859-1)"
-msgstr "zachodnie (ISO-8859-1)"
+#: ../data/preferences_dialog.ui.h:142
+msgid "Password:"
+msgstr "Hasło:"
 
-#: ../src/charset.c:96
-msgid "Western (ISO-8859-15)"
-msgstr "zachodnie (ISO-8859-15)"
+#: ../data/preferences_dialog.ui.h:143
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:36
+msgid "Password for a proxy to access remote CDDB"
+msgstr "Hasło pośrednika do zdalnego serwera CDDB"
 
-#: ../src/charset.c:97
-msgid "Western (Windows-1252)"
-msgstr "zachodnie (Windows-1252)"
+#: ../data/preferences_dialog.ui.h:144
+msgid "Results List"
+msgstr "Lista wyników"
 
-#: ../src/charset.c:511
-#, c-format
-msgid "The filename '%s' couldn't be converted into UTF-8 (%s)."
-msgstr "Plik \"%s\" nie może zostać przekonwertowany na UTF-8 (%s)."
+#: ../data/preferences_dialog.ui.h:145
+msgid ""
+"Select corresponding file (according to position or DLM if activated below)"
+msgstr ""
+"Wybieranie odpowiedniego pliku (odnośnie pozycji lub DLM, jeśli włączono "
+"poniżej)"
 
-#: ../src/charset.c:512 ../src/charset.c:611 ../src/charset.c:674
-msgid "Invalid UTF-8"
-msgstr "Nieprawidłowe UTF-8"
+#: ../data/preferences_dialog.ui.h:146
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:26
+msgid ""
+"Whether to select the file in the file list which matches the position in "
+"the CDDB results list"
+msgstr ""
+"Czy zaznaczać na liście plików plik z pasującym położeniem na liście wyników "
+"CDDB"
 
-#: ../src/charset.c:610
-#, c-format
+#: ../data/preferences_dialog.ui.h:147
 msgid ""
-"The UTF-8 string '%s' couldn't be converted into filename encoding (%s)."
+"Use the Levenshtein algorithm (DLM) to match results (using title) with "
+"audio files (using filename)"
 msgstr ""
-"Ciąg UTF-8 \"%s\" nie może zostać przekonwertowany na kodowanie pliku (%s)."
+"Używanie algorytmu Levenshteina (DLM) do dopasowywania wyników (używając "
+"tytułu) do plików dźwiękowych (używając nazw plików)"
 
-#: ../src/charset.c:673
-#, c-format
-msgid "The string '%s' couldn't be converted into UTF-8 (%s)."
-msgstr "Ciąg \"%s\" nie może zostać przekonwertowany na UTF-8 (%s)."
+#: ../data/preferences_dialog.ui.h:149
+msgid "CDDB"
+msgstr "CDDB"
 
-#. Starting messages
-#: ../src/easytag.c:185
-#, c-format
-msgid "Starting EasyTAG version %s (PID: %d)…"
-msgstr "Uruchamianie EasyTAG %s (PID: %d)…"
+#: ../data/preferences_dialog.ui.h:150
+msgid "Confirmation"
+msgstr "Potwierdzenia"
 
-#: ../src/easytag.c:187
-#, c-format
-msgid "Using libid3tag version %s"
-msgstr "Używanie biblioteki libid3tag w wersji %s"
+#: ../data/preferences_dialog.ui.h:151
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:118
+msgid "Confirm before quitting the application"
+msgstr "Potwierdzanie zakończenia działania programu"
 
-#: ../src/easytag.c:190
-#, c-format
-msgid "Using id3lib version %d.%d.%d"
-msgstr "Używanie biblioteki id3lib w wersji %d.%d.%d"
+#: ../data/preferences_dialog.ui.h:152
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:119
+msgid ""
+"Whether to ask for confirmation from the user before quitting the application"
+msgstr "Czy pytać o potwierdzenie przed zakończeniem działania programu"
 
-#: ../src/easytag.c:196
-#, c-format
-msgid "Variable EASYTAGLANG defined. Setting locale: '%s'"
-msgstr "Podano zmiennÄ… EASYTAGLANG. Ustawianie lokalizacji: \"%s\""
+#: ../data/preferences_dialog.ui.h:153
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:120
+msgid "Confirm before writing tags"
+msgstr "Potwierdzanie zapisania etykiet"
 
-#: ../src/easytag.c:198
-#, c-format
-msgid "Setting locale: '%s'"
-msgstr "Ustawianie lokalizacji: \"%s\""
+#: ../data/preferences_dialog.ui.h:154
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:121
+msgid ""
+"Whether to ask for confirmation from the user before writing tags to audio "
+"files"
+msgstr ""
+"Czy pytać o potwierdzenie przed zapisaniem etykiet w plikach dźwiękowych"
+
+#: ../data/preferences_dialog.ui.h:155
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:122
+msgid "Confirm before renaming a file"
+msgstr "Potwierdzanie zmiany nazwy pliku"
+
+#: ../data/preferences_dialog.ui.h:156
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:123
+msgid "Whether to ask for confirmation from the user before renaming a file"
+msgstr "Czy pytać o potwierdzenie przed zmianą nazwy pliku"
+
+#: ../data/preferences_dialog.ui.h:157
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:126
+msgid "Confirm before deleting a file"
+msgstr "Potwierdzanie usuwania pliku"
+
+#: ../data/preferences_dialog.ui.h:158
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:127
+msgid "Whether to ask for confirmation from the user before deleting a file"
+msgstr "Czy pytać o potwierdzenie przed usunięciem pliku"
+
+#: ../data/preferences_dialog.ui.h:159
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:124
+msgid "Confirm before writing a playlist"
+msgstr "Potwierdzanie zapisania listy odtwarzania"
 
-#: ../src/easytag.c:203
-#, c-format
-msgid "Currently using locale '%s' (and eventually '%s')"
-msgstr "Używanie lokalizacji \"%s\" (i ostatecznie \"%s\")"
+#: ../data/preferences_dialog.ui.h:160
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:125
+msgid "Whether to ask for confirmation from the user before writing a playlist"
+msgstr "Czy pytać o potwierdzenie przed zapisaniem listy odtwarzania"
 
-#: ../src/easytag.c:210
-msgid "Unable to create setting directories"
-msgstr "Nie można utworzyć katalogów ustawień"
+#: ../data/preferences_dialog.ui.h:161
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:128
+msgid "Confirm before losing unsaved changes to files"
+msgstr "Potwierdzanie porzucenia niezapisanych zmian plików"
 
-#: ../src/easytag.c:427 ../src/et_core.c:638 ../src/et_core.c:650
-#, c-format
-msgid "Error while querying information for file: '%s' (%s)"
-msgstr "BÅ‚Ä…d podczas odpytywania informacji o pliku: \"%s\" (%s)"
+#: ../data/preferences_dialog.ui.h:162
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:129
+msgid ""
+"Whether to ask for confirmation from the user before performing an operation "
+"that would lose unsaved changes on files"
+msgstr ""
+"Czy pytać o potwierdzenie przed wykonaniem działania, które może spowodować "
+"utratÄ™ zmian w plikach"
 
-#: ../src/easytag.c:490
-#, c-format
-msgid "Cannot open path '%s'"
-msgstr "Nie można otworzyć ścieżki \"%s\""
+#: ../data/preferences_dialog.ui.h:163
+msgid "Scanner Dialog"
+msgstr "Okno Skanera"
 
-#.
-#. * Browser
-#.
-#: ../src/easytag.c:582 ../src/prefs.c:142
-msgid "Browser"
-msgstr "PrzeglÄ…darka"
+#: ../data/preferences_dialog.ui.h:164
+msgid "Show the scanner dialog on startup"
+msgstr "Wyświetlanie okna skanera podczas uruchamiania"
 
-#: ../src/easytag.c:604 ../src/et_core.c:2869
-msgid "File"
-msgstr "Plik"
+#: ../data/preferences_dialog.ui.h:165
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:202
+msgid "Whether to show the scanner window on application startup"
+msgstr "Czy wyświetlać okna skanera podczas uruchamiania programu"
 
-#. Default values are MPs data
-#. Nothing to display
-#. gtk_label_set_text(GTK_LABEL(VersionLabel),"");
-#. gtk_label_set_text(GTK_LABEL(VersionValueLabel),"");
-#. Version changed to encoder version
-#. Encoder version
-#: ../src/easytag.c:636 ../src/easytag.c:4217 ../src/flac_header.c:201
-#: ../src/monkeyaudio_header.c:96 ../src/musepack_header.c:98
-#: ../src/ogg_header.c:389 ../src/opus_header.c:221 ../src/wavpack_header.c:72
-#, c-format
-msgid "Encoder:"
-msgstr "Koder:"
+#: ../data/preferences_dialog.ui.h:166
+msgid "Application"
+msgstr "Program"
 
-#: ../src/easytag.c:644
-msgid "Bitrate:"
-msgstr "Gęstość bitowa:"
+#: ../data/scan_dialog.ui.h:1
+msgid ""
+"Select or type in a mask using codes (see Legend) to parse filename and "
+"directory. Used to fill in tag fields"
+msgstr ""
+"Proszę wybrać lub wprowadzić maskę używając kodów (proszę zobaczyć \"Legendę"
+"\"), aby przetworzyć nazwę pliku i katalog. Używane do wypełniania pól "
+"etykiet"
 
-#. Translators: Please try to keep this string as short as possible as it
-#. * is shown in a narrow column.
-#: ../src/easytag.c:654
-msgid "Frequency:"
-msgstr "Częstotliwość:"
+#: ../data/scan_dialog.ui.h:2
+msgid "Fill tag preview"
+msgstr "PodglÄ…d zmiany etykiet"
 
-#. Mode
-#: ../src/easytag.c:665 ../src/easytag.c:4221 ../src/mpeg_header.c:216
-msgid "Mode:"
-msgstr "Tryb:"
+#: ../data/scan_dialog.ui.h:3
+msgid "Mask Editor"
+msgstr "Edytor masek"
 
-#: ../src/easytag.c:672
-msgid "Size:"
-msgstr "Rozmiar:"
+#: ../data/scan_dialog.ui.h:4
+msgid "Create a new mask"
+msgstr "Utwórz nową maskę"
 
-#: ../src/easytag.c:679
-msgid "Duration:"
-msgstr "Czas trwania:"
+#: ../data/scan_dialog.ui.h:5
+msgid "Move the selected mask up"
+msgstr "Przesuń zaznaczoną maskę do góry"
 
-#. Main Frame
-#: ../src/easytag.c:726 ../src/et_core.c:2799
-msgid "Tag"
-msgstr "Etykieta"
+#: ../data/scan_dialog.ui.h:6
+msgid "Move the selected mask down"
+msgstr "Przesuń zaznaczoną maskę w dół"
 
-#.
-#. * 1 - Page for common tag fields
-#.
-#: ../src/easytag.c:748
-msgid "Common"
-msgstr "Ogólne"
+#: ../data/scan_dialog.ui.h:7
+msgid "Duplicate the selected mask"
+msgstr "Powiel zaznaczonÄ… maskÄ™"
 
-#. Title
-#: ../src/easytag.c:755
-msgid "Title:"
-msgstr "Tytuł:"
+#: ../data/scan_dialog.ui.h:8
+msgid "Add default masks"
+msgstr "Dodaj domyślne maski"
 
-#: ../src/easytag.c:769
-msgid "Tag selected files with this title"
-msgstr "Tytuł z tego pola zostanie wstawiony do zaznaczonych plików"
+#: ../data/scan_dialog.ui.h:9
+msgid "Remove the selected mask"
+msgstr "Usuń zaznaczoną maskę"
 
-#. Artist
-#: ../src/easytag.c:774
-msgid "Artist:"
-msgstr "Wykonawca:"
+#: ../data/scan_dialog.ui.h:10
+msgid "Save masks"
+msgstr "Zapisz maski"
 
-#: ../src/easytag.c:788
-msgid "Tag selected files with this artist"
-msgstr "Wykonawca z tego pola zostanie wstawiony do zaznaczonych plików"
+#: ../data/scan_dialog.ui.h:11
+msgid "Legend"
+msgstr "Legenda"
 
-#. Album Artist
-#: ../src/easytag.c:793
-msgid "Album artist:"
-msgstr "Wykonawca albumu:"
+#: ../data/scan_dialog.ui.h:13
+#, no-c-format
+msgid "%a: artist"
+msgstr "%a: wykonawca"
 
-#: ../src/easytag.c:807
-msgid "Tag selected files with this album artist"
-msgstr "Wykonawca albumu z tego pola zostanie wstawiony do zaznaczonych plików"
+#: ../data/scan_dialog.ui.h:15
+#, no-c-format
+msgid "%a: album artist"
+msgstr "%a: wykonawca albumu"
 
-#. Album
-#: ../src/easytag.c:812
-msgid "Album:"
-msgstr "Album:"
+#: ../data/scan_dialog.ui.h:17
+#, no-c-format
+msgid "%b: album"
+msgstr "%b: album"
 
-#: ../src/easytag.c:826
-msgid "Tag selected files with this album name"
-msgstr "Nazwa albumu z tego pola zostanie wstawiona do zaznaczonych plików"
+#: ../data/scan_dialog.ui.h:19
+#, no-c-format
+msgid "%c: comment"
+msgstr "%c: komentarz"
 
-#. Disc Number
-#: ../src/easytag.c:831
-msgid "CD:"
-msgstr "CD:"
+#: ../data/scan_dialog.ui.h:21
+#, no-c-format
+msgid "%p: composer"
+msgstr "%p: kompozytor"
 
-#: ../src/easytag.c:848
-msgid "Tag selected files with this disc number"
-msgstr "Numer płyty z tego pola zostanie wstawiony do zaznaczonych plików"
+#: ../data/scan_dialog.ui.h:23
+#, no-c-format
+msgid "%r: copyright"
+msgstr "%r: prawa autorskie"
 
-#. Year
-#: ../src/easytag.c:853
-msgid "Year:"
-msgstr "Rok:"
+#: ../data/scan_dialog.ui.h:25
+#, no-c-format
+msgid "%d: disc number"
+msgstr "%d: numer płyty"
 
-#: ../src/easytag.c:873
-msgid "Tag selected files with this year"
-msgstr "Rok z tego pola zostanie wstawiony do zaznaczonych plików"
+#: ../data/scan_dialog.ui.h:27
+#, no-c-format
+msgid "%e: encoded by"
+msgstr "%e: koder"
 
-#: ../src/easytag.c:887
-msgid "Number selected tracks sequentially. Starts at 01 in each subdirectory."
-msgstr ""
-"Nadaje plikom kolejne numery ścieżek. Zaczyna od 01 w każdym podkatalogu."
+#: ../data/scan_dialog.ui.h:29
+#, no-c-format
+msgid "%g: genre"
+msgstr "%g: gatunek"
 
-#. To have enough space to display the icon
-#. To have enough space to display the icon
-#: ../src/easytag.c:896
-msgid "Track #:"
-msgstr "Ścieżka #:"
+#: ../data/scan_dialog.ui.h:31
+#, no-c-format
+msgid "%i: ignored"
+msgstr "%i: ignorowane"
 
-#: ../src/easytag.c:927
-msgid ""
-"Set the number of files, in the same directory of the displayed file, to the "
-"selected tracks."
-msgstr ""
-"Ustawia liczbę plików w tym samym katalogu, co wyświetlany plik jako liczbę "
-"ścieżek."
+#: ../data/scan_dialog.ui.h:33
+#, no-c-format
+msgid "%l: number of tracks"
+msgstr "%l: liczba ścieżek"
 
-#: ../src/easytag.c:947
-msgid "Tag selected files with this number of tracks"
-msgstr "Numer ścieżki z tego pola zostanie wstawiony do zaznaczonych plików"
+#: ../data/scan_dialog.ui.h:35
+#, no-c-format
+msgid "%o: original artist"
+msgstr "%o: pierwotny wykonawca"
 
-#. Genre
-#: ../src/easytag.c:951
-msgid "Genre:"
-msgstr "Gatunek:"
+#: ../data/scan_dialog.ui.h:37
+#, no-c-format
+msgid "%n: track"
+msgstr "%n: ścieżka"
 
-#: ../src/easytag.c:979
-msgid "Tag selected files with this genre"
-msgstr "Gatunek z tego pola zostanie wstawiony do zaznaczonych plików"
+#: ../data/scan_dialog.ui.h:39
+#, no-c-format
+msgid "%t: title"
+msgstr "%t: tytuł"
 
-#. Comment
-#: ../src/easytag.c:984
-msgid "Comment:"
-msgstr "Komentarz:"
+#: ../data/scan_dialog.ui.h:41
+#, no-c-format
+msgid "%u: URL"
+msgstr "%u: adres URL"
 
-#: ../src/easytag.c:1011
-msgid "Tag selected files with this comment"
-msgstr "Komentarz z tego pola zostanie wstawiony do zaznaczonych plików"
+#: ../data/scan_dialog.ui.h:43
+#, no-c-format
+msgid "%x: number of discs"
+msgstr "%x: liczba płyt"
 
-#. Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(CommentView));
-#. Composer (name of the composers)
-#: ../src/easytag.c:1018
-msgid "Composer:"
-msgstr "Kompozytor:"
+#: ../data/scan_dialog.ui.h:45
+#, no-c-format
+msgid "%y: year"
+msgstr "%y: rok"
 
-#: ../src/easytag.c:1032
-msgid "Tag selected files with this composer"
-msgstr "Kompozytor z tego pola zostanie wstawiony do zaznaczonych plików"
+#: ../data/scan_dialog.ui.h:46
+msgid "Fill Tag"
+msgstr "Wypełnianie etykiet"
 
-#. Translators: Original Artist / Performer. Please try to keep this string
-#. * as short as possible, as it must fit into a narrow column.
-#: ../src/easytag.c:1039
-msgid "Orig. artist:"
-msgstr "Pierwotny wykonawca:"
+#: ../data/scan_dialog.ui.h:47
+msgid "Prefix mask with current directory"
+msgstr "Dodaje do maski przedrostek bieżącego katalogu"
 
-#: ../src/easytag.c:1053
-msgid "Tag selected files with this original artist"
+#: ../data/scan_dialog.ui.h:48
+msgid ""
+"Select or type in a mask using codes (see Legend) to parse tag fields. Used "
+"to rename the file.\n"
+"        Use ‘/’ to make directories. If the first character is ‘/’, it is an "
+"absolute path, otherwise is relative to the old path"
 msgstr ""
-"Pierwotny wykonawca z tego pola zostanie wstawiony do zaznaczonych plików"
-
-#. Copyright
-#: ../src/easytag.c:1059
-msgid "Copyright:"
-msgstr "Prawa autorskie:"
+"Proszę wybrać lub wprowadzić maskę używając kodów (proszę zobaczyć \"Legendę"
+"\"), aby przetworzyć pola etykiet. Używane do zmiany nazwy pliku.\n"
+"Można użyć \"/\", aby tworzyć katalogi. Jeśli pierwszym znakiem jest \"/\", "
+"oznacza on ścieżkę bezwzględną, w innych przypadkach ścieżka traktowana jest "
+"jako względna"
 
-#: ../src/easytag.c:1073
-msgid "Tag selected files with this copyright"
-msgstr "Prawa autorskie z tego pola zostaną wstawione do zaznaczonych plików"
+#: ../data/scan_dialog.ui.h:50
+msgid "Rename file preview"
+msgstr "PodglÄ…d zmiany nazwy pliku"
 
-#. URL
-#: ../src/easytag.c:1079
-msgid "URL:"
-msgstr "Adres URL:"
+#. Only filename changed
+#: ../data/scan_dialog.ui.h:51 ../src/easytag.c:615
+msgid "Rename File"
+msgstr "Zmień nazwę pliku"
 
-#: ../src/easytag.c:1093
-msgid "Tag selected files with this URL"
-msgstr "Adres URL z tego pola zostaną wstawione do zaznaczonych plików"
+#: ../data/scan_dialog.ui.h:52
+msgid "Tag Fields"
+msgstr "Pola etykiet"
 
-#. Encoded by
-#: ../src/easytag.c:1099
-msgid "Encoded by:"
-msgstr "Skompresowany przez:"
+#: ../data/scan_dialog.ui.h:54
+msgid "Process filename"
+msgstr "Przetwarzanie nazwy pliku"
 
-#: ../src/easytag.c:1113
-msgid "Tag selected files with this encoder name"
-msgstr ""
-"Nazwisko osoby, przez którą plik został utworzony z tego pola zostanie "
-"wstawione do zaznaczonych plików"
+#: ../data/scan_dialog.ui.h:56
+msgid "Process title field"
+msgstr "Przetwarzanie pola tytułu"
 
-#.
-#. * 2 - Page for extra tag fields
-#.
-#: ../src/easytag.c:1146 ../src/et_core.c:3241 ../src/et_core.c:3244
-msgid "Images"
-msgstr "Obrazy"
+#: ../data/scan_dialog.ui.h:58
+msgid "Process artist field"
+msgstr "Przetwarzanie pola wykonawcy"
 
-#: ../src/easytag.c:1170
-msgid "You can use drag and drop to add an image"
-msgstr "Można tutaj przeciągnąć i upuścić obraz"
+#: ../data/scan_dialog.ui.h:61
+msgid "Process album field"
+msgstr "Przetwarzanie pola albumu"
 
-#: ../src/easytag.c:1217
-msgid "Add images to the tag"
-msgstr "Dodaje obrazy do etykiety"
+#: ../data/scan_dialog.ui.h:63
+msgid "Process genre field"
+msgstr "Przetwarzanie pola gatunku"
 
-#: ../src/easytag.c:1235
-msgid "Remove selected images from the tag"
-msgstr "Usuwa zaznaczone obrazy z etykiety"
+#: ../data/scan_dialog.ui.h:65
+msgid "Process comment field"
+msgstr "Przetwarzanie pola komentarza"
 
-#: ../src/easytag.c:1249
-msgid "Save the selected images to files"
-msgstr "Zapisuje zaznaczone obrazy do plików"
+#: ../data/scan_dialog.ui.h:67
+msgid "Process composer field"
+msgstr "Przetwarzanie pola kompozytora"
 
-#: ../src/easytag.c:1260
-msgid "Edit image properties"
-msgstr "Modyfikuje właściwości obrazu"
+#: ../data/scan_dialog.ui.h:68
+msgid "Orig. Artist"
+msgstr "Pierwotny wykonawca"
 
-#: ../src/easytag.c:1274
-msgid "Tag selected files with these images"
-msgstr "Wstawia te obrazy do zaznaczonych plików"
+#: ../data/scan_dialog.ui.h:69
+msgid "Process original artist field"
+msgstr "Przetwarzanie pola pierwotnego wykonawcy"
 
-#: ../src/easytag.c:1332
-#, c-format
-msgid "Selected files tagged with title '%s'."
-msgstr "Zaznaczonym plikom ustawiono tytuł \"%s\"."
+#: ../data/scan_dialog.ui.h:71
+msgid "Process copyright field"
+msgstr "Przetwarzanie pola praw autorskich"
 
-#: ../src/easytag.c:1334
-msgid "Removed title from selected files."
-msgstr "Usunięto tytuły zaznaczonym plikom."
+#: ../data/scan_dialog.ui.h:73
+msgid "Process URL field"
+msgstr "Przetwarzanie pola adresu URL"
 
-#: ../src/easytag.c:1349
-#, c-format
-msgid "Selected files tagged with artist '%s'."
-msgstr "Zaznaczonym plikom ustawiono wykonawcÄ™ na \"%s\"."
+#: ../data/scan_dialog.ui.h:75
+msgid "Process encoded-by field"
+msgstr "Przetwarzanie pola nazwiska kodera"
 
-#: ../src/easytag.c:1351
-msgid "Removed artist from selected files."
-msgstr "Usunięto wykonawcę z zaznaczonych plików."
+#: ../data/scan_dialog.ui.h:76
+msgid "Capitalization"
+msgstr "Stosowanie wielkich liter"
 
-#: ../src/easytag.c:1365
-#, c-format
-msgid "Selected files tagged with album artist '%s'."
-msgstr "Zaznaczonym plikom ustawiono wykonawcÄ™ albumu na \"%s\"."
+#: ../data/scan_dialog.ui.h:77
+msgid "Capitalize all"
+msgstr "Wszystkie wielkie litery"
 
-#: ../src/easytag.c:1367
-msgid "Removed album artist from selected files."
-msgstr "Usunięto wykonawcę albumu z zaznaczonych plików."
+#: ../data/scan_dialog.ui.h:78 ../data/org.gnome.EasyTAG.gschema.xml.h:144
+msgid ""
+"Whether to upper-case all characters of the tag when processing tag fields"
+msgstr ""
+"Czy zmieniać wszystkie znaki etykiety na wielkie podczas przetwarzania pól "
+"etykiety"
 
-#: ../src/easytag.c:1382
-#, c-format
-msgid "Selected files tagged with album '%s'."
-msgstr "Zaznaczonym plikom ustawiono album na \"%s\"."
+#: ../data/scan_dialog.ui.h:79
+msgid "Lowercase all"
+msgstr "Wszystkie małe litery"
 
-#: ../src/easytag.c:1384
-msgid "Removed album name from selected files."
-msgstr "Usunięto album z zaznaczonych plików."
+#: ../data/scan_dialog.ui.h:80 ../data/org.gnome.EasyTAG.gschema.xml.h:142
+msgid ""
+"Whether to lower-case all characters of the tag when processing tag fields"
+msgstr ""
+"Czy zmieniać wszystkie znaki etykiety na małe podczas przetwarzania pól "
+"etykiety"
 
-#: ../src/easytag.c:1421
-#, c-format
-msgid "Selected files tagged with disc number '%s/%s'."
-msgstr "Zaznaczonym plikom ustawiono numer płyty na \"%s/%s\"."
+#: ../data/scan_dialog.ui.h:81
+msgid "Capitalize first letter"
+msgstr "Wielka pierwsza litera"
 
-#: ../src/easytag.c:1426
-#, c-format
-msgid "Selected files tagged with disc number like 'xx'."
-msgstr "Zaznaczonym plikom ustawiono numer płyty na \"xx\"."
+#: ../data/scan_dialog.ui.h:82 ../data/org.gnome.EasyTAG.gschema.xml.h:146
+msgid ""
+"Whether to upper-case the first letter of the tag when processing tag fields"
+msgstr ""
+"Czy zmieniać pierwsze litery etykiety na małe podczas przetwarzania pól "
+"etykiety"
 
-#: ../src/easytag.c:1431
-msgid "Removed disc number from selected files."
-msgstr "Usunięto numer płyty z zaznaczonych plików."
+#: ../data/scan_dialog.ui.h:83
+msgid "Capitalize the first letter of each word"
+msgstr "Wielka pierwsza litera każdego słowa"
 
-#: ../src/easytag.c:1447
-#, c-format
-msgid "Selected files tagged with year '%s'."
-msgstr "Zaznaczonym plikom ustawiono rok na \"%s\"."
+#: ../data/scan_dialog.ui.h:84 ../data/org.gnome.EasyTAG.gschema.xml.h:148
+msgid ""
+"Whether to upper-case the first letter of each word when processing tag "
+"fields"
+msgstr ""
+"Czy zmieniać pierwszą literę każdego słowa na wielką podczas przetwarzania "
+"pól etykiet"
 
-#: ../src/easytag.c:1449
-msgid "Removed year from selected files."
-msgstr "Usunięto rok z zaznaczonych plików."
+#: ../data/scan_dialog.ui.h:85
+msgid "Detect Roman numerals"
+msgstr "Wykrywanie liczb rzymskich"
 
-#: ../src/easytag.c:1475 ../src/easytag.c:1565
-#, c-format
-msgid "Selected files tagged with track like 'xx/%s'."
-msgstr "Zaznaczonym plikom ustawiono numer ścieżki na \"xx/%s\"."
+#: ../data/scan_dialog.ui.h:86 ../data/org.gnome.EasyTAG.gschema.xml.h:152
+msgid ""
+"Whether to detect Roman numerals when applying upper-case conversions while "
+"processing tag fields"
+msgstr ""
+"Czy wykrywać rzymskie liczby podczas zastosowywania zmiany wielkości liter "
+"podczas przetwarzania pól etykiet"
 
-#: ../src/easytag.c:1478
-#, c-format
-msgid "Selected files tagged with track like 'xx'."
-msgstr "Zaznaczonym plikom ustawiono numer ścieżki na \"xx\"."
+#: ../data/scan_dialog.ui.h:87
+msgid "Do not change capitalization"
+msgstr "Bez zmiany wielkości liter"
 
-#: ../src/easytag.c:1482 ../src/easytag.c:1568
-msgid "Removed track number from selected files."
-msgstr "Usunięto numer ścieżki z zaznaczonych plików."
+#: ../data/scan_dialog.ui.h:88
+msgid "Spaces Conversions"
+msgstr "Zmiana spacji"
 
-#. msg = g_strdup_printf(_("All %d tracks numbered sequentially."), ETCore->ETFileSelectionList_Length);
-#: ../src/easytag.c:1538
-#, c-format
-msgid "Selected tracks numbered sequentially."
-msgstr "Zaznaczone pliki ponumerowano według kolejności."
+#: ../data/scan_dialog.ui.h:89 ../data/org.gnome.EasyTAG.gschema.xml.h:153
+#: ../src/tag_area.c:875
+msgid "Remove spaces"
+msgstr "Usuwanie spacji"
 
-#: ../src/easytag.c:1584
-#, c-format
-msgid "Selected files tagged with genre '%s'."
-msgstr "Zaznaczonym plikom ustawiono gatunek na \"%s\"."
+#: ../data/scan_dialog.ui.h:90 ../data/org.gnome.EasyTAG.gschema.xml.h:154
+msgid "Whether to remove all spaces when processing tag fields"
+msgstr "Czy usuwać wszystkie spacje podczas przetwarzania pól etykiet"
 
-#: ../src/easytag.c:1586
-msgid "Removed genre from selected files."
-msgstr "Usunięto gatunek z zaznaczonych plików."
+#: ../data/scan_dialog.ui.h:91
+msgid "Insert a space before uppercase letters"
+msgstr "Wstawianie spacji przed wielkÄ… literÄ…"
 
-#: ../src/easytag.c:1608
-#, c-format
-msgid "Selected files tagged with comment '%s'."
-msgstr "Zaznaczonym plikom ustawiono komentarz na \"%s\"."
+#: ../data/scan_dialog.ui.h:92 ../data/org.gnome.EasyTAG.gschema.xml.h:156
+msgid ""
+"Whether to insert spaces before capital letters when processing tag fields"
+msgstr ""
+"Czy wstawiać spacje przed wielkimi literami podczas przetwarzania pól etykiet"
 
-#: ../src/easytag.c:1610
-msgid "Removed comment from selected files."
-msgstr "Usunięto komentarz z zaznaczonych plików."
+#: ../data/scan_dialog.ui.h:93
+msgid "Remove duplicate spaces and underscores"
+msgstr "Usuwanie powtarzających się spacji i znaków podkreślenia"
 
-#: ../src/easytag.c:1624
-#, c-format
-msgid "Selected files tagged with composer '%s'."
-msgstr "Zaznaczonym plikom ustawiono kompozytora na \"%s\"."
+#: ../data/scan_dialog.ui.h:94 ../data/org.gnome.EasyTAG.gschema.xml.h:158
+msgid ""
+"Whether to remove duplicate spaces and underscores when processing tag fields"
+msgstr ""
+"Czy usuwać powtarzających się spacje i znaki podkreślenia podczas "
+"przetwarzania pól etykiet"
 
-#: ../src/easytag.c:1626
-msgid "Removed composer from selected files."
-msgstr "Usunięto kompozytora z zaznaczonych plików."
+#: ../data/scan_dialog.ui.h:95
+msgid "Do not change word separators"
+msgstr "Bez zmiany separatorów słów"
 
-#: ../src/easytag.c:1641
-#, c-format
-msgid "Selected files tagged with original artist '%s'."
-msgstr "Zaznaczonym plikom ustawiono pierwotnego wykonawcÄ™ na \"%s\"."
+#: ../data/scan_dialog.ui.h:96
+msgid "Character Conversions"
+msgstr "Konwersja znaków"
 
-#: ../src/easytag.c:1643
-msgid "Removed original artist from selected files."
-msgstr "Usunięto pierwotnego wykonawcę z zaznaczonych plików."
+#: ../data/scan_dialog.ui.h:98 ../src/tag_area.c:831
+#, no-c-format
+msgid "Convert ‘_’ and ‘%20’ to spaces"
+msgstr "Zmienianie \"_\" i \"%20\" na spacje"
 
-#: ../src/easytag.c:1658
-#, c-format
-msgid "Selected files tagged with copyright '%s'."
-msgstr "Zaznaczonym plikom ustawiono prawa autorskie na \"%s\"."
+#: ../data/scan_dialog.ui.h:100
+#, no-c-format
+msgid ""
+"The underscore character or the string ‘%20’ is replaced by one space. "
+"Example, before: ‘Text%20In%20An_Entry‘, after: ‘Text In An Entry’"
+msgstr ""
+"Znak podkreślenia oraz ciąg \"%20\" jest zamieniany na jedną spację. "
+"Przykład, przed: \"Tekst%20w%20jakimś_polu\", po: \"Tekst w jakimś polu\""
 
-#: ../src/easytag.c:1660
-msgid "Removed copyright from selected files."
-msgstr "Usunięto prawa autorskie z zaznaczonych plików."
+#: ../data/scan_dialog.ui.h:101 ../src/tag_area.c:837
+msgid "Convert ‘ ’ to ‘_’"
+msgstr "Zmienianie \" \" na \"_\""
 
-#: ../src/easytag.c:1675
-#, c-format
-msgid "Selected files tagged with URL '%s'."
-msgstr "Zaznaczonym plikom ustawiono adres URL na \"%s\"."
+#: ../data/scan_dialog.ui.h:102
+msgid ""
+"The space character is replaced by one underscore character. Example, "
+"before: ‘Text In An Entry’, after: ‘Text_In_An_Entry’"
+msgstr ""
+"Znak spacji jest zamieniany na jeden znak podkreślenia. Przykład, przed: "
+"\"Tekst w jakimś polu\", po: \"Tekst_w_jakimś_polu\""
 
-#: ../src/easytag.c:1677
-msgid "Removed URL from selected files."
-msgstr "Usunięto adres URL z zaznaczonych plików."
+#: ../data/scan_dialog.ui.h:103
+msgid "Convert:"
+msgstr "Zamiana:"
 
-#: ../src/easytag.c:1692
-#, c-format
-msgid "Selected files tagged with encoder name '%s'."
-msgstr "Zaznaczonym plikom ustawiono nazwisko kodera na \"%s\"."
+#: ../data/scan_dialog.ui.h:104
+msgid "Replace a string by another one. Note that the search is case sensitive"
+msgstr "Zamienia podany tekst na inny. Wyszukiwanie rozróżnia wielkość liter"
 
-#: ../src/easytag.c:1694
-msgid "Removed encoder name from selected files."
-msgstr "Usunięto nazwisko kodera z zaznaczonych plików."
+#: ../data/scan_dialog.ui.h:105
+msgid "to: "
+msgstr "na: "
 
-#: ../src/easytag.c:1726
-msgid "Selected files tagged with images."
-msgstr "Ustawiono obrazy w zaznaczonych plikach."
+#: ../data/scan_dialog.ui.h:106
+msgid "Do not convert"
+msgstr "Bez zmieniania"
 
-#: ../src/easytag.c:1728
-msgid "Removed images from selected files."
-msgstr "Usunięto obrazy z zaznaczonych plików."
+#: ../data/scan_dialog.ui.h:108
+msgid "Show / Hide Masks Editor"
+msgstr "Wyświetla/ukrywa edytor masek"
 
-#: ../src/easytag.c:2009
-msgid "Select Mode and Mask, and redo the same action"
-msgstr "Proszę wybrać tryb i maskę, po czym ponowić to samo działanie"
+#: ../data/scan_dialog.ui.h:109
+msgid "Show / Hide Legend"
+msgstr "Wyświetla/ukrywa legendę"
 
-#: ../src/easytag.c:2061
-msgid "All tags have been scanned"
-msgstr "Wszystkie etykiety zostały zeskanowane"
+#: ../data/scan_dialog.ui.h:110
+msgid "Scanner Preferences"
+msgstr "Preferencje skanera"
 
-#: ../src/easytag.c:2117
-msgid "All tags have been removed"
-msgstr "Wszystkie etykiety zostały usunięte"
+#: ../data/search_dialog.ui.h:1
+msgid "Search:"
+msgstr "Wyszukiwanie:"
 
-#: ../src/easytag.c:2422
-#, c-format
-msgid "A file was changed by an external program"
-msgid_plural "%d files were changed by an external program."
-msgstr[0] "Plik został zmieniony przez zewnętrzny program"
-msgstr[1] "%d pliki zostały zmienione przez zewnętrzny program."
-msgstr[2] "%d plików zostało zmienionych przez zewnętrzny program."
+#: ../data/search_dialog.ui.h:2
+msgid ""
+"Type the text to search for in the file list, or leave the field empty to "
+"display all files"
+msgstr ""
+"Proszę wpisać tekst do wyszukiwania lub pozostawić to pole puste, aby "
+"wyświetlić wszystkie pliki"
 
-#: ../src/easytag.c:2427
-msgid "Do you want to continue saving the file?"
-msgstr "Kontynuować zapisywanie pliku?"
+#: ../data/search_dialog.ui.h:3
+msgid "_Find"
+msgstr "Z_najdź"
 
-#: ../src/easytag.c:2485 ../src/easytag.c:2505
-msgid "Saving files was stopped"
-msgstr "Zatrzymano zapisywanie plików"
+#: ../data/search_dialog.ui.h:4
+msgid "In:"
+msgstr "W:"
 
-#: ../src/easytag.c:2507
-msgid "All files have been saved"
-msgstr "Wszystkie pliki zostały zapisane"
+#. This option is for the previous 'in' option. For instance, translate this as 'Search' 'In:' 'the Filename'.
+#: ../data/search_dialog.ui.h:6
+msgid "the Filename"
+msgstr "Nazwa pliku"
 
-#: ../src/easytag.c:2642
-#, c-format
-msgid "Cannot delete file (%s)"
-msgstr "Nie można usunąć pliku (%s)"
+#. This option is for the previous 'in' option. For instance, translate this as 'Search' 'In:' 'the Tag'.
+#: ../data/search_dialog.ui.h:8
+msgid "the Tag"
+msgstr "Etykieta"
 
-#: ../src/easytag.c:2663
-msgid "Files have been partially deleted"
-msgstr "Pliki zostały częściowo usunięte"
+#: ../data/search_dialog.ui.h:9
+msgid "Case sensitive"
+msgstr "Rozróżnianie małych i wielkich liter"
 
-#: ../src/easytag.c:2665
-msgid "All files have been deleted"
-msgstr "Wszystkie pliki zostały usunięte"
+#: ../data/search_dialog.ui.h:16
+msgid "CD"
+msgstr "CD"
 
-#: ../src/easytag.c:2781
-#, c-format
-msgid "Do you want to write the tag of file '%s'?"
-msgstr "Zapisać etykietę pliku \"%s\"?"
+#: ../data/tag_area.ui.h:1
+msgid "Image Type"
+msgstr "Typ obrazu"
 
-#: ../src/easytag.c:2783
-msgid "Confirm Tag Writing"
-msgstr "Potwierdzenie zapisania etykiety"
+#: ../data/tag_area.ui.h:2 ../src/picture.c:288
+msgid "Description"
+msgstr "Opis"
 
-#: ../src/easytag.c:2788 ../src/easytag.c:2908 ../src/easytag.c:3158
-msgid "Repeat action for the remaining files"
-msgstr "Powtórzenie działania dla pozostałych plików"
+#: ../data/tag_area.ui.h:4
+msgid "_Accept"
+msgstr "_Zaakceptuj"
 
-#. Directories and filename changed
-#: ../src/easytag.c:2872 ../src/scan_dialog.c:183
-msgid "Rename File and Directory"
-msgstr "Zmiana nazw plików i katalogów"
+#: ../data/tag_area.ui.h:5 ../src/tag_area.c:3029
+msgid "Tag"
+msgstr "Etykieta"
 
-#: ../src/easytag.c:2873
-msgid "File and directory rename confirmation required"
-msgstr "Wymagane jest potwierdzenie zmiany nazwy pliku i katalogu"
+#: ../data/tag_area.ui.h:6
+msgid "Title:"
+msgstr "Tytuł:"
 
-#: ../src/easytag.c:2874
-#, c-format
-msgid "Do you want to rename the file and directory '%s' to '%s'?"
-msgstr "Zmienić nazwę pliku i katalogu z \"%s\" na \"%s\"?"
+#: ../data/tag_area.ui.h:7
+msgid "Tag selected files with this title"
+msgstr "Tytuł z tego pola zostanie wstawiony do zaznaczonych plików"
 
-#: ../src/easytag.c:2880
-msgid "Directory rename confirmation required"
-msgstr "Wymagane jest potwierdzenie zmiany nazwy katalogu"
+#: ../data/tag_area.ui.h:8
+msgid "Artist:"
+msgstr "Wykonawca:"
 
-#: ../src/easytag.c:2881
-#, c-format
-msgid "Do you want to rename the directory '%s' to '%s'?"
-msgstr "Zmienić nazwę katalogu \"%s\" na \"%s\"?"
+#: ../data/tag_area.ui.h:9
+msgid "Tag selected files with this artist"
+msgstr "Wykonawca z tego pola zostanie wstawiony do zaznaczonych plików"
 
-#. Only filename changed
-#: ../src/easytag.c:2887
-msgid "Rename File"
-msgstr "Zmiana nazwy pliku"
+#: ../data/tag_area.ui.h:10
+msgid "Album artist:"
+msgstr "Wykonawca albumu:"
 
-#: ../src/easytag.c:2888
-msgid "File rename confirmation required"
-msgstr "Wymagane jest potwierdzenie zmiany nazwy pliku"
+#: ../data/tag_area.ui.h:11
+msgid "Tag selected files with this album artist"
+msgstr "Wykonawca albumu z tego pola zostanie wstawiony do zaznaczonych plików"
 
-#: ../src/easytag.c:2889
-#, c-format
-msgid "Do you want to rename the file '%s' to '%s'?"
-msgstr "Zmienić nazwę pliku \"%s\" na \"%s\"?"
+#: ../data/tag_area.ui.h:12
+msgid "Album:"
+msgstr "Album:"
 
-#: ../src/easytag.c:2955
-#, c-format
-msgid "Cannot rename file '%s' to '%s'"
-msgstr "Nie można zmienić nazwy pliku \"%s\" na \"%s\""
+#: ../data/tag_area.ui.h:13
+msgid "Tag selected files with this album name"
+msgstr "Nazwa albumu z tego pola zostanie wstawiona do zaznaczonych plików"
 
-#: ../src/easytag.c:2969
-#, c-format
-msgid "Cannot rename file '%s' to '%s': %s"
-msgstr "Nie można zmienić nazwy pliku \"%s\" na \"%s\": %s"
+#: ../data/tag_area.ui.h:14
+msgid "CD:"
+msgstr "CD:"
 
-#: ../src/easytag.c:2973
-msgid "File(s) not renamed"
-msgstr "Pliki, którym nie zmieniono nazwy"
+#: ../data/tag_area.ui.h:15
+msgid "Tag selected files with this disc number"
+msgstr "Numer płyty z tego pola zostanie wstawiony do zaznaczonych plików"
 
-#: ../src/easytag.c:3085
-#, c-format
-msgid "Writing tag of '%s'"
-msgstr "Zapisywanie etykiety \"%s\""
+#: ../data/tag_area.ui.h:16
+msgid "Year:"
+msgstr "Rok:"
 
-#: ../src/easytag.c:3092
-msgid "Tag(s) written"
-msgstr "Zapisano etykiety"
+#: ../data/tag_area.ui.h:17
+msgid "Tag selected files with this year"
+msgstr "Rok z tego pola zostanie wstawiony do zaznaczonych plików"
 
-#: ../src/easytag.c:3105
-#, c-format
-msgid "Cannot write tag in file '%s'"
-msgstr "Nie można zapisać etykiety w pliku \"%s\""
+#: ../data/tag_area.ui.h:18
+msgid "Number selected tracks sequentially. Starts at 01 in each subdirectory"
+msgstr ""
+"Nadaje plikom kolejne numery ścieżek. Zaczyna od 01 w każdym podkatalogu"
 
-#: ../src/easytag.c:3109
-msgid "Tag Write Error"
-msgstr "BÅ‚Ä…d zapisu etykiety"
+#: ../data/tag_area.ui.h:19
+msgid "Track #:"
+msgstr "Ścieżka #:"
 
-#: ../src/easytag.c:3155 ../src/easytag.c:3169
-#, c-format
-msgid "Do you really want to delete the file '%s'?"
-msgstr "Na pewno usunąć plik \"%s\"?"
+#: ../data/tag_area.ui.h:20
+msgid ""
+"Set the number of files, in the same directory of the displayed file, to the "
+"selected tracks"
+msgstr ""
+"Ustawia liczbę plików w tym samym katalogu, co wyświetlany plik jako liczbę "
+"ścieżek"
 
-#: ../src/easytag.c:3161 ../src/easytag.c:3171
-msgid "Delete File"
-msgstr "Usuń pliki"
+#: ../data/tag_area.ui.h:21
+msgid "Tag selected files with this number of tracks"
+msgstr "Numer ścieżki z tego pola zostanie wstawiony do zaznaczonych plików"
 
-#: ../src/easytag.c:3196
-#, c-format
-msgid "File '%s' deleted"
-msgstr "Usunięto plik \"%s\""
+#: ../data/tag_area.ui.h:22
+msgid "Genre:"
+msgstr "Gatunek:"
 
-#: ../src/easytag.c:3331
-#, c-format
-msgid "Cannot read directory '%s'"
-msgstr "Nie można odczytać katalogu \"%s\""
+#: ../data/tag_area.ui.h:23
+msgid "Comment:"
+msgstr "Komentarz:"
 
-#: ../src/easytag.c:3335
-msgid "Directory Read Error"
-msgstr "BÅ‚Ä…d odczytu katalogu"
+#: ../data/tag_area.ui.h:24
+msgid "Tag selected files with this comment"
+msgstr "Komentarz z tego pola zostanie wstawiony do zaznaczonych plików"
 
-#. Read the directory recursively
-#: ../src/easytag.c:3356
-#, c-format
-msgid "Search in progress…"
-msgstr "Trwa wyszukiwanie…"
+#: ../data/tag_area.ui.h:25
+msgid "Composer:"
+msgstr "Kompozytor:"
 
-#: ../src/easytag.c:3379 ../src/et_core.c:2876
-#, c-format
-msgid "File: '%s'"
-msgstr "Plik: \"%s\""
+#: ../data/tag_area.ui.h:26
+msgid "Tag selected files with this composer"
+msgstr "Kompozytor z tego pola zostanie wstawiony do zaznaczonych plików"
 
-#: ../src/easytag.c:3429
-#, c-format
-msgid "Found one file in this directory and subdirectories"
-msgid_plural "Found %d files in this directory and subdirectories"
-msgstr[0] "Odnaleziono jeden plik w tym katalogu i jego podkatalogach"
-msgstr[1] "Odnaleziono %d pliki w tym katalogu i jego podkatalogach"
-msgstr[2] "Odnaleziono %d plików w tym katalogu i jego podkatalogach"
+#: ../data/tag_area.ui.h:27
+msgid "Orig. artist:"
+msgstr "Pierwotny wykonawca:"
 
-#: ../src/easytag.c:3436
-#, c-format
-msgid "Found one file in this directory"
-msgid_plural "Found %d files in this directory"
-msgstr[0] "Odnaleziono jeden plik w tym katalogu"
-msgstr[1] "Odnaleziono %d pliki w tym katalogu"
-msgstr[2] "Odnaleziono %d plików w tym katalogu"
+#: ../data/tag_area.ui.h:28
+msgid "Tag selected files with this original artist"
+msgstr ""
+"Pierwotny wykonawca z tego pola zostanie wstawiony do zaznaczonych plików"
 
-#: ../src/easytag.c:3458
-msgid "No file found in this directory and subdirectories"
-msgstr "Nie odnaleziono żadnego pliku w tym katalogu i jego podkatalogach"
+#: ../data/tag_area.ui.h:29
+msgid "Copyright:"
+msgstr "Prawa autorskie:"
 
-#: ../src/easytag.c:3460
-msgid "No file found in this directory"
-msgstr "Nie odnaleziono żadnego pliku w tym katalogu"
+#: ../data/tag_area.ui.h:30
+msgid "Tag selected files with this copyright"
+msgstr "Prawa autorskie z tego pola zostaną wstawione do zaznaczonych plików"
 
-#: ../src/easytag.c:3528
-#, c-format
-msgid "Error opening directory '%s' (%s)"
-msgstr "BÅ‚Ä…d podczas otwierania katalogu \"%s\" (%s)"
+#: ../data/tag_area.ui.h:31
+msgid "URL:"
+msgstr "Adres URL:"
 
-#: ../src/easytag.c:3564
-#, c-format
-msgid "Cannot read directory (%s)"
-msgstr "Nie można odczytać katalogu (%s)"
+#: ../data/tag_area.ui.h:32
+msgid "Tag selected files with this URL"
+msgstr "Adres URL z tego pola zostaną wstawione do zaznaczonych plików"
 
-#: ../src/easytag.c:3584
-msgid "Searching for audio files…"
-msgstr "Wyszukiwanie plików dźwiękowych…"
+#: ../data/tag_area.ui.h:33
+msgid "Encoded by:"
+msgstr "Skompresowany przez:"
 
-#: ../src/easytag.c:3585
-msgid "Searching"
-msgstr "Wyszukiwanie"
+#: ../data/tag_area.ui.h:34
+msgid "Tag selected files with this encoder name"
+msgstr ""
+"Nazwisko osoby, przez którą plik został utworzony z tego pola zostanie "
+"wstawione do zaznaczonych plików"
 
-#: ../src/easytag.c:4251
-msgid "Select a directory to browse"
-msgstr "Proszę wybrać katalog do przeglądania"
+#: ../data/tag_area.ui.h:35
+msgid "Common"
+msgstr "Ogólne"
 
-#. Menu items
-#: ../src/easytag.c:4397
-msgid "Tag selected files with this field"
-msgstr "Wartość z tego pola zostanie wstawiona do zaznaczonych plików"
+#: ../data/tag_area.ui.h:36
+msgid "You can use drag and drop to add an image"
+msgstr "Można tutaj przeciągnąć i upuścić obraz"
 
-#: ../src/easytag.c:4409 ../src/scan_dialog.c:2128
-msgid "Convert '_' and '%20' to spaces"
-msgstr "Zamiana \"_\" i \"%20\" na spacje"
+#: ../data/tag_area.ui.h:37
+msgid "Add images to the tag"
+msgstr "Dodaje obrazy do etykiety"
 
-#: ../src/easytag.c:4416 ../src/scan_dialog.c:2130
-msgid "Convert ' ' to '_'"
-msgstr "Zamiana \" \" na \"_\""
+#: ../data/tag_area.ui.h:38
+msgid "Remove selected images from the tag"
+msgstr "Usuwa zaznaczone obrazy z etykiety"
 
-#: ../src/easytag.c:4427
-msgid "All uppercase"
-msgstr "Wszystko wielkÄ… literÄ…"
+#: ../data/tag_area.ui.h:39
+msgid "Save the selected images to files"
+msgstr "Zapisuje zaznaczone obrazy do plików"
 
-#: ../src/easytag.c:4434
-msgid "All lowercase"
-msgstr "Wszystko małą literą"
+#: ../data/tag_area.ui.h:40
+msgid "Edit image properties"
+msgstr "Modyfikuje właściwości obrazu"
 
-#: ../src/easytag.c:4441
-msgid "First letter uppercase"
-msgstr "Wielka pierwsza litera"
+#: ../data/tag_area.ui.h:41
+msgid "Tag selected files with these images"
+msgstr "Wstawia te obrazy do zaznaczonych plików"
 
-#: ../src/easytag.c:4448
-msgid "First letter uppercase of each word"
-msgstr "Wielka pierwsza litera każdego słowa"
-
-#: ../src/easytag.c:4459 ../src/prefs.c:1023 ../src/scan_dialog.c:2254
-msgid "Remove spaces"
-msgstr "Usuwanie spacji"
-
-#: ../src/easytag.c:4466
-msgid "Insert space before uppercase letter"
-msgstr "Wstawianie spacji przed wielkÄ… literÄ…"
-
-#: ../src/easytag.c:4473
-msgid "Remove duplicate spaces or underscores"
-msgstr "Usuwanie powtarzających się spacji lub znaków podkreślenia"
+#: ../data/tag_area.ui.h:42 ../src/tag_area.c:3282 ../src/tag_area.c:3285
+msgid "Images"
+msgstr "Obrazy"
 
-#: ../src/easytag.c:4480
-msgid "Remove all text"
-msgstr "Usuwanie całego tekstu"
+#: ../data/toolbar.ui.h:2
+msgid "First file"
+msgstr "Pierwszy plik"
 
-#: ../src/easytag.c:4499
-msgid "EasyTAG: Normal exit."
-msgstr "EasyTAG: prawidłowe zakończenie działania."
+#: ../data/toolbar.ui.h:3
+msgid "_Previous File"
+msgstr "Pop_rzedni plik"
 
-#: ../src/easytag.c:4551
-msgid "Do you want to save them before quitting?"
-msgstr "Zapisać je przed zakończeniem działania?"
+#: ../data/toolbar.ui.h:4
+msgid "Previous file"
+msgstr "Poprzedni plik"
 
-#: ../src/easytag.c:4578
-msgid "Do you really want to quit?"
-msgstr "Na pewno zakończyć działanie?"
+#: ../data/toolbar.ui.h:6
+msgid "Next file"
+msgstr "Następny plik"
 
-#: ../src/et_core.c:551
-#, c-format
-msgid "Error reading tag from ogg file (%s)"
-msgstr "BÅ‚Ä…d podczas odczytywania etykiety z pliku Ogg (%s)"
+#: ../data/toolbar.ui.h:8
+msgid "Last file"
+msgstr "Ostatni plik"
 
-#: ../src/et_core.c:580
-#, c-format
-msgid "Error reading tag from Opus file (%s)"
-msgstr "BÅ‚Ä…d podczas odczytywania etykiety z pliku Opus (%s)"
+#: ../data/toolbar.ui.h:9
+msgid "_Show Scanner"
+msgstr "Wyświetlanie _skanera"
 
-#: ../src/et_core.c:723
-#, c-format
-msgid "Automatic corrections applied for file '%s'."
-msgstr "Zastosowano automatyczne poprawki do pliku \"%s\"."
+#: ../data/toolbar.ui.h:10
+msgid "Show scanner"
+msgstr "Wyświetlanie skanera"
 
-#: ../src/et_core.c:2759
-msgid "ID3 Tag"
-msgstr "Etykieta ID3"
+#: ../data/toolbar.ui.h:12
+msgid "Remove tags"
+msgstr "Usuń etykiety"
 
-#: ../src/et_core.c:2765
-msgid "Ogg Vorbis Tag"
-msgstr "Etykieta Ogg Vorbis"
+#: ../data/toolbar.ui.h:13
+msgid "_Undo"
+msgstr "C_ofnij"
 
-#: ../src/et_core.c:2771
-msgid "FLAC Vorbis Tag"
-msgstr "Etykieta FLAC Vorbis"
+#: ../data/toolbar.ui.h:14
+msgid "Undo for file"
+msgstr "Cofnij dla pliku"
 
-#: ../src/et_core.c:2776
-msgid "APE Tag"
-msgstr "Etykieta APE"
+#: ../data/toolbar.ui.h:15
+msgid "R_edo"
+msgstr "_Ponów"
 
-#: ../src/et_core.c:2781
-msgid "MP4/M4A/AAC Tag"
-msgstr "Etykieta MP4/M4A/AAC"
+#: ../data/toolbar.ui.h:16
+msgid "Redo for file"
+msgstr "Ponów dla pliku"
 
-#: ../src/et_core.c:2787
-msgid "Wavpack Tag"
-msgstr "Etykieta WavPack"
+#: ../data/toolbar.ui.h:18
+msgid "Save changes to selected files"
+msgstr "Zapisz zmiany zaznaczonych plików"
 
-#: ../src/et_core.c:2793
-msgid "Opus Tag"
-msgstr "Etykieta Opus"
+#: ../data/toolbar.ui.h:20
+msgid "Browse directory tree"
+msgstr "Przeglądaj drzewo katalogów"
 
-#: ../src/et_core.c:2813
-msgid "MP3 File"
-msgstr "Plik MP3"
+#: ../data/toolbar.ui.h:22
+msgid "Browse artists and albums"
+msgstr "Przeglądaj wykonawców i albumy"
 
-#: ../src/et_core.c:2817
-msgid "MP2 File"
-msgstr "Plik MP2"
+#: ../data/toolbar.ui.h:24
+msgid "Invert file selection"
+msgstr "Odwróć zaznaczenie plików"
 
-#: ../src/et_core.c:2823
-msgid "Ogg Vorbis File"
-msgstr "Plik Ogg Vorbis"
+#: ../data/toolbar.ui.h:26
+msgid "Search filenames and tags"
+msgstr "Wyszukaj nazwy plików i etykiety"
 
-#: ../src/et_core.c:2829
-msgid "Speex File"
-msgstr "Plik Speex"
+#: ../data/toolbar.ui.h:27
+msgid "CDDB Search…"
+msgstr "Wyszukaj pliki w CDDB…"
 
-#: ../src/et_core.c:2835
-msgid "FLAC File"
-msgstr "Plik FLAC"
+#: ../data/toolbar.ui.h:28 ../src/cddb_dialog.c:2694
+msgid "CDDB Search"
+msgstr "Wyszukiwanie w CDDB"
 
-#: ../src/et_core.c:2840
-msgid "MusePack File"
-msgstr "Plik MusePack"
+#: ../data/toolbar.ui.h:30
+msgid "Generate a playlist"
+msgstr "Utwórz listę odtwarzania"
 
-#: ../src/et_core.c:2844
-msgid "Monkey's Audio File"
-msgstr "Plik Monkey's Audio"
+#: ../data/toolbar.ui.h:32
+msgid "Stop the current action"
+msgstr "Zatrzymaj bieżące działanie"
 
-#: ../src/et_core.c:2849
-msgid "MP4/AAC File"
-msgstr "Plik MP4/AAC"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:1
+msgid "Load on startup"
+msgstr "Wczytywanie podczas uruchamiania"
 
-#: ../src/et_core.c:2855
-msgid "Wavpack File"
-msgstr "Plik WavPack"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:3
+msgid "Default path"
+msgstr "Domyślna ścieżka"
 
-#: ../src/et_core.c:2861
-msgid "Opus File"
-msgstr "Plik Opus"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:7
+msgid "Show hidden directories while browsing"
+msgstr "Wyświetlanie ukrytych katalogów podczas przeglądania"
 
-#: ../src/et_core.c:2920 ../src/et_core.c:2975
-msgid "File not found"
-msgstr "Nie odnaleziono pliku"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:11
+msgid "CDDB server hostname for automatic search"
+msgstr "Nazwa serwera CDDB do automatycznego wyszukiwania"
 
-#: ../src/et_core.c:2925
-#, c-format
-msgid "Cannot query file information (%s)"
-msgstr "Nie można odpytać informacji o pliku (%s)"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:12
+msgid "The CDDB server to use for the automatic search"
+msgstr "Serwer CDDB do automatycznego wyszukiwania"
 
-#: ../src/et_core.c:2959
-msgid "Read-only file"
-msgstr "Plik tylko do odczytu"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:13
+msgid "CDDB server port for automatic search"
+msgstr "Port serwera CDDB do automatycznego wyszukiwania"
 
-#. And refresh the number of files in this directory
-#: ../src/et_core.c:3023
-#, c-format
-msgid "One file"
-msgid_plural "%u files"
-msgstr[0] "Jeden plik"
-msgstr[1] "%u pliki"
-msgstr[2] "%u plików"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:14
+msgid "The CDDB server port to use for the automatic search"
+msgstr "Port serwera CDDB do automatycznego wyszukiwania"
 
-#: ../src/et_core.c:3227
-#, c-format
-msgid "Images (%d)"
-msgstr "Obrazy (%d)"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:15
+msgid "CDDB server path for automatic search"
+msgstr "Ścieżka serwera CDDB do automatycznego wyszukiwania"
 
-#. Bitrate
-#: ../src/et_core.c:3269 ../src/flac_header.c:205
-#: ../src/monkeyaudio_header.c:86 ../src/mp4_header.cc:142
-#: ../src/mpeg_header.c:206 ../src/musepack_header.c:88
-#: ../src/ogg_header.c:401 ../src/opus_header.c:227 ../src/wavpack_header.c:78
-#, c-format
-msgid "%d kb/s"
-msgstr "%d kb/s"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:16
+msgid "The CDDB server path to use for the automatic search"
+msgstr "Ścieżka serwera CDDB do automatycznego wyszukiwania"
 
-#. Samplerate
-#: ../src/et_core.c:3274 ../src/flac_header.c:210
-#: ../src/monkeyaudio_header.c:91 ../src/mp4_header.cc:147
-#: ../src/mpeg_header.c:211 ../src/musepack_header.c:93
-#: ../src/ogg_header.c:406 ../src/opus_header.c:232 ../src/wavpack_header.c:83
-#, c-format
-msgid "%d Hz"
-msgstr "%d Hz"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:17
+msgid "CDDB server hostname for manual search"
+msgstr "Nazwa serwera CDDB do ręcznego wyszukiwania"
 
-#: ../src/et_core.c:3420 ../src/scan_dialog.c:688
-#, c-format
-msgid "Could not convert filename '%s' into system filename encoding"
-msgstr ""
-"Nie można przekonwertować nazwy pliku \"%s\" na systemowe kodowanie znaków"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:18
+msgid "The CDDB server to use for a manual search"
+msgstr "Serwer CDDB do ręcznego wyszukiwania"
 
-#: ../src/et_core.c:3422
-msgid "Try setting the environment variable G_FILENAME_ENCODING."
-msgstr "Proszę spróbować ustawić zmienną środowiskową G_FILENAME_ENCODING."
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:19
+msgid "CDDB server port for manual search"
+msgstr "Port serwera CDDB do ręcznego wyszukiwania"
 
-#: ../src/et_core.c:3423 ../src/scan_dialog.c:690
-msgid "Filename translation"
-msgstr "Tłumaczenie nazw plików"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:20
+msgid "The CDDB server port to use for a manual search"
+msgstr "Port serwera CDDB do ręcznego wyszukiwania"
 
-#: ../src/et_core.c:4129
-#, c-format
-msgid "Error writing tag type %d to file %s (%s)"
-msgstr "BÅ‚Ä…d podczas zapisywania etykiety typu %d do pliku %s (%s)"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:21
+msgid "CDDB server path for manual search"
+msgstr "Ścieżka serwera CDDB do ręcznego wyszukiwania"
 
-#. Mode
-#. Mode
-#. mpeg4ip library seems to always return -1
-#. Mode
-#: ../src/flac_header.c:215 ../src/mp4_header.cc:153 ../src/ogg_header.c:411
-#: ../src/opus_header.c:237 ../src/wavpack_header.c:88
-msgid "Channels:"
-msgstr "Kanały:"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:22
+msgid "The CDDB server path to use for a manual search"
+msgstr "Ścieżka serwera CDDB do ręcznego wyszukiwania"
 
-#: ../src/flac_tag.c:131 ../src/flac_tag.c:850 ../src/flac_tag.c:860
-#, c-format
-msgid "Error while opening file: '%s' as FLAC (%s)."
-msgstr "BÅ‚Ä…d podczas otwierania pliku: \"%s\" jako FLAC (%s)."
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:23
+msgid "Use DLM to match CDDB results to files"
+msgstr "Używanie DLM do dopasowywania wyników CDDB do plików"
 
-#: ../src/flac_tag.c:352 ../src/ogg_tag.c:304
-#, c-format
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:25
 msgid ""
-"The year value '%s' seems to be invalid in file '%s'. The information will "
-"be lost while saving tag."
-msgstr ""
-"Wartość roku \"%s\" w pliku \"%s\" jest nieprawidłowa. Informacja zostanie "
-"utracona podczas zapisywania etykiety."
+"Select the file with the position which matches the position of the CDDB "
+"result"
+msgstr "Wybór pliku z położeniem pasującym do położenia wyniku CDDB"
 
-#: ../src/flac_tag.c:1061
-#, c-format
-msgid "Picture block isn't valid: '%s'"
-msgstr "Nieprawidłowy blok obrazu: \"%s\""
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:27
+msgid "Enable proxy for remote CDDB"
+msgstr "Włączenie pośrednika dla zdalnego serwera CDDB"
 
-#: ../src/flac_tag.c:1094
-#, c-format
-msgid "Error: Failed to write comments to file '%s' (%s)."
-msgstr "Błąd: zapisanie komentarzy do pliku \"%s\" się nie powiodło (%s)."
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:29
+msgid "CDDB proxy hostname"
+msgstr "Nazwa serwera pośrednika CDDB"
 
-#: ../src/flac_tag.c:1099 ../src/ogg_tag.c:1161
-#, c-format
-msgid "Written tag of '%s'"
-msgstr "Zapisano etykietÄ™ pliku \"%s\""
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:31
+msgid "CDDB proxy port"
+msgstr "Port pośrednika CDDB"
 
-#: ../src/id3_tag.c:205
-#, c-format
-msgid "Error while reading file: '%s' (%s)"
-msgstr "BÅ‚Ä…d podczas odczytywania pliku: \"%s\" (%s)"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:33
+msgid "CDDB proxy username"
+msgstr "Nazwa użytkownika pośrednika CDDB"
 
-#: ../src/id3_tag.c:217
-#, c-format
-msgid ""
-"As the following corrupted file '%s' will cause an error in id3lib, it will "
-"not be processed"
-msgstr ""
-"Uszkodzony plik \"%s\" spowoduje błąd w bibliotece id3lib, więc nie zostanie "
-"on przetwarzany"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:35
+msgid "CDDB proxy password"
+msgstr "Hasło pośrednika CDDB"
 
-#: ../src/id3_tag.c:219
-msgid "Corrupted file"
-msgstr "Uszkodzony plik"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:37
+msgid "Run the scanner on CDDB results"
+msgstr "Wykonywanie skanera na wynikach CDDB"
 
-#: ../src/id3_tag.c:592
-#, c-format
-msgid "Removed tag of '%s'"
-msgstr "Usunięto etykietę z pliku \"%s\""
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:39
+msgid "The fields to use in a manual CDDB search"
+msgstr "Pola używane w ręcznym wyszukiwaniu CDDB"
 
-#: ../src/id3_tag.c:596 ../src/id3_tag.c:696
-#, c-format
-msgid "Error while removing ID3v1 tag of '%s' (%s)"
-msgstr "BÅ‚Ä…d podczas usuwania etykiety ID3v1 pliku \"%s\" (%s)"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:40
+msgid "Which fields to search for matches of the returned CDDB results"
+msgstr "Które pola przeszukiwać dla zwróconych wyników CDDB"
 
-#: ../src/id3_tag.c:598 ../src/id3_tag.c:668
-#, c-format
-msgid "Error while removing ID3v2 tag of '%s' (%s)"
-msgstr "BÅ‚Ä…d podczas usuwania etykiety ID3v2 pliku \"%s\" (%s)"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:41
+msgid "The categories to use in a CDDB search"
+msgstr "Kategorie używane w wyszukiwaniu CDDB"
 
-#: ../src/id3_tag.c:617
-#, c-format
-msgid "Error while updating ID3v2 tag of '%s' (%s)"
-msgstr "BÅ‚Ä…d podczas uaktualniania etykiety ID3v2 pliku \"%s\" (%s)"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:42
+msgid "Which categories to search for matches in the returned CDDB results"
+msgstr "Które kategorie przeszukiwać dla zwróconych wyników CDDB"
+
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:43
+msgid "The tag fields to set when matching against CDDB results"
+msgstr "Pola etykiet ustawiane podczas dopasowywania do wyników CDDB"
 
-#: ../src/id3_tag.c:645
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:44
 msgid ""
-"You have tried to save this tag to Unicode but it was detected that your "
-"version of id3lib is buggy"
+"Which tag fields should be set when matching against selected files and CDDB "
+"results"
 msgstr ""
-"Próbowano zapisać tę etykietę w unikodzie, ale wykryto wersję biblioteki "
-"id3lib z błędami"
+"Które pola etykiet ustawiać podczas dopasowywania zaznaczonych plików i "
+"wyników CDDB"
 
-#: ../src/id3_tag.c:647
-#, c-format
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:51
+msgid "Show changed files in bold"
+msgstr "Wyświetlanie zmienionych plików jako pogrubione"
+
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:52
 msgid ""
-"If you reload this file, some characters in the tag may not be displayed "
-"correctly. Please, apply the patch src/id3lib/"
-"patch_id3lib_3.8.3_UTF16_writing_bug.diff to id3lib, which is available in "
-"the EasyTAG package sources.\n"
-"Note that this message will appear only once.\n"
-"\n"
-"File: %s"
+"Whether to highlight changed files in the file list by making them bold, or "
+"alternatively by making them red"
 msgstr ""
-"Jeśli ten plik zostanie ponownie wczytany, to niektóre znaki w etykiecie "
-"mogą nie być poprawnie wyświetlane. Proszę zastosować łatę src/id3lib/"
-"patch_id3lib_3.8.3_UTF16_writing_bug.diff na bibliotece id3lib, która jest "
-"dostępna w źródłach pakietu EasyTAG.\n"
-"Proszę zauważyć, że ten komunikat pojawi się tylko raz.\n"
-"\n"
-"Plik: %s"
+"Czy wyróżniać zmienione pliki na liście plików przez pogrubienie lub "
+"oznaczanie ich na czerwono"
 
-#: ../src/id3_tag.c:654
-msgid "Buggy id3lib"
-msgstr "Biblioteka id3lib z błędami"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:55
+msgid "How to sort audio files in the file list"
+msgstr "Jak porządkować pliki dźwiękowe na liście plików"
 
-#: ../src/id3_tag.c:688
-#, c-format
-msgid "Error while updating ID3v1 tag of '%s' (%s)"
-msgstr "BÅ‚Ä…d podczas aktualizowania etykiety ID3v1 pliku \"%s\" (%s)"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:56
+msgid "Sort files in ascending or descending order for the selected type"
+msgstr "Porządkowanie plików rosnąco lub malejąco dla zaznaczonego typu"
 
-#: ../src/id3_tag.c:702 ../src/id3v24_tag.c:1108
-#, c-format
-msgid "Updated tag of '%s'"
-msgstr "Zaktualizowano etykietÄ™ pliku \"%s\""
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:57
+msgid "Number of log lines"
+msgstr "Maksymalna liczba wierszy dziennika"
 
-#: ../src/id3_tag.c:721
-msgid "No error reported"
-msgstr "Nie zgłoszono błędów"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:61
+msgid "Use a non-standard character encoding when reading ID3 tags"
+msgstr "Używanie niestandardowego kodowania znaków do odczytywania etykiet ID3"
 
-#: ../src/id3_tag.c:723
-msgid "No available memory"
-msgstr "Brak dostępnej pamięci"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:65
+msgid "Write ID3v1 tags"
+msgstr "Zapisywanie etykiet ID3v1"
 
-#: ../src/id3_tag.c:725
-msgid "No data to parse"
-msgstr "Brak danych do przetwarzania"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:67
+msgid "The character set for writing ID3v1 tags"
+msgstr "Zestaw znaków do zapisywania etykiet ID3v1"
 
-#: ../src/id3_tag.c:727
-msgid "Improperly formatted data"
-msgstr "Niepoprawnie sformatowane dane"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:68
+msgid "Choose the character set to be used when writing ID3v1 tags"
+msgstr "Wybór zestawu znaków do zapisywania etykiet ID3v1"
 
-#: ../src/id3_tag.c:729
-msgid "No buffer to write to"
-msgstr "Brak bufora do zapisu"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:69
+msgid "Encoding options when writing ID3v1 tags"
+msgstr "Opcje kodowania podczas zapisywania etykiet ID3v1"
 
-#: ../src/id3_tag.c:731
-msgid "Buffer is too small"
-msgstr "Bufor jest za mały"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:70
+msgid ""
+"Additional options to pass to iconv() when converting between encodings when "
+"writing ID3v1 tags"
+msgstr ""
+"Dodatkowe opcje do przekazania do iconv() podczas konwertowania między "
+"kodowania podczas zapisywania etykiet ID3v1"
 
-#: ../src/id3_tag.c:733
-msgid "Invalid frame ID"
-msgstr "Nieprawidłowy identyfikator ramki"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:71
+msgid "The character set for reading ID3v1 and ID3v2 tags"
+msgstr "Zestaw znaków do odczytywania etykiet ID3v1 i ID3v2"
 
-#: ../src/id3_tag.c:735
-msgid "Requested field not found"
-msgstr "Nie odnaleziono żądanego pola"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:73
+msgid "Write ID3v2 tags"
+msgstr "Zapisywanie etykiet ID3v2"
 
-#: ../src/id3_tag.c:737
-msgid "Unknown field type"
-msgstr "Nieznany typ pola"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:75
+msgid "Enable ID3v2.4 support"
+msgstr "Włączenie obsługi ID3v2.4"
 
-#: ../src/id3_tag.c:739
-msgid "Tag is already attached to a file"
-msgstr "Plik już posiada dołączoną etykietę"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:76
+msgid "Whether to write ID3v2.4 tags when ID3v2 support is enabled"
+msgstr "Czy zapisywać etykiety ID3v2.4, kiedy obsługa ID3v2 jest włączona"
 
-#: ../src/id3_tag.c:741
-msgid "Invalid tag version"
-msgstr "Nieprawidłowa wersja etykiety"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:77
+msgid "Convert old ID3 tag versions to new ones"
+msgstr "Aktualizowanie poprzednich wersji etykiet ID3 do nowych"
 
-#: ../src/id3_tag.c:743
-msgid "No file to parse"
-msgstr "Brak pliku do przetwarzania"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:81
+msgid "Use CRC-32 in ID3v2 tags"
+msgstr "Używanie CRC-32 w etykietach ID3v2"
 
-#: ../src/id3_tag.c:745
-msgid "Attempting to write to a read-only file"
-msgstr "Próba zapisania do pliku tylko do odczytu"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:85
+msgid "Use Unicode character encoding in ID3v2 tags"
+msgstr "Używanie kodowania znaków Unicode w etykietach ID3v2"
 
-#: ../src/id3_tag.c:747
-msgid "Error in compression/uncompression"
-msgstr "BÅ‚Ä…d podczas kompresji/dekompresji"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:86
+msgid "Whether to use a Unicode character set when writing ID3v2 tags"
+msgstr "Czy używać zestawu znaków Unicode do zapisywania etykiet ID3v2"
 
-#: ../src/id3_tag.c:749
-msgid "Unknown error message"
-msgstr "Nieznany komunikat błędu"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:87
+msgid "The Unicode character set for writing ID3v2 tags"
+msgstr "Zestaw znaków Unicode do zapisywania etykiet ID3v2"
 
-#: ../src/id3_tag.c:1357
-#, c-format
-msgid "Error while creating temporary file: '%s'"
-msgstr "BÅ‚Ä…d podczas tworzenia pliku tymczasowego: \"%s\""
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:88
+msgid "Choose the Unicode character set to be used when writing ID3v2 tags"
+msgstr "Wybór zestawu znaków Unicode do zapisywania etykiet ID3v2"
 
-#: ../src/id3_tag.c:1364
-msgid "Error while creating temporary file"
-msgstr "BÅ‚Ä…d podczas tworzenia pliku tymczasowego"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:89
+msgid "The character set for writing ID3v2 tags"
+msgstr "Zestaw znaków do zapisywania etykiet ID3v2"
 
-#: ../src/id3_tag.c:1384
-#, c-format
-msgid "Error while writing to file: '%s' (%s)"
-msgstr "BÅ‚Ä…d podczas zapisywania do pliku: \"%s\" (%s)"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:90
+msgid ""
+"Override the typical Unicode character set to be used when writing ID3v2 tags"
+msgstr ""
+"Zastępowanie typowego zestawu znaków Unicode podczas zapisywania etykiet "
+"ID3v2"
 
-#. Translators: The first string is a filename, the
-#. * second string is the number of bytes that were
-#. * missing (not read for some reason) while reading from
-#. * the file.
-#.
-#: ../src/id3v24_tag.c:1563
-#, c-format
-msgid "Cannot write tag of file ‘%s’ (a byte was missing)"
-msgid_plural "Cannot write tag of file ‘%s’ (%s bytes were missing)"
-msgstr[0] "Nie można zapisać etykiety w pliku \"%s\" (brak jednego bajtu)"
-msgstr[1] "Nie można zapisać etykiety w pliku \"%s\" (brak %s bajtów)"
-msgstr[2] "Nie można zapisać etykiety w pliku \"%s\" (brak %s bajtów)"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:91
+msgid "Encoding options when writing ID3v2 tags"
+msgstr "Opcje kodowania podczas zapisywania etykiet ID3v2"
 
-#: ../src/id3v24_tag.c:1584
-#, c-format
-msgid "Cannot save tag of file '%s'"
-msgstr "Nie można zapisać etykiety pliku \"%s\""
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:92
+msgid ""
+"Additional options to pass to iconv() when converting between encodings when "
+"writing ID3v2 tags"
+msgstr ""
+"Dodatkowe opcje do przekazania do iconv() podczas konwertowania między "
+"kodowania podczas zapisywania etykiet ID3v2"
 
-#: ../src/id3v24_tag.c:1595
-#, c-format
-msgid "Size error while saving tag of '%s'"
-msgstr "BÅ‚Ä…d rozmiaru podczas etykiety pliku \"%s\""
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:93
+msgid "Automatically complete the date"
+msgstr "Automatyczne uzupełnianie daty"
 
-#: ../src/log.c:100
-msgid "Log"
-msgstr "Dziennik"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:95
+msgid "Pad the disc number tag field"
+msgstr "Uzupełnianie pola etykiety numeru płyty"
 
-#: ../src/misc.c:720
-msgid "You must type a program name"
-msgstr "Należy wprowadzić nazwę programu"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:97
+msgid "The length of the disc number field"
+msgstr "Długość pola numeru płyty"
 
-#: ../src/misc.c:721
-msgid "Program Name Error"
-msgstr "BÅ‚Ä…d nazwy programu"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:98
+msgid ""
+"The length of the disc number field, which controls if the field is padded "
+"with leading zeroes"
+msgstr "Długość pola numeru płyty, co kontroluje uzupełnianie pola zerami"
 
-#: ../src/misc.c:800
-#, c-format
-msgid "Executed command: %s"
-msgstr "Wykonano polecenie: %s"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:100
+msgid ""
+"Whether to, when adding cover art, automatically select the type for an "
+"image based on its filename"
+msgstr ""
+"Czy podczas dodawania okładki automatycznie wybierać typ obrazu na podstawie "
+"nazwy pliku"
 
-#: ../src/misc.c:807
-#, c-format
-msgid "Failed to launch program: %s"
-msgstr "Uruchomienie programu się nie powiodło: %s"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:101
+msgid "Pad the track number tag field"
+msgstr "Uzupełnianie pola etykiety numeru ścieżki"
 
-#: ../src/misc.c:824
-msgid "Select File"
-msgstr "Wybierz plik"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:103
+msgid "The length of the track number field"
+msgstr "Długość pola numeru ścieżki"
 
-#: ../src/misc.c:830
-msgid "Select Directory"
-msgstr "Wybierz katalog"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:104
+msgid ""
+"The length of the track number field, which controls if the field is padded "
+"with leading zeroes"
+msgstr "Długość pola numeru ścieżki, co kontroluje uzupełnianie pola zerami"
 
-#: ../src/misc.c:1142
-msgid "Generate Playlist"
-msgstr "Utworzenie listy odtwarzania"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:107
+msgid "Convert spaces and underscores when filling tag fields"
+msgstr "Zmienianie spacji i podkreśleń podczas wypełniania pól etykiet"
 
-#: ../src/misc.c:1166
-msgid "M3U Playlist Name"
-msgstr "Nazwa listy odtwarzania M3U"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:109
+#, no-c-format
+msgid ""
+"Whether to convert to spaces (and %20) or underscores when filling tag "
+"fields from filenames"
+msgstr ""
+"Czy zmieniać na spacje (i %20) lub podkreślenia podczas wypełniania pól "
+"etykiet z nazw plików"
 
-#: ../src/misc.c:1181
-msgid "Use directory name"
-msgstr "Użycie nazwy katalogu"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:110
+msgid "Overwrite tag field"
+msgstr "Zastępowanie pól etykiet"
 
-#. Playlist options
-#: ../src/misc.c:1198
-msgid "Playlist Options"
-msgstr "Opcje listy odtwarzania"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:112
+msgid "Set the default comment"
+msgstr "Ustawianie domyślnego komentarza"
 
-#: ../src/misc.c:1204
-msgid "Include only the selected files"
-msgstr "Dołączenie tylko zaznaczonych plików"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:114
+msgid "Default comment for filling tags"
+msgstr "Domyślny komentarz do wypełniania etykiet"
 
-#: ../src/misc.c:1207
-msgid ""
-"If activated, only the selected files will be written in the playlist file. "
-"Else, all the files will be written."
-msgstr ""
-"Jeśli jest aktywowane, to tylko zaznaczone pliki będą zapisywanie do pliku "
-"listy odtwarzania. W przeciwnym przypadku, wszystkie pliki będą zapisywane."
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:115
+msgid "The default comment to use when filling tags"
+msgstr "Domyślny komentarz do wypełniania etykiet"
 
-#: ../src/misc.c:1210
-msgid "Use full path for files in playlist"
-msgstr "Użycie bezwzględnych ścieżek do plików"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:116
+msgid "Use the CRC-32 as the default comment"
+msgstr "Używanie CRC-32 jako domyślnego komentarza"
 
-#: ../src/misc.c:1213
-msgid "Use relative path for files in playlist"
-msgstr "Użycie względnych ścieżek do plików"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:130
+msgid "Run the current scanner when loading filenames from a file"
+msgstr "Wykonywanie bieżącego skanera podczas wczytywania nazw plików z pliku"
 
-#. Create playlist in parent directory
-#: ../src/misc.c:1219
-msgid "Create playlist in the parent directory"
-msgstr "Utworzenie listy odtwarzania w katalogu nadrzędnym"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:132
+msgid "Process these tag fields"
+msgstr "Przetwarzanie tych pól etykiet"
 
-#: ../src/misc.c:1222
-msgid "If activated, the playlist will be created in the parent directory."
-msgstr ""
-"Jeśli jest aktywowane, to listy odtwarzania zostanie utworzona w katalogu "
-"nadrzędnym."
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:133
+msgid "The tag fields to process when using the scanner"
+msgstr "Pola etykiet do przetwarzania podczas używania skanera"
 
-#. DOS Separator
-#: ../src/misc.c:1226
-msgid "Use DOS directory separator"
-msgstr "Użycie separatora katalogu systemu DOS"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:134
+msgid "Convert tag fields when processing"
+msgstr "Zmienianie pól etykiet podczas przetwarzania"
 
-#: ../src/misc.c:1232
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:136
+#, no-c-format
 msgid ""
-"This option replaces the UNIX directory separator '/' into DOS separator "
-"'\\'."
+"Whether to convert to spaces (and %20), underscores or other characters when "
+"processing tag fields"
 msgstr ""
-"Ta opcja zastępuje separator katalogu systemu UNIX \"/\" znakiem separatora "
-"systemu DOS \"\\\"."
+"Czy zmieniać na spacje (i %20), podkreślenia lub inne znaki podczas "
+"przetwarzania pól etykiet"
 
-#: ../src/misc.c:1241
-msgid "Playlist Content"
-msgstr "Zawartość listy odtwarzania"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:137
+msgid "Convert characters in tags"
+msgstr "Zmienianie znaków w etykietach"
 
-#: ../src/misc.c:1247
-msgid "Write only list of files"
-msgstr "Zapisywanie tylko listy plików"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:138
+msgid ""
+"Whether to convert characters of the tag from one value to another when "
+"processing tag fields"
+msgstr ""
+"Czy zmieniać znaki etykiety z jednej wartości na inną podczas przetwarzania "
+"pól etykiet"
 
-#: ../src/misc.c:1251
-msgid "Write info using filename"
-msgstr "Zapisywanie informacji używając nazw plików"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:139
+msgid "Convert the following characters when processing tag fields"
+msgstr "Zmienianie następujących znaków podczas przetwarzania pól etykiet"
 
-#: ../src/misc.c:1254
-msgid "Write info using:"
-msgstr "Zapisywanie informacji używając:"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:140
+msgid ""
+"Replace any matched sequence of characters with this string when processing "
+"tag fields"
+msgstr ""
+"Zastępowanie pasujących sekwencji znaków tym ciągiem podczas przetwarzania "
+"pól etykiet"
 
-#: ../src/misc.c:1468
-#, c-format
-msgid "Cannot write playlist file '%s'"
-msgstr "Nie można zapisać pliku listy odtwarzania \"%s\""
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:141
+msgid "Lower-case all characters"
+msgstr "Wszystkie małe litery"
 
-#: ../src/misc.c:1472
-msgid "Playlist File Error"
-msgstr "BÅ‚Ä…d pliku listy odtwarzania"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:143
+msgid "Upper-case all characters"
+msgstr "Wszystkie wielkie litery"
 
-#: ../src/misc.c:1480
-#, c-format
-msgid "Written playlist file '%s'"
-msgstr "Zapisano listÄ™ odtwarzania \"%s\""
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:145
+msgid "Upper-case the first letter of the tag"
+msgstr "Wielka pierwsza litera w etykiecie"
 
-#: ../src/misc.c:1544 ../src/scan_dialog.c:2747 ../src/scan_dialog.c:2809
-msgid "Invalid scanner mask"
-msgstr "Nieprawidłowa maska skanera"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:147
+msgid "Upper-case the first letter of each word"
+msgstr "Wielka pierwsza litera każdego słowa"
 
-#: ../src/misc.c:1908
-msgid "CD"
-msgstr "CD"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:149
+msgid "Upper-case prepositions"
+msgstr "Wielkie litery przyimków"
 
-#: ../src/misc.c:1930
-msgid "Find Files"
-msgstr "Znajdź pliki"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:151
+msgid "Detect roman numerals"
+msgstr "Wykrywanie liczb rzymskich"
+
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:155
+msgid "Insert spaces before capital letters"
+msgstr "Wstawianie spacji przed wielkÄ… literÄ…"
+
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:157
+msgid "Remove duplicate spaces"
+msgstr "Usuwanie podwójnych spacji"
+
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:159
+msgid "Playlist filename mask"
+msgstr "Maska nazwy pliku listy odtwarzania"
+
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:160
+msgid "The default filename mask to use for a new playlist"
+msgstr "Domyślna maska nazw plików do użycia w nowej liście odtwarzania"
+
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:161
+msgid "Use a filename mask when generating a playlist"
+msgstr "Używanie maski nazw plików podczas tworzenia listy odtwarzania"
+
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:162
+msgid "Whether to use a filename mask when creating playlists"
+msgstr "Czy używać maski nazw plików podczas tworzenia list odtwarzania"
+
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:163
+msgid "Create playlists with only the selected files"
+msgstr "Tworzenie list odtwarzania tylko z zaznaczonych plików"
+
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:165
+msgid "Use relative paths when creating playlists"
+msgstr "Używanie względnych ścieżek podczas tworzenia list odtwarzania"
 
-#: ../src/misc.c:1962
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:166
+msgid "Whether to use relative paths for files when creating playlists"
+msgstr ""
+"Czy używać względnych ścieżek do plików podczas tworzenia list odtwarzania"
+
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:167
+msgid "Create the playlist in the parent directory"
+msgstr "Tworzenie listy odtwarzania w katalogu nadrzędnym"
+
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:169
+msgid "Use DOS separators for playlists"
+msgstr "Używanie separatorów systemu DOS w listach odtwarzania"
+
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:171
+msgid "Content of generated playlists"
+msgstr "Zawartość tworzonych list odtwarzania"
+
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:172
 msgid ""
-"Type the word to search into files. Or type nothing to display all files."
+"Write a plain list of files, include extended information from the filename "
+"or extended information using a supplied mask"
 msgstr ""
-"Proszę wpisać wyraz do wyszukiwania lub pozostawić to pole puste, aby "
-"wyświetlić wszystkie pliki."
+"Zapisywanie zwykłej listy plików, w tym rozszerzonych informacji z nazw "
+"plików lub rozszerzonych informacji używając podanej maski"
 
-#. Where...
-#: ../src/misc.c:1968
-msgid "In:"
-msgstr "W:"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:173
+msgid "Playlist default mask"
+msgstr "Domyślna maska listy odtwarzania"
 
-#. Translators: This option is for the previous 'in' option. For instance,
-#. * translate this as "Search" "In:" "the Filename".
-#: ../src/misc.c:1973
-msgid "the Filename"
-msgstr "Nazwa pliku"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:174
+msgid "The default mask to use for files in a playlist"
+msgstr "Domyślna maska dla plików na liście odtwarzania"
 
-#. Translators: This option is for the previous 'in' option. For instance,
-#. * translate this as "Search" "In:" "the Tag".
-#. * Note: label changed to "the Tag" (to be the only one) to fix a Hungarian
-#. * grammatical problem (which uses one word to say "in the tag" like here)
-#.
-#: ../src/misc.c:1979
-msgid "the Tag"
-msgstr "Etykieta"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:175
+msgid "Search for files case-sensitively"
+msgstr "Rozróżnianie wielkości znaków podczas wyszukiwania plików"
 
-#. Property of the search
-#: ../src/misc.c:1990 ../src/prefs.c:335
-msgid "Case sensitive"
-msgstr "Rozróżnianie małych i wielkich liter"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:176
+msgid "Whether matches when searching for files are case-sensitive"
+msgstr "Czy rozróżniać wielkość znaków podczas wyszukiwania plików"
 
-#: ../src/misc.c:2217
-msgid "Ready to search…"
-msgstr "Gotowe do wyszukiwania…"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:177
+msgid "Search in filenames"
+msgstr "Wyszukiwanie w nazwach plików"
 
-#: ../src/misc.c:2437
-#, c-format
-msgid "Found one file"
-msgid_plural "Found %d files"
-msgstr[0] "Odnaleziono jeden plik"
-msgstr[1] "Odnaleziono %d pliki"
-msgstr[2] "Odnaleziono %d plików"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:178
+msgid "Perform the search on filenames"
+msgstr "Wykonywanie wyszukiwania nazw plików"
 
-#: ../src/misc.c:2722
-msgid "Load Filenames From a Text File"
-msgstr "Wczytaj nazwy plików z pliku tekstowego"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:179
+msgid "Search in tags"
+msgstr "Wyszukiwanie w etykietach"
 
-#: ../src/misc.c:2751
-msgid "File:"
-msgstr "Plik:"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:180
+msgid "Perform the search on tags"
+msgstr "Wykonywanie wyszukiwania etykiet"
 
-#. Button 'load'
-#. the signal attached to this button, to load the file, is placed after the LoadFileContentList definition
-#: ../src/misc.c:2770
-msgid " Load "
-msgstr " Wczytaj "
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:181
+msgid "Mask for filling tags from filenames"
+msgstr "Maska do wypełniania etykiet z nazw plików"
 
-#: ../src/misc.c:2788
-msgid "Content of Text File"
-msgstr "Zawartość pliku tekstowego"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:182
+msgid ""
+"The default mask to use when automatically filling tags with information "
+"from filenames"
+msgstr ""
+"Domyślna maska używana podczas automatycznego wypełniania etykiet za pomocą "
+"informacji z nazw plików"
 
-#. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2809 ../src/misc.c:2904
-msgid "Insert a blank line before the selected line"
-msgstr "Wstaw pusty wiersz przed wybranym wierszem"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:183
+msgid "Mask for renaming files"
+msgstr "Maska do zmiany nazwy plików"
 
-#. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2818 ../src/misc.c:2913
-msgid "Delete the selected line"
-msgstr "Usuń zaznaczony wiersz"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:184
+msgid "The default mask to use when renaming files"
+msgstr "Domyślna maska do zmiany nazw plików"
 
-#. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2827 ../src/misc.c:2922 ../src/misc.c:3403
-msgid "Delete all blank lines"
-msgstr "Usuń wszystkie puste wiersze"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:185
+msgid "Mask for renaming directories"
+msgstr "Maska do zmiany nazw katalogów"
 
-#. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2839 ../src/misc.c:2934
-msgid "Move up the selected line"
-msgstr "Przesuń do góry zaznaczony wiersz"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:186
+msgid "The default mask to use when renaming directories"
+msgstr "Domyślna maska do zmiany nazw katalogów"
 
-#. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2848 ../src/misc.c:2943
-msgid "Move down the selected line"
-msgstr "Przesuń w dół zaznaczony wiersz"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:187
+msgid "Use a mask when renaming directories"
+msgstr "Używanie maski podczas zmieniania nazw katalogów"
 
-#. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2860 ../src/misc.c:2955 ../src/misc.c:3427
-msgid "Reload"
-msgstr "Wczytaj ponownie"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:189
+msgid "Convert spaces and underscores when renaming files"
+msgstr "Zmienianie spacji i podkreśleń podczas zmienienia nazw plików"
 
-#: ../src/misc.c:2882
-msgid "List of Files"
-msgstr "Lista plików"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:190
+msgid "Whether to convert to spaces or underscores when renaming files"
+msgstr "Czy zmieniać na spacje lub podkreślenia podczas zmieniania nazw plików"
 
-#: ../src/misc.c:2977
-msgid "Selected line:"
-msgstr "Wybrany wiersz:"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:191
+msgid "How to modify filename extensions when renaming"
+msgstr "Jak modyfikować rozszerzenia nazw plików podczas zmieniania nazw"
 
-#: ../src/misc.c:2995
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:192
 msgid ""
-"When activating this option, after loading the filenames, the current "
-"selected scanner will be ran (the scanner window must be opened)."
+"Change the file extension to all lower-case, all upper-case or do not change "
+"it"
 msgstr ""
-"Jeśli jest aktywowane, to po wczytaniu nazw plików zostanie uruchomiony "
-"obecnie wybrany skaner (okno skanera musi być otwarte)."
+"Zmienianie rozszerzenia pliku na małe litery, wielkie litery lub "
+"niezmienianie"
 
-#: ../src/misc.c:3082
-#, c-format
-msgid "Cannot retrieve file info (%s)"
-msgstr "Nie można pobrać informacji o pliku (%s)"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:193
+msgid "Encoding options when renaming files"
+msgstr "Opcje kodowania podczas zmieniania nazw plików"
 
-#: ../src/misc.c:3145
-#, c-format
-msgid "Can't open file '%s' (%s)"
-msgstr "Nie można otworzyć pliku \"%s\" (%s)"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:194
+msgid ""
+"If the encoding of the filename does not match the filesystem encoding, "
+"choose whether to try another encoding, approximate the filesystem encoding "
+"with transliteration or discard the offending characters"
+msgstr ""
+"Jeśli kodowanie nazwy pliku nie zgadza się z kodowaniem systemu plików, to "
+"wybiera czy próbować innego kodowania, transliterować do kodowania systemu "
+"pliku, czy odrzucać niepasujące znaki"
 
-#: ../src/misc.c:3174
-#, c-format
-msgid "Error reading file (%s)"
-msgstr "BÅ‚Ä…d podczas odczytywania pliku (%s)"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:196
+msgid ""
+"Whether to replace illegal characters in a filename when using the rename "
+"function"
+msgstr ""
+"Czy zmieniać niedozwolone znaki w nazwach plików podczas używania funkcji "
+"zmiany nazw"
 
-#: ../src/misc.c:3391
-msgid "Insert a blank line"
-msgstr "Wstaw pusty wiersz"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:197
+msgid "Show the scanner mask editor"
+msgstr "Wyświetlanie edytora masek skanera"
 
-#: ../src/misc.c:3397
-msgid "Delete this line"
-msgstr "Usuń ten wiersz"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:198
+msgid "Whether to show the scanner mask editor in the tag scanner"
+msgstr "Czy wyświetlać edytor masek w skanerze etykiet"
 
-#: ../src/misc.c:3412
-msgid "Move up this line"
-msgstr "Przesuń ten wiersz do góry"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:199
+msgid "Show the scanner legend"
+msgstr "Wyświetlanie legendy skanera"
 
-#: ../src/misc.c:3418
-msgid "Move down this line"
-msgstr "Przesuń ten wiersz w dół"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:200
+msgid "Whether to show the scanner legend in the tag scanner"
+msgstr "Czy wyświetlać legendę skanera etykiet"
 
-#. Mode changed to profile name
-#: ../src/monkeyaudio_header.c:78 ../src/musepack_header.c:80
-#, c-format
-msgid "Profile:"
-msgstr "Profil:"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:201
+msgid "Show the scanner window on startup"
+msgstr "Wyświetlanie okna skanera podczas uruchamiania"
 
-#: ../src/mp4_header.cc:60 ../src/mp4_tag.cc:91 ../src/mp4_tag.cc:284
-msgid "MP4 format invalid"
-msgstr "Nieprawidłowy format MP4"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:203
+msgid "The scan mode"
+msgstr "Tryb skanowania"
 
-#: ../src/mp4_header.cc:68
-#, c-format
-msgid "File contains no audio track: '%s'"
-msgstr "Plik nie zawiera ścieżki dźwiękowej: \"%s\""
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:204
+msgid "Which type of scan to show in the scanner"
+msgstr "Który typ skanowania wyświetlać w skanerze"
 
-#: ../src/mp4_header.cc:79
-#, c-format
-msgid "Error reading properties from file: '%s'"
-msgstr "Błąd podczas odczytywania właściwości z pliku: \"%s\""
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:205
+msgid "Split Ogg title fields"
+msgstr "Dzielenie pól tytułu Ogg"
 
-#: ../src/mp4_header.cc:140 ../src/mpeg_header.c:204
-#, c-format
-msgid "~%d kb/s"
-msgstr "~%d kb/s"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:207
+msgid "Split Ogg artist fields"
+msgstr "Dzielenie pól wykonawcy Ogg"
 
-#: ../src/mp4_tag.cc:101 ../src/mp4_tag.cc:293
-#, c-format
-msgid "Error reading tags from file: '%s'"
-msgstr "BÅ‚Ä…d podczas odczytywania etykiet z pliku: \"%s\""
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:209
+msgid "Split Ogg album fields"
+msgstr "Dzielenie pól albumu Ogg"
 
-#: ../src/mpeg_header.c:64
-msgid "Stereo"
-msgstr "Stereo"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:211
+msgid "Split Ogg genre fields"
+msgstr "Dzielenie pól gatunku Ogg"
 
-#: ../src/mpeg_header.c:65
-msgid "Joint stereo"
-msgstr "Połączone stereo"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:213
+msgid "Split Ogg comment fields"
+msgstr "Dzielenie pól komentarza Ogg"
 
-#: ../src/mpeg_header.c:66
-msgid "Dual channel"
-msgstr "Dwukanałowy"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:215
+msgid "Split Ogg composer fields"
+msgstr "Dzielenie pól kompozytora Ogg"
 
-#: ../src/mpeg_header.c:67
-msgid "Single channel"
-msgstr "Jednokanałowy"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:217
+msgid "Split Ogg original artist fields"
+msgstr "Dzielenie pól pierwotnego wykonawcy Ogg"
 
-#. MPEG, Layer versions
-#: ../src/mpeg_header.c:194
-msgid "MPEG"
-msgstr "MPEG"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:219
+msgid "Page to show in the preferences dialog"
+msgstr "Strona do wyświetlenia w oknie preferencji"
 
-#. FIXME: Pass error back to calling function.
-#: ../src/ogg_header.c:227
-#, c-format
-msgid "Error while opening file: '%s' (%s)"
-msgstr "BÅ‚Ä…d podczas otwierania pliku: \"%s\" (%s)"
+#: ../data/org.gnome.EasyTAG.gschema.xml.h:220
+msgid "The page in the notebook of the preferences dialog"
+msgstr "Strona w notatniku okna preferencji"
 
-#: ../src/ogg_header.c:243
-#, c-format
-msgid ""
-"Ogg Vorbis: The specified bitstream does not exist or the file has been "
-"initialized improperly (file: '%s')."
-msgstr ""
-"Ogg Vorbis: podany strumień bitów nie istnieje lub plik został niepoprawnie "
-"zainicjowany (plik: \"%s\")."
+#: ../nautilus-extension/nautilus-easytag.c:229
+msgid "Open in EasyTAG"
+msgstr "Otwórz w EasyTAG"
 
-#: ../src/ogg_header.c:279
-#, c-format
-msgid "Ogg Vorbis: Read from media returned an error (file: '%s')."
-msgstr "Ogg Vorbis: odczyt z pliku zwrócił błąd (plik: \"%s\")."
+#: ../nautilus-extension/nautilus-easytag.c:230
+msgid "Open the selected directory in EasyTAG"
+msgstr "Otwiera zaznaczony katalog w programie EasyTAG"
 
-#: ../src/ogg_header.c:282
-#, c-format
-msgid "Ogg Vorbis: Bitstream is not Vorbis data (file: '%s')."
-msgstr "Ogg Vorbis: strumień bitów nie zawiera danych Vorbis (plik \"%s\")."
+#: ../nautilus-extension/nautilus-easytag.c:247
+msgid "Open with EasyTAG"
+msgstr "Otwórz za pomocą EasyTAG"
 
-#: ../src/ogg_header.c:285
-#, c-format
-msgid "Ogg Vorbis: Vorbis version mismatch (file: '%s')."
-msgstr "Ogg Vorbis: niezgodność wersji Vorbis (plik: \"%s\")."
+#: ../nautilus-extension/nautilus-easytag.c:248
+msgid "Open the selected files in EasyTAG"
+msgstr "Otwiera zaznaczone pliki w programie EasyTAG"
 
-#: ../src/ogg_header.c:288
-#, c-format
-msgid "Ogg Vorbis: Invalid Vorbis bitstream header (file: '%s')."
+#. Translators: put your own name here to appear in the about dialog.
+#: ../src/about.c:90
+msgid "translator-credits"
 msgstr ""
-"Ogg Vorbis: nieprawidłowy nagłówek strumienia bitów Vorbis (plik: \"%s\")."
+"Maciej Kasprzyk <kapsrzol at o2.pl>, 2002\n"
+"Artur Polaczyński <artii at o2.pl>, 2003-2004\n"
+"Tomasz Sałaciński <tsalacinski at gmail.com>, 2007\n"
+"Michał Smoczyk <msmoczyk at wp.pl>, 2007-2012\n"
+"Piotr DrÄ…g <piotrdrag at gmail.com>, 2012-2014\n"
+"Aviary.pl <gnomepl at aviary.pl>, 2012-2014"
 
-#: ../src/ogg_header.c:291
-#, c-format
-msgid ""
-"Ogg Vorbis: Internal logic fault, indicates a bug or heap/stack corruption "
-"(file: '%s')."
-msgstr ""
-"Ogg Vorbis: wewnętrzny błąd logiczny, oznacza to błąd lub uszkodzenie stosu "
-"(plik: \"%s\")."
+#: ../src/about.c:100
+msgid "View and edit tags in audio files"
+msgstr "Wyświetlanie i modyfikowanie etykiet w plikach dźwiękowych"
 
-#: ../src/ogg_header.c:337
-#, c-format
-msgid "Error: Failed to open file: '%s' as Vorbis (%s)."
-msgstr "Błąd: otwarcie pliku się nie powiodło: \"%s\" jako Vorbis (%s)."
+#: ../src/application.c:46
+msgid "Print the version and exit"
+msgstr "Wyświetla wersję i kończy działanie"
 
-#: ../src/ogg_tag.c:706 ../src/ogg_tag.c:881
+#. Starting messages
+#: ../src/application.c:177
 #, c-format
-msgid "Warning: The Ogg Vorbis file '%s' contains an ID3v2 tag."
-msgstr "Ostrzeżenie: plik Ogg Vorbis \"%s\" zawiera etykietę ID3v2."
+msgid "Starting EasyTAG version %s (PID: %d)…"
+msgstr "Uruchamianie EasyTAG %s (PID: %d)…"
 
-#: ../src/ogg_tag.c:1030 ../src/picture.c:1082
+#: ../src/application.c:183
 #, c-format
-msgid "Error with 'loader_write': %s"
-msgstr "BÅ‚Ä…d \"loader_write\": %s"
+msgid "Variable EASYTAGLANG defined, setting locale ‘%s’"
+msgstr "Podano zmiennÄ… EASYTAGLANG, stawianie lokalizacji \"%s\""
 
-#: ../src/ogg_tag.c:1045 ../src/picture.c:1005
+#: ../src/application.c:188
 #, c-format
-msgid "Error with 'loader_close': %s"
-msgstr "BÅ‚Ä…d \"loader_close\": %s"
+msgid "Setting locale: ‘%s’"
+msgstr "Ustawianie lokalizacji: \"%s\""
 
-#: ../src/picture.c:244 ../src/picture.c:269
+#: ../src/application.c:194
 #, c-format
-msgid "Image file not loaded: %s"
-msgstr "Plik obrazu nie został wczytany: %s"
+msgid "System locale is ‘%s’, using ‘%s’"
+msgstr "Lokalizacja systemu to \"%s\", używanie \"%s\""
+
+#: ../src/application.c:199
+msgid "Unable to create setting directories"
+msgstr "Nie można utworzyć katalogów ustawień"
 
-#: ../src/picture.c:261
+#: ../src/application.c:340
 #, c-format
-msgid "Cannot open file: '%s'"
-msgstr "Nie można otworzyć pliku: \"%s\""
+msgid "Website: %s"
+msgstr "Witryna: %s"
 
-#: ../src/picture.c:265
-msgid "Image File Error"
-msgstr "BÅ‚Ä…d pliku obrazu"
+#: ../src/application.c:349
+msgid "- Tag and rename audio files"
+msgstr "- nadawanie etykiet i zmienianie nazw plikach dźwiękowych"
 
-#: ../src/picture.c:276
-msgid "Image file loaded"
-msgstr "Wczytano plik obrazu"
+#: ../src/application.c:433 ../src/et_core.c:674
+#, c-format
+msgid "Error while querying information for file ‘%s’: %s"
+msgstr "BÅ‚Ä…d podczas odpytywania informacji o pliku \"%s\": %s"
 
-#: ../src/picture.c:334
-msgid "Add Images"
-msgstr "Dodaj obrazy"
+#: ../src/application.c:497
+#, c-format
+msgid "Cannot open path ‘%s’"
+msgstr "Nie można otworzyć ścieżki \"%s\""
 
-#: ../src/picture.c:344 ../src/picture.c:701
-msgid "All Files"
-msgstr "Wszystkie pliki"
+#: ../src/application_window.c:316 ../src/application_window.c:333
+#, c-format
+msgid "Do you really want to delete the file ‘%s’?"
+msgstr "Na pewno usunąć plik \"%s\"?"
 
-#: ../src/picture.c:350 ../src/picture.c:707
-msgid "PNG and JPEG"
-msgstr "PNG i JPEG"
+#: ../src/application_window.c:319 ../src/easytag.c:511 ../src/easytag.c:636
+msgid "Repeat action for the remaining files"
+msgstr "Powtórzenie działania dla pozostałych plików"
 
-#: ../src/picture.c:477
-#, c-format
-msgid "Image Properties %d/%d"
-msgstr "Właściwości obrazu %d/%d"
+#: ../src/application_window.c:321
+msgid "_Skip"
+msgstr "_Pomiń"
 
-#: ../src/picture.c:503
-msgid "Image Type"
-msgstr "Typ obrazu"
+#: ../src/application_window.c:323 ../src/application_window.c:337
+msgid "_Delete"
+msgstr "_Usuń"
 
-#. Description of the picture
-#: ../src/picture.c:561
-msgid "Image Description:"
-msgstr "Opis obrazu:"
+#: ../src/application_window.c:325 ../src/application_window.c:335
+msgid "Delete File"
+msgstr "Usuń pliki"
 
-#: ../src/picture.c:688
+#: ../src/application_window.c:362
 #, c-format
-msgid "Save Image %d/%d"
-msgstr "Zapisz obraz %d/%d"
+msgid "File ‘%s’ deleted"
+msgstr "Usunięto plik \"%s\""
 
-#: ../src/picture.c:763
+#: ../src/application_window.c:539
 #, c-format
-msgid "Image file not saved: %s"
-msgstr "Plik obrazu nie został zapisany: %s"
+msgid "Cannot delete file ‘%s’"
+msgstr "Nie można usunąć pliku \"%s\""
 
-#: ../src/picture.c:846
-msgid "JPEG image"
-msgstr "Obraz JPEG"
+#: ../src/application_window.c:560
+msgid "Some files were not deleted"
+msgstr "Niektóre pliki nie zostały usunięte"
 
-#: ../src/picture.c:848
-msgid "PNG image"
-msgstr "Obraz PNG"
+#: ../src/application_window.c:562
+msgid "All files have been deleted"
+msgstr "Wszystkie pliki zostały usunięte"
 
-#: ../src/picture.c:850
-msgid "GIF image"
-msgstr "Obraz GIF"
+#: ../src/application_window.c:901
+msgid "All tags have been removed"
+msgstr "Wszystkie etykiety zostały usunięte"
 
-#: ../src/picture.c:852
-msgid "Unknown image"
-msgstr "Nieznany obraz"
+#. Quit EasyTAG.
+#: ../src/application_window.c:2573
+msgid "Normal exit"
+msgstr "Prawidłowe zakończenie działania"
 
-#: ../src/picture.c:864
-msgid "32x32 pixel PNG file icon"
-msgstr "Ikona 32x32 piksele w formacie PNG"
+#: ../src/application_window.c:2610 ../src/browser.c:843
+msgid "Some files have been modified but not saved"
+msgstr "Niektóre pliki zostały zmodyfikowane, ale nie zostały zapisane"
 
-#: ../src/picture.c:866
-msgid "Other file icon"
-msgstr "Inny plik ikony"
+#: ../src/application_window.c:2611 ../src/browser.c:847 ../src/easytag.c:294
+#: ../src/easytag.c:515 ../src/easytag.c:639 ../src/easytag.c:647
+msgid "_Discard"
+msgstr "O_drzuć"
 
-#: ../src/picture.c:868
-msgid "Cover (front)"
-msgstr "Okładka (przód)"
+#: ../src/application_window.c:2613 ../src/browser.c:849 ../src/easytag.c:295
+#: ../src/easytag.c:517 ../src/easytag.c:524 ../src/easytag.c:641
+#: ../src/easytag.c:648 ../src/playlist_dialog.c:656 ../src/tag_area.c:1853
+msgid "_Save"
+msgstr "_Zapisz"
 
-#: ../src/picture.c:870
-msgid "Cover (back)"
-msgstr "Okładka (tył)"
+#: ../src/application_window.c:2617 ../src/application_window.c:2655
+#: ../src/easytag.c:300
+msgid "Quit"
+msgstr "Zakończ"
 
-#: ../src/picture.c:872
-msgid "Leaflet page"
-msgstr "Środek okładki"
+#: ../src/application_window.c:2620
+msgid "Do you want to save them before quitting?"
+msgstr "Zapisać je przed zakończeniem działania?"
 
-#: ../src/picture.c:874
-msgid "Media (e.g. label side of CD)"
-msgstr "Nośnik (np. strona z nadrukiem na CD)"
+#: ../src/application_window.c:2649
+msgid "Do you really want to quit?"
+msgstr "Na pewno zakończyć działanie?"
 
-#: ../src/picture.c:876
-msgid "Lead artist/lead performer/soloist"
-msgstr "ProwadzÄ…cy wykonawca/solista"
+#: ../src/browser.c:553
+msgid "New default directory selected for browser"
+msgstr "Wybrano nowy katalog domyślny dla przeglądarki"
 
-#: ../src/picture.c:878
-msgid "Artist/performer"
-msgstr "Wykonawca"
+#: ../src/browser.c:846
+msgid "Do you want to save them before changing directory?"
+msgstr "Zapisać je przed zmianą katalogu?"
 
-#: ../src/picture.c:880
-msgid "Conductor"
-msgstr "Dyrygent"
+#: ../src/browser.c:853
+msgid "Confirm Directory Change"
+msgstr "Potwierdzenie zmiany katalogu"
 
-#: ../src/picture.c:882
-msgid "Band/Orchestra"
-msgstr "Zespół/orkiestra"
+#: ../src/browser.c:2531
+msgid "<All albums>"
+msgstr "<Wszystkie albumy>"
 
-#: ../src/picture.c:886
-msgid "Lyricist/text writer"
-msgstr "Tekściarz/autor tekstów"
+#: ../src/browser.c:4154
+#, c-format
+msgid "Rename the directory ‘%s’ to:"
+msgstr "Zmiana nazwy katalogu \"%s\" na:"
 
-#: ../src/picture.c:888
-msgid "Recording location"
-msgstr "Miejsce nagrywania"
+#: ../src/browser.c:4294
+msgid "You must type a directory name"
+msgstr "Należy wprowadzić nazwę katalogu"
 
-#: ../src/picture.c:890
-msgid "During recording"
-msgstr "Podczas nagrywania"
+#: ../src/browser.c:4295 ../src/browser.c:4317
+msgid "Directory Name Error"
+msgstr "BÅ‚Ä…d nazwy katalogu"
 
-#: ../src/picture.c:892
-msgid "During performance"
-msgstr "Podczas występu"
+#: ../src/browser.c:4313
+#, c-format
+msgid "Could not convert ‘%s’ into filename encoding"
+msgstr "Nie można przekonwertować \"%s\" na kodowanie znaków nazwy pliku"
 
-#: ../src/picture.c:894
-msgid "Movie/video screen capture"
-msgstr "Zrzut ekranu z filmu/wideo"
+#: ../src/browser.c:4316
+msgid "Please use another name."
+msgstr "Proszę użyć innej nazwy."
 
-#: ../src/picture.c:896
-msgid "A bright colored fish"
-msgstr "Jaskrawo pokolorowana ryba"
+#: ../src/browser.c:4387
+#, c-format
+msgid "The directory name ‘%s’ already exists."
+msgstr "Nazwa katalogu \"%s\" już istnieje."
 
-#: ../src/picture.c:898
-msgid "Illustration"
-msgstr "Ilustracja"
+#: ../src/browser.c:4388 ../src/easytag.c:696
+msgid "Rename File Error"
+msgstr "BÅ‚Ä…d zmiany nazwy pliku"
 
-#: ../src/picture.c:900
-msgid "Band/Artist logotype"
-msgstr "Logo zespołu/wykonawcy"
+#: ../src/browser.c:4426 ../src/browser.c:4455
+msgid "Rename Directory Error"
+msgstr "BÅ‚Ä…d zmiany nazwy katalogu"
 
-#: ../src/picture.c:902
-msgid "Publisher/studio logotype"
-msgstr "Logo wydawcy/studia"
+#: ../src/browser.c:4494
+msgid "Directory renamed"
+msgstr "Zmieniono nazwÄ™ katalogu"
 
-#: ../src/picture.c:906
-msgid "Unknown image type"
-msgstr "Nieznany typ obrazu"
+#: ../src/cddb_dialog.c:271
+#, c-format
+msgid ""
+"Album: ‘%s’, artist: ‘%s’, length: ‘%s’, year: ‘%s’, genre: ‘%s’, disc ID: "
+"‘%s’"
+msgstr ""
+"Album \"%s\", wykonawca: \"%s\", długość: \"%s\", rok: \"%s\", gatunek: \"%s"
+"\", identyfikator płyty: \"%s\""
 
-#: ../src/picture.c:936 ../src/picture.c:947
-msgid "pixels"
-msgstr "pikseli"
+#: ../src/cddb_dialog.c:589
+#, c-format
+msgid "Resolving host '%s'…"
+msgstr "Wyszukiwanie serwera \"%s\"…"
 
-#: ../src/picture.c:937 ../src/picture.c:948
-msgid "Type"
-msgstr "Typ"
+#: ../src/cddb_dialog.c:631
+#, c-format
+msgid "Cannot create a new socket ‘%s’"
+msgstr "Nie można utworzyć nowego gniazda \"%s\""
 
-#: ../src/picture.c:949
-msgid "Description"
-msgstr "Opis"
+#: ../src/cddb_dialog.c:645
+msgid "Cannot set options on the newly-created socket"
+msgstr "Nie można ustawić opcji na nowo utworzonym gnieździe"
 
-#: ../src/picture.c:1065
-msgid ""
-"Cannot display the image because not enough data has been read to determine "
-"how to create the image buffer."
-msgstr ""
-"Nie można wyświetlić obrazu, ponieważ za mała ilość danych została "
-"odczytana, aby ustalić, jak utworzyć bufor obrazu."
+#. Open connection to the server.
+#: ../src/cddb_dialog.c:649
+#, c-format
+msgid "Connecting to host ‘%s’, port ‘%d’…"
+msgstr "Łączenie z serwerem \"%s\", port \"%d\"…"
 
-#: ../src/picture.c:1072
-msgid "Cannot display the image"
-msgstr "Nie można wyświetlić obrazu"
+#: ../src/cddb_dialog.c:662
+#, c-format
+msgid "Cannot connect to host ‘%s’: %s"
+msgstr "Nie można połączyć z serwerem \"%s\": %s"
 
-#: ../src/picture.c:1074
-msgid ""
-"Not enough data has been read to determine how to create the image buffer."
-msgstr ""
-"Za mała ilość danych została odczytana, aby ustalić, jak utworzyć bufor "
-"obrazu."
+#: ../src/cddb_dialog.c:686
+#, c-format
+msgid "Cannot resolve host ‘%s’: %s"
+msgstr "Nie można odnaleźć serwera \"%s\": %s"
 
-#: ../src/picture.c:1076
-msgid "Load Image File"
-msgstr "Wczytaj plik obrazu"
+#: ../src/cddb_dialog.c:699
+#, c-format
+msgid "Connected to host ‘%s’"
+msgstr "Połączono z serwerem \"%s\""
 
-#. Label
-#: ../src/prefs.c:152
-msgid "Default directory:"
-msgstr "Domyślny katalog:"
+#: ../src/cddb_dialog.c:786
+#, c-format
+msgid "Error while writing CDDB results to file ‘%s’"
+msgstr "Błąd podczas zapisywania wyników CDDB do pliku \"%s\""
 
-#: ../src/prefs.c:165
-msgid ""
-"Specify the directory where your files are located. This path will be loaded "
-"when EasyTAG starts without parameter."
-msgstr ""
-"Określa katalog, w którym znajdują się pliki. Ten katalog zostanie wczytany "
-"wtedy, gdy program EasyTAG zostanie uruchomiony bez parametrów."
+#: ../src/cddb_dialog.c:797
+#, c-format
+msgid "Receiving data (%s)…"
+msgstr "Pobieranie danych (%s)…"
 
-#. Load directory on startup
-#: ../src/prefs.c:186
-msgid ""
-"Load on startup the default directory or the directory passed as argument"
-msgstr ""
-"Wczytywanie podczas uruchamiania katalogu domyślnego lub katalogu podanego "
-"jako parametr"
+#: ../src/cddb_dialog.c:810
+#, c-format
+msgid "Error when reading CDDB response ‘%s’"
+msgstr "BÅ‚Ä…d podczas odczytywania odpowiedzi CDDB \"%s\""
 
-#: ../src/prefs.c:189
-msgid ""
-"Automatically search files, when EasyTAG starts, into the default directory. "
-"Note that this path may be overridden by the parameter passed to easytag "
-"(easytag /path_to/mp3_files)."
-msgstr ""
-"Automatycznie przeszukuje domyślny katalog podczas uruchamiania programu "
-"EasyTAG. Katalog ten może zostać zastąpiony parametrem przekazanym w wierszu "
-"poleceń (\"easytag /ścieżka_do/plików_mp3\")."
+#: ../src/cddb_dialog.c:817
+#, c-format
+msgid "Cannot create file ‘%s’: %s"
+msgstr "Nie można utworzyć pliku \"%s\": %s"
 
-#. Browse subdirectories
-#: ../src/prefs.c:194
-msgid "Search subdirectories"
-msgstr "Przeszukiwanie podkatalogów"
+#: ../src/cddb_dialog.c:879
+#, c-format
+msgid "Cannot load file ‘%s’: %s"
+msgstr "Nie można wczytać pliku: \"%s\": %s"
 
-#: ../src/prefs.c:197
-msgid "Search subdirectories for files when reading a directory into the tree."
-msgstr "Przeszukuje podkatalogi podczas wczytywania katalogu do drzewa."
+#. g_print("Request Cddb_Get_Album_Tracks_List : '%s'\n", cddb_in);
+#. Send the request
+#. g_print("Request Cddb_Search_Album_List_From_String_Freedb : '%s'\n", cddb_in);
+#. Send the request
+#. g_print("Request Cddb_Search_Album_List_From_String_Gnudb : '%s'\n", cddb_in);
+#. Send the request
+#: ../src/cddb_dialog.c:950 ../src/cddb_dialog.c:1557
+#: ../src/cddb_dialog.c:1895
+msgid "Sending request…"
+msgstr "Wysyłanie żądania…"
 
-#. Open the node to show subdirectories
-#: ../src/prefs.c:201
-msgid "Show subdirectories when selecting a directory"
-msgstr "Wyświetlanie podkatalogów podczas wybierania katalogu"
+#: ../src/cddb_dialog.c:954 ../src/cddb_dialog.c:1561
+#: ../src/cddb_dialog.c:1899 ../src/cddb_dialog.c:3432
+#, c-format
+msgid "Cannot send the request ‘%s’"
+msgstr "Nie można wysłać żądania \"%s\""
 
-#: ../src/prefs.c:205
-msgid ""
-"This expands the selected node into the file browser to display the sub-"
-"directories."
-msgstr ""
-"Automatycznie rozwija podkatalogi w przeglądarce plików po wybraniu katalogu."
+#. Read the answer
+#.
+#. * Read the answer
+#.
+#: ../src/cddb_dialog.c:966 ../src/cddb_dialog.c:1588
+#: ../src/cddb_dialog.c:3450
+msgid "Receiving data…"
+msgstr "Pobieranie danych…"
 
-#. Browse hidden directories
-#: ../src/prefs.c:209
-msgid "Search hidden directories"
-msgstr "Przeszukiwanie ukrytych katalogów"
+#: ../src/cddb_dialog.c:973 ../src/cddb_dialog.c:1595
+#: ../src/cddb_dialog.c:1930 ../src/cddb_dialog.c:3457
+msgid "The server returned a bad response"
+msgstr "Serwer zwrócił błędną odpowiedź"
 
-#: ../src/prefs.c:214
-msgid "Search hidden directories for files (directories starting by a '.')."
-msgstr "Przeszukuje ukryte katalogi (katalogi zaczynajÄ…ce siÄ™ znakiem \".\")."
+#: ../src/cddb_dialog.c:989 ../src/cddb_dialog.c:1005
+#: ../src/cddb_dialog.c:1608 ../src/cddb_dialog.c:1946
+#: ../src/cddb_dialog.c:3474
+#, c-format
+msgid "The server returned a bad response ‘%s’"
+msgstr "Serwer zwrócił błędną odpowiedź \"%s\""
 
-#.
-#. * Misc
-#.
-#: ../src/prefs.c:222
-msgid "Misc"
-msgstr "Różne"
+#. Load the track list of the album
+#: ../src/cddb_dialog.c:1201
+msgid "Loading album track list…"
+msgstr "Wczytywanie listy ścieżek albumu…"
 
-#. User interface
-#: ../src/prefs.c:228
-msgid "User Interface"
-msgstr "Interfejs użytkownika"
+#: ../src/cddb_dialog.c:1755
+#, c-format
+msgid "Sorry, the web-based search is currently not available"
+msgstr "Wyszukiwanie w sieci obecnie nie jest dostępne"
 
-#. Show header infos
-#: ../src/prefs.c:235
-msgid "Show header information of file"
-msgstr "Wyświetlanie informacji nagłówkowych pliku"
+#: ../src/cddb_dialog.c:1757 ../src/cddb_dialog.c:2117
+#, c-format
+msgid "Found one matching album"
+msgid_plural "Found %d matching albums"
+msgstr[0] "Odnaleziono jeden pasujÄ…cy album"
+msgstr[1] "Odnaleziono %d pasujÄ…ce albumy"
+msgstr[2] "Odnaleziono %d pasujących albumów"
 
-#: ../src/prefs.c:238
-msgid ""
-"If activated, information about the file as the bitrate, the time, the size, "
-"will be displayed under the filename entry."
+#: ../src/cddb_dialog.c:1918
+#, c-format
+msgid "Receiving data of page %d (album %d/%d)…"
+msgstr "Pobieranie danych ze strony %d (album %d/%d)…"
+
+#: ../src/cddb_dialog.c:1920
+#, c-format
+msgid "Receiving data of page %d…"
+msgstr "Pobieranie danych ze strony %d…"
+
+#: ../src/cddb_dialog.c:2084
+#, c-format
+msgid "More results to load…"
+msgstr "Więcej wyników do wczytania…"
+
+#: ../src/cddb_dialog.c:2265
+msgid "The number of CDDB results does not match the number of selected files"
+msgstr "Liczba wyników CDDB nie pasuje do liczby zaznaczonych plików"
+
+#: ../src/cddb_dialog.c:2271
+msgid "Write Tag from CDDB"
+msgstr "Zapisz etykiety z CDDB"
+
+#: ../src/cddb_dialog.c:2954
+msgid "Ready to search"
+msgstr "Gotowe do wyszukiwania"
+
+#: ../src/cddb_dialog.c:3042 ../src/load_files_dialog.c:261
+#: ../src/setting.c:247
+#, c-format
+msgid "Cannot open file ‘%s’: %s"
+msgstr "Nie można otworzyć pliku \"%s\": %s"
+
+#: ../src/cddb_dialog.c:3263
+#, c-format
+msgid "No file selected"
+msgstr "Nie zaznaczono pliku"
+
+#. The CD redbook standard defines the maximum number of tracks as 99, any
+#. queries with more than 99 tracks will never return a result.
+#: ../src/cddb_dialog.c:3271
+#, c-format
+msgid "More than 99 files selected. Cannot send request"
+msgstr "Zaznaczono więcej niż 99 plików. Nie można wysłać żądania"
+
+#: ../src/cddb_dialog.c:3277
+#, c-format
+msgid "One file selected"
+msgid_plural "%d files selected"
+msgstr[0] "Zaznaczono jeden plik"
+msgstr[1] "Zaznaczono %d pliki"
+msgstr[2] "Zaznaczono %d plików"
+
+#. g_print("Request Cddb_Search_Album_From_Selected_Files : '%s'\n", cddb_in);
+#: ../src/cddb_dialog.c:3422
+#, c-format
+msgid "Sending request (disc ID: %s, #tracks: %d, Disc length: %d)…"
 msgstr ""
-"Jeśli jest aktywowane, to informacje o pliku, takie jak gęstość bitowa, czas "
-"i rozmiar będą wyświetlane pod nazwą pliku."
+"Wysyłanie żądania (identyfikator płyty: %s, # ścieżki: %d, długość płyty: %d)"
+"…"
 
-#: ../src/prefs.c:244
-msgid "Display changed files in list using:"
-msgstr "Wyświetlanie zmienionych plików na liście używając:"
+#: ../src/cddb_dialog.c:3590
+#, c-format
+msgid "DiscID ‘%s’ gave one matching album"
+msgid_plural "DiscID ‘%s’ gave %d matching albums"
+msgstr[0] "DiscID \"%s\" zwróciło jeden pasujący album"
+msgstr[1] "DiscID \"%s\" zwróciło %d pasujące albumy"
+msgstr[2] "DiscID \"%s\" zwróciło %d pasujących albumów"
 
-#: ../src/prefs.c:247
-msgid "Red color"
-msgstr "Koloru czerwonego"
+#: ../src/charset.c:49
+msgid "Arabic (IBM-864)"
+msgstr "arabskie (IBM-864)"
 
-#: ../src/prefs.c:253
-msgid "Bold style"
-msgstr "Pogrubienia"
+#: ../src/charset.c:50
+msgid "Arabic (ISO-8859-6)"
+msgstr "arabskie (ISO-8859-6)"
 
-#. Sorting List Options
-#: ../src/prefs.c:259
-msgid "Sorting List Options"
-msgstr "Opcje porzÄ…dkowania listy"
+#: ../src/charset.c:51
+msgid "Arabic (Windows-1256)"
+msgstr "arabskie (Windows-1256)"
 
-#. Sorting method
-#: ../src/prefs.c:268
-msgid "Sort the file list by:"
-msgstr "Porządkowanie listy plików według:"
+#: ../src/charset.c:52
+msgid "Baltic (ISO-8859-13)"
+msgstr "bałtyckie (ISO-8859-13)"
 
-#: ../src/prefs.c:278
-msgid "Ascending filename"
-msgstr "Rosnąco według nazw plików"
+#: ../src/charset.c:53
+msgid "Baltic (ISO-8859-4)"
+msgstr "bałtyckie (ISO-8859-4)"
 
-#: ../src/prefs.c:280
-msgid "Descending filename"
-msgstr "Malejąco według nazw plików"
+#: ../src/charset.c:54
+msgid "Baltic (Windows-1257)"
+msgstr "bałtyckie (Windows-1257)"
 
-#: ../src/prefs.c:281
-msgid "Ascending title"
-msgstr "Rosnąco według tytułu"
+#: ../src/charset.c:55
+msgid "Celtic (ISO-8859-14)"
+msgstr "celtyckie (ISO-8859-14)"
 
-#: ../src/prefs.c:282
-msgid "Descending title"
-msgstr "Malejąco według tytułu"
+#: ../src/charset.c:56
+msgid "Central European (IBM-852)"
+msgstr "środkowoeuropejskie (IBM-852)"
 
-#: ../src/prefs.c:283
-msgid "Ascending artist"
-msgstr "Rosnąco według wykonawcy"
+#: ../src/charset.c:57
+msgid "Central European (ISO-8859-2)"
+msgstr "środkowoeuropejskie (ISO-8859-2)"
 
-#: ../src/prefs.c:284
-msgid "Descending artist"
-msgstr "Malejąco według wykonawcy"
+#: ../src/charset.c:58
+msgid "Central European (Windows-1250)"
+msgstr "środkowoeuropejskie (Windows-1250)"
 
-#: ../src/prefs.c:286
-msgid "Ascending album artist"
-msgstr "Rosnąco według wykonawcy albumu"
+#: ../src/charset.c:59
+msgid "Chinese Simplified (GB18030)"
+msgstr "chińskie uproszczone (GB18030)"
 
-#: ../src/prefs.c:288
-msgid "Descending album artist"
-msgstr "Malejąco według wykonawcy albumu"
+#: ../src/charset.c:60
+msgid "Chinese Simplified (GB2312)"
+msgstr "chińskie uproszczone (GB2312)"
 
-#: ../src/prefs.c:289
-msgid "Ascending album"
-msgstr "Rosnąco według albumu"
+#: ../src/charset.c:61
+msgid "Chinese Traditional (Big5)"
+msgstr "chińskie tradycyjne (Big5)"
 
-#: ../src/prefs.c:290
-msgid "Descending album"
-msgstr "Malejąco według albumu"
+#: ../src/charset.c:62
+msgid "Chinese Traditional (Big5-HKSCS)"
+msgstr "chińskie tradycyjne (Big5-HKSCS)"
 
-#: ../src/prefs.c:291
-msgid "Ascending year"
-msgstr "Rosnąco według roku"
+#: ../src/charset.c:63
+msgid "Cyrillic (IBM-855)"
+msgstr "cyrylica (IBM-855)"
 
-#: ../src/prefs.c:292
-msgid "Descending year"
-msgstr "Malejąco według roku"
+#: ../src/charset.c:64
+msgid "Cyrillic (ISO-8859-5)"
+msgstr "cyrylica (ISO-8859-5)"
+
+#: ../src/charset.c:65
+msgid "Cyrillic (ISO-IR-111)"
+msgstr "cyrylica (ISO-IR-111)"
+
+#: ../src/charset.c:66
+msgid "Cyrillic (KOI8-R)"
+msgstr "cyrylica (KOI8-R)"
+
+#: ../src/charset.c:67
+msgid "Cyrillic (Windows-1251)"
+msgstr "cyrylica (Windows-1251)"
+
+#: ../src/charset.c:68
+msgid "Cyrillic/Russian (CP-866)"
+msgstr "cyrylica/rosyjskie (CP-866)"
+
+#: ../src/charset.c:69
+msgid "Cyrillic/Ukrainian (KOI8-U)"
+msgstr "cyrylica/ukraińskie (KOI8-U)"
+
+#: ../src/charset.c:70
+msgid "English (US-ASCII)"
+msgstr "angielskie (US-ASCII)"
+
+#: ../src/charset.c:71
+msgid "Greek (ISO-8859-7)"
+msgstr "greckie (ISO-8859-7)"
+
+#: ../src/charset.c:72
+msgid "Greek (Windows-1253)"
+msgstr "greckie (Windows-1253)"
+
+#: ../src/charset.c:73
+msgid "Hebrew (IBM-862)"
+msgstr "hebrajskie (IBM-862)"
+
+#: ../src/charset.c:74
+msgid "Hebrew (Windows-1255)"
+msgstr "hebrajskie (Windows-1255)"
+
+#: ../src/charset.c:75
+msgid "Japanese (EUC-JP)"
+msgstr "japońskie (EUC-JP)"
+
+#: ../src/charset.c:76
+msgid "Japanese (ISO-2022-JP)"
+msgstr "japońskie (ISO-2022-JP)"
+
+#: ../src/charset.c:77
+msgid "Japanese (Shift_JIS)"
+msgstr "japońskie (Shift_JIS)"
+
+#: ../src/charset.c:78
+msgid "Korean (EUC-KR)"
+msgstr "koreańskie (EUC-KR)"
+
+#: ../src/charset.c:79
+msgid "Nordic (ISO-8859-10)"
+msgstr "nordyckie (ISO-8859-10)"
+
+#: ../src/charset.c:80
+msgid "South European (ISO-8859-3)"
+msgstr "południowoeuropejskie (ISO-8859-3)"
+
+#: ../src/charset.c:81
+msgid "Thai (TIS-620)"
+msgstr "tajskie (TIS-620)"
+
+#: ../src/charset.c:82
+msgid "Turkish (IBM-857)"
+msgstr "tureckie (IBM-857)"
 
-#: ../src/prefs.c:294
-msgid "Ascending disc number"
-msgstr "Rosnąco według numerów płyt"
+#: ../src/charset.c:83
+msgid "Turkish (ISO-8859-9)"
+msgstr "tureckie (ISO-8859-9)"
+
+#: ../src/charset.c:84
+msgid "Turkish (Windows-1254)"
+msgstr "tureckie (Windows-1254)"
 
-#: ../src/prefs.c:296
-msgid "Descending disc number"
-msgstr "Malejąco według numerów płyt"
+#. {N_("Unicode (UTF-7)"),                   "UTF-7"         },
+#: ../src/charset.c:86
+msgid "Unicode (UTF-8)"
+msgstr "Unicode (UTF-8)"
 
-#: ../src/prefs.c:298
-msgid "Ascending track number"
-msgstr "Rosnąco według numerów ścieżek"
+#. {N_("Unicode (UTF-16BE)"),                "UTF-16BE"      },
+#. {N_("Unicode (UTF-16LE)"),                "UTF-16LE"      },
+#. {N_("Unicode (UTF-32BE)"),                "UTF-32BE"      },
+#. {N_("Unicode (UTF-32LE)"),                "UTF-32LE"      },
+#: ../src/charset.c:93
+msgid "Vietnamese (VISCII)"
+msgstr "wietnamskie (VISCII)"
+
+#: ../src/charset.c:94
+msgid "Vietnamese (Windows-1258)"
+msgstr "wietnamskie (Windows-1258)"
+
+#: ../src/charset.c:95
+msgid "Visual Hebrew (ISO-8859-8)"
+msgstr "hebrajskie wizualne (ISO-8859-8)"
+
+#: ../src/charset.c:96
+msgid "Western (IBM-850)"
+msgstr "zachodnie (IBM-850)"
+
+#: ../src/charset.c:97
+msgid "Western (ISO-8859-1)"
+msgstr "zachodnie (ISO-8859-1)"
+
+#: ../src/charset.c:98
+msgid "Western (ISO-8859-15)"
+msgstr "zachodnie (ISO-8859-15)"
+
+#: ../src/charset.c:99
+msgid "Western (Windows-1252)"
+msgstr "zachodnie (Windows-1252)"
 
-#: ../src/prefs.c:300
-msgid "Descending track number"
-msgstr "Malejąco według numerów ścieżek"
+#: ../src/charset.c:511
+#, c-format
+msgid "The filename ‘%s’ could not be converted into UTF-8: %s"
+msgstr "Plik \"%s\" nie może zostać przekonwertowany na UTF-8: %s"
 
-#: ../src/prefs.c:301
-msgid "Ascending genre"
-msgstr "Rosnąco według gatunku"
+#: ../src/charset.c:513 ../src/charset.c:626 ../src/charset.c:691
+msgid "Invalid UTF-8"
+msgstr "Nieprawidłowe UTF-8"
 
-#: ../src/prefs.c:302
-msgid "Descending genre"
-msgstr "Malejąco według gatunku"
+#: ../src/charset.c:624
+#, c-format
+msgid "The UTF-8 string ‘%s’ could not be converted into filename encoding: %s"
+msgstr ""
+"Ciąg UTF-8 \"%s\" nie może zostać przekonwertowany na kodowanie pliku: %s"
 
-#: ../src/prefs.c:303
-msgid "Ascending comment"
-msgstr "Rosnąco według komentarza"
+#: ../src/charset.c:689
+#, c-format
+msgid "The string ‘%s’ could not be converted into UTF-8: %s"
+msgstr "Ciąg \"%s\" nie może zostać przekonwertowany na UTF-8: %s"
 
-#: ../src/prefs.c:304
-msgid "Descending comment"
-msgstr "Malejąco według komentarza"
+#: ../src/easytag.c:290
+#, c-format
+msgid "A file was changed by an external program"
+msgid_plural "%d files were changed by an external program"
+msgstr[0] "Plik został zmieniony przez zewnętrzny program"
+msgstr[1] "%d pliki zostały zmienione przez zewnętrzny program"
+msgstr[2] "%d plików zostało zmienionych przez zewnętrzny program"
 
-#: ../src/prefs.c:306
-msgid "Ascending composer"
-msgstr "Rosnąco według kompozytora"
+#: ../src/easytag.c:299
+msgid "Do you want to continue saving the file?"
+msgstr "Kontynuować zapisywanie pliku?"
 
-#: ../src/prefs.c:308
-msgid "Descending composer"
-msgstr "Malejąco według kompozytora"
+#: ../src/easytag.c:360 ../src/easytag.c:381
+msgid "Saving files was stopped"
+msgstr "Zatrzymano zapisywanie plików"
 
-#: ../src/prefs.c:310
-msgid "Ascending original artist"
-msgstr "Rosnąco według pierwotnego wykonawcy"
+#: ../src/easytag.c:383
+msgid "All files have been saved"
+msgstr "Wszystkie pliki zostały zapisane"
 
-#: ../src/prefs.c:312
-msgid "Descending original artist"
-msgstr "Malejąco według pierwotnego wykonawcy"
+#: ../src/easytag.c:504
+#, c-format
+msgid "Do you want to write the tag of file ‘%s’?"
+msgstr "Zapisać etykietę pliku \"%s\"?"
 
-#: ../src/prefs.c:314
-msgid "Ascending copyright"
-msgstr "Rosnąco według praw autorskich"
+#: ../src/easytag.c:506
+msgid "Confirm Tag Writing"
+msgstr "Potwierdzenie zapisania etykiety"
 
-#: ../src/prefs.c:316
-msgid "Descending copyright"
-msgstr "Malejąco według praw autorskich"
+#. Directories and filename changed
+#: ../src/easytag.c:599
+msgid "Rename File and Directory"
+msgstr "Zmiana nazw plików i katalogów"
 
-#: ../src/prefs.c:318
-msgid "Ascending URL"
-msgstr "Rosnąco według adresów URL"
+#: ../src/easytag.c:600
+msgid "File and directory rename confirmation required"
+msgstr "Wymagane jest potwierdzenie zmiany nazwy pliku i katalogu"
 
-#: ../src/prefs.c:320
-msgid "Descending URL"
-msgstr "Malejąco według adresów URL"
+#: ../src/easytag.c:601
+#, c-format
+msgid "Do you want to rename the file and directory ‘%s’ to ‘%s’?"
+msgstr "Zmienić nazwę pliku i katalogu z \"%s\" na \"%s\"?"
 
-#: ../src/prefs.c:322
-msgid "Ascending encoded by"
-msgstr "Rosnąco według nazwiska kodującego"
+#: ../src/easytag.c:607
+msgid "Directory rename confirmation required"
+msgstr "Wymagane jest potwierdzenie zmiany nazwy katalogu"
 
-#: ../src/prefs.c:324
-msgid "Descending encoded by"
-msgstr "Malejąco według nazwiska kodującego"
+#: ../src/easytag.c:608
+#, c-format
+msgid "Do you want to rename the directory ‘%s’ to ‘%s’?"
+msgstr "Zmienić nazwę katalogu \"%s\" na \"%s\"?"
 
-#: ../src/prefs.c:326
-msgid "Ascending creation date"
-msgstr "Rosnąco według daty utworzenia"
+#: ../src/easytag.c:616
+msgid "File rename confirmation required"
+msgstr "Wymagane jest potwierdzenie zmiany nazwy pliku"
 
-#: ../src/prefs.c:328
-msgid "Descending creation date"
-msgstr "Malejąco według daty utworzenia"
+#: ../src/easytag.c:617
+#, c-format
+msgid "Do you want to rename the file ‘%s’ to ‘%s’?"
+msgstr "Zmienić nazwę pliku \"%s\" na \"%s\"?"
 
-#: ../src/prefs.c:332
-msgid "Select the type of file sorting when loading a directory."
-msgstr "Proszę wybrać typ porządkowania plików podczas wczytywania katalogu."
+#: ../src/easytag.c:689
+#, c-format
+msgid "Cannot rename file ‘%s’ to ‘%s’"
+msgstr "Nie można zmienić nazwy pliku \"%s\" na \"%s\""
 
-#: ../src/prefs.c:344
-msgid "If activated, the sorting of the list will be dependent on the case."
-msgstr ""
-"Jeśli jest aktywowane, to porządkowanie listy będzie zależny od wielkości "
-"liter."
+#: ../src/easytag.c:703
+#, c-format
+msgid "Cannot rename file ‘%s’ to ‘%s’: %s"
+msgstr "Nie można zmienić nazwy pliku \"%s\" na \"%s\": %s"
 
-#. File Player
-#: ../src/prefs.c:348
-msgid "File Audio Player"
-msgstr "Odtwarzacz plików dźwiękowych"
+#: ../src/easytag.c:708
+msgid "File(s) not renamed"
+msgstr "Pliki, którym nie zmieniono nazwy"
 
-#: ../src/prefs.c:360
-msgid "Player to run:"
-msgstr "Odtwarzacz do uruchamiania:"
+#: ../src/easytag.c:888
+#, c-format
+msgid "Writing tag of ‘%s’"
+msgstr "Zapisywanie etykiety pliku \"%s\""
 
-#: ../src/prefs.c:366
-msgid ""
-"Enter the program used to play the files. Some arguments can be passed for "
-"the program (as 'xmms -p') before to receive files as other arguments."
-msgstr ""
-"Proszę podać program używany do odtwarzania plików. Można podać parametry, "
-"które zostaną przekazane do programu (na przykład \"xmms -p\")."
+#: ../src/easytag.c:896
+#, c-format
+msgid "Wrote tag of ‘%s’"
+msgstr "Zapisano etykietÄ™ pliku \"%s\""
 
-#. Log options
-#: ../src/prefs.c:384
-msgid "Log Options"
-msgstr "Opcje dziennika"
+#: ../src/easytag.c:912
+#, c-format
+msgid "Cannot write tag in file ‘%s’"
+msgstr "Nie można zapisać etykiety w pliku \"%s\""
 
-#. Show / hide log view
-#: ../src/prefs.c:391
-msgid "Show log view in main window"
-msgstr "Wyświetlanie dziennika w głównym oknie"
+#: ../src/easytag.c:916
+msgid "Tag Write Error"
+msgstr "BÅ‚Ä…d zapisu etykiety"
 
-#: ../src/prefs.c:394
-msgid "If activated, the log view would be visible in the main window."
-msgstr "Jeśli jest aktywowane, to dziennik będzie widoczny w głównym oknie."
+#: ../src/easytag.c:990 ../src/easytag.c:1218
+#, c-format
+msgid "Cannot read directory ‘%s’"
+msgstr "Nie można odczytać katalogu \"%s\""
 
-#: ../src/prefs.c:400
-msgid "Max number of lines:"
-msgstr "Maksymalna liczba wierszy:"
+#: ../src/easytag.c:994
+msgid "Directory Read Error"
+msgstr "BÅ‚Ä…d odczytu katalogu"
 
-#. g_signal_connect(G_OBJECT(NumberTrackFormated),"toggled",G_CALLBACK(Number_Track_Formatted_Toggled),NULL);
-#. * g_signal_emit_by_name(G_OBJECT(NumberTrackFormated),"toggled");
-#. gtk_tooltips_set_tip(Tips,GTK_BIN(FilePlayerCombo)->child,_("Enter the program used to "
-#. "play the files. Some arguments can be passed for the program (as 'xmms -p') before "
-#. "to receive files as other arguments."),NULL);
-#.
-#.
-#. * File Settings
-#.
-#: ../src/prefs.c:418
-msgid "File Settings"
-msgstr "Ustawienia plików"
+#. Read the directory recursively
+#: ../src/easytag.c:1015
+#, c-format
+msgid "Search in progress…"
+msgstr "Trwa wyszukiwanie…"
 
-#. File (name) Options
-#: ../src/prefs.c:424
-msgid "File Options"
-msgstr "Opcje plików"
+#: ../src/easytag.c:1039 ../src/et_core.c:2992
+#, c-format
+msgid "File: ‘%s’"
+msgstr "Plik: \"%s\""
 
-#: ../src/prefs.c:430
-msgid "Replace illegal characters in filename (for Windows and CD-Rom)"
-msgstr ""
-"Zmienianie niedozwolonych znaków w nazwach plików (dla systemu Windows i "
-"płyt CD-ROM)"
+#: ../src/easytag.c:1086
+#, c-format
+msgid "Found one file in this directory and subdirectories"
+msgid_plural "Found %d files in this directory and subdirectories"
+msgstr[0] "Odnaleziono jeden plik w tym katalogu i jego podkatalogach"
+msgstr[1] "Odnaleziono %d pliki w tym katalogu i jego podkatalogach"
+msgstr[2] "Odnaleziono %d plików w tym katalogu i jego podkatalogach"
 
-#: ../src/prefs.c:433
-msgid ""
-"Convert illegal characters for FAT32/16 and ISO9660 + Joliet filesystems "
-"('\\', ':', ';', '*', '?', '\"', '<', '>', '|') of the filename to avoid "
-"problem when renaming the file. This is useful when renaming the file from "
-"the tag with the scanner."
-msgstr ""
-"Konwertuje niedozwolone znaki dla systemu plików FAT32/16 i ISO9660 + Joliet "
-"(\"\\\", \":\", \";\", \"*\", \"?\", \"\"\", \"<\", \">\", \"|\") podczas "
-"zmieniania nazw plików. Jest to przydatne podczas zmieniania nazw plików za "
-"pomocÄ… skanera na podstawie etykiety."
+#: ../src/easytag.c:1093
+#, c-format
+msgid "Found one file in this directory"
+msgid_plural "Found %d files in this directory"
+msgstr[0] "Odnaleziono jeden plik w tym katalogu"
+msgstr[1] "Odnaleziono %d pliki w tym katalogu"
+msgstr[2] "Odnaleziono %d plików w tym katalogu"
 
-#. Extension case (lower/upper?)
-#: ../src/prefs.c:441
-msgid "Convert filename extension to:"
-msgstr "Zmienianie rozszerzeń plików na:"
+#: ../src/easytag.c:1110
+msgid "No file found in this directory and subdirectories"
+msgstr "Nie odnaleziono żadnego pliku w tym katalogu i jego podkatalogach"
 
-#: ../src/prefs.c:444
-msgid "Lower Case"
-msgstr "Małe litery"
+#: ../src/easytag.c:1112
+msgid "No file found in this directory"
+msgstr "Nie odnaleziono żadnego pliku w tym katalogu"
 
-#: ../src/prefs.c:447
-msgid "For example, the extension will be converted to '.mp3'"
-msgstr "Na przykład rozszerzenie pliku zostanie zmienione na \".mp3\""
+#: ../src/easytag.c:1182
+#, c-format
+msgid "Error opening directory ‘%s’: %s"
+msgstr "BÅ‚Ä…d podczas otwierania katalogu \"%s\": %s"
 
-#: ../src/prefs.c:450
-msgid "Upper Case"
-msgstr "Wielkie litery"
+#: ../src/easytag.c:1238
+msgid "Searching for audio files…"
+msgstr "Wyszukiwanie plików dźwiękowych…"
 
-#: ../src/prefs.c:453
-msgid "For example, the extension will be converted to '.MP3'"
-msgstr "Na przykład rozszerzenie pliku zostanie zmienione na \".MP3\""
+#: ../src/easytag.c:1239
+msgid "Searching"
+msgstr "Wyszukiwanie"
 
-#: ../src/prefs.c:456
-msgid "No Change"
-msgstr "Bez zmieniania"
+#: ../src/easytag.c:1240
+msgid "_Stop"
+msgstr "_Zatrzymaj"
 
-#: ../src/prefs.c:459
-msgid "The extension will not be converted"
-msgstr "Rozszerzenie nie zostanie zmienione"
+#: ../src/et_core.c:545
+#, c-format
+msgid "Error reading tag from Ogg file ‘%s’: %s"
+msgstr "BÅ‚Ä…d podczas odczytywania etykiety z pliku Ogg \"%s\": %s"
 
-#. Preserve modification time
-#: ../src/prefs.c:462
-msgid "Preserve modification time of the file"
-msgstr "Zachowanie czasu modyfikacji pliku"
+#: ../src/et_core.c:556
+#, c-format
+msgid "Error reading tag from FLAC file ‘%s’: %s"
+msgstr "BÅ‚Ä…d podczas odczytywania etykiety z pliku FLAC \"%s\": %s"
 
-#: ../src/prefs.c:465
-msgid ""
-"Preserve the modification time (in file properties) when saving the file."
-msgstr ""
-"Zachowuje czas modyfikacji (we właściwościach pliku) podczas zapisywania "
-"pliku."
+#: ../src/et_core.c:566
+#, c-format
+msgid "Error reading APE tag from file ‘%s’: %s"
+msgstr "BÅ‚Ä…d podczas odczytywania etykiety APE z pliku \"%s\": %s"
 
-#. Change directory modification time
-#: ../src/prefs.c:469
-msgid ""
-"Update modification time of the parent directory of the file (recommended "
-"when using Amarok)"
-msgstr ""
-"Aktualizowanie czasu modyfikacji katalogu nadrzędnego pliku (zalecane, kiedy "
-"używany jest odtwarzacz Amarok)"
+#: ../src/et_core.c:576
+#, c-format
+msgid "Error reading tag from MP4 file ‘%s’: %s"
+msgstr "BÅ‚Ä…d podczas odczytywania etykiety z pliku MP4 \"%s\": %s"
 
-#: ../src/prefs.c:473
-msgid ""
-"The modification time of the parent directory of the file will be updated "
-"when saving tag the file. At the present time it is automatically done only "
-"when renaming a file.\n"
-"This feature is interesting when using applications like Amarok. For "
-"performance reasons, they refresh file information by detecting changes of "
-"the parent directory."
-msgstr ""
-"Czas modyfikacji katalogu nadrzędnego pliku będzie aktualizowany podczas "
-"zapisywania etykiety pliku. Obecnie jest to wykonywane automatycznie tylko "
-"podczas zmieniania nazwy pliku.\n"
-"Ta funkcja jest przydatna, kiedy używa się programów takich jak Amarok. W "
-"celu zwiększenia wydajności, takie programy odświeżają informacje o pliku "
-"rozpoznając zmiany w katalogu nadrzędnym."
-
-#. Character Set for Filename
-#: ../src/prefs.c:481
-msgid "Character Set for Filename"
-msgstr "Zestaw znaków dla nazw plików"
-
-#. Rules for character set
-#: ../src/prefs.c:493
-msgid ""
-"Rules to apply if some characters can't be converted to the system character "
-"encoding when writing filename:"
-msgstr ""
-"Zasady do zastosowania, jeśli niektóre znaki nie mogą zostać "
-"przekonwertowane na systemowe kodowanie znaków podczas zapisywania pliku:"
+#: ../src/et_core.c:587
+#, c-format
+msgid "Error reading tag from WavPack file ‘%s’: %s"
+msgstr "BÅ‚Ä…d podczas odczytywania etykiety z pliku WavPack \"%s\": %s"
 
-#: ../src/prefs.c:499
-msgid "Try another character encoding"
-msgstr "Próbowanie innego kodowania znaków"
+#: ../src/et_core.c:598
+#, c-format
+msgid "Error reading tag from Opus file ‘%s’: %s"
+msgstr "BÅ‚Ä…d podczas odczytywania etykiety z pliku Opus \"%s\": %s"
 
-#: ../src/prefs.c:503
-msgid ""
-"With this option, it will try the conversion to the encoding associated to "
-"your locale (for example: ISO-8859-1 for 'fr', KOI8-R for 'ru', ISO-8859-2 "
-"for 'ro'). If it fails, it will try the character encoding ISO-8859-1."
-msgstr ""
-"Jeśli ta opcja jest włączona, próbowana będzie konwersja na kodowanie znaków "
-"przydzielone dla danej lokalizacji (np. ISO-8859-1 dla \"fr\", KOI8-R dla "
-"\"ru\", ISO-8859-2 dla \"ro\"). Jeśli to się nie powiedzie, to zostanie "
-"ustawione kodowanie ISO-8859-1."
+#: ../src/et_core.c:744
+#, c-format
+msgid "Automatic corrections applied for file ‘%s’"
+msgstr "Zastosowano automatyczne poprawki do pliku \"%s\""
 
-#: ../src/prefs.c:510
-msgid ""
-"Force using the system character encoding and activate the transliteration"
-msgstr ""
-"Wymuszenie używania systemowego kodowania znaków i włączenie transliteracji"
+#. And refresh the number of files in this directory
+#: ../src/et_core.c:3016
+#, c-format
+msgid "One file"
+msgid_plural "%u files"
+msgstr[0] "Jeden plik"
+msgstr[1] "%u pliki"
+msgstr[2] "%u plików"
 
-#: ../src/prefs.c:514 ../src/prefs.c:844 ../src/prefs.c:913
-msgid ""
-"With this option, when a character cannot be represented in the target "
-"character set, it can be approximated through one or several similarly "
-"looking characters."
-msgstr ""
-"Gdy ta opcja jest włączona i określony znak nie może być przedstawiony w "
-"docelowym kodowaniu, zostanie on zastÄ…piony podobnie wyglÄ…dajÄ…cym znakiem "
-"(np. \"Å‚\" zostanie zastÄ…pione przez \"l\")."
+#. Bitrate
+#: ../src/et_core.c:3047 ../src/tags/flac_header.c:316
+#: ../src/tags/monkeyaudio_header.c:91 ../src/tags/mp4_header.cc:145
+#: ../src/tags/mpeg_header.c:228 ../src/tags/musepack_header.c:95
+#: ../src/tags/ogg_header.c:418 ../src/tags/opus_header.c:232
+#: ../src/tags/wavpack_header.c:92
+#, c-format
+msgid "%d kb/s"
+msgstr "%d kb/s"
 
-#: ../src/prefs.c:520
-msgid ""
-"Force using the system character encoding and silently discard some "
-"characters"
-msgstr ""
-"Wymuszenie używania systemowego kodowania znaków i odrzucanie niepasujących "
-"znaków"
+#. Samplerate
+#: ../src/et_core.c:3050 ../src/tags/flac_header.c:319
+#: ../src/tags/monkeyaudio_header.c:94 ../src/tags/mp4_header.cc:149
+#: ../src/tags/mpeg_header.c:233 ../src/tags/musepack_header.c:98
+#: ../src/tags/ogg_header.c:421 ../src/tags/opus_header.c:235
+#: ../src/tags/wavpack_header.c:95
+#, c-format
+msgid "%d Hz"
+msgstr "%d Hz"
 
-#: ../src/prefs.c:524 ../src/prefs.c:854 ../src/prefs.c:923
-msgid ""
-"With this option, when a character cannot be represented in the target "
-"character set, it will be silently discarded."
+#: ../src/et_core.c:3179
+#, c-format
+msgid "Could not convert filename ‘%s’ to system filename encoding"
 msgstr ""
-"Jeśli ta opcja jest włączona, znak nie mogący zostać wyświetlony używając "
-"docelowego kodowania zostanie odrzucony."
+"Nie można przekonwertować nazwy pliku \"%s\" na systemowe kodowanie znaków"
 
-#.
-#. * Tag Settings
-#.
-#: ../src/prefs.c:533
-msgid "Tag Settings"
-msgstr "Ustawienia etykiet"
+#: ../src/et_core.c:3181
+msgid "Try setting the environment variable G_FILENAME_ENCODING."
+msgstr "Proszę spróbować ustawić zmienną środowiskową G_FILENAME_ENCODING."
 
-#. Tag Options
-#: ../src/prefs.c:539
-msgid "Tag Options"
-msgstr "Opcje etykiet"
+#: ../src/et_core.c:3182 ../src/scan_dialog.c:712
+msgid "Filename translation"
+msgstr "Tłumaczenie nazw plików"
 
-#: ../src/prefs.c:545
-msgid "Auto completion of date if not complete"
-msgstr "Automatyczne uzupełnianie danych"
+#: ../src/file_area.c:279 ../src/file_area.c:334
+msgid "File not found"
+msgstr "Nie odnaleziono pliku"
 
-#: ../src/prefs.c:548
-msgid ""
-"Try to complete the year field if you enter only the last numerals of the "
-"date (for instance, if the current year is 2005: 5 => 2005, 4 => 2004, 6 => "
-"1996, 95 => 1995…)."
-msgstr ""
-"Próbuje uzupełnić pole \"rok\", jeśli podano tylko ostatnie cyfry daty (na "
-"przykład, jeśli obecny rok to 2005: 5 => 2005, 4 => 2004, 6 => 1996, 95 => "
-"1995…)."
+#: ../src/file_area.c:284 ../src/load_files_dialog.c:221
+#, c-format
+msgid "Cannot query file information ‘%s’"
+msgstr "Nie można odpytać informacji o pliku \"%s\""
 
-#: ../src/prefs.c:556
-msgid "Write the track field with the following number of digits:"
-msgstr "Zapisywanie pola ścieżki za pomocą następującej liczby cyfr:"
+#: ../src/file_area.c:318
+msgid "Read-only file"
+msgstr "Plik tylko do odczytu"
 
-#: ../src/prefs.c:559
-msgid ""
-"If activated, the track field is written using the number '0' as padding to "
-"obtain a number with 'n' digits (for example, with two digits: '05', '09', "
-"'10'…). Else it keeps the 'raw' track value."
-msgstr ""
-"Jeśli ta opcja jest włączona, pole ścieżki zapisywane jest używając liczby "
-"\"0\" jako wyrównanie, aby uzyskać liczbę o \"n\" cyfrach (na przykład za "
-"pomocą dwóch cyfr: \"05\", \"09\", \"10\"…). W przeciwnym przypadku "
-"zatrzymuje \"surową\" wartość ścieżki."
+#: ../src/load_files_dialog.c:291
+#, c-format
+msgid "Error reading file ‘%s’"
+msgstr "BÅ‚Ä…d podczas odczytywania pliku \"%s\""
 
-#: ../src/prefs.c:578
-msgid "Write the disc field with the following number of digits:"
-msgstr "Zapisywanie pola płyty za pomocą następującej liczby cyfr:"
+#: ../src/load_files_dialog.c:628 ../src/load_files_dialog.c:731
+msgid "Insert a blank line"
+msgstr "Wstaw pusty wiersz"
 
-#: ../src/prefs.c:583
-msgid "Whether to pad the disc field with leading zeroes"
-msgstr "Czy umieszczać zera przed numerem płyty"
+#: ../src/load_files_dialog.c:632 ../src/load_files_dialog.c:735
+msgid "Delete this line"
+msgstr "Usuń ten wiersz"
 
-#: ../src/prefs.c:613
-msgid ""
-"Tag field focus when switching files in list with shortcuts Page Up/Page "
-"Down:"
-msgstr ""
-"Aktywacja pola etykiety podczas przełączania plikół na liście używając "
-"skrótów Page Up/Page Down:"
+#: ../src/load_files_dialog.c:643 ../src/load_files_dialog.c:746
+msgid "Move this line up"
+msgstr "Przesuń ten wiersz do góry"
 
-#: ../src/prefs.c:619
-msgid "Keep focus to the same tag field"
-msgstr "Utrzymywanie aktywacji na tym samym polu etykiety"
+#: ../src/load_files_dialog.c:647 ../src/load_files_dialog.c:750
+msgid "Move this line down"
+msgstr "Przesuń ten wiersz w dół"
 
-#: ../src/prefs.c:625
-msgid "Return focus to the first tag field (i.e. 'Title' field)"
-msgstr "Ustawienie aktywacji na pierwsze pole etykiety (tzn. pole \"Tytuł\")"
+#: ../src/load_files_dialog.c:893
+msgid "Load Filenames From a Text File"
+msgstr "Wczytaj nazwy plików z pliku tekstowego"
 
-#. gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(SetFocusToFirstTagField),SET_FOCUS_TO_FIRST_TAG_FIELD);
-#. Tag Splitting
-#: ../src/prefs.c:630
-msgid "Tag Splitting"
-msgstr "Rozdzielanie etykiet"
+#: ../src/misc.c:257
+msgid "You must type a program name"
+msgstr "Należy wprowadzić nazwę programu"
 
-#: ../src/prefs.c:639
-msgid ""
-"For Vorbis tags, selected fields will be split at dashes and saved as "
-"separate tags"
-msgstr ""
-"W przypadku etykiet plików Vorbis, wybrane pola zostaną rozdzielone "
-"myślnikami i zapisane jako oddzielne etykiety"
+#: ../src/misc.c:258
+msgid "Program Name Error"
+msgstr "BÅ‚Ä…d nazwy programu"
 
-#: ../src/prefs.c:649
-msgid "Original artist"
-msgstr "Pierwotny wykonawca"
+#: ../src/misc.c:336
+#, c-format
+msgid "Executed command ‘%s’"
+msgstr "Wykonano polecenie \"%s\""
 
-#.
-#. * ID3 Tag Settings
-#.
-#: ../src/prefs.c:670
-msgid "ID3 Tag Settings"
-msgstr "Ustawienia etykiet ID3"
+#: ../src/misc.c:344 ../src/misc.c:455
+#, c-format
+msgid "Failed to launch program ‘%s’"
+msgstr "Uruchomienie programu \"%s\" się nie powiodło"
 
-#. Tag Rules frame
-#: ../src/prefs.c:679
-msgid "ID3 Tag Rules"
-msgstr "Zasady etykiet ID3"
+#: ../src/misc.c:361
+msgid "Select File"
+msgstr "Wybór pliku"
 
-#. Strip tag when fields (managed by EasyTAG) are empty
-#: ../src/prefs.c:691
-msgid "Strip tags if all fields are set to blank"
-msgstr "Usuwanie etykiet, jeśli wszystkie pola są puste"
+#: ../src/misc.c:367
+msgid "Select Directory"
+msgstr "Wybór katalogu"
 
-#: ../src/prefs.c:694
-msgid ""
-"As ID3v2 tags may contain other data than Title, Artist, Album, Year, Track, "
-"Genre or Comment (as an attached image, lyrics…), this option allows you to "
-"strip the whole tag when these seven standard data fields have been set to "
-"blank."
-msgstr ""
-"Etykiety ID3v2 mogą zawierać inne dane niż Tytuł, Wykonawca, Album, Rok, "
-"Numer ścieżki, Gatunek lub Komentarz (takie jak dołączony obraz, tekst "
-"utworu…). Ta opcja umożliwia usunięcie wszystkich etykiet, gdy te siedem "
-"standardowych pól zostało ustawionych na puste."
+#: ../src/picture.c:185
+msgid "JPEG image"
+msgstr "Obraz JPEG"
 
-#. Convert old ID3v2 tag version
-#: ../src/prefs.c:700
-msgid "Automatically convert old ID3v2 tag versions"
-msgstr "Automatyczne aktualizowanie poprzednich wersji etykiet ID3v2"
+#: ../src/picture.c:187
+msgid "PNG image"
+msgstr "Obraz PNG"
 
-#: ../src/prefs.c:703
-msgid ""
-"If activated, an old ID3v2 tag version (as ID3v2.2) will be updated to the "
-"ID3v2.3 version."
-msgstr ""
-"Jeśli ta opcja jest włączona, poprzednia wersja etykiet ID3v2 (do ID3v2.2) "
-"będzie aktualizowana do wersji ID3v2.3."
+#: ../src/picture.c:189
+msgid "GIF image"
+msgstr "Obraz GIF"
 
-#. Use CRC32
-#: ../src/prefs.c:707
-msgid "Use CRC32"
-msgstr "Używanie CRC32"
+#: ../src/picture.c:191
+msgid "Unknown image"
+msgstr "Nieznany obraz"
 
-#: ../src/prefs.c:710
-msgid "Set CRC32 in the ID3v2 tags"
-msgstr "Zapisywanie CRC32 w etykietach ID3v2"
+#: ../src/picture.c:203
+msgid "32×32 pixel PNG file icon"
+msgstr "Ikona 32×32 piksele w formacie PNG"
 
-#. Use Compression
-#: ../src/prefs.c:713
-msgid "Use Compression"
-msgstr "Używanie kompresji"
+#: ../src/picture.c:205
+msgid "Other file icon"
+msgstr "Inny plik ikony"
 
-#: ../src/prefs.c:717
-msgid "Set Compression in the ID3v2 tags"
-msgstr "Ustawienie kompresji etykiet ID3v2"
+#: ../src/picture.c:207
+msgid "Cover (front)"
+msgstr "Okładka (przód)"
 
-#. Write Genre in text
-#: ../src/prefs.c:720
-msgid "Write Genre in text only"
-msgstr "Zapisywanie gatunku jako tekst"
+#: ../src/picture.c:209
+msgid "Cover (back)"
+msgstr "Okładka (tył)"
 
-#: ../src/prefs.c:724
-msgid ""
-"Don't use ID3v1 number references in genre tag. Enable this if you see "
-"numbers as genre in your music player."
-msgstr ""
-"Bez używania liczbowych gatunków ID3v1 w etykiecie gatunku. Należy to "
-"włączyć, jeśli gatunki są wyświetlane jako liczby w odtwarzaczu muzyki."
+#: ../src/picture.c:211
+msgid "Leaflet page"
+msgstr "Środek okładki"
 
-#. Character Set for writing ID3 tag
-#: ../src/prefs.c:727
-msgid "Character Set for writing ID3 tags"
-msgstr "Zestaw znaków do zapisywania etykiet ID3"
+#: ../src/picture.c:213
+msgid "Media (such as label side of CD)"
+msgstr "Nośnik (np. strona z nadrukiem na CD)"
 
-#. ID3v2 tags
-#: ../src/prefs.c:734
-msgid "ID3v2 tags"
-msgstr "Etykiety ID3v2"
+#: ../src/picture.c:215
+msgid "Lead artist/lead performer/soloist"
+msgstr "ProwadzÄ…cy wykonawca/solista"
 
-#. Write ID3v2 tag
-#: ../src/prefs.c:747
-msgid "Write ID3v2 tag"
-msgstr "Zapisywanie etykiet ID3v2"
+#: ../src/picture.c:217
+msgid "Artist/performer"
+msgstr "Wykonawca"
 
-#: ../src/prefs.c:750
-msgid ""
-"If activated, an ID3v2.4 tag will be added or updated at the beginning of "
-"the MP3 files. Else it will be stripped."
-msgstr ""
-"Jeśli ta opcja jest włączona, etykiety ID3v2.4 będą dodawane lub "
-"aktualizowane na początku pliku MP3. W przeciwnym wypadku zostaną usunięte."
+#: ../src/picture.c:219
+msgid "Conductor"
+msgstr "Dyrygent"
 
-#. ID3v2 tag version
-#: ../src/prefs.c:757
-msgid "Version:"
-msgstr "Wersja:"
+#: ../src/picture.c:221
+msgid "Band/Orchestra"
+msgstr "Zespół/orkiestra"
 
-#: ../src/prefs.c:763
-msgid ""
-"Select the ID3v2 tag version to write:\n"
-" - ID3v2.3 is written using id3lib,\n"
-" - ID3v2.4 is written using libid3tag (recommended)."
-msgstr ""
-"Proszę wybrać wersję etykiet ID3v2 do zapisywania:\n"
-" - ID3v2.3 jest zapisywane używając biblioteki id3lib,\n"
-" - ID3v2.4 jest zapisywane używając biblioteki libid3tag (zalecane)."
-
-#. Charset
-#. Id3V1 writing character set
-#: ../src/prefs.c:778 ../src/prefs.c:882
-msgid "Charset:"
-msgstr "Zestaw znaków:"
-
-#. Unicode
-#: ../src/prefs.c:783
-msgid "Unicode "
-msgstr "Unikod "
-
-#: ../src/prefs.c:791
-msgid "Unicode type to use"
-msgstr "Typ unikodu do używania"
-
-#: ../src/prefs.c:815
-msgid "Character set used to write the tag data in the file."
-msgstr "Zestaw znaków używany do zapisywania etykiet w plikach."
-
-#. ID3v2 Additional iconv() options
-#. ID3V1 Additional iconv() options
-#: ../src/prefs.c:825 ../src/prefs.c:894
-msgid "Additional settings for iconv():"
-msgstr "Dodatkowe ustawienia dla iconv():"
-
-#: ../src/prefs.c:831 ../src/prefs.c:900
-msgid "No"
-msgstr "Nie"
-
-#: ../src/prefs.c:835 ../src/prefs.c:904
-msgid ""
-"With this option, when a character cannot be represented in the target "
-"character set, it isn't changed. But note that an error message will be "
-"displayed for information."
-msgstr ""
-"Jeśli ta opcja jest włączona, kiedy dany znak nie może zostać przedstawiony "
-"w docelowym zestawie znaków, to nie zostanie on zmieniony. Proszę zauważyć, "
-"że wyświetlony zostanie komunikat błędu."
+#: ../src/picture.c:225
+msgid "Lyricist/text writer"
+msgstr "Tekściarz/autor tekstów"
 
-#: ../src/prefs.c:840 ../src/prefs.c:909
-msgid "//TRANSLIT"
-msgstr "//TRANSLIT"
+#: ../src/picture.c:227
+msgid "Recording location"
+msgstr "Miejsce nagrywania"
 
-#: ../src/prefs.c:850 ../src/prefs.c:919
-msgid "//IGNORE"
-msgstr "//IGNORE"
+#: ../src/picture.c:229
+msgid "During recording"
+msgstr "Podczas nagrywania"
 
-#. ID3v1 tags
-#: ../src/prefs.c:859
-msgid "ID3v1 tags"
-msgstr "Etykiety ID3v1"
+#: ../src/picture.c:231
+msgid "During performance"
+msgstr "Podczas występu"
 
-#. Write ID3v1 tag
-#: ../src/prefs.c:873
-msgid "Write ID3v1.x tag"
-msgstr "Zapisywanie etykiet ID3v1.x"
+#: ../src/picture.c:233
+msgid "Movie/video screen capture"
+msgstr "Zrzut ekranu z filmu/wideo"
 
-#: ../src/prefs.c:876
-msgid ""
-"If activated, an ID3v1 tag will be added or updated at the end of the MP3 "
-"files. Else it will be stripped."
-msgstr ""
-"Jeśli ta opcja jest włączona, etykiety ID3v1 będą dodawane lub aktualizowane "
-"na końcu pliku MP3. W przeciwnym wypadku zostaną usunięte."
+#: ../src/picture.c:235
+msgid "A bright colored fish"
+msgstr "Jaskrawo pokolorowana ryba"
 
-#: ../src/prefs.c:890
-msgid "Character set used to write ID3v1 tag data in the file."
-msgstr "Zestaw znaków używany do zapisywania etykiet ID3v1 w plikach."
+#: ../src/picture.c:237
+msgid "Illustration"
+msgstr "Ilustracja"
 
-#. Character Set for reading tag
-#: ../src/prefs.c:928
-msgid "Character Set for reading ID3 tags"
-msgstr "Zestawów znaków do odczytywania etykiet ID3"
+#: ../src/picture.c:239
+msgid "Band/Artist logotype"
+msgstr "Logo zespołu/wykonawcy"
 
-#: ../src/prefs.c:942
-msgid "Non-standard:"
-msgstr "Niestandardowy:"
+#: ../src/picture.c:241
+msgid "Publisher/studio logotype"
+msgstr "Logo wydawcy/studia"
 
-#: ../src/prefs.c:948
-msgid ""
-"This character set will be used when reading the tag data, to convert each "
-"string found in an ISO-8859-1 field in the tag (for ID3v2 or/and ID3v1 "
-"tag).\n"
-"\n"
-"For example:\n"
-"  - In previous versions of EasyTAG, you could save UTF-8 strings in an "
-"ISO-8859-1 field. This is not correct. To convert these tags to Unicode: "
-"activate this option and select UTF-8. You must also activate above the "
-"option 'Try to save tags to ISO-8859-1. If it isn't possible then use "
-"UNICODE (recommended)' or 'Always save tags to UNICODE character set'.\n"
-"  - If Unicode was not used, Russian people can select the character set "
-"'Windows-1251' to load tags written under Windows. And 'KOI8-R' to load tags "
-"written under Unix systems."
-msgstr ""
-"Ten zestaw znaków będzie używany podczas odczytywania etykiet do konwersji "
-"każdego ciągu w polach ISO-8859-1 (ID3v2 i/lub ID3v1).\n"
-"\n"
-"Na przykład:\n"
-"  - W poprzednich wersjach programu EasyTAG można było zapisać ciągi UTF-8 w "
-"polach ISO-8859-1. To jest nieprawidłowe. Aby przekonwertować te etykiety do "
-"unikodu należy: włączyć tę opcję i wybrać UTF-8. Należy także zaznaczyć "
-"powyższą opcję \"Próbowanie zapisania etykiet jako ISO-8859-1\", a jeśli nie "
-"jest to możliwe, próbowanie użycia unikodu (zalecane)\" lub \"Zawsze "
-"zapisywanie etykiet jako unikod\".\n"
-"   - Jeśli unikod nie jest używany, rosyjscy użytkownicy mogą wybrać zestaw "
-"znaków \"Windows-1251\", aby odczytać etykiety zapisane pod systemem "
-"Windows. Jeśli etykiety zostały zapisane pod Uniksem, należy wybrać \"KOI8-R"
-"\"."
-
-#: ../src/prefs.c:966
-msgid "Character set used to read tag data in the file."
-msgstr "Zestaw znaków używany do odczytywania etykiet w plikach."
+#: ../src/picture.c:245
+msgid "Unknown image type"
+msgstr "Nieznany typ obrazu"
 
-#.
-#. * Scanner
-#.
-#: ../src/prefs.c:980
-msgid "Scanner"
-msgstr "Skaner"
+#: ../src/picture.c:275 ../src/picture.c:286
+msgid "pixels"
+msgstr "pikseli"
 
-#. Character conversion for the 'Fill Tag' scanner (=> FTS...)
-#: ../src/prefs.c:990
-msgid "Fill Tag Scanner - Character Conversion"
-msgstr "Wypełnianie etykiet - konwersja znaków"
+#: ../src/picture.c:276 ../src/picture.c:287
+msgid "Type"
+msgstr "Typ"
 
-#: ../src/prefs.c:996 ../src/prefs.c:1021
-msgid "Convert underscore character '_' and string '%20' to space ' '"
-msgstr "Zmienianie znaków podkreślenia \"_\" i ciągów \"%20\" na spacje \" \""
+#: ../src/playlist_dialog.c:528
+#, c-format
+msgid "Cannot write playlist file ‘%s’"
+msgstr "Nie można zapisać pliku listy odtwarzania \"%s\""
 
-#: ../src/prefs.c:998 ../src/prefs.c:1022
-msgid "Convert space ' ' to underscore '_'"
-msgstr "Zmienianie spacji \" \" na podkreślenia \"_\""
+#: ../src/playlist_dialog.c:532
+msgid "Playlist File Error"
+msgstr "BÅ‚Ä…d pliku listy odtwarzania"
 
-#: ../src/prefs.c:1010 ../src/prefs.c:1012
-msgid ""
-"If activated, this conversion will be used when applying a mask from the "
-"scanner for tags."
-msgstr ""
-"Jeśli ta opcja jest włączona, to ta konwersja zostanie użyta podczas "
-"stosowania maski ze skanera dla etykiet."
+#: ../src/playlist_dialog.c:540
+#, c-format
+msgid "Wrote playlist file ‘%s’"
+msgstr "Zapisano plik listy odtwarzania \"%s\""
 
-#. Character conversion for the 'Rename File' scanner (=> RFS...)
-#: ../src/prefs.c:1016
-msgid "Rename File Scanner - Character Conversion"
-msgstr "Zmiana nazwy pliku - konwersja znaków"
+#: ../src/playlist_dialog.c:622 ../src/scan_dialog.c:2754
+#: ../src/scan_dialog.c:2816
+msgid "Invalid scanner mask"
+msgstr "Nieprawidłowa maska skanera"
 
-#: ../src/prefs.c:1033 ../src/prefs.c:1035 ../src/prefs.c:1037
-msgid ""
-"If activated, this conversion will be used when applying a mask from the "
-"scanner for filenames."
-msgstr ""
-"Jeśli ta opcja jest włączona, to ta konwersja zostanie użyta podczas "
-"stosowania maski ze skanera dla nazw plików."
+#: ../src/playlist_dialog.c:653
+msgid "Generate Playlist"
+msgstr "Utworzenie listy odtwarzania"
 
-#. Character conversion for the 'Process Fields' scanner (=> PFS...)
-#: ../src/prefs.c:1040
-msgid "Process Fields Scanner - Character Conversion"
-msgstr "Skaner przetwarzania pól - konwersja znaków"
+#. The window
+#: ../src/preferences_dialog.c:293
+msgid "Preferences"
+msgstr "Preferencje"
 
-#. Don't convert some words like to, feat. first letter uppercase.
-#: ../src/prefs.c:1047
-msgid ""
-"Don't uppercase first letter of words for some prepositions and articles."
-msgstr "Bez zmieniania pierwszych liter słów kluczowych na wielkie."
+#: ../src/preferences_dialog.c:1130
+msgid "The selected default path is invalid"
+msgstr "Wybrana domyślna ścieżka jest nieprawidłowa"
 
-#: ../src/prefs.c:1051
+#: ../src/preferences_dialog.c:1132
+#, c-format
 msgid ""
-"Don't convert first letter of words like prepositions, articles and words "
-"like feat., when using the scanner 'First letter uppercase of each "
-"word' (for example, you will obtain 'Text in an Entry' instead of 'Text In "
-"An Entry')."
+"Path: ‘%s’\n"
+"Error: %s"
 msgstr ""
-"Bez zmieniania pierwszych liter słów takich jak \"feat.\" na wielkie podczas "
-"używania skanera i opcji zmiany pierwszych liter każdego słowa na wielkie "
-"(np. zamiast \"Tekst W JakimÅ› Polu\" otrzymasz \"Tekst w JakimÅ› Polu\")."
-
-#. Properties of the scanner window
-#: ../src/prefs.c:1057
-msgid "Scanner Window"
-msgstr "Okno Skanera"
+"Ścieżka: \"%s\"\n"
+"BÅ‚Ä…d: %s"
 
-#: ../src/prefs.c:1063
-msgid "Open the Scanner Window on startup"
-msgstr "Otwarcie okna skanera podczas uruchamiania"
+#: ../src/preferences_dialog.c:1136
+msgid "Invalid Path Error"
+msgstr "Błąd nieprawidłowej ścieżki"
 
-#: ../src/prefs.c:1066
-msgid ""
-"Activate this option to open automatically the scanner window when EasyTAG "
-"starts."
-msgstr ""
-"Automatycznie otwiera okno skanera podczas uruchamiania programu EasyTAG."
+#: ../src/scan_dialog.c:303
+#, c-format
+msgid "Cannot calculate CRC value of file ‘%s’"
+msgstr "Nie można obliczyć wartości CRC pliku \"%s\""
 
-#. Other options
-#: ../src/prefs.c:1071
-msgid "Fields"
-msgstr "Pola"
+#: ../src/scan_dialog.c:319
+msgid "Tag successfully scanned"
+msgstr "Pomyślnie zeskanowany etykiety"
 
-#. Overwrite text into tag fields
-#: ../src/prefs.c:1078
-msgid "Overwrite fields when scanning tags"
-msgstr "Zastępowanie pól podczas skanowania etykiet"
+#: ../src/scan_dialog.c:322
+#, c-format
+msgid "Tag successfully scanned ‘%s’"
+msgstr "Pomyślnie zeskanowany etykiety \"%s\""
 
-#: ../src/prefs.c:1081
-msgid ""
-"If activated, the scanner will replace existing text in fields by the new "
-"one. If deactivated, only blank fields of the tag will be filled."
-msgstr ""
-"Skaner zamieni istniejący tekst nowym w polach, które już zawierają jakiś "
-"tekst. Jeśli nie jest włączone, tylko puste pola etykiet zostaną wypełnione."
+#: ../src/scan_dialog.c:365
+#, c-format
+msgid "The extension ‘%s’ was not found in filename ‘%s’"
+msgstr "Rozszerzenie \"%s\" nie zostało odnalezione w pliku \"%s\""
 
-#: ../src/prefs.c:1092
-msgid "Set this text as default comment:"
-msgstr "Ustawianie tego tekstu jako domyślny komentarz:"
+#: ../src/scan_dialog.c:455 ../src/scan_dialog.c:486
+#, c-format
+msgid "Cannot find separator ‘%s’ within ‘%s’"
+msgstr "Nie można odnaleźć separatora \"%s\" wewnątrz \"%s\""
 
-#: ../src/prefs.c:1095
-msgid ""
-"Activate this option if you want to put the following string into the "
-"comment field when using the 'Fill Tag' scanner."
+#: ../src/scan_dialog.c:710
+#, c-format
+msgid "Could not convert filename ‘%s’ into system filename encoding"
 msgstr ""
-"Należy włączyć tę opcję, aby wstawiać ten tekst do pola komentarza podczas "
-"używania skanera \"Wypełnianie etykiet\"."
+"Nie można przekonwertować nazwy pliku \"%s\" na systemowe kodowanie znaków"
 
-#. CRC32 comment
-#: ../src/prefs.c:1113
-msgid "Use CRC32 as the default comment (for files with ID3 tags only)."
-msgstr "Ustawianie sumy CRC32 pliku jako domyślny komentarz (tylko ID3)."
+#: ../src/scan_dialog.c:735
+msgid "New filename successfully scanned"
+msgstr "Pomyślnie zeskanowano nową nazwę pliku"
 
-#: ../src/prefs.c:1117
-msgid ""
-"Calculates the CRC-32 value of the file and writes it into the comment field "
-"when using the 'Fill Tag' scanner."
-msgstr ""
-"Oblicza sumę CRC-32 pliku i zapisuje ją jako komentarz podczas używania "
-"skanera \"Wypełnianie etykiet\"."
+#: ../src/scan_dialog.c:739
+#, c-format
+msgid "New filename successfully scanned ‘%s’"
+msgstr "Pomyślnie zeskanowano nową nazwę pliku \"%s\""
 
-#.
-#. * CDDB
-#.
-#: ../src/prefs.c:1128
-msgid "CDDB"
-msgstr "CDDB"
+#: ../src/scan_dialog.c:1095
+#, c-format
+msgid "Error while processing fields ‘%s’"
+msgstr "Błąd podczas przetwarzania pól \"%s\""
 
-#. CDDB Server Settings (Automatic Search)
-#: ../src/prefs.c:1134
-msgid "Server Settings for Automatic Search"
-msgstr "Ustawienia serwera do automatycznego wyszukiwania"
+#: ../src/scan_dialog.c:2024
+msgid "New_mask"
+msgstr "Nowa_maska"
 
-#: ../src/prefs.c:1143 ../src/prefs.c:1182 ../src/prefs.c:1216
-msgid "Name:"
-msgstr "Nazwa:"
+#. The window
+#: ../src/scan_dialog.c:2241
+msgid "Tag and Filename Scan"
+msgstr "Skanowanie etykiet i nazw plików"
 
-#: ../src/prefs.c:1162 ../src/prefs.c:1190 ../src/prefs.c:1225
-#: ../src/prefs.c:1310
-msgid "Port:"
-msgstr "Port:"
+#. 'Scan selected files' button
+#: ../src/scan_dialog.c:2247
+msgid "Scan Files"
+msgstr "Skanuj pliki"
 
-#: ../src/prefs.c:1172 ../src/prefs.c:1200 ../src/prefs.c:1234
-msgid "CGI Path:"
-msgstr "Ścieżka CGI:"
+#: ../src/scan_dialog.c:2253
+msgid "Scan selected files"
+msgstr "Skanuj zaznaczone pliki"
 
-#. CDDB Server Settings (Manual Search)
-#: ../src/prefs.c:1208
-msgid "Server Settings for Manual Search"
-msgstr "Ustawienia serwera dla ręcznego wyszukiwania"
+#: ../src/scan_dialog.c:2891
+msgid "All tags have been scanned"
+msgstr "Wszystkie etykiety zostały zeskanowane"
 
-#. Local access for CDDB (Automatic Search)
-#: ../src/prefs.c:1242
-msgid "Local CDDB"
-msgstr "Lokalna baza CDDB"
+#: ../src/search_dialog.c:542
+#, c-format
+msgid "Found one file"
+msgid_plural "Found %d files"
+msgstr[0] "Odnaleziono jeden plik"
+msgstr[1] "Odnaleziono %d pliki"
+msgstr[2] "Odnaleziono %d plików"
 
-#: ../src/prefs.c:1250
-msgid "Path:"
-msgstr "Ścieżka:"
+#: ../src/search_dialog.c:591
+msgid "Find Files"
+msgstr "Znajdź pliki"
 
-#: ../src/prefs.c:1262
-msgid ""
-"Specify the directory where the local CD database is located. The local CD "
-"database contains the eleven following directories 'blues', 'classical', "
-"'country', 'data', 'folk', 'jazz', 'newage', 'reggae', 'rock', 'soundtrack' "
-"and 'misc'."
-msgstr ""
-"Określa katalog, w którym znajduje się lokalna baza płyt CD. Lokalna baza "
-"danych płyt CD zawiera 11 następujących katalogów: \"blues\", \"classical\", "
-"\"country\", \"data\", \"folk\", \"jazz\", \"newage\", \"reggae\", \"rock\", "
-"\"soundtrack\" oraz \"misc\"."
-
-#. CDDB Proxy Settings
-#: ../src/prefs.c:1288
-msgid "Proxy Settings"
-msgstr "Ustawienia pośrednika"
-
-#: ../src/prefs.c:1297
-msgid "Use a proxy"
-msgstr "Używanie pośrednika"
+#: ../src/search_dialog.c:675
+msgid "Ready to search…"
+msgstr "Gotowe do wyszukiwania…"
 
-#: ../src/prefs.c:1300
-msgid "Set active the settings of the proxy server."
-msgstr "Włącza ustawienia serwera pośredniczącego."
+#: ../src/setting.c:144
+#, c-format
+msgid "Cannot create or open file ‘%s’: %s"
+msgstr "Nie można utworzyć lub otworzyć pliku \"%s\": %s"
 
-#: ../src/prefs.c:1302
-msgid "Host Name:"
-msgstr "Nazwa komputera:"
+#: ../src/setting.c:194
+#, c-format
+msgid "Cannot write list to file ‘%s’: %s"
+msgstr "Nie można zapisać listy do pliku \"%s\": %s"
 
-#: ../src/prefs.c:1309
-msgid "Name of the proxy server."
-msgstr "Nazwa serwera pośredniczącego."
+#: ../src/setting.c:212
+#, c-format
+msgid "Error while writing list file ‘%s’"
+msgstr "BÅ‚Ä…d podczas zapisywania pliku listy \"%s\""
 
-#: ../src/prefs.c:1317
-msgid "Port of the proxy server."
-msgstr "Port serwera pośredniczącego."
+#. Fall back to defaults.
+#: ../src/setting.c:292
+msgid "Loading default ‘Fill Tag’ masks…"
+msgstr "Wczytywanie domyślnych masek \"Wypełnianie etykiet\"…"
 
-#: ../src/prefs.c:1321
-msgid "User Name:"
-msgstr "Nazwa użytkownika:"
+#. Fall back to defaults.
+#: ../src/setting.c:322
+msgid "Loading default ‘Rename File’ masks…"
+msgstr "Wczytywanie domyślnych masek \"Zmiana nazw plików\"…"
 
-#: ../src/prefs.c:1328
-msgid "Name of user for the the proxy server."
-msgstr "Nazwa użytkownika dla serwera pośredniczącego."
+#: ../src/setting.c:409
+#, c-format
+msgid "Migrating configuration from directory ‘%s’ to ‘%s’"
+msgstr "Przenoszenie konfiguracji z katalogu \"%s\" do \"%s\""
 
-#: ../src/prefs.c:1329
-msgid "User Password:"
-msgstr "Hasło użytkownika:"
+#: ../src/setting.c:433
+#, c-format
+msgid "Failed to migrate configuration file ‘%s’"
+msgstr "Przeniesienie pliku konfiguracji \"%s\" się nie powiodło"
 
-#: ../src/prefs.c:1338
-msgid "Password of user for the proxy server."
-msgstr "Hasło użytkownika dla serwera pośredniczącego."
+#: ../src/setting.c:470
+#, c-format
+msgid "Cannot create directory ‘%s’: %s"
+msgstr "Nie można utworzyć katalogu \"%s\": %s"
 
-#. Track Name list (CDDB results)
-#: ../src/prefs.c:1343
-msgid "Track Name List"
-msgstr "Lista ścieżek"
+#: ../src/status_bar.c:145
+msgid "Ready to start"
+msgstr "Gotowe do rozpoczęcia"
 
-#: ../src/prefs.c:1350
-msgid ""
-"Select corresponding audio file (according position or DLM if activated "
-"below)"
-msgstr ""
-"Wybieranie odpowiedniego pliku dźwiękowego (odnośnie pozycji lub DLM, jeśli "
-"włączono poniżej)"
+#: ../src/tag_area.c:187
+#, c-format
+msgid "Selected files tagged with title ‘%s’"
+msgstr "Zaznaczonym plikom ustawiono tytuł \"%s\""
 
-#: ../src/prefs.c:1354
-msgid ""
-"If activated, when selecting a line in the list of tracks name, the "
-"corresponding audio file in the main list will be also selected."
-msgstr ""
-"Jeśli ta opcja jest włączona, to podczas zaznaczenia wiersza na liście "
-"ścieżek, odpowiedni plik dźwiękowy zostanie zaznaczony na głównej liście."
+#: ../src/tag_area.c:192
+msgid "Removed title from selected files"
+msgstr "Usunięto tytuły zaznaczonym plikom"
 
-#. Check box to use DLM (also used in the cddb window)
-#: ../src/prefs.c:1359
-msgid ""
-"Use the Levenshtein algorithm (DLM) to match lines (using title) with audio "
-"files (using filename)"
-msgstr ""
-"Używanie algorytmu Levenshteina (DLM) do dopasowywania wierszy (używając "
-"tytułu) do plików dźwiękowych (używając nazw plików)"
+#: ../src/tag_area.c:209
+#, c-format
+msgid "Selected files tagged with artist ‘%s’"
+msgstr "Zaznaczonym plikom ustawiono wykonawcÄ™ na \"%s\""
 
-#.
-#. * Confirmation
-#.
-#: ../src/prefs.c:1374
-msgid "Confirmation"
-msgstr "Potwierdzenia"
+#: ../src/tag_area.c:214
+msgid "Removed artist from selected files"
+msgstr "Usunięto wykonawcę z zaznaczonych plików"
 
-#: ../src/prefs.c:1379
-msgid "Confirm exit from program"
-msgstr "Potwierdzanie zakończenia programu"
+#: ../src/tag_area.c:230
+#, c-format
+msgid "Selected files tagged with album artist ‘%s’"
+msgstr "Zaznaczonym plikom ustawiono wykonawcÄ™ albumu na \"%s\""
 
-#: ../src/prefs.c:1382
-msgid ""
-"If activated, opens a dialog box to ask confirmation before exiting the "
-"program."
-msgstr ""
-"Jeśli ta opcja jest włączona, to wyświetla okno dialogowe proszące o "
-"potwierdzenie przed zakończeniem programu."
+#: ../src/tag_area.c:235
+msgid "Removed album artist from selected files"
+msgstr "Usunięto wykonawcę albumu z zaznaczonych plików"
 
-#: ../src/prefs.c:1385
-msgid "Confirm writing of file tag"
-msgstr "Potwierdzanie zapisania etykiet plików"
+#: ../src/tag_area.c:252
+#, c-format
+msgid "Selected files tagged with album ‘%s’"
+msgstr "Zaznaczonym plikom ustawiono album na \"%s\""
 
-#: ../src/prefs.c:1389
-msgid "Confirm renaming of file"
-msgstr "Potwierdzanie zmiany nazwy plików"
+#: ../src/tag_area.c:257
+msgid "Removed album name from selected files"
+msgstr "Usunięto album z zaznaczonych plików"
 
-#: ../src/prefs.c:1393
-msgid "Confirm deleting of file"
-msgstr "Potwierdzanie usuwania plików"
+#: ../src/tag_area.c:295
+#, c-format
+msgid "Selected files tagged with disc number ‘%s/%s’"
+msgstr "Zaznaczonym plikom ustawiono numer płyty na \"%s/%s\""
 
-#: ../src/prefs.c:1397
-msgid "Confirm writing of playlist"
-msgstr "Potwierdzanie zapisania listy odtwarzania"
+#: ../src/tag_area.c:300
+#, c-format
+msgid "Selected files tagged with disc number like ‘xx’"
+msgstr "Zaznaczonym plikom ustawiono numer płyty na \"xx\""
 
-#: ../src/prefs.c:1401
-msgid "Confirm changing directory when there are unsaved changes"
-msgstr "Potwierdzanie zmiany katalogu, kiedy sÄ… niezapisane zmiany"
+#: ../src/tag_area.c:305
+msgid "Removed disc number from selected files"
+msgstr "Usunięto numer płyty z zaznaczonych plików"
 
-#. For translators : be aware to NOT translate '%.*d' in this string
-#: ../src/prefs.c:1439
+#: ../src/tag_area.c:322
 #, c-format
-msgid "(Example: %.*d_-_Track_name_1.mp3)"
-msgstr "(Przykład: %.*d_-_Nazwa_ścieżki_1.mp3)"
+msgid "Selected files tagged with year ‘%s’"
+msgstr "Zaznaczonym plikom ustawiono rok na \"%s\""
 
-#. Translators: please do NOT translate '%.*d' in this string.
-#: ../src/prefs.c:1472
+#: ../src/tag_area.c:327
+msgid "Removed year from selected files"
+msgstr "Usunięto rok z zaznaczonych plików"
+
+#: ../src/tag_area.c:354 ../src/tag_area.c:448
 #, c-format
-msgid "(Example: disc_%.*d_of_10/Track_name_1.mp3)"
-msgstr "(Przykład: płyta_%.*d_z_10/Nazwa_ścieżki_1.mp3)"
+msgid "Selected files tagged with track like ‘xx/%s’"
+msgstr "Zaznaczonym plikom ustawiono numer ścieżki na \"xx/%s\""
 
-#: ../src/prefs.c:1614 ../src/setting.c:904
-msgid "Configuration saved"
-msgstr "Zapisano konfiguracjÄ™"
+#: ../src/tag_area.c:358
+#, c-format
+msgid "Selected files tagged with track like ‘xx’"
+msgstr "Zaznaczonym plikom ustawiono numer ścieżki na \"xx\""
 
-#: ../src/prefs.c:1622
-msgid "Configuration unchanged"
-msgstr "Nie zmieniono konfiguracji"
+#: ../src/tag_area.c:363 ../src/tag_area.c:453
+msgid "Removed track number from selected files"
+msgstr "Usunięto numer ścieżki z zaznaczonych plików"
 
-#: ../src/prefs.c:1713
-msgid "The selected path for 'Default path to files' is invalid"
-msgstr "Wybrana ścieżka dla \"Domyślnej ścieżki do plików\" jest nieprawidłowa"
+#. msg = g_strdup_printf(_("All %d tracks numbered sequentially."), ETCore->ETFileSelectionList_Length);
+#: ../src/tag_area.c:421
+#, c-format
+msgid "Selected tracks numbered sequentially"
+msgstr "Zaznaczone pliki ponumerowano według kolejności"
 
-#: ../src/prefs.c:1715
+#: ../src/tag_area.c:470
 #, c-format
-msgid ""
-"Path: '%s'\n"
-"Error: %s"
-msgstr ""
-"Ścieżka: \"%s\"\n"
-"BÅ‚Ä…d: %s"
+msgid "Selected files tagged with genre ‘%s’"
+msgstr "Zaznaczonym plikom ustawiono gatunek na \"%s\""
 
-#: ../src/prefs.c:1717
-msgid "Invalid Path Error"
-msgstr "Błąd nieprawidłowej ścieżki"
+#: ../src/tag_area.c:475
+msgid "Removed genre from selected files"
+msgstr "Usunięto gatunek z zaznaczonych plików"
 
-#: ../src/prefs.c:1831
+#: ../src/tag_area.c:499
 #, c-format
-msgid "The audio file player '%s' cannot be found"
-msgstr "Nie można odnaleźć odtwarzacza dźwięku \"%s\""
-
-#: ../src/prefs.c:1833
-msgid "Audio Player Error"
-msgstr "Błąd odtwarzacza dźwięku"
+msgid "Selected files tagged with comment ‘%s’"
+msgstr "Zaznaczonym plikom ustawiono komentarz na \"%s\""
 
-#: ../src/scan_dialog.c:182
-msgid "Fill Tag"
-msgstr "Wypełnianie etykiet"
+#: ../src/tag_area.c:504
+msgid "Removed comment from selected files"
+msgstr "Usunięto komentarz z zaznaczonych plików"
 
-#: ../src/scan_dialog.c:356
+#: ../src/tag_area.c:520
 #, c-format
-msgid "Cannot calculate CRC value of file (%s)"
-msgstr "Nie można obliczyć wartości CRC pliku (%s)"
+msgid "Selected files tagged with composer ‘%s’"
+msgstr "Zaznaczonym plikom ustawiono kompozytora na \"%s\""
 
-#: ../src/scan_dialog.c:371
-msgid "Tag successfully scanned"
-msgstr "Pomyślnie zeskanowany etykiety"
+#: ../src/tag_area.c:525
+msgid "Removed composer from selected files"
+msgstr "Usunięto kompozytora z zaznaczonych plików"
 
-#: ../src/scan_dialog.c:373
+#: ../src/tag_area.c:542
 #, c-format
-msgid "Tag successfully scanned: %s"
-msgstr "Pomyślnie zeskanowany etykiety: %s"
+msgid "Selected files tagged with original artist ‘%s’"
+msgstr "Zaznaczonym plikom ustawiono pierwotnego wykonawcÄ™ na \"%s\""
 
-#: ../src/scan_dialog.c:414
-#, c-format
-msgid "Tag scanner: strange… the extension '%s' was not found in filename '%s'"
-msgstr ""
-"Skaner etykiet: rozszerzenie \"%s\" nie zostało odnalezione w pliku \"%s\""
+#: ../src/tag_area.c:547
+msgid "Removed original artist from selected files"
+msgstr "Usunięto pierwotnego wykonawcę z zaznaczonych plików"
 
-#: ../src/scan_dialog.c:496 ../src/scan_dialog.c:525
+#: ../src/tag_area.c:564
 #, c-format
-msgid "Scan Error: can't find separator '%s' within '%s'"
-msgstr "Błąd skanowania: nie można odnaleźć separatora \"%s\" wewnątrz \"%s\""
+msgid "Selected files tagged with copyright ‘%s’"
+msgstr "Zaznaczonym plikom ustawiono prawa autorskie na \"%s\""
 
-#: ../src/scan_dialog.c:712
-msgid "New filename successfully scanned"
-msgstr "Pomyślnie zeskanowano nową nazwę pliku"
+#: ../src/tag_area.c:569
+msgid "Removed copyright from selected files"
+msgstr "Usunięto prawa autorskie z zaznaczonych plików"
 
-#: ../src/scan_dialog.c:715
+#: ../src/tag_area.c:586
 #, c-format
-msgid "New filename successfully scanned: %s"
-msgstr "Pomyślnie zeskanowano nową nazwę pliku: %s"
+msgid "Selected files tagged with URL ‘%s’"
+msgstr "Zaznaczonym plikom ustawiono adres URL na \"%s\""
 
-#: ../src/scan_dialog.c:1632
-#, c-format
-msgid "Error while processing fields: %s"
-msgstr "Błąd podczas przetwarzania pól: %s"
+#: ../src/tag_area.c:591
+msgid "Removed URL from selected files"
+msgstr "Usunięto adres URL z zaznaczonych plików"
 
-#. The window
-#: ../src/scan_dialog.c:1802
-msgid "Tag and Filename Scan"
-msgstr "Skanowanie etykiet i nazw plików"
+#: ../src/tag_area.c:608
+#, c-format
+msgid "Selected files tagged with encoder name ‘%s’"
+msgstr "Zaznaczonym plikom ustawiono nazwisko kodera na \"%s\""
 
-#. TODO: Set related action to match AM_SCAN_FILES.
-#: ../src/scan_dialog.c:1811
-msgid "Scan Files"
-msgstr "Skanuj pliki"
+#: ../src/tag_area.c:613
+msgid "Removed encoder name from selected files"
+msgstr "Usunięto nazwisko kodera z zaznaczonych plików"
 
-#. Option Menu
-#: ../src/scan_dialog.c:1839
-msgid "Scanner:"
-msgstr "Skaner:"
+#: ../src/tag_area.c:647
+msgid "Selected files tagged with images"
+msgstr "Ustawiono obrazy w zaznaczonych plikach"
 
-#: ../src/scan_dialog.c:1860
-msgid "Select the type of scanner to use"
-msgstr "Proszę wybrać typ skanera, który ma zostać użyty"
+#: ../src/tag_area.c:651
+msgid "Removed images from selected files"
+msgstr "Usunięto obrazy z zaznaczonych plików"
 
-#: ../src/scan_dialog.c:1869
-msgid "Scanner Preferences"
-msgstr "Preferencje skanera"
+#. Menu items
+#: ../src/tag_area.c:820
+msgid "Tag selected files with this field"
+msgstr "Wartość z tego pola zostanie wstawiona do zaznaczonych plików"
 
-#: ../src/scan_dialog.c:1878
-msgid "Show / Hide Masks Editor"
-msgstr "Wyświetla/ukrywa edytor masek"
+#: ../src/tag_area.c:847
+msgid "All uppercase"
+msgstr "Wszystko wielkÄ… literÄ…"
 
-#: ../src/scan_dialog.c:1888
-msgid "Show / Hide Legend"
-msgstr "Wyświetla/ukrywa legendę"
+#: ../src/tag_area.c:853
+msgid "All lowercase"
+msgstr "Wszystko małą literą"
 
-#: ../src/scan_dialog.c:1918
-msgid ""
-"Select or type in a mask using codes (see Legend) to parse filename and "
-"path. Used to fill in tag fields"
-msgstr ""
-"Proszę wybrać lub wprowadzić maskę używając kodów (proszę zobaczyć \"Legendę"
-"\"), aby przetworzyć nazwę pliku i ścieżkę. Używane do wypełniania pól "
-"etykiet"
+#: ../src/tag_area.c:859
+msgid "First letter uppercase"
+msgstr "Wielka pierwsza litera"
 
-#. Preview label
-#: ../src/scan_dialog.c:1942
-msgid "Fill tag preview"
-msgstr "PodglÄ…d zmiany etykiet"
+#: ../src/tag_area.c:865
+msgid "First letter uppercase of each word"
+msgstr "Wielka pierwsza litera każdego słowa"
 
-#: ../src/scan_dialog.c:1972
-msgid "Prefix mask with current path"
-msgstr "Dodaje do maski przedrostek bieżącej ścieżki"
+#: ../src/tag_area.c:881
+msgid "Insert space before uppercase letter"
+msgstr "Wstawianie spacji przed wielkÄ… literÄ…"
 
-#: ../src/scan_dialog.c:1986
-msgid ""
-"Select or type in a mask using codes (see Legend) to parse tag fields. Used "
-"to rename the file.\n"
-"Use / to make directories. If the first character is /, it's a absolute "
-"path, otherwise is relative to the old path."
-msgstr ""
-"Proszę wybrać lub wprowadzić maskę używając kodów (proszę zobaczyć \"Legendę"
-"\"), aby przetworzyć pola etykiet. Używane do zmiany nazwy pliku.\n"
-"Można użyć \"/\", aby tworzyć katalogi. Jeśli pierwszym znakiem jest \"/\", "
-"oznacza on ścieżkę bezwzględną, w innych przypadkach ścieżka traktowana jest "
-"jako względna."
+#: ../src/tag_area.c:887
+msgid "Remove duplicate spaces or underscores"
+msgstr "Usuwanie powtarzających się spacji lub znaków podkreślenia"
 
-#. Preview label
-#: ../src/scan_dialog.c:2011
-msgid "Rename file preview"
-msgstr "PodglÄ…d zmiany nazwy pliku"
+#: ../src/tag_area.c:893
+msgid "Remove all text"
+msgstr "Usuwanie całego tekstu"
 
-#: ../src/scan_dialog.c:2030
-msgid "Select fields:"
-msgstr "Proszę wybrać pola:"
+#: ../src/tag_area.c:1269 ../src/tag_area.c:1346 ../src/tags/ogg_tag.c:1050
+#: ../src/tags/ogg_tag.c:1065
+#, c-format
+msgid "Error parsing image data ‘%s’"
+msgstr "BÅ‚Ä…d podczas przetwarzania danych obrazu \"%s\""
 
-#: ../src/scan_dialog.c:2033
+#: ../src/tag_area.c:1328
 msgid ""
-"The buttons on the right represent the fields which can be processed. Select "
-"those which interest you"
+"Cannot display the image because not enough data has been read to determine "
+"how to create the image buffer"
 msgstr ""
-"Przyciski po prawej stronie reprezentują pola, które mogą zostać "
-"przetworzone. Proszę wybrać te, które mają zostać zmienione"
-
-#. Advice for Translators: set the first letter of filename translated
-#: ../src/scan_dialog.c:2037
-msgid "F"
-msgstr "N"
-
-#: ../src/scan_dialog.c:2039
-msgid "Process filename field"
-msgstr "Przetwarzanie pola nazwy pliku"
+"Nie można wyświetlić obrazu, ponieważ za mała ilość danych została "
+"odczytana, aby ustalić, jak utworzyć bufor obrazu"
 
-#. Advice for Translators: set the first letter of title translated
-#: ../src/scan_dialog.c:2041
-msgid "T"
-msgstr "T"
+#: ../src/tag_area.c:1335
+msgid "Cannot display the image"
+msgstr "Nie można wyświetlić obrazu"
 
-#: ../src/scan_dialog.c:2042
-msgid "Process title field"
-msgstr "Przetwarzanie pola tytułu"
+#: ../src/tag_area.c:1337
+msgid ""
+"Not enough data has been read to determine how to create the image buffer."
+msgstr ""
+"Za mała ilość danych została odczytana, aby ustalić, jak utworzyć bufor "
+"obrazu."
 
-#. Advice for Translators: set the first letter of artist translated
-#: ../src/scan_dialog.c:2044
-msgid "Ar"
-msgstr "W"
+#: ../src/tag_area.c:1339
+msgid "Load Image File"
+msgstr "Wczytaj plik obrazu"
 
-#: ../src/scan_dialog.c:2045
-msgid "Process file artist field"
-msgstr "Przetwarzanie pola wykonawcy"
+#: ../src/tag_area.c:1383 ../src/tag_area.c:1408
+#, c-format
+msgid "Image file not loaded ‘%s’"
+msgstr "Plik obrazu nie został wczytany \"%s\""
 
-#. Advice for Translators: set the first letter of album artist translated
-#: ../src/scan_dialog.c:2047
-msgid "AA"
-msgstr "WA"
+#: ../src/tag_area.c:1400
+#, c-format
+msgid "Cannot open file ‘%s’"
+msgstr "Nie można otworzyć pliku \"%s\""
 
-#: ../src/scan_dialog.c:2048
-msgid "Process album artist field"
-msgstr "Przetwarzanie pola wykonawcy albumu"
+#: ../src/tag_area.c:1404
+msgid "Image File Error"
+msgstr "BÅ‚Ä…d pliku obrazu"
 
-#. Advice for Translators: set the first letter of album translated
-#: ../src/scan_dialog.c:2050
-msgid "Al"
-msgstr "Al"
+#: ../src/tag_area.c:1415
+msgid "Image file loaded"
+msgstr "Wczytano plik obrazu"
 
-#: ../src/scan_dialog.c:2051
-msgid "Process album field"
-msgstr "Przetwarzanie pola albumu"
+#: ../src/tag_area.c:1486
+msgid "Add Images"
+msgstr "Dodaj obrazy"
 
-#. Advice for Translators: set the first letter of genre translated
-#: ../src/scan_dialog.c:2053
-msgid "G"
-msgstr "G"
+#: ../src/tag_area.c:1497 ../src/tag_area.c:1861
+msgid "All Files"
+msgstr "Wszystkie pliki"
 
-#: ../src/scan_dialog.c:2054
-msgid "Process genre field"
-msgstr "Przetwarzanie pola gatunku"
+#: ../src/tag_area.c:1503 ../src/tag_area.c:1867
+msgid "PNG and JPEG"
+msgstr "PNG i JPEG"
 
-#. Advice for Translators: set the first letter of comment translated
-#: ../src/scan_dialog.c:2056
-msgid "Cm"
-msgstr "Km"
+#: ../src/tag_area.c:1647
+#, c-format
+msgid "Image Properties %d/%d"
+msgstr "Właściwości obrazu %d/%d"
 
-#: ../src/scan_dialog.c:2057
-msgid "Process comment field"
-msgstr "Przetwarzanie pola komentarza"
+#: ../src/tag_area.c:1846
+#, c-format
+msgid "Save Image %d/%d"
+msgstr "Zapisz obraz %d/%d"
 
-#. Advice for Translators: set the first letter of composer translated
-#: ../src/scan_dialog.c:2059
-msgid "Cp"
-msgstr "Kp"
+#: ../src/tag_area.c:1923
+#, c-format
+msgid "Image file not saved ‘%s’"
+msgstr "Plik obrazu nie został zapisany \"%s\""
 
-#: ../src/scan_dialog.c:2060
-msgid "Process composer field"
-msgstr "Przetwarzanie pola kompozytora"
+#: ../src/tag_area.c:2266
+msgid "Tag selected files with this genre"
+msgstr "Gatunek z tego pola zostanie wstawiony do zaznaczonych plików"
 
-#. Advice for Translators: set the first letter of orig artist translated
-#: ../src/scan_dialog.c:2062
-msgid "O"
-msgstr "P"
+#: ../src/tag_area.c:2996
+msgid "ID3 Tag"
+msgstr "Etykieta ID3"
 
-#: ../src/scan_dialog.c:2063
-msgid "Process original artist field"
-msgstr "Przetwarzanie pola pierwotnego wykonawcy"
+#: ../src/tag_area.c:3001
+msgid "Ogg Vorbis Tag"
+msgstr "Etykieta Ogg Vorbis"
 
-#. Advice for Translators: set the first letter of copyright translated
-#: ../src/scan_dialog.c:2065
-msgid "Cr"
-msgstr "Cr"
+#: ../src/tag_area.c:3006
+msgid "FLAC Vorbis Tag"
+msgstr "Etykieta FLAC Vorbis"
 
-#: ../src/scan_dialog.c:2066
-msgid "Process copyright field"
-msgstr "Przetwarzanie pola praw autorskich"
+#: ../src/tag_area.c:3010
+msgid "APE Tag"
+msgstr "Etykieta APE"
 
-#. Advice for Translators: set the first letter of URL translated
-#: ../src/scan_dialog.c:2068
-msgid "U"
-msgstr "U"
+#: ../src/tag_area.c:3014
+msgid "MP4/M4A/AAC Tag"
+msgstr "Etykieta MP4/M4A/AAC"
 
-#: ../src/scan_dialog.c:2069
-msgid "Process URL field"
-msgstr "Przetwarzanie pola adresu URL"
+#: ../src/tag_area.c:3019
+msgid "Wavpack Tag"
+msgstr "Etykieta WavPack"
 
-#. Advice for Translators: set the first letter of encoder name translated
-#: ../src/scan_dialog.c:2071
-msgid "E"
-msgstr "K"
+#: ../src/tag_area.c:3024
+msgid "Opus Tag"
+msgstr "Etykieta Opus"
 
-#: ../src/scan_dialog.c:2072
-msgid "Process encoder name field"
-msgstr "Przetwarzanie pola nazwa kodera"
+#: ../src/tag_area.c:3264
+#, c-format
+msgid "Images (%d)"
+msgstr "Obrazy (%d)"
 
-#: ../src/scan_dialog.c:2116
-msgid "Invert selection"
-msgstr "Odwróć zaznaczenie"
+#: ../src/tags/ape_tag.c:64 ../src/tags/flac_tag.c:134
+#: ../src/tags/id3v24_tag.c:115
+#, c-format
+msgid "Error while opening file: %s"
+msgstr "BÅ‚Ä…d podczas otwierania pliku: %s"
 
-#: ../src/scan_dialog.c:2123
-msgid "Select/Unselect all"
-msgstr "Zaznacz/odznacz wszystko"
+#: ../src/tags/ape_tag.c:364
+msgid "Failed to write APE tag"
+msgstr "Zapisanie etykiety APE się nie powiodło"
 
-#: ../src/scan_dialog.c:2138
-msgid "Convert:"
-msgstr "Zamiana:"
+#: ../src/tags/flac_header.c:221
+msgid "Error opening FLAC file"
+msgstr "BÅ‚Ä…d podczas otwierania pliku FLAC"
 
-#: ../src/scan_dialog.c:2140
-msgid "to: "
-msgstr "na: "
+#: ../src/tags/flac_header.c:309
+msgid "FLAC File"
+msgstr "Plik FLAC"
 
-#: ../src/scan_dialog.c:2147
-msgid "Do not convert"
-msgstr "Bez zmieniania"
+#. Mode
+#. Mode
+#. mpeg4ip library seems to always return -1
+#. Mode
+#: ../src/tags/flac_header.c:322 ../src/tags/mp4_header.cc:153
+#: ../src/tags/ogg_header.c:424 ../src/tags/opus_header.c:238
+#: ../src/tags/wavpack_header.c:98
+msgid "Channels:"
+msgstr "Kanały:"
 
-#: ../src/scan_dialog.c:2177
+#: ../src/tags/flac_tag.c:356 ../src/tags/ogg_tag.c:292
+#, c-format
 msgid ""
-"The underscore character or the string '%20' are replaced by one space. "
-"Example, before: 'Text%20In%20An_Entry', after: 'Text In An Entry'."
+"The year value ‘%s’ seems to be invalid in file ‘%s’. The information will "
+"be lost when saving"
 msgstr ""
-"Znak podkreślenia oraz ciąg \"%20\" jest zamieniany na jedną spację. "
-"Przykład, przed: \"Tekst%20w%20jakimś_polu\", po: \"Tekst w jakimś polu\"."
+"Wartość roku \"%s\" w pliku \"%s\" jest nieprawidłowa. Informacja zostanie "
+"utracona podczas zapisywania"
 
-#: ../src/scan_dialog.c:2180
-msgid ""
-"The space character is replaced by one underscore character. Example, "
-"before: 'Text In An Entry', after: 'Text_In_An_Entry'."
-msgstr ""
-"Znak spacji jest zamieniany na jeden znak podkreślenia. Przykład, przed: "
-"\"Tekst w jakimś polu\", po: \"Tekst_w_jakimś_polu\"."
+#: ../src/tags/flac_tag.c:860 ../src/tags/flac_tag.c:872
+#, c-format
+msgid "Error while opening file ‘%s’ as FLAC: %s"
+msgstr "BÅ‚Ä…d podczas otwierania pliku \"%s\" jako FLAC: %s"
 
-#: ../src/scan_dialog.c:2183
-msgid ""
-"Replace a string by another one. Note that the search is case sensitive."
-msgstr "Zamienia podany tekst na inny. Wyszukiwanie rozróżnia wielkość liter."
+#: ../src/tags/flac_tag.c:1092
+#, c-format
+msgid "Picture block is invalid ‘%s’"
+msgstr "Nieprawidłowy blok obrazu \"%s\""
 
-#: ../src/scan_dialog.c:2190
-msgid "Capitalize all"
-msgstr "Wszystkie wielkie litery"
+#: ../src/tags/flac_tag.c:1129
+#, c-format
+msgid "Failed to write comments to file ‘%s’: %s"
+msgstr "Zapisanie komentarzy do pliku \"%s\" się nie powiodło: %s"
 
-#: ../src/scan_dialog.c:2192
-msgid "Lowercase all"
-msgstr "Wszystkie małe litery"
+#: ../src/tags/id3_tag.c:212
+#, c-format
+msgid ""
+"As the following corrupted file ‘%s’ will cause an error in id3lib, it will "
+"not be processed"
+msgstr ""
+"Uszkodzony plik \"%s\" spowoduje błąd w bibliotece id3lib, więc nie zostanie "
+"on przetworzony"
 
-#: ../src/scan_dialog.c:2194
-msgid "Capitalize first letter"
-msgstr "Wielka pierwsza litera"
+#: ../src/tags/id3_tag.c:214
+msgid "Corrupted file"
+msgstr "Uszkodzony plik"
 
-#: ../src/scan_dialog.c:2196
-msgid "Capitalize the first letter of each word"
-msgstr "Wielka pierwsza litera każdego słowa"
+#: ../src/tags/id3_tag.c:596
+#, c-format
+msgid "Removed tag of ‘%s’"
+msgstr "Usunięto etykietę z pliku \"%s\""
 
-#: ../src/scan_dialog.c:2197
-msgid "Detect Roman numerals"
-msgstr "Wykrywanie liczb rzymskich"
+#: ../src/tags/id3_tag.c:603 ../src/tags/id3_tag.c:730
+#, c-format
+msgid "Error while removing ID3v1 tag of ‘%s’: %s"
+msgstr "BÅ‚Ä…d podczas usuwania etykiety ID3v1 pliku \"%s\": %s"
 
-#: ../src/scan_dialog.c:2199
-msgid "Do not change capitalization"
-msgstr "Bez zmiany wielkości liter"
+#: ../src/tags/id3_tag.c:612 ../src/tags/id3_tag.c:693
+#, c-format
+msgid "Error while removing ID3v2 tag of ‘%s’: %s"
+msgstr "BÅ‚Ä…d podczas usuwania etykiety ID3v2 pliku \"%s\": %s"
 
-#: ../src/scan_dialog.c:2236
-msgid ""
-"Convert all words in all fields to upper case. Example, before: 'Text IN AN "
-"entry', after: 'TEXT IN AN ENTRY'."
-msgstr ""
-"Zamienia wszystkie słowa we wszystkich polach na wielkie litery. Przykład, "
-"przed: \"Tekst W JAKIMÅš polu\", po: \"TEKST W JAKIMÅš POLU\"."
+#: ../src/tags/id3_tag.c:638
+#, c-format
+msgid "Error while updating ID3v2 tag of ‘%s’: %s"
+msgstr "BÅ‚Ä…d podczas uaktualniania etykiety ID3v2 pliku \"%s\": %s"
 
-#: ../src/scan_dialog.c:2239
+#: ../src/tags/id3_tag.c:668
 msgid ""
-"Convert all words in all fields to lower case. Example, before: 'TEXT IN an "
-"entry', after: 'text in an entry'."
+"You have tried to save this tag to Unicode but it was detected that your "
+"version of id3lib is buggy"
 msgstr ""
-"Zamienia wszystkie słowa we wszystkich polach na małe litery. Przykład, "
-"przed: \"TEKST W jakimÅ› polu\", po: \"tekst w jakimÅ› polu\"."
+"Próbowano zapisać tę etykietę w kodowaniu Unicode, ale wykryto wersję "
+"biblioteki id3lib z błędami"
 
-#: ../src/scan_dialog.c:2242
+#: ../src/tags/id3_tag.c:670
+#, c-format
 msgid ""
-"Convert the initial of the first word in all fields to upper case. Example, "
-"before: 'text IN An ENTRY', after: 'Text in an entry'."
+"If you reload this file, some characters in the tag may not be displayed "
+"correctly. Please, apply the patch src/id3lib/"
+"patch_id3lib_3.8.3_UTF16_writing_bug.diff to id3lib, which is available in "
+"the EasyTAG package sources.\n"
+"Note that this message will appear only once.\n"
+"\n"
+"File: %s"
 msgstr ""
-"Zamienia pierwszą literę pierwszego słowa we wszystkich polach na wielką "
-"literę. Przykład, przed: \"Tekst W Jakimś POLU\", po: \"Tekst w jakimś polu"
-"\"."
+"Jeśli ten plik zostanie ponownie wczytany, to niektóre znaki w etykiecie "
+"mogą nie być poprawnie wyświetlane. Proszę zastosować łatę src/id3lib/"
+"patch_id3lib_3.8.3_UTF16_writing_bug.diff na bibliotece id3lib, która jest "
+"dostępna w źródłach pakietu EasyTAG.\n"
+"Proszę zauważyć, że ten komunikat pojawi się tylko raz.\n"
+"\n"
+"Plik: %s"
 
-#: ../src/scan_dialog.c:2245
-msgid ""
-"Convert the initial of each word in all fields to upper case. Example, "
-"before: 'Text in an ENTRY', after: 'Text In An Entry'."
-msgstr ""
-"Zamienia pierwszą literę każdego słowa we wszystkich polach na wielką "
-"literę. Przykład, przed: \"Tekst w jakimś POLU\", po: \"Tekst W Jakimś Polu"
-"\"."
+#: ../src/tags/id3_tag.c:677
+msgid "Buggy id3lib"
+msgstr "Biblioteka id3lib z błędami"
 
-#: ../src/scan_dialog.c:2248
-msgid ""
-"Force to convert to upper case the Roman numerals. Example, before: 'ix. "
-"text in an entry', after: 'IX. Text In An Entry'."
-msgstr ""
-"Wymusza zamienianie liczb rzymskich na duże litery. Przykład, przed: \"ix. "
-"tekst w jakimÅ› polu\", po: \"IX. Tekst W JakimÅ› Polu\"."
+#: ../src/tags/id3_tag.c:718
+#, c-format
+msgid "Error while updating ID3v1 tag of ‘%s’: %s"
+msgstr "BÅ‚Ä…d podczas aktualizowania etykiety ID3v1 pliku \"%s\": %s"
 
-#: ../src/scan_dialog.c:2256
-msgid "Insert a space before uppercase letters"
-msgstr "Wstawianie spacji przed wielkÄ… literÄ…"
+#: ../src/tags/id3_tag.c:751
+msgid "No error reported"
+msgstr "Nie zgłoszono błędów"
 
-#: ../src/scan_dialog.c:2258
-msgid "Remove duplicate spaces and underscores"
-msgstr "Usuwanie powtarzających się spacji i znaków podkreślenia"
+#: ../src/tags/id3_tag.c:753
+msgid "No available memory"
+msgstr "Brak dostępnej pamięci"
 
-#: ../src/scan_dialog.c:2260
-msgid "Do not change word separators"
-msgstr "Bez zmiany separatorów słów"
+#: ../src/tags/id3_tag.c:755
+msgid "No data to parse"
+msgstr "Brak danych do przetwarzania"
 
-#: ../src/scan_dialog.c:2282
-msgid ""
-"All spaces between words are removed. Example, before: 'Text In An Entry', "
-"after: 'TextInAnEntry'."
-msgstr ""
-"Wszystkie spacje pomiędzy słowami są usuwane. Przykład, przed: \"Tekst W "
-"Jakimś Polu\", po: \"TekstWJakimśPolu\"."
+#: ../src/tags/id3_tag.c:757
+msgid "Improperly formatted data"
+msgstr "Niepoprawnie sformatowane dane"
 
-#: ../src/scan_dialog.c:2285
-msgid ""
-"A space is inserted before each upper case letter. Example, before: "
-"'TextInAnEntry', after: 'Text In An Entry'."
-msgstr ""
-"Spacja jest wstawiana przed każdą wielką literą. Przykład, przed: "
-"\"TekstWJakimśPolu\", po: \"Tekst W Jakimś Polu\"."
+#: ../src/tags/id3_tag.c:759
+msgid "No buffer to write to"
+msgstr "Brak bufora do zapisu"
 
-#: ../src/scan_dialog.c:2288
-msgid ""
-"Duplicate spaces and underscores are removed. Example, before: "
-"'Text__In__An   Entry', after: 'Text_In_An Entry'."
-msgstr ""
-"Podwójne spacje i podkreślenia są usuwane. Przykład, przed: "
-"\"Tekst__W__JakimÅ›  Polu\", po: \"Tekst_W_JakimÅ› Polu\"."
+#: ../src/tags/id3_tag.c:761
+msgid "Buffer is too small"
+msgstr "Bufor jest za mały"
 
-#.
-#. * Frame to display codes legend
-#.
-#: ../src/scan_dialog.c:2295
-msgid "Legend"
-msgstr "Legenda"
+#: ../src/tags/id3_tag.c:763
+msgid "Invalid frame ID"
+msgstr "Nieprawidłowy identyfikator ramki"
 
-#: ../src/scan_dialog.c:2301
-#, c-format
-msgid "%a: artist"
-msgstr "%a: wykonawca"
+#: ../src/tags/id3_tag.c:765
+msgid "Requested field not found"
+msgstr "Nie odnaleziono żądanego pola"
 
-#: ../src/scan_dialog.c:2304
-msgid "%z: album artist"
-msgstr "%z: wykonawca albumu"
+#: ../src/tags/id3_tag.c:767
+msgid "Unknown field type"
+msgstr "Nieznany typ pola"
 
-#: ../src/scan_dialog.c:2307
-msgid "%b: album"
-msgstr "%b: album"
+#: ../src/tags/id3_tag.c:769
+msgid "Tag is already attached to a file"
+msgstr "Plik już posiada dołączoną etykietę"
 
-#: ../src/scan_dialog.c:2310
-#, c-format
-msgid "%c: comment"
-msgstr "%c: komentarz"
+#: ../src/tags/id3_tag.c:771
+msgid "Invalid tag version"
+msgstr "Nieprawidłowa wersja etykiety"
 
-#: ../src/scan_dialog.c:2313
-#, c-format
-msgid "%p: composer"
-msgstr "%p: kompozytor"
+#: ../src/tags/id3_tag.c:773
+msgid "No file to parse"
+msgstr "Brak pliku do przetwarzania"
 
-#: ../src/scan_dialog.c:2316
-msgid "%r: copyright"
-msgstr "%r: prawa autorskie"
+#: ../src/tags/id3_tag.c:775
+msgid "Attempting to write to a read-only file"
+msgstr "Próba zapisania do pliku tylko do odczytu"
 
-#: ../src/scan_dialog.c:2319
-#, c-format
-msgid "%d: disc number"
-msgstr "%d: numer płyty"
+#: ../src/tags/id3_tag.c:777
+msgid "Error in compression/uncompression"
+msgstr "BÅ‚Ä…d podczas kompresji/dekompresji"
 
-#: ../src/scan_dialog.c:2322
-#, c-format
-msgid "%e: encoded by"
-msgstr "%e: koder"
+#: ../src/tags/id3_tag.c:779
+msgid "Unknown error message"
+msgstr "Nieznany komunikat błędu"
 
-#: ../src/scan_dialog.c:2325
-#, c-format
-msgid "%g: genre"
-msgstr "%g: gatunek"
+#: ../src/tags/id3_tag.c:1456
+msgid "Error while creating temporary file"
+msgstr "BÅ‚Ä…d podczas tworzenia pliku tymczasowego"
 
-#: ../src/scan_dialog.c:2328
+#. Translators: The first string is a filename, the
+#. * second string is the number of bytes that were
+#. * missing (not read for some reason) while reading
+#. * from the file.
+#.
+#: ../src/tags/id3v24_tag.c:1634
 #, c-format
-msgid "%i: ignored"
-msgstr "%i: ignorowane"
-
-#: ../src/scan_dialog.c:2331
-msgid "%l: number of tracks"
-msgstr "%l: liczba ścieżek"
+msgid "Cannot write tag of file ‘%s’ (a byte was missing)"
+msgid_plural "Cannot write tag of file ‘%s’ (%s bytes were missing)"
+msgstr[0] "Nie można zapisać etykiety w pliku \"%s\" (brak jednego bajtu)"
+msgstr[1] "Nie można zapisać etykiety w pliku \"%s\" (brak %s bajtów)"
+msgstr[2] "Nie można zapisać etykiety w pliku \"%s\" (brak %s bajtów)"
 
-#: ../src/scan_dialog.c:2334
+#: ../src/tags/id3v24_tag.c:1657
 #, c-format
-msgid "%o: orig. artist"
-msgstr "%o: pierwotny wykonawca"
+msgid "Cannot save tag of file ‘%s’"
+msgstr "Nie można zapisać etykiety pliku \"%s\""
 
-#: ../src/scan_dialog.c:2337
+#: ../src/tags/id3v24_tag.c:1669
 #, c-format
-msgid "%n: track"
-msgstr "%n: ścieżka"
+msgid "Size error while saving tag of ‘%s’"
+msgstr "BÅ‚Ä…d rozmiaru podczas etykiety pliku \"%s\""
 
-#: ../src/scan_dialog.c:2340
-msgid "%t: title"
-msgstr "%t: tytuł"
+#: ../src/tags/monkeyaudio_header.c:57
+msgid "Error opening Monkey’s Audio file"
+msgstr "BÅ‚Ä…d podczas otwierania pliku Monkey's Audio"
 
-#: ../src/scan_dialog.c:2343
-#, c-format
-msgid "%u: URL"
-msgstr "%u: adres URL"
+#. Mode changed to profile name
+#: ../src/tags/monkeyaudio_header.c:87 ../src/tags/musepack_header.c:90
+msgid "Profile:"
+msgstr "Profil:"
 
-#: ../src/scan_dialog.c:2346
+#: ../src/tags/mp4_header.cc:49 ../src/tags/mp4_header.cc:63
+#: ../src/tags/mp4_tag.cc:73 ../src/tags/mp4_tag.cc:90
+#: ../src/tags/mp4_tag.cc:96 ../src/tags/mp4_tag.cc:272
+#: ../src/tags/mp4_tag.cc:289 ../src/tags/mp4_tag.cc:295
+#: ../src/tags/ogg_header.c:229
 #, c-format
-msgid "%x: number of discs"
-msgstr "%x: liczba płyt"
+msgid "Error while opening file ‘%s’: %s"
+msgstr "BÅ‚Ä…d podczas otwierania pliku \"%s\": %s"
 
-#: ../src/scan_dialog.c:2349
-msgid "%y: year"
-msgstr "%y: rok"
+#: ../src/tags/mp4_header.cc:64 ../src/tags/mp4_tag.cc:97
+#: ../src/tags/mp4_tag.cc:296
+msgid "MP4 format invalid"
+msgstr "Nieprawidłowy format MP4"
 
-#.
-#. * Masks Editor
-#.
-#: ../src/scan_dialog.c:2356
-msgid "Mask Editor"
-msgstr "Edytor masek"
+#: ../src/tags/mp4_header.cc:75
+#, c-format
+msgid "Error reading properties from file ‘%s’"
+msgstr "Błąd podczas odczytywania właściwości z pliku \"%s\""
 
-#: ../src/scan_dialog.c:2410
-msgid "Create New Mask"
-msgstr "Utwórz nową maskę"
+#: ../src/tags/mp4_header.cc:132
+msgid "MP4/AAC File"
+msgstr "Plik MP4/AAC"
 
-#: ../src/scan_dialog.c:2420
-msgid "Move Up this Mask"
-msgstr "Przesuń maskę do góry"
+#: ../src/tags/mp4_header.cc:141 ../src/tags/mpeg_header.c:224
+#, c-format
+msgid "~%d kb/s"
+msgstr "~%d kb/s"
 
-#: ../src/scan_dialog.c:2430
-msgid "Move Down this Mask"
-msgstr "Przesuń maskę w dół"
+#: ../src/tags/mp4_tag.cc:108 ../src/tags/mp4_tag.cc:307
+#, c-format
+msgid "Error reading tags from file ‘%s’"
+msgstr "BÅ‚Ä…d podczas odczytywania etykiet z pliku \"%s\""
 
-#: ../src/scan_dialog.c:2440
-msgid "Duplicate Mask"
-msgstr "Zduplikuj maskÄ™"
+#: ../src/tags/mpeg_header.c:52
+msgid "Stereo"
+msgstr "Stereo"
 
-#: ../src/scan_dialog.c:2450
-msgid "Add Default Masks"
-msgstr "Dodaj domyślną maskę"
+#: ../src/tags/mpeg_header.c:53
+msgid "Joint stereo"
+msgstr "Połączone stereo"
 
-#: ../src/scan_dialog.c:2460
-msgid "Remove Mask"
-msgstr "Usuń maskę"
+#: ../src/tags/mpeg_header.c:54
+msgid "Dual channel"
+msgstr "Dwukanałowy"
 
-#: ../src/scan_dialog.c:2470
-msgid "Save Masks"
-msgstr "Zapisz maski"
+#: ../src/tags/mpeg_header.c:55
+msgid "Single channel"
+msgstr "Jednokanałowy"
 
-#: ../src/scan_dialog.c:3050
-msgid "New_mask"
-msgstr "Nowa_maska"
+#: ../src/tags/mpeg_header.c:194
+msgid "MP3 File"
+msgstr "Plik MP3"
 
-#: ../src/scan_dialog.c:3089
-msgid "Copy: No row selected"
-msgstr "Kopiowanie: nie wybrano rzędu"
+#: ../src/tags/mpeg_header.c:197
+msgid "MP2 File"
+msgstr "Plik MP2"
 
-#: ../src/scan_dialog.c:3182
-msgid "Remove: No row selected"
-msgstr "Usuwanie: nie wybrano rzędu"
+#. MPEG, Layer versions
+#: ../src/tags/mpeg_header.c:204
+msgid "MPEG"
+msgstr "MPEG"
 
-#: ../src/scan_dialog.c:3229
-msgid "Move Up: No row selected"
-msgstr "Przesunięcie w górę: nie wybrano rzędu"
+#: ../src/tags/musepack_header.c:57
+msgid "Error opening Musepack file"
+msgstr "BÅ‚Ä…d podczas otwierania pliku MusePack"
 
-#: ../src/scan_dialog.c:3273
-msgid "Move Down: No row selected"
-msgstr "Przesunięcie w dół: nie wybrano rzędu"
+#: ../src/tags/musepack_header.c:87
+msgid "MusePack File"
+msgstr "Plik MusePack"
 
-#: ../src/setting.c:924
+#: ../src/tags/ogg_header.c:247
 #, c-format
-msgid "Error: Cannot write configuration file: %s (%s)"
-msgstr "Błąd: nie można zapisać pliku konfiguracji: %s (%s)"
+msgid ""
+"The specified bitstream does not exist or the file has been initialized "
+"improperly (file: ‘%s’)"
+msgstr ""
+"Podany strumień bitów nie istnieje lub plik został niepoprawnie zainicjowany "
+"(plik: \"%s\")"
 
-#: ../src/setting.c:944 ../src/setting.c:961 ../src/setting.c:981
-#, c-format
-msgid "Error while writing configuration file: %s"
-msgstr "BÅ‚Ä…d podczas zapisywania pliku konfiguracji: %s"
+#: ../src/tags/ogg_header.c:268
+msgid "Read from media returned an error"
+msgstr "Odczyt z pliku multimedialnego zwrócił błąd"
 
-#: ../src/setting.c:1100
-#, c-format
-msgid "Cannot open configuration file '%s' (%s)"
-msgstr "Nie można otworzyć pliku konfiguracji \"%s\" (%s)"
+#: ../src/tags/ogg_header.c:271
+msgid "Bitstream is not Vorbis data"
+msgstr "Strumień bitów nie zawiera danych Vorbis"
 
-#: ../src/setting.c:1102
-msgid "Loading default configuration"
-msgstr "Wczytywanie domyślnej konfiguracji"
+#: ../src/tags/ogg_header.c:274
+msgid "Vorbis version mismatch"
+msgstr "Niezgodność wersji Vorbis"
 
-#: ../src/setting.c:1143
-#, c-format
-msgid "Cannot create or open file '%s' (%s)"
-msgstr "Nie można utworzyć lub otworzyć pliku \"%s\" (%s)"
+#: ../src/tags/ogg_header.c:277
+msgid "Invalid Vorbis bitstream header"
+msgstr "Nieprawidłowy nagłówek strumienia bitów Vorbis"
 
-#: ../src/setting.c:1203
-#, c-format
-msgid "Error: Cannot write list to file: %s (%s)"
-msgstr "Błąd: nie można zapisać listy do pliku: %s (%s)"
+#: ../src/tags/ogg_header.c:280
+msgid "Internal logic fault, indicates a bug or heap/stack corruption"
+msgstr "Wewnętrzny błąd logiczny, oznacza to błąd lub uszkodzenie stosu"
 
-#: ../src/setting.c:1221
+#: ../src/tags/ogg_header.c:338
 #, c-format
-msgid "Error while writing list file: %s"
-msgstr "BÅ‚Ä…d podczas zapisywania pliku listy: \"%s\""
-
-#. Fall back to defaults
-#: ../src/setting.c:1301
-msgid "Loading default 'Fill Tag' masks…"
-msgstr "Wczytywanie domyślnych masek \"Wypełnianie etykiet\"…"
+msgid "Failed to open file as Vorbis: %s"
+msgstr "Otwarcie pliku jako Vorbis się nie powiodło: %s"
 
-#. Fall back to defaults
-#: ../src/setting.c:1331
-msgid "Loading default 'Rename File' masks…"
-msgstr "Wczytywanie domyślnych masek \"Zmiana nazw plików\"…"
+#: ../src/tags/ogg_header.c:396
+msgid "Ogg Vorbis File"
+msgstr "Plik Ogg Vorbis"
 
-#. Fall back to defaults
-#: ../src/setting.c:1357
-msgid "Loading default 'Rename Directory' masks…"
-msgstr "Wczytywanie domyślnych masek \"Zmiana nazwy katalogu\"…"
+#: ../src/tags/ogg_header.c:399
+msgid "Speex File"
+msgstr "Plik Speex"
 
-#: ../src/setting.c:1568
+#: ../src/tags/ogg_tag.c:697 ../src/tags/ogg_tag.c:890
 #, c-format
-msgid "Migrating configuration from directory '%s' to '%s'"
-msgstr "Przenoszenie konfiguracji z katalogu \"%s\" do \"%s\""
+msgid "The Ogg Vorbis file ‘%s’ contains an ID3v2 tag"
+msgstr "Plik Ogg Vorbis \"%s\" zawiera etykietÄ™ ID3v2"
 
-#: ../src/setting.c:1592
-#, c-format
-msgid "Failed to migrate configuration file '%s'"
-msgstr "Przeniesienie pliku konfiguracji \"%s\" się nie powiodło"
+#: ../src/tags/opus_header.c:225
+msgid "Opus File"
+msgstr "Plik Opus"
 
-#: ../src/setting.c:1629
-#, c-format
-msgid "Error: Cannot create directory '%s' (%s)"
-msgstr "Błąd: nie można utworzyć katalogu \"%s\" (%s)"
+#: ../src/tags/wavpack_header.c:85
+msgid "Wavpack File"
+msgstr "Plik WavPack"
diff --git a/po/pt_BR.po b/po/pt_BR.po
index d9b8d45..4bb419d 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -10,8 +10,8 @@ msgstr ""
 "Project-Id-Version: easytag\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
 "product=easytag&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2014-04-12 13:25+0000\n"
-"PO-Revision-Date: 2014-04-14 20:05-0300\n"
+"POT-Creation-Date: 2014-06-11 19:50+0000\n"
+"PO-Revision-Date: 2014-06-16 10:07-0300\n"
 "Last-Translator: Rafael Ferreira <rafael.f.f1 at gmail.com>\n"
 "Language-Team: Brazilian Portuguese <gnome-pt_br-list at gnome.org>\n"
 "Language: pt_BR\n"
@@ -19,7 +19,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-Generator: Poedit 1.6.4\n"
+"X-Generator: Poedit 1.6.5\n"
 
 #: ../data/easytag.appdata.xml.in.h:1
 msgid ""
@@ -58,63 +58,52 @@ msgstr "Edite metadados de arquivo de som"
 msgid "mp3;tag;audio;"
 msgstr "mp3;tag;etiqueta;áudio;audio;som;"
 
-#: ../src/about.c:89
-msgid ""
-"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 (at your option) "
-"any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful, but WITHOUT "
-"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
-"FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for "
-"more details.\n"
-"\n"
-"You should have received a copy of the GNU General Public License along with "
-"this program. If not, see <http://www.gnu.org/licenses/>."
-msgstr ""
-"Este programa é um software livre; você pode redistribuí-lo e/ou modificá-lo "
-"sob os termos da Licença Pública Geral GNU publicada pela Free Software "
-"Foundation; qualquer versão 2 da Licença, ou (a seu critério) outra versão "
-"posterior.\n"
-"\n"
-"Este programa é distribuído na expectativa de que seja útil, mas SEM NENHUMA "
-"GARANTIA; sem mesmo implicar garantias de COMERCIALIZAÇÃO ou ADEQUAÇÃO A UM "
-"FIM ESPECÍFICO. Veja a Licença Pública Geral GNU (GPL) para mais detalhes.\n"
-"\n"
-"Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este "
-"programa; caso contrário, consulte <http://www.gnu.org/licenses/>."
+#: ../nautilus-extension/nautilus-easytag.c:229
+msgid "Open in EasyTAG"
+msgstr "Abrir no EasyTAG"
+
+#: ../nautilus-extension/nautilus-easytag.c:230
+msgid "Open the current selected directory in EasyTAG"
+msgstr "Abre o diretório selecionado no EasyTAG"
+
+#: ../nautilus-extension/nautilus-easytag.c:247
+msgid "Open with EasyTAG"
+msgstr "Abrir com EasyTAG"
+
+#: ../nautilus-extension/nautilus-easytag.c:248
+msgid "Open selected files in EasyTAG"
+msgstr "Abre os arquivos selecionados no EasyTAG"
 
 #. Translators: put your own name here to appear in the about dialog.
-#: ../src/about.c:106
+#: ../src/about.c:89
 msgid "translator-credits"
 msgstr ""
 "doutor.zero <doutor.zero at gmail.com>, 2005, 2007, 2008\n"
 "Enrico Nicoletto <liverig at gmail.com>, 2013, 2014\n"
-"Rafael Ferreira <rafael.f.f1 at gmail.com>, 2013"
+"Rafael Ferreira <rafael.f.f1 at gmail.com>, 2013, 2014"
 
-#: ../src/about.c:116
+#: ../src/about.c:99
 msgid "View and edit tags in audio files"
 msgstr "Veja e edite etiquetas em arquivos de áudio"
 
-#: ../src/ape_tag.c:61 ../src/id3v24_tag.c:112 ../src/mp4_header.cc:46
-#: ../src/mp4_header.cc:59 ../src/mp4_tag.cc:69 ../src/mp4_tag.cc:85
+#: ../src/ape_tag.c:61 ../src/id3v24_tag.c:113 ../src/mp4_header.cc:45
+#: ../src/mp4_header.cc:58 ../src/mp4_tag.cc:69 ../src/mp4_tag.cc:85
 #: ../src/mp4_tag.cc:90 ../src/mp4_tag.cc:262 ../src/mp4_tag.cc:278
 #: ../src/mp4_tag.cc:283
 #, c-format
 msgid "Error while opening file: '%s' (%s)."
 msgstr "Erro ao abrir arquivo: \"%s\" (%s)."
 
-#: ../src/application.c:37
+#: ../src/application.c:32
 msgid "Print the version and exit"
 msgstr "Mostra a versão e sai"
 
-#: ../src/application.c:89
+#: ../src/application.c:84
 #, c-format
 msgid "Website: %s"
 msgstr "Site: %s"
 
-#: ../src/application.c:98
+#: ../src/application.c:93
 msgid "- Tag and rename audio files"
 msgstr " - Etiquete e renomeie arquivos de áudio"
 
@@ -369,7 +358,7 @@ msgstr "Último arquivo"
 msgid "S_can Files"
 msgstr "V_erificar arquivos"
 
-#: ../src/bar.c:225 ../src/scan_dialog.c:1814
+#: ../src/bar.c:225 ../src/scan_dialog.c:1818
 msgid "Scan selected files"
 msgstr "Verificar os arquivos selecionados"
 
@@ -433,8 +422,8 @@ msgstr "Refaz as últimas modificações"
 msgid "_Quit"
 msgstr "Sa_ir"
 
-#: ../src/bar.c:242 ../src/easytag.c:2430 ../src/easytag.c:4565
-#: ../src/easytag.c:4597
+#: ../src/bar.c:242 ../src/easytag.c:2424 ../src/easytag.c:4559
+#: ../src/easytag.c:4591
 msgid "Quit"
 msgstr "Sair"
 
@@ -738,7 +727,7 @@ msgstr "Processa campos"
 msgid "Could not merge UI, error was: %s\n"
 msgstr "Não foi possível unir a interface gráfica, o erro foi: %s\n"
 
-#: ../src/bar.c:533
+#: ../src/bar.c:535
 msgid "Ready to start"
 msgstr "Pronto para começar"
 
@@ -746,7 +735,7 @@ msgstr "Pronto para começar"
 msgid "New default path for files selected"
 msgstr "Novo caminho padrão para arquivos selecionados"
 
-#: ../src/browser.c:678 ../src/easytag.c:4561
+#: ../src/browser.c:678 ../src/easytag.c:4555
 msgid "Some files have been modified but not saved"
 msgstr "Alguns arquivos foram modificados, mas não salvos"
 
@@ -758,102 +747,102 @@ msgstr "Deseja salvá-los antes de alterar o diretório?"
 msgid "Confirm Directory Change"
 msgstr "Confirmar alteração do diretório"
 
-#: ../src/browser.c:2146
+#: ../src/browser.c:2152
 msgid "<All albums>"
 msgstr "<Todos os álbuns>"
 
-#: ../src/browser.c:2607
+#: ../src/browser.c:2613
 #, c-format
 msgid "Error: Searching for %s, could not find node %s in tree."
 msgstr ""
 "Erro: Pesquisando por %s, não foi possível localizar o nodo %s na árvore."
 
-#: ../src/browser.c:3101 ../src/browser.c:3179
+#: ../src/browser.c:3107 ../src/browser.c:3185
 msgid "Tree"
 msgstr "Árvore"
 
-#: ../src/browser.c:3102 ../src/cddb.c:803 ../src/misc.c:1903
+#: ../src/browser.c:3108 ../src/cddb.c:803 ../src/misc.c:1899
 msgid "Filename"
 msgstr "Nome do arquivo"
 
-#: ../src/browser.c:3102 ../src/cddb.c:804 ../src/misc.c:1904
+#: ../src/browser.c:3108 ../src/cddb.c:804 ../src/misc.c:1900
 #: ../src/prefs.c:643
 msgid "Title"
 msgstr "Título"
 
 #. Translators: This option is for the previous 'search in' option. For
 #. * instance, translate this as "Search in:" "Artist".
-#: ../src/browser.c:3103 ../src/browser.c:3110 ../src/cddb.c:483
-#: ../src/cddb.c:805 ../src/misc.c:1905 ../src/prefs.c:644
+#: ../src/browser.c:3109 ../src/browser.c:3116 ../src/cddb.c:483
+#: ../src/cddb.c:805 ../src/misc.c:1901 ../src/prefs.c:644
 msgid "Artist"
 msgstr "Artista"
 
-#: ../src/browser.c:3103 ../src/misc.c:1906
+#: ../src/browser.c:3109 ../src/misc.c:1902
 msgid "Album Artist"
 msgstr "Artista do álbum"
 
 #. Translators: This option is for the previous 'search in' option. For
 #. * instance, translate this as "Search in:" "Album".
-#: ../src/browser.c:3104 ../src/browser.c:3112 ../src/cddb.c:486
-#: ../src/cddb.c:806 ../src/misc.c:1907 ../src/prefs.c:645
+#: ../src/browser.c:3110 ../src/browser.c:3118 ../src/cddb.c:486
+#: ../src/cddb.c:806 ../src/misc.c:1903 ../src/prefs.c:645
 msgid "Album"
 msgstr "Álbum"
 
-#: ../src/browser.c:3104 ../src/cddb.c:807 ../src/misc.c:1909
+#: ../src/browser.c:3110 ../src/cddb.c:807 ../src/misc.c:1905
 msgid "Year"
 msgstr "Ano"
 
-#: ../src/browser.c:3104
+#: ../src/browser.c:3110
 msgid "Disc"
 msgstr "Disco"
 
-#: ../src/browser.c:3105 ../src/misc.c:1910
+#: ../src/browser.c:3111 ../src/misc.c:1906
 msgid "Track"
 msgstr "Faixa"
 
-#: ../src/browser.c:3105 ../src/cddb.c:810 ../src/misc.c:1911
+#: ../src/browser.c:3111 ../src/cddb.c:810 ../src/misc.c:1907
 #: ../src/prefs.c:646
 msgid "Genre"
 msgstr "Gênero"
 
-#: ../src/browser.c:3106 ../src/misc.c:1912 ../src/prefs.c:647
+#: ../src/browser.c:3112 ../src/misc.c:1908 ../src/prefs.c:647
 msgid "Comment"
 msgstr "Comentário"
 
-#: ../src/browser.c:3106 ../src/misc.c:1913 ../src/picture.c:1060
+#: ../src/browser.c:3112 ../src/misc.c:1909 ../src/picture.c:884
 #: ../src/prefs.c:648
 msgid "Composer"
 msgstr "Compositor"
 
-#: ../src/browser.c:3107 ../src/misc.c:1914
+#: ../src/browser.c:3113 ../src/misc.c:1910
 msgid "Original Artist"
 msgstr "Artista original"
 
-#: ../src/browser.c:3108 ../src/misc.c:1915
+#: ../src/browser.c:3114 ../src/misc.c:1911
 msgid "Copyright"
 msgstr "Copyright"
 
-#: ../src/browser.c:3108 ../src/misc.c:1916
+#: ../src/browser.c:3114 ../src/misc.c:1912
 msgid "URL"
 msgstr "URL"
 
-#: ../src/browser.c:3109 ../src/misc.c:1917
+#: ../src/browser.c:3115 ../src/misc.c:1913
 msgid "Encoded By"
 msgstr "Codificado por"
 
-#: ../src/browser.c:3110
+#: ../src/browser.c:3116
 msgid "# Albums"
 msgstr "# álbuns"
 
-#: ../src/browser.c:3111 ../src/browser.c:3112
+#: ../src/browser.c:3117 ../src/browser.c:3118
 msgid "# Files"
 msgstr "# arquivos"
 
-#: ../src/browser.c:3137
+#: ../src/browser.c:3143
 msgid "Enter a directory to browse."
 msgstr "Digite o nome de um diretório para navegar."
 
-#: ../src/browser.c:3146
+#: ../src/browser.c:3152
 msgid "Select a directory to browse."
 msgstr "Selecione um diretório para navegar."
 
@@ -861,33 +850,33 @@ msgstr "Selecione um diretório para navegar."
 #. * The label for displaying number of files in path (without subdirs)
 #.
 #. Translators: No files, as in "0 files".
-#: ../src/browser.c:3153 ../src/easytag.c:3469
+#: ../src/browser.c:3159 ../src/easytag.c:3463
 msgid "No files"
 msgstr "Nenhum arquivo"
 
-#: ../src/browser.c:3231
+#: ../src/browser.c:3237
 msgid "Artist & Album"
 msgstr "Artista & álbum"
 
 #. Only directories changed
-#: ../src/browser.c:3595 ../src/easytag.c:2881
+#: ../src/browser.c:3601 ../src/easytag.c:2875
 msgid "Rename Directory"
 msgstr "Renomear diretório"
 
-#: ../src/browser.c:3617
+#: ../src/browser.c:3623
 #, c-format
 msgid "Rename the directory '%s' to:"
 msgstr "Renomear o diretório \"%s\" para:"
 
-#: ../src/browser.c:3636 ../src/misc.c:1172
+#: ../src/browser.c:3642 ../src/misc.c:1168
 msgid "Use mask:"
 msgstr "Usar a máscara:"
 
-#: ../src/browser.c:3639
+#: ../src/browser.c:3645
 msgid "If activated, it will use masks to rename directory."
 msgstr "Se ativada, máscaras serão usadas para renomear o diretório."
 
-#: ../src/browser.c:3657
+#: ../src/browser.c:3663
 msgid ""
 "Select or type in a mask using codes (see Legend in Scanner Window) to "
 "rename the directory from tag fields."
@@ -896,64 +885,64 @@ msgstr ""
 "do verificador) para renomear o diretório à partir dos campos das etiquetas."
 
 #. Preview label
-#: ../src/browser.c:3681
+#: ../src/browser.c:3687
 msgid "Rename directory preview"
 msgstr "Visualização da renomeação do diretório"
 
-#: ../src/browser.c:3773
+#: ../src/browser.c:3779
 msgid "You must type a directory name"
 msgstr "Você deve digitar um nome para o diretório"
 
-#: ../src/browser.c:3774 ../src/browser.c:3795
+#: ../src/browser.c:3780 ../src/browser.c:3801
 msgid "Directory Name Error"
 msgstr "Erro no nome do diretório"
 
-#: ../src/browser.c:3792
+#: ../src/browser.c:3798
 #, c-format
 msgid "Could not convert '%s' into filename encoding."
 msgstr "Não foi possível converter \"%s\" para a codifição do nome de arquivo."
 
-#: ../src/browser.c:3794
+#: ../src/browser.c:3800
 msgid "Please use another name"
 msgstr "Por favor, use um outro nome"
 
-#: ../src/browser.c:3864
+#: ../src/browser.c:3870
 #, c-format
 msgid "The directory name '%s' already exists"
 msgstr "O nome do diretório \"%s\" já existe"
 
-#: ../src/browser.c:3865 ../src/easytag.c:2964
+#: ../src/browser.c:3871 ../src/easytag.c:2958
 msgid "Rename File Error"
 msgstr "Erro ao renomear o arquivo"
 
-#: ../src/browser.c:3903 ../src/browser.c:3932
+#: ../src/browser.c:3909 ../src/browser.c:3938
 msgid "Rename Directory Error"
 msgstr "Erro ao renomear o diretório"
 
-#: ../src/browser.c:3970
+#: ../src/browser.c:3976
 msgid "Directory renamed"
 msgstr "Diretório renomeado"
 
-#: ../src/browser.c:4006
+#: ../src/browser.c:4012
 msgid "Browse Directory With"
 msgstr "Navegar no diretório com"
 
-#: ../src/browser.c:4022 ../src/browser.c:4148
+#: ../src/browser.c:4028 ../src/browser.c:4154
 msgid "Program to run:"
 msgstr "Programa para executar:"
 
-#: ../src/browser.c:4034
+#: ../src/browser.c:4040
 msgid ""
 "Enter the program to run. It will receive the current directory as parameter."
 msgstr ""
 "Digite o nome do programa para executar. Ele receberá o diretório atual como "
 "parâmetro."
 
-#: ../src/browser.c:4128
+#: ../src/browser.c:4134
 msgid "Open Files With"
 msgstr "Abrir arquivos com"
 
-#: ../src/browser.c:4160
+#: ../src/browser.c:4166
 msgid ""
 "Enter the program to run. It will receive the current file as parameter."
 msgstr ""
@@ -1049,7 +1038,7 @@ msgstr "Todos os campos"
 
 #. Translators: This option is for the previous 'search in' option. For
 #. * instance, translate this as "Search in:" "Other".
-#: ../src/cddb.c:492 ../src/picture.c:1038 ../src/prefs.c:807
+#: ../src/cddb.c:492 ../src/picture.c:862 ../src/prefs.c:807
 msgid "Other"
 msgstr "Outro"
 
@@ -1144,7 +1133,7 @@ msgstr "Categorias"
 msgid "Results:"
 msgstr "Resultados:"
 
-#: ../src/cddb.c:606 ../src/misc.c:1951
+#: ../src/cddb.c:606 ../src/misc.c:1947
 msgid "Search:"
 msgstr "Pesquisar:"
 
@@ -1209,7 +1198,7 @@ msgid "# Tracks"
 msgstr "# faixas"
 
 #. Check box to run the scanner
-#: ../src/cddb.c:847 ../src/misc.c:2992
+#: ../src/cddb.c:847 ../src/misc.c:2988
 msgid "Run the current scanner for each file"
 msgstr "Executar a verificação atual para cada arquivo"
 
@@ -1679,7 +1668,7 @@ msgstr "Usando atualmente a localização \"%s\" (e eventualmente \"%s\")"
 msgid "Unable to create setting directories"
 msgstr "Não foi possível criar os diretórios de configuração"
 
-#: ../src/easytag.c:427 ../src/et_core.c:637 ../src/et_core.c:649
+#: ../src/easytag.c:427 ../src/et_core.c:638 ../src/et_core.c:650
 #, c-format
 msgid "Error while querying information for file: '%s' (%s)"
 msgstr "Erro ao consultar informação de arquivo: \"%s\" (%s)"
@@ -1692,11 +1681,11 @@ msgstr "Não foi possível abrir o caminho \"%s\""
 #.
 #. * Browser
 #.
-#: ../src/easytag.c:582 ../src/prefs.c:142
+#: ../src/easytag.c:583 ../src/prefs.c:142
 msgid "Browser"
 msgstr "Navegador"
 
-#: ../src/easytag.c:604 ../src/et_core.c:2857
+#: ../src/easytag.c:605 ../src/et_core.c:2858
 msgid "File"
 msgstr "Arquivo"
 
@@ -1706,38 +1695,38 @@ msgstr "Arquivo"
 #. gtk_label_set_text(GTK_LABEL(VersionValueLabel),"");
 #. Version changed to encoder version
 #. Encoder version
-#: ../src/easytag.c:636 ../src/easytag.c:4232 ../src/flac_header.c:201
+#: ../src/easytag.c:637 ../src/easytag.c:4226 ../src/flac_header.c:201
 #: ../src/monkeyaudio_header.c:96 ../src/musepack_header.c:98
 #: ../src/ogg_header.c:389 ../src/opus_header.c:221 ../src/wavpack_header.c:72
 #, c-format
 msgid "Encoder:"
 msgstr "Codificador:"
 
-#: ../src/easytag.c:644
+#: ../src/easytag.c:645
 msgid "Bitrate:"
 msgstr "Taxa de bits:"
 
 #. Translators: Please try to keep this string as short as possible as it
 #. * is shown in a narrow column.
-#: ../src/easytag.c:654
+#: ../src/easytag.c:655
 msgid "Frequency:"
 msgstr "Frequência:"
 
 #. Mode
-#: ../src/easytag.c:665 ../src/easytag.c:4236 ../src/mpeg_header.c:216
+#: ../src/easytag.c:666 ../src/easytag.c:4230 ../src/mpeg_header.c:216
 msgid "Mode:"
 msgstr "Modo:"
 
-#: ../src/easytag.c:672
+#: ../src/easytag.c:673
 msgid "Size:"
 msgstr "Tamanho:"
 
-#: ../src/easytag.c:679
+#: ../src/easytag.c:680
 msgid "Duration:"
 msgstr "Duração:"
 
 #. Main Frame
-#: ../src/easytag.c:726 ../src/et_core.c:2787
+#: ../src/easytag.c:726 ../src/et_core.c:2788
 msgid "Tag"
 msgstr "Etiqueta"
 
@@ -1894,563 +1883,563 @@ msgstr "Etiqueta os arquivos selecionados com esse nome do codificador"
 #.
 #. * 2 - Page for extra tag fields
 #.
-#: ../src/easytag.c:1147 ../src/et_core.c:3229 ../src/et_core.c:3232
+#: ../src/easytag.c:1146 ../src/et_core.c:3230 ../src/et_core.c:3233
 msgid "Images"
 msgstr "Imagens"
 
-#: ../src/easytag.c:1171
+#: ../src/easytag.c:1170
 msgid "You can use drag and drop to add an image"
 msgstr "Você pode arrastar e soltar para adicionar uma imagem"
 
-#: ../src/easytag.c:1218
+#: ../src/easytag.c:1219
 msgid "Add images to the tag"
 msgstr "Adiciona imagens à etiqueta"
 
-#: ../src/easytag.c:1236
+#: ../src/easytag.c:1237
 msgid "Remove selected images from the tag"
 msgstr "Remove imagens selecionadas da etiqueta"
 
-#: ../src/easytag.c:1250
+#: ../src/easytag.c:1248
 msgid "Save the selected images to files"
 msgstr "Salva as imagens selecionadas em arquivos"
 
-#: ../src/easytag.c:1261
+#: ../src/easytag.c:1259
 msgid "Edit image properties"
 msgstr "Edita as propriedades da imagem"
 
-#: ../src/easytag.c:1275
+#: ../src/easytag.c:1270
 msgid "Tag selected files with these images"
 msgstr "Etiqueta os arquivos selecionados com essas imagens"
 
-#: ../src/easytag.c:1333
+#: ../src/easytag.c:1328
 #, c-format
 msgid "Selected files tagged with title '%s'."
 msgstr "Arquivos selecionados etiquetados com o título \"%s\"."
 
-#: ../src/easytag.c:1335
+#: ../src/easytag.c:1330
 msgid "Removed title from selected files."
 msgstr "Título selecionado dos arquivos selecionados."
 
-#: ../src/easytag.c:1350
+#: ../src/easytag.c:1345
 #, c-format
 msgid "Selected files tagged with artist '%s'."
 msgstr "Arquivos selecionados etiquetados com o artista \"%s\"."
 
-#: ../src/easytag.c:1352
+#: ../src/easytag.c:1347
 msgid "Removed artist from selected files."
 msgstr "Artista removido dos arquivos selecionados."
 
-#: ../src/easytag.c:1366
+#: ../src/easytag.c:1361
 #, c-format
 msgid "Selected files tagged with album artist '%s'."
 msgstr "Arquivos selecionados etiquetados com o artista do álbum \"%s\"."
 
-#: ../src/easytag.c:1368
+#: ../src/easytag.c:1363
 msgid "Removed album artist from selected files."
 msgstr "Artista do álbum removido dos arquivos selecionados."
 
-#: ../src/easytag.c:1383
+#: ../src/easytag.c:1378
 #, c-format
 msgid "Selected files tagged with album '%s'."
 msgstr "Arquivos selecionados etiquetados com o álbum \"%s\"."
 
-#: ../src/easytag.c:1385
+#: ../src/easytag.c:1380
 msgid "Removed album name from selected files."
 msgstr "Nome do álbum removido dos arquivos selecionados."
 
-#: ../src/easytag.c:1422
+#: ../src/easytag.c:1417
 #, c-format
 msgid "Selected files tagged with disc number '%s/%s'."
 msgstr "Arquivos selecionados etiquetados com o número do disco \"%s/%s\"."
 
-#: ../src/easytag.c:1427
+#: ../src/easytag.c:1422
 #, c-format
 msgid "Selected files tagged with disc number like 'xx'."
 msgstr "Arquivos selecionados etiquetados com o número do disco como \"xx\"."
 
-#: ../src/easytag.c:1432
+#: ../src/easytag.c:1427
 msgid "Removed disc number from selected files."
 msgstr "Número do disco removido dos arquivos selecionados."
 
-#: ../src/easytag.c:1448
+#: ../src/easytag.c:1443
 #, c-format
 msgid "Selected files tagged with year '%s'."
 msgstr "Arquivos selecionados etiquetados com o ano \"%s\"."
 
-#: ../src/easytag.c:1450
+#: ../src/easytag.c:1445
 msgid "Removed year from selected files."
 msgstr "Ano removido dos arquivos selecionados."
 
-#: ../src/easytag.c:1476 ../src/easytag.c:1567
+#: ../src/easytag.c:1471 ../src/easytag.c:1561
 #, c-format
 msgid "Selected files tagged with track like 'xx/%s'."
 msgstr "Arquivos selecionados etiquetados com a faixa como \"xx/%s\"."
 
-#: ../src/easytag.c:1479
+#: ../src/easytag.c:1474
 #, c-format
 msgid "Selected files tagged with track like 'xx'."
 msgstr "Arquivos selecionados etiquetados com a faixa como \"xx\"."
 
-#: ../src/easytag.c:1483 ../src/easytag.c:1570
+#: ../src/easytag.c:1478 ../src/easytag.c:1564
 msgid "Removed track number from selected files."
 msgstr "Número da faixa removido dos arquivos selecionados."
 
 #. msg = g_strdup_printf(_("All %d tracks numbered sequentially."), ETCore->ETFileSelectionList_Length);
-#: ../src/easytag.c:1540
+#: ../src/easytag.c:1534
 #, c-format
 msgid "Selected tracks numbered sequentially."
 msgstr "Faixas selecionadas numeradas sequencialmente."
 
-#: ../src/easytag.c:1586
+#: ../src/easytag.c:1580
 #, c-format
 msgid "Selected files tagged with genre '%s'."
 msgstr "Arquivos selecionados etiquetados com o gênero \"%s\"."
 
-#: ../src/easytag.c:1588
+#: ../src/easytag.c:1582
 msgid "Removed genre from selected files."
 msgstr "Gênero removido dos arquivos selecionados."
 
-#: ../src/easytag.c:1610
+#: ../src/easytag.c:1604
 #, c-format
 msgid "Selected files tagged with comment '%s'."
 msgstr "Arquivos selecionados etiquetados com o comentário \"%s\"."
 
-#: ../src/easytag.c:1612
+#: ../src/easytag.c:1606
 msgid "Removed comment from selected files."
 msgstr "Comentário removido dos arquivos selecionados."
 
-#: ../src/easytag.c:1626
+#: ../src/easytag.c:1620
 #, c-format
 msgid "Selected files tagged with composer '%s'."
 msgstr "Arquivos selecionados etiquetados com o compositor \"%s\"."
 
-#: ../src/easytag.c:1628
+#: ../src/easytag.c:1622
 msgid "Removed composer from selected files."
 msgstr "Compositor removido dos arquivos selecionados."
 
-#: ../src/easytag.c:1643
+#: ../src/easytag.c:1637
 #, c-format
 msgid "Selected files tagged with original artist '%s'."
 msgstr "Arquivos selecionados etiquetados com o artista original \"%s\"."
 
-#: ../src/easytag.c:1645
+#: ../src/easytag.c:1639
 msgid "Removed original artist from selected files."
 msgstr "Artista original removido dos arquivos selecionados."
 
-#: ../src/easytag.c:1660
+#: ../src/easytag.c:1654
 #, c-format
 msgid "Selected files tagged with copyright '%s'."
 msgstr "Arquivos selecionados etiquetados com o copyright \"%s\"."
 
-#: ../src/easytag.c:1662
+#: ../src/easytag.c:1656
 msgid "Removed copyright from selected files."
 msgstr "Copyright removido dos arquivos selecionados."
 
-#: ../src/easytag.c:1677
+#: ../src/easytag.c:1671
 #, c-format
 msgid "Selected files tagged with URL '%s'."
 msgstr "Arquivos selecionados etiquetados com a URL \"%s\"."
 
-#: ../src/easytag.c:1679
+#: ../src/easytag.c:1673
 msgid "Removed URL from selected files."
 msgstr "URL removida dos arquivos selecionados."
 
-#: ../src/easytag.c:1694
+#: ../src/easytag.c:1688
 #, c-format
 msgid "Selected files tagged with encoder name '%s'."
 msgstr "Arquivos selecionados etiquetados com o nome do codificador \"%s\"."
 
-#: ../src/easytag.c:1696
+#: ../src/easytag.c:1690
 msgid "Removed encoder name from selected files."
 msgstr "Nome do codificador removido dos arquivos selecionados."
 
-#: ../src/easytag.c:1728
+#: ../src/easytag.c:1722
 msgid "Selected files tagged with images."
 msgstr "Arquivos selecionados etiquetados com imagens."
 
-#: ../src/easytag.c:1730
+#: ../src/easytag.c:1724
 msgid "Removed images from selected files."
 msgstr "Imagens removidas dos arquivos selecionados."
 
-#: ../src/easytag.c:2011
+#: ../src/easytag.c:2005
 msgid "Select Mode and Mask, and redo the same action"
 msgstr "Seleciona modo e máscara e refaz a mesma ação"
 
-#: ../src/easytag.c:2063
+#: ../src/easytag.c:2057
 msgid "All tags have been scanned"
 msgstr "Todas as etiquetas foram verificadas"
 
-#: ../src/easytag.c:2119
+#: ../src/easytag.c:2113
 msgid "All tags have been removed"
 msgstr "Todas as etiquetas foram removidas"
 
-#: ../src/easytag.c:2424
+#: ../src/easytag.c:2418
 #, c-format
 msgid "A file was changed by an external program"
 msgid_plural "%d files were changed by an external program."
 msgstr[0] "Um arquivo foi alterado por um programa externo."
 msgstr[1] "%d arquivos foram alterados por um programa externo."
 
-#: ../src/easytag.c:2429
+#: ../src/easytag.c:2423
 msgid "Do you want to continue saving the file?"
 msgstr "Você deseja continuar salvando o arquivo?"
 
-#: ../src/easytag.c:2487 ../src/easytag.c:2507
+#: ../src/easytag.c:2481 ../src/easytag.c:2501
 msgid "Saving files was stopped"
 msgstr "O salvamento de arquivos foi interrompido"
 
-#: ../src/easytag.c:2509
+#: ../src/easytag.c:2503
 msgid "All files have been saved"
 msgstr "Todas os arquivos foram salvos"
 
-#: ../src/easytag.c:2644
+#: ../src/easytag.c:2638
 #, c-format
 msgid "Cannot delete file (%s)"
 msgstr "Não foi possível excluir o arquivo (%s)"
 
-#: ../src/easytag.c:2665
+#: ../src/easytag.c:2659
 msgid "Files have been partially deleted"
 msgstr "Os arquivos foram parcialmente excluídos"
 
-#: ../src/easytag.c:2667
+#: ../src/easytag.c:2661
 msgid "All files have been deleted"
 msgstr "Todos os arquivos foram excluídos"
 
-#: ../src/easytag.c:2783
+#: ../src/easytag.c:2777
 #, c-format
 msgid "Do you want to write the tag of file '%s'?"
 msgstr "Você deseja gravar a etiqueta do arquivo \"%s\"?"
 
-#: ../src/easytag.c:2785
+#: ../src/easytag.c:2779
 msgid "Confirm Tag Writing"
 msgstr "Confirmar gravação de etiqueta"
 
-#: ../src/easytag.c:2790 ../src/easytag.c:2910 ../src/easytag.c:3173
+#: ../src/easytag.c:2784 ../src/easytag.c:2904 ../src/easytag.c:3167
 msgid "Repeat action for the remaining files"
 msgstr "Repita esta ação para o resto dos arquivos"
 
 #. Directories and filename changed
-#: ../src/easytag.c:2874 ../src/scan_dialog.c:183
+#: ../src/easytag.c:2868 ../src/scan_dialog.c:183
 msgid "Rename File and Directory"
 msgstr "Renomear arquivo e diretório"
 
-#: ../src/easytag.c:2875
+#: ../src/easytag.c:2869
 msgid "File and directory rename confirmation required"
 msgstr "É necessário confirmação para renomear arquivo e diretório"
 
-#: ../src/easytag.c:2876
+#: ../src/easytag.c:2870
 #, c-format
 msgid "Do you want to rename the file and directory '%s' to '%s'?"
 msgstr "Você deseja renomear o arquivo e diretório \"%s\" para \"%s\"?"
 
-#: ../src/easytag.c:2882
+#: ../src/easytag.c:2876
 msgid "Directory rename confirmation required"
 msgstr "É necessário confirmação para renomear diretório"
 
-#: ../src/easytag.c:2883
+#: ../src/easytag.c:2877
 #, c-format
 msgid "Do you want to rename the directory '%s' to '%s'?"
 msgstr "Você deseja renomear o diretório \"%s\" para \"%s\"?"
 
 #. Only filename changed
-#: ../src/easytag.c:2889
+#: ../src/easytag.c:2883
 msgid "Rename File"
 msgstr "Renomear arquivo"
 
-#: ../src/easytag.c:2890
+#: ../src/easytag.c:2884
 msgid "File rename confirmation required"
 msgstr "É necessário confirmação para renomear o arquivo"
 
-#: ../src/easytag.c:2891
+#: ../src/easytag.c:2885
 #, c-format
 msgid "Do you want to rename the file '%s' to '%s'?"
 msgstr "Você deseja renomear o arquivo \"%s\" para \"%s\"?"
 
-#: ../src/easytag.c:2957
+#: ../src/easytag.c:2951
 #, c-format
 msgid "Cannot rename file '%s' to '%s'"
 msgstr "Não foi possível renomear o arquivo \"%s\" para \"%s\""
 
-#: ../src/easytag.c:2971
+#: ../src/easytag.c:2965
 #, c-format
 msgid "Cannot rename file '%s' to '%s': %s"
 msgstr "Não foi possível renomear o arquivo \"%s\" para \"%s\": %s"
 
-#: ../src/easytag.c:2975
+#: ../src/easytag.c:2969
 msgid "File(s) not renamed"
 msgstr "Arquivo(s) não renomeado(s)"
 
-#: ../src/easytag.c:3087
+#: ../src/easytag.c:3081
 #, c-format
 msgid "Writing tag of '%s'"
 msgstr "Gravando etiqueta em \"%s\""
 
-#: ../src/easytag.c:3094
+#: ../src/easytag.c:3088
 msgid "Tag(s) written"
 msgstr "Etiqueta(s) gravada(s)"
 
-#: ../src/easytag.c:3109
+#: ../src/easytag.c:3103
 #, c-format
 msgid "Cannot write tag in file '%s' (%s)"
 msgstr "Não foi possível gravar a etiqueta no arquivo \"%s\" (%s)"
 
-#: ../src/easytag.c:3122
+#: ../src/easytag.c:3116
 #, c-format
 msgid "Cannot write tag in file '%s'"
 msgstr "Não foi possível gravar a etiqueta no arquivo \"%s\""
 
-#: ../src/easytag.c:3125
+#: ../src/easytag.c:3119
 msgid "Tag Write Error"
 msgstr "Erro de gravação de etiqueta"
 
-#: ../src/easytag.c:3170 ../src/easytag.c:3184
+#: ../src/easytag.c:3164 ../src/easytag.c:3178
 #, c-format
 msgid "Do you really want to delete the file '%s'?"
 msgstr "Você deseja mesmo excluir o arquivo \"%s\"?"
 
-#: ../src/easytag.c:3176 ../src/easytag.c:3186
+#: ../src/easytag.c:3170 ../src/easytag.c:3180
 msgid "Delete File"
 msgstr "Excluir arquivo"
 
-#: ../src/easytag.c:3211
+#: ../src/easytag.c:3205
 #, c-format
 msgid "File '%s' deleted"
 msgstr "Arquivo \"%s\" excluído"
 
-#: ../src/easytag.c:3346
+#: ../src/easytag.c:3340
 #, c-format
 msgid "Cannot read directory '%s'"
 msgstr "Não foi possível ler o diretório \"%s\""
 
-#: ../src/easytag.c:3350
+#: ../src/easytag.c:3344
 msgid "Directory Read Error"
 msgstr "Erro de leitura do diretório"
 
 #. Read the directory recursively
-#: ../src/easytag.c:3371
+#: ../src/easytag.c:3365
 #, c-format
 msgid "Search in progress…"
 msgstr "Pesquisa em progresso…"
 
-#: ../src/easytag.c:3394 ../src/et_core.c:2864
+#: ../src/easytag.c:3388 ../src/et_core.c:2865
 #, c-format
 msgid "File: '%s'"
 msgstr "Arquivo: \"%s\""
 
-#: ../src/easytag.c:3444
+#: ../src/easytag.c:3438
 #, c-format
 msgid "Found one file in this directory and subdirectories"
 msgid_plural "Found %d files in this directory and subdirectories"
 msgstr[0] "Encontrado um arquivo neste diretório e subdiretórios"
 msgstr[1] "Encontrados %d arquivos neste diretório e subdiretórios"
 
-#: ../src/easytag.c:3451
+#: ../src/easytag.c:3445
 #, c-format
 msgid "Found one file in this directory"
 msgid_plural "Found %d files in this directory"
 msgstr[0] "Encontrado um arquivo nesse diretório"
 msgstr[1] "Encontrados %d arquivos nesse diretório"
 
-#: ../src/easytag.c:3473
+#: ../src/easytag.c:3467
 msgid "No file found in this directory and subdirectories"
 msgstr "Nenhum arquivo encontrado nesse diretório e subdiretórios"
 
-#: ../src/easytag.c:3475
+#: ../src/easytag.c:3469
 msgid "No file found in this directory"
 msgstr "Nenhum arquivo encontrado neste diretório"
 
-#: ../src/easytag.c:3543
+#: ../src/easytag.c:3537
 #, c-format
 msgid "Error opening directory '%s' (%s)"
 msgstr "Erro ao abrir o diretório \"%s\" (%s)"
 
-#: ../src/easytag.c:3579
+#: ../src/easytag.c:3573
 #, c-format
 msgid "Cannot read directory (%s)"
 msgstr "Não foi possível ler o diretório (%s)"
 
-#: ../src/easytag.c:3599
+#: ../src/easytag.c:3593
 msgid "Searching for audio files…"
 msgstr "Pesquisa por arquivos de áudio…"
 
-#: ../src/easytag.c:3600
+#: ../src/easytag.c:3594
 msgid "Searching"
 msgstr "Pesquisando"
 
-#: ../src/easytag.c:4266
+#: ../src/easytag.c:4260
 msgid "Select a directory to browse"
 msgstr "Seleciona um diretório para navegar"
 
 #. Menu items
-#: ../src/easytag.c:4412
+#: ../src/easytag.c:4406
 msgid "Tag selected files with this field"
 msgstr "Etiquetar arquivos selecionados com esse campo"
 
-#: ../src/easytag.c:4424 ../src/scan_dialog.c:2124
+#: ../src/easytag.c:4418 ../src/scan_dialog.c:2128
 msgid "Convert '_' and '%20' to spaces"
 msgstr "Converter \"_\" e \"%20\" para espaços"
 
-#: ../src/easytag.c:4431 ../src/scan_dialog.c:2126
+#: ../src/easytag.c:4425 ../src/scan_dialog.c:2130
 msgid "Convert ' ' to '_'"
 msgstr "Converter \" \" para \"_\""
 
-#: ../src/easytag.c:4442
+#: ../src/easytag.c:4436
 msgid "All uppercase"
 msgstr "Todas maiúsculas"
 
-#: ../src/easytag.c:4449
+#: ../src/easytag.c:4443
 msgid "All lowercase"
 msgstr "Todas minúsculas"
 
-#: ../src/easytag.c:4456
+#: ../src/easytag.c:4450
 msgid "First letter uppercase"
 msgstr "Primeira letra maiúscula"
 
-#: ../src/easytag.c:4463
+#: ../src/easytag.c:4457
 msgid "First letter uppercase of each word"
 msgstr "Primeira letra de cada palavra maiúscula"
 
-#: ../src/easytag.c:4474 ../src/prefs.c:1023 ../src/scan_dialog.c:2224
+#: ../src/easytag.c:4468 ../src/prefs.c:1023 ../src/scan_dialog.c:2254
 msgid "Remove spaces"
 msgstr "Remover espaços"
 
-#: ../src/easytag.c:4481
+#: ../src/easytag.c:4475
 msgid "Insert space before uppercase letter"
 msgstr "Inserir espaço antes da letra maiúscula"
 
-#: ../src/easytag.c:4488
+#: ../src/easytag.c:4482
 msgid "Remove duplicate spaces or underscores"
 msgstr "Remover espaços e sublinhados duplicados"
 
-#: ../src/easytag.c:4495
+#: ../src/easytag.c:4489
 msgid "Remove all text"
 msgstr "Remover todo texto"
 
-#: ../src/easytag.c:4514
+#: ../src/easytag.c:4508
 msgid "EasyTAG: Normal exit."
 msgstr "EasyTAG: Saída normal."
 
-#: ../src/easytag.c:4566
+#: ../src/easytag.c:4560
 msgid "Do you want to save them before quitting?"
 msgstr "Você deseja salvá-los antes de sair?"
 
-#: ../src/easytag.c:4593
+#: ../src/easytag.c:4587
 msgid "Do you really want to quit?"
 msgstr "Você realmente deseja sair?"
 
-#: ../src/et_core.c:550
+#: ../src/et_core.c:551
 #, c-format
 msgid "Error reading tag from ogg file (%s)"
 msgstr "Erro ao ler a etiqueta do arquivo off (%s)"
 
-#: ../src/et_core.c:579
+#: ../src/et_core.c:580
 #, c-format
 msgid "Error reading tag from Opus file (%s)"
 msgstr "Erro ao ler a etiqueta do arquivo Opus (%s)"
 
-#: ../src/et_core.c:722
+#: ../src/et_core.c:723
 #, c-format
 msgid "Automatic corrections applied for file '%s'."
 msgstr "Correções automáticas aplicadas no arquivo \"%s\"."
 
-#: ../src/et_core.c:2747
+#: ../src/et_core.c:2748
 msgid "ID3 Tag"
 msgstr "Etiqueta ID3"
 
-#: ../src/et_core.c:2753
+#: ../src/et_core.c:2754
 msgid "Ogg Vorbis Tag"
 msgstr "Etiqueta Ogg Vorbis"
 
-#: ../src/et_core.c:2759
+#: ../src/et_core.c:2760
 msgid "FLAC Vorbis Tag"
 msgstr "Etiqueta FLAC"
 
-#: ../src/et_core.c:2764
+#: ../src/et_core.c:2765
 msgid "APE Tag"
 msgstr "Etiqueta APE"
 
-#: ../src/et_core.c:2769
+#: ../src/et_core.c:2770
 msgid "MP4/M4A/AAC Tag"
 msgstr "Etiqueta MP4/M4A/AAC"
 
-#: ../src/et_core.c:2775
+#: ../src/et_core.c:2776
 msgid "Wavpack Tag"
 msgstr "Etiqueta Wavpack"
 
-#: ../src/et_core.c:2781
+#: ../src/et_core.c:2782
 msgid "Opus Tag"
 msgstr "Etiqueta Opus"
 
-#: ../src/et_core.c:2801
+#: ../src/et_core.c:2802
 msgid "MP3 File"
 msgstr "Arquivo MP3"
 
-#: ../src/et_core.c:2805
+#: ../src/et_core.c:2806
 msgid "MP2 File"
 msgstr "Arquivo MP2"
 
-#: ../src/et_core.c:2811
+#: ../src/et_core.c:2812
 msgid "Ogg Vorbis File"
 msgstr "Arquivo Ogg Vorbis"
 
-#: ../src/et_core.c:2817
+#: ../src/et_core.c:2818
 msgid "Speex File"
 msgstr "Arquivo Speex"
 
-#: ../src/et_core.c:2823
+#: ../src/et_core.c:2824
 msgid "FLAC File"
 msgstr "Arquivo FLAC"
 
-#: ../src/et_core.c:2828
+#: ../src/et_core.c:2829
 msgid "MusePack File"
 msgstr "Arquivo MusePack"
 
 # http://www.monkeysaudio.com/ (MAC)
-#: ../src/et_core.c:2832
+#: ../src/et_core.c:2833
 msgid "Monkey's Audio File"
 msgstr "Arquivo Monkey's audio"
 
-#: ../src/et_core.c:2837
+#: ../src/et_core.c:2838
 msgid "MP4/AAC File"
 msgstr "Arquivo MP4/AAC"
 
-#: ../src/et_core.c:2843
+#: ../src/et_core.c:2844
 msgid "Wavpack File"
 msgstr "Arquivo Wavpack"
 
-#: ../src/et_core.c:2849
+#: ../src/et_core.c:2850
 msgid "Opus File"
 msgstr "Arquivo Opus"
 
-#: ../src/et_core.c:2908 ../src/et_core.c:2963
+#: ../src/et_core.c:2909 ../src/et_core.c:2964
 msgid "File not found"
 msgstr "Arquivo não localizado"
 
-#: ../src/et_core.c:2913
+#: ../src/et_core.c:2914
 #, c-format
 msgid "Cannot query file information (%s)"
 msgstr "Não foi possível consultar a informação de arquivo (%s)"
 
-#: ../src/et_core.c:2947
+#: ../src/et_core.c:2948
 msgid "Read-only file"
 msgstr "Arquivo somente leitura"
 
 #. And refresh the number of files in this directory
-#: ../src/et_core.c:3011
+#: ../src/et_core.c:3012
 #, c-format
 msgid "One file"
 msgid_plural "%u files"
 msgstr[0] "Um arquivo"
 msgstr[1] "%u arquivos"
 
-#: ../src/et_core.c:3215
+#: ../src/et_core.c:3216
 #, c-format
 msgid "Images (%d)"
 msgstr "Imagens (%d)"
 
 #. Bitrate
-#: ../src/et_core.c:3257 ../src/flac_header.c:205
-#: ../src/monkeyaudio_header.c:86 ../src/mp4_header.cc:142
+#: ../src/et_core.c:3258 ../src/flac_header.c:205
+#: ../src/monkeyaudio_header.c:86 ../src/mp4_header.cc:132
 #: ../src/mpeg_header.c:206 ../src/musepack_header.c:88
 #: ../src/ogg_header.c:401 ../src/opus_header.c:227 ../src/wavpack_header.c:78
 #, c-format
@@ -2458,30 +2447,30 @@ msgid "%d kb/s"
 msgstr "%d kb/s"
 
 #. Samplerate
-#: ../src/et_core.c:3262 ../src/flac_header.c:210
-#: ../src/monkeyaudio_header.c:91 ../src/mp4_header.cc:147
+#: ../src/et_core.c:3263 ../src/flac_header.c:210
+#: ../src/monkeyaudio_header.c:91 ../src/mp4_header.cc:137
 #: ../src/mpeg_header.c:211 ../src/musepack_header.c:93
 #: ../src/ogg_header.c:406 ../src/opus_header.c:232 ../src/wavpack_header.c:83
 #, c-format
 msgid "%d Hz"
 msgstr "%d Hz"
 
-#: ../src/et_core.c:3408 ../src/scan_dialog.c:688
+#: ../src/et_core.c:3409 ../src/scan_dialog.c:688
 #, c-format
 msgid "Could not convert filename '%s' into system filename encoding"
 msgstr ""
 "Não foi possível converter o nome do arquivo \"%s\" para um nome de arquivo "
 "na codificação do sistema"
 
-#: ../src/et_core.c:3410
+#: ../src/et_core.c:3411
 msgid "Try setting the environment variable G_FILENAME_ENCODING."
 msgstr "Tente definir a variável de ambiente G_FILENAME_ENCODING."
 
-#: ../src/et_core.c:3411 ../src/scan_dialog.c:690
+#: ../src/et_core.c:3412 ../src/scan_dialog.c:690
 msgid "Filename translation"
 msgstr "Tradução do nome do arquivo"
 
-#: ../src/et_core.c:4116
+#: ../src/et_core.c:4117
 #, c-format
 msgid "Error writing tag type %d to file %s (%s)"
 msgstr "Erro ao gravar o tipo da etiqueta %d no arquivo %s (%s)"
@@ -2490,7 +2479,7 @@ msgstr "Erro ao gravar o tipo da etiqueta %d no arquivo %s (%s)"
 #. Mode
 #. mpeg4ip library seems to always return -1
 #. Mode
-#: ../src/flac_header.c:215 ../src/mp4_header.cc:153 ../src/ogg_header.c:411
+#: ../src/flac_header.c:215 ../src/mp4_header.cc:143 ../src/ogg_header.c:411
 #: ../src/opus_header.c:237 ../src/wavpack_header.c:88
 msgid "Channels:"
 msgstr "Canais:"
@@ -2500,7 +2489,7 @@ msgstr "Canais:"
 msgid "Error while opening file: '%s' as FLAC (%s)."
 msgstr "Erro ao abrir o arquivo: \"%s\" como FLAC (%s)."
 
-#: ../src/flac_tag.c:352 ../src/ogg_tag.c:310
+#: ../src/flac_tag.c:352 ../src/ogg_tag.c:304
 #, c-format
 msgid ""
 "The year value '%s' seems to be invalid in file '%s'. The information will "
@@ -2519,17 +2508,17 @@ msgstr "O bloco da imagem não é válido: \"%s\""
 msgid "Error: Failed to write comments to file '%s' (%s)."
 msgstr "Erro: Falha ao gravar comentários no arquivo \"%s\" (%s)."
 
-#: ../src/flac_tag.c:1099 ../src/ogg_tag.c:1166
+#: ../src/flac_tag.c:1099 ../src/ogg_tag.c:1161
 #, c-format
 msgid "Written tag of '%s'"
 msgstr "Gravada etiqueta de '%s'"
 
-#: ../src/id3_tag.c:158
+#: ../src/id3_tag.c:205
 #, c-format
 msgid "Error while reading file: '%s' (%s)"
 msgstr "Erro ao ler o arquivo: \"%s\" (%s)"
 
-#: ../src/id3_tag.c:170
+#: ../src/id3_tag.c:217
 #, c-format
 msgid ""
 "As the following corrupted file '%s' will cause an error in id3lib, it will "
@@ -2538,31 +2527,31 @@ msgstr ""
 "Como o seguinte arquivo corrompido \"%s\" causaria um erro na id3lib, ele "
 "não será processado pelo programa."
 
-#: ../src/id3_tag.c:172
+#: ../src/id3_tag.c:219
 msgid "Corrupted file"
 msgstr "Arquivo corrompido"
 
-#: ../src/id3_tag.c:555
+#: ../src/id3_tag.c:592
 #, c-format
 msgid "Removed tag of '%s'"
 msgstr "Removida etiqueta de \"%s\""
 
-#: ../src/id3_tag.c:559 ../src/id3_tag.c:659
+#: ../src/id3_tag.c:596 ../src/id3_tag.c:696
 #, c-format
 msgid "Error while removing ID3v1 tag of '%s' (%s)"
 msgstr "Erro ao remover etiqueta ID3v1 de \"%s\" (%s)"
 
-#: ../src/id3_tag.c:561 ../src/id3_tag.c:631
+#: ../src/id3_tag.c:598 ../src/id3_tag.c:668
 #, c-format
 msgid "Error while removing ID3v2 tag of '%s' (%s)"
 msgstr "Erro ao remover etiqueta ID3v2 de \"%s\" (%s)"
 
-#: ../src/id3_tag.c:580
+#: ../src/id3_tag.c:617
 #, c-format
 msgid "Error while updating ID3v2 tag of '%s' (%s)"
 msgstr "Erro ao atualizar etiqueta ID3v2 de \"%s\" (%s)"
 
-#: ../src/id3_tag.c:608
+#: ../src/id3_tag.c:645
 msgid ""
 "You have tried to save this tag to Unicode but it was detected that your "
 "version of id3lib is buggy"
@@ -2570,7 +2559,7 @@ msgstr ""
 "Você tentou salvar esta etiqueta em Unicode, mas foi detectado que sua "
 "versão de id3lib está defeituosa"
 
-#: ../src/id3_tag.c:610
+#: ../src/id3_tag.c:647
 #, c-format
 msgid ""
 "If you reload this file, some characters in the tag may not be displayed "
@@ -2589,90 +2578,90 @@ msgstr ""
 "\n"
 "Arquivo: %s"
 
-#: ../src/id3_tag.c:617
+#: ../src/id3_tag.c:654
 msgid "Buggy id3lib"
 msgstr "id3lib defeituoso"
 
-#: ../src/id3_tag.c:651
+#: ../src/id3_tag.c:688
 #, c-format
 msgid "Error while updating ID3v1 tag of '%s' (%s)"
 msgstr "Erro ao atualizar etiqueta ID3v1 de \"%s\" (%s)"
 
-#: ../src/id3_tag.c:665 ../src/id3v24_tag.c:1048
+#: ../src/id3_tag.c:702 ../src/id3v24_tag.c:1108
 #, c-format
 msgid "Updated tag of '%s'"
 msgstr "Etiqueta atualizada de \"%s\""
 
-#: ../src/id3_tag.c:684
+#: ../src/id3_tag.c:721
 msgid "No error reported"
 msgstr "Nenhum erro relatado"
 
-#: ../src/id3_tag.c:686
+#: ../src/id3_tag.c:723
 msgid "No available memory"
 msgstr "Sem memória disponível"
 
-#: ../src/id3_tag.c:688
+#: ../src/id3_tag.c:725
 msgid "No data to parse"
 msgstr "Sem dados para analisar"
 
-#: ../src/id3_tag.c:690
+#: ../src/id3_tag.c:727
 msgid "Improperly formatted data"
 msgstr "Dados formatados incorretamente"
 
-#: ../src/id3_tag.c:692
+#: ../src/id3_tag.c:729
 msgid "No buffer to write to"
 msgstr "Sem buffer para gravar para"
 
-#: ../src/id3_tag.c:694
+#: ../src/id3_tag.c:731
 msgid "Buffer is too small"
 msgstr "Buffer é muito pequeno"
 
-#: ../src/id3_tag.c:696
+#: ../src/id3_tag.c:733
 msgid "Invalid frame ID"
 msgstr "ID do quadro inválido"
 
-#: ../src/id3_tag.c:698
+#: ../src/id3_tag.c:735
 msgid "Requested field not found"
 msgstr "Campo requerido não encontrado"
 
-#: ../src/id3_tag.c:700
+#: ../src/id3_tag.c:737
 msgid "Unknown field type"
 msgstr "Tipo de campo desconhecido"
 
-#: ../src/id3_tag.c:702
+#: ../src/id3_tag.c:739
 msgid "Tag is already attached to a file"
 msgstr "Etiqueta já está anexada ao arquivo"
 
-#: ../src/id3_tag.c:704
+#: ../src/id3_tag.c:741
 msgid "Invalid tag version"
 msgstr "Versão da etiqueta inválida"
 
-#: ../src/id3_tag.c:706
+#: ../src/id3_tag.c:743
 msgid "No file to parse"
 msgstr "Nenhum arquivo para analisar"
 
-#: ../src/id3_tag.c:708
+#: ../src/id3_tag.c:745
 msgid "Attempting to write to a read-only file"
 msgstr "Tentando gravar em um arquivo somente-leitura"
 
-#: ../src/id3_tag.c:710
+#: ../src/id3_tag.c:747
 msgid "Error in compression/uncompression"
 msgstr "Erro na compressão/descompressão"
 
-#: ../src/id3_tag.c:712
+#: ../src/id3_tag.c:749
 msgid "Unknown error message"
 msgstr "Mensagem de erro desconhecida"
 
-#: ../src/id3_tag.c:1316
+#: ../src/id3_tag.c:1357
 #, c-format
 msgid "Error while creating temporary file: '%s'"
 msgstr "Erro ao criar um arquivo temporário: \"%s\""
 
-#: ../src/id3_tag.c:1323
+#: ../src/id3_tag.c:1364
 msgid "Error while creating temporary file"
 msgstr "Erro ao criar um arquivo temporário"
 
-#: ../src/id3_tag.c:1343
+#: ../src/id3_tag.c:1384
 #, c-format
 msgid "Error while writing to file: '%s' (%s)"
 msgstr "Erro ao gravar no arquivo: \"%s\" (%s)"
@@ -2682,7 +2671,7 @@ msgstr "Erro ao gravar no arquivo: \"%s\" (%s)"
 #. * missing (not read for some reason) while reading from
 #. * the file.
 #.
-#: ../src/id3v24_tag.c:1503
+#: ../src/id3v24_tag.c:1563
 #, c-format
 msgid "Cannot write tag of file ‘%s’ (a byte was missing)"
 msgid_plural "Cannot write tag of file ‘%s’ (%s bytes were missing)"
@@ -2690,12 +2679,12 @@ msgstr[0] "Não foi possível gravar etiqueta do arquivo ‘%s’ (um byte em fa
 msgstr[1] ""
 "Não foi possível gravar etiqueta do arquivo ‘%s’ (%s bytes em falta)"
 
-#: ../src/id3v24_tag.c:1524
+#: ../src/id3v24_tag.c:1584
 #, c-format
 msgid "Cannot save tag of file '%s'"
 msgstr "Não foi possível gravar a etiqueta do arquivo \"%s\""
 
-#: ../src/id3v24_tag.c:1535
+#: ../src/id3v24_tag.c:1595
 #, c-format
 msgid "Size error while saving tag of '%s'"
 msgstr "Erro ao salvar etiqueta de \"%s\""
@@ -2704,54 +2693,54 @@ msgstr "Erro ao salvar etiqueta de \"%s\""
 msgid "Log"
 msgstr "Log"
 
-#: ../src/misc.c:720
+#: ../src/misc.c:716
 msgid "You must type a program name"
 msgstr "Você deve digitar o nome de um programa"
 
-#: ../src/misc.c:721
+#: ../src/misc.c:717
 msgid "Program Name Error"
 msgstr "Erro no nome do programa"
 
-#: ../src/misc.c:800
+#: ../src/misc.c:796
 #, c-format
 msgid "Executed command: %s"
 msgstr "Comando executado: %s"
 
-#: ../src/misc.c:807
+#: ../src/misc.c:803
 #, c-format
 msgid "Failed to launch program: %s"
 msgstr "Falha ao iniciar programa: %s"
 
-#: ../src/misc.c:824
+#: ../src/misc.c:820
 msgid "Select File"
 msgstr "Selecionar arquivo"
 
-#: ../src/misc.c:830
+#: ../src/misc.c:826
 msgid "Select Directory"
 msgstr "Selecionar diretório"
 
-#: ../src/misc.c:1142
+#: ../src/misc.c:1138
 msgid "Generate Playlist"
 msgstr "Gerar uma lista de reprodução"
 
-#: ../src/misc.c:1166
+#: ../src/misc.c:1162
 msgid "M3U Playlist Name"
 msgstr "Nome da lista de reprodução M3U"
 
-#: ../src/misc.c:1181
+#: ../src/misc.c:1177
 msgid "Use directory name"
 msgstr "Usar o nome do diretório"
 
 #. Playlist options
-#: ../src/misc.c:1198
+#: ../src/misc.c:1194
 msgid "Playlist Options"
 msgstr "Opções da lista de reprodução"
 
-#: ../src/misc.c:1204
+#: ../src/misc.c:1200
 msgid "Include only the selected files"
 msgstr "Incluir apenas os arquivos selecionados"
 
-#: ../src/misc.c:1207
+#: ../src/misc.c:1203
 msgid ""
 "If activated, only the selected files will be written in the playlist file. "
 "Else, all the files will be written."
@@ -2759,29 +2748,29 @@ msgstr ""
 "Se ativada, apenas os arquivos selecionados serão gravados no arquivo de "
 "lista de reprodução. Caso contrário, todos os arquivos serão gravados."
 
-#: ../src/misc.c:1210
+#: ../src/misc.c:1206
 msgid "Use full path for files in playlist"
 msgstr "Usar o caminho absoluto para os arquivos na lista de reprodução"
 
-#: ../src/misc.c:1213
+#: ../src/misc.c:1209
 msgid "Use relative path for files in playlist"
 msgstr "Usar o caminho relativo para os arquivos na lista de reprodução"
 
 #. Create playlist in parent directory
-#: ../src/misc.c:1219
+#: ../src/misc.c:1215
 msgid "Create playlist in the parent directory"
 msgstr "Criar uma lista de reprodução no diretório superior"
 
-#: ../src/misc.c:1222
+#: ../src/misc.c:1218
 msgid "If activated, the playlist will be created in the parent directory."
 msgstr "Se ativada, a lista de reprodução será criada no diretório superior."
 
 #. DOS Separator
-#: ../src/misc.c:1226
+#: ../src/misc.c:1222
 msgid "Use DOS directory separator"
 msgstr "Usar separador de diretório DOS"
 
-#: ../src/misc.c:1232
+#: ../src/misc.c:1228
 msgid ""
 "This option replaces the UNIX directory separator '/' into DOS separator "
 "'\\'."
@@ -2789,49 +2778,49 @@ msgstr ""
 "Essa opção substitui o separador de diretório UNIX \"/\" por um separador "
 "DOS \"\\\"."
 
-#: ../src/misc.c:1241
+#: ../src/misc.c:1237
 msgid "Playlist Content"
 msgstr "Conteúdo da lista de reprodução"
 
-#: ../src/misc.c:1247
+#: ../src/misc.c:1243
 msgid "Write only list of files"
 msgstr "Gravar somente a lista dos arquivos"
 
-#: ../src/misc.c:1251
+#: ../src/misc.c:1247
 msgid "Write info using filename"
 msgstr "Gravar informações usando o nome do arquivo"
 
-#: ../src/misc.c:1254
+#: ../src/misc.c:1250
 msgid "Write info using:"
 msgstr "Gravar informações usando:"
 
-#: ../src/misc.c:1468
+#: ../src/misc.c:1464
 #, c-format
 msgid "Cannot write playlist file '%s'"
 msgstr "Não foi possível gravar o arquivo de lista de reprodução \"%s\""
 
-#: ../src/misc.c:1472
+#: ../src/misc.c:1468
 msgid "Playlist File Error"
 msgstr "Erro no arquivo de lista de reprodução"
 
-#: ../src/misc.c:1480
+#: ../src/misc.c:1476
 #, c-format
 msgid "Written playlist file '%s'"
 msgstr "Gravando o arquivo de lista de reprodução \"%s\""
 
-#: ../src/misc.c:1544 ../src/scan_dialog.c:2709 ../src/scan_dialog.c:2771
+#: ../src/misc.c:1540 ../src/scan_dialog.c:2747 ../src/scan_dialog.c:2809
 msgid "Invalid scanner mask"
 msgstr "Máscara de verificação inválida"
 
-#: ../src/misc.c:1908
+#: ../src/misc.c:1904
 msgid "CD"
 msgstr "CD"
 
-#: ../src/misc.c:1930
+#: ../src/misc.c:1926
 msgid "Find Files"
 msgstr "Localizar arquivos"
 
-#: ../src/misc.c:1962
+#: ../src/misc.c:1958
 msgid ""
 "Type the word to search into files. Or type nothing to display all files."
 msgstr ""
@@ -2839,13 +2828,13 @@ msgstr ""
 "todos os arquivos."
 
 #. Where...
-#: ../src/misc.c:1968
+#: ../src/misc.c:1964
 msgid "In:"
 msgstr "Em:"
 
 #. Translators: This option is for the previous 'in' option. For instance,
 #. * translate this as "Search" "In:" "the Filename".
-#: ../src/misc.c:1973
+#: ../src/misc.c:1969
 msgid "the Filename"
 msgstr "o nome do arquivo"
 
@@ -2854,83 +2843,83 @@ msgstr "o nome do arquivo"
 #. * Note: label changed to "the Tag" (to be the only one) to fix a Hungarian
 #. * grammatical problem (which uses one word to say "in the tag" like here)
 #.
-#: ../src/misc.c:1979
+#: ../src/misc.c:1975
 msgid "the Tag"
 msgstr "a etiqueta"
 
 #. Property of the search
-#: ../src/misc.c:1990 ../src/prefs.c:335
+#: ../src/misc.c:1986 ../src/prefs.c:335
 msgid "Case sensitive"
 msgstr "Diferenciar maiúsculas de minúsculas"
 
-#: ../src/misc.c:2217
+#: ../src/misc.c:2213
 msgid "Ready to search…"
 msgstr "Pronto para pesquisar…"
 
-#: ../src/misc.c:2437
+#: ../src/misc.c:2433
 #, c-format
 msgid "Found one file"
 msgid_plural "Found %d files"
 msgstr[0] "Encontrou um arquivo"
 msgstr[1] "Encontrou %d arquivos"
 
-#: ../src/misc.c:2722
+#: ../src/misc.c:2718
 msgid "Load Filenames From a Text File"
 msgstr "Carregar os nomes dos arquivos de um arquivo texto"
 
-#: ../src/misc.c:2751
+#: ../src/misc.c:2747
 msgid "File:"
 msgstr "Arquivo:"
 
 #. Button 'load'
 #. the signal attached to this button, to load the file, is placed after the LoadFileContentList definition
-#: ../src/misc.c:2770
+#: ../src/misc.c:2766
 msgid " Load "
 msgstr " Carregar "
 
-#: ../src/misc.c:2788
+#: ../src/misc.c:2784
 msgid "Content of Text File"
 msgstr "Conteúdo do arquivo texto"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2809 ../src/misc.c:2904
+#: ../src/misc.c:2805 ../src/misc.c:2900
 msgid "Insert a blank line before the selected line"
 msgstr "Inserir uma linha em branco antes da linha selecionada"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2818 ../src/misc.c:2913
+#: ../src/misc.c:2814 ../src/misc.c:2909
 msgid "Delete the selected line"
 msgstr "Excluir a linha selecionada"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2827 ../src/misc.c:2922 ../src/misc.c:3408
+#: ../src/misc.c:2823 ../src/misc.c:2918 ../src/misc.c:3399
 msgid "Delete all blank lines"
 msgstr "Excluir todas as linhas em branco"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2839 ../src/misc.c:2934
+#: ../src/misc.c:2835 ../src/misc.c:2930
 msgid "Move up the selected line"
 msgstr "Mover para cima a linha selecionada"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2848 ../src/misc.c:2943
+#: ../src/misc.c:2844 ../src/misc.c:2939
 msgid "Move down the selected line"
 msgstr "Mover para baixo a linha selecionada"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2860 ../src/misc.c:2955 ../src/misc.c:3432
+#: ../src/misc.c:2856 ../src/misc.c:2951 ../src/misc.c:3423
 msgid "Reload"
 msgstr "Recarregar"
 
-#: ../src/misc.c:2882
+#: ../src/misc.c:2878
 msgid "List of Files"
 msgstr "Lista dos arquivos"
 
-#: ../src/misc.c:2977
+#: ../src/misc.c:2973
 msgid "Selected line:"
 msgstr "Linha selecionada:"
 
-#: ../src/misc.c:2995
+#: ../src/misc.c:2991
 msgid ""
 "When activating this option, after loading the filenames, the current "
 "selected scanner will be ran (the scanner window must be opened)."
@@ -2939,34 +2928,34 @@ msgstr ""
 "selecionado atualmente será executado (a janela do verificador deverá estar "
 "aberta)."
 
-#: ../src/misc.c:3082
+#: ../src/misc.c:3078
 #, c-format
 msgid "Cannot retrieve file info (%s)"
 msgstr "Não foi possível obter informação do arquivo (%s)"
 
-#: ../src/misc.c:3144
+#: ../src/misc.c:3141
 #, c-format
 msgid "Can't open file '%s' (%s)"
 msgstr "Não foi possível abrir o arquivo \"%s\" (%s)"
 
-#: ../src/misc.c:3180
+#: ../src/misc.c:3170
 #, c-format
 msgid "Error reading file (%s)"
 msgstr "Erro na leitura do arquivo (%s)"
 
-#: ../src/misc.c:3396
+#: ../src/misc.c:3387
 msgid "Insert a blank line"
 msgstr "Inserir uma linha em branco"
 
-#: ../src/misc.c:3402
+#: ../src/misc.c:3393
 msgid "Delete this line"
 msgstr "Excluir esta linha"
 
-#: ../src/misc.c:3417
+#: ../src/misc.c:3408
 msgid "Move up this line"
 msgstr "Mover esta linha para cima"
 
-#: ../src/misc.c:3423
+#: ../src/misc.c:3414
 msgid "Move down this line"
 msgstr "Mover esta linha para baixo"
 
@@ -2976,21 +2965,16 @@ msgstr "Mover esta linha para baixo"
 msgid "Profile:"
 msgstr "Perfil:"
 
-#: ../src/mp4_header.cc:60 ../src/mp4_tag.cc:91 ../src/mp4_tag.cc:284
+#: ../src/mp4_header.cc:59 ../src/mp4_tag.cc:91 ../src/mp4_tag.cc:284
 msgid "MP4 format invalid"
 msgstr "Formato MP4 inválido"
 
-#: ../src/mp4_header.cc:68
-#, c-format
-msgid "File contains no audio track: '%s'"
-msgstr "O arquivo contém nenhuma faixa de áudio: \"%s\""
-
-#: ../src/mp4_header.cc:79
+#: ../src/mp4_header.cc:69
 #, c-format
 msgid "Error reading properties from file: '%s'"
 msgstr "Erro na leitura das propriedades do arquivo: \"%s\""
 
-#: ../src/mp4_header.cc:140 ../src/mpeg_header.c:204
+#: ../src/mp4_header.cc:130 ../src/mpeg_header.c:204
 #, c-format
 msgid "~%d kb/s"
 msgstr "~%d kb/s"
@@ -3070,184 +3054,184 @@ msgstr ""
 msgid "Error: Failed to open file: '%s' as Vorbis (%s)."
 msgstr "Erro: Falha ao abrir o arquivo: \"%s\" como Vorbis (%s)."
 
-#: ../src/ogg_tag.c:712 ../src/ogg_tag.c:887
+#: ../src/ogg_tag.c:706 ../src/ogg_tag.c:881
 #, c-format
 msgid "Warning: The Ogg Vorbis file '%s' contains an ID3v2 tag."
 msgstr "Aviso: O arquivo Ogg Vorbis \"%s\" contém uma etiqueta ID3v2."
 
-#: ../src/ogg_tag.c:1035 ../src/picture.c:1258
+#: ../src/ogg_tag.c:1030 ../src/picture.c:1082
 #, c-format
 msgid "Error with 'loader_write': %s"
 msgstr "Erro com \"loader_write\": %s"
 
-#: ../src/ogg_tag.c:1050 ../src/picture.c:1181
+#: ../src/ogg_tag.c:1045 ../src/picture.c:1005
 #, c-format
 msgid "Error with 'loader_close': %s"
 msgstr "Erro com \"loader_close\": %s"
 
-#: ../src/picture.c:104
+#: ../src/picture.c:244 ../src/picture.c:269
 #, c-format
-msgid "Image file not saved: %s"
-msgstr "O arquivo de imagem não salvo: %s"
+msgid "Image file not loaded: %s"
+msgstr "O arquivo de imagem não foi carregado: %s"
 
-#: ../src/picture.c:154
+#: ../src/picture.c:261
 #, c-format
 msgid "Cannot open file: '%s'"
 msgstr "Não foi possível abrir o arquivo \"%s\""
 
-#: ../src/picture.c:158
+#: ../src/picture.c:265
 msgid "Image File Error"
 msgstr "Erro o arquivo de imagem"
 
-#: ../src/picture.c:162 ../src/picture.c:424
-#, c-format
-msgid "Image file not loaded: %s"
-msgstr "O arquivo de imagem não foi carregado: %s"
-
-#: ../src/picture.c:446
+#: ../src/picture.c:276
 msgid "Image file loaded"
 msgstr "Arquivo de imagem carregado"
 
-#: ../src/picture.c:504
+#: ../src/picture.c:334
 msgid "Add Images"
 msgstr "Adicionar imagens"
 
-#: ../src/picture.c:514 ../src/picture.c:875
+#: ../src/picture.c:344 ../src/picture.c:701
 msgid "All Files"
 msgstr "Todos os Arquivos"
 
-#: ../src/picture.c:520 ../src/picture.c:881
+#: ../src/picture.c:350 ../src/picture.c:707
 msgid "PNG and JPEG"
 msgstr "PNG e JPEG"
 
-#: ../src/picture.c:651
+#: ../src/picture.c:477
 #, c-format
 msgid "Image Properties %d/%d"
 msgstr "Propriedades da imagem %d/%d"
 
-#: ../src/picture.c:677
+#: ../src/picture.c:503
 msgid "Image Type"
 msgstr "Tipo de imagem"
 
 #. Description of the picture
-#: ../src/picture.c:735
+#: ../src/picture.c:561
 msgid "Image Description:"
 msgstr "Descrição de imagem:"
 
-#: ../src/picture.c:862
+#: ../src/picture.c:688
 #, c-format
 msgid "Save Image %d/%d"
 msgstr "Salvar imagem %d/%d"
 
-#: ../src/picture.c:1022
+#: ../src/picture.c:763
+#, c-format
+msgid "Image file not saved: %s"
+msgstr "O arquivo de imagem não salvo: %s"
+
+#: ../src/picture.c:846
 msgid "JPEG image"
 msgstr "Imagem JPEG"
 
-#: ../src/picture.c:1024
+#: ../src/picture.c:848
 msgid "PNG image"
 msgstr "Imagem PNG"
 
-#: ../src/picture.c:1026
+#: ../src/picture.c:850
 msgid "GIF image"
 msgstr "Imagem GIF"
 
-#: ../src/picture.c:1028
+#: ../src/picture.c:852
 msgid "Unknown image"
 msgstr "Imagem desconhecida"
 
-#: ../src/picture.c:1040
+#: ../src/picture.c:864
 msgid "32x32 pixel PNG file icon"
 msgstr "32x32 pixels: ícone de arquivo PNG"
 
-#: ../src/picture.c:1042
+#: ../src/picture.c:866
 msgid "Other file icon"
 msgstr "Outro ícone de arquivo"
 
-#: ../src/picture.c:1044
+#: ../src/picture.c:868
 msgid "Cover (front)"
 msgstr "Capa (frente)"
 
-#: ../src/picture.c:1046
+#: ../src/picture.c:870
 msgid "Cover (back)"
 msgstr "Capa (atrás)"
 
-#: ../src/picture.c:1048
+#: ../src/picture.c:872
 msgid "Leaflet page"
 msgstr "Página do folheto"
 
-#: ../src/picture.c:1050
+#: ../src/picture.c:874
 msgid "Media (e.g. label side of CD)"
 msgstr "Mídia (ex.: lado do rótulo do CD)"
 
-#: ../src/picture.c:1052
+#: ../src/picture.c:876
 msgid "Lead artist/lead performer/soloist"
 msgstr "Artista principal/músico principal/solista"
 
-#: ../src/picture.c:1054
+#: ../src/picture.c:878
 msgid "Artist/performer"
 msgstr "Artista/músico"
 
-#: ../src/picture.c:1056
+#: ../src/picture.c:880
 msgid "Conductor"
 msgstr "Maestro"
 
-#: ../src/picture.c:1058
+#: ../src/picture.c:882
 msgid "Band/Orchestra"
 msgstr "Banda/orquestra"
 
-#: ../src/picture.c:1062
+#: ../src/picture.c:886
 msgid "Lyricist/text writer"
 msgstr "Letrista/escritor"
 
-#: ../src/picture.c:1064
+#: ../src/picture.c:888
 msgid "Recording location"
 msgstr "Local da gravação"
 
-#: ../src/picture.c:1066
+#: ../src/picture.c:890
 msgid "During recording"
 msgstr "Duração da gravação"
 
-#: ../src/picture.c:1068
+#: ../src/picture.c:892
 msgid "During performance"
 msgstr "Duração da performance"
 
-#: ../src/picture.c:1070
+#: ../src/picture.c:894
 msgid "Movie/video screen capture"
 msgstr "Captura de tela de filme/vídeo"
 
-#: ../src/picture.c:1072
+#: ../src/picture.c:896
 msgid "A bright colored fish"
 msgstr "Um peixe de cores fortes"
 
-#: ../src/picture.c:1074
+#: ../src/picture.c:898
 msgid "Illustration"
 msgstr "Ilustração"
 
-#: ../src/picture.c:1076
+#: ../src/picture.c:900
 msgid "Band/Artist logotype"
 msgstr "Logotipo da banda/artista"
 
-#: ../src/picture.c:1078
+#: ../src/picture.c:902
 msgid "Publisher/studio logotype"
 msgstr "Logotipo do distribuidor/estúdio"
 
-#: ../src/picture.c:1082
+#: ../src/picture.c:906
 msgid "Unknown image type"
 msgstr "Tipo de imagem desconhecida"
 
-#: ../src/picture.c:1112 ../src/picture.c:1123
+#: ../src/picture.c:936 ../src/picture.c:947
 msgid "pixels"
 msgstr "pixels"
 
-#: ../src/picture.c:1113 ../src/picture.c:1124
+#: ../src/picture.c:937 ../src/picture.c:948
 msgid "Type"
 msgstr "Tipo"
 
-#: ../src/picture.c:1125
+#: ../src/picture.c:949
 msgid "Description"
 msgstr "Descrição"
 
-#: ../src/picture.c:1241
+#: ../src/picture.c:1065
 msgid ""
 "Cannot display the image because not enough data has been read to determine "
 "how to create the image buffer."
@@ -3255,17 +3239,17 @@ msgstr ""
 "Não foi possível exibir a imagem porque não foram lidos dados suficientes "
 "para determinar como o buffer de imagem deve ser criado."
 
-#: ../src/picture.c:1248
+#: ../src/picture.c:1072
 msgid "Cannot display the image"
 msgstr "Não foi possível exibir a imagem"
 
-#: ../src/picture.c:1250
+#: ../src/picture.c:1074
 msgid ""
 "Not enough data has been read to determine how to create the image buffer."
 msgstr ""
 "Dados lidos insuficientes para determinar como criar o buffer de imagem."
 
-#: ../src/picture.c:1252
+#: ../src/picture.c:1076
 msgid "Load Image File"
 msgstr "Carregar arquivo de imagem"
 
@@ -4248,7 +4232,6 @@ msgid "User Password:"
 msgstr "Senha do usuário:"
 
 #: ../src/prefs.c:1338
-#| msgid "Password of user for the the proxy server."
 msgid "Password of user for the proxy server."
 msgstr "A senha do usuário para o servidor proxy."
 
@@ -4408,43 +4391,43 @@ msgstr "Novo nome do arquivo verificado com sucesso"
 msgid "New filename successfully scanned: %s"
 msgstr "Novo nome do arquivo verificado com sucesso: %s"
 
-#: ../src/scan_dialog.c:1628
+#: ../src/scan_dialog.c:1632
 #, c-format
 msgid "Error while processing fields: %s"
 msgstr "Erro ao processar os campos: %s"
 
 #. The window
-#: ../src/scan_dialog.c:1798
+#: ../src/scan_dialog.c:1802
 msgid "Tag and Filename Scan"
 msgstr "Verificação da etiqueta e do nome do arquivo"
 
 #. TODO: Set related action to match AM_SCAN_FILES.
-#: ../src/scan_dialog.c:1807
+#: ../src/scan_dialog.c:1811
 msgid "Scan Files"
 msgstr "Verificar arquivos"
 
 #. Option Menu
-#: ../src/scan_dialog.c:1835
+#: ../src/scan_dialog.c:1839
 msgid "Scanner:"
 msgstr "Verificador:"
 
-#: ../src/scan_dialog.c:1856
+#: ../src/scan_dialog.c:1860
 msgid "Select the type of scanner to use"
 msgstr "Seleciona o tipo do verificador a ser usado"
 
-#: ../src/scan_dialog.c:1865
+#: ../src/scan_dialog.c:1869
 msgid "Scanner Preferences"
 msgstr "Preferências do verificador"
 
-#: ../src/scan_dialog.c:1874
+#: ../src/scan_dialog.c:1878
 msgid "Show / Hide Masks Editor"
 msgstr "Mostra / oculta o editor de máscaras"
 
-#: ../src/scan_dialog.c:1884
+#: ../src/scan_dialog.c:1888
 msgid "Show / Hide Legend"
 msgstr "Mostra / oculta legendas"
 
-#: ../src/scan_dialog.c:1914
+#: ../src/scan_dialog.c:1918
 msgid ""
 "Select or type in a mask using codes (see Legend) to parse filename and "
 "path. Used to fill in tag fields"
@@ -4453,15 +4436,15 @@ msgstr ""
 "o nome do arquivo e o caminho. Usado para preencher campos das etiquetas"
 
 #. Preview label
-#: ../src/scan_dialog.c:1938
+#: ../src/scan_dialog.c:1942
 msgid "Fill tag preview"
 msgstr "Visualização do preenchimento da etiqueta"
 
-#: ../src/scan_dialog.c:1968
+#: ../src/scan_dialog.c:1972
 msgid "Prefix mask with current path"
 msgstr "Prefixa a máscara no caminho atual"
 
-#: ../src/scan_dialog.c:1982
+#: ../src/scan_dialog.c:1986
 msgid ""
 "Select or type in a mask using codes (see Legend) to parse tag fields. Used "
 "to rename the file.\n"
@@ -4474,15 +4457,15 @@ msgstr ""
 "absoluto, caso contrário é relativo ao caminho anterior."
 
 #. Preview label
-#: ../src/scan_dialog.c:2007
+#: ../src/scan_dialog.c:2011
 msgid "Rename file preview"
 msgstr "Visualização da renomeação do arquivo"
 
-#: ../src/scan_dialog.c:2026
+#: ../src/scan_dialog.c:2030
 msgid "Select fields:"
 msgstr "Campos selecionados:"
 
-#: ../src/scan_dialog.c:2029
+#: ../src/scan_dialog.c:2033
 msgid ""
 "The buttons on the right represent the fields which can be processed. Select "
 "those which interest you"
@@ -4491,134 +4474,134 @@ msgstr ""
 "Selecione aqueles que lhe interessam."
 
 #. Advice for Translators: set the first letter of filename translated
-#: ../src/scan_dialog.c:2033
+#: ../src/scan_dialog.c:2037
 msgid "F"
 msgstr "A"
 
-#: ../src/scan_dialog.c:2035
+#: ../src/scan_dialog.c:2039
 msgid "Process filename field"
 msgstr "Processar o campo do nome do arquivo"
 
 #. Advice for Translators: set the first letter of title translated
-#: ../src/scan_dialog.c:2037
+#: ../src/scan_dialog.c:2041
 msgid "T"
 msgstr "T"
 
-#: ../src/scan_dialog.c:2038
+#: ../src/scan_dialog.c:2042
 msgid "Process title field"
 msgstr "Processar o campo do título"
 
 #. Advice for Translators: set the first letter of artist translated
-#: ../src/scan_dialog.c:2040
+#: ../src/scan_dialog.c:2044
 msgid "Ar"
 msgstr "Ar"
 
-#: ../src/scan_dialog.c:2041
+#: ../src/scan_dialog.c:2045
 msgid "Process file artist field"
 msgstr "Processar o campo do artista"
 
 #. Advice for Translators: set the first letter of album artist translated
-#: ../src/scan_dialog.c:2043
+#: ../src/scan_dialog.c:2047
 msgid "AA"
 msgstr "AA"
 
-#: ../src/scan_dialog.c:2044
+#: ../src/scan_dialog.c:2048
 msgid "Process album artist field"
 msgstr "Processar o campo do artista do álbum"
 
 #. Advice for Translators: set the first letter of album translated
-#: ../src/scan_dialog.c:2046
+#: ../src/scan_dialog.c:2050
 msgid "Al"
 msgstr "Al"
 
-#: ../src/scan_dialog.c:2047
+#: ../src/scan_dialog.c:2051
 msgid "Process album field"
 msgstr "Processar o campo do álbum"
 
 #. Advice for Translators: set the first letter of genre translated
-#: ../src/scan_dialog.c:2049
+#: ../src/scan_dialog.c:2053
 msgid "G"
 msgstr "G"
 
-#: ../src/scan_dialog.c:2050
+#: ../src/scan_dialog.c:2054
 msgid "Process genre field"
 msgstr "Processar o campo do gênero"
 
 #. Advice for Translators: set the first letter of comment translated
-#: ../src/scan_dialog.c:2052
+#: ../src/scan_dialog.c:2056
 msgid "Cm"
 msgstr "Cm"
 
-#: ../src/scan_dialog.c:2053
+#: ../src/scan_dialog.c:2057
 msgid "Process comment field"
 msgstr "Processar o campo do comentário"
 
 #. Advice for Translators: set the first letter of composer translated
-#: ../src/scan_dialog.c:2055
+#: ../src/scan_dialog.c:2059
 msgid "Cp"
 msgstr "Cp"
 
-#: ../src/scan_dialog.c:2056
+#: ../src/scan_dialog.c:2060
 msgid "Process composer field"
 msgstr "Processar o campo do compositor"
 
 #. Advice for Translators: set the first letter of orig artist translated
-#: ../src/scan_dialog.c:2058
+#: ../src/scan_dialog.c:2062
 msgid "O"
 msgstr "A"
 
-#: ../src/scan_dialog.c:2059
+#: ../src/scan_dialog.c:2063
 msgid "Process original artist field"
 msgstr "Processar o campo do artista original"
 
 #. Advice for Translators: set the first letter of copyright translated
-#: ../src/scan_dialog.c:2061
+#: ../src/scan_dialog.c:2065
 msgid "Cr"
 msgstr "Cr"
 
-#: ../src/scan_dialog.c:2062
+#: ../src/scan_dialog.c:2066
 msgid "Process copyright field"
 msgstr "Processar o campo de copyright"
 
 #. Advice for Translators: set the first letter of URL translated
-#: ../src/scan_dialog.c:2064
+#: ../src/scan_dialog.c:2068
 msgid "U"
 msgstr "U"
 
-#: ../src/scan_dialog.c:2065
+#: ../src/scan_dialog.c:2069
 msgid "Process URL field"
 msgstr "Processar o campo da URL"
 
 #. Advice for Translators: set the first letter of encoder name translated
-#: ../src/scan_dialog.c:2067
+#: ../src/scan_dialog.c:2071
 msgid "E"
 msgstr "C"
 
-#: ../src/scan_dialog.c:2068
+#: ../src/scan_dialog.c:2072
 msgid "Process encoder name field"
 msgstr "Processar o campo do nome do codificador"
 
-#: ../src/scan_dialog.c:2112
+#: ../src/scan_dialog.c:2116
 msgid "Invert selection"
 msgstr "Inverter seleção"
 
-#: ../src/scan_dialog.c:2119
+#: ../src/scan_dialog.c:2123
 msgid "Select/Unselect all"
 msgstr "Selecionar/Desmarcar todos"
 
-#: ../src/scan_dialog.c:2134
+#: ../src/scan_dialog.c:2138
 msgid "Convert:"
 msgstr "Converter:"
 
-#: ../src/scan_dialog.c:2136
+#: ../src/scan_dialog.c:2140
 msgid "to: "
 msgstr "para: "
 
-#: ../src/scan_dialog.c:2143
+#: ../src/scan_dialog.c:2147
 msgid "Do not convert"
 msgstr "Não converter"
 
-#: ../src/scan_dialog.c:2162
+#: ../src/scan_dialog.c:2177
 msgid ""
 "The underscore character or the string '%20' are replaced by one space. "
 "Example, before: 'Text%20In%20An_Entry', after: 'Text In An Entry'."
@@ -4627,7 +4610,7 @@ msgstr ""
 "Por exemplo, antes: \"Texto%20Em%20Uma_Entrada\", após: \"Texto em uma "
 "entrada\"."
 
-#: ../src/scan_dialog.c:2165
+#: ../src/scan_dialog.c:2180
 msgid ""
 "The space character is replaced by one underscore character. Example, "
 "before: 'Text In An Entry', after: 'Text_In_An_Entry'."
@@ -4635,7 +4618,7 @@ msgstr ""
 "O caractere de espaço é substituído por um caractere de sublinhado. Por "
 "exemplo, antes: \"Texto em uma entrada\", após: \"Texto_Em_Uma_Entrada\"."
 
-#: ../src/scan_dialog.c:2168
+#: ../src/scan_dialog.c:2183
 msgid ""
 "Replace a string by another one. Note that the search is case sensitive."
 msgstr ""
@@ -4643,31 +4626,31 @@ msgstr ""
 "minúsculo."
 
 # Caixa alta?
-#: ../src/scan_dialog.c:2175
+#: ../src/scan_dialog.c:2190
 msgid "Capitalize all"
 msgstr "Tudo em maiúsculo"
 
-#: ../src/scan_dialog.c:2177
+#: ../src/scan_dialog.c:2192
 msgid "Lowercase all"
 msgstr "Tudo em minúsculo"
 
-#: ../src/scan_dialog.c:2179
+#: ../src/scan_dialog.c:2194
 msgid "Capitalize first letter"
 msgstr "Primeira letra em maiúsculo"
 
-#: ../src/scan_dialog.c:2181
+#: ../src/scan_dialog.c:2196
 msgid "Capitalize the first letter of each word"
 msgstr "Primeira letra de cada palavra em maiúsculo"
 
-#: ../src/scan_dialog.c:2182
+#: ../src/scan_dialog.c:2197
 msgid "Detect Roman numerals"
 msgstr "Detectar numerais romano"
 
-#: ../src/scan_dialog.c:2184
+#: ../src/scan_dialog.c:2199
 msgid "Do not change capitalization"
 msgstr "Não alterar maiúsculo/minúsculo"
 
-#: ../src/scan_dialog.c:2206
+#: ../src/scan_dialog.c:2236
 msgid ""
 "Convert all words in all fields to upper case. Example, before: 'Text IN AN "
 "entry', after: 'TEXT IN AN ENTRY'."
@@ -4675,7 +4658,7 @@ msgstr ""
 "Converte todas as palavras em todos os campos para maiúsculas. Por exemplo, "
 "antes: \"Texto EM UMA entrada\", após: \"TEXTO EM UMA ENTRADA\"."
 
-#: ../src/scan_dialog.c:2209
+#: ../src/scan_dialog.c:2239
 msgid ""
 "Convert all words in all fields to lower case. Example, before: 'TEXT IN an "
 "entry', after: 'text in an entry'."
@@ -4683,7 +4666,7 @@ msgstr ""
 "Converte todas as palavras em todos os campos para minúsculas. Por exemplo, "
 "antes: \"TEXTO EM uma entrada\", após: \"texto em uma entrada\"."
 
-#: ../src/scan_dialog.c:2212
+#: ../src/scan_dialog.c:2242
 msgid ""
 "Convert the initial of the first word in all fields to upper case. Example, "
 "before: 'text IN An ENTRY', after: 'Text in an entry'."
@@ -4692,7 +4675,7 @@ msgstr ""
 "campos. Por exemplo, antes: \"Texto EM Uma ENTRADA\", após: \"Texto em uma "
 "entrada\"."
 
-#: ../src/scan_dialog.c:2215
+#: ../src/scan_dialog.c:2245
 msgid ""
 "Convert the initial of each word in all fields to upper case. Example, "
 "before: 'Text in an ENTRY', after: 'Text In An Entry'."
@@ -4700,7 +4683,7 @@ msgstr ""
 "Converte a letra inicial de cada palavra para maiúscula, em todos os campos. "
 "Por exemplo, antes: \"Texto em uma ENTRADA\", após: \"Texto Em Uma Entrada\"."
 
-#: ../src/scan_dialog.c:2218
+#: ../src/scan_dialog.c:2248
 msgid ""
 "Force to convert to upper case the Roman numerals. Example, before: 'ix. "
 "text in an entry', after: 'IX. Text In An Entry'."
@@ -4708,19 +4691,19 @@ msgstr ""
 "Forçar conversão para maiúsculo de numerais romanos. Por exemplo, antes: "
 "\"ix. texto em uma entrada\", após: \"IX. Texto Em Uma Entrada\"."
 
-#: ../src/scan_dialog.c:2226
+#: ../src/scan_dialog.c:2256
 msgid "Insert a space before uppercase letters"
 msgstr "Inserir um espaço antes das letras maiúsculas"
 
-#: ../src/scan_dialog.c:2228
+#: ../src/scan_dialog.c:2258
 msgid "Remove duplicate spaces and underscores"
 msgstr "Remover sublinhados e espaços duplicados"
 
-#: ../src/scan_dialog.c:2230
+#: ../src/scan_dialog.c:2260
 msgid "Do not change word separators"
 msgstr "Não alterar seperadores de palavras"
 
-#: ../src/scan_dialog.c:2244
+#: ../src/scan_dialog.c:2282
 msgid ""
 "All spaces between words are removed. Example, before: 'Text In An Entry', "
 "after: 'TextInAnEntry'."
@@ -4728,7 +4711,7 @@ msgstr ""
 "Todos os espaços entre palavras são removidos. Por exemplo, antes: \"Texto "
 "Em Uma Entrada\", após: \"TextoEmUmaEntrada\"."
 
-#: ../src/scan_dialog.c:2247
+#: ../src/scan_dialog.c:2285
 msgid ""
 "A space is inserted before each upper case letter. Example, before: "
 "'TextInAnEntry', after: 'Text In An Entry'."
@@ -4736,7 +4719,7 @@ msgstr ""
 "Um espaço é inserido antes de cada letra maiúscula. Por exemplo, antes: "
 "'TextoEmUmaEntrada', depois: 'Texto Em Uma Entrada'."
 
-#: ../src/scan_dialog.c:2250
+#: ../src/scan_dialog.c:2288
 msgid ""
 "Duplicate spaces and underscores are removed. Example, before: "
 "'Text__In__An   Entry', after: 'Text_In_An Entry'."
@@ -4747,141 +4730,141 @@ msgstr ""
 #.
 #. * Frame to display codes legend
 #.
-#: ../src/scan_dialog.c:2257
+#: ../src/scan_dialog.c:2295
 msgid "Legend"
 msgstr "Legenda"
 
-#: ../src/scan_dialog.c:2263
+#: ../src/scan_dialog.c:2301
 #, c-format
 msgid "%a: artist"
 msgstr "%a: artista"
 
-#: ../src/scan_dialog.c:2266
+#: ../src/scan_dialog.c:2304
 msgid "%z: album artist"
 msgstr "%z: artista do álbum"
 
-#: ../src/scan_dialog.c:2269
+#: ../src/scan_dialog.c:2307
 msgid "%b: album"
 msgstr "%b: álbum"
 
-#: ../src/scan_dialog.c:2272
+#: ../src/scan_dialog.c:2310
 #, c-format
 msgid "%c: comment"
 msgstr "%c: comentário"
 
-#: ../src/scan_dialog.c:2275
+#: ../src/scan_dialog.c:2313
 #, c-format
 msgid "%p: composer"
 msgstr "%p: compositor"
 
-#: ../src/scan_dialog.c:2278
+#: ../src/scan_dialog.c:2316
 msgid "%r: copyright"
 msgstr "%r: copyright"
 
-#: ../src/scan_dialog.c:2281
+#: ../src/scan_dialog.c:2319
 #, c-format
 msgid "%d: disc number"
 msgstr "%d: número do disco"
 
-#: ../src/scan_dialog.c:2284
+#: ../src/scan_dialog.c:2322
 #, c-format
 msgid "%e: encoded by"
 msgstr "%e: codificado por"
 
-#: ../src/scan_dialog.c:2287
+#: ../src/scan_dialog.c:2325
 #, c-format
 msgid "%g: genre"
 msgstr "%g: gênero"
 
-#: ../src/scan_dialog.c:2290
+#: ../src/scan_dialog.c:2328
 #, c-format
 msgid "%i: ignored"
 msgstr "%i: ignorado"
 
-#: ../src/scan_dialog.c:2293
+#: ../src/scan_dialog.c:2331
 msgid "%l: number of tracks"
 msgstr "%l: número de faixas"
 
-#: ../src/scan_dialog.c:2296
+#: ../src/scan_dialog.c:2334
 #, c-format
 msgid "%o: orig. artist"
 msgstr "%o: artista orig."
 
-#: ../src/scan_dialog.c:2299
+#: ../src/scan_dialog.c:2337
 #, c-format
 msgid "%n: track"
 msgstr "%n: faixa"
 
-#: ../src/scan_dialog.c:2302
+#: ../src/scan_dialog.c:2340
 msgid "%t: title"
 msgstr "%t: título"
 
-#: ../src/scan_dialog.c:2305
+#: ../src/scan_dialog.c:2343
 #, c-format
 msgid "%u: URL"
 msgstr "%u: URL"
 
-#: ../src/scan_dialog.c:2308
+#: ../src/scan_dialog.c:2346
 #, c-format
 msgid "%x: number of discs"
 msgstr "%x: número de discos"
 
-#: ../src/scan_dialog.c:2311
+#: ../src/scan_dialog.c:2349
 msgid "%y: year"
 msgstr "%y: ano"
 
 #.
 #. * Masks Editor
 #.
-#: ../src/scan_dialog.c:2318
+#: ../src/scan_dialog.c:2356
 msgid "Mask Editor"
 msgstr "Editor de máscara"
 
-#: ../src/scan_dialog.c:2372
+#: ../src/scan_dialog.c:2410
 msgid "Create New Mask"
 msgstr "Criar nova máscara"
 
-#: ../src/scan_dialog.c:2382
+#: ../src/scan_dialog.c:2420
 msgid "Move Up this Mask"
 msgstr "Mover essa máscara para cima"
 
-#: ../src/scan_dialog.c:2392
+#: ../src/scan_dialog.c:2430
 msgid "Move Down this Mask"
 msgstr "Mover essa máscara para baixo"
 
-#: ../src/scan_dialog.c:2402
+#: ../src/scan_dialog.c:2440
 msgid "Duplicate Mask"
 msgstr "Duplicar máscara"
 
-#: ../src/scan_dialog.c:2412
+#: ../src/scan_dialog.c:2450
 msgid "Add Default Masks"
 msgstr "Adicionar máscaras padrão"
 
-#: ../src/scan_dialog.c:2422
+#: ../src/scan_dialog.c:2460
 msgid "Remove Mask"
 msgstr "Remover máscara"
 
-#: ../src/scan_dialog.c:2432
+#: ../src/scan_dialog.c:2470
 msgid "Save Masks"
 msgstr "Salvar máscaras"
 
-#: ../src/scan_dialog.c:3012
+#: ../src/scan_dialog.c:3050
 msgid "New_mask"
 msgstr "Nova_máscara"
 
-#: ../src/scan_dialog.c:3051
+#: ../src/scan_dialog.c:3089
 msgid "Copy: No row selected"
 msgstr "Copiar: Nenhuma linha selecionada"
 
-#: ../src/scan_dialog.c:3144
+#: ../src/scan_dialog.c:3182
 msgid "Remove: No row selected"
 msgstr "Remover: Nenhuma linha selecionada"
 
-#: ../src/scan_dialog.c:3191
+#: ../src/scan_dialog.c:3229
 msgid "Move Up: No row selected"
 msgstr "Mover para cima: Nenhuma linha selecionada"
 
-#: ../src/scan_dialog.c:3235
+#: ../src/scan_dialog.c:3273
 msgid "Move Down: No row selected"
 msgstr "Mover para baixo: Nenhuma linha selecionada"
 
@@ -4949,6 +4932,36 @@ msgstr "Falha ao migrar o arquivo de configuração \"%s\""
 msgid "Error: Cannot create directory '%s' (%s)"
 msgstr "Erro: Não foi possível criar o diretório \"%s\" (%s)"
 
+#~ msgid ""
+#~ "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 (at your "
+#~ "option) any later version.\n"
+#~ "\n"
+#~ "This program is distributed in the hope that it will be useful, but "
+#~ "WITHOUT ANY WARRANTY; without even the implied warranty of "
+#~ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General "
+#~ "Public License for more details.\n"
+#~ "\n"
+#~ "You should have received a copy of the GNU General Public License along "
+#~ "with this program. If not, see <http://www.gnu.org/licenses/>."
+#~ msgstr ""
+#~ "Este programa é um software livre; você pode redistribuí-lo e/ou modificá-"
+#~ "lo sob os termos da Licença Pública Geral GNU publicada pela Free "
+#~ "Software Foundation; qualquer versão 2 da Licença, ou (a seu critério) "
+#~ "outra versão posterior.\n"
+#~ "\n"
+#~ "Este programa é distribuído na expectativa de que seja útil, mas SEM "
+#~ "NENHUMA GARANTIA; sem mesmo implicar garantias de COMERCIALIZAÇÃO ou "
+#~ "ADEQUAÇÃO A UM FIM ESPECÍFICO. Veja a Licença Pública Geral GNU (GPL) "
+#~ "para mais detalhes.\n"
+#~ "\n"
+#~ "Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com "
+#~ "este programa; caso contrário, consulte <http://www.gnu.org/licenses/>."
+
+#~ msgid "File contains no audio track: '%s'"
+#~ msgstr "O arquivo contém nenhuma faixa de áudio: \"%s\""
+
 #~ msgid "DLL '%s' not already loaded. Try loading it..."
 #~ msgstr "A DLL \"%s\" nao carregado ainda. Tente carregá-la..."
 
diff --git a/po/sr.po b/po/sr.po
index 5d926fa..ba15212 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -9,8 +9,8 @@ msgstr ""
 "Project-Id-Version: EasyTAG-2.1.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=easyta"
 "g&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2014-04-19 19:19+0000\n"
-"PO-Revision-Date: 2014-05-13 19:24+0200\n"
+"POT-Creation-Date: 2014-04-03 16:46+0000\n"
+"PO-Revision-Date: 2014-04-05 21:22+0200\n"
 "Last-Translator: Мирослав Николић <miroslavnikolic at rocketmail.com>\n"
 "Language-Team: Serbian <gnom at prevod.org>\n"
 "Language: sr\n"
@@ -22,6 +22,9 @@ msgstr ""
 "X-Project-Style: gnome\n"
 
 #: ../data/easytag.appdata.xml.in.h:1
+#| msgid ""
+#| "View and edit tags for MP3, MP2, MP4/AAC, FLAC, Ogg Vorbis, MusePack, "
+#| "Monkey's Audio and WavPack files."
 msgid ""
 "View and edit tags for MP3, MP2, MP4/AAC, FLAC, Ogg Opus, Ogg Speex, Ogg "
 "Vorbis, MusePack, Monkey's Audio and WavPack files."
@@ -58,7 +61,7 @@ msgstr "Уређујте метаподатке звучних датотека"
 msgid "mp3;tag;audio;"
 msgstr "мп3;ознака;звук;"
 
-#: ../src/about.c:89
+#: ../src/about.c:91
 msgid ""
 "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 "
@@ -86,7 +89,7 @@ msgstr ""
 "Ако нисте, погледајте: „http://www.gnu.org/licenses/“."
 
 #. Translators: put your own name here to appear in the about dialog.
-#: ../src/about.c:106
+#: ../src/about.c:108
 msgid "translator-credits"
 msgstr ""
 "  Милош Поповић\n"
@@ -94,14 +97,13 @@ msgstr ""
 "\n"
 "http://prevod.org — превод на српски језик"
 
-#: ../src/about.c:116
+#: ../src/about.c:118
 msgid "View and edit tags in audio files"
 msgstr "Прегледајте и уређујте ознаке у звучним датотекама"
 
-#: ../src/ape_tag.c:61 ../src/id3v24_tag.c:112 ../src/mp4_header.cc:46
-#: ../src/mp4_header.cc:59 ../src/mp4_tag.cc:69 ../src/mp4_tag.cc:85
-#: ../src/mp4_tag.cc:90 ../src/mp4_tag.cc:262 ../src/mp4_tag.cc:278
-#: ../src/mp4_tag.cc:283
+#. g_print(_("Error while opening file: '%s' (%s)."),filename_utf8,g_strerror(errno));
+#: ../src/ape_tag.c:61 ../src/id3v24_tag.c:112 ../src/mp4_header.c:63
+#: ../src/mp4_tag.c:65 ../src/mp4_tag.c:186
 #, c-format
 msgid "Error while opening file: '%s' (%s)."
 msgstr "Грешка при отварању датотеке: „%s“ (%s)."
@@ -370,7 +372,7 @@ msgstr "Последња датотека"
 msgid "S_can Files"
 msgstr "_Прегледај датотеке"
 
-#: ../src/bar.c:225 ../src/scan_dialog.c:1818
+#: ../src/bar.c:225 ../src/scan.c:2344
 msgid "Scan selected files"
 msgstr "Прегледајте изабране датотеке"
 
@@ -434,8 +436,8 @@ msgstr "Поновите последње измене"
 msgid "_Quit"
 msgstr "_Изађи"
 
-#: ../src/bar.c:242 ../src/easytag.c:2429 ../src/easytag.c:4564
-#: ../src/easytag.c:4596
+#: ../src/bar.c:242 ../src/easytag.c:2429 ../src/easytag.c:4565
+#: ../src/easytag.c:4597
 msgid "Quit"
 msgstr "Изађите из програма"
 
@@ -729,7 +731,7 @@ msgstr "Преименујте датотеке и директоријуме"
 msgid "_Process Fields…"
 msgstr "_Обради поља…"
 
-#: ../src/bar.c:370 ../src/scan_dialog.c:184
+#: ../src/bar.c:370 ../src/scan.c:182
 msgid "Process Fields"
 msgstr "Обрадите поља"
 
@@ -746,7 +748,7 @@ msgstr "Спреман сам за почетак"
 msgid "New default path for files selected"
 msgstr "Изабрана је нова основна путања за датотеке"
 
-#: ../src/browser.c:678 ../src/easytag.c:4560
+#: ../src/browser.c:678 ../src/easytag.c:4561
 msgid "Some files have been modified but not saved"
 msgstr "Неке датотеке су измењене али нису сачуване"
 
@@ -771,11 +773,11 @@ msgstr "Грешка: Тражећи %s, не могу да нађем чвор
 msgid "Tree"
 msgstr "Стабло"
 
-#: ../src/browser.c:3102 ../src/cddb.c:803 ../src/misc.c:1903
+#: ../src/browser.c:3102 ../src/cddb.c:803 ../src/misc.c:1902
 msgid "Filename"
 msgstr "Назив датотеке"
 
-#: ../src/browser.c:3102 ../src/cddb.c:804 ../src/misc.c:1904
+#: ../src/browser.c:3102 ../src/cddb.c:804 ../src/misc.c:1903
 #: ../src/prefs.c:643
 msgid "Title"
 msgstr "Наслов"
@@ -783,22 +785,22 @@ msgstr "Наслов"
 #. Translators: This option is for the previous 'search in' option. For
 #. * instance, translate this as "Search in:" "Artist".
 #: ../src/browser.c:3103 ../src/browser.c:3110 ../src/cddb.c:483
-#: ../src/cddb.c:805 ../src/misc.c:1905 ../src/prefs.c:644
+#: ../src/cddb.c:805 ../src/misc.c:1904 ../src/prefs.c:644
 msgid "Artist"
 msgstr "Извођач"
 
-#: ../src/browser.c:3103 ../src/misc.c:1906
+#: ../src/browser.c:3103 ../src/misc.c:1905
 msgid "Album Artist"
 msgstr "Извођач албума"
 
 #. Translators: This option is for the previous 'search in' option. For
 #. * instance, translate this as "Search in:" "Album".
 #: ../src/browser.c:3104 ../src/browser.c:3112 ../src/cddb.c:486
-#: ../src/cddb.c:806 ../src/misc.c:1907 ../src/prefs.c:645
+#: ../src/cddb.c:806 ../src/misc.c:1906 ../src/prefs.c:645
 msgid "Album"
 msgstr "Албум"
 
-#: ../src/browser.c:3104 ../src/cddb.c:807 ../src/misc.c:1909
+#: ../src/browser.c:3104 ../src/cddb.c:807 ../src/misc.c:1908
 msgid "Year"
 msgstr "Година"
 
@@ -806,37 +808,37 @@ msgstr "Година"
 msgid "Disc"
 msgstr "Диск"
 
-#: ../src/browser.c:3105 ../src/misc.c:1910
+#: ../src/browser.c:3105 ../src/misc.c:1909
 msgid "Track"
 msgstr "Нумера"
 
-#: ../src/browser.c:3105 ../src/cddb.c:810 ../src/misc.c:1911
+#: ../src/browser.c:3105 ../src/cddb.c:810 ../src/misc.c:1910
 #: ../src/prefs.c:646
 msgid "Genre"
 msgstr "Жанр"
 
-#: ../src/browser.c:3106 ../src/misc.c:1912 ../src/prefs.c:647
+#: ../src/browser.c:3106 ../src/misc.c:1911 ../src/prefs.c:647
 msgid "Comment"
 msgstr "Коментар"
 
-#: ../src/browser.c:3106 ../src/misc.c:1913 ../src/picture.c:1060
+#: ../src/browser.c:3106 ../src/misc.c:1912 ../src/picture.c:1059
 #: ../src/prefs.c:648
 msgid "Composer"
 msgstr "Композитор"
 
-#: ../src/browser.c:3107 ../src/misc.c:1914
+#: ../src/browser.c:3107 ../src/misc.c:1913
 msgid "Original Artist"
 msgstr "Ориг. извођач"
 
-#: ../src/browser.c:3108 ../src/misc.c:1915
+#: ../src/browser.c:3108 ../src/misc.c:1914
 msgid "Copyright"
 msgstr "Ауторско право"
 
-#: ../src/browser.c:3108 ../src/misc.c:1916
+#: ../src/browser.c:3108 ../src/misc.c:1915
 msgid "URL"
 msgstr "Адреса"
 
-#: ../src/browser.c:3109 ../src/misc.c:1917
+#: ../src/browser.c:3109 ../src/misc.c:1916
 msgid "Encoded By"
 msgstr "Кодирано помоћу"
 
@@ -878,7 +880,7 @@ msgstr "Преименуј директоријум"
 msgid "Rename the directory '%s' to:"
 msgstr "Преименуј директоријум „%s“ у:"
 
-#: ../src/browser.c:3636 ../src/misc.c:1172
+#: ../src/browser.c:3636 ../src/misc.c:1171
 msgid "Use mask:"
 msgstr "Користи маску:"
 
@@ -1047,7 +1049,7 @@ msgstr "Сва поља"
 
 #. Translators: This option is for the previous 'search in' option. For
 #. * instance, translate this as "Search in:" "Other".
-#: ../src/cddb.c:492 ../src/picture.c:1038 ../src/prefs.c:807
+#: ../src/cddb.c:492 ../src/picture.c:1037 ../src/prefs.c:807
 msgid "Other"
 msgstr "Остало"
 
@@ -1141,7 +1143,7 @@ msgstr "Категорије"
 msgid "Results:"
 msgstr "Резултати:"
 
-#: ../src/cddb.c:606 ../src/misc.c:1951
+#: ../src/cddb.c:606 ../src/misc.c:1950
 msgid "Search:"
 msgstr "Потражи:"
 
@@ -1204,7 +1206,7 @@ msgid "# Tracks"
 msgstr "# Нумере"
 
 #. Check box to run the scanner
-#: ../src/cddb.c:847 ../src/misc.c:2992
+#: ../src/cddb.c:847 ../src/misc.c:2991
 msgid "Run the current scanner for each file"
 msgstr "Примени текући прегледач за сваку датотеку"
 
@@ -1216,7 +1218,7 @@ msgstr "Поклопи редове Левенштајновим алгорит
 #. Doesn't activate it by default because if the new user don't pay attention to it,
 #. it will not understand why the cddb results aren't loaded correctly...
 #. gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbUseDLM2),CDDB_USE_DLM);
-#: ../src/cddb.c:859 ../src/prefs.c:1363
+#: ../src/cddb.c:859 ../src/prefs.c:1362
 msgid ""
 "When activating this option, the Levenshtein algorithm (DLM: Damerau-"
 "Levenshtein Metric) will be used to match the CDDB title against every "
@@ -1641,46 +1643,46 @@ msgid "The string '%s' couldn't be converted into UTF-8 (%s)."
 msgstr "Ниска „%s“ не може бити преведена у УТФ-8 (%s)."
 
 #. Starting messages
-#: ../src/easytag.c:185
+#: ../src/easytag.c:184
 #, c-format
 msgid "Starting EasyTAG version %s (PID: %d)…"
 msgstr "Покрећем Лаку ознаку %s (ПИБ: %d)…"
 
-#: ../src/easytag.c:187
+#: ../src/easytag.c:186
 #, c-format
 msgid "Using libid3tag version %s"
-msgstr "Користим „libid3tag“ %s"
+msgstr "Користим „libid3tag“ %s…"
 
-#: ../src/easytag.c:190
+#: ../src/easytag.c:189
 #, c-format
 msgid "Using id3lib version %d.%d.%d"
-msgstr "Користим „id3lib“ %d.%d.%d"
+msgstr "Користим „id3lib“ %d.%d.%d…"
 
-#: ../src/easytag.c:196
+#: ../src/easytag.c:195
 #, c-format
 msgid "Variable EASYTAGLANG defined. Setting locale: '%s'"
 msgstr "Променљива „EASYTAGLANG“ је одређена. Постављам локализацију: „%s“"
 
-#: ../src/easytag.c:198
+#: ../src/easytag.c:197
 #, c-format
 msgid "Setting locale: '%s'"
 msgstr "Постављам локализацију: „%s“"
 
-#: ../src/easytag.c:203
+#: ../src/easytag.c:202
 #, c-format
 msgid "Currently using locale '%s' (and eventually '%s')"
 msgstr "Тренутно користим локализацију „%s“ (и евентуално „%s“)"
 
-#: ../src/easytag.c:210
+#: ../src/easytag.c:209
 msgid "Unable to create setting directories"
 msgstr "Не могу да направим директоријуме подешавања"
 
-#: ../src/easytag.c:427 ../src/et_core.c:637 ../src/et_core.c:649
+#: ../src/easytag.c:426 ../src/et_core.c:597 ../src/et_core.c:609
 #, c-format
 msgid "Error while querying information for file: '%s' (%s)"
 msgstr "Грешка приликом пропитивања података за датотеку: „%s“ (%s)"
 
-#: ../src/easytag.c:490
+#: ../src/easytag.c:489
 #, c-format
 msgid "Cannot open path '%s'"
 msgstr "Не могу да отворим путању „%s“"
@@ -1688,11 +1690,11 @@ msgstr "Не могу да отворим путању „%s“"
 #.
 #. * Browser
 #.
-#: ../src/easytag.c:582 ../src/prefs.c:142
+#: ../src/easytag.c:581 ../src/prefs.c:142
 msgid "Browser"
 msgstr "Прегледник"
 
-#: ../src/easytag.c:604 ../src/et_core.c:2857
+#: ../src/easytag.c:603 ../src/et_core.c:2817
 msgid "File"
 msgstr "Датотека"
 
@@ -1702,114 +1704,114 @@ msgstr "Датотека"
 #. gtk_label_set_text(GTK_LABEL(VersionValueLabel),"");
 #. Version changed to encoder version
 #. Encoder version
-#: ../src/easytag.c:636 ../src/easytag.c:4231 ../src/flac_header.c:201
+#: ../src/easytag.c:635 ../src/easytag.c:4231 ../src/flac_header.c:201
 #: ../src/monkeyaudio_header.c:96 ../src/musepack_header.c:98
 #: ../src/ogg_header.c:389 ../src/opus_header.c:221 ../src/wavpack_header.c:72
 #, c-format
 msgid "Encoder:"
 msgstr "Кодер:"
 
-#: ../src/easytag.c:644
+#: ../src/easytag.c:643
 msgid "Bitrate:"
 msgstr "Битски проток:"
 
 #. Translators: Please try to keep this string as short as possible as it
 #. * is shown in a narrow column.
-#: ../src/easytag.c:654
+#: ../src/easytag.c:653
 msgid "Frequency:"
 msgstr "Учесталост:"
 
 #. Mode
-#: ../src/easytag.c:665 ../src/easytag.c:4235 ../src/mpeg_header.c:216
+#: ../src/easytag.c:664 ../src/easytag.c:4235 ../src/mpeg_header.c:216
 msgid "Mode:"
 msgstr "Режим:"
 
-#: ../src/easytag.c:672
+#: ../src/easytag.c:671
 msgid "Size:"
 msgstr "Величина:"
 
-#: ../src/easytag.c:679
+#: ../src/easytag.c:678
 msgid "Duration:"
 msgstr "Трајање:"
 
 #. Main Frame
-#: ../src/easytag.c:726 ../src/et_core.c:2787
+#: ../src/easytag.c:725 ../src/et_core.c:2747
 msgid "Tag"
 msgstr "Ознака"
 
 #.
 #. * 1 - Page for common tag fields
 #.
-#: ../src/easytag.c:748
+#: ../src/easytag.c:747
 msgid "Common"
 msgstr "Опште"
 
 #. Title
-#: ../src/easytag.c:755
+#: ../src/easytag.c:754
 msgid "Title:"
 msgstr "Наслов:"
 
-#: ../src/easytag.c:769
+#: ../src/easytag.c:768
 msgid "Tag selected files with this title"
 msgstr "Означите изабране датотеке овим насловом"
 
 #. Artist
-#: ../src/easytag.c:774
+#: ../src/easytag.c:773
 msgid "Artist:"
 msgstr "Извођач:"
 
-#: ../src/easytag.c:788
+#: ../src/easytag.c:787
 msgid "Tag selected files with this artist"
 msgstr "Означите изабране датотеке овим извођачем"
 
 #. Album Artist
-#: ../src/easytag.c:793
+#: ../src/easytag.c:792
 msgid "Album artist:"
 msgstr "Извођач албума:"
 
-#: ../src/easytag.c:807
+#: ../src/easytag.c:806
 msgid "Tag selected files with this album artist"
 msgstr "Означите изабране датотеке овим извођачем албума"
 
 #. Album
-#: ../src/easytag.c:812
+#: ../src/easytag.c:811
 msgid "Album:"
 msgstr "Албум:"
 
-#: ../src/easytag.c:826
+#: ../src/easytag.c:825
 msgid "Tag selected files with this album name"
 msgstr "Означите изабране датотеке овим називом албума"
 
 #. Disc Number
-#: ../src/easytag.c:831
+#: ../src/easytag.c:830
 msgid "CD:"
 msgstr "ЦД:"
 
-#: ../src/easytag.c:848
+#: ../src/easytag.c:847
 msgid "Tag selected files with this disc number"
 msgstr "Означите изабране датотеке овим бројем диска"
 
 #. Year
-#: ../src/easytag.c:853
+#: ../src/easytag.c:852
 msgid "Year:"
 msgstr "Година:"
 
-#: ../src/easytag.c:873
+#: ../src/easytag.c:872
 msgid "Tag selected files with this year"
 msgstr "Означите изабране датотеке овом годином"
 
-#: ../src/easytag.c:887
+#: ../src/easytag.c:886
 msgid "Number selected tracks sequentially. Starts at 01 in each subdirectory."
 msgstr ""
 "Број доследно изабраних нумера. Почиње од 01 у сваком под-директоријуму."
 
 #. To have enough space to display the icon
 #. To have enough space to display the icon
-#: ../src/easytag.c:896
+#: ../src/easytag.c:895
 msgid "Track #:"
 msgstr "Нумера #:"
 
-#: ../src/easytag.c:927
+#: ../src/easytag.c:926
 msgid ""
 "Set the number of files, in the same directory of the displayed file, to the "
 "selected tracks."
@@ -1817,176 +1819,176 @@ msgstr ""
 "Унесите број датотека, у истом директоријуму приказане датотеке, до "
 "изабраних нумера."
 
-#: ../src/easytag.c:947
+#: ../src/easytag.c:946
 msgid "Tag selected files with this number of tracks"
 msgstr "Означите изабране датотеке овим бројем нумера"
 
 #. Genre
-#: ../src/easytag.c:951
+#: ../src/easytag.c:950
 msgid "Genre:"
 msgstr "Жанр:"
 
-#: ../src/easytag.c:979
+#: ../src/easytag.c:978
 msgid "Tag selected files with this genre"
 msgstr "Означите изабране датотеке овим жанром"
 
 #. Comment
-#: ../src/easytag.c:984
+#: ../src/easytag.c:983
 msgid "Comment:"
 msgstr "Коментар:"
 
-#: ../src/easytag.c:1011
+#: ../src/easytag.c:1010
 msgid "Tag selected files with this comment"
 msgstr "Означите изабране датотеке овом напоменом"
 
 #. Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(CommentView));
 #. Composer (name of the composers)
-#: ../src/easytag.c:1018
+#: ../src/easytag.c:1017
 msgid "Composer:"
 msgstr "Композитор:"
 
-#: ../src/easytag.c:1032
+#: ../src/easytag.c:1031
 msgid "Tag selected files with this composer"
 msgstr "Означите изабране датотеке овим композитором"
 
 #. Translators: Original Artist / Performer. Please try to keep this string
 #. * as short as possible, as it must fit into a narrow column.
-#: ../src/easytag.c:1039
+#: ../src/easytag.c:1038
 msgid "Orig. artist:"
 msgstr "Ориг. извођач:"
 
-#: ../src/easytag.c:1053
+#: ../src/easytag.c:1052
 msgid "Tag selected files with this original artist"
 msgstr "Означите изабране датотеке овим оригиналним извођачем"
 
 #. Copyright
-#: ../src/easytag.c:1059
+#: ../src/easytag.c:1058
 msgid "Copyright:"
 msgstr "Ауторско право:"
 
-#: ../src/easytag.c:1073
+#: ../src/easytag.c:1072
 msgid "Tag selected files with this copyright"
 msgstr "Означите изабране датотеке овим ауторским правом"
 
 #. URL
-#: ../src/easytag.c:1079
+#: ../src/easytag.c:1078
 msgid "URL:"
 msgstr "Адреса:"
 
-#: ../src/easytag.c:1093
+#: ../src/easytag.c:1092
 msgid "Tag selected files with this URL"
 msgstr "Означите изабране датотеке овом адресом"
 
 #. Encoded by
-#: ../src/easytag.c:1099
+#: ../src/easytag.c:1098
 msgid "Encoded by:"
 msgstr "Кодирано помоћу:"
 
-#: ../src/easytag.c:1113
+#: ../src/easytag.c:1112
 msgid "Tag selected files with this encoder name"
 msgstr "Означите изабране датотеке називом овог енкодера"
 
 #.
 #. * 2 - Page for extra tag fields
 #.
-#: ../src/easytag.c:1147 ../src/et_core.c:3229 ../src/et_core.c:3232
+#: ../src/easytag.c:1146 ../src/et_core.c:3189 ../src/et_core.c:3192
 msgid "Images"
 msgstr "Слике"
 
-#: ../src/easytag.c:1171
+#: ../src/easytag.c:1170
 msgid "You can use drag and drop to add an image"
 msgstr "Можете превући слике у ово прозорче да их додате"
 
-#: ../src/easytag.c:1218
+#: ../src/easytag.c:1217
 msgid "Add images to the tag"
 msgstr "Додајте слике у ознаке"
 
-#: ../src/easytag.c:1236
+#: ../src/easytag.c:1235
 msgid "Remove selected images from the tag"
 msgstr "Уклоните изабране слике из ознаке"
 
-#: ../src/easytag.c:1250
+#: ../src/easytag.c:1249
 msgid "Save the selected images to files"
 msgstr "Сачувајте изабране слике у датотеке"
 
-#: ../src/easytag.c:1261
+#: ../src/easytag.c:1260
 msgid "Edit image properties"
 msgstr "Уредите својства слике"
 
-#: ../src/easytag.c:1275
+#: ../src/easytag.c:1274
 msgid "Tag selected files with these images"
 msgstr "Означите изабране датотеке овим сликама"
 
-#: ../src/easytag.c:1333
+#: ../src/easytag.c:1332
 #, c-format
 msgid "Selected files tagged with title '%s'."
 msgstr "Изабране датотеке су означене насловом „%s“."
 
-#: ../src/easytag.c:1335
+#: ../src/easytag.c:1334
 msgid "Removed title from selected files."
 msgstr "Уклоњен је је наслов из изабраних датотека."
 
-#: ../src/easytag.c:1350
+#: ../src/easytag.c:1349
 #, c-format
 msgid "Selected files tagged with artist '%s'."
 msgstr "Изабране датотеке су означене извођачем „%s“."
 
-#: ../src/easytag.c:1352
+#: ../src/easytag.c:1351
 msgid "Removed artist from selected files."
 msgstr "Уклоњен је је извођач из изабраних датотека."
 
-#: ../src/easytag.c:1366
+#: ../src/easytag.c:1365
 #, c-format
 msgid "Selected files tagged with album artist '%s'."
 msgstr "Изабране датотеке су означене извођачем албума „%s“."
 
-#: ../src/easytag.c:1368
+#: ../src/easytag.c:1367
 msgid "Removed album artist from selected files."
 msgstr "Уклоњен је је извођач албума из изабраних датотека."
 
-#: ../src/easytag.c:1383
+#: ../src/easytag.c:1382
 #, c-format
 msgid "Selected files tagged with album '%s'."
 msgstr "Изабране датотеке су означене албумом „%s“."
 
-#: ../src/easytag.c:1385
+#: ../src/easytag.c:1384
 msgid "Removed album name from selected files."
 msgstr "Уклоњен је је назив албума из изабраних датотека."
 
-#: ../src/easytag.c:1422
+#: ../src/easytag.c:1421
 #, c-format
 msgid "Selected files tagged with disc number '%s/%s'."
 msgstr "Изабране датотеке су означене бројем диска „%s/%s“."
 
-#: ../src/easytag.c:1427
+#: ../src/easytag.c:1426
 #, c-format
 msgid "Selected files tagged with disc number like 'xx'."
 msgstr "Изабране датотеке су означене бројем диска као „хх“."
 
-#: ../src/easytag.c:1432
+#: ../src/easytag.c:1431
 msgid "Removed disc number from selected files."
 msgstr "Уклоњен је број диска из изабраних датотека."
 
-#: ../src/easytag.c:1448
+#: ../src/easytag.c:1447
 #, c-format
 msgid "Selected files tagged with year '%s'."
 msgstr "Изабране датотеке су означене годином „%s“."
 
-#: ../src/easytag.c:1450
+#: ../src/easytag.c:1449
 msgid "Removed year from selected files."
 msgstr "Уклоњена је година из изабраних датотека."
 
-#: ../src/easytag.c:1476 ../src/easytag.c:1566
+#: ../src/easytag.c:1475 ../src/easytag.c:1566
 #, c-format
 msgid "Selected files tagged with track like 'xx/%s'."
 msgstr "Изабране датотеке су означене нумером типа „xx/%s“."
 
-#: ../src/easytag.c:1479
+#: ../src/easytag.c:1478
 #, c-format
 msgid "Selected files tagged with track like 'xx'."
 msgstr "Изабране датотеке су означене нумером типа „xx“."
 
-#: ../src/easytag.c:1483 ../src/easytag.c:1569
+#: ../src/easytag.c:1482 ../src/easytag.c:1569
 msgid "Removed track number from selected files."
 msgstr "Уклоњен је број нумере из изабраних датотека."
 
@@ -2127,7 +2129,7 @@ msgid "Repeat action for the remaining files"
 msgstr "Понови радњу за преостале датотеке"
 
 #. Directories and filename changed
-#: ../src/easytag.c:2873 ../src/scan_dialog.c:183
+#: ../src/easytag.c:2873 ../src/scan.c:181
 msgid "Rename File and Directory"
 msgstr "Преименуј датотеку и директоријум"
 
@@ -2229,7 +2231,7 @@ msgstr "Грешка читања директоријума"
 msgid "Search in progress…"
 msgstr "Претрага је у току…"
 
-#: ../src/easytag.c:3393 ../src/et_core.c:2864
+#: ../src/easytag.c:3393 ../src/et_core.c:2824
 #, c-format
 msgid "File: '%s'"
 msgstr "Датотека: „%s“"
@@ -2284,160 +2286,162 @@ msgid "Select a directory to browse"
 msgstr "Изаберите директоријум за разгледање"
 
 #. Menu items
-#: ../src/easytag.c:4411
+#: ../src/easytag.c:4412
 msgid "Tag selected files with this field"
 msgstr "Означи изабране датотеке овим пољем"
 
-#: ../src/easytag.c:4423 ../src/scan_dialog.c:2128
+#: ../src/easytag.c:4424 ../src/scan.c:2654
 msgid "Convert '_' and '%20' to spaces"
 msgstr "Преведи „_“ и „%20“ у размак"
 
-#: ../src/easytag.c:4430 ../src/scan_dialog.c:2130
+#: ../src/easytag.c:4431 ../src/scan.c:2656
 msgid "Convert ' ' to '_'"
 msgstr "Преведи „ “ у „_“"
 
-#: ../src/easytag.c:4441
+#: ../src/easytag.c:4442
 msgid "All uppercase"
 msgstr "Сва слова велика"
 
-#: ../src/easytag.c:4448
+#: ../src/easytag.c:4449
 msgid "All lowercase"
 msgstr "Сва слова мала"
 
-#: ../src/easytag.c:4455
+#: ../src/easytag.c:4456
 msgid "First letter uppercase"
 msgstr "Прво слово велико"
 
-#: ../src/easytag.c:4462
+#: ../src/easytag.c:4463
 msgid "First letter uppercase of each word"
 msgstr "Прво слово сваке речи велико"
 
-#: ../src/easytag.c:4473 ../src/prefs.c:1023 ../src/scan_dialog.c:2228
+#: ../src/easytag.c:4474 ../src/prefs.c:1023 ../src/scan.c:2754
 msgid "Remove spaces"
 msgstr "Уклони размаке"
 
-#: ../src/easytag.c:4480
+#: ../src/easytag.c:4481
 msgid "Insert space before uppercase letter"
 msgstr "Убаци размак пре великог слова"
 
-#: ../src/easytag.c:4487
+#: ../src/easytag.c:4488
 msgid "Remove duplicate spaces or underscores"
 msgstr "Уклони дупле размаке или доње цртице"
 
-#: ../src/easytag.c:4494
+#: ../src/easytag.c:4495
 msgid "Remove all text"
 msgstr "Уклони сав текст"
 
-#: ../src/easytag.c:4513
+#: ../src/easytag.c:4514
 msgid "EasyTAG: Normal exit."
 msgstr "Лака ознака: Нормалан излаз."
 
-#: ../src/easytag.c:4565
+#: ../src/easytag.c:4566
 msgid "Do you want to save them before quitting?"
 msgstr "Да ли желите да их сачувате пре затварања?"
 
-#: ../src/easytag.c:4592
+#: ../src/easytag.c:4593
 msgid "Do you really want to quit?"
 msgstr "Да ли заиста желите да изађете из програма?"
 
-#: ../src/et_core.c:550
+#: ../src/et_core.c:510
 #, c-format
 msgid "Error reading tag from ogg file (%s)"
 msgstr "Грешка читања ознаке из огг датотеке (%s)"
 
-#: ../src/et_core.c:579
+#: ../src/et_core.c:539
 #, c-format
+#| msgid "Error reading tag from ogg file (%s)"
 msgid "Error reading tag from Opus file (%s)"
 msgstr "Грешка читања ознаке из Опус датотеке (%s)"
 
-#: ../src/et_core.c:722
+#: ../src/et_core.c:682
 #, c-format
 msgid "Automatic corrections applied for file '%s'."
 msgstr "Самостално исправљање је примењено над датотеком „%s“."
 
-#: ../src/et_core.c:2747
+#: ../src/et_core.c:2707
 msgid "ID3 Tag"
 msgstr "ИД3 ознака"
 
-#: ../src/et_core.c:2753
+#: ../src/et_core.c:2713
 msgid "Ogg Vorbis Tag"
 msgstr "Огг Ворбис ознака"
 
-#: ../src/et_core.c:2759
+#: ../src/et_core.c:2719
 msgid "FLAC Vorbis Tag"
 msgstr "ФЛАЦ Ворбис ознака"
 
-#: ../src/et_core.c:2764
+#: ../src/et_core.c:2724
 msgid "APE Tag"
 msgstr "АПЕ ознака"
 
-#: ../src/et_core.c:2769
+#: ../src/et_core.c:2729
 msgid "MP4/M4A/AAC Tag"
 msgstr "МП4/М4А/ААЦ ознака"
 
-#: ../src/et_core.c:2775
+#: ../src/et_core.c:2735
 msgid "Wavpack Tag"
 msgstr "Вејвпак ознака"
 
-#: ../src/et_core.c:2781
+#: ../src/et_core.c:2741
 msgid "Opus Tag"
 msgstr "Опус ознака"
 
-#: ../src/et_core.c:2801
+#: ../src/et_core.c:2761
 msgid "MP3 File"
 msgstr "МП3 датотека"
 
-#: ../src/et_core.c:2805
+#: ../src/et_core.c:2765
 msgid "MP2 File"
 msgstr "МП2 датотека"
 
-#: ../src/et_core.c:2811
+#: ../src/et_core.c:2771
 msgid "Ogg Vorbis File"
 msgstr "Огг Ворбис датотека"
 
-#: ../src/et_core.c:2817
+#: ../src/et_core.c:2777
 msgid "Speex File"
 msgstr "Спикс датотека"
 
-#: ../src/et_core.c:2823
+#: ../src/et_core.c:2783
 msgid "FLAC File"
 msgstr "ФЛАЦ датотека"
 
-#: ../src/et_core.c:2828
+#: ../src/et_core.c:2788
 msgid "MusePack File"
 msgstr "МјузПак датотека"
 
-#: ../src/et_core.c:2832
+#: ../src/et_core.c:2792
 msgid "Monkey's Audio File"
 msgstr "Монки аудио датотека"
 
-#: ../src/et_core.c:2837
+#: ../src/et_core.c:2797
 msgid "MP4/AAC File"
 msgstr "МП4/ААЦ датотека"
 
-#: ../src/et_core.c:2843
+#: ../src/et_core.c:2803
 msgid "Wavpack File"
 msgstr "Вејвпак датотека"
 
-#: ../src/et_core.c:2849
+#: ../src/et_core.c:2809
+#| msgid "MusePack File"
 msgid "Opus File"
 msgstr "Опус датотека"
 
-#: ../src/et_core.c:2908 ../src/et_core.c:2963
+#: ../src/et_core.c:2868 ../src/et_core.c:2923
 msgid "File not found"
 msgstr "Нисам нашао датотеку"
 
-#: ../src/et_core.c:2913
+#: ../src/et_core.c:2873
 #, c-format
 msgid "Cannot query file information (%s)"
 msgstr "Не могу да пропитам податке датотеке (%s)"
 
-#: ../src/et_core.c:2947
+#: ../src/et_core.c:2907
 msgid "Read-only file"
 msgstr "Датотека само за читање"
 
 #. And refresh the number of files in this directory
-#: ../src/et_core.c:3011
+#: ../src/et_core.c:2971
 #, c-format
 msgid "One file"
 msgid_plural "%u files"
@@ -2446,14 +2450,14 @@ msgstr[1] "%u датотеке"
 msgstr[2] "%u датотека"
 msgstr[3] "Једна датотека"
 
-#: ../src/et_core.c:3215
+#: ../src/et_core.c:3175
 #, c-format
 msgid "Images (%d)"
 msgstr "Слике (%d)"
 
 #. Bitrate
-#: ../src/et_core.c:3257 ../src/flac_header.c:205
-#: ../src/monkeyaudio_header.c:86 ../src/mp4_header.cc:142
+#: ../src/et_core.c:3217 ../src/flac_header.c:205
+#: ../src/monkeyaudio_header.c:86 ../src/mp4_header.c:134
 #: ../src/mpeg_header.c:206 ../src/musepack_header.c:88
 #: ../src/ogg_header.c:401 ../src/opus_header.c:227 ../src/wavpack_header.c:78
 #, c-format
@@ -2461,29 +2465,29 @@ msgid "%d kb/s"
 msgstr "%d kb/s"
 
 #. Samplerate
-#: ../src/et_core.c:3262 ../src/flac_header.c:210
-#: ../src/monkeyaudio_header.c:91 ../src/mp4_header.cc:147
+#: ../src/et_core.c:3222 ../src/flac_header.c:210
+#: ../src/monkeyaudio_header.c:91 ../src/mp4_header.c:139
 #: ../src/mpeg_header.c:211 ../src/musepack_header.c:93
 #: ../src/ogg_header.c:406 ../src/opus_header.c:232 ../src/wavpack_header.c:83
 #, c-format
 msgid "%d Hz"
 msgstr "%d Hz"
 
-#: ../src/et_core.c:3408 ../src/scan_dialog.c:688
+#: ../src/et_core.c:3368 ../src/scan.c:690
 #, c-format
 msgid "Could not convert filename '%s' into system filename encoding"
 msgstr ""
 "Не могу да претворим назив датотеке „%s“ у кодирање назива датотеке система"
 
-#: ../src/et_core.c:3410
+#: ../src/et_core.c:3370
 msgid "Try setting the environment variable G_FILENAME_ENCODING."
 msgstr "Покушавам да поставим променљиву окружења Г_КОДИРАЊЕ_НАЗИВАДАТОТЕКЕ."
 
-#: ../src/et_core.c:3411 ../src/scan_dialog.c:690
+#: ../src/et_core.c:3371 ../src/scan.c:692
 msgid "Filename translation"
 msgstr "Превод назива датотеке"
 
-#: ../src/et_core.c:4116
+#: ../src/et_core.c:4076
 #, c-format
 msgid "Error writing tag type %d to file %s (%s)"
 msgstr "Грешка писања врсте ознаке %d у датотеку %s (%s)"
@@ -2492,7 +2496,7 @@ msgstr "Грешка писања врсте ознаке %d у датотеку
 #. Mode
 #. mpeg4ip library seems to always return -1
 #. Mode
-#: ../src/flac_header.c:215 ../src/mp4_header.cc:153 ../src/ogg_header.c:411
+#: ../src/flac_header.c:215 ../src/mp4_header.c:145 ../src/ogg_header.c:411
 #: ../src/opus_header.c:237 ../src/wavpack_header.c:88
 msgid "Channels:"
 msgstr "Канала:"
@@ -2526,12 +2530,12 @@ msgstr "Грешка: Нисам успео да упишем напомене 
 msgid "Written tag of '%s'"
 msgstr "Уписана је ознака у „%s“"
 
-#: ../src/id3_tag.c:205
+#: ../src/id3_tag.c:158
 #, c-format
 msgid "Error while reading file: '%s' (%s)"
 msgstr "Грешка приликом читања датотеке: „%s“ (%s)"
 
-#: ../src/id3_tag.c:217
+#: ../src/id3_tag.c:170
 #, c-format
 msgid ""
 "As the following corrupted file '%s' will cause an error in id3lib, it will "
@@ -2540,31 +2544,31 @@ msgstr ""
 "Следећа оштећена датотека „%s“ неће бити обрађена, зато што ће проузроковати "
 "грешку у ид3библ"
 
-#: ../src/id3_tag.c:219
+#: ../src/id3_tag.c:172
 msgid "Corrupted file"
 msgstr "Оштећена датотека"
 
-#: ../src/id3_tag.c:592
+#: ../src/id3_tag.c:555
 #, c-format
 msgid "Removed tag of '%s'"
 msgstr "Уклоњена је ознака из „%s“"
 
-#: ../src/id3_tag.c:596 ../src/id3_tag.c:696
+#: ../src/id3_tag.c:559 ../src/id3_tag.c:659
 #, c-format
 msgid "Error while removing ID3v1 tag of '%s' (%s)"
 msgstr "Грешка при уклањању ИД3в1 ознаке из „%s“ (%s)"
 
-#: ../src/id3_tag.c:598 ../src/id3_tag.c:668
+#: ../src/id3_tag.c:561 ../src/id3_tag.c:631
 #, c-format
 msgid "Error while removing ID3v2 tag of '%s' (%s)"
 msgstr "Грешка при уклањању ИД3в2 ознаке из „%s“ (%s)"
 
-#: ../src/id3_tag.c:617
+#: ../src/id3_tag.c:580
 #, c-format
 msgid "Error while updating ID3v2 tag of '%s' (%s)"
 msgstr "Грешка при ажурирању ИД3в2 ознаке у „%s“ (%s)"
 
-#: ../src/id3_tag.c:645
+#: ../src/id3_tag.c:608
 msgid ""
 "You have tried to save this tag to Unicode but it was detected that your "
 "version of id3lib is buggy"
@@ -2572,7 +2576,7 @@ msgstr ""
 "Покушали сте да сачувате ову ознаку у Уникоду али је откривено да ваше "
 "издање ид3библ има грашака"
 
-#: ../src/id3_tag.c:647
+#: ../src/id3_tag.c:610
 #, c-format
 msgid ""
 "If you reload this file, some characters in the tag may not be displayed "
@@ -2591,90 +2595,90 @@ msgstr ""
 "\n"
 "Датотека: %s"
 
-#: ../src/id3_tag.c:654
+#: ../src/id3_tag.c:617
 msgid "Buggy id3lib"
 msgstr "Лоша ид3библ"
 
-#: ../src/id3_tag.c:688
+#: ../src/id3_tag.c:651
 #, c-format
 msgid "Error while updating ID3v1 tag of '%s' (%s)"
 msgstr "Грешка при промени ИД3в1 ознаке у „%s“ (%s)"
 
-#: ../src/id3_tag.c:702 ../src/id3v24_tag.c:1042
+#: ../src/id3_tag.c:665 ../src/id3v24_tag.c:1048
 #, c-format
 msgid "Updated tag of '%s'"
 msgstr "Ознака у „%s“ је ажурирана"
 
-#: ../src/id3_tag.c:721
+#: ../src/id3_tag.c:684
 msgid "No error reported"
 msgstr "Нису пријављене грешке"
 
-#: ../src/id3_tag.c:723
+#: ../src/id3_tag.c:686
 msgid "No available memory"
 msgstr "Нема доступне меморије"
 
-#: ../src/id3_tag.c:725
+#: ../src/id3_tag.c:688
 msgid "No data to parse"
 msgstr "Нема података за обраду"
 
-#: ../src/id3_tag.c:727
+#: ../src/id3_tag.c:690
 msgid "Improperly formatted data"
 msgstr "Неисправно обликовани подаци"
 
-#: ../src/id3_tag.c:729
+#: ../src/id3_tag.c:692
 msgid "No buffer to write to"
 msgstr "Нема међумеморије за упис"
 
-#: ../src/id3_tag.c:731
+#: ../src/id3_tag.c:694
 msgid "Buffer is too small"
 msgstr "Међумеморија је сувише мала"
 
-#: ../src/id3_tag.c:733
+#: ../src/id3_tag.c:696
 msgid "Invalid frame ID"
 msgstr "Неисправан ИД оквира"
 
-#: ../src/id3_tag.c:735
+#: ../src/id3_tag.c:698
 msgid "Requested field not found"
 msgstr "Затражено поље није нађено"
 
-#: ../src/id3_tag.c:737
+#: ../src/id3_tag.c:700
 msgid "Unknown field type"
 msgstr "Непозната врста поља"
 
-#: ../src/id3_tag.c:739
+#: ../src/id3_tag.c:702
 msgid "Tag is already attached to a file"
 msgstr "Ознака је већ прикачена датотеци"
 
-#: ../src/id3_tag.c:741
+#: ../src/id3_tag.c:704
 msgid "Invalid tag version"
 msgstr "Неисправно издање ознаке"
 
-#: ../src/id3_tag.c:743
+#: ../src/id3_tag.c:706
 msgid "No file to parse"
 msgstr "Нема датотеке за обраду"
 
-#: ../src/id3_tag.c:745
+#: ../src/id3_tag.c:708
 msgid "Attempting to write to a read-only file"
 msgstr "Покушавам да упишем у датотеку само за читање"
 
-#: ../src/id3_tag.c:747
+#: ../src/id3_tag.c:710
 msgid "Error in compression/uncompression"
 msgstr "Грешка при сажимању/распакивању"
 
-#: ../src/id3_tag.c:749
+#: ../src/id3_tag.c:712
 msgid "Unknown error message"
 msgstr "Непозната порука о грешци"
 
-#: ../src/id3_tag.c:1353
+#: ../src/id3_tag.c:1316
 #, c-format
 msgid "Error while creating temporary file: '%s'"
 msgstr "Грешка приликом стварања привремене датотеке: „%s“"
 
-#: ../src/id3_tag.c:1360
+#: ../src/id3_tag.c:1323
 msgid "Error while creating temporary file"
 msgstr "Грешка приликом стварања привремене датотеке"
 
-#: ../src/id3_tag.c:1380
+#: ../src/id3_tag.c:1343
 #, c-format
 msgid "Error while writing to file: '%s' (%s)"
 msgstr "Грешка приликом писања у датотеку: „%s“ (%s)"
@@ -2684,7 +2688,7 @@ msgstr "Грешка приликом писања у датотеку: „%s“
 #. * missing (not read for some reason) while reading from
 #. * the file.
 #.
-#: ../src/id3v24_tag.c:1497
+#: ../src/id3v24_tag.c:1503
 #, c-format
 msgid "Cannot write tag of file ‘%s’ (a byte was missing)"
 msgid_plural "Cannot write tag of file ‘%s’ (%s bytes were missing)"
@@ -2693,12 +2697,12 @@ msgstr[1] "Не могу да упишем ознаку у датотеку „%
 msgstr[2] "Не могу да упишем ознаку у датотеку „%s“ (%s бајтова недостаје)"
 msgstr[3] "Не могу да упишем ознаку у датотеку „%s“ (%s)"
 
-#: ../src/id3v24_tag.c:1518
+#: ../src/id3v24_tag.c:1524
 #, c-format
 msgid "Cannot save tag of file '%s'"
 msgstr "Не могу да сачувам ознаку датотеке „%s“"
 
-#: ../src/id3v24_tag.c:1529
+#: ../src/id3v24_tag.c:1535
 #, c-format
 msgid "Size error while saving tag of '%s'"
 msgstr "Грешка величине при чувању ознаке за „%s“"
@@ -2707,54 +2711,54 @@ msgstr "Грешка величине при чувању ознаке за „%
 msgid "Log"
 msgstr "Дневник измена"
 
-#: ../src/misc.c:720
+#: ../src/misc.c:719
 msgid "You must type a program name"
 msgstr "Морате да унесете назив програма"
 
-#: ../src/misc.c:721
+#: ../src/misc.c:720
 msgid "Program Name Error"
 msgstr "Грешка назива програма"
 
-#: ../src/misc.c:800
+#: ../src/misc.c:799
 #, c-format
 msgid "Executed command: %s"
 msgstr "Извршена наредба: „%s“"
 
-#: ../src/misc.c:807
+#: ../src/misc.c:806
 #, c-format
 msgid "Failed to launch program: %s"
 msgstr "Нисам успео да покренем програм: %s"
 
-#: ../src/misc.c:824
+#: ../src/misc.c:823
 msgid "Select File"
 msgstr "Изаберите датотеку"
 
-#: ../src/misc.c:830
+#: ../src/misc.c:829
 msgid "Select Directory"
 msgstr "Изаберите директоријум"
 
-#: ../src/misc.c:1142
+#: ../src/misc.c:1141
 msgid "Generate Playlist"
 msgstr "Начини списак нумера"
 
-#: ../src/misc.c:1166
+#: ../src/misc.c:1165
 msgid "M3U Playlist Name"
 msgstr "Назив М3У списка нумера"
 
-#: ../src/misc.c:1181
+#: ../src/misc.c:1180
 msgid "Use directory name"
 msgstr "Користи назив директоријума"
 
 #. Playlist options
-#: ../src/misc.c:1198
+#: ../src/misc.c:1197
 msgid "Playlist Options"
 msgstr "Опције списка нумера"
 
-#: ../src/misc.c:1204
+#: ../src/misc.c:1203
 msgid "Include only the selected files"
 msgstr "Укључи само изабране датотеке"
 
-#: ../src/misc.c:1207
+#: ../src/misc.c:1206
 msgid ""
 "If activated, only the selected files will be written in the playlist file. "
 "Else, all the files will be written."
@@ -2762,80 +2766,80 @@ msgstr ""
 "Уколико је активирано, само изабране датотеке ће бити уписане у списак "
 "нумера. У супротном, све датотеке ће бити уписане."
 
-#: ../src/misc.c:1210
+#: ../src/misc.c:1209
 msgid "Use full path for files in playlist"
 msgstr "Користи пуне путање за датотеке у списку нумера"
 
-#: ../src/misc.c:1213
+#: ../src/misc.c:1212
 msgid "Use relative path for files in playlist"
 msgstr "Користи релативне путање за датотеке у списку нумера"
 
 #. Create playlist in parent directory
-#: ../src/misc.c:1219
+#: ../src/misc.c:1218
 msgid "Create playlist in the parent directory"
 msgstr "Начини списак нумера у родитељском директоријуму"
 
-#: ../src/misc.c:1222
+#: ../src/misc.c:1221
 msgid "If activated, the playlist will be created in the parent directory."
 msgstr ""
 "Уколико је активирано, списак нумера ће бити начињен у родитељском "
 "директоријуму."
 
 #. DOS Separator
-#: ../src/misc.c:1226
+#: ../src/misc.c:1225
 msgid "Use DOS directory separator"
 msgstr "Користи ДОС-ов раздвајач датотека"
 
-#: ../src/misc.c:1232
+#: ../src/misc.c:1231
 msgid ""
 "This option replaces the UNIX directory separator '/' into DOS separator "
 "'\\'."
 msgstr ""
 "Ова опција мења УНИКС-ов раздвајач датотека „/“ у ДОС-ов раздвајач „\\“."
 
-#: ../src/misc.c:1241
+#: ../src/misc.c:1240
 msgid "Playlist Content"
 msgstr "Садржај списка нумера"
 
-#: ../src/misc.c:1247
+#: ../src/misc.c:1246
 msgid "Write only list of files"
 msgstr "Упиши само списак датотека"
 
-#: ../src/misc.c:1251
+#: ../src/misc.c:1250
 msgid "Write info using filename"
 msgstr "Упиши информације користећи назив датотеке"
 
-#: ../src/misc.c:1254
+#: ../src/misc.c:1253
 msgid "Write info using:"
 msgstr "Упиши информације користећи:"
 
-#: ../src/misc.c:1468
+#: ../src/misc.c:1467
 #, c-format
 msgid "Cannot write playlist file '%s'"
 msgstr "Не могу да запишем датотеку списка нумера „%s“"
 
-#: ../src/misc.c:1472
+#: ../src/misc.c:1471
 msgid "Playlist File Error"
 msgstr "Грешка датотеке списка нумера"
 
-#: ../src/misc.c:1480
+#: ../src/misc.c:1479
 #, c-format
 msgid "Written playlist file '%s'"
 msgstr "Датотека списка нумера „%s“ је записана"
 
-#: ../src/misc.c:1544 ../src/scan_dialog.c:2713 ../src/scan_dialog.c:2775
+#: ../src/misc.c:1543 ../src/scan.c:3239 ../src/scan.c:3301
 msgid "Invalid scanner mask"
 msgstr "Неисправна маска прегледача"
 
-#: ../src/misc.c:1908
+#: ../src/misc.c:1907
 msgid "CD"
 msgstr "ЦД"
 
-#: ../src/misc.c:1930
+#: ../src/misc.c:1929
 msgid "Find Files"
 msgstr "Пронађите датотеке"
 
-#: ../src/misc.c:1962
+#: ../src/misc.c:1961
 msgid ""
 "Type the word to search into files. Or type nothing to display all files."
 msgstr ""
@@ -2843,13 +2847,13 @@ msgstr ""
 "све датотеке."
 
 #. Where...
-#: ../src/misc.c:1968
+#: ../src/misc.c:1967
 msgid "In:"
 msgstr "У:"
 
 #. Translators: This option is for the previous 'in' option. For instance,
 #. * translate this as "Search" "In:" "the Filename".
-#: ../src/misc.c:1973
+#: ../src/misc.c:1972
 msgid "the Filename"
 msgstr "називу датотеке"
 
@@ -2858,20 +2862,20 @@ msgstr "називу датотеке"
 #. * Note: label changed to "the Tag" (to be the only one) to fix a Hungarian
 #. * grammatical problem (which uses one word to say "in the tag" like here)
 #.
-#: ../src/misc.c:1979
+#: ../src/misc.c:1978
 msgid "the Tag"
 msgstr "ознаци"
 
 #. Property of the search
-#: ../src/misc.c:1990 ../src/prefs.c:335
+#: ../src/misc.c:1989 ../src/prefs.c:335
 msgid "Case sensitive"
 msgstr "Разликуј величину слова"
 
-#: ../src/misc.c:2217
+#: ../src/misc.c:2216
 msgid "Ready to search…"
 msgstr "Спреман сам за претрагу…"
 
-#: ../src/misc.c:2437
+#: ../src/misc.c:2436
 #, c-format
 msgid "Found one file"
 msgid_plural "Found %d files"
@@ -2880,63 +2884,63 @@ msgstr[1] "Пронашао сам %d датотеке"
 msgstr[2] "Пронашао сам %d датотека"
 msgstr[3] "Пронашао сам: %d датотеку/е/а"
 
-#: ../src/misc.c:2722
+#: ../src/misc.c:2721
 msgid "Load Filenames From a Text File"
 msgstr "Учитај називе датотека из текстуалне датотеке"
 
-#: ../src/misc.c:2751
+#: ../src/misc.c:2750
 msgid "File:"
 msgstr "Датотека:"
 
 #. Button 'load'
 #. the signal attached to this button, to load the file, is placed after the LoadFileContentList definition
-#: ../src/misc.c:2770
+#: ../src/misc.c:2769
 msgid " Load "
 msgstr " Учитај "
 
-#: ../src/misc.c:2788
+#: ../src/misc.c:2787
 msgid "Content of Text File"
 msgstr "Садржај текстуалне датотеке"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2809 ../src/misc.c:2904
+#: ../src/misc.c:2808 ../src/misc.c:2903
 msgid "Insert a blank line before the selected line"
 msgstr "Уметни празан ред пре изабраног"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2818 ../src/misc.c:2913
+#: ../src/misc.c:2817 ../src/misc.c:2912
 msgid "Delete the selected line"
 msgstr "Обриши изабрани ред"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2827 ../src/misc.c:2922 ../src/misc.c:3408
+#: ../src/misc.c:2826 ../src/misc.c:2921 ../src/misc.c:3407
 msgid "Delete all blank lines"
 msgstr "Обриши све пране редове"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2839 ../src/misc.c:2934
+#: ../src/misc.c:2838 ../src/misc.c:2933
 msgid "Move up the selected line"
 msgstr "Помери горе изабрани ред"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2848 ../src/misc.c:2943
+#: ../src/misc.c:2847 ../src/misc.c:2942
 msgid "Move down the selected line"
 msgstr "Помери доле изабрани ред"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2860 ../src/misc.c:2955 ../src/misc.c:3432
+#: ../src/misc.c:2859 ../src/misc.c:2954 ../src/misc.c:3431
 msgid "Reload"
 msgstr "Освежи"
 
-#: ../src/misc.c:2882
+#: ../src/misc.c:2881
 msgid "List of Files"
 msgstr "Списак датотека"
 
-#: ../src/misc.c:2977
+#: ../src/misc.c:2976
 msgid "Selected line:"
 msgstr "Изабрани ред:"
 
-#: ../src/misc.c:2995
+#: ../src/misc.c:2994
 msgid ""
 "When activating this option, after loading the filenames, the current "
 "selected scanner will be ran (the scanner window must be opened)."
@@ -2944,34 +2948,34 @@ msgstr ""
 "Покретањем ове опције, након учитавања назива датотека, тренутно изабрани "
 "прегледач ће бити покренут (прозор прегледача мора бити отворен)."
 
-#: ../src/misc.c:3082
+#: ../src/misc.c:3081
 #, c-format
 msgid "Cannot retrieve file info (%s)"
 msgstr "Не могу да преузмем податке о датотеци (%s)"
 
-#: ../src/misc.c:3144
+#: ../src/misc.c:3143
 #, c-format
 msgid "Can't open file '%s' (%s)"
 msgstr "Не могу да отворим датотеку „%s“ (%s)"
 
-#: ../src/misc.c:3180
+#: ../src/misc.c:3179
 #, c-format
 msgid "Error reading file (%s)"
 msgstr "Грешка читања датотеке (%s)"
 
-#: ../src/misc.c:3396
+#: ../src/misc.c:3395
 msgid "Insert a blank line"
 msgstr "Уметните празан ред"
 
-#: ../src/misc.c:3402
+#: ../src/misc.c:3401
 msgid "Delete this line"
 msgstr "Обришите овај ред"
 
-#: ../src/misc.c:3417
+#: ../src/misc.c:3416
 msgid "Move up this line"
 msgstr "Померите на горе овај ред"
 
-#: ../src/misc.c:3423
+#: ../src/misc.c:3422
 msgid "Move down this line"
 msgstr "Померите на доле овај ред"
 
@@ -2981,26 +2985,26 @@ msgstr "Померите на доле овај ред"
 msgid "Profile:"
 msgstr "Профил:"
 
-#: ../src/mp4_header.cc:60 ../src/mp4_tag.cc:91 ../src/mp4_tag.cc:284
+#: ../src/mp4_header.c:63 ../src/mp4_tag.c:65 ../src/mp4_tag.c:186
 msgid "MP4 format invalid"
 msgstr "МП4 запис је неисправан"
 
-#: ../src/mp4_header.cc:68
+#: ../src/mp4_header.c:72 ../src/mp4_tag.c:74
 #, c-format
 msgid "File contains no audio track: '%s'"
 msgstr "Датотека не садржи звучну нумеру: „%s“"
 
-#: ../src/mp4_header.cc:79
+#: ../src/mp4_header.c:82
 #, c-format
 msgid "Error reading properties from file: '%s'"
 msgstr "Грешка читања својстава из датотеке: „%s“"
 
-#: ../src/mp4_header.cc:140 ../src/mpeg_header.c:204
+#: ../src/mp4_header.c:132 ../src/mpeg_header.c:204
 #, c-format
 msgid "~%d kb/s"
 msgstr "~%d kb/s"
 
-#: ../src/mp4_tag.cc:101 ../src/mp4_tag.cc:293
+#: ../src/mp4_tag.c:85 ../src/mp4_tag.c:194
 #, c-format
 msgid "Error reading tags from file: '%s'"
 msgstr "Грешка читања ознака из датотеке: „%s“"
@@ -3080,12 +3084,12 @@ msgstr "Грешка: Нисам успео да отворим датотеку
 msgid "Warning: The Ogg Vorbis file '%s' contains an ID3v2 tag."
 msgstr "Упозорење: Огг Ворбис датотека „%s“ садржи ИД3в2 ознаку."
 
-#: ../src/ogg_tag.c:1035 ../src/picture.c:1258
+#: ../src/ogg_tag.c:1035 ../src/picture.c:1257
 #, c-format
 msgid "Error with 'loader_write': %s"
 msgstr "Грешка са „учитавач_запиши“: %s"
 
-#: ../src/ogg_tag.c:1050 ../src/picture.c:1181
+#: ../src/ogg_tag.c:1050 ../src/picture.c:1180
 #, c-format
 msgid "Error with 'loader_close': %s"
 msgstr "Грешка са „учитавач_затвори“: %s"
@@ -3117,11 +3121,11 @@ msgstr "Датотека слике је учитана"
 msgid "Add Images"
 msgstr "Додај слике"
 
-#: ../src/picture.c:514 ../src/picture.c:875
+#: ../src/picture.c:514 ../src/picture.c:874
 msgid "All Files"
 msgstr "Све датотеке"
 
-#: ../src/picture.c:520 ../src/picture.c:881
+#: ../src/picture.c:520 ../src/picture.c:880
 msgid "PNG and JPEG"
 msgstr "ПНГ и ЈПЕГ"
 
@@ -3130,129 +3134,129 @@ msgstr "ПНГ и ЈПЕГ"
 msgid "Image Properties %d/%d"
 msgstr "Својства слике %d/%d"
 
-#: ../src/picture.c:677
+#: ../src/picture.c:675
 msgid "Image Type"
 msgstr "Врста слике"
 
 #. Description of the picture
-#: ../src/picture.c:735
+#: ../src/picture.c:734
 msgid "Image Description:"
 msgstr "Опис слике:"
 
-#: ../src/picture.c:862
+#: ../src/picture.c:861
 #, c-format
 msgid "Save Image %d/%d"
 msgstr "Сачувај слику %d/%d"
 
-#: ../src/picture.c:1022
+#: ../src/picture.c:1021
 msgid "JPEG image"
 msgstr "ЈПЕГ слика"
 
-#: ../src/picture.c:1024
+#: ../src/picture.c:1023
 msgid "PNG image"
 msgstr "ПНГ слика"
 
-#: ../src/picture.c:1026
+#: ../src/picture.c:1025
 msgid "GIF image"
 msgstr "ГИФ слика"
 
-#: ../src/picture.c:1028
+#: ../src/picture.c:1027
 msgid "Unknown image"
 msgstr "Непозната слика"
 
-#: ../src/picture.c:1040
+#: ../src/picture.c:1039
 msgid "32x32 pixel PNG file icon"
 msgstr "ПНГ иконица, 32x32 тачкица"
 
-#: ../src/picture.c:1042
+#: ../src/picture.c:1041
 msgid "Other file icon"
 msgstr "Остале иконице датотеке"
 
-#: ../src/picture.c:1044
+#: ../src/picture.c:1043
 msgid "Cover (front)"
 msgstr "Омот (лице)"
 
-#: ../src/picture.c:1046
+#: ../src/picture.c:1045
 msgid "Cover (back)"
 msgstr "Омот (полеђина)"
 
-#: ../src/picture.c:1048
+#: ../src/picture.c:1047
 msgid "Leaflet page"
 msgstr "Страна са летком"
 
-#: ../src/picture.c:1050
+#: ../src/picture.c:1049
 msgid "Media (e.g. label side of CD)"
 msgstr "Медијум (нпр. страна са натписом ЦД-а)"
 
-#: ../src/picture.c:1052
+#: ../src/picture.c:1051
 msgid "Lead artist/lead performer/soloist"
 msgstr "Водећи уметник/водећи извођач/солиста"
 
-#: ../src/picture.c:1054
+#: ../src/picture.c:1053
 msgid "Artist/performer"
 msgstr "Уметник/Извођач"
 
-#: ../src/picture.c:1056
+#: ../src/picture.c:1055
 msgid "Conductor"
 msgstr "Диригент"
 
-#: ../src/picture.c:1058
+#: ../src/picture.c:1057
 msgid "Band/Orchestra"
 msgstr "Бенд/Оркестар"
 
-#: ../src/picture.c:1062
+#: ../src/picture.c:1061
 msgid "Lyricist/text writer"
 msgstr "Писац текстова"
 
-#: ../src/picture.c:1064
+#: ../src/picture.c:1063
 msgid "Recording location"
 msgstr "Место снимања"
 
-#: ../src/picture.c:1066
+#: ../src/picture.c:1065
 msgid "During recording"
 msgstr "У току снимања"
 
-#: ../src/picture.c:1068
+#: ../src/picture.c:1067
 msgid "During performance"
 msgstr "У току извођења"
 
-#: ../src/picture.c:1070
+#: ../src/picture.c:1069
 msgid "Movie/video screen capture"
 msgstr "Филм/Видео запис"
 
-#: ../src/picture.c:1072
+#: ../src/picture.c:1071
 msgid "A bright colored fish"
 msgstr "Светло обојена риба"
 
-#: ../src/picture.c:1074
+#: ../src/picture.c:1073
 msgid "Illustration"
 msgstr "Илустрација"
 
-#: ../src/picture.c:1076
+#: ../src/picture.c:1075
 msgid "Band/Artist logotype"
 msgstr "Лого бенда/извођача"
 
-#: ../src/picture.c:1078
+#: ../src/picture.c:1077
 msgid "Publisher/studio logotype"
 msgstr "Лого издавача/студија"
 
-#: ../src/picture.c:1082
+#: ../src/picture.c:1081
 msgid "Unknown image type"
 msgstr "Непозната врста слике"
 
-#: ../src/picture.c:1112 ../src/picture.c:1123
+#: ../src/picture.c:1111 ../src/picture.c:1122
 msgid "pixels"
 msgstr "тачкица"
 
-#: ../src/picture.c:1113 ../src/picture.c:1124
+#: ../src/picture.c:1112 ../src/picture.c:1123
 msgid "Type"
 msgstr "Врста"
 
-#: ../src/picture.c:1125
+#: ../src/picture.c:1124
 msgid "Description"
 msgstr "Опис"
 
-#: ../src/picture.c:1241
+#: ../src/picture.c:1240
 msgid ""
 "Cannot display the image because not enough data has been read to determine "
 "how to create the image buffer."
@@ -3260,18 +3264,18 @@ msgstr ""
 "Не могу да прикажем слику јер је недовољно података учитано да бих знао како "
 "да направим међумеморију слике."
 
-#: ../src/picture.c:1248
+#: ../src/picture.c:1247
 msgid "Cannot display the image"
 msgstr "Не могу да прикажем слику"
 
-#: ../src/picture.c:1250
+#: ../src/picture.c:1249
 msgid ""
 "Not enough data has been read to determine how to create the image buffer."
 msgstr ""
 "Није прочитано довољно података да бих одредио како да направим међумеморију "
 "слике."
 
-#: ../src/picture.c:1252
+#: ../src/picture.c:1251
 msgid "Load Image File"
 msgstr "Учитај датотеку слике"
 
@@ -4233,17 +4237,16 @@ msgstr "Име корисника за сервер посредника."
 msgid "User Password:"
 msgstr "Лозинка:"
 
-#: ../src/prefs.c:1338
-#| msgid "Password of user for the the proxy server."
-msgid "Password of user for the proxy server."
-msgstr "Корисникча лозинка за посреднички сервер."
+#: ../src/prefs.c:1337
+msgid "Password of user for the the proxy server."
+msgstr "Лозинка корисника за сервер посредника."
 
 #. Track Name list (CDDB results)
-#: ../src/prefs.c:1343
+#: ../src/prefs.c:1342
 msgid "Track Name List"
 msgstr "Списак назива нумера"
 
-#: ../src/prefs.c:1350
+#: ../src/prefs.c:1349
 msgid ""
 "Select corresponding audio file (according position or DLM if activated "
 "below)"
@@ -4251,7 +4254,7 @@ msgstr ""
 "Изабери одговарајућу аудио датотеку (судећи према месту или ДЛМ-у уколико је "
 "активирано испод)"
 
-#: ../src/prefs.c:1354
+#: ../src/prefs.c:1353
 msgid ""
 "If activated, when selecting a line in the list of tracks name, the "
 "corresponding audio file in the main list will be also selected."
@@ -4260,7 +4263,7 @@ msgstr ""
 "аудио датотека у главном списку ће такође бити изабрана."
 
 #. Check box to use DLM (also used in the cddb window)
-#: ../src/prefs.c:1359
+#: ../src/prefs.c:1358
 msgid ""
 "Use the Levenshtein algorithm (DLM) to match lines (using title) with audio "
 "files (using filename)"
@@ -4271,66 +4274,66 @@ msgstr ""
 #.
 #. * Confirmation
 #.
-#: ../src/prefs.c:1374
+#: ../src/prefs.c:1373
 msgid "Confirmation"
 msgstr "Потврде"
 
-#: ../src/prefs.c:1379
+#: ../src/prefs.c:1378
 msgid "Confirm exit from program"
 msgstr "Потврди излазак из програма"
 
-#: ../src/prefs.c:1382
+#: ../src/prefs.c:1381
 msgid ""
 "If activated, opens a dialog box to ask confirmation before exiting the "
 "program."
 msgstr ""
 "Уколико је активирано, отвара се окно за потврду пре изласка из програма."
 
-#: ../src/prefs.c:1385
+#: ../src/prefs.c:1384
 msgid "Confirm writing of file tag"
 msgstr "Потврди упис ознаке датотеке"
 
-#: ../src/prefs.c:1389
+#: ../src/prefs.c:1388
 msgid "Confirm renaming of file"
 msgstr "Потврди преименовање датотеке"
 
-#: ../src/prefs.c:1393
+#: ../src/prefs.c:1392
 msgid "Confirm deleting of file"
 msgstr "Потврди брисање датотеке"
 
-#: ../src/prefs.c:1397
+#: ../src/prefs.c:1396
 msgid "Confirm writing of playlist"
 msgstr "Потврди записивање списка нумера"
 
-#: ../src/prefs.c:1401
+#: ../src/prefs.c:1400
 msgid "Confirm changing directory when there are unsaved changes"
 msgstr "Потврди промену директоријума када има несачуваних измена"
 
 #. For translators : be aware to NOT translate '%.*d' in this string
-#: ../src/prefs.c:1439
+#: ../src/prefs.c:1438
 #, c-format
 msgid "(Example: %.*d_-_Track_name_1.mp3)"
 msgstr "(Пример: %.*d_-_Назив_нумере_1.mp3)"
 
 #. Translators: please do NOT translate '%.*d' in this string.
-#: ../src/prefs.c:1472
+#: ../src/prefs.c:1471
 #, c-format
 msgid "(Example: disc_%.*d_of_10/Track_name_1.mp3)"
 msgstr "(Пример: диск_%.*d_од_10_—_Назив_нумере_1.mp3)"
 
-#: ../src/prefs.c:1614 ../src/setting.c:904
+#: ../src/prefs.c:1613 ../src/setting.c:904
 msgid "Configuration saved"
 msgstr "Поставке су сачуване"
 
-#: ../src/prefs.c:1622
+#: ../src/prefs.c:1621
 msgid "Configuration unchanged"
 msgstr "Поставке нису мењане"
 
-#: ../src/prefs.c:1713
+#: ../src/prefs.c:1712
 msgid "The selected path for 'Default path to files' is invalid"
 msgstr "Изабрана путања за „Основна путања до датотека“ није исправна"
 
-#: ../src/prefs.c:1715
+#: ../src/prefs.c:1714
 #, c-format
 msgid ""
 "Path: '%s'\n"
@@ -4339,94 +4342,94 @@ msgstr ""
 "Путања: „%s“\n"
 "Грешка: %s"
 
-#: ../src/prefs.c:1717
+#: ../src/prefs.c:1716
 msgid "Invalid Path Error"
 msgstr "Грешка неисправне путање"
 
-#: ../src/prefs.c:1831
+#: ../src/prefs.c:1830
 #, c-format
 msgid "The audio file player '%s' cannot be found"
 msgstr "Не могу да пронађем програм за пуштање звука „%s“"
 
-#: ../src/prefs.c:1833
+#: ../src/prefs.c:1832
 msgid "Audio Player Error"
 msgstr "Грешка програма за пуштање звука"
 
-#: ../src/scan_dialog.c:182
+#: ../src/scan.c:180
 msgid "Fill Tag"
 msgstr "Попуни ознаку"
 
-#: ../src/scan_dialog.c:356
+#: ../src/scan.c:358
 #, c-format
 msgid "Cannot calculate CRC value of file (%s)"
 msgstr "Не могу да срачунам ЦРЦ вредност датотеке (%s)"
 
-#: ../src/scan_dialog.c:371
+#: ../src/scan.c:373
 msgid "Tag successfully scanned"
 msgstr "Ознака је успешно скенирана"
 
-#: ../src/scan_dialog.c:373
+#: ../src/scan.c:375
 #, c-format
 msgid "Tag successfully scanned: %s"
 msgstr "Ознака је успешно скенирана: %s"
 
-#: ../src/scan_dialog.c:414
+#: ../src/scan.c:416
 #, c-format
 msgid "Tag scanner: strange… the extension '%s' was not found in filename '%s'"
 msgstr ""
 "Прегледач ознаке: чудно… проширење „%s“ није нађено у називу датотеке „%s“"
 
-#: ../src/scan_dialog.c:496 ../src/scan_dialog.c:525
+#: ../src/scan.c:498 ../src/scan.c:527
 #, c-format
 msgid "Scan Error: can't find separator '%s' within '%s'"
 msgstr "Грешка прегледача: не могу да нађем раздвајач „%s“ у „%s“"
 
-#: ../src/scan_dialog.c:712
+#: ../src/scan.c:714
 msgid "New filename successfully scanned"
 msgstr "Нови назив датотеке је успешно скениран"
 
-#: ../src/scan_dialog.c:715
+#: ../src/scan.c:717
 #, c-format
 msgid "New filename successfully scanned: %s"
 msgstr "Нови назив датотеке је успешно скениран: %s"
 
-#: ../src/scan_dialog.c:1632
+#: ../src/scan.c:1821
 #, c-format
 msgid "Error while processing fields: %s"
 msgstr "Грешка приликом обраде поља: %s"
 
 #. The window
-#: ../src/scan_dialog.c:1802
+#: ../src/scan.c:2328
 msgid "Tag and Filename Scan"
 msgstr "Прегледач ознака и назива датотека"
 
 #. TODO: Set related action to match AM_SCAN_FILES.
-#: ../src/scan_dialog.c:1811
+#: ../src/scan.c:2337
 msgid "Scan Files"
 msgstr "Прегледај датотеке"
 
 #. Option Menu
-#: ../src/scan_dialog.c:1839
+#: ../src/scan.c:2365
 msgid "Scanner:"
 msgstr "Прегледач:"
 
-#: ../src/scan_dialog.c:1860
+#: ../src/scan.c:2386
 msgid "Select the type of scanner to use"
 msgstr "Изабери врсту прегледача за употребу"
 
-#: ../src/scan_dialog.c:1869
+#: ../src/scan.c:2395
 msgid "Scanner Preferences"
 msgstr "Поставке прегледача"
 
-#: ../src/scan_dialog.c:1878
+#: ../src/scan.c:2404
 msgid "Show / Hide Masks Editor"
 msgstr "Прикажи / Сакриј уређивач маски"
 
-#: ../src/scan_dialog.c:1888
+#: ../src/scan.c:2414
 msgid "Show / Hide Legend"
 msgstr "Прикажи / Сакриј легенду"
 
-#: ../src/scan_dialog.c:1918
+#: ../src/scan.c:2444
 msgid ""
 "Select or type in a mask using codes (see Legend) to parse filename and "
 "path. Used to fill in tag fields"
@@ -4435,15 +4438,15 @@ msgstr ""
 "датотеке и путање. Користи се за попуњавање поља ознака."
 
 #. Preview label
-#: ../src/scan_dialog.c:1942
+#: ../src/scan.c:2468
 msgid "Fill tag preview"
 msgstr "Преглед попуњавања ознаке"
 
-#: ../src/scan_dialog.c:1972
+#: ../src/scan.c:2498
 msgid "Prefix mask with current path"
 msgstr "Маска префикса са тренутном путањом"
 
-#: ../src/scan_dialog.c:1986
+#: ../src/scan.c:2512
 msgid ""
 "Select or type in a mask using codes (see Legend) to parse tag fields. Used "
 "to rename the file.\n"
@@ -4456,15 +4459,15 @@ msgstr ""
 "супротном је релативна према старој путањи."
 
 #. Preview label
-#: ../src/scan_dialog.c:2011
+#: ../src/scan.c:2537
 msgid "Rename file preview"
 msgstr "Преглед преименовања датотеке"
 
-#: ../src/scan_dialog.c:2030
+#: ../src/scan.c:2556
 msgid "Select fields:"
 msgstr "Изабери поља:"
 
-#: ../src/scan_dialog.c:2033
+#: ../src/scan.c:2559
 msgid ""
 "The buttons on the right represent the fields which can be processed. Select "
 "those which interest you"
@@ -4473,134 +4476,134 @@ msgstr ""
 "вам требају."
 
 #. Advice for Translators: set the first letter of filename translated
-#: ../src/scan_dialog.c:2037
+#: ../src/scan.c:2563
 msgid "F"
 msgstr "Д"
 
-#: ../src/scan_dialog.c:2039
+#: ../src/scan.c:2565
 msgid "Process filename field"
 msgstr "Обрадите поље назива датотеке"
 
 #. Advice for Translators: set the first letter of title translated
-#: ../src/scan_dialog.c:2041
+#: ../src/scan.c:2567
 msgid "T"
 msgstr "Н"
 
-#: ../src/scan_dialog.c:2042
+#: ../src/scan.c:2568
 msgid "Process title field"
 msgstr "Обрадите поље наслова"
 
 #. Advice for Translators: set the first letter of artist translated
-#: ../src/scan_dialog.c:2044
+#: ../src/scan.c:2570
 msgid "Ar"
 msgstr "И"
 
-#: ../src/scan_dialog.c:2045
+#: ../src/scan.c:2571
 msgid "Process file artist field"
 msgstr "Обрадите поље извођача"
 
 #. Advice for Translators: set the first letter of album artist translated
-#: ../src/scan_dialog.c:2047
+#: ../src/scan.c:2573
 msgid "AA"
 msgstr "ИА"
 
-#: ../src/scan_dialog.c:2048
+#: ../src/scan.c:2574
 msgid "Process album artist field"
 msgstr "Обрадите поље извођача албума"
 
 #. Advice for Translators: set the first letter of album translated
-#: ../src/scan_dialog.c:2050
+#: ../src/scan.c:2576
 msgid "Al"
 msgstr "А"
 
-#: ../src/scan_dialog.c:2051
+#: ../src/scan.c:2577
 msgid "Process album field"
 msgstr "Обрадите поље албума"
 
 #. Advice for Translators: set the first letter of genre translated
-#: ../src/scan_dialog.c:2053
+#: ../src/scan.c:2579
 msgid "G"
 msgstr "Ж"
 
-#: ../src/scan_dialog.c:2054
+#: ../src/scan.c:2580
 msgid "Process genre field"
 msgstr "Обрадите поље жанра"
 
 #. Advice for Translators: set the first letter of comment translated
-#: ../src/scan_dialog.c:2056
+#: ../src/scan.c:2582
 msgid "Cm"
 msgstr "Нп"
 
-#: ../src/scan_dialog.c:2057
+#: ../src/scan.c:2583
 msgid "Process comment field"
 msgstr "Обрадите поље коментара"
 
 #. Advice for Translators: set the first letter of composer translated
-#: ../src/scan_dialog.c:2059
+#: ../src/scan.c:2585
 msgid "Cp"
 msgstr "Кп"
 
-#: ../src/scan_dialog.c:2060
+#: ../src/scan.c:2586
 msgid "Process composer field"
 msgstr "Обрадите поље композитора"
 
 #. Advice for Translators: set the first letter of orig artist translated
-#: ../src/scan_dialog.c:2062
+#: ../src/scan.c:2588
 msgid "O"
 msgstr "О"
 
-#: ../src/scan_dialog.c:2063
+#: ../src/scan.c:2589
 msgid "Process original artist field"
 msgstr "Обрадите поље оригиналног извођача"
 
 #. Advice for Translators: set the first letter of copyright translated
-#: ../src/scan_dialog.c:2065
+#: ../src/scan.c:2591
 msgid "Cr"
 msgstr "Ап"
 
-#: ../src/scan_dialog.c:2066
+#: ../src/scan.c:2592
 msgid "Process copyright field"
 msgstr "Обрадите поље ауторских права"
 
 #. Advice for Translators: set the first letter of URL translated
-#: ../src/scan_dialog.c:2068
+#: ../src/scan.c:2594
 msgid "U"
 msgstr "Ад"
 
-#: ../src/scan_dialog.c:2069
+#: ../src/scan.c:2595
 msgid "Process URL field"
 msgstr "Обрадите поље адресе"
 
 #. Advice for Translators: set the first letter of encoder name translated
-#: ../src/scan_dialog.c:2071
+#: ../src/scan.c:2597
 msgid "E"
 msgstr "Кд"
 
-#: ../src/scan_dialog.c:2072
+#: ../src/scan.c:2598
 msgid "Process encoder name field"
 msgstr "Обрадите поље назива енкодера"
 
-#: ../src/scan_dialog.c:2116
+#: ../src/scan.c:2642
 msgid "Invert selection"
 msgstr "Преокрени избор"
 
-#: ../src/scan_dialog.c:2123
+#: ../src/scan.c:2649
 msgid "Select/Unselect all"
 msgstr "Означи/одзначи све"
 
-#: ../src/scan_dialog.c:2138
+#: ../src/scan.c:2664
 msgid "Convert:"
 msgstr "Претвори:"
 
-#: ../src/scan_dialog.c:2140
+#: ../src/scan.c:2666
 msgid "to: "
 msgstr "у: "
 
-#: ../src/scan_dialog.c:2147
+#: ../src/scan.c:2673
 msgid "Do not convert"
 msgstr "Не претварај"
 
-#: ../src/scan_dialog.c:2166
+#: ../src/scan.c:2692
 msgid ""
 "The underscore character or the string '%20' are replaced by one space. "
 "Example, before: 'Text%20In%20An_Entry', after: 'Text In An Entry'."
@@ -4608,7 +4611,7 @@ msgstr ""
 "Доње цртице и знак „%20“ између речи ће бити замењени размаком. На пример "
 "„Текст%20у%20неком_пољу“ ће постати „Текст у неком пољу“."
 
-#: ../src/scan_dialog.c:2169
+#: ../src/scan.c:2695
 msgid ""
 "The space character is replaced by one underscore character. Example, "
 "before: 'Text In An Entry', after: 'Text_In_An_Entry'."
@@ -4616,38 +4619,38 @@ msgstr ""
 "Размак између речи биће замењен доњом цртицом. На пример „Текст у неком "
 "пољу“ ће постати „Текст_у_неком_пољу“."
 
-#: ../src/scan_dialog.c:2172
+#: ../src/scan.c:2698
 msgid ""
 "Replace a string by another one. Note that the search is case sensitive."
 msgstr ""
 "Замените једну ниску другом. Знајте да је претрага осетљива на величину "
 "слова."
 
-#: ../src/scan_dialog.c:2179
+#: ../src/scan.c:2705
 msgid "Capitalize all"
 msgstr "Сва слова велика"
 
-#: ../src/scan_dialog.c:2181
+#: ../src/scan.c:2707
 msgid "Lowercase all"
 msgstr "Сва слова мала"
 
-#: ../src/scan_dialog.c:2183
+#: ../src/scan.c:2709
 msgid "Capitalize first letter"
 msgstr "Прво слово велико"
 
-#: ../src/scan_dialog.c:2185
+#: ../src/scan.c:2711
 msgid "Capitalize the first letter of each word"
 msgstr "Прво слово сваке речи велико"
 
-#: ../src/scan_dialog.c:2186
+#: ../src/scan.c:2712
 msgid "Detect Roman numerals"
 msgstr "Откриј римске бројеве"
 
-#: ../src/scan_dialog.c:2188
+#: ../src/scan.c:2714
 msgid "Do not change capitalization"
 msgstr "Не мењај величину слова"
 
-#: ../src/scan_dialog.c:2210
+#: ../src/scan.c:2736
 msgid ""
 "Convert all words in all fields to upper case. Example, before: 'Text IN AN "
 "entry', after: 'TEXT IN AN ENTRY'."
@@ -4655,7 +4658,7 @@ msgstr ""
 "Све речи у пољима испиши великим словима. На пример „Текст У НЕКОМ пољу“ ће "
 "постати „ТЕКСТ У НЕКОМ ПОЉУ“."
 
-#: ../src/scan_dialog.c:2213
+#: ../src/scan.c:2739
 msgid ""
 "Convert all words in all fields to lower case. Example, before: 'TEXT IN an "
 "entry', after: 'text in an entry'."
@@ -4663,7 +4666,7 @@ msgstr ""
 "Све речи у пољима испиши малим словима. На пример „ТЕКСТ У неком пољу“ ће "
 "постати „текст у неком пољу“."
 
-#: ../src/scan_dialog.c:2216
+#: ../src/scan.c:2742
 msgid ""
 "Convert the initial of the first word in all fields to upper case. Example, "
 "before: 'text IN An ENTRY', after: 'Text in an entry'."
@@ -4671,7 +4674,7 @@ msgstr ""
 "Прво слово сваког поља промени у велико. На пример „текст У Неком ПОЉУ“ ће "
 "постати „Текст у неком пољу“."
 
-#: ../src/scan_dialog.c:2219
+#: ../src/scan.c:2745
 msgid ""
 "Convert the initial of each word in all fields to upper case. Example, "
 "before: 'Text in an ENTRY', after: 'Text In An Entry'."
@@ -4679,7 +4682,7 @@ msgstr ""
 "Свако прво слово речи у пољима промени у велико. На пример „Текст у неком "
 "ПОЉУ“ ће постати „Текст У Неком Пољу“."
 
-#: ../src/scan_dialog.c:2222
+#: ../src/scan.c:2748
 msgid ""
 "Force to convert to upper case the Roman numerals. Example, before: 'ix. "
 "text in an entry', after: 'IX. Text In An Entry'."
@@ -4687,19 +4690,19 @@ msgstr ""
 "Приморава претварање римских бројева у велика слова. На пример „ix. текст у "
 "неком пољу“ ће постати „IX. текст у неком пољу“."
 
-#: ../src/scan_dialog.c:2230
+#: ../src/scan.c:2756
 msgid "Insert a space before uppercase letters"
 msgstr "Убаци размак пре великог слова"
 
-#: ../src/scan_dialog.c:2232
+#: ../src/scan.c:2758
 msgid "Remove duplicate spaces and underscores"
 msgstr "Уклони дупле размаке и доње цртице"
 
-#: ../src/scan_dialog.c:2234
+#: ../src/scan.c:2760
 msgid "Do not change word separators"
 msgstr "Не мењај раздвајаче речи"
 
-#: ../src/scan_dialog.c:2248
+#: ../src/scan.c:2774
 msgid ""
 "All spaces between words are removed. Example, before: 'Text In An Entry', "
 "after: 'TextInAnEntry'."
@@ -4707,7 +4710,7 @@ msgstr ""
 "Уклања све размаке између речи. На пример „Текст У Неком Пољу“ ће постати "
 "„ТекстУНекомПољу“."
 
-#: ../src/scan_dialog.c:2251
+#: ../src/scan.c:2777
 msgid ""
 "A space is inserted before each upper case letter. Example, before: "
 "'TextInAnEntry', after: 'Text In An Entry'."
@@ -4715,7 +4718,7 @@ msgstr ""
 "Додаје размак пре сваког великог слова. На пример „ТекстУНекомПољу“ ће "
 "постати „Текст У Неком Пољу“."
 
-#: ../src/scan_dialog.c:2254
+#: ../src/scan.c:2780
 msgid ""
 "Duplicate spaces and underscores are removed. Example, before: "
 "'Text__In__An   Entry', after: 'Text_In_An Entry'."
@@ -4726,141 +4729,141 @@ msgstr ""
 #.
 #. * Frame to display codes legend
 #.
-#: ../src/scan_dialog.c:2261
+#: ../src/scan.c:2787
 msgid "Legend"
 msgstr "Легенда"
 
-#: ../src/scan_dialog.c:2267
+#: ../src/scan.c:2793
 #, c-format
 msgid "%a: artist"
 msgstr "%a: извођач"
 
-#: ../src/scan_dialog.c:2270
+#: ../src/scan.c:2796
 msgid "%z: album artist"
 msgstr "%z: извођач албума"
 
-#: ../src/scan_dialog.c:2273
+#: ../src/scan.c:2799
 msgid "%b: album"
 msgstr "%b: албум"
 
-#: ../src/scan_dialog.c:2276
+#: ../src/scan.c:2802
 #, c-format
 msgid "%c: comment"
 msgstr "%c: коментар"
 
-#: ../src/scan_dialog.c:2279
+#: ../src/scan.c:2805
 #, c-format
 msgid "%p: composer"
 msgstr "%p: композитор"
 
-#: ../src/scan_dialog.c:2282
+#: ../src/scan.c:2808
 msgid "%r: copyright"
 msgstr "%r: ауторско право"
 
-#: ../src/scan_dialog.c:2285
+#: ../src/scan.c:2811
 #, c-format
 msgid "%d: disc number"
 msgstr "%d: број ЦД-а"
 
-#: ../src/scan_dialog.c:2288
+#: ../src/scan.c:2814
 #, c-format
 msgid "%e: encoded by"
 msgstr "%e: кодирано помоћу"
 
-#: ../src/scan_dialog.c:2291
+#: ../src/scan.c:2817
 #, c-format
 msgid "%g: genre"
 msgstr "%g: жанр"
 
-#: ../src/scan_dialog.c:2294
+#: ../src/scan.c:2820
 #, c-format
 msgid "%i: ignored"
 msgstr "%i: занемарено"
 
-#: ../src/scan_dialog.c:2297
+#: ../src/scan.c:2823
 msgid "%l: number of tracks"
 msgstr "%l: број нумера"
 
-#: ../src/scan_dialog.c:2300
+#: ../src/scan.c:2826
 #, c-format
 msgid "%o: orig. artist"
 msgstr "%o: ориг. извођач"
 
-#: ../src/scan_dialog.c:2303
+#: ../src/scan.c:2829
 #, c-format
 msgid "%n: track"
 msgstr "%n: нумера"
 
-#: ../src/scan_dialog.c:2306
+#: ../src/scan.c:2832
 msgid "%t: title"
 msgstr "%t: наслов"
 
-#: ../src/scan_dialog.c:2309
+#: ../src/scan.c:2835
 #, c-format
 msgid "%u: URL"
 msgstr "%u: адреса"
 
-#: ../src/scan_dialog.c:2312
+#: ../src/scan.c:2838
 #, c-format
 msgid "%x: number of discs"
 msgstr "%x: број дискова"
 
-#: ../src/scan_dialog.c:2315
+#: ../src/scan.c:2841
 msgid "%y: year"
 msgstr "%y: година"
 
 #.
 #. * Masks Editor
 #.
-#: ../src/scan_dialog.c:2322
+#: ../src/scan.c:2848
 msgid "Mask Editor"
 msgstr "Уређивач маски"
 
-#: ../src/scan_dialog.c:2376
+#: ../src/scan.c:2902
 msgid "Create New Mask"
 msgstr "Направи нову маску"
 
-#: ../src/scan_dialog.c:2386
+#: ../src/scan.c:2912
 msgid "Move Up this Mask"
 msgstr "Помери маску нагоре"
 
-#: ../src/scan_dialog.c:2396
+#: ../src/scan.c:2922
 msgid "Move Down this Mask"
 msgstr "Помери маску надоле"
 
-#: ../src/scan_dialog.c:2406
+#: ../src/scan.c:2932
 msgid "Duplicate Mask"
 msgstr "Размножи маску"
 
-#: ../src/scan_dialog.c:2416
+#: ../src/scan.c:2942
 msgid "Add Default Masks"
 msgstr "Додај основну маску"
 
-#: ../src/scan_dialog.c:2426
+#: ../src/scan.c:2952
 msgid "Remove Mask"
 msgstr "Уклони маску"
 
-#: ../src/scan_dialog.c:2436
+#: ../src/scan.c:2962
 msgid "Save Masks"
 msgstr "Сачувај маску"
 
-#: ../src/scan_dialog.c:3016
+#: ../src/scan.c:3542
 msgid "New_mask"
 msgstr "Нова _маска"
 
-#: ../src/scan_dialog.c:3055
+#: ../src/scan.c:3581
 msgid "Copy: No row selected"
 msgstr "Умножи: Није изабран ред"
 
-#: ../src/scan_dialog.c:3148
+#: ../src/scan.c:3674
 msgid "Remove: No row selected"
 msgstr "Уклони: Није изабран ред"
 
-#: ../src/scan_dialog.c:3195
+#: ../src/scan.c:3721
 msgid "Move Up: No row selected"
 msgstr "Помери горе: Није изабран ред"
 
-#: ../src/scan_dialog.c:3239
+#: ../src/scan.c:3765
 msgid "Move Down: No row selected"
 msgstr "Помери доле: Није изабран ред"
 
diff --git a/po/sr at latin.po b/po/sr at latin.po
index 5967bce..f75a633 100644
--- a/po/sr at latin.po
+++ b/po/sr at latin.po
@@ -9,8 +9,8 @@ msgstr ""
 "Project-Id-Version: EasyTAG-2.1.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=easyta"
 "g&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2014-04-19 19:19+0000\n"
-"PO-Revision-Date: 2014-05-13 19:24+0200\n"
+"POT-Creation-Date: 2014-04-03 16:46+0000\n"
+"PO-Revision-Date: 2014-04-05 21:22+0200\n"
 "Last-Translator: Miroslav Nikolić <miroslavnikolic at rocketmail.com>\n"
 "Language-Team: Serbian <gnom at prevod.org>\n"
 "Language: sr\n"
@@ -22,6 +22,9 @@ msgstr ""
 "X-Project-Style: gnome\n"
 
 #: ../data/easytag.appdata.xml.in.h:1
+#| msgid ""
+#| "View and edit tags for MP3, MP2, MP4/AAC, FLAC, Ogg Vorbis, MusePack, "
+#| "Monkey's Audio and WavPack files."
 msgid ""
 "View and edit tags for MP3, MP2, MP4/AAC, FLAC, Ogg Opus, Ogg Speex, Ogg "
 "Vorbis, MusePack, Monkey's Audio and WavPack files."
@@ -58,7 +61,7 @@ msgstr "Uređujte metapodatke zvučnih datoteka"
 msgid "mp3;tag;audio;"
 msgstr "mp3;oznaka;zvuk;"
 
-#: ../src/about.c:89
+#: ../src/about.c:91
 msgid ""
 "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 "
@@ -86,7 +89,7 @@ msgstr ""
 "Ako niste, pogledajte: „http://www.gnu.org/licenses/“."
 
 #. Translators: put your own name here to appear in the about dialog.
-#: ../src/about.c:106
+#: ../src/about.c:108
 msgid "translator-credits"
 msgstr ""
 "  Miloš Popović\n"
@@ -94,14 +97,13 @@ msgstr ""
 "\n"
 "http://prevod.org — prevod na srpski jezik"
 
-#: ../src/about.c:116
+#: ../src/about.c:118
 msgid "View and edit tags in audio files"
 msgstr "Pregledajte i uređujte oznake u zvučnim datotekama"
 
-#: ../src/ape_tag.c:61 ../src/id3v24_tag.c:112 ../src/mp4_header.cc:46
-#: ../src/mp4_header.cc:59 ../src/mp4_tag.cc:69 ../src/mp4_tag.cc:85
-#: ../src/mp4_tag.cc:90 ../src/mp4_tag.cc:262 ../src/mp4_tag.cc:278
-#: ../src/mp4_tag.cc:283
+#. g_print(_("Error while opening file: '%s' (%s)."),filename_utf8,g_strerror(errno));
+#: ../src/ape_tag.c:61 ../src/id3v24_tag.c:112 ../src/mp4_header.c:63
+#: ../src/mp4_tag.c:65 ../src/mp4_tag.c:186
 #, c-format
 msgid "Error while opening file: '%s' (%s)."
 msgstr "Greška pri otvaranju datoteke: „%s“ (%s)."
@@ -370,7 +372,7 @@ msgstr "Poslednja datoteka"
 msgid "S_can Files"
 msgstr "_Pregledaj datoteke"
 
-#: ../src/bar.c:225 ../src/scan_dialog.c:1818
+#: ../src/bar.c:225 ../src/scan.c:2344
 msgid "Scan selected files"
 msgstr "Pregledajte izabrane datoteke"
 
@@ -434,8 +436,8 @@ msgstr "Ponovite poslednje izmene"
 msgid "_Quit"
 msgstr "_Izađi"
 
-#: ../src/bar.c:242 ../src/easytag.c:2429 ../src/easytag.c:4564
-#: ../src/easytag.c:4596
+#: ../src/bar.c:242 ../src/easytag.c:2429 ../src/easytag.c:4565
+#: ../src/easytag.c:4597
 msgid "Quit"
 msgstr "Izađite iz programa"
 
@@ -729,7 +731,7 @@ msgstr "Preimenujte datoteke i direktorijume"
 msgid "_Process Fields…"
 msgstr "_Obradi polja…"
 
-#: ../src/bar.c:370 ../src/scan_dialog.c:184
+#: ../src/bar.c:370 ../src/scan.c:182
 msgid "Process Fields"
 msgstr "Obradite polja"
 
@@ -746,7 +748,7 @@ msgstr "Spreman sam za početak"
 msgid "New default path for files selected"
 msgstr "Izabrana je nova osnovna putanja za datoteke"
 
-#: ../src/browser.c:678 ../src/easytag.c:4560
+#: ../src/browser.c:678 ../src/easytag.c:4561
 msgid "Some files have been modified but not saved"
 msgstr "Neke datoteke su izmenjene ali nisu sačuvane"
 
@@ -771,11 +773,11 @@ msgstr "Greška: Tražeći %s, ne mogu da nađem čvor %s u stablu."
 msgid "Tree"
 msgstr "Stablo"
 
-#: ../src/browser.c:3102 ../src/cddb.c:803 ../src/misc.c:1903
+#: ../src/browser.c:3102 ../src/cddb.c:803 ../src/misc.c:1902
 msgid "Filename"
 msgstr "Naziv datoteke"
 
-#: ../src/browser.c:3102 ../src/cddb.c:804 ../src/misc.c:1904
+#: ../src/browser.c:3102 ../src/cddb.c:804 ../src/misc.c:1903
 #: ../src/prefs.c:643
 msgid "Title"
 msgstr "Naslov"
@@ -783,22 +785,22 @@ msgstr "Naslov"
 #. Translators: This option is for the previous 'search in' option. For
 #. * instance, translate this as "Search in:" "Artist".
 #: ../src/browser.c:3103 ../src/browser.c:3110 ../src/cddb.c:483
-#: ../src/cddb.c:805 ../src/misc.c:1905 ../src/prefs.c:644
+#: ../src/cddb.c:805 ../src/misc.c:1904 ../src/prefs.c:644
 msgid "Artist"
 msgstr "Izvođač"
 
-#: ../src/browser.c:3103 ../src/misc.c:1906
+#: ../src/browser.c:3103 ../src/misc.c:1905
 msgid "Album Artist"
 msgstr "Izvođač albuma"
 
 #. Translators: This option is for the previous 'search in' option. For
 #. * instance, translate this as "Search in:" "Album".
 #: ../src/browser.c:3104 ../src/browser.c:3112 ../src/cddb.c:486
-#: ../src/cddb.c:806 ../src/misc.c:1907 ../src/prefs.c:645
+#: ../src/cddb.c:806 ../src/misc.c:1906 ../src/prefs.c:645
 msgid "Album"
 msgstr "Album"
 
-#: ../src/browser.c:3104 ../src/cddb.c:807 ../src/misc.c:1909
+#: ../src/browser.c:3104 ../src/cddb.c:807 ../src/misc.c:1908
 msgid "Year"
 msgstr "Godina"
 
@@ -806,37 +808,37 @@ msgstr "Godina"
 msgid "Disc"
 msgstr "Disk"
 
-#: ../src/browser.c:3105 ../src/misc.c:1910
+#: ../src/browser.c:3105 ../src/misc.c:1909
 msgid "Track"
 msgstr "Numera"
 
-#: ../src/browser.c:3105 ../src/cddb.c:810 ../src/misc.c:1911
+#: ../src/browser.c:3105 ../src/cddb.c:810 ../src/misc.c:1910
 #: ../src/prefs.c:646
 msgid "Genre"
 msgstr "Žanr"
 
-#: ../src/browser.c:3106 ../src/misc.c:1912 ../src/prefs.c:647
+#: ../src/browser.c:3106 ../src/misc.c:1911 ../src/prefs.c:647
 msgid "Comment"
 msgstr "Komentar"
 
-#: ../src/browser.c:3106 ../src/misc.c:1913 ../src/picture.c:1060
+#: ../src/browser.c:3106 ../src/misc.c:1912 ../src/picture.c:1059
 #: ../src/prefs.c:648
 msgid "Composer"
 msgstr "Kompozitor"
 
-#: ../src/browser.c:3107 ../src/misc.c:1914
+#: ../src/browser.c:3107 ../src/misc.c:1913
 msgid "Original Artist"
 msgstr "Orig. izvođač"
 
-#: ../src/browser.c:3108 ../src/misc.c:1915
+#: ../src/browser.c:3108 ../src/misc.c:1914
 msgid "Copyright"
 msgstr "Autorsko pravo"
 
-#: ../src/browser.c:3108 ../src/misc.c:1916
+#: ../src/browser.c:3108 ../src/misc.c:1915
 msgid "URL"
 msgstr "Adresa"
 
-#: ../src/browser.c:3109 ../src/misc.c:1917
+#: ../src/browser.c:3109 ../src/misc.c:1916
 msgid "Encoded By"
 msgstr "Kodirano pomoću"
 
@@ -878,7 +880,7 @@ msgstr "Preimenuj direktorijum"
 msgid "Rename the directory '%s' to:"
 msgstr "Preimenuj direktorijum „%s“ u:"
 
-#: ../src/browser.c:3636 ../src/misc.c:1172
+#: ../src/browser.c:3636 ../src/misc.c:1171
 msgid "Use mask:"
 msgstr "Koristi masku:"
 
@@ -1047,7 +1049,7 @@ msgstr "Sva polja"
 
 #. Translators: This option is for the previous 'search in' option. For
 #. * instance, translate this as "Search in:" "Other".
-#: ../src/cddb.c:492 ../src/picture.c:1038 ../src/prefs.c:807
+#: ../src/cddb.c:492 ../src/picture.c:1037 ../src/prefs.c:807
 msgid "Other"
 msgstr "Ostalo"
 
@@ -1141,7 +1143,7 @@ msgstr "Kategorije"
 msgid "Results:"
 msgstr "Rezultati:"
 
-#: ../src/cddb.c:606 ../src/misc.c:1951
+#: ../src/cddb.c:606 ../src/misc.c:1950
 msgid "Search:"
 msgstr "Potraži:"
 
@@ -1204,7 +1206,7 @@ msgid "# Tracks"
 msgstr "# Numere"
 
 #. Check box to run the scanner
-#: ../src/cddb.c:847 ../src/misc.c:2992
+#: ../src/cddb.c:847 ../src/misc.c:2991
 msgid "Run the current scanner for each file"
 msgstr "Primeni tekući pregledač za svaku datoteku"
 
@@ -1216,7 +1218,7 @@ msgstr "Poklopi redove Levenštajnovim algoritmom"
 #. Doesn't activate it by default because if the new user don't pay attention to it,
 #. it will not understand why the cddb results aren't loaded correctly...
 #. gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbUseDLM2),CDDB_USE_DLM);
-#: ../src/cddb.c:859 ../src/prefs.c:1363
+#: ../src/cddb.c:859 ../src/prefs.c:1362
 msgid ""
 "When activating this option, the Levenshtein algorithm (DLM: Damerau-"
 "Levenshtein Metric) will be used to match the CDDB title against every "
@@ -1641,46 +1643,46 @@ msgid "The string '%s' couldn't be converted into UTF-8 (%s)."
 msgstr "Niska „%s“ ne može biti prevedena u UTF-8 (%s)."
 
 #. Starting messages
-#: ../src/easytag.c:185
+#: ../src/easytag.c:184
 #, c-format
 msgid "Starting EasyTAG version %s (PID: %d)…"
 msgstr "Pokrećem Laku oznaku %s (PIB: %d)…"
 
-#: ../src/easytag.c:187
+#: ../src/easytag.c:186
 #, c-format
 msgid "Using libid3tag version %s"
-msgstr "Koristim „libid3tag“ %s"
+msgstr "Koristim „libid3tag“ %s…"
 
-#: ../src/easytag.c:190
+#: ../src/easytag.c:189
 #, c-format
 msgid "Using id3lib version %d.%d.%d"
-msgstr "Koristim „id3lib“ %d.%d.%d"
+msgstr "Koristim „id3lib“ %d.%d.%d…"
 
-#: ../src/easytag.c:196
+#: ../src/easytag.c:195
 #, c-format
 msgid "Variable EASYTAGLANG defined. Setting locale: '%s'"
 msgstr "Promenljiva „EASYTAGLANG“ je određena. Postavljam lokalizaciju: „%s“"
 
-#: ../src/easytag.c:198
+#: ../src/easytag.c:197
 #, c-format
 msgid "Setting locale: '%s'"
 msgstr "Postavljam lokalizaciju: „%s“"
 
-#: ../src/easytag.c:203
+#: ../src/easytag.c:202
 #, c-format
 msgid "Currently using locale '%s' (and eventually '%s')"
 msgstr "Trenutno koristim lokalizaciju „%s“ (i eventualno „%s“)"
 
-#: ../src/easytag.c:210
+#: ../src/easytag.c:209
 msgid "Unable to create setting directories"
 msgstr "Ne mogu da napravim direktorijume podešavanja"
 
-#: ../src/easytag.c:427 ../src/et_core.c:637 ../src/et_core.c:649
+#: ../src/easytag.c:426 ../src/et_core.c:597 ../src/et_core.c:609
 #, c-format
 msgid "Error while querying information for file: '%s' (%s)"
 msgstr "Greška prilikom propitivanja podataka za datoteku: „%s“ (%s)"
 
-#: ../src/easytag.c:490
+#: ../src/easytag.c:489
 #, c-format
 msgid "Cannot open path '%s'"
 msgstr "Ne mogu da otvorim putanju „%s“"
@@ -1688,11 +1690,11 @@ msgstr "Ne mogu da otvorim putanju „%s“"
 #.
 #. * Browser
 #.
-#: ../src/easytag.c:582 ../src/prefs.c:142
+#: ../src/easytag.c:581 ../src/prefs.c:142
 msgid "Browser"
 msgstr "Preglednik"
 
-#: ../src/easytag.c:604 ../src/et_core.c:2857
+#: ../src/easytag.c:603 ../src/et_core.c:2817
 msgid "File"
 msgstr "Datoteka"
 
@@ -1702,114 +1704,114 @@ msgstr "Datoteka"
 #. gtk_label_set_text(GTK_LABEL(VersionValueLabel),"");
 #. Version changed to encoder version
 #. Encoder version
-#: ../src/easytag.c:636 ../src/easytag.c:4231 ../src/flac_header.c:201
+#: ../src/easytag.c:635 ../src/easytag.c:4231 ../src/flac_header.c:201
 #: ../src/monkeyaudio_header.c:96 ../src/musepack_header.c:98
 #: ../src/ogg_header.c:389 ../src/opus_header.c:221 ../src/wavpack_header.c:72
 #, c-format
 msgid "Encoder:"
 msgstr "Koder:"
 
-#: ../src/easytag.c:644
+#: ../src/easytag.c:643
 msgid "Bitrate:"
 msgstr "Bitski protok:"
 
 #. Translators: Please try to keep this string as short as possible as it
 #. * is shown in a narrow column.
-#: ../src/easytag.c:654
+#: ../src/easytag.c:653
 msgid "Frequency:"
 msgstr "Učestalost:"
 
 #. Mode
-#: ../src/easytag.c:665 ../src/easytag.c:4235 ../src/mpeg_header.c:216
+#: ../src/easytag.c:664 ../src/easytag.c:4235 ../src/mpeg_header.c:216
 msgid "Mode:"
 msgstr "Režim:"
 
-#: ../src/easytag.c:672
+#: ../src/easytag.c:671
 msgid "Size:"
 msgstr "Veličina:"
 
-#: ../src/easytag.c:679
+#: ../src/easytag.c:678
 msgid "Duration:"
 msgstr "Trajanje:"
 
 #. Main Frame
-#: ../src/easytag.c:726 ../src/et_core.c:2787
+#: ../src/easytag.c:725 ../src/et_core.c:2747
 msgid "Tag"
 msgstr "Oznaka"
 
 #.
 #. * 1 - Page for common tag fields
 #.
-#: ../src/easytag.c:748
+#: ../src/easytag.c:747
 msgid "Common"
 msgstr "Opšte"
 
 #. Title
-#: ../src/easytag.c:755
+#: ../src/easytag.c:754
 msgid "Title:"
 msgstr "Naslov:"
 
-#: ../src/easytag.c:769
+#: ../src/easytag.c:768
 msgid "Tag selected files with this title"
 msgstr "Označite izabrane datoteke ovim naslovom"
 
 #. Artist
-#: ../src/easytag.c:774
+#: ../src/easytag.c:773
 msgid "Artist:"
 msgstr "Izvođač:"
 
-#: ../src/easytag.c:788
+#: ../src/easytag.c:787
 msgid "Tag selected files with this artist"
 msgstr "Označite izabrane datoteke ovim izvođačem"
 
 #. Album Artist
-#: ../src/easytag.c:793
+#: ../src/easytag.c:792
 msgid "Album artist:"
 msgstr "Izvođač albuma:"
 
-#: ../src/easytag.c:807
+#: ../src/easytag.c:806
 msgid "Tag selected files with this album artist"
 msgstr "Označite izabrane datoteke ovim izvođačem albuma"
 
 #. Album
-#: ../src/easytag.c:812
+#: ../src/easytag.c:811
 msgid "Album:"
 msgstr "Album:"
 
-#: ../src/easytag.c:826
+#: ../src/easytag.c:825
 msgid "Tag selected files with this album name"
 msgstr "Označite izabrane datoteke ovim nazivom albuma"
 
 #. Disc Number
-#: ../src/easytag.c:831
+#: ../src/easytag.c:830
 msgid "CD:"
 msgstr "CD:"
 
-#: ../src/easytag.c:848
+#: ../src/easytag.c:847
 msgid "Tag selected files with this disc number"
 msgstr "Označite izabrane datoteke ovim brojem diska"
 
 #. Year
-#: ../src/easytag.c:853
+#: ../src/easytag.c:852
 msgid "Year:"
 msgstr "Godina:"
 
-#: ../src/easytag.c:873
+#: ../src/easytag.c:872
 msgid "Tag selected files with this year"
 msgstr "Označite izabrane datoteke ovom godinom"
 
-#: ../src/easytag.c:887
+#: ../src/easytag.c:886
 msgid "Number selected tracks sequentially. Starts at 01 in each subdirectory."
 msgstr ""
 "Broj dosledno izabranih numera. Počinje od 01 u svakom pod-direktorijumu."
 
 #. To have enough space to display the icon
 #. To have enough space to display the icon
-#: ../src/easytag.c:896
+#: ../src/easytag.c:895
 msgid "Track #:"
 msgstr "Numera #:"
 
-#: ../src/easytag.c:927
+#: ../src/easytag.c:926
 msgid ""
 "Set the number of files, in the same directory of the displayed file, to the "
 "selected tracks."
@@ -1817,176 +1819,176 @@ msgstr ""
 "Unesite broj datoteka, u istom direktorijumu prikazane datoteke, do "
 "izabranih numera."
 
-#: ../src/easytag.c:947
+#: ../src/easytag.c:946
 msgid "Tag selected files with this number of tracks"
 msgstr "Označite izabrane datoteke ovim brojem numera"
 
 #. Genre
-#: ../src/easytag.c:951
+#: ../src/easytag.c:950
 msgid "Genre:"
 msgstr "Žanr:"
 
-#: ../src/easytag.c:979
+#: ../src/easytag.c:978
 msgid "Tag selected files with this genre"
 msgstr "Označite izabrane datoteke ovim žanrom"
 
 #. Comment
-#: ../src/easytag.c:984
+#: ../src/easytag.c:983
 msgid "Comment:"
 msgstr "Komentar:"
 
-#: ../src/easytag.c:1011
+#: ../src/easytag.c:1010
 msgid "Tag selected files with this comment"
 msgstr "Označite izabrane datoteke ovom napomenom"
 
 #. Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(CommentView));
 #. Composer (name of the composers)
-#: ../src/easytag.c:1018
+#: ../src/easytag.c:1017
 msgid "Composer:"
 msgstr "Kompozitor:"
 
-#: ../src/easytag.c:1032
+#: ../src/easytag.c:1031
 msgid "Tag selected files with this composer"
 msgstr "Označite izabrane datoteke ovim kompozitorom"
 
 #. Translators: Original Artist / Performer. Please try to keep this string
 #. * as short as possible, as it must fit into a narrow column.
-#: ../src/easytag.c:1039
+#: ../src/easytag.c:1038
 msgid "Orig. artist:"
 msgstr "Orig. izvođač:"
 
-#: ../src/easytag.c:1053
+#: ../src/easytag.c:1052
 msgid "Tag selected files with this original artist"
 msgstr "Označite izabrane datoteke ovim originalnim izvođačem"
 
 #. Copyright
-#: ../src/easytag.c:1059
+#: ../src/easytag.c:1058
 msgid "Copyright:"
 msgstr "Autorsko pravo:"
 
-#: ../src/easytag.c:1073
+#: ../src/easytag.c:1072
 msgid "Tag selected files with this copyright"
 msgstr "Označite izabrane datoteke ovim autorskim pravom"
 
 #. URL
-#: ../src/easytag.c:1079
+#: ../src/easytag.c:1078
 msgid "URL:"
 msgstr "Adresa:"
 
-#: ../src/easytag.c:1093
+#: ../src/easytag.c:1092
 msgid "Tag selected files with this URL"
 msgstr "Označite izabrane datoteke ovom adresom"
 
 #. Encoded by
-#: ../src/easytag.c:1099
+#: ../src/easytag.c:1098
 msgid "Encoded by:"
 msgstr "Kodirano pomoću:"
 
-#: ../src/easytag.c:1113
+#: ../src/easytag.c:1112
 msgid "Tag selected files with this encoder name"
 msgstr "Označite izabrane datoteke nazivom ovog enkodera"
 
 #.
 #. * 2 - Page for extra tag fields
 #.
-#: ../src/easytag.c:1147 ../src/et_core.c:3229 ../src/et_core.c:3232
+#: ../src/easytag.c:1146 ../src/et_core.c:3189 ../src/et_core.c:3192
 msgid "Images"
 msgstr "Slike"
 
-#: ../src/easytag.c:1171
+#: ../src/easytag.c:1170
 msgid "You can use drag and drop to add an image"
 msgstr "Možete prevući slike u ovo prozorče da ih dodate"
 
-#: ../src/easytag.c:1218
+#: ../src/easytag.c:1217
 msgid "Add images to the tag"
 msgstr "Dodajte slike u oznake"
 
-#: ../src/easytag.c:1236
+#: ../src/easytag.c:1235
 msgid "Remove selected images from the tag"
 msgstr "Uklonite izabrane slike iz oznake"
 
-#: ../src/easytag.c:1250
+#: ../src/easytag.c:1249
 msgid "Save the selected images to files"
 msgstr "Sačuvajte izabrane slike u datoteke"
 
-#: ../src/easytag.c:1261
+#: ../src/easytag.c:1260
 msgid "Edit image properties"
 msgstr "Uredite svojstva slike"
 
-#: ../src/easytag.c:1275
+#: ../src/easytag.c:1274
 msgid "Tag selected files with these images"
 msgstr "Označite izabrane datoteke ovim slikama"
 
-#: ../src/easytag.c:1333
+#: ../src/easytag.c:1332
 #, c-format
 msgid "Selected files tagged with title '%s'."
 msgstr "Izabrane datoteke su označene naslovom „%s“."
 
-#: ../src/easytag.c:1335
+#: ../src/easytag.c:1334
 msgid "Removed title from selected files."
 msgstr "Uklonjen je je naslov iz izabranih datoteka."
 
-#: ../src/easytag.c:1350
+#: ../src/easytag.c:1349
 #, c-format
 msgid "Selected files tagged with artist '%s'."
 msgstr "Izabrane datoteke su označene izvođačem „%s“."
 
-#: ../src/easytag.c:1352
+#: ../src/easytag.c:1351
 msgid "Removed artist from selected files."
 msgstr "Uklonjen je je izvođač iz izabranih datoteka."
 
-#: ../src/easytag.c:1366
+#: ../src/easytag.c:1365
 #, c-format
 msgid "Selected files tagged with album artist '%s'."
 msgstr "Izabrane datoteke su označene izvođačem albuma „%s“."
 
-#: ../src/easytag.c:1368
+#: ../src/easytag.c:1367
 msgid "Removed album artist from selected files."
 msgstr "Uklonjen je je izvođač albuma iz izabranih datoteka."
 
-#: ../src/easytag.c:1383
+#: ../src/easytag.c:1382
 #, c-format
 msgid "Selected files tagged with album '%s'."
 msgstr "Izabrane datoteke su označene albumom „%s“."
 
-#: ../src/easytag.c:1385
+#: ../src/easytag.c:1384
 msgid "Removed album name from selected files."
 msgstr "Uklonjen je je naziv albuma iz izabranih datoteka."
 
-#: ../src/easytag.c:1422
+#: ../src/easytag.c:1421
 #, c-format
 msgid "Selected files tagged with disc number '%s/%s'."
 msgstr "Izabrane datoteke su označene brojem diska „%s/%s“."
 
-#: ../src/easytag.c:1427
+#: ../src/easytag.c:1426
 #, c-format
 msgid "Selected files tagged with disc number like 'xx'."
 msgstr "Izabrane datoteke su označene brojem diska kao „hh“."
 
-#: ../src/easytag.c:1432
+#: ../src/easytag.c:1431
 msgid "Removed disc number from selected files."
 msgstr "Uklonjen je broj diska iz izabranih datoteka."
 
-#: ../src/easytag.c:1448
+#: ../src/easytag.c:1447
 #, c-format
 msgid "Selected files tagged with year '%s'."
 msgstr "Izabrane datoteke su označene godinom „%s“."
 
-#: ../src/easytag.c:1450
+#: ../src/easytag.c:1449
 msgid "Removed year from selected files."
 msgstr "Uklonjena je godina iz izabranih datoteka."
 
-#: ../src/easytag.c:1476 ../src/easytag.c:1566
+#: ../src/easytag.c:1475 ../src/easytag.c:1566
 #, c-format
 msgid "Selected files tagged with track like 'xx/%s'."
 msgstr "Izabrane datoteke su označene numerom tipa „xx/%s“."
 
-#: ../src/easytag.c:1479
+#: ../src/easytag.c:1478
 #, c-format
 msgid "Selected files tagged with track like 'xx'."
 msgstr "Izabrane datoteke su označene numerom tipa „xx“."
 
-#: ../src/easytag.c:1483 ../src/easytag.c:1569
+#: ../src/easytag.c:1482 ../src/easytag.c:1569
 msgid "Removed track number from selected files."
 msgstr "Uklonjen je broj numere iz izabranih datoteka."
 
@@ -2127,7 +2129,7 @@ msgid "Repeat action for the remaining files"
 msgstr "Ponovi radnju za preostale datoteke"
 
 #. Directories and filename changed
-#: ../src/easytag.c:2873 ../src/scan_dialog.c:183
+#: ../src/easytag.c:2873 ../src/scan.c:181
 msgid "Rename File and Directory"
 msgstr "Preimenuj datoteku i direktorijum"
 
@@ -2229,7 +2231,7 @@ msgstr "Greška čitanja direktorijuma"
 msgid "Search in progress…"
 msgstr "Pretraga je u toku…"
 
-#: ../src/easytag.c:3393 ../src/et_core.c:2864
+#: ../src/easytag.c:3393 ../src/et_core.c:2824
 #, c-format
 msgid "File: '%s'"
 msgstr "Datoteka: „%s“"
@@ -2284,160 +2286,162 @@ msgid "Select a directory to browse"
 msgstr "Izaberite direktorijum za razgledanje"
 
 #. Menu items
-#: ../src/easytag.c:4411
+#: ../src/easytag.c:4412
 msgid "Tag selected files with this field"
 msgstr "Označi izabrane datoteke ovim poljem"
 
-#: ../src/easytag.c:4423 ../src/scan_dialog.c:2128
+#: ../src/easytag.c:4424 ../src/scan.c:2654
 msgid "Convert '_' and '%20' to spaces"
 msgstr "Prevedi „_“ i „%20“ u razmak"
 
-#: ../src/easytag.c:4430 ../src/scan_dialog.c:2130
+#: ../src/easytag.c:4431 ../src/scan.c:2656
 msgid "Convert ' ' to '_'"
 msgstr "Prevedi „ “ u „_“"
 
-#: ../src/easytag.c:4441
+#: ../src/easytag.c:4442
 msgid "All uppercase"
 msgstr "Sva slova velika"
 
-#: ../src/easytag.c:4448
+#: ../src/easytag.c:4449
 msgid "All lowercase"
 msgstr "Sva slova mala"
 
-#: ../src/easytag.c:4455
+#: ../src/easytag.c:4456
 msgid "First letter uppercase"
 msgstr "Prvo slovo veliko"
 
-#: ../src/easytag.c:4462
+#: ../src/easytag.c:4463
 msgid "First letter uppercase of each word"
 msgstr "Prvo slovo svake reči veliko"
 
-#: ../src/easytag.c:4473 ../src/prefs.c:1023 ../src/scan_dialog.c:2228
+#: ../src/easytag.c:4474 ../src/prefs.c:1023 ../src/scan.c:2754
 msgid "Remove spaces"
 msgstr "Ukloni razmake"
 
-#: ../src/easytag.c:4480
+#: ../src/easytag.c:4481
 msgid "Insert space before uppercase letter"
 msgstr "Ubaci razmak pre velikog slova"
 
-#: ../src/easytag.c:4487
+#: ../src/easytag.c:4488
 msgid "Remove duplicate spaces or underscores"
 msgstr "Ukloni duple razmake ili donje crtice"
 
-#: ../src/easytag.c:4494
+#: ../src/easytag.c:4495
 msgid "Remove all text"
 msgstr "Ukloni sav tekst"
 
-#: ../src/easytag.c:4513
+#: ../src/easytag.c:4514
 msgid "EasyTAG: Normal exit."
 msgstr "Laka oznaka: Normalan izlaz."
 
-#: ../src/easytag.c:4565
+#: ../src/easytag.c:4566
 msgid "Do you want to save them before quitting?"
 msgstr "Da li želite da ih sačuvate pre zatvaranja?"
 
-#: ../src/easytag.c:4592
+#: ../src/easytag.c:4593
 msgid "Do you really want to quit?"
 msgstr "Da li zaista želite da izađete iz programa?"
 
-#: ../src/et_core.c:550
+#: ../src/et_core.c:510
 #, c-format
 msgid "Error reading tag from ogg file (%s)"
 msgstr "Greška čitanja oznake iz ogg datoteke (%s)"
 
-#: ../src/et_core.c:579
+#: ../src/et_core.c:539
 #, c-format
+#| msgid "Error reading tag from ogg file (%s)"
 msgid "Error reading tag from Opus file (%s)"
 msgstr "Greška čitanja oznake iz Opus datoteke (%s)"
 
-#: ../src/et_core.c:722
+#: ../src/et_core.c:682
 #, c-format
 msgid "Automatic corrections applied for file '%s'."
 msgstr "Samostalno ispravljanje je primenjeno nad datotekom „%s“."
 
-#: ../src/et_core.c:2747
+#: ../src/et_core.c:2707
 msgid "ID3 Tag"
 msgstr "ID3 oznaka"
 
-#: ../src/et_core.c:2753
+#: ../src/et_core.c:2713
 msgid "Ogg Vorbis Tag"
 msgstr "Ogg Vorbis oznaka"
 
-#: ../src/et_core.c:2759
+#: ../src/et_core.c:2719
 msgid "FLAC Vorbis Tag"
 msgstr "FLAC Vorbis oznaka"
 
-#: ../src/et_core.c:2764
+#: ../src/et_core.c:2724
 msgid "APE Tag"
 msgstr "APE oznaka"
 
-#: ../src/et_core.c:2769
+#: ../src/et_core.c:2729
 msgid "MP4/M4A/AAC Tag"
 msgstr "MP4/M4A/AAC oznaka"
 
-#: ../src/et_core.c:2775
+#: ../src/et_core.c:2735
 msgid "Wavpack Tag"
 msgstr "Vejvpak oznaka"
 
-#: ../src/et_core.c:2781
+#: ../src/et_core.c:2741
 msgid "Opus Tag"
 msgstr "Opus oznaka"
 
-#: ../src/et_core.c:2801
+#: ../src/et_core.c:2761
 msgid "MP3 File"
 msgstr "MP3 datoteka"
 
-#: ../src/et_core.c:2805
+#: ../src/et_core.c:2765
 msgid "MP2 File"
 msgstr "MP2 datoteka"
 
-#: ../src/et_core.c:2811
+#: ../src/et_core.c:2771
 msgid "Ogg Vorbis File"
 msgstr "Ogg Vorbis datoteka"
 
-#: ../src/et_core.c:2817
+#: ../src/et_core.c:2777
 msgid "Speex File"
 msgstr "Spiks datoteka"
 
-#: ../src/et_core.c:2823
+#: ../src/et_core.c:2783
 msgid "FLAC File"
 msgstr "FLAC datoteka"
 
-#: ../src/et_core.c:2828
+#: ../src/et_core.c:2788
 msgid "MusePack File"
 msgstr "MjuzPak datoteka"
 
-#: ../src/et_core.c:2832
+#: ../src/et_core.c:2792
 msgid "Monkey's Audio File"
 msgstr "Monki audio datoteka"
 
-#: ../src/et_core.c:2837
+#: ../src/et_core.c:2797
 msgid "MP4/AAC File"
 msgstr "MP4/AAC datoteka"
 
-#: ../src/et_core.c:2843
+#: ../src/et_core.c:2803
 msgid "Wavpack File"
 msgstr "Vejvpak datoteka"
 
-#: ../src/et_core.c:2849
+#: ../src/et_core.c:2809
+#| msgid "MusePack File"
 msgid "Opus File"
 msgstr "Opus datoteka"
 
-#: ../src/et_core.c:2908 ../src/et_core.c:2963
+#: ../src/et_core.c:2868 ../src/et_core.c:2923
 msgid "File not found"
 msgstr "Nisam našao datoteku"
 
-#: ../src/et_core.c:2913
+#: ../src/et_core.c:2873
 #, c-format
 msgid "Cannot query file information (%s)"
 msgstr "Ne mogu da propitam podatke datoteke (%s)"
 
-#: ../src/et_core.c:2947
+#: ../src/et_core.c:2907
 msgid "Read-only file"
 msgstr "Datoteka samo za čitanje"
 
 #. And refresh the number of files in this directory
-#: ../src/et_core.c:3011
+#: ../src/et_core.c:2971
 #, c-format
 msgid "One file"
 msgid_plural "%u files"
@@ -2446,14 +2450,14 @@ msgstr[1] "%u datoteke"
 msgstr[2] "%u datoteka"
 msgstr[3] "Jedna datoteka"
 
-#: ../src/et_core.c:3215
+#: ../src/et_core.c:3175
 #, c-format
 msgid "Images (%d)"
 msgstr "Slike (%d)"
 
 #. Bitrate
-#: ../src/et_core.c:3257 ../src/flac_header.c:205
-#: ../src/monkeyaudio_header.c:86 ../src/mp4_header.cc:142
+#: ../src/et_core.c:3217 ../src/flac_header.c:205
+#: ../src/monkeyaudio_header.c:86 ../src/mp4_header.c:134
 #: ../src/mpeg_header.c:206 ../src/musepack_header.c:88
 #: ../src/ogg_header.c:401 ../src/opus_header.c:227 ../src/wavpack_header.c:78
 #, c-format
@@ -2461,29 +2465,29 @@ msgid "%d kb/s"
 msgstr "%d kb/s"
 
 #. Samplerate
-#: ../src/et_core.c:3262 ../src/flac_header.c:210
-#: ../src/monkeyaudio_header.c:91 ../src/mp4_header.cc:147
+#: ../src/et_core.c:3222 ../src/flac_header.c:210
+#: ../src/monkeyaudio_header.c:91 ../src/mp4_header.c:139
 #: ../src/mpeg_header.c:211 ../src/musepack_header.c:93
 #: ../src/ogg_header.c:406 ../src/opus_header.c:232 ../src/wavpack_header.c:83
 #, c-format
 msgid "%d Hz"
 msgstr "%d Hz"
 
-#: ../src/et_core.c:3408 ../src/scan_dialog.c:688
+#: ../src/et_core.c:3368 ../src/scan.c:690
 #, c-format
 msgid "Could not convert filename '%s' into system filename encoding"
 msgstr ""
 "Ne mogu da pretvorim naziv datoteke „%s“ u kodiranje naziva datoteke sistema"
 
-#: ../src/et_core.c:3410
+#: ../src/et_core.c:3370
 msgid "Try setting the environment variable G_FILENAME_ENCODING."
 msgstr "Pokušavam da postavim promenljivu okruženja G_KODIRANJE_NAZIVADATOTEKE."
 
-#: ../src/et_core.c:3411 ../src/scan_dialog.c:690
+#: ../src/et_core.c:3371 ../src/scan.c:692
 msgid "Filename translation"
 msgstr "Prevod naziva datoteke"
 
-#: ../src/et_core.c:4116
+#: ../src/et_core.c:4076
 #, c-format
 msgid "Error writing tag type %d to file %s (%s)"
 msgstr "Greška pisanja vrste oznake %d u datoteku %s (%s)"
@@ -2492,7 +2496,7 @@ msgstr "Greška pisanja vrste oznake %d u datoteku %s (%s)"
 #. Mode
 #. mpeg4ip library seems to always return -1
 #. Mode
-#: ../src/flac_header.c:215 ../src/mp4_header.cc:153 ../src/ogg_header.c:411
+#: ../src/flac_header.c:215 ../src/mp4_header.c:145 ../src/ogg_header.c:411
 #: ../src/opus_header.c:237 ../src/wavpack_header.c:88
 msgid "Channels:"
 msgstr "Kanala:"
@@ -2526,12 +2530,12 @@ msgstr "Greška: Nisam uspeo da upišem napomene u datoteku „%s“ (%s)."
 msgid "Written tag of '%s'"
 msgstr "Upisana je oznaka u „%s“"
 
-#: ../src/id3_tag.c:205
+#: ../src/id3_tag.c:158
 #, c-format
 msgid "Error while reading file: '%s' (%s)"
 msgstr "Greška prilikom čitanja datoteke: „%s“ (%s)"
 
-#: ../src/id3_tag.c:217
+#: ../src/id3_tag.c:170
 #, c-format
 msgid ""
 "As the following corrupted file '%s' will cause an error in id3lib, it will "
@@ -2540,31 +2544,31 @@ msgstr ""
 "Sledeća oštećena datoteka „%s“ neće biti obrađena, zato što će prouzrokovati "
 "grešku u id3bibl"
 
-#: ../src/id3_tag.c:219
+#: ../src/id3_tag.c:172
 msgid "Corrupted file"
 msgstr "Oštećena datoteka"
 
-#: ../src/id3_tag.c:592
+#: ../src/id3_tag.c:555
 #, c-format
 msgid "Removed tag of '%s'"
 msgstr "Uklonjena je oznaka iz „%s“"
 
-#: ../src/id3_tag.c:596 ../src/id3_tag.c:696
+#: ../src/id3_tag.c:559 ../src/id3_tag.c:659
 #, c-format
 msgid "Error while removing ID3v1 tag of '%s' (%s)"
 msgstr "Greška pri uklanjanju ID3v1 oznake iz „%s“ (%s)"
 
-#: ../src/id3_tag.c:598 ../src/id3_tag.c:668
+#: ../src/id3_tag.c:561 ../src/id3_tag.c:631
 #, c-format
 msgid "Error while removing ID3v2 tag of '%s' (%s)"
 msgstr "Greška pri uklanjanju ID3v2 oznake iz „%s“ (%s)"
 
-#: ../src/id3_tag.c:617
+#: ../src/id3_tag.c:580
 #, c-format
 msgid "Error while updating ID3v2 tag of '%s' (%s)"
 msgstr "Greška pri ažuriranju ID3v2 oznake u „%s“ (%s)"
 
-#: ../src/id3_tag.c:645
+#: ../src/id3_tag.c:608
 msgid ""
 "You have tried to save this tag to Unicode but it was detected that your "
 "version of id3lib is buggy"
@@ -2572,7 +2576,7 @@ msgstr ""
 "Pokušali ste da sačuvate ovu oznaku u Unikodu ali je otkriveno da vaše "
 "izdanje id3bibl ima grašaka"
 
-#: ../src/id3_tag.c:647
+#: ../src/id3_tag.c:610
 #, c-format
 msgid ""
 "If you reload this file, some characters in the tag may not be displayed "
@@ -2591,90 +2595,90 @@ msgstr ""
 "\n"
 "Datoteka: %s"
 
-#: ../src/id3_tag.c:654
+#: ../src/id3_tag.c:617
 msgid "Buggy id3lib"
 msgstr "Loša id3bibl"
 
-#: ../src/id3_tag.c:688
+#: ../src/id3_tag.c:651
 #, c-format
 msgid "Error while updating ID3v1 tag of '%s' (%s)"
 msgstr "Greška pri promeni ID3v1 oznake u „%s“ (%s)"
 
-#: ../src/id3_tag.c:702 ../src/id3v24_tag.c:1042
+#: ../src/id3_tag.c:665 ../src/id3v24_tag.c:1048
 #, c-format
 msgid "Updated tag of '%s'"
 msgstr "Oznaka u „%s“ je ažurirana"
 
-#: ../src/id3_tag.c:721
+#: ../src/id3_tag.c:684
 msgid "No error reported"
 msgstr "Nisu prijavljene greške"
 
-#: ../src/id3_tag.c:723
+#: ../src/id3_tag.c:686
 msgid "No available memory"
 msgstr "Nema dostupne memorije"
 
-#: ../src/id3_tag.c:725
+#: ../src/id3_tag.c:688
 msgid "No data to parse"
 msgstr "Nema podataka za obradu"
 
-#: ../src/id3_tag.c:727
+#: ../src/id3_tag.c:690
 msgid "Improperly formatted data"
 msgstr "Neispravno oblikovani podaci"
 
-#: ../src/id3_tag.c:729
+#: ../src/id3_tag.c:692
 msgid "No buffer to write to"
 msgstr "Nema međumemorije za upis"
 
-#: ../src/id3_tag.c:731
+#: ../src/id3_tag.c:694
 msgid "Buffer is too small"
 msgstr "Međumemorija je suviše mala"
 
-#: ../src/id3_tag.c:733
+#: ../src/id3_tag.c:696
 msgid "Invalid frame ID"
 msgstr "Neispravan ID okvira"
 
-#: ../src/id3_tag.c:735
+#: ../src/id3_tag.c:698
 msgid "Requested field not found"
 msgstr "Zatraženo polje nije nađeno"
 
-#: ../src/id3_tag.c:737
+#: ../src/id3_tag.c:700
 msgid "Unknown field type"
 msgstr "Nepoznata vrsta polja"
 
-#: ../src/id3_tag.c:739
+#: ../src/id3_tag.c:702
 msgid "Tag is already attached to a file"
 msgstr "Oznaka je već prikačena datoteci"
 
-#: ../src/id3_tag.c:741
+#: ../src/id3_tag.c:704
 msgid "Invalid tag version"
 msgstr "Neispravno izdanje oznake"
 
-#: ../src/id3_tag.c:743
+#: ../src/id3_tag.c:706
 msgid "No file to parse"
 msgstr "Nema datoteke za obradu"
 
-#: ../src/id3_tag.c:745
+#: ../src/id3_tag.c:708
 msgid "Attempting to write to a read-only file"
 msgstr "Pokušavam da upišem u datoteku samo za čitanje"
 
-#: ../src/id3_tag.c:747
+#: ../src/id3_tag.c:710
 msgid "Error in compression/uncompression"
 msgstr "Greška pri sažimanju/raspakivanju"
 
-#: ../src/id3_tag.c:749
+#: ../src/id3_tag.c:712
 msgid "Unknown error message"
 msgstr "Nepoznata poruka o grešci"
 
-#: ../src/id3_tag.c:1353
+#: ../src/id3_tag.c:1316
 #, c-format
 msgid "Error while creating temporary file: '%s'"
 msgstr "Greška prilikom stvaranja privremene datoteke: „%s“"
 
-#: ../src/id3_tag.c:1360
+#: ../src/id3_tag.c:1323
 msgid "Error while creating temporary file"
 msgstr "Greška prilikom stvaranja privremene datoteke"
 
-#: ../src/id3_tag.c:1380
+#: ../src/id3_tag.c:1343
 #, c-format
 msgid "Error while writing to file: '%s' (%s)"
 msgstr "Greška prilikom pisanja u datoteku: „%s“ (%s)"
@@ -2684,7 +2688,7 @@ msgstr "Greška prilikom pisanja u datoteku: „%s“ (%s)"
 #. * missing (not read for some reason) while reading from
 #. * the file.
 #.
-#: ../src/id3v24_tag.c:1497
+#: ../src/id3v24_tag.c:1503
 #, c-format
 msgid "Cannot write tag of file ‘%s’ (a byte was missing)"
 msgid_plural "Cannot write tag of file ‘%s’ (%s bytes were missing)"
@@ -2693,12 +2697,12 @@ msgstr[1] "Ne mogu da upišem oznaku u datoteku „%s“ (%s bajta nedostaju)"
 msgstr[2] "Ne mogu da upišem oznaku u datoteku „%s“ (%s bajtova nedostaje)"
 msgstr[3] "Ne mogu da upišem oznaku u datoteku „%s“ (%s)"
 
-#: ../src/id3v24_tag.c:1518
+#: ../src/id3v24_tag.c:1524
 #, c-format
 msgid "Cannot save tag of file '%s'"
 msgstr "Ne mogu da sačuvam oznaku datoteke „%s“"
 
-#: ../src/id3v24_tag.c:1529
+#: ../src/id3v24_tag.c:1535
 #, c-format
 msgid "Size error while saving tag of '%s'"
 msgstr "Greška veličine pri čuvanju oznake za „%s“"
@@ -2707,54 +2711,54 @@ msgstr "Greška veličine pri čuvanju oznake za „%s“"
 msgid "Log"
 msgstr "Dnevnik izmena"
 
-#: ../src/misc.c:720
+#: ../src/misc.c:719
 msgid "You must type a program name"
 msgstr "Morate da unesete naziv programa"
 
-#: ../src/misc.c:721
+#: ../src/misc.c:720
 msgid "Program Name Error"
 msgstr "Greška naziva programa"
 
-#: ../src/misc.c:800
+#: ../src/misc.c:799
 #, c-format
 msgid "Executed command: %s"
 msgstr "Izvršena naredba: „%s“"
 
-#: ../src/misc.c:807
+#: ../src/misc.c:806
 #, c-format
 msgid "Failed to launch program: %s"
 msgstr "Nisam uspeo da pokrenem program: %s"
 
-#: ../src/misc.c:824
+#: ../src/misc.c:823
 msgid "Select File"
 msgstr "Izaberite datoteku"
 
-#: ../src/misc.c:830
+#: ../src/misc.c:829
 msgid "Select Directory"
 msgstr "Izaberite direktorijum"
 
-#: ../src/misc.c:1142
+#: ../src/misc.c:1141
 msgid "Generate Playlist"
 msgstr "Načini spisak numera"
 
-#: ../src/misc.c:1166
+#: ../src/misc.c:1165
 msgid "M3U Playlist Name"
 msgstr "Naziv M3U spiska numera"
 
-#: ../src/misc.c:1181
+#: ../src/misc.c:1180
 msgid "Use directory name"
 msgstr "Koristi naziv direktorijuma"
 
 #. Playlist options
-#: ../src/misc.c:1198
+#: ../src/misc.c:1197
 msgid "Playlist Options"
 msgstr "Opcije spiska numera"
 
-#: ../src/misc.c:1204
+#: ../src/misc.c:1203
 msgid "Include only the selected files"
 msgstr "Uključi samo izabrane datoteke"
 
-#: ../src/misc.c:1207
+#: ../src/misc.c:1206
 msgid ""
 "If activated, only the selected files will be written in the playlist file. "
 "Else, all the files will be written."
@@ -2762,80 +2766,80 @@ msgstr ""
 "Ukoliko je aktivirano, samo izabrane datoteke će biti upisane u spisak "
 "numera. U suprotnom, sve datoteke će biti upisane."
 
-#: ../src/misc.c:1210
+#: ../src/misc.c:1209
 msgid "Use full path for files in playlist"
 msgstr "Koristi pune putanje za datoteke u spisku numera"
 
-#: ../src/misc.c:1213
+#: ../src/misc.c:1212
 msgid "Use relative path for files in playlist"
 msgstr "Koristi relativne putanje za datoteke u spisku numera"
 
 #. Create playlist in parent directory
-#: ../src/misc.c:1219
+#: ../src/misc.c:1218
 msgid "Create playlist in the parent directory"
 msgstr "Načini spisak numera u roditeljskom direktorijumu"
 
-#: ../src/misc.c:1222
+#: ../src/misc.c:1221
 msgid "If activated, the playlist will be created in the parent directory."
 msgstr ""
 "Ukoliko je aktivirano, spisak numera će biti načinjen u roditeljskom "
 "direktorijumu."
 
 #. DOS Separator
-#: ../src/misc.c:1226
+#: ../src/misc.c:1225
 msgid "Use DOS directory separator"
 msgstr "Koristi DOS-ov razdvajač datoteka"
 
-#: ../src/misc.c:1232
+#: ../src/misc.c:1231
 msgid ""
 "This option replaces the UNIX directory separator '/' into DOS separator "
 "'\\'."
 msgstr ""
 "Ova opcija menja UNIKS-ov razdvajač datoteka „/“ u DOS-ov razdvajač „\\“."
 
-#: ../src/misc.c:1241
+#: ../src/misc.c:1240
 msgid "Playlist Content"
 msgstr "Sadržaj spiska numera"
 
-#: ../src/misc.c:1247
+#: ../src/misc.c:1246
 msgid "Write only list of files"
 msgstr "Upiši samo spisak datoteka"
 
-#: ../src/misc.c:1251
+#: ../src/misc.c:1250
 msgid "Write info using filename"
 msgstr "Upiši informacije koristeći naziv datoteke"
 
-#: ../src/misc.c:1254
+#: ../src/misc.c:1253
 msgid "Write info using:"
 msgstr "Upiši informacije koristeći:"
 
-#: ../src/misc.c:1468
+#: ../src/misc.c:1467
 #, c-format
 msgid "Cannot write playlist file '%s'"
 msgstr "Ne mogu da zapišem datoteku spiska numera „%s“"
 
-#: ../src/misc.c:1472
+#: ../src/misc.c:1471
 msgid "Playlist File Error"
 msgstr "Greška datoteke spiska numera"
 
-#: ../src/misc.c:1480
+#: ../src/misc.c:1479
 #, c-format
 msgid "Written playlist file '%s'"
 msgstr "Datoteka spiska numera „%s“ je zapisana"
 
-#: ../src/misc.c:1544 ../src/scan_dialog.c:2713 ../src/scan_dialog.c:2775
+#: ../src/misc.c:1543 ../src/scan.c:3239 ../src/scan.c:3301
 msgid "Invalid scanner mask"
 msgstr "Neispravna maska pregledača"
 
-#: ../src/misc.c:1908
+#: ../src/misc.c:1907
 msgid "CD"
 msgstr "CD"
 
-#: ../src/misc.c:1930
+#: ../src/misc.c:1929
 msgid "Find Files"
 msgstr "Pronađite datoteke"
 
-#: ../src/misc.c:1962
+#: ../src/misc.c:1961
 msgid ""
 "Type the word to search into files. Or type nothing to display all files."
 msgstr ""
@@ -2843,13 +2847,13 @@ msgstr ""
 "sve datoteke."
 
 #. Where...
-#: ../src/misc.c:1968
+#: ../src/misc.c:1967
 msgid "In:"
 msgstr "U:"
 
 #. Translators: This option is for the previous 'in' option. For instance,
 #. * translate this as "Search" "In:" "the Filename".
-#: ../src/misc.c:1973
+#: ../src/misc.c:1972
 msgid "the Filename"
 msgstr "nazivu datoteke"
 
@@ -2858,20 +2862,20 @@ msgstr "nazivu datoteke"
 #. * Note: label changed to "the Tag" (to be the only one) to fix a Hungarian
 #. * grammatical problem (which uses one word to say "in the tag" like here)
 #.
-#: ../src/misc.c:1979
+#: ../src/misc.c:1978
 msgid "the Tag"
 msgstr "oznaci"
 
 #. Property of the search
-#: ../src/misc.c:1990 ../src/prefs.c:335
+#: ../src/misc.c:1989 ../src/prefs.c:335
 msgid "Case sensitive"
 msgstr "Razlikuj veličinu slova"
 
-#: ../src/misc.c:2217
+#: ../src/misc.c:2216
 msgid "Ready to search…"
 msgstr "Spreman sam za pretragu…"
 
-#: ../src/misc.c:2437
+#: ../src/misc.c:2436
 #, c-format
 msgid "Found one file"
 msgid_plural "Found %d files"
@@ -2880,63 +2884,63 @@ msgstr[1] "Pronašao sam %d datoteke"
 msgstr[2] "Pronašao sam %d datoteka"
 msgstr[3] "Pronašao sam: %d datoteku/e/a"
 
-#: ../src/misc.c:2722
+#: ../src/misc.c:2721
 msgid "Load Filenames From a Text File"
 msgstr "Učitaj nazive datoteka iz tekstualne datoteke"
 
-#: ../src/misc.c:2751
+#: ../src/misc.c:2750
 msgid "File:"
 msgstr "Datoteka:"
 
 #. Button 'load'
 #. the signal attached to this button, to load the file, is placed after the LoadFileContentList definition
-#: ../src/misc.c:2770
+#: ../src/misc.c:2769
 msgid " Load "
 msgstr " Učitaj "
 
-#: ../src/misc.c:2788
+#: ../src/misc.c:2787
 msgid "Content of Text File"
 msgstr "Sadržaj tekstualne datoteke"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2809 ../src/misc.c:2904
+#: ../src/misc.c:2808 ../src/misc.c:2903
 msgid "Insert a blank line before the selected line"
 msgstr "Umetni prazan red pre izabranog"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2818 ../src/misc.c:2913
+#: ../src/misc.c:2817 ../src/misc.c:2912
 msgid "Delete the selected line"
 msgstr "Obriši izabrani red"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2827 ../src/misc.c:2922 ../src/misc.c:3408
+#: ../src/misc.c:2826 ../src/misc.c:2921 ../src/misc.c:3407
 msgid "Delete all blank lines"
 msgstr "Obriši sve prane redove"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2839 ../src/misc.c:2934
+#: ../src/misc.c:2838 ../src/misc.c:2933
 msgid "Move up the selected line"
 msgstr "Pomeri gore izabrani red"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2848 ../src/misc.c:2943
+#: ../src/misc.c:2847 ../src/misc.c:2942
 msgid "Move down the selected line"
 msgstr "Pomeri dole izabrani red"
 
 #. gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-#: ../src/misc.c:2860 ../src/misc.c:2955 ../src/misc.c:3432
+#: ../src/misc.c:2859 ../src/misc.c:2954 ../src/misc.c:3431
 msgid "Reload"
 msgstr "Osveži"
 
-#: ../src/misc.c:2882
+#: ../src/misc.c:2881
 msgid "List of Files"
 msgstr "Spisak datoteka"
 
-#: ../src/misc.c:2977
+#: ../src/misc.c:2976
 msgid "Selected line:"
 msgstr "Izabrani red:"
 
-#: ../src/misc.c:2995
+#: ../src/misc.c:2994
 msgid ""
 "When activating this option, after loading the filenames, the current "
 "selected scanner will be ran (the scanner window must be opened)."
@@ -2944,34 +2948,34 @@ msgstr ""
 "Pokretanjem ove opcije, nakon učitavanja naziva datoteka, trenutno izabrani "
 "pregledač će biti pokrenut (prozor pregledača mora biti otvoren)."
 
-#: ../src/misc.c:3082
+#: ../src/misc.c:3081
 #, c-format
 msgid "Cannot retrieve file info (%s)"
 msgstr "Ne mogu da preuzmem podatke o datoteci (%s)"
 
-#: ../src/misc.c:3144
+#: ../src/misc.c:3143
 #, c-format
 msgid "Can't open file '%s' (%s)"
 msgstr "Ne mogu da otvorim datoteku „%s“ (%s)"
 
-#: ../src/misc.c:3180
+#: ../src/misc.c:3179
 #, c-format
 msgid "Error reading file (%s)"
 msgstr "Greška čitanja datoteke (%s)"
 
-#: ../src/misc.c:3396
+#: ../src/misc.c:3395
 msgid "Insert a blank line"
 msgstr "Umetnite prazan red"
 
-#: ../src/misc.c:3402
+#: ../src/misc.c:3401
 msgid "Delete this line"
 msgstr "Obrišite ovaj red"
 
-#: ../src/misc.c:3417
+#: ../src/misc.c:3416
 msgid "Move up this line"
 msgstr "Pomerite na gore ovaj red"
 
-#: ../src/misc.c:3423
+#: ../src/misc.c:3422
 msgid "Move down this line"
 msgstr "Pomerite na dole ovaj red"
 
@@ -2981,26 +2985,26 @@ msgstr "Pomerite na dole ovaj red"
 msgid "Profile:"
 msgstr "Profil:"
 
-#: ../src/mp4_header.cc:60 ../src/mp4_tag.cc:91 ../src/mp4_tag.cc:284
+#: ../src/mp4_header.c:63 ../src/mp4_tag.c:65 ../src/mp4_tag.c:186
 msgid "MP4 format invalid"
 msgstr "MP4 zapis je neispravan"
 
-#: ../src/mp4_header.cc:68
+#: ../src/mp4_header.c:72 ../src/mp4_tag.c:74
 #, c-format
 msgid "File contains no audio track: '%s'"
 msgstr "Datoteka ne sadrži zvučnu numeru: „%s“"
 
-#: ../src/mp4_header.cc:79
+#: ../src/mp4_header.c:82
 #, c-format
 msgid "Error reading properties from file: '%s'"
 msgstr "Greška čitanja svojstava iz datoteke: „%s“"
 
-#: ../src/mp4_header.cc:140 ../src/mpeg_header.c:204
+#: ../src/mp4_header.c:132 ../src/mpeg_header.c:204
 #, c-format
 msgid "~%d kb/s"
 msgstr "~%d kb/s"
 
-#: ../src/mp4_tag.cc:101 ../src/mp4_tag.cc:293
+#: ../src/mp4_tag.c:85 ../src/mp4_tag.c:194
 #, c-format
 msgid "Error reading tags from file: '%s'"
 msgstr "Greška čitanja oznaka iz datoteke: „%s“"
@@ -3080,12 +3084,12 @@ msgstr "Greška: Nisam uspeo da otvorim datoteku: „%s“ kao Vorbis (%s)."
 msgid "Warning: The Ogg Vorbis file '%s' contains an ID3v2 tag."
 msgstr "Upozorenje: Ogg Vorbis datoteka „%s“ sadrži ID3v2 oznaku."
 
-#: ../src/ogg_tag.c:1035 ../src/picture.c:1258
+#: ../src/ogg_tag.c:1035 ../src/picture.c:1257
 #, c-format
 msgid "Error with 'loader_write': %s"
 msgstr "Greška sa „učitavač_zapiši“: %s"
 
-#: ../src/ogg_tag.c:1050 ../src/picture.c:1181
+#: ../src/ogg_tag.c:1050 ../src/picture.c:1180
 #, c-format
 msgid "Error with 'loader_close': %s"
 msgstr "Greška sa „učitavač_zatvori“: %s"
@@ -3117,11 +3121,11 @@ msgstr "Datoteka slike je učitana"
 msgid "Add Images"
 msgstr "Dodaj slike"
 
-#: ../src/picture.c:514 ../src/picture.c:875
+#: ../src/picture.c:514 ../src/picture.c:874
 msgid "All Files"
 msgstr "Sve datoteke"
 
-#: ../src/picture.c:520 ../src/picture.c:881
+#: ../src/picture.c:520 ../src/picture.c:880
 msgid "PNG and JPEG"
 msgstr "PNG i JPEG"
 
@@ -3130,129 +3134,129 @@ msgstr "PNG i JPEG"
 msgid "Image Properties %d/%d"
 msgstr "Svojstva slike %d/%d"
 
-#: ../src/picture.c:677
+#: ../src/picture.c:675
 msgid "Image Type"
 msgstr "Vrsta slike"
 
 #. Description of the picture
-#: ../src/picture.c:735
+#: ../src/picture.c:734
 msgid "Image Description:"
 msgstr "Opis slike:"
 
-#: ../src/picture.c:862
+#: ../src/picture.c:861
 #, c-format
 msgid "Save Image %d/%d"
 msgstr "Sačuvaj sliku %d/%d"
 
-#: ../src/picture.c:1022
+#: ../src/picture.c:1021
 msgid "JPEG image"
 msgstr "JPEG slika"
 
-#: ../src/picture.c:1024
+#: ../src/picture.c:1023
 msgid "PNG image"
 msgstr "PNG slika"
 
-#: ../src/picture.c:1026
+#: ../src/picture.c:1025
 msgid "GIF image"
 msgstr "GIF slika"
 
-#: ../src/picture.c:1028
+#: ../src/picture.c:1027
 msgid "Unknown image"
 msgstr "Nepoznata slika"
 
-#: ../src/picture.c:1040
+#: ../src/picture.c:1039
 msgid "32x32 pixel PNG file icon"
 msgstr "PNG ikonica, 32x32 tačkica"
 
-#: ../src/picture.c:1042
+#: ../src/picture.c:1041
 msgid "Other file icon"
 msgstr "Ostale ikonice datoteke"
 
-#: ../src/picture.c:1044
+#: ../src/picture.c:1043
 msgid "Cover (front)"
 msgstr "Omot (lice)"
 
-#: ../src/picture.c:1046
+#: ../src/picture.c:1045
 msgid "Cover (back)"
 msgstr "Omot (poleđina)"
 
-#: ../src/picture.c:1048
+#: ../src/picture.c:1047
 msgid "Leaflet page"
 msgstr "Strana sa letkom"
 
-#: ../src/picture.c:1050
+#: ../src/picture.c:1049
 msgid "Media (e.g. label side of CD)"
 msgstr "Medijum (npr. strana sa natpisom CD-a)"
 
-#: ../src/picture.c:1052
+#: ../src/picture.c:1051
 msgid "Lead artist/lead performer/soloist"
 msgstr "Vodeći umetnik/vodeći izvođač/solista"
 
-#: ../src/picture.c:1054
+#: ../src/picture.c:1053
 msgid "Artist/performer"
 msgstr "Umetnik/Izvođač"
 
-#: ../src/picture.c:1056
+#: ../src/picture.c:1055
 msgid "Conductor"
 msgstr "Dirigent"
 
-#: ../src/picture.c:1058
+#: ../src/picture.c:1057
 msgid "Band/Orchestra"
 msgstr "Bend/Orkestar"
 
-#: ../src/picture.c:1062
+#: ../src/picture.c:1061
 msgid "Lyricist/text writer"
 msgstr "Pisac tekstova"
 
-#: ../src/picture.c:1064
+#: ../src/picture.c:1063
 msgid "Recording location"
 msgstr "Mesto snimanja"
 
-#: ../src/picture.c:1066
+#: ../src/picture.c:1065
 msgid "During recording"
 msgstr "U toku snimanja"
 
-#: ../src/picture.c:1068
+#: ../src/picture.c:1067
 msgid "During performance"
 msgstr "U toku izvođenja"
 
-#: ../src/picture.c:1070
+#: ../src/picture.c:1069
 msgid "Movie/video screen capture"
 msgstr "Film/Video zapis"
 
-#: ../src/picture.c:1072
+#: ../src/picture.c:1071
 msgid "A bright colored fish"
 msgstr "Svetlo obojena riba"
 
-#: ../src/picture.c:1074
+#: ../src/picture.c:1073
 msgid "Illustration"
 msgstr "Ilustracija"
 
-#: ../src/picture.c:1076
+#: ../src/picture.c:1075
 msgid "Band/Artist logotype"
 msgstr "Logo benda/izvođača"
 
-#: ../src/picture.c:1078
+#: ../src/picture.c:1077
 msgid "Publisher/studio logotype"
 msgstr "Logo izdavača/studija"
 
-#: ../src/picture.c:1082
+#: ../src/picture.c:1081
 msgid "Unknown image type"
 msgstr "Nepoznata vrsta slike"
 
-#: ../src/picture.c:1112 ../src/picture.c:1123
+#: ../src/picture.c:1111 ../src/picture.c:1122
 msgid "pixels"
 msgstr "tačkica"
 
-#: ../src/picture.c:1113 ../src/picture.c:1124
+#: ../src/picture.c:1112 ../src/picture.c:1123
 msgid "Type"
 msgstr "Vrsta"
 
-#: ../src/picture.c:1125
+#: ../src/picture.c:1124
 msgid "Description"
 msgstr "Opis"
 
-#: ../src/picture.c:1241
+#: ../src/picture.c:1240
 msgid ""
 "Cannot display the image because not enough data has been read to determine "
 "how to create the image buffer."
@@ -3260,18 +3264,18 @@ msgstr ""
 "Ne mogu da prikažem sliku jer je nedovoljno podataka učitano da bih znao kako "
 "da napravim međumemoriju slike."
 
-#: ../src/picture.c:1248
+#: ../src/picture.c:1247
 msgid "Cannot display the image"
 msgstr "Ne mogu da prikažem sliku"
 
-#: ../src/picture.c:1250
+#: ../src/picture.c:1249
 msgid ""
 "Not enough data has been read to determine how to create the image buffer."
 msgstr ""
 "Nije pročitano dovoljno podataka da bih odredio kako da napravim međumemoriju "
 "slike."
 
-#: ../src/picture.c:1252
+#: ../src/picture.c:1251
 msgid "Load Image File"
 msgstr "Učitaj datoteku slike"
 
@@ -4233,17 +4237,16 @@ msgstr "Ime korisnika za server posrednika."
 msgid "User Password:"
 msgstr "Lozinka:"
 
-#: ../src/prefs.c:1338
-#| msgid "Password of user for the the proxy server."
-msgid "Password of user for the proxy server."
-msgstr "Korisnikča lozinka za posrednički server."
+#: ../src/prefs.c:1337
+msgid "Password of user for the the proxy server."
+msgstr "Lozinka korisnika za server posrednika."
 
 #. Track Name list (CDDB results)
-#: ../src/prefs.c:1343
+#: ../src/prefs.c:1342
 msgid "Track Name List"
 msgstr "Spisak naziva numera"
 
-#: ../src/prefs.c:1350
+#: ../src/prefs.c:1349
 msgid ""
 "Select corresponding audio file (according position or DLM if activated "
 "below)"
@@ -4251,7 +4254,7 @@ msgstr ""
 "Izaberi odgovarajuću audio datoteku (sudeći prema mestu ili DLM-u ukoliko je "
 "aktivirano ispod)"
 
-#: ../src/prefs.c:1354
+#: ../src/prefs.c:1353
 msgid ""
 "If activated, when selecting a line in the list of tracks name, the "
 "corresponding audio file in the main list will be also selected."
@@ -4260,7 +4263,7 @@ msgstr ""
 "audio datoteka u glavnom spisku će takođe biti izabrana."
 
 #. Check box to use DLM (also used in the cddb window)
-#: ../src/prefs.c:1359
+#: ../src/prefs.c:1358
 msgid ""
 "Use the Levenshtein algorithm (DLM) to match lines (using title) with audio "
 "files (using filename)"
@@ -4271,66 +4274,66 @@ msgstr ""
 #.
 #. * Confirmation
 #.
-#: ../src/prefs.c:1374
+#: ../src/prefs.c:1373
 msgid "Confirmation"
 msgstr "Potvrde"
 
-#: ../src/prefs.c:1379
+#: ../src/prefs.c:1378
 msgid "Confirm exit from program"
 msgstr "Potvrdi izlazak iz programa"
 
-#: ../src/prefs.c:1382
+#: ../src/prefs.c:1381
 msgid ""
 "If activated, opens a dialog box to ask confirmation before exiting the "
 "program."
 msgstr ""
 "Ukoliko je aktivirano, otvara se okno za potvrdu pre izlaska iz programa."
 
-#: ../src/prefs.c:1385
+#: ../src/prefs.c:1384
 msgid "Confirm writing of file tag"
 msgstr "Potvrdi upis oznake datoteke"
 
-#: ../src/prefs.c:1389
+#: ../src/prefs.c:1388
 msgid "Confirm renaming of file"
 msgstr "Potvrdi preimenovanje datoteke"
 
-#: ../src/prefs.c:1393
+#: ../src/prefs.c:1392
 msgid "Confirm deleting of file"
 msgstr "Potvrdi brisanje datoteke"
 
-#: ../src/prefs.c:1397
+#: ../src/prefs.c:1396
 msgid "Confirm writing of playlist"
 msgstr "Potvrdi zapisivanje spiska numera"
 
-#: ../src/prefs.c:1401
+#: ../src/prefs.c:1400
 msgid "Confirm changing directory when there are unsaved changes"
 msgstr "Potvrdi promenu direktorijuma kada ima nesačuvanih izmena"
 
 #. For translators : be aware to NOT translate '%.*d' in this string
-#: ../src/prefs.c:1439
+#: ../src/prefs.c:1438
 #, c-format
 msgid "(Example: %.*d_-_Track_name_1.mp3)"
 msgstr "(Primer: %.*d_-_Naziv_numere_1.mp3)"
 
 #. Translators: please do NOT translate '%.*d' in this string.
-#: ../src/prefs.c:1472
+#: ../src/prefs.c:1471
 #, c-format
 msgid "(Example: disc_%.*d_of_10/Track_name_1.mp3)"
 msgstr "(Primer: disk_%.*d_od_10_—_Naziv_numere_1.mp3)"
 
-#: ../src/prefs.c:1614 ../src/setting.c:904
+#: ../src/prefs.c:1613 ../src/setting.c:904
 msgid "Configuration saved"
 msgstr "Postavke su sačuvane"
 
-#: ../src/prefs.c:1622
+#: ../src/prefs.c:1621
 msgid "Configuration unchanged"
 msgstr "Postavke nisu menjane"
 
-#: ../src/prefs.c:1713
+#: ../src/prefs.c:1712
 msgid "The selected path for 'Default path to files' is invalid"
 msgstr "Izabrana putanja za „Osnovna putanja do datoteka“ nije ispravna"
 
-#: ../src/prefs.c:1715
+#: ../src/prefs.c:1714
 #, c-format
 msgid ""
 "Path: '%s'\n"
@@ -4339,94 +4342,94 @@ msgstr ""
 "Putanja: „%s“\n"
 "Greška: %s"
 
-#: ../src/prefs.c:1717
+#: ../src/prefs.c:1716
 msgid "Invalid Path Error"
 msgstr "Greška neispravne putanje"
 
-#: ../src/prefs.c:1831
+#: ../src/prefs.c:1830
 #, c-format
 msgid "The audio file player '%s' cannot be found"
 msgstr "Ne mogu da pronađem program za puštanje zvuka „%s“"
 
-#: ../src/prefs.c:1833
+#: ../src/prefs.c:1832
 msgid "Audio Player Error"
 msgstr "Greška programa za puštanje zvuka"
 
-#: ../src/scan_dialog.c:182
+#: ../src/scan.c:180
 msgid "Fill Tag"
 msgstr "Popuni oznaku"
 
-#: ../src/scan_dialog.c:356
+#: ../src/scan.c:358
 #, c-format
 msgid "Cannot calculate CRC value of file (%s)"
 msgstr "Ne mogu da sračunam CRC vrednost datoteke (%s)"
 
-#: ../src/scan_dialog.c:371
+#: ../src/scan.c:373
 msgid "Tag successfully scanned"
 msgstr "Oznaka je uspešno skenirana"
 
-#: ../src/scan_dialog.c:373
+#: ../src/scan.c:375
 #, c-format
 msgid "Tag successfully scanned: %s"
 msgstr "Oznaka je uspešno skenirana: %s"
 
-#: ../src/scan_dialog.c:414
+#: ../src/scan.c:416
 #, c-format
 msgid "Tag scanner: strange… the extension '%s' was not found in filename '%s'"
 msgstr ""
 "Pregledač oznake: čudno… proširenje „%s“ nije nađeno u nazivu datoteke „%s“"
 
-#: ../src/scan_dialog.c:496 ../src/scan_dialog.c:525
+#: ../src/scan.c:498 ../src/scan.c:527
 #, c-format
 msgid "Scan Error: can't find separator '%s' within '%s'"
 msgstr "Greška pregledača: ne mogu da nađem razdvajač „%s“ u „%s“"
 
-#: ../src/scan_dialog.c:712
+#: ../src/scan.c:714
 msgid "New filename successfully scanned"
 msgstr "Novi naziv datoteke je uspešno skeniran"
 
-#: ../src/scan_dialog.c:715
+#: ../src/scan.c:717
 #, c-format
 msgid "New filename successfully scanned: %s"
 msgstr "Novi naziv datoteke je uspešno skeniran: %s"
 
-#: ../src/scan_dialog.c:1632
+#: ../src/scan.c:1821
 #, c-format
 msgid "Error while processing fields: %s"
 msgstr "Greška prilikom obrade polja: %s"
 
 #. The window
-#: ../src/scan_dialog.c:1802
+#: ../src/scan.c:2328
 msgid "Tag and Filename Scan"
 msgstr "Pregledač oznaka i naziva datoteka"
 
 #. TODO: Set related action to match AM_SCAN_FILES.
-#: ../src/scan_dialog.c:1811
+#: ../src/scan.c:2337
 msgid "Scan Files"
 msgstr "Pregledaj datoteke"
 
 #. Option Menu
-#: ../src/scan_dialog.c:1839
+#: ../src/scan.c:2365
 msgid "Scanner:"
 msgstr "Pregledač:"
 
-#: ../src/scan_dialog.c:1860
+#: ../src/scan.c:2386
 msgid "Select the type of scanner to use"
 msgstr "Izaberi vrstu pregledača za upotrebu"
 
-#: ../src/scan_dialog.c:1869
+#: ../src/scan.c:2395
 msgid "Scanner Preferences"
 msgstr "Postavke pregledača"
 
-#: ../src/scan_dialog.c:1878
+#: ../src/scan.c:2404
 msgid "Show / Hide Masks Editor"
 msgstr "Prikaži / Sakrij uređivač maski"
 
-#: ../src/scan_dialog.c:1888
+#: ../src/scan.c:2414
 msgid "Show / Hide Legend"
 msgstr "Prikaži / Sakrij legendu"
 
-#: ../src/scan_dialog.c:1918
+#: ../src/scan.c:2444
 msgid ""
 "Select or type in a mask using codes (see Legend) to parse filename and "
 "path. Used to fill in tag fields"
@@ -4435,15 +4438,15 @@ msgstr ""
 "datoteke i putanje. Koristi se za popunjavanje polja oznaka."
 
 #. Preview label
-#: ../src/scan_dialog.c:1942
+#: ../src/scan.c:2468
 msgid "Fill tag preview"
 msgstr "Pregled popunjavanja oznake"
 
-#: ../src/scan_dialog.c:1972
+#: ../src/scan.c:2498
 msgid "Prefix mask with current path"
 msgstr "Maska prefiksa sa trenutnom putanjom"
 
-#: ../src/scan_dialog.c:1986
+#: ../src/scan.c:2512
 msgid ""
 "Select or type in a mask using codes (see Legend) to parse tag fields. Used "
 "to rename the file.\n"
@@ -4456,15 +4459,15 @@ msgstr ""
 "suprotnom je relativna prema staroj putanji."
 
 #. Preview label
-#: ../src/scan_dialog.c:2011
+#: ../src/scan.c:2537
 msgid "Rename file preview"
 msgstr "Pregled preimenovanja datoteke"
 
-#: ../src/scan_dialog.c:2030
+#: ../src/scan.c:2556
 msgid "Select fields:"
 msgstr "Izaberi polja:"
 
-#: ../src/scan_dialog.c:2033
+#: ../src/scan.c:2559
 msgid ""
 "The buttons on the right represent the fields which can be processed. Select "
 "those which interest you"
@@ -4473,134 +4476,134 @@ msgstr ""
 "vam trebaju."
 
 #. Advice for Translators: set the first letter of filename translated
-#: ../src/scan_dialog.c:2037
+#: ../src/scan.c:2563
 msgid "F"
 msgstr "D"
 
-#: ../src/scan_dialog.c:2039
+#: ../src/scan.c:2565
 msgid "Process filename field"
 msgstr "Obradite polje naziva datoteke"
 
 #. Advice for Translators: set the first letter of title translated
-#: ../src/scan_dialog.c:2041
+#: ../src/scan.c:2567
 msgid "T"
 msgstr "N"
 
-#: ../src/scan_dialog.c:2042
+#: ../src/scan.c:2568
 msgid "Process title field"
 msgstr "Obradite polje naslova"
 
 #. Advice for Translators: set the first letter of artist translated
-#: ../src/scan_dialog.c:2044
+#: ../src/scan.c:2570
 msgid "Ar"
 msgstr "I"
 
-#: ../src/scan_dialog.c:2045
+#: ../src/scan.c:2571
 msgid "Process file artist field"
 msgstr "Obradite polje izvođača"
 
 #. Advice for Translators: set the first letter of album artist translated
-#: ../src/scan_dialog.c:2047
+#: ../src/scan.c:2573
 msgid "AA"
 msgstr "IA"
 
-#: ../src/scan_dialog.c:2048
+#: ../src/scan.c:2574
 msgid "Process album artist field"
 msgstr "Obradite polje izvođača albuma"
 
 #. Advice for Translators: set the first letter of album translated
-#: ../src/scan_dialog.c:2050
+#: ../src/scan.c:2576
 msgid "Al"
 msgstr "A"
 
-#: ../src/scan_dialog.c:2051
+#: ../src/scan.c:2577
 msgid "Process album field"
 msgstr "Obradite polje albuma"
 
 #. Advice for Translators: set the first letter of genre translated
-#: ../src/scan_dialog.c:2053
+#: ../src/scan.c:2579
 msgid "G"
 msgstr "Ž"
 
-#: ../src/scan_dialog.c:2054
+#: ../src/scan.c:2580
 msgid "Process genre field"
 msgstr "Obradite polje žanra"
 
 #. Advice for Translators: set the first letter of comment translated
-#: ../src/scan_dialog.c:2056
+#: ../src/scan.c:2582
 msgid "Cm"
 msgstr "Np"
 
-#: ../src/scan_dialog.c:2057
+#: ../src/scan.c:2583
 msgid "Process comment field"
 msgstr "Obradite polje komentara"
 
 #. Advice for Translators: set the first letter of composer translated
-#: ../src/scan_dialog.c:2059
+#: ../src/scan.c:2585
 msgid "Cp"
 msgstr "Kp"
 
-#: ../src/scan_dialog.c:2060
+#: ../src/scan.c:2586
 msgid "Process composer field"
 msgstr "Obradite polje kompozitora"
 
 #. Advice for Translators: set the first letter of orig artist translated
-#: ../src/scan_dialog.c:2062
+#: ../src/scan.c:2588
 msgid "O"
 msgstr "O"
 
-#: ../src/scan_dialog.c:2063
+#: ../src/scan.c:2589
 msgid "Process original artist field"
 msgstr "Obradite polje originalnog izvođača"
 
 #. Advice for Translators: set the first letter of copyright translated
-#: ../src/scan_dialog.c:2065
+#: ../src/scan.c:2591
 msgid "Cr"
 msgstr "Ap"
 
-#: ../src/scan_dialog.c:2066
+#: ../src/scan.c:2592
 msgid "Process copyright field"
 msgstr "Obradite polje autorskih prava"
 
 #. Advice for Translators: set the first letter of URL translated
-#: ../src/scan_dialog.c:2068
+#: ../src/scan.c:2594
 msgid "U"
 msgstr "Ad"
 
-#: ../src/scan_dialog.c:2069
+#: ../src/scan.c:2595
 msgid "Process URL field"
 msgstr "Obradite polje adrese"
 
 #. Advice for Translators: set the first letter of encoder name translated
-#: ../src/scan_dialog.c:2071
+#: ../src/scan.c:2597
 msgid "E"
 msgstr "Kd"
 
-#: ../src/scan_dialog.c:2072
+#: ../src/scan.c:2598
 msgid "Process encoder name field"
 msgstr "Obradite polje naziva enkodera"
 
-#: ../src/scan_dialog.c:2116
+#: ../src/scan.c:2642
 msgid "Invert selection"
 msgstr "Preokreni izbor"
 
-#: ../src/scan_dialog.c:2123
+#: ../src/scan.c:2649
 msgid "Select/Unselect all"
 msgstr "Označi/odznači sve"
 
-#: ../src/scan_dialog.c:2138
+#: ../src/scan.c:2664
 msgid "Convert:"
 msgstr "Pretvori:"
 
-#: ../src/scan_dialog.c:2140
+#: ../src/scan.c:2666
 msgid "to: "
 msgstr "u: "
 
-#: ../src/scan_dialog.c:2147
+#: ../src/scan.c:2673
 msgid "Do not convert"
 msgstr "Ne pretvaraj"
 
-#: ../src/scan_dialog.c:2166
+#: ../src/scan.c:2692
 msgid ""
 "The underscore character or the string '%20' are replaced by one space. "
 "Example, before: 'Text%20In%20An_Entry', after: 'Text In An Entry'."
@@ -4608,7 +4611,7 @@ msgstr ""
 "Donje crtice i znak „%20“ između reči će biti zamenjeni razmakom. Na primer "
 "„Tekst%20u%20nekom_polju“ će postati „Tekst u nekom polju“."
 
-#: ../src/scan_dialog.c:2169
+#: ../src/scan.c:2695
 msgid ""
 "The space character is replaced by one underscore character. Example, "
 "before: 'Text In An Entry', after: 'Text_In_An_Entry'."
@@ -4616,38 +4619,38 @@ msgstr ""
 "Razmak između reči biće zamenjen donjom crticom. Na primer „Tekst u nekom "
 "polju“ će postati „Tekst_u_nekom_polju“."
 
-#: ../src/scan_dialog.c:2172
+#: ../src/scan.c:2698
 msgid ""
 "Replace a string by another one. Note that the search is case sensitive."
 msgstr ""
 "Zamenite jednu nisku drugom. Znajte da je pretraga osetljiva na veličinu "
 "slova."
 
-#: ../src/scan_dialog.c:2179
+#: ../src/scan.c:2705
 msgid "Capitalize all"
 msgstr "Sva slova velika"
 
-#: ../src/scan_dialog.c:2181
+#: ../src/scan.c:2707
 msgid "Lowercase all"
 msgstr "Sva slova mala"
 
-#: ../src/scan_dialog.c:2183
+#: ../src/scan.c:2709
 msgid "Capitalize first letter"
 msgstr "Prvo slovo veliko"
 
-#: ../src/scan_dialog.c:2185
+#: ../src/scan.c:2711
 msgid "Capitalize the first letter of each word"
 msgstr "Prvo slovo svake reči veliko"
 
-#: ../src/scan_dialog.c:2186
+#: ../src/scan.c:2712
 msgid "Detect Roman numerals"
 msgstr "Otkrij rimske brojeve"
 
-#: ../src/scan_dialog.c:2188
+#: ../src/scan.c:2714
 msgid "Do not change capitalization"
 msgstr "Ne menjaj veličinu slova"
 
-#: ../src/scan_dialog.c:2210
+#: ../src/scan.c:2736
 msgid ""
 "Convert all words in all fields to upper case. Example, before: 'Text IN AN "
 "entry', after: 'TEXT IN AN ENTRY'."
@@ -4655,7 +4658,7 @@ msgstr ""
 "Sve reči u poljima ispiši velikim slovima. Na primer „Tekst U NEKOM polju“ će "
 "postati „TEKST U NEKOM POLJU“."
 
-#: ../src/scan_dialog.c:2213
+#: ../src/scan.c:2739
 msgid ""
 "Convert all words in all fields to lower case. Example, before: 'TEXT IN an "
 "entry', after: 'text in an entry'."
@@ -4663,7 +4666,7 @@ msgstr ""
 "Sve reči u poljima ispiši malim slovima. Na primer „TEKST U nekom polju“ će "
 "postati „tekst u nekom polju“."
 
-#: ../src/scan_dialog.c:2216
+#: ../src/scan.c:2742
 msgid ""
 "Convert the initial of the first word in all fields to upper case. Example, "
 "before: 'text IN An ENTRY', after: 'Text in an entry'."
@@ -4671,7 +4674,7 @@ msgstr ""
 "Prvo slovo svakog polja promeni u veliko. Na primer „tekst U Nekom POLJU“ će "
 "postati „Tekst u nekom polju“."
 
-#: ../src/scan_dialog.c:2219
+#: ../src/scan.c:2745
 msgid ""
 "Convert the initial of each word in all fields to upper case. Example, "
 "before: 'Text in an ENTRY', after: 'Text In An Entry'."
@@ -4679,7 +4682,7 @@ msgstr ""
 "Svako prvo slovo reči u poljima promeni u veliko. Na primer „Tekst u nekom "
 "POLJU“ će postati „Tekst U Nekom Polju“."
 
-#: ../src/scan_dialog.c:2222
+#: ../src/scan.c:2748
 msgid ""
 "Force to convert to upper case the Roman numerals. Example, before: 'ix. "
 "text in an entry', after: 'IX. Text In An Entry'."
@@ -4687,19 +4690,19 @@ msgstr ""
 "Primorava pretvaranje rimskih brojeva u velika slova. Na primer „ix. tekst u "
 "nekom polju“ će postati „IX. tekst u nekom polju“."
 
-#: ../src/scan_dialog.c:2230
+#: ../src/scan.c:2756
 msgid "Insert a space before uppercase letters"
 msgstr "Ubaci razmak pre velikog slova"
 
-#: ../src/scan_dialog.c:2232
+#: ../src/scan.c:2758
 msgid "Remove duplicate spaces and underscores"
 msgstr "Ukloni duple razmake i donje crtice"
 
-#: ../src/scan_dialog.c:2234
+#: ../src/scan.c:2760
 msgid "Do not change word separators"
 msgstr "Ne menjaj razdvajače reči"
 
-#: ../src/scan_dialog.c:2248
+#: ../src/scan.c:2774
 msgid ""
 "All spaces between words are removed. Example, before: 'Text In An Entry', "
 "after: 'TextInAnEntry'."
@@ -4707,7 +4710,7 @@ msgstr ""
 "Uklanja sve razmake između reči. Na primer „Tekst U Nekom Polju“ će postati "
 "„TekstUNekomPolju“."
 
-#: ../src/scan_dialog.c:2251
+#: ../src/scan.c:2777
 msgid ""
 "A space is inserted before each upper case letter. Example, before: "
 "'TextInAnEntry', after: 'Text In An Entry'."
@@ -4715,7 +4718,7 @@ msgstr ""
 "Dodaje razmak pre svakog velikog slova. Na primer „TekstUNekomPolju“ će "
 "postati „Tekst U Nekom Polju“."
 
-#: ../src/scan_dialog.c:2254
+#: ../src/scan.c:2780
 msgid ""
 "Duplicate spaces and underscores are removed. Example, before: "
 "'Text__In__An   Entry', after: 'Text_In_An Entry'."
@@ -4726,141 +4729,141 @@ msgstr ""
 #.
 #. * Frame to display codes legend
 #.
-#: ../src/scan_dialog.c:2261
+#: ../src/scan.c:2787
 msgid "Legend"
 msgstr "Legenda"
 
-#: ../src/scan_dialog.c:2267
+#: ../src/scan.c:2793
 #, c-format
 msgid "%a: artist"
 msgstr "%a: izvođač"
 
-#: ../src/scan_dialog.c:2270
+#: ../src/scan.c:2796
 msgid "%z: album artist"
 msgstr "%z: izvođač albuma"
 
-#: ../src/scan_dialog.c:2273
+#: ../src/scan.c:2799
 msgid "%b: album"
 msgstr "%b: album"
 
-#: ../src/scan_dialog.c:2276
+#: ../src/scan.c:2802
 #, c-format
 msgid "%c: comment"
 msgstr "%c: komentar"
 
-#: ../src/scan_dialog.c:2279
+#: ../src/scan.c:2805
 #, c-format
 msgid "%p: composer"
 msgstr "%p: kompozitor"
 
-#: ../src/scan_dialog.c:2282
+#: ../src/scan.c:2808
 msgid "%r: copyright"
 msgstr "%r: autorsko pravo"
 
-#: ../src/scan_dialog.c:2285
+#: ../src/scan.c:2811
 #, c-format
 msgid "%d: disc number"
 msgstr "%d: broj CD-a"
 
-#: ../src/scan_dialog.c:2288
+#: ../src/scan.c:2814
 #, c-format
 msgid "%e: encoded by"
 msgstr "%e: kodirano pomoću"
 
-#: ../src/scan_dialog.c:2291
+#: ../src/scan.c:2817
 #, c-format
 msgid "%g: genre"
 msgstr "%g: žanr"
 
-#: ../src/scan_dialog.c:2294
+#: ../src/scan.c:2820
 #, c-format
 msgid "%i: ignored"
 msgstr "%i: zanemareno"
 
-#: ../src/scan_dialog.c:2297
+#: ../src/scan.c:2823
 msgid "%l: number of tracks"
 msgstr "%l: broj numera"
 
-#: ../src/scan_dialog.c:2300
+#: ../src/scan.c:2826
 #, c-format
 msgid "%o: orig. artist"
 msgstr "%o: orig. izvođač"
 
-#: ../src/scan_dialog.c:2303
+#: ../src/scan.c:2829
 #, c-format
 msgid "%n: track"
 msgstr "%n: numera"
 
-#: ../src/scan_dialog.c:2306
+#: ../src/scan.c:2832
 msgid "%t: title"
 msgstr "%t: naslov"
 
-#: ../src/scan_dialog.c:2309
+#: ../src/scan.c:2835
 #, c-format
 msgid "%u: URL"
 msgstr "%u: adresa"
 
-#: ../src/scan_dialog.c:2312
+#: ../src/scan.c:2838
 #, c-format
 msgid "%x: number of discs"
 msgstr "%x: broj diskova"
 
-#: ../src/scan_dialog.c:2315
+#: ../src/scan.c:2841
 msgid "%y: year"
 msgstr "%y: godina"
 
 #.
 #. * Masks Editor
 #.
-#: ../src/scan_dialog.c:2322
+#: ../src/scan.c:2848
 msgid "Mask Editor"
 msgstr "Uređivač maski"
 
-#: ../src/scan_dialog.c:2376
+#: ../src/scan.c:2902
 msgid "Create New Mask"
 msgstr "Napravi novu masku"
 
-#: ../src/scan_dialog.c:2386
+#: ../src/scan.c:2912
 msgid "Move Up this Mask"
 msgstr "Pomeri masku nagore"
 
-#: ../src/scan_dialog.c:2396
+#: ../src/scan.c:2922
 msgid "Move Down this Mask"
 msgstr "Pomeri masku nadole"
 
-#: ../src/scan_dialog.c:2406
+#: ../src/scan.c:2932
 msgid "Duplicate Mask"
 msgstr "Razmnoži masku"
 
-#: ../src/scan_dialog.c:2416
+#: ../src/scan.c:2942
 msgid "Add Default Masks"
 msgstr "Dodaj osnovnu masku"
 
-#: ../src/scan_dialog.c:2426
+#: ../src/scan.c:2952
 msgid "Remove Mask"
 msgstr "Ukloni masku"
 
-#: ../src/scan_dialog.c:2436
+#: ../src/scan.c:2962
 msgid "Save Masks"
 msgstr "Sačuvaj masku"
 
-#: ../src/scan_dialog.c:3016
+#: ../src/scan.c:3542
 msgid "New_mask"
 msgstr "Nova _maska"
 
-#: ../src/scan_dialog.c:3055
+#: ../src/scan.c:3581
 msgid "Copy: No row selected"
 msgstr "Umnoži: Nije izabran red"
 
-#: ../src/scan_dialog.c:3148
+#: ../src/scan.c:3674
 msgid "Remove: No row selected"
 msgstr "Ukloni: Nije izabran red"
 
-#: ../src/scan_dialog.c:3195
+#: ../src/scan.c:3721
 msgid "Move Up: No row selected"
 msgstr "Pomeri gore: Nije izabran red"
 
-#: ../src/scan_dialog.c:3239
+#: ../src/scan.c:3765
 msgid "Move Down: No row selected"
 msgstr "Pomeri dole: Nije izabran red"
 
diff --git a/src/about.c b/src/about.c
index f9ca091..76f5ca8 100644
--- a/src/about.c
+++ b/src/about.c
@@ -26,7 +26,8 @@
 #include "about.h"
 #include "easytag.h"
 
-void Show_About_Window (void)
+void
+et_show_about_dialog (GtkWindow *parent)
 {
     static const gchar * const artists[] =
     {
@@ -83,25 +84,8 @@ void Show_About_Window (void)
                                      "Copyright © 2009–2012 Kip Warner\n"
                                      "Copyright © 2000–2008 Jérôme Couderc";
 
-    const gchar *license;
     const gchar *translators;
 
-    license =  _("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 (at your option) any "
-                 "later version.\n"
-                 "\n"
-                 "This program is distributed in the hope that it will be "
-                 "useful, but WITHOUT ANY WARRANTY; without even the implied "
-                 "warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR "
-                 "PURPOSE.  See the GNU General Public License for more "
-                 "details.\n"
-                 "\n"
-                 "You should have received a copy of the GNU General Public "
-                 "License along with this program. If not, see "
-                 "<http://www.gnu.org/licenses/>.");
-
     /* Translators: put your own name here to appear in the about dialog. */
     translators = _("translator-credits");
 
@@ -110,18 +94,17 @@ void Show_About_Window (void)
         translators = NULL;
     }
 
-    gtk_show_about_dialog (GTK_WINDOW (MainWindow),
+    gtk_show_about_dialog (parent,
                            "artists", artists,
                            "authors", authors,
                            "comments", _("View and edit tags in audio files"),
                            "copyright", copyright,
                            "documenters", documenters,
-                           "license", license,
+                           "license-type", GTK_LICENSE_GPL_2_0,
                            "logo-icon-name", PACKAGE_TARNAME,
                            "program-name", PACKAGE_NAME,
                            "translator-credits", translators,
                            "version", PACKAGE_VERSION,
                            "website", PACKAGE_URL,
-                           "wrap-license", TRUE,
                            NULL);
 }
diff --git a/src/about.h b/src/about.h
index d89d157..97b4be2 100644
--- a/src/about.h
+++ b/src/about.h
@@ -1,33 +1,31 @@
-/* about.h - 2000/05/05 */
-/*
- *  EasyTAG - Tag editor for MP3 and Ogg Vorbis files
- *  Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
+/* EasyTAG - Tag editor for audio files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ * Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
  *
- *  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
- *  (at your option) any later version.
+ * 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
+ * (at your option) any later version.
  *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
  *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
+#ifndef ET_ABOUT_H_
+#define ET_ABOUT_H_
 
-#ifndef __ABOUT_H__
-#define __ABOUT_H__
+#include <gtk/gtk.h>
 
+G_BEGIN_DECLS
 
-/**************
- * Prototypes *
- **************/
+void et_show_about_dialog (GtkWindow *parent);
 
-void Show_About_Window (void);
+G_END_DECLS
 
-
-#endif /* __ABOUT_H__ */
+#endif /* ET_ABOUT_H_ */
diff --git a/src/ape_tag.h b/src/ape_tag.h
deleted file mode 100644
index 9c4dc2d..0000000
--- a/src/ape_tag.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ape_tag.h - 2001/11/08 */
-/*
- *  EasyTAG - Tag editor for MP3, Ogg Vorbis and MPC files
- *  Copyright (C) 2001-2003  Jerome Couderc <easytag at gmail.com>
- *  Copyright (C) 2002-2003  Artur Polaczyñski <artii at o2.pl>
- *
- *  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
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-
-#ifndef __APE_TAG_H__
-#define __APE_TAG_H__
-
-
-#include "et_core.h"
-
-/***************
- * Declaration *
- ***************/
-
-
-/**************
- * Prototypes *
- **************/
-gboolean Ape_Tag_Read_File_Tag  (gchar *filename, File_Tag *FileTag);
-gboolean Ape_Tag_Write_File_Tag (ET_File *ETFile);
-
-#endif /* __APE_TAG_H__ */
diff --git a/src/application.c b/src/application.c
index 8135363..b2bf5c2 100644
--- a/src/application.c
+++ b/src/application.c
@@ -1,5 +1,5 @@
 /* EasyTAG - tag editor for audio files
- * Copyright (C) 2013  David King <amigadave at amigadave.com>
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
  *
  * 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
@@ -19,16 +19,25 @@
 #include "config.h"
 
 #include "application.h"
+
+#include "about.h"
 #include "charset.h"
+#include "easytag.h"
+#include "log.h"
+#include "misc.h"
 
 #include <glib/gi18n.h>
 #include <stdlib.h>
 
-G_DEFINE_TYPE (EtApplication, et_application, G_TYPE_APPLICATION)
+/* TODO: Use G_DEFINE_TYPE_WITH_PRIVATE. */
+G_DEFINE_TYPE (EtApplication, et_application, GTK_TYPE_APPLICATION)
+
+#define et_application_get_instance_private(app) (app->priv)
 
 struct _EtApplicationPrivate
 {
-    GtkWindow *main_window;
+    guint idle_handler;
+    gchar *init_directory;
 };
 
 static const GOptionEntry entries[] =
@@ -38,8 +47,248 @@ static const GOptionEntry entries[] =
     { NULL }
 };
 
+static void
+on_help (GSimpleAction *action,
+         GVariant *parameter,
+         gpointer user_data)
+{
+/* TODO: Link to help.gnome.org, or locally-installed help, on Windows. */
+#ifndef G_OS_WIN32
+    GError *error = NULL;
+
+    gtk_show_uri (gtk_window_get_screen (GTK_WINDOW (MainWindow)),
+                  "help:easytag", GDK_CURRENT_TIME, &error);
+
+    if (error)
+    {
+        g_debug ("Error while opening help: %s", error->message);
+        g_error_free (error);
+    }
+#endif
+}
+
+static void
+on_about (GSimpleAction *action,
+          GVariant *parameter,
+          gpointer user_data)
+{
+    GList *windows;
+
+    windows = gtk_application_get_windows (GTK_APPLICATION (user_data));
+
+    et_show_about_dialog (windows->data);
+}
+
+static void
+on_quit (GSimpleAction *action,
+         GVariant *parameter,
+         gpointer user_data)
+{
+    GList *windows;
+
+    windows = gtk_application_get_windows (GTK_APPLICATION (user_data));
+
+    et_application_window_quit (windows->data);
+}
+
+static const GActionEntry actions[] =
+{
+    { "help", on_help },
+    { "about", on_about },
+    { "quit", on_quit }
+};
+
+/*
+ * Load the default directory when the user interface is completely displayed
+ * to avoid bad visualization effect at startup.
+ */
+static gboolean
+on_idle_init (EtApplication *self)
+{
+    EtApplicationPrivate *priv;
+
+    priv = et_application_get_instance_private (self);
+
+    ET_Core_Free ();
+    ET_Core_Initialize ();
+
+    if (g_settings_get_boolean (MainSettings, "scan-startup"))
+    {
+        g_action_group_activate_action (G_ACTION_GROUP (MainWindow), "scanner",
+                                        NULL);
+    }
+
+    if (priv->init_directory)
+    {
+        et_application_window_select_dir (ET_APPLICATION_WINDOW (MainWindow),
+                                          priv->init_directory);
+    }
+    else
+    {
+        et_application_window_status_bar_message (ET_APPLICATION_WINDOW (MainWindow),
+                                                  _("Select a directory to browse"),
+                                                  FALSE);
+        g_action_group_activate_action (G_ACTION_GROUP (MainWindow),
+                                        "go-default", NULL);
+    }
+
+    /* Set sensitivity of buttons if the default directory is invalid. */
+    et_application_window_update_actions (ET_APPLICATION_WINDOW (MainWindow));
+
+    priv->idle_handler = 0;
+
+    return G_SOURCE_REMOVE;
+}
+
 /*
- * et_local_command_line:
+ * common_init:
+ * @application: the application
+ *
+ * Create and show the main window. Common to all actions which may occur after
+ * startup, such as "activate" and "open".
+ */
+static void
+common_init (EtApplication *self)
+{
+    EtApplicationPrivate *priv;
+    gboolean settings_warning;
+    EtApplicationWindow *window;
+
+    priv = et_application_get_instance_private (self);
+
+    /* Create all config files. */
+    settings_warning = !Setting_Create_Files ();
+
+    /* Load Config */
+    Init_Config_Variables ();
+
+    /* Initialization */
+    ET_Core_Create ();
+    Main_Stop_Button_Pressed = FALSE;
+    Init_Mouse_Cursor ();
+
+    /* The main window */
+    window = et_application_window_new (GTK_APPLICATION (self));
+    MainWindow = GTK_WIDGET (window);
+
+    gtk_widget_show (MainWindow);
+
+    /* Starting messages */
+    Log_Print (LOG_OK, _("Starting EasyTAG version %s…"), PACKAGE_VERSION);
+#ifdef G_OS_WIN32
+    if (g_getenv("EASYTAGLANG"))
+    {
+        Log_Print (LOG_OK,
+                   _("Variable EASYTAGLANG defined, setting locale ‘%s’"),
+                   g_getenv ("EASYTAGLANG"));
+    }
+    else
+    {
+        Log_Print (LOG_OK, _("Setting locale: ‘%s’"), g_getenv ("LANG"));
+    }
+#endif /* G_OS_WIN32 */
+
+    if (get_locale ())
+        Log_Print (LOG_OK,
+                   _("System locale is ‘%s’, using ‘%s’"),
+                   get_locale (), get_encoding_from_locale (get_locale ()));
+
+    if (settings_warning)
+    {
+        Log_Print (LOG_WARNING, _("Unable to create setting directories"));
+    }
+
+    /* Load the default dir when the UI is created and displayed
+     * to the screen and open also the scanner window */
+    priv->idle_handler = g_idle_add ((GSourceFunc)on_idle_init, self);
+    g_source_set_name_by_id (priv->idle_handler, "Init idle function");
+}
+
+/*
+ * check_for_hidden_path_in_tree:
+ * @arg: the path to check
+ *
+ * Recursively check for a hidden path in the directory tree given by @arg. If
+ * a hidden path is found, set browse-show-hidden to TRUE.
+ */
+static void
+check_for_hidden_path_in_tree (GFile *arg)
+{
+    GFile *file = NULL;
+    GFile *parent;
+    GFileInfo *info;
+    GError *err = NULL;
+
+    /* Not really the parent until an iteration through the loop below. */
+    parent = g_file_dup (arg);
+
+    do
+    {
+        info = g_file_query_info (parent,
+                                  G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN,
+                                  G_FILE_QUERY_INFO_NONE, NULL, &err);
+
+        if (info == NULL)
+        {
+            g_message ("Error querying file information (%s)", err->message);
+            g_clear_error (&err);
+
+            if (file)
+            {
+                g_clear_object (&file);
+            }
+            g_object_unref (parent);
+            break;
+        }
+        else
+        {
+            if (g_file_info_get_is_hidden (info))
+            {
+                g_settings_set_boolean (MainSettings, "browse-show-hidden",
+                                        TRUE);
+            }
+        }
+
+        g_object_unref (info);
+
+        if (file)
+        {
+            g_clear_object (&file);
+        }
+
+        file = parent;
+    }
+    while ((parent = g_file_get_parent (file)) != NULL);
+
+    g_clear_object (&file);
+}
+
+/*
+ * et_application_activate:
+ * @application: the application
+ *
+ * Handle the application being activated, which occurs after startup and if
+ * no files are opened.
+ */
+static void
+et_application_activate (GApplication *application)
+{
+    GList *windows;
+
+    windows = gtk_application_get_windows (GTK_APPLICATION (application));
+
+    if (windows != NULL)
+    {
+        gtk_window_present (windows->data);
+    }
+    else
+    {
+        common_init (ET_APPLICATION (application));
+    }
+}
+
+/*
+ * et_application_local_command_line:
  * @application: the application
  * @arguments: pointer to the argument string array
  * @exit_status: pointer to the returned exit status
@@ -50,8 +299,9 @@ static const GOptionEntry entries[] =
  * handled in the local instance
  */
 static gboolean
-et_local_command_line (GApplication *application, gchar **arguments[],
-                       gint *exit_status)
+et_application_local_command_line (GApplication *application,
+                                   gchar **arguments[],
+                                   gint *exit_status)
 {
     GError *error = NULL;
     guint n_args;
@@ -132,39 +382,232 @@ et_local_command_line (GApplication *application, gchar **arguments[],
     return TRUE;
 }
 
+/*
+ * et_application_open:
+ * @application: the application
+ * @files: array of files to open
+ * @n_files: the number of files
+ * @hint: hint of method to open files, currently empty
+ *
+ * Handle the files passed to the primary instance.
+ *
+ * Returns: the exit status to be passed to the calling process
+ */
+static void
+et_application_open (GApplication *self,
+                     GFile **files,
+                     gint n_files,
+                     const gchar *hint)
+{
+    EtApplicationPrivate *priv;
+    GList *windows;
+    gboolean activated;
+    GFile *arg;
+    GFile *parent;
+    GFileInfo *info;
+    GError *err = NULL;
+    GFileType type;
+    gchar *path;
+    gchar *path_utf8;
+
+    priv = et_application_get_instance_private (ET_APPLICATION (self));
+
+    windows = gtk_application_get_windows (GTK_APPLICATION (self));
+    activated = windows ? TRUE : FALSE;
+
+    /* Only take the first file; ignore the rest. */
+    arg = files[0];
+
+    check_for_hidden_path_in_tree (arg);
+
+    path = g_file_get_path (arg);
+    path_utf8 = filename_to_display (path);
+    info = g_file_query_info (arg, G_FILE_ATTRIBUTE_STANDARD_TYPE,
+                              G_FILE_QUERY_INFO_NONE, NULL, &err);
+
+    if (info == NULL)
+    {
+        if (activated)
+        {
+            Log_Print (LOG_ERROR, _("Error while querying information for file ‘%s’: %s"),
+                       path_utf8, err->message);
+
+        }
+        else
+        {
+            g_warning ("Error while querying information for file: '%s' (%s)",
+                       path_utf8, err->message);
+        }
+
+        g_free (path);
+        g_free (path_utf8);
+        g_error_free (err);
+        return;
+    }
+
+    type = g_file_info_get_file_type (info);
+
+    switch (type)
+    {
+        case G_FILE_TYPE_DIRECTORY:
+            if (activated)
+            {
+                et_application_window_select_dir (windows->data, path);
+                g_free (path);
+            }
+            else
+            {
+                priv->init_directory = path;
+            }
+
+            g_free (path_utf8);
+            g_object_unref (info);
+            break;
+        case G_FILE_TYPE_REGULAR:
+            /* When given a file, load the parent directory. */
+            parent = g_file_get_parent (arg);
+
+            if (parent)
+            {
+                g_free (path_utf8);
+                g_free (path);
+
+                if (activated)
+                {
+                    gchar *parent_path;
+
+                    parent_path = g_file_get_path (arg);
+                    et_application_window_select_dir (windows->data,
+                                                      parent_path);
+
+                    g_free (parent_path);
+                }
+                else
+                {
+                    priv->init_directory = g_file_get_path (parent);
+                }
+
+                g_object_unref (parent);
+                g_object_unref (info);
+                break;
+            }
+            /* Fall through on error. */
+        default:
+            Log_Print (LOG_WARNING, _("Cannot open path ‘%s’"), path_utf8);
+            g_free (path);
+            g_free (path_utf8);
+            return;
+            break;
+    }
+
+    if (!activated)
+    {
+        common_init (ET_APPLICATION (self));
+    }
+}
+
+/*
+ * et_application_shutdown:
+ * @application: the application
+ * @user_data: user data set when the signal handler was connected
+ *
+ * Handle the application being shutdown, which occurs after the main loop has
+ * exited and before returning from g_application_run().
+ */
+static void
+et_application_shutdown (GApplication *application)
+{
+    Charset_Insert_Locales_Destroy ();
+
+    G_APPLICATION_CLASS (et_application_parent_class)->shutdown (application);
+}
+
 static void
 et_application_startup (GApplication *application)
 {
-    Charset_Insert_Locales_Init ();
+    GtkBuilder *builder;
+    GError *error = NULL;
+    GMenuModel *appmenu;
+    GMenuModel *menubar;
 
-    /* TODO: Remove gtk_init() when porting to GtkApplication. */
-    gtk_init (NULL, NULL);
+    g_action_map_add_action_entries (G_ACTION_MAP (application), actions,
+                                     G_N_ELEMENTS (actions), application);
 
     G_APPLICATION_CLASS (et_application_parent_class)->startup (application);
+
+    builder = gtk_builder_new ();
+    gtk_builder_add_from_resource (builder, "/org/gnome/EasyTAG/menus.ui",
+                                   &error);
+
+    if (error != NULL)
+    {
+        g_error ("Unable to get app menu from resource: %s", error->message);
+    }
+
+    appmenu = G_MENU_MODEL (gtk_builder_get_object (builder, "app-menu"));
+    gtk_application_set_app_menu (GTK_APPLICATION (application), appmenu);
+
+    menubar = G_MENU_MODEL (gtk_builder_get_object (builder, "menubar"));
+    gtk_application_set_menubar (GTK_APPLICATION (application), menubar);
+
+    g_object_unref (builder);
+
+    Charset_Insert_Locales_Init ();
+}
+
+static void
+et_application_dispose (GObject *object)
+{
+    EtApplication *self;
+    EtApplicationPrivate *priv;
+
+    self = ET_APPLICATION (object);
+    priv = et_application_get_instance_private (self);
+
+    if (priv->idle_handler)
+    {
+        g_source_remove (priv->idle_handler);
+        priv->idle_handler = 0;
+    }
 }
 
 static void
 et_application_finalize (GObject *object)
 {
+    EtApplication *self;
+    EtApplicationPrivate *priv;
+
+    self = ET_APPLICATION (object);
+    priv = et_application_get_instance_private (self);
+
+    g_free (priv->init_directory);
+
     G_OBJECT_CLASS (et_application_parent_class)->finalize (object);
 }
 
 static void
-et_application_init (EtApplication *application)
+et_application_init (EtApplication *self)
 {
-    application->priv = G_TYPE_INSTANCE_GET_PRIVATE (application,
-                                                     ET_TYPE_APPLICATION,
-                                                     EtApplicationPrivate);
-
-    application->priv->main_window = NULL;
+    self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, ET_TYPE_APPLICATION,
+                                              EtApplicationPrivate);
 }
 
 static void
 et_application_class_init (EtApplicationClass *klass)
 {
-    G_OBJECT_CLASS (klass)->finalize = et_application_finalize;
-    G_APPLICATION_CLASS (klass)->local_command_line = et_local_command_line;
-    G_APPLICATION_CLASS (klass)->startup = et_application_startup;
+    GObjectClass *gobject_class;
+    GApplicationClass *gapplication_class;
+
+    gobject_class = G_OBJECT_CLASS (klass);
+    gapplication_class = G_APPLICATION_CLASS (klass);
+
+    gobject_class->dispose = et_application_dispose;
+    gobject_class->finalize = et_application_finalize;
+    gapplication_class->activate = et_application_activate;
+    gapplication_class->local_command_line = et_application_local_command_line;
+    gapplication_class->open = et_application_open;
+    gapplication_class->shutdown = et_application_shutdown;
+    gapplication_class->startup = et_application_startup;
 
     g_type_class_add_private (klass, sizeof (EtApplicationPrivate));
 }
@@ -179,39 +622,7 @@ et_application_class_init (EtApplicationClass *klass)
 EtApplication *
 et_application_new ()
 {
-    return g_object_new (et_application_get_type (), "application-id",
+    return g_object_new (ET_TYPE_APPLICATION, "application-id",
                          "org.gnome.EasyTAG", "flags",
                          G_APPLICATION_HANDLES_OPEN, NULL);
 }
-
-/*
- * et_application_get_window:
- * @application: the application
- *
- * Get the current application window.
- *
- * Returns: the current application window, or %NULL if no window is set
- */
-GtkWindow *
-et_application_get_window (EtApplication *application)
-{
-    g_return_val_if_fail (ET_APPLICATION (application), NULL);
-
-    return application->priv->main_window;
-}
-
-/*
- * et_application_set_window:
- * @application: the application
- * @window: the window to set
- *
- * Set the application window, if none has been set already.
- */
-void
-et_application_set_window (EtApplication *application, GtkWindow *window)
-{
-    g_return_if_fail (ET_APPLICATION (application) || GTK_WINDOW (window)
-                      || application->priv->main_window != NULL);
-
-    application->priv->main_window = window;
-}
diff --git a/src/application.h b/src/application.h
index c3a1858..5195907 100644
--- a/src/application.h
+++ b/src/application.h
@@ -1,5 +1,5 @@
 /* EasyTAG - tag editor for audio files
- * Copyright (C) 2013  David King <amigadave at amigadave.com>
+ * Copyright (C) 2013,2014  David King <amigadave at amigadave.com>
  *
  * 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
@@ -22,6 +22,8 @@
 #include <gio/gio.h>
 #include <gtk/gtk.h>
 
+#include "application_window.h"
+
 G_BEGIN_DECLS
 
 #define ET_TYPE_APPLICATION (et_application_get_type ())
@@ -34,20 +36,18 @@ typedef struct _EtApplicationPrivate EtApplicationPrivate;
 struct _EtApplication
 {
     /*< private >*/
-    GApplication parent_instance;
+    GtkApplication parent_instance;
     EtApplicationPrivate *priv;
 };
 
 struct _EtApplicationClass
 {
     /*< private >*/
-    GApplicationClass parent_class;
+    GtkApplicationClass parent_class;
 };
 
 GType et_application_get_type (void);
 EtApplication *et_application_new (void);
-GtkWindow *et_application_get_window (EtApplication *application);
-void et_application_set_window (EtApplication *application, GtkWindow *window);
 
 G_END_DECLS
 
diff --git a/src/application_window.c b/src/application_window.c
new file mode 100644
index 0000000..481e18f
--- /dev/null
+++ b/src/application_window.c
@@ -0,0 +1,2655 @@
+/* EasyTAG - tag editor for audio files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ *
+ * 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 (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+#include "config.h"
+
+#include "application_window.h"
+
+#include <gdk/gdkkeysyms.h>
+#include <glib/gi18n.h>
+
+#include "browser.h"
+#include "cddb_dialog.h"
+#include "easytag.h"
+#include "file_area.h"
+#include "load_files_dialog.h"
+#include "log.h"
+#include "misc.h"
+#include "picture.h"
+#include "playlist_dialog.h"
+#include "preferences_dialog.h"
+#include "progress_bar.h"
+#include "search_dialog.h"
+#include "scan.h"
+#include "scan_dialog.h"
+#include "setting.h"
+#include "status_bar.h"
+#include "tag_area.h"
+
+/* TODO: Use G_DEFINE_TYPE_WITH_PRIVATE. */
+G_DEFINE_TYPE (EtApplicationWindow, et_application_window, GTK_TYPE_APPLICATION_WINDOW)
+
+#define et_application_window_get_instance_private(window) (window->priv)
+
+struct _EtApplicationWindowPrivate
+{
+    GtkWidget *browser;
+
+    GtkWidget *file_area;
+    GtkWidget *log_area;
+    GtkWidget *tag_area;
+    GtkWidget *progress_bar;
+    GtkWidget *status_bar;
+
+    GtkWidget *cddb_dialog;
+    GtkWidget *load_files_dialog;
+    GtkWidget *playlist_dialog;
+    GtkWidget *preferences_dialog;
+    GtkWidget *scan_dialog;
+    GtkWidget *search_dialog;
+
+    GtkWidget *hpaned;
+    GtkWidget *vpaned;
+
+    gboolean is_maximized;
+    gint height;
+    gint width;
+};
+
+/* Used to force to hide the msgbox when deleting file */
+static gboolean SF_HideMsgbox_Delete_File;
+/* To remember which button was pressed when deleting file */
+static gint SF_ButtonPressed_Delete_File;
+
+static gboolean
+on_main_window_delete_event (GtkWidget *window,
+                             GdkEvent *event,
+                             gpointer user_data)
+{
+    et_application_window_quit (ET_APPLICATION_WINDOW (window));
+
+    /* Handled the event, so stop propagation. */
+    return GDK_EVENT_STOP;
+}
+
+static void
+save_state (EtApplicationWindow *self)
+{
+    EtApplicationWindowPrivate *priv;
+    gchar *path;
+    GKeyFile *keyfile;
+    gchar *buffer;
+    gsize length;
+    GError *error = NULL;
+
+    priv = et_application_window_get_instance_private (self);
+    keyfile = g_key_file_new ();
+    path = g_build_filename (g_get_user_cache_dir (), PACKAGE_TARNAME,
+                             "state", NULL);
+
+    /* Try to preserve comments by loading an existing keyfile. */
+    if (!g_key_file_load_from_file (keyfile, path, G_KEY_FILE_KEEP_COMMENTS,
+                                    &error))
+    {
+        g_debug ("Error loading window state during saving: %s",
+                 error->message);
+        g_clear_error (&error);
+    }
+
+    g_key_file_set_integer (keyfile, "EtApplicationWindow", "width",
+                            priv->width);
+    g_key_file_set_integer (keyfile, "EtApplicationWindow", "height",
+                            priv->height);
+    g_key_file_set_boolean (keyfile, "EtApplicationWindow", "is_maximized",
+                            priv->is_maximized);
+
+    /* TODO; Use g_key_file_save_to_file() in GLib 2.40. */
+    buffer = g_key_file_to_data (keyfile, &length, NULL);
+
+    if (!g_file_set_contents (path, buffer, length, &error))
+    {
+        g_warning ("Error saving window state: %s", error->message);
+        g_error_free (error);
+    }
+
+    g_free (buffer);
+    g_free (path);
+    g_key_file_free (keyfile);
+}
+
+static void
+restore_state (EtApplicationWindow *self)
+{
+    EtApplicationWindowPrivate *priv;
+    GtkWindow *window;
+    GKeyFile *keyfile;
+    gchar *path;
+    GError *error = NULL;
+
+    priv = et_application_window_get_instance_private (self);
+    window = GTK_WINDOW (self);
+
+    keyfile = g_key_file_new ();
+    path = g_build_filename (g_get_user_cache_dir (), PACKAGE_TARNAME,
+                             "state", NULL);
+
+    if (!g_key_file_load_from_file (keyfile, path, G_KEY_FILE_KEEP_COMMENTS,
+                                    &error))
+    {
+        g_debug ("Error loading window state: %s", error->message);
+        g_error_free (error);
+        g_key_file_free (keyfile);
+        g_free (path);
+        return;
+    }
+
+    g_free (path);
+
+    /* Ignore errors, as the default values are fine. */
+    priv->width = g_key_file_get_integer (keyfile, "EtApplicationWindow",
+                                          "width", NULL);
+    priv->height = g_key_file_get_integer (keyfile, "EtApplicationWindow",
+                                           "height", NULL);
+    priv->is_maximized = g_key_file_get_boolean (keyfile,
+                                                 "EtApplicationWindow",
+                                                 "is_maximized", NULL);
+
+    gtk_window_set_default_size (window, priv->width, priv->height);
+
+    if (priv->is_maximized)
+    {
+        gtk_window_maximize (window);
+    }
+
+    g_key_file_free (keyfile);
+}
+
+static gboolean
+on_configure_event (GtkWidget *window,
+                    GdkEvent *event,
+                    gpointer user_data)
+{
+    EtApplicationWindow *self;
+    EtApplicationWindowPrivate *priv;
+    GdkEventConfigure *configure_event;
+
+    self = ET_APPLICATION_WINDOW (window);
+    priv = et_application_window_get_instance_private (self);
+    configure_event = (GdkEventConfigure *)event;
+
+    if (!priv->is_maximized)
+    {
+        priv->width = configure_event->width;
+        priv->height = configure_event->height;
+    }
+
+    return GDK_EVENT_PROPAGATE;
+}
+
+static gboolean
+on_window_state_event (GtkWidget *window,
+                       GdkEvent *event,
+                       gpointer user_data)
+{
+    EtApplicationWindow *self;
+    EtApplicationWindowPrivate *priv;
+    GdkEventWindowState *state_event;
+
+    self = ET_APPLICATION_WINDOW (window);
+    priv = et_application_window_get_instance_private (self);
+    state_event = (GdkEventWindowState *)event;
+
+    if (state_event->changed_mask & GDK_WINDOW_STATE_MAXIMIZED)
+    {
+        priv->is_maximized = (state_event->new_window_state & GDK_WINDOW_STATE_MAXIMIZED) != 0;
+    }
+
+    return GDK_EVENT_PROPAGATE;
+}
+
+File_Tag *
+et_application_window_tag_area_create_file_tag (EtApplicationWindow *self)
+{
+    EtApplicationWindowPrivate *priv;
+
+    g_return_val_if_fail (ET_APPLICATION_WINDOW (self), NULL);
+
+    priv = et_application_window_get_instance_private (self);
+
+    return et_tag_area_create_file_tag (ET_TAG_AREA (priv->tag_area));
+}
+
+gboolean
+et_application_window_tag_area_display_et_file (EtApplicationWindow *self,
+                                                const ET_File *ETFile)
+{
+    EtApplicationWindowPrivate *priv;
+
+    g_return_val_if_fail (ET_APPLICATION_WINDOW (self), FALSE);
+
+    priv = et_application_window_get_instance_private (self);
+
+    return et_tag_area_display_et_file (ET_TAG_AREA (priv->tag_area), ETFile);
+}
+
+/* Clear the entries of tag area. */
+void
+et_application_window_tag_area_clear (EtApplicationWindow *self)
+{
+    EtApplicationWindowPrivate *priv;
+
+    g_return_if_fail (ET_APPLICATION_WINDOW (self));
+
+    priv = et_application_window_get_instance_private (self);
+
+    et_tag_area_clear (ET_TAG_AREA (priv->tag_area));
+}
+
+static void
+et_application_window_show_cddb_dialog (EtApplicationWindow *self)
+{
+    EtApplicationWindowPrivate *priv;
+
+    priv = et_application_window_get_instance_private (self);
+
+    if (priv->cddb_dialog)
+    {
+        gtk_widget_show (priv->cddb_dialog);
+    }
+    else
+    {
+        priv->cddb_dialog = GTK_WIDGET (et_cddb_dialog_new ());
+        gtk_widget_show_all (priv->cddb_dialog);
+    }
+}
+
+/*
+ * Delete the file ETFile
+ */
+static gint
+delete_file (ET_File *ETFile, gboolean multiple_files, GError **error)
+{
+    GtkWidget *msgdialog;
+    GtkWidget *msgdialog_check_button = NULL;
+    gchar *cur_filename;
+    gchar *cur_filename_utf8;
+    gchar *basename_utf8;
+    gint response;
+    gint stop_loop;
+
+    g_return_val_if_fail (ETFile != NULL, FALSE);
+    g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+    /* Filename of the file to delete. */
+    cur_filename      = ((File_Name *)(ETFile->FileNameCur)->data)->value;
+    cur_filename_utf8 = ((File_Name *)(ETFile->FileNameCur)->data)->value_utf8;
+    basename_utf8 = g_path_get_basename (cur_filename_utf8);
+
+    /*
+     * Remove the file
+     */
+    if (g_settings_get_boolean (MainSettings, "confirm-delete-file")
+        && !SF_HideMsgbox_Delete_File)
+    {
+        if (multiple_files)
+        {
+            GtkWidget *message_area;
+            msgdialog = gtk_message_dialog_new(GTK_WINDOW(MainWindow),
+                                               GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+                                               GTK_MESSAGE_QUESTION,
+                                               GTK_BUTTONS_NONE,
+                                               _("Do you really want to delete the file ‘%s’?"),
+                                               basename_utf8);
+            message_area = gtk_message_dialog_get_message_area(GTK_MESSAGE_DIALOG(msgdialog));
+            msgdialog_check_button = gtk_check_button_new_with_label(_("Repeat action for the remaining files"));
+            gtk_container_add(GTK_CONTAINER(message_area),msgdialog_check_button);
+            gtk_dialog_add_buttons (GTK_DIALOG (msgdialog), _("_Skip"),
+                                    GTK_RESPONSE_NO, _("_Cancel"),
+                                    GTK_RESPONSE_CANCEL, _("_Delete"),
+                                    GTK_RESPONSE_YES, NULL);
+            gtk_window_set_title(GTK_WINDOW(msgdialog),_("Delete File"));
+            //GTK_TOGGLE_BUTTON(msgbox_check_button)->active = TRUE; // Checked by default
+        }else
+        {
+            msgdialog = gtk_message_dialog_new(GTK_WINDOW(MainWindow),
+                                               GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+                                               GTK_MESSAGE_QUESTION,
+                                               GTK_BUTTONS_NONE,
+                                               _("Do you really want to delete the file ‘%s’?"),
+                                               basename_utf8);
+            gtk_window_set_title(GTK_WINDOW(msgdialog),_("Delete File"));
+            gtk_dialog_add_buttons (GTK_DIALOG (msgdialog), _("_Cancel"),
+                                    GTK_RESPONSE_NO, _("_Delete"),
+                                    GTK_RESPONSE_YES, NULL);
+        }
+        gtk_dialog_set_default_response (GTK_DIALOG (msgdialog),
+                                         GTK_RESPONSE_YES);
+        SF_ButtonPressed_Delete_File = response = gtk_dialog_run(GTK_DIALOG(msgdialog));
+        if (msgdialog_check_button && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(msgdialog_check_button)))
+            SF_HideMsgbox_Delete_File = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(msgdialog_check_button));
+        gtk_widget_destroy(msgdialog);
+    }else
+    {
+        if (SF_HideMsgbox_Delete_File)
+            response = SF_ButtonPressed_Delete_File;
+        else
+            response = GTK_RESPONSE_YES;
+    }
+
+    switch (response)
+    {
+        case GTK_RESPONSE_YES:
+        {
+            GFile *cur_file = g_file_new_for_path (cur_filename);
+
+            if (g_file_delete (cur_file, NULL, error))
+            {
+                gchar *msg = g_strdup_printf(_("File ‘%s’ deleted"), basename_utf8);
+                et_application_window_status_bar_message (ET_APPLICATION_WINDOW (MainWindow),
+                                                          msg, FALSE);
+                g_free(msg);
+                g_free(basename_utf8);
+                g_object_unref (cur_file);
+                g_assert (error == NULL || *error == NULL);
+                return 1;
+            }
+
+            /* Error in deleting file. */
+            g_assert (error == NULL || *error != NULL);
+            break;
+        }
+        case GTK_RESPONSE_NO:
+            break;
+        case GTK_RESPONSE_CANCEL:
+        case GTK_RESPONSE_DELETE_EVENT:
+            stop_loop = -1;
+            g_free(basename_utf8);
+            return stop_loop;
+            break;
+        default:
+            g_assert_not_reached ();
+            break;
+    }
+
+    g_free(basename_utf8);
+    return 0;
+}
+
+static void
+on_open_with (GSimpleAction *action,
+              GVariant *variant,
+              gpointer user_data)
+{
+    EtApplicationWindowPrivate *priv;
+    EtApplicationWindow *self = ET_APPLICATION_WINDOW (user_data);
+
+    priv = et_application_window_get_instance_private (self);
+
+    et_browser_show_open_files_with_dialog (ET_BROWSER (priv->browser));
+}
+
+static void
+on_run_player (GSimpleAction *action,
+               GVariant *variant,
+               gpointer user_data)
+{
+    EtApplicationWindowPrivate *priv;
+    EtApplicationWindow *self = ET_APPLICATION_WINDOW (user_data);
+
+    priv = et_application_window_get_instance_private (self);
+
+    et_browser_run_player_for_selection (ET_BROWSER (priv->browser));
+}
+
+static void
+on_invert_selection (GSimpleAction *action,
+                     GVariant *variant,
+                     gpointer user_data)
+{
+    EtApplicationWindowPrivate *priv;
+    EtApplicationWindow *self = ET_APPLICATION_WINDOW (user_data);
+
+    priv = et_application_window_get_instance_private (self);
+
+    /* Save the current displayed data */
+    ET_Save_File_Data_From_UI (ETCore->ETFileDisplayed);
+
+    et_browser_invert_selection (ET_BROWSER (priv->browser));
+    et_application_window_update_actions (self);
+}
+
+static void
+on_delete (GSimpleAction *action,
+           GVariant *variant,
+           gpointer user_data)
+{
+    EtApplicationWindow *self;
+    EtApplicationWindowPrivate *priv;
+    GList *selfilelist;
+    GList *rowreflist = NULL;
+    GList *l;
+    gint   progress_bar_index;
+    gint   saving_answer;
+    gint   nb_files_to_delete;
+    gint   nb_files_deleted = 0;
+    gchar *msg;
+    gchar progress_bar_text[30];
+    double fraction;
+    GtkTreeModel *treemodel;
+    GtkTreeRowReference *rowref;
+    GtkTreeSelection *selection;
+    GError *error = NULL;
+
+    g_return_if_fail (ETCore->ETFileDisplayedList != NULL);
+
+    self = ET_APPLICATION_WINDOW (user_data);
+    priv = et_application_window_get_instance_private (self);
+
+    /* Save the current displayed data */
+    ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
+
+    /* Number of files to save */
+    selection = et_application_window_browser_get_selection (self);
+    nb_files_to_delete = gtk_tree_selection_count_selected_rows (selection);
+
+    /* Initialize status bar */
+    et_application_window_progress_set_fraction (self, 0.0);
+    progress_bar_index = 0;
+    g_snprintf(progress_bar_text, 30, "%d/%d", progress_bar_index, nb_files_to_delete);
+    et_application_window_progress_set_text (self, progress_bar_text);
+
+    /* Set to unsensitive all command buttons (except Quit button) */
+    et_application_window_disable_command_actions (self);
+    et_application_window_browser_set_sensitive (self, FALSE);
+    et_application_window_tag_area_set_sensitive (self, FALSE);
+    et_application_window_file_area_set_sensitive (self, FALSE);
+
+    /* Show msgbox (if needed) to ask confirmation */
+    SF_HideMsgbox_Delete_File = 0;
+
+    selfilelist = gtk_tree_selection_get_selected_rows (selection, &treemodel);
+
+    for (l = selfilelist; l != NULL; l = g_list_next (l))
+    {
+        rowref = gtk_tree_row_reference_new (treemodel, l->data);
+        rowreflist = g_list_prepend (rowreflist, rowref);
+    }
+
+    g_list_free_full (selfilelist, (GDestroyNotify)gtk_tree_path_free);
+    rowreflist = g_list_reverse (rowreflist);
+
+    for (l = rowreflist; l != NULL; l = g_list_next (l))
+    {
+        GtkTreePath *path;
+        ET_File *ETFile;
+
+        path = gtk_tree_row_reference_get_path (l->data);
+        ETFile = et_browser_get_et_file_from_path (ET_BROWSER (priv->browser),
+                                                   path);
+        gtk_tree_path_free (path);
+
+        ET_Display_File_Data_To_UI(ETFile);
+        et_application_window_browser_select_file_by_et_file (self, ETFile,
+                                                              FALSE);
+        fraction = (++progress_bar_index) / (double) nb_files_to_delete;
+        et_application_window_progress_set_fraction (self, fraction);
+        g_snprintf (progress_bar_text, 30, "%d/%d", progress_bar_index,
+                    nb_files_to_delete);
+        et_application_window_progress_set_text (self, progress_bar_text);
+        /* FIXME: Needed to refresh status bar */
+        while (gtk_events_pending ())
+        {
+            gtk_main_iteration ();
+        }
+
+        saving_answer = delete_file (ETFile,
+                                     nb_files_to_delete > 1 ? TRUE : FALSE,
+                                     &error);
+
+        switch (saving_answer)
+        {
+            case 1:
+                nb_files_deleted += saving_answer;
+                /* Remove file in the browser (corresponding line in the
+                 * clist). */
+                et_browser_remove_file (ET_BROWSER (priv->browser), ETFile);
+                /* Remove file from file list. */
+                ET_Remove_File_From_File_List (ETFile);
+                break;
+            case 0:
+                /* Distinguish between the file being skipped, and there being
+                 * an error during deletion. */
+                if (error)
+                {
+                    Log_Print (LOG_ERROR, _("Cannot delete file ‘%s’"),
+                               error->message);
+                    g_clear_error (&error);
+                }
+                break;
+            case -1:
+                /* Stop deleting files + reinit progress bar. */
+                et_application_window_progress_set_fraction (self, 0.0);
+                /* To update state of command buttons. */
+                et_application_window_update_actions (self);
+                et_application_window_browser_set_sensitive (self, TRUE);
+                et_application_window_tag_area_set_sensitive (self, TRUE);
+                et_application_window_file_area_set_sensitive (self, TRUE);
+
+                return; /*We stop all actions. */
+        }
+    }
+
+    g_list_free_full (rowreflist, (GDestroyNotify)gtk_tree_row_reference_free);
+
+    if (nb_files_deleted < nb_files_to_delete)
+        msg = g_strdup (_("Some files were not deleted"));
+    else
+        msg = g_strdup (_("All files have been deleted"));
+
+    /* It's important to displayed the new item, as it'll check the changes in et_browser_toggle_display_mode. */
+    if (ETCore->ETFileDisplayed)
+        ET_Display_File_Data_To_UI(ETCore->ETFileDisplayed);
+    /*else if (ET_Displayed_File_List_Current())
+        ET_Display_File_Data_To_UI((ET_File *)ET_Displayed_File_List_Current()->data);*/
+
+    /* Load list... */
+    et_browser_load_file_list (ET_BROWSER (priv->browser),
+                               ETCore->ETFileDisplayedList, NULL);
+    /* Rebuild the list... */
+    /*et_browser_toggle_display_mode (ET_BROWSER (priv->browser));*/
+
+    /* To update state of command buttons */
+    et_application_window_update_actions (self);
+    et_application_window_browser_set_sensitive (self, TRUE);
+    et_application_window_tag_area_set_sensitive (self, TRUE);
+    et_application_window_file_area_set_sensitive (self, TRUE);
+
+    et_application_window_progress_set_text (self, "");
+    et_application_window_progress_set_fraction (self, 0.0);
+    et_application_window_status_bar_message (self, msg, TRUE);
+    g_free (msg);
+
+    return;
+}
+
+static void
+on_undo_file_changes (GSimpleAction *action,
+                      GVariant *variant,
+                      gpointer user_data)
+{
+    EtApplicationWindow *self;
+    EtApplicationWindowPrivate *priv;
+    GList *selfilelist = NULL;
+    GList *l;
+    gboolean state = FALSE;
+    ET_File *etfile;
+    GtkTreeSelection *selection;
+
+    g_return_if_fail (ETCore->ETFileDisplayedList != NULL);
+
+    self = ET_APPLICATION_WINDOW (user_data);
+    priv = et_application_window_get_instance_private (self);
+
+    /* Save the current displayed data */
+    ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
+
+    selection = et_application_window_browser_get_selection (self);
+    selfilelist = gtk_tree_selection_get_selected_rows(selection, NULL);
+
+    for (l = selfilelist; l != NULL; l = g_list_next (l))
+    {
+        etfile = et_browser_get_et_file_from_path (ET_BROWSER (priv->browser),
+                                                   l->data);
+        state |= ET_Undo_File_Data(etfile);
+    }
+
+    g_list_free_full (selfilelist, (GDestroyNotify)gtk_tree_path_free);
+
+    /* Refresh the whole list (faster than file by file) to show changes. */
+    et_application_window_browser_refresh_list (self);
+
+    /* Display the current file */
+    ET_Display_File_Data_To_UI(ETCore->ETFileDisplayed);
+    et_application_window_update_actions (self);
+
+    //ET_Debug_Print_File_List(ETCore->ETFileList,__FILE__,__LINE__,__FUNCTION__);
+}
+
+static void
+on_redo_file_changes (GSimpleAction *action,
+                      GVariant *variant,
+                      gpointer user_data)
+{
+    EtApplicationWindow *self;
+    EtApplicationWindowPrivate *priv;
+    GList *selfilelist = NULL;
+    GList *l;
+    gboolean state = FALSE;
+    ET_File *etfile;
+    GtkTreeSelection *selection;
+
+    g_return_if_fail (ETCore->ETFileDisplayedList != NULL);
+
+    self = ET_APPLICATION_WINDOW (user_data);
+    priv = et_application_window_get_instance_private (self);
+
+    /* Save the current displayed data */
+    ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
+
+    selection = et_application_window_browser_get_selection (ET_APPLICATION_WINDOW (user_data));
+    selfilelist = gtk_tree_selection_get_selected_rows(selection, NULL);
+
+    for (l = selfilelist; l != NULL; l = g_list_next (l))
+    {
+        etfile = et_browser_get_et_file_from_path (ET_BROWSER (priv->browser),
+                                                   l->data);
+        state |= ET_Redo_File_Data(etfile);
+    }
+
+    g_list_free_full (selfilelist, (GDestroyNotify)gtk_tree_path_free);
+
+    /* Refresh the whole list (faster than file by file) to show changes. */
+    et_application_window_browser_refresh_list (ET_APPLICATION_WINDOW (user_data));
+
+    /* Display the current file */
+    ET_Display_File_Data_To_UI(ETCore->ETFileDisplayed);
+    et_application_window_update_actions (self);
+}
+
+static void
+on_save (GSimpleAction *action,
+         GVariant *variant,
+         gpointer user_data)
+{
+    Action_Save_Selected_Files ();
+}
+
+static void
+on_save_force (GSimpleAction *action,
+               GVariant *variant,
+               gpointer user_data)
+{
+    Action_Force_Saving_Selected_Files ();
+}
+
+static void
+on_find (GSimpleAction *action,
+         GVariant *variant,
+         gpointer user_data)
+{
+    EtApplicationWindow *self;
+    EtApplicationWindowPrivate *priv;
+
+    self = ET_APPLICATION_WINDOW (user_data);
+    priv = et_application_window_get_instance_private (self);
+
+    if (priv->search_dialog)
+    {
+        gtk_widget_show (priv->search_dialog);
+    }
+    else
+    {
+        priv->search_dialog = GTK_WIDGET (et_search_dialog_new (GTK_WINDOW (self)));
+        gtk_widget_show_all (priv->search_dialog);
+    }
+}
+
+static void
+on_select_all (GSimpleAction *action,
+               GVariant *variant,
+               gpointer user_data)
+{
+    EtApplicationWindow *self;
+    EtApplicationWindowPrivate *priv;
+    GtkWidget *focused;
+
+    self = ET_APPLICATION_WINDOW (user_data);
+    priv = et_application_window_get_instance_private (self);
+
+    /* Use the currently-focused widget and "select all" as appropriate.
+     * https://bugzilla.gnome.org/show_bug.cgi?id=697515 */
+    focused = gtk_window_get_focus (GTK_WINDOW (user_data));
+
+    if (GTK_IS_EDITABLE (focused))
+    {
+        gtk_editable_select_region (GTK_EDITABLE (focused), 0, -1);
+    }
+    else if (!et_tag_area_select_all_if_focused (ET_TAG_AREA (priv->tag_area),
+                                                 focused))
+    /* Assume that other widgets should select all in the file view. */
+    {
+        EtApplicationWindowPrivate *priv;
+        EtApplicationWindow *self = ET_APPLICATION_WINDOW (user_data);
+
+        priv = et_application_window_get_instance_private (self);
+
+        /* Save the current displayed data */
+        ET_Save_File_Data_From_UI (ETCore->ETFileDisplayed);
+
+        et_browser_select_all (ET_BROWSER (priv->browser));
+        et_application_window_update_actions (self);
+    }
+}
+
+static void
+on_unselect_all (GSimpleAction *action,
+                 GVariant *variant,
+                 gpointer user_data)
+{
+    EtApplicationWindow *self;
+    EtApplicationWindowPrivate *priv;
+    GtkWidget *focused;
+
+    self = ET_APPLICATION_WINDOW (user_data);
+    priv = et_application_window_get_instance_private (self);
+
+    focused = gtk_window_get_focus (GTK_WINDOW (user_data));
+
+    if (GTK_IS_EDITABLE (focused))
+    {
+        GtkEditable *editable;
+        gint pos;
+
+        editable = GTK_EDITABLE (focused);
+        pos = gtk_editable_get_position (editable);
+        gtk_editable_select_region (editable, 0, 0);
+        gtk_editable_set_position (editable, pos);
+    }
+    else if (!et_tag_area_unselect_all_if_focused (ET_TAG_AREA (priv->tag_area),
+                                                   focused))
+    /* Assume that other widgets should unselect all in the file view. */
+    {
+        /* Save the current displayed data */
+        ET_Save_File_Data_From_UI (ETCore->ETFileDisplayed);
+
+        et_browser_unselect_all (ET_BROWSER (priv->browser));
+
+        ETCore->ETFileDisplayed = NULL;
+    }
+}
+
+static void
+on_undo_last_changes (GSimpleAction *action,
+                      GVariant *variant,
+                      gpointer user_data)
+{
+    EtApplicationWindow *self;
+    ET_File *ETFile;
+
+    self = ET_APPLICATION_WINDOW (user_data);
+
+    g_return_if_fail (ETCore->ETFileList != NULL);
+
+    /* Save the current displayed data */
+    ET_Save_File_Data_From_UI (ETCore->ETFileDisplayed);
+
+    ETFile = ET_Undo_History_File_Data ();
+
+    if (ETFile)
+    {
+        ET_Display_File_Data_To_UI (ETFile);
+        et_application_window_browser_select_file_by_et_file (self, ETFile,
+                                                              TRUE);
+        et_application_window_browser_refresh_file_in_list (self, ETFile);
+    }
+
+    et_application_window_update_actions (self);
+}
+
+static void
+on_redo_last_changes (GSimpleAction *action,
+                      GVariant *variant,
+                      gpointer user_data)
+{
+    EtApplicationWindow *self;
+    ET_File *ETFile;
+
+    self = ET_APPLICATION_WINDOW (user_data);
+
+    g_return_if_fail (ETCore->ETFileDisplayedList != NULL);
+
+    /* Save the current displayed data */
+    ET_Save_File_Data_From_UI (ETCore->ETFileDisplayed);
+
+    ETFile = ET_Redo_History_File_Data ();
+
+    if (ETFile)
+    {
+        ET_Display_File_Data_To_UI (ETFile);
+        et_application_window_browser_select_file_by_et_file (self, ETFile,
+                                                              TRUE);
+        et_application_window_browser_refresh_file_in_list (self, ETFile);
+    }
+
+    et_application_window_update_actions (self);
+}
+
+static void
+on_remove_tags (GSimpleAction *action,
+                GVariant *variant,
+                gpointer user_data)
+{
+    EtApplicationWindow *self;
+    EtApplicationWindowPrivate *priv;
+    GList *selfilelist = NULL;
+    GList *l;
+    ET_File *etfile;
+    File_Tag *FileTag;
+    gint progress_bar_index;
+    gint selectcount;
+    double fraction;
+    GtkTreeSelection *selection;
+
+    g_return_if_fail (ETCore->ETFileDisplayedList != NULL);
+
+    self = ET_APPLICATION_WINDOW (user_data);
+    priv = et_application_window_get_instance_private (self);
+
+    /* Save the current displayed data */
+    ET_Save_File_Data_From_UI (ETCore->ETFileDisplayed);
+
+    /* Initialize status bar */
+    et_application_window_progress_set_fraction (self, 0.0);
+    selection = et_application_window_browser_get_selection (self);
+    selectcount = gtk_tree_selection_count_selected_rows (selection);
+    progress_bar_index = 0;
+
+    selfilelist = gtk_tree_selection_get_selected_rows (selection, NULL);
+
+    for (l = selfilelist; l != NULL; l = g_list_next (l))
+    {
+        etfile = et_browser_get_et_file_from_path (ET_BROWSER (priv->browser),
+                                                   l->data);
+        FileTag = ET_File_Tag_Item_New ();
+        ET_Manage_Changes_Of_File_Data (etfile, NULL, FileTag);
+
+        fraction = (++progress_bar_index) / (double) selectcount;
+        et_application_window_progress_set_fraction (self, fraction);
+        /* Needed to refresh status bar */
+        while (gtk_events_pending ())
+        {
+            gtk_main_iteration ();
+        }
+    }
+
+    g_list_free_full (selfilelist, (GDestroyNotify)gtk_tree_path_free);
+
+    /* Refresh the whole list (faster than file by file) to show changes. */
+    et_application_window_browser_refresh_list (self);
+
+    /* Display the current file */
+    ET_Display_File_Data_To_UI (ETCore->ETFileDisplayed);
+    et_application_window_update_actions (self);
+
+    et_application_window_progress_set_fraction (self, 0.0);
+    et_application_window_status_bar_message (self,
+                                              _("All tags have been removed"),
+                                              TRUE);
+}
+
+static void
+on_preferences (GSimpleAction *action,
+                GVariant *variant,
+                gpointer user_data)
+{
+    EtApplicationWindow *self;
+    EtApplicationWindowPrivate *priv;
+
+    self = ET_APPLICATION_WINDOW (user_data);
+    priv = et_application_window_get_instance_private (self);
+
+    if (priv->preferences_dialog)
+    {
+        gtk_widget_show (priv->preferences_dialog);
+    }
+    else
+    {
+        priv->preferences_dialog = GTK_WIDGET (et_preferences_dialog_new (GTK_WINDOW (self)));
+        gtk_widget_show_all (priv->preferences_dialog);
+    }
+}
+
+static void
+on_action_toggle (GSimpleAction *action,
+                  GVariant *variant,
+                  gpointer user_data)
+{
+    GVariant *state;
+
+    /* Toggle the current state. */
+    state = g_action_get_state (G_ACTION (action));
+    g_action_change_state (G_ACTION (action),
+                           g_variant_new_boolean (!g_variant_get_boolean (state)));
+    g_variant_unref (state);
+}
+
+static void
+on_action_radio (GSimpleAction *action,
+                 GVariant *variant,
+                 gpointer user_data)
+{
+    /* Set the action state to the just-activated state. */
+    g_action_change_state (G_ACTION (action), variant);
+}
+
+static void
+on_scanner_change (GSimpleAction *action,
+                   GVariant *variant,
+                   gpointer user_data)
+{
+    EtApplicationWindow *self;
+    EtApplicationWindowPrivate *priv;
+    gboolean active;
+
+    self = ET_APPLICATION_WINDOW (user_data);
+    priv = et_application_window_get_instance_private (self);
+    active = g_variant_get_boolean (variant);
+
+    if (!active)
+    {
+        if (priv->scan_dialog)
+        {
+            gtk_widget_hide (priv->scan_dialog);
+        }
+        else
+        {
+            return;
+        }
+    }
+    else
+    {
+        if (priv->scan_dialog)
+        {
+            gtk_widget_show (priv->scan_dialog);
+        }
+        else
+        {
+            priv->scan_dialog = GTK_WIDGET (et_scan_dialog_new (GTK_WINDOW (self)));
+            gtk_widget_show (priv->scan_dialog);
+        }
+    }
+
+    g_simple_action_set_state (action, variant);
+}
+
+static void
+on_file_artist_view_change (GSimpleAction *action,
+                            GVariant *variant,
+                            gpointer user_data)
+{
+    EtApplicationWindow *self;
+    EtApplicationWindowPrivate *priv;
+    const gchar *state;
+
+    self = ET_APPLICATION_WINDOW (user_data);
+    priv = et_application_window_get_instance_private (self);
+    state = g_variant_get_string (variant, NULL);
+
+    g_return_if_fail (ETCore->ETFileDisplayedList != NULL);
+
+    /* Save the current displayed data. */
+    ET_Save_File_Data_From_UI (ETCore->ETFileDisplayed);
+
+    if (strcmp (state, "file") == 0)
+    {
+        et_browser_set_display_mode (ET_BROWSER (priv->browser),
+                                     ET_BROWSER_MODE_FILE);
+    }
+    else if (strcmp (state, "artist") == 0)
+    {
+        et_browser_set_display_mode (ET_BROWSER (priv->browser),
+                                     ET_BROWSER_MODE_ARTIST);
+    }
+    else
+    {
+        g_assert_not_reached ();
+    }
+
+    g_simple_action_set_state (action, variant);
+
+    et_application_window_update_actions (ET_APPLICATION_WINDOW (user_data));
+}
+
+static void
+on_collapse_tree (GSimpleAction *action,
+                  GVariant *variant,
+                  gpointer user_data)
+{
+    EtApplicationWindowPrivate *priv;
+    EtApplicationWindow *self = ET_APPLICATION_WINDOW (user_data);
+
+    priv = et_application_window_get_instance_private (self);
+
+    et_browser_collapse (ET_BROWSER (priv->browser));
+}
+
+static void
+on_reload_tree (GSimpleAction *action,
+                GVariant *variant,
+                gpointer user_data)
+{
+    EtApplicationWindowPrivate *priv;
+    EtApplicationWindow *self = ET_APPLICATION_WINDOW (user_data);
+
+    priv = et_application_window_get_instance_private (self);
+
+    et_browser_reload (ET_BROWSER (priv->browser));
+}
+
+static void
+on_reload_directory (GSimpleAction *action,
+                     GVariant *variant,
+                     gpointer user_data)
+{
+    EtApplicationWindowPrivate *priv;
+    EtApplicationWindow *self = ET_APPLICATION_WINDOW (user_data);
+
+    priv = et_application_window_get_instance_private (self);
+
+    et_browser_reload_directory (ET_BROWSER (priv->browser));
+}
+
+static void
+on_set_default_path (GSimpleAction *action,
+                     GVariant *variant,
+                     gpointer user_data)
+{
+    EtApplicationWindow *self;
+    EtApplicationWindowPrivate *priv;
+
+    self = ET_APPLICATION_WINDOW (user_data);
+    priv = et_application_window_get_instance_private (self);
+
+    et_browser_set_current_path_default (ET_BROWSER (priv->browser));
+}
+
+static void
+on_rename_directory (GSimpleAction *action,
+                     GVariant *variant,
+                     gpointer user_data)
+{
+    EtApplicationWindow *self;
+    EtApplicationWindowPrivate *priv;
+
+    self = ET_APPLICATION_WINDOW (user_data);
+    priv = et_application_window_get_instance_private (self);
+
+    et_browser_show_rename_directory_dialog (ET_BROWSER (priv->browser));
+}
+
+static void
+on_browse_directory (GSimpleAction *action,
+                     GVariant *variant,
+                     gpointer user_data)
+{
+    EtApplicationWindow *self;
+    EtApplicationWindowPrivate *priv;
+
+    self = ET_APPLICATION_WINDOW (user_data);
+    priv = et_application_window_get_instance_private (self);
+
+    et_browser_show_open_directory_with_dialog (ET_BROWSER (priv->browser));
+}
+
+static void
+on_show_cddb (GSimpleAction *action,
+              GVariant *variant,
+              gpointer user_data)
+{
+    EtApplicationWindow *self;
+
+    self = ET_APPLICATION_WINDOW (user_data);
+
+    et_application_window_show_cddb_dialog (self);
+}
+
+static void
+on_show_load_filenames (GSimpleAction *action,
+                        GVariant *variant,
+                        gpointer user_data)
+{
+    EtApplicationWindowPrivate *priv;
+    EtApplicationWindow *self;
+
+    self = ET_APPLICATION_WINDOW (user_data);
+    priv = et_application_window_get_instance_private (self);
+
+    if (priv->load_files_dialog)
+    {
+        gtk_widget_show (priv->load_files_dialog);
+    }
+    else
+    {
+        priv->load_files_dialog = GTK_WIDGET (et_load_files_dialog_new (GTK_WINDOW (self)));
+        gtk_widget_show_all (priv->load_files_dialog);
+    }
+}
+
+static void
+on_show_playlist (GSimpleAction *action,
+                  GVariant *variant,
+                  gpointer user_data)
+{
+    EtApplicationWindowPrivate *priv;
+    EtApplicationWindow *self;
+
+    self = ET_APPLICATION_WINDOW (user_data);
+    priv = et_application_window_get_instance_private (self);
+
+    if (priv->playlist_dialog)
+    {
+        gtk_widget_show (priv->playlist_dialog);
+    }
+    else
+    {
+        priv->playlist_dialog = GTK_WIDGET (et_playlist_dialog_new (GTK_WINDOW (self)));
+        gtk_widget_show_all (priv->playlist_dialog);
+    }
+}
+
+static void
+on_go_home (GSimpleAction *action,
+            GVariant *variant,
+            gpointer user_data)
+{
+    EtApplicationWindowPrivate *priv;
+    EtApplicationWindow *self;
+
+    self = ET_APPLICATION_WINDOW (user_data);
+    priv = et_application_window_get_instance_private (self);
+
+    et_browser_go_home (ET_BROWSER (priv->browser));
+}
+
+static void
+on_go_desktop (GSimpleAction *action,
+               GVariant *variant,
+               gpointer user_data)
+{
+    EtApplicationWindowPrivate *priv;
+    EtApplicationWindow *self;
+
+    self = ET_APPLICATION_WINDOW (user_data);
+    priv = et_application_window_get_instance_private (self);
+
+    et_browser_go_desktop (ET_BROWSER (priv->browser));
+}
+
+static void
+on_go_documents (GSimpleAction *action,
+                 GVariant *variant,
+                 gpointer user_data)
+{
+    EtApplicationWindowPrivate *priv;
+    EtApplicationWindow *self;
+
+    self = ET_APPLICATION_WINDOW (user_data);
+    priv = et_application_window_get_instance_private (self);
+
+    et_browser_go_documents (ET_BROWSER (priv->browser));
+}
+
+static void
+on_go_downloads (GSimpleAction *action,
+                 GVariant *variant,
+                 gpointer user_data)
+{
+    EtApplicationWindowPrivate *priv;
+    EtApplicationWindow *self;
+
+    self = ET_APPLICATION_WINDOW (user_data);
+    priv = et_application_window_get_instance_private (self);
+
+    et_browser_go_downloads (ET_BROWSER (priv->browser));
+}
+
+static void
+on_go_music (GSimpleAction *action,
+             GVariant *variant,
+             gpointer user_data)
+{
+    EtApplicationWindowPrivate *priv;
+    EtApplicationWindow *self;
+
+    self = ET_APPLICATION_WINDOW (user_data);
+    priv = et_application_window_get_instance_private (self);
+
+    et_browser_go_music (ET_BROWSER (priv->browser));
+}
+
+static void
+on_go_parent (GSimpleAction *action,
+              GVariant *variant,
+              gpointer user_data)
+{
+    EtApplicationWindowPrivate *priv;
+    EtApplicationWindow *self;
+
+    self = ET_APPLICATION_WINDOW (user_data);
+    priv = et_application_window_get_instance_private (self);
+
+    et_browser_go_parent (ET_BROWSER (priv->browser));
+}
+
+static void
+on_go_default (GSimpleAction *action,
+               GVariant *variant,
+               gpointer user_data)
+{
+    EtApplicationWindowPrivate *priv;
+    EtApplicationWindow *self;
+
+    self = ET_APPLICATION_WINDOW (user_data);
+    priv = et_application_window_get_instance_private (self);
+
+    et_browser_load_default_dir (ET_BROWSER (priv->browser));
+}
+
+static void
+on_go_first (GSimpleAction *action,
+             GVariant *variant,
+             gpointer user_data)
+{
+    EtApplicationWindowPrivate *priv;
+    EtApplicationWindow *self;
+    GList *etfilelist;
+
+    self = ET_APPLICATION_WINDOW (user_data);
+    priv = et_application_window_get_instance_private (self);
+
+    if (!ETCore->ETFileDisplayedList)
+        return;
+
+    /* Save the current displayed data */
+    ET_Save_File_Data_From_UI (ETCore->ETFileDisplayed);
+
+    /* Go to the first item of the list */
+    etfilelist = ET_Displayed_File_List_First ();
+
+    if (etfilelist)
+    {
+        /* To avoid the last line still selected. */
+        et_browser_unselect_all (ET_BROWSER (priv->browser));
+        et_application_window_browser_select_file_by_et_file (self,
+                                                              (ET_File *)etfilelist->data,
+                                                              TRUE);
+        ET_Display_File_Data_To_UI ((ET_File *)etfilelist->data);
+    }
+
+    et_application_window_update_actions (self);
+    et_application_window_scan_dialog_update_previews (self);
+
+    if (!g_settings_get_boolean (MainSettings, "tag-preserve-focus"))
+    {
+        et_tag_area_title_grab_focus (ET_TAG_AREA (priv->tag_area));
+    }
+}
+
+static void
+on_go_previous (GSimpleAction *action,
+                GVariant *variant,
+                gpointer user_data)
+{
+    EtApplicationWindowPrivate *priv;
+    EtApplicationWindow *self;
+    GList *etfilelist;
+
+    self = ET_APPLICATION_WINDOW (user_data);
+    priv = et_application_window_get_instance_private (self);
+
+    if (!ETCore->ETFileDisplayedList || !ETCore->ETFileDisplayedList->prev)
+        return;
+
+    /* Save the current displayed data */
+    ET_Save_File_Data_From_UI (ETCore->ETFileDisplayed);
+
+    /* Go to the prev item of the list */
+    etfilelist = ET_Displayed_File_List_Previous ();
+
+    if (etfilelist)
+    {
+        et_browser_unselect_all (ET_BROWSER (priv->browser));
+        et_application_window_browser_select_file_by_et_file (self,
+                                                              (ET_File *)etfilelist->data,
+                                                              TRUE);
+        ET_Display_File_Data_To_UI((ET_File *)etfilelist->data);
+    }
+
+    et_application_window_update_actions (self);
+    et_application_window_scan_dialog_update_previews (self);
+
+    if (!g_settings_get_boolean (MainSettings, "tag-preserve-focus"))
+    {
+        et_tag_area_title_grab_focus (ET_TAG_AREA (priv->tag_area));
+    }
+}
+
+static void
+on_go_next (GSimpleAction *action,
+            GVariant *variant,
+            gpointer user_data)
+{
+    EtApplicationWindowPrivate *priv;
+    EtApplicationWindow *self;
+    GList *etfilelist;
+
+    self = ET_APPLICATION_WINDOW (user_data);
+    priv = et_application_window_get_instance_private (self);
+
+    if (!ETCore->ETFileDisplayedList || !ETCore->ETFileDisplayedList->next)
+        return;
+
+    /* Save the current displayed data */
+    ET_Save_File_Data_From_UI (ETCore->ETFileDisplayed);
+
+    /* Go to the next item of the list */
+    etfilelist = ET_Displayed_File_List_Next ();
+
+    if (etfilelist)
+    {
+        et_browser_unselect_all (ET_BROWSER (priv->browser));
+        et_application_window_browser_select_file_by_et_file (self,
+                                                              (ET_File *)etfilelist->data,
+                                                              TRUE);
+        ET_Display_File_Data_To_UI((ET_File *)etfilelist->data);
+    }
+
+    et_application_window_update_actions (self);
+    et_application_window_scan_dialog_update_previews (self);
+
+    if (!g_settings_get_boolean (MainSettings, "tag-preserve-focus"))
+    {
+        et_tag_area_title_grab_focus (ET_TAG_AREA (priv->tag_area));
+    }
+}
+
+static void
+on_go_last (GSimpleAction *action,
+            GVariant *variant,
+            gpointer user_data)
+{
+    EtApplicationWindowPrivate *priv;
+    EtApplicationWindow *self;
+    GList *etfilelist;
+
+    self = ET_APPLICATION_WINDOW (user_data);
+    priv = et_application_window_get_instance_private (self);
+
+    if (!ETCore->ETFileDisplayedList || !ETCore->ETFileDisplayedList->next)
+        return;
+
+    /* Save the current displayed data */
+    ET_Save_File_Data_From_UI (ETCore->ETFileDisplayed);
+
+    /* Go to the last item of the list */
+    etfilelist = ET_Displayed_File_List_Last ();
+
+    if (etfilelist)
+    {
+        et_browser_unselect_all (ET_BROWSER (priv->browser));
+        et_application_window_browser_select_file_by_et_file (self,
+                                                              (ET_File *)etfilelist->data,
+                                                              TRUE);
+        ET_Display_File_Data_To_UI ((ET_File *)etfilelist->data);
+    }
+
+    et_application_window_update_actions (self);
+    et_application_window_scan_dialog_update_previews (self);
+
+    if (!g_settings_get_boolean (MainSettings, "tag-preserve-focus"))
+    {
+        et_tag_area_title_grab_focus (ET_TAG_AREA (priv->tag_area));
+    }
+}
+
+static void
+on_show_cddb_selection (GSimpleAction *action,
+                        GVariant *variant,
+                        gpointer user_data)
+{
+    EtApplicationWindowPrivate *priv;
+    EtApplicationWindow *self = ET_APPLICATION_WINDOW (user_data);
+
+    priv = et_application_window_get_instance_private (self);
+
+    et_application_window_show_cddb_dialog (self);
+    et_cddb_dialog_search_from_selection (ET_CDDB_DIALOG (priv->cddb_dialog));
+}
+
+static void
+on_clear_log (GSimpleAction *action,
+              GVariant *variant,
+              gpointer user_data)
+{
+    EtApplicationWindowPrivate *priv;
+    EtApplicationWindow *self = ET_APPLICATION_WINDOW (user_data);
+
+    priv = et_application_window_get_instance_private (self);
+
+    et_log_area_clear (ET_LOG_AREA (priv->log_area));
+}
+
+static void
+on_run_player_album (GSimpleAction *action,
+                     GVariant *variant,
+                     gpointer user_data)
+{
+    EtApplicationWindowPrivate *priv;
+    EtApplicationWindow *self = ET_APPLICATION_WINDOW (user_data);
+
+    priv = et_application_window_get_instance_private (self);
+
+    et_browser_run_player_for_album_list (ET_BROWSER (priv->browser));
+}
+
+static void
+on_run_player_artist (GSimpleAction *action,
+                      GVariant *variant,
+                      gpointer user_data)
+{
+    EtApplicationWindowPrivate *priv;
+    EtApplicationWindow *self = ET_APPLICATION_WINDOW (user_data);
+
+    priv = et_application_window_get_instance_private (self);
+
+    et_browser_run_player_for_artist_list (ET_BROWSER (priv->browser));
+}
+
+static void
+on_run_player_directory (GSimpleAction *action,
+                         GVariant *variant,
+                         gpointer user_data)
+{
+    Run_Audio_Player_Using_Directory ();
+}
+
+static void
+on_stop (GSimpleAction *action,
+         GVariant *variant,
+         gpointer user_data)
+{
+    Action_Main_Stop_Button_Pressed ();
+}
+
+static const GActionEntry actions[] =
+{
+    /* File menu. */
+    { "open-with", on_open_with },
+    { "run-player", on_run_player },
+    { "invert-selection", on_invert_selection },
+    { "delete", on_delete },
+    { "undo-file-changes", on_undo_file_changes },
+    { "redo-file-changes", on_redo_file_changes },
+    { "save", on_save },
+    { "save-force", on_save_force },
+    /* Edit menu. */
+    { "find", on_find },
+    { "select-all", on_select_all },
+    { "unselect-all", on_unselect_all },
+    { "undo-last-changes", on_undo_last_changes },
+    { "redo-last-changes", on_redo_last_changes },
+    { "remove-tags", on_remove_tags },
+    { "preferences", on_preferences },
+    /* View menu. */
+    { "scanner", on_action_toggle, NULL, "false", on_scanner_change },
+    /* { "scan-mode", on_action_radio, NULL, "false", on_scan_mode_change },
+     * Created from GSetting. */
+    /* { "sort-mode", on_action_radio, "s", "'ascending-filename'",
+     * on_sort_mode_change }, Created from GSetting */
+    { "file-artist-view", on_action_radio, "s", "'file'",
+      on_file_artist_view_change },
+    { "collapse-tree", on_collapse_tree },
+    { "reload-tree", on_reload_tree },
+    { "reload-directory", on_reload_directory },
+    /* { "browse-show-hidden", on_action_toggle, NULL, "true",
+      on_browse_show_hidden_change }, Created from GSetting. */
+    /* Browser menu. */
+    { "set-default-path", on_set_default_path },
+    { "rename-directory", on_rename_directory },
+    { "browse-directory", on_browse_directory },
+    /* { "browse-subdir", on_browse_subdir }, Created from GSetting. */
+    /* Miscellaneous menu. */
+    { "show-cddb", on_show_cddb },
+    { "show-load-filenames", on_show_load_filenames },
+    { "show-playlist", on_show_playlist },
+    /* Go menu. */
+    { "go-home", on_go_home },
+    { "go-desktop", on_go_desktop },
+    { "go-documents", on_go_documents },
+    { "go-downloads", on_go_downloads },
+    { "go-music", on_go_music },
+    { "go-parent", on_go_parent },
+    { "go-default", on_go_default },
+    { "go-first", on_go_first },
+    { "go-previous", on_go_previous },
+    { "go-next", on_go_next },
+    { "go-last", on_go_last },
+    /* Popup menus. */
+    { "show-cddb-selection", on_show_cddb_selection },
+    { "clear-log", on_clear_log },
+    { "run-player-album", on_run_player_album },
+    { "run-player-artist", on_run_player_artist },
+    { "run-player-directory", on_run_player_directory },
+    /* Toolbar. */
+    { "stop", on_stop }
+};
+
+static void
+et_application_window_dispose (GObject *object)
+{
+    EtApplicationWindow *self;
+    EtApplicationWindowPrivate *priv;
+
+    self = ET_APPLICATION_WINDOW (object);
+    priv = et_application_window_get_instance_private (self);
+
+    save_state (self);
+
+    ET_Core_Destroy ();
+
+    if (priv->cddb_dialog)
+    {
+        gtk_widget_destroy (priv->cddb_dialog);
+        priv->cddb_dialog = NULL;
+    }
+
+    if (priv->load_files_dialog)
+    {
+        gtk_widget_destroy (priv->load_files_dialog);
+        priv->load_files_dialog = NULL;
+    }
+
+    if (priv->playlist_dialog)
+    {
+        gtk_widget_destroy (priv->playlist_dialog);
+        priv->playlist_dialog = NULL;
+    }
+
+    if (priv->preferences_dialog)
+    {
+        gtk_widget_destroy (priv->preferences_dialog);
+        priv->preferences_dialog = NULL;
+    }
+
+    if (priv->scan_dialog)
+    {
+        gtk_widget_destroy (priv->scan_dialog);
+        priv->scan_dialog = NULL;
+    }
+
+    if (priv->search_dialog)
+    {
+        gtk_widget_destroy (priv->search_dialog);
+        priv->search_dialog = NULL;
+    }
+
+    G_OBJECT_CLASS (et_application_window_parent_class)->dispose (object);
+}
+
+static void
+et_application_window_init (EtApplicationWindow *self)
+{
+    EtApplicationWindowPrivate *priv;
+    GAction *action;
+    GtkWindow *window;
+    GtkWidget *main_vbox;
+    GtkWidget *hbox, *vbox;
+
+    priv = self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
+                                                     ET_TYPE_APPLICATION_WINDOW,
+                                                     EtApplicationWindowPrivate);
+
+    priv->cddb_dialog = NULL;
+    priv->load_files_dialog = NULL;
+    priv->playlist_dialog = NULL;
+    priv->preferences_dialog = NULL;
+    priv->scan_dialog = NULL;
+    priv->search_dialog = NULL;
+
+    g_action_map_add_action_entries (G_ACTION_MAP (self), actions,
+                                     G_N_ELEMENTS (actions), self);
+
+    action = g_settings_create_action (MainSettings, "browse-show-hidden");
+    g_action_map_add_action (G_ACTION_MAP (self), action);
+    g_object_unref (action);
+    action = g_settings_create_action (MainSettings, "browse-subdir");
+    g_action_map_add_action (G_ACTION_MAP (self), action);
+    g_object_unref (action);
+    action = g_settings_create_action (MainSettings, "scan-mode");
+    g_action_map_add_action (G_ACTION_MAP (self), action);
+    g_object_unref (action);
+    action = g_settings_create_action (MainSettings, "sort-mode");
+    g_action_map_add_action (G_ACTION_MAP (self), action);
+    g_object_unref (action);
+
+    window = GTK_WINDOW (self);
+
+    gtk_window_set_icon_name (window, PACKAGE_TARNAME);
+    gtk_window_set_title (window, PACKAGE_NAME);
+
+    g_signal_connect (self, "configure-event",
+                      G_CALLBACK (on_configure_event), NULL);
+    g_signal_connect (self, "delete-event",
+                      G_CALLBACK (on_main_window_delete_event), NULL);
+    g_signal_connect (self, "window-state-event",
+                      G_CALLBACK (on_window_state_event), NULL);
+
+    restore_state (self);
+
+    /* Mainvbox for Menu bar + Tool bar + "Browser Area & FileArea & TagArea" + Log Area + "Status bar & Progress bar" */
+    main_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+    gtk_container_add (GTK_CONTAINER (self), main_vbox);
+
+    /* Menu bar and tool bar. */
+    {
+        GtkBuilder *builder;
+        GError *error = NULL;
+        GtkWidget *toolbar;
+        GtkToolButton *button;
+
+        builder = gtk_builder_new ();
+        gtk_builder_add_from_resource (builder,
+                                       "/org/gnome/EasyTAG/toolbar.ui",
+                                       &error);
+
+        if (error != NULL)
+        {
+            g_error ("Unable to get toolbar from resource: %s",
+                     error->message);
+        }
+
+        toolbar = GTK_WIDGET (gtk_builder_get_object (builder, "main_toolbar"));
+        gtk_box_pack_start (GTK_BOX (main_vbox), toolbar, FALSE, FALSE, 0);
+
+        /* TODO: Use resource property on GtkImage when using GTK+ > 3.8. */
+        button = GTK_TOOL_BUTTON (gtk_builder_get_object (builder, "artist_view_button"));
+        gtk_tool_button_set_icon_widget (button,
+                                         gtk_image_new_from_resource ("/org/gnome/EasyTAG/images/artist.png"));
+        button = GTK_TOOL_BUTTON (gtk_builder_get_object (builder, "invert_selection_button"));
+        gtk_tool_button_set_icon_widget (button,
+                                         gtk_image_new_from_resource ("/org/gnome/EasyTAG/images/invert-selection.png"));
+
+        g_object_unref (builder);
+    }
+
+    /* The two panes: BrowserArea on the left, FileArea+TagArea on the right */
+    priv->hpaned = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL);
+
+    /* Browser (Tree + File list + Entry) */
+    priv->browser = GTK_WIDGET (et_browser_new ());
+    gtk_paned_pack1 (GTK_PANED (priv->hpaned), priv->browser, TRUE, TRUE);
+
+    /* Vertical box for FileArea + TagArea */
+    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+    gtk_paned_pack2 (GTK_PANED (priv->hpaned), vbox, FALSE, FALSE);
+
+    /* TODO: Set a sensible default size for both widgets in the paned. */
+    gtk_paned_set_position (GTK_PANED (priv->hpaned), 600);
+
+    /* File */
+    priv->file_area = et_file_area_new ();
+    gtk_box_pack_start (GTK_BOX (vbox), priv->file_area, FALSE, FALSE, 0);
+
+    /* Tag */
+    priv->tag_area = et_tag_area_new ();
+    gtk_box_pack_start (GTK_BOX (vbox), priv->tag_area, FALSE, FALSE, 0);
+
+    /* Vertical pane for Browser Area + FileArea + TagArea */
+    priv->vpaned = gtk_paned_new (GTK_ORIENTATION_VERTICAL);
+    gtk_box_pack_start (GTK_BOX (main_vbox), priv->vpaned, TRUE, TRUE, 0);
+    gtk_paned_pack1 (GTK_PANED (priv->vpaned), priv->hpaned, TRUE,
+                     FALSE);
+
+
+    /* Log */
+    priv->log_area = et_log_area_new ();
+    gtk_paned_pack2 (GTK_PANED (priv->vpaned), priv->log_area, FALSE, TRUE);
+    g_settings_bind (MainSettings, "log-show", priv->log_area, "visible",
+                     G_SETTINGS_BIND_DEFAULT);
+
+    /* Horizontal box for Status bar + Progress bar */
+    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
+    gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, FALSE, 0);
+    gtk_widget_show (hbox);
+
+    /* Status bar */
+    priv->status_bar = et_status_bar_new ();
+    gtk_box_pack_start (GTK_BOX (hbox), priv->status_bar, TRUE, TRUE, 0);
+
+    /* Progress bar */
+    priv->progress_bar = et_progress_bar_new ();
+    gtk_box_pack_end (GTK_BOX (hbox), priv->progress_bar, FALSE, FALSE, 0);
+
+    gtk_widget_show_all (GTK_WIDGET (main_vbox));
+}
+
+static void
+et_application_window_class_init (EtApplicationWindowClass *klass)
+{
+    G_OBJECT_CLASS (klass)->dispose = et_application_window_dispose;
+
+    g_type_class_add_private (klass, sizeof (EtApplicationWindowPrivate));
+}
+
+/*
+ * et_application_window_new:
+ *
+ * Create a new EtApplicationWindow instance.
+ *
+ * Returns: a new #EtApplicationWindow
+ */
+EtApplicationWindow *
+et_application_window_new (GtkApplication *application)
+{
+    g_return_val_if_fail (GTK_IS_APPLICATION (application), NULL);
+
+    return g_object_new (ET_TYPE_APPLICATION_WINDOW, "application",
+                         application, NULL);
+}
+
+void
+et_application_window_scan_dialog_update_previews (EtApplicationWindow *self)
+{
+    EtApplicationWindowPrivate *priv;
+
+    g_return_if_fail (self != NULL);
+
+    priv = et_application_window_get_instance_private (self);
+
+    if (priv->scan_dialog)
+    {
+        et_scan_dialog_update_previews (ET_SCAN_DIALOG (priv->scan_dialog));
+    }
+}
+
+void
+et_application_window_progress_set_fraction (EtApplicationWindow *self,
+                                             gdouble fraction)
+{
+    EtApplicationWindowPrivate *priv;
+
+    g_return_if_fail (ET_APPLICATION_WINDOW (self));
+
+    priv = et_application_window_get_instance_private (self);
+
+    gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (priv->progress_bar),
+                                   fraction);
+}
+
+void
+et_application_window_progress_set_text (EtApplicationWindow *self,
+                                         const gchar *text)
+{
+    EtApplicationWindowPrivate *priv;
+
+    g_return_if_fail (ET_APPLICATION_WINDOW (self));
+
+    priv = et_application_window_get_instance_private (self);
+
+    gtk_progress_bar_set_text (GTK_PROGRESS_BAR (priv->progress_bar), text);
+}
+
+void
+et_application_window_status_bar_message (EtApplicationWindow *self,
+                                          const gchar *message,
+                                          gboolean with_timer)
+{
+    EtApplicationWindowPrivate *priv;
+
+    g_return_if_fail (ET_APPLICATION_WINDOW (self));
+
+    priv = et_application_window_get_instance_private (self);
+
+    et_status_bar_message (ET_STATUS_BAR (priv->status_bar), message,
+                           with_timer);
+}
+
+GtkWidget *
+et_application_window_get_log_area (EtApplicationWindow *self)
+{
+    EtApplicationWindowPrivate *priv;
+
+    g_return_val_if_fail (self != NULL, NULL);
+
+    priv = et_application_window_get_instance_private (self);
+
+    return priv->log_area;
+}
+
+void
+et_application_window_show_preferences_dialog_scanner (EtApplicationWindow *self)
+{
+    EtApplicationWindowPrivate *priv;
+
+    g_return_if_fail (ET_APPLICATION_WINDOW (self));
+
+    priv = et_application_window_get_instance_private (self);
+
+    if (!priv->preferences_dialog)
+    {
+        priv->preferences_dialog = GTK_WIDGET (et_preferences_dialog_new (GTK_WINDOW (self)));
+    }
+
+    et_preferences_dialog_show_scanner (ET_PREFERENCES_DIALOG (priv->preferences_dialog));
+}
+
+void
+et_application_window_browser_toggle_display_mode (EtApplicationWindow *self)
+{
+    EtApplicationWindowPrivate *priv;
+    GVariant *variant;
+
+    priv = et_application_window_get_instance_private (self);
+
+    variant = g_action_group_get_action_state (G_ACTION_GROUP (self),
+                                               "file-artist-view");
+
+    if (strcmp (g_variant_get_string (variant, NULL), "file") == 0)
+    {
+        et_browser_set_display_mode (ET_BROWSER (priv->browser),
+                                     ET_BROWSER_MODE_FILE);
+    }
+    else if (strcmp (g_variant_get_string (variant, NULL), "artist") == 0)
+    {
+        et_browser_set_display_mode (ET_BROWSER (priv->browser),
+                                     ET_BROWSER_MODE_ARTIST);
+    }
+    else
+    {
+        g_assert_not_reached ();
+    }
+}
+
+void
+et_application_window_browser_set_sensitive (EtApplicationWindow *self,
+                                             gboolean sensitive)
+{
+    EtApplicationWindowPrivate *priv;
+
+    g_return_if_fail (ET_APPLICATION_WINDOW (self));
+
+    priv = et_application_window_get_instance_private (self);
+
+    g_return_if_fail (priv->browser != NULL);
+
+    et_browser_set_sensitive (ET_BROWSER (priv->browser), sensitive);
+}
+
+void
+et_application_window_browser_clear (EtApplicationWindow *self)
+{
+    EtApplicationWindowPrivate *priv;
+
+    g_return_if_fail (ET_APPLICATION_WINDOW (self));
+
+    priv = et_application_window_get_instance_private (self);
+
+    g_return_if_fail (priv->browser != NULL);
+
+    et_browser_clear (ET_BROWSER (priv->browser));
+}
+
+void
+et_application_window_browser_clear_album_model (EtApplicationWindow *self)
+{
+    EtApplicationWindowPrivate *priv;
+
+    g_return_if_fail (ET_APPLICATION_WINDOW (self));
+
+    priv = et_application_window_get_instance_private (self);
+
+    g_return_if_fail (priv->browser != NULL);
+
+    et_browser_clear_album_model (ET_BROWSER (priv->browser));
+}
+
+void
+et_application_window_browser_clear_artist_model (EtApplicationWindow *self)
+{
+    EtApplicationWindowPrivate *priv;
+
+    g_return_if_fail (ET_APPLICATION_WINDOW (self));
+
+    priv = et_application_window_get_instance_private (self);
+
+    g_return_if_fail (priv->browser != NULL);
+
+    et_browser_clear_artist_model (ET_BROWSER (priv->browser));
+}
+
+void
+et_application_window_select_dir (EtApplicationWindow *self, const gchar *path)
+{
+    EtApplicationWindowPrivate *priv;
+
+    priv = et_application_window_get_instance_private (self);
+
+    et_browser_select_dir (ET_BROWSER (priv->browser), path);
+}
+
+const gchar *
+et_application_window_get_current_path (EtApplicationWindow *self)
+{
+    EtApplicationWindowPrivate *priv;
+
+    g_return_val_if_fail (ET_APPLICATION_WINDOW (self), NULL);
+
+    priv = et_application_window_get_instance_private (self);
+
+    return et_browser_get_current_path (ET_BROWSER (priv->browser));
+}
+
+GtkWidget *
+et_application_window_get_scan_dialog (EtApplicationWindow *self)
+{
+    EtApplicationWindowPrivate *priv;
+
+    g_return_val_if_fail (self != NULL, NULL);
+
+    priv = et_application_window_get_instance_private (self);
+
+    return priv->scan_dialog;
+}
+
+void
+et_application_window_apply_changes (EtApplicationWindow *self)
+{
+    EtApplicationWindowPrivate *priv;
+
+    g_return_if_fail (ET_APPLICATION_WINDOW (self));
+
+    priv = et_application_window_get_instance_private (self);
+
+    if (priv->scan_dialog)
+    {
+        et_scan_dialog_apply_changes (ET_SCAN_DIALOG (priv->scan_dialog));
+    }
+
+    if (priv->search_dialog)
+    {
+        et_search_dialog_apply_changes (ET_SEARCH_DIALOG (priv->search_dialog));
+    }
+}
+
+/*
+ * Disable (FALSE) / Enable (TRUE) all user widgets in the tag area
+ */
+void
+et_application_window_tag_area_set_sensitive (EtApplicationWindow *self,
+                                              gboolean sensitive)
+{
+    EtApplicationWindowPrivate *priv;
+
+    g_return_if_fail (ET_APPLICATION_WINDOW (self));
+
+    priv = et_application_window_get_instance_private (self);
+
+    g_return_if_fail (priv->tag_area != NULL);
+
+    /* TAG Area (entries + buttons). */
+    gtk_widget_set_sensitive (gtk_bin_get_child (GTK_BIN (priv->tag_area)),
+                              sensitive);
+}
+
+void
+et_application_window_file_area_clear (EtApplicationWindow *self)
+{
+    EtApplicationWindowPrivate *priv;
+
+    g_return_if_fail (ET_APPLICATION_WINDOW (self));
+
+    priv = et_application_window_get_instance_private (self);
+
+    et_file_area_clear (ET_FILE_AREA (priv->file_area));
+}
+
+const gchar *
+et_application_window_file_area_get_filename (EtApplicationWindow *self)
+{
+    EtApplicationWindowPrivate *priv;
+
+    g_return_val_if_fail (ET_APPLICATION_WINDOW (self), NULL);
+
+    priv = et_application_window_get_instance_private (self);
+
+    return et_file_area_get_filename (ET_FILE_AREA (priv->file_area));
+}
+
+void
+et_application_window_file_area_set_file_fields (EtApplicationWindow *self,
+                                                 const ET_File *ETFile)
+{
+    EtApplicationWindowPrivate *priv;
+
+    g_return_if_fail (ET_APPLICATION_WINDOW (self));
+
+    priv = et_application_window_get_instance_private (self);
+
+    et_file_area_set_file_fields (ET_FILE_AREA (priv->file_area), ETFile);
+}
+
+void
+et_application_window_file_area_set_header_fields (EtApplicationWindow *self,
+                                                   EtFileHeaderFields *fields)
+{
+    EtApplicationWindowPrivate *priv;
+
+    g_return_if_fail (ET_APPLICATION_WINDOW (self));
+
+    priv = et_application_window_get_instance_private (self);
+
+    et_file_area_set_header_fields (ET_FILE_AREA (priv->file_area), fields);
+}
+
+/*
+ * Disable (FALSE) / Enable (TRUE) all user widgets in the file area
+ */
+void
+et_application_window_file_area_set_sensitive (EtApplicationWindow *self,
+                                               gboolean sensitive)
+{
+    EtApplicationWindowPrivate *priv;
+
+    g_return_if_fail (ET_APPLICATION_WINDOW (self));
+
+    priv = et_application_window_get_instance_private (self);
+
+    g_return_if_fail (priv->file_area != NULL);
+
+    /* File Area. */
+    gtk_widget_set_sensitive (gtk_bin_get_child (GTK_BIN (priv->file_area)),
+                              sensitive);
+}
+
+static void
+set_action_state (EtApplicationWindow *self,
+                  const gchar *action_name,
+                  gboolean enabled)
+{
+    GSimpleAction *action;
+
+    action = G_SIMPLE_ACTION (g_action_map_lookup_action (G_ACTION_MAP (self),
+                                                          action_name));
+
+    if (action == NULL)
+    {
+        g_error ("Unable to find action '%s' in application window",
+                 action_name);
+    }
+
+    g_simple_action_set_enabled (action, enabled);
+}
+
+/* et_application_window_disable_command_actions:
+ * Disable buttons when saving files (do not disable Quit button).
+ */
+void
+et_application_window_disable_command_actions (EtApplicationWindow *self)
+{
+    GtkDialog *dialog;
+
+    dialog = GTK_DIALOG (et_application_window_get_scan_dialog (self));
+
+    /* Scanner Window */
+    if (dialog)
+    {
+        gtk_dialog_set_response_sensitive (dialog, GTK_RESPONSE_APPLY, FALSE);
+    }
+
+    /* "File" menu commands */
+    set_action_state (self, "open-with", FALSE);
+    set_action_state (self, "invert-selection", FALSE);
+    set_action_state (self, "delete", FALSE);
+    set_action_state (self, "go-first", FALSE);
+    set_action_state (self, "go-previous", FALSE);
+    set_action_state (self, "go-next", FALSE);
+    set_action_state (self, "go-last", FALSE);
+    set_action_state (self, "remove-tags", FALSE);
+    set_action_state (self, "undo-file-changes", FALSE);
+    set_action_state (self, "redo-file-changes", FALSE);
+    set_action_state (self, "save", FALSE);
+    set_action_state (self, "save-force", FALSE);
+    set_action_state (self, "undo-last-changes", FALSE);
+    set_action_state (self, "redo-last-changes", FALSE);
+
+    /* FIXME: "Scanner" menu commands */
+    /*set_action_state (self, "scan-mode", FALSE);*/
+}
+
+
+/* et_application_window_update_actions:
+ * Set to sensitive/unsensitive the state of each button into
+ * the commands area and menu items in function of state of the "main list".
+ */
+void
+et_application_window_update_actions (EtApplicationWindow *self)
+{
+    GtkDialog *dialog;
+
+    dialog = GTK_DIALOG (et_application_window_get_scan_dialog (self));
+
+    if (!ETCore->ETFileDisplayedList)
+    {
+        /* No file found */
+
+        /* File and Tag frames */
+        et_application_window_file_area_set_sensitive (self, FALSE);
+        et_application_window_tag_area_set_sensitive (self, FALSE);
+
+        /* Tool bar buttons (the others are covered by the menu) */
+        set_action_state (self, "stop", FALSE);
+
+        /* Scanner Window */
+        if (dialog)
+        {
+            gtk_dialog_set_response_sensitive (dialog, GTK_RESPONSE_APPLY,
+                                               FALSE);
+        }
+
+        /* Menu commands */
+        set_action_state (self, "open-with", FALSE);
+        set_action_state (self, "invert-selection", FALSE);
+        set_action_state (self, "delete", FALSE);
+        /* FIXME: set_action_state (self, "sort-mode", FALSE); */
+        set_action_state (self, "go-previous", FALSE);
+        set_action_state (self, "go-next", FALSE);
+        set_action_state (self, "go-first", FALSE);
+        set_action_state (self, "go-last", FALSE);
+        set_action_state (self, "remove-tags", FALSE);
+        set_action_state (self, "undo-file-changes", FALSE);
+        set_action_state (self, "redo-file-changes", FALSE);
+        set_action_state (self, "save", FALSE);
+        set_action_state (self, "save-force", FALSE);
+        set_action_state (self, "undo-last-changes", FALSE);
+        set_action_state (self, "redo-last-changes", FALSE);
+        set_action_state (self, "find", FALSE);
+        set_action_state (self, "show-load-filenames", FALSE);
+        set_action_state (self, "show-playlist", FALSE);
+        set_action_state (self, "run-player", FALSE);
+        /* FIXME set_action_state (self, "scan-mode", FALSE);*/
+        set_action_state (self, "file-artist-view", FALSE);
+
+        return;
+    }else
+    {
+        GList *selfilelist = NULL;
+        ET_File *etfile;
+        gboolean has_undo = FALSE;
+        gboolean has_redo = FALSE;
+        //gboolean has_to_save = FALSE;
+        GtkTreeSelection *selection;
+
+        /* File and Tag frames */
+        et_application_window_file_area_set_sensitive (self, TRUE);
+        et_application_window_tag_area_set_sensitive (self, TRUE);
+
+        /* Tool bar buttons */
+        set_action_state (self, "stop", FALSE);
+
+        /* Scanner Window */
+        if (dialog)
+        {
+            gtk_dialog_set_response_sensitive (dialog, GTK_RESPONSE_APPLY,
+                                               TRUE);
+        }
+
+        /* Commands into menu */
+        set_action_state (self, "open-with", TRUE);
+        set_action_state (self, "invert-selection", TRUE);
+        set_action_state (self, "delete", TRUE);
+        /* FIXME set_action_state (self, "sort-mode", TRUE); */
+        set_action_state (self, "remove-tags", TRUE);
+        set_action_state (self, "find", TRUE);
+        set_action_state (self, "show-load-filenames", TRUE);
+        set_action_state (self, "show-playlist", TRUE);
+        set_action_state (self, "run-player", TRUE);
+        /* FIXME set_action_state (self, "scan-mode", TRUE); */
+        set_action_state (self, "file-artist-view", TRUE);
+
+        /* Check if one of the selected files has undo or redo data */
+        {
+            GList *l;
+
+            selection = et_application_window_browser_get_selection (self);
+            selfilelist = gtk_tree_selection_get_selected_rows(selection, NULL);
+
+            for (l = selfilelist; l != NULL; l = g_list_next (l))
+            {
+                etfile = et_application_window_browser_get_et_file_from_path (self,
+                                                                              l->data);
+                has_undo    |= ET_File_Data_Has_Undo_Data(etfile);
+                has_redo    |= ET_File_Data_Has_Redo_Data(etfile);
+                //has_to_save |= ET_Check_If_File_Is_Saved(etfile);
+                if ((has_undo && has_redo /*&& has_to_save*/) || !l->next) // Useless to check the other files
+                    break;
+            }
+
+            g_list_free_full (selfilelist, (GDestroyNotify)gtk_tree_path_free);
+        }
+
+        /* Enable undo commands if there are undo data */
+        if (has_undo)
+        {
+            set_action_state (self, "undo-file-changes", TRUE);
+        }
+        else
+        {
+            set_action_state (self, "undo-file-changes", FALSE);
+        }
+
+        /* Enable redo commands if there are redo data */
+        if (has_redo)
+        {
+            set_action_state (self, "redo-file-changes", TRUE);
+        }
+        else
+        {
+            set_action_state (self, "redo-file-changes", FALSE);
+        }
+
+        /* Enable save file command if file has been changed */
+        // Desactivated because problem with only one file in the list, as we can't change the selected file => can't mark file as changed
+        /*if (has_to_save)
+            ui_widget_set_sensitive(MENU_FILE, AM_SAVE, FALSE);
+        else*/
+            set_action_state (self, "save", TRUE);
+        
+        set_action_state (self, "save-force", TRUE);
+
+        /* Enable undo command if there are data into main undo list (history list) */
+        if (ET_History_File_List_Has_Undo_Data ())
+        {
+            set_action_state (self, "undo-last-changes", TRUE);
+        }
+        else
+        {
+            set_action_state (self, "undo-last-changes", FALSE);
+        }
+
+        /* Enable redo commands if there are data into main redo list (history list) */
+        if (ET_History_File_List_Has_Redo_Data ())
+        {
+            set_action_state (self, "redo-last-changes", TRUE);
+        }
+        else
+        {
+            set_action_state (self, "redo-last-changes", FALSE);
+        }
+
+        {
+            GVariant *variant;
+            const gchar *state;
+
+            variant = g_action_group_get_action_state (G_ACTION_GROUP (self),
+                                                     "file-artist-view");
+
+            state = g_variant_get_string (variant, NULL);
+
+            if (strcmp (state, "artist") == 0)
+            {
+                set_action_state (self, "collapse-tree", FALSE);
+                set_action_state (self, "reload-tree", FALSE);
+            }
+            else if (strcmp (state, "file") == 0)
+            {
+                set_action_state (self, "collapse-tree", TRUE);
+                set_action_state (self, "reload-tree", TRUE);
+            }
+            else
+            {
+                g_assert_not_reached ();
+            }
+
+            g_variant_unref (variant);
+        }
+    }
+
+    if (!ETCore->ETFileDisplayedList->prev)    /* Is it the 1st item ? */
+    {
+        set_action_state (self, "go-previous", FALSE);
+        set_action_state (self, "go-first", FALSE);
+    }
+    else
+    {
+        set_action_state (self, "go-previous", TRUE);
+        set_action_state (self, "go-first", TRUE);
+    }
+
+    if (!ETCore->ETFileDisplayedList->next)    /* Is it the last item ? */
+    {
+        set_action_state (self, "go-next", FALSE);
+        set_action_state (self, "go-last", FALSE);
+    }
+    else
+    {
+        set_action_state (self, "go-next", TRUE);
+        set_action_state (self, "go-last", TRUE);
+    }
+}
+
+/*
+ * Display controls according the kind of tag... (Hide some controls if not available for a tag type)
+ */
+void
+et_application_window_tag_area_display_controls (EtApplicationWindow *self,
+                                                 const ET_File *ETFile)
+{
+    EtApplicationWindowPrivate *priv;
+
+    g_return_if_fail (ET_APPLICATION_WINDOW (self));
+    g_return_if_fail (ETFile != NULL && ETFile->ETFileDescription != NULL);
+
+    priv = et_application_window_get_instance_private (self);
+
+    et_tag_area_update_controls (ET_TAG_AREA (priv->tag_area), ETFile);
+}
+
+void
+et_application_window_browser_entry_set_text (EtApplicationWindow *self,
+                                              const gchar *text)
+{
+    EtApplicationWindowPrivate *priv;
+
+    priv = et_application_window_get_instance_private (self);
+
+    et_browser_entry_set_text (ET_BROWSER (priv->browser), text);
+}
+
+void
+et_application_window_browser_label_set_text (EtApplicationWindow *self,
+                                              const gchar *text)
+{
+    EtApplicationWindowPrivate *priv;
+
+    priv = et_application_window_get_instance_private (self);
+
+    et_browser_label_set_text (ET_BROWSER (priv->browser), text);
+}
+
+ET_File *
+et_application_window_browser_get_et_file_from_path (EtApplicationWindow *self,
+                                                     GtkTreePath *path)
+{
+    EtApplicationWindowPrivate *priv;
+
+    priv = et_application_window_get_instance_private (self);
+
+    return et_browser_get_et_file_from_path (ET_BROWSER (priv->browser), path);
+}
+
+ET_File *
+et_application_window_browser_get_et_file_from_iter (EtApplicationWindow *self,
+                                                     GtkTreeIter *iter)
+{
+    EtApplicationWindowPrivate *priv;
+
+    priv = et_application_window_get_instance_private (self);
+
+    return et_browser_get_et_file_from_iter (ET_BROWSER (priv->browser), iter);
+}
+
+GtkTreeSelection *
+et_application_window_browser_get_selection (EtApplicationWindow *self)
+{
+    EtApplicationWindowPrivate *priv;
+
+    priv = et_application_window_get_instance_private (self);
+
+    return et_browser_get_selection (ET_BROWSER (priv->browser));
+}
+
+GtkTreeViewColumn *
+et_application_window_browser_get_column_for_column_id (EtApplicationWindow *self,
+                                                        gint column_id)
+{
+    EtApplicationWindowPrivate *priv;
+
+    priv = et_application_window_get_instance_private (self);
+
+    return et_browser_get_column_for_column_id (ET_BROWSER (priv->browser),
+                                                column_id);
+}
+
+GtkSortType
+et_application_window_browser_get_sort_order_for_column_id (EtApplicationWindow *self,
+                                                            gint column_id)
+{
+    EtApplicationWindowPrivate *priv;
+
+    priv = et_application_window_get_instance_private (self);
+
+    return et_browser_get_sort_order_for_column_id (ET_BROWSER (priv->browser),
+                                                    column_id);
+}
+
+void
+et_application_window_browser_select_file_by_iter_string (EtApplicationWindow *self,
+                                                          const gchar *iter_string,
+                                                          gboolean select)
+{
+    EtApplicationWindowPrivate *priv;
+
+    priv = et_application_window_get_instance_private (self);
+
+    et_browser_select_file_by_iter_string (ET_BROWSER (priv->browser),
+                                           iter_string, select);
+}
+
+void
+et_application_window_browser_select_file_by_et_file (EtApplicationWindow *self,
+                                                      const ET_File *file,
+                                                      gboolean select)
+{
+    EtApplicationWindowPrivate *priv;
+
+    priv = et_application_window_get_instance_private (self);
+
+    return et_browser_select_file_by_et_file (ET_BROWSER (priv->browser), file,
+                                              select);
+}
+
+GtkTreePath *
+et_application_window_browser_select_file_by_et_file2 (EtApplicationWindow *self,
+                                                       const ET_File *file,
+                                                       gboolean select,
+                                                       GtkTreePath *start_path)
+{
+    EtApplicationWindowPrivate *priv;
+
+    priv = et_application_window_get_instance_private (self);
+
+    return et_browser_select_file_by_et_file2 (ET_BROWSER (priv->browser),
+                                               file, select, start_path);
+}
+
+ET_File *
+et_application_window_browser_select_file_by_dlm (EtApplicationWindow *self,
+                                                  const gchar *string,
+                                                  gboolean select)
+{
+    EtApplicationWindowPrivate *priv;
+
+    priv = et_application_window_get_instance_private (self);
+
+    return et_browser_select_file_by_dlm (ET_BROWSER (priv->browser), string,
+                                          select);
+}
+
+void
+et_application_window_browser_unselect_all (EtApplicationWindow *self)
+{
+    EtApplicationWindowPrivate *priv;
+
+    priv = et_application_window_get_instance_private (self);
+
+    /* Save the current displayed data */
+    ET_Save_File_Data_From_UI (ETCore->ETFileDisplayed);
+
+    et_browser_unselect_all (ET_BROWSER (priv->browser));
+    ETCore->ETFileDisplayed = NULL;
+}
+
+void
+et_application_window_browser_refresh_list (EtApplicationWindow *self)
+{
+    EtApplicationWindowPrivate *priv;
+
+    g_return_if_fail (ET_APPLICATION_WINDOW (self));
+
+    priv = et_application_window_get_instance_private (self);
+
+    et_browser_refresh_list (ET_BROWSER (priv->browser));
+}
+
+void
+et_application_window_browser_refresh_file_in_list (EtApplicationWindow *self,
+                                                    const ET_File *file)
+{
+    EtApplicationWindowPrivate *priv;
+
+    g_return_if_fail (ET_APPLICATION_WINDOW (self));
+
+    priv = et_application_window_get_instance_private (self);
+
+    et_browser_refresh_file_in_list (ET_BROWSER (priv->browser), file);
+}
+
+void
+et_application_window_browser_refresh_sort (EtApplicationWindow *self)
+{
+    EtApplicationWindowPrivate *priv;
+
+    g_return_if_fail (ET_APPLICATION_WINDOW (self));
+
+    priv = et_application_window_get_instance_private (self);
+
+    et_browser_refresh_sort (ET_BROWSER (priv->browser));
+}
+
+static void
+quit_confirmed (EtApplicationWindow *self)
+{
+    /* Save the configuration when exiting. */
+    et_application_window_apply_changes (self);
+    
+    /* Quit EasyTAG. */
+    Log_Print (LOG_OK, _("Normal exit"));
+
+    gtk_widget_destroy (GTK_WIDGET (self));
+}
+
+static void
+save_and_quit (EtApplicationWindow *self)
+{
+    /* Save modified tags */
+    if (Save_All_Files_With_Answer (FALSE) == -1)
+        return;
+
+    quit_confirmed (self);
+}
+
+void
+et_application_window_quit (EtApplicationWindow *self)
+{
+    GtkWidget *msgbox;
+    gint response;
+
+    /* If you change the displayed data and quit immediately */
+    if (ETCore->ETFileList)
+    {
+        ET_Save_File_Data_From_UI (ETCore->ETFileDisplayed);
+    }
+
+    /* Check if all files have been saved before exit */
+    if (g_settings_get_boolean (MainSettings, "confirm-when-unsaved-files")
+        && ET_Check_If_All_Files_Are_Saved () != TRUE)
+    {
+        /* Some files haven't been saved */
+        msgbox = gtk_message_dialog_new (GTK_WINDOW (self),
+                                         GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+                                         GTK_MESSAGE_QUESTION,
+                                         GTK_BUTTONS_NONE,
+                                         "%s",
+                                         _("Some files have been modified but not saved"));
+        gtk_dialog_add_buttons (GTK_DIALOG (msgbox), _("_Discard"),
+                                GTK_RESPONSE_NO, _("_Cancel"),
+                                GTK_RESPONSE_CANCEL, _("_Save"),
+                                GTK_RESPONSE_YES, NULL);
+        gtk_dialog_set_default_response (GTK_DIALOG (msgbox),
+                                         GTK_RESPONSE_YES);
+        gtk_window_set_title (GTK_WINDOW (msgbox), _("Quit"));
+        gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (msgbox),
+                                                  "%s",
+                                                  _("Do you want to save them before quitting?"));
+        response = gtk_dialog_run (GTK_DIALOG (msgbox));
+        gtk_widget_destroy (msgbox);
+
+        switch (response)
+        {
+            case GTK_RESPONSE_YES:
+                save_and_quit (self);
+                break;
+            case GTK_RESPONSE_NO:
+                quit_confirmed (self);
+                break;
+            case GTK_RESPONSE_CANCEL:
+            case GTK_RESPONSE_DELETE_EVENT:
+                return;
+                break;
+            default:
+                g_assert_not_reached ();
+                break;
+        }
+
+    }
+    else if (g_settings_get_boolean (MainSettings, "confirm-quit"))
+    {
+        msgbox = gtk_message_dialog_new (GTK_WINDOW (self),
+                                         GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+                                         GTK_MESSAGE_QUESTION,
+                                         GTK_BUTTONS_NONE,
+                                         "%s",
+                                         _("Do you really want to quit?"));
+         gtk_dialog_add_buttons (GTK_DIALOG (msgbox), _("_Cancel"),
+                                 GTK_RESPONSE_CANCEL, _("_Quit"),
+                                 GTK_RESPONSE_CLOSE, NULL);
+        gtk_dialog_set_default_response (GTK_DIALOG (msgbox),
+                                         GTK_RESPONSE_CLOSE);
+        gtk_window_set_title (GTK_WINDOW (msgbox), _("Quit"));
+        response = gtk_dialog_run (GTK_DIALOG (msgbox));
+        gtk_widget_destroy (msgbox);
+
+        switch (response)
+        {
+            case GTK_RESPONSE_CLOSE:
+                quit_confirmed (self);
+                break;
+            case GTK_RESPONSE_CANCEL:
+            case GTK_RESPONSE_DELETE_EVENT:
+                return;
+                break;
+            default:
+                g_assert_not_reached ();
+                break;
+        }
+    }
+    else
+    {
+        quit_confirmed (self);
+    }
+}
diff --git a/src/application_window.h b/src/application_window.h
new file mode 100644
index 0000000..fd4528e
--- /dev/null
+++ b/src/application_window.h
@@ -0,0 +1,96 @@
+/* EasyTAG - tag editor for audio files
+ * Copyright (C) 2013  David King <amigadave at amigadave.com>
+ *
+ * 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 (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+#ifndef ET_APPLICATION_WINDOW_H_
+#define ET_APPLICATION_WINDOW_H_
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#include "et_core.h"
+
+#define ET_TYPE_APPLICATION_WINDOW (et_application_window_get_type ())
+#define ET_APPLICATION_WINDOW(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), ET_TYPE_APPLICATION_WINDOW, EtApplicationWindow))
+
+typedef struct _EtApplicationWindow EtApplicationWindow;
+typedef struct _EtApplicationWindowClass EtApplicationWindowClass;
+typedef struct _EtApplicationWindowPrivate EtApplicationWindowPrivate;
+
+struct _EtApplicationWindow
+{
+    /*< private >*/
+    GtkApplicationWindow parent_instance;
+    EtApplicationWindowPrivate *priv;
+};
+
+struct _EtApplicationWindowClass
+{
+    /*< private >*/
+    GtkApplicationWindowClass parent_class;
+};
+
+GType et_application_window_get_type (void);
+EtApplicationWindow *et_application_window_new (GtkApplication *application);
+File_Tag * et_application_window_tag_area_create_file_tag (EtApplicationWindow *self);
+gboolean et_application_window_tag_area_display_et_file (EtApplicationWindow *self, const ET_File *ETFile);
+void et_application_window_tag_area_clear (EtApplicationWindow *self);
+void et_application_window_tag_area_set_sensitive (EtApplicationWindow *self, gboolean sensitive);
+const gchar * et_application_window_file_area_get_filename (EtApplicationWindow *self);
+void et_application_window_file_area_set_file_fields (EtApplicationWindow *self, const ET_File *ETFile);
+void et_application_window_file_area_set_header_fields (EtApplicationWindow *self, EtFileHeaderFields *fields);
+void et_application_window_file_area_clear (EtApplicationWindow *self);
+void et_application_window_file_area_set_sensitive (EtApplicationWindow *self, gboolean sensitive);
+void et_application_window_disable_command_actions (EtApplicationWindow *self);
+void et_application_window_update_actions (EtApplicationWindow *self);
+void et_application_window_tag_area_display_controls (EtApplicationWindow *self, const ET_File *ETFile);
+GtkWidget * et_application_window_get_log_area (EtApplicationWindow *self);
+void et_application_window_show_preferences_dialog_scanner (EtApplicationWindow *self);
+void et_application_window_browser_toggle_display_mode (EtApplicationWindow *self);
+void et_application_window_browser_set_sensitive (EtApplicationWindow *self, gboolean sensitive);
+void et_application_window_browser_clear (EtApplicationWindow *self);
+void et_application_window_browser_clear_album_model (EtApplicationWindow *self);
+void et_application_window_browser_clear_artist_model (EtApplicationWindow *self);
+void et_application_window_select_dir (EtApplicationWindow *self, const gchar *path);
+const gchar * et_application_window_get_current_path (EtApplicationWindow *self);
+GtkWidget * et_application_window_get_scan_dialog (EtApplicationWindow *self);
+void et_application_window_apply_changes (EtApplicationWindow *self);
+void et_application_window_browser_entry_set_text (EtApplicationWindow *self, const gchar *text);
+void et_application_window_browser_label_set_text (EtApplicationWindow *self, const gchar *text);
+ET_File * et_application_window_browser_get_et_file_from_path (EtApplicationWindow *self, GtkTreePath *path);
+ET_File * et_application_window_browser_get_et_file_from_iter (EtApplicationWindow *self, GtkTreeIter *iter);
+GtkTreeSelection * et_application_window_browser_get_selection (EtApplicationWindow *self);
+GtkTreeViewColumn *et_application_window_browser_get_column_for_column_id (EtApplicationWindow *self, gint column_id);
+GtkSortType et_application_window_browser_get_sort_order_for_column_id (EtApplicationWindow *self, gint column_id);
+void et_application_window_browser_select_file_by_iter_string (EtApplicationWindow *self, const gchar *iter_string, gboolean select);
+void et_application_window_browser_select_file_by_et_file (EtApplicationWindow *self, const ET_File *file, gboolean select);
+GtkTreePath * et_application_window_browser_select_file_by_et_file2 (EtApplicationWindow *self, const ET_File *file, gboolean select, GtkTreePath *start_path);
+ET_File * et_application_window_browser_select_file_by_dlm (EtApplicationWindow *self, const gchar *string, gboolean select);
+void et_application_window_browser_unselect_all (EtApplicationWindow *self);
+void et_application_window_browser_refresh_list (EtApplicationWindow *self);
+void et_application_window_browser_refresh_file_in_list (EtApplicationWindow *self, const ET_File *file);
+void et_application_window_browser_refresh_sort (EtApplicationWindow *self);
+void et_application_window_scan_dialog_update_previews (EtApplicationWindow *self);
+void et_application_window_progress_set_fraction (EtApplicationWindow *self, gdouble fraction);
+void et_application_window_progress_set_text (EtApplicationWindow *self, const gchar *text);
+void et_application_window_status_bar_message (EtApplicationWindow *self, const gchar *message, gboolean with_timer);
+void et_application_window_quit (EtApplicationWindow *self);
+
+G_END_DECLS
+
+#endif /* !ET_APPLICATION_WINDOW_H_ */
diff --git a/src/bar.c b/src/bar.c
deleted file mode 100644
index 495c0b1..0000000
--- a/src/bar.c
+++ /dev/null
@@ -1,739 +0,0 @@
-/* bar.c - 2000/05/05 */
-/*
- *  EasyTAG - Tag editor for MP3 and Ogg Vorbis files
- *  Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
- *
- *  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
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include <config.h>
-
-#include <gtk/gtk.h>
-#include <glib/gi18n.h>
-
-#include "bar.h"
-#include "easytag.h"
-#include "about.h"
-#include "prefs.h"
-#include "setting.h"
-#include "browser.h"
-#include "scan_dialog.h"
-#include "cddb.h"
-#include "log.h"
-#include "misc.h"
-#include "charset.h"
-#include "ui_manager.h"
-#include "gtk2_compat.h"
-
-/***************
- * Declaration *
- ***************/
-static GtkWidget *StatusBar = NULL;
-static guint StatusBarContext;
-static guint timer_cid;
-static guint tooltip_cid;
-static guint StatusbarTimerId = 0;
-static GList *ActionPairsList = NULL;
-
-/**************
- * Prototypes *
- **************/
-
-static void Check_Menu_Item_Toggled_Browse_Hidden_Dir (GtkWidget *checkmenuitem);
-static void Check_Menu_Item_Toggled_Browse_Subdir (GtkWidget *checkmenuitem);
-static void Init_Menu_Bar (void);
-static void Statusbar_Remove_Timer (void);
-
-static void et_statusbar_push_tooltip (const gchar *message);
-static void et_statusbar_pop_tooltip (void);
-static void et_ui_manager_on_connect_proxy (GtkUIManager *manager,
-                                            GtkAction *action,
-                                            GtkWidget *proxy,
-                                            gpointer user_data);
-static void et_ui_manager_on_disconnect_proxy (GtkUIManager *manager,
-                                               GtkAction *action,
-                                               GtkWidget *proxy,
-                                               gpointer user_data);
-static void on_menu_item_select (GtkMenuItem *item, gpointer user_data);
-static void on_menu_item_deselect (GtkMenuItem *item, gpointer user_data);
-
-/*************
- * Functions o
- *************/
-
-/*
- * Dynamic reimplementation of switch macros
- */
-#define QCASE(string,callback) if (quark == g_quark_from_string((string))) { (callback)(); }
-#define QCASE_DATA(string,callback,data) if (quark == g_quark_from_string((string))) { (callback)((data)); }
-
-/*
- * Menu bar
- */
-static void
-Menu_Sort_Action (GtkAction *item, gpointer data)
-{
-    const gchar *action = gtk_action_get_name(item);
-    GQuark quark = g_quark_from_string(action);
-
-    QCASE_DATA(AM_SORT_ASCENDING_FILENAME,         ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_ASCENDING_FILENAME);
-    QCASE_DATA(AM_SORT_DESCENDING_FILENAME,        ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_DESCENDING_FILENAME);
-    QCASE_DATA(AM_SORT_ASCENDING_CREATION_DATE,    ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_ASCENDING_CREATION_DATE);
-    QCASE_DATA(AM_SORT_DESCENDING_CREATION_DATE,   ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_DESCENDING_CREATION_DATE);
-    QCASE_DATA(AM_SORT_ASCENDING_TRACK_NUMBER,     ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_ASCENDING_TRACK_NUMBER);
-    QCASE_DATA(AM_SORT_DESCENDING_TRACK_NUMBER,    ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_DESCENDING_TRACK_NUMBER);
-    QCASE_DATA(AM_SORT_ASCENDING_TITLE,            ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_ASCENDING_TITLE);
-    QCASE_DATA(AM_SORT_DESCENDING_TITLE,           ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_DESCENDING_TITLE);
-    QCASE_DATA(AM_SORT_ASCENDING_ARTIST,           ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_ASCENDING_ARTIST);
-    QCASE_DATA(AM_SORT_DESCENDING_ARTIST,          ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_DESCENDING_ARTIST);
-    QCASE_DATA(AM_SORT_ASCENDING_ALBUM_ARTIST,     ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_ASCENDING_ALBUM_ARTIST);
-    QCASE_DATA(AM_SORT_DESCENDING_ALBUM_ARTIST,    ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_DESCENDING_ALBUM_ARTIST);
-    QCASE_DATA(AM_SORT_ASCENDING_ALBUM,            ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_ASCENDING_ALBUM);
-    QCASE_DATA(AM_SORT_DESCENDING_ALBUM,           ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_DESCENDING_ALBUM);
-    QCASE_DATA(AM_SORT_ASCENDING_YEAR,             ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_ASCENDING_YEAR);
-    QCASE_DATA(AM_SORT_DESCENDING_YEAR,            ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_DESCENDING_YEAR);
-    QCASE_DATA(AM_SORT_ASCENDING_GENRE,            ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_ASCENDING_GENRE);
-    QCASE_DATA(AM_SORT_DESCENDING_GENRE,           ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_DESCENDING_GENRE);
-    QCASE_DATA(AM_SORT_ASCENDING_COMMENT,          ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_ASCENDING_COMMENT);
-    QCASE_DATA(AM_SORT_DESCENDING_COMMENT,         ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_DESCENDING_COMMENT);
-    QCASE_DATA(AM_SORT_ASCENDING_COMPOSER,         ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_ASCENDING_COMPOSER);
-    QCASE_DATA(AM_SORT_DESCENDING_COMPOSER,        ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_DESCENDING_COMPOSER);
-    QCASE_DATA(AM_SORT_ASCENDING_ORIG_ARTIST,      ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_ASCENDING_ORIG_ARTIST);
-    QCASE_DATA(AM_SORT_DESCENDING_ORIG_ARTIST,     ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_DESCENDING_ORIG_ARTIST);
-    QCASE_DATA(AM_SORT_ASCENDING_COPYRIGHT,        ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_ASCENDING_COPYRIGHT);
-    QCASE_DATA(AM_SORT_DESCENDING_COPYRIGHT,       ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_DESCENDING_COPYRIGHT);
-    QCASE_DATA(AM_SORT_ASCENDING_URL,              ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_ASCENDING_URL);
-    QCASE_DATA(AM_SORT_DESCENDING_URL,             ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_DESCENDING_URL);
-    QCASE_DATA(AM_SORT_ASCENDING_ENCODED_BY,       ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_ASCENDING_ENCODED_BY);
-    QCASE_DATA(AM_SORT_DESCENDING_ENCODED_BY,      ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_DESCENDING_ENCODED_BY);
-    QCASE_DATA(AM_SORT_ASCENDING_FILE_TYPE,        ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_ASCENDING_FILE_TYPE);
-    QCASE_DATA(AM_SORT_DESCENDING_FILE_TYPE,       ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_DESCENDING_FILE_TYPE);
-    QCASE_DATA(AM_SORT_ASCENDING_FILE_SIZE,        ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_ASCENDING_FILE_SIZE);
-    QCASE_DATA(AM_SORT_DESCENDING_FILE_SIZE,       ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_DESCENDING_FILE_SIZE);
-    QCASE_DATA(AM_SORT_ASCENDING_FILE_DURATION,    ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_ASCENDING_FILE_DURATION);
-    QCASE_DATA(AM_SORT_DESCENDING_FILE_DURATION,   ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_DESCENDING_FILE_DURATION);
-    QCASE_DATA(AM_SORT_ASCENDING_FILE_BITRATE,     ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_ASCENDING_FILE_BITRATE);
-    QCASE_DATA(AM_SORT_DESCENDING_FILE_BITRATE,    ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_DESCENDING_FILE_BITRATE);
-    QCASE_DATA(AM_SORT_ASCENDING_FILE_SAMPLERATE,  ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_ASCENDING_FILE_SAMPLERATE);
-    QCASE_DATA(AM_SORT_DESCENDING_FILE_SAMPLERATE, ET_Sort_Displayed_File_List_And_Update_UI, SORTING_BY_DESCENDING_FILE_SAMPLERATE);
-    QCASE_DATA(AM_INITIALIZE_TREE,                 Browser_Tree_Rebuild,                      NULL);
-    Browser_List_Refresh_Sort ();
-}
-
-void Create_UI (GtkWidget **ppmenubar, GtkWidget **pptoolbar)
-{
-    GtkWidget *menubar;
-    GtkWidget *toolbar;
-
-    /*
-     * Structure :
-     *  - name
-     *  - stock_id
-     *  - label
-     *  - accelerator
-     *  - tooltip
-     *  - callback
-     */
-    GtkActionEntry ActionEntries[] =
-    {
-
-        /*
-         * Main Menu Actions
-         */
-        { MENU_FILE,                          NULL,                      _("_File"),                         NULL, NULL,                               NULL},
-        { MENU_FILE_SORT_TAG, GTK_STOCK_SORT_ASCENDING, _("Sort List by Tag"),
-          NULL, NULL, NULL },
-        { MENU_FILE_SORT_PROP, GTK_STOCK_SORT_ASCENDING,
-          _("Sort List by Property"), NULL, NULL, NULL },
-        { AM_SORT_ASCENDING_FILENAME,         GTK_STOCK_SORT_ASCENDING,  _("Ascending by filename"),         NULL, _("Ascending by filename"),         G_CALLBACK(Menu_Sort_Action) },
-        { AM_SORT_DESCENDING_FILENAME,        GTK_STOCK_SORT_DESCENDING, _("Descending by filename"),        NULL, _("Descending by filename"),        G_CALLBACK(Menu_Sort_Action) },
-        { AM_SORT_ASCENDING_CREATION_DATE,    GTK_STOCK_SORT_ASCENDING,  _("Ascending by creation date"),    NULL, _("Ascending by creation date"),    G_CALLBACK(Menu_Sort_Action) },
-        { AM_SORT_DESCENDING_CREATION_DATE,   GTK_STOCK_SORT_DESCENDING, _("Descending by creation date"),   NULL, _("Descending by creation date"),   G_CALLBACK(Menu_Sort_Action) },
-        { AM_SORT_ASCENDING_TRACK_NUMBER,     GTK_STOCK_SORT_ASCENDING,  _("Ascending by track number"),     NULL, _("Ascending by track number"),     G_CALLBACK(Menu_Sort_Action) },
-        { AM_SORT_DESCENDING_TRACK_NUMBER,    GTK_STOCK_SORT_DESCENDING, _("Descending by track number"),    NULL, _("Descending by track number"),    G_CALLBACK(Menu_Sort_Action) },
-        { AM_SORT_ASCENDING_TITLE,            GTK_STOCK_SORT_ASCENDING,  _("Ascending by title"),            NULL, _("Ascending by title"),            G_CALLBACK(Menu_Sort_Action) },
-        { AM_SORT_DESCENDING_TITLE,           GTK_STOCK_SORT_DESCENDING, _("Descending by title"),           NULL, _("Descending by title"),           G_CALLBACK(Menu_Sort_Action) },
-        { AM_SORT_ASCENDING_ARTIST,           GTK_STOCK_SORT_ASCENDING,  _("Ascending by artist"),           NULL, _("Ascending by artist"),           G_CALLBACK(Menu_Sort_Action) },
-        { AM_SORT_DESCENDING_ARTIST,          GTK_STOCK_SORT_DESCENDING, _("Descending by artist"),          NULL, _("Descending by artist"),          G_CALLBACK(Menu_Sort_Action) },
-        { AM_SORT_ASCENDING_ALBUM_ARTIST,     GTK_STOCK_SORT_ASCENDING,  _("Ascending by album artist"),     NULL, _("Ascending by album artist"),   G_CALLBACK(Menu_Sort_Action) },
-        { AM_SORT_DESCENDING_ALBUM_ARTIST,    GTK_STOCK_SORT_DESCENDING, _("Descending by album artist"),    NULL, _("Descending by album artist"),   G_CALLBACK(Menu_Sort_Action) },
-        { AM_SORT_ASCENDING_ALBUM,            GTK_STOCK_SORT_ASCENDING,  _("Ascending by album"),            NULL, _("Ascending by album"),            G_CALLBACK(Menu_Sort_Action) },
-        { AM_SORT_DESCENDING_ALBUM,           GTK_STOCK_SORT_DESCENDING, _("Descending by album"),           NULL, _("Descending by album"),           G_CALLBACK(Menu_Sort_Action) },
-        { AM_SORT_ASCENDING_YEAR,             GTK_STOCK_SORT_ASCENDING,  _("Ascending by year"),             NULL, _("Ascending by year"),             G_CALLBACK(Menu_Sort_Action) },
-        { AM_SORT_DESCENDING_YEAR,            GTK_STOCK_SORT_DESCENDING, _("Descending by year"),            NULL, _("Descending by year"),            G_CALLBACK(Menu_Sort_Action) },
-        { AM_SORT_ASCENDING_GENRE,            GTK_STOCK_SORT_ASCENDING,  _("Ascending by genre"),            NULL, _("Ascending by genre"),            G_CALLBACK(Menu_Sort_Action) },
-        { AM_SORT_DESCENDING_GENRE,           GTK_STOCK_SORT_DESCENDING, _("Descending by genre"),           NULL, _("Descending by genre"),           G_CALLBACK(Menu_Sort_Action) },
-        { AM_SORT_ASCENDING_COMMENT,          GTK_STOCK_SORT_ASCENDING,  _("Ascending by comment"),          NULL, _("Ascending by comment"),          G_CALLBACK(Menu_Sort_Action) },
-        { AM_SORT_DESCENDING_COMMENT,         GTK_STOCK_SORT_DESCENDING, _("Descending by comment"),         NULL, _("Descending by comment"),         G_CALLBACK(Menu_Sort_Action) },
-        { AM_SORT_ASCENDING_COMPOSER,         GTK_STOCK_SORT_ASCENDING,  _("Ascending by composer"),         NULL, _("Ascending by composer"),         G_CALLBACK(Menu_Sort_Action) },
-        { AM_SORT_DESCENDING_COMPOSER,        GTK_STOCK_SORT_DESCENDING, _("Descending by composer"),        NULL, _("Descending by composer"),        G_CALLBACK(Menu_Sort_Action) },
-        { AM_SORT_ASCENDING_ORIG_ARTIST,      GTK_STOCK_SORT_ASCENDING,  _("Ascending by original artist"),  NULL, _("Ascending by original artist"),  G_CALLBACK(Menu_Sort_Action) },
-        { AM_SORT_DESCENDING_ORIG_ARTIST,     GTK_STOCK_SORT_DESCENDING, _("Descending by original artist"), NULL, _("Descending by original artist"), G_CALLBACK(Menu_Sort_Action) },
-        { AM_SORT_ASCENDING_COPYRIGHT,        GTK_STOCK_SORT_ASCENDING,  _("Ascending by copyright"),        NULL, _("Ascending by copyright"),        G_CALLBACK(Menu_Sort_Action) },
-        { AM_SORT_DESCENDING_COPYRIGHT,       GTK_STOCK_SORT_DESCENDING, _("Descending by copyright"),       NULL, _("Descending by copyright"),       G_CALLBACK(Menu_Sort_Action) },
-        { AM_SORT_ASCENDING_URL,              GTK_STOCK_SORT_ASCENDING,  _("Ascending by URL"),              NULL, _("Ascending by URL"),              G_CALLBACK(Menu_Sort_Action) },
-        { AM_SORT_DESCENDING_URL,             GTK_STOCK_SORT_DESCENDING, _("Descending by URL"),             NULL, _("Descending by URL"),             G_CALLBACK(Menu_Sort_Action) },
-	/* Translators: the encoder name is supposed to be the name of a person
-         * or organisation, but can sometimes be the name of an application. */
-        { AM_SORT_ASCENDING_ENCODED_BY,       GTK_STOCK_SORT_ASCENDING,  _("Ascending by encoder name"),     NULL, _("Ascending by encoder name"),     G_CALLBACK(Menu_Sort_Action) },
-	/* Translators: the encoder name is supposed to be the name of a person
-         * or organisation, but can sometimes be the name of an application. */
-        { AM_SORT_DESCENDING_ENCODED_BY,      GTK_STOCK_SORT_DESCENDING, _("Descending by encoder name"),    NULL, _("Descending by encoder name"),    G_CALLBACK(Menu_Sort_Action) },
-        { AM_SORT_ASCENDING_FILE_TYPE,        GTK_STOCK_SORT_ASCENDING,  _("Ascending by file type"),        NULL, _("Ascending by file type"),        G_CALLBACK(Menu_Sort_Action) },
-        { AM_SORT_DESCENDING_FILE_TYPE,       GTK_STOCK_SORT_DESCENDING, _("Descending by file type"),       NULL, _("Descending by file type"),       G_CALLBACK(Menu_Sort_Action) },
-        { AM_SORT_ASCENDING_FILE_SIZE,        GTK_STOCK_SORT_ASCENDING,  _("Ascending by file size"),        NULL, _("Ascending by file size"),        G_CALLBACK(Menu_Sort_Action) },
-        { AM_SORT_DESCENDING_FILE_SIZE,       GTK_STOCK_SORT_DESCENDING, _("Descending by file size"),       NULL, _("Descending by file size"),       G_CALLBACK(Menu_Sort_Action) },
-        { AM_SORT_ASCENDING_FILE_DURATION,    GTK_STOCK_SORT_ASCENDING,  _("Ascending by duration"),         NULL, _("Ascending by duration"),         G_CALLBACK(Menu_Sort_Action) },
-        { AM_SORT_DESCENDING_FILE_DURATION,   GTK_STOCK_SORT_DESCENDING, _("Descending by duration"),        NULL, _("Descending by duration"),        G_CALLBACK(Menu_Sort_Action) },
-        { AM_SORT_ASCENDING_FILE_BITRATE,     GTK_STOCK_SORT_ASCENDING,  _("Ascending by bitrate"),          NULL, _("Ascending by bitrate"),          G_CALLBACK(Menu_Sort_Action) },
-        { AM_SORT_DESCENDING_FILE_BITRATE,    GTK_STOCK_SORT_DESCENDING, _("Descending by bitrate"),         NULL, _("Descending by bitrate"),         G_CALLBACK(Menu_Sort_Action) },
-        { AM_SORT_ASCENDING_FILE_SAMPLERATE,  GTK_STOCK_SORT_ASCENDING,  _("Ascending by samplerate"),       NULL, _("Ascending by samplerate"),       G_CALLBACK(Menu_Sort_Action) },
-        { AM_SORT_DESCENDING_FILE_SAMPLERATE, GTK_STOCK_SORT_DESCENDING, _("Descending by samplerate"),      NULL, _("Descending by samplerate"),      G_CALLBACK(Menu_Sort_Action) },
-
-        { AM_OPEN_FILE_WITH, GTK_STOCK_OPEN, _("Open Files With…"),
-          "<Primary><Shift>O", _("Run a command on the selected files"),
-          G_CALLBACK (Browser_Open_Run_Program_List_Window) },
-        { AM_SELECT_ALL, GTK_STOCK_SELECT_ALL, NULL, "<Primary>A",
-          _("Select all"), G_CALLBACK (et_on_action_select_all) },
-        { AM_UNSELECT_ALL, "easytag-unselect-all", _("Unselect All"),
-          "<Primary><Shift>A", _("Clear the current selection"),
-          G_CALLBACK (et_on_action_unselect_all) },
-        { AM_INVERT_SELECTION, "easytag-invert-selection",
-          _("Invert File Selection"), "<Primary>I",
-          _("Invert file selection"),
-          G_CALLBACK (Action_Invert_Files_Selection) },
-        { AM_DELETE_FILE,        GTK_STOCK_DELETE,           _("Delete Files"),             NULL,                _("Delete files"),            G_CALLBACK(Action_Delete_Selected_Files) },
-        { AM_FIRST, GTK_STOCK_GOTO_FIRST, _("_First File"), "<Primary>Home",
-          _("First file"), G_CALLBACK (Action_Select_First_File) },
-        { AM_PREV,               GTK_STOCK_GO_BACK,          _("_Previous File"),             "Page_Up",           _("Previous file"),             G_CALLBACK(Action_Select_Prev_File) },
-        { AM_NEXT,               GTK_STOCK_GO_FORWARD,       _("_Next File"),                 "Page_Down",         _("Next file"),                 G_CALLBACK(Action_Select_Next_File) },
-        { AM_LAST, GTK_STOCK_GOTO_LAST, _("_Last File"), "<Primary>End",
-          _("Last file"), G_CALLBACK (Action_Select_Last_File) },
-        { AM_SCAN_FILES, GTK_STOCK_APPLY, _("S_can Files"), NULL,
-          _("Scan selected files"), G_CALLBACK (Action_Scan_Selected_Files) },
-        { AM_REMOVE, GTK_STOCK_CLEAR, _("_Remove Tags"), "<Primary>E",
-          _("Remove tags"), G_CALLBACK (Action_Remove_Selected_Tags) },
-        { AM_UNDO, GTK_STOCK_UNDO, _("_Undo Last Files Changes"), "<Primary>Z",
-          _("Undo last files changes"),
-          G_CALLBACK(Action_Undo_Selected_Files) },
-        { AM_REDO, GTK_STOCK_REDO, _("R_edo Last Files Changes"),
-          "<Primary><Shift>Z", _("Redo last files changes"),
-          G_CALLBACK (Action_Redo_Selected_File) },
-        { AM_SAVE, GTK_STOCK_SAVE, _("_Save Files"), "<Primary>S",
-          _("Save changes to selected files"),
-          G_CALLBACK(Action_Save_Selected_Files) },
-        { AM_SAVE_FORCED, GTK_STOCK_SAVE, _("_Force Save Files"),
-          "<Primary><Shift>S", _("Force saving files"),
-          G_CALLBACK (Action_Force_Saving_Selected_Files) },
-        { AM_UNDO_HISTORY,       GTK_STOCK_UNDO,             _("Undo Last Changes"),          NULL,                _("Undo last changes"),         G_CALLBACK(Action_Undo_From_History_List) },
-        { AM_REDO_HISTORY,       GTK_STOCK_REDO,             _("Redo Last Changes"),          NULL,                _("Redo last changes"),         G_CALLBACK(Action_Redo_From_History_List) },
-        { AM_QUIT, GTK_STOCK_QUIT, _("_Quit"), "<Primary>Q", _("Quit"),
-          G_CALLBACK (Quit_MainWindow) },
-
-        { MENU_BROWSER,                NULL,                   _("_Browser"),                      NULL,                NULL,                               NULL },
-        { AM_LOAD_HOME_DIR, GTK_STOCK_HOME, _("_Home Directory"), "<Alt>Home",
-          _("Go to home directory"),
-          G_CALLBACK (Browser_Load_Home_Directory) },
-        { AM_LOAD_DESKTOP_DIR, "user-desktop", _("Desktop Directory"), NULL,
-          _("Go to desktop directory"),
-          G_CALLBACK (Browser_Load_Desktop_Directory) },
-        { AM_LOAD_DOCUMENTS_DIR, "folder-documents", _("Documents Directory"),
-          NULL, _("Go to documents directory"),
-          G_CALLBACK (Browser_Load_Documents_Directory) },
-        { AM_LOAD_DOWNLOADS_DIR, "folder-download", _("Downloads Directory"),
-          NULL, _("Go to downloads directory"),
-          G_CALLBACK (Browser_Load_Downloads_Directory) },
-        { AM_LOAD_MUSIC_DIR, "folder-music", _("Music Directory"), NULL,
-          _("Go to music directory"),
-          G_CALLBACK (Browser_Load_Music_Directory) },
-        { AM_LOAD_PARENT_DIR, GTK_STOCK_GO_UP, _("_Parent Directory"),
-          "<Alt>Up", _("Go to parent directory"),
-          G_CALLBACK (et_browser_on_action_parent_directory) },
-        { AM_LOAD_DEFAULT_DIR, GTK_STOCK_JUMP_TO, _("_Default Directory"),
-          "<Primary>D", _("Go to default directory"),
-          G_CALLBACK (Browser_Load_Default_Directory) },
-        { AM_SET_PATH_AS_DEFAULT,      GTK_STOCK_DIRECTORY,    _("Set _Current Path as Default"),  NULL,                _("Set current path as default"),   G_CALLBACK(Set_Current_Path_As_Default) },
-        { AM_RENAME_DIR,               GTK_STOCK_INDEX,        _("Rename Directory…"),          "F2",                _("Rename directory"),          G_CALLBACK(Browser_Open_Rename_Directory_Window) },
-        { AM_RELOAD_DIRECTORY, GTK_STOCK_REFRESH, _("Reload Directory"),
-          "<Primary>R", _("Reload directory"),
-          G_CALLBACK (Browser_Reload_Directory) },
-        { AM_BROWSE_DIRECTORY_WITH, GTK_STOCK_EXECUTE,
-          _("Browse Directory With…"), NULL,
-          _("Run a command on the directory"),
-          G_CALLBACK (Browser_Open_Run_Program_Tree_Window) },
-        { AM_COLLAPSE_TREE, NULL, _("_Collapse Tree"), "<Primary><Shift>C",
-          _("Collapse directory tree"), G_CALLBACK (Browser_Tree_Collapse) },
-        { AM_INITIALIZE_TREE, GTK_STOCK_REFRESH, _("_Reload Tree"),
-          "<Primary><Shift>R", _("Reload directory tree"),
-          G_CALLBACK (Browser_Tree_Rebuild) },
-
-        { MENU_SCANNER, NULL, _("S_canner Mode"), NULL, NULL, NULL },
-
-        { MENU_MISC,                NULL,                   _("_Miscellaneous"),                             NULL,         NULL,                                 NULL },
-        { AM_SEARCH_FILE, GTK_STOCK_FIND, _("_Find…"), "<Primary>F",
-          _("Search filenames and tags"),
-          G_CALLBACK (Open_Search_File_Window) },
-        { AM_CDDB_SEARCH, GTK_STOCK_CDROM, _("CDD_B Search…"), "<Primary>B",
-          _("CDDB search"), G_CALLBACK (Open_Cddb_Window) },
-        { AM_FILENAME_FROM_TXT, GTK_STOCK_OPEN,
-          _("Load Filenames From a Text File…"), "<Primary>T",
-          _("Load filenames from a text file"),
-          G_CALLBACK (Open_Load_Filename_Window) },
-        { AM_WRITE_PLAYLIST, GTK_STOCK_SAVE_AS, _("Generate Playlist…"),
-          "<Primary>W", _("Generate a playlist"),
-          G_CALLBACK (Open_Write_Playlist_Window) },
-        { AM_RUN_AUDIO_PLAYER, GTK_STOCK_MEDIA_PLAY, _("Run Audio Player"),
-          "<Primary>M", _("Run audio player"),
-          G_CALLBACK (Run_Audio_Player_Using_Selection) },
-
-        { MENU_EDIT, NULL, _("_Edit"), NULL, NULL, NULL },
-        { AM_OPEN_OPTIONS_WINDOW, GTK_STOCK_PREFERENCES, _("_Preferences"),
-          NULL, _("Preferences"), G_CALLBACK (Open_OptionsWindow) },
-
-        { MENU_VIEW, NULL, _("_View"), NULL, NULL, NULL },
-        { MENU_GO, NULL, _("_Go"), NULL, NULL, NULL },
-
-        { MENU_HELP,                NULL,                   _("_Help"),                             NULL,         NULL,                                 NULL },
-/* TODO: Link to help.gnome.org, or locally-installed help, on Windows. */
-#ifndef G_OS_WIN32
-        { AM_OPEN_HELP_CONTENTS, GTK_STOCK_HELP, _("_Contents"), "F1",
-          _("Show help"), G_CALLBACK (et_show_help) },
-#endif
-        { AM_OPEN_ABOUT_WINDOW,     GTK_STOCK_ABOUT,        _("_About"),                            NULL,         _("About"),                           G_CALLBACK(Show_About_Window) },
-
-
-        /*
-         * Following items are on toolbar but not on menu
-         */
-        { AM_STOP, GTK_STOCK_STOP, _("Stop the current action"), NULL, _("Stop the current action"), G_CALLBACK(Action_Main_Stop_Button_Pressed) },
-
-
-        /*
-         * Popup menu's Actions
-         */
-        { POPUP_FILE,                   NULL,              _("_File Operations"),          NULL, NULL,                         NULL },
-        { POPUP_SUBMENU_SCANNER,        "document-properties",    _("S_canner"),                  NULL, NULL,                         NULL },
-        { POPUP_DIR_RUN_AUDIO,          GTK_STOCK_MEDIA_PLAY,   _("Run Audio Player"),          NULL, _("Run audio player"),        G_CALLBACK(Run_Audio_Player_Using_Directory) },
-        { AM_ARTIST_RUN_AUDIO_PLAYER,   GTK_STOCK_MEDIA_PLAY,   _("Run Audio Player"),          NULL, _("Run audio player"),        G_CALLBACK(Run_Audio_Player_Using_Browser_Artist_List) },
-        { AM_ALBUM_RUN_AUDIO_PLAYER,    GTK_STOCK_MEDIA_PLAY,   _("Run Audio Player"),          NULL, _("Run audio player"),        G_CALLBACK(Run_Audio_Player_Using_Browser_Album_List)  },
-        { AM_CDDB_SEARCH_FILE,          GTK_STOCK_CDROM,   _("CDDB Search Files…"),    NULL, _("CDDB search files…"),  G_CALLBACK(Cddb_Popup_Menu_Search_Selected_File) },
-        //{ AM_ARTIST_OPEN_FILE_WITH,     GTK_STOCK_OPEN,    _("Open File(s) with…"),     NULL, _("Open File(s) with…"),     G_CALLBACK(Browser_Open_Run_Program_List_Window??? Browser_Open_Run_Program_Tree_Window???) },
-        //{ AM_ALBUM_OPEN_FILE_WITH,      GTK_STOCK_OPEN,    _("Open File(s) with…"),     NULL, _("Open File(s) with…"),     G_CALLBACK(Browser_Open_Run_Program_List_Window??? Browser_Open_Run_Program_Tree_Window???) },
-
-        { AM_LOG_CLEAN,                 GTK_STOCK_CLEAR,   _("Clear log"),                 NULL, _("Clear log"),              G_CALLBACK(Log_Clean_Log_List) }
-
-    };
-
-    GtkToggleActionEntry ToggleActionEntries[] =
-    {
-        //{ AM_BROWSE_SUBDIR,      GTK_STOCK_INDEX,        _("Browse _Subdirectories"),                         NULL, _("Browse _Sub-directories"),                         NULL,                                    FALSE },
-        { AM_BROWSE_SUBDIR,      NULL,                   _("Browse _Subdirectories"),                         NULL, _("Browse subdirectories"),                         NULL,                                    BROWSE_SUBDIR },
-#ifndef G_OS_WIN32 /* No sense here for Win32, "hidden" means : starts with a
-                    * '.'
-                    */
-        { AM_BROWSER_HIDDEN_DIR, NULL,                   _("Show Hidden Directories"),                         NULL, _("Show hidden directories"),                         G_CALLBACK(Browser_Tree_Rebuild),     BROWSE_HIDDEN_DIR },
-#endif /* !G_OS_WIN32 */
-        { AM_SCANNER_SHOW, "document-properties", _("_Show Scanner"), NULL,
-          _("Show scanner"), G_CALLBACK (et_scan_show),
-          OPEN_SCANNER_WINDOW_ON_STARTUP },
-    };
-
-    GtkRadioActionEntry view_mode_entries[] =
-    {
-        { AM_TREE_VIEW_MODE, "audio-x-generic", _("Tree Browser"), NULL,
-          _("View by directory tree"), 0 },
-        { AM_ARTIST_VIEW_MODE, "easytag-artist-album",
-          _("Artist and Album"), NULL,
-          _("View by artist and album"), 1 }
-    };
-
-    GtkRadioActionEntry scanner_mode_entries[] =
-    {
-        { AM_SCANNER_FILL_TAG, "document-properties", _("_Fill Tags…"), NULL,
-          _("Fill tags"), SCANNER_FILL_TAG },
-        { AM_SCANNER_RENAME_FILE, "document-properties",
-          _("_Rename Files and Directories…"), NULL,
-          _("Rename files and directories"), SCANNER_RENAME_FILE },
-        { AM_SCANNER_PROCESS_FIELDS, "document-properties",
-          _("_Process Fields…"), NULL, _("Process Fields"),
-          SCANNER_PROCESS_FIELDS }
-    };
-
-    GError *error = NULL;
-    guint num_menu_entries;
-    guint num_toggle_entries;
-    guint n_view_mode_entries;
-    guint n_scanner_mode_entries;
-    guint i;
-
-    /* Calculate number of items into the menu */
-    num_menu_entries = G_N_ELEMENTS(ActionEntries);
-    num_toggle_entries = G_N_ELEMENTS(ToggleActionEntries);
-    n_view_mode_entries = G_N_ELEMENTS (view_mode_entries);
-    n_scanner_mode_entries = G_N_ELEMENTS (scanner_mode_entries);
-
-    /* Populate quarks list with the entries */
-    for(i = 0; i < num_menu_entries; i++)
-    {
-        Action_Pair* ActionPair = g_malloc0(sizeof(Action_Pair));
-        ActionPair->action = ActionEntries[i].name;
-        ActionPair->quark  = g_quark_from_string(ActionPair->action);
-        ActionPairsList = g_list_prepend (ActionPairsList, ActionPair);
-    }
-
-    for(i = 0; i < num_toggle_entries; i++)
-    {
-        Action_Pair* ActionPair = g_malloc0(sizeof(Action_Pair));
-        ActionPair->action = ToggleActionEntries[i].name;
-        ActionPair->quark  = g_quark_from_string(ActionPair->action);
-        ActionPairsList = g_list_prepend (ActionPairsList, ActionPair);
-    }
-
-    ActionPairsList = g_list_reverse (ActionPairsList);
-
-    /* UI Management */
-    ActionGroup = gtk_action_group_new("actions");
-    gtk_action_group_set_translation_domain (ActionGroup, GETTEXT_PACKAGE);
-    gtk_action_group_add_actions(ActionGroup, ActionEntries, num_menu_entries, NULL);
-    gtk_action_group_add_toggle_actions(ActionGroup, ToggleActionEntries, num_toggle_entries, NULL);
-    gtk_action_group_add_radio_actions (ActionGroup, view_mode_entries,
-                                        n_view_mode_entries, 0,
-                                        Action_Select_Browser_Style, NULL);
-    gtk_action_group_add_radio_actions (ActionGroup, scanner_mode_entries,
-                                        n_scanner_mode_entries, 0,
-                                        G_CALLBACK (et_on_action_select_scan_mode),
-                                        NULL);
-
-    UIManager = gtk_ui_manager_new();
-
-    g_signal_connect (UIManager, "connect-proxy",
-                      G_CALLBACK (et_ui_manager_on_connect_proxy), NULL);
-    g_signal_connect (UIManager, "disconnect-proxy",
-                      G_CALLBACK (et_ui_manager_on_disconnect_proxy), NULL);
-
-    if (!gtk_ui_manager_add_ui_from_string(UIManager, ui_xml, -1, &error))
-    {
-        g_error(_("Could not merge UI, error was: %s\n"), error->message);
-        g_error_free(error);
-    }
-    gtk_ui_manager_insert_action_group(UIManager, ActionGroup, 0);
-    gtk_window_add_accel_group(GTK_WINDOW(MainWindow), gtk_ui_manager_get_accel_group(UIManager));
-
-    menubar = gtk_ui_manager_get_widget(UIManager, "/MenuBar");
-    Init_Menu_Bar();
-    gtk_widget_show_all(menubar);
-
-    toolbar = gtk_ui_manager_get_widget (UIManager, "/ToolBar");
-    gtk_widget_show_all(toolbar);
-
-    *pptoolbar = toolbar;
-    *ppmenubar = menubar;
-}
-
-
-/*
- * Initialize some items of the main menu
- */
-static void
-Init_Menu_Bar (void)
-{
-    
-    CheckMenuItemBrowseSubdirMainMenu = gtk_ui_manager_get_widget(UIManager, "/MenuBar/BrowserMenu/BrowseSubdir");
-    if (CheckMenuItemBrowseSubdirMainMenu)
-    {
-        // Link to update BROWSE_SUBDIR when changed
-        g_signal_connect(G_OBJECT(CheckMenuItemBrowseSubdirMainMenu),"toggled",
-            G_CALLBACK(Check_Menu_Item_Toggled_Browse_Subdir),NULL);
-    }
-
-    CheckMenuItemBrowseHiddenDirMainMenu = gtk_ui_manager_get_widget (UIManager,
-                                                                      "/MenuBar/ViewMenu/BrowseHiddenDir");
-    if (CheckMenuItemBrowseHiddenDirMainMenu)
-    {
-        // Link to update BROWSE_HIDDEN_DIR when changed
-        g_signal_connect(G_OBJECT(CheckMenuItemBrowseHiddenDirMainMenu),"toggled",
-            G_CALLBACK(Check_Menu_Item_Toggled_Browse_Hidden_Dir),NULL);
-    }
-
-    /* If entry not implemented */
-    //{GtkWidget *widget = gtk_item_factory_get_widget_by_action(ItemFactory,FILENAME_FROM_TXT);
-    //if (widget) gtk_widget_set_sensitive(widget,FALSE);}
-}
-
-/*
- * Callback to update state of check button to browse subdir into menu
- */
-static void
-Check_Menu_Item_Toggled_Browse_Subdir (GtkWidget *checkmenuitem)
-{
-    BROWSE_SUBDIR = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(checkmenuitem));
-    Check_Menu_Item_Update_Browse_Subdir();
-}
-void Check_Menu_Item_Update_Browse_Subdir (void)
-{
-    gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(CheckMenuItemBrowseSubdirMainMenu),BROWSE_SUBDIR);
-}
-
-/*
- * Callback to update state of check button to show hiddendirectories into menu
- */
-static void
-Check_Menu_Item_Toggled_Browse_Hidden_Dir (GtkWidget *checkmenuitem)
-{
-    BROWSE_HIDDEN_DIR = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(checkmenuitem));
-    Check_Menu_Item_Update_Browse_Hidden_Dir();
-
-    // Reload directory, in case we have changed BROWSE_HIDDEN_DIR
-    //Browser_Tree_Rebuild(NULL); // Commented, as already done in GtkToggleActionEntry for AM_BROWSER_HIDDEN_DIR
-}
-
-void
-Check_Menu_Item_Update_Browse_Hidden_Dir (void)
-{
-#ifndef G_OS_WIN32
-    gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(CheckMenuItemBrowseHiddenDirMainMenu),BROWSE_HIDDEN_DIR);
-#endif /* !G_OS_WIN32 */
-}
-
-
-
-
-
-
-
-
-
-/*
- * Status bar functions
- */
-GtkWidget *Create_Status_Bar (void)
-{
-    StatusBar = gtk_statusbar_new();
-    /* Specify a size to avoid statubar resizing if the message is too long */
-    gtk_widget_set_size_request(StatusBar, 200, -1);
-    /* Create serie */
-    StatusBarContext = gtk_statusbar_get_context_id(GTK_STATUSBAR(StatusBar),"Messages");
-    timer_cid = gtk_statusbar_get_context_id (GTK_STATUSBAR (StatusBar),
-                                              "timer");
-    tooltip_cid = gtk_statusbar_get_context_id (GTK_STATUSBAR (StatusBar),
-                                                "tooltip");
-
-    Statusbar_Message (_("Ready to start"), TRUE);
-
-    gtk_widget_show(StatusBar);
-    return StatusBar;
-}
-
-static gboolean
-Statusbar_Stop_Timer (void)
-{
-    gtk_statusbar_pop (GTK_STATUSBAR (StatusBar), timer_cid);
-    return G_SOURCE_REMOVE;
-}
-
-static void
-et_statusbar_reset_timer (void)
-{
-    StatusbarTimerId = 0;
-}
-
-static void
-Statusbar_Start_Timer (void)
-{
-    Statusbar_Remove_Timer ();
-    StatusbarTimerId = g_timeout_add_seconds_full (G_PRIORITY_DEFAULT, 4,
-                                                   (GSourceFunc)Statusbar_Stop_Timer,
-                                                   NULL,
-                                                   (GDestroyNotify)et_statusbar_reset_timer);
-    g_source_set_name_by_id (StatusbarTimerId, "Statusbar stop timer");
-}
-
-static void
-Statusbar_Remove_Timer (void)
-{
-    if (StatusbarTimerId)
-    {
-        Statusbar_Stop_Timer ();
-        g_source_remove(StatusbarTimerId);
-        et_statusbar_reset_timer ();
-    }
-}
-
-/*
- * Send a message to the status bar
- *  - with_timer: if TRUE, the message will be displayed during 4s
- *                if FALSE, the message will be displayed up to the next posted message
- */
-void
-Statusbar_Message (const gchar *message, gboolean with_timer)
-{
-    gchar *msg_temp;
-
-    g_return_if_fail (StatusBar != NULL);
-
-    msg_temp = Try_To_Validate_Utf8_String(message);
-    
-    /* Push the given message */
-    if (with_timer)
-    {
-        Statusbar_Start_Timer ();
-        gtk_statusbar_push (GTK_STATUSBAR (StatusBar), timer_cid, msg_temp);
-    }
-    else
-    {
-        gtk_statusbar_pop (GTK_STATUSBAR (StatusBar), StatusBarContext);
-        gtk_statusbar_push (GTK_STATUSBAR (StatusBar), StatusBarContext,
-                            msg_temp);
-    }
-
-    g_free(msg_temp);
-}
-
-/*
- * et_statusbar_push_tooltip:
- * @message: a tooltip to display in the status bar
- *
- * Display a tooltip in the status bar of the main window. Call
- * et_statusbar_pop_tooltip() to stop displaying the tooltip message.
- */
-static void
-et_statusbar_push_tooltip (const gchar *message)
-{
-    g_return_if_fail (StatusBar != NULL && message != NULL);
-
-    gtk_statusbar_push (GTK_STATUSBAR (StatusBar), tooltip_cid, message);
-}
-
-/*
- * et_statusbar_pop_tooltip:
- *
- * Pop a tooltip message from the status bar. et_statusbar_push_tooltip() must
- * have been called first.
- */
-static void
-et_statusbar_pop_tooltip (void)
-{
-    g_return_if_fail (StatusBar != NULL);
-
-    gtk_statusbar_pop (GTK_STATUSBAR (StatusBar), tooltip_cid);
-}
-
-
-
-
-/*
- * Progress bar
- */
-GtkWidget *Create_Progress_Bar (void)
-{
-    ProgressBar = et_progress_bar_new ();
-
-    gtk_widget_show(ProgressBar);
-    return ProgressBar;
-}
-
-/*
- * et_ui_manager_on_connect_proxy:
- * @manager: the UI manager which generated the signal
- * @action: the action which was connected to @proxy
- * @proxy: the widget which was connected to @action
- * @user_data: user data set when the signal was connected
- *
- * Connect handlers for selection and deselection of menu items, in order to
- * set tooltips for the menu items as status bar messages.
- */
-static void
-et_ui_manager_on_connect_proxy (GtkUIManager *manager, GtkAction *action,
-                                GtkWidget *proxy, gpointer user_data)
-{
-    if (GTK_IS_MENU_ITEM (proxy))
-    {
-        guint id;
-
-        id = g_signal_connect (proxy, "select",
-                               G_CALLBACK (on_menu_item_select), action);
-        g_object_set_data (G_OBJECT (proxy), "select-id",
-                           GUINT_TO_POINTER (id));
-        id = g_signal_connect (proxy, "deselect",
-                               G_CALLBACK (on_menu_item_deselect), NULL);
-        g_object_set_data (G_OBJECT (proxy), "deselect-id",
-                           GUINT_TO_POINTER (id));
-    }
-}
-
-/*
- * et_ui_manager_on_disconnect_proxy:
- * @manager: the UI manager which generated the signal
- * @action: the action which was connected to @proxy
- * @proxy: the widget which was connected to @action
- * @user_data: user data set when the signal was connected
- *
- * Disconnect handlers for selecting and deselecting menu items.
- */
-static void
-et_ui_manager_on_disconnect_proxy (GtkUIManager *manager, GtkAction *action,
-                                   GtkWidget *proxy, gpointer user_data)
-{
-    if (GTK_IS_MENU_ITEM (proxy))
-    {
-        guint id;
-
-        id = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (proxy),
-                                                  "select-id"));
-        g_signal_handler_disconnect (proxy, id);
-        id = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (proxy),
-                                                  "deselect-id"));
-        g_signal_handler_disconnect (proxy, id);
-    }
-}
-
-/*
- * on_menu_item_select:
- * @item: the menu item which was selected
- * @user_data: the #GtkAction corresponding to @item
- *
- * Set the current status bar message to the tooltip of the menu @item which
- * was selected.
- */
-static void
-on_menu_item_select (GtkMenuItem *item, gpointer user_data)
-{
-    GtkAction *action;
-    const gchar *message;
-
-    g_return_if_fail (user_data != NULL);
-
-    action = GTK_ACTION (user_data);
-    message = gtk_action_get_tooltip (action);
-
-    if (message)
-    {
-        et_statusbar_push_tooltip (message);
-    }
-}
-
-/*
- * on_menu_item_deselect:
- * @item: the menu item which was deselected
- * @user_data: user data set when the signal was connected
- *
- * Clear the current tooltip status bar message when the menu item is
- * deselected.
- */
-static void
-on_menu_item_deselect (GtkMenuItem *item, gpointer user_data)
-{
-    et_statusbar_pop_tooltip ();
-}
diff --git a/src/bar.h b/src/bar.h
deleted file mode 100644
index 904eded..0000000
--- a/src/bar.h
+++ /dev/null
@@ -1,174 +0,0 @@
-/* bar.h - 2000/05/05 */
-/*
- *  EasyTAG - Tag editor for MP3 and Ogg Vorbis files
- *  Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
- *
- *  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
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-
-#ifndef __BAR_H__
-#define __BAR_H__
-
-/***************
- * Declaration *
- ***************/
-GtkWidget      *MenuBar;
-GtkWidget      *ProgressBar;
-GtkUIManager   *UIManager;
-GtkActionGroup *ActionGroup;
-
-GtkWidget *CheckMenuItemBrowseSubdirMainMenu;
-GtkWidget *CheckMenuItemBrowseHiddenDirMainMenu;
-
-#define MENU_FILE       "FileMenu"
-#define MENU_EDIT "EditMenu"
-#define MENU_VIEW "ViewMenu"
-#define MENU_GO "GoMenu"
-#define MENU_BROWSER    "BrowserMenu"
-#define MENU_SCANNER    "ScannerMenu"
-#define MENU_MISC       "MiscMenu"
-#define MENU_HELP       "HelpMenu"
-
-#define MENU_FILE_SORT_TAG      "SortTagMenu"
-#define MENU_FILE_SORT_PROP     "SortPropMenu"
-#define MENU_SORT_TAG_PATH "ViewMenu/SortTagMenu"
-#define MENU_SORT_PROP_PATH "ViewMenu/SortPropMenu"
-
-#define MENU_SCANNER_PATH MENU_VIEW "/" MENU_SCANNER
-#define POPUP_FILE              "FilePopup"
-#define POPUP_DIR               "DirPopup"
-#define POPUP_SUBMENU_SCANNER   "ScannerSubpopup"
-#define POPUP_DIR_RUN_AUDIO     "DirPopupRunAudio"
-#define POPUP_LOG               "LogPopup"
-
-#define AM_PREV                     "PreviousFile"
-#define AM_NEXT                     "NextFile"
-#define AM_FIRST                    "FirstFile"
-#define AM_LAST                     "LastFile"
-#define AM_SCAN_FILES "ScanFiles"
-#define AM_REMOVE                   "RemoveTag"
-#define AM_UNDO                     "UndoFile"
-#define AM_REDO                     "RedoFile"
-#define AM_UNDO_HISTORY             "Undo"
-#define AM_REDO_HISTORY             "Redo"
-#define AM_SAVE                     "SaveFile"
-#define AM_SAVE_FORCED              "SaveFileForced"
-#define AM_SELECT_ALL "SelAll"
-#define AM_UNSELECT_ALL "UnselAll"
-#define AM_INVERT_SELECTION         "SelInv"
-#define AM_DELETE_FILE              "DeleteFile"
-#define AM_LOAD_HOME_DIR            "GoToHome"
-#define AM_LOAD_DESKTOP_DIR         "GoToDesktop"
-#define AM_LOAD_DOCUMENTS_DIR       "GoToDocument"
-#define AM_LOAD_DOWNLOADS_DIR       "GoToDownload"
-#define AM_LOAD_MUSIC_DIR           "GoToMusic"
-#define AM_LOAD_PARENT_DIR "GoToParent"
-#define AM_LOAD_DEFAULT_DIR         "GoToDefaultPath"
-#define AM_SET_PATH_AS_DEFAULT      "SetDefaultPath"
-#define AM_RENAME_DIR               "RenameDir"
-#define AM_BROWSE_SUBDIR            "BrowseSubdir"
-#define AM_BROWSER_HIDDEN_DIR       "BrowseHiddenDir"
-#define AM_COLLAPSE_TREE            "CollapseTree"
-#define AM_INITIALIZE_TREE          "RefreshTree"
-#define AM_RELOAD_DIRECTORY         "ReloadDir"
-#define AM_TREE_VIEW_MODE "TreeViewMode"
-#define AM_ARTIST_VIEW_MODE "ArtistViewMode"
-#define AM_BROWSE_DIRECTORY_WITH    "BrowseDir"
-#define AM_OPEN_FILE_WITH           "OpenFile"
-#define AM_OPEN_OPTIONS_WINDOW      "Preferences"
-#define AM_SCANNER_FILL_TAG         "FillTag"
-#define AM_SCANNER_RENAME_FILE      "RenameFile"
-#define AM_SCANNER_PROCESS_FIELDS   "ProcessFields"
-#define AM_SCANNER_SHOW "ShowScanner"
-#define AM_SEARCH_FILE              "SearchFile"
-#define AM_CDDB_SEARCH_FILE         "CDDBSearchFile"
-#define AM_CDDB_SEARCH              "CDDBSearch"
-#define AM_FILENAME_FROM_TXT        "LoadFilenames"
-#define AM_WRITE_PLAYLIST           "WritePlaylist"
-#define AM_RUN_AUDIO_PLAYER         "RunAudio"
-#define AM_OPEN_ABOUT_WINDOW        "About"
-#define AM_OPEN_HELP_CONTENTS "HelpContents"
-#define AM_QUIT                     "Quit"
-
-#define AM_ARTIST_RUN_AUDIO_PLAYER  "ArtistRunAudio"
-#define AM_ARTIST_OPEN_FILE_WITH    "ArtistOpenFile"
-#define AM_ALBUM_RUN_AUDIO_PLAYER   "AlbumRunAudio"
-#define AM_ALBUM_OPEN_FILE_WITH     "AlbumOpenFile"
-
-#define AM_LOG_CLEAN                "CleanLog"
-
-#define AM_STOP                     "Stop"
-
-#define AM_SORT_ASCENDING_FILENAME          "SortFilenameAsc"
-#define AM_SORT_DESCENDING_FILENAME         "SortFilenameDesc"
-#define AM_SORT_ASCENDING_CREATION_DATE     "SortDateAsc"
-#define AM_SORT_DESCENDING_CREATION_DATE    "SortDateDesc"
-#define AM_SORT_ASCENDING_TRACK_NUMBER      "SortTrackNumAsc"
-#define AM_SORT_DESCENDING_TRACK_NUMBER     "SortTrackNumDesc"
-#define AM_SORT_ASCENDING_TITLE             "SortTitleAsc"
-#define AM_SORT_DESCENDING_TITLE            "SortTitleDesc"
-#define AM_SORT_ASCENDING_ARTIST            "SortArtistAsc"
-#define AM_SORT_DESCENDING_ARTIST           "SortArtistDesc"
-#define AM_SORT_ASCENDING_ALBUM_ARTIST      "SortAlbumArtistAsc"
-#define AM_SORT_DESCENDING_ALBUM_ARTIST     "SortAlbumArtistDesc"
-#define AM_SORT_ASCENDING_ALBUM             "SortAlbumAsc"
-#define AM_SORT_DESCENDING_ALBUM            "SortAlbumDesc"
-#define AM_SORT_ASCENDING_YEAR              "SortYearAsc"
-#define AM_SORT_DESCENDING_YEAR             "SortYearDesc"
-#define AM_SORT_ASCENDING_GENRE             "SortGenreAsc"
-#define AM_SORT_DESCENDING_GENRE            "SortGenreDesc"
-#define AM_SORT_ASCENDING_COMMENT           "SortCommentAsc"
-#define AM_SORT_DESCENDING_COMMENT          "SortCommentDesc"
-#define AM_SORT_ASCENDING_COMPOSER          "SortComposerAsc"
-#define AM_SORT_DESCENDING_COMPOSER         "SortComposerDesc"
-#define AM_SORT_ASCENDING_ORIG_ARTIST       "SortOrigArtistAsc"
-#define AM_SORT_DESCENDING_ORIG_ARTIST      "SortOrigArtistDesc"
-#define AM_SORT_ASCENDING_COPYRIGHT         "SortCopyrightAsc"
-#define AM_SORT_DESCENDING_COPYRIGHT        "SortCopyrightDesc"
-#define AM_SORT_ASCENDING_URL               "SortUrlAsc"
-#define AM_SORT_DESCENDING_URL              "SortUrlDesc"
-#define AM_SORT_ASCENDING_ENCODED_BY        "SortEncodedByAsc"
-#define AM_SORT_DESCENDING_ENCODED_BY       "SortEncodedByDesc"
-#define AM_SORT_ASCENDING_FILE_TYPE         "SortTypeAsc"
-#define AM_SORT_DESCENDING_FILE_TYPE        "SortTypeDesc"
-#define AM_SORT_ASCENDING_FILE_SIZE         "SortSizeAsc"
-#define AM_SORT_DESCENDING_FILE_SIZE        "SortSizeDesc"
-#define AM_SORT_ASCENDING_FILE_DURATION     "SortDurationAsc"
-#define AM_SORT_DESCENDING_FILE_DURATION    "SortDurationDesc"
-#define AM_SORT_ASCENDING_FILE_BITRATE      "SortBitrateAsc"
-#define AM_SORT_DESCENDING_FILE_BITRATE     "SortBitrateDesc"
-#define AM_SORT_ASCENDING_FILE_SAMPLERATE   "SortSamplerateAsc"
-#define AM_SORT_DESCENDING_FILE_SAMPLERATE  "SortSamplerateDesc"
-
-typedef struct _Action_Pair Action_Pair;
-struct _Action_Pair {
-    const gchar *action;
-    GQuark quark;
-};
-
-/**************
- * Prototypes *
- **************/
-
-void       Create_UI           (GtkWidget **menubar, GtkWidget **toolbar);
-GtkWidget *Create_Status_Bar   (void);
-void Statusbar_Message (const gchar *message, gboolean with_timer);
-GtkWidget *Create_Progress_Bar (void);
-
-void Check_Menu_Item_Update_Browse_Subdir  (void);
-void Check_Menu_Item_Update_Browse_Hidden_Dir  (void);
-
-#endif /* __BAR_H__ */
diff --git a/src/browser.c b/src/browser.c
index 822d4b1..0997a8d 100644
--- a/src/browser.c
+++ b/src/browser.c
@@ -1,4 +1,3 @@
-/* browser.c - 2000/04/28 */
 /*
  *  EasyTAG - Tag editor for MP3 and Ogg Vorbis files
  *  Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
@@ -25,80 +24,95 @@
  * Thomas Nilsson and 4Front Technologies
  */
 
-#include <config.h>
+#include "config.h"
+
+#include "browser.h"
 
 #include <gtk/gtk.h>
 #include <gdk/gdkkeysyms.h>
 #include <gdk/gdk.h>
 #include <glib/gi18n.h>
-#include <sys/stat.h>
 #include <unistd.h>
 #include <stdlib.h>
 #include <dirent.h>
 #include <string.h>
-#include <stdio.h>
 #include <errno.h>
 
-#include "gtk2_compat.h"
+#include "application_window.h"
 #include "easytag.h"
-#include "browser.h"
 #include "et_core.h"
 #include "scan_dialog.h"
-#include "bar.h"
 #include "log.h"
 #include "misc.h"
 #include "setting.h"
 #include "charset.h"
 #include "dlm.h"
 
-#include <assert.h>
-
 #include "win32/win32dep.h"
 
+/* TODO: Use G_DEFINE_TYPE_WITH_PRIVATE. */
+G_DEFINE_TYPE (EtBrowser, et_browser, GTK_TYPE_BIN)
 
-/****************
- * Declarations *
- ****************/
+#define et_browser_get_instance_private(browser) (browser->priv)
+
+struct _EtBrowserPrivate
+{
+    GtkWidget *label;
+    GtkWidget *button;
 
-static GtkWidget    *BrowserTree; /* Tree of directories. */
-static GtkTreeStore *directoryTreeModel;
-static GtkListStore *fileListModel;
-static GtkWidget    *BrowserLabel;
-static GtkWidget    *BrowserButton;
-static GtkWidget    *BrowserNoteBook;
-static GtkListStore *artistListModel;
-static GtkListStore *albumListModel;
-/* Path selected in the browser area (BrowserEntry or BrowserTree). */
-static gchar        *BrowserCurrentPath = NULL;
+    GtkWidget *entry_combo;
+    GtkListStore *entry_model;
 
-static GtkListStore *RunProgramModel;
+    GtkWidget *notebook;
 
-static GtkWidget *RunProgramTreeWindow = NULL;
-static GtkWidget *RunProgramListWindow = NULL;
+    GtkListStore *file_model;
+    GtkWidget *file_view;
+    GtkWidget *file_menu;
+    guint file_selected_handler;
+    EtSortMode file_sort_mode;
 
-/* The Rename Directory window. */
-GtkWidget *RenameDirectoryWindow = NULL;
-static GtkWidget *RenameDirectoryCombo;
-static GtkWidget *RenameDirectoryWithMask;
-static GtkListStore *RenameDirectoryMaskModel = NULL;
-GtkWidget *RenameDirectoryPreviewLabel = NULL;
+    GtkWidget *album_list;
+    GtkWidget *album_menu;
+    GtkListStore *album_model;
+    guint album_selected_handler;
 
-/* The last ETFile selected in the BrowserList. */
-static ET_File *LastBrowserListETFileSelected;
+    GtkWidget *artist_list;
+    GtkWidget *artist_menu;
+    GtkListStore *artist_model;
+    guint artist_selected_handler;
 
-static const guint BOX_SPACING = 6;
+    GtkWidget *tree; /* Tree of directories. */
+    GtkWidget *tree_menu;
+    GtkTreeStore *directory_model;
 
-static gchar *Rename_Directory_Masks [] =
-{
-    "%a - %b",
-    "%a_-_%b",
-    "%a - %b (%y) - %g",
-    "%a_-_%b_(%y)_-_%g",
-    "VA - %b (%y)",
-    "VA_-_%b_(%y)",
-    NULL
+    GtkListStore *run_program_model;
+
+    GtkWidget *open_directory_with_dialog;
+    GtkWidget *open_directory_with_combobox;
+
+    GtkWidget *open_files_with_dialog;
+    GtkWidget *open_files_with_combobox;
+
+    /* The Rename Directory window. */
+    GtkWidget *rename_directory_dialog;
+    GtkWidget *rename_directory_entry;
+    GtkWidget *rename_directory_mask_toggle;
+    GtkWidget *rename_directory_mask_entry;
+    GtkWidget *rename_directory_preview_label;
+
+    gchar *current_path;
+
+    /* The last ETFile selected in the priv->file_view. */
+    ET_File *last_selected_file;
 };
 
+/****************
+ * Declarations *
+ ****************/
+
+
+static const guint BOX_SPACING = 6;
+
 /*
  * EtPathState:
  * @ET_PATH_STATE_OPEN: the path is open or has been read
@@ -113,83 +127,112 @@ typedef enum
     ET_PATH_STATE_CLOSED
 } EtPathState;
 
+enum
+{
+    LIST_FILE_NAME,
+    /* Tag fields. */
+    LIST_FILE_TITLE,
+    LIST_FILE_ARTIST,
+    LIST_FILE_ALBUM_ARTIST,
+    LIST_FILE_ALBUM,
+    LIST_FILE_YEAR,
+    LIST_FILE_DISCNO,
+    LIST_FILE_TRACK,
+    LIST_FILE_GENRE,
+    LIST_FILE_COMMENT,
+    LIST_FILE_COMPOSER,
+    LIST_FILE_ORIG_ARTIST,
+    LIST_FILE_COPYRIGHT,
+    LIST_FILE_URL,
+    LIST_FILE_ENCODED_BY,
+    /* End of columns with associated UI columns. */
+    LIST_FILE_POINTER,
+    LIST_FILE_KEY,
+    LIST_FILE_OTHERDIR, /* To change color for alternate directories. */
+    LIST_FONT_WEIGHT,
+    LIST_ROW_BACKGROUND,
+    LIST_ROW_FOREGROUND,
+    LIST_COLUMN_COUNT
+};
+
+enum
+{
+    ALBUM_GICON,
+    ALBUM_NAME,
+    ALBUM_NUM_FILES,
+    ALBUM_ETFILE_LIST_POINTER,
+    ALBUM_FONT_STYLE,
+    ALBUM_FONT_WEIGHT,
+    ALBUM_ROW_FOREGROUND,
+    ALBUM_ALL_ALBUMS_ROW,
+    ALBUM_COLUMN_COUNT
+};
+
+enum
+{
+    ARTIST_PIXBUF,
+    ARTIST_NAME,
+    ARTIST_NUM_ALBUMS,
+    ARTIST_NUM_FILES,
+    ARTIST_ALBUM_LIST_POINTER,
+    ARTIST_FONT_STYLE,
+    ARTIST_FONT_WEIGHT,
+    ARTIST_ROW_FOREGROUND,
+    ARTIST_COLUMN_COUNT
+};
+
+enum
+{
+    TREE_COLUMN_DIR_NAME,
+    TREE_COLUMN_FULL_PATH,
+    TREE_COLUMN_SCANNED,
+    TREE_COLUMN_HAS_SUBDIR,
+    TREE_COLUMN_ICON,
+    TREE_COLUMN_COUNT
+};
+
 /**************
  * Prototypes *
  **************/
 
-static gboolean Browser_Tree_Key_Press (GtkWidget *tree, GdkEvent *event,
-                                        gpointer data);
-static void Browser_Tree_Set_Node_Visible (GtkWidget *directoryView,
-                                           GtkTreePath *path);
-static void Browser_List_Set_Row_Visible (GtkTreeModel *treeModel,
-                                          GtkTreeIter *rowIter);
-static void Browser_Tree_Initialize (void);
-static gboolean Browser_Tree_Node_Selected (GtkTreeSelection *selection,
-                                            gpointer user_data);
-static void Browser_Tree_Rename_Directory (const gchar *last_path,
-                                           const gchar *new_path);
-static void Browser_Tree_Handle_Rename (GtkTreeIter *parentnode,
+static void Browser_Tree_Handle_Rename (EtBrowser *self,
+                                        GtkTreeIter *parentnode,
                                         const gchar *old_path,
                                         const gchar *new_path);
 
-static gint Browser_List_Key_Press        (GtkWidget *list, GdkEvent *event, gpointer data);
-static gboolean Browser_List_Button_Press (GtkTreeView *treeView,
-                                           GdkEventButton *event);
-static void Browser_List_Row_Selected (GtkTreeSelection * selection,
-                                       gpointer data);
-static void Browser_List_Set_Row_Appearance (GtkTreeIter *iter);
+static void Browser_List_Set_Row_Appearance (EtBrowser *self, GtkTreeIter *iter);
 static gint Browser_List_Sort_Func (GtkTreeModel *model, GtkTreeIter *a,
                                     GtkTreeIter *b, gpointer data);
-static void Browser_List_Select_File_By_Iter (GtkTreeIter *iter,
+static void Browser_List_Select_File_By_Iter (EtBrowser *self,
+                                              GtkTreeIter *iter,
                                               gboolean select_it);
 
-static void Browser_Entry_Activated (void);
-
-static void Browser_Artist_List_Load_Files (ET_File *etfile_to_select);
-static void Browser_Artist_List_Row_Selected (GtkTreeSelection *selection,
-                                              gpointer data);
-static void Browser_Artist_List_Set_Row_Appearance (GtkTreeIter *row);
+static void Browser_Artist_List_Row_Selected (EtBrowser *self,
+                                              GtkTreeSelection *selection);
+static void Browser_Artist_List_Set_Row_Appearance (EtBrowser *self, GtkTreeIter *row);
 
-static void Browser_Album_List_Load_Files (GList *albumlist,
+static void Browser_Album_List_Load_Files (EtBrowser *self, GList *albumlist,
                                            ET_File *etfile_to_select);
-static void Browser_Album_List_Row_Selected (GtkTreeSelection *selection,
-                                             gpointer data);
-static void Browser_Album_List_Set_Row_Appearance (GtkTreeIter *row);
-
-static void Browser_Update_Current_Path (const gchar *path);
-
-#ifdef G_OS_WIN32
-static gboolean Browser_Win32_Get_Drive_Root (gchar *drive,
-                                              GtkTreeIter *rootNode,
-                                              GtkTreePath **rootPath);
-#endif /* G_OS_WIN32 */
+static void Browser_Album_List_Row_Selected (EtBrowser *self,
+                                             GtkTreeSelection *selection);
+static void Browser_Album_List_Set_Row_Appearance (EtBrowser *self, GtkTreeIter *row);
 
 static gboolean check_for_subdir (const gchar *path);
 
-static GtkTreePath *Find_Child_Node(GtkTreeIter *parent, gchar *searchtext);
+static GtkTreePath *Find_Child_Node (EtBrowser *self, GtkTreeIter *parent, gchar *searchtext);
 
 static GIcon *get_gicon_for_path (const gchar *path, EtPathState path_state);
 
-static void expand_cb   (GtkWidget *tree, GtkTreeIter *iter, GtkTreePath *path, gpointer data);
-static void collapse_cb (GtkWidget *tree, GtkTreeIter *iter, GtkTreePath *treePath, gpointer data);
-
-/* Pop up menus */
-static gboolean Browser_Popup_Menu_Handler (GtkWidget *widget,
-                                            GdkEventButton *event,
-                                            GtkMenu *menu);
-
 /* For window to rename a directory */
-static void Destroy_Rename_Directory_Window (void);
-static void Rename_Directory (void);
-static void Rename_Directory_With_Mask_Toggled (void);
+static void Destroy_Rename_Directory_Window (EtBrowser *self);
+static void Rename_Directory_With_Mask_Toggled (EtBrowser *self);
 
 /* For window to run a program with the directory */
-static void Destroy_Run_Program_Tree_Window (void);
-static void Run_Program_With_Directory (GtkWidget *combobox);
+static void Destroy_Run_Program_Tree_Window (EtBrowser *self);
+static void Run_Program_With_Directory (EtBrowser *self);
 
 /* For window to run a program with the file */
-static void Destroy_Run_Program_List_Window (void);
-static void Run_Program_With_Selected_Files (GtkWidget *combobox);
+static void Destroy_Run_Program_List_Window (EtBrowser *self);
 
 static void empty_entry_disable_widget (GtkWidget *widget, GtkEntry *entry);
 
@@ -203,8 +246,8 @@ static void et_run_program_list_on_response (GtkDialog *dialog,
                                              gint response_id,
                                              gpointer user_data);
 
-static void et_browser_set_sorting_file_mode (GtkTreeViewColumn *column,
-                                              gpointer data);
+static void et_browser_on_column_clicked (GtkTreeViewColumn *column,
+                                          gpointer data);
 
 
 /*************
@@ -213,76 +256,172 @@ static void et_browser_set_sorting_file_mode (GtkTreeViewColumn *column,
 /*
  * Load home directory
  */
-void Browser_Load_Home_Directory (void)
+void
+et_browser_go_home (EtBrowser *self)
 {
-    Browser_Tree_Select_Dir (g_get_home_dir ());
+    et_browser_select_dir (self, g_get_home_dir ());
 }
 
 /*
  * Load desktop directory
  */
-void Browser_Load_Desktop_Directory (void)
+void
+et_browser_go_desktop (EtBrowser *self)
 {
-    Browser_Tree_Select_Dir(g_get_user_special_dir(G_USER_DIRECTORY_DESKTOP));
+    et_browser_select_dir (self,
+                           g_get_user_special_dir (G_USER_DIRECTORY_DESKTOP));
 }
 
 /*
  * Load documents directory
  */
-void Browser_Load_Documents_Directory (void)
+void
+et_browser_go_documents (EtBrowser *self)
 {
-    Browser_Tree_Select_Dir(g_get_user_special_dir(G_USER_DIRECTORY_DOCUMENTS));
+    et_browser_select_dir (self,
+                           g_get_user_special_dir (G_USER_DIRECTORY_DOCUMENTS));
 }
 
 /*
  * Load downloads directory
  */
-void Browser_Load_Downloads_Directory (void)
+void
+et_browser_go_downloads (EtBrowser *self)
 {
-    Browser_Tree_Select_Dir(g_get_user_special_dir(G_USER_DIRECTORY_DOWNLOAD));
+    et_browser_select_dir (self,
+                           g_get_user_special_dir (G_USER_DIRECTORY_DOWNLOAD));
 }
 
 /*
  * Load music directory
  */
-void Browser_Load_Music_Directory (void)
+void
+et_browser_go_music (EtBrowser *self)
 {
-    Browser_Tree_Select_Dir(g_get_user_special_dir(G_USER_DIRECTORY_MUSIC));
+    et_browser_select_dir (self,
+                           g_get_user_special_dir (G_USER_DIRECTORY_MUSIC));
 }
 
 
 /*
  * Load default directory
  */
-void Browser_Load_Default_Directory (void)
+void
+et_browser_load_default_dir (EtBrowser *self)
 {
     GFile **files;
-    gchar *path_utf8;
-    gchar *path;
-
-    path_utf8 = g_strdup(DEFAULT_PATH_TO_MP3);
-    if (!path_utf8 || strlen(path_utf8)<=0)
-    {
-        g_free(path_utf8);
-        path_utf8 = g_strdup (g_get_home_dir ());
-    }
+    GVariant *default_path;
+    const gchar *path;
 
-    /* FIXME: only in UTF-8 if coming from the config file, when it should be
-     * in GLib filename encoding in all cases. */
-    /* 'DEFAULT_PATH_TO_MP3' is stored in UTF-8, we must convert it to the file
-     * system encoding before... */
-    path = filename_from_display(path_utf8);
+    default_path = g_settings_get_value (MainSettings, "default-path");
+    path = g_variant_get_bytestring (default_path);
 
     files = g_new (GFile *, 1);
     files[0] = g_file_new_for_path (path);
     g_application_open (g_application_get_default (), files, 1, "");
 
     g_object_unref (files[0]);
-    g_free(path);
-    g_free(path_utf8);
+    g_variant_unref (default_path);
     g_free (files);
 }
 
+void
+et_browser_run_player_for_album_list (EtBrowser *self)
+{
+    EtBrowserPrivate *priv;
+    GtkTreeIter iter;
+    GtkTreeSelection *selection;
+    GList *l;
+    GList *file_list = NULL;
+
+    priv = et_browser_get_instance_private (self);
+
+    g_return_if_fail (priv->album_list != NULL);
+
+    selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->album_list));
+
+    if (!gtk_tree_selection_get_selected (selection, NULL, &iter))
+        return;
+
+    gtk_tree_model_get (GTK_TREE_MODEL (priv->album_model), &iter,
+                        ALBUM_ETFILE_LIST_POINTER, &l, -1);
+
+    for (; l != NULL; l = g_list_next (l))
+    {
+        ET_File *etfile = (ET_File *)l->data;
+        gchar *path = ((File_Name *)etfile->FileNameCur->data)->value;
+        file_list = g_list_prepend (file_list, g_file_new_for_path (path));
+    }
+
+    file_list = g_list_reverse (file_list);
+
+    et_run_audio_player (file_list);
+    g_list_free_full (file_list, g_object_unref);
+}
+
+void
+et_browser_run_player_for_artist_list (EtBrowser *self)
+{
+    EtBrowserPrivate *priv;
+    GtkTreeIter iter;
+    GtkTreeSelection *selection;
+    GList *l, *m;
+    GList *file_list = NULL;
+
+    priv = et_browser_get_instance_private (self);
+
+    g_return_if_fail (priv->artist_list != NULL);
+
+    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->artist_list));
+    if (!gtk_tree_selection_get_selected (selection, NULL, &iter))
+        return;
+
+    gtk_tree_model_get (GTK_TREE_MODEL (priv->artist_model), &iter,
+                        ARTIST_ALBUM_LIST_POINTER, &l, -1);
+
+    for (; l != NULL; l = g_list_next (l))
+    {
+        for (m = l->data; m != NULL; m = g_list_next (m))
+        {
+            ET_File *etfile = (ET_File *)m->data;
+            gchar *path = ((File_Name *)etfile->FileNameCur->data)->value;
+            file_list = g_list_prepend (file_list, g_file_new_for_path (path));
+        }
+    }
+
+    file_list = g_list_reverse (file_list);
+
+    et_run_audio_player (file_list);
+    g_list_free_full (file_list, g_object_unref);
+}
+
+void
+et_browser_run_player_for_selection (EtBrowser *self)
+{
+    EtBrowserPrivate *priv;
+    GList *selfilelist = NULL;
+    GList *l;
+    GList *file_list = NULL;
+    GtkTreeSelection *selection;
+
+    priv = et_browser_get_instance_private (self);
+
+    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->file_view));
+    selfilelist = gtk_tree_selection_get_selected_rows(selection, NULL);
+
+    for (l = selfilelist; l != NULL; l = g_list_next (l))
+    {
+        ET_File *etfile = et_browser_get_et_file_from_path (self, l->data);
+        gchar *path = ((File_Name *)etfile->FileNameCur->data)->value;
+        file_list = g_list_prepend (file_list, g_file_new_for_path (path));
+    }
+
+    file_list = g_list_reverse (file_list);
+
+    et_run_audio_player (file_list);
+    g_list_free_full (file_list, g_object_unref);
+    g_list_free_full (selfilelist, (GDestroyNotify)gtk_tree_path_free);
+}
 
 /*
  * Get the path from the selected node (row) in the browser
@@ -290,19 +429,22 @@ void Browser_Load_Default_Directory (void)
  * Remember to free the value returned from this function!
  */
 static gchar *
-Browser_Tree_Get_Path_Of_Selected_Node (void)
+Browser_Tree_Get_Path_Of_Selected_Node (EtBrowser *self)
 {
+    EtBrowserPrivate *priv;
     GtkTreeSelection *selection;
     GtkTreeIter selectedIter;
     gchar *path;
 
-    g_return_val_if_fail (BrowserTree != NULL, NULL);
+    priv = et_browser_get_instance_private (self);
 
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserTree));
+    g_return_val_if_fail (priv->tree != NULL, NULL);
+
+    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->tree));
     if (selection
     && gtk_tree_selection_get_selected(selection, NULL, &selectedIter))
     {
-        gtk_tree_model_get(GTK_TREE_MODEL(directoryTreeModel), &selectedIter,
+        gtk_tree_model_get(GTK_TREE_MODEL(priv->directory_model), &selectedIter,
                            TREE_COLUMN_FULL_PATH, &path, -1);
         return path;
     }else
@@ -313,125 +455,181 @@ Browser_Tree_Get_Path_Of_Selected_Node (void)
 
 
 /*
- * Set the 'path' within the variable BrowserCurrentPath.
+ * Set the 'path' within the variable priv->current_path.
  */
 static void
-Browser_Update_Current_Path (const gchar *path)
+et_browser_set_current_path (EtBrowser *self, const gchar *path)
 {
+    EtBrowserPrivate *priv;
+
     g_return_if_fail (path != NULL);
 
-    /* Be sure that we aren't passing 'BrowserCurrentPath' as parameter of the
+    priv = et_browser_get_instance_private (self);
+
+    /* Be sure that we aren't passing 'priv->current_path' as parameter of the
      * function to avoid an invalid read. */
-    if (path == BrowserCurrentPath) return;
+    if (path == priv->current_path) return;
 
-    if (BrowserCurrentPath != NULL)
-        g_free(BrowserCurrentPath);
-    BrowserCurrentPath = g_strdup(path);
+    g_free (priv->current_path);
+    priv->current_path = g_strdup (path);
 
 #ifdef G_OS_WIN32
     /* On win32 : "c:\path\to\dir" succeed with stat() for example, while "c:\path\to\dir\" fails */
-    ET_Win32_Path_Remove_Trailing_Backslash(BrowserCurrentPath);
+    ET_Win32_Path_Remove_Trailing_Backslash(priv->current_path);
 #endif /* G_OS_WIN32 */
 
-    if (strcmp(G_DIR_SEPARATOR_S,BrowserCurrentPath) == 0)
-        gtk_widget_set_sensitive(BrowserButton,FALSE);
+    if (strcmp(G_DIR_SEPARATOR_S,priv->current_path) == 0)
+        gtk_widget_set_sensitive (priv->button, FALSE);
     else
-        gtk_widget_set_sensitive(BrowserButton,TRUE);
+        gtk_widget_set_sensitive (priv->button, TRUE);
 }
 
 
 /*
  * Return the current path
  */
-gchar *Browser_Get_Current_Path (void)
+const gchar *
+et_browser_get_current_path (EtBrowser *self)
+{
+    EtBrowserPrivate *priv;
+
+    g_return_val_if_fail (ET_BROWSER (self), NULL);
+
+    priv = et_browser_get_instance_private (self);
+
+    return priv->current_path;
+}
+
+GtkTreeSelection *
+et_browser_get_selection (EtBrowser *self)
 {
-    return BrowserCurrentPath;
+    EtBrowserPrivate *priv;
+
+    g_return_val_if_fail (ET_BROWSER (self), NULL);
+
+    priv = et_browser_get_instance_private (self);
+
+    return gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->file_view));
 }
 
 /*
  * Reload the current directory.
  */
-void Browser_Reload_Directory (void)
+void
+et_browser_reload_directory (EtBrowser *self)
 {
-    if (BrowserTree && BrowserCurrentPath != NULL)
+    EtBrowserPrivate *priv;
+
+    priv = et_browser_get_instance_private (self);
+
+    if (priv->tree && priv->current_path != NULL)
     {
         // Unselect files, to automatically reload the file of the directory
-        GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserTree));
+        GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->tree));
         if (selection)
         {
             gtk_tree_selection_unselect_all(selection);
         }
-        Browser_Tree_Select_Dir(BrowserCurrentPath);
+        et_browser_select_dir (self, priv->current_path);
     }
 }
 
 /*
  * Set the current path (selected node) in browser as default path (within config variable).
  */
-void Set_Current_Path_As_Default (void)
+void
+et_browser_set_current_path_default (EtBrowser *self)
 {
-    if (DEFAULT_PATH_TO_MP3 != NULL)
-        g_free(DEFAULT_PATH_TO_MP3);
-    DEFAULT_PATH_TO_MP3 = g_strdup(BrowserCurrentPath);
-    Statusbar_Message(_("New default path for files selected"),TRUE);
+    EtBrowserPrivate *priv;
+
+    g_return_if_fail (ET_BROWSER (self));
+
+    priv = et_browser_get_instance_private (self);
+
+    g_settings_set_value (MainSettings, "default-path",
+                          g_variant_new_bytestring (priv->current_path));
+
+    et_application_window_status_bar_message (ET_APPLICATION_WINDOW (MainWindow),
+                                              _("New default directory selected for browser"),
+                                              TRUE);
 }
 
 /*
  * When you press the key 'enter' in the BrowserEntry to validate the text (browse the directory)
  */
 static void
-Browser_Entry_Activated (void)
+Browser_Entry_Activated (EtBrowser *self, GtkEntry *entry)
 {
+    EtBrowserPrivate *priv;
     const gchar *path_utf8;
     gchar *path;
 
-    path_utf8 = gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(BrowserEntryCombo))));
-    Add_String_To_Combo_List(GTK_LIST_STORE(BrowserEntryModel), (gchar *)path_utf8);
+    priv = et_browser_get_instance_private (self);
+
+    path_utf8 = gtk_entry_get_text (entry);
+    Add_String_To_Combo_List (GTK_LIST_STORE (priv->entry_model), path_utf8);
 
     path = filename_from_display(path_utf8);
 
-    Browser_Tree_Select_Dir(path);
+    et_browser_select_dir (self, path);
     g_free(path);
 }
 
 /*
  * Set a text into the BrowserEntry (and don't activate it)
  */
-void Browser_Entry_Set_Text (gchar *text)
+void
+et_browser_entry_set_text (EtBrowser *self, const gchar *text)
 {
-    if (!text || !BrowserEntryCombo)
+    EtBrowserPrivate *priv;
+
+    priv = et_browser_get_instance_private (self);
+
+    if (!text || !priv->entry_combo)
         return;
 
-    gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(BrowserEntryCombo))),text);
+    gtk_entry_set_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->entry_combo))),
+                        text);
 }
 
 /*
  * Button to go to parent directory
  */
 void
-et_browser_on_action_parent_directory (void)
+et_browser_go_parent (EtBrowser *self)
 {
     gchar *parent_dir, *path;
 
-    parent_dir = Browser_Get_Current_Path();
+    /* TODO: Replace this with g_file_get_parent(). */
+    parent_dir = g_strdup (et_browser_get_current_path (self));
+
     if (strlen(parent_dir)>1)
     {
         if ( parent_dir[strlen(parent_dir)-1]==G_DIR_SEPARATOR )
             parent_dir[strlen(parent_dir)-1] = '\0';
         path = g_path_get_dirname(parent_dir);
 
-        Browser_Tree_Select_Dir(path);
+        et_browser_select_dir (self, path);
         g_free(path);
     }
+
+    g_free (parent_dir);
 }
 
 /*
- * Set a text into the BrowserLabel
+ * Set a text into the priv->label
  */
-void Browser_Label_Set_Text (gchar *text)
+void
+et_browser_label_set_text (EtBrowser *self, const gchar *text)
 {
-    if (BrowserLabel && text)
-        gtk_label_set_text(GTK_LABEL(BrowserLabel),text ? text : "");
+    EtBrowserPrivate *priv;
+
+    g_return_if_fail (ET_BROWSER (self));
+    g_return_if_fail (text != NULL);
+
+    priv = et_browser_get_instance_private (self);
+
+    gtk_label_set_text (GTK_LABEL (priv->label), text);
 }
 
 /*
@@ -497,7 +695,8 @@ Browser_Tree_Key_Press (GtkWidget *tree, GdkEvent *event, gpointer data)
  *   - Delete = delete file
  * Also tries to capture text input and relate it to files
  */
-gboolean Browser_List_Key_Press (GtkWidget *list, GdkEvent *event, gpointer data)
+static gboolean
+Browser_List_Key_Press (GtkWidget *list, GdkEvent *event, gpointer data)
 {
     GdkEventKey *kevent;
     GtkTreeSelection *fileSelection;
@@ -514,7 +713,8 @@ gboolean Browser_List_Key_Press (GtkWidget *list, GdkEvent *event, gpointer data
             switch(kevent->keyval)
             {
                 case GDK_KEY_Delete:
-                    Action_Delete_Selected_Files();
+                    g_action_group_activate_action (G_ACTION_GROUP (MainWindow),
+                                                    "delete", NULL);
                     return TRUE;
             }
         }
@@ -524,73 +724,26 @@ gboolean Browser_List_Key_Press (GtkWidget *list, GdkEvent *event, gpointer data
 }
 
 /*
- * Action for double/triple click
- */
-static gboolean
-Browser_List_Button_Press (GtkTreeView *treeView, GdkEventButton *event)
-{
-    g_return_val_if_fail (event != NULL, FALSE);
-
-    if (event->type==GDK_2BUTTON_PRESS && event->button==1)
-    {
-        /* Double left mouse click */
-        // Select files of the same directory (useful when browsing sub-directories)
-        GList *l;
-        gchar *path_ref = NULL;
-        gchar *patch_check = NULL;
-        GtkTreePath *currentPath = NULL;
-
-        if (!ETCore->ETFileDisplayed)
-            return FALSE;
-
-        // File taken as reference...
-        path_ref = g_path_get_dirname( ((File_Name *)ETCore->ETFileDisplayed->FileNameCur->data)->value );
-
-        // Search and select files of the same directory
-        for (l = g_list_first (ETCore->ETFileDisplayedList); l != NULL;
-             l = g_list_next (l))
-        {
-            // Path of the file to check if it is in the same directory
-            patch_check = g_path_get_dirname (((File_Name *)((ET_File *)l->data)->FileNameCur->data)->value);
-
-            if ( path_ref && patch_check && strcmp(path_ref,patch_check)==0 )
-            {
-                // Use of 'currentPath' to try to increase speed. Indeed, in many
-                // cases, the next file to select, is the next in the list
-                currentPath = Browser_List_Select_File_By_Etfile2 ((ET_File *)l->data,
-                                                                   TRUE,
-                                                                   currentPath);
-            }
-            g_free(patch_check);
-        }
-        g_free(path_ref);
-        if (currentPath)
-            gtk_tree_path_free(currentPath);
-    }else if (event->type==GDK_3BUTTON_PRESS && event->button==1)
-    {
-        /* Triple left mouse click, select all files of the list. */
-        et_on_action_select_all ();
-    }
-    return FALSE;
-}
-
-/*
  * Collapse (close) tree recursively up to the root node.
  */
-void Browser_Tree_Collapse (void)
+void
+et_browser_collapse (EtBrowser *self)
 {
+    EtBrowserPrivate *priv;
 #ifndef G_OS_WIN32
     GtkTreePath *rootPath;
 #endif /* !G_OS_WIN32 */
 
-    g_return_if_fail (BrowserTree != NULL);
+    priv = et_browser_get_instance_private (self);
 
-    gtk_tree_view_collapse_all(GTK_TREE_VIEW(BrowserTree));
+    g_return_if_fail (priv->tree != NULL);
+
+    gtk_tree_view_collapse_all(GTK_TREE_VIEW(priv->tree));
 
 #ifndef G_OS_WIN32
     /* But keep the main directory opened */
     rootPath = gtk_tree_path_new_first();
-    gtk_tree_view_expand_to_path(GTK_TREE_VIEW(BrowserTree), rootPath);
+    gtk_tree_view_expand_to_path(GTK_TREE_VIEW(priv->tree), rootPath);
     gtk_tree_path_free(rootPath);
 #endif /* !G_OS_WIN32 */
 }
@@ -611,8 +764,11 @@ Browser_Tree_Set_Node_Visible (GtkWidget *directoryView, GtkTreePath *path)
 /*
  * Set a row visible in the file list (by scrolling the list)
  */
-void Browser_List_Set_Row_Visible (GtkTreeModel *treeModel, GtkTreeIter *rowIter)
+static void
+et_browser_set_row_visible (EtBrowser *self, GtkTreeIter *rowIter)
 {
+    EtBrowserPrivate *priv;
+
     /*
      * TODO: Make this only scroll to the row if it is not visible
      * (like in easytag GTK1)
@@ -620,11 +776,15 @@ void Browser_List_Set_Row_Visible (GtkTreeModel *treeModel, GtkTreeIter *rowIter
      */
     GtkTreePath *rowPath;
 
-    g_return_if_fail (treeModel != NULL || rowIter != NULL);
+    priv = et_browser_get_instance_private (self);
+
+    g_return_if_fail (rowIter != NULL);
 
-    rowPath = gtk_tree_model_get_path(treeModel, rowIter);
-    gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(BrowserList), rowPath, NULL, FALSE, 0, 0);
-    gtk_tree_path_free(rowPath);
+    rowPath = gtk_tree_model_get_path (GTK_TREE_MODEL (priv->file_model),
+                                       rowIter);
+    gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (priv->file_view), rowPath,
+                                  NULL, FALSE, 0, 0);
+    gtk_tree_path_free (rowPath);
 }
 
 /*
@@ -632,21 +792,24 @@ void Browser_List_Set_Row_Visible (GtkTreeModel *treeModel, GtkTreeIter *rowIter
  * Do file-save confirmation, and then prompt the new dir to be loaded
  */
 static gboolean
-Browser_Tree_Node_Selected (GtkTreeSelection *selection, gpointer user_data)
+Browser_Tree_Node_Selected (EtBrowser *self, GtkTreeSelection *selection)
 {
+    EtBrowserPrivate *priv;
     gchar *pathName, *pathName_utf8;
     static int counter = 0;
     GtkTreeIter selectedIter;
     GtkTreePath *selectedPath;
 
+    priv = et_browser_get_instance_private (self);
+
     if (!gtk_tree_selection_get_selected(selection, NULL, &selectedIter))
         return TRUE;
-    selectedPath = gtk_tree_model_get_path(GTK_TREE_MODEL(directoryTreeModel), &selectedIter);
+    selectedPath = gtk_tree_model_get_path(GTK_TREE_MODEL(priv->directory_model), &selectedIter);
 
     /* Open the node */
-    if (OPEN_SELECTED_BROWSER_NODE)
+    if (g_settings_get_boolean (MainSettings, "browse-expand-children"))
     {
-        gtk_tree_view_expand_row(GTK_TREE_VIEW(BrowserTree), selectedPath, FALSE);
+        gtk_tree_view_expand_row(GTK_TREE_VIEW(priv->tree), selectedPath, FALSE);
     }
     gtk_tree_path_free(selectedPath);
 
@@ -654,18 +817,20 @@ Browser_Tree_Node_Selected (GtkTreeSelection *selection, gpointer user_data)
     if (ReadingDirectory == TRUE)
         return TRUE;
 
-    //Browser_Tree_Set_Node_Visible(BrowserTree, selectedPath);
-    gtk_tree_model_get(GTK_TREE_MODEL(directoryTreeModel), &selectedIter,
+    //Browser_Tree_Set_Node_Visible(priv->tree, selectedPath);
+    gtk_tree_model_get(GTK_TREE_MODEL(priv->directory_model), &selectedIter,
                        TREE_COLUMN_FULL_PATH, &pathName, -1);
     if (!pathName)
         return FALSE;
 
     /* Save the current displayed data */
     ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
-    Update_Command_Buttons_Sensivity(); // Not clean to put this here...
+    /* FIXME: Not clean to put this here. */
+    et_application_window_update_actions (ET_APPLICATION_WINDOW (MainWindow));
 
     /* Check if all files have been saved before changing the directory */
-    if (CONFIRM_WHEN_UNSAVED_FILES && ET_Check_If_All_Files_Are_Saved() != TRUE)
+    if (g_settings_get_boolean (MainSettings, "confirm-when-unsaved-files")
+        && ET_Check_If_All_Files_Are_Saved () != TRUE)
     {
         GtkWidget *msgdialog;
         gint response;
@@ -676,8 +841,13 @@ Browser_Tree_Node_Selected (GtkTreeSelection *selection, gpointer user_data)
                                            GTK_BUTTONS_NONE,
                                            "%s",
                                            _("Some files have been modified but not saved"));
-        gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(msgdialog),"%s",_("Do you want to save them before changing the directory?"));
-        gtk_dialog_add_buttons(GTK_DIALOG(msgdialog),GTK_STOCK_DISCARD,GTK_RESPONSE_NO,GTK_STOCK_CANCEL,GTK_RESPONSE_CANCEL,GTK_STOCK_SAVE,GTK_RESPONSE_YES,NULL);
+        gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (msgdialog),
+                                                  "%s",
+                                                  _("Do you want to save them before changing directory?"));
+        gtk_dialog_add_buttons (GTK_DIALOG (msgdialog), _("_Discard"),
+                                GTK_RESPONSE_NO, _("_Cancel"),
+                                GTK_RESPONSE_CANCEL, _("_Save"),
+                                GTK_RESPONSE_YES, NULL);
         gtk_dialog_set_default_response (GTK_DIALOG (msgdialog),
                                          GTK_RESPONSE_YES);
         gtk_window_set_title(GTK_WINDOW(msgdialog),_("Confirm Directory Change"));
@@ -703,16 +873,16 @@ Browser_Tree_Node_Selected (GtkTreeSelection *selection, gpointer user_data)
     }
 
     /* Memorize the current path */
-    Browser_Update_Current_Path(pathName);
+    et_browser_set_current_path (self, pathName);
 
     /* Display the selected path into the BrowserEntry */
     pathName_utf8 = filename_to_display(pathName);
-    gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(BrowserEntryCombo))), pathName_utf8);
+    gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(priv->entry_combo))), pathName_utf8);
 
     /* Start to read the directory */
     /* The first time, 'counter' is equal to zero. And if we don't want to load
      * directory on startup, we skip the 'reading', but newt we must read it each time */
-    if (LOAD_ON_STARTUP || counter)
+    if (g_settings_get_boolean (MainSettings, "load-on-startup") || counter)
     {
         gboolean dir_loaded;
         GtkTreeIter parentIter;
@@ -730,19 +900,20 @@ Browser_Tree_Node_Selected (GtkTreeSelection *selection, gpointer user_data)
                 /* If the path could not be read, then it is possible that it
                  * has a subdirectory with readable permissions. In that case
                  * do not refresh the children. */
-                if (gtk_tree_model_iter_parent(GTK_TREE_MODEL(directoryTreeModel),&parentIter,&selectedIter) )
+                if (gtk_tree_model_iter_parent(GTK_TREE_MODEL(priv->directory_model),&parentIter,&selectedIter) )
                 {
-                    selectedPath = gtk_tree_model_get_path(GTK_TREE_MODEL(directoryTreeModel), &parentIter);
+                    selectedPath = gtk_tree_model_get_path(GTK_TREE_MODEL(priv->directory_model), &parentIter);
                     gtk_tree_selection_select_iter (selection, &parentIter);
-                    if (gtk_tree_model_iter_has_child (GTK_TREE_MODEL (directoryTreeModel),
+                    if (gtk_tree_model_iter_has_child (GTK_TREE_MODEL (priv->directory_model),
                                                        &selectedIter) == FALSE
                                                        && !g_file_query_exists (file, NULL))
                     {
-                        gtk_tree_view_collapse_row (GTK_TREE_VIEW (BrowserTree),
+                        gtk_tree_view_collapse_row (GTK_TREE_VIEW (priv->tree),
                                                     selectedPath);
-                        if (OPEN_SELECTED_BROWSER_NODE)
+                        if (g_settings_get_boolean (MainSettings,
+                                                    "browse-expand-children"))
                         {
-                            gtk_tree_view_expand_row (GTK_TREE_VIEW (BrowserTree),
+                            gtk_tree_view_expand_row (GTK_TREE_VIEW (priv->tree),
                                                       selectedPath, FALSE);
                         }
                         gtk_tree_path_free (selectedPath);
@@ -755,7 +926,7 @@ Browser_Tree_Node_Selected (GtkTreeSelection *selection, gpointer user_data)
     }else
     {
         /* As we don't use the function 'Read_Directory' we must add this function here */
-        Update_Command_Buttons_Sensivity();
+        et_application_window_update_actions (ET_APPLICATION_WINDOW (MainWindow));
     }
     counter++;
 
@@ -767,21 +938,27 @@ Browser_Tree_Node_Selected (GtkTreeSelection *selection, gpointer user_data)
 
 #ifdef G_OS_WIN32
 static gboolean
-Browser_Win32_Get_Drive_Root (gchar *drive, GtkTreeIter *rootNode, GtkTreePath **rootPath)
+et_browser_win32_get_drive_root (EtBrowser *self,
+                                 gchar *drive,
+                                 GtkTreeIter *rootNode,
+                                 GtkTreePath **rootPath)
 {
+    EtBrowserPrivate *priv;
     gint root_index;
     gboolean found = FALSE;
     GtkTreeIter parentNode;
     gchar *nodeName;
 
-    gtk_tree_model_get_iter_first(GTK_TREE_MODEL(directoryTreeModel), &parentNode);
+    priv = et_browser_get_instance_private (self);
+
+    gtk_tree_model_get_iter_first(GTK_TREE_MODEL(priv->directory_model), &parentNode);
 
     // Find root of path, ie: the drive letter
     root_index = 0;
 
     do
     {
-        gtk_tree_model_get(GTK_TREE_MODEL(directoryTreeModel), &parentNode,
+        gtk_tree_model_get(GTK_TREE_MODEL(priv->directory_model), &parentNode,
                            TREE_COLUMN_FULL_PATH, &nodeName, -1);
         if (strncasecmp(drive,nodeName, strlen(drive)) == 0)
         {
@@ -790,7 +967,7 @@ Browser_Win32_Get_Drive_Root (gchar *drive, GtkTreeIter *rootNode, GtkTreePath *
             break;
         }
         root_index++;
-    } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(directoryTreeModel), &parentNode));
+    } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(priv->directory_model), &parentNode));
 
     if (!found) return FALSE;
 
@@ -803,15 +980,16 @@ Browser_Win32_Get_Drive_Root (gchar *drive, GtkTreeIter *rootNode, GtkTreePath *
 
 
 /*
- * Browser_Tree_Select_Dir: Select the directory corresponding to the 'path' in
+ * et_browser_select_dir: Select the directory corresponding to the 'path' in
  * the tree browser, but it doesn't read it!
- * Check if path is correct before selecting it. And returns TRUE on success,
- * else FALSE.
+ * Check if path is correct before selecting it.
  *
  * - "current_path" is in file system encoding (not UTF-8)
  */
-gboolean Browser_Tree_Select_Dir (const gchar *current_path)
+void
+et_browser_select_dir (EtBrowser *self, const gchar *current_path)
 {
+    EtBrowserPrivate *priv;
     GtkTreePath *rootPath = NULL;
     GtkTreeIter parentNode, currentNode;
     gint index = 1; // Skip the first token as it is NULL due to leading /
@@ -819,44 +997,43 @@ gboolean Browser_Tree_Select_Dir (const gchar *current_path)
     gchar *nodeName;
     gchar *temp;
 
-    g_return_val_if_fail (BrowserTree != NULL, FALSE);
+    priv = et_browser_get_instance_private (self);
+
+    g_return_if_fail (priv->tree != NULL);
 
     /* Load current_path */
     if(!current_path || !*current_path)
     {
-        return TRUE;
+        return;
     }
 
-#ifdef G_OS_WIN32
-    /* On win32 : stat("c:\path\to\dir") succeed, while stat("c:\path\to\dir\") fails */
-    ET_Win32_Path_Remove_Trailing_Backslash(current_path);
-#endif /* G_OS_WIN32 */
-
-
     /* Don't check here if the path is valid. It will be done later when
      * selecting a node in the tree */
 
-    Browser_Update_Current_Path(current_path);
+    et_browser_set_current_path (self, current_path);
 
     parts = g_strsplit(current_path, G_DIR_SEPARATOR_S, 0);
 
     // Expand root node (fill parentNode and rootPath)
 #ifdef G_OS_WIN32
-    if (!Browser_Win32_Get_Drive_Root(parts[0], &parentNode, &rootPath))
-        return FALSE;
+    if (!et_browser_win32_get_drive_root (self, parts[0], &parentNode,
+                                          &rootPath))
+    {
+        return;
+    }
 #else /* !G_OS_WIN32 */
-    if (!gtk_tree_model_get_iter_first (GTK_TREE_MODEL (directoryTreeModel),
+    if (!gtk_tree_model_get_iter_first (GTK_TREE_MODEL (priv->directory_model),
                                         &parentNode))
     {
-        g_message ("%s", "directoryTreeModel is empty");
-        return FALSE;
+        g_message ("%s", "priv->directory_model is empty");
+        return;
     }
 
     rootPath = gtk_tree_path_new_first();
 #endif /* !G_OS_WIN32 */
     if (rootPath)
     {
-        gtk_tree_view_expand_to_path(GTK_TREE_VIEW(BrowserTree), rootPath);
+        gtk_tree_view_expand_to_path(GTK_TREE_VIEW(priv->tree), rootPath);
         gtk_tree_path_free(rootPath);
     }
 
@@ -868,12 +1045,12 @@ gboolean Browser_Tree_Select_Dir (const gchar *current_path)
             continue;
         }
 
-        if (!gtk_tree_model_iter_children(GTK_TREE_MODEL(directoryTreeModel), &currentNode, &parentNode))
+        if (!gtk_tree_model_iter_children(GTK_TREE_MODEL(priv->directory_model), &currentNode, &parentNode))
         {
             gchar *path, *parent_path;
             GFile *file;
 
-            gtk_tree_model_get (GTK_TREE_MODEL (directoryTreeModel),
+            gtk_tree_model_get (GTK_TREE_MODEL (priv->directory_model),
                                 &parentNode, TREE_COLUMN_FULL_PATH,
                                 &parent_path, -1);
             path = g_build_path (G_DIR_SEPARATOR_S, parent_path, parts[index],
@@ -894,7 +1071,7 @@ gboolean Browser_Tree_Select_Dir (const gchar *current_path)
                 /* Create a new node for this directory name. */
                 icon = get_gicon_for_path (path, ET_PATH_STATE_CLOSED);
 
-                gtk_tree_store_insert_with_values (GTK_TREE_STORE (directoryTreeModel),
+                gtk_tree_store_insert_with_values (GTK_TREE_STORE (priv->directory_model),
                                                    &iter, &parentNode, 0,
                                                    TREE_COLUMN_DIR_NAME, parts[index],
                                                    TREE_COLUMN_FULL_PATH, path,
@@ -918,7 +1095,7 @@ gboolean Browser_Tree_Select_Dir (const gchar *current_path)
 
         do
         {
-            gtk_tree_model_get(GTK_TREE_MODEL(directoryTreeModel), &currentNode,
+            gtk_tree_model_get(GTK_TREE_MODEL(priv->directory_model), &currentNode,
                                TREE_COLUMN_FULL_PATH, &temp, -1);
             nodeName = g_path_get_basename(temp);
             g_free(temp);
@@ -933,38 +1110,38 @@ gboolean Browser_Tree_Select_Dir (const gchar *current_path)
             }
             g_free(nodeName);
 
-            if (!gtk_tree_model_iter_next (GTK_TREE_MODEL (directoryTreeModel),
+            if (!gtk_tree_model_iter_next (GTK_TREE_MODEL (priv->directory_model),
                                            &currentNode))
             {
                 /* Path was not found in tree, such as when a hidden path was
                  * passed in, but hidden paths are set to not be displayed. */
                 g_strfreev (parts);
-                return FALSE;
+                return;
             }
         } while (1);
 
         parentNode = currentNode;
-        rootPath = gtk_tree_model_get_path(GTK_TREE_MODEL(directoryTreeModel), &parentNode);
+        rootPath = gtk_tree_model_get_path(GTK_TREE_MODEL(priv->directory_model), &parentNode);
         if (rootPath)
         {
-            gtk_tree_view_expand_to_path(GTK_TREE_VIEW(BrowserTree), rootPath);
+            gtk_tree_view_expand_to_path(GTK_TREE_VIEW(priv->tree), rootPath);
             gtk_tree_path_free(rootPath);
         }
         index++;
     }
 
-    rootPath = gtk_tree_model_get_path(GTK_TREE_MODEL(directoryTreeModel), &parentNode);
+    rootPath = gtk_tree_model_get_path(GTK_TREE_MODEL(priv->directory_model), &parentNode);
     if (rootPath)
     {
-        gtk_tree_view_expand_to_path(GTK_TREE_VIEW(BrowserTree), rootPath);
+        gtk_tree_view_expand_to_path(GTK_TREE_VIEW(priv->tree), rootPath);
         // Select the node to load the corresponding directory
-        gtk_tree_selection_select_path(gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserTree)), rootPath);
-        Browser_Tree_Set_Node_Visible(BrowserTree, rootPath);
+        gtk_tree_selection_select_path(gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->tree)), rootPath);
+        Browser_Tree_Set_Node_Visible(priv->tree, rootPath);
         gtk_tree_path_free(rootPath);
     }
 
     g_strfreev(parts);
-    return TRUE;
+    return;
 }
 
 /*
@@ -972,13 +1149,16 @@ gboolean Browser_Tree_Select_Dir (const gchar *current_path)
  * Displays the file info of the lowest selected file in the right-hand pane
  */
 static void
-Browser_List_Row_Selected (GtkTreeSelection *selection, gpointer data)
+Browser_List_Row_Selected (EtBrowser *self, GtkTreeSelection *selection)
 {
+    EtBrowserPrivate *priv;
     GList *selectedRows;
     GtkTreePath *lastSelected;
     GtkTreeIter lastFile;
     ET_File *fileETFile;
 
+    priv = et_browser_get_instance_private (self);
+
     selectedRows = gtk_tree_selection_get_selected_rows(selection, NULL);
 
     /*
@@ -990,13 +1170,13 @@ Browser_List_Row_Selected (GtkTreeSelection *selection, gpointer data)
         return;
     }
 
-    if (!LastBrowserListETFileSelected)
+    if (!priv->last_selected_file)
     {
         // Returns the last line selected (in ascending line order) to display the item
         lastSelected = (GtkTreePath *)g_list_last(selectedRows)->data;
-        if (gtk_tree_model_get_iter(GTK_TREE_MODEL(fileListModel), &lastFile, lastSelected))
+        if (gtk_tree_model_get_iter(GTK_TREE_MODEL(priv->file_model), &lastFile, lastSelected))
         {
-            gtk_tree_model_get (GTK_TREE_MODEL(fileListModel), &lastFile,
+            gtk_tree_model_get (GTK_TREE_MODEL(priv->file_model), &lastFile,
                                 LIST_FILE_POINTER, &fileETFile, -1);
             Action_Select_Nth_File_By_Etfile (fileETFile);
         }
@@ -1007,26 +1187,54 @@ Browser_List_Row_Selected (GtkTreeSelection *selection, gpointer data)
     }else
     {
         // The real last selected line
-        Action_Select_Nth_File_By_Etfile(LastBrowserListETFileSelected);
+        Action_Select_Nth_File_By_Etfile(priv->last_selected_file);
     }
 
     g_list_free_full (selectedRows, (GDestroyNotify)gtk_tree_path_free);
 }
 
 /*
+ * Empty model, disabling Browser_List_Row_Selected () during clear because it
+ * is called and causes crashes otherwise.
+ */
+static void
+et_browser_clear_file_model (EtBrowser *self)
+{
+    EtBrowserPrivate *priv;
+    GtkTreeSelection *selection;
+
+    priv = et_browser_get_instance_private (self);
+
+    selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->file_view));
+
+    g_signal_handler_block (selection, priv->file_selected_handler);
+
+    gtk_list_store_clear (priv->file_model);
+    gtk_tree_view_columns_autosize (GTK_TREE_VIEW (priv->file_view));
+
+    g_signal_handler_unblock (selection, priv->file_selected_handler);
+}
+
+/*
  * Loads the specified etfilelist into the browser list
  * Also supports optionally selecting a specific etfile
  * but be careful, this does not call Browser_List_Row_Selected !
  */
-void Browser_List_Load_File_List (GList *etfilelist, ET_File *etfile_to_select)
+void
+et_browser_load_file_list (EtBrowser *self,
+                           GList *etfilelist,
+                           const ET_File *etfile_to_select)
 {
+    EtBrowserPrivate *priv;
     GList *l;
     gboolean activate_bg_color = 0;
     GtkTreeIter rowIter;
 
-    g_return_if_fail (BrowserList != NULL);
+    g_return_if_fail (ET_BROWSER (self));
+
+    priv = et_browser_get_instance_private (self);
 
-    browser_file_model_clear ();
+    et_browser_clear_file_model (self);
 
     for (l = g_list_first (etfilelist); l != NULL; l = g_list_next (l))
     {
@@ -1038,7 +1246,7 @@ void Browser_List_Load_File_List (GList *etfilelist, ET_File *etfile_to_select)
         gchar *disc;
 
         // Change background color when changing directory (the first row must not be changed)
-        if (gtk_tree_model_iter_n_children(GTK_TREE_MODEL(fileListModel), NULL) > 0)
+        if (gtk_tree_model_iter_n_children(GTK_TREE_MODEL(priv->file_model), NULL) > 0)
         {
             gchar *dir1_utf8;
             gchar *dir2_utf8;
@@ -1062,7 +1270,7 @@ void Browser_List_Load_File_List (GList *etfilelist, ET_File *etfile_to_select)
                                                  : NULL, FileTag->disc_total,
                              NULL);
 
-        gtk_list_store_insert_with_values (fileListModel, &rowIter, G_MAXINT,
+        gtk_list_store_insert_with_values (priv->file_model, &rowIter, G_MAXINT,
                                            LIST_FILE_NAME, basename_utf8,
                                            LIST_FILE_POINTER, l->data,
                                            LIST_FILE_KEY, fileKey,
@@ -1093,12 +1301,12 @@ void Browser_List_Load_File_List (GList *etfilelist, ET_File *etfile_to_select)
 
         if (etfile_to_select == l->data)
         {
-            Browser_List_Select_File_By_Iter(&rowIter, TRUE);
+            Browser_List_Select_File_By_Iter (self, &rowIter, TRUE);
             //ET_Display_File_Data_To_UI (l->data);
         }
 
-        // Set appearance of the row
-        Browser_List_Set_Row_Appearance(&rowIter);
+        /* Set appearance of the row. */
+        Browser_List_Set_Row_Appearance (self, &rowIter);
     }
 }
 
@@ -1108,8 +1316,10 @@ void Browser_List_Load_File_List (GList *etfilelist, ET_File *etfile_to_select)
  *  - Refresh 'filename' is file saved,
  *  - Change color is something changed on the file
  */
-void Browser_List_Refresh_Whole_List (void)
+void
+et_browser_refresh_list (EtBrowser *self)
 {
+    EtBrowserPrivate *priv;
     ET_File   *ETFile;
     File_Tag  *FileTag;
     File_Name *FileName;
@@ -1121,28 +1331,29 @@ void Browser_List_Refresh_Whole_List (void)
     gchar *track;
     gchar *disc;
     gboolean valid;
-    GtkWidget *artist_radio;
+    GVariant *variant;
+
+    g_return_if_fail (ET_BROWSER (self));
 
-    if (!ETCore->ETFileDisplayedList || !BrowserList
-    ||  gtk_tree_model_iter_n_children(GTK_TREE_MODEL(fileListModel), NULL) == 0)
+    priv = et_browser_get_instance_private (self);
+
+    if (!ETCore->ETFileDisplayedList || !priv->file_view
+    ||  gtk_tree_model_iter_n_children(GTK_TREE_MODEL(priv->file_model), NULL) == 0)
     {
         return;
     }
 
-    artist_radio = gtk_ui_manager_get_widget (UIManager,
-                                              "/ToolBar/ArtistViewMode");
-
     // Browse the full list for changes
-    //gtk_tree_model_get_iter_first(GTK_TREE_MODEL(fileListModel), &iter);
-    //    g_print("above worked %d rows\n", gtk_tree_model_iter_n_children(GTK_TREE_MODEL(fileListModel), NULL));
+    //gtk_tree_model_get_iter_first(GTK_TREE_MODEL(priv->file_model), &iter);
+    //    g_print("above worked %d rows\n", gtk_tree_model_iter_n_children(GTK_TREE_MODEL(priv->file_model), NULL));
 
     currentPath = gtk_tree_path_new_first();
 
-    valid = gtk_tree_model_get_iter(GTK_TREE_MODEL(fileListModel), &iter, currentPath);
+    valid = gtk_tree_model_get_iter(GTK_TREE_MODEL(priv->file_model), &iter, currentPath);
     while (valid)
     {
         // Refresh filename and other fields
-        gtk_tree_model_get(GTK_TREE_MODEL(fileListModel), &iter,
+        gtk_tree_model_get(GTK_TREE_MODEL(priv->file_model), &iter,
                            LIST_FILE_POINTER, &ETFile, -1);
 
         FileName = (File_Name *)ETFile->FileNameCur->data;
@@ -1154,7 +1365,7 @@ void Browser_List_Refresh_Whole_List (void)
                              FileTag->disc_total ? "/" : NULL,
                              FileTag->disc_total, NULL);
 
-        gtk_list_store_set(fileListModel, &iter,
+        gtk_list_store_set(priv->file_model, &iter,
                            LIST_FILE_NAME,          current_basename_utf8,
                            LIST_FILE_TITLE,         FileTag->title,
                            LIST_FILE_ARTIST,        FileTag->artist,
@@ -1175,41 +1386,46 @@ void Browser_List_Refresh_Whole_List (void)
         g_free(track);
         g_free (disc);
 
-        Browser_List_Set_Row_Appearance(&iter);
+        Browser_List_Set_Row_Appearance (self, &iter);
 
-        valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(fileListModel), &iter);
+        valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(priv->file_model), &iter);
     }
     gtk_tree_path_free(currentPath);
 
+    variant = g_action_group_get_action_state (G_ACTION_GROUP (MainWindow),
+                                               "file-artist-view");
+
     // When displaying Artist + Album lists => refresh also rows color
-    if (gtk_toggle_tool_button_get_active (GTK_TOGGLE_TOOL_BUTTON (artist_radio)))
+    if (strcmp (g_variant_get_string (variant, NULL), "artist") == 0)
     {
 
-        for (row=0; row < gtk_tree_model_iter_n_children(GTK_TREE_MODEL(artistListModel), NULL); row++)
+        for (row = 0; row < gtk_tree_model_iter_n_children (GTK_TREE_MODEL (priv->artist_model), NULL); row++)
         {
             if (row == 0)
                 currentPath = gtk_tree_path_new_first();
             else
                 gtk_tree_path_next(currentPath);
 
-            gtk_tree_model_get_iter(GTK_TREE_MODEL(artistListModel), &iter, currentPath);
-            Browser_Artist_List_Set_Row_Appearance(&iter);
+            gtk_tree_model_get_iter(GTK_TREE_MODEL(priv->artist_model), &iter, currentPath);
+            Browser_Artist_List_Set_Row_Appearance (self, &iter);
         }
         gtk_tree_path_free(currentPath);
 
 
-        for (row=0; row < gtk_tree_model_iter_n_children(GTK_TREE_MODEL(albumListModel), NULL); row++)
+        for (row=0; row < gtk_tree_model_iter_n_children(GTK_TREE_MODEL(priv->album_model), NULL); row++)
         {
             if (row == 0)
                 currentPath = gtk_tree_path_new_first();
             else
                 gtk_tree_path_next(currentPath);
 
-            gtk_tree_model_get_iter(GTK_TREE_MODEL(albumListModel), &iter, currentPath);
-            Browser_Album_List_Set_Row_Appearance(&iter);
+            gtk_tree_model_get_iter(GTK_TREE_MODEL(priv->album_model), &iter, currentPath);
+            Browser_Album_List_Set_Row_Appearance (self, &iter);
         }
         gtk_tree_path_free(currentPath);
     }
+
+    g_variant_unref (variant);
 }
 
 
@@ -1218,13 +1434,15 @@ void Browser_List_Refresh_Whole_List (void)
  *  - Refresh filename is file saved,
  *  - Change color is something change on the file
  */
-void Browser_List_Refresh_File_In_List (ET_File *ETFile)
+void
+et_browser_refresh_file_in_list (EtBrowser *self,
+                                 const ET_File *ETFile)
 {
+    EtBrowserPrivate *priv;
     GList *selectedRow = NULL;
-    GtkWidget *artist_radio;
+    GVariant *variant;
     GtkTreeSelection *selection;
     GtkTreeIter selectedIter;
-    GtkTreePath *currentPath = NULL;
     ET_File   *etfile;
     File_Tag  *FileTag;
     File_Name *FileName;
@@ -1233,26 +1451,26 @@ void Browser_List_Refresh_File_In_List (ET_File *ETFile)
     gchar *track;
     gchar *disc;
     gboolean valid;
-    gint row;
     gchar *artist, *album;
 
-    if (!ETCore->ETFileDisplayedList || !BrowserList || !ETFile ||
-        gtk_tree_model_iter_n_children(GTK_TREE_MODEL(fileListModel), NULL) == 0)
+    g_return_if_fail (ET_BROWSER (self));
+
+    priv = et_browser_get_instance_private (self);
+
+    if (!ETCore->ETFileDisplayedList || !priv->file_view || !ETFile ||
+        gtk_tree_model_iter_n_children(GTK_TREE_MODEL(priv->file_model), NULL) == 0)
     {
         return;
     }
 
-    artist_radio = gtk_ui_manager_get_widget (UIManager,
-                                              "/ToolBar/ArtistViewMode");
-
     // Search the row of the modified file to update it (when found: row_found=TRUE)
     // 1/3. Get position of ETFile in ETFileList
     if (row_found == FALSE)
     {
-        valid = gtk_tree_model_iter_nth_child (GTK_TREE_MODEL(fileListModel), &selectedIter, NULL, ETFile->IndexKey-1);
+        valid = gtk_tree_model_iter_nth_child (GTK_TREE_MODEL(priv->file_model), &selectedIter, NULL, ETFile->IndexKey-1);
         if (valid)
         {
-            gtk_tree_model_get(GTK_TREE_MODEL(fileListModel), &selectedIter,
+            gtk_tree_model_get(GTK_TREE_MODEL(priv->file_model), &selectedIter,
                            LIST_FILE_POINTER, &etfile, -1);
             if (ETFile->ETFileKey == etfile->ETFileKey)
             {
@@ -1264,15 +1482,15 @@ void Browser_List_Refresh_File_In_List (ET_File *ETFile)
     // 2/3. Try with the selected file in list (works only if we select the same file)
     if (row_found == FALSE)
     {
-        selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserList));
+        selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->file_view));
         selectedRow = gtk_tree_selection_get_selected_rows(selection, NULL);
         if (selectedRow && selectedRow->data != NULL)
         {
-            valid = gtk_tree_model_get_iter(GTK_TREE_MODEL(fileListModel), &selectedIter,
+            valid = gtk_tree_model_get_iter(GTK_TREE_MODEL(priv->file_model), &selectedIter,
                                     (GtkTreePath*) selectedRow->data);
             if (valid)
             {
-                gtk_tree_model_get(GTK_TREE_MODEL(fileListModel), &selectedIter,
+                gtk_tree_model_get(GTK_TREE_MODEL(priv->file_model), &selectedIter,
                                    LIST_FILE_POINTER, &etfile, -1);
                 if (ETFile->ETFileKey == etfile->ETFileKey)
                 {
@@ -1287,10 +1505,10 @@ void Browser_List_Refresh_File_In_List (ET_File *ETFile)
     // 3/3. Fails, now we browse the full list to find it
     if (row_found == FALSE)
     {
-        valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(fileListModel), &selectedIter);
+        valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(priv->file_model), &selectedIter);
         while (valid)
         {
-            gtk_tree_model_get(GTK_TREE_MODEL(fileListModel), &selectedIter,
+            gtk_tree_model_get(GTK_TREE_MODEL(priv->file_model), &selectedIter,
                                LIST_FILE_POINTER, &etfile, -1);
             if (ETFile->ETFileKey == etfile->ETFileKey)
             {
@@ -1298,7 +1516,7 @@ void Browser_List_Refresh_File_In_List (ET_File *ETFile)
                 break;
             } else
             {
-                valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(fileListModel), &selectedIter);
+                valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(priv->file_model), &selectedIter);
             }
         }
     }
@@ -1317,7 +1535,7 @@ void Browser_List_Refresh_File_In_List (ET_File *ETFile)
                          FileTag->disc_total ? "/" : NULL, FileTag->disc_total,
                          NULL);
 
-    gtk_list_store_set(fileListModel, &selectedIter,
+    gtk_list_store_set(priv->file_model, &selectedIter,
                        LIST_FILE_NAME,          current_basename_utf8,
                        LIST_FILE_TITLE,         FileTag->title,
                        LIST_FILE_ARTIST,        FileTag->artist,
@@ -1338,72 +1556,76 @@ void Browser_List_Refresh_File_In_List (ET_File *ETFile)
     g_free(track);
     g_free (disc);
 
-    // Change appearance (line to red) if filename changed
-    Browser_List_Set_Row_Appearance(&selectedIter);
+    /* Change appearance (line to red) if filename changed. */
+    Browser_List_Set_Row_Appearance (self, &selectedIter);
 
-    // When displaying Artist + Album lists => refresh also rows color
-    if (gtk_toggle_tool_button_get_active (GTK_TOGGLE_TOOL_BUTTON (artist_radio)))
+    variant = g_action_group_get_action_state (G_ACTION_GROUP (MainWindow),
+                                               "file-artist-view");
+
+    /* When displaying Artist + Album lists => refresh also rows color. */
+    if (strcmp (g_variant_get_string (variant, NULL), "artist") == 0)
     {
         gchar *current_artist = ((File_Tag *)ETFile->FileTag->data)->artist;
         gchar *current_album  = ((File_Tag *)ETFile->FileTag->data)->album;
 
-        for (row=0; row < gtk_tree_model_iter_n_children(GTK_TREE_MODEL(artistListModel), NULL); row++)
-        {
-            if (row == 0)
-                currentPath = gtk_tree_path_new_first();
-            else
-                gtk_tree_path_next(currentPath);
+        valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (priv->artist_model),
+                                               &selectedIter);
 
-            valid = gtk_tree_model_get_iter(GTK_TREE_MODEL(artistListModel), &selectedIter, currentPath);
-            if (valid)
-            {
-                gtk_tree_model_get(GTK_TREE_MODEL(artistListModel), &selectedIter, ARTIST_NAME, &artist, -1);
+        while (valid)
+        {
+                gtk_tree_model_get (GTK_TREE_MODEL (priv->artist_model),
+                                    &selectedIter, ARTIST_NAME, &artist, -1);
 
-                if ( (!current_artist && !artist)
-                ||   (current_artist && artist && g_utf8_collate(current_artist,artist)==0) )
+                if ((!current_artist && !artist)
+                    || (current_artist && artist
+                        && g_utf8_collate (current_artist, artist) == 0))
                 {
-                    // Set color of the row
-                    Browser_Artist_List_Set_Row_Appearance(&selectedIter);
-                    g_free(artist);
+                    /* Set color of the row. */
+                    Browser_Artist_List_Set_Row_Appearance (self,
+                                                            &selectedIter);
+                    g_free (artist);
                     break;
                 }
-                g_free(artist);
-            }
+
+                g_free (artist);
+
+                valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (priv->artist_model),
+                                                  &selectedIter);
         }
-        gtk_tree_path_free(currentPath); currentPath = NULL;
 
         //
         // FIX ME : see also if we must add a new line / or change list of the ETFile
         //
-        for (row=0; row < gtk_tree_model_iter_n_children(GTK_TREE_MODEL(albumListModel), NULL); row++)
+        valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (priv->album_model),
+                                               &selectedIter);
+
+        while (valid)
         {
-            if (row == 0)
-                currentPath = gtk_tree_path_new_first();
-            else
-                gtk_tree_path_next(currentPath);
+            gtk_tree_model_get (GTK_TREE_MODEL (priv->album_model),
+                                &selectedIter, ALBUM_NAME, &album, -1);
 
-            valid = gtk_tree_model_get_iter(GTK_TREE_MODEL(albumListModel), &selectedIter, currentPath);
-            if (valid)
+            if ((!current_album && !album)
+                || (current_album && album
+                    && g_utf8_collate (current_album, album) == 0))
             {
-                gtk_tree_model_get(GTK_TREE_MODEL(albumListModel), &selectedIter, ALBUM_NAME, &album, -1);
-
-                if ( (!current_album && !album)
-                ||   (current_album && album && g_utf8_collate(current_album,album)==0) )
-                {
-                    // Set color of the row
-                    Browser_Album_List_Set_Row_Appearance(&selectedIter);
-                    g_free(album);
-                    break;
-                }
-                g_free(album);
+                /* Set color of the row. */
+                Browser_Album_List_Set_Row_Appearance (self, &selectedIter);
+                g_free (album);
+                break;
             }
+
+            g_free (album);
+
+            valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (priv->album_model),
+                                              &selectedIter);
         }
-        gtk_tree_path_free(currentPath); currentPath = NULL;
 
         //
         // FIX ME : see also if we must add a new line / or change list of the ETFile
         //
     }
+
+    g_variant_unref (variant);
 }
 
 
@@ -1413,18 +1635,22 @@ void Browser_List_Refresh_File_In_List (ET_File *ETFile)
  *  - change foreground according file status (saved or not)
  */
 static void
-Browser_List_Set_Row_Appearance (GtkTreeIter *iter)
+Browser_List_Set_Row_Appearance (EtBrowser *self, GtkTreeIter *iter)
 {
+    EtBrowserPrivate *priv;
     ET_File *rowETFile = NULL;
     gboolean otherdir = FALSE;
-    GdkColor *backgroundcolor;
+    const GdkRGBA LIGHT_BLUE = { 0.866, 0.933, 1.0, 1.0 };
+    const GdkRGBA *background;
     //gchar *temp = NULL;
 
+    priv = et_browser_get_instance_private (self);
+
     if (iter == NULL)
         return;
 
     // Get the ETFile reference
-    gtk_tree_model_get(GTK_TREE_MODEL(fileListModel), iter,
+    gtk_tree_model_get(GTK_TREE_MODEL(priv->file_model), iter,
                        LIST_FILE_POINTER,   &rowETFile,
                        LIST_FILE_OTHERDIR,  &otherdir,
                        //LIST_FILE_NAME,      &temp,
@@ -1432,31 +1658,31 @@ Browser_List_Set_Row_Appearance (GtkTreeIter *iter)
 
     // Must change background color?
     if (otherdir)
-        backgroundcolor = &LIGHT_BLUE;
+        background = &LIGHT_BLUE;
     else
-        backgroundcolor = NULL;
+        background = NULL;
 
     // Set text to bold/red if 'filename' or 'tag' changed
     if ( ET_Check_If_File_Is_Saved(rowETFile) == FALSE )
     {
-        if (CHANGED_FILES_DISPLAYED_TO_BOLD)
+        if (g_settings_get_boolean (MainSettings, "file-changed-bold"))
         {
-            gtk_list_store_set(fileListModel, iter,
+            gtk_list_store_set(priv->file_model, iter,
                                LIST_FONT_WEIGHT,    PANGO_WEIGHT_BOLD,
-                               LIST_ROW_BACKGROUND, backgroundcolor,
+                               LIST_ROW_BACKGROUND, background,
                                LIST_ROW_FOREGROUND, NULL, -1);
         } else
         {
-            gtk_list_store_set(fileListModel, iter,
+            gtk_list_store_set(priv->file_model, iter,
                                LIST_FONT_WEIGHT,    PANGO_WEIGHT_NORMAL,
-                               LIST_ROW_BACKGROUND, backgroundcolor,
+                               LIST_ROW_BACKGROUND, background,
                                LIST_ROW_FOREGROUND, &RED, -1);
         }
     } else
     {
-        gtk_list_store_set(fileListModel, iter,
+        gtk_list_store_set(priv->file_model, iter,
                            LIST_FONT_WEIGHT,    PANGO_WEIGHT_NORMAL,
-                           LIST_ROW_BACKGROUND, backgroundcolor,
+                           LIST_ROW_BACKGROUND, background,
                            LIST_ROW_FOREGROUND, NULL ,-1);
     }
 
@@ -1466,7 +1692,7 @@ Browser_List_Set_Row_Appearance (GtkTreeIter *iter)
     {
         File_Tag *FileTag = ((File_Tag *)((ET_File *)rowETFile)->FileTag->data);
 
-        gtk_list_store_set(fileListModel, iter,
+        gtk_list_store_set(priv->file_model, iter,
                            LIST_FILE_TITLE,         FileTag->title,
                            LIST_FILE_ARTIST,        FileTag->artist,
                            LIST_FILE_ALBUM_ARTIST,  FileTag->album_artist,
@@ -1491,8 +1717,11 @@ Browser_List_Set_Row_Appearance (GtkTreeIter *iter)
 /*
  * Remove a file from the list, by ETFile
  */
-void Browser_List_Remove_File (ET_File *searchETFile)
+void
+et_browser_remove_file (EtBrowser *self,
+                        const ET_File *searchETFile)
 {
+    EtBrowserPrivate *priv;
     gint row;
     GtkTreePath *currentPath = NULL;
     GtkTreeIter currentIter;
@@ -1502,27 +1731,29 @@ void Browser_List_Remove_File (ET_File *searchETFile)
     if (searchETFile == NULL)
         return;
 
+    priv = et_browser_get_instance_private (self);
+
     // Go through the file list until it is found
-    for (row=0; row < gtk_tree_model_iter_n_children(GTK_TREE_MODEL(fileListModel), NULL); row++)
+    for (row=0; row < gtk_tree_model_iter_n_children(GTK_TREE_MODEL(priv->file_model), NULL); row++)
     {
         if (row == 0)
             currentPath = gtk_tree_path_new_first();
         else
             gtk_tree_path_next(currentPath);
 
-        valid = gtk_tree_model_get_iter(GTK_TREE_MODEL(fileListModel), &currentIter, currentPath);
+        valid = gtk_tree_model_get_iter(GTK_TREE_MODEL(priv->file_model), &currentIter, currentPath);
         if (valid)
         {
-            gtk_tree_model_get(GTK_TREE_MODEL(fileListModel), &currentIter,
+            gtk_tree_model_get(GTK_TREE_MODEL(priv->file_model), &currentIter,
                                LIST_FILE_POINTER, &currentETFile, -1);
 
             if (currentETFile == searchETFile)
             {
                 // Reinit this value to avoid a crash after deleting files...
-                if (LastBrowserListETFileSelected == searchETFile)
-                    LastBrowserListETFileSelected = NULL;
+                if (priv->last_selected_file == searchETFile)
+                    priv->last_selected_file = NULL;
 
-                gtk_list_store_remove(fileListModel, &currentIter);
+                gtk_list_store_remove(priv->file_model, &currentIter);
                 break;
             }
         }
@@ -1534,24 +1765,40 @@ void Browser_List_Remove_File (ET_File *searchETFile)
 /*
  * Get ETFile pointer of a file from a Tree Iter
  */
-ET_File *Browser_List_Get_ETFile_From_Path (GtkTreePath *path)
+ET_File *
+et_browser_get_et_file_from_path (EtBrowser *self, GtkTreePath *path)
 {
+    EtBrowserPrivate *priv;
     GtkTreeIter iter;
 
-    if (!gtk_tree_model_get_iter(GTK_TREE_MODEL(fileListModel), &iter, path))
+    g_return_val_if_fail (ET_BROWSER (self), NULL);
+
+    priv = et_browser_get_instance_private (self);
+
+    if (!gtk_tree_model_get_iter (GTK_TREE_MODEL (priv->file_model), &iter,
+                                  path))
+    {
         return NULL;
+    }
 
-    return Browser_List_Get_ETFile_From_Iter(&iter);
+    return et_browser_get_et_file_from_iter (self, &iter);
 }
 
 /*
  * Get ETFile pointer of a file from a Tree Iter
  */
-ET_File *Browser_List_Get_ETFile_From_Iter (GtkTreeIter *iter)
+ET_File *
+et_browser_get_et_file_from_iter (EtBrowser *self, GtkTreeIter *iter)
 {
+    EtBrowserPrivate *priv;
     ET_File *etfile;
 
-    gtk_tree_model_get(GTK_TREE_MODEL(fileListModel), iter, LIST_FILE_POINTER, &etfile, -1);
+    g_return_val_if_fail (ET_BROWSER (self), NULL);
+
+    priv = et_browser_get_instance_private (self);
+
+    gtk_tree_model_get (GTK_TREE_MODEL (priv->file_model), iter,
+                        LIST_FILE_POINTER, &etfile, -1);
     return etfile;
 }
 
@@ -1559,43 +1806,59 @@ ET_File *Browser_List_Get_ETFile_From_Iter (GtkTreeIter *iter)
 /*
  * Select the specified file in the list, by its ETFile
  */
-void Browser_List_Select_File_By_Etfile (ET_File *searchETFile, gboolean select_it)
+void
+et_browser_select_file_by_et_file (EtBrowser *self,
+                                   const ET_File *file,
+                                   gboolean select_it)
 {
     GtkTreePath *currentPath = NULL;
 
-    currentPath = Browser_List_Select_File_By_Etfile2(searchETFile, select_it, NULL);
+    currentPath = et_browser_select_file_by_et_file2 (self, file, select_it,
+                                                      NULL);
+
     if (currentPath)
-        gtk_tree_path_free(currentPath);
-}
+    {
+        gtk_tree_path_free (currentPath);
+    }
+}
 /*
  * Select the specified file in the list, by its ETFile
  *  - startPath : if set : starting path to try increase speed
  *  - returns allocated "currentPath" to free
  */
-GtkTreePath *Browser_List_Select_File_By_Etfile2 (ET_File *searchETFile, gboolean select_it, GtkTreePath *startPath)
+GtkTreePath *
+et_browser_select_file_by_et_file2 (EtBrowser *self,
+                                    const ET_File *searchETFile,
+                                    gboolean select_it,
+                                    GtkTreePath *startPath)
 {
+    EtBrowserPrivate *priv;
     gint row;
     GtkTreePath *currentPath = NULL;
     GtkTreeIter currentIter;
     ET_File *currentETFile;
     gboolean valid;
 
-     g_return_val_if_fail (searchETFile != NULL, NULL);
+    g_return_val_if_fail (searchETFile != NULL, NULL);
+
+    priv = et_browser_get_instance_private (self);
 
     // If the path is used, we try the next item (to increase speed), as it is correct in many cases...
     if (startPath)
     {
         // Try the next path
         gtk_tree_path_next(startPath);
-        valid = gtk_tree_model_get_iter(GTK_TREE_MODEL(fileListModel), &currentIter, startPath);
+        valid = gtk_tree_model_get_iter (GTK_TREE_MODEL (priv->file_model),
+                                         &currentIter, startPath);
         if (valid)
         {
-            gtk_tree_model_get(GTK_TREE_MODEL(fileListModel), &currentIter,
+            gtk_tree_model_get(GTK_TREE_MODEL(priv->file_model), &currentIter,
                                LIST_FILE_POINTER, &currentETFile, -1);
             // It is the good file?
             if (currentETFile == searchETFile)
             {
-                Browser_List_Select_File_By_Iter(&currentIter, select_it);
+                Browser_List_Select_File_By_Iter (self, &currentIter,
+                                                  select_it);
                 return startPath;
             }
         }
@@ -1604,17 +1867,18 @@ GtkTreePath *Browser_List_Select_File_By_Etfile2 (ET_File *searchETFile, gboolea
     // Else, we try the whole list...
     // Go through the file list until it is found
     currentPath = gtk_tree_path_new_first();
-    for (row=0; row < gtk_tree_model_iter_n_children(GTK_TREE_MODEL(fileListModel), NULL); row++)
+    for (row=0; row < gtk_tree_model_iter_n_children(GTK_TREE_MODEL(priv->file_model), NULL); row++)
     {
-        valid = gtk_tree_model_get_iter(GTK_TREE_MODEL(fileListModel), &currentIter, currentPath);
+        valid = gtk_tree_model_get_iter(GTK_TREE_MODEL(priv->file_model), &currentIter, currentPath);
         if (valid)
         {
-            gtk_tree_model_get(GTK_TREE_MODEL(fileListModel), &currentIter,
+            gtk_tree_model_get(GTK_TREE_MODEL(priv->file_model), &currentIter,
                                LIST_FILE_POINTER, &currentETFile, -1);
 
             if (currentETFile == searchETFile)
             {
-                Browser_List_Select_File_By_Iter(&currentIter, select_it);
+                Browser_List_Select_File_By_Iter (self, &currentIter,
+                                                  select_it);
                 return currentPath;
                 //break;
             }
@@ -1631,42 +1895,49 @@ GtkTreePath *Browser_List_Select_File_By_Etfile2 (ET_File *searchETFile, gboolea
  * Select the specified file in the list, by an iter
  */
 static void
-Browser_List_Select_File_By_Iter (GtkTreeIter *rowIter, gboolean select_it)
+Browser_List_Select_File_By_Iter (EtBrowser *self,
+                                  GtkTreeIter *rowIter,
+                                  gboolean select_it)
 {
-    g_return_if_fail (BrowserList != NULL);
+    EtBrowserPrivate *priv;
+
+    priv = et_browser_get_instance_private (self);
 
     if (select_it)
     {
-        GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserList));
+        GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->file_view));
+
         if (selection)
         {
-            g_signal_handlers_block_by_func(G_OBJECT(selection),G_CALLBACK(Browser_List_Row_Selected),NULL);
+            g_signal_handler_block (selection, priv->file_selected_handler);
             gtk_tree_selection_select_iter(selection, rowIter);
-            g_signal_handlers_unblock_by_func(G_OBJECT(selection),G_CALLBACK(Browser_List_Row_Selected),NULL);
+            g_signal_handler_unblock (selection, priv->file_selected_handler);
         }
     }
-    Browser_List_Set_Row_Visible(GTK_TREE_MODEL(fileListModel), rowIter);
+    et_browser_set_row_visible (self, rowIter);
 }
 
 /*
  * Select the specified file in the list, by a string representation of an iter
  * e.g. output of gtk_tree_model_get_string_from_iter()
  */
-ET_File *Browser_List_Select_File_By_Iter_String (const gchar* stringIter, gboolean select_it)
+void
+et_browser_select_file_by_iter_string (EtBrowser *self,
+                                       const gchar* stringIter,
+                                       gboolean select_it)
 {
+    EtBrowserPrivate *priv;
     GtkTreeIter iter;
-    ET_File *current_etfile = NULL;
 
-    g_return_val_if_fail (fileListModel != NULL || BrowserList != NULL, NULL);
+    priv = et_browser_get_instance_private (self);
 
-    if (gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(fileListModel), &iter, stringIter))
-    {
-        gtk_tree_model_get(GTK_TREE_MODEL(fileListModel), &iter,
-                           LIST_FILE_POINTER, &current_etfile, -1);
+    g_return_if_fail (priv->file_model != NULL || priv->file_view != NULL);
 
+    if (gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(priv->file_model), &iter, stringIter))
+    {
         if (select_it)
         {
-            GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserList));
+            GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->file_view));
 
             // FIX ME : Why signal was blocked if selected? Don't remember...
             if (selection)
@@ -1676,18 +1947,20 @@ ET_File *Browser_List_Select_File_By_Iter_String (const gchar* stringIter, gbool
                 //g_signal_handlers_unblock_by_func(G_OBJECT(selection),G_CALLBACK(Browser_List_Row_Selected),NULL);
             }
         }
-        Browser_List_Set_Row_Visible(GTK_TREE_MODEL(fileListModel), &iter);
+        et_browser_set_row_visible (self, &iter);
     }
-
-    return current_etfile;
 }
 
 /*
  * Select the specified file in the list, by fuzzy string matching based on
  * the Damerau-Levenshtein Metric (patch from Santtu Lakkala - 23/08/2004)
  */
-ET_File *Browser_List_Select_File_By_DLM (const gchar* string, gboolean select_it)
+ET_File *
+et_browser_select_file_by_dlm (EtBrowser *self,
+                               const gchar* string,
+                               gboolean select_it)
 {
+    EtBrowserPrivate *priv;
     GtkTreeIter iter;
     GtkTreeIter iter2;
     GtkTreeSelection *selection;
@@ -1695,13 +1968,16 @@ ET_File *Browser_List_Select_File_By_DLM (const gchar* string, gboolean select_i
     gchar *current_filename = NULL, *current_title = NULL;
     int max = 0, this;
 
-    g_return_val_if_fail (fileListModel != NULL || BrowserList != NULL, NULL);
+    priv = et_browser_get_instance_private (self);
 
-    if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(fileListModel), &iter))
+    g_return_val_if_fail (priv->file_model != NULL || priv->file_view != NULL, NULL);
+
+    if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (priv->file_model),
+                                       &iter))
     {
         do
         {
-            gtk_tree_model_get(GTK_TREE_MODEL(fileListModel), &iter,
+            gtk_tree_model_get(GTK_TREE_MODEL(priv->file_model), &iter,
                                LIST_FILE_NAME,    &current_filename,
                                LIST_FILE_POINTER, &current_etfile, -1);
             current_title = ((File_Tag *)current_etfile->FileTag->data)->title;
@@ -1712,63 +1988,52 @@ ET_File *Browser_List_Select_File_By_DLM (const gchar* string, gboolean select_i
                 iter2 = iter;
                 retval = current_etfile;
             }
-        } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(fileListModel), &iter));
+        } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(priv->file_model), &iter));
 
         if (select_it)
         {
-            selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserList));
+            selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->file_view));
             if (selection)
             {
-                g_signal_handlers_block_by_func(G_OBJECT(selection),G_CALLBACK(Browser_List_Row_Selected),NULL);
+                g_signal_handler_block (selection,
+                                        priv->file_selected_handler);
                 gtk_tree_selection_select_iter(selection, &iter2);
-                g_signal_handlers_unblock_by_func(G_OBJECT(selection),G_CALLBACK(Browser_List_Row_Selected),NULL);
+                g_signal_handler_unblock (selection,
+                                          priv->file_selected_handler);
             }
         }
-        Browser_List_Set_Row_Visible(GTK_TREE_MODEL(fileListModel), &iter2);
+        et_browser_set_row_visible (self, &iter2);
     }
     return retval;
 }
 
 /*
- * Empty model, disabling Browser_List_Row_Selected () during clear because it
- * is called and causes crashes otherwise.
+ * Clear all entries on the file list
  */
 void
-browser_file_model_clear (void)
+et_browser_clear (EtBrowser *self)
 {
-    GtkTreeSelection *selection;
-
-    selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (BrowserList));
+    g_return_if_fail (ET_BROWSER (self));
 
-    g_signal_handlers_block_by_func (selection,
-                                     G_CALLBACK (Browser_List_Row_Selected),
-                                     NULL);
-
-    gtk_list_store_clear (fileListModel);
-
-    g_signal_handlers_unblock_by_func (selection,
-                                       G_CALLBACK (Browser_List_Row_Selected),
-                                       NULL);
+    et_browser_clear_file_model (self);
+    et_browser_clear_artist_model (self);
+    et_browser_clear_album_model (self);
 }
 
-
 /*
- * Clear all entries on the file list
+ * Refresh the list sorting (call me after sort-mode has changed)
  */
-void Browser_List_Clear()
+void
+et_browser_refresh_sort (EtBrowser *self)
 {
-    browser_file_model_clear ();
-    browser_artist_model_clear ();
-    browser_album_model_clear ();
+    EtBrowserPrivate *priv;
 
-}
+    g_return_if_fail (ET_BROWSER (self));
 
-/*
- * Refresh the list sorting (call me after SORTING_FILE_MODE has changed)
- */
-void Browser_List_Refresh_Sort (void)
-{
-    gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(fileListModel), 0, Browser_List_Sort_Func, NULL, NULL);
+    priv = et_browser_get_instance_private (self);
+
+    gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (priv->file_model), 0,
+                                     Browser_List_Sort_Func, NULL, NULL);
 }
 
 /*
@@ -1786,136 +2051,136 @@ Browser_List_Sort_Func (GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b,
     gtk_tree_model_get(model, a, LIST_FILE_POINTER, &ETFile1, -1);
     gtk_tree_model_get(model, b, LIST_FILE_POINTER, &ETFile2, -1);
 
-    switch (SORTING_FILE_MODE)
+    switch (g_settings_get_enum (MainSettings, "sort-mode"))
     {
-        case SORTING_UNKNOWN:
-        case SORTING_BY_ASCENDING_FILENAME:
+        case ET_SORT_MODE_ASCENDING_FILENAME:
             result = ET_Comp_Func_Sort_File_By_Ascending_Filename(ETFile1, ETFile2);
             break;
-        case SORTING_BY_DESCENDING_FILENAME:
+        case ET_SORT_MODE_DESCENDING_FILENAME:
             result = ET_Comp_Func_Sort_File_By_Descending_Filename(ETFile1, ETFile2);
             break;
-        case SORTING_BY_ASCENDING_TITLE:
+        case ET_SORT_MODE_ASCENDING_TITLE:
             result = ET_Comp_Func_Sort_File_By_Ascending_Title(ETFile1, ETFile2);
             break;
-        case SORTING_BY_DESCENDING_TITLE:
+        case ET_SORT_MODE_DESCENDING_TITLE:
             result = ET_Comp_Func_Sort_File_By_Descending_Title(ETFile1, ETFile2);
             break;
-        case SORTING_BY_ASCENDING_ARTIST:
+        case ET_SORT_MODE_ASCENDING_ARTIST:
             result = ET_Comp_Func_Sort_File_By_Ascending_Artist(ETFile1, ETFile2);
             break;
-        case SORTING_BY_DESCENDING_ARTIST:
+        case ET_SORT_MODE_DESCENDING_ARTIST:
             result = ET_Comp_Func_Sort_File_By_Descending_Artist(ETFile1, ETFile2);
             break;
-        case SORTING_BY_ASCENDING_ALBUM_ARTIST:
+        case ET_SORT_MODE_ASCENDING_ALBUM_ARTIST:
             result = ET_Comp_Func_Sort_File_By_Ascending_Album_Artist(ETFile1, ETFile2);
             break;
-        case SORTING_BY_DESCENDING_ALBUM_ARTIST:
+        case ET_SORT_MODE_DESCENDING_ALBUM_ARTIST:
             result = ET_Comp_Func_Sort_File_By_Descending_Album_Artist(ETFile1, ETFile2);
             break;
-        case SORTING_BY_ASCENDING_ALBUM:
+        case ET_SORT_MODE_ASCENDING_ALBUM:
             result = ET_Comp_Func_Sort_File_By_Ascending_Album(ETFile1, ETFile2);
             break;
-        case SORTING_BY_DESCENDING_ALBUM:
+        case ET_SORT_MODE_DESCENDING_ALBUM:
             result = ET_Comp_Func_Sort_File_By_Descending_Album(ETFile1, ETFile2);
             break;
-        case SORTING_BY_ASCENDING_YEAR:
+        case ET_SORT_MODE_ASCENDING_YEAR:
             result = ET_Comp_Func_Sort_File_By_Ascending_Year(ETFile1, ETFile2);
             break;
-        case SORTING_BY_DESCENDING_YEAR:
+        case ET_SORT_MODE_DESCENDING_YEAR:
             result = ET_Comp_Func_Sort_File_By_Descending_Year(ETFile1, ETFile2);
             break;
-        case SORTING_BY_ASCENDING_DISC_NUMBER:
+        case ET_SORT_MODE_ASCENDING_DISC_NUMBER:
             result = et_comp_func_sort_file_by_ascending_disc_number (ETFile1,
                                                                       ETFile2);
             break;
-        case SORTING_BY_DESCENDING_DISC_NUMBER:
+        case ET_SORT_MODE_DESCENDING_DISC_NUMBER:
             result = et_comp_func_sort_file_by_descending_disc_number (ETFile1,
                                                                        ETFile2);
             break;
-        case SORTING_BY_ASCENDING_TRACK_NUMBER:
+        case ET_SORT_MODE_ASCENDING_TRACK_NUMBER:
             result = ET_Comp_Func_Sort_File_By_Ascending_Track_Number (ETFile1, ETFile2);
             break;
-        case SORTING_BY_DESCENDING_TRACK_NUMBER:
+        case ET_SORT_MODE_DESCENDING_TRACK_NUMBER:
             result = ET_Comp_Func_Sort_File_By_Descending_Track_Number (ETFile1, ETFile2);
             break;
-        case SORTING_BY_ASCENDING_GENRE:
+        case ET_SORT_MODE_ASCENDING_GENRE:
             result = ET_Comp_Func_Sort_File_By_Ascending_Genre(ETFile1, ETFile2);
             break;
-        case SORTING_BY_DESCENDING_GENRE:
+        case ET_SORT_MODE_DESCENDING_GENRE:
             result = ET_Comp_Func_Sort_File_By_Descending_Genre(ETFile1, ETFile2);
             break;
-        case SORTING_BY_ASCENDING_COMMENT:
+        case ET_SORT_MODE_ASCENDING_COMMENT:
             result = ET_Comp_Func_Sort_File_By_Ascending_Comment(ETFile1, ETFile2);
             break;
-        case SORTING_BY_DESCENDING_COMMENT:
+        case ET_SORT_MODE_DESCENDING_COMMENT:
             result = ET_Comp_Func_Sort_File_By_Descending_Comment(ETFile1, ETFile2);
             break;
-        case SORTING_BY_ASCENDING_COMPOSER:
+        case ET_SORT_MODE_ASCENDING_COMPOSER:
             result = ET_Comp_Func_Sort_File_By_Ascending_Composer(ETFile1, ETFile2);
             break;
-        case SORTING_BY_DESCENDING_COMPOSER:
+        case ET_SORT_MODE_DESCENDING_COMPOSER:
             result = ET_Comp_Func_Sort_File_By_Descending_Composer(ETFile1, ETFile2);
             break;
-        case SORTING_BY_ASCENDING_ORIG_ARTIST:
+        case ET_SORT_MODE_ASCENDING_ORIG_ARTIST:
             result = ET_Comp_Func_Sort_File_By_Ascending_Orig_Artist(ETFile1, ETFile2);
             break;
-        case SORTING_BY_DESCENDING_ORIG_ARTIST:
+        case ET_SORT_MODE_DESCENDING_ORIG_ARTIST:
             result = ET_Comp_Func_Sort_File_By_Descending_Orig_Artist(ETFile1, ETFile2);
             break;
-        case SORTING_BY_ASCENDING_COPYRIGHT:
+        case ET_SORT_MODE_ASCENDING_COPYRIGHT:
             result = ET_Comp_Func_Sort_File_By_Ascending_Copyright(ETFile1, ETFile2);
             break;
-        case SORTING_BY_DESCENDING_COPYRIGHT:
+        case ET_SORT_MODE_DESCENDING_COPYRIGHT:
             result = ET_Comp_Func_Sort_File_By_Descending_Copyright(ETFile1, ETFile2);
             break;
-        case SORTING_BY_ASCENDING_URL:
+        case ET_SORT_MODE_ASCENDING_URL:
             result = ET_Comp_Func_Sort_File_By_Ascending_Url(ETFile1, ETFile2);
             break;
-        case SORTING_BY_DESCENDING_URL:
+        case ET_SORT_MODE_DESCENDING_URL:
             result = ET_Comp_Func_Sort_File_By_Descending_Url(ETFile1, ETFile2);
             break;
-        case SORTING_BY_ASCENDING_ENCODED_BY:
+        case ET_SORT_MODE_ASCENDING_ENCODED_BY:
             result = ET_Comp_Func_Sort_File_By_Ascending_Encoded_By(ETFile1, ETFile2);
             break;
-        case SORTING_BY_DESCENDING_ENCODED_BY:
+        case ET_SORT_MODE_DESCENDING_ENCODED_BY:
             result = ET_Comp_Func_Sort_File_By_Descending_Encoded_By(ETFile1, ETFile2);
             break;
-        case SORTING_BY_ASCENDING_CREATION_DATE:
-            result = ET_Comp_Func_Sort_File_By_Ascending_Creation_Date (ETFile1,                                                                        ETFile2);
+        case ET_SORT_MODE_ASCENDING_CREATION_DATE:
+            result = ET_Comp_Func_Sort_File_By_Ascending_Creation_Date (ETFile1,
+                                                                        ETFile2);
             break;
-        case SORTING_BY_DESCENDING_CREATION_DATE:
+        case ET_SORT_MODE_DESCENDING_CREATION_DATE:
             result = ET_Comp_Func_Sort_File_By_Descending_Creation_Date (ETFile1,
                                                                          ETFile2);
             break;
-        case SORTING_BY_ASCENDING_FILE_TYPE:
+        case ET_SORT_MODE_ASCENDING_FILE_TYPE:
             result = ET_Comp_Func_Sort_File_By_Ascending_File_Type(ETFile1, ETFile2);
             break;
-        case SORTING_BY_DESCENDING_FILE_TYPE:
+        case ET_SORT_MODE_DESCENDING_FILE_TYPE:
             result = ET_Comp_Func_Sort_File_By_Descending_File_Type(ETFile1, ETFile2);
             break;
-        case SORTING_BY_ASCENDING_FILE_SIZE:
+        case ET_SORT_MODE_ASCENDING_FILE_SIZE:
             result = ET_Comp_Func_Sort_File_By_Ascending_File_Size(ETFile1, ETFile2);
             break;
-        case SORTING_BY_DESCENDING_FILE_SIZE:
+        case ET_SORT_MODE_DESCENDING_FILE_SIZE:
             result = ET_Comp_Func_Sort_File_By_Descending_File_Size(ETFile1, ETFile2);
             break;
-        case SORTING_BY_ASCENDING_FILE_DURATION:
+        case ET_SORT_MODE_ASCENDING_FILE_DURATION:
             result = ET_Comp_Func_Sort_File_By_Ascending_File_Duration(ETFile1, ETFile2);
             break;
-        case SORTING_BY_DESCENDING_FILE_DURATION:
+        case ET_SORT_MODE_DESCENDING_FILE_DURATION:
             result = ET_Comp_Func_Sort_File_By_Descending_File_Duration(ETFile1, ETFile2);
             break;
-        case SORTING_BY_ASCENDING_FILE_BITRATE:
+        case ET_SORT_MODE_ASCENDING_FILE_BITRATE:
             result = ET_Comp_Func_Sort_File_By_Ascending_File_Bitrate(ETFile1, ETFile2);
             break;
-        case SORTING_BY_DESCENDING_FILE_BITRATE:
+        case ET_SORT_MODE_DESCENDING_FILE_BITRATE:
             result = ET_Comp_Func_Sort_File_By_Descending_File_Bitrate(ETFile1, ETFile2);
             break;
-        case SORTING_BY_ASCENDING_FILE_SAMPLERATE:
+        case ET_SORT_MODE_ASCENDING_FILE_SAMPLERATE:
             result = ET_Comp_Func_Sort_File_By_Ascending_File_Samplerate(ETFile1, ETFile2);
             break;
-        case SORTING_BY_DESCENDING_FILE_SAMPLERATE:
+        case ET_SORT_MODE_DESCENDING_FILE_SAMPLERATE:
             result = ET_Comp_Func_Sort_File_By_Descending_File_Samplerate(ETFile1, ETFile2);
             break;
     }
@@ -1926,55 +2191,65 @@ Browser_List_Sort_Func (GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b,
 /*
  * Select all files on the file list
  */
-void Browser_List_Select_All_Files (void)
+void
+et_browser_select_all (EtBrowser *self)
 {
+    EtBrowserPrivate *priv;
     GtkTreeSelection *selection;
 
-    g_return_if_fail (BrowserList != NULL);
+    g_return_if_fail (ET_BROWSER (self));
+
+    priv = et_browser_get_instance_private (self);
+    selection = et_browser_get_selection (self);
 
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserList));
     if (selection)
     {
-        // Must block the select signal to avoid the selecting, one by one, of all files in the main files list
-        g_signal_handlers_block_by_func(G_OBJECT(selection),G_CALLBACK(Browser_List_Row_Selected),NULL);
+        /* Must block the select signal to avoid the selecting, one by one, of
+         * all files in the main files list. */
+        g_signal_handler_block (selection, priv->file_selected_handler);
         gtk_tree_selection_select_all(selection);
-        g_signal_handlers_unblock_by_func(G_OBJECT(selection),G_CALLBACK(Browser_List_Row_Selected),NULL);
+        g_signal_handler_unblock (selection, priv->file_selected_handler);
     }
 }
 
 /*
  * Unselect all files on the file list
  */
-void Browser_List_Unselect_All_Files (void)
+void
+et_browser_unselect_all (EtBrowser *self)
 {
     GtkTreeSelection *selection;
 
-    g_return_if_fail (BrowserList != NULL);
+    selection = et_browser_get_selection (self);
 
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserList));
     if (selection)
     {
-        gtk_tree_selection_unselect_all(selection);
+        gtk_tree_selection_unselect_all (selection);
     }
 }
 
 /*
  * Invert the selection of the file list
  */
-void Browser_List_Invert_File_Selection (void)
+void
+et_browser_invert_selection (EtBrowser *self)
 {
+    EtBrowserPrivate *priv;
     GtkTreeIter iter;
     GtkTreeSelection *selection;
     gboolean valid;
 
-    g_return_if_fail (fileListModel != NULL || BrowserList != NULL);
+    priv = et_browser_get_instance_private (self);
+
+    g_return_if_fail (priv->file_model != NULL || priv->file_view != NULL);
 
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserList));
+    selection = et_browser_get_selection (self);
     if (selection)
     {
-        /* Must block the select signal to avoid selecting all files (one by one) in the main files list */
-        g_signal_handlers_block_by_func(G_OBJECT(selection), G_CALLBACK(Browser_List_Row_Selected), NULL);
-        valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(fileListModel), &iter);
+        /* Must block the select signal to avoid selecting all files (one by
+         * one) in the main files list. */
+        g_signal_handler_block (selection, priv->file_selected_handler);
+        valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(priv->file_model), &iter);
         while (valid)
         {
             if (gtk_tree_selection_iter_is_selected(selection, &iter))
@@ -1984,36 +2259,37 @@ void Browser_List_Invert_File_Selection (void)
             {
                 gtk_tree_selection_select_iter(selection, &iter);
             }
-            valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(fileListModel), &iter);
+            valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(priv->file_model), &iter);
         }
-        g_signal_handlers_unblock_by_func(G_OBJECT(selection), G_CALLBACK(Browser_List_Row_Selected), NULL);
+        g_signal_handler_unblock (selection, priv->file_selected_handler);
     }
 }
 
 void
-browser_artist_model_clear (void)
+et_browser_clear_artist_model (EtBrowser *self)
 {
+    EtBrowserPrivate *priv;
     GtkTreeSelection *selection;
 
     /* Empty Model, Disable Browser_Artist_List_Row_Selected() during clear
      * because it may be called and may crash.
     */
 
-    selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (BrowserArtistList));
+    priv = et_browser_get_instance_private (self);
 
-    g_signal_handlers_block_by_func (selection,
-                                     G_CALLBACK (Browser_Artist_List_Row_Selected),
-                                     NULL);
+    selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->artist_list));
 
-    gtk_list_store_clear (artistListModel);
+    g_signal_handler_block (selection, priv->artist_selected_handler);
 
-    g_signal_handlers_unblock_by_func (selection,
-                                       G_CALLBACK (Browser_Artist_List_Row_Selected),
-                                       NULL);
+    gtk_list_store_clear (priv->artist_model);
+
+    g_signal_handler_unblock (selection, priv->artist_selected_handler);
 }
 
-void Browser_Artist_List_Load_Files (ET_File *etfile_to_select)
+static void
+Browser_Artist_List_Load_Files (EtBrowser *self, ET_File *etfile_to_select)
 {
+    EtBrowserPrivate *priv;
     GList *AlbumList;
     GList *etfilelist;
     ET_File *etfile;
@@ -2023,18 +2299,20 @@ void Browser_Artist_List_Load_Files (ET_File *etfile_to_select)
     GtkTreeSelection *selection;
     gchar *artistname, *artist_to_select = NULL;
 
-    g_return_if_fail (BrowserArtistList != NULL);
+    priv = et_browser_get_instance_private (self);
+
+    g_return_if_fail (priv->artist_list != NULL);
 
     if (etfile_to_select)
         artist_to_select = ((File_Tag *)etfile_to_select->FileTag->data)->artist;
 
-    browser_artist_model_clear ();
-
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserArtistList));
+    et_browser_clear_artist_model (self);
+    selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->artist_list));
 
     for (l = ETCore->ETArtistAlbumFileList; l != NULL; l = g_list_next (l))
     {
         gint   nbr_files = 0;
+        GdkPixbuf* pixbuf;
 
         // Insert a line for each artist
         AlbumList = (GList *)l->data;
@@ -2049,8 +2327,10 @@ void Browser_Artist_List_Load_Files (ET_File *etfile_to_select)
         }
 
         /* Add the new row. */
-        gtk_list_store_insert_with_values (artistListModel, &iter, G_MAXINT,
-                                           ARTIST_PIXBUF, "easytag-artist",
+        pixbuf = gdk_pixbuf_new_from_resource ("/org/gnome/EasyTAG/images/artist.png",
+                                               NULL);
+        gtk_list_store_insert_with_values (priv->artist_model, &iter, G_MAXINT,
+                                           ARTIST_PIXBUF, pixbuf,
                                            ARTIST_NAME, artistname,
                                            ARTIST_NUM_ALBUMS,
                                            g_list_length (g_list_first (AlbumList)),
@@ -2058,37 +2338,39 @@ void Browser_Artist_List_Load_Files (ET_File *etfile_to_select)
                                            ARTIST_ALBUM_LIST_POINTER,
                                            AlbumList, -1);
 
+        g_object_unref (pixbuf);
+
         // Todo: Use something better than string comparison
         if ( (!artistname && !artist_to_select)
         ||   (artistname  &&  artist_to_select && strcmp(artistname,artist_to_select) == 0) )
         {
-            GtkTreePath *path = gtk_tree_model_get_path(GTK_TREE_MODEL(artistListModel), &iter);
+            GtkTreePath *path = gtk_tree_model_get_path(GTK_TREE_MODEL(priv->artist_model), &iter);
 
-            g_signal_handlers_block_by_func(G_OBJECT(selection),G_CALLBACK(Browser_Artist_List_Row_Selected),NULL);
+            g_signal_handler_block (selection, priv->artist_selected_handler);
             gtk_tree_selection_select_iter(selection, &iter);
-            g_signal_handlers_unblock_by_func(G_OBJECT(selection),G_CALLBACK(Browser_Artist_List_Row_Selected),NULL);
+            g_signal_handler_unblock (selection, priv->artist_selected_handler);
 
-            gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(BrowserArtistList), path, NULL, FALSE, 0, 0);
+            gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(priv->artist_list), path, NULL, FALSE, 0, 0);
             gtk_tree_path_free(path);
 
-            Browser_Album_List_Load_Files(AlbumList, etfile_to_select);
+            Browser_Album_List_Load_Files (self, AlbumList, etfile_to_select);
 
             // Now that we've found the artist, no need to continue searching
             artist_to_select = NULL;
         }
 
         // Set color of the row
-        Browser_Artist_List_Set_Row_Appearance(&iter);
+        Browser_Artist_List_Set_Row_Appearance (self, &iter);
     }
 
     // Select the first line if we weren't asked to select anything
-    if (!etfile_to_select && gtk_tree_model_get_iter_first(GTK_TREE_MODEL(artistListModel), &iter))
+    if (!etfile_to_select && gtk_tree_model_get_iter_first(GTK_TREE_MODEL(priv->artist_model), &iter))
     {
-        gtk_tree_model_get(GTK_TREE_MODEL(artistListModel), &iter,
+        gtk_tree_model_get(GTK_TREE_MODEL(priv->artist_model), &iter,
                            ARTIST_ALBUM_LIST_POINTER, &AlbumList,
                            -1);
         ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
-        Browser_Album_List_Load_Files(AlbumList,NULL);
+        Browser_Album_List_Load_Files (self, AlbumList,NULL);
     }
 }
 
@@ -2097,11 +2379,14 @@ void Browser_Artist_List_Load_Files (ET_File *etfile_to_select)
  * Callback to select-row event
  */
 static void
-Browser_Artist_List_Row_Selected (GtkTreeSelection* selection, gpointer data)
+Browser_Artist_List_Row_Selected (EtBrowser *self, GtkTreeSelection* selection)
 {
+    EtBrowserPrivate *priv;
     GList *AlbumList;
     GtkTreeIter iter;
 
+    priv = et_browser_get_instance_private (self);
+
     // Display the relevant albums
     if(!gtk_tree_selection_get_selected(selection, NULL, &iter))
         return; // We might be called with no row selected
@@ -2109,24 +2394,26 @@ Browser_Artist_List_Row_Selected (GtkTreeSelection* selection, gpointer data)
     // Save the current displayed data
     ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
 
-    gtk_tree_model_get(GTK_TREE_MODEL(artistListModel), &iter,
-                       ARTIST_ALBUM_LIST_POINTER, &AlbumList, -1);
-    Browser_Album_List_Load_Files(AlbumList, NULL);
+    gtk_tree_model_get (GTK_TREE_MODEL (priv->artist_model), &iter,
+                        ARTIST_ALBUM_LIST_POINTER, &AlbumList, -1);
+    Browser_Album_List_Load_Files (self, AlbumList, NULL);
 }
 
 /*
- * Set the color of the row of BrowserArtistList
+ * Set the color of the row of priv->artist_list
  */
 static void
-Browser_Artist_List_Set_Row_Appearance (GtkTreeIter *iter)
+Browser_Artist_List_Set_Row_Appearance (EtBrowser *self, GtkTreeIter *iter)
 {
+    EtBrowserPrivate *priv;
     GList *l;
     GList *m;
     gboolean not_all_saved = FALSE;
 
+    priv = et_browser_get_instance_private (self);
 
     // Change the style (red/bold) of the row if one of the files was changed
-    for (gtk_tree_model_get (GTK_TREE_MODEL (artistListModel), iter,
+    for (gtk_tree_model_get (GTK_TREE_MODEL (priv->artist_model), iter,
                              ARTIST_ALBUM_LIST_POINTER, &l, -1);
          l != NULL; l = g_list_next (l))
     {
@@ -2134,15 +2421,15 @@ Browser_Artist_List_Set_Row_Appearance (GtkTreeIter *iter)
         {
             if (ET_Check_If_File_Is_Saved ((ET_File *)m->data) == FALSE)
             {
-                if (CHANGED_FILES_DISPLAYED_TO_BOLD)
+                if (g_settings_get_boolean (MainSettings, "file-changed-bold"))
                 {
                     // Set the font-style to "bold"
-                    gtk_list_store_set(artistListModel, iter,
+                    gtk_list_store_set(priv->artist_model, iter,
                                        ARTIST_FONT_WEIGHT, PANGO_WEIGHT_BOLD, -1);
                 } else
                 {
                     // Set the background-color to "red"
-                    gtk_list_store_set(artistListModel, iter,
+                    gtk_list_store_set(priv->artist_model, iter,
                                        ARTIST_FONT_WEIGHT,    PANGO_WEIGHT_NORMAL,
                                        ARTIST_ROW_FOREGROUND, &RED, -1);
                 }
@@ -2155,21 +2442,26 @@ Browser_Artist_List_Set_Row_Appearance (GtkTreeIter *iter)
     // Reset style if all files saved
     if (not_all_saved == FALSE)
     {
-        gtk_list_store_set(artistListModel, iter,
+        gtk_list_store_set(priv->artist_model, iter,
                            ARTIST_FONT_WEIGHT,    PANGO_WEIGHT_NORMAL,
                            ARTIST_ROW_FOREGROUND, NULL, -1);
     }
 }
 
 void
-browser_album_model_clear (void)
+et_browser_clear_album_model (EtBrowser *self)
 {
+    EtBrowserPrivate *priv;
     GtkTreeSelection *selection;
     gboolean valid;
     GtkTreeIter iter;
 
+    g_return_if_fail (ET_BROWSER (self));
+
+    priv = et_browser_get_instance_private (self);
+
     /* Free the attached list in the "all albums" row. */
-    valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (albumListModel),
+    valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (priv->album_model),
                                            &iter);
 
     while (valid)
@@ -2177,7 +2469,7 @@ browser_album_model_clear (void)
         GList *l;
         gboolean all_albums_row = FALSE;
 
-        gtk_tree_model_get (GTK_TREE_MODEL (albumListModel), &iter,
+        gtk_tree_model_get (GTK_TREE_MODEL (priv->album_model), &iter,
                             ALBUM_ETFILE_LIST_POINTER, &l,
                             ALBUM_ALL_ALBUMS_ROW, &all_albums_row, -1);
 
@@ -2187,32 +2479,31 @@ browser_album_model_clear (void)
             break;
         }
 
-        valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (albumListModel),
+        valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (priv->album_model),
                                           &iter);
     }
 
     /* Empty model, disable Browser_Album_List_Row_Selected () during clear
      * because it is called and crashed. */
 
-    selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (BrowserAlbumList));
+    selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->album_list));
 
-    g_signal_handlers_block_by_func (selection,
-                                     G_CALLBACK (Browser_Album_List_Row_Selected),
-                                     NULL);
+    g_signal_handler_block (selection, priv->album_selected_handler);
 
-    gtk_list_store_clear (albumListModel);
+    gtk_list_store_clear (priv->album_model);
 
-    g_signal_handlers_unblock_by_func (selection,
-                                       G_CALLBACK (Browser_Album_List_Row_Selected),
-                                       NULL);
+    g_signal_handler_unblock (selection, priv->album_selected_handler);
 }
 
 /*
  * Load the list of Albums for each Artist
  */
 static void
-Browser_Album_List_Load_Files (GList *albumlist, ET_File *etfile_to_select)
+Browser_Album_List_Load_Files (EtBrowser *self,
+                               GList *albumlist,
+                               ET_File *etfile_to_select)
 {
+    EtBrowserPrivate *priv;
     GList *l;
     GList *etfilelist = NULL;
     ET_File *etfile;
@@ -2220,14 +2511,15 @@ Browser_Album_List_Load_Files (GList *albumlist, ET_File *etfile_to_select)
     GtkTreeSelection *selection;
     gchar *albumname, *album_to_select = NULL;
 
-    g_return_if_fail (BrowserAlbumList != NULL);
+    priv = et_browser_get_instance_private (self);
+
+    g_return_if_fail (priv->album_list != NULL);
 
     if (etfile_to_select)
         album_to_select = ((File_Tag *)etfile_to_select->FileTag->data)->album;
 
-    browser_album_model_clear ();
-
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserAlbumList));
+    et_browser_clear_album_model (self);
+    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->album_list));
 
     // Create a first row to select all albums of the artist
     for (l = albumlist; l != NULL; l = g_list_next (l))
@@ -2240,7 +2532,7 @@ Browser_Album_List_Load_Files (GList *albumlist, ET_File *etfile_to_select)
         etfilelist = g_list_concat(etfilelist, etfilelist_tmp);
     }
 
-    gtk_list_store_insert_with_values (albumListModel, &iter, G_MAXINT,
+    gtk_list_store_insert_with_values (priv->album_model, &iter, G_MAXINT,
                                        ALBUM_NAME, _("<All albums>"),
                                        ALBUM_NUM_FILES,
                                        g_list_length (g_list_first (etfilelist)),
@@ -2262,7 +2554,7 @@ Browser_Album_List_Load_Files (GList *albumlist, ET_File *etfile_to_select)
         icon = g_themed_icon_new_with_default_fallbacks ("media-optical-cd-audio");
 
         /* Add the new row. */
-        gtk_list_store_insert_with_values (albumListModel, &iter, G_MAXINT,
+        gtk_list_store_insert_with_values (priv->album_model, &iter, G_MAXINT,
                                            ALBUM_GICON, icon,
                                            ALBUM_NAME, albumname,
                                            ALBUM_NUM_FILES,
@@ -2276,37 +2568,37 @@ Browser_Album_List_Load_Files (GList *albumlist, ET_File *etfile_to_select)
         if ( (!albumname && !album_to_select)
         ||   (albumname &&  album_to_select && strcmp(albumname,album_to_select) == 0) )
         {
-            GtkTreePath *path = gtk_tree_model_get_path(GTK_TREE_MODEL(albumListModel), &iter);
+            GtkTreePath *path = gtk_tree_model_get_path(GTK_TREE_MODEL(priv->album_model), &iter);
 
-            g_signal_handlers_block_by_func(G_OBJECT(selection),G_CALLBACK(Browser_Album_List_Row_Selected),NULL);
+            g_signal_handler_block (selection, priv->album_selected_handler);
             gtk_tree_selection_select_iter(selection, &iter);
-            g_signal_handlers_unblock_by_func(G_OBJECT(selection),G_CALLBACK(Browser_Album_List_Row_Selected),NULL);
+            g_signal_handler_unblock (selection, priv->album_selected_handler);
 
-            gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(BrowserAlbumList), path, NULL, FALSE, 0, 0);
+            gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(priv->album_list), path, NULL, FALSE, 0, 0);
             gtk_tree_path_free(path);
 
             ET_Set_Displayed_File_List(etfilelist);
-            Browser_List_Load_File_List(etfilelist,etfile_to_select);
+            et_browser_load_file_list (self, etfilelist, etfile_to_select);
 
             // Now that we've found the album, no need to continue searching
             album_to_select = NULL;
         }
 
         // Set color of the row
-        Browser_Album_List_Set_Row_Appearance(&iter);
+        Browser_Album_List_Set_Row_Appearance (self, &iter);
     }
 
     // Select the first line if we werent asked to select anything
-    if (!etfile_to_select && gtk_tree_model_get_iter_first(GTK_TREE_MODEL(albumListModel), &iter))
+    if (!etfile_to_select && gtk_tree_model_get_iter_first(GTK_TREE_MODEL(priv->album_model), &iter))
     {
-        gtk_tree_model_get(GTK_TREE_MODEL(albumListModel), &iter,
+        gtk_tree_model_get(GTK_TREE_MODEL(priv->album_model), &iter,
                            ALBUM_ETFILE_LIST_POINTER, &etfilelist,
                            -1);
         ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
 
         // Set the attached list as "Displayed List"
         ET_Set_Displayed_File_List(etfilelist);
-        Browser_List_Load_File_List(etfilelist, NULL);
+        et_browser_load_file_list (self, etfilelist, NULL);
 
         // Displays the first item
         Action_Select_Nth_File_By_Etfile((ET_File *)etfilelist->data);
@@ -2317,17 +2609,19 @@ Browser_Album_List_Load_Files (GList *albumlist, ET_File *etfile_to_select)
  * Callback to select-row event
  */
 static void
-Browser_Album_List_Row_Selected (GtkTreeSelection *selection, gpointer data)
+Browser_Album_List_Row_Selected (EtBrowser *self, GtkTreeSelection *selection)
 {
+    EtBrowserPrivate *priv;
     GList *etfilelist;
     GtkTreeIter iter;
 
+    priv = et_browser_get_instance_private (self);
 
     // We might be called with no rows selected
     if (!gtk_tree_selection_get_selected(selection, NULL, &iter))
         return;
 
-    gtk_tree_model_get(GTK_TREE_MODEL(albumListModel), &iter,
+    gtk_tree_model_get (GTK_TREE_MODEL (priv->album_model), &iter,
                        ALBUM_ETFILE_LIST_POINTER, &etfilelist, -1);
 
     // Save the current displayed data
@@ -2336,39 +2630,40 @@ Browser_Album_List_Row_Selected (GtkTreeSelection *selection, gpointer data)
     // Set the attached list as "Displayed List"
     ET_Set_Displayed_File_List(etfilelist);
 
-    Browser_List_Load_File_List(etfilelist, NULL);
+    et_browser_load_file_list (self, etfilelist, NULL);
 
     // Displays the first item
     Action_Select_Nth_File_By_Etfile((ET_File *)etfilelist->data);
 }
 
-
 /*
- * Set the color of the row of BrowserAlbumList
+ * Set the color of the row of priv->album_list
  */
 static void
-Browser_Album_List_Set_Row_Appearance (GtkTreeIter *iter)
+Browser_Album_List_Set_Row_Appearance (EtBrowser *self, GtkTreeIter *iter)
 {
+    EtBrowserPrivate *priv;
     GList *l;
     gboolean not_all_saved = FALSE;
 
+    priv = et_browser_get_instance_private (self);
 
     // Change the style (red/bold) of the row if one of the files was changed
-    for (gtk_tree_model_get (GTK_TREE_MODEL (albumListModel), iter,
+    for (gtk_tree_model_get (GTK_TREE_MODEL (priv->album_model), iter,
                              ALBUM_ETFILE_LIST_POINTER, &l, -1);
          l != NULL; l = g_list_next (l))
     {
         if (ET_Check_If_File_Is_Saved ((ET_File *)l->data) == FALSE)
         {
-            if (CHANGED_FILES_DISPLAYED_TO_BOLD)
+            if (g_settings_get_boolean (MainSettings, "file-changed-bold"))
             {
                 // Set the font-style to "bold"
-                gtk_list_store_set(albumListModel, iter,
+                gtk_list_store_set(priv->album_model, iter,
                                    ALBUM_FONT_WEIGHT, PANGO_WEIGHT_BOLD, -1);
             } else
             {
                 // Set the background-color to "red"
-                gtk_list_store_set(albumListModel, iter,
+                gtk_list_store_set(priv->album_model, iter,
                                    ALBUM_FONT_WEIGHT,    PANGO_WEIGHT_NORMAL,
                                    ALBUM_ROW_FOREGROUND, &RED, -1);
             }
@@ -2380,217 +2675,410 @@ Browser_Album_List_Set_Row_Appearance (GtkTreeIter *iter)
     // Reset style if all files saved
     if (not_all_saved == FALSE)
     {
-        gtk_list_store_set(albumListModel, iter,
+        gtk_list_store_set(priv->album_model, iter,
                            ALBUM_FONT_WEIGHT,    PANGO_WEIGHT_NORMAL,
                            ALBUM_ROW_FOREGROUND, NULL, -1);
     }
 }
 
-void Browser_Display_Tree_Or_Artist_Album_List (void)
+void
+et_browser_set_display_mode (EtBrowser *self,
+                             EtBrowserMode mode)
 {
+    EtBrowserPrivate *priv;
     ET_File *etfile = ETCore->ETFileDisplayed; // ETFile to display again after changing browser view
-    GtkWidget *artist_radio;
 
-    // Save the current displayed data
-    ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
+    g_return_if_fail (ET_BROWSER (self));
 
-    // Toggle button to switch view
-    artist_radio = gtk_ui_manager_get_widget (UIManager,
-                                              "/ToolBar/ArtistViewMode");
+    priv = et_browser_get_instance_private (self);
 
-    // Button pressed in the toolbar
-    if (gtk_toggle_tool_button_get_active (GTK_TOGGLE_TOOL_BUTTON (artist_radio)))
+    /* Save the current displayed data. */
+    ET_Save_File_Data_From_UI (ETCore->ETFileDisplayed);
+
+    switch (mode)
     {
-        /*
-         * Artist + Album view
-         */
+        case ET_BROWSER_MODE_FILE:
+            /* Set the whole list as "Displayed list". */
+            ET_Set_Displayed_File_List (ETCore->ETFileList);
 
-        // Display Artist + Album lists
-        gtk_notebook_set_current_page(GTK_NOTEBOOK(BrowserNoteBook),1);
-        ET_Create_Artist_Album_File_List();
-        Browser_Artist_List_Load_Files(etfile);
+            /* Display Tree Browser. */
+            gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook), 0);
+            et_browser_load_file_list (self, ETCore->ETFileDisplayedList,
+                                       etfile);
 
-    }else
+            /* Displays the first file if nothing specified. */
+            if (!etfile)
+            {
+                GList *etfilelist = ET_Displayed_File_List_First ();
+                if (etfilelist)
+                {
+                    etfile = (ET_File *)etfilelist->data;
+                }
+
+                Action_Select_Nth_File_By_Etfile (etfile);
+            }
+            break;
+        case ET_BROWSER_MODE_ARTIST:
+            /* Display Artist + Album lists. */
+            gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook), 1);
+            ET_Create_Artist_Album_File_List ();
+            Browser_Artist_List_Load_Files (self, etfile);
+            break;
+        default:
+            g_assert_not_reached ();
+    }
+    //ET_Display_File_Data_To_UI(etfile); // Causes a crash
+}
+
+/*
+ * Disable (FALSE) / Enable (TRUE) all user widgets in the browser area (Tree + List + Entry)
+ */
+void
+et_browser_set_sensitive (EtBrowser *self, gboolean sensitive)
+{
+    EtBrowserPrivate *priv;
+
+    priv = et_browser_get_instance_private (self);
+
+    gtk_widget_set_sensitive (GTK_WIDGET (priv->entry_combo), sensitive);
+    gtk_widget_set_sensitive (GTK_WIDGET (priv->tree), sensitive);
+    gtk_widget_set_sensitive (GTK_WIDGET (priv->file_view), sensitive);
+    gtk_widget_set_sensitive (GTK_WIDGET (priv->artist_list), sensitive);
+    gtk_widget_set_sensitive (GTK_WIDGET (priv->album_list), sensitive);
+    gtk_widget_set_sensitive (GTK_WIDGET (priv->button), sensitive);
+    gtk_widget_set_sensitive (GTK_WIDGET (priv->label), sensitive);
+}
+
+static void
+do_popup_menu (EtBrowser *self,
+               GdkEventButton *event,
+               GtkTreeView *view,
+               GtkWidget *menu)
+{
+    gint button;
+    gint event_time;
+
+    if (event)
+    {
+        button = event->button;
+        event_time = event->time;
+    }
+    else
     {
+        button = 0;
+        event_time = gtk_get_current_event_time ();
+    }
 
-        /*
-         * Browser (classic) view
-         */
-        // Set the whole list as "Displayed list"
-        ET_Set_Displayed_File_List(ETCore->ETFileList);
+    /* TODO: Add popup positioning function. */
+    gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, button,
+                    event_time);
+}
 
-        // Display Tree Browser
-        gtk_notebook_set_current_page(GTK_NOTEBOOK(BrowserNoteBook),0);
-        Browser_List_Load_File_List(ETCore->ETFileDisplayedList, etfile);
+static void
+select_row_for_button_press_event (GtkTreeView *treeview,
+                                   GdkEventButton *event)
+{
+    if (event->window == gtk_tree_view_get_bin_window (treeview))
+    {
+        GtkTreePath *tree_path;
 
-        // Displays the first file if nothing specified
-        if (!etfile)
+        if (gtk_tree_view_get_path_at_pos (treeview, event->x,
+                                           event->y, &tree_path, NULL,
+                                           NULL,NULL))
         {
-            GList *etfilelist = ET_Displayed_File_List_First();
-            if (etfilelist)
-                etfile = (ET_File *)etfilelist->data;
-            Action_Select_Nth_File_By_Etfile(etfile);
+            gtk_tree_selection_select_path (gtk_tree_view_get_selection (treeview),
+                                            tree_path);
+            gtk_tree_path_free (tree_path);
         }
     }
+}
 
-    //ET_Display_File_Data_To_UI(etfile); // Causes a crash
+static gboolean
+on_album_tree_popup_menu (GtkWidget *treeview,
+                          EtBrowser *self)
+{
+    EtBrowserPrivate *priv;
+
+    priv = et_browser_get_instance_private (self);
+
+    do_popup_menu (self, NULL, GTK_TREE_VIEW (treeview), priv->album_menu);
+
+    return GDK_EVENT_STOP;
 }
 
-/*
- * Disable (FALSE) / Enable (TRUE) all user widgets in the browser area (Tree + List + Entry)
- */
-void Browser_Area_Set_Sensitive (gboolean activate)
+static gboolean
+on_artist_tree_popup_menu (GtkWidget *treeview,
+                           EtBrowser *self)
 {
-    gtk_widget_set_sensitive(GTK_WIDGET(BrowserEntryCombo),activate);
-    gtk_widget_set_sensitive(GTK_WIDGET(BrowserTree),      activate);
-    gtk_widget_set_sensitive(GTK_WIDGET(BrowserList),      activate);
-    gtk_widget_set_sensitive(GTK_WIDGET(BrowserArtistList),activate);
-    gtk_widget_set_sensitive(GTK_WIDGET(BrowserAlbumList), activate);
-    gtk_widget_set_sensitive(GTK_WIDGET(BrowserButton),    activate);
-    gtk_widget_set_sensitive(GTK_WIDGET(BrowserLabel),     activate);
+    EtBrowserPrivate *priv;
+
+    priv = et_browser_get_instance_private (self);
+
+    do_popup_menu (self, NULL, GTK_TREE_VIEW (treeview), priv->artist_menu);
+
+    return GDK_EVENT_STOP;
+}
+
+static gboolean
+on_directory_tree_popup_menu (GtkWidget *treeview,
+                              EtBrowser *self)
+{
+    EtBrowserPrivate *priv;
+
+    priv = et_browser_get_instance_private (self);
+
+    do_popup_menu (self, NULL, GTK_TREE_VIEW (treeview), priv->tree_menu);
+
+    return GDK_EVENT_STOP;
+}
+
+static gboolean
+on_file_tree_popup_menu (GtkWidget *treeview,
+                         EtBrowser *self)
+{
+    EtBrowserPrivate *priv;
+
+    priv = et_browser_get_instance_private (self);
+
+    do_popup_menu (self, NULL, GTK_TREE_VIEW (treeview), priv->file_menu);
+
+    return GDK_EVENT_STOP;
 }
 
+static gboolean
+on_album_tree_button_press_event (GtkWidget *widget,
+                                  GdkEventButton *event,
+                                  EtBrowser *self)
+{
+    if (gdk_event_triggers_context_menu ((GdkEvent *)event))
+    {
+        EtBrowserPrivate *priv;
+
+        priv = et_browser_get_instance_private (self);
+
+        if (GTK_IS_TREE_VIEW (widget))
+        {
+            select_row_for_button_press_event (GTK_TREE_VIEW (widget), event);
+        }
+
+        do_popup_menu (self, event, GTK_TREE_VIEW (priv->album_list),
+                       priv->album_menu);
+
+        return GDK_EVENT_STOP;
+    }
+
+    return GDK_EVENT_PROPAGATE;
+}
+
+static gboolean
+on_artist_tree_button_press_event (GtkWidget *widget,
+                                   GdkEventButton *event,
+                                   EtBrowser *self)
+{
+    if (gdk_event_triggers_context_menu ((GdkEvent *)event))
+    {
+        EtBrowserPrivate *priv;
+
+        priv = et_browser_get_instance_private (self);
+
+        if (GTK_IS_TREE_VIEW (widget))
+        {
+            select_row_for_button_press_event (GTK_TREE_VIEW (widget), event);
+        }
+
+        do_popup_menu (self, event, GTK_TREE_VIEW (priv->artist_list),
+                       priv->artist_menu);
+
+        return GDK_EVENT_STOP;
+    }
+
+    return GDK_EVENT_PROPAGATE;
+}
+
+static gboolean
+on_directory_tree_button_press_event (GtkWidget *widget,
+                                      GdkEventButton *event,
+                                      EtBrowser *self)
+{
+    if (gdk_event_triggers_context_menu ((GdkEvent *)event))
+    {
+        EtBrowserPrivate *priv;
+
+        priv = et_browser_get_instance_private (self);
+
+        if (GTK_IS_TREE_VIEW (widget))
+        {
+            select_row_for_button_press_event (GTK_TREE_VIEW (widget), event);
+        }
+
+        do_popup_menu (self, event, GTK_TREE_VIEW (priv->tree),
+                       priv->tree_menu);
+
+        return GDK_EVENT_STOP;
+    }
+
+    return GDK_EVENT_PROPAGATE;
+}
 
 /*
  * Browser_Popup_Menu_Handler : displays the corresponding menu
  */
 static gboolean
-Browser_Popup_Menu_Handler (GtkWidget *widget, GdkEventButton *event,
-                            GtkMenu *menu)
+on_file_tree_button_press_event (GtkWidget *widget,
+                                 GdkEventButton *event,
+                                 EtBrowser *self)
 {
-    if (event && (event->type == GDK_BUTTON_PRESS) && (event->button == 3))
+    if (gdk_event_triggers_context_menu ((GdkEvent *)event))
     {
+        EtBrowserPrivate *priv;
+
+        priv = et_browser_get_instance_private (self);
+
         if (GTK_IS_TREE_VIEW (widget))
         {
-            GtkTreeView *browser_tree;
+            select_row_for_button_press_event (GTK_TREE_VIEW (widget), event);
+        }
 
-            browser_tree = GTK_TREE_VIEW (widget);
+        do_popup_menu (self, event, GTK_TREE_VIEW (priv->file_view),
+                       priv->file_menu);
 
-            if (event->window == gtk_tree_view_get_bin_window (browser_tree))
-            {
-                GtkTreePath *tree_path;
+        return GDK_EVENT_STOP;
+    }
+    else if (event->type == GDK_2BUTTON_PRESS
+        && event->button == GDK_BUTTON_PRIMARY)
+    {
+        /* Double left mouse click. Select files of the same directory (useful
+         * when browsing sub-directories). */
+        GdkWindow *bin_window;
+        GList *l;
+        gchar *path_ref = NULL;
+        gchar *patch_check = NULL;
+        GtkTreePath *currentPath = NULL;
 
-                if (gtk_tree_view_get_path_at_pos (browser_tree, event->x,
-                                                   event->y, &tree_path, NULL,
-                                                   NULL,NULL))
-                {
-                    gtk_tree_selection_select_path (gtk_tree_view_get_selection (browser_tree),
-                                                    tree_path);
-                    gtk_tree_path_free (tree_path);
-                }
+        if (!ETCore->ETFileDisplayed)
+        {
+            return GDK_EVENT_PROPAGATE;
+        }
+
+        bin_window = gtk_tree_view_get_bin_window (GTK_TREE_VIEW (widget));
+
+        if (bin_window != event->window)
+        {
+            /* If the double-click is not on a tree view row, for example when
+             * resizing a header column, ignore it. */
+            return GDK_EVENT_PROPAGATE;
+        }
+
+        /* File taken as reference. */
+        path_ref = g_path_get_dirname (((File_Name *)ETCore->ETFileDisplayed->FileNameCur->data)->value);
+
+        /* Search and select files of the same directory. */
+        for (l = g_list_first (ETCore->ETFileDisplayedList); l != NULL;
+             l = g_list_next (l))
+        {
+            /* Path of the file to check if it is in the same directory. */
+            patch_check = g_path_get_dirname (((File_Name *)((ET_File *)l->data)->FileNameCur->data)->value);
+
+            if (path_ref && patch_check && strcmp (path_ref, patch_check) == 0)
+            {
+                /* Use of 'currentPath' to try to increase speed. Indeed, in
+                 * many cases, the next file to select, is the next in the
+                 * list. */
+                currentPath = et_browser_select_file_by_et_file2 (self,
+                                                                  (ET_File *)l->data,
+                                                                  TRUE,
+                                                                  currentPath);
             }
+
+            g_free (patch_check);
         }
 
-        gtk_menu_popup (menu, NULL, NULL, NULL, NULL, event->button,
-	                event->time);
+        g_free (path_ref);
 
-        return TRUE;
+        if (currentPath)
+        {
+            gtk_tree_path_free (currentPath);
+        }
+
+        return GDK_EVENT_STOP;
+    }
+    else if (event->type == GDK_3BUTTON_PRESS
+             && event->button == GDK_BUTTON_PRIMARY)
+    {
+        /* Triple left mouse click, select all files of the list. */
+        g_action_group_activate_action (G_ACTION_GROUP (MainWindow),
+                                        "select-all", NULL);
+        return GDK_EVENT_STOP;
     }
 
-    return FALSE;
+    return GDK_EVENT_PROPAGATE;
 }
 
 /*
  * Destroy the whole tree up to the root node
  */
 static void
-Browser_Tree_Initialize (void)
+Browser_Tree_Initialize (EtBrowser *self)
 {
+    EtBrowserPrivate *priv;
 #ifdef G_OS_WIN32
-    DWORD drives;
-    UINT drive_type;
-    gchar drive[] = "A:/";
-    gchar drive_backslashed[] = "A:\\";
-    gchar drive_slashless[] = "A:";
-    gchar drive_label[256];
+    GVolumeMonitor *monitor;
+    GList *mounts;
+    GList *l;
 #endif
     GtkTreeIter parent_iter;
     GtkTreeIter dummy_iter;
     GIcon *drive_icon;
 
-    g_return_if_fail (directoryTreeModel != NULL);
+    priv = et_browser_get_instance_private (self);
+
+    g_return_if_fail (priv->directory_model != NULL);
 
-    gtk_tree_store_clear(directoryTreeModel);
+    gtk_tree_store_clear (priv->directory_model);
 
 #ifdef G_OS_WIN32
-    /* Code strangely familiar with gtkfilesystemwin32.c */
+    /* TODO: Connect to the monitor changed signals. */
+    monitor = g_volume_monitor_get ();
+    mounts = g_volume_monitor_get_mounts (monitor);
 
-    drives = GetLogicalDrives();
-    if (!drives)
+    for (l = mounts; l != NULL; l = g_list_next (l))
     {
-        g_warning ("GetLogicalDrives failed");
-        drive_icon = g_themed_icon_new ("folder");
-    }
-
-    while (drives && drive[0] <= 'Z')
-    {
-        if (drives & 1)
-        {
-            char *drive_dir_name;
-
-            drive_type = GetDriveType(drive_backslashed);
-
-            // DRIVE_REMOVABLE   2
-            // DRIVE_FIXED       3
-            // DRIVE_REMOTE      4
-            // DRIVE_CDROM       5
-            // DRIVE_RAMDISK     6
-            // DRIVE_UNKNOWN     0
-            // DRIVE_NO_ROOT_DIR 1
-            switch(drive_type)
-            {
-                case DRIVE_FIXED:
-                    drive_icon = g_themed_icon_new ("drive-harddisk");
-                    break;
-                case DRIVE_REMOVABLE:
-                    drive_icon = g_themed_icon_new ("drive-removable-media");
-                    break;
-                case DRIVE_CDROM:
-                    drive_icon = g_themed_icon_new ("drive-optical");
-                    break;
-                case DRIVE_REMOTE:
-                    drive_icon = g_themed_icon_new ("folder-remote");
-                    break;
-                case DRIVE_RAMDISK:
-                    /* FIXME: There is no standard RAM icon, so create one. */
-                    drive_icon = g_themed_icon_new ("drive-removable-media");
-                    break;
-                default:
-                    drive_icon = g_themed_icon_new ("folder");
-            }
-
-            drive_label[0] = 0;
-
-            GetVolumeInformation(drive_backslashed, drive_label, 256, NULL, NULL, NULL, NULL, 0);
-
-            /* Drive letter first so alphabetical drive list order works */
-            drive_dir_name = g_strconcat("(", drive_slashless, ") ", drive_label, NULL);
-
-            gtk_tree_store_insert_with_values (directoryTreeModel,
-                                               &parent_iter, NULL, G_MAXINT,
-                                               TREE_COLUMN_DIR_NAME,
-                                               drive_dir_name,
-                                               TREE_COLUMN_FULL_PATH,
-                                               drive_backslashed,
-                                               TREE_COLUMN_HAS_SUBDIR, TRUE,
-                                               TREE_COLUMN_SCANNED, FALSE,
-                                               TREE_COLUMN_ICON, drive_icon,
-                                               -1);
-            /* Insert dummy node. */
-            gtk_tree_store_append (directoryTreeModel, &dummy_iter,
-                                   &parent_iter);
-
-            g_free(drive_dir_name);
-        }
-        drives >>= 1;
-        drive[0]++;
-        drive_backslashed[0]++;
-        drive_slashless[0]++;
+        GMount *mount;
+        gchar *name;
+        GFile *root;
+        gchar *path;
+
+        mount = l->data;
+        drive_icon = g_mount_get_icon (mount);
+        name = g_mount_get_name (mount);
+        root = g_mount_get_root (mount);
+        path = g_file_get_path (root);
+
+        gtk_tree_store_insert_with_values (priv->directory_model,
+                                           &parent_iter, NULL, G_MAXINT,
+                                           TREE_COLUMN_DIR_NAME,
+                                           name,
+                                           TREE_COLUMN_FULL_PATH,
+                                           path,
+                                           TREE_COLUMN_HAS_SUBDIR, TRUE,
+                                           TREE_COLUMN_SCANNED, FALSE,
+                                           TREE_COLUMN_ICON, drive_icon,
+                                           -1);
+        /* Insert dummy node. */
+        gtk_tree_store_append (priv->directory_model, &dummy_iter,
+                               &parent_iter);
+
+        g_free (path);
+        g_free (name);
+        g_object_unref (root);
+        g_object_unref (drive_icon);
     }
 
+    g_list_free_full (mounts, g_object_unref);
+    g_object_unref (monitor);
 #else /* !G_OS_WIN32 */
     drive_icon = get_gicon_for_path (G_DIR_SEPARATOR_S, ET_PATH_STATE_CLOSED);
-    gtk_tree_store_insert_with_values (directoryTreeModel, &parent_iter, NULL,
+    gtk_tree_store_insert_with_values (priv->directory_model, &parent_iter, NULL,
                                        G_MAXINT, TREE_COLUMN_DIR_NAME,
                                        G_DIR_SEPARATOR_S,
                                        TREE_COLUMN_FULL_PATH,
@@ -2599,58 +3087,61 @@ Browser_Tree_Initialize (void)
                                        TREE_COLUMN_SCANNED, FALSE,
                                        TREE_COLUMN_ICON, drive_icon, -1);
     /* Insert dummy node. */
-    gtk_tree_store_append (directoryTreeModel, &dummy_iter, &parent_iter);
-#endif /* !G_OS_WIN32 */
+    gtk_tree_store_append (priv->directory_model, &dummy_iter, &parent_iter);
 
     g_object_unref (drive_icon);
+#endif /* !G_OS_WIN32 */
 }
 
 /*
- * Browser_Tree_Rebuild: Refresh the tree browser by destroying it and rebuilding it.
- * Opens tree nodes corresponding to 'path_to_load' if this parameter isn't NULL.
- * If NULL, selects the current path.
+ * et_browser_reload: Refresh the tree browser by destroying it and rebuilding it.
+ * Opens tree nodes corresponding to the current path.
  */
-void Browser_Tree_Rebuild (gchar *path_to_load)
+void
+et_browser_reload (EtBrowser *self)
 {
+    EtBrowserPrivate *priv;
     gchar *current_path = NULL;
     GtkTreeSelection *selection;
 
-    /* May be called from GtkUIManager callback */
-    if (GTK_IS_ACTION(path_to_load))
-        path_to_load = NULL;
-
-    if (path_to_load != NULL)
-    {
-        Browser_Tree_Initialize();
-        Browser_Tree_Select_Dir(path_to_load);
-        return;
-    }
+    priv = et_browser_get_instance_private (self);
 
     /* Memorize the current path to load it again at the end */
-    current_path = Browser_Tree_Get_Path_Of_Selected_Node();
-    if (current_path==NULL && BrowserEntryCombo)
+    current_path = Browser_Tree_Get_Path_Of_Selected_Node (self);
+
+    if (current_path==NULL && priv->entry_combo)
     {
         /* If no node selected, get path from BrowserEntry or default path */
-        if (BrowserCurrentPath != NULL)
-            current_path = g_strdup(BrowserCurrentPath);
-        else if (g_utf8_strlen(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(BrowserEntryCombo)))), -1) > 0)
-            current_path = filename_from_display(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(BrowserEntryCombo)))));
+        if (priv->current_path != NULL)
+            current_path = g_strdup(priv->current_path);
+        else if (g_utf8_strlen(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(priv->entry_combo)))), -1) > 0)
+            current_path = filename_from_display(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(priv->entry_combo)))));
         else
-            current_path = g_strdup(DEFAULT_PATH_TO_MP3);
+        {
+            GVariant *path = g_settings_get_value (MainSettings,
+                                                   "default-path");
+            current_path = g_variant_dup_bytestring (path, NULL);
+            g_variant_unref (path);
+        }
     }
 
     /* Select again the memorized path without loading files */
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserTree));
+    selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->tree));
+
     if (selection)
     {
-        g_signal_handlers_block_by_func(G_OBJECT(selection),G_CALLBACK(Browser_Tree_Node_Selected),NULL);
-        Browser_Tree_Initialize ();
-        Browser_Tree_Select_Dir(current_path);
-        g_signal_handlers_unblock_by_func(G_OBJECT(selection),G_CALLBACK(Browser_Tree_Node_Selected),NULL);
+        g_signal_handlers_block_by_func (selection,
+                                         G_CALLBACK (Browser_Tree_Node_Selected),
+                                         self);
+        Browser_Tree_Initialize (self);
+        et_browser_select_dir (self, current_path);
+        g_signal_handlers_unblock_by_func (selection,
+                                           G_CALLBACK (Browser_Tree_Node_Selected),
+                                           self);
     }
     g_free(current_path);
 
-    Update_Command_Buttons_Sensivity();
+    et_application_window_update_actions (ET_APPLICATION_WINDOW (MainWindow));
 }
 
 /*
@@ -2660,9 +3151,11 @@ void Browser_Tree_Rebuild (gchar *path_to_load)
  * Parameters are non-utf8!
  */
 static void
-Browser_Tree_Rename_Directory (const gchar *last_path, const gchar *new_path)
+Browser_Tree_Rename_Directory (EtBrowser *self,
+                               const gchar *last_path,
+                               const gchar *new_path)
 {
-
+    EtBrowserPrivate *priv;
     gchar **textsplit;
     gint i;
     GtkTreeIter  iter;
@@ -2675,25 +3168,30 @@ Browser_Tree_Rename_Directory (const gchar *last_path, const gchar *new_path)
     if (!last_path || !new_path)
         return;
 
+    priv = et_browser_get_instance_private (self);
+
     /*
      * Find the existing tree entry
      */
     textsplit = g_strsplit(last_path, G_DIR_SEPARATOR_S, 0);
 
 #ifdef G_OS_WIN32
-    if (!Browser_Win32_Get_Drive_Root(textsplit[0], &iter, &parentpath))
+    if (!et_browser_win32_get_drive_root (self, textsplit[0], &iter,
+                                          &parentpath))
+    {
         return;
+    }
 #else /* !G_OS_WIN32 */
     parentpath = gtk_tree_path_new_first();
 #endif /* !G_OS_WIN32 */
 
     for (i = 1; textsplit[i] != NULL; i++)
     {
-        gboolean valid = gtk_tree_model_get_iter (GTK_TREE_MODEL (directoryTreeModel),
+        gboolean valid = gtk_tree_model_get_iter (GTK_TREE_MODEL (priv->directory_model),
                                                   &iter, parentpath);
         if (valid)
         {
-            childpath = Find_Child_Node (&iter, textsplit[i]);
+            childpath = Find_Child_Node (self, &iter, textsplit[i]);
         }
         else
         {
@@ -2704,7 +3202,8 @@ Browser_Tree_Rename_Directory (const gchar *last_path, const gchar *new_path)
         {
             // ERROR! Could not find it!
             gchar *text_utf8 = filename_to_display(textsplit[i]);
-            Log_Print(LOG_ERROR,_("Error: Searching for %s, could not find node %s in tree."), last_path, text_utf8);
+            g_critical ("Error: Searching for %s, could not find node %s in tree.",
+                        last_path, text_utf8);
             g_strfreev(textsplit);
             g_free(text_utf8);
             return;
@@ -2713,23 +3212,23 @@ Browser_Tree_Rename_Directory (const gchar *last_path, const gchar *new_path)
         parentpath = childpath;
     }
 
-    gtk_tree_model_get_iter(GTK_TREE_MODEL(directoryTreeModel), &iter, parentpath);
+    gtk_tree_model_get_iter(GTK_TREE_MODEL(priv->directory_model), &iter, parentpath);
     gtk_tree_path_free(parentpath);
 
     /* Rename the on-screen node */
     new_basename = g_path_get_basename(new_path);
     new_basename_utf8 = filename_to_display(new_basename);
-    gtk_tree_store_set(directoryTreeModel, &iter,
+    gtk_tree_store_set(priv->directory_model, &iter,
                        TREE_COLUMN_DIR_NAME,  new_basename_utf8,
                        TREE_COLUMN_FULL_PATH, new_path,
                        -1);
 
     /* Update fullpath of child nodes */
-    Browser_Tree_Handle_Rename(&iter, last_path, new_path);
+    Browser_Tree_Handle_Rename (self, &iter, last_path, new_path);
 
     /* Update the variable of the current path */
-    path = Browser_Tree_Get_Path_Of_Selected_Node();
-    Browser_Update_Current_Path(path);
+    path = Browser_Tree_Get_Path_Of_Selected_Node (self);
+    et_browser_set_current_path (self, path);
     g_free(path);
 
     g_strfreev(textsplit);
@@ -2741,21 +3240,29 @@ Browser_Tree_Rename_Directory (const gchar *last_path, const gchar *new_path)
  * Recursive function to update paths of all child nodes
  */
 static void
-Browser_Tree_Handle_Rename (GtkTreeIter *parentnode, const gchar *old_path,
+Browser_Tree_Handle_Rename (EtBrowser *self,
+                            GtkTreeIter *parentnode,
+                            const gchar *old_path,
                             const gchar *new_path)
 {
+    EtBrowserPrivate *priv;
     GtkTreeIter iter;
     gchar *path;
     gchar *path_shift;
     gchar *path_new;
 
-    // If there are no children then nothing needs to be done!
-    if (!gtk_tree_model_iter_children(GTK_TREE_MODEL(directoryTreeModel), &iter, parentnode))
+    priv = et_browser_get_instance_private (self);
+
+    /* If there are no children then nothing needs to be done! */
+    if (!gtk_tree_model_iter_children (GTK_TREE_MODEL (priv->directory_model),
+                                       &iter, parentnode))
+    {
         return;
+    }
 
     do
     {
-        gtk_tree_model_get(GTK_TREE_MODEL(directoryTreeModel), &iter,
+        gtk_tree_model_get(GTK_TREE_MODEL(priv->directory_model), &iter,
                            TREE_COLUMN_FULL_PATH, &path, -1);
         if(path == NULL)
             continue;
@@ -2763,17 +3270,20 @@ Browser_Tree_Handle_Rename (GtkTreeIter *parentnode, const gchar *old_path,
         path_shift = g_utf8_offset_to_pointer(path, g_utf8_strlen(old_path, -1));
         path_new = g_strconcat(new_path, path_shift, NULL);
 
-        gtk_tree_store_set(directoryTreeModel, &iter,
+        gtk_tree_store_set(priv->directory_model, &iter,
                            TREE_COLUMN_FULL_PATH, path_new, -1);
 
         g_free(path_new);
         g_free(path);
 
-        // Recurse if necessary
-        if(gtk_tree_model_iter_has_child(GTK_TREE_MODEL(directoryTreeModel), &iter))
-            Browser_Tree_Handle_Rename(&iter, old_path, new_path);
+        /* Recurse if necessary. */
+        if (gtk_tree_model_iter_has_child (GTK_TREE_MODEL (priv->directory_model),
+                                           &iter))
+        {
+            Browser_Tree_Handle_Rename (self, &iter, old_path, new_path);
+        }
 
-    } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(directoryTreeModel), &iter));
+    } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(priv->directory_model), &iter));
 
 }
 
@@ -2781,32 +3291,35 @@ Browser_Tree_Handle_Rename (GtkTreeIter *parentnode, const gchar *old_path,
  * Find the child node of "parentnode" that has text of "childtext
  * Returns NULL on failure
  */
-static
-GtkTreePath *Find_Child_Node (GtkTreeIter *parentnode, gchar *childtext)
+static GtkTreePath *
+Find_Child_Node (EtBrowser *self, GtkTreeIter *parentnode, gchar *childtext)
 {
+    EtBrowserPrivate *priv;
     gint row;
     GtkTreeIter iter;
     gchar *text;
     gchar *temp;
 
-    for (row=0; row < gtk_tree_model_iter_n_children(GTK_TREE_MODEL(directoryTreeModel), parentnode); row++)
+    priv = et_browser_get_instance_private (self);
+
+    for (row=0; row < gtk_tree_model_iter_n_children(GTK_TREE_MODEL(priv->directory_model), parentnode); row++)
     {
         if (row == 0)
         {
-            if (gtk_tree_model_iter_children(GTK_TREE_MODEL(directoryTreeModel), &iter, parentnode) == FALSE) return NULL;
+            if (gtk_tree_model_iter_children(GTK_TREE_MODEL(priv->directory_model), &iter, parentnode) == FALSE) return NULL;
         } else
         {
-            if (gtk_tree_model_iter_next(GTK_TREE_MODEL(directoryTreeModel), &iter) == FALSE)
+            if (gtk_tree_model_iter_next(GTK_TREE_MODEL(priv->directory_model), &iter) == FALSE)
                 return NULL;
         }
-        gtk_tree_model_get(GTK_TREE_MODEL(directoryTreeModel), &iter,
+        gtk_tree_model_get(GTK_TREE_MODEL(priv->directory_model), &iter,
                            TREE_COLUMN_FULL_PATH, &temp, -1);
         text = g_path_get_basename(temp);
         g_free(temp);
         if(strcmp(childtext,text) == 0)
         {
             g_free(text);
-            return gtk_tree_model_get_path(GTK_TREE_MODEL(directoryTreeModel), &iter);
+            return gtk_tree_model_get_path(GTK_TREE_MODEL(priv->directory_model), &iter);
         }
         g_free(text);
 
@@ -2846,7 +3359,8 @@ check_for_subdir (const gchar *path)
         {
             if ((g_file_info_get_file_type (childinfo) ==
                  G_FILE_TYPE_DIRECTORY) &&
-                (BROWSE_HIDDEN_DIR || !g_file_info_get_is_hidden (childinfo)))
+                (g_settings_get_boolean (MainSettings, "browse-show-hidden")
+                 || !g_file_info_get_is_hidden (childinfo)))
             {
                 g_object_unref (childinfo);
                 g_file_enumerator_close (enumerator, NULL, NULL);
@@ -2955,6 +3469,10 @@ get_gicon_for_path (const gchar *path, EtPathState path_state)
 static gboolean
 Browser_List_Select_Func (GtkTreeSelection *selection, GtkTreeModel *model, GtkTreePath *path, gboolean path_currently_selected, gpointer data)
 {
+    EtBrowserPrivate *priv;
+
+    priv = et_browser_get_instance_private (ET_BROWSER (data));
+
     /* This line will be selected at the end of the event.
      * We store the last ETFile selected, as gtk_tree_selection_get_selected_rows
      * returns the selection, in the ascending line order, instead of the real
@@ -2963,14 +3481,13 @@ Browser_List_Select_Func (GtkTreeSelection *selection, GtkTreeModel *model, GtkT
     if (!path_currently_selected)
     {
         GtkTreeIter iter;
-        if (gtk_tree_model_get_iter(GTK_TREE_MODEL(fileListModel), &iter, path))
-            gtk_tree_model_get(GTK_TREE_MODEL(fileListModel), &iter,
-                               LIST_FILE_POINTER, &LastBrowserListETFileSelected, -1);
+        if (gtk_tree_model_get_iter(GTK_TREE_MODEL(priv->file_model), &iter, path))
+            gtk_tree_model_get(GTK_TREE_MODEL(priv->file_model), &iter,
+                               LIST_FILE_POINTER, &priv->last_selected_file, -1);
     }else
     {
-        LastBrowserListETFileSelected = NULL;
+        priv->last_selected_file = NULL;
     }
-    //g_print(">>>%s -> %d -> %x\n",gtk_tree_path_to_string(path),path_currently_selected,LastBrowserListETFileSelected);
 
     return TRUE;
 }
@@ -2980,8 +3497,10 @@ Browser_List_Select_Func (GtkTreeSelection *selection, GtkTreeModel *model, GtkT
  * Open up a node on the browser tree
  * Scanning and showing all subdirectories
  */
-static void expand_cb (GtkWidget *tree, GtkTreeIter *iter, GtkTreePath *gtreePath, gpointer data)
+static void
+expand_cb (EtBrowser *self, GtkTreeIter *iter, GtkTreePath *gtreePath, GtkTreeView *tree)
 {
+    EtBrowserPrivate *priv;
     GFile *dir;
     GFileEnumerator *enumerator;
     gchar *fullpath_file;
@@ -2992,9 +3511,11 @@ static void expand_cb (GtkWidget *tree, GtkTreeIter *iter, GtkTreePath *gtreePat
     GtkTreeIter subNodeIter;
     GIcon *icon;
 
-    g_return_if_fail (directoryTreeModel != NULL);
+    priv = et_browser_get_instance_private (self);
+
+    g_return_if_fail (priv->directory_model != NULL);
 
-    gtk_tree_model_get(GTK_TREE_MODEL(directoryTreeModel), iter,
+    gtk_tree_model_get(GTK_TREE_MODEL(priv->directory_model), iter,
                        TREE_COLUMN_FULL_PATH, &parentPath,
                        TREE_COLUMN_SCANNED,   &treeScanned, -1);
 
@@ -3028,7 +3549,8 @@ static void expand_cb (GtkWidget *tree, GtkTreeIter *iter, GtkTreePath *gtreePat
             isdir = g_file_info_get_file_type (childinfo) == G_FILE_TYPE_DIRECTORY;
 
             if (isdir &&
-                (BROWSE_HIDDEN_DIR || !g_file_info_get_is_hidden (childinfo)))
+                (g_settings_get_boolean (MainSettings, "browse-show-hidden")
+                 || !g_file_info_get_is_hidden (childinfo)))
             {
                 const gchar *dirname_utf8;
                 dirname_utf8 = g_file_info_get_display_name (childinfo);
@@ -3039,7 +3561,7 @@ static void expand_cb (GtkWidget *tree, GtkTreeIter *iter, GtkTreePath *gtreePat
                 icon = get_gicon_for_path (fullpath_file,
                                            ET_PATH_STATE_CLOSED);
 
-                gtk_tree_store_insert_with_values (directoryTreeModel,
+                gtk_tree_store_insert_with_values (priv->directory_model,
                                                    &currentIter, iter,
                                                    G_MAXINT,
                                                    TREE_COLUMN_DIR_NAME,
@@ -3054,7 +3576,7 @@ static void expand_cb (GtkWidget *tree, GtkTreeIter *iter, GtkTreePath *gtreePat
                 if (has_subdir)
                 {
                     /* Insert a dummy node. */
-                    gtk_tree_store_append(directoryTreeModel, &subNodeIter, &currentIter);
+                    gtk_tree_store_append(priv->directory_model, &subNodeIter, &currentIter);
                 }
 
                 g_object_unref (icon);
@@ -3069,9 +3591,9 @@ static void expand_cb (GtkWidget *tree, GtkTreeIter *iter, GtkTreePath *gtreePat
         g_object_unref (enumerator);
 
         /* Remove dummy node. */
-        gtk_tree_model_iter_children (GTK_TREE_MODEL (directoryTreeModel),
+        gtk_tree_model_iter_children (GTK_TREE_MODEL (priv->directory_model),
                                       &subNodeIter, iter);
-        gtk_tree_store_remove (directoryTreeModel, &subNodeIter);
+        gtk_tree_store_remove (priv->directory_model, &subNodeIter);
     }
 
     g_object_unref (dir);
@@ -3082,28 +3604,30 @@ static void expand_cb (GtkWidget *tree, GtkTreeIter *iter, GtkTreePath *gtreePat
     if (gtk_tree_path_get_depth(gtreePath) > 1)
     {
         // update the icon of the node to opened folder :-)
-        gtk_tree_store_set(directoryTreeModel, iter,
+        gtk_tree_store_set(priv->directory_model, iter,
                            TREE_COLUMN_SCANNED, TRUE,
                            TREE_COLUMN_ICON, icon,
                            -1);
     }
 #else /* !G_OS_WIN32 */
     // update the icon of the node to opened folder :-)
-    gtk_tree_store_set(directoryTreeModel, iter,
+    gtk_tree_store_set(priv->directory_model, iter,
                        TREE_COLUMN_SCANNED, TRUE,
                        TREE_COLUMN_ICON, icon,
                        -1);
 #endif /* !G_OS_WIN32 */
 
-    gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(directoryTreeModel),
+    gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(priv->directory_model),
                                          TREE_COLUMN_DIR_NAME, GTK_SORT_ASCENDING);
 
     g_object_unref (icon);
     g_free(parentPath);
 }
 
-static void collapse_cb (GtkWidget *tree, GtkTreeIter *iter, GtkTreePath *treePath, gpointer data)
+static void
+collapse_cb (EtBrowser *self, GtkTreeIter *iter, GtkTreePath *treePath, GtkTreeView *tree)
 {
+    EtBrowserPrivate *priv;
     GtkTreeIter subNodeIter;
     gchar *path;
     GIcon *icon;
@@ -3111,9 +3635,11 @@ static void collapse_cb (GtkWidget *tree, GtkTreeIter *iter, GtkTreePath *treePa
     GFileInfo *fileinfo;
     GError *error = NULL;
 
-    g_return_if_fail (directoryTreeModel != NULL);
+    priv = et_browser_get_instance_private (self);
+
+    g_return_if_fail (priv->directory_model != NULL);
 
-    gtk_tree_model_get (GTK_TREE_MODEL (directoryTreeModel), iter,
+    gtk_tree_model_get (GTK_TREE_MODEL (priv->directory_model), iter,
                         TREE_COLUMN_FULL_PATH, &path, -1);
 
     /* If the directory is not readable, do not delete its children. */
@@ -3135,15 +3661,15 @@ static void collapse_cb (GtkWidget *tree, GtkTreeIter *iter, GtkTreePath *treePa
         g_object_unref (fileinfo);
     }
 
-    gtk_tree_model_iter_children(GTK_TREE_MODEL(directoryTreeModel),
+    gtk_tree_model_iter_children(GTK_TREE_MODEL(priv->directory_model),
                                  &subNodeIter, iter);
-    while (gtk_tree_model_iter_has_child(GTK_TREE_MODEL(directoryTreeModel), iter))
+    while (gtk_tree_model_iter_has_child(GTK_TREE_MODEL(priv->directory_model), iter))
     {
-        gtk_tree_model_iter_children(GTK_TREE_MODEL(directoryTreeModel), &subNodeIter, iter);
-        gtk_tree_store_remove(directoryTreeModel, &subNodeIter);
+        gtk_tree_model_iter_children(GTK_TREE_MODEL(priv->directory_model), &subNodeIter, iter);
+        gtk_tree_store_remove(priv->directory_model, &subNodeIter);
     }
 
-    gtk_tree_model_get (GTK_TREE_MODEL (directoryTreeModel), iter,
+    gtk_tree_model_get (GTK_TREE_MODEL (priv->directory_model), iter,
                         TREE_COLUMN_FULL_PATH, &path, -1);
     icon = get_gicon_for_path (path, ET_PATH_STATE_OPEN);
     g_free (path);
@@ -3152,13 +3678,13 @@ static void collapse_cb (GtkWidget *tree, GtkTreeIter *iter, GtkTreePath *treePa
     if(gtk_tree_path_get_depth(treePath) > 1)
     {
         // update the icon of the node to closed folder :-)
-        gtk_tree_store_set(directoryTreeModel, iter,
+        gtk_tree_store_set(priv->directory_model, iter,
                            TREE_COLUMN_SCANNED, FALSE,
                            TREE_COLUMN_ICON, icon, -1);
     }
 #else /* !G_OS_WIN32 */
     // update the icon of the node to closed folder :-)
-    gtk_tree_store_set(directoryTreeModel, iter,
+    gtk_tree_store_set(priv->directory_model, iter,
                        TREE_COLUMN_SCANNED, FALSE,
                        TREE_COLUMN_ICON, icon, -1);
 #endif /* !G_OS_WIN32 */
@@ -3169,506 +3695,381 @@ static void collapse_cb (GtkWidget *tree, GtkTreeIter *iter, GtkTreePath *treePa
         /* Remove the parent (missing) directory from the tree. */
         if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
         {
-            gtk_tree_store_remove (directoryTreeModel, iter);
+            gtk_tree_store_remove (priv->directory_model, iter);
         }
 
         g_error_free (error);
     }
     else
     {
-        gtk_tree_store_append (directoryTreeModel, &subNodeIter, iter);
+        gtk_tree_store_append (priv->directory_model, &subNodeIter, iter);
     }
 
     g_object_unref (icon);
 }
 
+static void
+on_sort_mode_changed (EtBrowser *self, gchar *key, GSettings *settings)
+{
+    EtBrowserPrivate *priv;
+    EtSortMode sort_mode;
+    GtkTreeViewColumn *column;
+
+    priv = et_browser_get_instance_private (self);
+
+    sort_mode = g_settings_get_enum (settings, key);
+    column = et_browser_get_column_for_column_id (self, sort_mode / 2);
+
+    /* If the column to sort is different than the old sorted column. */
+    if (sort_mode / 2 != priv->file_sort_mode / 2)
+    {
+        GtkTreeViewColumn *old_column;
+
+        old_column = et_browser_get_column_for_column_id (self,
+                                                          priv->file_sort_mode / 2);
+
+        /* Reset the sort order of the old sort column. */
+        if (gtk_tree_view_column_get_sort_order (old_column)
+            == GTK_SORT_DESCENDING)
+        {
+            gtk_tree_view_column_set_sort_order (old_column,
+                                                 GTK_SORT_ASCENDING);
+        }
+
+        gtk_tree_view_column_set_sort_indicator (old_column, FALSE);
+    }
+
+    /* New sort mode is for a column with a visible counterpart. */
+    if (sort_mode / 2 < ET_SORT_MODE_ASCENDING_CREATION_DATE)
+    {
+        gtk_tree_view_column_set_sort_indicator (column, TRUE);
+    }
+
+    /* Even is GTK_SORT_ASCENDING, odd is GTK_SORT_DESCENDING. */
+    gtk_tree_view_column_set_sort_order (column, sort_mode % 2);
+
+    /* Store the new sort mode. */
+    priv->file_sort_mode = sort_mode;
+
+    et_browser_refresh_sort (self);
+}
+
 /*
  * Create item of the browser (Entry + Tree + List).
  */
-GtkWidget *Create_Browser_Items (GtkWidget *parent)
+static void
+create_browser (EtBrowser *self)
 {
-	GtkWidget *VerticalBox;
-    GtkWidget *HBox;
-    GtkWidget *ScrollWindowDirectoryTree;
-    GtkWidget *ScrollWindowFileList;
-    GtkWidget *ScrollWindowArtistList;
-    GtkWidget *ScrollWindowAlbumList;
-    GtkWidget *Label;
+    EtBrowserPrivate *priv;
+    GtkWidget *grid;
     gsize i;
-    GtkCellRenderer *renderer;
-    GtkTreeViewColumn *column;
-    GtkWidget *PopupMenu;
-    const gchar *BrowserTree_Titles[] = { N_("Tree") };
-    const gchar *BrowserList_Titles[] = { N_("Filename"), N_("Title"),
-                                          N_("Artist"), N_("Album Artist"),
-                                          N_("Album"), N_("Year"), N_("Disc"),
-                                          N_("Track"), N_("Genre"),
-                                          N_("Comment"), N_("Composer"),
-                                          N_("Original Artist"),
-                                          N_("Copyright"), N_("URL"),
-                                          N_("Encoded By") };
-    const gchar *ArtistList_Titles[] = { N_("Artist"), N_("# Albums"),
-                                         N_("# Files") };
-    const gchar *AlbumList_Titles[] = { N_("Album"), N_("# Files") };
-
-    VerticalBox = gtk_box_new(GTK_ORIENTATION_VERTICAL,2);
-    gtk_container_set_border_width(GTK_CONTAINER(VerticalBox),2);
-
-
-    // HBox for BrowserEntry + BrowserLabel
-    HBox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0);
-    gtk_box_pack_start(GTK_BOX(VerticalBox),HBox,FALSE,TRUE,0);
+    GtkBuilder *builder;
+    GError *error = NULL;
+    GMenuModel *menu_model;
+    const gchar * const ids[] = { "filename_column", "title_column",
+                                  "artist_column", "album_artist_column",
+                                  "album_column", "year_column", "disc_column",
+                                  "track_column", "genre_column",
+                                  "comment_column", "composer_column",
+                                  "orig_artist_column", "copyright_column",
+                                  "url_column", "encoded_by_column" };
 
-    /*
-     * The entry box for displaying path
-     */
-    g_assert (BrowserEntryModel == NULL);
-    BrowserEntryModel = gtk_list_store_new (MISC_COMBO_COUNT, G_TYPE_STRING);
+    priv = et_browser_get_instance_private (self);
 
-    BrowserEntryCombo = gtk_combo_box_new_with_model_and_entry(GTK_TREE_MODEL(BrowserEntryModel));
-    g_object_unref (BrowserEntryModel);
-    gtk_combo_box_set_entry_text_column(GTK_COMBO_BOX(BrowserEntryCombo), MISC_COMBO_TEXT);
-    /* History list */
-    Load_Path_Entry_List(BrowserEntryModel, MISC_COMBO_TEXT);
-    //gtk_combo_box_set_wrap_width(GTK_COMBO_BOX(BrowserEntryCombo),2); // Two columns to display paths
+    gtk_container_set_border_width (GTK_CONTAINER (self), 2);
 
-    g_signal_connect(G_OBJECT(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(BrowserEntryCombo)))),"activate",G_CALLBACK(Browser_Entry_Activated),NULL);
-    gtk_box_pack_start(GTK_BOX(HBox),BrowserEntryCombo,TRUE,TRUE,1);
-    gtk_widget_set_tooltip_text(GTK_WIDGET(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(BrowserEntryCombo)))),_("Enter a directory to browse."));
+    /* The entry box for displaying path. */
+    builder = gtk_builder_new ();
+    gtk_builder_add_from_resource (builder, "/org/gnome/EasyTAG/browser.ui",
+                                   &error);
 
-    /*
-     * The button to select a directory to browse
-     */
-    BrowserButton = gtk_button_new_from_stock(GTK_STOCK_OPEN);
-    gtk_box_pack_start(GTK_BOX(HBox),BrowserButton,FALSE,FALSE,1);
-    g_signal_connect_swapped(G_OBJECT(BrowserButton),"clicked",
-                             G_CALLBACK(File_Selection_Window_For_Directory),G_OBJECT(gtk_bin_get_child(GTK_BIN(BrowserEntryCombo))));
-    gtk_widget_set_tooltip_text(BrowserButton,_("Select a directory to browse."));
+    if (error != NULL)
+    {
+        g_error ("Unable to get browser from resource: %s",
+                 error->message);
+    }
 
+    grid = GTK_WIDGET (gtk_builder_get_object (builder, "browser_grid"));
+    gtk_container_add (GTK_CONTAINER (self), grid);
 
-    /*
-     * The label for displaying number of files in path (without subdirs)
-     */
-    /* Translators: No files, as in "0 files". */
-    BrowserLabel = gtk_label_new(_("No files"));
-    gtk_box_pack_start(GTK_BOX(HBox),BrowserLabel,FALSE,FALSE,2);
+    priv->entry_model = GTK_LIST_STORE (gtk_builder_get_object (builder,
+                                                                "directory_model"));
 
-    /* Browser NoteBook :
-     *  - one tab for the BrowserTree
-     *  - one tab for the BrowserArtistList and the BrowserAlbumList
-     */
-    BrowserNoteBook = gtk_notebook_new();
-    //gtk_notebook_popup_enable(GTK_NOTEBOOK(BrowserNoteBook));
-    gtk_notebook_set_show_tabs(GTK_NOTEBOOK(BrowserNoteBook),FALSE);
-    gtk_notebook_set_show_border(GTK_NOTEBOOK(BrowserNoteBook),FALSE);
+    priv->entry_combo = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                            "browser_combo"));
+    /* History list */
+    Load_Path_Entry_List (priv->entry_model, MISC_COMBO_TEXT);
 
+    g_signal_connect_swapped (gtk_bin_get_child (GTK_BIN (priv->entry_combo)),
+                              "activate", G_CALLBACK (Browser_Entry_Activated),
+                              self);
 
-    /*
-     * The ScrollWindow and the Directory-Tree
-     */
-    ScrollWindowDirectoryTree = gtk_scrolled_window_new(NULL,NULL);
-    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(ScrollWindowDirectoryTree),
-                                   GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
-    directoryTreeModel = gtk_tree_store_new(TREE_COLUMN_COUNT,
-                                            G_TYPE_STRING,
-                                            G_TYPE_STRING,
-                                            G_TYPE_BOOLEAN,
-                                            G_TYPE_BOOLEAN,
-                                            G_TYPE_ICON);
-
-    Label = gtk_label_new(_("Tree"));
-    gtk_notebook_append_page(GTK_NOTEBOOK(BrowserNoteBook),ScrollWindowDirectoryTree,Label);
+    /* The button to select a directory to browse. */
+    priv->button = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                       "open_button"));
+    g_signal_connect_swapped (priv->button, "clicked",
+                              G_CALLBACK (File_Selection_Window_For_Directory),
+                              gtk_bin_get_child (GTK_BIN (priv->entry_combo)));
 
-    /* The tree view */
-    BrowserTree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(directoryTreeModel));
-    g_object_unref (directoryTreeModel);
-    gtk_container_add(GTK_CONTAINER(ScrollWindowDirectoryTree),BrowserTree);
-    gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(BrowserTree), TRUE);
-
-    // Column for the pixbuf + text
-    column = gtk_tree_view_column_new();
-    gtk_tree_view_column_set_title(column, _(BrowserTree_Titles[0]));
-
-    // Cell of the column for the pixbuf
-    renderer = gtk_cell_renderer_pixbuf_new();
-    gtk_tree_view_column_pack_start(column, renderer, FALSE);
-    gtk_tree_view_column_set_attributes(column, renderer,
-                                       "gicon", TREE_COLUMN_ICON,
-                                        NULL);
-    // Cell of the column for the text
-    renderer = gtk_cell_renderer_text_new();
-    gtk_tree_view_column_pack_start(column, renderer, FALSE);
-    gtk_tree_view_column_set_attributes(column, renderer,
-                                       "text", TREE_COLUMN_DIR_NAME,
-                                        NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(BrowserTree), column);
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-
-    Browser_Tree_Initialize();
+    /* The label for displaying number of files in path (without subdirs). */
+    /* Translators: No files, as in "0 files". */
+    priv->label = GTK_WIDGET (gtk_builder_get_object (builder, "files_label"));
 
+    /* Browser notebook: one tab for the priv->tree, one tab for the
+     * priv->artist_list and the priv->album_list. */
+    priv->notebook = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                         "directory_album_artist_notebook"));
 
-    /* Signals */
-    g_signal_connect(G_OBJECT(BrowserTree), "row-expanded",  G_CALLBACK(expand_cb),NULL);
-    g_signal_connect(G_OBJECT(BrowserTree), "row-collapsed", G_CALLBACK(collapse_cb),NULL);
-    g_signal_connect(G_OBJECT(gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserTree))),
-            "changed", G_CALLBACK(Browser_Tree_Node_Selected), NULL);
+    /* The ScrollWindow and the Directory-Tree. */
+    priv->directory_model = GTK_TREE_STORE (gtk_builder_get_object (builder,
+                                                                    "tree_model"));
 
-    g_signal_connect(G_OBJECT(BrowserTree),"key_press_event", G_CALLBACK(Browser_Tree_Key_Press),NULL);
+    /* The tree view */
+    priv->tree = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                     "directory_view"));
 
-    /* Create Popup Menu on browser tree view */
-    PopupMenu = gtk_ui_manager_get_widget(UIManager, "/DirPopup");
-    gtk_menu_attach_to_widget (GTK_MENU (PopupMenu), BrowserTree, NULL);
-    g_signal_connect (G_OBJECT (BrowserTree), "button-press-event",
-                      G_CALLBACK (Browser_Popup_Menu_Handler), PopupMenu);
+    Browser_Tree_Initialize (self);
 
+    /* Signals */
+    g_signal_connect_swapped (priv->tree, "row-expanded",
+                              G_CALLBACK (expand_cb), self);
+    g_signal_connect_swapped (priv->tree, "row-collapsed",
+                              G_CALLBACK (collapse_cb), self);
+    g_signal_connect_swapped (gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->tree)),
+                              "changed",
+                              G_CALLBACK (Browser_Tree_Node_Selected), self);
 
-    /*
-     * The ScrollWindows with the Artist and Album Lists
-     */
+    g_signal_connect (priv->tree, "key-press-event",
+                      G_CALLBACK (Browser_Tree_Key_Press), NULL);
 
-    ArtistAlbumVPaned = gtk_paned_new(GTK_ORIENTATION_VERTICAL);
-
-    Label = gtk_label_new(_("Artist & Album"));
-    gtk_notebook_append_page(GTK_NOTEBOOK(BrowserNoteBook),ArtistAlbumVPaned,Label);
-
-    ScrollWindowArtistList = gtk_scrolled_window_new(NULL,NULL);
-    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(ScrollWindowArtistList),
-                                   GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
-
-    artistListModel = gtk_list_store_new(ARTIST_COLUMN_COUNT,
-                                         G_TYPE_STRING, // Stock-id
-                                         G_TYPE_STRING,
-                                         G_TYPE_UINT,
-                                         G_TYPE_UINT,
-                                         G_TYPE_POINTER,
-                                         PANGO_TYPE_STYLE,
-                                         G_TYPE_INT,
-                                         GDK_TYPE_COLOR);
-
-    BrowserArtistList = gtk_tree_view_new_with_model(GTK_TREE_MODEL(artistListModel));
-    g_object_unref (artistListModel);
-    gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(BrowserArtistList), TRUE);
-    gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserArtistList)),GTK_SELECTION_SINGLE);
-
-
-    // Artist column
-    column = gtk_tree_view_column_new();
-    gtk_tree_view_column_set_title(column, _(ArtistList_Titles[0]));
-
-    renderer = gtk_cell_renderer_pixbuf_new();
-    gtk_tree_view_column_pack_start(column, renderer, FALSE);
-    gtk_tree_view_column_set_attributes(column, renderer,
-                                       "stock-id",        ARTIST_PIXBUF,
-                                        NULL);
-    renderer = gtk_cell_renderer_text_new();
-    gtk_tree_view_column_pack_start(column, renderer, FALSE);
-    gtk_tree_view_column_set_attributes(column, renderer,
-                                        "text",           ARTIST_NAME,
-                                        "weight",         ARTIST_FONT_WEIGHT,
-                                        "style",          ARTIST_FONT_STYLE,
-                                        "foreground-gdk", ARTIST_ROW_FOREGROUND,
-                                        NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(BrowserArtistList), column);
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-
-    // # Albums of Artist column
-    column = gtk_tree_view_column_new();
-    gtk_tree_view_column_set_title(column, _(ArtistList_Titles[1]));
-
-    renderer = gtk_cell_renderer_text_new();
-    gtk_tree_view_column_pack_start(column, renderer, FALSE);
-    gtk_tree_view_column_set_attributes(column, renderer,
-                                        "text",           ARTIST_NUM_ALBUMS,
-                                        "weight",         ARTIST_FONT_WEIGHT,
-                                        "style",          ARTIST_FONT_STYLE,
-                                        "foreground-gdk", ARTIST_ROW_FOREGROUND,
-                                        NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(BrowserArtistList), column);
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-
-    // # Files of Artist column
-    column = gtk_tree_view_column_new();
-    gtk_tree_view_column_set_title(column, _(ArtistList_Titles[2]));
-
-    renderer = gtk_cell_renderer_text_new();
-    gtk_tree_view_column_pack_start(column, renderer, FALSE);
-    gtk_tree_view_column_set_attributes(column, renderer,
-                                        "text",           ARTIST_NUM_FILES,
-                                        "weight",         ARTIST_FONT_WEIGHT,
-                                        "style",          ARTIST_FONT_STYLE,
-                                        "foreground-gdk", ARTIST_ROW_FOREGROUND,
-                                        NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(BrowserArtistList), column);
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-
-    g_signal_connect(G_OBJECT(gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserArtistList))),"changed",G_CALLBACK(Browser_Artist_List_Row_Selected),NULL);
-
-    gtk_container_add(GTK_CONTAINER(ScrollWindowArtistList),BrowserArtistList);
-
-    // Create Popup Menu on browser artist list
-    PopupMenu = gtk_ui_manager_get_widget(UIManager, "/DirArtistPopup");
-    gtk_menu_attach_to_widget (GTK_MENU (PopupMenu), BrowserArtistList, NULL);
-    g_signal_connect (G_OBJECT (BrowserArtistList), "button-press-event",
-                      G_CALLBACK (Browser_Popup_Menu_Handler), PopupMenu);
-    // Not available yet!
-    //ui_widget_set_sensitive(MENU_FILE, AM_ARTIST_OPEN_FILE_WITH, FALSE);
-
-    ScrollWindowAlbumList = gtk_scrolled_window_new(NULL,NULL);
-    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(ScrollWindowAlbumList),
-                                   GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
-
-    albumListModel = gtk_list_store_new (ALBUM_COLUMN_COUNT,
-                                         G_TYPE_ICON,
-                                         G_TYPE_STRING,
-                                         G_TYPE_UINT,
-                                         G_TYPE_POINTER,
-                                         PANGO_TYPE_STYLE,
-                                         G_TYPE_INT,
-                                         GDK_TYPE_COLOR,
-                                         G_TYPE_BOOLEAN);
-
-    BrowserAlbumList = gtk_tree_view_new_with_model(GTK_TREE_MODEL(albumListModel));
-    g_object_unref (albumListModel);
-    gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(BrowserAlbumList), TRUE);
-    gtk_tree_view_set_reorderable(GTK_TREE_VIEW(BrowserAlbumList), FALSE);
-    gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserAlbumList)), GTK_SELECTION_SINGLE);
-
-    // Album column
-    column = gtk_tree_view_column_new();
-    gtk_tree_view_column_set_title(column, _(AlbumList_Titles[0]));
-
-    renderer = gtk_cell_renderer_pixbuf_new();
-    gtk_tree_view_column_pack_start(column, renderer, FALSE);
-    gtk_tree_view_column_set_attributes (column, renderer, "gicon",
-                                         ALBUM_GICON, NULL);
-    renderer = gtk_cell_renderer_text_new();
-    gtk_tree_view_column_pack_start(column, renderer, FALSE);
-    gtk_tree_view_column_set_attributes(column, renderer,
-                                        "text",           ALBUM_NAME,
-                                        "weight",         ALBUM_FONT_WEIGHT,
-                                        "style",          ALBUM_FONT_STYLE,
-                                        "foreground-gdk", ALBUM_ROW_FOREGROUND,
-                                        NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(BrowserAlbumList), column);
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-
-    // # files column
-    column = gtk_tree_view_column_new();
-    gtk_tree_view_column_set_title(column, _(AlbumList_Titles[1]));
-
-    renderer = gtk_cell_renderer_text_new();
-    gtk_tree_view_column_pack_start(column, renderer, FALSE);
-    gtk_tree_view_column_set_attributes(column, renderer,
-                                        "text",           ALBUM_NUM_FILES,
-                                        "weight",         ALBUM_FONT_WEIGHT,
-                                        "style",          ALBUM_FONT_STYLE,
-                                        "foreground-gdk", ALBUM_ROW_FOREGROUND,
-                                        NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(BrowserAlbumList), column);
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-
-    g_signal_connect(G_OBJECT(gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserAlbumList))),"changed",G_CALLBACK(Browser_Album_List_Row_Selected),NULL);
-    gtk_container_add(GTK_CONTAINER(ScrollWindowAlbumList),BrowserAlbumList);
-
-    // Create Popup Menu on browser album list
-    PopupMenu = gtk_ui_manager_get_widget(UIManager, "/DirAlbumPopup");
-    gtk_menu_attach_to_widget (GTK_MENU (PopupMenu), BrowserAlbumList, NULL);
-    g_signal_connect (G_OBJECT (BrowserAlbumList), "button-press-event",
-                      G_CALLBACK (Browser_Popup_Menu_Handler), PopupMenu);
-    // Not available yet!
-    //ui_widget_set_sensitive(MENU_FILE, AM_ALBUM_OPEN_FILE_WITH, FALSE);
-
-
-    gtk_paned_pack1(GTK_PANED(ArtistAlbumVPaned),ScrollWindowArtistList,TRUE,TRUE); // Top side
-    gtk_paned_pack2(GTK_PANED(ArtistAlbumVPaned),ScrollWindowAlbumList,TRUE,TRUE);   // Bottom side
-    gtk_paned_set_position(GTK_PANED(ArtistAlbumVPaned),PANE_HANDLE_POSITION3);
+    /* Create popup menu on browser tree view. */
+    gtk_builder_add_from_resource (builder, "/org/gnome/EasyTAG/menus.ui",
+                                   &error);
 
+    if (error != NULL)
+    {
+        g_error ("Unable to get popup menu from resource: %s",
+                 error->message);
+    }
 
-    /*
-     * The ScrollWindow and the List
-     */
-    ScrollWindowFileList = gtk_scrolled_window_new(NULL,NULL);
-    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(ScrollWindowFileList),
-                                   GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
+    menu_model = G_MENU_MODEL (gtk_builder_get_object (builder,
+                                                       "directory-menu"));
+    priv->tree_menu = gtk_menu_new_from_model (menu_model);
+    gtk_menu_attach_to_widget (GTK_MENU (priv->tree_menu), priv->tree, NULL);
+    g_signal_connect (priv->tree, "button-press-event",
+                      G_CALLBACK (on_directory_tree_button_press_event), self);
+    g_signal_connect (priv->tree, "popup-menu",
+                      G_CALLBACK (on_directory_tree_popup_menu), self);
+
+    /* The ScrollWindows with the Artist and Album Lists. */
+    priv->artist_model = GTK_LIST_STORE (gtk_builder_get_object (builder,
+                                                                 "artist_model"));
+
+    priv->artist_list = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                            "artist_view"));
+    gtk_tree_selection_set_mode (gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->artist_list)),
+                                                              GTK_SELECTION_SINGLE);
+    priv->artist_selected_handler = g_signal_connect_swapped (gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->artist_list)),
+                                                              "changed",
+                                                              G_CALLBACK (Browser_Artist_List_Row_Selected),
+                                                              self);
+
+    /* Create popup menu on browser artist list. */
+    menu_model = G_MENU_MODEL (gtk_builder_get_object (builder,
+                                                       "directory-artist-menu"));
+    priv->artist_menu = gtk_menu_new_from_model (menu_model);
+    gtk_menu_attach_to_widget (GTK_MENU (priv->artist_menu), priv->artist_list,
+                               NULL);
+    g_signal_connect (priv->artist_list, "button-press-event",
+                      G_CALLBACK (on_artist_tree_button_press_event), self);
+    g_signal_connect (priv->artist_list, "popup-menu",
+                      G_CALLBACK (on_artist_tree_popup_menu), self);
+
+    priv->album_model = GTK_LIST_STORE (gtk_builder_get_object (builder,
+                                                                "album_model"));
+    priv->album_list = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                           "album_view"));
+    gtk_tree_selection_set_mode (gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->album_list)),
+                                 GTK_SELECTION_SINGLE);
+
+    priv->album_selected_handler = g_signal_connect_swapped (gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->album_list)),
+                                                             "changed",
+                                                             G_CALLBACK (Browser_Album_List_Row_Selected),
+                                                             self);
+
+    /* Create Popup Menu on browser album list. */
+    menu_model = G_MENU_MODEL (gtk_builder_get_object (builder,
+                                                       "directory-album-menu"));
+    priv->album_menu = gtk_menu_new_from_model (menu_model);
+    gtk_menu_attach_to_widget (GTK_MENU (priv->album_menu), priv->album_list,
+                               NULL);
+    g_signal_connect (priv->album_list, "button-press-event",
+                      G_CALLBACK (on_album_tree_button_press_event), self);
+    g_signal_connect (priv->album_list, "popup-menu",
+                      G_CALLBACK (on_album_tree_popup_menu), self);
 
     /* The file list */
-    fileListModel = gtk_list_store_new (LIST_COLUMN_COUNT,
-                                        G_TYPE_STRING, /* Filename. */
-                                        G_TYPE_STRING, /* Title tag. */
-                                        G_TYPE_STRING, /* Artist tag. */
-                                        G_TYPE_STRING, /* Album artist tag. */
-                                        G_TYPE_STRING, /* Album tag. */
-                                        G_TYPE_STRING, /* Year tag. */
-                                        G_TYPE_STRING, /* Disc/CD number tag. */
-                                        G_TYPE_STRING, /* Track tag. */
-                                        G_TYPE_STRING, /* Genre tag. */
-                                        G_TYPE_STRING, /* Comment tag. */
-                                        G_TYPE_STRING, /* Composer tag. */
-                                        G_TYPE_STRING, /* Orig. artist tag. */
-                                        G_TYPE_STRING, /* Copyright tag. */
-                                        G_TYPE_STRING, /* URL tag. */
-                                        G_TYPE_STRING, /* Encoded by tag. */
-                                        G_TYPE_POINTER, /* File pointer. */
-                                        G_TYPE_INT, /* File key. */
-                                        G_TYPE_BOOLEAN, /* File OtherDir. */
-                                        G_TYPE_INT, /* Font weight. */
-                                        GDK_TYPE_COLOR, /* Row background. */
-                                        GDK_TYPE_COLOR); /* Row foreground. */
-
-    BrowserList = gtk_tree_view_new_with_model(GTK_TREE_MODEL(fileListModel));
-    g_object_unref (fileListModel);
-    gtk_container_add(GTK_CONTAINER(ScrollWindowFileList), BrowserList);
-    gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(BrowserList), TRUE);
-    gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(BrowserList), FALSE);
-
+    priv->file_model = GTK_LIST_STORE (gtk_builder_get_object (builder,
+                                                               "files_model"));
+    priv->file_view = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                          "files_view"));
 
     /* Add columns to tree view. See ET_FILE_LIST_COLUMN. */
     for (i = 0; i <= LIST_FILE_ENCODED_BY; i++)
     {
-        guint ascending_sort = 2 * i;
-        column = gtk_tree_view_column_new ();
-        renderer = gtk_cell_renderer_text_new ();
-
-        gtk_tree_view_column_pack_start (column, renderer, FALSE);
-        gtk_tree_view_column_set_title (column, _(BrowserList_Titles[i]));
-        gtk_tree_view_column_set_attributes(column, renderer, "text", i,
-                                            "weight", LIST_FONT_WEIGHT,
-                                            "background-gdk",
-                                            LIST_ROW_BACKGROUND,
-                                            "foreground-gdk",
-                                            LIST_ROW_FOREGROUND, NULL);
-        gtk_tree_view_column_set_resizable (column, TRUE);
-        gtk_tree_view_append_column (GTK_TREE_VIEW (BrowserList), column);
-        gtk_tree_view_column_set_clickable (column, TRUE);
+        const guint ascending_sort = 2 * i;
+        GtkTreeViewColumn *column = GTK_TREE_VIEW_COLUMN (gtk_builder_get_object (builder, ids[i]));
+
+        g_object_set_data (G_OBJECT (column), "browser", self);
         g_signal_connect (column, "clicked",
-                          G_CALLBACK (et_browser_set_sorting_file_mode),
+                          G_CALLBACK (et_browser_on_column_clicked),
                           GINT_TO_POINTER (ascending_sort));
     }
 
-    gtk_tree_view_set_reorderable(GTK_TREE_VIEW(BrowserList), FALSE);
-    gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserList)),GTK_SELECTION_MULTIPLE);
-    // When selecting a line
-    gtk_tree_selection_set_select_function(gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserList)), Browser_List_Select_Func, NULL, NULL);
+    g_signal_connect_swapped (MainSettings, "changed::sort-mode",
+                              G_CALLBACK (on_sort_mode_changed), self);
+    gtk_tree_selection_set_mode (gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->file_view)),
+                                 GTK_SELECTION_MULTIPLE);
+    /* When selecting a line. */
+    gtk_tree_selection_set_select_function (gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->file_view)),
+                                            Browser_List_Select_Func, self,
+                                            NULL);
     // To sort list
-    gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (fileListModel), 0,
+    gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (priv->file_model), 0,
                                       Browser_List_Sort_Func, NULL, NULL);
-    Browser_List_Refresh_Sort();
-    gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(fileListModel), 0, GTK_SORT_ASCENDING);
-
-    g_signal_connect(G_OBJECT(gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserList))),
-            "changed", G_CALLBACK(Browser_List_Row_Selected), NULL);
-    g_signal_connect(G_OBJECT(BrowserList),"key_press_event", G_CALLBACK(Browser_List_Key_Press),NULL);
-    g_signal_connect(G_OBJECT(BrowserList),"button_press_event", G_CALLBACK(Browser_List_Button_Press),NULL);
-
-
-    /*
-     * Create Popup Menu on file list
-     */
-    PopupMenu = gtk_ui_manager_get_widget(UIManager, "/FilePopup");
-    gtk_menu_attach_to_widget (GTK_MENU (PopupMenu), BrowserList, NULL);
-    g_signal_connect(G_OBJECT(BrowserList),"button-press-event",
-                     G_CALLBACK (Browser_Popup_Menu_Handler), PopupMenu);
-
-    /*
-     * The list store for run program combos
-     */
-    RunProgramModel = gtk_list_store_new(MISC_COMBO_COUNT, G_TYPE_STRING);
-
-    /*
-     * The pane for the tree and list
-     */
-    BrowserHPaned = gtk_paned_new(GTK_ORIENTATION_HORIZONTAL);
-    gtk_box_pack_start(GTK_BOX(VerticalBox),BrowserHPaned,TRUE,TRUE,0);
-    gtk_paned_pack1(GTK_PANED(BrowserHPaned),BrowserNoteBook,TRUE,TRUE);   // Left side
-    gtk_paned_pack2(GTK_PANED(BrowserHPaned),ScrollWindowFileList,TRUE,TRUE); // Right side
-    gtk_paned_set_position(GTK_PANED(BrowserHPaned),PANE_HANDLE_POSITION2);
-
-    gtk_widget_show_all(VerticalBox);
+    et_browser_refresh_sort (self);
+    gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (priv->file_model),
+                                          0, GTK_SORT_ASCENDING);
+
+    priv->file_selected_handler = g_signal_connect_swapped (gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->file_view)),
+                                                            "changed",
+                                                            G_CALLBACK (Browser_List_Row_Selected),
+                                                            self);
+    g_signal_connect (priv->file_view, "key-press-event",
+                      G_CALLBACK (Browser_List_Key_Press), NULL);
+
+    /* Create popup menu on file list. */
+    menu_model = G_MENU_MODEL (gtk_builder_get_object (builder, "file-menu"));
+    priv->file_menu = gtk_menu_new_from_model (menu_model);
+    gtk_menu_attach_to_widget (GTK_MENU (priv->file_menu), priv->file_view,
+                               NULL);
+    g_signal_connect (priv->file_view, "button-press-event",
+                      G_CALLBACK (on_file_tree_button_press_event), self);
+    g_signal_connect (priv->file_view, "popup-menu",
+                      G_CALLBACK (on_file_tree_popup_menu), self);
+
+    g_object_unref (builder);
+
+    /* The list store for run program combos. */
+    priv->run_program_model = gtk_list_store_new(MISC_COMBO_COUNT, G_TYPE_STRING);
+
+    /* TODO: Give the browser area a sensible default size. */
+    gtk_widget_show_all (GTK_WIDGET (self));
 
     /* Set home variable as current path */
-    Browser_Update_Current_Path (g_get_home_dir ());
-
-    return VerticalBox;
+    et_browser_set_current_path (self, g_get_home_dir ());
 }
 
 /*
- * et_browser_set_sorting_file_mode:
+ * et_browser_on_column_clicked:
  * @column: the tree view column to sort
  * @data: the (required) #ET_Sorting_Type, converted to a pointer with
  * #GINT_TO_POINTER
  *
- * Set the #SORTING_FILE_MODE and display appropriate sort indicator when
+ * Set the sort mode and display appropriate sort indicator when
  * column is clicked.
  */
 static void
-et_browser_set_sorting_file_mode (GtkTreeViewColumn *column, gpointer data)
+et_browser_on_column_clicked (GtkTreeViewColumn *column, gpointer data)
 {
-    gint column_id = SORTING_FILE_MODE / 2;
-
-    if (gtk_tree_view_column_get_sort_indicator (column) == FALSE
-        && SORTING_FILE_MODE < SORTING_BY_ASCENDING_CREATION_DATE)
-    {
-        if (get_sort_order_for_column_id (SORTING_FILE_MODE / 2) == GTK_SORT_DESCENDING)
-        {
-            gtk_tree_view_column_set_sort_order (get_column_for_column_id (column_id),
-                                                 GTK_SORT_ASCENDING);
-        }
-        gtk_tree_view_column_set_sort_indicator (get_column_for_column_id (column_id),
-                                                 FALSE);
-    }
-    else if (gtk_tree_view_column_get_sort_order (column) == GTK_SORT_ASCENDING)
+    /* Flip to a descing sort mode if the row is already sorted ascending. */
+    if (gtk_tree_view_column_get_sort_order (column) == GTK_SORT_ASCENDING)
     {
-        gtk_tree_view_column_set_sort_order (column, GTK_SORT_DESCENDING);
+        g_settings_set_enum (MainSettings, "sort-mode",
+                             GPOINTER_TO_INT (data) + 1);
     }
     else
     {
-        gtk_tree_view_column_set_sort_order (column, GTK_SORT_ASCENDING);
+        g_settings_set_enum (MainSettings, "sort-mode",
+                             GPOINTER_TO_INT (data));
     }
+}
 
-    if (SORTING_FILE_MODE > SORTING_BY_DESCENDING_ENCODED_BY)
-    {
-        gtk_tree_view_column_set_sort_indicator (column, TRUE);
-        gtk_tree_view_column_set_sort_order (column, GTK_SORT_ASCENDING);
-    }
+/*******************************
+ * Scanner To Rename Directory *
+ *******************************/
+static void
+rename_directory_generate_preview (EtBrowser *self)
+{
+    EtBrowserPrivate *priv;
+    gchar *preview_text = NULL;
+    gchar *mask = NULL;
 
-    if (gtk_tree_view_column_get_sort_order (column) == GTK_SORT_ASCENDING)
-    {
-        SORTING_FILE_MODE = GPOINTER_TO_INT (data);
-    }
-    else
+    priv = et_browser_get_instance_private (self);
+
+    if (!ETCore->ETFileDisplayed
+    ||  !priv->rename_directory_dialog || !priv->rename_directory_mask_entry || !priv->rename_directory_preview_label)
+        return;
+
+    mask = g_settings_get_string (MainSettings,
+                                  "rename-directory-default-mask");
+
+    if (!mask)
+        return;
+
+    preview_text = et_scan_generate_new_filename_from_mask (ETCore->ETFileDisplayed,
+                                                            mask, FALSE);
+
+    if (GTK_IS_LABEL(priv->rename_directory_preview_label))
     {
-        SORTING_FILE_MODE = GPOINTER_TO_INT (data) + 1;
-    }
+        if (preview_text)
+        {
+            //gtk_label_set_text(GTK_LABEL(priv->rename_file_preview_label),preview_text);
+            gchar *tmp_string = g_markup_printf_escaped("%s",preview_text); // To avoid problem with strings containing characters like '&'
+            gchar *str = g_strdup_printf("<i>%s</i>",tmp_string);
+            gtk_label_set_markup(GTK_LABEL(priv->rename_directory_preview_label),str);
+            g_free(tmp_string);
+            g_free(str);
+        } else
+        {
+            gtk_label_set_text(GTK_LABEL(priv->rename_directory_preview_label),"");
+        }
 
-    gtk_tree_view_column_set_sort_indicator (column, TRUE);
+        // Force the window to be redrawed else the preview label may be not placed correctly
+        gtk_widget_queue_resize(priv->rename_directory_dialog);
+    }
 
-    Browser_List_Refresh_Sort ();
+    g_free(mask);
+    g_free(preview_text);
 }
 
-
 /*
  * The window to Rename a directory into the browser.
  */
-void Browser_Open_Rename_Directory_Window (void)
+void
+et_browser_show_rename_directory_dialog (EtBrowser *self)
 {
-    GtkWidget *VBox;
-    GtkWidget *HBox;
-    GtkWidget *Label;
-    GtkWidget *Button;
+    EtBrowserPrivate *priv;
+    GtkBuilder *builder;
+    GError *error = NULL;
+    GtkWidget *label;
+    GtkWidget *button;
     gchar *directory_parent = NULL;
     gchar *directory_name = NULL;
     gchar *directory_name_utf8 = NULL;
     gchar *address = NULL;
     gchar *string;
 
-    if (RenameDirectoryWindow != NULL)
+    priv = et_browser_get_instance_private (self);
+
+    if (priv->rename_directory_dialog != NULL)
     {
-        gtk_window_present(GTK_WINDOW(RenameDirectoryWindow));
+        gtk_window_present(GTK_WINDOW(priv->rename_directory_dialog));
         return;
     }
 
     /* We get the full path but we musn't display the parent directories */
-    directory_parent = g_strdup(BrowserCurrentPath);
+    directory_parent = g_strdup(priv->current_path);
     if (!directory_parent || strlen(directory_parent) == 0)
     {
         g_free(directory_parent);
@@ -3693,142 +4094,124 @@ void Browser_Open_Rename_Directory_Window (void)
 
     directory_name_utf8 = filename_to_display(directory_name);
 
-    RenameDirectoryWindow = gtk_dialog_new_with_buttons (_("Rename Directory"),
-                                                         GTK_WINDOW (MainWindow),
-                                                         GTK_DIALOG_DESTROY_WITH_PARENT,
-                                                         GTK_STOCK_CANCEL,
-                                                         GTK_RESPONSE_CANCEL,
-                                                         GTK_STOCK_APPLY,
-                                                         GTK_RESPONSE_APPLY,
-                                                         NULL);
+    builder = gtk_builder_new ();
+    gtk_builder_add_from_resource (builder,
+                                   "/org/gnome/EasyTAG/browser.ui",
+                                   &error);
+
+    if (error != NULL)
+    {
+        g_error ("Unable to get rename directory dialog from resource: %s",
+                 error->message);
+    }
+
+    priv->rename_directory_dialog = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                        "rename_directory_dialog"));
 
-    gtk_dialog_set_default_response (GTK_DIALOG (RenameDirectoryWindow),
+    gtk_window_set_transient_for (GTK_WINDOW (priv->rename_directory_dialog),
+                                  GTK_WINDOW (MainWindow));
+    gtk_dialog_set_default_response (GTK_DIALOG (priv->rename_directory_dialog),
                                      GTK_RESPONSE_APPLY);
 
     /* We attach useful data to the combobox */
-    g_object_set_data(G_OBJECT(RenameDirectoryWindow), "Parent_Directory", directory_parent);
-    g_object_set_data(G_OBJECT(RenameDirectoryWindow), "Current_Directory", directory_name);
-    g_signal_connect (RenameDirectoryWindow, "response",
-                      G_CALLBACK (et_rename_directory_on_response), NULL);
-
-    VBox = gtk_dialog_get_content_area (GTK_DIALOG (RenameDirectoryWindow));
-    gtk_container_set_border_width (GTK_CONTAINER (RenameDirectoryWindow),
-                                    BOX_SPACING);
-
-    string = g_strdup_printf(_("Rename the directory '%s' to:"),directory_name_utf8);
-    Label = gtk_label_new (string);
-    g_free(string);
-    gtk_box_pack_start(GTK_BOX(VBox),Label,FALSE,TRUE,0);
-    gtk_label_set_line_wrap(GTK_LABEL(Label),TRUE);
-
-    /* The combobox to rename the directory */
-    RenameDirectoryCombo = gtk_combo_box_text_new_with_entry();
-    gtk_box_pack_start(GTK_BOX(VBox),RenameDirectoryCombo,FALSE,FALSE,0);
+    g_object_set_data (G_OBJECT (priv->rename_directory_dialog),
+                       "Parent_Directory", directory_parent);
+    g_object_set_data (G_OBJECT (priv->rename_directory_dialog),
+                       "Current_Directory", directory_name);
+    g_signal_connect (priv->rename_directory_dialog, "response",
+                      G_CALLBACK (et_rename_directory_on_response), self);
+
+    string = g_strdup_printf (_("Rename the directory ‘%s’ to:"),
+                              directory_name_utf8);
+    label = GTK_WIDGET (gtk_builder_get_object (builder, "rename_label"));
+    gtk_label_set_label (GTK_LABEL (label), string);
+    g_free (string);
+    gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
+
+    /* The entry to rename the directory. */
+    priv->rename_directory_entry = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                       "rename_entry"));
     /* Set the directory into the combobox */
-    gtk_combo_box_text_prepend_text(GTK_COMBO_BOX_TEXT(RenameDirectoryCombo), directory_name_utf8);
-    gtk_combo_box_text_prepend_text(GTK_COMBO_BOX_TEXT(RenameDirectoryCombo), "");
-    gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(RenameDirectoryCombo))),directory_name_utf8);
-    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(RenameDirectoryCombo))));
-
-    /* Rename directory : check box + combo box + Status icon */
-    HBox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, BOX_SPACING);
-    gtk_box_pack_start(GTK_BOX(VBox),HBox,TRUE,TRUE,0);
-
-    RenameDirectoryWithMask = gtk_check_button_new_with_label(_("Use mask:"));
-    gtk_box_pack_start(GTK_BOX(HBox),RenameDirectoryWithMask,FALSE,FALSE,0);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(RenameDirectoryWithMask),RENAME_DIRECTORY_WITH_MASK);
-    gtk_widget_set_tooltip_text(RenameDirectoryWithMask,_("If activated, it will use masks to rename directory."));
-    g_signal_connect(G_OBJECT(RenameDirectoryWithMask),"toggled",G_CALLBACK(Rename_Directory_With_Mask_Toggled),NULL);
-
-    // Set up list model which is used by the combobox
-    /* Rename directory from mask */
-    if (!RenameDirectoryMaskModel)
-        RenameDirectoryMaskModel = gtk_list_store_new(MASK_EDITOR_COUNT, G_TYPE_STRING);
-    else
-        gtk_list_store_clear(RenameDirectoryMaskModel);
-
-    // The combo box to select the mask to apply
-    RenameDirectoryMaskCombo = gtk_combo_box_new_with_entry();
-    gtk_combo_box_set_model(GTK_COMBO_BOX(RenameDirectoryMaskCombo), GTK_TREE_MODEL(RenameDirectoryMaskModel));
-    gtk_combo_box_set_entry_text_column(GTK_COMBO_BOX(RenameDirectoryMaskCombo), MASK_EDITOR_TEXT);
-    gtk_widget_set_size_request(RenameDirectoryMaskCombo, 80, -1);
-
-    gtk_box_pack_start(GTK_BOX(HBox),RenameDirectoryMaskCombo,TRUE,TRUE,0);
-    gtk_widget_set_tooltip_text(GTK_WIDGET(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(RenameDirectoryMaskCombo)))),
-        _("Select or type in a mask using codes (see Legend in Scanner Window) to rename "
-        "the directory from tag fields."));
-    // Signal to generate preview (preview of the new directory)
-    g_signal_connect_swapped(G_OBJECT(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(RenameDirectoryMaskCombo)))),"changed",
-        G_CALLBACK(Scan_Rename_Directory_Generate_Preview),NULL);
-
-    // Load masks into the combobox from a file
-    Load_Rename_Directory_Masks_List(RenameDirectoryMaskModel, MASK_EDITOR_TEXT, Rename_Directory_Masks);
-    if (RENAME_DIRECTORY_DEFAULT_MASK)
-    {
-        Add_String_To_Combo_List(RenameDirectoryMaskModel, RENAME_DIRECTORY_DEFAULT_MASK);
-        gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(RenameDirectoryMaskCombo))), RENAME_DIRECTORY_DEFAULT_MASK);
-    }else
-    {
-        gtk_combo_box_set_active(GTK_COMBO_BOX(RenameDirectoryMaskCombo), 0);
-    }
+    gtk_entry_set_text (GTK_ENTRY (priv->rename_directory_entry),
+                        directory_name_utf8);
+
+    /* Rename directory : check box + entry + Status icon */
+    priv->rename_directory_mask_toggle = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                             "rename_mask_check"));
+    g_settings_bind (MainSettings, "rename-directory-with-mask",
+                     priv->rename_directory_mask_toggle, "active",
+                     G_SETTINGS_BIND_DEFAULT);
+    g_signal_connect_swapped (priv->rename_directory_mask_toggle, "toggled",
+                              G_CALLBACK (Rename_Directory_With_Mask_Toggled),
+                              self);
+
+    /* The entry to enter the mask to apply. */
+    priv->rename_directory_mask_entry = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                            "rename_mask_entry"));
+    gtk_widget_set_size_request(priv->rename_directory_mask_entry, 80, -1);
+
+    /* Signal to generate preview (preview of the new directory). */
+    g_signal_connect_swapped (priv->rename_directory_mask_entry,
+                              "changed",
+                              G_CALLBACK (rename_directory_generate_preview),
+                              self);
 
-    // Mask status icon
-    // Signal connection to check if mask is correct into the mask entry
-    g_signal_connect (gtk_bin_get_child (GTK_BIN (RenameDirectoryMaskCombo)),
-                      "changed", G_CALLBACK (entry_check_rename_file_mask),
-                      NULL);
+    g_settings_bind (MainSettings, "rename-directory-default-mask",
+                     priv->rename_directory_mask_entry, "text",
+                     G_SETTINGS_BIND_DEFAULT);
 
-    // Preview label
-    RenameDirectoryPreviewLabel = gtk_label_new (_("Rename directory preview"));
-    gtk_label_set_line_wrap(GTK_LABEL(RenameDirectoryPreviewLabel),TRUE);
-    ////gtk_widget_show(FillTagPreviewLabel);
-    gtk_box_pack_start(GTK_BOX(VBox),RenameDirectoryPreviewLabel,TRUE,TRUE,0);
+    /* Mask status icon. Signal connection to check if mask is correct to the
+     * mask entry. */
+    g_signal_connect (priv->rename_directory_mask_entry, "changed",
+                      G_CALLBACK (entry_check_rename_file_mask), NULL);
 
+    /* Preview label. */
+    priv->rename_directory_preview_label = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                               "rename_preview_label"));
     /* Button to save: to rename directory */
-    Button = gtk_dialog_get_widget_for_response (GTK_DIALOG (RenameDirectoryWindow),
+    button = gtk_dialog_get_widget_for_response (GTK_DIALOG (priv->rename_directory_dialog),
                                                  GTK_RESPONSE_APPLY);
-    g_signal_connect_swapped (gtk_bin_get_child (GTK_BIN (RenameDirectoryCombo)),
+    g_signal_connect_swapped (priv->rename_directory_entry,
                               "changed",
                               G_CALLBACK (empty_entry_disable_widget),
-                              G_OBJECT (Button));
+                              G_OBJECT (button));
 
-    gtk_widget_show_all(RenameDirectoryWindow);
+    g_object_unref (builder);
 
-    // To initialize the 'Use mask' check button state
-    g_signal_emit_by_name(G_OBJECT(RenameDirectoryWithMask),"toggled");
+    gtk_widget_show_all (priv->rename_directory_dialog);
 
-    // To initialize PreviewLabel + MaskStatusIconBox
-    g_signal_emit_by_name(G_OBJECT(gtk_bin_get_child(GTK_BIN(RenameDirectoryMaskCombo))),"changed");
+    /* To initialize the 'Use mask' check button state. */
+    g_signal_emit_by_name (G_OBJECT (priv->rename_directory_mask_toggle),
+                           "toggled");
 
-    g_free(directory_name_utf8);
+    /* To initialize PreviewLabel + MaskStatusIconBox. */
+    g_signal_emit_by_name (priv->rename_directory_mask_entry, "changed");
+
+    g_free (directory_name_utf8);
 }
 
 static void
-Destroy_Rename_Directory_Window (void)
+Destroy_Rename_Directory_Window (EtBrowser *self)
 {
-    if (RenameDirectoryWindow)
-    {
-        g_free(g_object_get_data(G_OBJECT(RenameDirectoryWindow),"Parent_Directory"));
-        g_free(g_object_get_data(G_OBJECT(RenameDirectoryWindow),"Current_Directory"));
+    EtBrowserPrivate *priv;
 
-        if (RENAME_DIRECTORY_DEFAULT_MASK) g_free(RENAME_DIRECTORY_DEFAULT_MASK);
-        RENAME_DIRECTORY_DEFAULT_MASK = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(RenameDirectoryMaskCombo)))));
-        Add_String_To_Combo_List(RenameDirectoryMaskModel, RENAME_DIRECTORY_DEFAULT_MASK);
-        Save_Rename_Directory_Masks_List(RenameDirectoryMaskModel, MASK_EDITOR_TEXT);
+    priv = et_browser_get_instance_private (self);
 
-        RENAME_DIRECTORY_WITH_MASK = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(RenameDirectoryWithMask));
-
-        gtk_list_store_clear(RenameDirectoryMaskModel);
+    if (priv->rename_directory_dialog)
+    {
+        g_free(g_object_get_data(G_OBJECT(priv->rename_directory_dialog),"Parent_Directory"));
+        g_free(g_object_get_data(G_OBJECT(priv->rename_directory_dialog),"Current_Directory"));
 
-        gtk_widget_destroy(RenameDirectoryWindow);
-        RenameDirectoryPreviewLabel = NULL;
-        RenameDirectoryWindow = NULL;
+        gtk_widget_destroy(priv->rename_directory_dialog);
+        priv->rename_directory_preview_label = NULL;
+        priv->rename_directory_dialog = NULL;
     }
 }
 
 static void
-Rename_Directory (void)
+Rename_Directory (EtBrowser *self)
 {
+    EtBrowserPrivate *priv;
     DIR   *dir;
     gchar *directory_parent;
     gchar *directory_last_name;
@@ -3842,23 +4225,30 @@ Rename_Directory (void)
     gchar *tmp_path_utf8;
     gint   fd_tmp;
 
+    priv = et_browser_get_instance_private (self);
 
-    g_return_if_fail (RenameDirectoryWindow != NULL);
+    g_return_if_fail (priv->rename_directory_dialog != NULL);
 
-    directory_parent    = g_object_get_data(G_OBJECT(RenameDirectoryWindow),"Parent_Directory");
-    directory_last_name = g_object_get_data(G_OBJECT(RenameDirectoryWindow),"Current_Directory");
+    directory_parent    = g_object_get_data(G_OBJECT(priv->rename_directory_dialog),"Parent_Directory");
+    directory_last_name = g_object_get_data(G_OBJECT(priv->rename_directory_dialog),"Current_Directory");
 
-    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(RenameDirectoryWithMask)))
+    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->rename_directory_mask_toggle)))
     {
-        // Renamed from mask
-        gchar *mask = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(RenameDirectoryMaskCombo)))));
-        directory_new_name = Scan_Generate_New_Directory_Name_From_Mask(ETCore->ETFileDisplayed,mask,FALSE);
-        g_free(mask);
+        /* Renamed from mask. */
+        gchar *mask;
 
-    }else
+        mask = g_settings_get_string (MainSettings,
+                                      "rename-directory-default-mask");
+        directory_new_name = et_scan_generate_new_directory_name_from_mask (ETCore->ETFileDisplayed,
+                                                                            mask,
+                                                                            FALSE);
+        g_free (mask);
+
+    }
+    else
     {
-        // Renamed 'manually'
-        directory_new_name  = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(RenameDirectoryCombo)))));
+        /* Renamed 'manually'. */
+        directory_new_name  = g_strdup (gtk_entry_get_text (GTK_ENTRY (priv->rename_directory_entry)));
     }
 
     /* Check if a name for the directory have been supplied */
@@ -3890,9 +4280,10 @@ Rename_Directory (void)
                                            GTK_DIALOG_MODAL  | GTK_DIALOG_DESTROY_WITH_PARENT,
                                            GTK_MESSAGE_ERROR,
                                            GTK_BUTTONS_CLOSE,
-                                           _("Could not convert '%s' into filename encoding."),
+                                           _("Could not convert ‘%s’ into filename encoding"),
                                            directory_new_name);
-        gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(msgdialog),_("Please use another name"));
+        gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (msgdialog),
+                                                  _("Please use another name."));
         gtk_window_set_title(GTK_WINDOW(msgdialog),_("Directory Name Error"));
 
         gtk_dialog_run(GTK_DIALOG(msgdialog));
@@ -3906,7 +4297,7 @@ Rename_Directory (void)
     if (directory_last_name && directory_new_name_file
     && strcmp(directory_last_name,directory_new_name_file)==0)
     {
-        Destroy_Rename_Directory_Window();
+        Destroy_Rename_Directory_Window (self);
         g_free(directory_new_name_file);
         return;
     }
@@ -3962,7 +4353,8 @@ Rename_Directory (void)
                                                GTK_BUTTONS_CLOSE,
                                                "%s",
                                                "Cannot rename file");
-            gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(msgdialog),_("The directory name '%s' already exists"),new_path_utf8);
+            gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (msgdialog),
+                                                      _("The directory name ‘%s’ already exists."),new_path_utf8);
             gtk_window_set_title(GTK_WINDOW(msgdialog),_("Rename File Error"));
 
             gtk_dialog_run(GTK_DIALOG(msgdialog));
@@ -4047,7 +4439,7 @@ Rename_Directory (void)
     }
 
     ET_Update_Directory_Name_Into_File_List(last_path,new_path);
-    Browser_Tree_Rename_Directory(last_path,new_path);
+    Browser_Tree_Rename_Directory (self, last_path, new_path);
 
     // To update file path in the browser entry
     if (ETCore->ETFileDisplayedList)
@@ -4055,12 +4447,12 @@ Rename_Directory (void)
         ET_Display_File_Data_To_UI(ETCore->ETFileDisplayed);
     }else
     {
-        gchar *tmp = filename_to_display(Browser_Get_Current_Path());
-        Browser_Entry_Set_Text(tmp);
+        gchar *tmp = filename_to_display (et_browser_get_current_path (self));
+        et_browser_entry_set_text (self, tmp);
         g_free(tmp);
     }
 
-    Destroy_Rename_Directory_Window();
+    Destroy_Rename_Directory_Window (self);
     g_free(last_path);
     g_free(last_path_utf8);
     g_free(new_path);
@@ -4068,15 +4460,23 @@ Rename_Directory (void)
     g_free(tmp_path);
     g_free(tmp_path_utf8);
     g_free(directory_new_name_file);
-    Statusbar_Message(_("Directory renamed"),TRUE);
+    et_application_window_status_bar_message (ET_APPLICATION_WINDOW (MainWindow),
+                                              _("Directory renamed"), TRUE);
 }
 
 static void
-Rename_Directory_With_Mask_Toggled (void)
+Rename_Directory_With_Mask_Toggled (EtBrowser *self)
 {
-    gtk_widget_set_sensitive(GTK_WIDGET(RenameDirectoryCombo),            !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(RenameDirectoryWithMask)));
-    gtk_widget_set_sensitive(GTK_WIDGET(RenameDirectoryMaskCombo),         gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(RenameDirectoryWithMask)));
-    gtk_widget_set_sensitive(GTK_WIDGET(RenameDirectoryPreviewLabel),      gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(RenameDirectoryWithMask)));
+    EtBrowserPrivate *priv;
+
+    priv = et_browser_get_instance_private (self);
+
+    gtk_widget_set_sensitive (priv->rename_directory_entry,
+                              !gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->rename_directory_mask_toggle)));
+    gtk_widget_set_sensitive (priv->rename_directory_mask_entry,
+                              gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->rename_directory_mask_toggle)));
+    gtk_widget_set_sensitive (priv->rename_directory_preview_label,
+                              gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->rename_directory_mask_toggle)));
 }
 
 
@@ -4084,106 +4484,121 @@ Rename_Directory_With_Mask_Toggled (void)
  * Window where is typed the name of the program to run, which
  * receives the current directory as parameter.
  */
-void Browser_Open_Run_Program_Tree_Window (void)
+void
+et_browser_show_open_directory_with_dialog (EtBrowser *self)
 {
-    GtkWidget *VBox;
-    GtkWidget *HBox;
-    GtkWidget *Label;
-    GtkWidget *RunProgramComboBox;
-    GtkWidget *Button;
+    EtBrowserPrivate *priv;
+    GtkBuilder *builder;
+    GError *error = NULL;
+    GtkWidget *button;
     gchar *current_directory = NULL;
 
-    if (RunProgramTreeWindow != NULL)
+    g_return_if_fail (ET_BROWSER (self));
+
+    priv = et_browser_get_instance_private (self);
+
+    if (priv->open_directory_with_dialog != NULL)
     {
-        gtk_window_present(GTK_WINDOW(RunProgramTreeWindow));
+        gtk_window_present(GTK_WINDOW(priv->open_directory_with_dialog));
         return;
     }
 
-    // Current directory
-    current_directory = g_strdup(BrowserCurrentPath);
+    /* Current directory. */
+    current_directory = g_strdup (priv->current_path);
+
     if (!current_directory || strlen(current_directory)==0)
         return;
 
-    RunProgramTreeWindow = gtk_dialog_new_with_buttons (_("Browse Directory With"),
-                                                        GTK_WINDOW (MainWindow),
-                                                        GTK_DIALOG_DESTROY_WITH_PARENT,
-                                                        GTK_STOCK_CANCEL,
-                                                        GTK_RESPONSE_CANCEL,
-                                                        GTK_STOCK_EXECUTE,
-                                                        GTK_RESPONSE_OK, NULL);
+    builder = gtk_builder_new ();
+    gtk_builder_add_from_resource (builder,
+                                   "/org/gnome/EasyTAG/browser.ui",
+                                   &error);
 
-    gtk_dialog_set_default_response (GTK_DIALOG (RunProgramTreeWindow),
-                                     GTK_RESPONSE_OK);
-    g_signal_connect (RunProgramTreeWindow, "response",
-                      G_CALLBACK (et_run_program_tree_on_response), NULL);
-    VBox = gtk_dialog_get_content_area (GTK_DIALOG (RunProgramTreeWindow));
-    gtk_container_set_border_width (GTK_CONTAINER (RunProgramTreeWindow),
-                                    BOX_SPACING);
+    if (error != NULL)
+    {
+        g_error ("Unable to get open directory with dialog from resource: %s",
+                 error->message);
+    }
 
-    Label = gtk_label_new(_("Program to run:"));
-    gtk_box_pack_start(GTK_BOX(VBox),Label,TRUE,FALSE,0);
-    gtk_label_set_line_wrap(GTK_LABEL(Label),TRUE);
+    priv->open_directory_with_dialog = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                           "open_directory_dialog"));
 
-    HBox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, BOX_SPACING);
-    gtk_box_pack_start(GTK_BOX(VBox),HBox,FALSE,FALSE,2);
+    gtk_window_set_transient_for (GTK_WINDOW (priv->open_directory_with_dialog),
+                                  GTK_WINDOW (MainWindow));
+    gtk_dialog_set_default_response (GTK_DIALOG (priv->open_directory_with_dialog),
+                                     GTK_RESPONSE_OK);
+    g_signal_connect (priv->open_directory_with_dialog, "response",
+                      G_CALLBACK (et_run_program_tree_on_response), self);
 
     /* The combobox to enter the program to run */
-    RunProgramComboBox = gtk_combo_box_new_with_model_and_entry(GTK_TREE_MODEL(RunProgramModel));
-    gtk_combo_box_set_entry_text_column(GTK_COMBO_BOX(RunProgramComboBox), MISC_COMBO_TEXT);
-    gtk_box_pack_start(GTK_BOX(HBox),RunProgramComboBox,TRUE,TRUE,0);
-    gtk_widget_set_size_request(GTK_WIDGET(RunProgramComboBox),250,-1);
-    gtk_widget_set_tooltip_text(GTK_WIDGET(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(RunProgramComboBox)))),_("Enter the program to run. "
-        "It will receive the current directory as parameter."));
+    priv->open_directory_with_combobox = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                             "open_directory_combo"));
+    gtk_combo_box_set_model (GTK_COMBO_BOX (priv->open_directory_with_combobox),
+                             GTK_TREE_MODEL (priv->run_program_model));
 
     /* History list */
-    gtk_list_store_clear(RunProgramModel);
-    Load_Run_Program_With_Directory_List(RunProgramModel, MISC_COMBO_TEXT);
-    g_signal_connect_swapped(G_OBJECT(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(RunProgramComboBox)))),"activate",
-        G_CALLBACK(Run_Program_With_Directory),G_OBJECT(RunProgramComboBox));
+    gtk_list_store_clear (priv->run_program_model);
+    Load_Run_Program_With_Directory_List (priv->run_program_model,
+                                          MISC_COMBO_TEXT);
+    g_signal_connect_swapped (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->open_directory_with_combobox))),
+                              "activate",
+                              G_CALLBACK (Run_Program_With_Directory),
+                              self);
 
     /* The button to Browse */
-    Button = gtk_button_new_from_stock(GTK_STOCK_OPEN);
-    gtk_box_pack_start(GTK_BOX(HBox),Button,FALSE,FALSE,0);
-    g_signal_connect_swapped(G_OBJECT(Button),"clicked",
-                             G_CALLBACK(File_Selection_Window_For_File),G_OBJECT(gtk_bin_get_child(GTK_BIN(RunProgramComboBox))));
+    button = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                 "open_directory_button"));
+    g_signal_connect_swapped (button, "clicked",
+                              G_CALLBACK (File_Selection_Window_For_File),
+                              G_OBJECT (gtk_bin_get_child (GTK_BIN (priv->open_directory_with_combobox))));
 
     /* We attach useful data to the combobox (into Run_Program_With_Directory) */
-    g_object_set_data(G_OBJECT(RunProgramComboBox), "Current_Directory", current_directory);
+    g_object_set_data (G_OBJECT (priv->open_directory_with_combobox),
+                       "Current_Directory", current_directory);
 
     /* Button to execute */
-    Button = gtk_dialog_get_widget_for_response (GTK_DIALOG (RunProgramTreeWindow),
+    button = gtk_dialog_get_widget_for_response (GTK_DIALOG (priv->open_directory_with_dialog),
                                                  GTK_RESPONSE_OK);
-    g_signal_connect_swapped(G_OBJECT(Button),"clicked", G_CALLBACK(Run_Program_With_Directory),G_OBJECT(RunProgramComboBox));
-    g_signal_connect_swapped (gtk_bin_get_child (GTK_BIN (RunProgramComboBox)),
+    g_signal_connect_swapped (button, "clicked",
+                              G_CALLBACK (Run_Program_With_Directory),
+                              self);
+    g_signal_connect_swapped (gtk_bin_get_child (GTK_BIN (priv->open_directory_with_combobox)),
                               "changed",
                               G_CALLBACK (empty_entry_disable_widget),
-                              G_OBJECT (Button));
-    g_signal_emit_by_name(G_OBJECT(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(RunProgramComboBox)))),"changed",NULL);
+                              G_OBJECT (button));
+    g_signal_emit_by_name (G_OBJECT (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->open_directory_with_combobox)))),
+                           "changed", NULL);
 
-    gtk_widget_show_all(RunProgramTreeWindow);
+    gtk_widget_show_all (priv->open_directory_with_dialog);
 }
 
 static void
-Destroy_Run_Program_Tree_Window (void)
+Destroy_Run_Program_Tree_Window (EtBrowser *self)
 {
-    if (RunProgramTreeWindow)
+    EtBrowserPrivate *priv;
+
+    priv = et_browser_get_instance_private (self);
+
+    if (priv->open_directory_with_dialog)
     {
-        gtk_widget_destroy(RunProgramTreeWindow);
-        RunProgramTreeWindow = NULL;
+        gtk_widget_hide (priv->open_directory_with_dialog);
     }
 }
 
-void Run_Program_With_Directory (GtkWidget *combobox)
+void
+Run_Program_With_Directory (EtBrowser *self)
 {
+    EtBrowserPrivate *priv;
     gchar *program_name;
     gchar *current_directory;
     GList *args_list = NULL;
     gboolean program_ran;
 
-    g_return_if_fail (GTK_IS_COMBO_BOX (combobox));
+    priv = et_browser_get_instance_private (self);
 
-    program_name      = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(combobox)))));
-    current_directory = g_object_get_data(G_OBJECT(combobox), "Current_Directory");
+    program_name = g_strdup (gtk_entry_get_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->open_directory_with_combobox)))));
+    current_directory = g_object_get_data (G_OBJECT (priv->open_directory_with_combobox),
+                                           "Current_Directory");
 #ifdef G_OS_WIN32
     /* On win32 : 'winamp.exe "c:\path\to\dir"' succeed, while 'winamp.exe "c:\path\to\dir\"' fails */
     ET_Win32_Path_Remove_Trailing_Backslash(current_directory);
@@ -4198,107 +4613,20 @@ void Run_Program_With_Directory (GtkWidget *combobox)
     if (program_ran)
     {
         // Append newest choice to the drop down list
-        Add_String_To_Combo_List(RunProgramModel, program_name);
+        Add_String_To_Combo_List(priv->run_program_model, program_name);
 
         // Save list attached to the combobox
-        Save_Run_Program_With_Directory_List(RunProgramModel, MISC_COMBO_TEXT);
+        Save_Run_Program_With_Directory_List(priv->run_program_model, MISC_COMBO_TEXT);
 
-        Destroy_Run_Program_Tree_Window();
+        Destroy_Run_Program_Tree_Window (self);
     }
     g_free(program_name);
 }
 
-/*
- * Window where is typed the name of the program to run, which
- * receives the current file as parameter.
- */
-void Browser_Open_Run_Program_List_Window (void)
-{
-    GtkWidget *VBox;
-    GtkWidget *HBox;
-    GtkWidget *Label;
-    GtkWidget *RunProgramComboBox;
-    GtkWidget *Button;
-
-    if (RunProgramListWindow != NULL)
-    {
-        gtk_window_present(GTK_WINDOW(RunProgramListWindow));
-        return;
-    }
-
-    RunProgramListWindow = gtk_dialog_new_with_buttons (_("Open Files With"),
-                                                        GTK_WINDOW (MainWindow),
-                                                        GTK_DIALOG_DESTROY_WITH_PARENT,
-                                                        GTK_STOCK_CANCEL,
-                                                        GTK_RESPONSE_CANCEL,
-                                                        GTK_STOCK_EXECUTE,
-                                                        GTK_RESPONSE_OK,
-                                                        NULL);
-
-    gtk_dialog_set_default_response (GTK_DIALOG (RunProgramListWindow),
-                                     GTK_RESPONSE_OK);
-    g_signal_connect ((RunProgramListWindow), "response",
-                      G_CALLBACK (et_run_program_list_on_response), NULL);
-
-    gtk_container_set_border_width (GTK_CONTAINER (RunProgramListWindow),
-                                    BOX_SPACING);
-
-    VBox = gtk_dialog_get_content_area (GTK_DIALOG (RunProgramListWindow));
-    gtk_container_set_border_width (GTK_CONTAINER(VBox), BOX_SPACING);
-
-    Label = gtk_label_new(_("Program to run:"));
-    gtk_box_pack_start(GTK_BOX(VBox),Label,TRUE,TRUE,0);
-    gtk_label_set_line_wrap(GTK_LABEL(Label),TRUE);
-
-    HBox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, BOX_SPACING);
-    gtk_box_pack_start(GTK_BOX(VBox),HBox,FALSE,FALSE,0);
-
-    /* The combobox to enter the program to run */
-    RunProgramComboBox = gtk_combo_box_new_with_model_and_entry(GTK_TREE_MODEL(RunProgramModel));
-    gtk_combo_box_set_entry_text_column(GTK_COMBO_BOX(RunProgramComboBox),MISC_COMBO_TEXT);
-    gtk_box_pack_start(GTK_BOX(HBox),RunProgramComboBox,TRUE,TRUE,0);
-    gtk_widget_set_size_request(GTK_WIDGET(RunProgramComboBox),250,-1);
-    gtk_widget_set_tooltip_text(GTK_WIDGET(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(RunProgramComboBox)))),_("Enter the program to run. "
-        "It will receive the current file as parameter."));
-
-    /* History list */
-    gtk_list_store_clear(RunProgramModel);
-    Load_Run_Program_With_File_List(RunProgramModel, MISC_COMBO_TEXT);
-    g_signal_connect_swapped(G_OBJECT(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(RunProgramComboBox)))),"activate",
-        G_CALLBACK(Run_Program_With_Selected_Files),G_OBJECT(RunProgramComboBox));
-
-    /* The button to Browse */
-    Button = gtk_button_new_from_stock(GTK_STOCK_OPEN);
-    gtk_box_pack_start(GTK_BOX(HBox),Button,FALSE,FALSE,0);
-    g_signal_connect_swapped(G_OBJECT(Button),"clicked",
-                             G_CALLBACK(File_Selection_Window_For_File),G_OBJECT(gtk_bin_get_child(GTK_BIN(RunProgramComboBox))));
-
-    /* Button to execute */
-    Button = gtk_dialog_get_widget_for_response (GTK_DIALOG (RunProgramListWindow),
-                                                 GTK_RESPONSE_OK);
-    g_signal_connect_swapped(G_OBJECT(Button),"clicked", G_CALLBACK(Run_Program_With_Selected_Files),G_OBJECT(RunProgramComboBox));
-    g_signal_connect_swapped (gtk_bin_get_child (GTK_BIN (RunProgramComboBox)),
-                              "changed",
-                              G_CALLBACK (empty_entry_disable_widget),
-                              G_OBJECT (Button));
-    g_signal_emit_by_name(G_OBJECT(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(RunProgramComboBox)))),"changed",NULL);
-
-    gtk_widget_show_all(RunProgramListWindow);
-}
-
 static void
-Destroy_Run_Program_List_Window (void)
-{
-    if (RunProgramListWindow)
-    {
-        gtk_widget_destroy(RunProgramListWindow);
-        RunProgramListWindow = NULL;
-    }
-}
-
-static void
-Run_Program_With_Selected_Files (GtkWidget *combobox)
+Run_Program_With_Selected_Files (EtBrowser *self)
 {
+    EtBrowserPrivate *priv;
     gchar   *program_name;
     ET_File *ETFile;
     GList   *selected_paths;
@@ -4307,23 +4635,24 @@ Run_Program_With_Selected_Files (GtkWidget *combobox)
     GtkTreeIter iter;
     gboolean program_ran;
 
-    if (!GTK_IS_COMBO_BOX(combobox) || !ETCore->ETFileDisplayedList)
+    priv = et_browser_get_instance_private (self);
+
+    if (!GTK_IS_COMBO_BOX (priv->open_files_with_combobox) || !ETCore->ETFileDisplayedList)
         return;
 
     // Programe name to run
-    program_name = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(combobox)))));
+    program_name = g_strdup (gtk_entry_get_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->open_files_with_combobox)))));
 
     // List of files to pass as parameters
-    selected_paths = gtk_tree_selection_get_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserList)), NULL);
+    selected_paths = gtk_tree_selection_get_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->file_view)), NULL);
 
     for (l = selected_paths; l != NULL; l = g_list_next (l))
     {
-        if (gtk_tree_model_get_iter (GTK_TREE_MODEL (fileListModel), &iter,
+        if (gtk_tree_model_get_iter (GTK_TREE_MODEL (priv->file_model), &iter,
                                      (GtkTreePath *)l->data))
         {
-            gtk_tree_model_get(GTK_TREE_MODEL(fileListModel), &iter,
-                               LIST_FILE_POINTER, &ETFile,
-                               -1);
+            gtk_tree_model_get (GTK_TREE_MODEL (priv->file_model), &iter,
+                                LIST_FILE_POINTER, &ETFile, -1);
 
             args_list = g_list_prepend (args_list,
                                         ((File_Name *)ETFile->FileNameCur->data)->value);
@@ -4340,19 +4669,115 @@ Run_Program_With_Selected_Files (GtkWidget *combobox)
     if (program_ran)
     {
         // Append newest choice to the drop down list
-        //gtk_list_store_prepend(GTK_LIST_STORE(RunProgramModel), &iter);
-        //gtk_list_store_set(RunProgramModel, &iter, MISC_COMBO_TEXT, program_name, -1);
-        Add_String_To_Combo_List(GTK_LIST_STORE(RunProgramModel), program_name);
+        //gtk_list_store_prepend(GTK_LIST_STORE(priv->run_program_model), &iter);
+        //gtk_list_store_set(priv->run_program_model, &iter, MISC_COMBO_TEXT, program_name, -1);
+        Add_String_To_Combo_List(GTK_LIST_STORE(priv->run_program_model), program_name);
 
         // Save list attached to the combobox
-        Save_Run_Program_With_File_List(RunProgramModel, MISC_COMBO_TEXT);
+        Save_Run_Program_With_File_List(priv->run_program_model, MISC_COMBO_TEXT);
 
-        Destroy_Run_Program_List_Window();
+        Destroy_Run_Program_List_Window (self);
     }
     g_free(program_name);
 }
 
 /*
+ * Window where is typed the name of the program to run, which
+ * receives the current file as parameter.
+ */
+void
+et_browser_show_open_files_with_dialog (EtBrowser *self)
+{
+    EtBrowserPrivate *priv;
+    GtkBuilder *builder;
+    GError *error = NULL;
+    GtkWidget *button;
+
+    g_return_if_fail (ET_BROWSER (self));
+
+    priv = et_browser_get_instance_private (self);
+
+    if (priv->open_files_with_dialog != NULL)
+    {
+        gtk_window_present(GTK_WINDOW(priv->open_files_with_dialog));
+        return;
+    }
+
+    builder = gtk_builder_new ();
+    gtk_builder_add_from_resource (builder,
+                                   "/org/gnome/EasyTAG/browser.ui",
+                                   &error);
+
+    if (error != NULL)
+    {
+        g_error ("Unable to get open with files dialog from resource: %s",
+                 error->message);
+    }
+
+    priv->open_files_with_dialog = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                       "open_files_dialog"));
+    gtk_dialog_set_default_response (GTK_DIALOG (priv->open_files_with_dialog),
+                                     GTK_RESPONSE_OK);
+    gtk_window_set_transient_for (GTK_WINDOW (priv->open_files_with_dialog),
+                                  GTK_WINDOW (MainWindow));
+    g_signal_connect ((priv->open_files_with_dialog), "response",
+                      G_CALLBACK (et_run_program_list_on_response), self);
+
+    /* The combobox to enter the program to run */
+    priv->open_files_with_combobox = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                         "open_files_combo"));
+    gtk_combo_box_set_model (GTK_COMBO_BOX (priv->open_files_with_combobox),
+                             GTK_TREE_MODEL (priv->run_program_model));
+    gtk_widget_set_size_request (GTK_WIDGET (priv->open_files_with_combobox),
+                                 250, -1);
+
+    /* History list */
+    gtk_list_store_clear (priv->run_program_model);
+    Load_Run_Program_With_File_List (priv->run_program_model, MISC_COMBO_TEXT);
+    g_signal_connect_swapped (gtk_bin_get_child (GTK_BIN (priv->open_files_with_combobox)),
+                              "activate",
+                              G_CALLBACK (Run_Program_With_Selected_Files),
+			                  self);
+
+    /* The button to Browse */
+    button = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                 "open_files_button"));
+    g_signal_connect_swapped (button, "clicked",
+                              G_CALLBACK (File_Selection_Window_For_File),
+                              G_OBJECT (gtk_bin_get_child (GTK_BIN (priv->open_files_with_combobox))));
+
+    g_object_unref (builder);
+
+    /* Button to execute */
+    button = gtk_dialog_get_widget_for_response (GTK_DIALOG (priv->open_files_with_dialog),
+                                                 GTK_RESPONSE_OK);
+    g_signal_connect_swapped (button, "clicked",
+                              G_CALLBACK (Run_Program_With_Selected_Files),
+			                  self);
+    g_signal_connect_swapped (gtk_bin_get_child (GTK_BIN (priv->open_files_with_combobox)),
+                              "changed",
+                              G_CALLBACK (empty_entry_disable_widget),
+                              G_OBJECT (button));
+    g_signal_emit_by_name (gtk_bin_get_child (GTK_BIN (priv->open_files_with_combobox)),
+                           "changed", NULL);
+
+    gtk_widget_show_all (priv->open_files_with_dialog);
+}
+
+static void
+Destroy_Run_Program_List_Window (EtBrowser *self)
+{
+    EtBrowserPrivate *priv;
+
+    priv = et_browser_get_instance_private (self);
+
+    if (priv->open_files_with_dialog)
+    {
+        gtk_widget_hide (priv->open_files_with_dialog);
+    }
+}
+
+/*
  * empty_entry_disable_widget:
  * @widget: a widget to set sensitive if @entry contains text
  * @entry: the entry for which to test the text
@@ -4383,14 +4808,18 @@ static void
 et_rename_directory_on_response (GtkDialog *dialog, gint response_id,
                                  gpointer user_data)
 {
+    EtBrowser *self;
+
+    self = ET_BROWSER (user_data);
+
     switch (response_id)
     {
         case GTK_RESPONSE_APPLY:
-            Rename_Directory ();
+            Rename_Directory (self);
             break;
         case GTK_RESPONSE_CANCEL:
         case GTK_RESPONSE_DELETE_EVENT:
-            Destroy_Rename_Directory_Window ();
+            Destroy_Rename_Directory_Window (self);
             break;
         default:
             g_assert_not_reached ();
@@ -4409,6 +4838,10 @@ static void
 et_run_program_tree_on_response (GtkDialog *dialog, gint response_id,
                                  gpointer user_data)
 {
+    EtBrowser *self;
+
+    self = ET_BROWSER (user_data);
+
     switch (response_id)
     {
         case GTK_RESPONSE_OK:
@@ -4416,7 +4849,7 @@ et_run_program_tree_on_response (GtkDialog *dialog, gint response_id,
             break;
         case GTK_RESPONSE_CANCEL:
         case GTK_RESPONSE_DELETE_EVENT:
-            Destroy_Run_Program_Tree_Window ();
+            Destroy_Run_Program_Tree_Window (self);
             break;
         default:
             g_assert_not_reached ();
@@ -4434,6 +4867,10 @@ static void
 et_run_program_list_on_response (GtkDialog *dialog, gint response_id,
                                  gpointer user_data)
 {
+    EtBrowser *self;
+
+    self = ET_BROWSER (user_data);
+
     switch (response_id)
     {
         case GTK_RESPONSE_OK:
@@ -4441,7 +4878,7 @@ et_run_program_list_on_response (GtkDialog *dialog, gint response_id,
             break;
         case GTK_RESPONSE_CANCEL:
         case GTK_RESPONSE_DELETE_EVENT:
-            Destroy_Run_Program_List_Window ();
+            Destroy_Run_Program_List_Window (self);
             break;
         default:
             g_assert_not_reached ();
@@ -4458,9 +4895,12 @@ et_run_program_list_on_response (GtkDialog *dialog, gint response_id,
  * Returns: the sort order for @column_id
  */
 GtkSortType
-get_sort_order_for_column_id (gint column_id)
+et_browser_get_sort_order_for_column_id (EtBrowser *self, gint column_id)
 {
-    return gtk_tree_view_column_get_sort_order (get_column_for_column_id (column_id));
+    GtkTreeViewColumn *column;
+
+    column = et_browser_get_column_for_column_id (self, column_id);
+    return gtk_tree_view_column_get_sort_order (column);
 }
 
 /*
@@ -4472,7 +4912,83 @@ get_sort_order_for_column_id (gint column_id)
  * Returns: (transfer none): the tree view column corresponding to @column_id
  */
 GtkTreeViewColumn *
-get_column_for_column_id (gint column_id)
+et_browser_get_column_for_column_id (EtBrowser *self, gint column_id)
+{
+    EtBrowserPrivate *priv;
+
+    priv = et_browser_get_instance_private (self);
+
+    return gtk_tree_view_get_column (GTK_TREE_VIEW (priv->file_view),
+                                     column_id);
+}
+
+static void
+et_browser_destroy (GtkWidget *widget)
+{
+    EtBrowserPrivate *priv;
+
+    priv = et_browser_get_instance_private (ET_BROWSER (widget));
+
+    /* Save combobox history list before exit. */
+    if (priv->entry_model)
+    {
+        Save_Path_Entry_List (priv->entry_model, MISC_COMBO_TEXT);
+        priv->entry_model = NULL;
+        /* The model is disposed when the combo box is disposed. */
+    }
+
+    GTK_WIDGET_CLASS (et_browser_parent_class)->destroy (widget);
+}
+
+static void
+et_browser_finalize (GObject *object)
+{
+    EtBrowserPrivate *priv;
+
+    priv = et_browser_get_instance_private (ET_BROWSER (object));
+
+    g_free (priv->current_path);
+    priv->current_path = NULL;
+    g_clear_object (&priv->run_program_model);
+
+    G_OBJECT_CLASS (et_browser_parent_class)->finalize (object);
+}
+
+static void
+et_browser_init (EtBrowser *self)
+{
+    EtBrowserPrivate *priv;
+
+    priv = self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, ET_TYPE_BROWSER,
+                                                     EtBrowserPrivate);
+
+    priv->open_directory_with_dialog = NULL;
+    priv->open_directory_with_combobox = NULL;
+    priv->open_files_with_dialog = NULL;
+    priv->open_files_with_combobox = NULL;
+    priv->current_path = NULL;
+
+    create_browser (self);
+}
+
+static void
+et_browser_class_init (EtBrowserClass *klass)
+{
+    G_OBJECT_CLASS (klass)->finalize = et_browser_finalize;
+    GTK_WIDGET_CLASS (klass)->destroy = et_browser_destroy;
+
+    g_type_class_add_private (klass, sizeof (EtBrowserPrivate));
+}
+
+/*
+ * et_browser_new:
+ *
+ * Create a new EtBrowser instance.
+ *
+ * Returns: a new #EtBrowser
+ */
+EtBrowser *
+et_browser_new (void)
 {
-    return gtk_tree_view_get_column (GTK_TREE_VIEW (BrowserList), column_id);
+    return g_object_new (ET_TYPE_BROWSER, NULL);
 }
diff --git a/src/browser.h b/src/browser.h
index 425754f..f9fa977 100644
--- a/src/browser.h
+++ b/src/browser.h
@@ -1,4 +1,3 @@
-/* browser.h - 2000/04/28 */
 /*
  *  EasyTAG - Tag editor for MP3 and Ogg Vorbis files
  *  Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
@@ -19,180 +18,106 @@
  */
 
 
-#ifndef __BROWSER_H__
-#define __BROWSER_H__
+#ifndef ET_BROWSER_H_
+#define ET_BROWSER_H_
 
 #include "et_core.h"
 
+#include <gtk/gtk.h>
 
-/****************
- * Declarations *
- ****************/
+G_BEGIN_DECLS
 
-/*
- * Data attached to each row of the artist list
- */
-#if 0
-typedef struct _ArtistRow ArtistRow;
-struct _ArtistRow
-{
-    GList *AlbumList; // It's a list of AlbumList items...
-};
-#endif
+#define ET_TYPE_BROWSER (et_browser_get_type ())
+#define ET_BROWSER(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), ET_TYPE_BROWSER, EtBrowser))
 
-/*
- * Data attached to each row of the artist list
- */
-#if 0
-typedef struct _AlbumRow AlbumRow;
-struct _AlbumRow
-{
-    GList *ETFileList; // It's a list of ETFile items...
-};
-#endif
+typedef struct _EtBrowser EtBrowser;
+typedef struct _EtBrowserClass EtBrowserClass;
+typedef struct _EtBrowserPrivate EtBrowserPrivate;
 
-/*
- * To number columns of ComboBox
- */
-enum
+struct _EtBrowser
 {
-    MISC_COMBO_TEXT, // = 0 (First column)
-    MISC_COMBO_COUNT // = 1 (Number of columns in ComboBox)
+    /*< private >*/
+    GtkBin parent_instance;
+    EtBrowserPrivate *priv;
 };
 
-
-enum
+struct _EtBrowserClass
 {
-    TREE_COLUMN_DIR_NAME,
-    TREE_COLUMN_FULL_PATH,
-    TREE_COLUMN_SCANNED,
-    TREE_COLUMN_HAS_SUBDIR,
-    TREE_COLUMN_ICON,
-    TREE_COLUMN_COUNT
+    /*< private >*/
+    GtkBinClass parent_class;
 };
 
-enum
-{
-    LIST_FILE_NAME,
-    /* Tag fields. */
-    LIST_FILE_TITLE,
-    LIST_FILE_ARTIST,
-    LIST_FILE_ALBUM_ARTIST,
-    LIST_FILE_ALBUM,
-    LIST_FILE_YEAR,
-    LIST_FILE_DISCNO,
-    LIST_FILE_TRACK,
-    LIST_FILE_GENRE,
-    LIST_FILE_COMMENT,
-    LIST_FILE_COMPOSER,
-    LIST_FILE_ORIG_ARTIST,
-    LIST_FILE_COPYRIGHT,
-    LIST_FILE_URL,
-    LIST_FILE_ENCODED_BY,
-    /* End of columns with associated UI columns. */
-    LIST_FILE_POINTER,
-    LIST_FILE_KEY,
-    LIST_FILE_OTHERDIR, /* To change color for alternate directories. */
-    LIST_FONT_WEIGHT,
-    LIST_ROW_BACKGROUND,
-    LIST_ROW_FOREGROUND,
-    LIST_COLUMN_COUNT
-};
+GType et_browser_get_type (void);
+EtBrowser *et_browser_new (void);
+void et_browser_show_open_directory_with_dialog (EtBrowser *self);
+void et_browser_show_open_files_with_dialog (EtBrowser *self);
+void et_browser_show_rename_directory_dialog (EtBrowser *self);
 
-enum
+typedef enum
 {
-    ARTIST_PIXBUF,
-    ARTIST_NAME,
-    ARTIST_NUM_ALBUMS,
-    ARTIST_NUM_FILES,
-    ARTIST_ALBUM_LIST_POINTER,
-    ARTIST_FONT_STYLE,
-    ARTIST_FONT_WEIGHT,
-    ARTIST_ROW_FOREGROUND,
-    ARTIST_COLUMN_COUNT
-};
+    ET_BROWSER_MODE_FILE,
+    ET_BROWSER_MODE_ARTIST
+} EtBrowserMode;
 
+/*
+ * To number columns of ComboBox
+ */
 enum
 {
-    ALBUM_GICON,
-    ALBUM_NAME,
-    ALBUM_NUM_FILES,
-    ALBUM_ETFILE_LIST_POINTER,
-    ALBUM_FONT_STYLE,
-    ALBUM_FONT_WEIGHT,
-    ALBUM_ROW_FOREGROUND,
-    ALBUM_ALL_ALBUMS_ROW,
-    ALBUM_COLUMN_COUNT
+    MISC_COMBO_TEXT, // = 0 (First column)
+    MISC_COMBO_COUNT // = 1 (Number of columns in ComboBox)
 };
 
-
-GtkWidget *BrowserList;
-GtkWidget *BrowserAlbumList;
-GtkWidget *BrowserArtistList;
-GtkWidget *BrowserEntryCombo;
-GtkListStore *BrowserEntryModel;
-GtkWidget *BrowserHPaned;
-GtkWidget *ArtistAlbumVPaned;
-
-GtkWidget *RenameDirectoryWindow;
-GtkWidget *RenameDirectoryMaskCombo;
-GtkWidget *RenameDirectoryPreviewLabel;
-
-
-/**************
- * Prototypes *
- **************/
-
-GtkWidget   *Create_Browser_Items    (GtkWidget *parent);
-
-void browser_album_model_clear (void);
-void browser_artist_model_clear (void);
-void browser_file_model_clear (void);
-
-gboolean     Browser_Tree_Select_Dir (const gchar *current_path);
-void         Browser_Tree_Rebuild    (gchar *path_to_load);
-void         Browser_Tree_Collapse   (void);
-
-void         Browser_List_Load_File_List            (GList *etfilelist, ET_File *etfile_to_select);
-void         Browser_List_Refresh_Whole_List        (void);
-void         Browser_List_Refresh_File_In_List      (ET_File *ETFile);
-void         Browser_List_Clear                     (void);
-void         Browser_List_Select_File_By_Etfile     (ET_File *ETFile, gboolean select_it);
-GtkTreePath *Browser_List_Select_File_By_Etfile2    (ET_File *searchETFile, gboolean select_it, GtkTreePath *startPath);
-ET_File     *Browser_List_Select_File_By_Iter_String(const gchar* stringiter, gboolean select_it);
-ET_File     *Browser_List_Select_File_By_DLM        (const gchar* string, gboolean select_it);
-void         Browser_List_Refresh_Sort            (void);
-void         Browser_List_Select_All_Files        (void);
-void         Browser_List_Unselect_All_Files      (void);
-void         Browser_List_Invert_File_Selection   (void);
-void         Browser_List_Remove_File             (ET_File *ETFile);
-ET_File     *Browser_List_Get_ETFile_From_Path    (GtkTreePath *path);
-ET_File     *Browser_List_Get_ETFile_From_Iter    (GtkTreeIter *iter);
-
-void         Browser_Entry_Set_Text      (gchar *text);
-void         Browser_Label_Set_Text      (gchar *text);
-
-void         Browser_Display_Tree_Or_Artist_Album_List (void);
-
-void         Browser_Area_Set_Sensitive  (gboolean activate);
-
-void         Browser_Load_Home_Directory            (void);
-void		 Browser_Load_Desktop_Directory 		(void);
-void		 Browser_Load_Documents_Directory 		(void);
-void		 Browser_Load_Downloads_Directory 		(void);
-void 		 Browser_Load_Music_Directory 			(void);
-void et_browser_on_action_parent_directory (void);
-
-void         Browser_Load_Default_Directory         (void);
-void         Browser_Reload_Directory               (void);
-void         Set_Current_Path_As_Default            (void);
-gchar       *Browser_Get_Current_Path               (void);
-
-void         Browser_Open_Rename_Directory_Window (void);
-void         Browser_Open_Run_Program_Tree_Window (void);
-void         Browser_Open_Run_Program_List_Window (void);
-
-GtkTreeViewColumn *get_column_for_column_id (gint column_id);
-GtkSortType get_sort_order_for_column_id (gint column_id);
-
-#endif /* __BROWSER_H__ */
+void et_browser_clear_album_model (EtBrowser *self);
+void et_browser_clear_artist_model (EtBrowser *self);
+
+void et_browser_select_dir (EtBrowser *self, const gchar *current_path);
+void et_browser_reload (EtBrowser *self);
+void et_browser_collapse (EtBrowser *self);
+void et_browser_set_sensitive (EtBrowser *self, gboolean sensitive);
+
+void et_browser_load_file_list (EtBrowser *self, GList *etfilelist, const ET_File *etfile_to_select);
+void et_browser_refresh_list (EtBrowser *self);
+void et_browser_refresh_file_in_list (EtBrowser *self, const ET_File *ETFile);
+void et_browser_clear (EtBrowser *self);
+void et_browser_select_file_by_et_file (EtBrowser *self, const ET_File *ETFile, gboolean select_it);
+GtkTreePath * et_browser_select_file_by_et_file2 (EtBrowser *self, const ET_File *searchETFile, gboolean select_it, GtkTreePath *startPath);
+void et_browser_select_file_by_iter_string (EtBrowser *self, const gchar* stringiter, gboolean select_it);
+ET_File *et_browser_select_file_by_dlm (EtBrowser *self, const gchar* string, gboolean select_it);
+void et_browser_refresh_sort (EtBrowser *self);
+void et_browser_select_all (EtBrowser *self);
+void et_browser_unselect_all (EtBrowser *self);
+void et_browser_invert_selection (EtBrowser *self);
+void et_browser_remove_file (EtBrowser *self, const ET_File *ETFile);
+ET_File * et_browser_get_et_file_from_path (EtBrowser *self, GtkTreePath *path);
+ET_File * et_browser_get_et_file_from_iter (EtBrowser *self, GtkTreeIter *iter);
+
+void et_browser_entry_set_text (EtBrowser *self, const gchar *text);
+void et_browser_label_set_text (EtBrowser *self, const gchar *text);
+
+void et_browser_set_display_mode (EtBrowser *self, EtBrowserMode mode);
+
+void et_browser_go_home (EtBrowser *self);
+void et_browser_go_desktop (EtBrowser *self);
+void et_browser_go_documents (EtBrowser *self);
+void et_browser_go_downloads (EtBrowser *self);
+void et_browser_go_music (EtBrowser *self);
+void et_browser_go_parent (EtBrowser *self);
+
+void et_browser_run_player_for_album_list (EtBrowser *self);
+void et_browser_run_player_for_artist_list (EtBrowser *self);
+void et_browser_run_player_for_selection (EtBrowser *self);
+
+void et_browser_load_default_dir (EtBrowser *self);
+void et_browser_reload_directory (EtBrowser *self);
+void et_browser_set_current_path_default (EtBrowser *self);
+const gchar * et_browser_get_current_path (EtBrowser *self);
+
+GtkTreeSelection * et_browser_get_selection (EtBrowser *self);
+
+GtkTreeViewColumn * et_browser_get_column_for_column_id (EtBrowser *self, gint column_id);
+GtkSortType et_browser_get_sort_order_for_column_id (EtBrowser *self, gint column_id);
+
+G_END_DECLS
+
+#endif /* ET_BROWSER_H_ */
diff --git a/src/cddb.c b/src/cddb.c
deleted file mode 100644
index 3751250..0000000
--- a/src/cddb.c
+++ /dev/null
@@ -1,4332 +0,0 @@
-/* cddb.c - 2000/09/15 */
-/*
- *  EasyTAG - Tag editor for MP3 and Ogg Vorbis files
- *  Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
- *
- *  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
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include "config.h"
-
-#include <gtk/gtk.h>
-#include <gdk/gdkkeysyms.h>
-#include <glib/gi18n.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <string.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include "win32/win32dep.h"
-#ifndef G_OS_WIN32
-#include <sys/socket.h>
-/* Patch OpenBSD from Jim Geovedi. */
-#include <netinet/in.h>
-#include <arpa/inet.h>
-/* End patch */
-#include <netdb.h>
-#endif /* !G_OS_WIN32 */
-#include <errno.h>
-
-#include "gtk2_compat.h"
-#include "cddb.h"
-#include "easytag.h"
-#include "et_core.h"
-#include "browser.h"
-#include "scan_dialog.h"
-#include "log.h"
-#include "misc.h"
-#include "setting.h"
-#include "id3_tag.h"
-#include "setting.h"
-#include "charset.h"
-
-/*
- * Structure used for each item of the album list. Aslo attached to each row of
- * the album list
- */
-typedef struct
-{
-    gchar *server_name; /* Remote access: server name. Local access : NULL */
-    guint server_port; /* Remote access: server port. Local access: 0 */
-    gchar *server_cgi_path; /* Remote access: server CGI path.
-                             * Local access: discid file path */
-
-    GdkPixbuf *bitmap; /* Pixmap logo for the server. */
-
-    gchar *artist_album; /* CDDB artist+album (allocated) */
-    gchar *category; /* CDDB genre (allocated) */
-    gchar *id; /* example : 8d0de30c (allocated) */
-    GList *track_list; /* List of CddbTrackAlbum items. */
-    gboolean other_version; /* TRUE if this album is another version of the
-                             * previous one. */
-
-    /* Filled when loading the track list. */
-    gchar *artist; /* (allocated) */
-    gchar *album; /* (allocated) */
-    gchar *genre; /* (allocated) */
-    gchar *year; /* (allocated) */
-    guint duration;
-} CddbAlbum;
-
-
-/*
- * Structure used for each item of the track_list of the CddbAlbum structure.
- */
-typedef struct
-{
-    guint track_number;
-    gchar *track_name; /* (allocated) */
-    guint duration;
-    CddbAlbum *cddbalbum; /* Pointer to the parent CddbAlbum structure (to
-                           * quickly access album properties). */
-} CddbTrackAlbum;
-
-
-typedef struct
-{
-    gulong offset;
-} CddbTrackFrameOffset;
-
-enum
-{
-    CDDB_ALBUM_LIST_PIXBUF,
-    CDDB_ALBUM_LIST_ALBUM,
-    CDDB_ALBUM_LIST_CATEGORY,
-    CDDB_ALBUM_LIST_DATA,
-    CDDB_ALBUM_LIST_FONT_STYLE,
-    CDDB_ALBUM_LIST_FONT_WEIGHT,
-    CDDB_ALBUM_LIST_FOREGROUND_COLOR,
-    CDDB_ALBUM_LIST_COUNT
-};
-
-enum
-{
-    CDDB_TRACK_LIST_NUMBER,
-    CDDB_TRACK_LIST_NAME,
-    CDDB_TRACK_LIST_TIME,
-    CDDB_TRACK_LIST_DATA,
-    CDDB_TRACK_LIST_ETFILE,
-    CDDB_TRACK_LIST_COUNT
-};
-
-enum
-{
-    SORT_LIST_NUMBER,
-    SORT_LIST_NAME
-};
-
-
-#define CDDB_GENRE_MAX ( sizeof(cddb_genre_vs_id3_genre)/sizeof(cddb_genre_vs_id3_genre[0]) - 1 )
-static char *cddb_genre_vs_id3_genre [][2] =
-{
-    /* Cddb Genre - ID3 Genre */
-    {"Blues",       "Blues"},
-    {"Classical",   "Classical"},
-    {"Country",     "Country"},
-    {"Data",        "Other"},
-    {"Folk",        "Folk"},
-    {"Jazz",        "Jazz"},
-    {"NewAge",      "New Age"},
-    {"Reggae",      "Reggae"},
-    {"Rock",        "Rock"},
-    {"Soundtrack",  "Soundtrack"},
-    {"Misc",        "Other"}
-};
-
-
-// File for result of the Cddb/Freedb request (on remote access)
-static const gchar CDDB_RESULT_FILE[] = "cddb_result_file.tmp";
-
-static const guint BOX_SPACING = 6;
-
-/****************
- * Declarations *
- ****************/
-static GtkWidget *CddbWindow;
-static GtkWidget *CddbWindowHPaned;
-
-static GtkWidget *CddbNoteBook;
-static GList *CddbAlbumList = NULL;
-
-static GtkWidget *CddbSearchStringCombo = NULL;
-static GtkListStore *CddbSearchStringModel = NULL;
-
-static GtkWidget *CddbSearchStringInResultCombo;
-static GtkListStore *CddbSearchStringInResultModel = NULL;
-
-static GtkWidget *CddbAlbumListView = NULL;
-static GtkListStore *CddbAlbumListModel = NULL;
-static GtkWidget *CddbTrackListView = NULL;
-static GtkListStore *CddbTrackListModel = NULL;
-static GtkWidget *CddbApplyButton = NULL;
-static GtkWidget *CddbSearchButton = NULL;
-static GtkWidget *CddbSearchAutoButton = NULL;
-static GtkWidget *CddbStatusBar;
-static guint CddbStatusBarContext;
-
-static GtkWidget *CddbStopSearchButton;
-static GtkWidget *CddbStopSearchAutoButton;
-static GtkWidget *CddbSearchStringInResultNextButton;
-static GtkWidget *CddbSearchStringInResultPrevButton;
-static GtkWidget *CddbDisplayRedLinesButton;
-static GtkWidget *CddbSelectAllInResultButton;
-static GtkWidget *CddbUnselectAllInResultButton;
-static GtkWidget *CddbInvertSelectionInResultButton;
-
-static GtkWidget *CddbShowCategoriesButton;
-
-static GtkWidget *CddbSeparatorH;
-static GtkWidget *CddbSeparatorV;
-
-static GtkWidget *CddbSearchInAllFields;
-static GtkWidget *CddbSearchInArtistField;
-static GtkWidget *CddbSearchInTitleField;
-static GtkWidget *CddbSearchInTrackNameField;
-static GtkWidget *CddbSearchInOtherField;
-
-static GtkWidget *CddbSetToAllFields;
-static GtkWidget *CddbSetToTitle;
-static GtkWidget *CddbSetToArtist;
-static GtkWidget *CddbSetToAlbum;
-static GtkWidget *CddbSetToYear;
-static GtkWidget *CddbSetToTrack;
-static GtkWidget *CddbSetToTrackTotal;
-static GtkWidget *CddbSetToGenre;
-static GtkWidget *CddbSetToFileName;
-
-static GtkWidget *CddbRunScanner;
-static GtkWidget *CddbUseDLM2; /* '2' as also used in prefs.c */
-static GtkWidget *CddbUseLocalAccess;
-
-static GtkWidget *CddbSearchInAllCategories;
-static GtkWidget *CddbSearchInBluesCategory;
-static GtkWidget *CddbSearchInClassicalCategory;
-static GtkWidget *CddbSearchInCountryCategory;
-static GtkWidget *CddbSearchInFolkCategory;
-static GtkWidget *CddbSearchInJazzCategory;
-static GtkWidget *CddbSearchInMiscCategory;
-static GtkWidget *CddbSearchInNewageCategory;
-static GtkWidget *CddbSearchInReggaeCategory;
-static GtkWidget *CddbSearchInRockCategory;
-static GtkWidget *CddbSearchInSoundtrackCategory;
-
-static gboolean CddbStopSearch = FALSE;
-
-
-/**************
- * Prototypes *
- **************/
-static gboolean Cddb_Destroy_Window (GtkWidget *widget, GdkEvent *event,
-                                     gpointer data);
-static void Cddb_Show_Album_Info (GtkTreeSelection *selection, gpointer data);
-
-static gboolean Cddb_Free_Album_List (void);
-static gboolean Cddb_Free_Track_Album_List (GList *track_list);
-
-static gint Cddb_Open_Connection (const gchar *host, gint port);
-static void Cddb_Close_Connection (gint socket_id);
-static gint Cddb_Read_Line        (FILE **file, gchar **cddb_out);
-static gint Cddb_Read_Http_Header (FILE **file, gchar **cddb_out);
-static gint Cddb_Read_Cddb_Header (FILE **file, gchar **cddb_out);
-
-static gint Cddb_Write_Result_To_File (gint socket_id,
-                                       gulong *bytes_read_total);
-
-static gboolean Cddb_Search_Album_List_From_String (void);
-static gboolean Cddb_Search_Album_List_From_String_Freedb (void);
-static gboolean Cddb_Search_Album_List_From_String_Gnudb (void);
-static gboolean Cddb_Search_Album_From_Selected_Files (void);
-static gboolean Cddb_Get_Album_Tracks_List_CB (GtkTreeSelection *selection,
-                                               gpointer data);
-static gboolean Cddb_Get_Album_Tracks_List (GtkTreeSelection *selection);
-
-static void Cddb_Load_Album_List (gboolean only_red_lines);
-static void Cddb_Load_Track_Album_List (GList *track_list);
-static gboolean Cddb_Set_Track_Infos_To_File_List (void);
-static void Cddb_Album_List_Set_Row_Appearance (GtkTreeIter *row);
-static GdkPixbuf *Cddb_Get_Pixbuf_From_Server_Name (const gchar *server_name);
-
-static void Cddb_Search_In_All_Fields_Check_Button_Toggled (void);
-static void Cddb_Search_In_All_Categories_Check_Button_Toggled (void);
-static void Cddb_Set_To_All_Fields_Check_Button_Toggled (void);
-static void Cddb_Stop_Search (void);
-static void Cddb_Search_String_In_Result (GtkWidget *entry, GtkButton *button);
-static void Cddb_Display_Red_Lines_In_Result (void);
-
-static void Cddb_Set_Apply_Button_Sensitivity (void);
-static void Cddb_Set_Search_Button_Sensitivity (void);
-static void Cddb_Use_Dlm_2_Check_Button_Toggled (void);
-static void Cddb_Show_Categories_Button_Toggled (void);
-static gchar *Cddb_Generate_Request_String_With_Fields_And_Categories_Options (void);
-static const gchar *Cddb_Get_Id3_Genre_From_Cddb_Genre (const gchar *cddb_genre);
-
-static void Cddb_Track_List_Row_Selected (GtkTreeSelection *selection,
-                                          gpointer data);
-static gboolean Cddb_Track_List_Button_Press (GtkTreeView *treeView,
-                                              GdkEventButton *event);
-
-static void Cddb_Track_List_Select_All (void);
-static void Cddb_Track_List_Unselect_All (void);
-static void Cddb_Track_List_Invert_Selection (void);
-
-static gint Cddb_Track_List_Sort_Func (GtkTreeModel *model, GtkTreeIter *a,
-                                       GtkTreeIter *b, gpointer data);
-
-static gchar *Cddb_Format_Proxy_Authentification (void);
-
-
-
-/*************
- * Functions *
- *************/
-void Init_CddbWindow (void)
-{
-    CddbWindow = NULL;
-}
-
-/*
- * The window to connect to the cd data base.
- */
-
-void Open_Cddb_Window (void)
-{
-    GtkWidget *VBox, *vbox, *hbox, *notebookvbox;
-    GtkWidget *Frame;
-    GtkWidget *Table;
-    GtkWidget *Label;
-    GtkWidget *Button;
-    GtkWidget *Separator;
-    GtkWidget *ScrollWindow;
-    GtkWidget *Icon;
-    gchar *CddbAlbumList_Titles[] = { NULL, N_("Artist / Album"), N_("Category")}; // Note: don't set "" instead of NULL else this will cause problem with translation language
-    gchar *CddbTrackList_Titles[] = { "#", N_("Track Name"), N_("Duration")};
-    GtkCellRenderer* renderer;
-    GtkTreeViewColumn* column;
-    GtkTreePath *path;
-    GtkAllocation allocation = { 0,0,0,0 };
-
-    if (CddbWindow != NULL)
-    {
-        gtk_window_present(GTK_WINDOW(CddbWindow));
-        return;
-    }
-    CddbWindow = gtk_dialog_new ();
-    gtk_window_set_title (GTK_WINDOW (CddbWindow), _("CDDB Search"));
-
-    // This part is needed to set correctly the position of handle panes
-    gtk_window_set_default_size(GTK_WINDOW(CddbWindow),CDDB_WINDOW_WIDTH,CDDB_WINDOW_HEIGHT);
-
-    g_signal_connect(G_OBJECT(CddbWindow),"delete_event", G_CALLBACK(Cddb_Destroy_Window),NULL);
-
-    VBox = gtk_dialog_get_content_area (GTK_DIALOG (CddbWindow));
-    gtk_container_set_border_width (GTK_CONTAINER (CddbWindow), BOX_SPACING);
-
-     /*
-      * Cddb NoteBook
-      */
-    CddbNoteBook = gtk_notebook_new();
-    gtk_notebook_popup_enable(GTK_NOTEBOOK(CddbNoteBook));
-    gtk_box_pack_start(GTK_BOX(VBox),CddbNoteBook,FALSE,FALSE,0);
-
-    /*
-     * 1 - Page for automatic search (generate the CDDBId from files)
-     */
-    Label = gtk_label_new(_("Automatic Search"));
-
-    notebookvbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
-    gtk_container_set_border_width (GTK_CONTAINER (notebookvbox), BOX_SPACING);
-    gtk_notebook_append_page (GTK_NOTEBOOK (CddbNoteBook), notebookvbox,
-                              Label);
-
-    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, BOX_SPACING);
-    gtk_box_pack_start(GTK_BOX(notebookvbox),hbox,FALSE,FALSE,0);
-
-    Label = gtk_label_new(_("Request CDDB"));
-    gtk_misc_set_alignment(GTK_MISC(Label),1.0,0.5);
-    gtk_box_pack_start(GTK_BOX(hbox),Label,FALSE,FALSE,0);
-
-    // Button to generate CddbId and request string from the selected files
-    CddbSearchAutoButton = gtk_button_new_from_stock(GTK_STOCK_FIND);
-    gtk_box_pack_start(GTK_BOX(hbox),CddbSearchAutoButton,FALSE,FALSE,0);
-    gtk_widget_set_can_default(CddbSearchAutoButton,TRUE);
-    gtk_widget_grab_default(CddbSearchAutoButton);
-    g_signal_connect(G_OBJECT(CddbSearchAutoButton),"clicked",G_CALLBACK(Cddb_Search_Album_From_Selected_Files),NULL);
-    gtk_widget_set_tooltip_text(CddbSearchAutoButton,_("Request automatically the "
-        "CDDB using the selected files (the order is important) to "
-        "generate the CddbID"));
-
-    // Button to stop the search
-    CddbStopSearchAutoButton = Create_Button_With_Icon_And_Label(GTK_STOCK_STOP,NULL);
-    gtk_box_pack_start(GTK_BOX(hbox),CddbStopSearchAutoButton,FALSE,FALSE,0);
-    gtk_button_set_relief(GTK_BUTTON(CddbStopSearchAutoButton),GTK_RELIEF_NONE);
-    gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchAutoButton),FALSE);
-    g_signal_connect(G_OBJECT(CddbStopSearchAutoButton), "clicked", G_CALLBACK(Cddb_Stop_Search), NULL);
-    gtk_widget_set_tooltip_text (CddbStopSearchAutoButton,
-                                 _("Stop the search"));
-
-    // Separator line
-    Separator = gtk_separator_new(GTK_ORIENTATION_VERTICAL);
-    gtk_box_pack_start(GTK_BOX(hbox),Separator,FALSE,FALSE,0);
-
-    // Check box to run the scanner
-    CddbUseLocalAccess = gtk_check_button_new_with_label(_("Use local CDDB"));
-    gtk_box_pack_start(GTK_BOX(hbox),CddbUseLocalAccess,FALSE,FALSE,0);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbUseLocalAccess),CDDB_USE_LOCAL_ACCESS);
-    gtk_widget_set_tooltip_text(CddbUseLocalAccess,_("When activating this option, after loading the "
-        "fields, the current selected scanner will be ran (the scanner window must be opened)."));
-
-    // Separator line
-    Separator = gtk_separator_new(GTK_ORIENTATION_VERTICAL);
-    gtk_box_pack_start(GTK_BOX(hbox),Separator,FALSE,FALSE,0);
-
-    // Button to quit
-    Button = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
-    gtk_box_pack_end(GTK_BOX(hbox),Button,FALSE,FALSE,0);
-    gtk_widget_set_can_default(Button,TRUE);
-    g_signal_connect(G_OBJECT(Button),"clicked", G_CALLBACK(Cddb_Destroy_Window),NULL);
-
-
-    /*
-     * 2 - Page for manual search
-     */
-    Label = gtk_label_new(_("Manual Search"));
-    notebookvbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
-    gtk_notebook_append_page (GTK_NOTEBOOK (CddbNoteBook), notebookvbox,
-                              Label);
-    gtk_container_set_border_width (GTK_CONTAINER (notebookvbox), BOX_SPACING);
-
-    /*
-     * Words to search
-     */
-    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, BOX_SPACING);
-    gtk_box_pack_start(GTK_BOX(notebookvbox),hbox,FALSE,FALSE,0);
-
-    Label = gtk_label_new(_("Words:"));
-    gtk_misc_set_alignment(GTK_MISC(Label),1.0,0.5);
-    gtk_box_pack_start(GTK_BOX(hbox),Label,FALSE,FALSE,0);
-
-    g_assert (CddbSearchStringModel == NULL);
-    CddbSearchStringModel = gtk_list_store_new (MISC_COMBO_COUNT,
-                                                G_TYPE_STRING);
-
-    CddbSearchStringCombo = gtk_combo_box_new_with_model_and_entry(GTK_TREE_MODEL(CddbSearchStringModel));
-    g_object_unref (CddbSearchStringModel);
-    gtk_combo_box_set_entry_text_column(GTK_COMBO_BOX(CddbSearchStringCombo),MISC_COMBO_TEXT);
-    gtk_widget_set_size_request(GTK_WIDGET(CddbSearchStringCombo),220,-1);
-    gtk_box_pack_start(GTK_BOX(hbox),CddbSearchStringCombo,FALSE,TRUE,0);
-    gtk_widget_set_tooltip_text(GTK_WIDGET(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(CddbSearchStringCombo)))),_("Enter the words to "
-        "search (separated by a space or '+')"));
-    // History List
-    Load_Cddb_Search_String_List(CddbSearchStringModel, MISC_COMBO_TEXT);
-
-    g_signal_connect(G_OBJECT(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(CddbSearchStringCombo)))),"activate",
-        G_CALLBACK(Cddb_Search_Album_List_From_String),NULL);
-    gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(CddbSearchStringCombo))),"");
-
-    // Set content of the clipboard if available
-    gtk_editable_paste_clipboard(GTK_EDITABLE(gtk_bin_get_child(GTK_BIN(CddbSearchStringCombo))));
-
-    // Button to run the search
-    CddbSearchButton = gtk_button_new_from_stock(GTK_STOCK_FIND);
-    gtk_box_pack_start(GTK_BOX(hbox),CddbSearchButton,FALSE,FALSE,0);
-    gtk_widget_set_can_default(CddbSearchButton,TRUE);
-    gtk_widget_grab_default(CddbSearchButton);
-    g_signal_connect(G_OBJECT(CddbSearchButton),"clicked",
-        G_CALLBACK(Cddb_Search_Album_List_From_String),NULL);
-    g_signal_connect(G_OBJECT(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(CddbSearchStringCombo)))),"changed",
-        G_CALLBACK(Cddb_Set_Search_Button_Sensitivity),NULL);
-
-    // Button to stop the search
-    CddbStopSearchButton = Create_Button_With_Icon_And_Label(GTK_STOCK_STOP,NULL);
-    gtk_box_pack_start(GTK_BOX(hbox),CddbStopSearchButton,FALSE,FALSE,0);
-    gtk_button_set_relief(GTK_BUTTON(CddbStopSearchButton),GTK_RELIEF_NONE);
-    gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchButton),FALSE);
-    g_signal_connect(G_OBJECT(CddbStopSearchButton), "clicked", G_CALLBACK(Cddb_Stop_Search), NULL);
-    gtk_widget_set_tooltip_text (CddbStopSearchButton, _("Stop the search"));
-
-    // Button to quit
-    Button = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
-    gtk_box_pack_end(GTK_BOX(hbox),Button,FALSE,FALSE,0);
-    gtk_widget_set_can_default(Button,TRUE);
-    g_signal_connect(G_OBJECT(Button),"clicked", G_CALLBACK(Cddb_Destroy_Window),NULL);
-
-
-    /*
-     * Search options
-     */
-    Frame = gtk_frame_new(_("Search In:"));
-    gtk_box_pack_start(GTK_BOX(notebookvbox),Frame,FALSE,TRUE,0);
-
-    Table = et_grid_new (7,4);
-    gtk_container_add(GTK_CONTAINER(Frame),Table);
-    gtk_grid_set_row_spacing (GTK_GRID (Table), 1);
-    gtk_grid_set_column_spacing (GTK_GRID (Table), 1);
-
-    /* Translators: This option is for the previous 'search in' option. For
-     * instance, translate this as "Search in:" "All fields". */
-    CddbSearchInAllFields      = gtk_check_button_new_with_label(_("All Fields"));
-    Separator                  = gtk_separator_new(GTK_ORIENTATION_VERTICAL);
-    /* Translators: This option is for the previous 'search in' option. For
-     * instance, translate this as "Search in:" "Artist". */
-    CddbSearchInArtistField    = gtk_check_button_new_with_label(_("Artist"));
-    /* Translators: This option is for the previous 'search in' option. For
-     * instance, translate this as "Search in:" "Album". */
-    CddbSearchInTitleField     = gtk_check_button_new_with_label(_("Album"));
-    /* Translators: This option is for the previous 'search in' option. For
-     * instance, translate this as "Search in:" "Track Name". */
-    CddbSearchInTrackNameField = gtk_check_button_new_with_label(_("Track Name"));
-    /* Translators: This option is for the previous 'search in' option. For
-     * instance, translate this as "Search in:" "Other". */
-    CddbSearchInOtherField     = gtk_check_button_new_with_label(_("Other"));
-    gtk_grid_attach (GTK_GRID (Table), CddbSearchInAllFields, 0, 0, 1, 1);
-    gtk_grid_attach (GTK_GRID (Table), Separator, 1, 0, 1, 1);
-    gtk_grid_attach (GTK_GRID (Table), CddbSearchInArtistField, 2, 0, 1, 1);
-    gtk_grid_attach (GTK_GRID (Table), CddbSearchInTitleField, 3, 0, 1, 1);
-    gtk_grid_attach (GTK_GRID (Table), CddbSearchInTrackNameField, 4, 0, 1, 1);
-    gtk_grid_attach (GTK_GRID (Table), CddbSearchInOtherField, 5, 0, 1, 1);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbSearchInAllFields), CDDB_SEARCH_IN_ALL_FIELDS);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbSearchInArtistField), CDDB_SEARCH_IN_ARTIST_FIELD);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbSearchInTitleField), CDDB_SEARCH_IN_TITLE_FIELD);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbSearchInTrackNameField), CDDB_SEARCH_IN_TRACK_NAME_FIELD);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbSearchInOtherField), CDDB_SEARCH_IN_OTHER_FIELD);
-    g_signal_connect(G_OBJECT(CddbSearchInAllFields), "toggled", G_CALLBACK(Cddb_Search_In_All_Fields_Check_Button_Toggled),NULL);
-    g_signal_connect(G_OBJECT(CddbSearchInAllFields), "toggled", G_CALLBACK(Cddb_Set_Search_Button_Sensitivity),NULL);
-    g_signal_connect(G_OBJECT(CddbSearchInArtistField), "toggled", G_CALLBACK(Cddb_Set_Search_Button_Sensitivity),NULL);
-    g_signal_connect(G_OBJECT(CddbSearchInTitleField), "toggled", G_CALLBACK(Cddb_Set_Search_Button_Sensitivity),NULL);
-    g_signal_connect(G_OBJECT(CddbSearchInTrackNameField), "toggled", G_CALLBACK(Cddb_Set_Search_Button_Sensitivity),NULL);
-    g_signal_connect(G_OBJECT(CddbSearchInOtherField), "toggled", G_CALLBACK(Cddb_Set_Search_Button_Sensitivity),NULL);
-
-    CddbSeparatorH = gtk_separator_new(GTK_ORIENTATION_HORIZONTAL);
-    gtk_grid_attach (GTK_GRID (Table), CddbSeparatorH, 0, 1, 6, 1);
-
-    /* Translators: This option is for the previous 'search in' option. For
-     * instance, translate this as "Search in:" "All Categories". */
-    CddbSearchInAllCategories      = gtk_check_button_new_with_label(_("All Categories"));
-    CddbSeparatorV                 = gtk_separator_new(GTK_ORIENTATION_VERTICAL);
-    /* Translators: This option is for the previous 'search in' option. For
-     * instance, translate this as "Search in:" "Blues". */
-    CddbSearchInBluesCategory      = gtk_check_button_new_with_label(_("Blues"));
-    /* Translators: This option is for the previous 'search in' option. For
-     * instance, translate this as "Search in:" "Classical". */
-    CddbSearchInClassicalCategory  = gtk_check_button_new_with_label(_("Classical"));
-    /* Translators: This option is for the previous 'search in' option. For
-     * instance, translate this as "Search in:" "Country". */
-    CddbSearchInCountryCategory    = gtk_check_button_new_with_label(_("Country"));
-    /* Translators: This option is for the previous 'search in' option. For
-     * instance, translate this as "Search in:" "Folk". */
-    CddbSearchInFolkCategory       = gtk_check_button_new_with_label(_("Folk"));
-    /* Translators: This option is for the previous 'search in' option. For
-     * instance, translate this as "Search in:" "Jazz". */
-    CddbSearchInJazzCategory       = gtk_check_button_new_with_label(_("Jazz"));
-    /* Translators: This option is for the previous 'search in' option. For
-     * instance, translate this as "Search in:" "Misc". */
-    CddbSearchInMiscCategory       = gtk_check_button_new_with_label(_("Misc."));
-    /* Translators: This option is for the previous 'search in' option. For
-     * instance, translate this as "Search in:" "New age". */
-    CddbSearchInNewageCategory     = gtk_check_button_new_with_label(_("New Age"));
-    /* Translators: This option is for the previous 'search in' option. For
-     * instance, translate this as "Search in:" "Reggae". */
-    CddbSearchInReggaeCategory     = gtk_check_button_new_with_label(_("Reggae"));
-    /* Translators: This option is for the previous 'search in' option. For
-     * instance, translate this as "Search in:" "Rock". */
-    CddbSearchInRockCategory       = gtk_check_button_new_with_label(_("Rock"));
-    /* Translators: This option is for the previous 'search in' option. For
-     * instance, translate this as "Search in:" "Soundtrack". */
-    CddbSearchInSoundtrackCategory = gtk_check_button_new_with_label(_("Soundtrack"));
-    gtk_grid_attach (GTK_GRID (Table), CddbSearchInAllCategories, 0, 2, 1, 2);
-    gtk_grid_attach (GTK_GRID (Table), CddbSeparatorV, 1, 2, 1, 2);
-    gtk_grid_attach (GTK_GRID (Table), CddbSearchInBluesCategory, 2, 2, 1, 1);
-    gtk_grid_attach (GTK_GRID (Table), CddbSearchInClassicalCategory, 3, 2, 1,
-                     1);
-    gtk_grid_attach (GTK_GRID (Table), CddbSearchInCountryCategory, 4, 2, 1,
-                     1);
-    gtk_grid_attach (GTK_GRID (Table), CddbSearchInFolkCategory, 5, 2, 1, 1);
-    gtk_grid_attach (GTK_GRID (Table), CddbSearchInJazzCategory, 6, 2, 1, 1);
-    gtk_grid_attach (GTK_GRID (Table), CddbSearchInMiscCategory, 2, 3, 1, 1);
-    gtk_grid_attach (GTK_GRID (Table), CddbSearchInNewageCategory, 3, 3, 1, 1);
-    gtk_grid_attach (GTK_GRID (Table), CddbSearchInReggaeCategory, 4, 3, 1, 1);
-    gtk_grid_attach (GTK_GRID (Table), CddbSearchInRockCategory, 5, 3, 1, 1);
-    gtk_grid_attach (GTK_GRID (Table), CddbSearchInSoundtrackCategory, 6, 3, 1,
-                     1);
-    gtk_label_set_line_wrap(GTK_LABEL(gtk_bin_get_child(GTK_BIN(CddbSearchInAllCategories))),TRUE); // Wrap label of the check button.
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbSearchInAllCategories),     CDDB_SEARCH_IN_ALL_CATEGORIES);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbSearchInBluesCategory),     CDDB_SEARCH_IN_BLUES_CATEGORY);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbSearchInClassicalCategory), CDDB_SEARCH_IN_CLASSICAL_CATEGORY);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbSearchInCountryCategory),   CDDB_SEARCH_IN_COUNTRY_CATEGORY);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbSearchInFolkCategory),      CDDB_SEARCH_IN_FOLK_CATEGORY);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbSearchInJazzCategory),      CDDB_SEARCH_IN_JAZZ_CATEGORY);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbSearchInMiscCategory),      CDDB_SEARCH_IN_MISC_CATEGORY);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbSearchInNewageCategory),    CDDB_SEARCH_IN_NEWAGE_CATEGORY);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbSearchInReggaeCategory),    CDDB_SEARCH_IN_REGGAE_CATEGORY);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbSearchInRockCategory),      CDDB_SEARCH_IN_ROCK_CATEGORY);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbSearchInSoundtrackCategory),CDDB_SEARCH_IN_SOUNDTRACK_CATEGORY);
-    g_signal_connect(G_OBJECT(CddbSearchInAllCategories),     "toggled",G_CALLBACK(Cddb_Search_In_All_Categories_Check_Button_Toggled),NULL);
-    g_signal_connect(G_OBJECT(CddbSearchInAllCategories),     "toggled",G_CALLBACK(Cddb_Set_Search_Button_Sensitivity),NULL);
-    g_signal_connect(G_OBJECT(CddbSearchInBluesCategory),     "toggled",G_CALLBACK(Cddb_Set_Search_Button_Sensitivity),NULL);
-    g_signal_connect(G_OBJECT(CddbSearchInClassicalCategory), "toggled",G_CALLBACK(Cddb_Set_Search_Button_Sensitivity),NULL);
-    g_signal_connect(G_OBJECT(CddbSearchInCountryCategory),   "toggled",G_CALLBACK(Cddb_Set_Search_Button_Sensitivity),NULL);
-    g_signal_connect(G_OBJECT(CddbSearchInFolkCategory),      "toggled",G_CALLBACK(Cddb_Set_Search_Button_Sensitivity),NULL);
-    g_signal_connect(G_OBJECT(CddbSearchInJazzCategory),      "toggled",G_CALLBACK(Cddb_Set_Search_Button_Sensitivity),NULL);
-    g_signal_connect(G_OBJECT(CddbSearchInMiscCategory),      "toggled",G_CALLBACK(Cddb_Set_Search_Button_Sensitivity),NULL);
-    g_signal_connect(G_OBJECT(CddbSearchInNewageCategory),    "toggled",G_CALLBACK(Cddb_Set_Search_Button_Sensitivity),NULL);
-    g_signal_connect(G_OBJECT(CddbSearchInReggaeCategory),    "toggled",G_CALLBACK(Cddb_Set_Search_Button_Sensitivity),NULL);
-    g_signal_connect(G_OBJECT(CddbSearchInRockCategory),      "toggled",G_CALLBACK(Cddb_Set_Search_Button_Sensitivity),NULL);
-    g_signal_connect(G_OBJECT(CddbSearchInSoundtrackCategory),"toggled",G_CALLBACK(Cddb_Set_Search_Button_Sensitivity),NULL);
-    gtk_widget_set_tooltip_text(CddbSearchInRockCategory,_("included: funk, soul, rap, pop, industrial, metal, etc."));
-    gtk_widget_set_tooltip_text(CddbSearchInSoundtrackCategory,_("movies, shows"));
-    gtk_widget_set_tooltip_text(CddbSearchInMiscCategory,_("others that do not fit in the above categories"));
-
-    // Button to display/hide the categories
-    CddbShowCategoriesButton = gtk_toggle_button_new_with_label(_("Categories"));
-    gtk_grid_attach (GTK_GRID (Table), CddbShowCategoriesButton, 6, 0, 1, 1);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbShowCategoriesButton),CDDB_SHOW_CATEGORIES);
-    g_signal_connect(G_OBJECT(CddbShowCategoriesButton),"toggled", G_CALLBACK(Cddb_Show_Categories_Button_Toggled),NULL);
-
-    /*
-     * Results command
-     */
-    Frame = gtk_frame_new(_("Results:"));
-    gtk_box_pack_start(GTK_BOX(VBox),Frame,FALSE,TRUE,0);
-
-    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, BOX_SPACING);
-    gtk_container_add(GTK_CONTAINER(Frame),hbox);
-
-    Label = gtk_label_new(_("Search:"));
-    gtk_misc_set_alignment(GTK_MISC(Label),1.0,0.5);
-    gtk_box_pack_start(GTK_BOX(hbox),Label,FALSE,FALSE,0);
-
-    g_assert (CddbSearchStringInResultModel == NULL);
-    CddbSearchStringInResultModel = gtk_list_store_new (MISC_COMBO_COUNT,
-                                                        G_TYPE_STRING);
-
-    CddbSearchStringInResultCombo = gtk_combo_box_new_with_model_and_entry(GTK_TREE_MODEL(CddbSearchStringInResultModel));
-    g_object_unref (CddbSearchStringInResultModel);
-    gtk_combo_box_set_entry_text_column(GTK_COMBO_BOX(CddbSearchStringInResultCombo),MISC_COMBO_TEXT);
-    gtk_box_pack_start(GTK_BOX(hbox),CddbSearchStringInResultCombo,FALSE,FALSE,0);
-    g_signal_connect_swapped(G_OBJECT(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(CddbSearchStringInResultCombo)))),"activate",
-                             G_CALLBACK(Cddb_Search_String_In_Result), G_OBJECT(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(CddbSearchStringInResultCombo)))));
-    gtk_widget_set_tooltip_text(GTK_WIDGET(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(CddbSearchStringInResultCombo)))),_("Enter the words to "
-        "search in the list below"));
-
-    // History List
-    Load_Cddb_Search_String_In_Result_List(CddbSearchStringInResultModel, MISC_COMBO_TEXT);
-
-    gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(CddbSearchStringInResultCombo))),"");
-
-    CddbSearchStringInResultNextButton = Create_Button_With_Icon_And_Label(GTK_STOCK_GO_DOWN,NULL);
-    gtk_box_pack_start(GTK_BOX(hbox),CddbSearchStringInResultNextButton,FALSE,FALSE,0);
-    gtk_button_set_relief(GTK_BUTTON(CddbSearchStringInResultNextButton),GTK_RELIEF_NONE);
-    g_signal_connect_swapped(G_OBJECT(CddbSearchStringInResultNextButton),"clicked", G_CALLBACK(Cddb_Search_String_In_Result), G_OBJECT(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(CddbSearchStringInResultCombo)))));
-    gtk_widget_set_tooltip_text(CddbSearchStringInResultNextButton,_("Search Next"));
-
-    CddbSearchStringInResultPrevButton = Create_Button_With_Icon_And_Label(GTK_STOCK_GO_UP,NULL);
-    gtk_box_pack_start(GTK_BOX(hbox),CddbSearchStringInResultPrevButton,FALSE,FALSE,0);
-    gtk_button_set_relief(GTK_BUTTON(CddbSearchStringInResultPrevButton),GTK_RELIEF_NONE);
-    g_signal_connect_swapped(G_OBJECT(CddbSearchStringInResultPrevButton),"clicked", G_CALLBACK(Cddb_Search_String_In_Result), G_OBJECT(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(CddbSearchStringInResultCombo)))));
-    gtk_widget_set_tooltip_text(CddbSearchStringInResultPrevButton,_("Search Previous"));
-
-    // Separator line
-    Separator = gtk_separator_new(GTK_ORIENTATION_VERTICAL);
-    gtk_box_pack_start(GTK_BOX(hbox),Separator,FALSE,FALSE,0);
-
-    CddbDisplayRedLinesButton = gtk_toggle_button_new();
-    Icon = gtk_image_new_from_stock("easytag-red-lines", GTK_ICON_SIZE_BUTTON);
-    gtk_container_add(GTK_CONTAINER(CddbDisplayRedLinesButton),Icon);
-    gtk_box_pack_start(GTK_BOX(hbox),CddbDisplayRedLinesButton,FALSE,FALSE,0);
-    gtk_button_set_relief(GTK_BUTTON(CddbDisplayRedLinesButton),GTK_RELIEF_NONE);
-    gtk_widget_set_tooltip_text(CddbDisplayRedLinesButton,_("Show only red lines (or show all lines) in the 'Artist / Album' list"));
-    g_signal_connect(G_OBJECT(CddbDisplayRedLinesButton),"toggled",G_CALLBACK(Cddb_Display_Red_Lines_In_Result),NULL);
-
-    CddbUnselectAllInResultButton = Create_Button_With_Icon_And_Label("easytag-unselect-all",NULL);
-    gtk_box_pack_end(GTK_BOX(hbox),CddbUnselectAllInResultButton,FALSE,FALSE,0);
-    gtk_button_set_relief(GTK_BUTTON(CddbUnselectAllInResultButton),GTK_RELIEF_NONE);
-    gtk_widget_set_tooltip_text(CddbUnselectAllInResultButton,_("Unselect all lines"));
-    g_signal_connect(G_OBJECT(CddbUnselectAllInResultButton),"clicked",G_CALLBACK(Cddb_Track_List_Unselect_All),NULL);
-
-    CddbInvertSelectionInResultButton = Create_Button_With_Icon_And_Label("easytag-invert-selection",NULL);
-    gtk_box_pack_end(GTK_BOX(hbox),CddbInvertSelectionInResultButton,FALSE,FALSE,0);
-    gtk_button_set_relief(GTK_BUTTON(CddbInvertSelectionInResultButton),GTK_RELIEF_NONE);
-    gtk_widget_set_tooltip_text(CddbInvertSelectionInResultButton,_("Invert lines selection"));
-    g_signal_connect(G_OBJECT(CddbInvertSelectionInResultButton),"clicked",G_CALLBACK(Cddb_Track_List_Invert_Selection),NULL);
-
-    CddbSelectAllInResultButton = gtk_button_new ();
-    gtk_container_add (GTK_CONTAINER (CddbSelectAllInResultButton),
-                       gtk_image_new_from_stock (GTK_STOCK_SELECT_ALL,
-                                                 GTK_ICON_SIZE_BUTTON));
-    gtk_box_pack_end(GTK_BOX(hbox),CddbSelectAllInResultButton,FALSE,FALSE,0);
-    gtk_button_set_relief(GTK_BUTTON(CddbSelectAllInResultButton),GTK_RELIEF_NONE);
-    gtk_widget_set_tooltip_text(CddbSelectAllInResultButton,_("Select all lines"));
-    g_signal_connect(G_OBJECT(CddbSelectAllInResultButton),"clicked",G_CALLBACK(Cddb_Track_List_Select_All),NULL);
-
-    /*
-     * Result of search
-     */
-    CddbWindowHPaned = gtk_paned_new(GTK_ORIENTATION_HORIZONTAL);
-    gtk_box_pack_start(GTK_BOX(VBox),CddbWindowHPaned,TRUE,TRUE,0);
-    gtk_paned_set_position(GTK_PANED(CddbWindowHPaned),CDDB_PANE_HANDLE_POSITION);
-
-    // List of albums
-    ScrollWindow = gtk_scrolled_window_new(NULL, NULL);
-    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(ScrollWindow),GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
-    gtk_widget_set_size_request(GTK_WIDGET(ScrollWindow),-1,100);
-    gtk_paned_pack1(GTK_PANED(CddbWindowHPaned),ScrollWindow,TRUE,FALSE);
-
-    CddbAlbumListModel = gtk_list_store_new(CDDB_ALBUM_LIST_COUNT,
-                                            GDK_TYPE_PIXBUF,
-                                            G_TYPE_STRING,
-                                            G_TYPE_STRING,
-                                            G_TYPE_POINTER,
-                                            PANGO_TYPE_STYLE,
-                                            G_TYPE_INT,
-                                            GDK_TYPE_COLOR);
-    CddbAlbumListView = gtk_tree_view_new_with_model(GTK_TREE_MODEL(CddbAlbumListModel));
-    g_object_unref (CddbAlbumListModel);
-
-    renderer = gtk_cell_renderer_pixbuf_new();
-    column = gtk_tree_view_column_new_with_attributes(_(CddbAlbumList_Titles[0]), renderer,
-                                                      "pixbuf",         CDDB_ALBUM_LIST_PIXBUF,
-                                                      NULL);
-    gtk_tree_view_column_set_resizable(column, FALSE);
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(CddbAlbumListView), column);
-
-    renderer = gtk_cell_renderer_text_new();
-    column = gtk_tree_view_column_new_with_attributes(_(CddbAlbumList_Titles[1]), renderer,
-                                                      "text",           CDDB_ALBUM_LIST_ALBUM,
-                                                      "weight",         CDDB_ALBUM_LIST_FONT_WEIGHT,
-                                                      "style",          CDDB_ALBUM_LIST_FONT_STYLE,
-                                                      "foreground-gdk", CDDB_ALBUM_LIST_FOREGROUND_COLOR,
-                                                      NULL);
-    gtk_tree_view_column_set_resizable(column, TRUE);
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(CddbAlbumListView), column);
-
-    renderer = gtk_cell_renderer_text_new();
-    column = gtk_tree_view_column_new_with_attributes(_(CddbAlbumList_Titles[2]), renderer,
-                                                      "text",           CDDB_ALBUM_LIST_CATEGORY,
-                                                      "weight",         CDDB_ALBUM_LIST_FONT_WEIGHT,
-                                                      "style",          CDDB_ALBUM_LIST_FONT_STYLE,
-                                                      "foreground-gdk", CDDB_ALBUM_LIST_FOREGROUND_COLOR,
-                                                      NULL);
-    gtk_tree_view_column_set_resizable(column, TRUE);
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(CddbAlbumListView), column);
-    //gtk_tree_view_columns_autosize(GTK_TREE_VIEW(CddbAlbumListView));
-
-    gtk_container_add(GTK_CONTAINER(ScrollWindow), CddbAlbumListView);
-
-    path = gtk_tree_path_new_first ();
-    gtk_tree_view_set_cursor (GTK_TREE_VIEW (CddbAlbumListView), path, NULL,
-                              FALSE);
-    gtk_tree_path_free (path);
-    g_signal_connect(G_OBJECT(gtk_tree_view_get_selection(GTK_TREE_VIEW(CddbAlbumListView))),
-            "changed", G_CALLBACK(Cddb_Show_Album_Info), NULL);
-    g_signal_connect(G_OBJECT(gtk_tree_view_get_selection(GTK_TREE_VIEW(CddbAlbumListView))),
-            "changed", G_CALLBACK(Cddb_Get_Album_Tracks_List_CB), NULL);
-
-    // List of tracks
-    ScrollWindow = gtk_scrolled_window_new(NULL,NULL);
-    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(ScrollWindow),GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
-
-
-    gtk_widget_set_size_request(GTK_WIDGET(ScrollWindow), -1, 100);
-    gtk_paned_pack2(GTK_PANED(CddbWindowHPaned), ScrollWindow, TRUE, FALSE);
-
-    CddbTrackListModel = gtk_list_store_new(CDDB_TRACK_LIST_COUNT,
-                                            G_TYPE_UINT,
-                                            G_TYPE_STRING,
-                                            G_TYPE_STRING,
-                                            G_TYPE_POINTER,
-                                            G_TYPE_POINTER);
-    CddbTrackListView = gtk_tree_view_new_with_model(GTK_TREE_MODEL(CddbTrackListModel));
-    g_object_unref (CddbTrackListModel);
-    renderer = gtk_cell_renderer_text_new();
-    g_object_set(G_OBJECT(renderer), "xalign", 1.0, NULL); // Align to the right
-    column = gtk_tree_view_column_new_with_attributes(_(CddbTrackList_Titles[0]), renderer,
-                                                      "text", CDDB_TRACK_LIST_NUMBER, NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(CddbTrackListView), column);
-    gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(CddbTrackListModel), SORT_LIST_NUMBER,
-                                    Cddb_Track_List_Sort_Func, GINT_TO_POINTER(SORT_LIST_NUMBER), NULL);
-    gtk_tree_view_column_set_sort_column_id(column, SORT_LIST_NUMBER);
-    renderer = gtk_cell_renderer_text_new();
-    column = gtk_tree_view_column_new_with_attributes(_(CddbTrackList_Titles[1]), renderer,
-                                                      "text", CDDB_TRACK_LIST_NAME, NULL);
-    gtk_tree_view_column_set_resizable(column, TRUE);
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(CddbTrackListView), column);
-    gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(CddbTrackListModel), SORT_LIST_NAME,
-                                    Cddb_Track_List_Sort_Func, GINT_TO_POINTER(SORT_LIST_NAME), NULL);
-    gtk_tree_view_column_set_sort_column_id(column, SORT_LIST_NAME);
-
-    renderer = gtk_cell_renderer_text_new();
-    g_object_set(G_OBJECT(renderer), "xalign", 1.0, NULL); // Align to the right
-    column = gtk_tree_view_column_new_with_attributes(_(CddbTrackList_Titles[2]), renderer,
-                                                      "text", CDDB_TRACK_LIST_TIME, NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(CddbTrackListView), column);
-
-    //gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(CddbTrackListModel), SORT_LIST_NUMBER, GTK_SORT_ASCENDING);
-    gtk_tree_view_set_reorderable(GTK_TREE_VIEW(CddbTrackListView), TRUE);
-
-    gtk_container_add(GTK_CONTAINER(ScrollWindow),CddbTrackListView);
-    gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(CddbTrackListView)),
-                                GTK_SELECTION_MULTIPLE);
-    g_signal_connect(G_OBJECT(gtk_tree_view_get_selection(GTK_TREE_VIEW(CddbTrackListView))),
-                     "changed", G_CALLBACK(Cddb_Track_List_Row_Selected), NULL);
-    g_signal_connect(G_OBJECT(CddbTrackListView),"button_press_event", G_CALLBACK(Cddb_Track_List_Button_Press),NULL);
-    gtk_widget_set_tooltip_text(CddbTrackListView, _("Select lines to 'apply' to "
-        "your files list. All lines will be processed if no line is selected.\n"
-        "You can also reorder lines in this list before using 'apply' button."));
-
-    /*
-     * Apply results to fields...
-     */
-    Frame = gtk_frame_new(_("Set Into:"));
-    gtk_box_pack_start(GTK_BOX(VBox),Frame,FALSE,TRUE,0);
-
-    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
-    gtk_container_add(GTK_CONTAINER(Frame),vbox);
-
-    CddbSetToAllFields  = gtk_check_button_new_with_label(_("All"));
-    Separator           = gtk_separator_new(GTK_ORIENTATION_VERTICAL);
-    CddbSetToFileName   = gtk_check_button_new_with_label(_("Filename"));
-    CddbSetToTitle      = gtk_check_button_new_with_label(_("Title"));
-    CddbSetToArtist     = gtk_check_button_new_with_label(_("Artist"));
-    CddbSetToAlbum      = gtk_check_button_new_with_label(_("Album"));
-    CddbSetToYear       = gtk_check_button_new_with_label(_("Year"));
-    CddbSetToTrack      = gtk_check_button_new_with_label(_("Track #"));
-    CddbSetToTrackTotal = gtk_check_button_new_with_label(_("# Tracks"));
-    CddbSetToGenre      = gtk_check_button_new_with_label(_("Genre"));
-    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, BOX_SPACING);
-    gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,0);
-    gtk_box_pack_start(GTK_BOX(hbox),CddbSetToAllFields, FALSE,FALSE,0);
-    gtk_box_pack_start(GTK_BOX(hbox),Separator,          FALSE,FALSE,2);
-    gtk_box_pack_start(GTK_BOX(hbox),CddbSetToFileName,  FALSE,FALSE,2);
-    gtk_box_pack_start(GTK_BOX(hbox),CddbSetToTitle,     FALSE,FALSE,2);
-    gtk_box_pack_start(GTK_BOX(hbox),CddbSetToArtist,    FALSE,FALSE,2);
-    gtk_box_pack_start(GTK_BOX(hbox),CddbSetToAlbum,     FALSE,FALSE,2);
-    gtk_box_pack_start(GTK_BOX(hbox),CddbSetToYear,      FALSE,FALSE,2);
-    gtk_box_pack_start(GTK_BOX(hbox),CddbSetToTrack,     FALSE,FALSE,2);
-    gtk_box_pack_start(GTK_BOX(hbox),CddbSetToTrackTotal,FALSE,FALSE,2);
-    gtk_box_pack_start(GTK_BOX(hbox),CddbSetToGenre,     FALSE,FALSE,2);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbSetToAllFields), CDDB_SET_TO_ALL_FIELDS);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbSetToTitle),     CDDB_SET_TO_TITLE);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbSetToArtist),    CDDB_SET_TO_ARTIST);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbSetToAlbum),     CDDB_SET_TO_ALBUM);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbSetToYear),      CDDB_SET_TO_YEAR);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbSetToTrack),     CDDB_SET_TO_TRACK);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbSetToTrackTotal),CDDB_SET_TO_TRACK_TOTAL);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbSetToGenre),     CDDB_SET_TO_GENRE);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbSetToFileName),  CDDB_SET_TO_FILE_NAME);
-    g_signal_connect(G_OBJECT(CddbSetToAllFields), "toggled",G_CALLBACK(Cddb_Set_To_All_Fields_Check_Button_Toggled),NULL);
-    g_signal_connect(G_OBJECT(CddbSetToAllFields), "toggled",G_CALLBACK(Cddb_Set_Apply_Button_Sensitivity),NULL);
-    g_signal_connect(G_OBJECT(CddbSetToTitle),     "toggled",G_CALLBACK(Cddb_Set_Apply_Button_Sensitivity),NULL);
-    g_signal_connect(G_OBJECT(CddbSetToArtist),    "toggled",G_CALLBACK(Cddb_Set_Apply_Button_Sensitivity),NULL);
-    g_signal_connect(G_OBJECT(CddbSetToAlbum),     "toggled",G_CALLBACK(Cddb_Set_Apply_Button_Sensitivity),NULL);
-    g_signal_connect(G_OBJECT(CddbSetToYear),      "toggled",G_CALLBACK(Cddb_Set_Apply_Button_Sensitivity),NULL);
-    g_signal_connect(G_OBJECT(CddbSetToTrack),     "toggled",G_CALLBACK(Cddb_Set_Apply_Button_Sensitivity),NULL);
-    g_signal_connect(G_OBJECT(CddbSetToTrackTotal),"toggled",G_CALLBACK(Cddb_Set_Apply_Button_Sensitivity),NULL);
-    g_signal_connect(G_OBJECT(CddbSetToGenre),     "toggled",G_CALLBACK(Cddb_Set_Apply_Button_Sensitivity),NULL);
-    g_signal_connect(G_OBJECT(CddbSetToFileName),  "toggled",G_CALLBACK(Cddb_Set_Apply_Button_Sensitivity),NULL);
-
-    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, BOX_SPACING);
-    gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,0);
-
-    // Check box to run the scanner
-    CddbRunScanner = gtk_check_button_new_with_label(_("Run the current scanner for each file"));
-    gtk_box_pack_start(GTK_BOX(hbox),CddbRunScanner,FALSE,TRUE,0);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbRunScanner),CDDB_RUN_SCANNER);
-    gtk_widget_set_tooltip_text(CddbRunScanner,_("When activating this option, after loading the "
-        "fields, the current selected scanner will be ran (the scanner window must be opened)."));
-
-    // Check box to use DLM (also used in the preferences window)
-    CddbUseDLM2 = gtk_check_button_new_with_label(_("Match lines with the Levenshtein algorithm"));
-    gtk_box_pack_start(GTK_BOX(hbox),CddbUseDLM2,FALSE,FALSE,0);
-    // Doesn't activate it by default because if the new user don't pay attention to it,
-    // it will not understand why the cddb results aren't loaded correctly...
-    //gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbUseDLM2),CDDB_USE_DLM);
-    gtk_widget_set_tooltip_text(CddbUseDLM2,_("When activating this option, the "
-        "Levenshtein algorithm (DLM: Damerau-Levenshtein Metric) will be used "
-        "to match the CDDB title against every filename in the current folder, "
-        "and to select the best match. This will be used when selecting the "
-        "corresponding audio file, or applying CDDB results, instead of using "
-        "directly the position order."));
-    g_signal_connect(G_OBJECT(CddbUseDLM2),"toggled",G_CALLBACK(Cddb_Use_Dlm_2_Check_Button_Toggled),NULL);
-
-    // Button to apply
-    CddbApplyButton = gtk_button_new_from_stock(GTK_STOCK_APPLY);
-    gtk_box_pack_end(GTK_BOX(hbox),CddbApplyButton,FALSE,FALSE,0);
-    g_signal_connect(G_OBJECT(CddbApplyButton),"clicked", G_CALLBACK(Cddb_Set_Track_Infos_To_File_List),NULL);
-    gtk_widget_set_tooltip_text(CddbApplyButton,_("Load the selected lines or all lines (if no line selected)."));
-
-    /*
-     * Status bar
-     */
-    CddbStatusBar = gtk_statusbar_new();
-    gtk_box_pack_start(GTK_BOX(VBox),CddbStatusBar,FALSE,TRUE,0);
-    gtk_widget_set_size_request(CddbStatusBar, 300, -1);
-    CddbStatusBarContext = gtk_statusbar_get_context_id(GTK_STATUSBAR(CddbStatusBar),"Messages");
-    gtk_statusbar_push (GTK_STATUSBAR (CddbStatusBar), CddbStatusBarContext,
-                        _("Ready to search"));
-
-
-    g_signal_emit_by_name(G_OBJECT(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(CddbSearchStringCombo)))),"changed");
-    g_signal_emit_by_name(G_OBJECT(CddbSearchInAllFields),"toggled");
-    g_signal_emit_by_name(G_OBJECT(CddbSearchInAllCategories),"toggled");
-    g_signal_emit_by_name(G_OBJECT(CddbSetToAllFields),"toggled");
-    CddbStopSearch = FALSE;
-
-    gtk_widget_show_all(CddbWindow);
-    if (SET_CDDB_WINDOW_POSITION
-    && CDDB_WINDOW_X > 0 && CDDB_WINDOW_Y > 0)
-    {
-        gtk_window_move(GTK_WINDOW(CddbWindow),CDDB_WINDOW_X,CDDB_WINDOW_Y);
-    }
-    // Force resize window
-    gtk_widget_get_allocation(GTK_WIDGET(CddbSearchInAllCategories), &allocation);
-    gtk_widget_set_size_request(GTK_WIDGET(CddbSearchInAllFields), allocation.width, -1);
-    g_signal_emit_by_name(G_OBJECT(CddbShowCategoriesButton),"toggled");
-}
-
-static gboolean
-Cddb_Destroy_Window (GtkWidget *widget, GdkEvent *event, gpointer data)
-{
-
-    CddbStopSearch = TRUE;
-    if (CddbWindow)
-    {
-        Cddb_Window_Apply_Changes();
-
-        if (CddbAlbumList)
-        {
-            Cddb_Free_Album_List ();
-            CddbAlbumList = NULL;
-        }
-
-        gtk_widget_destroy(CddbWindow);
-        CddbWindow            = NULL;
-        CddbSearchStringCombo = NULL;
-        CddbSearchStringModel = NULL;
-        CddbSearchStringInResultModel = NULL;
-        CddbAlbumListView     = NULL;
-        CddbAlbumListModel    = NULL;
-        CddbTrackListView     = NULL;
-        CddbTrackListModel    = NULL;
-        CddbApplyButton       = NULL;
-        CddbSearchButton      = NULL;
-        CddbSearchAutoButton  = NULL;
-    }
-    return FALSE;
-}
-
-/*
- * For the configuration file...
- */
-void Cddb_Window_Apply_Changes (void)
-{
-    if (CddbWindow)
-    {
-        gint x, y, width, height;
-        GdkWindow *window;
-
-        window = gtk_widget_get_window(CddbWindow);
-
-        if ( window && gdk_window_is_visible(window) && gdk_window_get_state(window)!=GDK_WINDOW_STATE_MAXIMIZED )
-        {
-            // Position and Origin of the window
-            gdk_window_get_root_origin(window,&x,&y);
-            CDDB_WINDOW_X = x;
-            CDDB_WINDOW_Y = y;
-            width = gdk_window_get_width(window);
-            height = gdk_window_get_height(window);
-            CDDB_WINDOW_WIDTH  = width;
-            CDDB_WINDOW_HEIGHT = height;
-
-            // Handle panes position
-            CDDB_PANE_HANDLE_POSITION = gtk_paned_get_position(GTK_PANED(CddbWindowHPaned));
-        }
-
-        CDDB_SEARCH_IN_ALL_FIELDS       = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInAllFields));
-        CDDB_SEARCH_IN_ARTIST_FIELD     = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInArtistField));
-        CDDB_SEARCH_IN_TITLE_FIELD      = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInTitleField));
-        CDDB_SEARCH_IN_TRACK_NAME_FIELD = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInTrackNameField));
-        CDDB_SEARCH_IN_OTHER_FIELD      = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInOtherField));
-        CDDB_SHOW_CATEGORIES            = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbShowCategoriesButton));
-
-        CDDB_SEARCH_IN_ALL_CATEGORIES      = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInAllCategories));
-        CDDB_SEARCH_IN_BLUES_CATEGORY      = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInBluesCategory));
-        CDDB_SEARCH_IN_CLASSICAL_CATEGORY  = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInClassicalCategory));
-        CDDB_SEARCH_IN_COUNTRY_CATEGORY    = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInCountryCategory));
-        CDDB_SEARCH_IN_FOLK_CATEGORY       = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInFolkCategory));
-        CDDB_SEARCH_IN_JAZZ_CATEGORY       = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInJazzCategory));
-        CDDB_SEARCH_IN_MISC_CATEGORY       = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInMiscCategory));
-        CDDB_SEARCH_IN_NEWAGE_CATEGORY     = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInNewageCategory));
-        CDDB_SEARCH_IN_REGGAE_CATEGORY     = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInReggaeCategory));
-        CDDB_SEARCH_IN_ROCK_CATEGORY       = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInRockCategory));
-        CDDB_SEARCH_IN_SOUNDTRACK_CATEGORY = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInSoundtrackCategory));
-
-        CDDB_SET_TO_ALL_FIELDS  = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSetToAllFields));
-        CDDB_SET_TO_TITLE       = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSetToTitle));
-        CDDB_SET_TO_ARTIST      = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSetToArtist));
-        CDDB_SET_TO_ALBUM       = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSetToAlbum));
-        CDDB_SET_TO_YEAR        = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSetToYear));
-        CDDB_SET_TO_TRACK       = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSetToTrack));
-        CDDB_SET_TO_TRACK_TOTAL = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSetToTrackTotal));
-        CDDB_SET_TO_GENRE       = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSetToGenre));
-        CDDB_SET_TO_FILE_NAME   = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSetToFileName));
-
-        CDDB_RUN_SCANNER        = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbRunScanner));
-        CDDB_USE_DLM            = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbUseDLM2));
-        CDDB_USE_LOCAL_ACCESS   = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbUseLocalAccess));
-
-        // Save combobox history lists before exit
-        Save_Cddb_Search_String_List(CddbSearchStringModel, MISC_COMBO_TEXT);
-        Save_Cddb_Search_String_In_Result_List(CddbSearchStringInResultModel, MISC_COMBO_TEXT);
-    }
-}
-
-
-static void
-Cddb_Search_In_All_Fields_Check_Button_Toggled (void)
-{
-    if (CddbSearchInAllFields)
-    {
-        gtk_widget_set_sensitive(CddbSearchInArtistField,   !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInAllFields)));
-        gtk_widget_set_sensitive(CddbSearchInTitleField,    !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInAllFields)));
-        gtk_widget_set_sensitive(CddbSearchInTrackNameField,!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInAllFields)));
-        gtk_widget_set_sensitive(CddbSearchInOtherField,    !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInAllFields)));
-    }
-}
-
-static void
-Cddb_Show_Categories_Button_Toggled (void)
-{
-    if (CddbShowCategoriesButton)
-    {
-        if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbShowCategoriesButton)))
-        {
-            gtk_widget_show(CddbSeparatorH);
-            gtk_widget_show(CddbSearchInAllCategories);
-            gtk_widget_show(CddbSeparatorV);
-            gtk_widget_show(CddbSearchInBluesCategory);
-            gtk_widget_show(CddbSearchInClassicalCategory);
-            gtk_widget_show(CddbSearchInCountryCategory);
-            gtk_widget_show(CddbSearchInFolkCategory);
-            gtk_widget_show(CddbSearchInJazzCategory);
-            gtk_widget_show(CddbSearchInMiscCategory);
-            gtk_widget_show(CddbSearchInNewageCategory);
-            gtk_widget_show(CddbSearchInReggaeCategory);
-            gtk_widget_show(CddbSearchInRockCategory);
-            gtk_widget_show(CddbSearchInSoundtrackCategory);
-        }else
-        {
-            gtk_widget_hide(CddbSeparatorH);
-            gtk_widget_hide(CddbSearchInAllCategories);
-            gtk_widget_hide(CddbSeparatorV);
-            gtk_widget_hide(CddbSearchInBluesCategory);
-            gtk_widget_hide(CddbSearchInClassicalCategory);
-            gtk_widget_hide(CddbSearchInCountryCategory);
-            gtk_widget_hide(CddbSearchInFolkCategory);
-            gtk_widget_hide(CddbSearchInJazzCategory);
-            gtk_widget_hide(CddbSearchInMiscCategory);
-            gtk_widget_hide(CddbSearchInNewageCategory);
-            gtk_widget_hide(CddbSearchInReggaeCategory);
-            gtk_widget_hide(CddbSearchInRockCategory);
-            gtk_widget_hide(CddbSearchInSoundtrackCategory);
-        }
-        // Force the window to be redrawed
-        gtk_widget_queue_resize(CddbWindow);
-    }
-}
-
-static void
-Cddb_Search_In_All_Categories_Check_Button_Toggled (void)
-{
-    if (CddbSearchInAllCategories)
-    {
-        gtk_widget_set_sensitive(CddbSearchInBluesCategory,     !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInAllCategories)));
-        gtk_widget_set_sensitive(CddbSearchInClassicalCategory, !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInAllCategories)));
-        gtk_widget_set_sensitive(CddbSearchInCountryCategory,   !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInAllCategories)));
-        gtk_widget_set_sensitive(CddbSearchInFolkCategory,      !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInAllCategories)));
-        gtk_widget_set_sensitive(CddbSearchInJazzCategory,      !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInAllCategories)));
-        gtk_widget_set_sensitive(CddbSearchInMiscCategory,      !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInAllCategories)));
-        gtk_widget_set_sensitive(CddbSearchInNewageCategory,    !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInAllCategories)));
-        gtk_widget_set_sensitive(CddbSearchInReggaeCategory,    !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInAllCategories)));
-        gtk_widget_set_sensitive(CddbSearchInRockCategory,      !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInAllCategories)));
-        gtk_widget_set_sensitive(CddbSearchInSoundtrackCategory,!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInAllCategories)));
-    }
-}
-
-static void
-Cddb_Set_To_All_Fields_Check_Button_Toggled (void)
-{
-    if (CddbSetToAllFields)
-    {
-        gtk_widget_set_sensitive(CddbSetToTitle,     !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSetToAllFields)));
-        gtk_widget_set_sensitive(CddbSetToArtist,    !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSetToAllFields)));
-        gtk_widget_set_sensitive(CddbSetToAlbum,     !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSetToAllFields)));
-        gtk_widget_set_sensitive(CddbSetToYear,      !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSetToAllFields)));
-        gtk_widget_set_sensitive(CddbSetToTrack,     !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSetToAllFields)));
-        gtk_widget_set_sensitive(CddbSetToTrackTotal,!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSetToAllFields)));
-        gtk_widget_set_sensitive(CddbSetToGenre,     !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSetToAllFields)));
-        gtk_widget_set_sensitive(CddbSetToFileName,  !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSetToAllFields)));
-    }
-}
-
-static void
-Cddb_Set_Apply_Button_Sensitivity (void)
-{
-    gboolean cddbsettoallfields, cddbsettotitle, cddbsettoartist, cddbsettoalbum,
-             cddbsettoyear, cddbsettotrack, cddbsettotracktotal, cddbsettogenre, cddbsettofilename;
-
-    // Tag fields
-    cddbsettoallfields  = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSetToAllFields));
-    cddbsettotitle      = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSetToTitle));
-    cddbsettoartist     = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSetToArtist));
-    cddbsettoalbum      = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSetToAlbum));
-    cddbsettoyear       = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSetToYear));
-    cddbsettotrack      = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSetToTrack));
-    cddbsettotracktotal = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSetToTrackTotal));
-    cddbsettogenre      = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSetToGenre));
-    cddbsettofilename   = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSetToFileName));
-    if ( CddbApplyButton && gtk_tree_model_iter_n_children(GTK_TREE_MODEL(CddbTrackListModel), NULL) > 0
-    && (cddbsettoallfields || cddbsettotitle || cddbsettoartist     || cddbsettoalbum || cddbsettoyear
-        || cddbsettotrack  || cddbsettotracktotal || cddbsettogenre || cddbsettofilename) )
-    {
-        gtk_widget_set_sensitive(GTK_WIDGET(CddbApplyButton),TRUE);
-    } else
-    {
-        gtk_widget_set_sensitive(GTK_WIDGET(CddbApplyButton),FALSE);
-    }
-}
-
-static void
-Cddb_Use_Dlm_2_Check_Button_Toggled (void)
-{
-    if (CddbUseDLM2)
-    {
-        CDDB_USE_DLM = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbUseDLM2));
-    }
-}
-
-static void
-Cddb_Set_Search_Button_Sensitivity (void)
-{
-    gboolean cddbinallfields, cddbinartistfield, cddbintitlefield, cddbintracknamefield, cddbinotherfield;
-    gboolean cddbinallcategories, cddbinbluescategory, cddbinclassicalcategory, cddbincountrycategory,
-             cddbinfolkcategory, cddbinjazzcategory, cddbinmisccategory, cddbinnewagecategory,
-             cddbinreggaecategory, cddbinrockcategory, cddbinsoundtrackcategory;
-
-    // Fields
-    cddbinallfields      = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInAllFields));
-    cddbinartistfield    = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInArtistField));
-    cddbintitlefield     = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInTitleField));
-    cddbintracknamefield = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInTrackNameField));
-    cddbinotherfield     = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInOtherField));
-    // Categories
-    cddbinallcategories      = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInAllCategories));
-    cddbinbluescategory      = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInBluesCategory));
-    cddbinclassicalcategory  = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInClassicalCategory));
-    cddbincountrycategory    = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInCountryCategory));
-    cddbinfolkcategory       = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInFolkCategory));
-    cddbinjazzcategory       = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInJazzCategory));
-    cddbinmisccategory       = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInMiscCategory));
-    cddbinnewagecategory     = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInNewageCategory));
-    cddbinreggaecategory     = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInReggaeCategory));
-    cddbinrockcategory       = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInRockCategory));
-    cddbinsoundtrackcategory = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInSoundtrackCategory));
-
-    if ( CddbSearchButton && CddbSearchStringCombo && g_utf8_strlen(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(CddbSearchStringCombo)))), -1) > 0
-    && (cddbinallfields     || cddbinartistfield   || cddbintitlefield        || cddbintracknamefield || cddbinotherfield)
-    && (cddbinallcategories || cddbinbluescategory || cddbinclassicalcategory || cddbincountrycategory
-        || cddbinfolkcategory   || cddbinjazzcategory || cddbinmisccategory || cddbinnewagecategory
-        || cddbinreggaecategory || cddbinrockcategory || cddbinsoundtrackcategory) )
-    {
-        gtk_widget_set_sensitive(GTK_WIDGET(CddbSearchButton),TRUE);
-    } else
-    {
-        gtk_widget_set_sensitive(GTK_WIDGET(CddbSearchButton),FALSE);
-    }
-}
-
-static void
-Cddb_Stop_Search (void)
-{
-    CddbStopSearch = TRUE;
-}
-
-/*
- * Searches the Cddb Album List for specific terms
- * (this is not search the remote CDDB database...)
- */
-static void
-Cddb_Search_String_In_Result (GtkWidget *entry, GtkButton *button)
-{
-    gchar *string;
-    gchar  buffer[256];
-    gchar *pbuffer;
-    gchar *text;
-    gchar *temp;
-    gint   i;
-    gint  rowcount;
-    GtkTreeSelection* treeSelection;
-    GtkTreeIter iter;
-    GtkTreePath *rowpath;
-    gboolean result;
-    gboolean itemselected = FALSE;
-    GtkTreeIter itercopy;
-
-    if (!CddbWindow || !CddbAlbumListView)
-        return;
-
-    if (!entry || !button)
-        return;
-
-    string = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
-    if (!string || strlen(string)==0)
-        return;
-    temp = g_utf8_strdown(string, -1);
-    g_free(string);
-    string = temp;
-
-    Add_String_To_Combo_List(CddbSearchStringInResultModel, string);
-
-    /* Get the currently selected row into &iter and set itemselected to reflect this */
-    treeSelection = gtk_tree_view_get_selection(GTK_TREE_VIEW(CddbAlbumListView));
-    if (gtk_tree_selection_get_selected(treeSelection, NULL, &iter) == TRUE)
-        itemselected = TRUE;
-
-    rowcount = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(CddbAlbumListModel), NULL);
-
-    if (button != GTK_BUTTON(CddbSearchStringInResultPrevButton)) /* Next result button has been clicked */
-    {
-        /* Search in the album list (from top to bottom) */
-        if (itemselected == TRUE)
-        {
-            gtk_tree_selection_unselect_iter(treeSelection, &iter);
-            result = gtk_tree_model_iter_next(GTK_TREE_MODEL(CddbAlbumListModel), &iter);
-        } else
-        {
-            result = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(CddbAlbumListModel), &iter);
-        }
-
-        itercopy = iter;
-
-        /* If list entries follow the previously selected item, loop through them looking for a match */
-        if(result == TRUE)
-        {
-            do /* Search following results */
-            {
-                gtk_tree_model_get(GTK_TREE_MODEL(CddbAlbumListModel), &iter, CDDB_ALBUM_LIST_ALBUM, &text, -1);
-                g_utf8_strncpy(buffer, text, 256);
-
-                temp = g_utf8_strdown(buffer, -1);
-                pbuffer = temp;
-
-                if (pbuffer && strstr(pbuffer, string) != NULL)
-                {
-                    gtk_tree_selection_select_iter(treeSelection, &iter);
-                    rowpath = gtk_tree_model_get_path(GTK_TREE_MODEL(CddbAlbumListModel), &iter);
-                    gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(CddbAlbumListView), rowpath, NULL, FALSE, 0, 0);
-                    gtk_tree_path_free(rowpath);
-                    g_free(text);
-                    g_free(temp);
-                    g_free(string);
-                    return;
-                }
-                g_free(temp);
-                g_free(text);
-            } while(gtk_tree_model_iter_next(GTK_TREE_MODEL(CddbAlbumListModel), &iter));
-        }
-
-        for (i = 0; i < rowcount; i++)
-        {
-            gboolean found;
-
-            if (i == 0)
-                found = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(CddbAlbumListModel), &itercopy);
-            else
-                found = gtk_tree_model_iter_next(GTK_TREE_MODEL(CddbAlbumListModel), &itercopy);
-
-            if (found)
-            {
-                gtk_tree_model_get(GTK_TREE_MODEL(CddbAlbumListModel), &itercopy, CDDB_ALBUM_LIST_ALBUM, &text, -1);
-                g_utf8_strncpy(buffer, text, 256);
-
-                temp = g_utf8_strdown(buffer, -1);
-                pbuffer = temp;
-
-                if (pbuffer && strstr(pbuffer,string) != NULL)
-                {
-                    gtk_tree_selection_select_iter(treeSelection, &itercopy);
-                    rowpath = gtk_tree_model_get_path(GTK_TREE_MODEL(CddbAlbumListModel), &itercopy);
-                    gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(CddbAlbumListView), rowpath, NULL, FALSE, 0, 0);
-                    gtk_tree_path_free(rowpath);
-                    g_free(text);
-                    g_free(temp);
-                    g_free(string);
-                    return;
-                }
-                g_free(temp);
-                g_free(text);
-            }
-        }
-    } else
-    {
-        /* Previous result button */
-
-        /* Search in the album list (from bottom/selected-item to top) */
-        if (itemselected == TRUE)
-        {
-            rowpath = gtk_tree_model_get_path(GTK_TREE_MODEL(CddbAlbumListModel), &iter);
-            gtk_tree_path_prev(rowpath);
-        } else
-        {
-            rowpath = gtk_tree_path_new_from_indices(gtk_tree_model_iter_n_children(GTK_TREE_MODEL(CddbAlbumListModel), NULL) - 1, -1);
-        }
-
-        do
-        {
-            gboolean found;
-
-            found = gtk_tree_model_get_iter(GTK_TREE_MODEL(CddbAlbumListModel), &iter, rowpath);
-            if (found)
-            {
-                gtk_tree_model_get(GTK_TREE_MODEL(CddbAlbumListModel), &iter, CDDB_ALBUM_LIST_ALBUM, &text, -1);
-                g_utf8_strncpy(buffer,text,256);
-                temp = g_utf8_strdown(buffer, -1);
-                pbuffer = temp;
-
-                if (pbuffer && strstr(pbuffer,string) != NULL)
-                {
-                    gtk_tree_selection_select_iter(treeSelection, &iter);
-                    gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(CddbAlbumListView), rowpath, NULL, FALSE, 0, 0);
-                    gtk_tree_path_free(rowpath);
-                    g_free(text);
-                    g_free(temp);
-                    g_free(string);
-                    return;
-                }
-                g_free(temp);
-                g_free(text);
-            }
-        } while(gtk_tree_path_prev(rowpath));
-        gtk_tree_path_free(rowpath);
-    }
-    g_free(string);
-}
-
-
-/*
- * Show collected infos of the album in the status bar
- */
-static void
-Cddb_Show_Album_Info (GtkTreeSelection *selection, gpointer data)
-{
-    CddbAlbum *cddbalbum = NULL;
-    gchar *msg, *duration_str;
-    GtkTreeIter row;
-
-    if (!CddbWindow)
-        return;
-
-    if (gtk_tree_selection_get_selected(selection, NULL, &row))
-    {
-        gtk_tree_model_get(GTK_TREE_MODEL(CddbAlbumListModel), &row, CDDB_ALBUM_LIST_DATA, &cddbalbum, -1);
-    }
-    if (!cddbalbum)
-        return;
-
-    duration_str = Convert_Duration((gulong)cddbalbum->duration);
-    msg = g_strdup_printf(_("Album: '%s', "
-                            "artist: '%s', "
-                            "length: '%s', "
-                            "year: '%s', "
-                            "genre: '%s', "
-                            "ID: '%s'"),
-                            cddbalbum->album ? cddbalbum->album : "",
-                            cddbalbum->artist ? cddbalbum->artist : "",
-                            duration_str,
-                            cddbalbum->year ? cddbalbum->year : "",
-                            cddbalbum->genre ? cddbalbum->genre : "",
-                            cddbalbum->id ? cddbalbum->id : "");
-    gtk_statusbar_push(GTK_STATUSBAR(CddbStatusBar), CddbStatusBarContext, msg);
-    g_free(msg);
-    g_free(duration_str);
-}
-
-
-/*
- * Select the corresponding file into the main file list
- */
-static void
-Cddb_Track_List_Row_Selected (GtkTreeSelection *selection, gpointer data)
-{
-    GList       *selectedRows;
-    GList *l;
-    GtkTreeIter  currentFile;
-    gchar       *text_path;
-    ET_File    **etfile;
-
-    // Exit if we don't have to select files in the main list
-    if (!CDDB_FOLLOW_FILE)
-        return;
-
-    selectedRows = gtk_tree_selection_get_selected_rows(selection, NULL);
-
-    // We might be called with no rows selected
-    if (!selectedRows)
-    {
-        return;
-    }
-
-    // Unselect files in the main list before re-selecting them...
-    Browser_List_Unselect_All_Files();
-
-    for (l = selectedRows; l != NULL; l = g_list_next (l))
-    {
-        gboolean found;
-
-        found = gtk_tree_model_get_iter (GTK_TREE_MODEL (CddbTrackListModel),
-                                         &currentFile, (GtkTreePath*)l->data);
-
-        if (found)
-        {
-            if (CDDB_USE_DLM)
-            {
-                gtk_tree_model_get(GTK_TREE_MODEL(CddbTrackListModel), &currentFile,
-                                   CDDB_TRACK_LIST_NAME, &text_path,
-                                   CDDB_TRACK_LIST_ETFILE, &etfile, -1);
-                *etfile = Browser_List_Select_File_By_DLM(text_path, TRUE);
-            } else
-            {
-                text_path = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(CddbTrackListModel), &currentFile);
-                Browser_List_Select_File_By_Iter_String(text_path, TRUE);
-            }
-            g_free(text_path);
-        }
-    }
-
-    g_list_free_full (selectedRows, (GDestroyNotify)gtk_tree_path_free);
-}
-
-/*
- * Unselect all rows in the track list
- */
-static void
-Cddb_Track_List_Unselect_All ()
-{
-    GtkTreeSelection *selection;
-
-    g_return_if_fail (CddbTrackListView != NULL);
-
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(CddbTrackListView));
-    if (selection)
-    {
-        gtk_tree_selection_unselect_all(selection);
-    }
-}
-
-/*
- * Select all rows in the track list
- */
-static void
-Cddb_Track_List_Select_All ()
-{
-    GtkTreeSelection *selection;
-
-    g_return_if_fail (CddbTrackListView != NULL);
-
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(CddbTrackListView));
-    if (selection)
-    {
-        gtk_tree_selection_select_all(selection);
-    }
-}
-
-/*
- * Invert the selection of every row in the track list
- */
-static void
-Cddb_Track_List_Invert_Selection ()
-{
-    GtkTreeSelection *selection;
-    GtkTreeIter iter;
-    gboolean valid;
-
-    g_return_if_fail (CddbTrackListView != NULL);
-
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(CddbTrackListView));
-
-    if (selection)
-    {
-        /* Must block the select signal to avoid selecting all files (one by one) in the main list */
-        g_signal_handlers_block_by_func(G_OBJECT(selection), G_CALLBACK(Cddb_Track_List_Row_Selected), NULL);
-
-        valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(CddbTrackListModel), &iter);
-        while (valid)
-        {
-            if (gtk_tree_selection_iter_is_selected(selection, &iter))
-            {
-                gtk_tree_selection_unselect_iter(selection, &iter);
-            } else
-            {
-                gtk_tree_selection_select_iter(selection, &iter);
-            }
-            valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(CddbTrackListModel), &iter);
-        }
-        g_signal_handlers_unblock_by_func(G_OBJECT(selection), G_CALLBACK(Cddb_Track_List_Row_Selected), NULL);
-        g_signal_emit_by_name(G_OBJECT(gtk_tree_view_get_selection(GTK_TREE_VIEW(CddbTrackListView))), "changed");
-    }
-}
-
-static gboolean
-Cddb_Track_List_Button_Press (GtkTreeView *treeView, GdkEventButton *event)
-{
-    g_return_val_if_fail (event != NULL, FALSE);
-
-    if (event->type==GDK_2BUTTON_PRESS && event->button==1)
-    {
-        /* Double left mouse click */
-        Cddb_Track_List_Select_All();
-    }
-    return FALSE;
-}
-
-
-/*
- * To run an "automatic search" from a popup menu with the sélected files
- */
-void Cddb_Popup_Menu_Search_Selected_File (void)
-{
-    Open_Cddb_Window();
-    Cddb_Search_Album_From_Selected_Files();
-}
-
-/*
- * Sort the track list
- */
-static gint
-Cddb_Track_List_Sort_Func (GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b,
-                           gpointer data)
-{
-    gint sortcol = GPOINTER_TO_INT(data);
-    gchar *text1, *text1cp;
-    gchar *text2, *text2cp;
-    gint num1;
-    gint num2;
-    gint ret = 0;
-
-    switch (sortcol)
-    {
-        case SORT_LIST_NUMBER:
-            gtk_tree_model_get(model, a, CDDB_TRACK_LIST_NUMBER, &num1, -1);
-            gtk_tree_model_get(model, b, CDDB_TRACK_LIST_NUMBER, &num2, -1);
-            if (num1 < num2)
-                return -1;
-            else if(num1 > num2)
-                return 1;
-            else
-                return 0;
-            break;
-
-        case SORT_LIST_NAME:
-            gtk_tree_model_get(model, a, CDDB_TRACK_LIST_NAME, &text1, -1);
-            gtk_tree_model_get(model, b, CDDB_TRACK_LIST_NAME, &text2, -1);
-            text1cp = g_utf8_collate_key_for_filename(text1, -1);
-            text2cp = g_utf8_collate_key_for_filename(text2, -1);
-            // Must be the same rules as "ET_Comp_Func_Sort_File_By_Ascending_Filename" to be
-            // able to sort in the same order files in cddb and in the file list.
-            ret = SORTING_FILE_CASE_SENSITIVE ? strcmp(text1cp,text2cp) : strcasecmp(text1cp,text2cp);
-
-            g_free(text1);
-            g_free(text2);
-            g_free(text1cp);
-            g_free(text2cp);
-            break;
-    }
-
-    return ret;
-}
-
-/*
- * Cddb_Open_Connection:
- * @host: a hostname
- * @port: a port number
- *
- * Open a connection to @hostname, performing a DNS lookup as necessary.
- *
- * Returns: the socket fd, or 0 upon failure
- */
-/* TODO: Propagate the GError to the caller. */
-static gint
-Cddb_Open_Connection (const gchar *host, gint port)
-{
-    GSocketConnectable *address;
-    GSocketAddressEnumerator *enumerator;
-    GCancellable *cancellable;
-    GSocketAddress *sockaddress;
-    GError *error = NULL;
-    GError *sock_error = NULL;
-    gint socket_id = 0;
-    gchar *msg;
-
-    g_return_val_if_fail (CddbWindow != NULL, 0);
-    g_return_val_if_fail (host != NULL && port > 0, 0);
-
-    msg = g_strdup_printf(_("Resolving host '%s'…"),host);
-    gtk_statusbar_push(GTK_STATUSBAR(CddbStatusBar),CddbStatusBarContext,msg);
-    g_free(msg);
-
-    while (gtk_events_pending ())
-    {
-        gtk_main_iteration ();
-    }
-
-    address = g_network_address_new (host, port);
-    enumerator = g_socket_connectable_enumerate (address);
-    g_object_unref (address);
-
-    cancellable = g_cancellable_new ();
-
-    while (socket_id == 0
-           && (sockaddress = g_socket_address_enumerator_next (enumerator,
-                                                               cancellable,
-                                                               &error)))
-    {
-        struct sockaddr sockaddr_in;
-        gint optval = 1;
-
-        if (!g_socket_address_to_native (sockaddress, &sockaddr_in,
-                                         sizeof (sockaddr_in),
-                                         sock_error ? NULL : &sock_error))
-        {
-            g_object_unref (sockaddress);
-            continue;
-        }
-
-        g_object_unref (sockaddress);
-
-        while (gtk_events_pending ())
-        {
-            gtk_main_iteration ();
-        }
-
-        /* Create socket. */
-        if ((socket_id = socket (AF_INET, SOCK_STREAM, 0)) < 0)
-        {
-            msg = g_strdup_printf (_("Cannot create a new socket (%s)"),
-                                   g_strerror (errno));
-            gtk_statusbar_push (GTK_STATUSBAR (CddbStatusBar),
-                                CddbStatusBarContext, msg);
-            Log_Print (LOG_ERROR, "%s", msg);
-            g_free (msg);
-            goto err;
-        }
-
-        /* FIXME : must catch SIGPIPE? */
-        if (setsockopt (socket_id, SOL_SOCKET, SO_KEEPALIVE, (void *)&optval,
-            sizeof (optval)) < 0)
-        {
-            Log_Print (LOG_WARNING,
-                       _("Cannot set options on the newly-created socket"));
-        }
-
-        /* Open connection to the server. */
-        msg = g_strdup_printf (_("Connecting to host '%s', port '%d'…"), host,
-                               port);
-        gtk_statusbar_push (GTK_STATUSBAR (CddbStatusBar),
-                            CddbStatusBarContext, msg);
-        g_free (msg);
-
-        while (gtk_events_pending ())
-        {
-            gtk_main_iteration ();
-        }
-
-        if (connect (socket_id, &sockaddr_in, sizeof (struct sockaddr)) < 0)
-        {
-            msg = g_strdup_printf (_("Cannot connect to host '%s' (%s)"), host,
-                                   g_strerror (errno));
-            gtk_statusbar_push (GTK_STATUSBAR (CddbStatusBar),
-                                CddbStatusBarContext, msg);
-            Log_Print (LOG_ERROR, "%s", msg);
-            g_free (msg);
-
-            goto err;
-        }
-    }
-
-    if (socket_id != 0)
-    {
-        /* First address failed, but a later address succeeded. */
-        if (sock_error)
-        {
-            g_debug ("Failure while looking up address: %s",
-                     sock_error->message);
-            g_error_free (sock_error);
-        }
-    }
-
-    if (error)
-    {
-        msg = g_strdup_printf (_("Cannot resolve host '%s' (%s)"), host,
-                               error->message);
-        gtk_statusbar_push (GTK_STATUSBAR (CddbStatusBar),
-                            CddbStatusBarContext, msg);
-        Log_Print (LOG_ERROR, "%s", msg);
-        g_free (msg);
-        g_error_free (error);
-        goto err;
-    }
-
-    g_object_unref (enumerator);
-    g_object_unref (cancellable);
-
-    msg = g_strdup_printf (_("Connected to host '%s'"), host);
-    gtk_statusbar_push (GTK_STATUSBAR (CddbStatusBar), CddbStatusBarContext,
-                        msg);
-    g_free (msg);
-
-    while (gtk_events_pending ())
-    {
-        gtk_main_iteration ();
-    }
-
-    return socket_id;
-
-err:
-    g_object_unref (enumerator);
-    g_object_unref (cancellable);
-
-    return 0;
-}
-
-
-/*
- * Close the connection correcponding to the socket_id
- */
-static void
-Cddb_Close_Connection (gint socket_id)
-{
-#ifndef G_OS_WIN32
-    shutdown(socket_id,SHUT_RDWR);
-#endif /* !G_OS_WIN32 */
-    close(socket_id);
-
-    if (!CddbWindow)
-        return;
-
-    CddbStopSearch = FALSE;
-}
-
-
-/*
- * Read the result of the request and write it into a file.
- * And return the number of bytes read.
- *  - bytes_read=0 => no more data.
- *  - bytes_read_total : use to add bytes of severals pages... must be initialized before
- *
- * Server answser is formated like this :
- *
- * HTTP/1.1 200 OK\r\n                              }
- * Server: Apache/1.3.19 (Unix) PHP/4.0.4pl1\r\n    } "Header"
- * Connection: close\r\n                            }
- * \r\n
- * <html>\n                                         }
- * [...]                                            } "Body"
- */
-static gint
-Cddb_Write_Result_To_File (gint socket_id, gulong *bytes_read_total)
-{
-    gchar *file_path = NULL;
-    FILE  *file;
-
-    /* Cache directory was already created by Log_Print(). */
-    file_path = g_build_filename (g_get_user_cache_dir (), PACKAGE_TARNAME,
-                                  CDDB_RESULT_FILE, NULL);
-
-    if ((file = fopen (file_path, "w+")) != NULL)
-    {
-        gchar cddb_out[MAX_STRING_LEN+1];
-        gint  bytes_read = 0;
-
-        while ( CddbWindow && !CddbStopSearch
-        // Read data
-        && (bytes_read = recv(socket_id,(void *)&cddb_out,MAX_STRING_LEN,0)) > 0 )
-        {
-            gchar *size_str;
-            gchar *msg;
-
-
-            // Write to file
-            cddb_out[bytes_read] = 0;
-            if (fwrite (&cddb_out, bytes_read, 1, file) != 1)
-            {
-                 Log_Print (LOG_ERROR,
-                            _("Error while writing CDDB results to file '%s'"),
-                            file_path);
-                 break;
-            }
-
-            *bytes_read_total += bytes_read;
-
-            //g_print("\nLine : %lu : %s\n",bytes_read,cddb_out);
-
-            // Display message
-            size_str =  g_format_size (*bytes_read_total);
-            msg = g_strdup_printf(_("Receiving data (%s)…"),size_str);
-            gtk_statusbar_push(GTK_STATUSBAR(CddbStatusBar),CddbStatusBarContext,msg);
-            g_free(msg);
-            g_free(size_str);
-            while (gtk_events_pending())
-                gtk_main_iteration();
-        }
-
-        fclose(file);
-
-        if (bytes_read < 0)
-        {
-            Log_Print (LOG_ERROR, _("Error when reading CDDB response (%s)"),
-	               g_strerror(errno));
-            return -1; // Error!
-        }
-
-    } else
-    {
-        Log_Print (LOG_ERROR, _("Cannot create file '%s' (%s)"), file_path,
-	           g_strerror(errno));
-    }
-    g_free(file_path);
-
-    return 0;
-}
-
-
-/*
- * Read one line (of the connection) into cddb_out.
- * return  : -1 on error
- *            0 if no more line to read (EOF)
- *            1 if more lines to read
- *
- * Server answser is formated like this :
- *
- * HTTP/1.1 200 OK\r\n                              }
- * Server: Apache/1.3.19 (Unix) PHP/4.0.4pl1\r\n    } "Header"
- * Connection: close\r\n                            }
- * \r\n
- * <html>\n                                         }
- * [...]                                            } "Body"
- */
-static gint
-Cddb_Read_Line (FILE **file, gchar **cddb_out)
-{
-    gchar  buffer[MAX_STRING_LEN];
-    gchar *result;
-    size_t l;
-
-    if (*file == NULL)
-    {
-        // Open the file for reading the first time
-        gchar *file_path;
-
-        file_path = g_build_filename (g_get_user_cache_dir (), PACKAGE_TARNAME,
-                                      CDDB_RESULT_FILE, NULL);
-
-        if ((*file = fopen (file_path, "r")) == 0)
-        {
-            Log_Print (LOG_ERROR, _("Cannot open file '%s' (%s)"), file_path,
-                       g_strerror(errno));
-            g_free (file_path);
-            return -1; // Error!
-        }
-        g_free (file_path);
-    }
-
-    result = fgets(buffer,sizeof(buffer),*file);
-    if (result != NULL)
-    {
-	l = strlen(buffer);
-        if (l > 0 && buffer[l-1] == '\n')
-            buffer[l-1] = '\0';
-
-	// Many '\r' chars may be present
-        while ((l = strlen(buffer)) > 0 && buffer[l-1] == '\r')
-            buffer[l-1] = '\0';
-
-        *cddb_out = g_strdup(buffer);
-    }else
-    {
-        // On error, or EOF
-        fclose(*file);
-        *file = NULL;
-
-        //*cddb_out = NULL;
-        *cddb_out = g_strdup(""); // To avoid a crash
-
-        return 0;
-    }
-
-    //g_print("Line read: %s\n",*cddb_out);
-    return 1;
-}
-
-
-/*
- * Read HTTP header data : from "HTTP/1.1 200 OK" to the blank line
- */
-static gint
-Cddb_Read_Http_Header (FILE **file, gchar **cddb_out)
-{
-
-    // The 'file' is opened (if no error) in this function
-    if ( Cddb_Read_Line(file,cddb_out) < 0 )
-        return -1; // Error!
-
-    // First line must be : "HTTP/1.1 200 OK"
-    if ( !*cddb_out || strncmp("HTTP",*cddb_out,4)!=0 || strstr(*cddb_out,"200 OK")==NULL )
-        return -1;
-
-    /* Read until end of the HTTP header up to the next blank line. */
-    do
-    {
-        g_free (*cddb_out);
-    }
-    while (Cddb_Read_Line (file, cddb_out) > 0
-           && *cddb_out && strlen (*cddb_out) > 0);
-
-    //g_print("Http Header : %s\n",*cddb_out);
-    return 1;
-}
-
-/*
- * Read CDDB header data when requesting a file (cmd=cddb+read+<album genre>+<discid>)
- * Must be read after the HTTP header :
- *
- *      HTTP/1.1 200 OK
- *      Date: Sun, 26 Nov 2006 22:37:13 GMT
- *      Server: Apache/2.0.54 (Debian GNU/Linux) mod_python/3.1.3 Python/2.3.5 PHP/4.3.10-16 proxy_html/2.4 mod_perl/1.999.21 Perl/v5.8.4
- *      Expires: Sun Nov 26 23:37:14 2006
- *      Content-Length: 1013
- *      Connection: close
- *      Content-Type: text/plain; charset=UTF-8
- *
- *      210 newage 710ed208 CD database entry follows (until terminating `.')
- *
- * Cddb Header is the line like this :
- *      210 newage 710ed208 CD database entry follows (until terminating `.')
- */
-static gint
-Cddb_Read_Cddb_Header (FILE **file, gchar **cddb_out)
-{
-    if ( Cddb_Read_Line(file,cddb_out) < 0 )
-        return -1; // Error!
-
-    // Some requests receive some strange data (arbitrary : less than 10 chars.)
-    // at the beginning (2 or 3 characters)... So we read one line more...
-    if ( !*cddb_out || strlen(*cddb_out) < 10 )
-        if ( Cddb_Read_Line(file,cddb_out) < 0 )
-            return -1; // Error!
-
-    //g_print("Cddb Header : %s\n",*cddb_out);
-
-    // Read the line
-    // 200 - exact match
-    // 210 - multiple exact matches
-    // 211 - inexact match
-    if ( *cddb_out == NULL
-    || (strncmp(*cddb_out,"200",3)!=0
-    &&  strncmp(*cddb_out,"210",3)!=0
-    &&  strncmp(*cddb_out,"211",3)!=0) )
-        return -1;
-
-    return 1;
-}
-
-
-
-/*
- * Free the CddbAlbumList
- */
-static gboolean
-Cddb_Free_Album_List (void)
-{
-    GList *l;
-
-    g_return_val_if_fail (CddbAlbumList != NULL, FALSE);
-
-    CddbAlbumList = g_list_first (CddbAlbumList);
-
-    for (l = CddbAlbumList; l != NULL; l = g_list_next (l))
-    {
-        CddbAlbum *cddbalbum = l->data;
-
-        if (cddbalbum)
-        {
-            g_free(cddbalbum->server_name);
-            g_free (cddbalbum->server_cgi_path);
-            g_object_unref(cddbalbum->bitmap);
-
-            g_free(cddbalbum->artist_album);
-            g_free(cddbalbum->category);
-            g_free(cddbalbum->id);
-            if (cddbalbum->track_list)
-            {
-                Cddb_Free_Track_Album_List(cddbalbum->track_list);
-                cddbalbum->track_list = NULL;
-            }
-            g_free(cddbalbum->artist);
-            g_free(cddbalbum->album);
-            g_free(cddbalbum->genre);
-            g_free(cddbalbum->year);
-
-            g_free(cddbalbum);
-            cddbalbum = NULL;
-        }
-    }
-
-    g_list_free(CddbAlbumList);
-
-    return TRUE;
-}
-
-static gboolean
-Cddb_Free_Track_Album_List (GList *track_list)
-{
-    GList *l;
-
-    g_return_val_if_fail (track_list != NULL, FALSE);
-
-    track_list = g_list_first (track_list);
-
-    for (l = track_list; l != NULL; l = g_list_next (l))
-    {
-        CddbTrackAlbum *cddbtrackalbum = l->data;
-        if (cddbtrackalbum)
-        {
-            g_free(cddbtrackalbum->track_name);
-            g_free(cddbtrackalbum);
-            cddbtrackalbum = NULL;
-        }
-    }
-
-    g_list_free (track_list);
-
-    return TRUE;
-}
-
-/*
- * Clear the album model, blocking the tree view selection changed handlers
- * during the process, to prevent the handlers being called on removed rows.
- */
-static void
-cddb_album_model_clear (void)
-{
-    GtkTreeSelection *selection;
-
-    selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (CddbAlbumListView));
-
-    g_signal_handlers_block_by_func (selection,
-                                     G_CALLBACK (Cddb_Get_Album_Tracks_List_CB),
-                                     NULL);
-    g_signal_handlers_block_by_func (selection,
-                                     G_CALLBACK (Cddb_Show_Album_Info),
-                                     NULL);
-
-    gtk_list_store_clear (CddbAlbumListModel);
-
-    g_signal_handlers_unblock_by_func (selection,
-                                       G_CALLBACK (Cddb_Show_Album_Info),
-                                       NULL);
-    g_signal_handlers_unblock_by_func (selection,
-                                       G_CALLBACK (Cddb_Get_Album_Tracks_List_CB),
-                                       NULL);
-}
-
-/*
- * Clear the album model, blocking the tree view selection changed handlers
- * during the process, to prevent the handlers being called on removed rows.
- */
-static void
-cddb_track_model_clear (void)
-{
-    GtkTreeSelection *selection;
-
-    selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (CddbTrackListView));
-
-    g_signal_handlers_block_by_func (selection,
-                                     G_CALLBACK (Cddb_Track_List_Row_Selected),
-                                     NULL);
-
-    gtk_list_store_clear (CddbTrackListModel);
-
-    g_signal_handlers_unblock_by_func (selection,
-                                       G_CALLBACK (Cddb_Track_List_Row_Selected),
-                                       NULL);
-}
-
-/*
- * Load the CddbAlbumList into the corresponding List
- */
-static void
-Cddb_Load_Album_List (gboolean only_red_lines)
-{
-    if (CddbWindow && CddbAlbumList && CddbAlbumListView)
-    {
-        GtkTreeIter iter;
-        GList *l;
-
-        GtkTreeSelection *selection;
-        GList            *selectedRows = NULL;
-        GtkTreeIter       currentIter;
-        CddbAlbum        *cddbalbumSelected = NULL;
-
-        // Memorize the current selected item
-        selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(CddbAlbumListView));
-        selectedRows = gtk_tree_selection_get_selected_rows(selection, NULL);
-        if (selectedRows)
-        {
-            if (gtk_tree_model_get_iter(GTK_TREE_MODEL(CddbAlbumListModel), &currentIter, (GtkTreePath*)selectedRows->data))
-                gtk_tree_model_get(GTK_TREE_MODEL(CddbAlbumListModel), &currentIter,
-                                   CDDB_ALBUM_LIST_DATA, &cddbalbumSelected, -1);
-        }
-
-        /* Remove lines. */
-        cddb_album_model_clear ();
-
-        // Reload list following parameter 'only_red_lines'
-        for (l = g_list_first (CddbAlbumList); l != NULL; l = g_list_next (l))
-        {
-            CddbAlbum *cddbalbum = l->data;
-
-            if ( (only_red_lines && cddbalbum->track_list) || !only_red_lines)
-            {
-                /* Load the row in the list. */
-                gtk_list_store_insert_with_values (CddbAlbumListModel, &iter,
-                                                   G_MAXINT,
-                                                   CDDB_ALBUM_LIST_PIXBUF,
-                                                   cddbalbum->bitmap,
-                                                   CDDB_ALBUM_LIST_ALBUM,
-                                                   cddbalbum->artist_album,
-                                                   CDDB_ALBUM_LIST_CATEGORY,
-                                                   cddbalbum->category,
-                                                   CDDB_ALBUM_LIST_DATA,
-                                                   cddbalbum, -1);
-
-                Cddb_Album_List_Set_Row_Appearance(&iter);
-
-                // Select this item if it is the saved one...
-                if (cddbalbum == cddbalbumSelected)
-                    gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(CddbAlbumListView)), &iter);
-            }
-        }
-    }
-}
-
-
-/*
- * Load the CddbTrackList into the corresponding List
- */
-static void
-Cddb_Load_Track_Album_List (GList *track_list)
-{
-    if (CddbWindow && track_list && CddbTrackListView)
-    {
-        GList *l;
-
-        /* Must block the select signal of the target to avoid looping. */
-        cddb_track_model_clear ();
-
-        for (l = g_list_first (track_list); l != NULL; l = g_list_next (l))
-        {
-            gchar *row_text[1];
-            CddbTrackAlbum *cddbtrackalbum = l->data;
-            ET_File **etfile;
-            etfile = g_malloc0(sizeof(ET_File *));
-
-            row_text[0] = Convert_Duration((gulong)cddbtrackalbum->duration);
-
-            /* Load the row in the list. */
-            gtk_list_store_insert_with_values (CddbTrackListModel, NULL,
-                                               G_MAXINT,
-                                               CDDB_TRACK_LIST_NUMBER,
-                                               cddbtrackalbum->track_number,
-                                               CDDB_TRACK_LIST_NAME,
-                                               cddbtrackalbum->track_name,
-                                               CDDB_TRACK_LIST_TIME,
-                                               row_text[0],
-                                               CDDB_TRACK_LIST_DATA,
-                                               cddbtrackalbum,
-                                               CDDB_TRACK_LIST_ETFILE, etfile,
-                                               -1);
-
-            g_free(row_text[0]);
-        }
-
-        Cddb_Set_Apply_Button_Sensitivity();
-    }
-}
-
-/*
- * Fields          : artist, title, track, rest
- * CDDB Categories : blues, classical, country, data, folk, jazz, misc, newage, reggae, rock, soundtrack
- */
-static gchar *
-Cddb_Generate_Request_String_With_Fields_And_Categories_Options (void)
-{
-    gchar string[256];
-    gboolean cddbinallfields, cddbinartistfield, cddbintitlefield, cddbintracknamefield, cddbinotherfield;
-    gboolean cddbinallcategories, cddbinbluescategory, cddbinclassicalcategory, cddbincountrycategory,
-             cddbinfolkcategory, cddbinjazzcategory, cddbinmisccategory, cddbinnewagecategory,
-             cddbinreggaecategory, cddbinrockcategory, cddbinsoundtrackcategory;
-
-    // Init
-    string[0] = 0;
-
-    // Fields
-    cddbinallfields      = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInAllFields));
-    cddbinartistfield    = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInArtistField));
-    cddbintitlefield     = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInTitleField));
-    cddbintracknamefield = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInTrackNameField));
-    cddbinotherfield     = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInOtherField));
-
-    if (cddbinallfields)      strncat(string,"&allfields=YES",14);
-    else                      strncat(string,"&allfields=NO",13);
-
-    if (cddbinartistfield)    strncat(string,"&fields=artist",14);
-    if (cddbintitlefield)     strncat(string,"&fields=title",13);
-    if (cddbintracknamefield) strncat(string,"&fields=track",13);
-    if (cddbinotherfield)     strncat(string,"&fields=rest",12);
-
-
-    // Categories (warning : there is one other CDDB catogories not used here ("data"))
-    cddbinallcategories      = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInAllCategories));
-    cddbinbluescategory      = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInBluesCategory));
-    cddbinclassicalcategory  = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInClassicalCategory));
-    cddbincountrycategory    = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInCountryCategory));
-    cddbinfolkcategory       = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInFolkCategory));
-    cddbinjazzcategory       = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInJazzCategory));
-    cddbinmisccategory       = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInMiscCategory));
-    cddbinnewagecategory     = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInNewageCategory));
-    cddbinreggaecategory     = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInReggaeCategory));
-    cddbinrockcategory       = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInRockCategory));
-    cddbinsoundtrackcategory = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSearchInSoundtrackCategory));
-
-    strncat(string,"&allcats=NO",11);
-    if (cddbinallcategories)
-    {
-        // All categories except "data"
-        strncat(string,"&cats=blues&cats=classical&cats=country&cats=folk&cats=jazz"
-                       "&cats=misc&cats=newage&cats=reggae&cats=rock&cats=soundtrack",119);
-    }else
-    {
-        if (cddbinbluescategory)      strncat(string,"&cats=blues",11);
-        if (cddbinclassicalcategory)  strncat(string,"&cats=classical",15);
-        if (cddbincountrycategory)    strncat(string,"&cats=country",13);
-        if (cddbinfolkcategory)       strncat(string,"&cats=folk",10);
-        if (cddbinjazzcategory)       strncat(string,"&cats=jazz",10);
-        if (cddbinmisccategory)       strncat(string,"&cats=misc",10);
-        if (cddbinnewagecategory)     strncat(string,"&cats=newage",12);
-        if (cddbinreggaecategory)     strncat(string,"&cats=reggae",12);
-        if (cddbinrockcategory)       strncat(string,"&cats=rock",10);
-        if (cddbinsoundtrackcategory) strncat(string,"&cats=soundtrack",16);
-    }
-
-    return g_strdup(string);
-}
-
-
-/*
- * Select the function to use according the server adress for the manual search
- *      - freedb.freedb.org
- *      - gnudb.gnudb.org
- */
-static gboolean
-Cddb_Search_Album_List_From_String (void)
-{
-    if ( strstr(CDDB_SERVER_NAME_MANUAL_SEARCH,"gnudb") != NULL )
-		// Use of gnudb
-        return Cddb_Search_Album_List_From_String_Gnudb();
-    else
-		// Use of freedb
-        return Cddb_Search_Album_List_From_String_Freedb();
-}
-
-
-/*
- * Site FREEDB.ORG - Manual Search
- * Send request (using the HTML search page in freedb.org site) to the CD database
- * to get the list of albums matching to a string.
- */
-static gboolean
-Cddb_Search_Album_List_From_String_Freedb (void)
-{
-    gint   socket_id;
-    gchar *string = NULL;
-    gchar *tmp, *tmp1;
-    gchar *cddb_in;         // For the request to send
-    gchar *cddb_out = NULL; // Answer received
-    gchar *cddb_out_tmp;
-    gchar *msg;
-    gchar *proxy_auth = NULL;
-    gchar *cddb_server_name;
-    gint   cddb_server_port;
-    gchar *cddb_server_cgi_path;
-
-    gchar *ptr_cat, *cat_str, *id_str, *art_alb_str;
-    gchar *art_alb_tmp = NULL;
-    gboolean use_art_alb = FALSE;
-    gchar *end_str;
-    gchar *html_end_str;
-    gchar  buffer[MAX_STRING_LEN+1];
-    gint   bytes_written;
-    gulong bytes_read_total = 0;
-    FILE  *file = NULL;
-    gboolean web_search_disabled = FALSE;
-
-    gtk_statusbar_push(GTK_STATUSBAR(CddbStatusBar),CddbStatusBarContext,"");
-
-    /* Get words to search... */
-    string = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(CddbSearchStringCombo)))));
-    if (!string || g_utf8_strlen(string, -1) <= 0)
-        return FALSE;
-
-    /* Format the string of words */
-    g_strstrip (string);
-    /* Remove the duplicated spaces */
-    while ((tmp=strstr(string,"  "))!=NULL) // Search 2 spaces
-    {
-        tmp1 = tmp + 1;
-        while (*tmp1)
-            *(tmp++) = *(tmp1++);
-        *tmp = '\0';
-    }
-
-    Add_String_To_Combo_List(CddbSearchStringModel, string);
-
-    /* Convert spaces to '+' */
-    while ( (tmp=strchr(string,' '))!=NULL )
-        *tmp = '+';
-
-    cddb_server_name     = g_strdup(CDDB_SERVER_NAME_MANUAL_SEARCH);    //"www.freedb.org");
-    cddb_server_port     = CDDB_SERVER_PORT_MANUAL_SEARCH;              //80;
-    cddb_server_cgi_path = g_strdup(CDDB_SERVER_CGI_PATH_MANUAL_SEARCH);//"/~cddb/cddb.cgi");
-
-    /* Connection to the server */
-    if ( (socket_id=Cddb_Open_Connection(CDDB_USE_PROXY?CDDB_PROXY_NAME:cddb_server_name,
-                                         CDDB_USE_PROXY?CDDB_PROXY_PORT:cddb_server_port)) <= 0 )
-    {
-        g_free(string);
-        g_free(cddb_server_name);
-	g_free(cddb_server_cgi_path);
-        return FALSE;
-    }
-
-    /* Build request */
-    //cddb_in = g_strdup_printf("GET http://www.freedb.org/freedb_search.php?" // In this case, problem with squid cache...
-    cddb_in = g_strdup_printf("GET %s%s/freedb_search.php?"
-                              "words=%s"
-                              "%s"
-                              "&grouping=none"
-                              " HTTP/1.1\r\n"
-                              "Host: %s:%d\r\n"
-                              "User-Agent: %s %s\r\n"
-                              "%s"
-                              "Connection: close\r\n"
-                              "\r\n",
-                              CDDB_USE_PROXY?"http://":"", CDDB_USE_PROXY?cddb_server_name:"",  // Needed when using proxy
-                              string,
-                              (tmp=Cddb_Generate_Request_String_With_Fields_And_Categories_Options()),
-                              cddb_server_name,cddb_server_port,
-                              PACKAGE_NAME, PACKAGE_VERSION,
-                              (proxy_auth=Cddb_Format_Proxy_Authentification())
-                              );
-
-    g_free(string);
-    g_free(tmp);
-    g_free(proxy_auth);
-    //g_print("Request Cddb_Search_Album_List_From_String_Freedb : '%s'\n", cddb_in);
-
-    // Send the request
-    gtk_statusbar_push(GTK_STATUSBAR(CddbStatusBar),CddbStatusBarContext,_("Sending request…"));
-    while (gtk_events_pending()) gtk_main_iteration();
-    if ( (bytes_written=send(socket_id,cddb_in,strlen(cddb_in)+1,0)) < 0)
-    {
-        Log_Print(LOG_ERROR,_("Cannot send the request (%s)"),g_strerror(errno));
-        Cddb_Close_Connection(socket_id);
-        g_free(cddb_in);
-        g_free(string);
-        g_free(cddb_server_name);
-        g_free(cddb_server_cgi_path);
-        return FALSE;
-    }
-    g_free(cddb_in);
-
-
-    /* Delete previous album list. */
-    cddb_album_model_clear ();
-    cddb_track_model_clear ();
-
-    if (CddbAlbumList)
-    {
-        Cddb_Free_Album_List();
-        CddbAlbumList = NULL;
-    }
-    gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchButton),TRUE);
-    gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchAutoButton),TRUE);
-
-
-    /*
-     * Read the answer
-     */
-    gtk_statusbar_push(GTK_STATUSBAR(CddbStatusBar),CddbStatusBarContext,_("Receiving data…"));
-    while (gtk_events_pending())
-        gtk_main_iteration();
-
-    // Write result in a file
-    if (Cddb_Write_Result_To_File(socket_id,&bytes_read_total) < 0)
-    {
-        msg = g_strdup(_("The server returned a bad response"));
-        gtk_statusbar_push(GTK_STATUSBAR(CddbStatusBar),CddbStatusBarContext,msg);
-        Log_Print(LOG_ERROR,"%s",msg);
-        g_free(msg);
-        g_free(cddb_server_name);
-        g_free(cddb_server_cgi_path);
-        gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchButton),FALSE);
-        gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchAutoButton),FALSE);
-        return FALSE;
-    }
-
-    // Parse server answer : Check returned code in the first line
-    if (Cddb_Read_Http_Header(&file,&cddb_out) <= 0 || !cddb_out) // Order is important!
-    {
-        msg = g_strdup_printf(_("The server returned a bad response: %s"),cddb_out);
-        gtk_statusbar_push(GTK_STATUSBAR(CddbStatusBar),CddbStatusBarContext,msg);
-        Log_Print(LOG_ERROR,"%s",msg);
-        g_free(msg);
-        g_free(cddb_out);
-        g_free(cddb_server_name);
-        g_free(cddb_server_cgi_path);
-        gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchButton),FALSE);
-        gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchAutoButton),FALSE);
-        if (file)
-            fclose(file);
-        return FALSE;
-    }
-    g_free(cddb_out);
-
-    // Read other lines, and get list of matching albums
-    // Composition of a line :
-    //  - freedb.org
-    // <a href="http://www.freedb.org/freedb_search_fmt.php?cat=rock&id=8c0f0a0b">Bob Dylan / MTV Unplugged</a><br>
-    cat_str      = g_strdup("http://www.freedb.org/freedb_search_fmt.php?cat=");
-    id_str       = g_strdup("&id=");
-    art_alb_str  = g_strdup("\">");
-    end_str      = g_strdup("</a>"); //"</a><br>");
-    html_end_str = g_strdup("</body>"); // To avoid the cddb lookups to hang
-    while ( CddbWindow && !CddbStopSearch
-    && Cddb_Read_Line(&file,&cddb_out) > 0 )
-    {
-        cddb_out_tmp = cddb_out;
-        //g_print("%s\n",cddb_out); // To print received data
-
-        // If the web search is disabled! (ex : http://www.freedb.org/modules.php?name=News&file=article&sid=246)
-        // The following string is displayed in the search page
-        if (cddb_out != NULL && strstr(cddb_out_tmp,"Sorry, The web-based search is currently down.") != NULL)
-        {
-            web_search_disabled = TRUE;
-            break;
-        }
-
-        // We may have severals album in the same line (other version of the same album?)
-        // Note : we test that the 'end' delimiter exists to avoid crashes
-        while ( cddb_out != NULL && (ptr_cat=strstr(cddb_out_tmp,cat_str)) != NULL && strstr(cddb_out_tmp,end_str) != NULL )
-        {
-            gchar *ptr_font, *ptr_font1;
-            gchar *ptr_id, *ptr_art_alb, *ptr_end;
-            gchar *copy;
-            CddbAlbum *cddbalbum;
-
-            cddbalbum = g_malloc0(sizeof(CddbAlbum));
-
-
-            // Parameters of the server used
-            cddbalbum->server_name     = g_strdup(cddb_server_name);
-            cddbalbum->server_port     = cddb_server_port;
-            cddbalbum->server_cgi_path = g_strdup(cddb_server_cgi_path);
-            cddbalbum->bitmap          = Cddb_Get_Pixbuf_From_Server_Name(cddbalbum->server_name);
-
-            // Get album category
-            cddb_out_tmp = ptr_cat + strlen(cat_str);
-            strncpy(buffer,cddb_out_tmp,MAX_STRING_LEN);
-            if ( (ptr_id=strstr(buffer,id_str)) != NULL )
-                *ptr_id = 0;
-            cddbalbum->category = Try_To_Validate_Utf8_String(buffer);
-
-
-            // Get album ID
-            //cddb_out_tmp = strstr(cddb_out_tmp,id_str) + strlen(id_str);
-            cddb_out_tmp = ptr_cat + strlen(cat_str) + 2;
-            strncpy(buffer,cddb_out_tmp,MAX_STRING_LEN);
-            if ( (ptr_art_alb=strstr(buffer,art_alb_str)) != NULL )
-                *ptr_art_alb = 0;
-            cddbalbum->id = Try_To_Validate_Utf8_String(buffer);
-
-
-            // Get album and artist names.
-            // Note : some names can be like this "<font size=-1>2</font>" (for other version of the same album)
-            cddb_out_tmp = strstr(cddb_out_tmp,art_alb_str) + strlen(art_alb_str);
-            strncpy(buffer,cddb_out_tmp,MAX_STRING_LEN);
-            if ( (ptr_end=strstr(buffer,end_str)) != NULL )
-                *ptr_end = 0;
-            if ( (ptr_font=strstr(buffer,"</font>")) != NULL )
-            {
-                copy = NULL;
-                *ptr_font = 0;
-                if ( (ptr_font1=strstr(buffer,">")) != NULL )
-                {
-                    copy = g_strdup_printf("%s -> %s",ptr_font1+1,art_alb_tmp);
-                    cddbalbum->other_version = TRUE;
-                }else
-                {
-                    copy = g_strdup(buffer);
-                }
-
-            }else
-            {
-                copy = g_strdup(buffer);
-                art_alb_tmp = cddbalbum->artist_album;
-                use_art_alb = TRUE;
-            }
-
-            cddbalbum->artist_album = Try_To_Validate_Utf8_String(copy);
-            g_free(copy);
-
-            if (use_art_alb)
-            {
-                art_alb_tmp = cddbalbum->artist_album;
-                use_art_alb = FALSE;
-            }
-
-
-            // New position the search the next string
-            cddb_out_tmp = strstr(cddb_out_tmp,end_str) + strlen(end_str);
-
-            CddbAlbumList = g_list_append(CddbAlbumList,cddbalbum);
-        }
-
-        // To avoid the cddb lookups to hang (Patch from Paul Giordano)
-        /* It appears that on some systems that cddb lookups continue to attempt
-         * to get data from the socket even though the other system has completed
-         * sending. Here we see if the actual end of data is in the last block read.
-         * In the case of the html scan, the </body> tag is used because there's
-         * no crlf followint the </html> tag.
-         */
-        if (strstr(cddb_out_tmp,html_end_str)!=NULL)
-        {
-            g_free(cddb_out);
-            break;
-        }
-        g_free(cddb_out);
-    }
-    g_free(cat_str); g_free(id_str); g_free(art_alb_str); g_free(end_str); g_free(html_end_str);
-    g_free(cddb_server_name);
-    g_free(cddb_server_cgi_path);
-
-    // Close file opened for reading lines
-    if (file)
-    {
-        fclose(file);
-        file = NULL;
-    }
-
-    gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchButton),FALSE);
-    gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchAutoButton),FALSE);
-
-    // Close connection
-    Cddb_Close_Connection(socket_id);
-
-    if (web_search_disabled)
-        msg = g_strdup_printf(_("Sorry, the web-based search is currently not available"));
-    else
-        msg = g_strdup_printf(ngettext("Found one matching album","Found %d matching albums",g_list_length(CddbAlbumList)),g_list_length(CddbAlbumList));
-    gtk_statusbar_push(GTK_STATUSBAR(CddbStatusBar),CddbStatusBarContext,msg);
-    g_free(msg);
-
-    // Initialize the button
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbDisplayRedLinesButton),FALSE);
-
-    // Load the albums found in the list
-    Cddb_Load_Album_List(FALSE);
-
-    return TRUE;
-}
-
-
-/*
- * Site GNUDB.ORG - Manual Search
- * Send request (using the HTML search page in freedb.org site) to the CD database
- * to get the list of albums matching to a string.
- */
-static gboolean
-Cddb_Search_Album_List_From_String_Gnudb (void)
-{
-    gint   socket_id;
-    gchar *string = NULL;
-    gchar *tmp, *tmp1;
-    gchar *cddb_in;         // For the request to send
-    gchar *cddb_out = NULL; // Answer received
-    gchar *cddb_out_tmp;
-    gchar *msg;
-    gchar *proxy_auth = NULL;
-    gchar *cddb_server_name;
-    gint   cddb_server_port;
-    gchar *cddb_server_cgi_path;
-
-    gchar *ptr_cat, *cat_str, *art_alb_str;
-    gchar *end_str;
-    gchar *ptr_sraf, *sraf_str, *sraf_end_str;
-    gchar *html_end_str;
-    gchar  buffer[MAX_STRING_LEN+1];
-    gint   bytes_written;
-    gulong bytes_read_total = 0;
-    FILE  *file;
-    gint   num_albums = 0;
-    gint   total_num_albums = 0;
-
-    gchar *next_page = NULL;
-    gint   next_page_cpt = 0;
-    gboolean next_page_found;
-
-
-    gtk_statusbar_push(GTK_STATUSBAR(CddbStatusBar),CddbStatusBarContext,"");
-
-    /* Get words to search... */
-    string = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(CddbSearchStringCombo)))));
-    if (!string || g_utf8_strlen(string, -1) <= 0)
-        return FALSE;
-
-    /* Format the string of words */
-    g_strstrip (string);
-    /* Remove the duplicated spaces */
-    while ((tmp=strstr(string,"  "))!=NULL) // Search 2 spaces
-    {
-        tmp1 = tmp + 1;
-        while (*tmp1)
-            *(tmp++) = *(tmp1++);
-        *tmp = '\0';
-    }
-
-    Add_String_To_Combo_List(CddbSearchStringModel, string);
-
-    /* Convert spaces to '+' */
-    while ( (tmp=strchr(string,' '))!=NULL )
-        *tmp = '+';
-
-
-    /* Delete previous album list. */
-    cddb_album_model_clear ();
-    cddb_track_model_clear ();
-
-    if (CddbAlbumList)
-    {
-        Cddb_Free_Album_List();
-        CddbAlbumList = NULL;
-    }
-    gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchButton),TRUE);
-    gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchAutoButton),TRUE);
-
-
-    // Do a loop to load all the pages of results
-    do
-    {
-        cddb_server_name     = g_strdup(CDDB_SERVER_NAME_MANUAL_SEARCH);    //"www.gnudb.org");
-        cddb_server_port     = CDDB_SERVER_PORT_MANUAL_SEARCH;              //80;
-        cddb_server_cgi_path = g_strdup(CDDB_SERVER_CGI_PATH_MANUAL_SEARCH);//"/~cddb/cddb.cgi");
-
-        /* Connection to the server */
-        if ( (socket_id=Cddb_Open_Connection(CDDB_USE_PROXY?CDDB_PROXY_NAME:cddb_server_name,
-                                             CDDB_USE_PROXY?CDDB_PROXY_PORT:cddb_server_port)) <= 0 )
-        {
-            g_free(string);
-            g_free(cddb_server_name);
-            g_free(cddb_server_cgi_path);
-            gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchButton),FALSE);
-            gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchAutoButton),FALSE);
-            return FALSE;
-        }
-
-
-        /* Build request */
-        cddb_in = g_strdup_printf("GET %s%s/search/"
-                                  "%s"
-                                  "?page=%d"
-                                  " HTTP/1.1\r\n"
-                                  "Host: %s:%d\r\n"
-                                  "User-Agent: %s %s\r\n"
-                                  "%s"
-                                  "Connection: close\r\n"
-                                  "\r\n",
-                                  CDDB_USE_PROXY?"http://":"", CDDB_USE_PROXY?cddb_server_name:"",  // Needed when using proxy
-                                  string,
-                                  next_page_cpt,
-                                  cddb_server_name,cddb_server_port,
-                                  PACKAGE_NAME, PACKAGE_VERSION,
-                                  (proxy_auth=Cddb_Format_Proxy_Authentification())
-                                  );
-        next_page_found = FALSE;
-        g_free(proxy_auth);
-        //g_print("Request Cddb_Search_Album_List_From_String_Gnudb : '%s'\n", cddb_in);
-
-        // Send the request
-        gtk_statusbar_push(GTK_STATUSBAR(CddbStatusBar),CddbStatusBarContext,_("Sending request…"));
-        while (gtk_events_pending()) gtk_main_iteration();
-        if ( (bytes_written=send(socket_id,cddb_in,strlen(cddb_in)+1,0)) < 0)
-        {
-            Log_Print(LOG_ERROR,_("Cannot send the request (%s)"),g_strerror(errno));
-            Cddb_Close_Connection(socket_id);
-            g_free(cddb_in);
-            g_free(string);
-            g_free(cddb_server_name);
-            g_free(cddb_server_cgi_path);
-            gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchButton),FALSE);
-            gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchAutoButton),FALSE);
-            return FALSE;
-        }
-        g_free(cddb_in);
-
-
-        /*
-         * Read the answer
-         */
-        if (total_num_albums != 0)
-            msg = g_strdup_printf(_("Receiving data of page %d (album %d/%d)…"),next_page_cpt,num_albums,total_num_albums);
-        else
-            msg = g_strdup_printf(_("Receiving data of page %d…"),next_page_cpt);
-
-        gtk_statusbar_push(GTK_STATUSBAR(CddbStatusBar),CddbStatusBarContext,msg);
-        g_free(msg);
-        while (gtk_events_pending())
-            gtk_main_iteration();
-
-        // Write result in a file
-        if (Cddb_Write_Result_To_File(socket_id,&bytes_read_total) < 0)
-        {
-            msg = g_strdup(_("The server returned a bad response"));
-            gtk_statusbar_push(GTK_STATUSBAR(CddbStatusBar),CddbStatusBarContext,msg);
-            Log_Print(LOG_ERROR,"%s",msg);
-            g_free(msg);
-            g_free(string);
-            g_free(cddb_server_name);
-            g_free(cddb_server_cgi_path);
-            gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchButton),FALSE);
-            gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchAutoButton),FALSE);
-            return FALSE;
-        }
-
-        // Parse server answer : Check returned code in the first line
-        file = NULL;
-        if (Cddb_Read_Http_Header(&file,&cddb_out) <= 0 || !cddb_out) // Order is important!
-        {
-            msg = g_strdup_printf(_("The server returned a bad response: %s"),cddb_out);
-            gtk_statusbar_push(GTK_STATUSBAR(CddbStatusBar),CddbStatusBarContext,msg);
-            Log_Print(LOG_ERROR,"%s",msg);
-            g_free(msg);
-            g_free(cddb_out);
-            g_free(string);
-            g_free(cddb_server_name);
-            g_free(cddb_server_cgi_path);
-            gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchButton),FALSE);
-            gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchAutoButton),FALSE);
-            if (file)
-                fclose(file);
-            return FALSE;
-        }
-        g_free(cddb_out);
-
-        // The next page if exists will contains this url :
-        g_free(next_page);
-        next_page = g_strdup_printf("?page=%d",++next_page_cpt);
-
-        // Read other lines, and get list of matching albums
-        // Composition of a line :
-        //  - gnudb.org
-        // <a href="http://www.gnudb.org/cd/ro21123813"><b>Indochine / Le Birthday Album</b></a><br>
-        cat_str      = g_strdup("http://www.gnudb.org/cd/");
-        art_alb_str  = g_strdup("\"><b>");
-        end_str      = g_strdup("</b></a>"); //"</a><br>");
-        html_end_str = g_strdup("</body>"); // To avoid the cddb lookups to hang
-        // Composition of a line displaying the number of albums
-        // <h2>Search Results, 3486 albums found:</h2>
-        sraf_str     = g_strdup("<h2>Search Results, ");
-        sraf_end_str = g_strdup(" albums found:</h2>");
-
-        while ( CddbWindow && !CddbStopSearch
-        && Cddb_Read_Line(&file,&cddb_out) > 0 )
-        {
-            cddb_out_tmp = cddb_out;
-            //g_print("%s\n",cddb_out); // To print received data
-
-            // Line that displays the number of total albums return by the search
-            if ( cddb_out != NULL
-            && total_num_albums == 0 // Do it only the first time
-            && (ptr_sraf=strstr(cddb_out_tmp,sraf_end_str)) != NULL
-            && strstr(cddb_out_tmp,sraf_str) != NULL )
-            {
-                // Get total number of albums
-                ptr_sraf = 0;
-                total_num_albums = atoi(cddb_out_tmp + strlen(sraf_str));
-            }
-
-            // For GNUDB.ORG : one album per line
-            if ( cddb_out != NULL
-            && (ptr_cat=strstr(cddb_out_tmp,cat_str)) != NULL
-            && strstr(cddb_out_tmp,end_str) != NULL )
-            {
-                gchar *ptr_art_alb, *ptr_end;
-                gchar *valid;
-                CddbAlbum *cddbalbum;
-
-                cddbalbum = g_malloc0(sizeof(CddbAlbum));
-
-                // Parameters of the server used
-                cddbalbum->server_name     = g_strdup(cddb_server_name);
-                cddbalbum->server_port     = cddb_server_port;
-                cddbalbum->server_cgi_path = g_strdup(cddb_server_cgi_path);
-                cddbalbum->bitmap          = Cddb_Get_Pixbuf_From_Server_Name(cddbalbum->server_name);
-
-                num_albums++;
-
-                // Get album category
-                cddb_out_tmp = ptr_cat + strlen(cat_str);
-                strncpy(buffer,cddb_out_tmp,MAX_STRING_LEN);
-                *(buffer+2) = 0;
-
-                // Check only the 2 first characters to set the right category
-                if ( strncmp(buffer,"blues",2)==0 )
-                    valid = g_strdup("blues");
-                else if ( strncmp(buffer,"classical",2)==0 )
-                    valid = g_strdup("classical");
-                else if ( strncmp(buffer,"country",2)==0 )
-                    valid = g_strdup("country");
-                else if ( strncmp(buffer,"data",2)==0 )
-                    valid = g_strdup("data");
-                else if ( strncmp(buffer,"folk",2)==0 )
-                    valid = g_strdup("folk");
-                else if ( strncmp(buffer,"jazz",2)==0 )
-                    valid = g_strdup("jazz");
-                else if ( strncmp(buffer,"misc",2)==0 )
-                    valid = g_strdup("misc");
-                else if ( strncmp(buffer,"newage",2)==0 )
-                    valid = g_strdup("newage");
-                else if ( strncmp(buffer,"reggae",2)==0 )
-                    valid = g_strdup("reggae");
-                else if ( strncmp(buffer,"rock",2)==0 )
-                    valid = g_strdup("rock");
-                else //if ( strncmp(buffer,"soundtrack",2)==0 )
-                    valid = g_strdup("soundtrack");
-
-                cddbalbum->category = valid; //Not useful -> Try_To_Validate_Utf8_String(valid);
-
-
-                // Get album ID
-                cddb_out_tmp = ptr_cat + strlen(cat_str) + 2;
-                strncpy(buffer,cddb_out_tmp,MAX_STRING_LEN);
-                if ( (ptr_art_alb=strstr(buffer,art_alb_str)) != NULL )
-                    *ptr_art_alb = 0;
-                cddbalbum->id = Try_To_Validate_Utf8_String(buffer);
-
-
-                // Get album and artist names.
-                cddb_out_tmp = strstr(cddb_out_tmp,art_alb_str) + strlen(art_alb_str);
-                strncpy(buffer,cddb_out_tmp,MAX_STRING_LEN);
-                if ( (ptr_end=strstr(buffer,end_str)) != NULL )
-                    *ptr_end = 0;
-                cddbalbum->artist_album = Try_To_Validate_Utf8_String(buffer);
-
-                CddbAlbumList = g_list_append(CddbAlbumList,cddbalbum);
-            }
-
-            // To avoid the cddb lookups to hang (Patch from Paul Giordano)
-            /* It appears that on some systems that cddb lookups continue to attempt
-             * to get data from the socket even though the other system has completed
-             * sending. Here we see if the actual end of data is in the last block read.
-             * In the case of the html scan, the </body> tag is used because there's
-             * no crlf followint the </html> tag.
-             */
-            /***if (strstr(cddb_out_tmp,html_end_str)!=NULL)
-                break;***/
-
-
-            // Check if the link to the next results exists to loop again with the next link
-            if (cddb_out != NULL && next_page != NULL
-            && (strstr(cddb_out_tmp,next_page) != NULL || next_page_cpt < 2) ) // BUG : "next_page_cpt < 2" to fix a bug in gnudb : the page 0 doesn't contain link to the page=1, so we force it...
-            {
-                next_page_found = TRUE;
-
-                if ( !(next_page_cpt < 2) ) // Don't display message in this case as it will be displayed each line of page 0 and 1
-                {
-                    msg = g_strdup_printf(_("More results to load…"));
-                    gtk_statusbar_push(GTK_STATUSBAR(CddbStatusBar),CddbStatusBarContext,msg);
-                    g_free(msg);
-
-                    while (gtk_events_pending())
-                        gtk_main_iteration();
-                }
-            }
-
-            g_free(cddb_out);
-        }
-        g_free(cat_str); g_free(art_alb_str); g_free(end_str); g_free(html_end_str);
-        g_free(sraf_str);g_free(sraf_end_str);
-        g_free(cddb_server_name);
-        g_free(cddb_server_cgi_path);
-
-        // Close file opened for reading lines
-        if (file)
-        {
-            fclose(file);
-            file = NULL;
-        }
-
-        // Close connection
-        Cddb_Close_Connection(socket_id);
-
-    } while (next_page_found);
-    g_free(string);
-
-
-    gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchButton),FALSE);
-    gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchAutoButton),FALSE);
-
-    msg = g_strdup_printf(ngettext("Found one matching album","Found %d matching albums",num_albums),num_albums);
-    gtk_statusbar_push(GTK_STATUSBAR(CddbStatusBar),CddbStatusBarContext,msg);
-    g_free(msg);
-
-    // Initialize the button
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbDisplayRedLinesButton),FALSE);
-
-    // Load the albums found in the list
-    Cddb_Load_Album_List(FALSE);
-
-    return TRUE;
-}
-
-
-/*
- * Send cddb query using the CddbId generated from the selected files to get the
- * list of albums matching with this cddbid.
- */
-static gboolean
-Cddb_Search_Album_From_Selected_Files (void)
-{
-    gint   socket_id;
-    gint   bytes_written;
-    gulong bytes_read_total = 0;
-    FILE  *file = NULL;
-
-    gchar *cddb_in = NULL; /* For the request to send. */
-    gchar *cddb_out = NULL;       /* Answer received */
-    gchar *cddb_out_tmp;
-    gchar *msg;
-    gchar *proxy_auth;
-    gchar *cddb_server_name;
-    gint   cddb_server_port;
-    gchar *cddb_server_cgi_path;
-    gint   server_try = 0;
-    gchar *tmp, *valid;
-    gchar *query_string;
-    gchar *cddb_discid;
-    gchar *cddb_end_str;
-
-    guint total_frames = 150;   /* First offset is (almost) always 150 */
-    guint disc_length  = 2;     /* and 2s elapsed before first track */
-
-    GtkTreeSelection *file_selection = NULL;
-    guint file_selectedcount = 0;
-    GtkTreeIter  currentIter;
-    guint total_id;
-    guint num_tracks;
-
-    gpointer iterptr;
-
-    GtkListStore *fileListModel;
-    GtkTreeIter *fileIter;
-    GList *file_iterlist = NULL;
-    GList *l;
-
-    g_return_val_if_fail (BrowserList != NULL, FALSE);
-
-    // Number of selected files
-    fileListModel = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(BrowserList)));
-    file_selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserList));
-    file_selectedcount = gtk_tree_selection_count_selected_rows(file_selection);
-
-    // Create the list 'file_iterlist' of selected files (no selected files => all files selected)
-    if (file_selectedcount > 0)
-    {
-        GList* file_selectedrows = gtk_tree_selection_get_selected_rows(file_selection, NULL);
-
-        for (l = file_selectedrows; l != NULL; l = g_list_next (l))
-        {
-            iterptr = g_malloc0(sizeof(GtkTreeIter));
-            if (gtk_tree_model_get_iter(GTK_TREE_MODEL(fileListModel),
-                                        (GtkTreeIter*) iterptr,
-                                        (GtkTreePath*) l->data))
-            {
-                file_iterlist = g_list_prepend (file_iterlist, iterptr);
-            }
-        }
-        g_list_free_full (file_selectedrows,
-                          (GDestroyNotify)gtk_tree_path_free);
-
-    } else /* No rows selected, use the whole list */
-    {
-        gtk_tree_model_get_iter_first(GTK_TREE_MODEL(fileListModel), &currentIter);
-
-        do
-        {
-            iterptr = g_memdup(&currentIter, sizeof(GtkTreeIter));
-            file_iterlist = g_list_prepend (file_iterlist, iterptr);
-        } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(fileListModel), &currentIter));
-
-        file_selectedcount = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(fileListModel), NULL);
-    }
-
-    if (file_selectedcount == 0)
-    {
-        msg = g_strdup_printf(_("No file selected"));
-        gtk_statusbar_push(GTK_STATUSBAR(CddbStatusBar),CddbStatusBarContext,msg);
-        g_free(msg);
-        return TRUE;
-    }else if (file_selectedcount > 99)
-    {
-        // The CD redbook standard defines the maximum number of tracks as 99, any
-        // queries with more than 99 tracks will never return a result.
-        msg = g_strdup_printf(_("More than 99 files selected. Cannot send request"));
-        gtk_statusbar_push(GTK_STATUSBAR(CddbStatusBar),CddbStatusBarContext,msg);
-        g_free(msg);
-        return FALSE;
-    }else
-    {
-        msg = g_strdup_printf(ngettext("One file selected","%d files selected",file_selectedcount),file_selectedcount);
-        gtk_statusbar_push(GTK_STATUSBAR(CddbStatusBar),CddbStatusBarContext,msg);
-        g_free(msg);
-    }
-
-    // Generate query string and compute discid from the list 'file_iterlist'
-    total_id = 0;
-    num_tracks = file_selectedcount;
-    query_string = g_strdup("");
-
-    for (l = g_list_reverse (file_iterlist); l != NULL; l = g_list_next (l))
-    {
-        ET_File *etfile;
-        gulong secs = 0;
-
-        fileIter = (GtkTreeIter *)l->data;
-        etfile = Browser_List_Get_ETFile_From_Iter(fileIter);
-
-        tmp = query_string;
-        if (strlen(query_string)>0)
-            query_string = g_strdup_printf("%s+%d", query_string, total_frames);
-        else
-            query_string = g_strdup_printf("%d", total_frames);
-        g_free(tmp);
-
-        secs = etfile->ETFileInfo->duration;
-        total_frames += secs * 75;
-        disc_length  += secs;
-        while (secs > 0)
-        {
-            total_id = total_id + (secs % 10);
-            secs = secs / 10;
-        }
-    }
-
-    g_list_free_full (file_iterlist, (GDestroyNotify)g_free);
-
-    // Compute CddbId
-    cddb_discid = g_strdup_printf("%08x",(guint)(((total_id % 0xFF) << 24) |
-                                         (disc_length << 8) | num_tracks));
-
-
-    /* Delete previous album list. */
-    cddb_album_model_clear ();
-    cddb_track_model_clear ();
-
-    if (CddbAlbumList)
-    {
-        Cddb_Free_Album_List();
-        CddbAlbumList = NULL;
-    }
-    gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchButton),TRUE);
-    gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchAutoButton),TRUE);
-
-
-    CDDB_USE_LOCAL_ACCESS = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbUseLocalAccess));
-    if (CDDB_USE_LOCAL_ACCESS) // Remote or Local acces?
-    {
-        /*
-         * Local cddb acces
-         */
-        static const gchar *CddbDir[] = // Or use cddb_genre_vs_id3_genre[][2]?
-        {
-            "blues", "classical", "country", "data",   "folk",
-            "jazz",  "misc",      "newage",  "reggae", "rock",
-            "soundtrack"
-        };
-        static const gsize CddbDirSize = G_N_ELEMENTS (CddbDir) - 1;
-        gsize i;
-
-        // We check if the file corresponding to the discid exists in each directory
-        for (i=0; i<=CddbDirSize; i++)
-        {
-            gchar *file_path;
-
-            if (!CDDB_LOCAL_PATH || strlen(CDDB_LOCAL_PATH)==0)
-            {
-                GtkWidget *msgdialog;
-
-                msgdialog = gtk_message_dialog_new(GTK_WINDOW(CddbWindow),
-                                                   GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-                                                   GTK_MESSAGE_ERROR,
-                                                   GTK_BUTTONS_CLOSE,
-                                                   "%s",
-                                                   _("The path for 'Local CD Database' was not defined"));
-                /* Translators: 'it' in this sentence refers to the local CD
-                 * database path. */
-                gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(msgdialog), "%s", _("Enter it in the preferences window before using this search."));
-                gtk_window_set_title (GTK_WINDOW (msgdialog),
-                                      _("Local CD search"));
-
-                gtk_dialog_run(GTK_DIALOG(msgdialog));
-                gtk_widget_destroy(msgdialog);
-                break;
-            }
-            file_path = g_strconcat(CDDB_LOCAL_PATH,
-                                    CDDB_LOCAL_PATH[strlen(CDDB_LOCAL_PATH)-1]!=G_DIR_SEPARATOR ? G_DIR_SEPARATOR_S : "",
-                                    CddbDir[i],"/",cddb_discid,NULL);
-
-            if ( (file=fopen(file_path,"r"))!=0 )
-            {
-                // File found
-                CddbAlbum *cddbalbum;
-                gint rc = 0;
-
-                cddbalbum = g_malloc0(sizeof(CddbAlbum));
-
-                // Parameters of the server used (Local acces => specific!)
-                cddbalbum->server_name     = NULL;                // No server name
-                cddbalbum->server_port     = 0;                   // No server port
-                cddbalbum->server_cgi_path = g_strdup(file_path); /* Filename. */
-                cddbalbum->bitmap          = Cddb_Get_Pixbuf_From_Server_Name(file_path);
-
-                // Get album category
-                cddbalbum->category = Try_To_Validate_Utf8_String(CddbDir[i]);
-
-                // Get album ID
-                cddbalbum->id = Try_To_Validate_Utf8_String(cddb_discid);
-
-                while ( CddbWindow && !CddbStopSearch
-                && (rc = Cddb_Read_Line(&file,&cddb_out)) > 0 )
-                {
-                    if (!cddb_out) // Empty line?
-                        continue;
-                    //g_print("%s\n",cddb_out);
-
-                    // Get Album and Artist names
-                    if ( strncmp(cddb_out,"DTITLE=",7)==0 )
-                    {
-                        // Note : disc title too long take severals lines. For example :
-                        // DTITLE=Marilyn Manson / The Nobodies (2005 Against All Gods Mix - Korea Tour L
-                        // DTITLE=imited Edition)
-                        if (!cddbalbum->artist_album)
-                        {
-                            // It is the first time we find DTITLE...
-
-                            // Artist and album
-                            cddbalbum->artist_album = Try_To_Validate_Utf8_String(cddb_out+7); // '7' to skip 'DTITLE='
-                        }else
-                        {
-                            // It is at least the second time we find DTITLE
-                            // So we suppose that only the album was truncated
-
-                            // Album
-                            valid = Try_To_Validate_Utf8_String(cddb_out+7); // '7' to skip 'DTITLE='
-                            tmp = cddbalbum->artist_album; // To free...
-                            cddbalbum->artist_album = g_strconcat(cddbalbum->artist_album,valid,NULL);
-                            g_free(tmp);
-
-                            // Don't need to read more data to read in the file
-                            break;
-                        }
-                    }
-
-                    g_free(cddb_out);
-                }
-
-                CddbAlbumList = g_list_append(CddbAlbumList,cddbalbum);
-
-                // Need to close it, if not done in Cddb_Read_Line
-                if (file)
-                    fclose(file);
-                file = NULL;
-            }
-            g_free(file_path);
-
-        }
-
-
-    }else
-    {
-
-        /*
-         * Remote cddb acces
-         *
-         * Request the two servers
-         *   - 1) www.freedb.org
-         *   - 2) MusicBrainz Gateway : freedb.musicbrainz.org (in Easytag < 2.1.1, it was: www.mb.inhouse.co.uk)
-         */
-        while (server_try < 2)
-        {
-            server_try++;
-            if (server_try == 1)
-            {
-                // 1rst try
-                cddb_server_name     = g_strdup(CDDB_SERVER_NAME_AUTOMATIC_SEARCH);
-                cddb_server_port     = CDDB_SERVER_PORT_AUTOMATIC_SEARCH;
-                cddb_server_cgi_path = g_strdup(CDDB_SERVER_CGI_PATH_AUTOMATIC_SEARCH);
-            }else
-            {
-                // 2sd try
-                cddb_server_name     = g_strdup(CDDB_SERVER_NAME_AUTOMATIC_SEARCH2);
-                cddb_server_port     = CDDB_SERVER_PORT_AUTOMATIC_SEARCH2;
-                cddb_server_cgi_path = g_strdup(CDDB_SERVER_CGI_PATH_AUTOMATIC_SEARCH2);
-            }
-
-            // Check values
-            if (!cddb_server_name || strcmp(cddb_server_name,"")==0)
-                continue;
-
-            // Connection to the server
-            if ( (socket_id=Cddb_Open_Connection(CDDB_USE_PROXY?CDDB_PROXY_NAME:cddb_server_name,
-                                                 CDDB_USE_PROXY?CDDB_PROXY_PORT:cddb_server_port)) <= 0 )
-            {
-                g_free(cddb_in);
-                g_free(cddb_server_name);
-                g_free(cddb_server_cgi_path);
-                return FALSE;
-            }
-
-            // CDDB Request (ex: GET /~cddb/cddb.cgi?cmd=cddb+query+0800ac01+1++150+172&hello=noname+localhost+EasyTAG+0.31&proto=1 HTTP/1.1\r\nHost: freedb.freedb.org:80\r\nConnection: close)
-            // Without proxy : "GET /~cddb/cddb.cgi?…" but doesn't work with a proxy.
-            // With proxy    : "GET http://freedb.freedb.org/~cddb/cddb.cgi?…"
-            // proto=1 => ISO-8859-1 - proto=6 => UTF-8
-            cddb_in = g_strdup_printf("GET %s%s%s?cmd=cddb+query+"
-                                      "%s+"
-                                      "%d+%s+"
-                                      "%d"
-                                      "&hello=noname+localhost+%s+%s"
-                                      "&proto=6 HTTP/1.1\r\n"
-                                      "Host: %s:%d\r\n"
-                                      "%s"
-                                      "Connection: close\r\n\r\n",
-                                      CDDB_USE_PROXY?"http://":"",CDDB_USE_PROXY?cddb_server_name:"", cddb_server_cgi_path,
-                                      cddb_discid,
-                                      num_tracks, query_string,
-                                      disc_length,
-                                      PACKAGE_NAME, PACKAGE_VERSION,
-                                      cddb_server_name,cddb_server_port,
-                                      (proxy_auth=Cddb_Format_Proxy_Authentification())
-                                      );
-            g_free(proxy_auth);
-            //g_print("Request Cddb_Search_Album_From_Selected_Files : '%s'\n", cddb_in);
-
-            msg = g_strdup_printf(_("Sending request (CddbId: %s, #tracks: %d, Disc length: %d)…"),
-                                cddb_discid,num_tracks,disc_length);
-            gtk_statusbar_push(GTK_STATUSBAR(CddbStatusBar),CddbStatusBarContext,msg);
-            g_free(msg);
-
-            while (gtk_events_pending())
-                gtk_main_iteration();
-
-            if ( (bytes_written=send(socket_id,cddb_in,strlen(cddb_in)+1,0)) < 0)
-            {
-                Log_Print(LOG_ERROR,_("Cannot send the request (%s)"),g_strerror(errno));
-                Cddb_Close_Connection(socket_id);
-                g_free(cddb_in);
-                g_free(cddb_server_name);
-                g_free(cddb_server_cgi_path);
-                return FALSE;
-            }
-            g_free(cddb_in);
-            cddb_in = NULL;
-
-
-            /*
-             * Read the answer
-             */
-            gtk_statusbar_push(GTK_STATUSBAR(CddbStatusBar),CddbStatusBarContext,_("Receiving data…"));
-            while (gtk_events_pending())
-                gtk_main_iteration();
-
-            // Write result in a file
-            if (Cddb_Write_Result_To_File(socket_id,&bytes_read_total) < 0)
-            {
-                msg = g_strdup(_("The server returned a bad response"));
-                gtk_statusbar_push(GTK_STATUSBAR(CddbStatusBar),CddbStatusBarContext,msg);
-                Log_Print(LOG_ERROR,"%s",msg);
-                g_free(msg);
-                g_free(cddb_server_name);
-                g_free(cddb_server_cgi_path);
-                gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchButton),FALSE);
-                gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchAutoButton),FALSE);
-                return FALSE;
-            }
-
-            // Parse server answer : Check returned code in the first line
-            file = NULL;
-            if (Cddb_Read_Http_Header(&file,&cddb_out) <= 0 || !cddb_out) // Order is important!
-            {
-                msg = g_strdup_printf(_("The server returned a bad response: %s"),cddb_out);
-                gtk_statusbar_push(GTK_STATUSBAR(CddbStatusBar),CddbStatusBarContext,msg);
-                Log_Print(LOG_ERROR,"%s",msg);
-                g_free(msg);
-                g_free(cddb_out);
-                g_free(cddb_server_name);
-                g_free(cddb_server_cgi_path);
-                gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchButton),FALSE);
-                gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchAutoButton),FALSE);
-                if (file)
-                    fclose(file);
-                return FALSE;
-            }
-            g_free(cddb_out);
-
-            cddb_end_str = g_strdup(".");
-
-            /*
-             * Format :
-             * For Freedb, Gnudb, the lines to read are like :
-             *      211 Found inexact matches, list follows (until terminating `.')
-             *      rock 8f0dc00b Archive / Noise
-             *      rock 7b0dd80b Archive / Noise
-             *      .
-             * For MusicBrainz Cddb Gateway (see http://wiki.musicbrainz.org/CddbGateway), the lines to read are like :
-             *      200 jazz 7e0a100a Pink Floyd / Dark Side of the Moon
-             */
-            while ( CddbWindow && !CddbStopSearch
-            && Cddb_Read_Line(&file,&cddb_out) > 0 )
-            {
-                cddb_out_tmp = cddb_out;
-                //g_print("%s\n",cddb_out);
-
-                // To avoid the cddb lookups to hang (Patch from Paul Giordano)
-                /* It appears that on some systems that cddb lookups continue to attempt
-                 * to get data from the socket even though the other system has completed
-                 * sending. The fix adds one check to the loops to see if the actual
-                 * end of data is in the last block read. In this case, the last line
-                 * will be a single '.'
-                 */
-                if ( cddb_out_tmp && strlen(cddb_out_tmp)<=3 && strstr(cddb_out_tmp,cddb_end_str)!=NULL )
-                {
-                    g_free (cddb_out);
-                    break;
-                }
-
-                // Compatibility for the MusicBrainz CddbGateway
-                if ( cddb_out_tmp && strlen(cddb_out_tmp)>3
-                &&  (strncmp(cddb_out_tmp,"200",3)==0
-                ||   strncmp(cddb_out_tmp,"210",3)==0
-                ||   strncmp(cddb_out_tmp,"211",3)==0) )
-                    cddb_out_tmp = cddb_out_tmp + 4;
-
-                // Reading of lines with albums (skiping return code lines :
-                // "211 Found inexact matches, list follows (until terminating `.')" )
-                if (cddb_out != NULL && strstr(cddb_out_tmp,"/") != NULL)
-                {
-                    gchar* ptr;
-                    CddbAlbum *cddbalbum;
-
-                    cddbalbum = g_malloc0(sizeof(CddbAlbum));
-
-                    // Parameters of the server used
-                    cddbalbum->server_name     = g_strdup(cddb_server_name);
-                    cddbalbum->server_port     = cddb_server_port;
-                    cddbalbum->server_cgi_path = g_strdup(cddb_server_cgi_path);
-                    cddbalbum->bitmap          = Cddb_Get_Pixbuf_From_Server_Name(cddbalbum->server_name);
-
-                    // Get album category
-                    if ( (ptr = strstr(cddb_out_tmp, " ")) != NULL )
-                    {
-                        *ptr = 0;
-                        cddbalbum->category = Try_To_Validate_Utf8_String(cddb_out_tmp);
-                        *ptr = ' ';
-                        cddb_out_tmp = ptr + 1;
-                    }
-
-                    // Get album ID
-                    if ( (ptr = strstr(cddb_out_tmp, " ")) != NULL )
-                    {
-                        *ptr = 0;
-                        cddbalbum->id = Try_To_Validate_Utf8_String(cddb_out_tmp);
-                        *ptr = ' ';
-                        cddb_out_tmp = ptr + 1;
-                    }
-
-                    // Get album and artist names.
-                    cddbalbum->artist_album = Try_To_Validate_Utf8_String(cddb_out_tmp);
-
-                    CddbAlbumList = g_list_append(CddbAlbumList,cddbalbum);
-                }
-
-                g_free(cddb_out);
-            }
-            g_free(cddb_end_str);
-            g_free(cddb_server_name);
-            g_free(cddb_server_cgi_path);
-
-            // Close file opened for reading lines
-            if (file)
-            {
-                fclose(file);
-                file = NULL;
-            }
-
-            // Close connection
-            Cddb_Close_Connection(socket_id);
-        }
-
-    }
-
-    msg = g_strdup_printf(ngettext("DiscID '%s' gave one matching album","DiscID '%s' gave %d matching albums",g_list_length(CddbAlbumList)),cddb_discid,g_list_length(CddbAlbumList));
-    gtk_statusbar_push(GTK_STATUSBAR(CddbStatusBar),CddbStatusBarContext,msg);
-    g_free(msg);
-
-    g_free(cddb_discid);
-    g_free(query_string);
-
-    gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchButton),FALSE);
-    gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchAutoButton),FALSE);
-
-    // Initialize the button
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbDisplayRedLinesButton), FALSE);
-
-    // Load the albums found in the list
-    Cddb_Load_Album_List(FALSE);
-
-    return TRUE;
-}
-
-
-/*
- * Callback when selecting a row in the Album List.
- * We get the list of tracks of the selected album
- */
-static gboolean
-Cddb_Get_Album_Tracks_List_CB (GtkTreeSelection *selection, gpointer data)
-{
-    gint i;
-    gint i_max = 5;
-
-    /* As may be not opened the first time (The server returned a wrong answer!)
-     * me try to reconnect severals times */
-    for (i = 1; i <= i_max; i++)
-    {
-        if ( Cddb_Get_Album_Tracks_List(selection) == TRUE )
-        {
-            break;
-        }
-    }
-    if (i <= i_max)
-    {
-        return TRUE;
-    } else
-    {
-        return FALSE;
-    }
-}
-
-/*
- * Look up a specific album in freedb, and save to a CddbAlbum structure
- */
-static gboolean
-Cddb_Get_Album_Tracks_List (GtkTreeSelection* selection)
-{
-    gint       socket_id = 0;
-    CddbAlbum *cddbalbum = NULL;
-    GList     *TrackOffsetList = NULL;
-    gchar     *cddb_in, *cddb_out = NULL;
-    gchar     *cddb_end_str, *msg, *copy, *valid;
-    gchar     *proxy_auth;
-    gchar     *cddb_server_name;
-    gint       cddb_server_port;
-    gchar     *cddb_server_cgi_path;
-    gint       bytes_written;
-    gulong     bytes_read_total = 0;
-    FILE      *file = NULL;
-    gboolean   read_track_offset = FALSE;
-    GtkTreeIter row;
-
-    g_return_val_if_fail (CddbWindow != NULL, FALSE);
-
-    cddb_track_model_clear ();
-    Cddb_Set_Apply_Button_Sensitivity ();
-
-    if (gtk_tree_selection_get_selected(selection, NULL, &row))
-    {
-        gtk_tree_model_get(GTK_TREE_MODEL(CddbAlbumListModel), &row, CDDB_ALBUM_LIST_DATA, &cddbalbum, -1);
-    }
-    if (!cddbalbum)
-        return FALSE;
-
-    // We have already the track list
-    if (cddbalbum->track_list != NULL)
-    {
-        Cddb_Load_Track_Album_List(cddbalbum->track_list);
-        return TRUE;
-    }
-
-    // Parameters of the server used
-    cddb_server_name     = cddbalbum->server_name;
-    cddb_server_port     = cddbalbum->server_port;
-    cddb_server_cgi_path = cddbalbum->server_cgi_path;
-
-    if (!cddb_server_name)
-    {
-        // Local access
-        if ( (file=fopen(cddb_server_cgi_path,"r"))==0 )
-        {
-            Log_Print(LOG_ERROR,_("Can't load file: '%s' (%s)."),cddb_server_cgi_path,g_strerror(errno));
-            return FALSE;
-        }
-
-    }else
-    {
-        // Remote access
-
-        // Connection to the server
-        if ( (socket_id=Cddb_Open_Connection(CDDB_USE_PROXY?CDDB_PROXY_NAME:cddb_server_name,
-                                             CDDB_USE_PROXY?CDDB_PROXY_PORT:cddb_server_port)) <= 0 )
-            return FALSE;
-
-		if ( strstr(cddb_server_name,"gnudb") != NULL )
-		{
-			// For gnudb
-			// New version of gnudb doesn't use a cddb request, but a http request
-		    cddb_in = g_strdup_printf("GET %s%s/gnudb/"
-		                              "%s/%s"
-		                              " HTTP/1.1\r\n"
-		                              "Host: %s:%d\r\n"
-		                              "User-Agent: %s %s\r\n"
-		                              "%s"
-		                              "Connection: close\r\n"
-		                              "\r\n",
-		                              CDDB_USE_PROXY?"http://":"", CDDB_USE_PROXY?cddb_server_name:"",  // Needed when using proxy
-		                              cddbalbum->category,cddbalbum->id,
-		                              cddb_server_name,cddb_server_port,
-		                              PACKAGE_NAME, PACKAGE_VERSION,
-		                              (proxy_auth=Cddb_Format_Proxy_Authentification())
-		                              );
-		}else
-		{
-		    // CDDB Request (ex: GET /~cddb/cddb.cgi?cmd=cddb+read+jazz+0200a401&hello=noname+localhost+EasyTAG+0.31&proto=1 HTTP/1.1\r\nHost: freedb.freedb.org:80\r\nConnection: close)
-		    // Without proxy : "GET /~cddb/cddb.cgi?…" but doesn't work with a proxy.
-		    // With proxy    : "GET http://freedb.freedb.org/~cddb/cddb.cgi?…"
-		    cddb_in = g_strdup_printf("GET %s%s%s?cmd=cddb+read+"
-		                              "%s+%s"
-		                              "&hello=noname+localhost+%s+%s"
-		                              "&proto=6 HTTP/1.1\r\n"
-		                              "Host: %s:%d\r\n"
-		                              "%s"
-		                              "Connection: close\r\n\r\n",
-		                              CDDB_USE_PROXY?"http://":"",CDDB_USE_PROXY?cddb_server_name:"", cddb_server_cgi_path,
-		                              cddbalbum->category,cddbalbum->id,
-		                              PACKAGE_NAME, PACKAGE_VERSION,
-		                              cddb_server_name,cddb_server_port,
-		                              (proxy_auth=Cddb_Format_Proxy_Authentification())
-		                              );
-		}
-
-		
-		g_free(proxy_auth);
-        //g_print("Request Cddb_Get_Album_Tracks_List : '%s'\n", cddb_in);
-
-        // Send the request
-        gtk_statusbar_push(GTK_STATUSBAR(CddbStatusBar),CddbStatusBarContext,_("Sending request…"));
-        while (gtk_events_pending()) gtk_main_iteration();
-        if ( (bytes_written=send(socket_id,cddb_in,strlen(cddb_in)+1,0)) < 0)
-        {
-            Log_Print(LOG_ERROR,_("Cannot send the request (%s)"),g_strerror(errno));
-            Cddb_Close_Connection(socket_id);
-            g_free(cddb_in);
-            return FALSE;
-        }
-        g_free(cddb_in);
-
-
-        // Read the answer
-        gtk_statusbar_push(GTK_STATUSBAR(CddbStatusBar),CddbStatusBarContext,_("Receiving data…"));
-        while (gtk_events_pending())
-            gtk_main_iteration();
-
-        // Write result in a file
-        if (Cddb_Write_Result_To_File(socket_id,&bytes_read_total) < 0)
-        {
-            msg = g_strdup(_("The server returned a bad response"));
-            gtk_statusbar_push(GTK_STATUSBAR(CddbStatusBar),CddbStatusBarContext,msg);
-            Log_Print(LOG_ERROR,"%s",msg);
-            g_free(msg);
-            gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchButton),FALSE);
-            gtk_widget_set_sensitive(GTK_WIDGET(CddbStopSearchAutoButton),FALSE);
-            return FALSE;
-        }
-
-
-        // Parse server answer : Check HTTP Header (freedb or gnudb) and CDDB Header (freedb only)
-        file = NULL;
-		if ( strstr(cddb_server_name,"gnudb") != NULL )
-		{
-			// For gnudb (don't check CDDB header)
-			if ( Cddb_Read_Http_Header(&file,&cddb_out) <= 0 )
-		    {
-		        gchar *msg = g_strdup_printf(_("The server returned a bad response: %s"),cddb_out);
-		        gtk_statusbar_push(GTK_STATUSBAR(CddbStatusBar),CddbStatusBarContext,msg);
-		        Log_Print(LOG_ERROR,"%s",msg);
-		        g_free(msg);
-		        g_free(cddb_out);
-		        if (file)
-		            fclose(file);
-		        return FALSE;
-		    }
-		}else
-		{
-			// For freedb
-			if ( Cddb_Read_Http_Header(&file,&cddb_out) <= 0
-		      || Cddb_Read_Cddb_Header(&file,&cddb_out) <= 0 )
-		    {
-		        gchar *msg = g_strdup_printf(_("The server returned a bad response: %s"),cddb_out);
-		        gtk_statusbar_push(GTK_STATUSBAR(CddbStatusBar),CddbStatusBarContext,msg);
-		        Log_Print(LOG_ERROR,"%s",msg);
-		        g_free(msg);
-		        g_free(cddb_out);
-		        if (file)
-		            fclose(file);
-		        return FALSE;
-		    }
-		}
-        g_free(cddb_out);
-
-    }
-    cddb_end_str = g_strdup(".");
-
-    while ( CddbWindow && !CddbStopSearch
-    && Cddb_Read_Line(&file,&cddb_out) > 0 )
-    {
-        if (!cddb_out) // Empty line?
-            continue;
-        //g_print("%s\n",cddb_out);
-
-        // To avoid the cddb lookups to hang (Patch from Paul Giordano)
-        /* It appears that on some systems that cddb lookups continue to attempt
-         * to get data from the socket even though the other system has completed
-         * sending. The fix adds one check to the loops to see if the actual
-         * end of data is in the last block read. In this case, the last line
-         * will be a single '.'
-         */
-        if (strlen(cddb_out)<=3 && strstr(cddb_out,cddb_end_str)!=NULL)
-            break;
-
-        if ( strstr(cddb_out,"Track frame offsets")!=NULL ) // We read the Track frame offset
-        {
-            read_track_offset = TRUE; // The next reads are for the tracks offset
-            continue;
-
-        }else if (read_track_offset) // We are reading a track offset? (generates TrackOffsetList)
-        {
-            if ( strtoul(cddb_out+1,NULL,10)>0 )
-            {
-                CddbTrackFrameOffset *cddbtrackframeoffset = g_malloc0(sizeof(CddbTrackFrameOffset));
-                cddbtrackframeoffset->offset = strtoul(cddb_out+1,NULL,10);
-                TrackOffsetList = g_list_append(TrackOffsetList,cddbtrackframeoffset);
-            }else
-            {
-                read_track_offset = FALSE; // No more track offset
-            }
-            continue;
-
-        }else if ( strstr(cddb_out,"Disc length: ")!=NULL ) // Length of album (in second)
-        {
-            cddbalbum->duration = atoi(strchr(cddb_out,':')+1);
-            if (TrackOffsetList) // As it must be the last item, do nothing if no previous data
-            {
-                CddbTrackFrameOffset *cddbtrackframeoffset = g_malloc0(sizeof(CddbTrackFrameOffset));
-                cddbtrackframeoffset->offset = cddbalbum->duration * 75; // It's the last offset
-                TrackOffsetList = g_list_append(TrackOffsetList,cddbtrackframeoffset);
-            }
-            continue;
-
-        }else if ( strncmp(cddb_out,"DTITLE=",7)==0 ) // "Artist / Album" names
-        {
-            // Note : disc title too long take severals lines. For example :
-            // DTITLE=Marilyn Manson / The Nobodies (2005 Against All Gods Mix - Korea Tour L
-            // DTITLE=imited Edition)
-            if (!cddbalbum->album)
-            {
-                // It is the first time we find DTITLE...
-
-                gchar *alb_ptr = strstr(cddb_out," / ");
-                // Album
-                if (alb_ptr && alb_ptr+3)
-                {
-                    cddbalbum->album = Try_To_Validate_Utf8_String(alb_ptr+3);
-                    *alb_ptr = 0;
-                }
-
-                // Artist
-                cddbalbum->artist = Try_To_Validate_Utf8_String(cddb_out+7); // '7' to skip 'DTITLE='
-            }else
-            {
-                // It is at least the second time we find DTITLE
-                // So we suppose that only the album was truncated
-
-                // Album
-                valid = Try_To_Validate_Utf8_String(cddb_out+7); // '7' to skip 'DTITLE='
-                copy = cddbalbum->album; // To free...
-                cddbalbum->album = g_strconcat(cddbalbum->album,valid,NULL);
-                g_free(copy);
-            }
-            continue;
-
-        }else if ( strncmp(cddb_out,"DYEAR=",6)==0 ) // Year
-        {
-            valid = Try_To_Validate_Utf8_String(cddb_out+6); // '6' to skip 'DYEAR='
-            if (g_utf8_strlen(valid, -1))
-                cddbalbum->year = valid;
-            continue;
-
-        }else if ( strncmp(cddb_out,"DGENRE=",7)==0 ) // Genre
-        {
-            valid = Try_To_Validate_Utf8_String(cddb_out+7); // '7' to skip 'DGENRE='
-            if (g_utf8_strlen(valid, -1))
-                cddbalbum->genre = valid;
-            continue;
-
-        }else if ( strncmp(cddb_out,"TTITLE",6)==0 ) // Track title (for exemple : TTITLE10=xxxx)
-        {
-            CddbTrackAlbum *cddbtrackalbum_last = NULL;
-
-            CddbTrackAlbum *cddbtrackalbum = g_malloc0(sizeof(CddbTrackAlbum));
-            cddbtrackalbum->cddbalbum = cddbalbum; // To find the CddbAlbum father quickly
-
-            // Here is a fix when TTITLExx doesn't contain an "=", we skip the line
-            if ( (copy = g_utf8_strchr(cddb_out,-1,'=')) != NULL )
-            {
-                cddbtrackalbum->track_name = Try_To_Validate_Utf8_String(copy+1);
-            }else
-            {
-                continue;
-            }
-
-            *g_utf8_strchr(cddb_out,-1,'=') = 0;
-            cddbtrackalbum->track_number = atoi(cddb_out+6)+1;
-
-            // Note : titles too long take severals lines. For example :
-            // TTITLE15=Bob Marley vs. Funkstar De Luxe Remix - Sun Is Shining (Radio De Lu
-            // TTITLE15=xe Edit)
-            // So to check it, we compare current track number with the previous one...
-            if (cddbalbum->track_list)
-                cddbtrackalbum_last = g_list_last(cddbalbum->track_list)->data;
-            if (cddbtrackalbum_last && cddbtrackalbum_last->track_number == cddbtrackalbum->track_number)
-            {
-                gchar *track_name = g_strconcat(cddbtrackalbum_last->track_name,cddbtrackalbum->track_name,NULL);
-                g_free(cddbtrackalbum_last->track_name);
-
-                cddbtrackalbum_last->track_name = Try_To_Validate_Utf8_String(track_name);
-
-                // Frees useless allocated data previously
-                g_free(cddbtrackalbum->track_name);
-                g_free(cddbtrackalbum);
-            }else
-            {
-                if (TrackOffsetList && TrackOffsetList->next)
-                {
-                    cddbtrackalbum->duration = ( ((CddbTrackFrameOffset *)TrackOffsetList->next->data)->offset - ((CddbTrackFrameOffset *)TrackOffsetList->data)->offset ) / 75; // Calculate time in seconds
-                    TrackOffsetList = TrackOffsetList->next;
-                }
-                cddbalbum->track_list = g_list_append(cddbalbum->track_list,cddbtrackalbum);
-            }
-            continue;
-
-        }else if ( strncmp(cddb_out,"EXTD=",5)==0 ) // Extended album data
-        {
-            gchar *genre_ptr = strstr(cddb_out,"ID3G:");
-            gchar *year_ptr  = strstr(cddb_out,"YEAR:");
-            // May contains severals EXTD field it too long
-            // EXTD=Techno
-            // EXTD= YEAR: 1997 ID3G:  18
-            // EXTD= ID3G:  17
-            if (year_ptr && cddbalbum->year)
-                cddbalbum->year = g_strdup_printf("%d",atoi(year_ptr+5));
-            if (genre_ptr && cddbalbum->genre)
-                cddbalbum->genre = g_strdup(Id3tag_Genre_To_String(atoi(genre_ptr+5)));
-            continue;
-        }
-
-        g_free(cddb_out);
-    }
-    g_free(cddb_end_str);
-
-    // Close file opened for reading lines
-    if (file)
-    {
-        fclose(file);
-        file = NULL;
-    }
-
-    if (cddb_server_name)
-    {
-        // Remote access
-
-        /* Close connection */
-        Cddb_Close_Connection(socket_id);
-    }
-
-    /* Set color of the selected row (without reloading the whole list) */
-    Cddb_Album_List_Set_Row_Appearance(&row);
-
-    /* Load the track list of the album */
-    gtk_statusbar_push(GTK_STATUSBAR(CddbStatusBar),CddbStatusBarContext,_("Loading album track list…"));
-    while (gtk_events_pending()) gtk_main_iteration();
-    Cddb_Load_Track_Album_List(cddbalbum->track_list);
-
-    Cddb_Show_Album_Info(gtk_tree_view_get_selection(GTK_TREE_VIEW(CddbAlbumListView)),NULL);
-
-    // Frees 'TrackOffsetList'
-    g_list_free_full (TrackOffsetList, (GDestroyNotify)g_free);
-    TrackOffsetList = NULL;
-    return TRUE;
-}
-
-/*
- * Set the row apperance depending if we have cached info or not
- * Bold/Red = Info are already loaded, but not displayed
- * Italic/Light Red = Duplicate CDDB entry
- */
-static void
-Cddb_Album_List_Set_Row_Appearance (GtkTreeIter *row)
-{
-    CddbAlbum *cddbalbum = NULL;
-
-    gtk_tree_model_get(GTK_TREE_MODEL(CddbAlbumListModel), row,
-                       CDDB_ALBUM_LIST_DATA, &cddbalbum, -1);
-
-    if (cddbalbum->track_list != NULL)
-    {
-        if (CHANGED_FILES_DISPLAYED_TO_BOLD)
-        {
-            gtk_list_store_set(CddbAlbumListModel, row,
-                               CDDB_ALBUM_LIST_FONT_STYLE,       PANGO_STYLE_NORMAL,
-                               CDDB_ALBUM_LIST_FONT_WEIGHT,      PANGO_WEIGHT_BOLD,
-                               CDDB_ALBUM_LIST_FOREGROUND_COLOR, NULL,-1);
-        } else
-        {
-            if (cddbalbum->other_version == TRUE)
-            {
-                gtk_list_store_set(CddbAlbumListModel, row,
-                                   CDDB_ALBUM_LIST_FONT_STYLE,       PANGO_STYLE_NORMAL,
-                                   CDDB_ALBUM_LIST_FONT_WEIGHT,      PANGO_WEIGHT_NORMAL,
-                                   CDDB_ALBUM_LIST_FOREGROUND_COLOR, &LIGHT_RED, -1);
-            } else
-            {
-                gtk_list_store_set(CddbAlbumListModel, row,
-                                   CDDB_ALBUM_LIST_FONT_STYLE,       PANGO_STYLE_NORMAL,
-                                   CDDB_ALBUM_LIST_FONT_WEIGHT,      PANGO_WEIGHT_NORMAL,
-                                   CDDB_ALBUM_LIST_FOREGROUND_COLOR, &RED, -1);
-            }
-        }
-    } else
-    {
-        if (cddbalbum->other_version == TRUE)
-        {
-            if (CHANGED_FILES_DISPLAYED_TO_BOLD)
-            {
-                gtk_list_store_set(CddbAlbumListModel, row,
-                                   CDDB_ALBUM_LIST_FONT_STYLE,       PANGO_STYLE_ITALIC,
-                                   CDDB_ALBUM_LIST_FONT_WEIGHT,      PANGO_WEIGHT_NORMAL,
-                                   CDDB_ALBUM_LIST_FOREGROUND_COLOR, NULL,-1);
-            } else
-            {
-                gtk_list_store_set(CddbAlbumListModel, row,
-                                   CDDB_ALBUM_LIST_FONT_STYLE,       PANGO_STYLE_NORMAL,
-                                   CDDB_ALBUM_LIST_FONT_WEIGHT,      PANGO_WEIGHT_NORMAL,
-                                   CDDB_ALBUM_LIST_FOREGROUND_COLOR, &GREY, -1);
-            }
-        } else
-        {
-            gtk_list_store_set(CddbAlbumListModel, row,
-                               CDDB_ALBUM_LIST_FONT_STYLE,       PANGO_STYLE_NORMAL,
-                               CDDB_ALBUM_LIST_FONT_WEIGHT,      PANGO_WEIGHT_NORMAL,
-                               CDDB_ALBUM_LIST_FOREGROUND_COLOR, NULL, -1);
-        }
-    }
-}
-
-
-/*
- * Set CDDB data (from tracks list) into tags of the main file list
- */
-static gboolean
-Cddb_Set_Track_Infos_To_File_List (void)
-{
-    guint row;
-    guint list_length;
-    guint rows_to_loop = 0;
-    guint selectedcount;
-    guint file_selectedcount;
-    guint counter = 0;
-    GList *file_iterlist = NULL;
-    GList *file_selectedrows;
-    GList *selectedrows = NULL;
-    gchar buffer[256];
-    gboolean CddbTrackList_Line_Selected;
-    gboolean cddbsettoallfields, cddbsettotitle,      cddbsettoartist, cddbsettoalbum, cddbsettoyear,
-             cddbsettotrack,     cddbsettotracktotal, cddbsettogenre,  cddbsettofilename;
-    CddbTrackAlbum *cddbtrackalbum = NULL;
-    GtkTreeSelection *selection = NULL;
-    GtkTreeSelection *file_selection = NULL;
-    GtkListStore *fileListModel;
-    GtkTreePath *currentPath = NULL;
-    GtkTreeIter  currentIter;
-    GtkTreeIter *fileIter;
-    gpointer iterptr;
-
-    g_return_val_if_fail (CddbWindow != NULL && BrowserList != NULL
-                          && ETCore->ETFileDisplayedList != NULL, FALSE);
-
-    // Save the current displayed data
-    ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
-
-    cddbsettoallfields  = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSetToAllFields));
-    cddbsettotitle      = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSetToTitle));
-    cddbsettoartist     = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSetToArtist));
-    cddbsettoalbum      = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSetToAlbum));
-    cddbsettoyear       = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSetToYear));
-    cddbsettotrack      = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSetToTrack));
-    cddbsettotracktotal = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSetToTrackTotal));
-    cddbsettogenre      = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSetToGenre));
-    cddbsettofilename   = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbSetToFileName));
-
-    fileListModel = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(BrowserList)));
-    list_length = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(CddbTrackListModel), NULL);
-
-    // Take the selected files in the cddb track list, else the full list
-    // Note : Just used to calculate "cddb_track_list_length" because
-    // "GPOINTER_TO_INT(cddb_track_list->data)" doesn't return the number of the
-    // line when "cddb_track_list = g_list_first(GTK_CLIST(CddbTrackCList)->row_list)"
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(CddbTrackListView));
-    selectedcount = gtk_tree_selection_count_selected_rows(selection);
-
-    /* Check if at least one line was selected. No line selected is equal to all lines selected. */
-    CddbTrackList_Line_Selected = FALSE;
-
-    if (selectedcount > 0)
-    {
-        /* Loop through selected rows only */
-        CddbTrackList_Line_Selected = TRUE;
-        rows_to_loop = selectedcount;
-        selectedrows = gtk_tree_selection_get_selected_rows(selection, NULL);
-    } else
-    {
-        /* Loop through all rows */
-        CddbTrackList_Line_Selected = FALSE;
-        rows_to_loop = list_length;
-    }
-
-    file_selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserList));
-    file_selectedcount = gtk_tree_selection_count_selected_rows(file_selection);
-
-    if (file_selectedcount > 0)
-    {
-        GList *l;
-
-        /* Rows are selected in the file list, apply tags to them only */
-        file_selectedrows = gtk_tree_selection_get_selected_rows(file_selection, NULL);
-
-        for (l = file_selectedrows; l != NULL; l = g_list_next (l))
-        {
-            counter++;
-            iterptr = g_malloc0(sizeof(GtkTreeIter));
-            if (gtk_tree_model_get_iter (GTK_TREE_MODEL (fileListModel),
-                                         (GtkTreeIter *)iterptr,
-                                         (GtkTreePath *)l->data))
-            {
-                file_iterlist = g_list_prepend (file_iterlist, iterptr);
-            }
-
-            if (counter == rows_to_loop) break;
-        }
-
-        /* Free the useless bit */
-        g_list_free_full (file_selectedrows,
-                          (GDestroyNotify)gtk_tree_path_free);
-
-    } else /* No rows selected, use the first x items in the list */
-    {
-        gtk_tree_model_get_iter_first(GTK_TREE_MODEL(fileListModel), &currentIter);
-
-        do
-        {
-            counter++;
-            iterptr = g_memdup(&currentIter, sizeof(GtkTreeIter));
-            file_iterlist = g_list_prepend (file_iterlist, iterptr);
-        } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(fileListModel), &currentIter));
-
-        file_selectedcount = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(fileListModel), NULL);
-    }
-
-    if (file_selectedcount != rows_to_loop)
-    {
-        GtkWidget *msgdialog;
-        gint response;
-
-        msgdialog = gtk_message_dialog_new(GTK_WINDOW(CddbWindow),
-                                           GTK_DIALOG_MODAL  | GTK_DIALOG_DESTROY_WITH_PARENT,
-                                           GTK_MESSAGE_QUESTION,
-                                           GTK_BUTTONS_NONE,
-                                           "%s",
-                                           _("The number of CDDB results does not match the number of selected files"));
-        gtk_dialog_add_buttons(GTK_DIALOG(msgdialog),GTK_STOCK_CANCEL,GTK_RESPONSE_CANCEL,GTK_STOCK_APPLY,GTK_RESPONSE_APPLY, NULL);
-        gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(msgdialog),"%s","Do you want to continue?");
-        gtk_window_set_title (GTK_WINDOW (msgdialog),
-                              _("Write Tag from CDDB"));
-        response = gtk_dialog_run(GTK_DIALOG(msgdialog));
-        gtk_widget_destroy(msgdialog);
-
-        if (response != GTK_RESPONSE_APPLY)
-        {
-            g_list_free_full (file_iterlist, (GDestroyNotify)g_free);
-            //gdk_window_raise(CddbWindow->window);
-            return FALSE;
-        }
-    }
-
-    file_iterlist = g_list_reverse (file_iterlist);
-    //ET_Debug_Print_File_List (NULL, __FILE__, __LINE__, __FUNCTION__);
-
-    for (row=0; row < rows_to_loop; row++)
-    {
-        if (CddbTrackList_Line_Selected == FALSE)
-        {
-            if(row == 0)
-                currentPath = gtk_tree_path_new_first();
-            else
-                gtk_tree_path_next(currentPath);
-        } else /* (e.g.: if CddbTrackList_Line_Selected == TRUE) */
-        {
-            if(row == 0)
-            {
-                selectedrows = g_list_first(selectedrows);
-                currentPath = (GtkTreePath *)selectedrows->data;
-            } else
-            {
-                selectedrows = g_list_next(selectedrows);
-                currentPath = (GtkTreePath *)selectedrows->data;
-            }
-        }
-
-        if (gtk_tree_model_get_iter (GTK_TREE_MODEL (CddbTrackListModel),
-                                     &currentIter, currentPath))
-        {
-            gtk_tree_model_get (GTK_TREE_MODEL (CddbTrackListModel),
-                                &currentIter, CDDB_TRACK_LIST_DATA,
-                                &cddbtrackalbum, -1);
-        }
-        else
-        {
-            g_warning ("Iter not found matching path in CDDB track list model");
-        }
-
-        // Set values in the ETFile
-        if (CDDB_USE_DLM)
-        {
-            // RQ : this part is ~ equal to code for '!CDDB_USE_DLM', but uses '*etfile' instead of 'etfile'
-            ET_File **etfile = NULL;
-            File_Name *FileName = NULL;
-            File_Tag *FileTag = NULL;
-
-            gtk_tree_model_get(GTK_TREE_MODEL(CddbTrackListModel), &currentIter,
-                               CDDB_TRACK_LIST_ETFILE, &etfile, -1);
-
-            /*
-             * Tag fields
-             */
-            if (cddbsettoallfields || cddbsettotitle || cddbsettoartist
-                || cddbsettoalbum || cddbsettoyear || cddbsettotrack
-                || cddbsettotracktotal || cddbsettogenre)
-            {
-                // Allocation of a new FileTag
-                FileTag = ET_File_Tag_Item_New();
-                ET_Copy_File_Tag_Item(*etfile,FileTag);
-
-                if (cddbsettoallfields || cddbsettotitle)
-                    ET_Set_Field_File_Tag_Item(&FileTag->title,cddbtrackalbum->track_name);
-
-                if ( (cddbsettoallfields || cddbsettoartist) && cddbtrackalbum->cddbalbum->artist)
-                    ET_Set_Field_File_Tag_Item(&FileTag->artist,cddbtrackalbum->cddbalbum->artist);
-
-                if ( (cddbsettoallfields || cddbsettoalbum) && cddbtrackalbum->cddbalbum->album)
-                    ET_Set_Field_File_Tag_Item(&FileTag->album, cddbtrackalbum->cddbalbum->album);
-
-                if ( (cddbsettoallfields || cddbsettoyear) && cddbtrackalbum->cddbalbum->year)
-                    ET_Set_Field_File_Tag_Item(&FileTag->year,  cddbtrackalbum->cddbalbum->year);
-
-                if (cddbsettoallfields || cddbsettotrack)
-                {
-                    snprintf (buffer, sizeof (buffer), "%s",
-                              et_track_number_to_string (cddbtrackalbum->track_number));
-
-                    ET_Set_Field_File_Tag_Item(&FileTag->track,buffer);
-                }
-
-                if (cddbsettoallfields || cddbsettotracktotal)
-                {
-                    snprintf (buffer, sizeof (buffer), "%s",
-                              et_track_number_to_string (list_length));
-
-                    ET_Set_Field_File_Tag_Item(&FileTag->track_total,buffer);
-                }
-
-                if ( (cddbsettoallfields || cddbsettogenre) && (cddbtrackalbum->cddbalbum->genre || cddbtrackalbum->cddbalbum->category) )
-                {
-                    if (cddbtrackalbum->cddbalbum->genre && g_utf8_strlen(cddbtrackalbum->cddbalbum->genre, -1)>0)
-                        ET_Set_Field_File_Tag_Item(&FileTag->genre,Cddb_Get_Id3_Genre_From_Cddb_Genre(cddbtrackalbum->cddbalbum->genre));
-                    else
-                        ET_Set_Field_File_Tag_Item(&FileTag->genre,Cddb_Get_Id3_Genre_From_Cddb_Genre(cddbtrackalbum->cddbalbum->category));
-                }
-            }
-
-            /*
-             * Filename field
-             */
-            if ( (cddbsettoallfields || cddbsettofilename) )
-            {
-                gchar *filename_generated_utf8;
-                gchar *filename_new_utf8;
-
-                // Allocation of a new FileName
-                FileName = ET_File_Name_Item_New();
-
-                // Build the filename with the path
-                snprintf (buffer, sizeof (buffer), "%s",
-                          et_track_number_to_string (cddbtrackalbum->track_number));
-
-                filename_generated_utf8 = g_strconcat(buffer," - ",cddbtrackalbum->track_name,NULL);
-                ET_File_Name_Convert_Character(filename_generated_utf8); // Replace invalid characters
-                filename_new_utf8 = ET_File_Name_Generate(*etfile,filename_generated_utf8);
-
-                ET_Set_Filename_File_Name_Item(FileName,filename_new_utf8,NULL);
-
-                g_free(filename_generated_utf8);
-                g_free(filename_new_utf8);
-            }
-
-            ET_Manage_Changes_Of_File_Data(*etfile,FileName,FileTag);
-
-            // Then run current scanner if asked...
-            if (ScannerWindow && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbRunScanner)) )
-                Scan_Select_Mode_And_Run_Scanner(*etfile);
-
-        } else if (cddbtrackalbum && file_iterlist && file_iterlist->data)
-        {
-            ET_File   *etfile;
-            File_Name *FileName = NULL;
-            File_Tag  *FileTag  = NULL;
-
-            fileIter = (GtkTreeIter*) file_iterlist->data;
-            etfile = Browser_List_Get_ETFile_From_Iter(fileIter);
-
-            /*
-             * Tag fields
-             */
-            if (cddbsettoallfields || cddbsettotitle || cddbsettoartist
-                || cddbsettoalbum || cddbsettoyear || cddbsettotrack
-                || cddbsettotracktotal || cddbsettogenre)
-            {
-                // Allocation of a new FileTag
-                FileTag = ET_File_Tag_Item_New();
-                ET_Copy_File_Tag_Item(etfile,FileTag);
-
-                if (cddbsettoallfields || cddbsettotitle)
-                    ET_Set_Field_File_Tag_Item(&FileTag->title,cddbtrackalbum->track_name);
-
-                if ( (cddbsettoallfields || cddbsettoartist) && cddbtrackalbum->cddbalbum->artist)
-                    ET_Set_Field_File_Tag_Item(&FileTag->artist,cddbtrackalbum->cddbalbum->artist);
-
-                if ( (cddbsettoallfields || cddbsettoalbum) && cddbtrackalbum->cddbalbum->album)
-                    ET_Set_Field_File_Tag_Item(&FileTag->album, cddbtrackalbum->cddbalbum->album);
-
-                if ( (cddbsettoallfields || cddbsettoyear) && cddbtrackalbum->cddbalbum->year)
-                    ET_Set_Field_File_Tag_Item(&FileTag->year,  cddbtrackalbum->cddbalbum->year);
-
-                if (cddbsettoallfields || cddbsettotrack)
-                {
-                    snprintf (buffer, sizeof (buffer), "%s",
-                              et_track_number_to_string (cddbtrackalbum->track_number));
-
-                    ET_Set_Field_File_Tag_Item(&FileTag->track,buffer);
-                }
-
-                if (cddbsettoallfields || cddbsettotracktotal)
-                {
-                    snprintf (buffer, sizeof (buffer), "%s",
-                              et_track_number_to_string (list_length));
-
-                    ET_Set_Field_File_Tag_Item(&FileTag->track_total,buffer);
-                }
-
-                if ( (cddbsettoallfields || cddbsettogenre) && (cddbtrackalbum->cddbalbum->genre || cddbtrackalbum->cddbalbum->category) )
-                {
-                    if (cddbtrackalbum->cddbalbum->genre && g_utf8_strlen(cddbtrackalbum->cddbalbum->genre, -1)>0)
-                        ET_Set_Field_File_Tag_Item(&FileTag->genre,Cddb_Get_Id3_Genre_From_Cddb_Genre(cddbtrackalbum->cddbalbum->genre));
-                    else
-                        ET_Set_Field_File_Tag_Item(&FileTag->genre,Cddb_Get_Id3_Genre_From_Cddb_Genre(cddbtrackalbum->cddbalbum->category));
-                }
-            }
-
-            /*
-             * Filename field
-             */
-            if ( (cddbsettoallfields || cddbsettofilename) )
-            {
-                gchar *filename_generated_utf8;
-                gchar *filename_new_utf8;
-
-                // Allocation of a new FileName
-                FileName = ET_File_Name_Item_New();
-
-                // Build the filename with the path
-                snprintf (buffer, sizeof (buffer), "%s",
-                          et_track_number_to_string (cddbtrackalbum->track_number));
-
-                filename_generated_utf8 = g_strconcat(buffer," - ",cddbtrackalbum->track_name,NULL);
-                ET_File_Name_Convert_Character(filename_generated_utf8); // Replace invalid characters
-                filename_new_utf8 = ET_File_Name_Generate(etfile,filename_generated_utf8);
-
-                ET_Set_Filename_File_Name_Item(FileName,filename_new_utf8,NULL);
-
-                g_free(filename_generated_utf8);
-                g_free(filename_new_utf8);
-            }
-
-            ET_Manage_Changes_Of_File_Data(etfile,FileName,FileTag);
-
-            // Then run current scanner if asked...
-            if (ScannerWindow && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbRunScanner)) )
-                Scan_Select_Mode_And_Run_Scanner(etfile);
-        }
-
-        if(!file_iterlist->next) break;
-        file_iterlist = file_iterlist->next;
-    }
-
-    g_list_free_full (file_iterlist, (GDestroyNotify)g_free);
-
-    Browser_List_Refresh_Whole_List();
-    ET_Display_File_Data_To_UI(ETCore->ETFileDisplayed);
-
-    return TRUE;
-}
-
-
-static void
-Cddb_Display_Red_Lines_In_Result (void)
-{
-    g_return_if_fail (CddbDisplayRedLinesButton != NULL);
-
-    if ( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbDisplayRedLinesButton)) )
-    {
-        // Show only red lines
-        Cddb_Load_Album_List(TRUE);
-    }else
-    {
-        // Show all lines
-        Cddb_Load_Album_List(FALSE);
-    }
-}
-
-
-/*
- * Returns the corresponding ID3 genre (the name, not the value)
- */
-static const gchar *
-Cddb_Get_Id3_Genre_From_Cddb_Genre (const gchar *cddb_genre)
-{
-    guint i;
-
-    g_return_val_if_fail (cddb_genre != NULL, "");
-
-    for (i=0; i<=CDDB_GENRE_MAX; i++)
-        if (strcasecmp(cddb_genre,cddb_genre_vs_id3_genre[i][0])==0)
-            return cddb_genre_vs_id3_genre[i][1];
-    return cddb_genre;
-}
-
-/* Pixmaps */
-#include "data/pixmaps/freedb.xpm"
-#include "data/pixmaps/gnudb.xpm"
-#include "data/pixmaps/musicbrainz.xpm"
-/*#include "data/pixmaps/closed_folder.xpm"*/
-
-/*
- * Returns the pixmap to display following the server name
- */
-static GdkPixbuf *
-Cddb_Get_Pixbuf_From_Server_Name (const gchar *server_name)
-{
-    g_return_val_if_fail (server_name != NULL, NULL);
-
-    if (strstr (server_name, "freedb.org"))
-        return gdk_pixbuf_new_from_xpm_data(freedb_xpm);
-    else if (strstr(server_name,"gnudb.org"))
-        return gdk_pixbuf_new_from_xpm_data(gnudb_xpm);
-    else if (strstr(server_name,"musicbrainz.org"))
-        return gdk_pixbuf_new_from_xpm_data(musicbrainz_xpm);
-    else
-        return NULL;
-}
-
-
-static gchar *
-Cddb_Format_Proxy_Authentification (void)
-{
-    gchar *ret;
-
-    if (CDDB_USE_PROXY &&  CDDB_PROXY_USER_NAME != NULL && *CDDB_PROXY_USER_NAME != '\0')
-    {
-        const gchar *tempstr;
-        gchar *str_encoded;
-
-        tempstr = g_strconcat(CDDB_PROXY_USER_NAME, ":", CDDB_PROXY_USER_PASSWORD, NULL);
-        str_encoded = g_base64_encode((const guchar *)tempstr, strlen(tempstr));
-
-        ret = g_strdup_printf("Proxy-authorization: Basic %s\r\n", str_encoded);
-        g_free (str_encoded);
-    }else
-    {
-        ret = g_strdup("");
-    }
-    return ret;
-}
diff --git a/src/cddb_dialog.c b/src/cddb_dialog.c
new file mode 100644
index 0000000..31446d7
--- /dev/null
+++ b/src/cddb_dialog.c
@@ -0,0 +1,3726 @@
+/* EasyTAG - Tag editor for audio files
+ * Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ *
+ * 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
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+#include <glib/gi18n.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include "win32/win32dep.h"
+#ifndef G_OS_WIN32
+#include <sys/socket.h>
+/* Patch OpenBSD from Jim Geovedi. */
+#include <netinet/in.h>
+#include <arpa/inet.h>
+/* End patch */
+#include <netdb.h>
+#endif /* !G_OS_WIN32 */
+#include <errno.h>
+
+#include "application_window.h"
+#include "cddb_dialog.h"
+#include "easytag.h"
+#include "enums.h"
+#include "et_core.h"
+#include "browser.h"
+#include "scan_dialog.h"
+#include "log.h"
+#include "misc.h"
+#include "setting.h"
+#include "id3_tag.h"
+#include "setting.h"
+#include "charset.h"
+
+/* TODO: Use G_DEFINE_TYPE_WITH_PRIVATE. */
+G_DEFINE_TYPE (EtCDDBDialog, et_cddb_dialog, GTK_TYPE_DIALOG)
+
+#define et_cddb_dialog_get_instance_private(dialog) (dialog->priv)
+
+struct _EtCDDBDialogPrivate
+{
+    GtkWidget *album_list_view;
+    GtkWidget *track_list_view;
+
+    GList *album_list;
+
+    GtkListStore *album_list_model;
+    GtkListStore *track_list_model;
+
+    GtkWidget *search_string_entry;
+
+    GtkWidget *apply_button;
+    GtkWidget *search_button;
+    GtkWidget *stop_search_button;
+
+    GtkWidget *status_bar;
+    guint status_bar_context;
+
+    gboolean stop_searching;
+
+    GtkWidget *run_scanner_toggle;
+    GtkWidget *use_dlm2_toggle; /* '2' as also used in prefs.c */
+};
+
+/*
+ * Structure used for each item of the album list. Aslo attached to each row of
+ * the album list
+ */
+typedef struct
+{
+    gchar *server_name; /* Remote access: server name. Local access : NULL */
+    guint server_port; /* Remote access: server port. Local access: 0 */
+    gchar *server_cgi_path; /* Remote access: server CGI path.
+                             * Local access: discid file path */
+
+    GdkPixbuf *bitmap; /* Pixmap logo for the server. */
+
+    gchar *artist_album; /* CDDB artist+album (allocated) */
+    gchar *category; /* CDDB genre (allocated) */
+    gchar *id; /* example : 8d0de30c (allocated) */
+    GList *track_list; /* List of CddbTrackAlbum items. */
+    gboolean other_version; /* TRUE if this album is another version of the
+                             * previous one. */
+
+    /* Filled when loading the track list. */
+    gchar *artist; /* (allocated) */
+    gchar *album; /* (allocated) */
+    gchar *genre; /* (allocated) */
+    gchar *year; /* (allocated) */
+    guint duration;
+} CddbAlbum;
+
+
+/*
+ * Structure used for each item of the track_list of the CddbAlbum structure.
+ */
+typedef struct
+{
+    guint track_number;
+    gchar *track_name; /* (allocated) */
+    guint duration;
+    CddbAlbum *cddbalbum; /* Pointer to the parent CddbAlbum structure (to
+                           * quickly access album properties). */
+} CddbTrackAlbum;
+
+
+typedef struct
+{
+    gulong offset;
+} CddbTrackFrameOffset;
+
+enum
+{
+    CDDB_ALBUM_LIST_PIXBUF,
+    CDDB_ALBUM_LIST_ALBUM,
+    CDDB_ALBUM_LIST_CATEGORY,
+    CDDB_ALBUM_LIST_DATA,
+    CDDB_ALBUM_LIST_FONT_STYLE,
+    CDDB_ALBUM_LIST_FONT_WEIGHT,
+    CDDB_ALBUM_LIST_FOREGROUND_COLOR,
+    CDDB_ALBUM_LIST_COUNT
+};
+
+enum
+{
+    CDDB_TRACK_LIST_NUMBER,
+    CDDB_TRACK_LIST_NAME,
+    CDDB_TRACK_LIST_TIME,
+    CDDB_TRACK_LIST_DATA,
+    CDDB_TRACK_LIST_ETFILE,
+    CDDB_TRACK_LIST_COUNT
+};
+
+enum
+{
+    SORT_LIST_NUMBER,
+    SORT_LIST_NAME
+};
+
+
+#define CDDB_GENRE_MAX ( sizeof(cddb_genre_vs_id3_genre)/sizeof(cddb_genre_vs_id3_genre[0]) - 1 )
+static const gchar *cddb_genre_vs_id3_genre [][2] =
+{
+    /* Cddb Genre - ID3 Genre */
+    {"Blues",       "Blues"},
+    {"Classical",   "Classical"},
+    {"Country",     "Country"},
+    {"Data",        "Other"},
+    {"Folk",        "Folk"},
+    {"Jazz",        "Jazz"},
+    {"NewAge",      "New Age"},
+    {"Reggae",      "Reggae"},
+    {"Rock",        "Rock"},
+    {"Soundtrack",  "Soundtrack"},
+    {"Misc",        "Other"}
+};
+
+
+// File for result of the Cddb/Freedb request (on remote access)
+static const gchar CDDB_RESULT_FILE[] = "cddb_result_file.tmp";
+
+static const guint BOX_SPACING = 6;
+
+
+/**************
+ * Prototypes *
+ **************/
+static gboolean Cddb_Free_Track_Album_List (GList *track_list);
+
+static gint Cddb_Read_Line        (FILE **file, gchar **cddb_out);
+static gint Cddb_Read_Http_Header (FILE **file, gchar **cddb_out);
+static gint Cddb_Read_Cddb_Header (FILE **file, gchar **cddb_out);
+
+static GdkPixbuf *Cddb_Get_Pixbuf_From_Server_Name (const gchar *server_name);
+
+static const gchar *Cddb_Get_Id3_Genre_From_Cddb_Genre (const gchar *cddb_genre);
+
+static gint Cddb_Track_List_Sort_Func (GtkTreeModel *model, GtkTreeIter *a,
+                                       GtkTreeIter *b, gpointer data);
+
+static gchar *Cddb_Format_Proxy_Authentification (void);
+
+static gboolean Cddb_Get_Album_Tracks_List_CB (EtCDDBDialog *self, GtkTreeSelection *selection);
+
+
+/*
+ * The window to connect to the cd data base.
+ */
+
+static void
+update_apply_button_sensitivity (EtCDDBDialog *self)
+{
+    EtCDDBDialogPrivate *priv;
+
+    priv = et_cddb_dialog_get_instance_private (self);
+
+    /* If any field is set, enable the apply button. */
+    if (priv->apply_button
+        && gtk_tree_model_iter_n_children (GTK_TREE_MODEL (priv->track_list_model),
+                                           NULL) > 0
+        && (g_settings_get_flags (MainSettings, "cddb-set-fields") != 0))
+    {
+        gtk_widget_set_sensitive (GTK_WIDGET (priv->apply_button), TRUE);
+    }
+    else
+    {
+        gtk_widget_set_sensitive (GTK_WIDGET (priv->apply_button), FALSE);
+    }
+}
+
+static void
+update_search_button_sensitivity (EtCDDBDialog *self)
+{
+    EtCDDBDialogPrivate *priv;
+
+    priv = et_cddb_dialog_get_instance_private (self);
+
+    if (priv->search_button
+        && g_utf8_strlen (gtk_entry_get_text (GTK_ENTRY (priv->search_string_entry)), -1) > 0
+        && (g_settings_get_flags (MainSettings, "cddb-search-fields") != 0)
+        && (g_settings_get_flags (MainSettings, "cddb-search-categories") != 0))
+    {
+        gtk_widget_set_sensitive (GTK_WIDGET (priv->search_button), TRUE);
+    }
+    else
+    {
+        gtk_widget_set_sensitive (GTK_WIDGET (priv->search_button), FALSE);
+    }
+}
+
+/*
+ * Show collected infos of the album in the status bar
+ */
+static void
+show_album_info (EtCDDBDialog *self, GtkTreeSelection *selection)
+{
+    EtCDDBDialogPrivate *priv;
+    CddbAlbum *cddbalbum = NULL;
+    gchar *msg, *duration_str;
+    GtkTreeIter row;
+    priv = et_cddb_dialog_get_instance_private (self);
+
+    if (gtk_tree_selection_get_selected(selection, NULL, &row))
+    {
+        gtk_tree_model_get(GTK_TREE_MODEL(priv->album_list_model), &row, CDDB_ALBUM_LIST_DATA, &cddbalbum, -1);
+    }
+    if (!cddbalbum)
+        return;
+
+    duration_str = Convert_Duration((gulong)cddbalbum->duration);
+    msg = g_strdup_printf(_("Album: ‘%s’, "
+                            "artist: ‘%s’, "
+                            "length: ‘%s’, "
+                            "year: ‘%s’, "
+                            "genre: ‘%s’, "
+                            "disc ID: ‘%s’"),
+                            cddbalbum->album ? cddbalbum->album : "",
+                            cddbalbum->artist ? cddbalbum->artist : "",
+                            duration_str,
+                            cddbalbum->year ? cddbalbum->year : "",
+                            cddbalbum->genre ? cddbalbum->genre : "",
+                            cddbalbum->id ? cddbalbum->id : "");
+    gtk_statusbar_push(GTK_STATUSBAR(priv->status_bar), priv->status_bar_context, msg);
+    g_free(msg);
+    g_free(duration_str);
+}
+
+/*
+ * Select the corresponding file into the main file list
+ */
+static void
+Cddb_Track_List_Row_Selected (EtCDDBDialog *self, GtkTreeSelection *selection)
+{
+    EtCDDBDialogPrivate *priv;
+    GList       *selectedRows;
+    GList *l;
+    GtkTreeIter  currentFile;
+    gchar       *text_path;
+    ET_File    **etfile;
+
+    priv = et_cddb_dialog_get_instance_private (self);
+
+    // Exit if we don't have to select files in the main list
+    if (!g_settings_get_boolean (MainSettings, "cddb-follow-file"))
+        return;
+
+    selectedRows = gtk_tree_selection_get_selected_rows(selection, NULL);
+
+    // We might be called with no rows selected
+    if (!selectedRows)
+    {
+        return;
+    }
+
+    /* Unselect files in the main list before re-selecting them... */
+    et_application_window_browser_unselect_all (ET_APPLICATION_WINDOW (MainWindow));
+
+    for (l = selectedRows; l != NULL; l = g_list_next (l))
+    {
+        gboolean found;
+
+        found = gtk_tree_model_get_iter (GTK_TREE_MODEL (priv->track_list_model),
+                                         &currentFile, (GtkTreePath*)l->data);
+
+        if (found)
+        {
+            if (g_settings_get_boolean (MainSettings, "cddb-dlm-enabled"))
+            {
+                gtk_tree_model_get(GTK_TREE_MODEL(priv->track_list_model), &currentFile,
+                                   CDDB_TRACK_LIST_NAME, &text_path,
+                                   CDDB_TRACK_LIST_ETFILE, &etfile, -1);
+                *etfile = et_application_window_browser_select_file_by_dlm (ET_APPLICATION_WINDOW (MainWindow),
+                                                                            text_path,
+                                                                            TRUE);
+            } else
+            {
+                text_path = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(priv->track_list_model), &currentFile);
+                et_application_window_browser_select_file_by_iter_string (ET_APPLICATION_WINDOW (MainWindow),
+                                                                          text_path,
+                                                                          TRUE);
+            }
+            g_free(text_path);
+        }
+    }
+
+    g_list_free_full (selectedRows, (GDestroyNotify)gtk_tree_path_free);
+}
+
+/*
+ * Invert the selection of every row in the track list
+ */
+static void
+Cddb_Track_List_Invert_Selection (EtCDDBDialog *self)
+{
+    EtCDDBDialogPrivate *priv;
+    GtkTreeSelection *selection;
+    GtkTreeIter iter;
+    gboolean valid;
+
+    priv = et_cddb_dialog_get_instance_private (self);
+
+    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->track_list_view));
+
+    if (selection)
+    {
+        /* Must block the select signal to avoid selecting all files (one by one) in the main list */
+        g_signal_handlers_block_by_func (selection,
+                                         G_CALLBACK (Cddb_Track_List_Row_Selected),
+                                         NULL);
+
+        valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(priv->track_list_model), &iter);
+        while (valid)
+        {
+            if (gtk_tree_selection_iter_is_selected(selection, &iter))
+            {
+                gtk_tree_selection_unselect_iter(selection, &iter);
+            } else
+            {
+                gtk_tree_selection_select_iter(selection, &iter);
+            }
+            valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(priv->track_list_model), &iter);
+        }
+        g_signal_handlers_unblock_by_func (selection,
+                                           G_CALLBACK (Cddb_Track_List_Row_Selected),
+                                           NULL);
+        g_signal_emit_by_name(G_OBJECT(gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->track_list_view))), "changed");
+    }
+}
+
+/*
+ * Set the row apperance depending if we have cached info or not
+ * Bold/Red = Info are already loaded, but not displayed
+ * Italic/Light Red = Duplicate CDDB entry
+ */
+static void
+Cddb_Album_List_Set_Row_Appearance (EtCDDBDialog *self, GtkTreeIter *row)
+{
+    EtCDDBDialogPrivate *priv;
+    CddbAlbum *cddbalbum = NULL;
+
+    priv = et_cddb_dialog_get_instance_private (self);
+
+    gtk_tree_model_get(GTK_TREE_MODEL(priv->album_list_model), row,
+                       CDDB_ALBUM_LIST_DATA, &cddbalbum, -1);
+
+    if (cddbalbum->track_list != NULL)
+    {
+        if (g_settings_get_boolean (MainSettings, "file-changed-bold"))
+        {
+            gtk_list_store_set(priv->album_list_model, row,
+                               CDDB_ALBUM_LIST_FONT_STYLE,       PANGO_STYLE_NORMAL,
+                               CDDB_ALBUM_LIST_FONT_WEIGHT,      PANGO_WEIGHT_BOLD,
+                               CDDB_ALBUM_LIST_FOREGROUND_COLOR, NULL,-1);
+        } else
+        {
+            if (cddbalbum->other_version == TRUE)
+            {
+                const GdkRGBA LIGHT_RED = { 1.0, 0.5, 0.5, 1.0 };
+                gtk_list_store_set(priv->album_list_model, row,
+                                   CDDB_ALBUM_LIST_FONT_STYLE,       PANGO_STYLE_NORMAL,
+                                   CDDB_ALBUM_LIST_FONT_WEIGHT,      PANGO_WEIGHT_NORMAL,
+                                   CDDB_ALBUM_LIST_FOREGROUND_COLOR, &LIGHT_RED, -1);
+            } else
+            {
+                gtk_list_store_set(priv->album_list_model, row,
+                                   CDDB_ALBUM_LIST_FONT_STYLE,       PANGO_STYLE_NORMAL,
+                                   CDDB_ALBUM_LIST_FONT_WEIGHT,      PANGO_WEIGHT_NORMAL,
+                                   CDDB_ALBUM_LIST_FOREGROUND_COLOR, &RED, -1);
+            }
+        }
+    }
+    else
+    {
+        if (cddbalbum->other_version == TRUE)
+        {
+            if (g_settings_get_boolean (MainSettings, "file-changed-bold"))
+            {
+                gtk_list_store_set(priv->album_list_model, row,
+                                   CDDB_ALBUM_LIST_FONT_STYLE,       PANGO_STYLE_ITALIC,
+                                   CDDB_ALBUM_LIST_FONT_WEIGHT,      PANGO_WEIGHT_NORMAL,
+                                   CDDB_ALBUM_LIST_FOREGROUND_COLOR, NULL,-1);
+            } else
+            {
+                const GdkRGBA GREY = { 0.664, 0.664, 0.664, 1.0 };
+                gtk_list_store_set(priv->album_list_model, row,
+                                   CDDB_ALBUM_LIST_FONT_STYLE,       PANGO_STYLE_NORMAL,
+                                   CDDB_ALBUM_LIST_FONT_WEIGHT,      PANGO_WEIGHT_NORMAL,
+                                   CDDB_ALBUM_LIST_FOREGROUND_COLOR, &GREY, -1);
+            }
+        } else
+        {
+            gtk_list_store_set(priv->album_list_model, row,
+                               CDDB_ALBUM_LIST_FONT_STYLE,       PANGO_STYLE_NORMAL,
+                               CDDB_ALBUM_LIST_FONT_WEIGHT,      PANGO_WEIGHT_NORMAL,
+                               CDDB_ALBUM_LIST_FOREGROUND_COLOR, NULL, -1);
+        }
+    }
+}
+
+/*
+ * Clear the album model, blocking the tree view selection changed handlers
+ * during the process, to prevent the handlers being called on removed rows.
+ */
+static void
+cddb_album_model_clear (EtCDDBDialog *self)
+{
+    EtCDDBDialogPrivate *priv;
+    GtkTreeSelection *selection;
+
+    priv = et_cddb_dialog_get_instance_private (self);
+
+    selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->album_list_view));
+
+    g_signal_handlers_block_by_func (selection,
+                                     G_CALLBACK (Cddb_Get_Album_Tracks_List_CB),
+                                     self);
+    g_signal_handlers_block_by_func (selection, G_CALLBACK (show_album_info),
+                                     self);
+
+    gtk_list_store_clear (priv->album_list_model);
+
+    g_signal_handlers_unblock_by_func (selection, G_CALLBACK (show_album_info),
+                                       self);
+    g_signal_handlers_unblock_by_func (selection,
+                                       G_CALLBACK (Cddb_Get_Album_Tracks_List_CB),
+                                       self);
+}
+
+/*
+ * Clear the album model, blocking the tree view selection changed handlers
+ * during the process, to prevent the handlers being called on removed rows.
+ */
+static void
+cddb_track_model_clear (EtCDDBDialog *self)
+{
+    EtCDDBDialogPrivate *priv;
+    GtkTreeSelection *selection;
+
+    priv = et_cddb_dialog_get_instance_private (self);
+
+    selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->track_list_view));
+
+    g_signal_handlers_block_by_func (selection,
+                                     G_CALLBACK (Cddb_Track_List_Row_Selected),
+                                     self);
+
+    gtk_list_store_clear (priv->track_list_model);
+
+    g_signal_handlers_unblock_by_func (selection,
+                                       G_CALLBACK (Cddb_Track_List_Row_Selected),
+                                       self);
+}
+
+/*
+ * Load the CddbTrackList into the corresponding List
+ */
+static void
+Cddb_Load_Track_Album_List (EtCDDBDialog *self, GList *track_list)
+{
+    EtCDDBDialogPrivate *priv;
+
+    priv = et_cddb_dialog_get_instance_private (self);
+
+    if (track_list && priv->track_list_view)
+    {
+        GList *l;
+
+        /* Must block the select signal of the target to avoid looping. */
+        cddb_track_model_clear (self);
+
+        for (l = g_list_first (track_list); l != NULL; l = g_list_next (l))
+        {
+            gchar *row_text[1];
+            CddbTrackAlbum *cddbtrackalbum = l->data;
+            ET_File **etfile;
+            etfile = g_malloc0(sizeof(ET_File *));
+
+            row_text[0] = Convert_Duration((gulong)cddbtrackalbum->duration);
+
+            /* Load the row in the list. */
+            gtk_list_store_insert_with_values (priv->track_list_model, NULL,
+                                               G_MAXINT,
+                                               CDDB_TRACK_LIST_NUMBER,
+                                               cddbtrackalbum->track_number,
+                                               CDDB_TRACK_LIST_NAME,
+                                               cddbtrackalbum->track_name,
+                                               CDDB_TRACK_LIST_TIME,
+                                               row_text[0],
+                                               CDDB_TRACK_LIST_DATA,
+                                               cddbtrackalbum,
+                                               CDDB_TRACK_LIST_ETFILE, etfile,
+                                               -1);
+
+            g_free(row_text[0]);
+        }
+
+        update_apply_button_sensitivity (self);
+    }
+}
+
+/*
+ * Cddb_Open_Connection:
+ * @host: a hostname
+ * @port: a port number
+ *
+ * Open a connection to @hostname, performing a DNS lookup as necessary.
+ *
+ * Returns: the socket fd, or 0 upon failure
+ */
+/* TODO: Propagate the GError to the caller. */
+static gint
+Cddb_Open_Connection (EtCDDBDialog *self, const gchar *host, gint port)
+{
+    EtCDDBDialogPrivate *priv;
+    GSocketConnectable *address;
+    GSocketAddressEnumerator *enumerator;
+    GCancellable *cancellable;
+    GSocketAddress *sockaddress;
+    GError *error = NULL;
+    GError *sock_error = NULL;
+    gint socket_id = 0;
+    gchar *msg;
+
+    g_return_val_if_fail (self != NULL, 0);
+    g_return_val_if_fail (host != NULL && port > 0, 0);
+
+    priv = et_cddb_dialog_get_instance_private (self);
+
+    msg = g_strdup_printf(_("Resolving host '%s'…"),host);
+    gtk_statusbar_push (GTK_STATUSBAR (priv->status_bar),
+                        priv->status_bar_context, msg);
+    g_free(msg);
+
+    while (gtk_events_pending ())
+    {
+        gtk_main_iteration ();
+    }
+
+    address = g_network_address_new (host, port);
+    enumerator = g_socket_connectable_enumerate (address);
+    g_object_unref (address);
+
+    cancellable = g_cancellable_new ();
+
+    while (socket_id == 0
+           && (sockaddress = g_socket_address_enumerator_next (enumerator,
+                                                               cancellable,
+                                                               &error)))
+    {
+        struct sockaddr sockaddr_in;
+        gint optval = 1;
+
+        if (!g_socket_address_to_native (sockaddress, &sockaddr_in,
+                                         sizeof (sockaddr_in),
+                                         sock_error ? NULL : &sock_error))
+        {
+            g_object_unref (sockaddress);
+            continue;
+        }
+
+        g_object_unref (sockaddress);
+
+        while (gtk_events_pending ())
+        {
+            gtk_main_iteration ();
+        }
+
+        /* Create socket. */
+        if ((socket_id = socket (AF_INET, SOCK_STREAM, 0)) < 0)
+        {
+            msg = g_strdup_printf (_("Cannot create a new socket ‘%s’"),
+                                   g_strerror (errno));
+            gtk_statusbar_push (GTK_STATUSBAR (priv->status_bar),
+                                priv->status_bar_context, msg);
+            Log_Print (LOG_ERROR, "%s", msg);
+            g_free (msg);
+            goto err;
+        }
+
+        /* FIXME : must catch SIGPIPE? */
+        if (setsockopt (socket_id, SOL_SOCKET, SO_KEEPALIVE, (void *)&optval,
+            sizeof (optval)) < 0)
+        {
+            Log_Print (LOG_WARNING,
+                       _("Cannot set options on the newly-created socket"));
+        }
+
+        /* Open connection to the server. */
+        msg = g_strdup_printf (_("Connecting to host ‘%s’, port ‘%d’…"), host,
+                               port);
+        gtk_statusbar_push (GTK_STATUSBAR (priv->status_bar),
+                            priv->status_bar_context, msg);
+        g_free (msg);
+
+        while (gtk_events_pending ())
+        {
+            gtk_main_iteration ();
+        }
+
+        if (connect (socket_id, &sockaddr_in, sizeof (struct sockaddr)) < 0)
+        {
+            msg = g_strdup_printf (_("Cannot connect to host ‘%s’: %s"), host,
+                                   g_strerror (errno));
+            gtk_statusbar_push (GTK_STATUSBAR (priv->status_bar),
+                                priv->status_bar_context, msg);
+            Log_Print (LOG_ERROR, "%s", msg);
+            g_free (msg);
+
+            goto err;
+        }
+    }
+
+    if (socket_id != 0)
+    {
+        /* First address failed, but a later address succeeded. */
+        if (sock_error)
+        {
+            g_debug ("Failure while looking up address: %s",
+                     sock_error->message);
+            g_error_free (sock_error);
+        }
+    }
+
+    if (error)
+    {
+        msg = g_strdup_printf (_("Cannot resolve host ‘%s’: %s"), host,
+                               error->message);
+        gtk_statusbar_push (GTK_STATUSBAR (priv->status_bar),
+                            priv->status_bar_context, msg);
+        Log_Print (LOG_ERROR, "%s", msg);
+        g_free (msg);
+        g_error_free (error);
+        goto err;
+    }
+
+    g_object_unref (enumerator);
+    g_object_unref (cancellable);
+
+    msg = g_strdup_printf (_("Connected to host ‘%s’"), host);
+    gtk_statusbar_push (GTK_STATUSBAR (priv->status_bar), priv->status_bar_context,
+                        msg);
+    g_free (msg);
+
+    while (gtk_events_pending ())
+    {
+        gtk_main_iteration ();
+    }
+
+    return socket_id;
+
+err:
+    g_object_unref (enumerator);
+    g_object_unref (cancellable);
+
+    return 0;
+}
+
+/*
+ * Close the connection correcponding to the socket_id
+ */
+static void
+Cddb_Close_Connection (EtCDDBDialog *self, gint socket_id)
+{
+    EtCDDBDialogPrivate *priv;
+
+#ifndef G_OS_WIN32
+    shutdown(socket_id,SHUT_RDWR);
+#endif /* !G_OS_WIN32 */
+    close(socket_id);
+
+    g_return_if_fail (ET_CDDB_DIALOG (self));
+
+    priv = et_cddb_dialog_get_instance_private (self);
+
+    priv->stop_searching = FALSE;
+}
+
+/*
+ * Read the result of the request and write it into a file.
+ * And return the number of bytes read.
+ *  - bytes_read=0 => no more data.
+ *  - bytes_read_total : use to add bytes of severals pages... must be initialized before
+ *
+ * Server answser is formated like this :
+ *
+ * HTTP/1.1 200 OK\r\n                              }
+ * Server: Apache/1.3.19 (Unix) PHP/4.0.4pl1\r\n    } "Header"
+ * Connection: close\r\n                            }
+ * \r\n
+ * <html>\n                                         }
+ * [...]                                            } "Body"
+ */
+static gint
+Cddb_Write_Result_To_File (EtCDDBDialog *self,
+                           gint socket_id,
+                           gulong *bytes_read_total)
+{
+    EtCDDBDialogPrivate *priv;
+    gchar *file_path = NULL;
+    FILE  *file;
+
+    priv = et_cddb_dialog_get_instance_private (self);
+
+    /* Cache directory was already created by Log_Print(). */
+    file_path = g_build_filename (g_get_user_cache_dir (), PACKAGE_TARNAME,
+                                  CDDB_RESULT_FILE, NULL);
+
+    if ((file = fopen (file_path, "w+")) != NULL)
+    {
+        gchar cddb_out[MAX_STRING_LEN+1];
+        gint  bytes_read = 0;
+
+        while (!priv->stop_searching
+        // Read data
+        && (bytes_read = recv(socket_id,(void *)&cddb_out,MAX_STRING_LEN,0)) > 0 )
+        {
+            gchar *size_str;
+            gchar *msg;
+
+
+            // Write to file
+            cddb_out[bytes_read] = 0;
+            if (fwrite (&cddb_out, bytes_read, 1, file) != 1)
+            {
+                 Log_Print (LOG_ERROR,
+                            _("Error while writing CDDB results to file ‘%s’"),
+                            file_path);
+                 break;
+            }
+
+            *bytes_read_total += bytes_read;
+
+            //g_print("\nLine : %lu : %s\n",bytes_read,cddb_out);
+
+            // Display message
+            size_str =  g_format_size (*bytes_read_total);
+            msg = g_strdup_printf(_("Receiving data (%s)…"),size_str);
+            gtk_statusbar_push (GTK_STATUSBAR (priv->status_bar),
+                                priv->status_bar_context, msg);
+            g_free(msg);
+            g_free(size_str);
+            while (gtk_events_pending())
+                gtk_main_iteration();
+        }
+
+        fclose(file);
+
+        if (bytes_read < 0)
+        {
+            Log_Print (LOG_ERROR, _("Error when reading CDDB response ‘%s’"),
+	               g_strerror(errno));
+            return -1; // Error!
+        }
+
+    } else
+    {
+        Log_Print (LOG_ERROR, _("Cannot create file ‘%s’: %s"), file_path,
+	           g_strerror(errno));
+    }
+    g_free(file_path);
+
+    return 0;
+}
+
+/*
+ * Look up a specific album in freedb, and save to a CddbAlbum structure
+ */
+static gboolean
+Cddb_Get_Album_Tracks_List (EtCDDBDialog *self, GtkTreeSelection* selection)
+{
+    EtCDDBDialogPrivate *priv;
+    gint       socket_id = 0;
+    CddbAlbum *cddbalbum = NULL;
+    GList     *TrackOffsetList = NULL;
+    gchar     *cddb_in, *cddb_out = NULL;
+    gchar     *cddb_end_str, *msg, *copy, *valid;
+    gchar     *proxy_auth;
+    gchar     *cddb_server_name;
+    gint       cddb_server_port;
+    gchar     *cddb_server_cgi_path;
+    gboolean proxy_enabled;
+    gchar *proxy_hostname;
+    guint proxy_port;
+    gint       bytes_written;
+    gulong     bytes_read_total = 0;
+    FILE      *file = NULL;
+    gboolean   read_track_offset = FALSE;
+    GtkTreeIter row;
+
+    priv = et_cddb_dialog_get_instance_private (self);
+
+    cddb_track_model_clear (self);
+    update_apply_button_sensitivity (self);
+
+    if (gtk_tree_selection_get_selected(selection, NULL, &row))
+    {
+        gtk_tree_model_get(GTK_TREE_MODEL(priv->album_list_model), &row, CDDB_ALBUM_LIST_DATA, &cddbalbum, -1);
+    }
+    if (!cddbalbum)
+        return FALSE;
+
+    // We have already the track list
+    if (cddbalbum->track_list != NULL)
+    {
+        Cddb_Load_Track_Album_List (self, cddbalbum->track_list);
+        return TRUE;
+    }
+
+    // Parameters of the server used
+    cddb_server_name     = cddbalbum->server_name;
+    cddb_server_port     = cddbalbum->server_port;
+    cddb_server_cgi_path = cddbalbum->server_cgi_path;
+
+    if (!cddb_server_name)
+    {
+        // Local access
+        if ( (file=fopen(cddb_server_cgi_path,"r"))==0 )
+        {
+            Log_Print (LOG_ERROR, _("Cannot load file ‘%s’: %s"),
+                       cddb_server_cgi_path, g_strerror (errno));
+            return FALSE;
+        }
+
+    }else
+    {
+        /* Connection to the server. */
+        proxy_enabled = g_settings_get_boolean (MainSettings,
+                                                "cddb-proxy-enabled");
+        proxy_hostname = g_settings_get_string (MainSettings,
+                                                "cddb-proxy-hostname");
+        proxy_port = g_settings_get_uint (MainSettings, "cddb-proxy-port");
+        if ((socket_id = Cddb_Open_Connection (self,
+                                               proxy_enabled
+                                               ? proxy_hostname
+                                               : cddb_server_name,
+                                               proxy_enabled
+                                               ? proxy_port
+                                               : cddb_server_port)) <= 0)
+        {
+            g_free (proxy_hostname);
+            return FALSE;
+        }
+
+		if ( strstr(cddb_server_name,"gnudb") != NULL )
+		{
+			// For gnudb
+			// New version of gnudb doesn't use a cddb request, but a http request
+		    cddb_in = g_strdup_printf("GET %s%s/gnudb/"
+		                              "%s/%s"
+		                              " HTTP/1.1\r\n"
+		                              "Host: %s:%d\r\n"
+		                              "User-Agent: %s %s\r\n"
+		                              "%s"
+		                              "Connection: close\r\n"
+		                              "\r\n",
+		                              proxy_enabled ? "http://" : "",
+                                              proxy_enabled ? cddb_server_name : "",
+		                              cddbalbum->category,cddbalbum->id,
+		                              cddb_server_name,cddb_server_port,
+		                              PACKAGE_NAME, PACKAGE_VERSION,
+		                              (proxy_auth=Cddb_Format_Proxy_Authentification())
+		                              );
+		}else
+		{
+		    // CDDB Request (ex: GET /~cddb/cddb.cgi?cmd=cddb+read+jazz+0200a401&hello=noname+localhost+EasyTAG+0.31&proto=1 HTTP/1.1\r\nHost: freedb.freedb.org:80\r\nConnection: close)
+		    // Without proxy : "GET /~cddb/cddb.cgi?…" but doesn't work with a proxy.
+		    // With proxy    : "GET http://freedb.freedb.org/~cddb/cddb.cgi?…"
+		    cddb_in = g_strdup_printf("GET %s%s%s?cmd=cddb+read+"
+		                              "%s+%s"
+		                              "&hello=noname+localhost+%s+%s"
+		                              "&proto=6 HTTP/1.1\r\n"
+		                              "Host: %s:%d\r\n"
+		                              "%s"
+		                              "Connection: close\r\n\r\n",
+		                              proxy_enabled ? "http://" : "",
+                                              proxy_enabled ? cddb_server_name : "",
+                                              cddb_server_cgi_path,
+		                              cddbalbum->category,cddbalbum->id,
+		                              PACKAGE_NAME, PACKAGE_VERSION,
+		                              cddb_server_name,cddb_server_port,
+		                              (proxy_auth=Cddb_Format_Proxy_Authentification())
+		                              );
+		}
+
+		
+		g_free(proxy_auth);
+        //g_print("Request Cddb_Get_Album_Tracks_List : '%s'\n", cddb_in);
+
+        // Send the request
+        gtk_statusbar_push(GTK_STATUSBAR(priv->status_bar),priv->status_bar_context,_("Sending request…"));
+        while (gtk_events_pending()) gtk_main_iteration();
+        if ( (bytes_written=send(socket_id,cddb_in,strlen(cddb_in)+1,0)) < 0)
+        {
+            Log_Print (LOG_ERROR, _("Cannot send the request ‘%s’"),
+                       g_strerror (errno));
+            Cddb_Close_Connection (self, socket_id);
+            g_free(cddb_in);
+            g_free (proxy_hostname);
+            return FALSE;
+        }
+        g_free(cddb_in);
+        g_free (proxy_hostname);
+
+
+        // Read the answer
+        gtk_statusbar_push(GTK_STATUSBAR(priv->status_bar),priv->status_bar_context,_("Receiving data…"));
+        while (gtk_events_pending())
+            gtk_main_iteration();
+
+        /* Write result in a file. */
+        if (Cddb_Write_Result_To_File (self, socket_id, &bytes_read_total) < 0)
+        {
+            msg = g_strdup(_("The server returned a bad response"));
+            gtk_statusbar_push(GTK_STATUSBAR(priv->status_bar),priv->status_bar_context,msg);
+            Log_Print(LOG_ERROR,"%s",msg);
+            g_free(msg);
+            gtk_widget_set_sensitive(GTK_WIDGET(priv->stop_search_button),FALSE);
+            return FALSE;
+        }
+
+
+        // Parse server answer : Check HTTP Header (freedb or gnudb) and CDDB Header (freedb only)
+        file = NULL;
+		if ( strstr(cddb_server_name,"gnudb") != NULL )
+		{
+			// For gnudb (don't check CDDB header)
+			if ( Cddb_Read_Http_Header(&file,&cddb_out) <= 0 )
+		    {
+		        gchar *msg = g_strdup_printf (_("The server returned a bad response ‘%s’"),
+                                                      cddb_out);
+		        gtk_statusbar_push(GTK_STATUSBAR(priv->status_bar),priv->status_bar_context,msg);
+		        Log_Print(LOG_ERROR,"%s",msg);
+		        g_free(msg);
+		        g_free(cddb_out);
+		        if (file)
+		            fclose(file);
+		        return FALSE;
+		    }
+		}else
+		{
+			// For freedb
+			if ( Cddb_Read_Http_Header(&file,&cddb_out) <= 0
+		      || Cddb_Read_Cddb_Header(&file,&cddb_out) <= 0 )
+		    {
+		        gchar *msg = g_strdup_printf (_("The server returned a bad response ‘%s’"),
+                                                      cddb_out);
+		        gtk_statusbar_push(GTK_STATUSBAR(priv->status_bar),priv->status_bar_context,msg);
+		        Log_Print(LOG_ERROR,"%s",msg);
+		        g_free(msg);
+		        g_free(cddb_out);
+		        if (file)
+		            fclose(file);
+		        return FALSE;
+		    }
+		}
+        g_free(cddb_out);
+
+    }
+    cddb_end_str = g_strdup(".");
+
+    while (!priv->stop_searching && Cddb_Read_Line (&file, &cddb_out) > 0)
+    {
+        if (!cddb_out) // Empty line?
+            continue;
+        //g_print("%s\n",cddb_out);
+
+        // To avoid the cddb lookups to hang (Patch from Paul Giordano)
+        /* It appears that on some systems that cddb lookups continue to attempt
+         * to get data from the socket even though the other system has completed
+         * sending. The fix adds one check to the loops to see if the actual
+         * end of data is in the last block read. In this case, the last line
+         * will be a single '.'
+         */
+        if (strlen(cddb_out)<=3 && strstr(cddb_out,cddb_end_str)!=NULL)
+            break;
+
+        if ( strstr(cddb_out,"Track frame offsets")!=NULL ) // We read the Track frame offset
+        {
+            read_track_offset = TRUE; // The next reads are for the tracks offset
+            continue;
+
+        }else if (read_track_offset) // We are reading a track offset? (generates TrackOffsetList)
+        {
+            if ( strtoul(cddb_out+1,NULL,10)>0 )
+            {
+                CddbTrackFrameOffset *cddbtrackframeoffset = g_malloc0(sizeof(CddbTrackFrameOffset));
+                cddbtrackframeoffset->offset = strtoul(cddb_out+1,NULL,10);
+                TrackOffsetList = g_list_append(TrackOffsetList,cddbtrackframeoffset);
+            }else
+            {
+                read_track_offset = FALSE; // No more track offset
+            }
+            continue;
+
+        }else if ( strstr(cddb_out,"Disc length: ")!=NULL ) // Length of album (in second)
+        {
+            cddbalbum->duration = atoi(strchr(cddb_out,':')+1);
+            if (TrackOffsetList) // As it must be the last item, do nothing if no previous data
+            {
+                CddbTrackFrameOffset *cddbtrackframeoffset = g_malloc0(sizeof(CddbTrackFrameOffset));
+                cddbtrackframeoffset->offset = cddbalbum->duration * 75; // It's the last offset
+                TrackOffsetList = g_list_append(TrackOffsetList,cddbtrackframeoffset);
+            }
+            continue;
+
+        }else if ( strncmp(cddb_out,"DTITLE=",7)==0 ) // "Artist / Album" names
+        {
+            // Note : disc title too long take severals lines. For example :
+            // DTITLE=Marilyn Manson / The Nobodies (2005 Against All Gods Mix - Korea Tour L
+            // DTITLE=imited Edition)
+            if (!cddbalbum->album)
+            {
+                // It is the first time we find DTITLE...
+
+                gchar *alb_ptr = strstr(cddb_out," / ");
+                // Album
+                if (alb_ptr && alb_ptr+3)
+                {
+                    cddbalbum->album = Try_To_Validate_Utf8_String(alb_ptr+3);
+                    *alb_ptr = 0;
+                }
+
+                // Artist
+                cddbalbum->artist = Try_To_Validate_Utf8_String(cddb_out+7); // '7' to skip 'DTITLE='
+            }else
+            {
+                // It is at least the second time we find DTITLE
+                // So we suppose that only the album was truncated
+
+                // Album
+                valid = Try_To_Validate_Utf8_String(cddb_out+7); // '7' to skip 'DTITLE='
+                copy = cddbalbum->album; // To free...
+                cddbalbum->album = g_strconcat(cddbalbum->album,valid,NULL);
+                g_free(copy);
+            }
+            continue;
+
+        }else if ( strncmp(cddb_out,"DYEAR=",6)==0 ) // Year
+        {
+            valid = Try_To_Validate_Utf8_String(cddb_out+6); // '6' to skip 'DYEAR='
+            if (g_utf8_strlen(valid, -1))
+                cddbalbum->year = valid;
+            continue;
+
+        }else if ( strncmp(cddb_out,"DGENRE=",7)==0 ) // Genre
+        {
+            valid = Try_To_Validate_Utf8_String(cddb_out+7); // '7' to skip 'DGENRE='
+            if (g_utf8_strlen(valid, -1))
+                cddbalbum->genre = valid;
+            continue;
+
+        }else if ( strncmp(cddb_out,"TTITLE",6)==0 ) // Track title (for exemple : TTITLE10=xxxx)
+        {
+            CddbTrackAlbum *cddbtrackalbum_last = NULL;
+
+            CddbTrackAlbum *cddbtrackalbum = g_malloc0(sizeof(CddbTrackAlbum));
+            cddbtrackalbum->cddbalbum = cddbalbum; // To find the CddbAlbum father quickly
+
+            // Here is a fix when TTITLExx doesn't contain an "=", we skip the line
+            if ( (copy = g_utf8_strchr(cddb_out,-1,'=')) != NULL )
+            {
+                cddbtrackalbum->track_name = Try_To_Validate_Utf8_String(copy+1);
+            }else
+            {
+                continue;
+            }
+
+            *g_utf8_strchr(cddb_out,-1,'=') = 0;
+            cddbtrackalbum->track_number = atoi(cddb_out+6)+1;
+
+            // Note : titles too long take severals lines. For example :
+            // TTITLE15=Bob Marley vs. Funkstar De Luxe Remix - Sun Is Shining (Radio De Lu
+            // TTITLE15=xe Edit)
+            // So to check it, we compare current track number with the previous one...
+            if (cddbalbum->track_list)
+                cddbtrackalbum_last = g_list_last(cddbalbum->track_list)->data;
+            if (cddbtrackalbum_last && cddbtrackalbum_last->track_number == cddbtrackalbum->track_number)
+            {
+                gchar *track_name = g_strconcat(cddbtrackalbum_last->track_name,cddbtrackalbum->track_name,NULL);
+                g_free(cddbtrackalbum_last->track_name);
+
+                cddbtrackalbum_last->track_name = Try_To_Validate_Utf8_String(track_name);
+
+                // Frees useless allocated data previously
+                g_free(cddbtrackalbum->track_name);
+                g_free(cddbtrackalbum);
+            }else
+            {
+                GList *l;
+
+                for (l = TrackOffsetList; l != NULL; l = g_list_next (l))
+                {
+                    if (l->next)
+                    {
+                        cddbtrackalbum->duration = (((CddbTrackFrameOffset *)l->next->data)->offset
+                                                     - ((CddbTrackFrameOffset *)l->data)->offset)
+                                                    / 75; /* Calculate time in seconds. */
+                    }
+                }
+                cddbalbum->track_list = g_list_append(cddbalbum->track_list,cddbtrackalbum);
+            }
+            continue;
+
+        }else if ( strncmp(cddb_out,"EXTD=",5)==0 ) // Extended album data
+        {
+            gchar *genre_ptr = strstr(cddb_out,"ID3G:");
+            gchar *year_ptr  = strstr(cddb_out,"YEAR:");
+            // May contains severals EXTD field it too long
+            // EXTD=Techno
+            // EXTD= YEAR: 1997 ID3G:  18
+            // EXTD= ID3G:  17
+            if (year_ptr && cddbalbum->year)
+                cddbalbum->year = g_strdup_printf("%d",atoi(year_ptr+5));
+            if (genre_ptr && cddbalbum->genre)
+                cddbalbum->genre = g_strdup(Id3tag_Genre_To_String(atoi(genre_ptr+5)));
+            continue;
+        }
+
+        g_free(cddb_out);
+    }
+    g_free(cddb_end_str);
+
+    // Close file opened for reading lines
+    if (file)
+    {
+        fclose(file);
+        file = NULL;
+    }
+
+    if (cddb_server_name)
+    {
+        /* Remote access. */
+        /* Close connection */
+        Cddb_Close_Connection (self, socket_id);
+    }
+
+    /* Set color of the selected row (without reloading the whole list) */
+    Cddb_Album_List_Set_Row_Appearance (self, &row);
+
+    /* Load the track list of the album */
+    gtk_statusbar_push(GTK_STATUSBAR(priv->status_bar),priv->status_bar_context,_("Loading album track list…"));
+    while (gtk_events_pending()) gtk_main_iteration();
+    Cddb_Load_Track_Album_List (self, cddbalbum->track_list);
+
+    show_album_info (self, gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->album_list_view)));
+
+    g_list_free_full (TrackOffsetList, (GDestroyNotify)g_free);
+    return TRUE;
+}
+
+/*
+ * Callback when selecting a row in the Album List.
+ * We get the list of tracks of the selected album
+ */
+static gboolean
+Cddb_Get_Album_Tracks_List_CB (EtCDDBDialog *self, GtkTreeSelection *selection)
+{
+    gint i;
+    gint i_max = 5;
+
+    /* As may be not opened the first time (The server returned a wrong answer!)
+     * me try to reconnect severals times */
+    for (i = 1; i <= i_max; i++)
+    {
+        if (Cddb_Get_Album_Tracks_List (self, selection) == TRUE)
+        {
+            break;
+        }
+    }
+    if (i <= i_max)
+    {
+        return TRUE;
+    } else
+    {
+        return FALSE;
+    }
+}
+
+/*
+ * Load the priv->album_list into the corresponding List
+ */
+static void
+Cddb_Load_Album_List (EtCDDBDialog *self, gboolean only_red_lines)
+{
+    EtCDDBDialogPrivate *priv;
+    GtkTreeIter iter;
+    GList *l;
+
+    GtkTreeSelection *selection;
+    GList            *selectedRows = NULL;
+    GtkTreeIter       currentIter;
+    CddbAlbum        *cddbalbumSelected = NULL;
+
+    priv = et_cddb_dialog_get_instance_private (self);
+
+    // Memorize the current selected item
+    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->album_list_view));
+    selectedRows = gtk_tree_selection_get_selected_rows(selection, NULL);
+    if (selectedRows)
+    {
+        if (gtk_tree_model_get_iter(GTK_TREE_MODEL(priv->album_list_model), &currentIter, (GtkTreePath*)selectedRows->data))
+            gtk_tree_model_get(GTK_TREE_MODEL(priv->album_list_model), &currentIter,
+                               CDDB_ALBUM_LIST_DATA, &cddbalbumSelected, -1);
+    }
+
+    /* Remove lines. */
+    cddb_album_model_clear (self);
+
+    // Reload list following parameter 'only_red_lines'
+    for (l = g_list_first (priv->album_list); l != NULL; l = g_list_next (l))
+    {
+        CddbAlbum *cddbalbum = l->data;
+
+        if ( (only_red_lines && cddbalbum->track_list) || !only_red_lines)
+        {
+            /* Load the row in the list. */
+            gtk_list_store_insert_with_values (priv->album_list_model, &iter,
+                                               G_MAXINT,
+                                               CDDB_ALBUM_LIST_PIXBUF,
+                                               cddbalbum->bitmap,
+                                               CDDB_ALBUM_LIST_ALBUM,
+                                               cddbalbum->artist_album,
+                                               CDDB_ALBUM_LIST_CATEGORY,
+                                               cddbalbum->category,
+                                               CDDB_ALBUM_LIST_DATA,
+                                               cddbalbum, -1);
+
+            Cddb_Album_List_Set_Row_Appearance (self, &iter);
+
+            // Select this item if it is the saved one...
+            if (cddbalbum == cddbalbumSelected)
+                gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->album_list_view)), &iter);
+        }
+    }
+}
+
+/*
+ * Free priv->album_list
+ */
+static gboolean
+Cddb_Free_Album_List (EtCDDBDialog *self)
+{
+    EtCDDBDialogPrivate *priv;
+    GList *l;
+
+    priv = et_cddb_dialog_get_instance_private (self);
+
+    g_return_val_if_fail (priv->album_list != NULL, FALSE);
+
+    priv->album_list = g_list_first (priv->album_list);
+
+    for (l = priv->album_list; l != NULL; l = g_list_next (l))
+    {
+        CddbAlbum *cddbalbum = l->data;
+
+        if (cddbalbum)
+        {
+            g_free(cddbalbum->server_name);
+            g_free (cddbalbum->server_cgi_path);
+            g_object_unref(cddbalbum->bitmap);
+
+            g_free(cddbalbum->artist_album);
+            g_free(cddbalbum->category);
+            g_free(cddbalbum->id);
+            if (cddbalbum->track_list)
+            {
+                Cddb_Free_Track_Album_List(cddbalbum->track_list);
+                cddbalbum->track_list = NULL;
+            }
+            g_free(cddbalbum->artist);
+            g_free(cddbalbum->album);
+            g_free(cddbalbum->genre);
+            g_free(cddbalbum->year);
+
+            g_free(cddbalbum);
+            cddbalbum = NULL;
+        }
+    }
+
+    g_list_free (priv->album_list);
+    priv->album_list = NULL;
+
+    return TRUE;
+}
+
+/*
+ * Fields          : artist, title, track, rest
+ * CDDB Categories : blues, classical, country, data, folk, jazz, misc, newage, reggae, rock, soundtrack
+ */
+static gchar *
+Cddb_Generate_Request_String_With_Fields_And_Categories_Options (EtCDDBDialog *self)
+{
+    GString *string;
+    guint search_fields;
+    guint search_categories;
+
+    /* Init. */
+    string = g_string_sized_new (256);
+
+    /* Fields. */
+    /* FIXME: Fetch cddb-search-fields "all-set" mask. */
+#if 0
+    if (search_all_fields)
+    {
+        g_string_append (string, "&allfields=YES");
+    }
+    else
+    {
+        g_string_append (string, "&allfields=NO");
+    }
+#endif
+
+    search_fields = g_settings_get_flags (MainSettings, "cddb-search-fields");
+
+    if (search_fields & ET_CDDB_SEARCH_FIELD_ARTIST)
+    {
+        g_string_append (string, "&fields=artist");
+    }
+    if (search_fields & ET_CDDB_SEARCH_FIELD_TITLE)
+    {
+        g_string_append (string, "&fields=title");
+    }
+    if (search_fields & ET_CDDB_SEARCH_FIELD_TRACK)
+    {
+        g_string_append (string, "&fields=track");
+    }
+    if (search_fields & ET_CDDB_SEARCH_FIELD_OTHER)
+    {
+        g_string_append (string, "&fields=rest");
+    }
+
+    /* Categories (warning: there is one other CDDB category that is not used
+     * here ("data")) */
+    search_categories = g_settings_get_flags (MainSettings,
+                                              "cddb-search-categories");
+    g_string_append (string, "&allcats=NO");
+
+    if (search_categories & ET_CDDB_SEARCH_CATEGORY_BLUES)
+    {
+        g_string_append (string, "&cats=blues");
+    }
+    if (search_categories & ET_CDDB_SEARCH_CATEGORY_CLASSICAL)
+    {
+        g_string_append (string, "&cats=classical");
+    }
+    if (search_categories & ET_CDDB_SEARCH_CATEGORY_COUNTRY)
+    {
+        g_string_append (string, "&cats=country");
+    }
+    if (search_categories & ET_CDDB_SEARCH_CATEGORY_FOLK)
+    {
+        g_string_append (string, "&cats=folk");
+    }
+    if (search_categories & ET_CDDB_SEARCH_CATEGORY_JAZZ)
+    {
+        g_string_append (string, "&cats=jazz");
+    }
+    if (search_categories & ET_CDDB_SEARCH_CATEGORY_MISC)
+    {
+        g_string_append (string, "&cats=misc");
+    }
+    if (search_categories & ET_CDDB_SEARCH_CATEGORY_NEWAGE)
+    {
+        g_string_append (string, "&cats=newage");
+    }
+    if (search_categories & ET_CDDB_SEARCH_CATEGORY_REGGAE)
+    {
+        g_string_append (string, "&cats=reggae");
+    }
+    if (search_categories & ET_CDDB_SEARCH_CATEGORY_ROCK)
+    {
+        g_string_append (string, "&cats=rock");
+    }
+    if (search_categories & ET_CDDB_SEARCH_CATEGORY_SOUNDTRACK)
+    {
+        g_string_append (string, "&cats=soundtrack");
+    }
+
+    return g_string_free (string, FALSE);
+}
+
+
+/*
+ * Site FREEDB.ORG - Manual Search
+ * Send request (using the HTML search page in freedb.org site) to the CD database
+ * to get the list of albums matching to a string.
+ */
+static gboolean
+Cddb_Search_Album_List_From_String_Freedb (EtCDDBDialog *self)
+{
+    EtCDDBDialogPrivate *priv;
+    gint   socket_id;
+    gchar *string = NULL;
+    gchar *tmp, *tmp1;
+    gchar *cddb_in;         // For the request to send
+    gchar *cddb_out = NULL; // Answer received
+    gchar *cddb_out_tmp;
+    gchar *msg;
+    gchar *proxy_auth = NULL;
+    gchar *cddb_server_name;
+    gint   cddb_server_port;
+    gchar *cddb_server_cgi_path;
+    gboolean proxy_enabled;
+    gchar *proxy_hostname;
+    guint proxy_port;
+
+    gchar *ptr_cat, *cat_str, *id_str, *art_alb_str;
+    gchar *art_alb_tmp = NULL;
+    gboolean use_art_alb = FALSE;
+    gchar *end_str;
+    gchar *html_end_str;
+    gchar  buffer[MAX_STRING_LEN+1];
+    gint   bytes_written;
+    gulong bytes_read_total = 0;
+    FILE  *file = NULL;
+    gboolean web_search_disabled = FALSE;
+
+    priv = et_cddb_dialog_get_instance_private (self);
+
+    gtk_statusbar_push(GTK_STATUSBAR(priv->status_bar),priv->status_bar_context,"");
+
+    /* Get words to search... */
+    string = g_strdup (gtk_entry_get_text (GTK_ENTRY (priv->search_string_entry)));
+    if (!string || g_utf8_strlen(string, -1) <= 0)
+        return FALSE;
+
+    /* Format the string of words */
+    g_strstrip (string);
+    /* Remove the duplicated spaces */
+    while ((tmp=strstr(string,"  "))!=NULL) // Search 2 spaces
+    {
+        tmp1 = tmp + 1;
+        while (*tmp1)
+            *(tmp++) = *(tmp1++);
+        *tmp = '\0';
+    }
+
+    /* Convert spaces to '+' */
+    while ( (tmp=strchr(string,' '))!=NULL )
+        *tmp = '+';
+
+    cddb_server_name = g_settings_get_string (MainSettings,
+                                              "cddb-manual-search-hostname");
+    cddb_server_port = g_settings_get_uint (MainSettings,
+                                            "cddb-manual-search-port");
+    cddb_server_cgi_path = g_settings_get_string (MainSettings,
+                                                  "cddb-manual-search-path");
+
+    /* Connection to the server */
+    proxy_enabled = g_settings_get_boolean (MainSettings,
+                                            "cddb-proxy-enabled");
+    proxy_hostname = g_settings_get_string (MainSettings,
+                                            "cddb-proxy-hostname");
+    proxy_port = g_settings_get_uint (MainSettings, "cddb-proxy-port");
+    if ((socket_id = Cddb_Open_Connection (self,
+                                           proxy_enabled
+                                           ? proxy_hostname
+                                           : cddb_server_name,
+                                           proxy_enabled
+                                           ? proxy_port
+                                           : cddb_server_port)) <= 0)
+    {
+        g_free (string);
+        g_free (cddb_server_name);
+        g_free (cddb_server_cgi_path);
+        g_free (proxy_hostname);
+        return FALSE;
+    }
+
+    /* Build request */
+    //cddb_in = g_strdup_printf("GET http://www.freedb.org/freedb_search.php?" // In this case, problem with squid cache...
+    cddb_in = g_strdup_printf("GET %s%s/freedb_search.php?"
+                              "words=%s"
+                              "%s"
+                              "&grouping=none"
+                              " HTTP/1.1\r\n"
+                              "Host: %s:%d\r\n"
+                              "User-Agent: %s %s\r\n"
+                              "%s"
+                              "Connection: close\r\n"
+                              "\r\n",
+                              proxy_enabled ? "http://" : "",
+                              proxy_enabled ? cddb_server_name : "",
+                              string,
+                              (tmp = Cddb_Generate_Request_String_With_Fields_And_Categories_Options (self)),
+                              cddb_server_name,cddb_server_port,
+                              PACKAGE_NAME, PACKAGE_VERSION,
+                              (proxy_auth=Cddb_Format_Proxy_Authentification())
+                              );
+
+    g_free(string);
+    g_free(tmp);
+    g_free(proxy_auth);
+    //g_print("Request Cddb_Search_Album_List_From_String_Freedb : '%s'\n", cddb_in);
+
+    // Send the request
+    gtk_statusbar_push(GTK_STATUSBAR(priv->status_bar),priv->status_bar_context,_("Sending request…"));
+    while (gtk_events_pending()) gtk_main_iteration();
+    if ( (bytes_written=send(socket_id,cddb_in,strlen(cddb_in)+1,0)) < 0)
+    {
+        Log_Print (LOG_ERROR, _("Cannot send the request ‘%s’"),
+                   g_strerror (errno));
+        Cddb_Close_Connection (self, socket_id);
+        g_free(cddb_in);
+        g_free(string);
+        g_free(cddb_server_name);
+        g_free(cddb_server_cgi_path);
+        g_free (proxy_hostname);
+        return FALSE;
+    }
+    g_free(cddb_in);
+
+
+    /* Delete previous album list. */
+    cddb_album_model_clear (self);
+    cddb_track_model_clear (self);
+
+    if (priv->album_list)
+    {
+        Cddb_Free_Album_List (self);
+    }
+    gtk_widget_set_sensitive (GTK_WIDGET (priv->stop_search_button), TRUE);
+
+
+    /*
+     * Read the answer
+     */
+    gtk_statusbar_push(GTK_STATUSBAR(priv->status_bar),priv->status_bar_context,_("Receiving data…"));
+    while (gtk_events_pending())
+        gtk_main_iteration();
+
+    /* Write result in a file. */
+    if (Cddb_Write_Result_To_File (self, socket_id, &bytes_read_total) < 0)
+    {
+        msg = g_strdup(_("The server returned a bad response"));
+        gtk_statusbar_push(GTK_STATUSBAR(priv->status_bar),priv->status_bar_context,msg);
+        Log_Print(LOG_ERROR,"%s",msg);
+        g_free(msg);
+        g_free(cddb_server_name);
+        g_free(cddb_server_cgi_path);
+        gtk_widget_set_sensitive(GTK_WIDGET(priv->stop_search_button),FALSE);
+        return FALSE;
+    }
+
+    // Parse server answer : Check returned code in the first line
+    if (Cddb_Read_Http_Header(&file,&cddb_out) <= 0 || !cddb_out) // Order is important!
+    {
+        msg = g_strdup_printf (_("The server returned a bad response ‘%s’"),
+                               cddb_out);
+        gtk_statusbar_push(GTK_STATUSBAR(priv->status_bar),priv->status_bar_context,msg);
+        Log_Print(LOG_ERROR,"%s",msg);
+        g_free(msg);
+        g_free(cddb_out);
+        g_free(cddb_server_name);
+        g_free(cddb_server_cgi_path);
+        g_free (proxy_hostname);
+        gtk_widget_set_sensitive(GTK_WIDGET(priv->stop_search_button),FALSE);
+        if (file)
+            fclose(file);
+        return FALSE;
+    }
+    g_free(cddb_out);
+
+    // Read other lines, and get list of matching albums
+    // Composition of a line :
+    //  - freedb.org
+    // <a href="http://www.freedb.org/freedb_search_fmt.php?cat=rock&id=8c0f0a0b">Bob Dylan / MTV Unplugged</a><br>
+    cat_str      = g_strdup("http://www.freedb.org/freedb_search_fmt.php?cat=");
+    id_str       = g_strdup("&id=");
+    art_alb_str  = g_strdup("\">");
+    end_str      = g_strdup("</a>"); //"</a><br>");
+    html_end_str = g_strdup("</body>"); // To avoid the cddb lookups to hang
+    while (!priv->stop_searching && Cddb_Read_Line (&file, &cddb_out) > 0)
+    {
+        cddb_out_tmp = cddb_out;
+        //g_print("%s\n",cddb_out); // To print received data
+
+        // If the web search is disabled! (ex : http://www.freedb.org/modules.php?name=News&file=article&sid=246)
+        // The following string is displayed in the search page
+        if (cddb_out != NULL && strstr(cddb_out_tmp,"Sorry, The web-based search is currently down.") != NULL)
+        {
+            web_search_disabled = TRUE;
+            break;
+        }
+
+        // We may have severals album in the same line (other version of the same album?)
+        // Note : we test that the 'end' delimiter exists to avoid crashes
+        while ( cddb_out != NULL && (ptr_cat=strstr(cddb_out_tmp,cat_str)) != NULL && strstr(cddb_out_tmp,end_str) != NULL )
+        {
+            gchar *ptr_font, *ptr_font1;
+            gchar *ptr_id, *ptr_art_alb, *ptr_end;
+            gchar *copy;
+            CddbAlbum *cddbalbum;
+
+            cddbalbum = g_malloc0(sizeof(CddbAlbum));
+
+
+            // Parameters of the server used
+            cddbalbum->server_name     = g_strdup(cddb_server_name);
+            cddbalbum->server_port     = cddb_server_port;
+            cddbalbum->server_cgi_path = g_strdup(cddb_server_cgi_path);
+            cddbalbum->bitmap          = Cddb_Get_Pixbuf_From_Server_Name(cddbalbum->server_name);
+
+            // Get album category
+            cddb_out_tmp = ptr_cat + strlen(cat_str);
+            strncpy(buffer,cddb_out_tmp,MAX_STRING_LEN);
+            if ( (ptr_id=strstr(buffer,id_str)) != NULL )
+                *ptr_id = 0;
+            cddbalbum->category = Try_To_Validate_Utf8_String(buffer);
+
+
+            // Get album ID
+            //cddb_out_tmp = strstr(cddb_out_tmp,id_str) + strlen(id_str);
+            cddb_out_tmp = ptr_cat + strlen(cat_str) + 2;
+            strncpy(buffer,cddb_out_tmp,MAX_STRING_LEN);
+            if ( (ptr_art_alb=strstr(buffer,art_alb_str)) != NULL )
+                *ptr_art_alb = 0;
+            cddbalbum->id = Try_To_Validate_Utf8_String(buffer);
+
+
+            // Get album and artist names.
+            // Note : some names can be like this "<font size=-1>2</font>" (for other version of the same album)
+            cddb_out_tmp = strstr(cddb_out_tmp,art_alb_str) + strlen(art_alb_str);
+            strncpy(buffer,cddb_out_tmp,MAX_STRING_LEN);
+            if ( (ptr_end=strstr(buffer,end_str)) != NULL )
+                *ptr_end = 0;
+            if ( (ptr_font=strstr(buffer,"</font>")) != NULL )
+            {
+                copy = NULL;
+                *ptr_font = 0;
+                if ( (ptr_font1=strstr(buffer,">")) != NULL )
+                {
+                    copy = g_strdup_printf("%s -> %s",ptr_font1+1,art_alb_tmp);
+                    cddbalbum->other_version = TRUE;
+                }else
+                {
+                    copy = g_strdup(buffer);
+                }
+
+            }else
+            {
+                copy = g_strdup(buffer);
+                art_alb_tmp = cddbalbum->artist_album;
+                use_art_alb = TRUE;
+            }
+
+            cddbalbum->artist_album = Try_To_Validate_Utf8_String(copy);
+            g_free(copy);
+
+            if (use_art_alb)
+            {
+                art_alb_tmp = cddbalbum->artist_album;
+                use_art_alb = FALSE;
+            }
+
+
+            // New position the search the next string
+            cddb_out_tmp = strstr(cddb_out_tmp,end_str) + strlen(end_str);
+
+            priv->album_list = g_list_append(priv->album_list,cddbalbum);
+        }
+
+        // To avoid the cddb lookups to hang (Patch from Paul Giordano)
+        /* It appears that on some systems that cddb lookups continue to attempt
+         * to get data from the socket even though the other system has completed
+         * sending. Here we see if the actual end of data is in the last block read.
+         * In the case of the html scan, the </body> tag is used because there's
+         * no crlf followint the </html> tag.
+         */
+        if (strstr(cddb_out_tmp,html_end_str)!=NULL)
+        {
+            g_free(cddb_out);
+            break;
+        }
+        g_free(cddb_out);
+    }
+    g_free(cat_str); g_free(id_str); g_free(art_alb_str); g_free(end_str); g_free(html_end_str);
+    g_free(cddb_server_name);
+    g_free(cddb_server_cgi_path);
+    g_free (proxy_hostname);
+
+    // Close file opened for reading lines
+    if (file)
+    {
+        fclose(file);
+        file = NULL;
+    }
+
+    gtk_widget_set_sensitive(GTK_WIDGET(priv->stop_search_button),FALSE);
+
+    /* Close connection. */
+    Cddb_Close_Connection (self, socket_id);
+
+    if (web_search_disabled)
+        msg = g_strdup_printf(_("Sorry, the web-based search is currently not available"));
+    else
+        msg = g_strdup_printf(ngettext("Found one matching album","Found %d matching albums",g_list_length(priv->album_list)),g_list_length(priv->album_list));
+    gtk_statusbar_push(GTK_STATUSBAR(priv->status_bar),priv->status_bar_context,msg);
+    g_free(msg);
+
+    /* Load the albums found in the list. */
+    Cddb_Load_Album_List (self, FALSE);
+
+    return TRUE;
+}
+
+/*
+ * Site GNUDB.ORG - Manual Search
+ * Send request (using the HTML search page in freedb.org site) to the CD database
+ * to get the list of albums matching to a string.
+ */
+static gboolean
+Cddb_Search_Album_List_From_String_Gnudb (EtCDDBDialog *self)
+{
+    EtCDDBDialogPrivate *priv;
+    gint   socket_id;
+    gchar *string = NULL;
+    gchar *tmp, *tmp1;
+    gchar *cddb_in;         // For the request to send
+    gchar *cddb_out = NULL; // Answer received
+    gchar *cddb_out_tmp;
+    gchar *msg;
+    gchar *proxy_auth = NULL;
+    gchar *cddb_server_name;
+    gint   cddb_server_port;
+    gchar *cddb_server_cgi_path;
+    gboolean proxy_enabled;
+    gchar *proxy_hostname;
+    guint proxy_port;
+
+    gchar *ptr_cat, *cat_str, *art_alb_str;
+    gchar *end_str;
+    gchar *ptr_sraf, *sraf_str, *sraf_end_str;
+    gchar *html_end_str;
+    gchar  buffer[MAX_STRING_LEN+1];
+    gint   bytes_written;
+    gulong bytes_read_total = 0;
+    FILE  *file;
+    gint   num_albums = 0;
+    gint   total_num_albums = 0;
+
+    gchar *next_page = NULL;
+    gint   next_page_cpt = 0;
+    gboolean next_page_found;
+
+    priv = et_cddb_dialog_get_instance_private (self);
+
+    gtk_statusbar_push(GTK_STATUSBAR(priv->status_bar),priv->status_bar_context,"");
+
+    /* Get words to search... */
+    string = g_strdup (gtk_entry_get_text (GTK_ENTRY (priv->search_string_entry)));
+    if (!string || g_utf8_strlen(string, -1) <= 0)
+        return FALSE;
+
+    /* Format the string of words */
+    g_strstrip (string);
+    /* Remove the duplicated spaces */
+    while ((tmp=strstr(string,"  "))!=NULL) // Search 2 spaces
+    {
+        tmp1 = tmp + 1;
+        while (*tmp1)
+            *(tmp++) = *(tmp1++);
+        *tmp = '\0';
+    }
+
+    /* Convert spaces to '+' */
+    while ( (tmp=strchr(string,' '))!=NULL )
+        *tmp = '+';
+
+    /* Delete previous album list. */
+    cddb_album_model_clear (self);
+    cddb_track_model_clear (self);
+
+    if (priv->album_list)
+    {
+        Cddb_Free_Album_List (self);
+    }
+    gtk_widget_set_sensitive(GTK_WIDGET(priv->stop_search_button),TRUE);
+
+
+    // Do a loop to load all the pages of results
+    do
+    {
+        cddb_server_name = g_settings_get_string (MainSettings,
+                                                  "cddb-manual-search-hostname");
+        cddb_server_port = g_settings_get_uint (MainSettings,
+                                                "cddb-manual-search-port");
+        cddb_server_cgi_path = g_settings_get_string (MainSettings,
+                                                      "cddb-manual-search-path");
+
+        /* Connection to the server */
+        proxy_enabled = g_settings_get_boolean (MainSettings,
+                                                "cddb-proxy-enabled");
+        proxy_hostname = g_settings_get_string (MainSettings,
+                                                "cddb-proxy-hostname");
+        proxy_port = g_settings_get_uint (MainSettings, "cddb-proxy-port");
+        if ((socket_id = Cddb_Open_Connection (self,
+                                               proxy_enabled ? proxy_hostname
+                                                             : cddb_server_name,
+                                               proxy_enabled ? proxy_port
+                                                             : cddb_server_port)) <= 0)
+        {
+            g_free(string);
+            g_free(cddb_server_name);
+            g_free(cddb_server_cgi_path);
+            g_free (proxy_hostname);
+            gtk_widget_set_sensitive(GTK_WIDGET(priv->stop_search_button),FALSE);
+            return FALSE;
+        }
+
+
+        /* Build request */
+        cddb_in = g_strdup_printf("GET %s%s/search/"
+                                  "%s"
+                                  "?page=%d"
+                                  " HTTP/1.1\r\n"
+                                  "Host: %s:%d\r\n"
+                                  "User-Agent: %s %s\r\n"
+                                  "%s"
+                                  "Connection: close\r\n"
+                                  "\r\n",
+                                  proxy_enabled ? "http://" : "",
+                                  proxy_enabled ? cddb_server_name : "",
+                                  string,
+                                  next_page_cpt,
+                                  cddb_server_name,cddb_server_port,
+                                  PACKAGE_NAME, PACKAGE_VERSION,
+                                  (proxy_auth=Cddb_Format_Proxy_Authentification())
+                                  );
+        next_page_found = FALSE;
+        g_free(proxy_auth);
+        //g_print("Request Cddb_Search_Album_List_From_String_Gnudb : '%s'\n", cddb_in);
+
+        // Send the request
+        gtk_statusbar_push(GTK_STATUSBAR(priv->status_bar),priv->status_bar_context,_("Sending request…"));
+        while (gtk_events_pending()) gtk_main_iteration();
+        if ( (bytes_written=send(socket_id,cddb_in,strlen(cddb_in)+1,0)) < 0)
+        {
+            Log_Print (LOG_ERROR, _("Cannot send the request ‘%s’"),
+                       g_strerror (errno));
+            Cddb_Close_Connection (self, socket_id);
+            g_free (cddb_in);
+            g_free (string);
+            g_free (cddb_server_name);
+            g_free (cddb_server_cgi_path);
+            g_free (proxy_hostname);
+            gtk_widget_set_sensitive (GTK_WIDGET (priv->stop_search_button),
+                                      FALSE);
+            return FALSE;
+        }
+        g_free(cddb_in);
+
+
+        /*
+         * Read the answer
+         */
+        if (total_num_albums != 0)
+            msg = g_strdup_printf(_("Receiving data of page %d (album %d/%d)…"),next_page_cpt,num_albums,total_num_albums);
+        else
+            msg = g_strdup_printf(_("Receiving data of page %d…"),next_page_cpt);
+
+        gtk_statusbar_push(GTK_STATUSBAR(priv->status_bar),priv->status_bar_context,msg);
+        g_free(msg);
+        while (gtk_events_pending())
+            gtk_main_iteration();
+
+        /* Write result in a file. */
+        if (Cddb_Write_Result_To_File (self, socket_id, &bytes_read_total) < 0)
+        {
+            msg = g_strdup(_("The server returned a bad response"));
+            gtk_statusbar_push(GTK_STATUSBAR(priv->status_bar),priv->status_bar_context,msg);
+            Log_Print(LOG_ERROR,"%s",msg);
+            g_free(msg);
+            g_free(string);
+            g_free(cddb_server_name);
+            g_free(cddb_server_cgi_path);
+            g_free (proxy_hostname);
+            gtk_widget_set_sensitive(GTK_WIDGET(priv->stop_search_button),FALSE);
+            return FALSE;
+        }
+
+        // Parse server answer : Check returned code in the first line
+        file = NULL;
+        if (Cddb_Read_Http_Header(&file,&cddb_out) <= 0 || !cddb_out) // Order is important!
+        {
+            msg = g_strdup_printf (_("The server returned a bad response ‘%s’"),
+                                   cddb_out);
+            gtk_statusbar_push(GTK_STATUSBAR(priv->status_bar),priv->status_bar_context,msg);
+            Log_Print(LOG_ERROR,"%s",msg);
+            g_free(msg);
+            g_free(cddb_out);
+            g_free(string);
+            g_free(cddb_server_name);
+            g_free(cddb_server_cgi_path);
+            g_free (proxy_hostname);
+            gtk_widget_set_sensitive(GTK_WIDGET(priv->stop_search_button),FALSE);
+            if (file)
+                fclose(file);
+            return FALSE;
+        }
+        g_free(cddb_out);
+
+        // The next page if exists will contains this url :
+        g_free(next_page);
+        next_page = g_strdup_printf("?page=%d",++next_page_cpt);
+
+        // Read other lines, and get list of matching albums
+        // Composition of a line :
+        //  - gnudb.org
+        // <a href="http://www.gnudb.org/cd/ro21123813"><b>Indochine / Le Birthday Album</b></a><br>
+        cat_str      = g_strdup("http://www.gnudb.org/cd/");
+        art_alb_str  = g_strdup("\"><b>");
+        end_str      = g_strdup("</b></a>"); //"</a><br>");
+        html_end_str = g_strdup("</body>"); // To avoid the cddb lookups to hang
+        // Composition of a line displaying the number of albums
+        // <h2>Search Results, 3486 albums found:</h2>
+        sraf_str     = g_strdup("<h2>Search Results, ");
+        sraf_end_str = g_strdup(" albums found:</h2>");
+
+        while (!priv->stop_searching && Cddb_Read_Line (&file, &cddb_out) > 0)
+        {
+            cddb_out_tmp = cddb_out;
+            //g_print("%s\n",cddb_out); // To print received data
+
+            // Line that displays the number of total albums return by the search
+            if ( cddb_out != NULL
+            && total_num_albums == 0 // Do it only the first time
+            && (ptr_sraf=strstr(cddb_out_tmp,sraf_end_str)) != NULL
+            && strstr(cddb_out_tmp,sraf_str) != NULL )
+            {
+                // Get total number of albums
+                ptr_sraf = 0;
+                total_num_albums = atoi(cddb_out_tmp + strlen(sraf_str));
+            }
+
+            // For GNUDB.ORG : one album per line
+            if ( cddb_out != NULL
+            && (ptr_cat=strstr(cddb_out_tmp,cat_str)) != NULL
+            && strstr(cddb_out_tmp,end_str) != NULL )
+            {
+                gchar *ptr_art_alb, *ptr_end;
+                gchar *valid;
+                CddbAlbum *cddbalbum;
+
+                cddbalbum = g_malloc0(sizeof(CddbAlbum));
+
+                // Parameters of the server used
+                cddbalbum->server_name     = g_strdup(cddb_server_name);
+                cddbalbum->server_port     = cddb_server_port;
+                cddbalbum->server_cgi_path = g_strdup(cddb_server_cgi_path);
+                cddbalbum->bitmap          = Cddb_Get_Pixbuf_From_Server_Name(cddbalbum->server_name);
+
+                num_albums++;
+
+                // Get album category
+                cddb_out_tmp = ptr_cat + strlen(cat_str);
+                strncpy(buffer,cddb_out_tmp,MAX_STRING_LEN);
+                *(buffer+2) = 0;
+
+                // Check only the 2 first characters to set the right category
+                if ( strncmp(buffer,"blues",2)==0 )
+                    valid = g_strdup("blues");
+                else if ( strncmp(buffer,"classical",2)==0 )
+                    valid = g_strdup("classical");
+                else if ( strncmp(buffer,"country",2)==0 )
+                    valid = g_strdup("country");
+                else if ( strncmp(buffer,"data",2)==0 )
+                    valid = g_strdup("data");
+                else if ( strncmp(buffer,"folk",2)==0 )
+                    valid = g_strdup("folk");
+                else if ( strncmp(buffer,"jazz",2)==0 )
+                    valid = g_strdup("jazz");
+                else if ( strncmp(buffer,"misc",2)==0 )
+                    valid = g_strdup("misc");
+                else if ( strncmp(buffer,"newage",2)==0 )
+                    valid = g_strdup("newage");
+                else if ( strncmp(buffer,"reggae",2)==0 )
+                    valid = g_strdup("reggae");
+                else if ( strncmp(buffer,"rock",2)==0 )
+                    valid = g_strdup("rock");
+                else //if ( strncmp(buffer,"soundtrack",2)==0 )
+                    valid = g_strdup("soundtrack");
+
+                cddbalbum->category = valid; //Not useful -> Try_To_Validate_Utf8_String(valid);
+
+
+                // Get album ID
+                cddb_out_tmp = ptr_cat + strlen(cat_str) + 2;
+                strncpy(buffer,cddb_out_tmp,MAX_STRING_LEN);
+                if ( (ptr_art_alb=strstr(buffer,art_alb_str)) != NULL )
+                    *ptr_art_alb = 0;
+                cddbalbum->id = Try_To_Validate_Utf8_String(buffer);
+
+
+                // Get album and artist names.
+                cddb_out_tmp = strstr(cddb_out_tmp,art_alb_str) + strlen(art_alb_str);
+                strncpy(buffer,cddb_out_tmp,MAX_STRING_LEN);
+                if ( (ptr_end=strstr(buffer,end_str)) != NULL )
+                    *ptr_end = 0;
+                cddbalbum->artist_album = Try_To_Validate_Utf8_String(buffer);
+
+                priv->album_list = g_list_append(priv->album_list,cddbalbum);
+            }
+
+            // To avoid the cddb lookups to hang (Patch from Paul Giordano)
+            /* It appears that on some systems that cddb lookups continue to attempt
+             * to get data from the socket even though the other system has completed
+             * sending. Here we see if the actual end of data is in the last block read.
+             * In the case of the html scan, the </body> tag is used because there's
+             * no crlf followint the </html> tag.
+             */
+            /***if (strstr(cddb_out_tmp,html_end_str)!=NULL)
+                break;***/
+
+
+            // Check if the link to the next results exists to loop again with the next link
+            if (cddb_out != NULL && next_page != NULL
+            && (strstr(cddb_out_tmp,next_page) != NULL || next_page_cpt < 2) ) // BUG : "next_page_cpt < 2" to fix a bug in gnudb : the page 0 doesn't contain link to the page=1, so we force it...
+            {
+                next_page_found = TRUE;
+
+                if ( !(next_page_cpt < 2) ) // Don't display message in this case as it will be displayed each line of page 0 and 1
+                {
+                    msg = g_strdup_printf(_("More results to load…"));
+                    gtk_statusbar_push(GTK_STATUSBAR(priv->status_bar),priv->status_bar_context,msg);
+                    g_free(msg);
+
+                    while (gtk_events_pending())
+                        gtk_main_iteration();
+                }
+            }
+
+            g_free(cddb_out);
+        }
+        g_free(cat_str); g_free(art_alb_str); g_free(end_str); g_free(html_end_str);
+        g_free(sraf_str);g_free(sraf_end_str);
+        g_free(cddb_server_name);
+        g_free(cddb_server_cgi_path);
+        g_free (proxy_hostname);
+
+        // Close file opened for reading lines
+        if (file)
+        {
+            fclose(file);
+            file = NULL;
+        }
+
+        /* Close connection. */
+        Cddb_Close_Connection (self, socket_id);
+
+    } while (next_page_found);
+    g_free(string);
+
+
+    gtk_widget_set_sensitive(GTK_WIDGET(priv->stop_search_button),FALSE);
+
+    msg = g_strdup_printf(ngettext("Found one matching album","Found %d matching albums",num_albums),num_albums);
+    gtk_statusbar_push(GTK_STATUSBAR(priv->status_bar),priv->status_bar_context,msg);
+    g_free(msg);
+
+    /* Load the albums found in the list. */
+    Cddb_Load_Album_List (self, FALSE);
+
+    return TRUE;
+}
+
+/*
+ * Select the function to use according the server adress for the manual search
+ *      - freedb.freedb.org
+ *      - gnudb.gnudb.org
+ */
+static gboolean
+Cddb_Search_Album_List_From_String (EtCDDBDialog *self)
+{
+    gchar *hostname = g_settings_get_string (MainSettings,
+                                             "cddb-manual-search-hostname");
+
+    if (strstr (hostname, "gnudb") != NULL)
+    {
+        /* Use gnudb. */
+        g_free (hostname);
+        return Cddb_Search_Album_List_From_String_Gnudb (self);
+    }
+    else
+    {
+        /* Use freedb. */
+        g_free (hostname);
+        return Cddb_Search_Album_List_From_String_Freedb (self);
+    }
+}
+
+/*
+ * Set CDDB data (from tracks list) into tags of the main file list
+ */
+static gboolean
+Cddb_Set_Track_Infos_To_File_List (EtCDDBDialog *self)
+{
+    EtCDDBDialogPrivate *priv;
+    guint row;
+    guint list_length;
+    guint rows_to_loop = 0;
+    guint selectedcount;
+    guint file_selectedcount;
+    guint counter = 0;
+    GList *file_iterlist = NULL;
+    GList *file_selectedrows;
+    GList *selectedrows = NULL;
+    gchar buffer[256];
+    gboolean CddbTrackList_Line_Selected;
+    CddbTrackAlbum *cddbtrackalbum = NULL;
+    GtkTreeSelection *selection = NULL;
+    GtkTreeSelection *file_selection = NULL;
+    GtkListStore *fileListModel;
+    GtkTreePath *currentPath = NULL;
+    GtkTreeIter  currentIter;
+    GtkTreeIter *fileIter;
+    gpointer iterptr;
+
+    g_return_val_if_fail (ETCore->ETFileDisplayedList != NULL, FALSE);
+
+    priv = et_cddb_dialog_get_instance_private (self);
+
+    // Save the current displayed data
+    ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
+
+    /* FIXME: Hack! */
+    file_selection = et_application_window_browser_get_selection (ET_APPLICATION_WINDOW (MainWindow));
+    fileListModel = GTK_LIST_STORE (gtk_tree_view_get_model (gtk_tree_selection_get_tree_view (file_selection)));
+    list_length = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(priv->track_list_model), NULL);
+
+    // Take the selected files in the cddb track list, else the full list
+    // Note : Just used to calculate "cddb_track_list_length" because
+    // "GPOINTER_TO_INT(cddb_track_list->data)" doesn't return the number of the
+    // line when "cddb_track_list = g_list_first(GTK_CLIST(CddbTrackCList)->row_list)"
+    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->track_list_view));
+    selectedcount = gtk_tree_selection_count_selected_rows(selection);
+
+    /* Check if at least one line was selected. No line selected is equal to all lines selected. */
+    CddbTrackList_Line_Selected = FALSE;
+
+    if (selectedcount > 0)
+    {
+        /* Loop through selected rows only */
+        CddbTrackList_Line_Selected = TRUE;
+        rows_to_loop = selectedcount;
+        selectedrows = gtk_tree_selection_get_selected_rows(selection, NULL);
+    } else
+    {
+        /* Loop through all rows */
+        CddbTrackList_Line_Selected = FALSE;
+        rows_to_loop = list_length;
+    }
+
+    file_selectedcount = gtk_tree_selection_count_selected_rows (file_selection);
+
+    if (file_selectedcount > 0)
+    {
+        GList *l;
+
+        /* Rows are selected in the file list, apply tags to them only */
+        file_selectedrows = gtk_tree_selection_get_selected_rows(file_selection, NULL);
+
+        for (l = file_selectedrows; l != NULL; l = g_list_next (l))
+        {
+            counter++;
+            iterptr = g_malloc0(sizeof(GtkTreeIter));
+            if (gtk_tree_model_get_iter (GTK_TREE_MODEL (fileListModel),
+                                         (GtkTreeIter *)iterptr,
+                                         (GtkTreePath *)l->data))
+            {
+                file_iterlist = g_list_prepend (file_iterlist, iterptr);
+            }
+
+            if (counter == rows_to_loop) break;
+        }
+
+        /* Free the useless bit */
+        g_list_free_full (file_selectedrows,
+                          (GDestroyNotify)gtk_tree_path_free);
+
+    } else /* No rows selected, use the first x items in the list */
+    {
+        gtk_tree_model_get_iter_first(GTK_TREE_MODEL(fileListModel), &currentIter);
+
+        do
+        {
+            counter++;
+            iterptr = g_memdup(&currentIter, sizeof(GtkTreeIter));
+            file_iterlist = g_list_prepend (file_iterlist, iterptr);
+        } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(fileListModel), &currentIter));
+
+        file_selectedcount = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(fileListModel), NULL);
+    }
+
+    if (file_selectedcount != rows_to_loop)
+    {
+        GtkWidget *msgdialog;
+        gint response;
+
+        msgdialog = gtk_message_dialog_new(GTK_WINDOW(self),
+                                           GTK_DIALOG_MODAL  | GTK_DIALOG_DESTROY_WITH_PARENT,
+                                           GTK_MESSAGE_QUESTION,
+                                           GTK_BUTTONS_NONE,
+                                           "%s",
+                                           _("The number of CDDB results does not match the number of selected files"));
+        gtk_dialog_add_buttons (GTK_DIALOG (msgdialog), _("_Cancel"),
+                                GTK_RESPONSE_CANCEL, _("_Apply"),
+                                GTK_RESPONSE_APPLY, NULL);
+        gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(msgdialog),"%s","Do you want to continue?");
+        gtk_window_set_title (GTK_WINDOW (msgdialog),
+                              _("Write Tag from CDDB"));
+        response = gtk_dialog_run(GTK_DIALOG(msgdialog));
+        gtk_widget_destroy(msgdialog);
+
+        if (response != GTK_RESPONSE_APPLY)
+        {
+            g_list_free_full (file_iterlist, (GDestroyNotify)g_free);
+            //gdk_window_raise(CddbWindow->window);
+            return FALSE;
+        }
+    }
+
+    file_iterlist = g_list_reverse (file_iterlist);
+    //ET_Debug_Print_File_List (NULL, __FILE__, __LINE__, __FUNCTION__);
+
+    for (row=0; row < rows_to_loop; row++)
+    {
+        if (CddbTrackList_Line_Selected == FALSE)
+        {
+            if(row == 0)
+                currentPath = gtk_tree_path_new_first();
+            else
+                gtk_tree_path_next(currentPath);
+        } else /* (e.g.: if CddbTrackList_Line_Selected == TRUE) */
+        {
+            if(row == 0)
+            {
+                selectedrows = g_list_first(selectedrows);
+                currentPath = (GtkTreePath *)selectedrows->data;
+            } else
+            {
+                selectedrows = g_list_next(selectedrows);
+                currentPath = (GtkTreePath *)selectedrows->data;
+            }
+        }
+
+        if (gtk_tree_model_get_iter (GTK_TREE_MODEL (priv->track_list_model),
+                                     &currentIter, currentPath))
+        {
+            gtk_tree_model_get (GTK_TREE_MODEL (priv->track_list_model),
+                                &currentIter, CDDB_TRACK_LIST_DATA,
+                                &cddbtrackalbum, -1);
+        }
+        else
+        {
+            g_warning ("Iter not found matching path in CDDB track list model");
+        }
+
+        /* Set values in the ETFile. */
+        if (g_settings_get_boolean (MainSettings, "cddb-dlm-enabled"))
+        {
+            // RQ : this part is ~ equal to code for '!CDDB_USE_DLM', but uses '*etfile' instead of 'etfile'
+            ET_File **etfile = NULL;
+            File_Name *FileName = NULL;
+            File_Tag *FileTag = NULL;
+            guint set_fields;
+
+            gtk_tree_model_get(GTK_TREE_MODEL(priv->track_list_model), &currentIter,
+                               CDDB_TRACK_LIST_ETFILE, &etfile, -1);
+
+            /* Tag fields. */
+            set_fields = g_settings_get_flags (MainSettings, "cddb-set-fields");
+
+            if (set_fields != 0)
+            {
+                // Allocation of a new FileTag
+                FileTag = ET_File_Tag_Item_New();
+                ET_Copy_File_Tag_Item(*etfile,FileTag);
+
+                if (set_fields & ET_CDDB_SET_FIELD_TITLE)
+                {
+                    ET_Set_Field_File_Tag_Item (&FileTag->title,
+                                                cddbtrackalbum->track_name);
+                }
+
+                if ((set_fields & ET_CDDB_SET_FIELD_ARTIST)
+                    && cddbtrackalbum->cddbalbum->artist)
+                {
+                    ET_Set_Field_File_Tag_Item (&FileTag->artist,
+                                                cddbtrackalbum->cddbalbum->artist);
+                }
+
+                if ((set_fields & ET_CDDB_SET_FIELD_ALBUM)
+                    && cddbtrackalbum->cddbalbum->album)
+                {
+                    ET_Set_Field_File_Tag_Item (&FileTag->album,
+                                                cddbtrackalbum->cddbalbum->album);
+                }
+
+                if ((set_fields & ET_CDDB_SET_FIELD_YEAR)
+                    && cddbtrackalbum->cddbalbum->year)
+                {
+                    ET_Set_Field_File_Tag_Item (&FileTag->year,
+                                                cddbtrackalbum->cddbalbum->year);
+                }
+
+                if (set_fields & ET_CDDB_SET_FIELD_TRACK)
+                {
+                    snprintf (buffer, sizeof (buffer), "%s",
+                              et_track_number_to_string (cddbtrackalbum->track_number));
+
+                    ET_Set_Field_File_Tag_Item (&FileTag->track, buffer);
+                }
+
+                if (set_fields & ET_CDDB_SET_FIELD_TRACK_TOTAL)
+                {
+                    snprintf (buffer, sizeof (buffer), "%s",
+                              et_track_number_to_string (list_length));
+
+                    ET_Set_Field_File_Tag_Item (&FileTag->track_total, buffer);
+                }
+
+                if ((set_fields & ET_CDDB_SET_FIELD_GENRE)
+                    && (cddbtrackalbum->cddbalbum->genre
+                        || cddbtrackalbum->cddbalbum->category))
+                {
+                    if (cddbtrackalbum->cddbalbum->genre
+                        && g_utf8_strlen (cddbtrackalbum->cddbalbum->genre, -1) > 0)
+                    {
+                        ET_Set_Field_File_Tag_Item (&FileTag->genre,
+                                                    Cddb_Get_Id3_Genre_From_Cddb_Genre (cddbtrackalbum->cddbalbum->genre));
+                    }
+                    else
+                    {
+                        ET_Set_Field_File_Tag_Item (&FileTag->genre,
+                                                    Cddb_Get_Id3_Genre_From_Cddb_Genre (cddbtrackalbum->cddbalbum->category));
+                    }
+                }
+            }
+
+            /* Filename field. */
+            if (set_fields & ET_CDDB_SET_FIELD_FILENAME)
+            {
+                gchar *filename_generated_utf8;
+                gchar *filename_new_utf8;
+
+                // Allocation of a new FileName
+                FileName = ET_File_Name_Item_New();
+
+                // Build the filename with the path
+                snprintf (buffer, sizeof (buffer), "%s",
+                          et_track_number_to_string (cddbtrackalbum->track_number));
+
+                filename_generated_utf8 = g_strconcat(buffer," - ",cddbtrackalbum->track_name,NULL);
+                ET_File_Name_Convert_Character(filename_generated_utf8); // Replace invalid characters
+                filename_new_utf8 = ET_File_Name_Generate(*etfile,filename_generated_utf8);
+
+                ET_Set_Filename_File_Name_Item(FileName,filename_new_utf8,NULL);
+
+                g_free(filename_generated_utf8);
+                g_free(filename_new_utf8);
+            }
+
+            ET_Manage_Changes_Of_File_Data(*etfile,FileName,FileTag);
+
+            /* Then run current scanner if requested. */
+            if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->run_scanner_toggle)))
+            {
+                EtScanDialog *dialog;
+
+                dialog = ET_SCAN_DIALOG (et_application_window_get_scan_dialog (ET_APPLICATION_WINDOW (MainWindow)));
+
+                if (dialog)
+                {
+                    Scan_Select_Mode_And_Run_Scanner (dialog, *etfile);
+                }
+            }
+        }
+        else if (cddbtrackalbum && file_iterlist && file_iterlist->data)
+        {
+            ET_File   *etfile;
+            File_Name *FileName = NULL;
+            File_Tag  *FileTag  = NULL;
+            guint set_fields;
+
+            fileIter = (GtkTreeIter*) file_iterlist->data;
+            etfile = et_application_window_browser_get_et_file_from_iter (ET_APPLICATION_WINDOW (MainWindow),
+                                                                          fileIter);
+
+            /* Tag fields. */
+            set_fields = g_settings_get_flags (MainSettings, "cddb-set-fields");
+
+            if (set_fields != 0)
+            {
+                /* Allocation of a new FileTag. */
+                FileTag = ET_File_Tag_Item_New ();
+                ET_Copy_File_Tag_Item (etfile, FileTag);
+
+                if (set_fields & ET_CDDB_SET_FIELD_TITLE)
+                {
+                    ET_Set_Field_File_Tag_Item (&FileTag->title,
+                                                cddbtrackalbum->track_name);
+                }
+
+                if ((set_fields & ET_CDDB_SET_FIELD_ARTIST)
+                    && cddbtrackalbum->cddbalbum->artist)
+                {
+                    ET_Set_Field_File_Tag_Item (&FileTag->artist,
+                                                cddbtrackalbum->cddbalbum->artist);
+                }
+
+                if ((set_fields & ET_CDDB_SET_FIELD_ALBUM)
+                    && cddbtrackalbum->cddbalbum->album)
+                {
+                    ET_Set_Field_File_Tag_Item (&FileTag->album,
+                                                cddbtrackalbum->cddbalbum->album);
+                }
+
+                if ((set_fields & ET_CDDB_SET_FIELD_YEAR)
+                    && cddbtrackalbum->cddbalbum->year)
+                {
+                    ET_Set_Field_File_Tag_Item (&FileTag->year,
+                                                cddbtrackalbum->cddbalbum->year);
+                }
+
+                if (set_fields & ET_CDDB_SET_FIELD_TRACK)
+                {
+                    snprintf (buffer, sizeof (buffer), "%s",
+                              et_track_number_to_string (cddbtrackalbum->track_number));
+
+                    ET_Set_Field_File_Tag_Item (&FileTag->track, buffer);
+                }
+
+                if (set_fields & ET_CDDB_SET_FIELD_TRACK_TOTAL)
+                {
+                    snprintf (buffer, sizeof (buffer), "%s",
+                              et_track_number_to_string (list_length));
+
+                    ET_Set_Field_File_Tag_Item (&FileTag->track_total, buffer);
+                }
+
+                if ((set_fields & ET_CDDB_SET_FIELD_GENRE)
+                    && (cddbtrackalbum->cddbalbum->genre
+                        || cddbtrackalbum->cddbalbum->category) )
+                {
+                    if (cddbtrackalbum->cddbalbum->genre
+                        && g_utf8_strlen (cddbtrackalbum->cddbalbum->genre, -1) > 0)
+                    {
+                        ET_Set_Field_File_Tag_Item (&FileTag->genre,
+                                                    Cddb_Get_Id3_Genre_From_Cddb_Genre (cddbtrackalbum->cddbalbum->genre));
+                    }
+                    else
+                    {
+                        ET_Set_Field_File_Tag_Item (&FileTag->genre,
+                                                    Cddb_Get_Id3_Genre_From_Cddb_Genre (cddbtrackalbum->cddbalbum->category));
+                    }
+                }
+            }
+
+            /*
+             * Filename field
+             */
+            if (set_fields & ET_CDDB_SET_FIELD_FILENAME)
+            {
+                gchar *filename_generated_utf8;
+                gchar *filename_new_utf8;
+
+                // Allocation of a new FileName
+                FileName = ET_File_Name_Item_New();
+
+                // Build the filename with the path
+                snprintf (buffer, sizeof (buffer), "%s",
+                          et_track_number_to_string (cddbtrackalbum->track_number));
+
+                filename_generated_utf8 = g_strconcat(buffer," - ",cddbtrackalbum->track_name,NULL);
+                ET_File_Name_Convert_Character(filename_generated_utf8); // Replace invalid characters
+                filename_new_utf8 = ET_File_Name_Generate(etfile,filename_generated_utf8);
+
+                ET_Set_Filename_File_Name_Item(FileName,filename_new_utf8,NULL);
+
+                g_free(filename_generated_utf8);
+                g_free(filename_new_utf8);
+            }
+
+            ET_Manage_Changes_Of_File_Data(etfile,FileName,FileTag);
+
+            /* Then run current scanner if requested. */
+            if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->run_scanner_toggle)))
+            {
+                EtScanDialog *dialog;
+
+                dialog = ET_SCAN_DIALOG (et_application_window_get_scan_dialog (ET_APPLICATION_WINDOW (MainWindow)));
+
+                if (dialog)
+                {
+                    Scan_Select_Mode_And_Run_Scanner (dialog, etfile);
+                }
+            }
+        }
+
+        if(!file_iterlist->next) break;
+        file_iterlist = file_iterlist->next;
+    }
+
+    g_list_free_full (file_iterlist, (GDestroyNotify)g_free);
+
+    et_application_window_browser_refresh_list (ET_APPLICATION_WINDOW (MainWindow));
+    ET_Display_File_Data_To_UI(ETCore->ETFileDisplayed);
+
+    return TRUE;
+}
+
+static void
+stop_search (EtCDDBDialog *self)
+{
+    EtCDDBDialogPrivate *priv;
+
+    priv = et_cddb_dialog_get_instance_private (self);
+
+    priv->stop_searching = TRUE;
+}
+
+/*
+ * Unselect all rows in the track list
+ */
+static void
+track_list_unselect_all (EtCDDBDialog *self)
+{
+    EtCDDBDialogPrivate *priv;
+    GtkTreeSelection *selection;
+
+    priv = et_cddb_dialog_get_instance_private (self);
+
+    g_return_if_fail (priv->track_list_view != NULL);
+
+    selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->track_list_view));
+    if (selection)
+    {
+        gtk_tree_selection_unselect_all (selection);
+    }
+}
+
+/*
+ * Select all rows in the track list
+ */
+static void
+track_list_select_all (EtCDDBDialog *self)
+{
+    EtCDDBDialogPrivate *priv;
+    GtkTreeSelection *selection;
+
+    priv = et_cddb_dialog_get_instance_private (self);
+
+    selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->track_list_view));
+
+    if (selection)
+    {
+        gtk_tree_selection_select_all (selection);
+    }
+}
+
+static gboolean
+on_track_list_button_press_event (EtCDDBDialog *self,
+                                  GdkEventButton *event,
+                                  GtkTreeView *track_list_view)
+{
+    if (event->type == GDK_2BUTTON_PRESS
+        && event->button == GDK_BUTTON_PRIMARY)
+    {
+        GdkWindow *bin_window;
+
+        bin_window = gtk_tree_view_get_bin_window (track_list_view);
+
+        if (bin_window != event->window)
+        {
+            /* Ignore the event if it is on the header (which is not the bin
+             * window. */
+            return GDK_EVENT_PROPAGATE;
+        }
+
+        /* Double left mouse click */
+        track_list_select_all (self);
+
+        return GDK_EVENT_STOP;
+    }
+
+    return GDK_EVENT_PROPAGATE;
+}
+
+static void
+et_cddb_dialog_on_response (EtCDDBDialog *self,
+                            gint response_id,
+                            gpointer user_data)
+{
+    EtCDDBDialogPrivate *priv;
+
+    priv = et_cddb_dialog_get_instance_private (self);
+
+    switch (response_id)
+    {
+        case GTK_RESPONSE_CLOSE:
+            priv->stop_searching = TRUE;
+            gtk_widget_hide (GTK_WIDGET (self));
+            break;
+        case GTK_RESPONSE_DELETE_EVENT:
+            break;
+        default:
+            g_assert_not_reached ();
+            break;
+    }
+}
+
+static void
+Cddb_Destroy_Window (EtCDDBDialog *self)
+{
+    et_cddb_dialog_on_response (self, GTK_RESPONSE_CLOSE, NULL);
+}
+
+static void
+create_cddb_dialog (EtCDDBDialog *self)
+{
+    EtCDDBDialogPrivate *priv;
+    GtkWidget *vbox;
+    GtkWidget *grid;
+    GtkWidget *button;
+    GtkWidget *tool_button;
+    GtkWidget *image;
+    GtkTreePath *path;
+    GtkBuilder *builder;
+    GError *error = NULL;
+
+    priv = et_cddb_dialog_get_instance_private (self);
+
+    gtk_window_set_title (GTK_WINDOW (self), _("CDDB Search"));
+
+    g_signal_connect (self, "response",
+                      G_CALLBACK (et_cddb_dialog_on_response), NULL);
+    g_signal_connect (self, "delete-event",
+                      G_CALLBACK (gtk_widget_hide_on_delete), NULL);
+
+    vbox = gtk_dialog_get_content_area (GTK_DIALOG (self));
+    gtk_container_set_border_width (GTK_CONTAINER (self), BOX_SPACING);
+
+     /* Dialog content. */
+    builder = gtk_builder_new ();
+    gtk_builder_add_from_resource (builder,
+                                   "/org/gnome/EasyTAG/cddb_dialog.ui",
+                                   &error);
+
+    if (error != NULL)
+    {
+        g_error ("Unable to get CDDB dialog from resource: %s",
+                 error->message);
+    }
+
+    grid = GTK_WIDGET (gtk_builder_get_object (builder, "cddb_grid"));
+    gtk_box_pack_start (GTK_BOX (vbox), grid, TRUE, TRUE, 0);
+
+    /* Button to generate CddbId and request string from the selected files. */
+    button = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                 "automatic_search_button"));
+    gtk_widget_set_can_default (button, TRUE);
+    gtk_widget_grab_default (button);
+    g_signal_connect_swapped (button, "clicked",
+                              G_CALLBACK (et_cddb_dialog_search_from_selection),
+                              self);
+
+    /* Button to stop the search. */
+    priv->stop_search_button = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                   "stop_button"));
+    g_signal_connect_swapped (priv->stop_search_button, "clicked",
+                              G_CALLBACK (stop_search), self);
+
+    /* Button to quit. */
+    button = GTK_WIDGET (gtk_builder_get_object (builder, "close_button"));
+    gtk_widget_set_can_default (button, TRUE);
+    g_signal_connect_swapped (button, "clicked",
+                              G_CALLBACK (Cddb_Destroy_Window), self);
+
+    priv->search_string_entry = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                    "search_entry"));
+    g_signal_connect_swapped (priv->search_string_entry, "activate",
+                              G_CALLBACK (Cddb_Search_Album_List_From_String),
+                              self);
+
+    /* Set content of the clipboard if available. */
+    gtk_editable_paste_clipboard (GTK_EDITABLE (priv->search_string_entry));
+
+    /* Button to run the search. */
+    priv->search_button = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                              "manual_search_button"));
+    gtk_widget_set_can_default (priv->search_button, TRUE);
+    gtk_widget_grab_default (priv->search_button);
+    g_signal_connect_swapped (priv->search_button, "clicked",
+                              G_CALLBACK (Cddb_Search_Album_List_From_String),
+                              self);
+    g_signal_connect_swapped (GTK_ENTRY (priv->search_string_entry), "changed",
+                              G_CALLBACK (update_search_button_sensitivity),
+                              self);
+
+    /* Search options. */
+    {
+        gsize i;
+        static const struct
+        {
+            const gchar *id;
+        } ids[] =
+        {
+            { "artist_check" },
+            { "album_check" },
+            { "track_check" },
+            { "other_check" }
+        };
+
+        for (i = 0; i < G_N_ELEMENTS (ids); i++)
+        {
+            GtkWidget *widget;
+
+            widget = GTK_WIDGET (gtk_builder_get_object (builder, ids[i].id));
+            g_object_set_data (G_OBJECT (widget), "flags-type",
+                               GSIZE_TO_POINTER (ET_TYPE_CDDB_SEARCH_FIELD));
+            g_settings_bind_with_mapping (MainSettings, "cddb-search-fields",
+                                          widget, "active",
+                                          G_SETTINGS_BIND_DEFAULT,
+                                          et_settings_flags_toggle_get,
+                                          et_settings_flags_toggle_set,
+                                          widget, NULL);
+            g_signal_connect_swapped (widget, "toggled",
+                                      G_CALLBACK (update_search_button_sensitivity),
+                                      self);
+        }
+    }
+
+    {
+        gsize i;
+        static const struct
+        {
+            const gchar *id;
+        } ids[] =
+        {
+            { "blues_check" },
+            { "classical_check" },
+            { "country_check" },
+            { "folk_check" },
+            { "jazz_check" },
+            { "misc_check"  },
+            { "newage_check" },
+            { "reggae_check" },
+            { "rock_check" },
+            { "soundtrack_check" }
+        };
+
+        for (i = 0; i < G_N_ELEMENTS (ids); i++)
+        {
+            GtkWidget *widget;
+
+            widget = GTK_WIDGET (gtk_builder_get_object (builder, ids[i].id));
+            g_object_set_data (G_OBJECT (widget), "flags-type",
+                               GSIZE_TO_POINTER (ET_TYPE_CDDB_SEARCH_CATEGORY));
+            g_settings_bind_with_mapping (MainSettings,
+                                          "cddb-search-categories", widget,
+                                          "active", G_SETTINGS_BIND_DEFAULT,
+                                          et_settings_flags_toggle_get,
+                                          et_settings_flags_toggle_set,
+                                          widget, NULL);
+            g_signal_connect_swapped (G_OBJECT (widget), "toggled",
+                                      G_CALLBACK (update_search_button_sensitivity),
+                                      self);
+        }
+    }
+
+    /* Results command. */
+    image = gtk_image_new_from_resource ("/org/gnome/EasyTAG/images/unselect-all.png");
+    tool_button = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                      "unselect_all_button"));
+    gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (tool_button), image);
+    g_signal_connect_swapped (tool_button, "clicked",
+                              G_CALLBACK (track_list_unselect_all), self);
+
+    image = gtk_image_new_from_resource ("/org/gnome/EasyTAG/images/invert-selection.png");
+    tool_button = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                      "invert_button"));
+    gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (tool_button), image);
+    g_signal_connect_swapped (tool_button, "clicked",
+                              G_CALLBACK (Cddb_Track_List_Invert_Selection),
+                              self);
+
+    tool_button = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                      "select_all_button"));
+    g_signal_connect_swapped (tool_button, "clicked",
+                              G_CALLBACK (track_list_select_all), self);
+
+    /* Result of search. */
+    /* List of albums. */
+    priv->album_list_model = GTK_LIST_STORE (gtk_builder_get_object (builder,
+                                                                     "album_list_model"));
+    priv->album_list_view = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                "album_view"));
+
+    path = gtk_tree_path_new_first ();
+    gtk_tree_view_set_cursor (GTK_TREE_VIEW (priv->album_list_view), path, NULL,
+                              FALSE);
+    gtk_tree_path_free (path);
+    g_signal_connect_swapped (gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->album_list_view)),
+                              "changed", G_CALLBACK (show_album_info), self);
+    g_signal_connect_swapped (gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->album_list_view)),
+                              "changed",
+                              G_CALLBACK (Cddb_Get_Album_Tracks_List_CB),
+                              self);
+
+    /* List of tracks. */
+    priv->track_list_model = GTK_LIST_STORE (gtk_builder_get_object (builder,
+                                                                     "track_list_model"));
+    priv->track_list_view = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                "track_view"));
+    g_signal_connect_swapped (gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->track_list_view)),
+                              "changed",
+                              G_CALLBACK (Cddb_Track_List_Row_Selected), self);
+    g_signal_connect_swapped (priv->track_list_view, "button-press-event",
+                              G_CALLBACK (on_track_list_button_press_event),
+                              self);
+
+    gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (priv->track_list_model),
+                                     SORT_LIST_NUMBER,
+                                     Cddb_Track_List_Sort_Func,
+                                     GINT_TO_POINTER (SORT_LIST_NUMBER), NULL);
+    gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (priv->track_list_model),
+                                     SORT_LIST_NAME, Cddb_Track_List_Sort_Func,
+                                     GINT_TO_POINTER (SORT_LIST_NAME), NULL);
+
+    /* Apply results to fields.  */
+    {
+        gsize i;
+        static const struct
+        {
+            const gchar *id;
+        } ids[] =
+        {
+            { "filename_check" },
+            { "title_check" },
+            { "fill_artist_check" },
+            { "fill_album_check" },
+            { "year_check" },
+            { "fill_track_check" },
+            { "track_total_check" },
+            { "genre_check" }
+        };
+
+        for (i = 0; i < G_N_ELEMENTS (ids); i++)
+        {
+            GtkWidget *widget;
+
+            widget = GTK_WIDGET (gtk_builder_get_object (builder, ids[i].id));
+            g_object_set_data (G_OBJECT (widget), "flags-type",
+                               GSIZE_TO_POINTER (ET_TYPE_CDDB_SET_FIELD));
+            g_settings_bind_with_mapping (MainSettings, "cddb-set-fields",
+                                          widget, "active",
+                                          G_SETTINGS_BIND_DEFAULT,
+                                          et_settings_flags_toggle_get,
+                                          et_settings_flags_toggle_set,
+                                          widget, NULL);
+            g_signal_connect_swapped (G_OBJECT (widget), "toggled",
+                                      G_CALLBACK (update_apply_button_sensitivity),
+                                      self);
+        }
+    }
+
+    /* Check box to run the scanner. */
+    priv->run_scanner_toggle = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                   "scanner_check"));
+    g_settings_bind (MainSettings, "cddb-run-scanner",
+                     priv->run_scanner_toggle, "active",
+                     G_SETTINGS_BIND_DEFAULT);
+
+    /* Check box to use DLM (also used in the preferences window). */
+    priv->use_dlm2_toggle = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                "dlm_check"));
+    g_settings_bind (MainSettings, "cddb-dlm-enabled", priv->use_dlm2_toggle,
+                     "active", G_SETTINGS_BIND_DEFAULT);
+
+    /* Button to apply. */
+    priv->apply_button = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                             "apply_button"));
+    g_signal_connect_swapped (priv->apply_button, "clicked",
+                              G_CALLBACK (Cddb_Set_Track_Infos_To_File_List),
+                              self);
+
+    /* Status bar. */
+    priv->status_bar = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                           "cddb_bar"));
+    priv->status_bar_context = gtk_statusbar_get_context_id (GTK_STATUSBAR (priv->status_bar),
+                                                             "Messages");
+    gtk_statusbar_push (GTK_STATUSBAR (priv->status_bar),
+                        priv->status_bar_context, _("Ready to search"));
+
+    g_signal_emit_by_name (priv->search_string_entry, "changed");
+    priv->stop_searching = FALSE;
+
+    g_object_unref (builder);
+}
+
+/*
+ * Sort the track list
+ */
+static gint
+Cddb_Track_List_Sort_Func (GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b,
+                           gpointer data)
+{
+    gint sortcol = GPOINTER_TO_INT(data);
+    gchar *text1, *text1cp;
+    gchar *text2, *text2cp;
+    gint num1;
+    gint num2;
+    gint ret = 0;
+
+    switch (sortcol)
+    {
+        case SORT_LIST_NUMBER:
+            gtk_tree_model_get(model, a, CDDB_TRACK_LIST_NUMBER, &num1, -1);
+            gtk_tree_model_get(model, b, CDDB_TRACK_LIST_NUMBER, &num2, -1);
+            if (num1 < num2)
+                return -1;
+            else if(num1 > num2)
+                return 1;
+            else
+                return 0;
+            break;
+
+        case SORT_LIST_NAME:
+            gtk_tree_model_get(model, a, CDDB_TRACK_LIST_NAME, &text1, -1);
+            gtk_tree_model_get(model, b, CDDB_TRACK_LIST_NAME, &text2, -1);
+            text1cp = g_utf8_collate_key_for_filename(text1, -1);
+            text2cp = g_utf8_collate_key_for_filename(text2, -1);
+            // Must be the same rules as "ET_Comp_Func_Sort_File_By_Ascending_Filename" to be
+            // able to sort in the same order files in cddb and in the file list.
+            ret = g_settings_get_boolean (MainSettings,
+                                          "sort-case-sensitive") ? strcmp (text1cp, text2cp)
+                                                                 : strcasecmp (text1cp, text2cp);
+
+            g_free(text1);
+            g_free(text2);
+            g_free(text1cp);
+            g_free(text2cp);
+            break;
+    }
+
+    return ret;
+}
+
+/*
+ * Read one line (of the connection) into cddb_out.
+ * return  : -1 on error
+ *            0 if no more line to read (EOF)
+ *            1 if more lines to read
+ *
+ * Server answser is formated like this :
+ *
+ * HTTP/1.1 200 OK\r\n                              }
+ * Server: Apache/1.3.19 (Unix) PHP/4.0.4pl1\r\n    } "Header"
+ * Connection: close\r\n                            }
+ * \r\n
+ * <html>\n                                         }
+ * [...]                                            } "Body"
+ */
+static gint
+Cddb_Read_Line (FILE **file, gchar **cddb_out)
+{
+    gchar  buffer[MAX_STRING_LEN];
+    gchar *result;
+    size_t l;
+
+    if (*file == NULL)
+    {
+        // Open the file for reading the first time
+        gchar *file_path;
+
+        file_path = g_build_filename (g_get_user_cache_dir (), PACKAGE_TARNAME,
+                                      CDDB_RESULT_FILE, NULL);
+
+        if ((*file = fopen (file_path, "r")) == 0)
+        {
+            Log_Print (LOG_ERROR, _("Cannot open file ‘%s’: %s"), file_path,
+                       g_strerror (errno));
+            g_free (file_path);
+            return -1; // Error!
+        }
+        g_free (file_path);
+    }
+
+    result = fgets(buffer,sizeof(buffer),*file);
+    if (result != NULL)
+    {
+	l = strlen(buffer);
+        if (l > 0 && buffer[l-1] == '\n')
+            buffer[l-1] = '\0';
+
+	// Many '\r' chars may be present
+        while ((l = strlen(buffer)) > 0 && buffer[l-1] == '\r')
+            buffer[l-1] = '\0';
+
+        *cddb_out = g_strdup(buffer);
+    }else
+    {
+        // On error, or EOF
+        fclose(*file);
+        *file = NULL;
+
+        //*cddb_out = NULL;
+        *cddb_out = g_strdup(""); // To avoid a crash
+
+        return 0;
+    }
+
+    //g_print("Line read: %s\n",*cddb_out);
+    return 1;
+}
+
+
+/*
+ * Read HTTP header data : from "HTTP/1.1 200 OK" to the blank line
+ */
+static gint
+Cddb_Read_Http_Header (FILE **file, gchar **cddb_out)
+{
+
+    // The 'file' is opened (if no error) in this function
+    if ( Cddb_Read_Line(file,cddb_out) < 0 )
+        return -1; // Error!
+
+    // First line must be : "HTTP/1.1 200 OK"
+    if ( !*cddb_out || strncmp("HTTP",*cddb_out,4)!=0 || strstr(*cddb_out,"200 OK")==NULL )
+        return -1;
+
+    /* Read until end of the HTTP header up to the next blank line. */
+    do
+    {
+        g_free (*cddb_out);
+    }
+    while (Cddb_Read_Line (file, cddb_out) > 0
+           && *cddb_out && strlen (*cddb_out) > 0);
+
+    //g_print("Http Header : %s\n",*cddb_out);
+    return 1;
+}
+
+/*
+ * Read CDDB header data when requesting a file (cmd=cddb+read+<album genre>+<discid>)
+ * Must be read after the HTTP header :
+ *
+ *      HTTP/1.1 200 OK
+ *      Date: Sun, 26 Nov 2006 22:37:13 GMT
+ *      Server: Apache/2.0.54 (Debian GNU/Linux) mod_python/3.1.3 Python/2.3.5 PHP/4.3.10-16 proxy_html/2.4 mod_perl/1.999.21 Perl/v5.8.4
+ *      Expires: Sun Nov 26 23:37:14 2006
+ *      Content-Length: 1013
+ *      Connection: close
+ *      Content-Type: text/plain; charset=UTF-8
+ *
+ *      210 newage 710ed208 CD database entry follows (until terminating `.')
+ *
+ * Cddb Header is the line like this :
+ *      210 newage 710ed208 CD database entry follows (until terminating `.')
+ */
+static gint
+Cddb_Read_Cddb_Header (FILE **file, gchar **cddb_out)
+{
+    if ( Cddb_Read_Line(file,cddb_out) < 0 )
+        return -1; // Error!
+
+    // Some requests receive some strange data (arbitrary : less than 10 chars.)
+    // at the beginning (2 or 3 characters)... So we read one line more...
+    if ( !*cddb_out || strlen(*cddb_out) < 10 )
+        if ( Cddb_Read_Line(file,cddb_out) < 0 )
+            return -1; // Error!
+
+    //g_print("Cddb Header : %s\n",*cddb_out);
+
+    // Read the line
+    // 200 - exact match
+    // 210 - multiple exact matches
+    // 211 - inexact match
+    if ( *cddb_out == NULL
+    || (strncmp(*cddb_out,"200",3)!=0
+    &&  strncmp(*cddb_out,"210",3)!=0
+    &&  strncmp(*cddb_out,"211",3)!=0) )
+        return -1;
+
+    return 1;
+}
+
+
+
+static gboolean
+Cddb_Free_Track_Album_List (GList *track_list)
+{
+    GList *l;
+
+    g_return_val_if_fail (track_list != NULL, FALSE);
+
+    track_list = g_list_first (track_list);
+
+    for (l = track_list; l != NULL; l = g_list_next (l))
+    {
+        CddbTrackAlbum *cddbtrackalbum = l->data;
+        if (cddbtrackalbum)
+        {
+            g_free(cddbtrackalbum->track_name);
+            g_free(cddbtrackalbum);
+            cddbtrackalbum = NULL;
+        }
+    }
+
+    g_list_free (track_list);
+
+    return TRUE;
+}
+
+/*
+ * Send cddb query using the CddbId generated from the selected files to get the
+ * list of albums matching with this cddbid.
+ */
+gboolean
+et_cddb_dialog_search_from_selection (EtCDDBDialog *self)
+{
+    EtCDDBDialogPrivate *priv;
+    gint   socket_id;
+    gint   bytes_written;
+    gulong bytes_read_total = 0;
+    FILE  *file = NULL;
+
+    gchar *cddb_in = NULL; /* For the request to send. */
+    gchar *cddb_out = NULL;       /* Answer received */
+    gchar *cddb_out_tmp;
+    gchar *msg;
+    gchar *proxy_auth;
+    gchar *cddb_server_name;
+    gint   cddb_server_port;
+    gchar *cddb_server_cgi_path;
+    gboolean proxy_enabled;
+    gchar *proxy_hostname;
+    guint proxy_port;
+    gint   server_try = 0;
+    GString *query_string;
+    gchar *cddb_discid;
+    gchar *cddb_end_str;
+
+    guint total_frames = 150;   /* First offset is (almost) always 150 */
+    guint disc_length  = 2;     /* and 2s elapsed before first track */
+
+    GtkTreeSelection *file_selection = NULL;
+    guint file_selectedcount = 0;
+    GtkTreeIter  currentIter;
+    guint total_id;
+    guint num_tracks;
+
+    gpointer iterptr;
+
+    GtkListStore *fileListModel;
+    GtkTreeIter *fileIter;
+    GList *file_iterlist = NULL;
+    GList *l;
+
+    priv = et_cddb_dialog_get_instance_private (self);
+
+    /* Number of selected files. */
+    /* FIXME: Hack! */
+    file_selection = et_application_window_browser_get_selection (ET_APPLICATION_WINDOW (MainWindow));
+    fileListModel = GTK_LIST_STORE (gtk_tree_view_get_model (gtk_tree_selection_get_tree_view (file_selection)));
+    file_selectedcount = gtk_tree_selection_count_selected_rows(file_selection);
+
+    // Create the list 'file_iterlist' of selected files (no selected files => all files selected)
+    if (file_selectedcount > 0)
+    {
+        GList* file_selectedrows = gtk_tree_selection_get_selected_rows(file_selection, NULL);
+
+        for (l = file_selectedrows; l != NULL; l = g_list_next (l))
+        {
+            iterptr = g_malloc0(sizeof(GtkTreeIter));
+            if (gtk_tree_model_get_iter(GTK_TREE_MODEL(fileListModel),
+                                        (GtkTreeIter*) iterptr,
+                                        (GtkTreePath*) l->data))
+            {
+                file_iterlist = g_list_prepend (file_iterlist, iterptr);
+            }
+        }
+        g_list_free_full (file_selectedrows,
+                          (GDestroyNotify)gtk_tree_path_free);
+
+    } else /* No rows selected, use the whole list */
+    {
+        gtk_tree_model_get_iter_first(GTK_TREE_MODEL(fileListModel), &currentIter);
+
+        do
+        {
+            iterptr = g_memdup(&currentIter, sizeof(GtkTreeIter));
+            file_iterlist = g_list_prepend (file_iterlist, iterptr);
+        } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(fileListModel), &currentIter));
+
+        file_selectedcount = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(fileListModel), NULL);
+    }
+
+    if (file_selectedcount == 0)
+    {
+        msg = g_strdup_printf(_("No file selected"));
+        gtk_statusbar_push(GTK_STATUSBAR(priv->status_bar),priv->status_bar_context,msg);
+        g_free(msg);
+        return TRUE;
+    }else if (file_selectedcount > 99)
+    {
+        // The CD redbook standard defines the maximum number of tracks as 99, any
+        // queries with more than 99 tracks will never return a result.
+        msg = g_strdup_printf(_("More than 99 files selected. Cannot send request"));
+        gtk_statusbar_push(GTK_STATUSBAR(priv->status_bar),priv->status_bar_context,msg);
+        g_free(msg);
+        return FALSE;
+    }else
+    {
+        msg = g_strdup_printf(ngettext("One file selected","%d files selected",file_selectedcount),file_selectedcount);
+        gtk_statusbar_push(GTK_STATUSBAR(priv->status_bar),priv->status_bar_context,msg);
+        g_free(msg);
+    }
+
+    // Generate query string and compute discid from the list 'file_iterlist'
+    total_id = 0;
+    num_tracks = file_selectedcount;
+    query_string = g_string_new ("");
+
+    file_iterlist = g_list_reverse (file_iterlist);
+
+    for (l = file_iterlist; l != NULL; l = g_list_next (l))
+    {
+        ET_File *etfile;
+        gulong secs = 0;
+
+        fileIter = (GtkTreeIter *)l->data;
+        etfile = et_application_window_browser_get_et_file_from_iter (ET_APPLICATION_WINDOW (MainWindow),
+                                                                      fileIter);
+
+        if (query_string->len > 0)
+        {
+            g_string_append_printf (query_string, "+%d", total_frames);
+        }
+        else
+        {
+            g_string_append_printf (query_string, "%d", total_frames);
+        }
+
+        secs = etfile->ETFileInfo->duration;
+        total_frames += secs * 75;
+        disc_length  += secs;
+        while (secs > 0)
+        {
+            total_id = total_id + (secs % 10);
+            secs = secs / 10;
+        }
+    }
+
+    g_list_free_full (file_iterlist, (GDestroyNotify)g_free);
+
+    /* Compute CddbId. */
+    cddb_discid = g_strdup_printf ("%08x", (guint)(((total_id % 0xFF) << 24) |
+                                           (disc_length << 8) | num_tracks));
+
+
+    /* Delete previous album list. */
+    cddb_album_model_clear (self);
+    cddb_track_model_clear (self);
+
+    if (priv->album_list)
+    {
+        Cddb_Free_Album_List (self);
+    }
+    gtk_widget_set_sensitive(GTK_WIDGET(priv->stop_search_button),TRUE);
+
+
+    {
+        /*
+         * Remote cddb acces
+         *
+         * Request the two servers
+         *   - 1) www.freedb.org
+         *   - 2) MusicBrainz Gateway : freedb.musicbrainz.org (in Easytag < 2.1.1, it was: www.mb.inhouse.co.uk)
+         */
+        while (server_try < 2)
+        {
+            server_try++;
+            if (server_try == 1)
+            {
+                /* 1st try. */
+                cddb_server_name = g_settings_get_string (MainSettings,
+                                                          "cddb-automatic-search-hostname");
+                cddb_server_port = g_settings_get_uint (MainSettings,
+                                                        "cddb-automatic-search-port");
+                cddb_server_cgi_path = g_settings_get_string (MainSettings,
+                                                              "cddb-automatic-search-path");
+ 
+            }
+            else
+            {
+                /* 2nd try. */
+                cddb_server_name = g_settings_get_string (MainSettings,
+                                                          "cddb-automatic-search-hostname2");
+                cddb_server_port = g_settings_get_uint (MainSettings,
+                                                        "cddb-automatic-search-port");
+                cddb_server_cgi_path = g_settings_get_string (MainSettings,
+                                                              "cddb-automatic-search-path2");
+            }
+
+            // Check values
+            if (!cddb_server_name || strcmp(cddb_server_name,"")==0)
+                continue;
+
+            /* Connection to the server. */
+            proxy_enabled = g_settings_get_boolean (MainSettings,
+                                                    "cddb-proxy-enabled");
+            proxy_hostname = g_settings_get_string (MainSettings,
+                                                   "cddb-proxy-hostname");
+            proxy_port = g_settings_get_uint (MainSettings, "cddb-proxy-port");
+
+            if ((socket_id = Cddb_Open_Connection (self,
+                                                   proxy_enabled
+                                                   ? proxy_hostname
+                                                   : cddb_server_name,
+                                                   proxy_enabled
+                                                   ? proxy_port
+                                                   : cddb_server_port)) <= 0)
+            {
+                g_free(cddb_in);
+                g_free(cddb_server_name);
+                g_free(cddb_server_cgi_path);
+                g_free (proxy_hostname);
+                g_string_free (query_string, TRUE);
+                g_free (cddb_discid);
+                return FALSE;
+            }
+
+            // CDDB Request (ex: GET /~cddb/cddb.cgi?cmd=cddb+query+0800ac01+1++150+172&hello=noname+localhost+EasyTAG+0.31&proto=1 HTTP/1.1\r\nHost: freedb.freedb.org:80\r\nConnection: close)
+            // Without proxy : "GET /~cddb/cddb.cgi?…" but doesn't work with a proxy.
+            // With proxy    : "GET http://freedb.freedb.org/~cddb/cddb.cgi?…"
+            // proto=1 => ISO-8859-1 - proto=6 => UTF-8
+            cddb_in = g_strdup_printf("GET %s%s%s?cmd=cddb+query+"
+                                      "%s+"
+                                      "%d+%s+"
+                                      "%d"
+                                      "&hello=noname+localhost+%s+%s"
+                                      "&proto=6 HTTP/1.1\r\n"
+                                      "Host: %s:%d\r\n"
+                                      "%s"
+                                      "Connection: close\r\n\r\n",
+                                      proxy_enabled ? "http://" : "",
+                                      proxy_enabled ? cddb_server_name : "",
+                                      cddb_server_cgi_path,
+                                      cddb_discid,
+                                      num_tracks, query_string->str,
+                                      disc_length,
+                                      PACKAGE_NAME, PACKAGE_VERSION,
+                                      cddb_server_name,cddb_server_port,
+                                      (proxy_auth=Cddb_Format_Proxy_Authentification())
+                                      );
+            g_free (proxy_auth);
+            //g_print("Request Cddb_Search_Album_From_Selected_Files : '%s'\n", cddb_in);
+
+            msg = g_strdup_printf(_("Sending request (disc ID: %s, #tracks: %d, Disc length: %d)…"),
+                                cddb_discid,num_tracks,disc_length);
+            gtk_statusbar_push(GTK_STATUSBAR(priv->status_bar),priv->status_bar_context,msg);
+            g_free(msg);
+
+            while (gtk_events_pending())
+                gtk_main_iteration();
+
+            if ( (bytes_written=send(socket_id,cddb_in,strlen(cddb_in)+1,0)) < 0)
+            {
+                Log_Print (LOG_ERROR, _("Cannot send the request ‘%s’"),
+                           g_strerror (errno));
+                Cddb_Close_Connection (self, socket_id);
+                g_free (cddb_in);
+                g_free (cddb_server_name);
+                g_free (cddb_server_cgi_path);
+                g_free (proxy_hostname);
+                g_string_free (query_string, TRUE);
+                g_free (cddb_discid);
+                return FALSE;
+            }
+            g_free(cddb_in);
+            cddb_in = NULL;
+
+
+            /*
+             * Read the answer
+             */
+            gtk_statusbar_push(GTK_STATUSBAR(priv->status_bar),priv->status_bar_context,_("Receiving data…"));
+            while (gtk_events_pending())
+                gtk_main_iteration();
+
+            /* Write result in a file. */
+            if (Cddb_Write_Result_To_File (self, socket_id, &bytes_read_total) < 0)
+            {
+                msg = g_strdup(_("The server returned a bad response"));
+                gtk_statusbar_push(GTK_STATUSBAR(priv->status_bar),priv->status_bar_context,msg);
+                Log_Print(LOG_ERROR,"%s",msg);
+                g_free(msg);
+                g_free(cddb_server_name);
+                g_free(cddb_server_cgi_path);
+                g_free (proxy_hostname);
+                g_string_free (query_string, TRUE);
+                g_free (cddb_discid);
+                gtk_widget_set_sensitive(GTK_WIDGET(priv->stop_search_button),FALSE);
+                return FALSE;
+            }
+
+            // Parse server answer : Check returned code in the first line
+            file = NULL;
+            if (Cddb_Read_Http_Header(&file,&cddb_out) <= 0 || !cddb_out) // Order is important!
+            {
+                msg = g_strdup_printf (_("The server returned a bad response ‘%s’"),
+                                       cddb_out);
+                gtk_statusbar_push(GTK_STATUSBAR(priv->status_bar),priv->status_bar_context,msg);
+                Log_Print(LOG_ERROR,"%s",msg);
+                g_free(msg);
+                g_free(cddb_out);
+                g_free(cddb_server_name);
+                g_free(cddb_server_cgi_path);
+                g_free (proxy_hostname);
+                g_string_free (query_string, TRUE);
+                g_free (cddb_discid);
+                gtk_widget_set_sensitive(GTK_WIDGET(priv->stop_search_button),FALSE);
+                if (file)
+                    fclose(file);
+                return FALSE;
+            }
+            g_free(cddb_out);
+
+            cddb_end_str = g_strdup(".");
+
+            /*
+             * Format :
+             * For Freedb, Gnudb, the lines to read are like :
+             *      211 Found inexact matches, list follows (until terminating `.')
+             *      rock 8f0dc00b Archive / Noise
+             *      rock 7b0dd80b Archive / Noise
+             *      .
+             * For MusicBrainz Cddb Gateway (see http://wiki.musicbrainz.org/CddbGateway), the lines to read are like :
+             *      200 jazz 7e0a100a Pink Floyd / Dark Side of the Moon
+             */
+            while (!priv->stop_searching
+                   && Cddb_Read_Line (&file, &cddb_out) > 0)
+            {
+                cddb_out_tmp = cddb_out;
+                //g_print("%s\n",cddb_out);
+
+                // To avoid the cddb lookups to hang (Patch from Paul Giordano)
+                /* It appears that on some systems that cddb lookups continue to attempt
+                 * to get data from the socket even though the other system has completed
+                 * sending. The fix adds one check to the loops to see if the actual
+                 * end of data is in the last block read. In this case, the last line
+                 * will be a single '.'
+                 */
+                if ( cddb_out_tmp && strlen(cddb_out_tmp)<=3 && strstr(cddb_out_tmp,cddb_end_str)!=NULL )
+                {
+                    g_free (cddb_out);
+                    break;
+                }
+
+                // Compatibility for the MusicBrainz CddbGateway
+                if ( cddb_out_tmp && strlen(cddb_out_tmp)>3
+                &&  (strncmp(cddb_out_tmp,"200",3)==0
+                ||   strncmp(cddb_out_tmp,"210",3)==0
+                ||   strncmp(cddb_out_tmp,"211",3)==0) )
+                    cddb_out_tmp = cddb_out_tmp + 4;
+
+                // Reading of lines with albums (skiping return code lines :
+                // "211 Found inexact matches, list follows (until terminating `.')" )
+                if (cddb_out != NULL && strstr(cddb_out_tmp,"/") != NULL)
+                {
+                    gchar* ptr;
+                    CddbAlbum *cddbalbum;
+
+                    cddbalbum = g_malloc0(sizeof(CddbAlbum));
+
+                    // Parameters of the server used
+                    cddbalbum->server_name     = g_strdup(cddb_server_name);
+                    cddbalbum->server_port     = cddb_server_port;
+                    cddbalbum->server_cgi_path = g_strdup(cddb_server_cgi_path);
+                    cddbalbum->bitmap          = Cddb_Get_Pixbuf_From_Server_Name(cddbalbum->server_name);
+
+                    // Get album category
+                    if ( (ptr = strstr(cddb_out_tmp, " ")) != NULL )
+                    {
+                        *ptr = 0;
+                        cddbalbum->category = Try_To_Validate_Utf8_String(cddb_out_tmp);
+                        *ptr = ' ';
+                        cddb_out_tmp = ptr + 1;
+                    }
+
+                    // Get album ID
+                    if ( (ptr = strstr(cddb_out_tmp, " ")) != NULL )
+                    {
+                        *ptr = 0;
+                        cddbalbum->id = Try_To_Validate_Utf8_String(cddb_out_tmp);
+                        *ptr = ' ';
+                        cddb_out_tmp = ptr + 1;
+                    }
+
+                    // Get album and artist names.
+                    cddbalbum->artist_album = Try_To_Validate_Utf8_String(cddb_out_tmp);
+
+                    priv->album_list = g_list_append(priv->album_list,cddbalbum);
+                }
+
+                g_free(cddb_out);
+            }
+            g_free(cddb_end_str);
+            g_free(cddb_server_name);
+            g_free(cddb_server_cgi_path);
+            g_free (proxy_hostname);
+
+            /* Close file opened for reading lines. */
+            if (file)
+            {
+                fclose(file);
+                file = NULL;
+            }
+
+            /* Close connection. */
+            Cddb_Close_Connection (self, socket_id);
+        }
+    }
+
+    g_string_free (query_string, TRUE);
+
+    msg = g_strdup_printf (ngettext ("DiscID ‘%s’ gave one matching album",
+                                     "DiscID ‘%s’ gave %d matching albums",
+                                     g_list_length (priv->album_list)),
+                           cddb_discid, g_list_length (priv->album_list));
+    gtk_statusbar_push(GTK_STATUSBAR(priv->status_bar),priv->status_bar_context,msg);
+    g_free(msg);
+
+    g_free(cddb_discid);
+
+    gtk_widget_set_sensitive (GTK_WIDGET (priv->stop_search_button), FALSE);
+
+    /* Load the albums found in the list. */
+    Cddb_Load_Album_List (self, FALSE);
+
+    return TRUE;
+}
+
+/*
+ * Returns the corresponding ID3 genre (the name, not the value)
+ */
+static const gchar *
+Cddb_Get_Id3_Genre_From_Cddb_Genre (const gchar *cddb_genre)
+{
+    guint i;
+
+    g_return_val_if_fail (cddb_genre != NULL, "");
+
+    for (i=0; i<=CDDB_GENRE_MAX; i++)
+        if (strcasecmp(cddb_genre,cddb_genre_vs_id3_genre[i][0])==0)
+            return cddb_genre_vs_id3_genre[i][1];
+    return cddb_genre;
+}
+
+/*
+ * Returns the pixmap to display following the server name
+ */
+static GdkPixbuf *
+Cddb_Get_Pixbuf_From_Server_Name (const gchar *server_name)
+{
+    g_return_val_if_fail (server_name != NULL, NULL);
+
+    if (strstr (server_name, "freedb.org"))
+        return gdk_pixbuf_new_from_resource ("/org/gnome/EasyTAG/images/freedb.png",
+                                             NULL);
+    else if (strstr(server_name,"gnudb.org"))
+        return gdk_pixbuf_new_from_resource ("/org/gnome/EasyTAG/images/gnudb.png",
+                                             NULL);
+    else if (strstr(server_name,"musicbrainz.org"))
+        return gdk_pixbuf_new_from_resource ("/org/gnome/EasyTAG/images/musicbrainz.png",
+                                             NULL);
+    else
+        return NULL;
+}
+
+
+static gchar *
+Cddb_Format_Proxy_Authentification (void)
+{
+    gchar *username;
+    gchar *password;
+    gchar *ret;
+
+    username = g_settings_get_string (MainSettings, "cddb-proxy-username");
+    password = g_settings_get_string (MainSettings, "cddb-proxy-password");
+
+    if (g_settings_get_boolean (MainSettings, "cddb-proxy-enabled")
+        && username && *username )
+    {
+        const gchar *tempstr;
+        gchar *str_encoded;
+
+        tempstr = g_strconcat (username, ":", password, NULL);
+        str_encoded = g_base64_encode((const guchar *)tempstr, strlen(tempstr));
+
+        ret = g_strdup_printf("Proxy-authorization: Basic %s\r\n", str_encoded);
+        g_free (str_encoded);
+    }
+    else
+    {
+        ret = g_strdup ("");
+    }
+
+    g_free (username);
+    g_free (password);
+
+    return ret;
+}
+
+static void
+et_cddb_dialog_finalize (GObject *object)
+{
+    EtCDDBDialog *self;
+    EtCDDBDialogPrivate *priv;
+
+    self = ET_CDDB_DIALOG (object);
+    priv = et_cddb_dialog_get_instance_private (self);
+
+    if (priv->album_list)
+    {
+        Cddb_Free_Album_List (self);
+    }
+
+    G_OBJECT_CLASS (et_cddb_dialog_parent_class)->finalize (object);
+}
+
+static void
+et_cddb_dialog_init (EtCDDBDialog *self)
+{
+    self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, ET_TYPE_CDDB_DIALOG,
+                                              EtCDDBDialogPrivate);
+
+    self->priv->album_list = NULL;
+    self->priv->stop_searching = FALSE;
+
+    create_cddb_dialog (self);
+}
+
+static void
+et_cddb_dialog_class_init (EtCDDBDialogClass *klass)
+{
+    G_OBJECT_CLASS (klass)->finalize = et_cddb_dialog_finalize;
+
+    g_type_class_add_private (klass, sizeof (EtCDDBDialogPrivate));
+}
+
+/*
+ * et_cddb_dialog_new:
+ *
+ * Create a new EtCDDBDialog instance.
+ *
+ * Returns: a new #EtCDDBDialog
+ */
+EtCDDBDialog *
+et_cddb_dialog_new (void)
+{
+    return g_object_new (ET_TYPE_CDDB_DIALOG, NULL);
+}
diff --git a/src/cddb.h b/src/cddb_dialog.h
similarity index 55%
rename from src/cddb.h
rename to src/cddb_dialog.h
index 0cc502b..dddf2b4 100644
--- a/src/cddb.h
+++ b/src/cddb_dialog.h
@@ -1,4 +1,3 @@
-/* cddb.h - 2002/09/15 */
 /*
  *  EasyTAG - Tag editor for MP3 and Ogg Vorbis files
  *  Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
@@ -18,15 +17,36 @@
  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-#ifndef ET_CDDB_H_
-#define ET_CDDB_H_
+#ifndef ET_CDDB_DIALOG_H_
+#define ET_CDDB_DIALOG_H_
+
+#include <gtk/gtk.h>
 
 G_BEGIN_DECLS
 
-void Init_CddbWindow (void);
-void Open_Cddb_Window (void);
-void Cddb_Popup_Menu_Search_Selected_File (void);
-void Cddb_Window_Apply_Changes (void);
+#define ET_TYPE_CDDB_DIALOG (et_cddb_dialog_get_type ())
+#define ET_CDDB_DIALOG(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), ET_TYPE_CDDB_DIALOG, EtCDDBDialog))
+
+typedef struct _EtCDDBDialog EtCDDBDialog;
+typedef struct _EtCDDBDialogClass EtCDDBDialogClass;
+typedef struct _EtCDDBDialogPrivate EtCDDBDialogPrivate;
+
+struct _EtCDDBDialog
+{
+    /*< private >*/
+    GtkDialog parent_instance;
+    EtCDDBDialogPrivate *priv;
+};
+
+struct _EtCDDBDialogClass
+{
+    /*< private >*/
+    GtkDialogClass parent_class;
+};
+
+GType et_cddb_dialog_get_type (void);
+EtCDDBDialog *et_cddb_dialog_new (void);
+gboolean et_cddb_dialog_search_from_selection (EtCDDBDialog *self);
 
 G_END_DECLS
 
diff --git a/src/charset.c b/src/charset.c
index 09ded37..661b625 100644
--- a/src/charset.c
+++ b/src/charset.c
@@ -20,7 +20,10 @@
  *
  */
 
-#include <config.h>
+#include "config.h"
+
+#include "charset.h"
+
 #include <stdlib.h>
 #include <glib.h>
 #include <string.h>
@@ -31,16 +34,15 @@
 #include <langinfo.h>
 #endif
 
-#include "charset.h"
 #include "setting.h"
 #include "log.h"
-
 #include "win32/win32dep.h"
 
-
-/****************
- * Declarations *
- ****************/
+typedef struct
+{
+    const gchar *charset_title;
+    const gchar *charset_name;
+} CharsetInfo;
 
 #define CHARSET_TRANS_ARRAY_LEN ( sizeof(charset_trans_array) / sizeof((charset_trans_array)[0]) )
 static const CharsetInfo charset_trans_array[] = {
@@ -139,12 +141,6 @@ static const CharsetInfo charset_trans_array[] = {
 static GHashTable *encodings;
 
 
-
-/*************
- * Functions *
- *************/
-
-
 /* stolen from gnome-desktop-item.c */
 static gboolean
 check_locale (const char *locale)
@@ -158,7 +154,7 @@ check_locale (const char *locale)
 
 /* stolen from gnome-desktop-item.c */
 G_GNUC_NULL_TERMINATED static void
-insert_locales (GHashTable *encodings, char *enc, ...)
+insert_locales (GHashTable *encodings, const gchar *enc, ...)
 {
     va_list args;
     char *s;
@@ -169,7 +165,9 @@ insert_locales (GHashTable *encodings, char *enc, ...)
         s = va_arg (args, char *);
         if (s == NULL)
             break;
-        g_hash_table_insert (encodings, s, enc);
+        /* A GDestroyNotify is not passed, so casting away the const is
+         * safe, as the key is never freed. */
+        g_hash_table_insert (encodings, s, (gpointer)enc);
     }
     va_end (args);
 }
@@ -179,6 +177,7 @@ insert_locales (GHashTable *encodings, char *enc, ...)
 void
 Charset_Insert_Locales_Init (void)
 {
+    /* FIXME: Use g_hash_table_new_full. */
     encodings = g_hash_table_new (g_str_hash, g_str_equal);
 
     /* "C" is plain ascii */
@@ -508,8 +507,10 @@ filename_to_display (const gchar *string)
         if (!ret)
         {
             gchar *escaped_str = g_strescape(string, NULL);
-            Log_Print(LOG_ERROR,_("The filename '%s' couldn't be converted into UTF-8 (%s)."),
-                        escaped_str, error && error->message ? error->message : _("Invalid UTF-8"));
+            Log_Print (LOG_ERROR,
+                       _("The filename ‘%s’ could not be converted into UTF-8: %s"),
+                        escaped_str,
+                        error && error->message ? error->message : _("Invalid UTF-8"));
             g_clear_error(&error);
 
             ret = escaped_str;
@@ -546,32 +547,44 @@ gchar *filename_from_display (const gchar *string)
         char_encoding = char_encoding+1; // Skip the '.'
     if (char_encoding)
     {
+        EtRenameEncoding enc_option = g_settings_get_enum (MainSettings,
+                                                           "rename-encoding");
         error = NULL;
 
-        if (FILENAME_CHARACTER_SET_OTHER)
+        switch (enc_option)
         {
-            ret = g_convert(string, -1, char_encoding, "UTF-8", NULL, NULL, &error);
-
-        }else if (FILENAME_CHARACTER_SET_APPROXIMATE)
-        {
-            // iconv_open (3):
-            // When the string "//TRANSLIT" is appended to tocode, transliteration
-            // is activated. This means that when a character cannot be represented
-            // in the target character set, it can be approximated through one or
-            // several similarly looking characters.
-            gchar *enc = g_strconcat(char_encoding, "//TRANSLIT", NULL);
-            ret = g_convert(string, -1, enc, "UTF-8", NULL, NULL, &error);
-            g_free(enc);
-
-        }else if (FILENAME_CHARACTER_SET_DISCARD)
-        {
-            // iconv_open (3):
-            // When the string "//IGNORE" is appended to tocode, characters that
-            // cannot be represented in the target character set will be silently
-            // discarded.
-            gchar *enc = g_strconcat(char_encoding, "//IGNORE", NULL);
-            ret = g_convert(string, -1, enc, "UTF-8", NULL, NULL, &error);
-            g_free(enc);
+            case ET_RENAME_ENCODING_TRY_ALTERNATIVE:
+                ret = g_convert (string, -1, char_encoding, "UTF-8", NULL,
+                                 NULL, &error);
+                break;
+            case ET_RENAME_ENCODING_TRANSLITERATE:
+            {
+                /* iconv_open (3):
+                 * When the string "//TRANSLIT" is appended to tocode,
+                 * transliteration is activated. This means that when a
+                 * character cannot be represented in the target character set,
+                 * it can be approximated through one or several similarly
+                 * looking characters.
+                 */
+                gchar *enc = g_strconcat (char_encoding, "//TRANSLIT", NULL);
+                ret = g_convert (string, -1, enc, "UTF-8", NULL, NULL, &error);
+                g_free (enc);
+                break;
+            }
+            case ET_RENAME_ENCODING_IGNORE:
+            {
+                /* iconv_open (3):
+                 * When the string "//IGNORE" is appended to tocode, characters
+                 * that cannot be represented in the target character set will
+                 * be silently discarded.
+                 */
+                gchar *enc = g_strconcat (char_encoding, "//IGNORE", NULL);
+                ret = g_convert (string, -1, enc, "UTF-8", NULL, NULL, &error);
+                g_free (enc);
+                break;
+            }
+            default:
+                g_assert_not_reached ();
         }
     }
 
@@ -607,8 +620,10 @@ gchar *filename_from_display (const gchar *string)
     {
         // Conversion KO!
         gchar *escaped_str = g_strescape(string, NULL);
-        Log_Print(LOG_ERROR,_("The UTF-8 string '%s' couldn't be converted into filename encoding (%s)."),
-                    escaped_str, error && error->message ? error->message : _("Invalid UTF-8"));
+        Log_Print (LOG_ERROR,
+                   _("The UTF-8 string ‘%s’ could not be converted into filename encoding: %s"),
+                    escaped_str,
+                    error && error->message ? error->message : _("Invalid UTF-8"));
         g_clear_error(&error);
 
         ret = escaped_str;
@@ -670,8 +685,10 @@ gchar *Try_To_Validate_Utf8_String (const gchar *string)
         if (!ret)
         {
             gchar *escaped_str = g_strescape(string, NULL);
-            Log_Print(LOG_ERROR,_("The string '%s' couldn't be converted into UTF-8 (%s)."),
-                        escaped_str, error && error->message ? error->message : _("Invalid UTF-8"));
+            Log_Print (LOG_ERROR,
+                       _("The string ‘%s’ could not be converted into UTF-8: %s"),
+                        escaped_str,
+                        error && error->message ? error->message : _("Invalid UTF-8"));
             g_clear_error(&error);
 
             ret = escaped_str;
@@ -683,24 +700,26 @@ gchar *Try_To_Validate_Utf8_String (const gchar *string)
 
 
 
-void Charset_Populate_Combobox (GtkComboBox *combo, gchar *select_charset)
+void
+Charset_Populate_Combobox (GtkComboBox *combo, gint select_charset)
 {
-    guint i;
+    gsize i;
 
-    for (i=0; i<CHARSET_TRANS_ARRAY_LEN; i++)
+    for (i = 0; i < CHARSET_TRANS_ARRAY_LEN; i++)
     {
-        gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _(charset_trans_array[i].charset_title));
+        gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo),
+                                        _(charset_trans_array[i].charset_title));
 
-        if (select_charset && strcmp(charset_trans_array[i].charset_name, select_charset) == 0)
-            gtk_combo_box_set_active(combo, i);
     }
+
+    gtk_combo_box_set_active (combo, select_charset);
 }
 
 
 /*
  * Return charset_name from charset_title
  */
-gchar *
+const gchar *
 Charset_Get_Name_From_Title (const gchar *charset_title)
 {
     guint i;
@@ -718,3 +737,12 @@ Charset_Get_Name_From_Title (const gchar *charset_title)
 
     return NULL;
 }
+
+const gchar *
+et_charset_get_name_from_index (gint index)
+{
+    g_return_val_if_fail (index >= 0 && index <= CHARSET_TRANS_ARRAY_LEN,
+                          NULL);
+
+    return charset_trans_array[index].charset_name;
+}
diff --git a/src/charset.h b/src/charset.h
index a5c629d..17b49d7 100644
--- a/src/charset.h
+++ b/src/charset.h
@@ -1,46 +1,32 @@
-/* charset.h - 2001/12/04 */
-/*
- *  EasyTAG - Tag editor for MP3 and Ogg Vorbis files
- *  Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
+/* EasyTAG - Tag editor for audio files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ * Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
  *
- *  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
- *  (at your option) any later version.
+ * 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
+ * (at your option) any later version.
  *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
  *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-
-#ifndef __CHARSET_H__
-#define __CHARSET_H__
+#ifndef ET_CHARSET_H_
+#define ET_CHARSET_H_
 
 #include <gtk/gtk.h>
 
 G_BEGIN_DECLS
 
-typedef struct
-{
-    gchar *charset_title;
-    gchar *charset_name;
-} CharsetInfo;
-
-
-/**************
- * Prototypes *
- **************/
-
 const char  *get_encoding_from_locale (const char *locale);
 const gchar *get_locale               (void);
 
-
 gchar *convert_string   (const gchar *string, const gchar *from_codeset, const gchar *to_codeset, const gboolean display_error);
 gchar *convert_string_1 (const gchar *string, gssize length, const gchar *from_codeset, const gchar *to_codeset, const gboolean display_error);
 
@@ -52,13 +38,13 @@ gchar *filename_from_display (const gchar *string);
 
 gchar *Try_To_Validate_Utf8_String (const gchar *string);
 
-void   Charset_Populate_Combobox   (GtkComboBox *combo, gchar *select_charset);
-gchar *Charset_Get_Name_From_Title (const gchar *charset_title);
-
+void Charset_Populate_Combobox (GtkComboBox *combo, gint select_charset);
+const gchar *Charset_Get_Name_From_Title (const gchar *charset_title);
+const gchar * et_charset_get_name_from_index (gint index);
 
 void Charset_Insert_Locales_Init    (void);
 void Charset_Insert_Locales_Destroy (void);
 
 G_END_DECLS
 
-#endif /* __CHARSET_H__ */
+#endif /* ET_CHARSET_H_ */
diff --git a/src/easytag.c b/src/easytag.c
index 1117931..e609bf8 100644
--- a/src/easytag.c
+++ b/src/easytag.c
@@ -1,24 +1,22 @@
-/* easytag.c - 2000/04/28 */
-/*
- *  EasyTAG - Tag editor for MP3 and Ogg Vorbis files
- *  Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
+/* EasyTAG - Tag editor for audio files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ * Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
  *
- *  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
- *  (at your option) any later version.
+ * 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
+ * (at your option) any later version.
  *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
  *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-
 #include "config.h" // For definition of ENABLE_OGG
 #include <gtk/gtk.h>
 #include <stdio.h>
@@ -37,22 +35,19 @@
 #endif
 #include <sys/types.h>
 
-#include "gtk2_compat.h"
 #include "easytag.h"
-#include "application.h"
+#include "application_window.h"
 #include "browser.h"
 #include "log.h"
 #include "misc.h"
-#include "bar.h"
-#include "prefs.h"
+#include "cddb_dialog.h"
+#include "preferences_dialog.h"
 #include "setting.h"
-#include "scan.h"
 #include "scan_dialog.h"
 #include "mpeg_header.h"
 #include "id3_tag.h"
 #include "ogg_tag.h"
 #include "et_core.h"
-#include "cddb.h"
 #include "picture.h"
 #include "charset.h"
 
@@ -62,42 +57,6 @@
 /****************
  * Declarations *
  ****************/
-static guint idle_handler_id;
-
-static GtkWidget *MenuArea;
-static GtkWidget *ToolArea;
-static GtkWidget *BrowseArea;
-static GtkWidget *FileArea;
-static GtkWidget *TagArea;
-static GtkWidget *StatusArea;
-static GtkWidget *ProgressArea;
-static GtkWidget *MainWindowHPaned;
-static GtkWidget *MainWindowVPaned;
-
-/* Labels. */
-static GtkWidget *TitleLabel;
-static GtkWidget *ArtistLabel;
-static GtkWidget *AlbumArtistLabel;
-static GtkWidget *AlbumLabel;
-static GtkWidget *DiscNumberLabel;
-static GtkWidget *YearLabel;
-static GtkWidget *TrackLabel;
-static GtkWidget *GenreLabel;
-static GtkWidget *CommentLabel;
-static GtkWidget *ComposerLabel;
-static GtkWidget *OrigArtistLabel;
-static GtkWidget *CopyrightLabel;
-static GtkWidget *URLLabel;
-static GtkWidget *EncodedByLabel;
-
-/* Mini buttons. */
-static GtkWidget *TrackMButtonSequence;
-static GtkWidget *TrackMButtonNbrFiles;
-
-static GtkListStore *PictureEntryModel;
-
-static GtkWidget *images_tab = NULL;
-static GtkToolItem *apply_image_toolitem = NULL;
 static GtkWidget *QuitRecursionWindow = NULL;
 
 /* Used to force to hide the msgbox when saving tag */
@@ -108,10 +67,6 @@ static gint SF_ButtonPressed_Write_Tag;
 static gboolean SF_HideMsgbox_Rename_File;
 /* To remember which button was pressed when renaming file */
 static gint SF_ButtonPressed_Rename_File;
-/* Used to force to hide the msgbox when deleting file */
-static gboolean SF_HideMsgbox_Delete_File;
-/* To remember which button was pressed when deleting file */
-static gint SF_ButtonPressed_Delete_File;
 
 #ifdef ENABLE_FLAC
     #include <FLAC/metadata.h>
@@ -121,25 +76,13 @@ static gint SF_ButtonPressed_Delete_File;
 /**************
  * Prototypes *
  **************/
-static GtkWidget *Create_Browser_Area (void);
-static GtkWidget *Create_File_Area    (void);
-static GtkWidget *Create_Tag_Area     (void);
-
-static void Mini_Button_Clicked (GObject *object);
-static void Disable_Command_Buttons (void);
-
 static gboolean Write_File_Tag (ET_File *ETFile, gboolean hide_msgbox);
 static gint Save_File (ET_File *ETFile, gboolean multiple_files,
                        gboolean force_saving_files);
-static gint delete_file (ET_File *ETFile, gboolean multiple_files,
-                         GError **error);
 static gint Save_Selected_Files_With_Answer (gboolean force_saving_files);
 static gint Save_List_Of_Files (GList *etfilelist,
                                 gboolean force_saving_files);
-static gint Delete_Selected_Files_With_Answer (void);
 
-static void Init_Load_Default_Dir (void);
-static void EasyTAG_Exit (void);
 static gboolean et_rename_file (const char *old_filepath,
                                 const char *new_filepath, GError **error);
 static GList *read_directory_recursively (GList *file_list,
@@ -149,4605 +92,1199 @@ static void Open_Quit_Recursion_Function_Window (void);
 static void Destroy_Quit_Recursion_Function_Window (void);
 static void et_on_quit_recursion_response (GtkDialog *dialog, gint response_id,
                                            gpointer user_data);
-static void File_Area_Set_Sensitive (gboolean activate);
-static void Tag_Area_Set_Sensitive  (gboolean activate);
 
-static void et_tag_field_connect_signals (GtkEntry *entry);
-static gboolean et_tag_field_on_key_press_event (GtkEntry *entry,
-                                                 GdkEventKey *event,
-                                                 gpointer user_data);
+/*
+ * Select a file in the "main list" using the ETFile adress of each item.
+ */
+void Action_Select_Nth_File_By_Etfile (ET_File *ETFile)
+{
+    if (!ETCore->ETFileDisplayedList)
+        return;
+
+    /* Save the current displayed data */
+    ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
 
-static gboolean
-on_main_window_delete_event (GtkWidget *window,
-                             GdkEvent *event,
-                             gpointer user_data)
+    /* Display the item */
+    et_application_window_browser_select_file_by_et_file (ET_APPLICATION_WINDOW (MainWindow),
+                                                          ETFile, TRUE);
+    ET_Displayed_File_List_By_Etfile(ETFile); // Just to update 'ETFileDisplayedList'
+    ET_Display_File_Data_To_UI(ETFile);
+
+    et_application_window_update_actions (ET_APPLICATION_WINDOW (MainWindow));
+    et_application_window_scan_dialog_update_previews (ET_APPLICATION_WINDOW (MainWindow));
+}
+
+/*
+ * Action when Save button is pressed
+ */
+void Action_Save_Selected_Files (void)
 {
-    Quit_MainWindow ();
+    Save_Selected_Files_With_Answer(FALSE);
+}
 
-    /* Handled the event, so stop propagation. */
-    return TRUE;
+void Action_Force_Saving_Selected_Files (void)
+{
+    Save_Selected_Files_With_Answer(TRUE);
 }
 
+
 /*
- * common_init:
- * @application: the application
- *
- * Create and show the main window. Common to all actions which may occur after
- * startup, such as "activate" and "open".
+ * Will save the full list of file (not only the selected files in list)
+ * and check if we must save also only the changed files or all files
+ * (force_saving_files==TRUE)
  */
-static void
-common_init (GApplication *application)
+gint Save_All_Files_With_Answer (gboolean force_saving_files)
 {
-    GtkWidget *MainVBox;
-    GtkWidget *HBox, *VBox;
+    GList *etfilelist;
 
-    /* Starting messages */
-    Log_Print(LOG_OK,_("Starting EasyTAG version %s (PID: %d)…"),PACKAGE_VERSION,getpid());
-#ifdef ENABLE_MP3
-    Log_Print(LOG_OK,_("Using libid3tag version %s"), ID3_VERSION);
-#endif
-#if defined ENABLE_MP3 && defined ENABLE_ID3LIB
-    Log_Print (LOG_OK, _("Using id3lib version %d.%d.%d"), ID3LIB_MAJOR_VERSION,
-               ID3LIB_MINOR_VERSION, ID3LIB_PATCH_VERSION);
-#endif
+    g_return_val_if_fail (ETCore != NULL && ETCore->ETFileList != NULL, FALSE);
 
-#ifdef G_OS_WIN32
-    if (g_getenv("EASYTAGLANG"))
-        Log_Print(LOG_OK,_("Variable EASYTAGLANG defined. Setting locale: '%s'"),g_getenv("EASYTAGLANG"));
-    else
-        Log_Print(LOG_OK,_("Setting locale: '%s'"),g_getenv("LANG"));
-#endif /* G_OS_WIN32 */
+    etfilelist = g_list_first (ETCore->ETFileList);
+
+    return Save_List_Of_Files (etfilelist, force_saving_files);
+}
 
-    if (get_locale())
-        Log_Print (LOG_OK,
-                   _("Currently using locale '%s' (and eventually '%s')"),
-                   get_locale (), get_encoding_from_locale (get_locale ()));
+/*
+ * Will save only the selected files in the file list
+ */
+static gint
+Save_Selected_Files_With_Answer (gboolean force_saving_files)
+{
+    gint toreturn;
+    GList *etfilelist = NULL;
+    GList *selfilelist = NULL;
+    GList *l;
+    ET_File *etfile;
+    GtkTreeSelection *selection;
 
+    selection = et_application_window_browser_get_selection (ET_APPLICATION_WINDOW (MainWindow));
+    selfilelist = gtk_tree_selection_get_selected_rows(selection, NULL);
 
-    /* Create all config files. */
-    if (!Setting_Create_Files())
+    for (l = selfilelist; l != NULL; l = g_list_next (l))
     {
-        Log_Print (LOG_WARNING, _("Unable to create setting directories"));
+        etfile = et_application_window_browser_get_et_file_from_path (ET_APPLICATION_WINDOW (MainWindow),
+                                                                      l->data);
+        etfilelist = g_list_prepend (etfilelist, etfile);
     }
 
-    /* Load Config */
-    Init_Config_Variables();
-    Read_Config();
-    /* Display_Config(); // <- for debugging */
-
-
+    g_list_free_full (selfilelist, (GDestroyNotify)gtk_tree_path_free);
 
-    /* Initialization */
-    ET_Core_Create();
-    Main_Stop_Button_Pressed = FALSE;
-    Init_Custom_Icons();
-    Init_Mouse_Cursor();
-    Init_OptionsWindow();
-    Init_ScannerWindow();
-    Init_CddbWindow();
-    BrowserEntryModel    = NULL;
-    TrackEntryComboModel = NULL;
-    GenreComboModel      = NULL;
-
-    /* The main window */
-    MainWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
-    et_application_set_window (ET_APPLICATION (application),
-                               GTK_WINDOW (MainWindow));
-    gtk_window_set_title (GTK_WINDOW (MainWindow), PACKAGE_NAME);
-    // This part is needed to set correctly the position of handle panes
-    gtk_window_set_default_size(GTK_WINDOW(MainWindow),MAIN_WINDOW_WIDTH,MAIN_WINDOW_HEIGHT);
-
-    g_signal_connect (MainWindow, "delete-event",
-                      G_CALLBACK (on_main_window_delete_event), NULL);
-
-    /* Minimised window icon */
-    gtk_widget_realize(MainWindow);
-
-    gtk_window_set_icon_name (GTK_WINDOW (MainWindow), PACKAGE_TARNAME);
-
-    /* MainVBox for Menu bar + Tool bar + "Browser Area & FileArea & TagArea" + Log Area + "Status bar & Progress bar" */
-    MainVBox = gtk_box_new(GTK_ORIENTATION_VERTICAL,0);
-    gtk_container_add (GTK_CONTAINER(MainWindow),MainVBox);
-    gtk_widget_show(MainVBox);
-
-    /* Menu bar and tool bar */
-    Create_UI(&MenuArea, &ToolArea);
-    gtk_box_pack_start(GTK_BOX(MainVBox),MenuArea,FALSE,FALSE,0);
-    gtk_box_pack_start(GTK_BOX(MainVBox),ToolArea,FALSE,FALSE,0);
-
-
-    /* The two panes: BrowserArea on the left, FileArea+TagArea on the right */
-    MainWindowHPaned = gtk_paned_new(GTK_ORIENTATION_HORIZONTAL);
-    //gtk_box_pack_start(GTK_BOX(MainVBox),MainWindowHPaned,TRUE,TRUE,0);
-    gtk_paned_set_position(GTK_PANED(MainWindowHPaned),PANE_HANDLE_POSITION1);
-    gtk_widget_show(MainWindowHPaned);
-
-    /* Browser (Tree + File list + Entry) */
-    BrowseArea = Create_Browser_Area();
-    gtk_paned_pack1(GTK_PANED(MainWindowHPaned),BrowseArea,TRUE,TRUE);
-
-    /* Vertical box for FileArea + TagArea */
-    VBox = gtk_box_new(GTK_ORIENTATION_VERTICAL,0);
-    gtk_paned_pack2(GTK_PANED(MainWindowHPaned),VBox,FALSE,FALSE);
-    gtk_widget_show(VBox);
-
-    /* File */
-    FileArea = Create_File_Area();
-    gtk_box_pack_start(GTK_BOX(VBox),FileArea,FALSE,FALSE,0);
-
-    /* Tag */
-    TagArea = Create_Tag_Area();
-    gtk_box_pack_start(GTK_BOX(VBox),TagArea,FALSE,FALSE,0);
-
-    /* Vertical pane for Browser Area + FileArea + TagArea */
-    MainWindowVPaned = gtk_paned_new(GTK_ORIENTATION_VERTICAL);
-    gtk_box_pack_start(GTK_BOX(MainVBox),MainWindowVPaned,TRUE,TRUE,0);
-    gtk_paned_pack1(GTK_PANED(MainWindowVPaned),MainWindowHPaned,TRUE,FALSE);
-    gtk_paned_set_position(GTK_PANED(MainWindowVPaned),PANE_HANDLE_POSITION4);
-    gtk_widget_show(MainWindowVPaned);
-
-
-    /* Log */
-    LogArea = Create_Log_Area();
-    gtk_paned_pack2(GTK_PANED(MainWindowVPaned),LogArea,FALSE,TRUE);
-
-    /* Horizontal box for Status bar + Progress bar */
-    HBox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0);
-    gtk_box_pack_start(GTK_BOX(MainVBox),HBox,FALSE,FALSE,0);
-    gtk_widget_show(HBox);
-
-    /* Status bar */
-    StatusArea = Create_Status_Bar();
-    gtk_box_pack_start(GTK_BOX(HBox),StatusArea,TRUE,TRUE,0);
-
-    /* Progress bar */
-    ProgressArea = Create_Progress_Bar();
-    gtk_box_pack_end(GTK_BOX(HBox),ProgressArea,FALSE,FALSE,0);
-
-    gtk_widget_show(MainWindow);
-
-    if (SET_MAIN_WINDOW_POSITION)
-        gtk_window_move(GTK_WINDOW(MainWindow), MAIN_WINDOW_X, MAIN_WINDOW_Y);
-
-    /* Load the default dir when the UI is created and displayed
-     * to the screen and open also the scanner window */
-    idle_handler_id = g_idle_add((GSourceFunc)Init_Load_Default_Dir,NULL);
-    g_source_set_name_by_id (idle_handler_id, "Init idle function");
-
-    gtk_main ();
+    etfilelist = g_list_reverse (etfilelist);
+    toreturn = Save_List_Of_Files(etfilelist, force_saving_files);
+    g_list_free(etfilelist);
+    return toreturn;
 }
 
 /*
- * check_for_hidden_path_in_tree:
- * @arg: the path to check
- *
- * Recursively check for a hidden path in the directory tree given by @arg. If
- * a hidden path is found, set BROWSE_HIDDEN to 1.
+ * Save_List_Of_Files: Function to save a list of files.
+ *  - force_saving_files = TRUE => force saving the file even if it wasn't changed
+ *  - force_saving_files = FALSE => force saving only the changed files
  */
-static void
-check_for_hidden_path_in_tree (GFile *arg)
+static gint
+Save_List_Of_Files (GList *etfilelist, gboolean force_saving_files)
 {
-    GFile *file = NULL;
-    GFile *parent;
-    GFileInfo *info;
-    GError *err = NULL;
+    EtApplicationWindow *window;
+    gint       progress_bar_index;
+    gint       saving_answer;
+    gint       nb_files_to_save;
+    gint       nb_files_changed_by_ext_program;
+    gchar     *msg;
+    gchar      progress_bar_text[30];
+    GList *l;
+    ET_File   *etfile_save_position = NULL;
+    File_Tag  *FileTag;
+    File_Name *FileNameNew;
+    double     fraction;
+    GAction *action;
+    GtkWidget *widget_focused;
+    GtkTreePath *currentPath = NULL;
+
+    g_return_val_if_fail (ETCore != NULL, FALSE);
+
+    window = ET_APPLICATION_WINDOW (MainWindow);
 
-    /* Not really the parent until an iteration through the loop below. */
-    parent = g_file_dup (arg);
+    /* Save the current position in the list */
+    etfile_save_position = ETCore->ETFileDisplayed;
+
+    /* Save the current displayed data */
+    ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
+
+    /* Save widget that has current focus, to give it again the focus after saving */
+    widget_focused = gtk_window_get_focus(GTK_WINDOW(MainWindow));
 
-    do
+    /* Count the number of files to save */
+    /* Count the number of files changed by an external program */
+    nb_files_to_save = 0;
+    nb_files_changed_by_ext_program = 0;
+
+    for (l = etfilelist; l != NULL; l = g_list_next (l))
     {
-        info = g_file_query_info (parent,
-                                  G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN,
-                                  G_FILE_QUERY_INFO_NONE, NULL, &err);
+        GFile *file;
+        GFileInfo *fileinfo;
 
-        if (info == NULL)
-        {
-            g_message ("Error querying file information (%s)", err->message);
-            g_clear_error (&err);
+        ET_File *ETFile = (ET_File *)l->data;
+        File_Tag  *FileTag  = (File_Tag *)ETFile->FileTag->data;
+        File_Name *FileName = (File_Name *)ETFile->FileNameNew->data;
+        gchar *filename_cur = ((File_Name *)ETFile->FileNameCur->data)->value;
+        gchar *filename_cur_utf8 = ((File_Name *)ETFile->FileNameCur->data)->value_utf8;
+        gchar *basename_cur_utf8 = g_path_get_basename(filename_cur_utf8);
 
-            if (file)
-            {
-                g_clear_object (&file);
-            }
-            g_object_unref (parent);
-            break;
-        }
-        else
+        // Count only the changed files or all files if force_saving_files==TRUE
+        if ( force_saving_files
+        || (FileName && FileName->saved==FALSE) || (FileTag && FileTag->saved==FALSE) )
+            nb_files_to_save++;
+
+        file = g_file_new_for_path (filename_cur);
+        fileinfo = g_file_query_info (file, G_FILE_ATTRIBUTE_TIME_MODIFIED,
+                                      G_FILE_QUERY_INFO_NONE, NULL, NULL);
+        g_object_unref (file);
+
+        if (fileinfo)
         {
-            if (g_file_info_get_is_hidden (info))
+            if (ETFile->FileModificationTime
+                != g_file_info_get_attribute_uint64 (fileinfo,
+                                                     G_FILE_ATTRIBUTE_TIME_MODIFIED))
             {
-                /* If the user saves the configuration for this session,
-                 * this value will be saved. */
-                BROWSE_HIDDEN_DIR = 1;
+                nb_files_changed_by_ext_program++;
             }
-        }
 
-        g_object_unref (info);
-
-        if (file)
-        {
-            g_clear_object (&file);
+            g_object_unref (fileinfo);
         }
-
-        file = parent;
+        g_free(basename_cur_utf8);
     }
-    while ((parent = g_file_get_parent (file)) != NULL);
 
-    if (file)
-    {
-        g_clear_object (&file);
-    }
-}
+    /* Initialize status bar */
+    et_application_window_progress_set_fraction (window, 0.0);
+    progress_bar_index = 0;
+    g_snprintf(progress_bar_text, 30, "%d/%d", progress_bar_index, nb_files_to_save);
+    et_application_window_progress_set_text (window, progress_bar_text);
 
-/*
- * on_application_open:
- * @application: the application
- * @files: array of files to open
- * @n_files: the number of files
- * @hint: hint of method to open files, currently empty
- * @user_data: user data set when the signal handler was connected
- *
- * Handle the files passed to the primary instance. The local instance
- * arguments are handled in EtApplication.
- *
- * Returns: the exit status to be passed to the calling process
- */
-static void
-on_application_open (GApplication *application, GFile **files, gint n_files,
-                     gchar *hint, gpointer user_data)
-{
-    GtkWindow *main_window;
-    gboolean activated;
-    GFile *arg;
-    GFile *parent;
-    GFileInfo *info;
-    GError *err = NULL;
-    GFileType type;
-    gchar *path;
-    gchar *path_utf8;
+    /* Set to unsensitive all command buttons (except Quit button) */
+    et_application_window_disable_command_actions (window);
+    et_application_window_browser_set_sensitive (window, FALSE);
+    et_application_window_tag_area_set_sensitive (window, FALSE);
+    et_application_window_file_area_set_sensitive (window, FALSE);
 
-    main_window = et_application_get_window (ET_APPLICATION (application));
-    activated = main_window ? TRUE : FALSE;
+    /* Show msgbox (if needed) to ask confirmation ('SF' for Save File) */
+    SF_HideMsgbox_Write_Tag = FALSE;
+    SF_HideMsgbox_Rename_File = FALSE;
 
-    /* Only take the first file; ignore the rest. */
-    arg = files[0];
+    Main_Stop_Button_Pressed = FALSE;
+    /* Activate the stop button. */
+    action = g_action_map_lookup_action (G_ACTION_MAP (MainWindow), "stop");
+    g_simple_action_set_enabled (G_SIMPLE_ACTION (action), FALSE);
 
-    check_for_hidden_path_in_tree (arg);
+    /*
+     * Check if file was changed by an external program
+     */
+    if (nb_files_changed_by_ext_program > 0)
+    {
+        // Some files were changed by other program than EasyTAG
+        GtkWidget *msgdialog = NULL;
+        gint response;
 
-    path = g_file_get_path (arg);
-    path_utf8 = filename_to_display (path);
-    info = g_file_query_info (arg, G_FILE_ATTRIBUTE_STANDARD_TYPE,
-                              G_FILE_QUERY_INFO_NONE, NULL, &err);
+        msgdialog = gtk_message_dialog_new(GTK_WINDOW(MainWindow),
+                                           GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+                                           GTK_MESSAGE_WARNING,
+                                           GTK_BUTTONS_NONE,
+                                           ngettext ("A file was changed by an external program",
+                                                     "%d files were changed by an external program",
+                                                     nb_files_changed_by_ext_program),
+                                           nb_files_changed_by_ext_program);
+        gtk_dialog_add_buttons (GTK_DIALOG (msgdialog), _("_Discard"),
+                                GTK_RESPONSE_NO, _("_Save"), GTK_RESPONSE_YES,
+                                NULL);
+        gtk_dialog_set_default_response (GTK_DIALOG (msgdialog),
+                                         GTK_RESPONSE_YES);
+        gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(msgdialog),"%s",_("Do you want to continue saving the file?"));
+        gtk_window_set_title(GTK_WINDOW(msgdialog),_("Quit"));
 
-    if (info == NULL)
-    {
-        if (activated)
-        {
-            Log_Print (LOG_ERROR, _("Error while querying information for file: '%s' (%s)"),
-                       path_utf8, err->message);
+        response = gtk_dialog_run(GTK_DIALOG(msgdialog));
+        gtk_widget_destroy(msgdialog);
 
-        }
-        else
+        switch (response)
         {
-            g_warning ("Error while querying information for file: '%s' (%s)",
-                       path_utf8, err->message);
+            case GTK_RESPONSE_YES:
+                break;
+            case GTK_RESPONSE_NO:
+            case GTK_RESPONSE_DELETE_EVENT:
+                /* Skip the following loop. */
+                Main_Stop_Button_Pressed = TRUE;
+                break;
+            default:
+                g_assert_not_reached ();
+                break;
         }
-
-        g_free (path);
-        g_free (path_utf8);
-        g_error_free (err);
-        return;
     }
 
-    type = g_file_info_get_file_type (info);
-
-    switch (type)
+    for (l = etfilelist; l != NULL && !Main_Stop_Button_Pressed;
+         l = g_list_next (l))
     {
-        case G_FILE_TYPE_DIRECTORY:
-            if (activated)
-            {
-                Browser_Tree_Select_Dir (path);
-                g_free (path);
-            }
-            else
-            {
-                INIT_DIRECTORY = path;
-            }
+        FileTag = ((ET_File *)l->data)->FileTag->data;
+        FileNameNew = ((ET_File *)l->data)->FileNameNew->data;
 
-            g_free (path_utf8);
-            g_object_unref (info);
-            break;
-        case G_FILE_TYPE_REGULAR:
-            /* When given a file, load the parent directory. */
-            parent = g_file_get_parent (arg);
+        /* We process only the files changed and not saved, or we force to save all
+         * files if force_saving_files==TRUE */
+        if ( force_saving_files
+        || FileTag->saved == FALSE || FileNameNew->saved == FALSE )
+        {
+            /* ET_Display_File_Data_To_UI ((ET_File *)l->data);
+             * Use of 'currentPath' to try to increase speed. Indeed, in many
+             * cases, the next file to select, is the next in the list. */
+            currentPath = et_application_window_browser_select_file_by_et_file2 (window,
+                                                                                (ET_File *)l->data,
+                                                                                FALSE,
+                                                                                currentPath);
 
-            if (parent)
-            {
-                g_free (path_utf8);
-                g_free (path);
+            fraction = (++progress_bar_index) / (double) nb_files_to_save;
+            et_application_window_progress_set_fraction (window, fraction);
+            g_snprintf(progress_bar_text, 30, "%d/%d", progress_bar_index, nb_files_to_save);
+            et_application_window_progress_set_text (window,
+                                                     progress_bar_text);
 
-                if (activated)
-                {
-                    gchar *parent_path;
+            /* Needed to refresh status bar */
+            while (gtk_events_pending())
+                gtk_main_iteration();
+
+            // Save tag and rename file
+            saving_answer = Save_File ((ET_File *)l->data,
+                                       nb_files_to_save > 1 ? TRUE : FALSE,
+                                       force_saving_files);
 
-                    parent_path = g_file_get_path (arg);
-                    Browser_Tree_Select_Dir (parent_path);
+            if (saving_answer == -1)
+            {
+                /* Stop saving files + reinit progress bar */
+                et_application_window_progress_set_text (window, "");
+                et_application_window_progress_set_fraction (window, 0.0);
+                et_application_window_status_bar_message (window,
+                                                          _("Saving files was stopped"),
+                                                          TRUE);
+                /* To update state of command buttons */
+                et_application_window_update_actions (window);
+                et_application_window_browser_set_sensitive (window, TRUE);
+                et_application_window_tag_area_set_sensitive (window, TRUE);
+                et_application_window_file_area_set_sensitive (window, TRUE);
 
-                    g_free (parent_path);
-                }
-                else
+                if (currentPath)
                 {
-                    INIT_DIRECTORY = g_file_get_path (parent);
+                    gtk_tree_path_free (currentPath);
                 }
-
-                g_object_unref (parent);
-                g_object_unref (info);
-                break;
+                return -1; /* We stop all actions */
             }
-            /* Fall through on error. */
-        default:
-            Log_Print (LOG_WARNING, _("Cannot open path '%s'"), path_utf8);
-            g_free (path);
-            g_free (path_utf8);
-            return;
-            break;
+        }
     }
 
-    if (!activated)
-    {
-        common_init (application);
-    }
-}
+    if (currentPath)
+        gtk_tree_path_free(currentPath);
 
-/*
- * on_application_activate:
- * @application: the application
- * @user_data: user data set when the signal handler was connected
- *
- * Handle the application being activated, which occurs after startup and if
- * no files are opened.
- */
-static void
-on_application_activate (GApplication *application, gpointer user_data)
-{
-    GtkWindow *main_window;
-
-    main_window = et_application_get_window (ET_APPLICATION (application));
-    if (main_window != NULL)
-    {
-        gtk_window_present (main_window);
-    }
+    if (Main_Stop_Button_Pressed)
+        msg = g_strdup (_("Saving files was stopped"));
     else
-    {
-        common_init (application);
-    }
-}
-
-/*
- * on_application_shutdown:
- * @application: the application
- * @user_data: user data set when the signal handler was connected
- *
- * Handle the application being shutdown, which occurs after the main loop has
- * exited and before returning from g_application_run().
- */
-static void
-on_application_shutdown (GApplication *application, gpointer user_data)
-{
-    ET_Core_Destroy ();
-    Charset_Insert_Locales_Destroy ();
-}
-
-/********
- * Main *
- ********/
-int main (int argc, char *argv[])
-{
-    EtApplication *application;
-    gint status;
-
-#if ENABLE_NLS
-    textdomain (GETTEXT_PACKAGE);
-    bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
-    bind_textdomain_codeset (PACKAGE_TARNAME, "UTF-8");
-#endif /* ENABLE_NLS */
-
-    INIT_DIRECTORY = NULL;
-
-#if !GLIB_CHECK_VERSION (2, 35, 1)
-    g_type_init ();
-#endif /* !GLIB_CHECK_VERSION (2, 35, 1) */
-
-    application = et_application_new ();
-    g_signal_connect (application, "open", G_CALLBACK (on_application_open),
-                      NULL);
-    g_signal_connect (application, "activate",
-                      G_CALLBACK (on_application_activate), NULL);
-    g_signal_connect (application, "shutdown",
-                      G_CALLBACK (on_application_shutdown), NULL);
-    status = g_application_run (G_APPLICATION (application), argc, argv);
-    g_object_unref (application);
-
-    return status;
-}
+        msg = g_strdup (_("All files have been saved"));
 
+    Main_Stop_Button_Pressed = FALSE;
+    action = g_action_map_lookup_action (G_ACTION_MAP (MainWindow), "stop");
+    g_simple_action_set_enabled (G_SIMPLE_ACTION (action), FALSE);
 
-static GtkWidget *
-Create_Browser_Area (void)
-{
-    GtkWidget *Frame;
-    GtkWidget *Tree;
+    /* Return to the saved position in the list */
+    ET_Display_File_Data_To_UI(etfile_save_position);
+    et_application_window_browser_select_file_by_et_file (ET_APPLICATION_WINDOW (MainWindow),
+                                                          etfile_save_position,
+                                                          TRUE);
 
-    Frame = gtk_frame_new(_("Browser"));
-    gtk_container_set_border_width(GTK_CONTAINER(Frame), 2);
+    et_application_window_browser_toggle_display_mode (window);
 
-    Tree = Create_Browser_Items(MainWindow);
-    gtk_container_add(GTK_CONTAINER(Frame),Tree);
+    /* To update state of command buttons */
+    et_application_window_update_actions (ET_APPLICATION_WINDOW (MainWindow));
+    et_application_window_browser_set_sensitive (window, TRUE);
+    et_application_window_tag_area_set_sensitive (window, TRUE);
+    et_application_window_file_area_set_sensitive (window, TRUE);
 
-    /* Don't load init dir here because Tag area hasn't been yet created!.
-     * It will be load at the end of the main function */
-    //Browser_Tree_Select_Dir(DEFAULT_PATH_TO_MP3);
+    /* Give again focus to the first entry, else the focus is passed to another */
+    gtk_widget_grab_focus(GTK_WIDGET(widget_focused));
 
-    gtk_widget_show(Frame);
-    return Frame;
+    et_application_window_progress_set_text (window, "");
+    et_application_window_progress_set_fraction (window, 0.0);
+    et_application_window_status_bar_message (window, msg, TRUE);
+    g_free(msg);
+    et_application_window_browser_refresh_list (window);
+    return TRUE;
 }
 
 
-static GtkWidget *
-Create_File_Area (void)
-{
-    GtkWidget *VBox, *HBox;
-    GtkWidget *Separator;
-
-
-    FileFrame = gtk_frame_new(_("File"));
-    gtk_container_set_border_width(GTK_CONTAINER(FileFrame),2);
 
-    VBox = gtk_box_new(GTK_ORIENTATION_VERTICAL,0);
-    gtk_container_add(GTK_CONTAINER(FileFrame),VBox);
-    gtk_container_set_border_width(GTK_CONTAINER(VBox),2);
-
-    /* HBox for FileEntry and IconBox */
-    HBox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,2);
-    gtk_box_pack_start(GTK_BOX(VBox),HBox,TRUE,TRUE,0);
-
-    /* File index (position in list + list length) */
-    FileIndex = gtk_label_new("0/0:");
-    gtk_box_pack_start(GTK_BOX(HBox),FileIndex,FALSE,FALSE,0);
-
-    /* Filename. */
-    FileEntry = gtk_entry_new();
-    gtk_editable_set_editable(GTK_EDITABLE(FileEntry), TRUE);
-    gtk_box_pack_start(GTK_BOX(HBox),FileEntry,TRUE,TRUE,2);
-
-    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(FileEntry));
-
-
-    /*
-     *  File Infos
-     */
-    HeaderInfosTable = et_grid_new(3,5);
-    gtk_container_add(GTK_CONTAINER(VBox),HeaderInfosTable);
-    gtk_container_set_border_width(GTK_CONTAINER(HeaderInfosTable),2);
-    gtk_grid_set_row_spacing (GTK_GRID (HeaderInfosTable), 1);
-    gtk_grid_set_column_spacing (GTK_GRID (HeaderInfosTable), 2);
-
-    VersionLabel = gtk_label_new(_("Encoder:"));
-    gtk_grid_attach (GTK_GRID (HeaderInfosTable), VersionLabel, 0, 0, 1, 1);
-    VersionValueLabel = gtk_label_new("");
-    gtk_grid_attach (GTK_GRID (HeaderInfosTable), VersionValueLabel, 1, 0, 1,
-                     1);
-    gtk_misc_set_alignment(GTK_MISC(VersionLabel),1,0.5);
-    gtk_misc_set_alignment(GTK_MISC(VersionValueLabel),0,0.5);
-
-    BitrateLabel = gtk_label_new(_("Bitrate:"));
-    gtk_grid_attach (GTK_GRID (HeaderInfosTable), BitrateLabel, 0, 1, 1, 1);
-    BitrateValueLabel = gtk_label_new("");
-    gtk_grid_attach (GTK_GRID (HeaderInfosTable), BitrateValueLabel, 1, 1, 1,
-                     1);
-    gtk_misc_set_alignment(GTK_MISC(BitrateLabel),1,0.5);
-    gtk_misc_set_alignment(GTK_MISC(BitrateValueLabel),0,0.5);
-
-    /* Translators: Please try to keep this string as short as possible as it
-     * is shown in a narrow column. */
-    SampleRateLabel = gtk_label_new (_("Frequency:"));
-    gtk_grid_attach (GTK_GRID (HeaderInfosTable), SampleRateLabel, 0, 2, 1, 1);
-    SampleRateValueLabel = gtk_label_new("");
-    gtk_grid_attach (GTK_GRID (HeaderInfosTable), SampleRateValueLabel, 1, 2,
-                     1, 1);
-    gtk_misc_set_alignment(GTK_MISC(SampleRateLabel),1,0.5);
-    gtk_misc_set_alignment(GTK_MISC(SampleRateValueLabel),0,0.5);
-
-    Separator = gtk_separator_new(GTK_ORIENTATION_VERTICAL);
-    gtk_grid_attach (GTK_GRID (HeaderInfosTable), Separator, 2, 0, 1, 4);
-
-    ModeLabel = gtk_label_new(_("Mode:"));
-    gtk_grid_attach (GTK_GRID (HeaderInfosTable), ModeLabel, 3, 0, 1, 1);
-    ModeValueLabel = gtk_label_new("");
-    gtk_grid_attach (GTK_GRID (HeaderInfosTable), ModeValueLabel, 4, 0, 1, 1);
-    gtk_misc_set_alignment(GTK_MISC(ModeLabel),1,0.5);
-    gtk_misc_set_alignment(GTK_MISC(ModeValueLabel),0,0.5);
-
-    SizeLabel = gtk_label_new(_("Size:"));
-    gtk_grid_attach (GTK_GRID (HeaderInfosTable), SizeLabel, 3, 1, 1, 1);
-    SizeValueLabel = gtk_label_new("");
-    gtk_grid_attach (GTK_GRID (HeaderInfosTable), SizeValueLabel, 4, 1, 1, 1);
-    gtk_misc_set_alignment(GTK_MISC(SizeLabel),1,0.5);
-    gtk_misc_set_alignment(GTK_MISC(SizeValueLabel),0,0.5);
-
-    DurationLabel = gtk_label_new(_("Duration:"));
-    gtk_grid_attach (GTK_GRID (HeaderInfosTable), DurationLabel, 3, 2, 1, 1);
-    DurationValueLabel = gtk_label_new("");
-    gtk_grid_attach (GTK_GRID (HeaderInfosTable), DurationValueLabel, 4, 2, 1,
-                     1);
-    gtk_misc_set_alignment(GTK_MISC(DurationLabel),1,0.5);
-    gtk_misc_set_alignment(GTK_MISC(DurationValueLabel),0,0.5);
-
-    gtk_widget_show(FileFrame);
-    gtk_widget_show(VBox);
-    gtk_widget_show(HBox);
-    gtk_widget_show(FileIndex);
-    gtk_widget_show(FileEntry);
-    if (SHOW_HEADER_INFO)
-        gtk_widget_show_all(HeaderInfosTable);
-    return FileFrame;
-}
-
-#include "data/pixmaps/sequence_track.xpm"
-static GtkWidget *
-Create_Tag_Area (void)
+/*
+ * Save changes of the ETFile (write tag and rename file)
+ *  - multiple_files = TRUE  : when saving files, a msgbox appears with ability
+ *                             to do the same action for all files.
+ *  - multiple_files = FALSE : appears only a msgbox to ask confirmation.
+ */
+static gint
+Save_File (ET_File *ETFile, gboolean multiple_files,
+           gboolean force_saving_files)
 {
-    GtkWidget *Separator;
-    GtkWidget *Table;
-    GtkWidget *Label;
-    GtkWidget *Icon;
-    GtkWidget *PictureScrollWindow;
-    GtkWidget *toolbar;
-    GtkToolItem *toolitem;
-    GIcon *icon;
-    GtkWidget *image;
-    GtkWidget *VBox;
-    GList *focusable_widgets_list = NULL;
-    //GtkWidget *ScrollWindow;
-    //GtkTextBuffer *TextBuffer;
-    GtkEntryCompletion *completion;
-    gint MButtonSize = 13;
-    gint TablePadding = 2;
-
-    // For Picture
-    static const GtkTargetEntry drops[] = { { "text/uri-list", 0, TARGET_URI_LIST } };
-    GtkCellRenderer *renderer;
-    GtkTreeViewColumn *column;
-    GtkTreeSelection *selection;
-
-
-    /* Main Frame */
-    TagFrame = gtk_frame_new(_("Tag"));
-    gtk_container_set_border_width(GTK_CONTAINER(TagFrame),2);
-
-    /* Box for the notebook (only for setting a border) */
-    VBox = gtk_box_new(GTK_ORIENTATION_VERTICAL,0);
-    gtk_container_add(GTK_CONTAINER(TagFrame),VBox);
-    gtk_container_set_border_width(GTK_CONTAINER(VBox),2);
+    File_Tag  *FileTag;
+    File_Name *FileNameNew;
+    gint stop_loop = 0;
+    //struct stat   statbuf;
+    //gchar *filename_cur = ((File_Name *)ETFile->FileNameCur->data)->value;
+    gchar *filename_cur_utf8 = ((File_Name *)ETFile->FileNameCur->data)->value_utf8;
+    gchar *filename_new_utf8 = ((File_Name *)ETFile->FileNameNew->data)->value_utf8;
+    gchar *basename_cur_utf8, *basename_new_utf8;
+    gchar *dirname_cur_utf8, *dirname_new_utf8;
 
-    /*
-     * Note book
-     */
-    TagNoteBook = gtk_notebook_new();
-    gtk_notebook_popup_enable(GTK_NOTEBOOK(TagNoteBook));
-    //gtk_container_add(GTK_CONTAINER(TagFrame),TagNoteBook);
-    gtk_box_pack_start(GTK_BOX(VBox),TagNoteBook,TRUE,TRUE,0);
-    gtk_notebook_set_tab_pos(GTK_NOTEBOOK(TagNoteBook),GTK_POS_TOP);
-    gtk_notebook_set_show_border(GTK_NOTEBOOK(TagNoteBook),FALSE);
-    gtk_notebook_popup_enable(GTK_NOTEBOOK(TagNoteBook));
+    g_return_val_if_fail (ETFile != NULL, 0);
 
-    /*
-     * 1 - Page for common tag fields
-     */
-    Label = gtk_label_new(_("Common"));
-
-    Table = et_grid_new (11, 11);
-    gtk_notebook_append_page (GTK_NOTEBOOK (TagNoteBook), Table, Label);
-    gtk_container_set_border_width(GTK_CONTAINER(Table),2);
-
-    /* Title */
-    TitleLabel = gtk_label_new(_("Title:"));
-    et_grid_attach_full (GTK_GRID (Table), TitleLabel, 0, 0, 1, 1, FALSE,
-                         FALSE, TablePadding, TablePadding);
-    gtk_misc_set_alignment(GTK_MISC(TitleLabel),1,0.5);
-
-    TitleEntry = gtk_entry_new();
-    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (TitleEntry),
-                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
-    et_grid_attach_full (GTK_GRID (Table), TitleEntry, 1, 0, 9, 1, TRUE, TRUE,
-                         TablePadding, TablePadding);
-
-    et_tag_field_connect_signals (GTK_ENTRY (TitleEntry));
-    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (TitleEntry),
-                                     GTK_ENTRY_ICON_SECONDARY,
-                                     _("Tag selected files with this title"));
-
-    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(TitleEntry));
-
-    /* Artist */
-    ArtistLabel = gtk_label_new(_("Artist:"));
-    et_grid_attach_full (GTK_GRID (Table), ArtistLabel, 0, 1, 1, 1, FALSE,
-                         FALSE, TablePadding, TablePadding);
-    gtk_misc_set_alignment(GTK_MISC(ArtistLabel),1,0.5);
-
-    ArtistEntry = gtk_entry_new();
-    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (ArtistEntry),
-                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
-    et_grid_attach_full (GTK_GRID (Table), ArtistEntry, 1, 1, 9, 1, TRUE, TRUE,
-                         TablePadding,TablePadding);
-
-    et_tag_field_connect_signals (GTK_ENTRY (ArtistEntry));
-    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (ArtistEntry),
-                                     GTK_ENTRY_ICON_SECONDARY,
-                                     _("Tag selected files with this artist"));
-
-    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(ArtistEntry));
-
-    /* Album Artist */
-    AlbumArtistLabel = gtk_label_new(_("Album artist:"));
-    et_grid_attach_full (GTK_GRID (Table), AlbumArtistLabel, 0, 2, 1, 1, FALSE,
-                         FALSE, TablePadding, TablePadding);
-    gtk_misc_set_alignment(GTK_MISC(AlbumArtistLabel),1,0.5);
-
-    AlbumArtistEntry = gtk_entry_new();
-    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (AlbumArtistEntry),
-                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
-    et_grid_attach_full (GTK_GRID (Table), AlbumArtistEntry, 1, 2, 9, 1, TRUE,
-                         TRUE, TablePadding, TablePadding);
-
-    et_tag_field_connect_signals (GTK_ENTRY (AlbumArtistEntry));
-    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (AlbumArtistEntry),
-                                     GTK_ENTRY_ICON_SECONDARY,
-                                     _("Tag selected files with this album artist"));
-
-    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(AlbumArtistEntry));
-
-    /* Album */
-    AlbumLabel = gtk_label_new(_("Album:"));
-    et_grid_attach_full (GTK_GRID (Table), AlbumLabel, 0, 3, 1, 1, FALSE,
-                         FALSE, TablePadding, TablePadding);
-    gtk_misc_set_alignment(GTK_MISC(AlbumLabel),1,0.5);
-
-    AlbumEntry = gtk_entry_new();
-    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (AlbumEntry),
-                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
-    et_grid_attach_full (GTK_GRID (Table), AlbumEntry, 1, 3, 6, 1, TRUE, TRUE,
-                         TablePadding,TablePadding);
-
-    et_tag_field_connect_signals (GTK_ENTRY (AlbumEntry));
-    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (AlbumEntry),
-                                     GTK_ENTRY_ICON_SECONDARY,
-                                     _("Tag selected files with this album name"));
-
-    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(AlbumEntry));
-
-    /* Disc Number */
-    DiscNumberLabel = gtk_label_new(_("CD:"));
-    et_grid_attach_full (GTK_GRID (Table), DiscNumberLabel, 8, 3, 1, 1, FALSE,
-                         FALSE, TablePadding, TablePadding);
-    gtk_misc_set_alignment(GTK_MISC(DiscNumberLabel),1,0.5);
-
-    DiscNumberEntry = gtk_entry_new();
-    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (DiscNumberEntry),
-                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
-    et_grid_attach_full (GTK_GRID (Table), DiscNumberEntry, 9, 3, 1, 1, TRUE,
-                         TRUE, TablePadding, TablePadding);
-    gtk_entry_set_width_chars (GTK_ENTRY (DiscNumberEntry), 3);
-    /* FIXME should allow to type only something like : 1/3. */
-    /*g_signal_connect(G_OBJECT(GTK_ENTRY(DiscNumberEntry)),"insert_text",G_CALLBACK(Insert_Only_Digit),NULL); */
-
-    et_tag_field_connect_signals (GTK_ENTRY (DiscNumberEntry));
-    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (DiscNumberEntry),
-                                     GTK_ENTRY_ICON_SECONDARY,
-                                     _("Tag selected files with this disc number"));
-
-    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(DiscNumberEntry));
-
-    /* Year */
-    YearLabel = gtk_label_new(_("Year:"));
-    et_grid_attach_full (GTK_GRID (Table), YearLabel, 0, 4, 1, 1, FALSE, FALSE,
-                         TablePadding, TablePadding);
-    gtk_misc_set_alignment(GTK_MISC(YearLabel),1,0.5);
-
-    YearEntry = gtk_entry_new();
-    gtk_entry_set_max_length(GTK_ENTRY(YearEntry), 4);
-    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (YearEntry),
-                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
-    et_grid_attach_full (GTK_GRID (Table), YearEntry, 1, 4, 1, 1, TRUE, TRUE,
-                         TablePadding, TablePadding);
-    gtk_entry_set_width_chars (GTK_ENTRY (YearEntry), 5);
-    g_signal_connect (G_OBJECT (YearEntry), "insert-text",
-                      G_CALLBACK (Insert_Only_Digit), NULL);
-    g_signal_connect(G_OBJECT(YearEntry),"activate",G_CALLBACK(Parse_Date),NULL);
-    g_signal_connect(G_OBJECT(YearEntry),"focus-out-event",G_CALLBACK(Parse_Date),NULL);
-
-    et_tag_field_connect_signals (GTK_ENTRY (YearEntry));
-    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (YearEntry),
-                                     GTK_ENTRY_ICON_SECONDARY,
-                                     _("Tag selected files with this year"));
-
-    /* Small vertical separator */
-    Separator = gtk_separator_new(GTK_ORIENTATION_VERTICAL);
-    et_grid_attach_full (GTK_GRID (Table), Separator, 3, 4, 1, 1, FALSE, FALSE,
-                         TablePadding,TablePadding);
-
-
-    /* Track and Track total */
-    TrackMButtonSequence = gtk_button_new();
-    gtk_widget_set_size_request(TrackMButtonSequence,MButtonSize,MButtonSize);
-    et_grid_attach_full (GTK_GRID (Table), TrackMButtonSequence, 4, 4, 1, 1,
-                         FALSE, FALSE, TablePadding, TablePadding);
-    g_signal_connect(G_OBJECT(TrackMButtonSequence),"clicked",G_CALLBACK(Mini_Button_Clicked),NULL);
-    gtk_widget_set_tooltip_text(TrackMButtonSequence,_("Number selected tracks sequentially. "
-                                                     "Starts at 01 in each subdirectory."));
-    // Pixmap into TrackMButtonSequence button
-    //Icon = gtk_image_new_from_stock("easytag-sequence-track", GTK_ICON_SIZE_BUTTON); // FIX ME : it doesn't display the good size of the '#'
-    Icon = Create_Xpm_Image((const char **)sequence_track_xpm);
-    gtk_container_add(GTK_CONTAINER(TrackMButtonSequence),Icon);
-    gtk_widget_set_can_default(TrackMButtonSequence,TRUE); // To have enough space to display the icon
-    gtk_widget_set_can_focus(TrackMButtonSequence,FALSE);   // To have enough space to display the icon
-
-    TrackLabel = gtk_label_new(_("Track #:"));
-    et_grid_attach_full (GTK_GRID (Table), TrackLabel, 5, 4, 1, 1, FALSE,
-                         FALSE, TablePadding, TablePadding);
-    gtk_misc_set_alignment(GTK_MISC(TrackLabel),1,0.5);
-
-    if (TrackEntryComboModel != NULL)
-        gtk_list_store_clear(TrackEntryComboModel);
-    else
-        TrackEntryComboModel = gtk_list_store_new(MISC_COMBO_COUNT, G_TYPE_STRING);
-
-    TrackEntryCombo = gtk_combo_box_new_with_model_and_entry(GTK_TREE_MODEL(TrackEntryComboModel));
-    gtk_combo_box_set_entry_text_column(GTK_COMBO_BOX(TrackEntryCombo),MISC_COMBO_TEXT);
-    et_grid_attach_full (GTK_GRID (Table), TrackEntryCombo, 6, 4, 1, 1, TRUE,
-                         TRUE, TablePadding, TablePadding);
-    gtk_combo_box_set_wrap_width(GTK_COMBO_BOX(TrackEntryCombo),3); // Three columns to display track numbers list
-
-    gtk_entry_set_width_chars (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (TrackEntryCombo))),
-                               2);
-    g_signal_connect(G_OBJECT(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(TrackEntryCombo)))),"insert_text",
-        G_CALLBACK(Insert_Only_Digit),NULL);
-
-    Label = gtk_label_new("/");
-    et_grid_attach_full (GTK_GRID (Table), Label, 7, 4, 1, 1, FALSE, FALSE,
-                         TablePadding, TablePadding);
-    gtk_misc_set_alignment(GTK_MISC(Label),0.5,0.5);
-
-    TrackMButtonNbrFiles = gtk_button_new();
-    gtk_widget_set_size_request(TrackMButtonNbrFiles,MButtonSize,MButtonSize);
-    et_grid_attach_full (GTK_GRID (Table), TrackMButtonNbrFiles, 8, 4, 1, 1,
-                         FALSE, FALSE, TablePadding, TablePadding);
-    g_signal_connect(G_OBJECT(TrackMButtonNbrFiles),"clicked",G_CALLBACK(Mini_Button_Clicked),NULL);
-    gtk_widget_set_tooltip_text(TrackMButtonNbrFiles,_("Set the number of files, in the same directory of the displayed file, to the selected tracks."));
-    // Pixmap into TrackMButtonNbrFiles button
-    //Icon = gtk_image_new_from_stock("easytag-sequence-track", GTK_ICON_SIZE_BUTTON);
-    Icon = Create_Xpm_Image((const char **)sequence_track_xpm);
-    gtk_container_add(GTK_CONTAINER(TrackMButtonNbrFiles),Icon);
-    gtk_widget_set_can_default(TrackMButtonNbrFiles,TRUE); // To have enough space to display the icon
-    gtk_widget_set_can_focus(TrackMButtonNbrFiles,FALSE); // To have enough space to display the icon
-
-    TrackTotalEntry = gtk_entry_new();
-    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (TrackTotalEntry),
-                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
-    et_grid_attach_full (GTK_GRID (Table), TrackTotalEntry, 9, 4, 1, 1, TRUE,
-                         TRUE, TablePadding, TablePadding);
-    gtk_entry_set_width_chars (GTK_ENTRY (TrackTotalEntry), 3);
-    g_signal_connect (G_OBJECT (GTK_ENTRY (TrackTotalEntry)), "insert-text",
-                      G_CALLBACK (Insert_Only_Digit), NULL);
-
-    et_tag_field_connect_signals (GTK_ENTRY (TrackTotalEntry));
-    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (TrackTotalEntry),
-                                     GTK_ENTRY_ICON_SECONDARY,
-                                     _("Tag selected files with this number of tracks"));
-
-
-    /* Genre */
-    GenreLabel = gtk_label_new(_("Genre:"));
-    et_grid_attach_full (GTK_GRID (Table), GenreLabel, 0, 5, 1, 1, FALSE,
-                         FALSE, TablePadding, TablePadding);
-    gtk_misc_set_alignment(GTK_MISC(GenreLabel),1,0.5);
-
-    if (GenreComboModel != NULL)
-        gtk_list_store_clear(GenreComboModel);
-    else
-        GenreComboModel = gtk_list_store_new(MISC_COMBO_COUNT, G_TYPE_STRING);
-    GenreCombo = gtk_combo_box_new_with_model_and_entry(GTK_TREE_MODEL(GenreComboModel));
-    gtk_combo_box_set_entry_text_column(GTK_COMBO_BOX(GenreCombo),MISC_COMBO_TEXT);
-    completion = gtk_entry_completion_new();
-    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (GenreCombo))),
-                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
-    gtk_entry_set_completion(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(GenreCombo))), completion);
-    g_object_unref(completion);
-    gtk_entry_completion_set_model(completion, GTK_TREE_MODEL(GenreComboModel));
-    gtk_entry_completion_set_text_column(completion, 0);
-    gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(GenreComboModel), MISC_COMBO_TEXT, Combo_Alphabetic_Sort, NULL, NULL);
-    gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(GenreComboModel), MISC_COMBO_TEXT, GTK_SORT_ASCENDING);
-    et_grid_attach_full (GTK_GRID (Table), GenreCombo, 1, 5, 9, 1, TRUE, TRUE,
-                         TablePadding, TablePadding);
-    Load_Genres_List_To_UI();
-    gtk_combo_box_set_wrap_width(GTK_COMBO_BOX(GenreCombo),2); // Two columns to display genres list
-
-    et_tag_field_connect_signals (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (GenreCombo))));
-    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (GenreCombo))),
-                                     GTK_ENTRY_ICON_SECONDARY,
-                                     _("Tag selected files with this genre"));
-
-    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(GenreCombo))));
-
-    /* Comment */
-    CommentLabel = gtk_label_new(_("Comment:"));
-    et_grid_attach_full (GTK_GRID (Table), CommentLabel, 0, 6, 1, 1, FALSE,
-                         FALSE, TablePadding, TablePadding);
-    gtk_misc_set_alignment(GTK_MISC(CommentLabel),1,0.5);
-
-    CommentEntry = gtk_entry_new();
-    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (CommentEntry),
-                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
-    et_grid_attach_full (GTK_GRID (Table), CommentEntry, 1, 6, 9, 1, TRUE,
-                         TRUE, TablePadding, TablePadding);
-
-    // Use of a text view instead of an entry...
-    /******ScrollWindow = gtk_scrolled_window_new(NULL,NULL);
-    et_grid_attach_full(GTK_GRID(Table),ScrollWindow,1,5,9,1,FALSE,FALSE,TablePadding,TablePadding);
-    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(ScrollWindow), GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
-    gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(ScrollWindow), GTK_SHADOW_IN);
-    gtk_widget_set_size_request(ScrollWindow,-1,52); // Display ~3 lines...
-    TextBuffer = gtk_text_buffer_new(NULL);
-    CommentView = gtk_text_view_new_with_buffer(TextBuffer);
-    gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(CommentView), GTK_WRAP_WORD); // To not display the horizontal scrollbar
-    gtk_container_add(GTK_CONTAINER(ScrollWindow),CommentView);
-    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(CommentView));
-    *******/
-
-    et_tag_field_connect_signals (GTK_ENTRY (CommentEntry));
-    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (CommentEntry),
-                                     GTK_ENTRY_ICON_SECONDARY,
-                                     _("Tag selected files with this comment"));
-
-    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(CommentEntry));
-    //Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(CommentView));
-
-
-    /* Composer (name of the composers) */
-    ComposerLabel = gtk_label_new(_("Composer:"));
-    et_grid_attach_full (GTK_GRID (Table), ComposerLabel, 0, 7, 1, 1, FALSE,
-                         FALSE, TablePadding, TablePadding);
-    gtk_misc_set_alignment(GTK_MISC(ComposerLabel),1,0.5);
-
-    ComposerEntry = gtk_entry_new();
-    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (ComposerEntry),
-                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
-    et_grid_attach_full (GTK_GRID (Table), ComposerEntry, 1, 7, 9, 1, TRUE,
-                         TRUE, TablePadding, TablePadding);
-
-    et_tag_field_connect_signals (GTK_ENTRY (ComposerEntry));
-    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (ComposerEntry),
-                                     GTK_ENTRY_ICON_SECONDARY,
-                                     _("Tag selected files with this composer"));
-
-    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(ComposerEntry));
-
-
-    /* Translators: Original Artist / Performer. Please try to keep this string
-     * as short as possible, as it must fit into a narrow column. */
-    OrigArtistLabel = gtk_label_new(_("Orig. artist:"));
-    et_grid_attach_full (GTK_GRID (Table), OrigArtistLabel, 0, 8, 1, 1, FALSE,
-                         FALSE, TablePadding, TablePadding);
-    gtk_misc_set_alignment(GTK_MISC(OrigArtistLabel),1,0.5);
-
-    OrigArtistEntry = gtk_entry_new();
-    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (OrigArtistEntry),
-                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
-    et_grid_attach_full (GTK_GRID (Table), OrigArtistEntry, 1, 8, 9, 1, TRUE,
-                         TRUE,TablePadding,TablePadding);
-
-    et_tag_field_connect_signals (GTK_ENTRY (OrigArtistEntry));
-    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (OrigArtistEntry),
-                                     GTK_ENTRY_ICON_SECONDARY,
-                                     _("Tag selected files with this original artist"));
-
-    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(OrigArtistEntry));
-
-
-    /* Copyright */
-    CopyrightLabel = gtk_label_new(_("Copyright:"));
-    et_grid_attach_full (GTK_GRID (Table), CopyrightLabel, 0, 9, 1, 1, FALSE,
-                         FALSE, TablePadding, TablePadding);
-    gtk_misc_set_alignment(GTK_MISC(CopyrightLabel),1,0.5);
-
-    CopyrightEntry = gtk_entry_new();
-    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (CopyrightEntry),
-                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
-    et_grid_attach_full (GTK_GRID (Table), CopyrightEntry, 1, 9, 9, 1, TRUE,
-                         TRUE, TablePadding, TablePadding);
-
-    et_tag_field_connect_signals (GTK_ENTRY (CopyrightEntry));
-    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (CopyrightEntry),
-                                     GTK_ENTRY_ICON_SECONDARY,
-                                     _("Tag selected files with this copyright"));
-
-    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(CopyrightEntry));
-
-
-    /* URL */
-    URLLabel = gtk_label_new(_("URL:"));
-    et_grid_attach_full (GTK_GRID (Table), URLLabel, 0, 10, 1, 1, FALSE, FALSE,
-                         TablePadding, TablePadding);
-    gtk_misc_set_alignment(GTK_MISC(URLLabel),1,0.5);
-
-    URLEntry = gtk_entry_new();
-    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (URLEntry),
-                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
-    et_grid_attach_full (GTK_GRID (Table), URLEntry, 1, 10, 9, 1, TRUE, TRUE,
-                         TablePadding, TablePadding);
-
-    et_tag_field_connect_signals (GTK_ENTRY (URLEntry));
-    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (URLEntry),
-                                     GTK_ENTRY_ICON_SECONDARY,
-                                     _("Tag selected files with this URL"));
-
-    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(URLEntry));
-
-
-    /* Encoded by */
-    EncodedByLabel = gtk_label_new(_("Encoded by:"));
-    et_grid_attach_full (GTK_GRID (Table), EncodedByLabel, 0, 11, 1, 1, FALSE,
-                         FALSE, TablePadding, TablePadding);
-    gtk_misc_set_alignment(GTK_MISC(EncodedByLabel),1,0.5);
-
-    EncodedByEntry = gtk_entry_new();
-    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (EncodedByEntry),
-                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
-    et_grid_attach_full (GTK_GRID (Table), EncodedByEntry, 1, 11, 9, 1, TRUE,
-                         TRUE, TablePadding, TablePadding);
-
-    et_tag_field_connect_signals (GTK_ENTRY (EncodedByEntry));
-    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (EncodedByEntry),
-                                     GTK_ENTRY_ICON_SECONDARY,
-                                     _("Tag selected files with this encoder name"));
-
-    Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(EncodedByEntry));
-
-
-    // Set focus chain
-    focusable_widgets_list = g_list_prepend(focusable_widgets_list,TitleEntry);
-    focusable_widgets_list = g_list_prepend(focusable_widgets_list,ArtistEntry);
-    focusable_widgets_list = g_list_prepend(focusable_widgets_list,AlbumArtistEntry);
-    focusable_widgets_list = g_list_prepend(focusable_widgets_list,AlbumEntry);
-    focusable_widgets_list = g_list_prepend(focusable_widgets_list,DiscNumberEntry);
-    focusable_widgets_list = g_list_prepend(focusable_widgets_list,YearEntry);
-    //focusable_widgets_list = g_list_prepend(focusable_widgets_list,TrackMButtonSequence); // Doesn't work as focus disabled for this widget to have enought space to display icon
-    focusable_widgets_list = g_list_prepend(focusable_widgets_list,TrackEntryCombo);
-    //focusable_widgets_list = g_list_prepend(focusable_widgets_list,TrackMButtonNbrFiles);
-    focusable_widgets_list = g_list_prepend(focusable_widgets_list,TrackTotalEntry);
-    focusable_widgets_list = g_list_prepend(focusable_widgets_list,GenreCombo);
-    focusable_widgets_list = g_list_prepend(focusable_widgets_list,CommentEntry);
-    focusable_widgets_list = g_list_prepend(focusable_widgets_list,ComposerEntry);
-    focusable_widgets_list = g_list_prepend(focusable_widgets_list,OrigArtistEntry);
-    focusable_widgets_list = g_list_prepend(focusable_widgets_list,CopyrightEntry);
-    focusable_widgets_list = g_list_prepend(focusable_widgets_list,URLEntry);
-    focusable_widgets_list = g_list_prepend(focusable_widgets_list,EncodedByEntry);
-    /* More efficient than using g_list_append(), which must traverse the
-     * whole list. */
-    focusable_widgets_list = g_list_reverse(focusable_widgets_list);
-    gtk_container_set_focus_chain(GTK_CONTAINER(Table),focusable_widgets_list);
-    g_list_free (focusable_widgets_list);
+    basename_cur_utf8 = g_path_get_basename(filename_cur_utf8);
+    basename_new_utf8 = g_path_get_basename(filename_new_utf8);
 
+    /* Save the current displayed data */
+    //ET_Save_File_Data_From_UI((ET_File *)ETFileList->data); // Not needed, because it was done before
+    FileTag     = ETFile->FileTag->data;
+    FileNameNew = ETFile->FileNameNew->data;
 
     /*
-     * 2 - Page for extra tag fields
+     * Check if file was changed by an external program
      */
-    Label = gtk_label_new (_("Images")); // As there is only the picture field... - also used in ET_Display_File_Tag_To_UI
-
-    images_tab = Table = et_grid_new (1, 2);
-    gtk_notebook_append_page (GTK_NOTEBOOK (TagNoteBook), Table, Label);
-    gtk_container_set_border_width(GTK_CONTAINER(Table),2);
-
-    // Scroll window for PictureEntryView
-    PictureScrollWindow = gtk_scrolled_window_new(NULL, NULL);
-    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(PictureScrollWindow),
-                                   GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
-    et_grid_attach_full (GTK_GRID (Table), PictureScrollWindow, 0, 0, 1, 1,
-                         TRUE, TRUE, TablePadding, TablePadding);
-
-    PictureEntryModel = gtk_list_store_new(PICTURE_COLUMN_COUNT,
-                                           GDK_TYPE_PIXBUF,
-                                           G_TYPE_STRING,
-                                           G_TYPE_POINTER);
-    PictureEntryView = gtk_tree_view_new_with_model(GTK_TREE_MODEL(PictureEntryModel));
-    g_object_unref (PictureEntryModel);
-    //gtk_tree_view_set_reorderable(GTK_TREE_VIEW(PictureEntryView),TRUE);
-    gtk_container_add(GTK_CONTAINER(PictureScrollWindow), PictureEntryView);
-    gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(PictureEntryView), FALSE);
-    gtk_widget_set_size_request(PictureEntryView, -1, 200);
-    gtk_widget_set_tooltip_text (PictureEntryView,
-                                 _("You can use drag and drop to add an image"));
-
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(PictureEntryView));
-    gtk_tree_selection_set_mode(selection, GTK_SELECTION_MULTIPLE);
-
-    renderer = gtk_cell_renderer_pixbuf_new();
-    column = gtk_tree_view_column_new();
-    gtk_tree_view_column_pack_start(column, renderer, FALSE);
-    gtk_tree_view_column_set_attributes(column, renderer,
-                                        "pixbuf", PICTURE_COLUMN_PIC,
-                                        NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(PictureEntryView), column);
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-
-    renderer = gtk_cell_renderer_text_new();
-    column = gtk_tree_view_column_new();
-    gtk_tree_view_column_pack_start(column, renderer, FALSE);
-    gtk_tree_view_column_set_attributes(column, renderer,
-                                        "text", PICTURE_COLUMN_TEXT,
-                                        NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(PictureEntryView), column);
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-
-    /* Activate Drag'n'Drop for the PictureEntryView. */
-    gtk_drag_dest_set(GTK_WIDGET(PictureEntryView),
-                      GTK_DEST_DEFAULT_HIGHLIGHT | GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_DROP,
-                      drops, sizeof(drops) / sizeof(GtkTargetEntry),
-                      GDK_ACTION_COPY);
-    g_signal_connect(G_OBJECT(PictureEntryView),"drag_data_received", G_CALLBACK(Tag_Area_Picture_Drag_Data), 0);
-    g_signal_connect(G_OBJECT(selection), "changed", G_CALLBACK(Picture_Selection_Changed_cb), NULL);
-    g_signal_connect(G_OBJECT(PictureEntryView), "button_press_event",G_CALLBACK(Picture_Entry_View_Button_Pressed),NULL);
-    g_signal_connect(G_OBJECT(PictureEntryView),"key_press_event", G_CALLBACK(Picture_Entry_View_Key_Pressed),NULL);
-
-    /* Picture action toolbar. */
-    toolbar = gtk_toolbar_new ();
-    gtk_toolbar_set_style (GTK_TOOLBAR (toolbar), GTK_TOOLBAR_ICONS);
-    gtk_toolbar_set_icon_size (GTK_TOOLBAR (toolbar), GTK_ICON_SIZE_MENU);
-    et_grid_attach_full (GTK_GRID (Table), toolbar, 0, 1, 1, 1, FALSE, FALSE,
-                        TablePadding, TablePadding);
-
-    /* TODO: Make the icons use the symbolic variants. */
-    icon = g_themed_icon_new_with_default_fallbacks ("list-add");
-    image = gtk_image_new_from_gicon (icon, GTK_ICON_SIZE_MENU);
-    add_image_toolitem = gtk_tool_button_new (image, NULL);
-    g_object_unref (icon);
-    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), add_image_toolitem, -1);
-    gtk_widget_set_tooltip_text (GTK_WIDGET (add_image_toolitem),
-                                 _("Add images to the tag"));
-    g_signal_connect (G_OBJECT (add_image_toolitem), "clicked",
-                      G_CALLBACK (Picture_Add_Button_Clicked), NULL);
-
-    /* Activate Drag'n'Drop for the add_image_toolitem. */
-    gtk_drag_dest_set (GTK_WIDGET (add_image_toolitem),
-                       GTK_DEST_DEFAULT_HIGHLIGHT | GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_DROP,
-                       drops, sizeof(drops) / sizeof(GtkTargetEntry),
-                       GDK_ACTION_COPY);
-    g_signal_connect (G_OBJECT (add_image_toolitem), "drag-data-received",
-                      G_CALLBACK (Tag_Area_Picture_Drag_Data), 0);
-
-    icon = g_themed_icon_new_with_default_fallbacks ("list-remove");
-    image = gtk_image_new_from_gicon (icon, GTK_ICON_SIZE_MENU);
-    remove_image_toolitem = gtk_tool_button_new (image, NULL);
-    g_object_unref (icon);
-    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), remove_image_toolitem, -1);
-    gtk_widget_set_tooltip_text (GTK_WIDGET (remove_image_toolitem),
-                                 _("Remove selected images from the tag"));
-    gtk_widget_set_sensitive (GTK_WIDGET (remove_image_toolitem), FALSE);
-    g_signal_connect (G_OBJECT (remove_image_toolitem), "clicked",
-                      G_CALLBACK (Picture_Clear_Button_Clicked), NULL);
-
-    toolitem = gtk_separator_tool_item_new ();
-    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), toolitem, -1);
-
-    icon = g_themed_icon_new_with_default_fallbacks ("document-save");
-    image = gtk_image_new_from_gicon (icon, GTK_ICON_SIZE_MENU);
-    save_image_toolitem = gtk_tool_button_new (image, NULL);
-    g_object_unref (icon);
-    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), save_image_toolitem, -1);
-    gtk_widget_set_tooltip_text (GTK_WIDGET (save_image_toolitem),
-                                 _("Save the selected images to files"));
-    gtk_widget_set_sensitive (GTK_WIDGET (save_image_toolitem), FALSE);
-    g_signal_connect (G_OBJECT (save_image_toolitem), "clicked",
-                      G_CALLBACK (Picture_Save_Button_Clicked), NULL);
-
-    icon = g_themed_icon_new_with_default_fallbacks ("document-properties");
-    image = gtk_image_new_from_gicon (icon, GTK_ICON_SIZE_MENU);
-    image_properties_toolitem = gtk_tool_button_new (image, NULL);
-    g_object_unref (icon);
-    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), image_properties_toolitem, -1);
-    gtk_widget_set_tooltip_text (GTK_WIDGET (image_properties_toolitem),
-                                 _("Edit image properties"));
-    gtk_widget_set_sensitive (GTK_WIDGET (image_properties_toolitem), FALSE);
-    g_signal_connect (G_OBJECT (image_properties_toolitem), "clicked",
-                      G_CALLBACK (Picture_Properties_Button_Clicked), NULL);
-
-    toolitem = gtk_separator_tool_item_new ();
-    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), toolitem, -1);
-
-    icon = g_themed_icon_new_with_default_fallbacks ("insert-image");
-    image = gtk_image_new_from_gicon (icon, GTK_ICON_SIZE_MENU);
-    apply_image_toolitem = gtk_tool_button_new (image, NULL);
-    g_object_unref (icon);
-    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), apply_image_toolitem, -1);
-    gtk_widget_set_tooltip_text (GTK_WIDGET (apply_image_toolitem),
-                                 _("Tag selected files with these images"));
-    g_signal_connect (G_OBJECT (apply_image_toolitem), "clicked",
-                      G_CALLBACK (Mini_Button_Clicked), NULL);
-
-    //Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(PictureEntryView));
-
-    gtk_widget_show_all(TagFrame);
-    return TagFrame;
-}
-
-
-static void
-Mini_Button_Clicked (GObject *object)
-{
-    GList *etfilelist = NULL;
-    GList *selection_filelist = NULL;
-    GList *l;
-    gchar *string_to_set = NULL;
-    gchar *string_to_set1 = NULL;
-    gchar *msg = NULL;
-    ET_File *etfile;
-    File_Tag *FileTag;
-    GtkTreeSelection *selection;
-
-    g_return_if_fail (ETCore->ETFileDisplayedList != NULL ||
-                      BrowserList != NULL);
-
-    // Save the current displayed data
-    ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
-
-    // Warning : 'selection_filelist' is not a list of 'ETFile' items!
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserList));
-    selection_filelist = gtk_tree_selection_get_selected_rows(selection, NULL);
-
-    // Create an 'ETFile' list from 'selection_filelist'
-    for (l = selection_filelist; l != NULL; l = g_list_next (l))
+    /*stat(filename_cur,&statbuf);
+    if (ETFile->FileModificationTime != statbuf.st_mtime)
     {
-        etfile = Browser_List_Get_ETFile_From_Path (l->data);
-        etfilelist = g_list_prepend (etfilelist, etfile);
-    }
-
-    etfilelist = g_list_reverse (etfilelist);
-    g_list_free_full (selection_filelist, (GDestroyNotify)gtk_tree_path_free);
+        // File was changed
+        GtkWidget *msgbox = NULL;
+        gint response;
 
+        msg = g_strdup_printf(_("The file '%s' was changed by an external program.\nDo you want to continue?"),basename_cur_utf8);
+        msgbox = msg_box_new(_("Write File"),
+                             GTK_WINDOW(MainWindow),
+                             NULL,
+                             GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+                             msg,
+                             GTK_STOCK_DIALOG_WARNING,
+                             GTK_STOCK_NO,  GTK_RESPONSE_NO,
+                             GTK_STOCK_YES, GTK_RESPONSE_YES,
+                             NULL);
+        g_free(msg);
 
-    if (object == G_OBJECT (TitleEntry))
-    {
-        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(TitleEntry),0,-1); // The string to apply to all other files
+        response = gtk_dialog_run(GTK_DIALOG(msgbox));
+        gtk_widget_destroy(msgbox);
 
-        for (l = etfilelist; l != NULL; l = g_list_next (l))
+        switch (response)
         {
-            etfile = (ET_File *)l->data;
-            FileTag = ET_File_Tag_Item_New();
-            ET_Copy_File_Tag_Item(etfile,FileTag);
-            ET_Set_Field_File_Tag_Item(&FileTag->title,string_to_set);
-            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
+            case GTK_RESPONSE_YES:
+                break;
+            case GTK_RESPONSE_NO:
+            case GTK_RESPONSE_NONE:
+                stop_loop = -1;
+                return stop_loop;
+                break;
         }
-        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
-            msg = g_strdup_printf(_("Selected files tagged with title '%s'."),string_to_set);
-        else
-            msg = g_strdup(_("Removed title from selected files."));
-    }
-    else if (object == G_OBJECT (ArtistEntry))
-    {
-        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(ArtistEntry),0,-1);
+    }*/
 
-        for (l = etfilelist; l != NULL; l = g_list_next (l))
-        {
-            etfile = (ET_File *)l->data;
-            FileTag = ET_File_Tag_Item_New();
-            ET_Copy_File_Tag_Item(etfile,FileTag);
-            ET_Set_Field_File_Tag_Item(&FileTag->artist,string_to_set);
-            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
-        }
-        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
-            msg = g_strdup_printf(_("Selected files tagged with artist '%s'."),string_to_set);
-        else
-            msg = g_strdup(_("Removed artist from selected files."));
-    }
-    else if (object == G_OBJECT (AlbumArtistEntry))
-    {
-        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(AlbumArtistEntry),0,-1);
-        for (l = etfilelist; l != NULL; l = g_list_next (l))
-        {
-            etfile = (ET_File *)l->data;
-            FileTag = ET_File_Tag_Item_New();
-            ET_Copy_File_Tag_Item(etfile,FileTag);
-            ET_Set_Field_File_Tag_Item(&FileTag->album_artist,string_to_set);
-            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
-        }
-        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
-            msg = g_strdup_printf(_("Selected files tagged with album artist '%s'."),string_to_set);
-        else
-            msg = g_strdup(_("Removed album artist from selected files."));
-    }
-    else if (object == G_OBJECT (AlbumEntry))
-    {
-        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(AlbumEntry),0,-1);
 
-        for (l = etfilelist; l != NULL; l = g_list_next (l))
-        {
-            etfile = (ET_File *)l->data;
-            FileTag = ET_File_Tag_Item_New();
-            ET_Copy_File_Tag_Item(etfile,FileTag);
-            ET_Set_Field_File_Tag_Item(&FileTag->album,string_to_set);
-            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
-        }
-        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
-            msg = g_strdup_printf(_("Selected files tagged with album '%s'."),string_to_set);
-        else
-            msg = g_strdup(_("Removed album name from selected files."));
-    }
-    else if (object == G_OBJECT (DiscNumberEntry))
+    /*
+     * First part: write tag information (artist, title,...)
+     */
+    // Note : the option 'force_saving_files' is only used to save tags
+    if ( force_saving_files
+    || FileTag->saved == FALSE ) // This tag had been already saved ?
     {
-        const gchar *entry_text;
-        gchar *separator;
-
-        entry_text = gtk_entry_get_text (GTK_ENTRY (DiscNumberEntry));
-        separator = g_utf8_strchr (entry_text, -1, '/');
-
-        if (separator)
-        {
-            string_to_set1 = g_strdup (separator + 1);
-            string_to_set = g_strndup (entry_text,
-                                       separator - entry_text);
-        }
-        else
-        {
-            string_to_set = g_strdup (entry_text);
-            string_to_set1 = NULL;
-        }
+        GtkWidget *msgdialog = NULL;
+        GtkWidget *msgdialog_check_button = NULL;
+        gint response;
 
-        for (l = etfilelist; l != NULL; l = g_list_next (l))
+        if (g_settings_get_boolean (MainSettings, "confirm-rename-file")
+            && !SF_HideMsgbox_Write_Tag)
         {
-            etfile = (ET_File *)l->data;
-            FileTag = ET_File_Tag_Item_New();
-            ET_Copy_File_Tag_Item(etfile,FileTag);
-            ET_Set_Field_File_Tag_Item (&FileTag->disc_number, string_to_set);
-            ET_Set_Field_File_Tag_Item (&FileTag->disc_total, string_to_set1);
-            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
-        }
+            // ET_Display_File_Data_To_UI(ETFile);
 
-        if (string_to_set != NULL && g_utf8_strlen (string_to_set, -1) > 0)
-        {
-            if (string_to_set1 != NULL
-                && g_utf8_strlen (string_to_set1, -1) > 0)
+            msgdialog = gtk_message_dialog_new(GTK_WINDOW(MainWindow),
+                                               GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+                                               GTK_MESSAGE_QUESTION,
+                                               GTK_BUTTONS_NONE,
+                                               _("Do you want to write the tag of file ‘%s’?"),
+                                               basename_cur_utf8);
+            gtk_window_set_title(GTK_WINDOW(msgdialog),_("Confirm Tag Writing"));
+            if (multiple_files)
             {
-                msg = g_strdup_printf (_("Selected files tagged with disc number '%s/%s'."),
-                                       string_to_set, string_to_set1);
+                GtkWidget *message_area;
+                message_area = gtk_message_dialog_get_message_area(GTK_MESSAGE_DIALOG(msgdialog));
+                msgdialog_check_button = gtk_check_button_new_with_label(_("Repeat action for the remaining files"));
+                gtk_container_add(GTK_CONTAINER(message_area),msgdialog_check_button);
+                gtk_widget_show (msgdialog_check_button);
+                gtk_dialog_add_buttons (GTK_DIALOG (msgdialog),
+                                        _("_Discard"), GTK_RESPONSE_NO,
+                                        _("_Cancel"), GTK_RESPONSE_CANCEL,
+                                        _("_Save"), GTK_RESPONSE_YES, NULL);
+                gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(msgdialog_check_button), TRUE); // Checked by default
             }
             else
             {
-                msg = g_strdup_printf (_("Selected files tagged with disc number like 'xx'."));
+                gtk_dialog_add_buttons (GTK_DIALOG (msgdialog),
+                                        _("_Cancel"), GTK_RESPONSE_NO,
+                                        _("_Save"), GTK_RESPONSE_YES, NULL);
             }
-        }
-        else
-        {
-            msg = g_strdup (_("Removed disc number from selected files."));
-        }
-    }
-    else if (object == G_OBJECT (YearEntry))
-    {
-        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(YearEntry),0,-1);
-
-        for (l = etfilelist; l != NULL; l = g_list_next (l))
-        {
-            etfile = (ET_File *)l->data;
-            FileTag = ET_File_Tag_Item_New();
-            ET_Copy_File_Tag_Item(etfile,FileTag);
-            ET_Set_Field_File_Tag_Item(&FileTag->year,string_to_set);
-            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
-        }
-        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
-            msg = g_strdup_printf(_("Selected files tagged with year '%s'."),string_to_set);
-        else
-            msg = g_strdup(_("Removed year from selected files."));
-    }
-    else if (object == G_OBJECT (TrackTotalEntry))
-    {
-        /* Used of Track and Total Track values */
-        string_to_set = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(TrackEntryCombo)))));
-        string_to_set1 = gtk_editable_get_chars(GTK_EDITABLE(TrackTotalEntry),0,-1);
 
-        for (l = etfilelist; l != NULL; l = g_list_next (l))
-        {
-            etfile = (ET_File *)l->data;
-            FileTag = ET_File_Tag_Item_New();
-            ET_Copy_File_Tag_Item(etfile,FileTag);
-
-            // We apply the TrackEntry field to all others files only if it is to delete
-            // the field (string=""). Else we don't overwrite the track number
-            if (!string_to_set || g_utf8_strlen(string_to_set, -1) == 0)
-                ET_Set_Field_File_Tag_Item(&FileTag->track,string_to_set);
-            ET_Set_Field_File_Tag_Item(&FileTag->track_total,string_to_set1);
-            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
-        }
-
-        if ( string_to_set && g_utf8_strlen(string_to_set, -1) > 0 ) //&& atoi(string_to_set)>0 )
-        {
-            if ( string_to_set1 != NULL && g_utf8_strlen(string_to_set1, -1)>0 ) //&& atoi(string_to_set1)>0 )
-            {
-                msg = g_strdup_printf(_("Selected files tagged with track like 'xx/%s'."),string_to_set1);
-            }else
-            {
-                msg = g_strdup_printf(_("Selected files tagged with track like 'xx'."));
-            }
+            gtk_dialog_set_default_response (GTK_DIALOG (msgdialog),
+                                             GTK_RESPONSE_YES);
+            SF_ButtonPressed_Write_Tag = response = gtk_dialog_run(GTK_DIALOG(msgdialog));
+            // When check button in msgbox was activated : do not display the message again
+            if (msgdialog_check_button && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(msgdialog_check_button)))
+                SF_HideMsgbox_Write_Tag = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(msgdialog_check_button));
+            gtk_widget_destroy(msgdialog);
         }else
         {
-            msg = g_strdup(_("Removed track number from selected files."));
+            if (SF_HideMsgbox_Write_Tag)
+                response = SF_ButtonPressed_Write_Tag;
+            else
+                response = GTK_RESPONSE_YES;
         }
-    }
-    else if (object==G_OBJECT(TrackMButtonSequence))
-    {
-        /* This part doesn't set the same track number to all files, but sequence the tracks.
-         * So we must browse the whole 'etfilelistfull' to get position of each selected file.
-         * Note : 'etfilelistfull' and 'etfilelist' must be sorted in the same order */
-        GList *etfilelistfull = NULL;
-        gchar *path = NULL;
-        gchar *path1 = NULL;
-        gint i = 0;
-
-        /* FIX ME!: see to fill also the Total Track (it's a good idea?) */
-        etfilelistfull = g_list_first(ETCore->ETFileList);
-
-        // Sort 'etfilelistfull' and 'etfilelist' in the same order
-        etfilelist     = ET_Sort_File_List(etfilelist,SORTING_FILE_MODE);
-        etfilelistfull = ET_Sort_File_List(etfilelistfull,SORTING_FILE_MODE);
-
-        while (etfilelist && etfilelistfull)
-        {
-            // To get the path of the file
-            File_Name *FileNameCur = (File_Name *)((ET_File *)etfilelistfull->data)->FileNameCur->data;
-            // The ETFile in the selected file list
-            etfile = etfilelist->data;
-
-            // Restart counter when entering a new directory
-            g_free(path1);
-            path1 = g_path_get_dirname(FileNameCur->value);
-            if ( path && path1 && strcmp(path,path1)!=0 )
-                i = 0;
-
-            string_to_set = et_track_number_to_string (++i);
 
-            // The file is in the selection?
-            if ( (ET_File *)etfilelistfull->data == etfile )
+        switch (response)
+        {
+            case GTK_RESPONSE_YES:
             {
-                FileTag = ET_File_Tag_Item_New();
-                ET_Copy_File_Tag_Item(etfile,FileTag);
-                ET_Set_Field_File_Tag_Item(&FileTag->track,string_to_set);
-                ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
+                gboolean rc;
 
-                if (!etfilelist->next) break;
-                etfilelist = g_list_next(etfilelist);
+                // if 'SF_HideMsgbox_Write_Tag is TRUE', then errors are displayed only in log
+                rc = Write_File_Tag(ETFile,SF_HideMsgbox_Write_Tag);
+                // if an error occurs when 'SF_HideMsgbox_Write_Tag is TRUE', we don't stop saving...
+                if (rc != TRUE && !SF_HideMsgbox_Write_Tag)
+                {
+                    stop_loop = -1;
+                    return stop_loop;
+                }
+                break;
             }
-
-            g_free(string_to_set);
-            g_free(path);
-            path = g_strdup(path1);
-
-            etfilelistfull = g_list_next(etfilelistfull);
+            case GTK_RESPONSE_NO:
+                break;
+            case GTK_RESPONSE_CANCEL:
+            case GTK_RESPONSE_DELETE_EVENT:
+                stop_loop = -1;
+                return stop_loop;
+                break;
+            default:
+                g_assert_not_reached ();
+                break;
         }
-        g_free(path);
-        g_free(path1);
-        //msg = g_strdup_printf(_("All %d tracks numbered sequentially."), ETCore->ETFileSelectionList_Length);
-        msg = g_strdup_printf(_("Selected tracks numbered sequentially."));
     }
-    else if (object==G_OBJECT(TrackMButtonNbrFiles))
-    {
-        /* Used of Track and Total Track values */
-        for (l = etfilelist; l != NULL; l = g_list_next (l))
-        {
-            gchar *path_utf8, *filename_utf8;
-
-            etfile        = (ET_File *)l->data;
-            filename_utf8 = ((File_Name *)etfile->FileNameNew->data)->value_utf8;
-            path_utf8     = g_path_get_dirname(filename_utf8);
 
-            string_to_set = et_track_number_to_string (ET_Get_Number_Of_Files_In_Directory (path_utf8));
 
-            g_free(path_utf8);
-            if (!string_to_set1)
-                string_to_set1 = g_strdup(string_to_set); // Just for the message below...
-
-            FileTag = ET_File_Tag_Item_New();
-            ET_Copy_File_Tag_Item(etfile,FileTag);
-            ET_Set_Field_File_Tag_Item(&FileTag->track_total,string_to_set);
-            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
-        }
-
-        if ( string_to_set1 != NULL && g_utf8_strlen(string_to_set1, -1)>0 ) //&& atoi(string_to_set1)>0 )
-        {
-            msg = g_strdup_printf(_("Selected files tagged with track like 'xx/%s'."),string_to_set1);
-        }else
-        {
-            msg = g_strdup(_("Removed track number from selected files."));
-        }
-    }
-    else if (object == G_OBJECT (gtk_bin_get_child (GTK_BIN (GenreCombo))))
+    /*
+     * Second part: rename the file
+     */
+    // Do only if changed! (don't take force_saving_files into account)
+    if ( FileNameNew->saved == FALSE ) // This filename had been already saved ?
     {
-        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(gtk_bin_get_child(GTK_BIN(GenreCombo))),0,-1);
+        GtkWidget *msgdialog = NULL;
+        GtkWidget *msgdialog_check_button = NULL;
+        gint response;
 
-        for (l = etfilelist; l != NULL; l = g_list_next (l))
+        if (g_settings_get_boolean (MainSettings, "confirm-rename-file")
+            && !SF_HideMsgbox_Rename_File)
         {
-            etfile = (ET_File *)l->data;
-            FileTag = ET_File_Tag_Item_New();
-            ET_Copy_File_Tag_Item(etfile,FileTag);
-            ET_Set_Field_File_Tag_Item(&FileTag->genre,string_to_set);
-            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
-        }
-        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
-            msg = g_strdup_printf(_("Selected files tagged with genre '%s'."),string_to_set);
-        else
-            msg = g_strdup(_("Removed genre from selected files."));
-    }
-    else if (object == G_OBJECT (CommentEntry))
-    {
-        //GtkTextBuffer *textbuffer;
-        //GtkTextIter    start_iter;
-        //GtkTextIter    end_iter;
-        //textbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(CommentView));
-        //gtk_text_buffer_get_bounds(GTK_TEXT_BUFFER(textbuffer),&start_iter,&end_iter);
-        //string_to_set = gtk_text_buffer_get_text(GTK_TEXT_BUFFER(textbuffer),&start_iter,&end_iter,TRUE);
-
-        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(CommentEntry),0,-1);
-
-        for (l = etfilelist; l != NULL; l = g_list_next (l))
-        {
-            etfile = (ET_File *)l->data;
-            FileTag = ET_File_Tag_Item_New();
-            ET_Copy_File_Tag_Item(etfile,FileTag);
-            ET_Set_Field_File_Tag_Item(&FileTag->comment,string_to_set);
-            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
-        }
-        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
-            msg = g_strdup_printf(_("Selected files tagged with comment '%s'."),string_to_set);
-        else
-            msg = g_strdup(_("Removed comment from selected files."));
-    }
-    else if (object == G_OBJECT (ComposerEntry))
-    {
-        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(ComposerEntry),0,-1);
-        for (l = etfilelist; l != NULL; l = g_list_next (l))
-        {
-            etfile = (ET_File *)l->data;
-            FileTag = ET_File_Tag_Item_New();
-            ET_Copy_File_Tag_Item(etfile,FileTag);
-            ET_Set_Field_File_Tag_Item(&FileTag->composer,string_to_set);
-            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
-        }
-        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
-            msg = g_strdup_printf(_("Selected files tagged with composer '%s'."),string_to_set);
-        else
-            msg = g_strdup(_("Removed composer from selected files."));
-    }
-    else if (object == G_OBJECT (OrigArtistEntry))
-    {
-        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(OrigArtistEntry),0,-1);
+            gchar *msgdialog_title = NULL;
+            gchar *msg = NULL;
+            gchar *msg1 = NULL;
+            // ET_Display_File_Data_To_UI(ETFile);
 
-        for (l = etfilelist; l != NULL; l = g_list_next (l))
-        {
-            etfile = (ET_File *)l->data;
-            FileTag = ET_File_Tag_Item_New();
-            ET_Copy_File_Tag_Item(etfile,FileTag);
-            ET_Set_Field_File_Tag_Item(&FileTag->orig_artist,string_to_set);
-            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
-        }
-        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
-            msg = g_strdup_printf(_("Selected files tagged with original artist '%s'."),string_to_set);
-        else
-            msg = g_strdup(_("Removed original artist from selected files."));
-    }
-    else if (object == G_OBJECT (CopyrightEntry))
-    {
-        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(CopyrightEntry),0,-1);
+            dirname_cur_utf8 = g_path_get_dirname(filename_cur_utf8);
+            dirname_new_utf8 = g_path_get_dirname(filename_new_utf8);
 
-        for (l = etfilelist; l != NULL; l = g_list_next (l))
-        {
-            etfile = (ET_File *)l->data;
-            FileTag = ET_File_Tag_Item_New();
-            ET_Copy_File_Tag_Item(etfile,FileTag);
-            ET_Set_Field_File_Tag_Item(&FileTag->copyright,string_to_set);
-            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
-        }
-        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
-            msg = g_strdup_printf(_("Selected files tagged with copyright '%s'."),string_to_set);
-        else
-            msg = g_strdup(_("Removed copyright from selected files."));
-    }
-    else if (object == G_OBJECT (URLEntry))
-    {
-        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(URLEntry),0,-1);
+            // Directories were renamed? or only filename?
+            if (g_utf8_collate(dirname_cur_utf8,dirname_new_utf8) != 0)
+            {
+                if (g_utf8_collate(basename_cur_utf8,basename_new_utf8) != 0)
+                {
+                    // Directories and filename changed
+                    msgdialog_title = g_strdup (_("Rename File and Directory"));
+                    msg = g_strdup(_("File and directory rename confirmation required"));
+                    msg1 = g_strdup_printf (_("Do you want to rename the file and directory ‘%s’ to ‘%s’?"),
+                                           filename_cur_utf8, filename_new_utf8);
+                }else
+                {
+                    // Only directories changed
+                    msgdialog_title = g_strdup (_("Rename Directory"));
+                    msg = g_strdup(_("Directory rename confirmation required"));
+                    msg1 = g_strdup_printf (_("Do you want to rename the directory ‘%s’ to ‘%s’?"),
+                                            dirname_cur_utf8,
+                                            dirname_new_utf8);
+                }
+            }else
+            {
+                // Only filename changed
+                msgdialog_title = g_strdup (_("Rename File"));
+                msg = g_strdup(_("File rename confirmation required"));
+                msg1 = g_strdup_printf (_("Do you want to rename the file ‘%s’ to ‘%s’?"),
+                                       basename_cur_utf8, basename_new_utf8);
+            }
 
-        for (l = etfilelist; l != NULL; l = g_list_next (l))
-        {
-            etfile = (ET_File *)l->data;
-            FileTag = ET_File_Tag_Item_New();
-            ET_Copy_File_Tag_Item(etfile,FileTag);
-            ET_Set_Field_File_Tag_Item(&FileTag->url,string_to_set);
-            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
-        }
-        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
-            msg = g_strdup_printf(_("Selected files tagged with URL '%s'."),string_to_set);
-        else
-            msg = g_strdup(_("Removed URL from selected files."));
-    }
-    else if (object == G_OBJECT (EncodedByEntry))
-    {
-        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(EncodedByEntry),0,-1);
+            g_free(dirname_cur_utf8);
+            g_free(dirname_new_utf8);
 
-        for (l = etfilelist; l != NULL; l = g_list_next (l))
+            msgdialog = gtk_message_dialog_new(GTK_WINDOW(MainWindow),
+                                               GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+                                               GTK_MESSAGE_QUESTION,
+                                               GTK_BUTTONS_NONE,
+                                               "%s",
+                                               msg);
+            gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(msgdialog),"%s",msg1);
+            gtk_window_set_title(GTK_WINDOW(msgdialog),msgdialog_title);
+            if (multiple_files)
+            {
+                GtkWidget *message_area;
+                message_area = gtk_message_dialog_get_message_area(GTK_MESSAGE_DIALOG(msgdialog));
+                msgdialog_check_button = gtk_check_button_new_with_label(_("Repeat action for the remaining files"));
+                gtk_container_add(GTK_CONTAINER(message_area),msgdialog_check_button);
+                gtk_widget_show (msgdialog_check_button);
+                gtk_dialog_add_buttons (GTK_DIALOG (msgdialog), _("_Discard"),
+                                        GTK_RESPONSE_NO, _("_Cancel"),
+                                        GTK_RESPONSE_CANCEL, _("_Save"),
+                                        GTK_RESPONSE_YES, NULL);
+                gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(msgdialog_check_button), TRUE); // Checked by default
+            }
+            else
+            {
+                gtk_dialog_add_buttons (GTK_DIALOG (msgdialog), _("_Discard"),
+                                        GTK_RESPONSE_NO, _("_Save"),
+                                        GTK_RESPONSE_YES, NULL);
+            }
+            g_free(msg);
+            g_free(msg1);
+            g_free(msgdialog_title);
+            gtk_dialog_set_default_response (GTK_DIALOG (msgdialog),
+                                             GTK_RESPONSE_YES);
+            SF_ButtonPressed_Rename_File = response = gtk_dialog_run(GTK_DIALOG(msgdialog));
+            if (msgdialog_check_button && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(msgdialog_check_button)))
+                SF_HideMsgbox_Rename_File = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(msgdialog_check_button));
+            gtk_widget_destroy(msgdialog);
+        }else
         {
-            etfile = (ET_File *)l->data;
-            FileTag = ET_File_Tag_Item_New();
-            ET_Copy_File_Tag_Item(etfile,FileTag);
-            ET_Set_Field_File_Tag_Item(&FileTag->encoded_by,string_to_set);
-            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
+            if (SF_HideMsgbox_Rename_File)
+                response = SF_ButtonPressed_Rename_File;
+            else
+                response = GTK_RESPONSE_YES;
         }
-        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
-            msg = g_strdup_printf(_("Selected files tagged with encoder name '%s'."),string_to_set);
-        else
-            msg = g_strdup(_("Removed encoder name from selected files."));
-    }
-    else if (object==G_OBJECT(apply_image_toolitem))
-    {
-        Picture *res = NULL, *pic, *prev_pic = NULL;
-        GtkTreeModel *model;
-        GtkTreeIter iter;
 
-        model = gtk_tree_view_get_model(GTK_TREE_VIEW(PictureEntryView));
-        if (gtk_tree_model_get_iter_first(model, &iter))
+        switch(response)
         {
-            do
+            case GTK_RESPONSE_YES:
             {
-                gtk_tree_model_get(model, &iter, PICTURE_COLUMN_DATA, &pic, -1);
-                pic = Picture_Copy_One(pic);
-                if (!res)
-                    res = pic;
-                else
-                    prev_pic->next = pic;
-                prev_pic = pic;
-            } while (gtk_tree_model_iter_next(model, &iter));
-        }
-
-        for (l = etfilelist; l != NULL; l = g_list_next (l))
-        {
-            etfile = (ET_File *)l->data;
-            FileTag = ET_File_Tag_Item_New();
-            ET_Copy_File_Tag_Item(etfile,FileTag);
-            ET_Set_Field_File_Tag_Picture((Picture **)&FileTag->picture, res);
-            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
-        }
-        if (res)
-            msg = g_strdup (_("Selected files tagged with images."));
-        else
-            msg = g_strdup (_("Removed images from selected files."));
-        Picture_Free(res);
-    }
-
-    g_list_free(etfilelist);
-
-    // Refresh the whole list (faster than file by file) to show changes
-    Browser_List_Refresh_Whole_List();
-
-    /* Display the current file (Needed when sequencing tracks) */
-    ET_Display_File_Data_To_UI(ETCore->ETFileDisplayed);
-
-    if (msg)
-    {
-        Log_Print(LOG_OK,"%s",msg);
-        Statusbar_Message(msg,TRUE);
-        g_free(msg);
-    }
-    g_free(string_to_set);
-    g_free(string_to_set1);
-
-    /* To update state of Undo button */
-    Update_Command_Buttons_Sensivity();
-}
-
-
-
-
-/*
- * Action when selecting all files
- */
-void
-et_on_action_select_all (void)
-{
-    GtkWidget *focused;
+                gboolean rc;
+                GError *error = NULL;
+                gchar *cur_filename = ((File_Name *)ETFile->FileNameCur->data)->value;
+                gchar *new_filename = ((File_Name *)ETFile->FileNameNew->data)->value;
+                rc = et_rename_file (cur_filename, new_filename, &error);
 
-    /* Use the currently-focused widget and "select all" as appropriate.
-     * https://bugzilla.gnome.org/show_bug.cgi?id=697515 */
-    focused = gtk_window_get_focus (GTK_WINDOW (MainWindow));
-    if (GTK_IS_EDITABLE (focused))
-    {
-        gtk_editable_select_region (GTK_EDITABLE (focused), 0, -1);
-    }
-    else if (focused == PictureEntryView)
-    {
-        GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (focused));
-        gtk_tree_selection_select_all (selection);
-    }
-    else /* Assume that other widgets should select all in the file view. */
-    {
-        /* Save the current displayed data */
-        ET_Save_File_Data_From_UI (ETCore->ETFileDisplayed);
+                // if 'SF_HideMsgbox_Rename_File is TRUE', then errors are displayed only in log
+                if (!rc)
+                {
+                    if (!SF_HideMsgbox_Rename_File)
+                    {
+                        GtkWidget *msgdialog;
 
-        Browser_List_Select_All_Files ();
-        Update_Command_Buttons_Sensivity ();
-    }
-}
+                        msgdialog = gtk_message_dialog_new (GTK_WINDOW (MainWindow),
+                                                            GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+                                                            GTK_MESSAGE_ERROR,
+                                                            GTK_BUTTONS_CLOSE,
+                                                            _("Cannot rename file ‘%s’ to ‘%s’"),
+                                                            filename_cur_utf8,
+                                                            filename_new_utf8);
+                        gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (msgdialog),
+                                                                  "%s",
+                                                                  error->message);
+                        gtk_window_set_title (GTK_WINDOW (msgdialog),
+                                              _("Rename File Error"));
 
+                        gtk_dialog_run (GTK_DIALOG (msgdialog));
+                        gtk_widget_destroy (msgdialog);
+                    }
 
-/*
- * Action when unselecting all
- */
-void
-et_on_action_unselect_all (void)
-{
-    GtkWidget *focused;
+                    Log_Print (LOG_ERROR,
+                               _("Cannot rename file ‘%s’ to ‘%s’: %s"),
+                               filename_cur_utf8, filename_new_utf8,
+                               error->message);
 
-    focused = gtk_window_get_focus (GTK_WINDOW (MainWindow));
-    if (GTK_IS_EDITABLE (focused))
-    {
-        GtkEditable *editable;
-        gint pos;
+                    et_application_window_status_bar_message (ET_APPLICATION_WINDOW (MainWindow),
+                                                              _("File(s) not renamed"),
+                                                              TRUE);
+                    g_error_free (error);
+                }
 
-        editable = GTK_EDITABLE (focused);
-        pos = gtk_editable_get_position (editable);
-        gtk_editable_select_region (editable, 0, 0);
-        gtk_editable_set_position (editable, pos);
-    }
-    else if (focused == PictureEntryView)
-    {
-        GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (focused));
-        gtk_tree_selection_unselect_all (selection);
-    }
-    else /* Assume that other widgets should select all in the file view. */
-    {
-        /* Save the current displayed data */
-        ET_Save_File_Data_From_UI (ETCore->ETFileDisplayed);
+                // if an error occurs when 'SF_HideMsgbox_Rename_File is TRUE', we don't stop saving...
+                if (!rc && !SF_HideMsgbox_Rename_File)
+                {
+                    stop_loop = -1;
+                    return stop_loop;
+                }
 
-        Browser_List_Unselect_All_Files ();
-        ETCore->ETFileDisplayed = NULL;
+                /* Mark after renaming files. */
+                ETFile->FileNameCur = ETFile->FileNameNew;
+                ET_Mark_File_Name_As_Saved (ETFile);
+                break;
+            }
+            case GTK_RESPONSE_NO:
+                break;
+            case GTK_RESPONSE_CANCEL:
+            case GTK_RESPONSE_DELETE_EVENT:
+                stop_loop = -1;
+                return stop_loop;
+                break;
+            default:
+                g_assert_not_reached ();
+                break;
+        }
     }
-}
 
+    g_free(basename_cur_utf8);
+    g_free(basename_new_utf8);
 
-/*
- * Action when inverting files selection
- */
-void Action_Invert_Files_Selection (void)
-{
-    /* Save the current displayed data */
-    ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
+    /* Refresh file into browser list */
+    // Browser_List_Refresh_File_In_List(ETFile);
 
-    Browser_List_Invert_File_Selection();
-    Update_Command_Buttons_Sensivity();
+    return 1;
 }
 
-
-
 /*
- * Action when First button is selected
+ * et_rename_file:
+ * @old_filepath: path of file to be renamed
+ * @new_filepath: path of renamed file
+ * @error: a #GError to provide information on errors, or %NULL to ignore
+ *
+ * Rename @old_filepath to @new_filepath.
+ *
+ * Returns: %TRUE if the rename was successful, %FALSE otherwise
  */
-void Action_Select_First_File (void)
+static gboolean
+et_rename_file (const char *old_filepath, const char *new_filepath,
+                GError **error)
 {
-    GList *etfilelist;
+    GFile *file_old;
+    GFile *file_new;
+    GFile *file_new_parent;
 
-    if (!ETCore->ETFileDisplayedList)
-        return;
+    g_return_val_if_fail (old_filepath != NULL && new_filepath != NULL, FALSE);
+    g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
-    /* Save the current displayed data */
-    ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
+    file_old = g_file_new_for_path (old_filepath);
+    file_new = g_file_new_for_path (new_filepath);
+    file_new_parent = g_file_get_parent (file_new);
 
-    /* Go to the first item of the list */
-    etfilelist = ET_Displayed_File_List_First();
-    if (etfilelist)
+    if (!g_file_make_directory_with_parents (file_new_parent, NULL, error))
     {
-        Browser_List_Unselect_All_Files(); // To avoid the last line still selected
-        Browser_List_Select_File_By_Etfile((ET_File *)etfilelist->data,TRUE);
-        ET_Display_File_Data_To_UI((ET_File *)etfilelist->data);
+        /* Ignore an error if the directory already exists. */
+        if (!g_error_matches (*error, G_IO_ERROR, G_IO_ERROR_EXISTS))
+        {
+            g_object_unref (file_old);
+            g_object_unref (file_new);
+            g_object_unref (file_new_parent);
+            g_assert (error == NULL || *error != NULL);
+            return FALSE;
+        }
+        g_clear_error (error);
     }
 
-    Update_Command_Buttons_Sensivity();
-    Scan_Rename_File_Generate_Preview();
-    Scan_Fill_Tag_Generate_Preview();
-
-    if (SET_FOCUS_TO_FIRST_TAG_FIELD)
-        gtk_widget_grab_focus(GTK_WIDGET(TitleEntry));
-}
-
-
-/*
- * Action when Prev button is selected
- */
-void Action_Select_Prev_File (void)
-{
-    GList *etfilelist;
-
-    if (!ETCore->ETFileDisplayedList || !ETCore->ETFileDisplayedList->prev)
-        return;
-
-    /* Save the current displayed data */
-    ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
+    g_assert (error == NULL || *error == NULL);
+    g_object_unref (file_new_parent);
 
-    /* Go to the prev item of the list */
-    etfilelist = ET_Displayed_File_List_Previous();
-    if (etfilelist)
-    {
-        Browser_List_Unselect_All_Files();
-        Browser_List_Select_File_By_Etfile((ET_File *)etfilelist->data,TRUE);
-        ET_Display_File_Data_To_UI((ET_File *)etfilelist->data);
-    }
-
-//    if (!ETFileList->prev)
-//        gdk_beep(); // Warm the user
-
-    Update_Command_Buttons_Sensivity();
-    Scan_Rename_File_Generate_Preview();
-    Scan_Fill_Tag_Generate_Preview();
-
-    if (SET_FOCUS_TO_FIRST_TAG_FIELD)
-        gtk_widget_grab_focus(GTK_WIDGET(TitleEntry));
-}
-
-
-/*
- * Action when Next button is selected
- */
-void Action_Select_Next_File (void)
-{
-    GList *etfilelist;
-
-    if (!ETCore->ETFileDisplayedList || !ETCore->ETFileDisplayedList->next)
-        return;
-
-    /* Save the current displayed data */
-    ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
-
-    /* Go to the next item of the list */
-    etfilelist = ET_Displayed_File_List_Next();
-    if (etfilelist)
-    {
-        Browser_List_Unselect_All_Files();
-        Browser_List_Select_File_By_Etfile((ET_File *)etfilelist->data,TRUE);
-        ET_Display_File_Data_To_UI((ET_File *)etfilelist->data);
-    }
-
-//    if (!ETFileList->next)
-//        gdk_beep(); // Warm the user
-
-    Update_Command_Buttons_Sensivity();
-    Scan_Rename_File_Generate_Preview();
-    Scan_Fill_Tag_Generate_Preview();
-
-    if (SET_FOCUS_TO_FIRST_TAG_FIELD)
-        gtk_widget_grab_focus(GTK_WIDGET(TitleEntry));
-}
-
-
-/*
- * Action when Last button is selected
- */
-void Action_Select_Last_File (void)
-{
-    GList *etfilelist;
-
-    if (!ETCore->ETFileDisplayedList || !ETCore->ETFileDisplayedList->next)
-        return;
-
-    /* Save the current displayed data */
-    ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
-
-    /* Go to the last item of the list */
-    etfilelist = ET_Displayed_File_List_Last();
-    if (etfilelist)
-    {
-        Browser_List_Unselect_All_Files();
-        Browser_List_Select_File_By_Etfile((ET_File *)etfilelist->data,TRUE);
-        ET_Display_File_Data_To_UI((ET_File *)etfilelist->data);
-    }
-
-    Update_Command_Buttons_Sensivity();
-    Scan_Rename_File_Generate_Preview();
-    Scan_Fill_Tag_Generate_Preview();
-
-    if (SET_FOCUS_TO_FIRST_TAG_FIELD)
-        gtk_widget_grab_focus(GTK_WIDGET(TitleEntry));
-}
-
-
-/*
- * Select a file in the "main list" using the ETFile adress of each item.
- */
-void Action_Select_Nth_File_By_Etfile (ET_File *ETFile)
-{
-    if (!ETCore->ETFileDisplayedList)
-        return;
-
-    /* Save the current displayed data */
-    ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
-
-    /* Display the item */
-    Browser_List_Select_File_By_Etfile(ETFile,TRUE);
-    ET_Displayed_File_List_By_Etfile(ETFile); // Just to update 'ETFileDisplayedList'
-    ET_Display_File_Data_To_UI(ETFile);
-
-    Update_Command_Buttons_Sensivity();
-    Scan_Rename_File_Generate_Preview();
-    Scan_Fill_Tag_Generate_Preview();
-}
-
-
-/*
- * Action when Scan button is pressed
- */
-void Action_Scan_Selected_Files (void)
-{
-    gint progress_bar_index;
-    gint selectcount;
-    gchar progress_bar_text[30];
-    double fraction;
-    GList *selfilelist = NULL;
-    GList *l;
-    ET_File *etfile;
-    GtkTreeSelection *selection;
-
-    g_return_if_fail (ETCore->ETFileDisplayedList != NULL ||
-                      BrowserList != NULL);
-
-    /* Check if scanner window is opened */
-    if (!ScannerWindow)
-    {
-        Open_ScannerWindow(SCANNER_TYPE);
-        Statusbar_Message(_("Select Mode and Mask, and redo the same action"),TRUE);
-        return;
-    }
-
-    /* Save the current displayed data */
-    ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
-
-    /* Initialize status bar */
-    selectcount = gtk_tree_selection_count_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserList)));
-    gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(ProgressBar),0);
-    progress_bar_index = 0;
-    g_snprintf(progress_bar_text, 30, "%d/%d", progress_bar_index, selectcount);
-    gtk_progress_bar_set_text(GTK_PROGRESS_BAR(ProgressBar), progress_bar_text);
-
-    /* Set to unsensitive all command buttons (except Quit button) */
-    Disable_Command_Buttons();
-
-    progress_bar_index = 0;
-
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserList));
-    selfilelist = gtk_tree_selection_get_selected_rows(selection, NULL);
-
-    for (l = selfilelist; l != NULL; l = g_list_next (l))
-    {
-        etfile = Browser_List_Get_ETFile_From_Path (l->data);
-
-        // Run the current scanner
-        Scan_Select_Mode_And_Run_Scanner(etfile);
-
-        fraction = (++progress_bar_index) / (double) selectcount;
-        gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(ProgressBar), fraction);
-        g_snprintf(progress_bar_text, 30, "%d/%d", progress_bar_index, selectcount);
-        gtk_progress_bar_set_text(GTK_PROGRESS_BAR(ProgressBar), progress_bar_text);
-
-        /* Needed to refresh status bar */
-        while (gtk_events_pending())
-            gtk_main_iteration();
-    }
-
-    g_list_free_full (selfilelist, (GDestroyNotify)gtk_tree_path_free);
-
-    // Refresh the whole list (faster than file by file) to show changes
-    Browser_List_Refresh_Whole_List();
-
-    /* Display the current file */
-    ET_Display_File_Data_To_UI(ETCore->ETFileDisplayed);
-
-    /* To update state of command buttons */
-    Update_Command_Buttons_Sensivity();
-
-    gtk_progress_bar_set_text(GTK_PROGRESS_BAR(ProgressBar), "");
-    gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(ProgressBar), 0);
-    Statusbar_Message(_("All tags have been scanned"),TRUE);
-}
-
-
-
-/*
- * Action when Remove button is pressed
- */
-void Action_Remove_Selected_Tags (void)
-{
-    GList *selfilelist = NULL;
-    GList *l;
-    ET_File *etfile;
-    File_Tag *FileTag;
-    gint progress_bar_index;
-    gint selectcount;
-    double fraction;
-    GtkTreeSelection *selection;
-
-    g_return_if_fail (ETCore->ETFileDisplayedList != NULL ||
-                      BrowserList != NULL);
-
-    /* Save the current displayed data */
-    ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
-
-    /* Initialize status bar */
-    gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(ProgressBar), 0.0);
-    selectcount = gtk_tree_selection_count_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserList)));
-    progress_bar_index = 0;
-
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserList));
-    selfilelist = gtk_tree_selection_get_selected_rows(selection, NULL);
-
-    for (l = selfilelist; l != NULL; l = g_list_next (l))
-    {
-        etfile = Browser_List_Get_ETFile_From_Path (l->data);
-        FileTag = ET_File_Tag_Item_New();
-        ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
-
-        fraction = (++progress_bar_index) / (double) selectcount;
-        gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(ProgressBar), fraction);
-        /* Needed to refresh status bar */
-        while (gtk_events_pending())
-            gtk_main_iteration();
-    }
-
-    g_list_free_full (selfilelist, (GDestroyNotify)gtk_tree_path_free);
-
-    // Refresh the whole list (faster than file by file) to show changes
-    Browser_List_Refresh_Whole_List();
-
-    /* Display the current file */
-    ET_Display_File_Data_To_UI(ETCore->ETFileDisplayed);
-    Update_Command_Buttons_Sensivity();
-
-    gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(ProgressBar), 0.0);
-    Statusbar_Message(_("All tags have been removed"),TRUE);
-}
-
-
-
-/*
- * Action when Undo button is pressed.
- * Action_Undo_Selected_Files: Undo the last changes for the selected files.
- * Action_Undo_From_History_List: Undo the changes of the last modified file of the list.
- */
-gint Action_Undo_Selected_Files (void)
-{
-    GList *selfilelist = NULL;
-    GList *l;
-    gboolean state = FALSE;
-    ET_File *etfile;
-    GtkTreeSelection *selection;
-
-    g_return_val_if_fail (ETCore->ETFileDisplayedList != NULL ||
-                          BrowserList != NULL, FALSE);
-
-    /* Save the current displayed data */
-    ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
-
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserList));
-    selfilelist = gtk_tree_selection_get_selected_rows(selection, NULL);
-
-    for (l = selfilelist; l != NULL; l = g_list_next (l))
-    {
-        etfile = Browser_List_Get_ETFile_From_Path (l->data);
-        state |= ET_Undo_File_Data(etfile);
-    }
-
-    g_list_free_full (selfilelist, (GDestroyNotify)gtk_tree_path_free);
-
-    // Refresh the whole list (faster than file by file) to show changes
-    Browser_List_Refresh_Whole_List();
-
-    /* Display the current file */
-    ET_Display_File_Data_To_UI(ETCore->ETFileDisplayed);
-    Update_Command_Buttons_Sensivity();
-
-    //ET_Debug_Print_File_List(ETCore->ETFileList,__FILE__,__LINE__,__FUNCTION__);
-
-    return state;
-}
-
-
-void Action_Undo_From_History_List (void)
-{
-    ET_File *ETFile;
-
-    g_return_if_fail (ETCore->ETFileList != NULL);
-
-    /* Save the current displayed data */
-    ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
-
-    ETFile = ET_Undo_History_File_Data();
-    if (ETFile)
-    {
-        ET_Display_File_Data_To_UI(ETFile);
-        Browser_List_Select_File_By_Etfile(ETFile,TRUE);
-        Browser_List_Refresh_File_In_List(ETFile);
-    }
-
-    Update_Command_Buttons_Sensivity();
-}
-
-
-
-/*
- * Action when Redo button is pressed.
- * Action_Redo_Selected_Files: Redo the last changes for the selected files.
- * Action_Redo_From_History_List: Redo the changes of the last modified file of the list.
- */
-gint Action_Redo_Selected_File (void)
-{
-    GList *selfilelist = NULL;
-    GList *l;
-    gboolean state = FALSE;
-    ET_File *etfile;
-    GtkTreeSelection *selection;
-
-    g_return_val_if_fail (ETCore->ETFileDisplayedList != NULL ||
-                          BrowserList != NULL, FALSE);
-
-    /* Save the current displayed data */
-    ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
-
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserList));
-    selfilelist = gtk_tree_selection_get_selected_rows(selection, NULL);
-
-    for (l = selfilelist; l != NULL; l = g_list_next (l))
-    {
-        etfile = Browser_List_Get_ETFile_From_Path (l->data);
-        state |= ET_Redo_File_Data(etfile);
-    }
-
-    g_list_free_full (selfilelist, (GDestroyNotify)gtk_tree_path_free);
-
-    // Refresh the whole list (faster than file by file) to show changes
-    Browser_List_Refresh_Whole_List();
-
-    /* Display the current file */
-    ET_Display_File_Data_To_UI(ETCore->ETFileDisplayed);
-    Update_Command_Buttons_Sensivity();
-
-    return state;
-}
-
-
-void Action_Redo_From_History_List (void)
-{
-    ET_File *ETFile;
-
-    g_return_if_fail (ETCore->ETFileDisplayedList != NULL);
-
-    /* Save the current displayed data */
-    ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
-
-    ETFile = ET_Redo_History_File_Data();
-    if (ETFile)
-    {
-        ET_Display_File_Data_To_UI(ETFile);
-        Browser_List_Select_File_By_Etfile(ETFile,TRUE);
-        Browser_List_Refresh_File_In_List(ETFile);
-    }
-
-    Update_Command_Buttons_Sensivity();
-}
-
-
-
-
-/*
- * Action when Save button is pressed
- */
-void Action_Save_Selected_Files (void)
-{
-    Save_Selected_Files_With_Answer(FALSE);
-}
-
-void Action_Force_Saving_Selected_Files (void)
-{
-    Save_Selected_Files_With_Answer(TRUE);
-}
-
-
-/*
- * Will save the full list of file (not only the selected files in list)
- * and check if we must save also only the changed files or all files
- * (force_saving_files==TRUE)
- */
-gint Save_All_Files_With_Answer (gboolean force_saving_files)
-{
-    GList *etfilelist;
-
-    g_return_val_if_fail (ETCore != NULL && ETCore->ETFileList != NULL, FALSE);
-
-    etfilelist = g_list_first (ETCore->ETFileList);
-
-    return Save_List_Of_Files (etfilelist, force_saving_files);
-}
-
-/*
- * Will save only the selected files in the file list
- */
-static gint
-Save_Selected_Files_With_Answer (gboolean force_saving_files)
-{
-    gint toreturn;
-    GList *etfilelist = NULL;
-    GList *selfilelist = NULL;
-    GList *l;
-    ET_File *etfile;
-    GtkTreeSelection *selection;
-
-    g_return_val_if_fail (BrowserList != NULL, FALSE);
-
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserList));
-    selfilelist = gtk_tree_selection_get_selected_rows(selection, NULL);
-
-    for (l = selfilelist; l != NULL; l = g_list_next (l))
-    {
-        etfile = Browser_List_Get_ETFile_From_Path (l->data);
-        etfilelist = g_list_prepend (etfilelist, etfile);
-    }
-
-    g_list_free_full (selfilelist, (GDestroyNotify)gtk_tree_path_free);
-
-    etfilelist = g_list_reverse (etfilelist);
-    toreturn = Save_List_Of_Files(etfilelist, force_saving_files);
-    g_list_free(etfilelist);
-    return toreturn;
-}
-
-/*
- * Save_List_Of_Files: Function to save a list of files.
- *  - force_saving_files = TRUE => force saving the file even if it wasn't changed
- *  - force_saving_files = FALSE => force saving only the changed files
- */
-static gint
-Save_List_Of_Files (GList *etfilelist, gboolean force_saving_files)
-{
-    gint       progress_bar_index;
-    gint       saving_answer;
-    gint       nb_files_to_save;
-    gint       nb_files_changed_by_ext_program;
-    gchar     *msg;
-    gchar      progress_bar_text[30];
-    GList *l;
-    ET_File   *etfile_save_position = NULL;
-    File_Tag  *FileTag;
-    File_Name *FileNameNew;
-    double     fraction;
-    GtkAction *uiaction;
-    GtkWidget *toggle_radio;
-    GtkWidget *widget_focused;
-    GtkTreePath *currentPath = NULL;
-
-    g_return_val_if_fail (ETCore != NULL, FALSE);
-
-    /* Save the current position in the list */
-    etfile_save_position = ETCore->ETFileDisplayed;
-
-    /* Save the current displayed data */
-    ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
-
-    /* Save widget that has current focus, to give it again the focus after saving */
-    widget_focused = gtk_window_get_focus(GTK_WINDOW(MainWindow));
-
-    /* Count the number of files to save */
-    /* Count the number of files changed by an external program */
-    nb_files_to_save = 0;
-    nb_files_changed_by_ext_program = 0;
-
-    for (l = etfilelist; l != NULL; l = g_list_next (l))
-    {
-        GFile *file;
-        GFileInfo *fileinfo;
-
-        ET_File *ETFile = (ET_File *)l->data;
-        File_Tag  *FileTag  = (File_Tag *)ETFile->FileTag->data;
-        File_Name *FileName = (File_Name *)ETFile->FileNameNew->data;
-        gchar *filename_cur = ((File_Name *)ETFile->FileNameCur->data)->value;
-        gchar *filename_cur_utf8 = ((File_Name *)ETFile->FileNameCur->data)->value_utf8;
-        gchar *basename_cur_utf8 = g_path_get_basename(filename_cur_utf8);
-
-        // Count only the changed files or all files if force_saving_files==TRUE
-        if ( force_saving_files
-        || (FileName && FileName->saved==FALSE) || (FileTag && FileTag->saved==FALSE) )
-            nb_files_to_save++;
-
-        file = g_file_new_for_path (filename_cur);
-        fileinfo = g_file_query_info (file, G_FILE_ATTRIBUTE_TIME_MODIFIED,
-                                      G_FILE_QUERY_INFO_NONE, NULL, NULL);
-        g_object_unref (file);
-
-        if (fileinfo)
-        {
-            if (ETFile->FileModificationTime
-                != g_file_info_get_attribute_uint64 (fileinfo,
-                                                     G_FILE_ATTRIBUTE_TIME_MODIFIED))
-            {
-                nb_files_changed_by_ext_program++;
-            }
-
-            g_object_unref (fileinfo);
-        }
-        g_free(basename_cur_utf8);
-    }
-
-    /* Initialize status bar */
-    gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(ProgressBar),0);
-    progress_bar_index = 0;
-    g_snprintf(progress_bar_text, 30, "%d/%d", progress_bar_index, nb_files_to_save);
-    gtk_progress_bar_set_text(GTK_PROGRESS_BAR(ProgressBar), progress_bar_text);
-
-    /* Set to unsensitive all command buttons (except Quit button) */
-    Disable_Command_Buttons();
-    Browser_Area_Set_Sensitive(FALSE);
-    Tag_Area_Set_Sensitive(FALSE);
-    File_Area_Set_Sensitive(FALSE);
-
-    /* Show msgbox (if needed) to ask confirmation ('SF' for Save File) */
-    SF_HideMsgbox_Write_Tag = FALSE;
-    SF_HideMsgbox_Rename_File = FALSE;
-
-    Main_Stop_Button_Pressed = FALSE;
-    uiaction = gtk_ui_manager_get_action(UIManager, "/ToolBar/Stop"); // Activate the stop button
-    g_object_set(uiaction, "sensitive", FALSE, NULL);
-
-    /*
-     * Check if file was changed by an external program
-     */
-    if (nb_files_changed_by_ext_program > 0)
-    {
-        // Some files were changed by other program than EasyTAG
-        GtkWidget *msgdialog = NULL;
-        gint response;
-
-        msgdialog = gtk_message_dialog_new(GTK_WINDOW(MainWindow),
-                                           GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-                                           GTK_MESSAGE_WARNING,
-                                           GTK_BUTTONS_NONE,
-                                           ngettext("A file was changed by an external program","%d files were changed by an external program.",nb_files_changed_by_ext_program),
-                                           nb_files_changed_by_ext_program);
-        gtk_dialog_add_buttons(GTK_DIALOG(msgdialog),GTK_STOCK_DISCARD,GTK_RESPONSE_NO,GTK_STOCK_SAVE,GTK_RESPONSE_YES,NULL);
-        gtk_dialog_set_default_response (GTK_DIALOG (msgdialog),
-                                         GTK_RESPONSE_YES);
-        gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(msgdialog),"%s",_("Do you want to continue saving the file?"));
-        gtk_window_set_title(GTK_WINDOW(msgdialog),_("Quit"));
-
-        response = gtk_dialog_run(GTK_DIALOG(msgdialog));
-        gtk_widget_destroy(msgdialog);
-
-        switch (response)
-        {
-            case GTK_RESPONSE_YES:
-                break;
-            case GTK_RESPONSE_NO:
-            case GTK_RESPONSE_DELETE_EVENT:
-                /* Skip the following loop. */
-                Main_Stop_Button_Pressed = TRUE;
-                break;
-            default:
-                g_assert_not_reached ();
-                break;
-        }
-    }
-
-    for (l = etfilelist; l != NULL && !Main_Stop_Button_Pressed;
-         l = g_list_next (l))
-    {
-        FileTag = ((ET_File *)l->data)->FileTag->data;
-        FileNameNew = ((ET_File *)l->data)->FileNameNew->data;
-
-        /* We process only the files changed and not saved, or we force to save all
-         * files if force_saving_files==TRUE */
-        if ( force_saving_files
-        || FileTag->saved == FALSE || FileNameNew->saved == FALSE )
-        {
-            /* ET_Display_File_Data_To_UI ((ET_File *)l->data);
-             * Use of 'currentPath' to try to increase speed. Indeed, in many
-             * cases, the next file to select, is the next in the list. */
-            currentPath = Browser_List_Select_File_By_Etfile2 ((ET_File *)l->data,
-                                                               FALSE,
-                                                               currentPath);
-
-            fraction = (++progress_bar_index) / (double) nb_files_to_save;
-            gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(ProgressBar), fraction);
-            g_snprintf(progress_bar_text, 30, "%d/%d", progress_bar_index, nb_files_to_save);
-            gtk_progress_bar_set_text(GTK_PROGRESS_BAR(ProgressBar), progress_bar_text);
-
-            /* Needed to refresh status bar */
-            while (gtk_events_pending())
-                gtk_main_iteration();
-
-            // Save tag and rename file
-            saving_answer = Save_File ((ET_File *)l->data,
-                                       nb_files_to_save > 1 ? TRUE : FALSE,
-                                       force_saving_files);
-
-            if (saving_answer == -1)
-            {
-                /* Stop saving files + reinit progress bar */
-                gtk_progress_bar_set_text(GTK_PROGRESS_BAR(ProgressBar), "");
-                gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(ProgressBar), 0.0);
-                Statusbar_Message (_("Saving files was stopped"), TRUE);
-                /* To update state of command buttons */
-                Update_Command_Buttons_Sensivity();
-                Browser_Area_Set_Sensitive(TRUE);
-                Tag_Area_Set_Sensitive(TRUE);
-                File_Area_Set_Sensitive(TRUE);
-
-                if (currentPath)
-                {
-                    gtk_tree_path_free (currentPath);
-                }
-                return -1; /* We stop all actions */
-            }
-        }
-    }
-
-    if (currentPath)
-        gtk_tree_path_free(currentPath);
-
-    if (Main_Stop_Button_Pressed)
-        msg = g_strdup (_("Saving files was stopped"));
-    else
-        msg = g_strdup (_("All files have been saved"));
-
-    Main_Stop_Button_Pressed = FALSE;
-    uiaction = gtk_ui_manager_get_action(UIManager, "/ToolBar/Stop");
-    g_object_set(uiaction, "sensitive", FALSE, NULL);
-
-    /* Return to the saved position in the list */
-    ET_Display_File_Data_To_UI(etfile_save_position);
-    Browser_List_Select_File_By_Etfile(etfile_save_position,TRUE);
-
-    /* Browser is on mode : Artist + Album list */
-    toggle_radio = gtk_ui_manager_get_widget (UIManager,
-                                              "/ToolBar/ArtistViewMode");
-    if (gtk_toggle_tool_button_get_active (GTK_TOGGLE_TOOL_BUTTON (toggle_radio)))
-        Browser_Display_Tree_Or_Artist_Album_List();
-
-    /* To update state of command buttons */
-    Update_Command_Buttons_Sensivity();
-    Browser_Area_Set_Sensitive(TRUE);
-    Tag_Area_Set_Sensitive(TRUE);
-    File_Area_Set_Sensitive(TRUE);
-
-    /* Give again focus to the first entry, else the focus is passed to another */
-    gtk_widget_grab_focus(GTK_WIDGET(widget_focused));
-
-    gtk_progress_bar_set_text(GTK_PROGRESS_BAR(ProgressBar), "");
-    gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(ProgressBar), 0);
-    Statusbar_Message(msg,TRUE);
-    g_free(msg);
-    Browser_List_Refresh_Whole_List();
-    return TRUE;
-}
-
-
-
-/*
- * Delete a file on the hard disk
- */
-void Action_Delete_Selected_Files (void)
-{
-    Delete_Selected_Files_With_Answer();
-}
-
-
-static gint
-Delete_Selected_Files_With_Answer (void)
-{
-    GList *selfilelist;
-    GList *rowreflist = NULL;
-    GList *l;
-    gint   progress_bar_index;
-    gint   saving_answer;
-    gint   nb_files_to_delete;
-    gint   nb_files_deleted = 0;
-    gchar *msg;
-    gchar progress_bar_text[30];
-    double fraction;
-    GtkTreeModel *treemodel;
-    GtkTreeRowReference *rowref;
-    GtkTreeSelection *selection;
-    GError *error = NULL;
-
-    g_return_val_if_fail (ETCore->ETFileDisplayedList != NULL
-                          && BrowserList != NULL, FALSE);
-
-    /* Save the current displayed data */
-    ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
-
-    /* Number of files to save */
-    nb_files_to_delete = gtk_tree_selection_count_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserList)));
-
-    /* Initialize status bar */
-    gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(ProgressBar),0);
-    progress_bar_index = 0;
-    g_snprintf(progress_bar_text, 30, "%d/%d", progress_bar_index, nb_files_to_delete);
-    gtk_progress_bar_set_text(GTK_PROGRESS_BAR(ProgressBar), progress_bar_text);
-
-    /* Set to unsensitive all command buttons (except Quit button) */
-    Disable_Command_Buttons();
-    Browser_Area_Set_Sensitive(FALSE);
-    Tag_Area_Set_Sensitive(FALSE);
-    File_Area_Set_Sensitive(FALSE);
-
-    /* Show msgbox (if needed) to ask confirmation */
-    SF_HideMsgbox_Delete_File = 0;
-
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserList));
-    selfilelist = gtk_tree_selection_get_selected_rows(selection, &treemodel);
-
-    for (l = selfilelist; l != NULL; l = g_list_next (l))
-    {
-        rowref = gtk_tree_row_reference_new (treemodel, l->data);
-        rowreflist = g_list_prepend (rowreflist, rowref);
-    }
-
-    g_list_free_full (selfilelist, (GDestroyNotify)gtk_tree_path_free);
-    rowreflist = g_list_reverse (rowreflist);
-
-    for (l = rowreflist; l != NULL; l = g_list_next (l))
-    {
-        GtkTreePath *path;
-        ET_File *ETFile;
-
-        path = gtk_tree_row_reference_get_path (l->data);
-        ETFile = Browser_List_Get_ETFile_From_Path(path);
-        gtk_tree_path_free(path);
-
-        ET_Display_File_Data_To_UI(ETFile);
-        Browser_List_Select_File_By_Etfile(ETFile,FALSE);
-        fraction = (++progress_bar_index) / (double) nb_files_to_delete;
-        gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(ProgressBar), fraction);
-        g_snprintf(progress_bar_text, 30, "%d/%d", progress_bar_index, nb_files_to_delete);
-        gtk_progress_bar_set_text(GTK_PROGRESS_BAR(ProgressBar), progress_bar_text);
-         /* Needed to refresh status bar */
-        while (gtk_events_pending())
-            gtk_main_iteration();
-
-        saving_answer = delete_file (ETFile,
-                                     nb_files_to_delete > 1 ? TRUE : FALSE,
-                                     &error);
-
-        switch (saving_answer)
-        {
-            case 1:
-                nb_files_deleted += saving_answer;
-                // Remove file in the browser (corresponding line in the clist)
-                Browser_List_Remove_File(ETFile);
-                // Remove file from file list
-                ET_Remove_File_From_File_List(ETFile);
-                break;
-            case 0:
-                /* Distinguish between the file being skipped, and there being
-                 * an error during deletion. */
-                if (error)
-                {
-                    Log_Print (LOG_ERROR, _("Cannot delete file (%s)"),
-                               error->message);
-                    g_clear_error (&error);
-                }
-                break;
-            case -1:
-                // Stop deleting files + reinit progress bar
-                gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(ProgressBar),0.0);
-                // To update state of command buttons
-                Update_Command_Buttons_Sensivity();
-                Browser_Area_Set_Sensitive(TRUE);
-                Tag_Area_Set_Sensitive(TRUE);
-                File_Area_Set_Sensitive(TRUE);
-
-                return -1; // We stop all actions
-        }
-    }
-
-    g_list_free_full (rowreflist, (GDestroyNotify)gtk_tree_row_reference_free);
-
-    if (nb_files_deleted < nb_files_to_delete)
-        msg = g_strdup (_("Files have been partially deleted"));
-    else
-        msg = g_strdup (_("All files have been deleted"));
-
-    // It's important to displayed the new item, as it'll check the changes in Browser_Display_Tree_Or_Artist_Album_List
-    if (ETCore->ETFileDisplayed)
-        ET_Display_File_Data_To_UI(ETCore->ETFileDisplayed);
-    /*else if (ET_Displayed_File_List_Current())
-        ET_Display_File_Data_To_UI((ET_File *)ET_Displayed_File_List_Current()->data);*/
-
-    // Load list...
-    Browser_List_Load_File_List(ETCore->ETFileDisplayedList, NULL);
-    // Rebuild the list...
-    Browser_Display_Tree_Or_Artist_Album_List();
-
-    /* To update state of command buttons */
-    Update_Command_Buttons_Sensivity();
-    Browser_Area_Set_Sensitive(TRUE);
-    Tag_Area_Set_Sensitive(TRUE);
-    File_Area_Set_Sensitive(TRUE);
-
-    gtk_progress_bar_set_text(GTK_PROGRESS_BAR(ProgressBar), "");
-    gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(ProgressBar), 0);
-    Statusbar_Message(msg,TRUE);
-    g_free(msg);
-
-    return TRUE;
-}
-
-
-
-/*
- * Save changes of the ETFile (write tag and rename file)
- *  - multiple_files = TRUE  : when saving files, a msgbox appears with ability
- *                             to do the same action for all files.
- *  - multiple_files = FALSE : appears only a msgbox to ask confirmation.
- */
-static gint
-Save_File (ET_File *ETFile, gboolean multiple_files,
-           gboolean force_saving_files)
-{
-    File_Tag  *FileTag;
-    File_Name *FileNameNew;
-    gint stop_loop = 0;
-    //struct stat   statbuf;
-    //gchar *filename_cur = ((File_Name *)ETFile->FileNameCur->data)->value;
-    gchar *filename_cur_utf8 = ((File_Name *)ETFile->FileNameCur->data)->value_utf8;
-    gchar *filename_new_utf8 = ((File_Name *)ETFile->FileNameNew->data)->value_utf8;
-    gchar *basename_cur_utf8, *basename_new_utf8;
-    gchar *dirname_cur_utf8, *dirname_new_utf8;
-
-    g_return_val_if_fail (ETFile != NULL, 0);
-
-    basename_cur_utf8 = g_path_get_basename(filename_cur_utf8);
-    basename_new_utf8 = g_path_get_basename(filename_new_utf8);
-
-    /* Save the current displayed data */
-    //ET_Save_File_Data_From_UI((ET_File *)ETFileList->data); // Not needed, because it was done before
-    FileTag     = ETFile->FileTag->data;
-    FileNameNew = ETFile->FileNameNew->data;
-
-    /*
-     * Check if file was changed by an external program
-     */
-    /*stat(filename_cur,&statbuf);
-    if (ETFile->FileModificationTime != statbuf.st_mtime)
-    {
-        // File was changed
-        GtkWidget *msgbox = NULL;
-        gint response;
-
-        msg = g_strdup_printf(_("The file '%s' was changed by an external program.\nDo you want to continue?"),basename_cur_utf8);
-        msgbox = msg_box_new(_("Write File"),
-                             GTK_WINDOW(MainWindow),
-                             NULL,
-                             GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-                             msg,
-                             GTK_STOCK_DIALOG_WARNING,
-                             GTK_STOCK_NO,  GTK_RESPONSE_NO,
-                             GTK_STOCK_YES, GTK_RESPONSE_YES,
-                             NULL);
-        g_free(msg);
-
-        response = gtk_dialog_run(GTK_DIALOG(msgbox));
-        gtk_widget_destroy(msgbox);
-
-        switch (response)
-        {
-            case GTK_RESPONSE_YES:
-                break;
-            case GTK_RESPONSE_NO:
-            case GTK_RESPONSE_NONE:
-                stop_loop = -1;
-                return stop_loop;
-                break;
-        }
-    }*/
-
-
-    /*
-     * First part: write tag information (artist, title,...)
-     */
-    // Note : the option 'force_saving_files' is only used to save tags
-    if ( force_saving_files
-    || FileTag->saved == FALSE ) // This tag had been already saved ?
-    {
-        GtkWidget *msgdialog = NULL;
-        GtkWidget *msgdialog_check_button = NULL;
-        gint response;
-
-        if (CONFIRM_WRITE_TAG && !SF_HideMsgbox_Write_Tag)
-        {
-            // ET_Display_File_Data_To_UI(ETFile);
-
-            msgdialog = gtk_message_dialog_new(GTK_WINDOW(MainWindow),
-                                               GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-                                               GTK_MESSAGE_QUESTION,
-                                               GTK_BUTTONS_NONE,
-                                               _("Do you want to write the tag of file '%s'?"),
-                                               basename_cur_utf8);
-            gtk_window_set_title(GTK_WINDOW(msgdialog),_("Confirm Tag Writing"));
-            if (multiple_files)
-            {
-                GtkWidget *message_area;
-                message_area = gtk_message_dialog_get_message_area(GTK_MESSAGE_DIALOG(msgdialog));
-                msgdialog_check_button = gtk_check_button_new_with_label(_("Repeat action for the remaining files"));
-                gtk_container_add(GTK_CONTAINER(message_area),msgdialog_check_button);
-                gtk_widget_show (msgdialog_check_button);
-                gtk_dialog_add_buttons(GTK_DIALOG(msgdialog),GTK_STOCK_DISCARD,GTK_RESPONSE_NO,GTK_STOCK_CANCEL,GTK_RESPONSE_CANCEL,GTK_STOCK_SAVE,GTK_RESPONSE_YES,NULL);
-                gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(msgdialog_check_button), TRUE); // Checked by default
-            }else
-            {
-                gtk_dialog_add_buttons (GTK_DIALOG (msgdialog),
-                                        GTK_STOCK_CANCEL, GTK_RESPONSE_NO,
-                                        GTK_STOCK_SAVE, GTK_RESPONSE_YES,
-                                        NULL);
-            }
-
-            gtk_dialog_set_default_response (GTK_DIALOG (msgdialog),
-                                             GTK_RESPONSE_YES);
-            SF_ButtonPressed_Write_Tag = response = gtk_dialog_run(GTK_DIALOG(msgdialog));
-            // When check button in msgbox was activated : do not display the message again
-            if (msgdialog_check_button && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(msgdialog_check_button)))
-                SF_HideMsgbox_Write_Tag = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(msgdialog_check_button));
-            gtk_widget_destroy(msgdialog);
-        }else
-        {
-            if (SF_HideMsgbox_Write_Tag)
-                response = SF_ButtonPressed_Write_Tag;
-            else
-                response = GTK_RESPONSE_YES;
-        }
-
-        switch (response)
-        {
-            case GTK_RESPONSE_YES:
-            {
-                gboolean rc;
-
-                // if 'SF_HideMsgbox_Write_Tag is TRUE', then errors are displayed only in log
-                rc = Write_File_Tag(ETFile,SF_HideMsgbox_Write_Tag);
-                // if an error occurs when 'SF_HideMsgbox_Write_Tag is TRUE', we don't stop saving...
-                if (rc != TRUE && !SF_HideMsgbox_Write_Tag)
-                {
-                    stop_loop = -1;
-                    return stop_loop;
-                }
-                break;
-            }
-            case GTK_RESPONSE_NO:
-                break;
-            case GTK_RESPONSE_CANCEL:
-            case GTK_RESPONSE_DELETE_EVENT:
-                stop_loop = -1;
-                return stop_loop;
-                break;
-            default:
-                g_assert_not_reached ();
-                break;
-        }
-    }
-
-
-    /*
-     * Second part: rename the file
-     */
-    // Do only if changed! (don't take force_saving_files into account)
-    if ( FileNameNew->saved == FALSE ) // This filename had been already saved ?
-    {
-        GtkWidget *msgdialog = NULL;
-        GtkWidget *msgdialog_check_button = NULL;
-        gint response;
-
-        if (CONFIRM_RENAME_FILE && !SF_HideMsgbox_Rename_File)
-        {
-            gchar *msgdialog_title = NULL;
-            gchar *msg = NULL;
-            gchar *msg1 = NULL;
-            // ET_Display_File_Data_To_UI(ETFile);
-
-            dirname_cur_utf8 = g_path_get_dirname(filename_cur_utf8);
-            dirname_new_utf8 = g_path_get_dirname(filename_new_utf8);
-
-            // Directories were renamed? or only filename?
-            if (g_utf8_collate(dirname_cur_utf8,dirname_new_utf8) != 0)
-            {
-                if (g_utf8_collate(basename_cur_utf8,basename_new_utf8) != 0)
-                {
-                    // Directories and filename changed
-                    msgdialog_title = g_strdup (_("Rename File and Directory"));
-                    msg = g_strdup(_("File and directory rename confirmation required"));
-                    msg1 = g_strdup_printf(_("Do you want to rename the file and directory '%s' to '%s'?"),
-                                           filename_cur_utf8, filename_new_utf8);
-                }else
-                {
-                    // Only directories changed
-                    msgdialog_title = g_strdup (_("Rename Directory"));
-                    msg = g_strdup(_("Directory rename confirmation required"));
-                    msg1 = g_strdup_printf(_("Do you want to rename the directory '%s' to '%s'?"),
-                                           dirname_cur_utf8, dirname_new_utf8);
-                }
-            }else
-            {
-                // Only filename changed
-                msgdialog_title = g_strdup (_("Rename File"));
-                msg = g_strdup(_("File rename confirmation required"));
-                msg1 = g_strdup_printf(_("Do you want to rename the file '%s' to '%s'?"),
-                                       basename_cur_utf8, basename_new_utf8);
-            }
-
-            g_free(dirname_cur_utf8);
-            g_free(dirname_new_utf8);
-
-            msgdialog = gtk_message_dialog_new(GTK_WINDOW(MainWindow),
-                                               GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-                                               GTK_MESSAGE_QUESTION,
-                                               GTK_BUTTONS_NONE,
-                                               "%s",
-                                               msg);
-            gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(msgdialog),"%s",msg1);
-            gtk_window_set_title(GTK_WINDOW(msgdialog),msgdialog_title);
-            if (multiple_files)
-            {
-                GtkWidget *message_area;
-                message_area = gtk_message_dialog_get_message_area(GTK_MESSAGE_DIALOG(msgdialog));
-                msgdialog_check_button = gtk_check_button_new_with_label(_("Repeat action for the remaining files"));
-                gtk_container_add(GTK_CONTAINER(message_area),msgdialog_check_button);
-                gtk_widget_show (msgdialog_check_button);
-                gtk_dialog_add_buttons(GTK_DIALOG(msgdialog),GTK_STOCK_DISCARD,GTK_RESPONSE_NO,GTK_STOCK_CANCEL,GTK_RESPONSE_CANCEL,GTK_STOCK_SAVE,GTK_RESPONSE_YES,NULL);
-                gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(msgdialog_check_button), TRUE); // Checked by default
-            }else
-            {
-                gtk_dialog_add_buttons(GTK_DIALOG(msgdialog),GTK_STOCK_DISCARD,GTK_RESPONSE_NO,GTK_STOCK_SAVE,GTK_RESPONSE_YES,NULL);
-            }
-            g_free(msg);
-            g_free(msg1);
-            g_free(msgdialog_title);
-            gtk_dialog_set_default_response (GTK_DIALOG (msgdialog),
-                                             GTK_RESPONSE_YES);
-            SF_ButtonPressed_Rename_File = response = gtk_dialog_run(GTK_DIALOG(msgdialog));
-            if (msgdialog_check_button && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(msgdialog_check_button)))
-                SF_HideMsgbox_Rename_File = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(msgdialog_check_button));
-            gtk_widget_destroy(msgdialog);
-        }else
-        {
-            if (SF_HideMsgbox_Rename_File)
-                response = SF_ButtonPressed_Rename_File;
-            else
-                response = GTK_RESPONSE_YES;
-        }
-
-        switch(response)
-        {
-            case GTK_RESPONSE_YES:
-            {
-                gboolean rc;
-                GError *error = NULL;
-                gchar *cur_filename = ((File_Name *)ETFile->FileNameCur->data)->value;
-                gchar *new_filename = ((File_Name *)ETFile->FileNameNew->data)->value;
-                rc = et_rename_file (cur_filename, new_filename, &error);
-
-                // if 'SF_HideMsgbox_Rename_File is TRUE', then errors are displayed only in log
-                if (!rc)
-                {
-                    if (!SF_HideMsgbox_Rename_File)
-                    {
-                        GtkWidget *msgdialog;
-
-                        msgdialog = gtk_message_dialog_new (GTK_WINDOW (MainWindow),
-                                                            GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-                                                            GTK_MESSAGE_ERROR,
-                                                            GTK_BUTTONS_CLOSE,
-                                                            _("Cannot rename file '%s' to '%s'"),
-                                                            filename_cur_utf8,
-                                                            filename_new_utf8);
-                        gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (msgdialog),
-                                                                  "%s",
-                                                                  error->message);
-                        gtk_window_set_title (GTK_WINDOW (msgdialog),
-                                              _("Rename File Error"));
-
-                        gtk_dialog_run (GTK_DIALOG (msgdialog));
-                        gtk_widget_destroy (msgdialog);
-                    }
-
-                    Log_Print (LOG_ERROR,
-                               _("Cannot rename file '%s' to '%s': %s"),
-                               filename_cur_utf8, filename_new_utf8,
-                               error->message);
-
-                    Statusbar_Message (_("File(s) not renamed"), TRUE);
-                    g_error_free (error);
-                }
-
-                // if an error occurs when 'SF_HideMsgbox_Rename_File is TRUE', we don't stop saving...
-                if (!rc && !SF_HideMsgbox_Rename_File)
-                {
-                    stop_loop = -1;
-                    return stop_loop;
-                }
-
-                /* Mark after renaming files. */
-                ETFile->FileNameCur = ETFile->FileNameNew;
-                ET_Mark_File_Name_As_Saved (ETFile);
-                break;
-            }
-            case GTK_RESPONSE_NO:
-                break;
-            case GTK_RESPONSE_CANCEL:
-            case GTK_RESPONSE_DELETE_EVENT:
-                stop_loop = -1;
-                return stop_loop;
-                break;
-            default:
-                g_assert_not_reached ();
-                break;
-        }
-    }
-
-    g_free(basename_cur_utf8);
-    g_free(basename_new_utf8);
-
-    /* Refresh file into browser list */
-    // Browser_List_Refresh_File_In_List(ETFile);
-
-    return 1;
-}
-
-/*
- * et_rename_file:
- * @old_filepath: path of file to be renamed
- * @new_filepath: path of renamed file
- * @error: a #GError to provide information on errors, or %NULL to ignore
- *
- * Rename @old_filepath to @new_filepath.
- *
- * Returns: %TRUE if the rename was successful, %FALSE otherwise
- */
-static gboolean
-et_rename_file (const char *old_filepath, const char *new_filepath,
-                GError **error)
-{
-    GFile *file_old;
-    GFile *file_new;
-    GFile *file_new_parent;
-
-    g_return_val_if_fail (old_filepath != NULL && new_filepath != NULL, FALSE);
-    g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-
-    file_old = g_file_new_for_path (old_filepath);
-    file_new = g_file_new_for_path (new_filepath);
-    file_new_parent = g_file_get_parent (file_new);
-
-    if (!g_file_make_directory_with_parents (file_new_parent, NULL, error))
-    {
-        /* Ignore an error if the directory already exists. */
-        if (!g_error_matches (*error, G_IO_ERROR, G_IO_ERROR_EXISTS))
-        {
-            g_object_unref (file_old);
-            g_object_unref (file_new);
-            g_object_unref (file_new_parent);
-            g_assert (error == NULL || *error != NULL);
-            return FALSE;
-        }
-        g_clear_error (error);
-    }
-
-    g_assert (error == NULL || *error == NULL);
-    g_object_unref (file_new_parent);
-
-    /* Move the file. */
-    if (!g_file_move (file_old, file_new, G_FILE_COPY_NONE, NULL, NULL, NULL,
-                      error))
-    {
-        if (g_error_matches (*error, G_IO_ERROR, G_IO_ERROR_EXISTS))
-        {
-            /* Possibly a case change on a case-insensitive filesystem. */
-            /* TODO: casefold the paths of both files, and check to see whether
-             * they only differ by case? */
-            gchar *tmp_filename;
-            mode_t old_mode;
-            gint fd;
-            GFile *tmp_file;
-            GError *tmp_error = NULL;
-
-            tmp_filename = g_strconcat (old_filepath, ".XXXXXX", NULL);
-
-            old_mode = umask (077);
-            fd = mkstemp (tmp_filename);
-            umask (old_mode);
-
-            if (fd >= 0)
-            {
-                close (fd);
-            }
-
-            tmp_file = g_file_new_for_path (tmp_filename);
-            g_free (tmp_filename);
-
-            if (!g_file_move (file_old, tmp_file, G_FILE_COPY_OVERWRITE, NULL,
-                              NULL, NULL, &tmp_error))
-            {
-                g_file_delete (tmp_file, NULL, NULL);
-
-                g_object_unref (tmp_file);
-                g_clear_error (error);
-                g_propagate_error (error, tmp_error);
-                goto err;
-            }
-            else
-            {
-                /* Move to temporary file succeeded, now move to the real new
-                 * location. */
-                if (!g_file_move (tmp_file, file_new, G_FILE_COPY_NONE, NULL,
-                                  NULL, NULL, &tmp_error))
-                {
-                    g_file_move (tmp_file, file_old, G_FILE_COPY_NONE, NULL,
-                                 NULL, NULL, NULL);
-                    g_object_unref (tmp_file);
-                    g_clear_error (error);
-                    g_propagate_error (error, tmp_error);
-                    goto err;
-                }
-                else
-                {
-                    /* Move succeeded, so clear the original error about the
-                     * new file already existing. */
-                    g_object_unref (tmp_file);
-                    g_clear_error (error);
-                    goto out;
-                }
-            }
-        }
-        else
-        {
-            /* Error moving file. */
-            goto err;
-        }
-    }
-
-out:
-    g_object_unref (file_old);
-    g_object_unref (file_new);
-    g_assert (error == NULL || *error == NULL);
-    return TRUE;
-
-err:
-    g_object_unref (file_new_parent);
-    g_object_unref (file_old);
-    g_object_unref (file_new);
-    g_assert (error == NULL || *error != NULL);
-    return FALSE;
-}
-
-/*
- * Write tag of the ETFile
- * Return TRUE => OK
- *        FALSE => error
- */
-static gboolean
-Write_File_Tag (ET_File *ETFile, gboolean hide_msgbox)
-{
-    GError *error = NULL;
-    gchar *cur_filename_utf8 = ((File_Name *)ETFile->FileNameCur->data)->value_utf8;
-    gchar *msg = NULL;
-    gchar *basename_utf8;
-    GtkWidget *msgdialog;
-
-    basename_utf8 = g_path_get_basename(cur_filename_utf8);
-    msg = g_strdup_printf(_("Writing tag of '%s'"),basename_utf8);
-    Statusbar_Message(msg,TRUE);
-    g_free(msg);
-    msg = NULL;
-
-    if (ET_Save_File_Tag_To_HD (ETFile, &error))
-    {
-        Statusbar_Message(_("Tag(s) written"),TRUE);
-        g_free (basename_utf8);
-        return TRUE;
-    }
-
-    Log_Print (LOG_ERROR, "%s", error->message);
-
-    if (!hide_msgbox)
-    {
-        msgdialog = gtk_message_dialog_new(GTK_WINDOW(MainWindow),
-                             GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-                             GTK_MESSAGE_ERROR,
-                             GTK_BUTTONS_CLOSE,
-                             _("Cannot write tag in file '%s'"),
-                             basename_utf8);
-        gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (msgdialog),
-                                                  "%s", error->message);
-        gtk_window_set_title(GTK_WINDOW(msgdialog),_("Tag Write Error"));
-
-        gtk_dialog_run(GTK_DIALOG(msgdialog));
-        gtk_widget_destroy(msgdialog);
-    }
-
-    g_clear_error (&error);
-    g_free(basename_utf8);
-
-    return FALSE;
-}
-
-/*
- * Delete the file ETFile
- */
-static gint
-delete_file (ET_File *ETFile, gboolean multiple_files, GError **error)
-{
-    GtkWidget *msgdialog;
-    GtkWidget *msgdialog_check_button = NULL;
-    gchar *cur_filename;
-    gchar *cur_filename_utf8;
-    gchar *basename_utf8;
-    gint response;
-    gint stop_loop;
-
-    g_return_val_if_fail (ETFile != NULL, FALSE);
-    g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-
-    /* Filename of the file to delete. */
-    cur_filename      = ((File_Name *)(ETFile->FileNameCur)->data)->value;
-    cur_filename_utf8 = ((File_Name *)(ETFile->FileNameCur)->data)->value_utf8;
-    basename_utf8 = g_path_get_basename (cur_filename_utf8);
-
-    /*
-     * Remove the file
-     */
-    if (CONFIRM_DELETE_FILE && !SF_HideMsgbox_Delete_File)
-    {
-        if (multiple_files)
-        {
-            GtkWidget *message_area;
-            msgdialog = gtk_message_dialog_new(GTK_WINDOW(MainWindow),
-                                               GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-                                               GTK_MESSAGE_QUESTION,
-                                               GTK_BUTTONS_NONE,
-                                               _("Do you really want to delete the file '%s'?"),
-                                               basename_utf8);
-            message_area = gtk_message_dialog_get_message_area(GTK_MESSAGE_DIALOG(msgdialog));
-            msgdialog_check_button = gtk_check_button_new_with_label(_("Repeat action for the remaining files"));
-            gtk_container_add(GTK_CONTAINER(message_area),msgdialog_check_button);
-            gtk_dialog_add_buttons(GTK_DIALOG(msgdialog),GTK_STOCK_NO,GTK_RESPONSE_NO,GTK_STOCK_CANCEL,GTK_RESPONSE_CANCEL,GTK_STOCK_DELETE,GTK_RESPONSE_YES,NULL);
-            gtk_window_set_title(GTK_WINDOW(msgdialog),_("Delete File"));
-            //GTK_TOGGLE_BUTTON(msgbox_check_button)->active = TRUE; // Checked by default
-        }else
-        {
-            msgdialog = gtk_message_dialog_new(GTK_WINDOW(MainWindow),
-                                               GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-                                               GTK_MESSAGE_QUESTION,
-                                               GTK_BUTTONS_NONE,
-                                               _("Do you really want to delete the file '%s'?"),
-                                               basename_utf8);
-            gtk_window_set_title(GTK_WINDOW(msgdialog),_("Delete File"));
-            gtk_dialog_add_buttons(GTK_DIALOG(msgdialog),GTK_STOCK_CANCEL,GTK_RESPONSE_NO,GTK_STOCK_DELETE,GTK_RESPONSE_YES,NULL);
-        }
-        gtk_dialog_set_default_response (GTK_DIALOG (msgdialog),
-                                         GTK_RESPONSE_YES);
-        SF_ButtonPressed_Delete_File = response = gtk_dialog_run(GTK_DIALOG(msgdialog));
-        if (msgdialog_check_button && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(msgdialog_check_button)))
-            SF_HideMsgbox_Delete_File = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(msgdialog_check_button));
-        gtk_widget_destroy(msgdialog);
-    }else
-    {
-        if (SF_HideMsgbox_Delete_File)
-            response = SF_ButtonPressed_Delete_File;
-        else
-            response = GTK_RESPONSE_YES;
-    }
-
-    switch (response)
-    {
-        case GTK_RESPONSE_YES:
-        {
-            GFile *cur_file = g_file_new_for_path (cur_filename);
-
-            if (g_file_delete (cur_file, NULL, error))
-            {
-                gchar *msg = g_strdup_printf(_("File '%s' deleted"), basename_utf8);
-                Statusbar_Message(msg,FALSE);
-                g_free(msg);
-                g_free(basename_utf8);
-                g_object_unref (cur_file);
-                g_assert (error == NULL || *error == NULL);
-                return 1;
-            }
-
-            /* Error in deleting file. */
-            g_assert (error == NULL || *error != NULL);
-            break;
-        }
-        case GTK_RESPONSE_NO:
-            break;
-        case GTK_RESPONSE_CANCEL:
-        case GTK_RESPONSE_DELETE_EVENT:
-            stop_loop = -1;
-            g_free(basename_utf8);
-            return stop_loop;
-            break;
-        default:
-            g_assert_not_reached ();
-            break;
-    }
-
-    g_free(basename_utf8);
-    return 0;
-}
-
-void
-Action_Select_Browser_Style (void)
-{
-    g_return_if_fail (ETCore->ETFileDisplayedList != NULL);
-
-    /* Save the current displayed data */
-    ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
-
-    Browser_Display_Tree_Or_Artist_Album_List();
-
-    Update_Command_Buttons_Sensivity();
-}
-
-/*
- * et_on_action_select_scan_mode:
- * @action: the action on which the signal was emitted
- * @current: the member of the action group which has just been activated
- * @user_data: user data set when the signal handler was connected
- *
- * Select the current scanner mode and open the scanner window.
- */
-void
-et_on_action_select_scan_mode (GtkRadioAction *action, GtkRadioAction *current,
-                               gpointer user_data)
-{
-    gint active_value;
-
-    active_value = gtk_radio_action_get_current_value (action);
-
-    if (SCANNER_TYPE != active_value)
-    {
-        SCANNER_TYPE = active_value;
-    }
-
-    Open_ScannerWindow (SCANNER_TYPE);
-}
-
-
-/*
- * Scans the specified directory: and load files into a list.
- * If the path doesn't exist, we free the previous loaded list of files.
- */
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <string.h>
-gboolean Read_Directory (gchar *path_real)
-{
-    GFile *dir;
-    GFileEnumerator *dir_enumerator;
-    GError *error = NULL;
-    gchar *msg;
-    gchar  progress_bar_text[30];
-    guint  nbrfile = 0;
-    double fraction;
-    GList *FileList = NULL;
-    GList *l;
-    gint   progress_bar_index = 0;
-    GtkAction *uiaction;
-    GtkWidget *artist_radio;
-
-    g_return_val_if_fail (path_real != NULL, FALSE);
-
-    ReadingDirectory = TRUE;    /* A flag to avoid to start another reading */
-
-    /* Initialize file list */
-    ET_Core_Free();
-    ET_Core_Initialize();
-    Update_Command_Buttons_Sensivity();
-
-    /* Initialize browser list */
-    Browser_List_Clear();
-
-    /* Clear entry boxes  */
-    Clear_File_Entry_Field();
-    Clear_Header_Fields();
-    Clear_Tag_Entry_Fields();
-    gtk_label_set_text(GTK_LABEL(FileIndex),"0/0:");
-
-    artist_radio = gtk_ui_manager_get_widget (UIManager, "/ToolBar/ArtistViewMode");
-    gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (artist_radio),
-                                       FALSE);
-    //Browser_Display_Tree_Or_Artist_Album_List(); // To show the corresponding lists...
-
-    // Set to unsensitive the Browser Area, to avoid to select another file while loading the first one
-    Browser_Area_Set_Sensitive(FALSE);
-
-    /* Placed only here, to empty the previous list of files */
-    dir = g_file_new_for_path (path_real);
-    dir_enumerator = g_file_enumerate_children (dir,
-                                                G_FILE_ATTRIBUTE_STANDARD_NAME ","
-                                                G_FILE_ATTRIBUTE_STANDARD_TYPE ","
-                                                G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN,
-                                                G_FILE_QUERY_INFO_NONE,
-                                                NULL, &error);
-    if (!dir_enumerator)
-    {
-        // Message if the directory doesn't exist...
-        GtkWidget *msgdialog;
-        gchar *path_utf8 = filename_to_display(path_real);
-
-        msgdialog = gtk_message_dialog_new(GTK_WINDOW(MainWindow),
-                                           GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-                                           GTK_MESSAGE_ERROR,
-                                           GTK_BUTTONS_CLOSE,
-                                           _("Cannot read directory '%s'"),
-                                           path_utf8);
-        gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (msgdialog),
-                                                  "%s", error->message);
-        gtk_window_set_title(GTK_WINDOW(msgdialog),_("Directory Read Error"));
-
-        gtk_dialog_run(GTK_DIALOG(msgdialog));
-        gtk_widget_destroy(msgdialog);
-        g_free(path_utf8);
-
-        ReadingDirectory = FALSE; //Allow a new reading
-        Browser_Area_Set_Sensitive(TRUE);
-        g_object_unref (dir);
-        g_error_free (error);
-        return FALSE;
-    }
-
-    /* Open the window to quit recursion (since 27/04/2007 : not only into recursion mode) */
-    Set_Busy_Cursor();
-    uiaction = gtk_ui_manager_get_action(UIManager, "/ToolBar/Stop");
-    g_object_set(uiaction, "sensitive", BROWSE_SUBDIR, NULL);
-    //if (BROWSE_SUBDIR)
-        Open_Quit_Recursion_Function_Window();
-
-    /* Read the directory recursively */
-    msg = g_strdup_printf(_("Search in progress…"));
-    Statusbar_Message(msg,FALSE);
-    g_free(msg);
-    // Search the supported files
-    FileList = read_directory_recursively (FileList, dir_enumerator,
-                                           BROWSE_SUBDIR);
-    g_file_enumerator_close (dir_enumerator, NULL, &error);
-    g_object_unref (dir_enumerator);
-    g_object_unref (dir);
-
-    nbrfile = g_list_length(FileList);
-
-    gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(ProgressBar), 0.0);
-    g_snprintf(progress_bar_text, 30, "%d/%d", 0, nbrfile);
-    gtk_progress_bar_set_text(GTK_PROGRESS_BAR(ProgressBar), progress_bar_text);
-
-    // Load the supported files (Extension recognized)
-    for (l = FileList; l != NULL && !Main_Stop_Button_Pressed;
-         l = g_list_next (l))
-    {
-        gchar *filename_real = l->data; /* Contains real filenames. */
-        gchar *filename_utf8 = filename_to_display(filename_real);
-
-        msg = g_strdup_printf(_("File: '%s'"),filename_utf8);
-        Statusbar_Message(msg,FALSE);
-        g_free(msg);
-        g_free(filename_utf8);
-
-        // Warning: Do not free filename_real because ET_Add_File.. uses it for internal structures
-        ET_Add_File_To_File_List(filename_real);
-
-        // Update the progress bar
-        fraction = (++progress_bar_index) / (double) nbrfile;
-        gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(ProgressBar), fraction);
-        g_snprintf(progress_bar_text, 30, "%d/%d", progress_bar_index, nbrfile);
-        gtk_progress_bar_set_text(GTK_PROGRESS_BAR(ProgressBar), progress_bar_text);
-        while (gtk_events_pending())
-            gtk_main_iteration();
-    }
-
-    /* Just free the list, not the data. */
-    g_list_free (FileList);
-    gtk_progress_bar_set_text(GTK_PROGRESS_BAR(ProgressBar), "");
-
-    /* Close window to quit recursion */
-    Destroy_Quit_Recursion_Function_Window();
-    Main_Stop_Button_Pressed = FALSE;
-    uiaction = gtk_ui_manager_get_action(UIManager, "/ToolBar/Stop");
-    g_object_set(uiaction, "sensitive", FALSE, NULL);
-
-    //ET_Debug_Print_File_List(ETCore->ETFileList,__FILE__,__LINE__,__FUNCTION__);
-
-    if (ETCore->ETFileList)
-    {
-        //GList *etfilelist;
-        /* Load the list of file into the browser list widget */
-        Browser_Display_Tree_Or_Artist_Album_List();
-
-        /* Load the list attached to the TrackEntry */
-        Load_Track_List_To_UI();
-
-        /* Display the first file */
-        //No need to select first item, because Browser_Display_Tree_Or_Artist_Album_List() does this
-        //etfilelist = ET_Displayed_File_List_First();
-        //if (etfilelist)
-        //{
-        //    ET_Display_File_Data_To_UI((ET_File *)etfilelist->data);
-        //    Browser_List_Select_File_By_Etfile((ET_File *)etfilelist->data,FALSE);
-        //}
-
-        /* Prepare message for the status bar */
-        if (BROWSE_SUBDIR)
-        {
-            msg = g_strdup_printf (ngettext ("Found one file in this directory and subdirectories",
-                                             "Found %d files in this directory and subdirectories",
-                                             ETCore->ETFileDisplayedList_Length),
-                                   ETCore->ETFileDisplayedList_Length);
-        }
-        else
-        {
-            msg = g_strdup_printf (ngettext ("Found one file in this directory",
-                                             "Found %d files in this directory",
-                                             ETCore->ETFileDisplayedList_Length),
-                                   ETCore->ETFileDisplayedList_Length);
-        }
-    }else
-    {
-        /* Clear entry boxes */
-        Clear_File_Entry_Field();
-        Clear_Header_Fields();
-        Clear_Tag_Entry_Fields();
-
-        if (FileIndex)
-            gtk_label_set_text(GTK_LABEL(FileIndex),"0/0:");
-
-
-
-	/* Translators: No files, as in "0 files". */
-        Browser_Label_Set_Text(_("No files")); /* See in ET_Display_Filename_To_UI */
-
-        /* Prepare message for the status bar */
-        if (BROWSE_SUBDIR)
-            msg = g_strdup(_("No file found in this directory and subdirectories"));
-        else
-            msg = g_strdup(_("No file found in this directory"));
-    }
-
-    /* Update sensitivity of buttons and menus */
-    Update_Command_Buttons_Sensivity();
-
-    Browser_Area_Set_Sensitive(TRUE);
-
-    gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(ProgressBar), 0.0);
-    Statusbar_Message(msg,FALSE);
-    g_free(msg);
-    Set_Unbusy_Cursor();
-    ReadingDirectory = FALSE;
-
-    return TRUE;
-}
-
-
-
-/*
- * Recurse the path to create a list of files. Return a GList of the files found.
- */
-static GList *
-read_directory_recursively (GList *file_list, GFileEnumerator *dir_enumerator,
-                            gboolean recurse)
-{
-    GError *error = NULL;
-    GFileInfo *info;
-    const char *file_name;
-    gboolean is_hidden;
-    GFileType type;
-
-    g_return_val_if_fail (dir_enumerator != NULL, file_list);
-
-    while ((info = g_file_enumerator_next_file (dir_enumerator, NULL, &error))
-           != NULL)
-    {
-        if (Main_Stop_Button_Pressed)
-        {
-            g_object_unref (info);
-            return file_list;
-        }
-
-        file_name = g_file_info_get_name (info);
-        is_hidden = g_file_info_get_is_hidden (info);
-        type = g_file_info_get_file_type (info);
-
-        /* Hidden directory like '.mydir' will also be browsed if allowed. */
-        if (!is_hidden || (BROWSE_HIDDEN_DIR && is_hidden))
-        {
-            if (type == G_FILE_TYPE_DIRECTORY)
-            {
-                if (recurse)
-                {
-                    /* Searching for files recursively. */
-                    GFile *child_dir = g_file_get_child (g_file_enumerator_get_container (dir_enumerator),
-                                                         file_name);
-                    GFileEnumerator *childdir_enumerator;
-                    GError *child_error = NULL;
-                    childdir_enumerator = g_file_enumerate_children (child_dir,
-                                                                     G_FILE_ATTRIBUTE_STANDARD_NAME ","
-                                                                     G_FILE_ATTRIBUTE_STANDARD_TYPE ","
-                                                                     G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN,
-                                                                     G_FILE_QUERY_INFO_NONE,
-                                                                     NULL, &child_error);
-                    if (!childdir_enumerator)
-                    {
-                        Log_Print (LOG_ERROR,
-                                   _("Error opening directory '%s' (%s)"),
-                                   file_name, child_error->message);
-                        g_error_free (child_error);
-                        g_object_unref (child_dir);
-                        g_object_unref (info);
-                        continue;
-                    }
-                    file_list = read_directory_recursively (file_list,
-                                                            childdir_enumerator,
-                                                            recurse);
-                    g_object_unref (child_dir);
-                    g_file_enumerator_close (childdir_enumerator, NULL,
-                                             &error);
-                    g_object_unref (childdir_enumerator);
-                }
-            }
-            else if (type == G_FILE_TYPE_REGULAR &&
-                      ET_File_Is_Supported (file_name))
-            {
-                GFile *file = g_file_get_child (g_file_enumerator_get_container (dir_enumerator),
-                                                file_name);
-                gchar *file_path = g_file_get_path (file);
-                /*Do not free this file_path, it will be used by g_list*/
-                file_list = g_list_append (file_list, file_path);
-                g_object_unref (file);
-            }
-
-            // Just to not block X events
-            while (gtk_events_pending())
-                gtk_main_iteration();
-        }
-        g_object_unref (info);
-    }
-
-    if (error)
-    {
-        Log_Print (LOG_ERROR, _("Cannot read directory (%s)"), error->message);
-        g_error_free (error);
-    }
-
-    return file_list;
-}
-
-/*
- * Window with the 'STOP' button to stop recursion when reading directories
- */
-static void
-Open_Quit_Recursion_Function_Window (void)
-{
-    if (QuitRecursionWindow != NULL)
-        return;
-    QuitRecursionWindow = gtk_message_dialog_new (GTK_WINDOW (MainWindow),
-                                                  GTK_DIALOG_DESTROY_WITH_PARENT,
-                                                  GTK_MESSAGE_OTHER,
-                                                  GTK_BUTTONS_NONE,
-                                                  "%s",
-                                                  _("Searching for audio files…"));
-    gtk_window_set_title (GTK_WINDOW (QuitRecursionWindow), _("Searching"));
-    gtk_dialog_add_button (GTK_DIALOG (QuitRecursionWindow), GTK_STOCK_STOP,
-                                       GTK_RESPONSE_CANCEL);
-
-    g_signal_connect (G_OBJECT (QuitRecursionWindow),"response",
-                      G_CALLBACK (et_on_quit_recursion_response), NULL);
-
-    gtk_widget_show_all(QuitRecursionWindow);
-}
-
-static void
-Destroy_Quit_Recursion_Function_Window (void)
-{
-    if (QuitRecursionWindow)
-    {
-        gtk_widget_destroy(QuitRecursionWindow);
-        QuitRecursionWindow = NULL;
-        /*Statusbar_Message(_("Recursive file search interrupted."),FALSE);*/
-    }
-}
-
-static void
-et_on_quit_recursion_response (GtkDialog *dialog, gint response_id,
-                               gpointer user_data)
-{
-    switch (response_id)
-    {
-        case GTK_RESPONSE_CANCEL:
-            Action_Main_Stop_Button_Pressed ();
-            Destroy_Quit_Recursion_Function_Window ();
-            break;
-        case GTK_RESPONSE_DELETE_EVENT:
-            Destroy_Quit_Recursion_Function_Window ();
-            break;
-        default:
-            g_assert_not_reached ();
-            break;
-    }
-}
-
-/*
- * To stop the recursive search within directories or saving files
- */
-void Action_Main_Stop_Button_Pressed (void)
-{
-    GtkAction *uiaction;
-    Main_Stop_Button_Pressed = TRUE;
-    uiaction = gtk_ui_manager_get_action(UIManager, "/ToolBar/Stop");
-    g_object_set(uiaction, "sensitive", FALSE, NULL);
-}
-
-static void
-ui_widget_set_sensitive (const gchar *menu, const gchar *action, gboolean sensitive)
-{
-    GtkAction *uiaction;
-    gchar *path;
-
-    path = g_strconcat("/MenuBar/", menu,"/", action, NULL);
-
-    uiaction = gtk_ui_manager_get_action(UIManager, path);
-    if (uiaction)
-    {
-        gtk_action_set_sensitive (uiaction, sensitive);
-    }
-    else
-    {
-        g_warning ("Action not found for path '%s'", path);
-    }
-    g_free(path);
-}
-
-/*
- * Update_Command_Buttons_Sensivity: Set to sensitive/unsensitive the state of each button into
- * the commands area and menu items in function of state of the "main list".
- */
-void Update_Command_Buttons_Sensivity (void)
-{
-    GtkAction *uiaction;
-
-    if (!ETCore->ETFileDisplayedList)
-    {
-        /* No file found */
-
-        /* File and Tag frames */
-        File_Area_Set_Sensitive(FALSE);
-        Tag_Area_Set_Sensitive(FALSE);
-
-        /* Tool bar buttons (the others are covered by the menu) */
-        uiaction = gtk_ui_manager_get_action(UIManager, "/ToolBar/Stop");
-        g_object_set(uiaction, "sensitive", FALSE, NULL);
-
-        /* Scanner Window */
-        if (ScannerWindow)
-        {
-            gtk_dialog_set_response_sensitive (GTK_DIALOG (ScannerWindow),
-                                               GTK_RESPONSE_APPLY, FALSE);
-        }
-
-        /* Menu commands */
-        ui_widget_set_sensitive(MENU_FILE, AM_OPEN_FILE_WITH, FALSE);
-        ui_widget_set_sensitive(MENU_FILE, AM_INVERT_SELECTION, FALSE);
-        ui_widget_set_sensitive(MENU_FILE, AM_DELETE_FILE, FALSE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_ASCENDING_FILENAME, FALSE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_DESCENDING_FILENAME,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_ASCENDING_CREATION_DATE,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_DESCENDING_CREATION_DATE,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_ASCENDING_TRACK_NUMBER,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_DESCENDING_TRACK_NUMBER,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_ASCENDING_TITLE,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_DESCENDING_TITLE,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_ASCENDING_ARTIST,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_DESCENDING_ARTIST,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_ASCENDING_ALBUM,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_DESCENDING_ALBUM,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_ASCENDING_YEAR,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_DESCENDING_YEAR,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_ASCENDING_GENRE,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_DESCENDING_GENRE,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_ASCENDING_COMMENT,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH, AM_SORT_DESCENDING_COMMENT,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_ASCENDING_FILE_TYPE,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_DESCENDING_FILE_TYPE,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_ASCENDING_FILE_SIZE,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_DESCENDING_FILE_SIZE,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_ASCENDING_FILE_DURATION,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_DESCENDING_FILE_DURATION,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_ASCENDING_FILE_BITRATE,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_DESCENDING_FILE_BITRATE,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_ASCENDING_FILE_SAMPLERATE,FALSE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH, AM_SORT_DESCENDING_FILE_SAMPLERATE,FALSE);
-        ui_widget_set_sensitive (MENU_GO, AM_PREV, FALSE);
-        ui_widget_set_sensitive (MENU_GO, AM_NEXT, FALSE);
-        ui_widget_set_sensitive (MENU_GO, AM_FIRST, FALSE);
-        ui_widget_set_sensitive (MENU_GO, AM_LAST, FALSE);
-        ui_widget_set_sensitive (MENU_EDIT, AM_REMOVE, FALSE);
-        ui_widget_set_sensitive(MENU_FILE, AM_UNDO, FALSE);
-        ui_widget_set_sensitive(MENU_FILE, AM_REDO, FALSE);
-        ui_widget_set_sensitive(MENU_FILE, AM_SAVE, FALSE);
-        ui_widget_set_sensitive(MENU_FILE, AM_SAVE_FORCED, FALSE);
-        ui_widget_set_sensitive (MENU_EDIT, AM_UNDO_HISTORY, FALSE);
-        ui_widget_set_sensitive (MENU_EDIT, AM_REDO_HISTORY, FALSE);
-        ui_widget_set_sensitive (MENU_EDIT, AM_SEARCH_FILE, FALSE);
-        ui_widget_set_sensitive(MENU_MISC, AM_FILENAME_FROM_TXT, FALSE);
-        ui_widget_set_sensitive(MENU_MISC, AM_WRITE_PLAYLIST, FALSE);
-        ui_widget_set_sensitive (MENU_FILE, AM_RUN_AUDIO_PLAYER, FALSE);
-        ui_widget_set_sensitive (MENU_SCANNER_PATH,
-                                 AM_SCANNER_FILL_TAG, FALSE);
-        ui_widget_set_sensitive (MENU_SCANNER_PATH,
-                                 AM_SCANNER_RENAME_FILE, FALSE);
-        ui_widget_set_sensitive (MENU_SCANNER_PATH,
-                                 AM_SCANNER_PROCESS_FIELDS, FALSE);
-        ui_widget_set_sensitive (MENU_VIEW, AM_ARTIST_VIEW_MODE, FALSE);
-
-        return;
-    }else
+    /* Move the file. */
+    if (!g_file_move (file_old, file_new, G_FILE_COPY_NONE, NULL, NULL, NULL,
+                      error))
     {
-        GtkWidget *artist_radio = NULL;
-        GList *selfilelist = NULL;
-        ET_File *etfile;
-        gboolean has_undo = FALSE;
-        gboolean has_redo = FALSE;
-        //gboolean has_to_save = FALSE;
-        GtkTreeSelection *selection;
-
-        /* File and Tag frames */
-        File_Area_Set_Sensitive(TRUE);
-        Tag_Area_Set_Sensitive(TRUE);
-
-        /* Tool bar buttons */
-        uiaction = gtk_ui_manager_get_action(UIManager, "/ToolBar/Stop");
-        g_object_set(uiaction, "sensitive", FALSE, NULL);
-
-        /* Scanner Window */
-        if (ScannerWindow)
+        if (g_error_matches (*error, G_IO_ERROR, G_IO_ERROR_EXISTS))
         {
-            gtk_dialog_set_response_sensitive (GTK_DIALOG (ScannerWindow),
-                                               GTK_RESPONSE_APPLY, TRUE);
-        }
+            /* Possibly a case change on a case-insensitive filesystem. */
+            /* TODO: casefold the paths of both files, and check to see whether
+             * they only differ by case? */
+            gchar *tmp_filename;
+            mode_t old_mode;
+            gint fd;
+            GFile *tmp_file;
+            GError *tmp_error = NULL;
 
-        /* Commands into menu */
-        ui_widget_set_sensitive(MENU_FILE, AM_OPEN_FILE_WITH,TRUE);
-        ui_widget_set_sensitive(MENU_FILE, AM_INVERT_SELECTION,TRUE);
-        ui_widget_set_sensitive(MENU_FILE, AM_DELETE_FILE,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_ASCENDING_FILENAME,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_DESCENDING_FILENAME,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_ASCENDING_CREATION_DATE,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_DESCENDING_CREATION_DATE,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_ASCENDING_TRACK_NUMBER,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_DESCENDING_TRACK_NUMBER,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_ASCENDING_TITLE,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_DESCENDING_TITLE,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_ASCENDING_ARTIST,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_DESCENDING_ARTIST,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_ASCENDING_ALBUM,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_DESCENDING_ALBUM,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_ASCENDING_YEAR,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_DESCENDING_YEAR,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_ASCENDING_GENRE,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_DESCENDING_GENRE,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_ASCENDING_COMMENT,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_TAG_PATH,AM_SORT_DESCENDING_COMMENT,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_ASCENDING_FILE_TYPE,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_DESCENDING_FILE_TYPE,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_ASCENDING_FILE_SIZE,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_DESCENDING_FILE_SIZE,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_ASCENDING_FILE_DURATION,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_DESCENDING_FILE_DURATION,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_ASCENDING_FILE_BITRATE,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_DESCENDING_FILE_BITRATE,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_ASCENDING_FILE_SAMPLERATE,TRUE);
-        ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_DESCENDING_FILE_SAMPLERATE,TRUE);
-        ui_widget_set_sensitive (MENU_EDIT, AM_REMOVE, TRUE);
-        ui_widget_set_sensitive (MENU_EDIT, AM_SEARCH_FILE, TRUE);
-        ui_widget_set_sensitive(MENU_MISC,AM_FILENAME_FROM_TXT,TRUE);
-        ui_widget_set_sensitive(MENU_MISC,AM_WRITE_PLAYLIST,TRUE);
-        ui_widget_set_sensitive (MENU_FILE, AM_RUN_AUDIO_PLAYER, TRUE);
-        ui_widget_set_sensitive (MENU_SCANNER_PATH,
-                                 AM_SCANNER_FILL_TAG,TRUE);
-        ui_widget_set_sensitive (MENU_SCANNER_PATH,
-                                 AM_SCANNER_RENAME_FILE, TRUE);
-        ui_widget_set_sensitive (MENU_SCANNER_PATH,
-                                 AM_SCANNER_PROCESS_FIELDS, TRUE);
-        ui_widget_set_sensitive (MENU_VIEW, AM_ARTIST_VIEW_MODE, TRUE);
-
-        /* Check if one of the selected files has undo or redo data */
-        if (BrowserList)
-        {
-            GList *l;
+            tmp_filename = g_strconcat (old_filepath, ".XXXXXX", NULL);
 
-            selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserList));
-            selfilelist = gtk_tree_selection_get_selected_rows(selection, NULL);
+            old_mode = umask (077);
+            fd = mkstemp (tmp_filename);
+            umask (old_mode);
 
-            for (l = selfilelist; l != NULL; l = g_list_next (l))
+            if (fd >= 0)
             {
-                etfile = Browser_List_Get_ETFile_From_Path (l->data);
-                has_undo    |= ET_File_Data_Has_Undo_Data(etfile);
-                has_redo    |= ET_File_Data_Has_Redo_Data(etfile);
-                //has_to_save |= ET_Check_If_File_Is_Saved(etfile);
-                if ((has_undo && has_redo /*&& has_to_save*/) || !l->next) // Useless to check the other files
-                    break;
+                close (fd);
             }
 
-            g_list_free_full (selfilelist, (GDestroyNotify)gtk_tree_path_free);
-        }
-
-        /* Enable undo commands if there are undo data */
-        if (has_undo)
-            ui_widget_set_sensitive(MENU_FILE, AM_UNDO, TRUE);
-        else
-            ui_widget_set_sensitive(MENU_FILE, AM_UNDO, FALSE);
-
-        /* Enable redo commands if there are redo data */
-        if (has_redo)
-            ui_widget_set_sensitive(MENU_FILE, AM_REDO, TRUE);
-        else
-            ui_widget_set_sensitive(MENU_FILE, AM_REDO, FALSE);
-
-        /* Enable save file command if file has been changed */
-        // Desactivated because problem with only one file in the list, as we can't change the selected file => can't mark file as changed
-        /*if (has_to_save)
-            ui_widget_set_sensitive(MENU_FILE, AM_SAVE, FALSE);
-        else*/
-            ui_widget_set_sensitive(MENU_FILE, AM_SAVE, TRUE);
-        
-        ui_widget_set_sensitive(MENU_FILE, AM_SAVE_FORCED, TRUE);
-
-        /* Enable undo command if there are data into main undo list (history list) */
-        if (ET_History_File_List_Has_Undo_Data())
-            ui_widget_set_sensitive (MENU_EDIT, AM_UNDO_HISTORY, TRUE);
-        else
-            ui_widget_set_sensitive (MENU_EDIT, AM_UNDO_HISTORY, FALSE);
-
-        /* Enable redo commands if there are data into main redo list (history list) */
-        if (ET_History_File_List_Has_Redo_Data())
-            ui_widget_set_sensitive (MENU_EDIT, AM_REDO_HISTORY, TRUE);
-        else
-            ui_widget_set_sensitive (MENU_EDIT, AM_REDO_HISTORY, FALSE);
+            tmp_file = g_file_new_for_path (tmp_filename);
+            g_free (tmp_filename);
 
-        artist_radio = gtk_ui_manager_get_widget (UIManager,
-                                                  "/ToolBar/ArtistViewMode");
+            if (!g_file_move (file_old, tmp_file, G_FILE_COPY_OVERWRITE, NULL,
+                              NULL, NULL, &tmp_error))
+            {
+                g_file_delete (tmp_file, NULL, NULL);
 
-        if (gtk_toggle_tool_button_get_active (GTK_TOGGLE_TOOL_BUTTON (artist_radio)))
-        {
-            ui_widget_set_sensitive (MENU_VIEW, AM_COLLAPSE_TREE, FALSE);
-            ui_widget_set_sensitive (MENU_VIEW, AM_INITIALIZE_TREE, FALSE);
+                g_object_unref (tmp_file);
+                g_clear_error (error);
+                g_propagate_error (error, tmp_error);
+                goto err;
+            }
+            else
+            {
+                /* Move to temporary file succeeded, now move to the real new
+                 * location. */
+                if (!g_file_move (tmp_file, file_new, G_FILE_COPY_NONE, NULL,
+                                  NULL, NULL, &tmp_error))
+                {
+                    g_file_move (tmp_file, file_old, G_FILE_COPY_NONE, NULL,
+                                 NULL, NULL, NULL);
+                    g_object_unref (tmp_file);
+                    g_clear_error (error);
+                    g_propagate_error (error, tmp_error);
+                    goto err;
+                }
+                else
+                {
+                    /* Move succeeded, so clear the original error about the
+                     * new file already existing. */
+                    g_object_unref (tmp_file);
+                    g_clear_error (error);
+                    goto out;
+                }
+            }
         }
         else
         {
-            ui_widget_set_sensitive (MENU_VIEW, AM_COLLAPSE_TREE, TRUE);
-            ui_widget_set_sensitive (MENU_VIEW, AM_INITIALIZE_TREE, TRUE);
+            /* Error moving file. */
+            goto err;
         }
     }
 
-    if (!ETCore->ETFileDisplayedList->prev)    /* Is it the 1st item ? */
-    {
-        ui_widget_set_sensitive (MENU_GO, AM_PREV, FALSE);
-        ui_widget_set_sensitive (MENU_GO, AM_FIRST, FALSE);
-    }else
-    {
-        ui_widget_set_sensitive (MENU_GO, AM_PREV, TRUE);
-        ui_widget_set_sensitive (MENU_GO, AM_FIRST, TRUE);
-    }
-    if (!ETCore->ETFileDisplayedList->next)    /* Is it the last item ? */
-    {
-        ui_widget_set_sensitive (MENU_GO, AM_NEXT, FALSE);
-        ui_widget_set_sensitive (MENU_GO, AM_LAST, FALSE);
-    }else
-    {
-        ui_widget_set_sensitive (MENU_GO, AM_NEXT, TRUE);
-        ui_widget_set_sensitive (MENU_GO, AM_LAST, TRUE);
-    }
-}
-
-/*
- * Just to disable buttons when we are saving files (do not disable Quit button)
- */
-static void
-Disable_Command_Buttons (void)
-{
-    /* Scanner Window */
-    if (ScannerWindow)
-    {
-        gtk_dialog_set_response_sensitive (GTK_DIALOG (ScannerWindow),
-                                           GTK_RESPONSE_APPLY, FALSE);
-    }
-
-    /* "File" menu commands */
-    ui_widget_set_sensitive(MENU_FILE,AM_OPEN_FILE_WITH,FALSE);
-    ui_widget_set_sensitive(MENU_FILE,AM_INVERT_SELECTION,FALSE);
-    ui_widget_set_sensitive(MENU_FILE,AM_DELETE_FILE,FALSE);
-    ui_widget_set_sensitive (MENU_GO, AM_FIRST, FALSE);
-    ui_widget_set_sensitive (MENU_GO, AM_PREV, FALSE);
-    ui_widget_set_sensitive (MENU_GO, AM_NEXT, FALSE);
-    ui_widget_set_sensitive (MENU_GO, AM_LAST, FALSE);
-    ui_widget_set_sensitive (MENU_EDIT, AM_REMOVE, FALSE);
-    ui_widget_set_sensitive(MENU_FILE,AM_UNDO,FALSE);
-    ui_widget_set_sensitive(MENU_FILE,AM_REDO,FALSE);
-    ui_widget_set_sensitive(MENU_FILE,AM_SAVE,FALSE);
-    ui_widget_set_sensitive(MENU_FILE,AM_SAVE_FORCED,FALSE);
-    ui_widget_set_sensitive (MENU_EDIT, AM_UNDO_HISTORY, FALSE);
-    ui_widget_set_sensitive (MENU_EDIT, AM_REDO_HISTORY, FALSE);
-
-    /* "Scanner" menu commands */
-    ui_widget_set_sensitive (MENU_SCANNER_PATH, AM_SCANNER_FILL_TAG,
-                             FALSE);
-    ui_widget_set_sensitive (MENU_SCANNER_PATH,
-                             AM_SCANNER_RENAME_FILE, FALSE);
-    ui_widget_set_sensitive (MENU_SCANNER_PATH,
-                             AM_SCANNER_PROCESS_FIELDS, FALSE);
-
-}
-
-/*
- * Disable (FALSE) / Enable (TRUE) all user widgets in the tag area
- */
-static void
-Tag_Area_Set_Sensitive (gboolean activate)
-{
-    g_return_if_fail (TagArea != NULL);
+out:
+    g_object_unref (file_old);
+    g_object_unref (file_new);
+    g_assert (error == NULL || *error == NULL);
+    return TRUE;
 
-    /* TAG Area (entries + buttons). */
-    gtk_widget_set_sensitive(gtk_bin_get_child(GTK_BIN(TagArea)),activate);
+err:
+    g_object_unref (file_new_parent);
+    g_object_unref (file_old);
+    g_object_unref (file_new);
+    g_assert (error == NULL || *error != NULL);
+    return FALSE;
 }
 
 /*
- * Disable (FALSE) / Enable (TRUE) all user widgets in the file area
+ * Write tag of the ETFile
+ * Return TRUE => OK
+ *        FALSE => error
  */
-static void
-File_Area_Set_Sensitive (gboolean activate)
-{
-    g_return_if_fail (FileArea != NULL);
-
-    /* File Area. */
-    gtk_widget_set_sensitive(gtk_bin_get_child(GTK_BIN(FileArea)),activate);
-    /*gtk_widget_set_sensitive(GTK_WIDGET(FileEntry),activate);*/
-}
-
-static void
-et_tag_notebook_hide_images_tab (GtkWidget *tag_notebook)
+static gboolean
+Write_File_Tag (ET_File *ETFile, gboolean hide_msgbox)
 {
-    gtk_widget_hide (images_tab);
-}
+    GError *error = NULL;
+    gchar *cur_filename_utf8 = ((File_Name *)ETFile->FileNameCur->data)->value_utf8;
+    gchar *msg = NULL;
+    gchar *basename_utf8;
+    GtkWidget *msgdialog;
 
-static void
-et_tag_notebook_show_images_tab (GtkWidget *tag_notebook)
-{
-    gtk_widget_show (images_tab);
-}
+    basename_utf8 = g_path_get_basename(cur_filename_utf8);
+    msg = g_strdup_printf (_("Writing tag of ‘%s’"),basename_utf8);
+    et_application_window_status_bar_message (ET_APPLICATION_WINDOW (MainWindow),
+                                              msg, TRUE);
+    g_free(msg);
+    msg = NULL;
 
-/*
- * Display controls according the kind of tag... (Hide some controls if not available for a tag type)
- */
-void Tag_Area_Display_Controls (ET_File *ETFile)
-{
-    g_return_if_fail (ETFile != NULL && ETFile->ETFileDescription != NULL);
-    g_return_if_fail (TitleLabel != NULL);
-
-    /* Common controls for all tags. */
-    gtk_widget_show(GTK_WIDGET(TitleLabel));
-    gtk_widget_show(GTK_WIDGET(TitleEntry));
-    gtk_widget_show(GTK_WIDGET(ArtistLabel));
-    gtk_widget_show(GTK_WIDGET(ArtistEntry));
-    gtk_widget_show(GTK_WIDGET(AlbumArtistLabel));
-    gtk_widget_show(GTK_WIDGET(AlbumArtistEntry));
-    gtk_widget_show(GTK_WIDGET(AlbumLabel));
-    gtk_widget_show(GTK_WIDGET(AlbumEntry));
-    gtk_widget_show(GTK_WIDGET(YearLabel));
-    gtk_widget_show(GTK_WIDGET(YearEntry));
-    gtk_widget_show(GTK_WIDGET(TrackLabel));
-    gtk_widget_show(GTK_WIDGET(TrackEntryCombo));
-    gtk_widget_show(GTK_WIDGET(TrackTotalEntry));
-    gtk_widget_show(GTK_WIDGET(TrackMButtonSequence));
-    gtk_widget_show(GTK_WIDGET(TrackMButtonNbrFiles));
-    gtk_widget_show(GTK_WIDGET(GenreLabel));
-    gtk_widget_show(GTK_WIDGET(GenreCombo));
-    gtk_widget_show(GTK_WIDGET(CommentLabel));
-    gtk_widget_show(GTK_WIDGET(CommentEntry));
-
-    // Special controls to display or not!
-    switch (ETFile->ETFileDescription->TagType)
+    if (ET_Save_File_Tag_To_HD (ETFile, &error))
     {
-        case ID3_TAG:
-            if (!FILE_WRITING_ID3V2_WRITE_TAG)
-            {
-                // ID3v1 : Hide specifics ID3v2 fields if not activated!
-                gtk_widget_hide(GTK_WIDGET(DiscNumberLabel));
-                gtk_widget_hide(GTK_WIDGET(DiscNumberEntry));
-                gtk_widget_hide(GTK_WIDGET(ComposerLabel));
-                gtk_widget_hide(GTK_WIDGET(ComposerEntry));
-                gtk_widget_hide(GTK_WIDGET(OrigArtistLabel));
-                gtk_widget_hide(GTK_WIDGET(OrigArtistEntry));
-                gtk_widget_hide(GTK_WIDGET(CopyrightLabel));
-                gtk_widget_hide(GTK_WIDGET(CopyrightEntry));
-                gtk_widget_hide(GTK_WIDGET(URLLabel));
-                gtk_widget_hide(GTK_WIDGET(URLEntry));
-                gtk_widget_hide(GTK_WIDGET(EncodedByLabel));
-                gtk_widget_hide(GTK_WIDGET(EncodedByEntry));
-                et_tag_notebook_hide_images_tab (TagNoteBook);
-            }else
-            {
-                gtk_widget_show(GTK_WIDGET(DiscNumberLabel));
-                gtk_widget_show(GTK_WIDGET(DiscNumberEntry));
-                gtk_widget_show(GTK_WIDGET(ComposerLabel));
-                gtk_widget_show(GTK_WIDGET(ComposerEntry));
-                gtk_widget_show(GTK_WIDGET(OrigArtistLabel));
-                gtk_widget_show(GTK_WIDGET(OrigArtistEntry));
-                gtk_widget_show(GTK_WIDGET(CopyrightLabel));
-                gtk_widget_show(GTK_WIDGET(CopyrightEntry));
-                gtk_widget_show(GTK_WIDGET(URLLabel));
-                gtk_widget_show(GTK_WIDGET(URLEntry));
-                gtk_widget_show(GTK_WIDGET(EncodedByLabel));
-                gtk_widget_show(GTK_WIDGET(EncodedByEntry));
-                et_tag_notebook_show_images_tab (TagNoteBook);
-            }
-            break;
-
-#ifdef ENABLE_OGG
-        case OGG_TAG:
-            gtk_widget_show(GTK_WIDGET(DiscNumberLabel));
-            gtk_widget_show(GTK_WIDGET(DiscNumberEntry));
-            gtk_widget_show(GTK_WIDGET(ComposerLabel));
-            gtk_widget_show(GTK_WIDGET(ComposerEntry));
-            gtk_widget_show(GTK_WIDGET(OrigArtistLabel));
-            gtk_widget_show(GTK_WIDGET(OrigArtistEntry));
-            gtk_widget_show(GTK_WIDGET(CopyrightLabel));
-            gtk_widget_show(GTK_WIDGET(CopyrightEntry));
-            gtk_widget_show(GTK_WIDGET(URLLabel));
-            gtk_widget_show(GTK_WIDGET(URLEntry));
-            gtk_widget_show(GTK_WIDGET(EncodedByLabel));
-            gtk_widget_show(GTK_WIDGET(EncodedByEntry));
-            et_tag_notebook_show_images_tab (TagNoteBook);
-            break;
-#endif
-
-#ifdef ENABLE_OPUS
-        case OPUS_TAG:
-            gtk_widget_show (GTK_WIDGET (DiscNumberLabel));
-            gtk_widget_show (GTK_WIDGET (DiscNumberEntry));
-            gtk_widget_show (GTK_WIDGET (ComposerLabel));
-            gtk_widget_show (GTK_WIDGET (ComposerEntry));
-            gtk_widget_show (GTK_WIDGET (OrigArtistLabel));
-            gtk_widget_show (GTK_WIDGET (OrigArtistEntry));
-            gtk_widget_show (GTK_WIDGET (CopyrightLabel));
-            gtk_widget_show (GTK_WIDGET (CopyrightEntry));
-            gtk_widget_show (GTK_WIDGET (URLLabel));
-            gtk_widget_show (GTK_WIDGET (URLEntry));
-            gtk_widget_show (GTK_WIDGET (EncodedByLabel));
-            gtk_widget_show (GTK_WIDGET (EncodedByEntry));
-            et_tag_notebook_show_images_tab (TagNoteBook);
-            break;
-#endif
-
-#ifdef ENABLE_FLAC
-        case FLAC_TAG:
-            gtk_widget_show(GTK_WIDGET(DiscNumberLabel));
-            gtk_widget_show(GTK_WIDGET(DiscNumberEntry));
-            gtk_widget_show(GTK_WIDGET(ComposerLabel));
-            gtk_widget_show(GTK_WIDGET(ComposerEntry));
-            gtk_widget_show(GTK_WIDGET(OrigArtistLabel));
-            gtk_widget_show(GTK_WIDGET(OrigArtistEntry));
-            gtk_widget_show(GTK_WIDGET(CopyrightLabel));
-            gtk_widget_show(GTK_WIDGET(CopyrightEntry));
-            gtk_widget_show(GTK_WIDGET(URLLabel));
-            gtk_widget_show(GTK_WIDGET(URLEntry));
-            gtk_widget_show(GTK_WIDGET(EncodedByLabel));
-            gtk_widget_show(GTK_WIDGET(EncodedByEntry));
-            et_tag_notebook_show_images_tab (TagNoteBook);
-            break;
-#endif
-
-        case APE_TAG:
-            gtk_widget_show(GTK_WIDGET(DiscNumberLabel));
-            gtk_widget_show(GTK_WIDGET(DiscNumberEntry));
-            gtk_widget_show(GTK_WIDGET(ComposerLabel));
-            gtk_widget_show(GTK_WIDGET(ComposerEntry));
-            gtk_widget_show(GTK_WIDGET(OrigArtistLabel));
-            gtk_widget_show(GTK_WIDGET(OrigArtistEntry));
-            gtk_widget_show(GTK_WIDGET(CopyrightLabel));
-            gtk_widget_show(GTK_WIDGET(CopyrightEntry));
-            gtk_widget_show(GTK_WIDGET(URLLabel));
-            gtk_widget_show(GTK_WIDGET(URLEntry));
-            gtk_widget_show(GTK_WIDGET(EncodedByLabel));
-            gtk_widget_show(GTK_WIDGET(EncodedByEntry));
-            et_tag_notebook_show_images_tab (TagNoteBook);
-            break;
-
-#ifdef ENABLE_MP4
-        case MP4_TAG:
-            gtk_widget_show (GTK_WIDGET (DiscNumberLabel));
-            gtk_widget_show (GTK_WIDGET (DiscNumberEntry));
-            gtk_widget_show (GTK_WIDGET (ComposerLabel));
-            gtk_widget_show (GTK_WIDGET (ComposerEntry));
-            gtk_widget_hide(GTK_WIDGET(OrigArtistLabel));
-            gtk_widget_hide(GTK_WIDGET(OrigArtistEntry));
-            gtk_widget_show (GTK_WIDGET (CopyrightLabel));
-            gtk_widget_show (GTK_WIDGET (CopyrightEntry));
-            gtk_widget_hide(GTK_WIDGET(URLLabel));
-            gtk_widget_hide(GTK_WIDGET(URLEntry));
-            gtk_widget_show (GTK_WIDGET (EncodedByLabel));
-            gtk_widget_show (GTK_WIDGET (EncodedByEntry));
-            et_tag_notebook_show_images_tab (TagNoteBook);
-            break;
-#endif
-
-#ifdef ENABLE_WAVPACK
-        case WAVPACK_TAG:
-            gtk_widget_show(GTK_WIDGET(DiscNumberLabel));
-            gtk_widget_show(GTK_WIDGET(DiscNumberEntry));
-            gtk_widget_show(GTK_WIDGET(ComposerLabel));
-            gtk_widget_show(GTK_WIDGET(ComposerEntry));
-            gtk_widget_show(GTK_WIDGET(OrigArtistLabel));
-            gtk_widget_show(GTK_WIDGET(OrigArtistEntry));
-            gtk_widget_show(GTK_WIDGET(CopyrightLabel));
-            gtk_widget_show(GTK_WIDGET(CopyrightEntry));
-            gtk_widget_show(GTK_WIDGET(URLLabel));
-            gtk_widget_show(GTK_WIDGET(URLEntry));
-            gtk_widget_show(GTK_WIDGET(EncodedByLabel));
-            gtk_widget_show(GTK_WIDGET(EncodedByEntry));
-            et_tag_notebook_hide_images_tab (TagNoteBook);
-            break;
-#endif /* ENABLE_WAVPACK */
-
-        case UNKNOWN_TAG:
-        default:
-            gtk_widget_hide(GTK_WIDGET(DiscNumberLabel));
-            gtk_widget_hide(GTK_WIDGET(DiscNumberEntry));
-            gtk_widget_hide(GTK_WIDGET(ComposerLabel));
-            gtk_widget_hide(GTK_WIDGET(ComposerEntry));
-            gtk_widget_hide(GTK_WIDGET(OrigArtistLabel));
-            gtk_widget_hide(GTK_WIDGET(OrigArtistEntry));
-            gtk_widget_hide(GTK_WIDGET(CopyrightLabel));
-            gtk_widget_hide(GTK_WIDGET(CopyrightEntry));
-            gtk_widget_hide(GTK_WIDGET(URLLabel));
-            gtk_widget_hide(GTK_WIDGET(URLEntry));
-            gtk_widget_hide(GTK_WIDGET(EncodedByLabel));
-            gtk_widget_hide(GTK_WIDGET(EncodedByEntry));
-            et_tag_notebook_hide_images_tab (TagNoteBook);
-            break;
+        msg = g_strdup_printf (_("Wrote tag of ‘%s’"), basename_utf8);
+        et_application_window_status_bar_message (ET_APPLICATION_WINDOW (MainWindow),
+                                                  msg, TRUE);
+        g_free (msg);
+        g_free (basename_utf8);
+        return TRUE;
     }
-}
 
+    Log_Print (LOG_ERROR, "%s", error->message);
 
-/*
- * Clear the entries of tag area
- */
-void Clear_Tag_Entry_Fields (void)
-{
-    /* GtkTextBuffer *textbuffer; */
-
-    g_return_if_fail (TitleEntry != NULL);
-
-    gtk_entry_set_text(GTK_ENTRY(TitleEntry),                       "");
-    gtk_entry_set_text(GTK_ENTRY(ArtistEntry),                      "");
-    gtk_entry_set_text(GTK_ENTRY(AlbumArtistEntry),                 "");
-    gtk_entry_set_text(GTK_ENTRY(AlbumEntry),                       "");
-    gtk_entry_set_text(GTK_ENTRY(DiscNumberEntry),                  "");
-    gtk_entry_set_text(GTK_ENTRY(YearEntry),                        "");
-    gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(TrackEntryCombo))),  "");
-    gtk_entry_set_text(GTK_ENTRY(TrackTotalEntry),                  "");
-    gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(GenreCombo))),       "");
-    gtk_entry_set_text(GTK_ENTRY(CommentEntry),                     "");
-    /* textbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(CommentView));
-     * gtk_text_buffer_set_text(GTK_TEXT_BUFFER(textbuffer),           "", -1); */
-    gtk_entry_set_text(GTK_ENTRY(ComposerEntry),                    "");
-    gtk_entry_set_text(GTK_ENTRY(OrigArtistEntry),                  "");
-    gtk_entry_set_text(GTK_ENTRY(CopyrightEntry),                   "");
-    gtk_entry_set_text(GTK_ENTRY(URLEntry),                         "");
-    gtk_entry_set_text(GTK_ENTRY(EncodedByEntry),                   "");
-    PictureEntry_Clear();
-}
+    if (!hide_msgbox)
+    {
+        msgdialog = gtk_message_dialog_new(GTK_WINDOW(MainWindow),
+                             GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+                             GTK_MESSAGE_ERROR,
+                             GTK_BUTTONS_CLOSE,
+                             _("Cannot write tag in file ‘%s’"),
+                             basename_utf8);
+        gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (msgdialog),
+                                                  "%s", error->message);
+        gtk_window_set_title(GTK_WINDOW(msgdialog),_("Tag Write Error"));
 
+        gtk_dialog_run(GTK_DIALOG(msgdialog));
+        gtk_widget_destroy(msgdialog);
+    }
 
-/*
- * Clear the entry of file area
- */
-void
-Clear_File_Entry_Field (void)
-{
-    g_return_if_fail (FileEntry != NULL);
+    g_clear_error (&error);
+    g_free(basename_utf8);
 
-    gtk_entry_set_text (GTK_ENTRY (FileEntry),"");
+    return FALSE;
 }
 
-
 /*
- * Clear the header information
+ * Scans the specified directory: and load files into a list.
+ * If the path doesn't exist, we free the previous loaded list of files.
  */
-void Clear_Header_Fields (void)
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <string.h>
+gboolean
+Read_Directory (const gchar *path_real)
 {
-    g_return_if_fail (VersionValueLabel != NULL);
-
-    /* Default values are MPs data */
-    gtk_label_set_text(GTK_LABEL(VersionLabel),        _("Encoder:"));
-    gtk_label_set_text(GTK_LABEL(VersionValueLabel),   "");
-    gtk_label_set_text(GTK_LABEL(BitrateValueLabel),   "");
-    gtk_label_set_text(GTK_LABEL(SampleRateValueLabel),"");
-    gtk_label_set_text(GTK_LABEL(ModeLabel),           _("Mode:"));
-    gtk_label_set_text(GTK_LABEL(ModeValueLabel),      "");
-    gtk_label_set_text(GTK_LABEL(SizeValueLabel),      "");
-    gtk_label_set_text(GTK_LABEL(DurationValueLabel),  "");
-}
-
+    GFile *dir;
+    GFileEnumerator *dir_enumerator;
+    GError *error = NULL;
+    gchar *msg;
+    gchar  progress_bar_text[30];
+    guint  nbrfile = 0;
+    double fraction;
+    GList *FileList = NULL;
+    GList *l;
+    gint   progress_bar_index = 0;
+    GAction *action;
+    EtApplicationWindow *window;
 
+    g_return_val_if_fail (path_real != NULL, FALSE);
 
+    ReadingDirectory = TRUE;    /* A flag to avoid to start another reading */
 
-/*
- * Load the default directory when the user interface is completely displayed
- * to avoid bad visualization effect at startup.
- */
-static void
-Init_Load_Default_Dir (void)
-{
-    //ETCore->ETFileList = NULL;
+    /* Initialize file list */
     ET_Core_Free();
     ET_Core_Initialize();
+    et_application_window_update_actions (ET_APPLICATION_WINDOW (MainWindow));
 
-    // Open the scanner window
-    if (OPEN_SCANNER_WINDOW_ON_STARTUP)
-        Open_ScannerWindow(SCANNER_TYPE); // Open the last selected scanner
+    window = ET_APPLICATION_WINDOW (MainWindow);
 
-    if (INIT_DIRECTORY)
-    {
-        Browser_Tree_Select_Dir(INIT_DIRECTORY);
-    }
-    else
-    {
-        Statusbar_Message(_("Select a directory to browse"),FALSE);
-        Browser_Load_Default_Directory();
-    }
+    /* Initialize browser list */
+    et_application_window_browser_clear (window);
 
-    // To set sensivity of buttons in the case if the default directory is invalid
-    Update_Command_Buttons_Sensivity();
+    /* Clear entry boxes  */
+    et_application_window_file_area_clear (window);
+    et_application_window_tag_area_clear (window);
 
-    g_source_remove(idle_handler_id);
-}
+    // Set to unsensitive the Browser Area, to avoid to select another file while loading the first one
+    et_application_window_browser_set_sensitive (window, FALSE);
 
+    /* Placed only here, to empty the previous list of files */
+    dir = g_file_new_for_path (path_real);
+    dir_enumerator = g_file_enumerate_children (dir,
+                                                G_FILE_ATTRIBUTE_STANDARD_NAME ","
+                                                G_FILE_ATTRIBUTE_STANDARD_TYPE ","
+                                                G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN,
+                                                G_FILE_QUERY_INFO_NONE,
+                                                NULL, &error);
+    if (!dir_enumerator)
+    {
+        // Message if the directory doesn't exist...
+        GtkWidget *msgdialog;
+        gchar *path_utf8 = filename_to_display(path_real);
 
+        msgdialog = gtk_message_dialog_new(GTK_WINDOW(MainWindow),
+                                           GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+                                           GTK_MESSAGE_ERROR,
+                                           GTK_BUTTONS_CLOSE,
+                                           _("Cannot read directory ‘%s’"),
+                                           path_utf8);
+        gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (msgdialog),
+                                                  "%s", error->message);
+        gtk_window_set_title(GTK_WINDOW(msgdialog),_("Directory Read Error"));
 
-static void
-Convert_P20_And_Underscore_Into_Spaces (GtkWidget *entry)
-{
-    gchar *string = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
+        gtk_dialog_run(GTK_DIALOG(msgdialog));
+        gtk_widget_destroy(msgdialog);
+        g_free(path_utf8);
 
-    Scan_Convert_Underscore_Into_Space(string);
-    Scan_Convert_P20_Into_Space(string);
-    gtk_entry_set_text(GTK_ENTRY(entry),string);
-    g_free(string);
-}
+        ReadingDirectory = FALSE; //Allow a new reading
+        et_application_window_browser_set_sensitive (window, TRUE);
+        g_object_unref (dir);
+        g_error_free (error);
+        return FALSE;
+    }
 
-static void
-Convert_Space_Into_Underscore (GtkWidget *entry)
-{
-    gchar *string = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
+    /* Open the window to quit recursion (since 27/04/2007 : not only into recursion mode) */
+    Set_Busy_Cursor();
+    action = g_action_map_lookup_action (G_ACTION_MAP (MainWindow), "stop");
+    g_settings_bind (MainSettings, "browse-subdir", G_SIMPLE_ACTION (action),
+                     "enabled", G_SETTINGS_BIND_GET);
+    Open_Quit_Recursion_Function_Window();
 
-    Scan_Convert_Space_Into_Underscore (string);
-    gtk_entry_set_text(GTK_ENTRY(entry),string);
-    g_free(string);
-}
+    /* Read the directory recursively */
+    msg = g_strdup_printf(_("Search in progress…"));
+    et_application_window_status_bar_message (window, msg, FALSE);
+    g_free (msg);
+    /* Search the supported files. */
+    FileList = read_directory_recursively (FileList, dir_enumerator,
+                                           g_settings_get_boolean (MainSettings,
+                                                                   "browse-subdir"));
+    g_file_enumerator_close (dir_enumerator, NULL, &error);
+    g_object_unref (dir_enumerator);
+    g_object_unref (dir);
 
-static void
-Convert_All_Uppercase (GtkWidget *entry)
-{
-    gchar *string = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
+    nbrfile = g_list_length(FileList);
 
-    Scan_Process_Fields_All_Uppercase(string);
-    gtk_entry_set_text(GTK_ENTRY(entry),string);
-    g_free(string);
-}
+    et_application_window_progress_set_fraction (window, 0.0);
+    g_snprintf(progress_bar_text, 30, "%d/%d", 0, nbrfile);
+    et_application_window_progress_set_text (window, progress_bar_text);
+
+    // Load the supported files (Extension recognized)
+    for (l = FileList; l != NULL && !Main_Stop_Button_Pressed;
+         l = g_list_next (l))
+    {
+        gchar *filename_real = l->data; /* Contains real filenames. */
+        gchar *filename_utf8 = filename_to_display(filename_real);
 
-static void
-Convert_All_Lowercase (GtkWidget *entry)
-{
-    gchar *res;
-    const gchar *string = gtk_entry_get_text (GTK_ENTRY (entry));
+        msg = g_strdup_printf (_("File: ‘%s’"), filename_utf8);
+        et_application_window_status_bar_message (window, msg, FALSE);
+        g_free(msg);
+        g_free(filename_utf8);
 
-    res = Scan_Process_Fields_All_Uppercase (string);
-    gtk_entry_set_text (GTK_ENTRY (entry), res);
-    g_free (res);
-}
+        // Warning: Do not free filename_real because ET_Add_File.. uses it for internal structures
+        ET_Add_File_To_File_List(filename_real);
 
-static void
-Convert_Letter_Uppercase (GtkWidget *entry)
-{
-    gchar *res;
-    const gchar *string = gtk_entry_get_text (GTK_ENTRY (entry));
+        /* Update the progress bar. */
+        fraction = (++progress_bar_index) / (double) nbrfile;
+        et_application_window_progress_set_fraction (window, fraction);
+        g_snprintf(progress_bar_text, 30, "%d/%d", progress_bar_index, nbrfile);
+        et_application_window_progress_set_text (window, progress_bar_text);
+        while (gtk_events_pending())
+            gtk_main_iteration();
+    }
 
-    res = Scan_Process_Fields_Letter_Uppercase (string);
-    gtk_entry_set_text (GTK_ENTRY (entry), res);
-    g_free (res);
-}
+    /* Just free the list, not the data. */
+    g_list_free (FileList);
+    et_application_window_progress_set_text (window, "");
 
-static void
-Convert_First_Letters_Uppercase (GtkWidget *entry)
-{
-    gchar *string = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
+    /* Close window to quit recursion */
+    Destroy_Quit_Recursion_Function_Window();
+    Main_Stop_Button_Pressed = FALSE;
+    action = g_action_map_lookup_action (G_ACTION_MAP (MainWindow), "stop");
+    g_simple_action_set_enabled (G_SIMPLE_ACTION (action), FALSE);
 
-    Scan_Process_Fields_First_Letters_Uppercase (&string);
-    gtk_entry_set_text(GTK_ENTRY(entry),string);
-    g_free(string);
-}
+    //ET_Debug_Print_File_List(ETCore->ETFileList,__FILE__,__LINE__,__FUNCTION__);
 
-static void
-Convert_Remove_Space (GtkWidget *entry)
-{
-    gchar *string = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
+    if (ETCore->ETFileList)
+    {
+        //GList *etfilelist;
+        /* Load the list of file into the browser list widget */
+        et_application_window_browser_toggle_display_mode (window);
 
-    Scan_Process_Fields_Remove_Space(string);
-    gtk_entry_set_text(GTK_ENTRY(entry),string);
-    g_free(string);
-}
+        /* Display the first file */
+        //No need to select first item, because Browser_Display_Tree_Or_Artist_Album_List() does this
+        //etfilelist = ET_Displayed_File_List_First();
+        //if (etfilelist)
+        //{
+        //    ET_Display_File_Data_To_UI((ET_File *)etfilelist->data);
+        //    Browser_List_Select_File_By_Etfile((ET_File *)etfilelist->data,FALSE);
+        //}
 
-static void
-Convert_Insert_Space (GtkWidget *entry)
-{
-    gchar *res;
-    const gchar *string = (gtk_entry_get_text (GTK_ENTRY (entry)));
+        /* Prepare message for the status bar */
+        if (g_settings_get_boolean (MainSettings, "browse-subdir"))
+        {
+            msg = g_strdup_printf (ngettext ("Found one file in this directory and subdirectories",
+                                             "Found %d files in this directory and subdirectories",
+                                             ETCore->ETFileDisplayedList_Length),
+                                   ETCore->ETFileDisplayedList_Length);
+        }
+        else
+        {
+            msg = g_strdup_printf (ngettext ("Found one file in this directory",
+                                             "Found %d files in this directory",
+                                             ETCore->ETFileDisplayedList_Length),
+                                   ETCore->ETFileDisplayedList_Length);
+        }
+    }else
+    {
+        /* Clear entry boxes */
+        et_application_window_file_area_clear (ET_APPLICATION_WINDOW (MainWindow));
+        et_application_window_tag_area_clear (ET_APPLICATION_WINDOW (MainWindow));
 
-    res = Scan_Process_Fields_Insert_Space (string);
-    gtk_entry_set_text (GTK_ENTRY (entry), res);
-    g_free (res);
-}
+	/* Translators: No files, as in "0 files". */
+        et_application_window_browser_label_set_text (ET_APPLICATION_WINDOW (MainWindow),
+                                                      _("No files")); /* See in ET_Display_Filename_To_UI */
 
-static void
-Convert_Only_One_Space (GtkWidget *entry)
-{
-    gchar *string = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
+        /* Prepare message for the status bar */
+        if (g_settings_get_boolean (MainSettings, "browse-subdir"))
+            msg = g_strdup(_("No file found in this directory and subdirectories"));
+        else
+            msg = g_strdup(_("No file found in this directory"));
+    }
 
-    Scan_Process_Fields_Keep_One_Space(string);
-    gtk_entry_set_text(GTK_ENTRY(entry),string);
-    g_free(string);
-}
+    /* Update sensitivity of buttons and menus */
+    et_application_window_update_actions (window);
 
-static void
-Convert_Remove_All_Text (GtkWidget *entry)
-{
-    gtk_entry_set_text (GTK_ENTRY (entry), "");
-}
+    et_application_window_browser_set_sensitive (window, TRUE);
 
-/*
- * Entry_Popup_Menu_Handler: show the popup menu when the third mouse button is pressed.
- */
-static gboolean
-Entry_Popup_Menu_Handler (GtkMenu *menu, GdkEventButton *event)
-{
-    if (event && (event->type==GDK_BUTTON_PRESS) && (event->button==3))
-    {
-        /* FIX ME : this is not very clean, but if we use 'event->button' (contains value of
-         * the 3rd button) instead of '1', we need to click two times the left mouse button
-         * to activate an item of the opened popup menu (when menu is attached to an entry). */
-        //gtk_menu_popup(menu,NULL,NULL,NULL,NULL,event->button,event->time);
-        gtk_menu_popup(menu,NULL,NULL,NULL,NULL,1,event->time);
-        return TRUE;
-    }
-    return FALSE;
-}
+    et_application_window_progress_set_fraction (window, 0.0);
+    et_application_window_status_bar_message (window, msg, FALSE);
+    g_free (msg);
+    Set_Unbusy_Cursor();
+    ReadingDirectory = FALSE;
 
-/*
- * Popup menu attached to all entries of tag + filename + rename combobox.
- * Displayed when pressing the right mouse button and contains functions to process ths strings.
- */
-void Attach_Popup_Menu_To_Tag_Entries (GtkEntry *entry)
-{
-    GtkWidget *PopupMenu;
-    GtkWidget *Image;
-    GtkWidget *MenuItem;
-
-
-    PopupMenu = gtk_menu_new();
-    g_signal_connect_swapped(G_OBJECT(entry),"button_press_event",
-        G_CALLBACK(Entry_Popup_Menu_Handler),G_OBJECT(PopupMenu));
-
-    /* Menu items */
-    MenuItem = gtk_image_menu_item_new_with_label(_("Tag selected files with this field"));
-    Image = gtk_image_new_from_stock(GTK_STOCK_JUMP_TO,GTK_ICON_SIZE_MENU);
-    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image);
-    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
-    g_signal_connect_swapped (G_OBJECT (MenuItem), "activate",
-                              G_CALLBACK (Mini_Button_Clicked),
-                              G_OBJECT (entry));
-
-    /* Separator */
-    MenuItem = gtk_menu_item_new();
-    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
-
-    MenuItem = gtk_image_menu_item_new_with_label(_("Convert '_' and '%20' to spaces"));
-    Image = gtk_image_new_from_stock(GTK_STOCK_CONVERT,GTK_ICON_SIZE_MENU);
-    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image);
-    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
-    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate",
-        G_CALLBACK(Convert_P20_And_Underscore_Into_Spaces),G_OBJECT(entry));
-
-    MenuItem = gtk_image_menu_item_new_with_label(_("Convert ' ' to '_'"));
-    Image = gtk_image_new_from_stock(GTK_STOCK_CONVERT,GTK_ICON_SIZE_MENU);
-    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image);
-    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
-    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate",
-        G_CALLBACK(Convert_Space_Into_Underscore),G_OBJECT(entry));
-
-    /* Separator */
-    MenuItem = gtk_menu_item_new();
-    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
-
-    MenuItem = gtk_image_menu_item_new_with_label(_("All uppercase"));
-    Image = gtk_image_new_from_stock("easytag-all-uppercase",GTK_ICON_SIZE_MENU);
-    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image);
-    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
-    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate",
-        G_CALLBACK(Convert_All_Uppercase),G_OBJECT(entry));
-
-    MenuItem = gtk_image_menu_item_new_with_label(_("All lowercase"));
-    Image = gtk_image_new_from_stock("easytag-all-downcase",GTK_ICON_SIZE_MENU);
-    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image);
-    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
-    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate",
-        G_CALLBACK(Convert_All_Lowercase),G_OBJECT(entry));
-
-    MenuItem = gtk_image_menu_item_new_with_label(_("First letter uppercase"));
-    Image = gtk_image_new_from_stock("easytag-first-letter-uppercase",GTK_ICON_SIZE_MENU);
-    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image);
-    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
-    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate",
-        G_CALLBACK(Convert_Letter_Uppercase),G_OBJECT(entry));
-
-    MenuItem = gtk_image_menu_item_new_with_label(_("First letter uppercase of each word"));
-    Image = gtk_image_new_from_stock("easytag-first-letter-uppercase-word",GTK_ICON_SIZE_MENU);
-    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image);
-    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
-    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate",
-        G_CALLBACK(Convert_First_Letters_Uppercase),G_OBJECT(entry));
-
-    /* Separator */
-    MenuItem = gtk_menu_item_new();
-    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
-
-    MenuItem = gtk_image_menu_item_new_with_label(_("Remove spaces"));
-    Image = gtk_image_new_from_stock(GTK_STOCK_REMOVE,GTK_ICON_SIZE_MENU);
-    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image);
-    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
-    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate",
-        G_CALLBACK(Convert_Remove_Space),G_OBJECT(entry));
-
-    MenuItem = gtk_image_menu_item_new_with_label(_("Insert space before uppercase letter"));
-    Image = gtk_image_new_from_stock(GTK_STOCK_ADD,GTK_ICON_SIZE_MENU);
-    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image);
-    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
-    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate",
-        G_CALLBACK(Convert_Insert_Space),G_OBJECT(entry));
-
-    MenuItem = gtk_image_menu_item_new_with_label(_("Remove duplicate spaces or underscores"));
-    Image = gtk_image_new_from_stock(GTK_STOCK_REMOVE,GTK_ICON_SIZE_MENU);
-    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image);
-    gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu),MenuItem);
-    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate",
-        G_CALLBACK(Convert_Only_One_Space),G_OBJECT(entry));
-
-    MenuItem = gtk_image_menu_item_new_with_label (_("Remove all text"));
-    Image = gtk_image_new_from_stock (GTK_STOCK_REMOVE, GTK_ICON_SIZE_MENU);
-    gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM(MenuItem), Image);
-    gtk_menu_shell_append (GTK_MENU_SHELL(PopupMenu), MenuItem);
-    g_signal_connect_swapped (G_OBJECT (MenuItem), "activate",
-                              G_CALLBACK (Convert_Remove_All_Text),
-                              G_OBJECT (entry));
-
-    gtk_widget_show_all(PopupMenu);
+    return TRUE;
 }
 
 
 
 /*
- * Exit the program
+ * Recurse the path to create a list of files. Return a GList of the files found.
  */
-static void
-EasyTAG_Exit (void)
-{
-    Log_Print(LOG_OK,_("EasyTAG: Normal exit."));
-    gtk_main_quit();
-
-    /* TODO: Get the application from elsewhere. */
-    g_application_quit (g_application_get_default ());
-}
-
-static void
-Quit_MainWindow_Confirmed (void)
-{
-    // Save the configuration when exiting...
-    Save_Changes_Of_UI();
-    
-    // Quit EasyTAG
-    EasyTAG_Exit();
-}
-
-static void
-Quit_MainWindow_Save_And_Quit (void)
-{
-    /* Save modified tags */
-    if (Save_All_Files_With_Answer(FALSE) == -1)
-        return;
-    Quit_MainWindow_Confirmed();
-}
-
-void Quit_MainWindow (void)
+static GList *
+read_directory_recursively (GList *file_list, GFileEnumerator *dir_enumerator,
+                            gboolean recurse)
 {
-    GtkWidget *msgbox;
-    gint response;
-
-    /* If you change the displayed data and quit immediately */
-    if (ETCore->ETFileList)
-        ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed); // To detect change before exiting
+    GError *error = NULL;
+    GFileInfo *info;
+    const char *file_name;
+    gboolean is_hidden;
+    GFileType type;
 
-    /* Save combobox history list before exit */
-    Save_Path_Entry_List(BrowserEntryModel, MISC_COMBO_TEXT);
+    g_return_val_if_fail (dir_enumerator != NULL, file_list);
 
-    /* Check if all files have been saved before exit */
-    if (CONFIRM_WHEN_UNSAVED_FILES && ET_Check_If_All_Files_Are_Saved() != TRUE)
+    while ((info = g_file_enumerator_next_file (dir_enumerator, NULL, &error))
+           != NULL)
     {
-        /* Some files haven't been saved */
-        msgbox = gtk_message_dialog_new(GTK_WINDOW(MainWindow),
-                                        GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-                                        GTK_MESSAGE_QUESTION,
-                                        GTK_BUTTONS_NONE,
-                                        "%s",
-                                        _("Some files have been modified but not saved"));
-        gtk_dialog_add_buttons(GTK_DIALOG(msgbox),GTK_STOCK_DISCARD,GTK_RESPONSE_NO,GTK_STOCK_CANCEL,GTK_RESPONSE_CANCEL,GTK_STOCK_SAVE,GTK_RESPONSE_YES,NULL);
-        gtk_dialog_set_default_response (GTK_DIALOG (msgbox),
-                                         GTK_RESPONSE_YES);
-        gtk_window_set_title(GTK_WINDOW(msgbox),_("Quit"));
-        gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(msgbox),"%s",_("Do you want to save them before quitting?"));
-        response = gtk_dialog_run(GTK_DIALOG(msgbox));
-        gtk_widget_destroy(msgbox);
-        switch (response)
+        if (Main_Stop_Button_Pressed)
         {
-            case GTK_RESPONSE_YES:
-                Quit_MainWindow_Save_And_Quit();
-                break;
-            case GTK_RESPONSE_NO:
-                Quit_MainWindow_Confirmed();
-                break;
-            case GTK_RESPONSE_CANCEL:
-            case GTK_RESPONSE_DELETE_EVENT:
-                return;
-                break;
-            default:
-                g_assert_not_reached ();
-                break;
+            g_object_unref (info);
+            return file_list;
         }
 
-    } else if (CONFIRM_BEFORE_EXIT)
-    {
-        msgbox = gtk_message_dialog_new(GTK_WINDOW(MainWindow),
-                                         GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-                                         GTK_MESSAGE_QUESTION,
-                                         GTK_BUTTONS_NONE,
-                                         "%s",
-                                         _("Do you really want to quit?"));
-         gtk_dialog_add_buttons(GTK_DIALOG(msgbox),GTK_STOCK_CANCEL,GTK_RESPONSE_CANCEL,GTK_STOCK_QUIT,GTK_RESPONSE_CLOSE,NULL);
-        gtk_dialog_set_default_response (GTK_DIALOG (msgbox),
-                                         GTK_RESPONSE_CLOSE);
-        gtk_window_set_title(GTK_WINDOW(msgbox),_("Quit"));
-        response = gtk_dialog_run(GTK_DIALOG(msgbox));
-        gtk_widget_destroy(msgbox);
-        switch (response)
+        file_name = g_file_info_get_name (info);
+        is_hidden = g_file_info_get_is_hidden (info);
+        type = g_file_info_get_file_type (info);
+
+        /* Hidden directory like '.mydir' will also be browsed if allowed. */
+        if (!is_hidden || (g_settings_get_boolean (MainSettings,
+                                                   "browse-show-hidden")
+                           && is_hidden))
         {
-            case GTK_RESPONSE_CLOSE:
-                Quit_MainWindow_Confirmed();
-                break;
-            case GTK_RESPONSE_CANCEL:
-            case GTK_RESPONSE_DELETE_EVENT:
-                return;
-                break;
-            default:
-                g_assert_not_reached ();
-                break;
+            if (type == G_FILE_TYPE_DIRECTORY)
+            {
+                if (recurse)
+                {
+                    /* Searching for files recursively. */
+                    GFile *child_dir = g_file_get_child (g_file_enumerator_get_container (dir_enumerator),
+                                                         file_name);
+                    GFileEnumerator *childdir_enumerator;
+                    GError *child_error = NULL;
+                    childdir_enumerator = g_file_enumerate_children (child_dir,
+                                                                     G_FILE_ATTRIBUTE_STANDARD_NAME ","
+                                                                     G_FILE_ATTRIBUTE_STANDARD_TYPE ","
+                                                                     G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN,
+                                                                     G_FILE_QUERY_INFO_NONE,
+                                                                     NULL, &child_error);
+                    if (!childdir_enumerator)
+                    {
+                        Log_Print (LOG_ERROR,
+                                   _("Error opening directory ‘%s’: %s"),
+                                   file_name, child_error->message);
+                        g_error_free (child_error);
+                        g_object_unref (child_dir);
+                        g_object_unref (info);
+                        continue;
+                    }
+                    file_list = read_directory_recursively (file_list,
+                                                            childdir_enumerator,
+                                                            recurse);
+                    g_object_unref (child_dir);
+                    g_file_enumerator_close (childdir_enumerator, NULL,
+                                             &error);
+                    g_object_unref (childdir_enumerator);
+                }
+            }
+            else if (type == G_FILE_TYPE_REGULAR &&
+                      ET_File_Is_Supported (file_name))
+            {
+                GFile *file = g_file_get_child (g_file_enumerator_get_container (dir_enumerator),
+                                                file_name);
+                gchar *file_path = g_file_get_path (file);
+                /*Do not free this file_path, it will be used by g_list*/
+                file_list = g_list_append (file_list, file_path);
+                g_object_unref (file);
+            }
+
+            // Just to not block X events
+            while (gtk_events_pending())
+                gtk_main_iteration();
         }
-    }else
+        g_object_unref (info);
+    }
+
+    if (error)
     {
-        Quit_MainWindow_Confirmed();
+        Log_Print (LOG_ERROR, _("Cannot read directory ‘%s’"), error->message);
+        g_error_free (error);
     }
 
+    return file_list;
 }
 
 /*
- * For the configuration file...
+ * Window with the 'STOP' button to stop recursion when reading directories
  */
-void MainWindow_Apply_Changes (void)
+static void
+Open_Quit_Recursion_Function_Window (void)
 {
-    GdkWindow *window;
+    if (QuitRecursionWindow != NULL)
+        return;
+    QuitRecursionWindow = gtk_message_dialog_new (GTK_WINDOW (MainWindow),
+                                                  GTK_DIALOG_DESTROY_WITH_PARENT,
+                                                  GTK_MESSAGE_OTHER,
+                                                  GTK_BUTTONS_NONE,
+                                                  "%s",
+                                                  _("Searching for audio files…"));
+    gtk_window_set_title (GTK_WINDOW (QuitRecursionWindow), _("Searching"));
+    gtk_dialog_add_button (GTK_DIALOG (QuitRecursionWindow), _("_Stop"),
+                           GTK_RESPONSE_CANCEL);
 
-    g_return_if_fail(MainWindow !=NULL);
+    g_signal_connect (G_OBJECT (QuitRecursionWindow),"response",
+                      G_CALLBACK (et_on_quit_recursion_response), NULL);
 
-    window = gtk_widget_get_window(MainWindow);
+    gtk_widget_show_all(QuitRecursionWindow);
+}
 
-    if ( window && gdk_window_is_visible(window) && gdk_window_get_state(window)!=GDK_WINDOW_STATE_MAXIMIZED )
+static void
+Destroy_Quit_Recursion_Function_Window (void)
+{
+    if (QuitRecursionWindow)
     {
-        gint x, y, width, height;
-
-        // Position and Origin of the window
-        gdk_window_get_root_origin(window,&x,&y);
-        MAIN_WINDOW_X = x;
-        MAIN_WINDOW_Y = y;
-        width = gdk_window_get_width(window);
-        height = gdk_window_get_height(window);
-        MAIN_WINDOW_WIDTH  = width;
-        MAIN_WINDOW_HEIGHT = height;
-
-        // Handle panes position
-        PANE_HANDLE_POSITION1 = gtk_paned_get_position(GTK_PANED(MainWindowHPaned));
-        PANE_HANDLE_POSITION2 = gtk_paned_get_position(GTK_PANED(BrowserHPaned));
-        PANE_HANDLE_POSITION3 = gtk_paned_get_position(GTK_PANED(ArtistAlbumVPaned));
-        PANE_HANDLE_POSITION4 = gtk_paned_get_position(GTK_PANED(MainWindowVPaned));
+        gtk_widget_destroy(QuitRecursionWindow);
+        QuitRecursionWindow = NULL;
+        /*Statusbar_Message(_("Recursive file search interrupted."),FALSE);*/
     }
-
 }
 
-/*
- * et_tag_field_connect_signals:
- * @entry: the entry for which to connect signals
- *
- * Connect the GtkWidget::key-press-event and GtkEntry::icon-release signals
- * of @entry to appropriate handlers for tag entry fields.
- */
 static void
-et_tag_field_connect_signals (GtkEntry *entry)
+et_on_quit_recursion_response (GtkDialog *dialog, gint response_id,
+                               gpointer user_data)
 {
-    g_signal_connect_after (entry, "key-press-event",
-                            G_CALLBACK (et_tag_field_on_key_press_event),
-                            NULL);
-    g_signal_connect (entry, "icon-release", G_CALLBACK (Mini_Button_Clicked),
-                      NULL);
+    switch (response_id)
+    {
+        case GTK_RESPONSE_CANCEL:
+            Action_Main_Stop_Button_Pressed ();
+            Destroy_Quit_Recursion_Function_Window ();
+            break;
+        case GTK_RESPONSE_DELETE_EVENT:
+            Destroy_Quit_Recursion_Function_Window ();
+            break;
+        default:
+            g_assert_not_reached ();
+            break;
+    }
 }
 
 /*
- * et_tag_field_on_key_press_event:
- * @entry: the tag entry field on which the event was generated
- * @event: the generated event
- * @user_data: user data set when the signal was connected
- *
- * Handle the Ctrl+Return combination being pressed in the tag field GtkEntrys
- * and apply the tag to selected files.
- *
- * Returns: %TRUE if the event was handled, %FALSE if the event should
- * propagate further
+ * To stop the recursive search within directories or saving files
  */
-static gboolean
-et_tag_field_on_key_press_event (GtkEntry *entry, GdkEventKey *event,
-                                 gpointer user_data)
+void Action_Main_Stop_Button_Pressed (void)
 {
-    GdkModifierType modifiers = gtk_accelerator_get_default_mod_mask ();
+    GAction *action;
 
-    switch (event->keyval)
-    {
-        case GDK_KEY_Return:
-        case GDK_KEY_KP_Enter:
-        case GDK_KEY_ISO_Enter:
-            if ((event->state & modifiers) == GDK_CONTROL_MASK)
-            {
-                Mini_Button_Clicked (G_OBJECT (entry));
-            }
-            return TRUE;
-        default:
-            return FALSE;
-    }
+    action = g_action_map_lookup_action (G_ACTION_MAP (MainWindow), "stop");
+    g_simple_action_set_enabled (G_SIMPLE_ACTION (action), FALSE);
+    Main_Stop_Button_Pressed = TRUE;
 }
diff --git a/src/easytag.h b/src/easytag.h
index 977b717..43fce9e 100644
--- a/src/easytag.h
+++ b/src/easytag.h
@@ -40,56 +40,6 @@
 gboolean Main_Stop_Button_Pressed;
 
 GtkWidget *MainWindow;
-GtkWidget *LogArea;
-
-/* File Area */
-GtkWidget *FileFrame;
-GtkWidget *FileIndex;
-GtkWidget *FileEntry;
-GtkWidget *HeaderInfosTable;    /* declarated here to show/hide file header infos */
-GtkWidget *VersionLabel;
-GtkWidget *VersionValueLabel;
-GtkWidget *BitrateLabel;
-GtkWidget *BitrateValueLabel;
-GtkWidget *SampleRateLabel;
-GtkWidget *SampleRateValueLabel;
-GtkWidget *ModeLabel;
-GtkWidget *ModeValueLabel;
-GtkWidget *SizeLabel;
-GtkWidget *SizeValueLabel;
-GtkWidget *DurationLabel;
-GtkWidget *DurationValueLabel;
-
-/* TAG Area */
-GtkWidget    *TagFrame;
-GtkWidget    *TagNoteBook;
-GtkWidget    *TitleEntry;
-GtkWidget    *ArtistEntry;
-GtkWidget    *AlbumArtistEntry;
-GtkWidget    *AlbumEntry;
-GtkWidget    *DiscNumberEntry;
-GtkWidget    *YearEntry;
-GtkWidget    *TrackEntryCombo;
-GtkListStore *TrackEntryComboModel;
-GtkWidget    *TrackTotalEntry;
-GtkWidget    *GenreCombo;
-GtkListStore *GenreComboModel;
-GtkWidget    *CommentEntry;
-//GtkWidget    *CommentView;
-GtkWidget    *ComposerEntry;
-GtkWidget    *OrigArtistEntry;
-GtkWidget    *CopyrightEntry;
-GtkWidget    *URLEntry;
-GtkWidget    *EncodedByEntry;
-GtkWidget    *PictureEntryView;
-
-/* Other for picture. */
-GtkToolItem *remove_image_toolitem;
-GtkToolItem *add_image_toolitem;
-GtkToolItem *save_image_toolitem;
-GtkToolItem *image_properties_toolitem;
-
-gchar *INIT_DIRECTORY;
 
 #ifndef errno
 extern int errno;
@@ -102,46 +52,14 @@ gboolean ReadingDirectory;
 /**************
  * Prototypes *
  **************/
-void et_on_action_select_all (void);
-void et_on_action_unselect_all (void);
-void Action_Invert_Files_Selection      (void);
-void Action_Select_Prev_File            (void);
-void Action_Select_Next_File            (void);
-void Action_Select_First_File           (void);
-void Action_Select_Last_File            (void);
-void Action_Select_Nth_File_By_Position (gulong num_item);
 void Action_Select_Nth_File_By_Etfile   (ET_File *ETFile);
 
-void Action_Scan_Selected_Files         (void);
-void Action_Remove_Selected_Tags        (void);
-gint Action_Undo_Selected_Files         (void);
-gint Action_Redo_Selected_File          (void);
-void Action_Undo_All_Files              (void);
-void Action_Redo_All_Files              (void);
 void Action_Save_Selected_Files         (void);
 void Action_Force_Saving_Selected_Files (void);
-void Action_Undo_From_History_List      (void);
-void Action_Redo_From_History_List      (void);
-void Action_Delete_Selected_Files       (void);
 gint Save_All_Files_With_Answer         (gboolean force_saving_files);
 
 void Action_Main_Stop_Button_Pressed    (void);
-void Action_Select_Browser_Style        (void);
-void et_on_action_select_scan_mode (GtkRadioAction *action,
-                                    GtkRadioAction *current,
-                                    gpointer user_data);
-
-void Tag_Area_Display_Controls (ET_File *ETFile);
-
-gboolean Read_Directory               (gchar *path);
-void Quit_MainWindow                  (void);
-void MainWindow_Apply_Changes         (void);
-void Update_Command_Buttons_Sensivity (void);
-void Attach_Popup_Menu_To_Tag_Entries (GtkEntry *entry);
-
-void Clear_File_Entry_Field (void);
-void Clear_Tag_Entry_Fields (void);
-void Clear_Header_Fields    (void);
 
+gboolean Read_Directory (const gchar *path);
 
 #endif /* __EASYTAG_H__ */
diff --git a/src/enums.c b/src/enums.c
new file mode 100644
index 0000000..c5a982b
--- /dev/null
+++ b/src/enums.c
@@ -0,0 +1,374 @@
+
+
+
+#include "enums.h"
+
+/* enumerations from "./src/setting.h" */
+#include "./src/setting.h"
+GType
+et_cddb_search_category_get_type (void)
+{
+    static GType type = 0;
+
+    if (!type)
+    {
+        static const GFlagsValue _et_cddb_search_category_values[] = {
+            { ET_CDDB_SEARCH_CATEGORY_BLUES, "ET_CDDB_SEARCH_CATEGORY_BLUES", "blues" },
+            { ET_CDDB_SEARCH_CATEGORY_CLASSICAL, "ET_CDDB_SEARCH_CATEGORY_CLASSICAL", "classical" },
+            { ET_CDDB_SEARCH_CATEGORY_COUNTRY, "ET_CDDB_SEARCH_CATEGORY_COUNTRY", "country" },
+            { ET_CDDB_SEARCH_CATEGORY_FOLK, "ET_CDDB_SEARCH_CATEGORY_FOLK", "folk" },
+            { ET_CDDB_SEARCH_CATEGORY_JAZZ, "ET_CDDB_SEARCH_CATEGORY_JAZZ", "jazz" },
+            { ET_CDDB_SEARCH_CATEGORY_MISC, "ET_CDDB_SEARCH_CATEGORY_MISC", "misc" },
+            { ET_CDDB_SEARCH_CATEGORY_NEWAGE, "ET_CDDB_SEARCH_CATEGORY_NEWAGE", "newage" },
+            { ET_CDDB_SEARCH_CATEGORY_REGGAE, "ET_CDDB_SEARCH_CATEGORY_REGGAE", "reggae" },
+            { ET_CDDB_SEARCH_CATEGORY_ROCK, "ET_CDDB_SEARCH_CATEGORY_ROCK", "rock" },
+            { ET_CDDB_SEARCH_CATEGORY_SOUNDTRACK, "ET_CDDB_SEARCH_CATEGORY_SOUNDTRACK", "soundtrack" },
+            { 0, NULL, NULL }
+        };
+
+        type = g_flags_register_static ("EtCddbSearchCategory", _et_cddb_search_category_values);
+    }
+
+  return type;
+}
+
+GType
+et_cddb_search_field_get_type (void)
+{
+    static GType type = 0;
+
+    if (!type)
+    {
+        static const GFlagsValue _et_cddb_search_field_values[] = {
+            { ET_CDDB_SEARCH_FIELD_ARTIST, "ET_CDDB_SEARCH_FIELD_ARTIST", "artist" },
+            { ET_CDDB_SEARCH_FIELD_TITLE, "ET_CDDB_SEARCH_FIELD_TITLE", "title" },
+            { ET_CDDB_SEARCH_FIELD_TRACK, "ET_CDDB_SEARCH_FIELD_TRACK", "track" },
+            { ET_CDDB_SEARCH_FIELD_OTHER, "ET_CDDB_SEARCH_FIELD_OTHER", "other" },
+            { 0, NULL, NULL }
+        };
+
+        type = g_flags_register_static ("EtCddbSearchField", _et_cddb_search_field_values);
+    }
+
+  return type;
+}
+
+GType
+et_cddb_set_field_get_type (void)
+{
+    static GType type = 0;
+
+    if (!type)
+    {
+        static const GFlagsValue _et_cddb_set_field_values[] = {
+            { ET_CDDB_SET_FIELD_TITLE, "ET_CDDB_SET_FIELD_TITLE", "title" },
+            { ET_CDDB_SET_FIELD_ARTIST, "ET_CDDB_SET_FIELD_ARTIST", "artist" },
+            { ET_CDDB_SET_FIELD_ALBUM, "ET_CDDB_SET_FIELD_ALBUM", "album" },
+            { ET_CDDB_SET_FIELD_YEAR, "ET_CDDB_SET_FIELD_YEAR", "year" },
+            { ET_CDDB_SET_FIELD_TRACK, "ET_CDDB_SET_FIELD_TRACK", "track" },
+            { ET_CDDB_SET_FIELD_TRACK_TOTAL, "ET_CDDB_SET_FIELD_TRACK_TOTAL", "track-total" },
+            { ET_CDDB_SET_FIELD_GENRE, "ET_CDDB_SET_FIELD_GENRE", "genre" },
+            { ET_CDDB_SET_FIELD_FILENAME, "ET_CDDB_SET_FIELD_FILENAME", "filename" },
+            { 0, NULL, NULL }
+        };
+
+        type = g_flags_register_static ("EtCddbSetField", _et_cddb_set_field_values);
+    }
+
+  return type;
+}
+
+GType
+et_charset_get_type (void)
+{
+    static GType type = 0;
+
+    if (!type)
+    {
+        static const GEnumValue _et_charset_values[] = {
+            { ET_CHARSET_IBM864, "ET_CHARSET_IBM864", "ibm864" },
+            { ET_CHARSET_ISO_8859_6, "ET_CHARSET_ISO_8859_6", "iso-8859-6" },
+            { ET_CHARSET_WINDOWS_1256, "ET_CHARSET_WINDOWS_1256", "windows-1256" },
+            { ET_CHARSET_ISO_8859_13, "ET_CHARSET_ISO_8859_13", "iso-8859-13" },
+            { ET_CHARSET_ISO_8859_4, "ET_CHARSET_ISO_8859_4", "iso-8859-4" },
+            { ET_CHARSET_WINDOWS_1257, "ET_CHARSET_WINDOWS_1257", "windows-1257" },
+            { ET_CHARSET_ISO_8859_14, "ET_CHARSET_ISO_8859_14", "iso-8859-14" },
+            { ET_CHARSET_IBM852, "ET_CHARSET_IBM852", "ibm852" },
+            { ET_CHARSET_ISO_8859_2, "ET_CHARSET_ISO_8859_2", "iso-8859-2" },
+            { ET_CHARSET_WINDOWS_1250, "ET_CHARSET_WINDOWS_1250", "windows-1250" },
+            { ET_CHARSET_GB18030, "ET_CHARSET_GB18030", "gb18030" },
+            { ET_CHARSET_GB2312, "ET_CHARSET_GB2312", "gb2312" },
+            { ET_CHARSET_BIG5, "ET_CHARSET_BIG5", "big5" },
+            { ET_CHARSET_BIG5_HKSCS, "ET_CHARSET_BIG5_HKSCS", "big5-hkscs" },
+            { ET_CHARSET_IBM855, "ET_CHARSET_IBM855", "ibm855" },
+            { ET_CHARSET_ISO_8859_5, "ET_CHARSET_ISO_8859_5", "iso-8859-5" },
+            { ET_CHARSET_ISO_IR_111, "ET_CHARSET_ISO_IR_111", "iso-ir-111" },
+            { ET_CHARSET_ISO_KOI8_R, "ET_CHARSET_ISO_KOI8_R", "iso-koi8-r" },
+            { ET_CHARSET_WINDOWS_1251, "ET_CHARSET_WINDOWS_1251", "windows-1251" },
+            { ET_CHARSET_IBM866, "ET_CHARSET_IBM866", "ibm866" },
+            { ET_CHARSET_KOI8_U, "ET_CHARSET_KOI8_U", "koi8-u" },
+            { ET_CHARSET_US_ASCII, "ET_CHARSET_US_ASCII", "us-ascii" },
+            { ET_CHARSET_ISO_8859_7, "ET_CHARSET_ISO_8859_7", "iso-8859-7" },
+            { ET_CHARSET_WINDOWS_1253, "ET_CHARSET_WINDOWS_1253", "windows-1253" },
+            { ET_CHARSET_IBM862, "ET_CHARSET_IBM862", "ibm862" },
+            { ET_CHARSET_WINDOWS_1255, "ET_CHARSET_WINDOWS_1255", "windows-1255" },
+            { ET_CHARSET_EUC_JP, "ET_CHARSET_EUC_JP", "euc-jp" },
+            { ET_CHARSET_ISO_2022_JP, "ET_CHARSET_ISO_2022_JP", "iso-2022-jp" },
+            { ET_CHARSET_SHIFT_JIS, "ET_CHARSET_SHIFT_JIS", "shift-jis" },
+            { ET_CHARSET_EUC_KR, "ET_CHARSET_EUC_KR", "euc-kr" },
+            { ET_CHARSET_ISO_8859_10, "ET_CHARSET_ISO_8859_10", "iso-8859-10" },
+            { ET_CHARSET_ISO_8859_3, "ET_CHARSET_ISO_8859_3", "iso-8859-3" },
+            { ET_CHARSET_TIS_620, "ET_CHARSET_TIS_620", "tis-620" },
+            { ET_CHARSET_IBM857, "ET_CHARSET_IBM857", "ibm857" },
+            { ET_CHARSET_ISO_8859_9, "ET_CHARSET_ISO_8859_9", "iso-8859-9" },
+            { ET_CHARSET_WINDOWS_1254, "ET_CHARSET_WINDOWS_1254", "windows-1254" },
+            { ET_CHARSET_UTF_8, "ET_CHARSET_UTF_8", "utf-8" },
+            { ET_CHARSET_VISCII, "ET_CHARSET_VISCII", "viscii" },
+            { ET_CHARSET_WINDOWS_1258, "ET_CHARSET_WINDOWS_1258", "windows-1258" },
+            { ET_CHARSET_ISO_8859_8, "ET_CHARSET_ISO_8859_8", "iso-8859-8" },
+            { ET_CHARSET_IBM850, "ET_CHARSET_IBM850", "ibm850" },
+            { ET_CHARSET_ISO_8859_1, "ET_CHARSET_ISO_8859_1", "iso-8859-1" },
+            { ET_CHARSET_ISO_8859_15, "ET_CHARSET_ISO_8859_15", "iso-8859-15" },
+            { ET_CHARSET_WINDOWS_1252, "ET_CHARSET_WINDOWS_1252", "windows-1252" },
+            { 0, NULL, NULL }
+        };
+
+        type = g_enum_register_static ("EtCharset", _et_charset_values);
+    }
+
+  return type;
+}
+
+GType
+et_convert_spaces_get_type (void)
+{
+    static GType type = 0;
+
+    if (!type)
+    {
+        static const GEnumValue _et_convert_spaces_values[] = {
+            { ET_CONVERT_SPACES_SPACES, "ET_CONVERT_SPACES_SPACES", "spaces" },
+            { ET_CONVERT_SPACES_UNDERSCORES, "ET_CONVERT_SPACES_UNDERSCORES", "underscores" },
+            { ET_CONVERT_SPACES_REMOVE, "ET_CONVERT_SPACES_REMOVE", "remove" },
+            { ET_CONVERT_SPACES_NO_CHANGE, "ET_CONVERT_SPACES_NO_CHANGE", "no-change" },
+            { 0, NULL, NULL }
+        };
+
+        type = g_enum_register_static ("EtConvertSpaces", _et_convert_spaces_values);
+    }
+
+  return type;
+}
+
+GType
+et_filename_extension_mode_get_type (void)
+{
+    static GType type = 0;
+
+    if (!type)
+    {
+        static const GEnumValue _et_filename_extension_mode_values[] = {
+            { ET_FILENAME_EXTENSION_LOWER_CASE, "ET_FILENAME_EXTENSION_LOWER_CASE", "lower-case" },
+            { ET_FILENAME_EXTENSION_UPPER_CASE, "ET_FILENAME_EXTENSION_UPPER_CASE", "upper-case" },
+            { ET_FILENAME_EXTENSION_NO_CHANGE, "ET_FILENAME_EXTENSION_NO_CHANGE", "no-change" },
+            { 0, NULL, NULL }
+        };
+
+        type = g_enum_register_static ("EtFilenameExtensionMode", _et_filename_extension_mode_values);
+    }
+
+  return type;
+}
+
+GType
+et_process_field_get_type (void)
+{
+    static GType type = 0;
+
+    if (!type)
+    {
+        static const GFlagsValue _et_process_field_values[] = {
+            { ET_PROCESS_FIELD_FILENAME, "ET_PROCESS_FIELD_FILENAME", "filename" },
+            { ET_PROCESS_FIELD_TITLE, "ET_PROCESS_FIELD_TITLE", "title" },
+            { ET_PROCESS_FIELD_ARTIST, "ET_PROCESS_FIELD_ARTIST", "artist" },
+            { ET_PROCESS_FIELD_ALBUM_ARTIST, "ET_PROCESS_FIELD_ALBUM_ARTIST", "album-artist" },
+            { ET_PROCESS_FIELD_ALBUM, "ET_PROCESS_FIELD_ALBUM", "album" },
+            { ET_PROCESS_FIELD_GENRE, "ET_PROCESS_FIELD_GENRE", "genre" },
+            { ET_PROCESS_FIELD_COMMENT, "ET_PROCESS_FIELD_COMMENT", "comment" },
+            { ET_PROCESS_FIELD_COMPOSER, "ET_PROCESS_FIELD_COMPOSER", "composer" },
+            { ET_PROCESS_FIELD_ORIGINAL_ARTIST, "ET_PROCESS_FIELD_ORIGINAL_ARTIST", "original-artist" },
+            { ET_PROCESS_FIELD_COPYRIGHT, "ET_PROCESS_FIELD_COPYRIGHT", "copyright" },
+            { ET_PROCESS_FIELD_URL, "ET_PROCESS_FIELD_URL", "url" },
+            { ET_PROCESS_FIELD_ENCODED_BY, "ET_PROCESS_FIELD_ENCODED_BY", "encoded-by" },
+            { 0, NULL, NULL }
+        };
+
+        type = g_flags_register_static ("EtProcessField", _et_process_field_values);
+    }
+
+  return type;
+}
+
+GType
+et_process_fields_convert_get_type (void)
+{
+    static GType type = 0;
+
+    if (!type)
+    {
+        static const GEnumValue _et_process_fields_convert_values[] = {
+            { ET_PROCESS_FIELDS_CONVERT_SPACES, "ET_PROCESS_FIELDS_CONVERT_SPACES", "spaces" },
+            { ET_PROCESS_FIELDS_CONVERT_UNDERSCORES, "ET_PROCESS_FIELDS_CONVERT_UNDERSCORES", "underscores" },
+            { ET_PROCESS_FIELDS_CONVERT_CHARACTERS, "ET_PROCESS_FIELDS_CONVERT_CHARACTERS", "characters" },
+            { ET_PROCESS_FIELDS_CONVERT_NO_CHANGE, "ET_PROCESS_FIELDS_CONVERT_NO_CHANGE", "no-change" },
+            { 0, NULL, NULL }
+        };
+
+        type = g_enum_register_static ("EtProcessFieldsConvert", _et_process_fields_convert_values);
+    }
+
+  return type;
+}
+
+GType
+et_playlist_content_get_type (void)
+{
+    static GType type = 0;
+
+    if (!type)
+    {
+        static const GEnumValue _et_playlist_content_values[] = {
+            { ET_PLAYLIST_CONTENT_FILENAMES, "ET_PLAYLIST_CONTENT_FILENAMES", "filenames" },
+            { ET_PLAYLIST_CONTENT_EXTENDED, "ET_PLAYLIST_CONTENT_EXTENDED", "extended" },
+            { ET_PLAYLIST_CONTENT_EXTENDED_MASK, "ET_PLAYLIST_CONTENT_EXTENDED_MASK", "extended-mask" },
+            { 0, NULL, NULL }
+        };
+
+        type = g_enum_register_static ("EtPlaylistContent", _et_playlist_content_values);
+    }
+
+  return type;
+}
+
+GType
+et_rename_encoding_get_type (void)
+{
+    static GType type = 0;
+
+    if (!type)
+    {
+        static const GEnumValue _et_rename_encoding_values[] = {
+            { ET_RENAME_ENCODING_TRY_ALTERNATIVE, "ET_RENAME_ENCODING_TRY_ALTERNATIVE", "try-alternative" },
+            { ET_RENAME_ENCODING_TRANSLITERATE, "ET_RENAME_ENCODING_TRANSLITERATE", "transliterate" },
+            { ET_RENAME_ENCODING_IGNORE, "ET_RENAME_ENCODING_IGNORE", "ignore" },
+            { 0, NULL, NULL }
+        };
+
+        type = g_enum_register_static ("EtRenameEncoding", _et_rename_encoding_values);
+    }
+
+  return type;
+}
+
+GType
+et_scan_mode_get_type (void)
+{
+    static GType type = 0;
+
+    if (!type)
+    {
+        static const GEnumValue _et_scan_mode_values[] = {
+            { ET_SCAN_MODE_FILL_TAG, "ET_SCAN_MODE_FILL_TAG", "fill-tag" },
+            { ET_SCAN_MODE_RENAME_FILE, "ET_SCAN_MODE_RENAME_FILE", "rename-file" },
+            { ET_SCAN_MODE_PROCESS_FIELDS, "ET_SCAN_MODE_PROCESS_FIELDS", "process-fields" },
+            { 0, NULL, NULL }
+        };
+
+        type = g_enum_register_static ("EtScanMode", _et_scan_mode_values);
+    }
+
+  return type;
+}
+
+GType
+et_sort_mode_get_type (void)
+{
+    static GType type = 0;
+
+    if (!type)
+    {
+        static const GEnumValue _et_sort_mode_values[] = {
+            { ET_SORT_MODE_ASCENDING_FILENAME, "ET_SORT_MODE_ASCENDING_FILENAME", "ascending-filename" },
+            { ET_SORT_MODE_DESCENDING_FILENAME, "ET_SORT_MODE_DESCENDING_FILENAME", "descending-filename" },
+            { ET_SORT_MODE_ASCENDING_TITLE, "ET_SORT_MODE_ASCENDING_TITLE", "ascending-title" },
+            { ET_SORT_MODE_DESCENDING_TITLE, "ET_SORT_MODE_DESCENDING_TITLE", "descending-title" },
+            { ET_SORT_MODE_ASCENDING_ARTIST, "ET_SORT_MODE_ASCENDING_ARTIST", "ascending-artist" },
+            { ET_SORT_MODE_DESCENDING_ARTIST, "ET_SORT_MODE_DESCENDING_ARTIST", "descending-artist" },
+            { ET_SORT_MODE_ASCENDING_ALBUM_ARTIST, "ET_SORT_MODE_ASCENDING_ALBUM_ARTIST", "ascending-album-artist" },
+            { ET_SORT_MODE_DESCENDING_ALBUM_ARTIST, "ET_SORT_MODE_DESCENDING_ALBUM_ARTIST", "descending-album-artist" },
+            { ET_SORT_MODE_ASCENDING_ALBUM, "ET_SORT_MODE_ASCENDING_ALBUM", "ascending-album" },
+            { ET_SORT_MODE_DESCENDING_ALBUM, "ET_SORT_MODE_DESCENDING_ALBUM", "descending-album" },
+            { ET_SORT_MODE_ASCENDING_YEAR, "ET_SORT_MODE_ASCENDING_YEAR", "ascending-year" },
+            { ET_SORT_MODE_DESCENDING_YEAR, "ET_SORT_MODE_DESCENDING_YEAR", "descending-year" },
+            { ET_SORT_MODE_ASCENDING_DISC_NUMBER, "ET_SORT_MODE_ASCENDING_DISC_NUMBER", "ascending-disc-number" },
+            { ET_SORT_MODE_DESCENDING_DISC_NUMBER, "ET_SORT_MODE_DESCENDING_DISC_NUMBER", "descending-disc-number" },
+            { ET_SORT_MODE_ASCENDING_TRACK_NUMBER, "ET_SORT_MODE_ASCENDING_TRACK_NUMBER", "ascending-track-number" },
+            { ET_SORT_MODE_DESCENDING_TRACK_NUMBER, "ET_SORT_MODE_DESCENDING_TRACK_NUMBER", "descending-track-number" },
+            { ET_SORT_MODE_ASCENDING_GENRE, "ET_SORT_MODE_ASCENDING_GENRE", "ascending-genre" },
+            { ET_SORT_MODE_DESCENDING_GENRE, "ET_SORT_MODE_DESCENDING_GENRE", "descending-genre" },
+            { ET_SORT_MODE_ASCENDING_COMMENT, "ET_SORT_MODE_ASCENDING_COMMENT", "ascending-comment" },
+            { ET_SORT_MODE_DESCENDING_COMMENT, "ET_SORT_MODE_DESCENDING_COMMENT", "descending-comment" },
+            { ET_SORT_MODE_ASCENDING_COMPOSER, "ET_SORT_MODE_ASCENDING_COMPOSER", "ascending-composer" },
+            { ET_SORT_MODE_DESCENDING_COMPOSER, "ET_SORT_MODE_DESCENDING_COMPOSER", "descending-composer" },
+            { ET_SORT_MODE_ASCENDING_ORIG_ARTIST, "ET_SORT_MODE_ASCENDING_ORIG_ARTIST", "ascending-orig-artist" },
+            { ET_SORT_MODE_DESCENDING_ORIG_ARTIST, "ET_SORT_MODE_DESCENDING_ORIG_ARTIST", "descending-orig-artist" },
+            { ET_SORT_MODE_ASCENDING_COPYRIGHT, "ET_SORT_MODE_ASCENDING_COPYRIGHT", "ascending-copyright" },
+            { ET_SORT_MODE_DESCENDING_COPYRIGHT, "ET_SORT_MODE_DESCENDING_COPYRIGHT", "descending-copyright" },
+            { ET_SORT_MODE_ASCENDING_URL, "ET_SORT_MODE_ASCENDING_URL", "ascending-url" },
+            { ET_SORT_MODE_DESCENDING_URL, "ET_SORT_MODE_DESCENDING_URL", "descending-url" },
+            { ET_SORT_MODE_ASCENDING_ENCODED_BY, "ET_SORT_MODE_ASCENDING_ENCODED_BY", "ascending-encoded-by" },
+            { ET_SORT_MODE_DESCENDING_ENCODED_BY, "ET_SORT_MODE_DESCENDING_ENCODED_BY", "descending-encoded-by" },
+            { ET_SORT_MODE_ASCENDING_CREATION_DATE, "ET_SORT_MODE_ASCENDING_CREATION_DATE", "ascending-creation-date" },
+            { ET_SORT_MODE_DESCENDING_CREATION_DATE, "ET_SORT_MODE_DESCENDING_CREATION_DATE", "descending-creation-date" },
+            { ET_SORT_MODE_ASCENDING_FILE_TYPE, "ET_SORT_MODE_ASCENDING_FILE_TYPE", "ascending-file-type" },
+            { ET_SORT_MODE_DESCENDING_FILE_TYPE, "ET_SORT_MODE_DESCENDING_FILE_TYPE", "descending-file-type" },
+            { ET_SORT_MODE_ASCENDING_FILE_SIZE, "ET_SORT_MODE_ASCENDING_FILE_SIZE", "ascending-file-size" },
+            { ET_SORT_MODE_DESCENDING_FILE_SIZE, "ET_SORT_MODE_DESCENDING_FILE_SIZE", "descending-file-size" },
+            { ET_SORT_MODE_ASCENDING_FILE_DURATION, "ET_SORT_MODE_ASCENDING_FILE_DURATION", "ascending-file-duration" },
+            { ET_SORT_MODE_DESCENDING_FILE_DURATION, "ET_SORT_MODE_DESCENDING_FILE_DURATION", "descending-file-duration" },
+            { ET_SORT_MODE_ASCENDING_FILE_BITRATE, "ET_SORT_MODE_ASCENDING_FILE_BITRATE", "ascending-file-bitrate" },
+            { ET_SORT_MODE_DESCENDING_FILE_BITRATE, "ET_SORT_MODE_DESCENDING_FILE_BITRATE", "descending-file-bitrate" },
+            { ET_SORT_MODE_ASCENDING_FILE_SAMPLERATE, "ET_SORT_MODE_ASCENDING_FILE_SAMPLERATE", "ascending-file-samplerate" },
+            { ET_SORT_MODE_DESCENDING_FILE_SAMPLERATE, "ET_SORT_MODE_DESCENDING_FILE_SAMPLERATE", "descending-file-samplerate" },
+            { 0, NULL, NULL }
+        };
+
+        type = g_enum_register_static ("EtSortMode", _et_sort_mode_values);
+    }
+
+  return type;
+}
+
+GType
+et_tag_encoding_get_type (void)
+{
+    static GType type = 0;
+
+    if (!type)
+    {
+        static const GEnumValue _et_tag_encoding_values[] = {
+            { ET_TAG_ENCODING_NONE, "ET_TAG_ENCODING_NONE", "none" },
+            { ET_TAG_ENCODING_TRANSLITERATE, "ET_TAG_ENCODING_TRANSLITERATE", "transliterate" },
+            { ET_TAG_ENCODING_IGNORE, "ET_TAG_ENCODING_IGNORE", "ignore" },
+            { 0, NULL, NULL }
+        };
+
+        type = g_enum_register_static ("EtTagEncoding", _et_tag_encoding_values);
+    }
+
+  return type;
+}
+
+
+
+
diff --git a/src/et_core.c b/src/et_core.c
index 1885adc..028ae12 100644
--- a/src/et_core.c
+++ b/src/et_core.c
@@ -1,21 +1,20 @@
-/* et_core.c - 2001/10/21 */
-/*
- *  EasyTAG - Tag editor for MP3 and Ogg Vorbis files
- *  Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
+/* EasyTAG - Tag editor for audio files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ * Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
  *
- *  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
- *  (at your option) any later version.
+ * 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
+ * (at your option) any later version.
  *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
  *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
 #include <config.h>
@@ -30,8 +29,9 @@
 #include <utime.h>
 #include <ctype.h>
 #include <locale.h>
-#include "errno.h"
+#include <errno.h>
 
+#include "application_window.h"
 #include "easytag.h"
 #include "et_core.h"
 #include "mpeg_header.h"
@@ -62,7 +62,6 @@
 #include "opus_tag.h"
 #include "opus_header.h"
 #endif
-#include "bar.h"
 #include "browser.h"
 #include "log.h"
 #include "misc.h"
@@ -122,13 +121,7 @@ const gsize ET_FILE_DESCRIPTION_SIZE = G_N_ELEMENTS (ETFileDescription) - 1;
 /*
  * Colors Used
  */
-GdkColor LIGHT_BLUE = {0, 0xddd1, 0xeeec, 0xffff};
-GdkColor RED        = {0, 0xffff, 0x0000, 0x0000};
-GdkColor LIGHT_RED  = {0, 0xffff, 0x8888, 0x8888};
-GdkColor GREY       = {0, 0xaa00, 0xaa00, 0xaa00};
-GdkColor LIGHT_GREY = {0, 0xd2d2, 0xd2d2, 0xd2d2};
-GdkColor YELLOW     = {0, 0xffff, 0xffff, 0xcccc};
-GdkColor BLACK      = {0, 0x0000, 0x0000, 0x0000};
+GdkRGBA RED = {1.0, 0.0, 0.0, 1.0 };
 
 
 /**************
@@ -136,14 +129,13 @@ GdkColor BLACK      = {0, 0x0000, 0x0000, 0x0000};
  **************/
 
 //gboolean ET_File_Is_Supported (gchar *filename);
-static gchar *ET_Get_File_Extension (const gchar *filename);
-static ET_File_Description *ET_Get_File_Description (const gchar *filename);
-static ET_File_Description *ET_Get_File_Description_From_Extension (const gchar *extension);
+static const ET_File_Description *ET_Get_File_Description (const gchar *filename);
+static const ET_File_Description *ET_Get_File_Description_From_Extension (const gchar *extension);
 
 static gboolean ET_Free_File_List                 (void);
 static gboolean ET_Free_File_Name_List            (GList *FileNameList);
 static gboolean ET_Free_File_Tag_List (GList *FileTagList);
-static gboolean ET_Free_File_Name_Item            (File_Name *FileName);
+static void ET_Free_File_Name_Item (File_Name *FileName);
 static gboolean ET_Free_File_Tag_Item_Other_Field (File_Tag *FileTag);
 static gboolean ET_Free_File_Info_Item (ET_File_Info *ETFileInfo);
 static gboolean ET_Free_History_File_List (void);
@@ -155,8 +147,6 @@ static void ET_Initialize_File_Tag_Item (File_Tag *FileTag);
 static void ET_Initialize_File_Name_Item (File_Name *FileName);
 static void ET_Initialize_File_Info_Item (ET_File_Info *ETFileInfo);
 
-//gboolean ET_Copy_File_Tag_Item       (ET_File *ETFile, File_Tag *FileTag);
-static gboolean ET_Copy_File_Tag_Item_Other_Field (ET_File *ETFile, File_Tag *FileTag);
 //gboolean ET_Set_Field_File_Tag_Picture (gchar **FileTagField, Picture *pic);
 
 static guint ET_File_Key_New (void);
@@ -164,21 +154,18 @@ static guint ET_Undo_Key_New (void);
 
 static gboolean ET_Remove_File_From_Artist_Album_List (ET_File *ETFile);
 
-static void ET_Display_File_And_List_Status_To_UI (ET_File *ETFile);
-static void ET_Display_Filename_To_UI (ET_File *ETFile);
-static gboolean ET_Display_File_Tag_To_UI (ET_File *ETFile);
-static gboolean ET_Display_File_Info_To_UI (ET_File_Info *ETFileInfo);
+static void ET_Display_Filename_To_UI (const ET_File *ETFile);
+static EtFileHeaderFields * ET_Display_File_Info_To_UI (const ET_File *ETFile);
 
-static gboolean ET_Save_File_Name_From_UI (ET_File *ETFile,
+static gboolean ET_Save_File_Name_From_UI (const ET_File *ETFile,
                                            File_Name *FileName);
-static gboolean ET_Save_File_Name_Internal (ET_File *ETFile, File_Name *FileName);
-static gboolean ET_Save_File_Tag_From_UI (File_Tag *FileTag);
+static gboolean ET_Save_File_Name_Internal (const ET_File *ETFile, File_Name *FileName);
 static gboolean ET_Save_File_Tag_Internal (ET_File *ETFile, File_Tag *FileTag);
 
 static void ET_Mark_File_Tag_As_Saved (ET_File *ETFile);
 
-static gboolean ET_Detect_Changes_Of_File_Name (File_Name *FileName1,
-                                                File_Name *FileName2);
+static gboolean ET_Detect_Changes_Of_File_Name (const File_Name *FileName1,
+                                                const File_Name *FileName2);
 static gboolean ET_Add_File_Name_To_List (ET_File *ETFile,
                                           File_Name *FileName);
 static gboolean ET_Add_File_Tag_To_List (ET_File *ETFile, File_Tag  *FileTag);
@@ -188,21 +175,21 @@ static gboolean ET_Add_File_To_Artist_Album_File_List (ET_File *ETFile);
 static guint ET_Displayed_File_List_Get_Length      (void);
 static void ET_Displayed_File_List_Number (void);
 
-static gboolean et_core_read_file_info (const gchar *filename,
+static gboolean et_core_read_file_info (GFile *file,
                                         ET_File_Info *ETFileInfo,
                                         GError **error);
 
-static gint ET_Comp_Func_Sort_Artist_Item_By_Ascending_Artist (GList *AlbumList1,
-                                                               GList *AlbumList2);
-static gint ET_Comp_Func_Sort_Album_Item_By_Ascending_Album (GList *etfilelist1,
-                                                             GList *etfilelist2);
-static gint ET_Comp_Func_Sort_Etfile_Item_By_Ascending_Filename (ET_File *ETFile1,
-                                                                 ET_File *ETFile2);
-static gchar *ET_File_Name_Format_Extension (ET_File *ETFile);
+static gint ET_Comp_Func_Sort_Artist_Item_By_Ascending_Artist (const GList *AlbumList1,
+                                                               const GList *AlbumList2);
+static gint ET_Comp_Func_Sort_Album_Item_By_Ascending_Album (const GList *etfilelist1,
+                                                             const GList *etfilelist2);
+static gint ET_Comp_Func_Sort_Etfile_Item_By_Ascending_Filename (const ET_File *ETFile1,
+                                                                 const ET_File *ETFile2);
+static gchar *ET_File_Name_Format_Extension (const ET_File *ETFile);
 
 static void set_sort_order_for_column_id (gint column_id,
                                           GtkTreeViewColumn *column,
-                                          ET_Sorting_Type sort_type);
+                                          EtSortMode sort_type);
 
 
 /*******************
@@ -212,7 +199,7 @@ static void set_sort_order_for_column_id (gint column_id,
 /*
  * Returns the extension of the file
  */
-static gchar *
+static const gchar *
 ET_Get_File_Extension (const gchar *filename)
 {
     if (filename)
@@ -226,20 +213,20 @@ ET_Get_File_Extension (const gchar *filename)
  * Determine description of file using his extension.
  * If extension is NULL or not found into the tab, it returns the last entry for UNKNOWN_FILE.
  */
-static ET_File_Description *
+static const ET_File_Description *
 ET_Get_File_Description_From_Extension (const gchar *extension)
 {
     guint i;
 
     if (!extension) // Unknown file
-        return (ET_File_Description*) &ETFileDescription[ET_FILE_DESCRIPTION_SIZE];
+        return &ETFileDescription[ET_FILE_DESCRIPTION_SIZE];
 
     for (i=0; i<ET_FILE_DESCRIPTION_SIZE; i++)  // Use of '<' instead of '<=' to avoid to test for Unknown file
         if ( strcasecmp(extension,ETFileDescription[i].Extension)==0 )
-            return (ET_File_Description*) &ETFileDescription[i];
+            return &ETFileDescription[i];
 
     // If not found in the list
-    return (ET_File_Description*) &ETFileDescription[ET_FILE_DESCRIPTION_SIZE];
+    return &ETFileDescription[ET_FILE_DESCRIPTION_SIZE];
 }
 
 
@@ -248,7 +235,7 @@ ET_Get_File_Description_From_Extension (const gchar *extension)
  * Determines first the extension. If extension is NULL or not found into the tab,
  * it returns the last entry for UNKNOWN_FILE.
  */
-static ET_File_Description *
+static const ET_File_Description *
 ET_Get_File_Description (const gchar *filename)
 {
     return ET_Get_File_Description_From_Extension(ET_Get_File_Extension(filename));
@@ -491,7 +478,7 @@ ET_Undo_Key_New (void)
  */
 GList *ET_Add_File_To_File_List (gchar *filename)
 {
-    ET_File_Description *ETFileDescription;
+    const ET_File_Description *ETFileDescription;
     ET_File      *ETFile;
     File_Name    *FileName;
     File_Tag     *FileTag;
@@ -504,6 +491,7 @@ GList *ET_Add_File_To_File_List (gchar *filename)
     gchar        *filename_utf8 = filename_to_display(filename);
     const gchar  *locale_lc_ctype = getenv("LC_CTYPE");
     GError *error = NULL;
+    gboolean success;
 
     if (!filename)
         return ETCore->ETFileList;
@@ -540,36 +528,66 @@ GList *ET_Add_File_To_File_List (gchar *filename)
     {
 #ifdef ENABLE_MP3
         case ID3_TAG:
-            Id3tag_Read_File_Tag(filename,FileTag);
+            if (!id3tag_read_file_tag (file, FileTag, &error))
+            {
+                Log_Print (LOG_ERROR,
+                           "Error reading ID3 tag from file ‘%s’: %s",
+                           filename_utf8, error->message);
+                g_clear_error (&error);
+            }
             break;
 #endif
 #ifdef ENABLE_OGG
         case OGG_TAG:
-            if (!ogg_tag_read_file_tag (filename, FileTag, &error))
+            if (!ogg_tag_read_file_tag (file, FileTag, &error))
             {
                 Log_Print (LOG_ERROR,
-                           _("Error reading tag from ogg file (%s)"),
-                           error->message);
+                           _("Error reading tag from Ogg file ‘%s’: %s"),
+                           filename_utf8, error->message);
                 g_clear_error (&error);
             }
             break;
 #endif
 #ifdef ENABLE_FLAC
         case FLAC_TAG:
-            Flac_Tag_Read_File_Tag(filename,FileTag);
+            if (!flac_tag_read_file_tag (file, FileTag, &error))
+            {
+                Log_Print (LOG_ERROR,
+                           _("Error reading tag from FLAC file ‘%s’: %s"),
+                           filename_utf8, error->message);
+                g_clear_error (&error);
+            }
             break;
 #endif
         case APE_TAG:
-            Ape_Tag_Read_File_Tag(filename,FileTag);
+            if (!ape_tag_read_file_tag (file, FileTag, &error))
+            {
+                Log_Print (LOG_ERROR,
+                           _("Error reading APE tag from file ‘%s’: %s"),
+                           filename_utf8, error->message);
+                g_clear_error (&error);
+            }
             break;
 #ifdef ENABLE_MP4
         case MP4_TAG:
-            Mp4tag_Read_File_Tag(filename,FileTag);
+            if (!mp4tag_read_file_tag (file, FileTag, &error))
+            {
+                Log_Print (LOG_ERROR,
+                           _("Error reading tag from MP4 file ‘%s’: %s"),
+                           filename_utf8, error->message);
+                g_clear_error (&error);
+            }
             break;
 #endif
 #ifdef ENABLE_WAVPACK
         case WAVPACK_TAG:
-            Wavpack_Tag_Read_File_Tag(filename, FileTag);
+            if (!wavpack_tag_read_file_tag (file, FileTag, &error))
+            {
+                Log_Print (LOG_ERROR,
+                           _("Error reading tag from WavPack file ‘%s’: %s"),
+                           filename_utf8, error->message);
+                g_clear_error (&error);
+            }
         break;
 #endif
 #ifdef ENABLE_OPUS
@@ -577,14 +595,15 @@ GList *ET_Add_File_To_File_List (gchar *filename)
             if (!et_opus_tag_read_file_tag (file, FileTag, &error))
             {
                 Log_Print (LOG_ERROR,
-                           _("Error reading tag from Opus file (%s)"),
-                           error->message);
+                           _("Error reading tag from Opus file ‘%s’: %s"),
+                           filename_utf8, error->message);
                 g_clear_error (&error);
             }
             break;
 #endif
         case UNKNOWN_TAG:
         default:
+            /* FIXME: Translatable string. */
             Log_Print(LOG_ERROR,"FileTag: Undefined tag type (%d) for file %s",ETFileDescription->TagType,filename_utf8);
             break;
     }
@@ -597,64 +616,64 @@ GList *ET_Add_File_To_File_List (gchar *filename)
 #if defined ENABLE_MP3 && defined ENABLE_ID3LIB
         case MP3_FILE:
         case MP2_FILE:
-            Mpeg_Header_Read_File_Info(filename,ETFileInfo);
+            success = et_mpeg_header_read_file_info (file, ETFileInfo, &error);
             break;
 #endif
 #ifdef ENABLE_OGG
         case OGG_FILE:
-            Ogg_Header_Read_File_Info(filename,ETFileInfo);
+            success = et_ogg_header_read_file_info (file, ETFileInfo, &error);
             break;
 #endif
 #ifdef ENABLE_SPEEX
         case SPEEX_FILE:
-            Speex_Header_Read_File_Info(filename,ETFileInfo);
+            success = et_speex_header_read_file_info (file, ETFileInfo,
+                                                      &error);
             break;
 #endif
 #ifdef ENABLE_FLAC
         case FLAC_FILE:
-            Flac_Header_Read_File_Info(filename,ETFileInfo);
+            success = et_flac_header_read_file_info (file, ETFileInfo, &error);
             break;
 #endif
         case MPC_FILE:
-            Mpc_Header_Read_File_Info(filename,ETFileInfo);
+            success = et_mpc_header_read_file_info (file, ETFileInfo, &error);
             break;
         case MAC_FILE:
-            Mac_Header_Read_File_Info(filename,ETFileInfo);
+            success = et_mac_header_read_file_info (file, ETFileInfo, &error);
             break;
 #ifdef ENABLE_WAVPACK
         case WAVPACK_FILE:
-            Wavpack_Header_Read_File_Info(filename, ETFileInfo);
+            success = et_wavpack_header_read_file_info (file, ETFileInfo,
+                                                        &error);
             break;
 #endif
 #ifdef ENABLE_MP4
         case MP4_FILE:
-            Mp4_Header_Read_File_Info(filename,ETFileInfo);
+            success = et_mp4_header_read_file_info (file, ETFileInfo, &error);
             break;
 #endif
 #ifdef ENABLE_OPUS
         case OPUS_FILE:
-            if (!et_opus_read_file_info (file, ETFileInfo, &error))
-            {
-                Log_Print (LOG_ERROR, _("Error while querying information for file: '%s' (%s)"),
-                           filename_utf8, error->message);
-                g_error_free (error);
-            }
+            success = et_opus_read_file_info (file, ETFileInfo, &error);
             break;
 #endif
         case UNKNOWN_FILE:
         default:
+            /* FIXME: Translatable string. */
             Log_Print(LOG_ERROR,"ETFileInfo: Undefined file type (%d) for file %s",ETFileDescription->FileType,filename_utf8);
             /* To get at least the file size. */
-            if (!et_core_read_file_info (filename, ETFileInfo, &error))
-            {
-                Log_Print (LOG_ERROR, _("Error while querying information for file: '%s' (%s)"),
-                           filename_utf8, error->message);
-                g_error_free (error);
-            }
-
+            success = et_core_read_file_info (file, ETFileInfo, &error);
             break;
     }
 
+    if (!success)
+    {
+        Log_Print (LOG_ERROR,
+                   _("Error while querying information for file ‘%s’: %s"),
+                   filename_utf8, error->message);
+        g_error_free (error);
+    }
+
     /* Restore previous value */
     setlocale(LC_CTYPE, locale_lc_ctype ? locale_lc_ctype : "");
 
@@ -720,7 +739,8 @@ GList *ET_Add_File_To_File_List (gchar *filename)
     FileName = (File_Name *)ETFile->FileNameNew->data;
     if ( (FileName && FileName->saved==FALSE) || (FileTag && FileTag->saved==FALSE) )
     {
-        Log_Print(LOG_INFO,_("Automatic corrections applied for file '%s'."), filename_utf8);
+        Log_Print (LOG_INFO, _("Automatic corrections applied for file ‘%s’"),
+                   filename_utf8);
     }
 
     /* Add the item to the ArtistAlbum list (placed here to take advantage of previous changes) */
@@ -755,81 +775,96 @@ gboolean ET_Create_Artist_Album_File_List (void)
 static gboolean
 ET_Add_File_To_Artist_Album_File_List (ET_File *ETFile)
 {
-    if (ETFile)
+    const gchar *ETFile_Artist;
+    const gchar *ETFile_Album;
+    const gchar *etfile_artist;
+    const gchar *etfile_album;
+    GList *ArtistList;
+    GList *AlbumList = NULL;
+    GList *etfilelist = NULL;
+    ET_File *etfile = NULL;
+
+    g_return_val_if_fail (ETFile != NULL, FALSE);
+
+    /* Album value of the ETFile passed in parameter. */
+    ETFile_Album = ((File_Tag *)ETFile->FileTag->data)->album;
+    /* Artist value of the ETFile passed in parameter. */
+    ETFile_Artist = ((File_Tag *)ETFile->FileTag->data)->artist;
+
+    for (ArtistList = ETCore->ETArtistAlbumFileList; ArtistList != NULL;
+         ArtistList = g_list_next (ArtistList))
     {
-        gchar *ETFile_Artist = ((File_Tag *)ETFile->FileTag->data)->artist; // Artist value of the ETFile passed in parameter
-        gchar *ETFile_Album  = ((File_Tag *)ETFile->FileTag->data)->album;  // Album  value of the ETFile passed in parameter
-        gchar *etfile_artist = NULL;
-        gchar *etfile_album  = NULL;
-        GList *ArtistList;
-        GList *AlbumList     = NULL;
-        GList *etfilelist    = NULL;
-        ET_File *etfile      = NULL;
-
-        for (ArtistList = ETCore->ETArtistAlbumFileList; ArtistList != NULL;
-             ArtistList = g_list_next (ArtistList))
+        AlbumList = (GList *)ArtistList->data;  /* Take the first item */
+        /* Take the first item, and the first etfile item. */
+        if (AlbumList && (etfilelist = (GList *)AlbumList->data)
+            && (etfile = (ET_File *)etfilelist->data)
+            && ((File_Tag *)etfile->FileTag->data) != NULL)
         {
-            AlbumList = (GList *)ArtistList->data;  /* Take the first item */
-            if (AlbumList
-            && (etfilelist = (GList *)AlbumList->data)       /* Take the first item */
-            && (etfile     = (ET_File *)etfilelist->data)    /* Take the first etfile item */
-            && ((File_Tag *)etfile->FileTag->data) != NULL )
-            {
-                etfile_artist = ((File_Tag *)etfile->FileTag->data)->artist;
-            }else
-            {
-                etfile_artist = NULL;
-            }
+            etfile_artist = ((File_Tag *)etfile->FileTag->data)->artist;
+        }
+        else
+        {
+            etfile_artist = NULL;
+        }
 
-            if ( (etfile_artist &&  ETFile_Artist && strcmp(etfile_artist,ETFile_Artist)==0)
-            ||   (!etfile_artist && !ETFile_Artist) ) // The "artist" values correspond?
+        if ((etfile_artist &&  ETFile_Artist && strcmp (etfile_artist,
+                                                        ETFile_Artist) == 0)
+            || (!etfile_artist && !ETFile_Artist)) /* The "artist" values correspond? */
+        {
+            /* The "ArtistList" item was found! */
+            while (AlbumList)
             {
-                // The "ArtistList" item was found!
-                while (AlbumList)
+                if ((etfilelist = (GList *)AlbumList->data)
+                    && (etfile = (ET_File *)etfilelist->data)
+                    && ((File_Tag *)etfile->FileTag->data) != NULL)
                 {
-                    if ( (etfilelist = (GList *)AlbumList->data)
-                    &&   (etfile     = (ET_File *)etfilelist->data)
-                    &&   ((File_Tag *)etfile->FileTag->data) != NULL )
-                    {
-                        etfile_album  = ((File_Tag *)etfile->FileTag->data)->album;
-                    }else
-                    {
-                        etfile_album  = NULL;
-                    }
+                    etfile_album = ((File_Tag *)etfile->FileTag->data)->album;
+                }
+                else
+                {
+                    etfile_album = NULL;
+                }
 
-                    if ( (etfile_album &&  ETFile_Album && strcmp(etfile_album,ETFile_Album)==0)
-                    ||   (!etfile_album && !ETFile_Album) ) // The "album" values correspond?
-                    {
-                        // The "AlbumList" item was found!
-                        // Add the ETFile to this AlbumList item
-                        //g_print(">>>  add to etfile list (%s)\n",g_path_get_basename(((File_Name *)ETFile->FileNameCur->data)->value));
-                        AlbumList->data = (gpointer) g_list_append((GList *)AlbumList->data,ETFile);
-                        AlbumList->data = (gpointer) g_list_sort((GList *)AlbumList->data,(GCompareFunc)ET_Comp_Func_Sort_Etfile_Item_By_Ascending_Filename);
-                        return TRUE;
-                    }
-                    AlbumList = g_list_next (AlbumList);
+                if ((etfile_album && ETFile_Album && strcmp (etfile_album,
+                                                             ETFile_Album) == 0)
+                    || (!etfile_album && !ETFile_Album))
+                    /* The "album" values correspond? */
+                {
+                    /* The "AlbumList" item was found!
+                     * Add the ETFile to this AlbumList item */
+                    AlbumList->data = g_list_append ((GList *)AlbumList->data,
+                                                     ETFile);
+                    AlbumList->data = g_list_sort ((GList *)AlbumList->data,
+                                                   (GCompareFunc)ET_Comp_Func_Sort_Etfile_Item_By_Ascending_Filename);
+                    return TRUE;
                 }
-                // The "AlbumList" item was NOT found! => Add a new "AlbumList" item (+...) item to the "ArtistList" list
-                etfilelist = g_list_append(NULL,ETFile);
-                //g_print(">>>  add new album (%s)\n",g_path_get_basename(((File_Name *)ETFile->FileNameCur->data)->value));
-                ArtistList->data = (gpointer) g_list_append((GList *)ArtistList->data,etfilelist);
-                ArtistList->data = (gpointer) g_list_sort((GList *)ArtistList->data,(GCompareFunc)ET_Comp_Func_Sort_Album_Item_By_Ascending_Album);
-                return TRUE;
+
+                AlbumList = g_list_next (AlbumList);
             }
-        }
-        // The "ArtistList" item was NOT found! => Add a new "ArtistList" to the main list (=ETArtistAlbumFileList)
-        etfilelist = g_list_append(NULL,ETFile);
-        AlbumList  = g_list_append(NULL,etfilelist);
-        //g_print(">>>  add new artist (%s)(etfile:%x AlbumList:%x)\n",g_path_get_basename(((File_Name *)ETFile->FileNameCur->data)->value),etfilelist,AlbumList);
-        ETCore->ETArtistAlbumFileList = g_list_append(ETCore->ETArtistAlbumFileList,AlbumList);
-        // Sort the list by ascending Artist
-        ETCore->ETArtistAlbumFileList = g_list_sort(ETCore->ETArtistAlbumFileList,(GCompareFunc)ET_Comp_Func_Sort_Artist_Item_By_Ascending_Artist);
 
-        return TRUE;
-    }else
-    {
-        return FALSE;
+            /* The "AlbumList" item was NOT found! => Add a new "AlbumList"
+             * item (+...) item to the "ArtistList" list. */
+            etfilelist = g_list_append (NULL, ETFile);
+            ArtistList->data = g_list_append ((GList *)ArtistList->data,
+                                              etfilelist);
+            ArtistList->data = g_list_sort ((GList *)ArtistList->data,
+                                            (GCompareFunc)ET_Comp_Func_Sort_Album_Item_By_Ascending_Album);
+            return TRUE;
+        }
     }
+
+    /* The "ArtistList" item was NOT found! => Add a new "ArtistList" to the
+     * main list (=ETArtistAlbumFileList). */
+    etfilelist = g_list_append (NULL, ETFile);
+    AlbumList  = g_list_append (NULL, etfilelist);
+    ETCore->ETArtistAlbumFileList = g_list_append (ETCore->ETArtistAlbumFileList,
+                                                   AlbumList);
+
+    /* Sort the list by ascending Artist. */
+    ETCore->ETArtistAlbumFileList = g_list_sort (ETCore->ETArtistAlbumFileList,
+                                                 (GCompareFunc)ET_Comp_Func_Sort_Artist_Item_By_Ascending_Artist);
+
+    return TRUE;
 }
 
 
@@ -869,17 +904,16 @@ gboolean ET_Remove_File_From_File_List (ET_File *ETFile)
             ETCore->ETFileDisplayed = (ET_File *)NULL;
     }
 
-    // Remove the file from the ETFileList list
-    ETCore->ETFileList = g_list_first(g_list_remove_link(g_list_first(ETCore->ETFileList),ETFileList));
+    /* Remove the file from the ETFileList list. */
+    ETCore->ETFileList = g_list_remove (g_list_first (ETCore->ETFileList),
+                                        ETFileList);
 
     // Remove the file from the ETArtistAlbumList list
     ET_Remove_File_From_Artist_Album_List(ETFile);
 
-    // Remove the file from the ETFileDisplayedList list (if not already done)
-    if ( (ETFileDisplayedList = g_list_find(ETCore->ETFileDisplayedList,ETFile)) )
-    {
-        ETCore->ETFileDisplayedList = g_list_first(g_list_remove_link(g_list_first(ETCore->ETFileDisplayedList),ETFileDisplayedList));
-    }
+    /* Remove the file from the ETFileDisplayedList list (if not already). */
+    ETCore->ETFileDisplayedList = g_list_remove (g_list_first (ETCore->ETFileDisplayedList),
+                                                 ETFileDisplayedList);
 
     // Free data of the file
     ET_Free_File_List_Item(ETFile);
@@ -908,11 +942,9 @@ gboolean ET_Remove_File_From_File_List (ET_File *ETFile)
     }else
     {
         // Reinit the tag and file area
-        Clear_File_Entry_Field();
-        Clear_Header_Fields();
-        Clear_Tag_Entry_Fields();
-        gtk_label_set_text(GTK_LABEL(FileIndex),"0/0:");
-        Update_Command_Buttons_Sensivity();
+        et_application_window_file_area_clear (ET_APPLICATION_WINDOW (MainWindow));
+        et_application_window_tag_area_clear (ET_APPLICATION_WINDOW (MainWindow));
+        et_application_window_update_actions (ET_APPLICATION_WINDOW (MainWindow));
     }
 
     return TRUE;
@@ -957,18 +989,13 @@ ET_Remove_File_From_Artist_Album_List (ET_File *ETFile)
 
                         if (AlbumList) /* Delete from ArtistList. */
                         {
-                            ArtistList->data = (gpointer) g_list_first (AlbumList);
+                            ArtistList->data = AlbumList;
                         }
                         else
                         {
                             /* Delete from the main list. */
                             ETCore->ETArtistAlbumFileList = g_list_remove (ArtistList,ArtistList->data);
 
-                            if (ETCore->ETArtistAlbumFileList)
-                            {
-                                ETCore->ETArtistAlbumFileList = g_list_first (ETCore->ETArtistAlbumFileList);
-                            }
-
                             return TRUE;
                         }
 
@@ -993,173 +1020,181 @@ ET_Remove_File_From_Artist_Album_List (ET_File *ETFile)
  * Note : Add also new sorting in 'Browser_List_Sort_Func'
  */
 static void
-ET_Sort_Displayed_File_List (ET_Sorting_Type Sorting_Type)
+ET_Sort_Displayed_File_List (EtSortMode Sorting_Type)
 {
     ETCore->ETFileDisplayedList = ET_Sort_File_List(ETCore->ETFileDisplayedList,Sorting_Type);
 }
+
 /*
  * Sort an 'ETFileList'
  */
-GList *ET_Sort_File_List (GList *ETFileList, ET_Sorting_Type Sorting_Type)
+GList *
+ET_Sort_File_List (GList *ETFileList, EtSortMode Sorting_Type)
 {
+    EtApplicationWindow *window;
+    GtkTreeViewColumn *column;
+    GList *etfilelist;
     gint column_id = Sorting_Type / 2;
 
-    GtkTreeViewColumn *column = get_column_for_column_id (column_id);
+    window = ET_APPLICATION_WINDOW (MainWindow);
+    column = et_application_window_browser_get_column_for_column_id (window,
+                                                                     column_id);
 
-    // Important to rewind before
-    GList *etfilelist = g_list_first(ETFileList);
+    /* Important to rewind before. */
+    etfilelist = g_list_first (ETFileList);
 
+    /* FIXME: Port to sort-mode? */
     set_sort_order_for_column_id (column_id, column, Sorting_Type);
 
-    // Sort...
+    /* Sort... */
     switch (Sorting_Type)
     {
-        case SORTING_UNKNOWN:
-        case SORTING_BY_ASCENDING_FILENAME:
+        case ET_SORT_MODE_ASCENDING_FILENAME:
             etfilelist = g_list_sort(etfilelist,(GCompareFunc)ET_Comp_Func_Sort_File_By_Ascending_Filename);
             break;
-        case SORTING_BY_DESCENDING_FILENAME:
+        case ET_SORT_MODE_DESCENDING_FILENAME:
             etfilelist = g_list_sort(etfilelist,(GCompareFunc)ET_Comp_Func_Sort_File_By_Descending_Filename);
             break;
-        case SORTING_BY_ASCENDING_TITLE:
+        case ET_SORT_MODE_ASCENDING_TITLE:
             etfilelist = g_list_sort(etfilelist,(GCompareFunc)ET_Comp_Func_Sort_File_By_Ascending_Title);
             break;
-        case SORTING_BY_DESCENDING_TITLE:
+        case ET_SORT_MODE_DESCENDING_TITLE:
             etfilelist = g_list_sort(etfilelist,(GCompareFunc)ET_Comp_Func_Sort_File_By_Descending_Title);
             break;
-        case SORTING_BY_ASCENDING_ARTIST:
+        case ET_SORT_MODE_ASCENDING_ARTIST:
             etfilelist = g_list_sort(etfilelist,(GCompareFunc)ET_Comp_Func_Sort_File_By_Ascending_Artist);
             break;
-        case SORTING_BY_DESCENDING_ARTIST:
+        case ET_SORT_MODE_DESCENDING_ARTIST:
             etfilelist = g_list_sort(etfilelist,(GCompareFunc)ET_Comp_Func_Sort_File_By_Descending_Artist);
             break;
-        case SORTING_BY_ASCENDING_ALBUM_ARTIST:
+        case ET_SORT_MODE_ASCENDING_ALBUM_ARTIST:
             etfilelist = g_list_sort(etfilelist,(GCompareFunc)ET_Comp_Func_Sort_File_By_Ascending_Album_Artist);
             break;
-        case SORTING_BY_DESCENDING_ALBUM_ARTIST:
+        case ET_SORT_MODE_DESCENDING_ALBUM_ARTIST:
             etfilelist = g_list_sort(etfilelist,(GCompareFunc)ET_Comp_Func_Sort_File_By_Descending_Album_Artist);
             break;
-		case SORTING_BY_ASCENDING_ALBUM:
+		case ET_SORT_MODE_ASCENDING_ALBUM:
             etfilelist = g_list_sort(etfilelist,(GCompareFunc)ET_Comp_Func_Sort_File_By_Ascending_Album);
             break;
-        case SORTING_BY_DESCENDING_ALBUM:
+        case ET_SORT_MODE_DESCENDING_ALBUM:
             etfilelist = g_list_sort(etfilelist,(GCompareFunc)ET_Comp_Func_Sort_File_By_Descending_Album);
             break;
-        case SORTING_BY_ASCENDING_YEAR:
+        case ET_SORT_MODE_ASCENDING_YEAR:
             etfilelist = g_list_sort(etfilelist,(GCompareFunc)ET_Comp_Func_Sort_File_By_Ascending_Year);
             break;
-        case SORTING_BY_DESCENDING_YEAR:
+        case ET_SORT_MODE_DESCENDING_YEAR:
             etfilelist = g_list_sort(etfilelist,(GCompareFunc)ET_Comp_Func_Sort_File_By_Descending_Year);
             break;
-        case SORTING_BY_ASCENDING_DISC_NUMBER:
+        case ET_SORT_MODE_ASCENDING_DISC_NUMBER:
             etfilelist = g_list_sort (etfilelist,
                                       (GCompareFunc)et_comp_func_sort_file_by_ascending_disc_number);
             break;
-        case SORTING_BY_DESCENDING_DISC_NUMBER:
+        case ET_SORT_MODE_DESCENDING_DISC_NUMBER:
             etfilelist = g_list_sort (etfilelist,
                                       (GCompareFunc)et_comp_func_sort_file_by_descending_disc_number);
             break;
-        case SORTING_BY_ASCENDING_TRACK_NUMBER:
+        case ET_SORT_MODE_ASCENDING_TRACK_NUMBER:
             etfilelist = g_list_sort (etfilelist,
                                       (GCompareFunc)ET_Comp_Func_Sort_File_By_Ascending_Track_Number);
             break;
-        case SORTING_BY_DESCENDING_TRACK_NUMBER:
+        case ET_SORT_MODE_DESCENDING_TRACK_NUMBER:
             etfilelist = g_list_sort (etfilelist,
                                       (GCompareFunc)ET_Comp_Func_Sort_File_By_Descending_Track_Number);
             break;
-        case SORTING_BY_ASCENDING_GENRE:
+        case ET_SORT_MODE_ASCENDING_GENRE:
             etfilelist = g_list_sort(etfilelist,(GCompareFunc)ET_Comp_Func_Sort_File_By_Ascending_Genre);
             break;
-        case SORTING_BY_DESCENDING_GENRE:
+        case ET_SORT_MODE_DESCENDING_GENRE:
             etfilelist = g_list_sort(etfilelist,(GCompareFunc)ET_Comp_Func_Sort_File_By_Descending_Genre);
             break;
-        case SORTING_BY_ASCENDING_COMMENT:
+        case ET_SORT_MODE_ASCENDING_COMMENT:
             etfilelist = g_list_sort(etfilelist,(GCompareFunc)ET_Comp_Func_Sort_File_By_Ascending_Comment);
             break;
-        case SORTING_BY_DESCENDING_COMMENT:
+        case ET_SORT_MODE_DESCENDING_COMMENT:
             etfilelist = g_list_sort(etfilelist,(GCompareFunc)ET_Comp_Func_Sort_File_By_Descending_Comment);
             break;
-        case SORTING_BY_ASCENDING_COMPOSER:
+        case ET_SORT_MODE_ASCENDING_COMPOSER:
             etfilelist = g_list_sort(etfilelist,(GCompareFunc)ET_Comp_Func_Sort_File_By_Ascending_Composer);
             break;
-        case SORTING_BY_DESCENDING_COMPOSER:
+        case ET_SORT_MODE_DESCENDING_COMPOSER:
             etfilelist = g_list_sort(etfilelist,(GCompareFunc)ET_Comp_Func_Sort_File_By_Descending_Composer);
             break;
-        case SORTING_BY_ASCENDING_ORIG_ARTIST:
+        case ET_SORT_MODE_ASCENDING_ORIG_ARTIST:
             etfilelist = g_list_sort(etfilelist,(GCompareFunc)ET_Comp_Func_Sort_File_By_Ascending_Orig_Artist);
             break;
-        case SORTING_BY_DESCENDING_ORIG_ARTIST:
+        case ET_SORT_MODE_DESCENDING_ORIG_ARTIST:
             etfilelist = g_list_sort(etfilelist,(GCompareFunc)ET_Comp_Func_Sort_File_By_Descending_Orig_Artist);
             break;
-        case SORTING_BY_ASCENDING_COPYRIGHT:
+        case ET_SORT_MODE_ASCENDING_COPYRIGHT:
             etfilelist = g_list_sort(etfilelist,(GCompareFunc)ET_Comp_Func_Sort_File_By_Ascending_Copyright);
             break;
-        case SORTING_BY_DESCENDING_COPYRIGHT:
+        case ET_SORT_MODE_DESCENDING_COPYRIGHT:
             etfilelist = g_list_sort(etfilelist,(GCompareFunc)ET_Comp_Func_Sort_File_By_Descending_Copyright);
             break;
-        case SORTING_BY_ASCENDING_URL:
+        case ET_SORT_MODE_ASCENDING_URL:
             etfilelist = g_list_sort(etfilelist,(GCompareFunc)ET_Comp_Func_Sort_File_By_Ascending_Url);
             break;
-        case SORTING_BY_DESCENDING_URL:
+        case ET_SORT_MODE_DESCENDING_URL:
             etfilelist = g_list_sort(etfilelist,(GCompareFunc)ET_Comp_Func_Sort_File_By_Descending_Url);
             break;
-        case SORTING_BY_ASCENDING_ENCODED_BY:
+        case ET_SORT_MODE_ASCENDING_ENCODED_BY:
             etfilelist = g_list_sort(etfilelist,(GCompareFunc)ET_Comp_Func_Sort_File_By_Ascending_Encoded_By);
             break;
-        case SORTING_BY_DESCENDING_ENCODED_BY:
+        case ET_SORT_MODE_DESCENDING_ENCODED_BY:
             etfilelist = g_list_sort(etfilelist,(GCompareFunc)ET_Comp_Func_Sort_File_By_Descending_Encoded_By);
             break;
-        case SORTING_BY_ASCENDING_CREATION_DATE:
+        case ET_SORT_MODE_ASCENDING_CREATION_DATE:
             etfilelist = g_list_sort (etfilelist,
                                       (GCompareFunc)ET_Comp_Func_Sort_File_By_Ascending_Creation_Date);
             break;
-        case SORTING_BY_DESCENDING_CREATION_DATE:
+        case ET_SORT_MODE_DESCENDING_CREATION_DATE:
             etfilelist = g_list_sort (etfilelist,
                                       (GCompareFunc)ET_Comp_Func_Sort_File_By_Descending_Creation_Date);
             break;
-        case SORTING_BY_ASCENDING_FILE_TYPE:
+        case ET_SORT_MODE_ASCENDING_FILE_TYPE:
             etfilelist = g_list_sort(etfilelist,(GCompareFunc)ET_Comp_Func_Sort_File_By_Ascending_File_Type);
             break;
-        case SORTING_BY_DESCENDING_FILE_TYPE:
+        case ET_SORT_MODE_DESCENDING_FILE_TYPE:
             etfilelist = g_list_sort(etfilelist,(GCompareFunc)ET_Comp_Func_Sort_File_By_Descending_File_Type);
             break;
-        case SORTING_BY_ASCENDING_FILE_SIZE:
+        case ET_SORT_MODE_ASCENDING_FILE_SIZE:
             etfilelist = g_list_sort(etfilelist,(GCompareFunc)ET_Comp_Func_Sort_File_By_Ascending_File_Size);
             break;
-        case SORTING_BY_DESCENDING_FILE_SIZE:
+        case ET_SORT_MODE_DESCENDING_FILE_SIZE:
             etfilelist = g_list_sort(etfilelist,(GCompareFunc)ET_Comp_Func_Sort_File_By_Descending_File_Size);
             break;
-        case SORTING_BY_ASCENDING_FILE_DURATION:
+        case ET_SORT_MODE_ASCENDING_FILE_DURATION:
             etfilelist = g_list_sort(etfilelist,(GCompareFunc)ET_Comp_Func_Sort_File_By_Ascending_File_Duration);
             break;
-        case SORTING_BY_DESCENDING_FILE_DURATION:
+        case ET_SORT_MODE_DESCENDING_FILE_DURATION:
             etfilelist = g_list_sort(etfilelist,(GCompareFunc)ET_Comp_Func_Sort_File_By_Descending_File_Duration);
             break;
-        case SORTING_BY_ASCENDING_FILE_BITRATE:
+        case ET_SORT_MODE_ASCENDING_FILE_BITRATE:
             etfilelist = g_list_sort(etfilelist,(GCompareFunc)ET_Comp_Func_Sort_File_By_Ascending_File_Bitrate);
             break;
-        case SORTING_BY_DESCENDING_FILE_BITRATE:
+        case ET_SORT_MODE_DESCENDING_FILE_BITRATE:
             etfilelist = g_list_sort(etfilelist,(GCompareFunc)ET_Comp_Func_Sort_File_By_Descending_File_Bitrate);
             break;
-        case SORTING_BY_ASCENDING_FILE_SAMPLERATE:
+        case ET_SORT_MODE_ASCENDING_FILE_SAMPLERATE:
             etfilelist = g_list_sort(etfilelist,(GCompareFunc)ET_Comp_Func_Sort_File_By_Ascending_File_Samplerate);
             break;
-        case SORTING_BY_DESCENDING_FILE_SAMPLERATE:
+        case ET_SORT_MODE_DESCENDING_FILE_SAMPLERATE:
             etfilelist = g_list_sort(etfilelist,(GCompareFunc)ET_Comp_Func_Sort_File_By_Descending_File_Samplerate);
             break;
     }
     /* Save sorting mode (note: needed when called from UI). */
-    SORTING_FILE_MODE = Sorting_Type;
+    g_settings_set_enum (MainSettings, "sort-mode", Sorting_Type);
 
     //ETFileList = g_list_first(etfilelist);
-    return g_list_first(etfilelist);
+    return etfilelist;
 }
 
 
 /*
  * Sort the list of files following the 'Sorting_Type' value. The new sorting is displayed in the UI.
  */
-void ET_Sort_Displayed_File_List_And_Update_UI (ET_Sorting_Type Sorting_Type)
+void
+ET_Sort_Displayed_File_List_And_Update_UI (EtSortMode Sorting_Type)
 {
     g_return_if_fail (ETCore->ETFileList != NULL);
 
@@ -1173,30 +1208,38 @@ void ET_Sort_Displayed_File_List_And_Update_UI (ET_Sorting_Type Sorting_Type)
 
     /* Reload files in browser list */
     ET_Displayed_File_List_By_Etfile(ETCore->ETFileDisplayed);  // Just to update 'ETFileDisplayedList'
-    Browser_List_Select_File_By_Etfile(ETCore->ETFileDisplayed,TRUE);
+    et_application_window_browser_select_file_by_et_file (ET_APPLICATION_WINDOW (MainWindow),
+                                                          ETCore->ETFileDisplayed,
+                                                          TRUE);
     ET_Display_File_Data_To_UI(ETCore->ETFileDisplayed);
 
-    Browser_List_Refresh_Sort();
-    Update_Command_Buttons_Sensivity();
+    et_application_window_browser_refresh_sort (ET_APPLICATION_WINDOW (MainWindow));
+    et_application_window_update_actions (ET_APPLICATION_WINDOW (MainWindow));
 }
 
 
 /*
  * Comparison function for sorting by ascending filename.
  */
-gint ET_Comp_Func_Sort_File_By_Ascending_Filename (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Ascending_Filename (const ET_File *ETFile1,
+                                              const ET_File *ETFile2)
 {
-    gchar *file1_ck   = ((File_Name *)((GList *)ETFile1->FileNameCur)->data)->value_ck;
-    gchar *file2_ck   = ((File_Name *)((GList *)ETFile2->FileNameCur)->data)->value_ck;
+    const gchar *file1_ck = ((File_Name *)((GList *)ETFile1->FileNameCur)->data)->value_ck;
+    const gchar *file2_ck = ((File_Name *)((GList *)ETFile2->FileNameCur)->data)->value_ck;
     // !!!! : Must be the same rules as "Cddb_Track_List_Sort_Func" to be
     // able to sort in the same order files in cddb and in the file list.
-    return SORTING_FILE_CASE_SENSITIVE ? strcmp(file1_ck,file2_ck) : strcasecmp(file1_ck,file2_ck);
+    return g_settings_get_boolean (MainSettings,
+                                   "sort-case-sensitive") ? strcmp (file1_ck, file2_ck)
+                                                          : strcasecmp (file1_ck, file2_ck);
 }
 
 /*
  * Comparison function for sorting by descending filename.
  */
-gint ET_Comp_Func_Sort_File_By_Descending_Filename (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Descending_Filename (const ET_File *ETFile1,
+                                               const ET_File *ETFile2)
 {
     return ET_Comp_Func_Sort_File_By_Ascending_Filename(ETFile2,ETFile1);
 }
@@ -1206,8 +1249,8 @@ gint ET_Comp_Func_Sort_File_By_Descending_Filename (ET_File *ETFile1, ET_File *E
  * Comparison function for sorting by ascending disc number.
  */
 gint
-et_comp_func_sort_file_by_ascending_disc_number (ET_File *ETFile1,
-                                                 ET_File *ETFile2)
+et_comp_func_sort_file_by_ascending_disc_number (const ET_File *ETFile1,
+                                                 const ET_File *ETFile2)
 {
     gint track1, track2;
 
@@ -1245,8 +1288,8 @@ et_comp_func_sort_file_by_ascending_disc_number (ET_File *ETFile1,
  * Comparison function for sorting by descending disc number.
  */
 gint
-et_comp_func_sort_file_by_descending_disc_number (ET_File *ETFile1,
-                                                  ET_File *ETFile2)
+et_comp_func_sort_file_by_descending_disc_number (const ET_File *ETFile1,
+                                                  const ET_File *ETFile2)
 {
     return et_comp_func_sort_file_by_ascending_disc_number (ETFile2, ETFile1);
 }
@@ -1255,7 +1298,9 @@ et_comp_func_sort_file_by_descending_disc_number (ET_File *ETFile1,
 /*
  * Comparison function for sorting by ascending track number.
  */
-gint ET_Comp_Func_Sort_File_By_Ascending_Track_Number (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Ascending_Track_Number (const ET_File *ETFile1,
+                                                  const ET_File *ETFile2)
 {
     gint track1, track2;
 
@@ -1280,7 +1325,9 @@ gint ET_Comp_Func_Sort_File_By_Ascending_Track_Number (ET_File *ETFile1, ET_File
 /*
  * Comparison function for sorting by descending track number.
  */
-gint ET_Comp_Func_Sort_File_By_Descending_Track_Number (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Descending_Track_Number (const ET_File *ETFile1,
+                                                   const ET_File *ETFile2)
 {
     return ET_Comp_Func_Sort_File_By_Ascending_Track_Number(ETFile2,ETFile1);
 }
@@ -1289,7 +1336,9 @@ gint ET_Comp_Func_Sort_File_By_Descending_Track_Number (ET_File *ETFile1, ET_Fil
 /*
  * Comparison function for sorting by ascending creation date.
  */
-gint ET_Comp_Func_Sort_File_By_Ascending_Creation_Date (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Ascending_Creation_Date (const ET_File *ETFile1,
+                                                   const ET_File *ETFile2)
 {
     GFile *file;
     GFileInfo *info;
@@ -1336,7 +1385,9 @@ gint ET_Comp_Func_Sort_File_By_Ascending_Creation_Date (ET_File *ETFile1, ET_Fil
 /*
  * Comparison function for sorting by descending creation date.
  */
-gint ET_Comp_Func_Sort_File_By_Descending_Creation_Date (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Descending_Creation_Date (const ET_File *ETFile1,
+                                                    const ET_File *ETFile2)
 {
     return ET_Comp_Func_Sort_File_By_Ascending_Creation_Date(ETFile2,ETFile1);
 }
@@ -1345,7 +1396,9 @@ gint ET_Comp_Func_Sort_File_By_Descending_Creation_Date (ET_File *ETFile1, ET_Fi
 /*
  * Comparison function for sorting by ascending title.
  */
-gint ET_Comp_Func_Sort_File_By_Ascending_Title (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Ascending_Title (const ET_File *ETFile1,
+                                           const ET_File *ETFile2)
 {
    // Compare pointers just in case they are the same (e.g. both are NULL)
    if ((ETFile1->FileTag->data == ETFile2->FileTag->data)
@@ -1357,7 +1410,7 @@ gint ET_Comp_Func_Sort_File_By_Ascending_Title (ET_File *ETFile1, ET_File *ETFil
     if ( !ETFile2->FileTag->data || !((File_Tag *)ETFile2->FileTag->data)->title )
         return 1;
 
-    if (SORTING_FILE_CASE_SENSITIVE)
+    if (g_settings_get_boolean (MainSettings, "sort-case-sensitive"))
     {
         if ( strcmp(((File_Tag *)ETFile1->FileTag->data)->title,((File_Tag *)ETFile2->FileTag->data)->title) == 0 )
             // Second criterion
@@ -1379,7 +1432,9 @@ gint ET_Comp_Func_Sort_File_By_Ascending_Title (ET_File *ETFile1, ET_File *ETFil
 /*
  * Comparison function for sorting by descending title.
  */
-gint ET_Comp_Func_Sort_File_By_Descending_Title (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Descending_Title (const ET_File *ETFile1,
+                                            const ET_File *ETFile2)
 {
     return ET_Comp_Func_Sort_File_By_Ascending_Title(ETFile2,ETFile1);
 }
@@ -1388,7 +1443,9 @@ gint ET_Comp_Func_Sort_File_By_Descending_Title (ET_File *ETFile1, ET_File *ETFi
 /*
  * Comparison function for sorting by ascending artist.
  */
-gint ET_Comp_Func_Sort_File_By_Ascending_Artist (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Ascending_Artist (const ET_File *ETFile1,
+                                            const ET_File *ETFile2)
 {
    // Compare pointers just in case they are the same (e.g. both are NULL)
    if ((ETFile1->FileTag->data == ETFile2->FileTag->data)
@@ -1400,7 +1457,7 @@ gint ET_Comp_Func_Sort_File_By_Ascending_Artist (ET_File *ETFile1, ET_File *ETFi
     if ( !ETFile2->FileTag->data || !((File_Tag *)ETFile2->FileTag->data)->artist )
         return 1;
 
-    if (SORTING_FILE_CASE_SENSITIVE)
+    if (g_settings_get_boolean (MainSettings, "sort-case-sensitive"))
     {
         if ( strcmp(((File_Tag *)ETFile1->FileTag->data)->artist,((File_Tag *)ETFile2->FileTag->data)->artist) == 0 )
             // Second criterion
@@ -1422,7 +1479,9 @@ gint ET_Comp_Func_Sort_File_By_Ascending_Artist (ET_File *ETFile1, ET_File *ETFi
 /*
  * Comparison function for sorting by descending artist.
  */
-gint ET_Comp_Func_Sort_File_By_Descending_Artist (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Descending_Artist (const ET_File *ETFile1,
+                                             const ET_File *ETFile2)
 {
     return ET_Comp_Func_Sort_File_By_Ascending_Artist(ETFile2,ETFile1);
 }
@@ -1430,7 +1489,9 @@ gint ET_Comp_Func_Sort_File_By_Descending_Artist (ET_File *ETFile1, ET_File *ETF
 /*
  * Comparison function for sorting by ascending album artist.
  */
-gint ET_Comp_Func_Sort_File_By_Ascending_Album_Artist (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Ascending_Album_Artist (const ET_File *ETFile1,
+                                                  const ET_File *ETFile2)
 {
    // Compare pointers just in case they are the same (e.g. both are NULL)
    if ((ETFile1->FileTag->data == ETFile2->FileTag->data)
@@ -1442,7 +1503,7 @@ gint ET_Comp_Func_Sort_File_By_Ascending_Album_Artist (ET_File *ETFile1, ET_File
     if ( !ETFile2->FileTag->data || !((File_Tag *)ETFile2->FileTag->data)->album_artist )
         return 1;
 
-    if (SORTING_FILE_CASE_SENSITIVE)
+    if (g_settings_get_boolean (MainSettings, "sort-case-sensitive"))
     {
         if ( strcmp(((File_Tag *)ETFile1->FileTag->data)->album_artist,((File_Tag *)ETFile2->FileTag->data)->album_artist) == 0 )
             // Second criterion
@@ -1464,7 +1525,9 @@ gint ET_Comp_Func_Sort_File_By_Ascending_Album_Artist (ET_File *ETFile1, ET_File
 /*
  * Comparison function for sorting by descending album artist.
  */
-gint ET_Comp_Func_Sort_File_By_Descending_Album_Artist (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Descending_Album_Artist (const ET_File *ETFile1,
+                                                   const ET_File *ETFile2)
 {
     return ET_Comp_Func_Sort_File_By_Ascending_Album_Artist(ETFile2,ETFile1);
 }
@@ -1472,7 +1535,9 @@ gint ET_Comp_Func_Sort_File_By_Descending_Album_Artist (ET_File *ETFile1, ET_Fil
 /*
  * Comparison function for sorting by ascending album.
  */
-gint ET_Comp_Func_Sort_File_By_Ascending_Album (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Ascending_Album (const ET_File *ETFile1,
+                                           const ET_File *ETFile2)
 {
    // Compare pointers just in case they are the same (e.g. both are NULL)
    if ((ETFile1->FileTag->data == ETFile2->FileTag->data)
@@ -1484,7 +1549,7 @@ gint ET_Comp_Func_Sort_File_By_Ascending_Album (ET_File *ETFile1, ET_File *ETFil
     if ( !ETFile2->FileTag->data || !((File_Tag *)ETFile2->FileTag->data)->album )
         return 1;
 
-    if (SORTING_FILE_CASE_SENSITIVE)
+    if (g_settings_get_boolean (MainSettings, "sort-case-sensitive"))
     {
         if ( strcmp(((File_Tag *)ETFile1->FileTag->data)->album,((File_Tag *)ETFile2->FileTag->data)->album) == 0 )
             // Second criterion
@@ -1506,7 +1571,9 @@ gint ET_Comp_Func_Sort_File_By_Ascending_Album (ET_File *ETFile1, ET_File *ETFil
 /*
  * Comparison function for sorting by descending album.
  */
-gint ET_Comp_Func_Sort_File_By_Descending_Album (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Descending_Album (const ET_File *ETFile1,
+                                            const ET_File *ETFile2)
 {
     return ET_Comp_Func_Sort_File_By_Ascending_Album(ETFile2,ETFile1);
 }
@@ -1515,7 +1582,9 @@ gint ET_Comp_Func_Sort_File_By_Descending_Album (ET_File *ETFile1, ET_File *ETFi
 /*
  * Comparison function for sorting by ascending year.
  */
-gint ET_Comp_Func_Sort_File_By_Ascending_Year (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Ascending_Year (const ET_File *ETFile1,
+                                          const ET_File *ETFile2)
 {
     gint year1, year2;
 
@@ -1540,7 +1609,9 @@ gint ET_Comp_Func_Sort_File_By_Ascending_Year (ET_File *ETFile1, ET_File *ETFile
 /*
  * Comparison function for sorting by descending year.
  */
-gint ET_Comp_Func_Sort_File_By_Descending_Year (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Descending_Year (const ET_File *ETFile1,
+                                           const ET_File *ETFile2)
 {
     return ET_Comp_Func_Sort_File_By_Ascending_Year(ETFile2,ETFile1);
 }
@@ -1549,7 +1620,9 @@ gint ET_Comp_Func_Sort_File_By_Descending_Year (ET_File *ETFile1, ET_File *ETFil
 /*
  * Comparison function for sorting by ascending genre.
  */
-gint ET_Comp_Func_Sort_File_By_Ascending_Genre (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Ascending_Genre (const ET_File *ETFile1,
+                                           const ET_File *ETFile2)
 {
    // Compare pointers just in case they are the same (e.g. both are NULL)
    if ((ETFile1->FileTag->data == ETFile2->FileTag->data)
@@ -1559,7 +1632,7 @@ gint ET_Comp_Func_Sort_File_By_Ascending_Genre (ET_File *ETFile1, ET_File *ETFil
     if ( !ETFile1->FileTag->data || !((File_Tag *)ETFile1->FileTag->data)->genre ) return -1;
     if ( !ETFile2->FileTag->data || !((File_Tag *)ETFile2->FileTag->data)->genre ) return 1;
 
-    if (SORTING_FILE_CASE_SENSITIVE)
+    if (g_settings_get_boolean (MainSettings, "sort-case-sensitive"))
     {
         if ( strcmp(((File_Tag *)ETFile1->FileTag->data)->genre,((File_Tag *)ETFile2->FileTag->data)->genre) == 0 )
             // Second criterion
@@ -1581,7 +1654,9 @@ gint ET_Comp_Func_Sort_File_By_Ascending_Genre (ET_File *ETFile1, ET_File *ETFil
 /*
  * Comparison function for sorting by descending genre.
  */
-gint ET_Comp_Func_Sort_File_By_Descending_Genre (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Descending_Genre (const ET_File *ETFile1,
+                                            const ET_File *ETFile2)
 {
     return ET_Comp_Func_Sort_File_By_Ascending_Genre(ETFile2,ETFile1);
 }
@@ -1590,7 +1665,9 @@ gint ET_Comp_Func_Sort_File_By_Descending_Genre (ET_File *ETFile1, ET_File *ETFi
 /*
  * Comparison function for sorting by ascending comment.
  */
-gint ET_Comp_Func_Sort_File_By_Ascending_Comment (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Ascending_Comment (const ET_File *ETFile1,
+                                             const ET_File *ETFile2)
 {
    // Compare pointers just in case they are the same (e.g. both are NULL)
    if ((ETFile1->FileTag->data == ETFile2->FileTag->data)
@@ -1602,7 +1679,7 @@ gint ET_Comp_Func_Sort_File_By_Ascending_Comment (ET_File *ETFile1, ET_File *ETF
     if ( !ETFile2->FileTag->data || !((File_Tag *)ETFile2->FileTag->data)->comment )
         return 1;
 
-    if (SORTING_FILE_CASE_SENSITIVE)
+    if (g_settings_get_boolean (MainSettings, "sort-case-sensitive"))
     {
         if ( strcmp(((File_Tag *)ETFile1->FileTag->data)->comment,((File_Tag *)ETFile2->FileTag->data)->comment) == 0 )
             // Second criterion
@@ -1624,7 +1701,9 @@ gint ET_Comp_Func_Sort_File_By_Ascending_Comment (ET_File *ETFile1, ET_File *ETF
 /*
  * Comparison function for sorting by descending comment.
  */
-gint ET_Comp_Func_Sort_File_By_Descending_Comment (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Descending_Comment (const ET_File *ETFile1,
+                                              const ET_File *ETFile2)
 {
     return ET_Comp_Func_Sort_File_By_Ascending_Comment(ETFile2,ETFile1);
 }
@@ -1633,7 +1712,9 @@ gint ET_Comp_Func_Sort_File_By_Descending_Comment (ET_File *ETFile1, ET_File *ET
 /*
  * Comparison function for sorting by ascending composer.
  */
-gint ET_Comp_Func_Sort_File_By_Ascending_Composer (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Ascending_Composer (const ET_File *ETFile1,
+                                              const ET_File *ETFile2)
 {
    // Compare pointers just in case they are the same (e.g. both are NULL)
    if ((ETFile1->FileTag->data == ETFile2->FileTag->data)
@@ -1645,7 +1726,7 @@ gint ET_Comp_Func_Sort_File_By_Ascending_Composer (ET_File *ETFile1, ET_File *ET
     if ( !ETFile2->FileTag->data || !((File_Tag *)ETFile2->FileTag->data)->composer )
         return 1;
 
-    if (SORTING_FILE_CASE_SENSITIVE)
+    if (g_settings_get_boolean (MainSettings, "sort-case-sensitive"))
     {
         if ( strcmp(((File_Tag *)ETFile1->FileTag->data)->composer,((File_Tag *)ETFile2->FileTag->data)->composer) == 0 )
             // Second criterion
@@ -1667,7 +1748,9 @@ gint ET_Comp_Func_Sort_File_By_Ascending_Composer (ET_File *ETFile1, ET_File *ET
 /*
  * Comparison function for sorting by descending composer.
  */
-gint ET_Comp_Func_Sort_File_By_Descending_Composer (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Descending_Composer (const ET_File *ETFile1,
+                                               const ET_File *ETFile2)
 {
     return ET_Comp_Func_Sort_File_By_Ascending_Composer(ETFile2,ETFile1);
 }
@@ -1676,7 +1759,9 @@ gint ET_Comp_Func_Sort_File_By_Descending_Composer (ET_File *ETFile1, ET_File *E
 /*
  * Comparison function for sorting by ascending original artist.
  */
-gint ET_Comp_Func_Sort_File_By_Ascending_Orig_Artist (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Ascending_Orig_Artist (const ET_File *ETFile1,
+                                                 const ET_File *ETFile2)
 {
    // Compare pointers just in case they are the same (e.g. both are NULL)
    if ((ETFile1->FileTag->data == ETFile2->FileTag->data)
@@ -1688,7 +1773,7 @@ gint ET_Comp_Func_Sort_File_By_Ascending_Orig_Artist (ET_File *ETFile1, ET_File
     if ( !ETFile2->FileTag->data || !((File_Tag *)ETFile2->FileTag->data)->orig_artist )
         return 1;
 
-    if (SORTING_FILE_CASE_SENSITIVE)
+    if (g_settings_get_boolean (MainSettings, "sort-case-sensitive"))
     {
         if ( strcmp(((File_Tag *)ETFile1->FileTag->data)->orig_artist,((File_Tag *)ETFile2->FileTag->data)->orig_artist) == 0 )
             // Second criterion
@@ -1710,7 +1795,9 @@ gint ET_Comp_Func_Sort_File_By_Ascending_Orig_Artist (ET_File *ETFile1, ET_File
 /*
  * Comparison function for sorting by descending original artist.
  */
-gint ET_Comp_Func_Sort_File_By_Descending_Orig_Artist (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Descending_Orig_Artist (const ET_File *ETFile1,
+                                                  const ET_File *ETFile2)
 {
     return ET_Comp_Func_Sort_File_By_Ascending_Orig_Artist(ETFile2,ETFile1);
 }
@@ -1719,7 +1806,9 @@ gint ET_Comp_Func_Sort_File_By_Descending_Orig_Artist (ET_File *ETFile1, ET_File
 /*
  * Comparison function for sorting by ascending copyright.
  */
-gint ET_Comp_Func_Sort_File_By_Ascending_Copyright (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Ascending_Copyright (const ET_File *ETFile1,
+                                               const ET_File *ETFile2)
 {
    // Compare pointers just in case they are the same (e.g. both are NULL)
    if ((ETFile1->FileTag->data == ETFile2->FileTag->data)
@@ -1731,7 +1820,7 @@ gint ET_Comp_Func_Sort_File_By_Ascending_Copyright (ET_File *ETFile1, ET_File *E
     if ( !ETFile2->FileTag->data || !((File_Tag *)ETFile2->FileTag->data)->copyright )
         return 1;
 
-    if (SORTING_FILE_CASE_SENSITIVE)
+    if (g_settings_get_boolean (MainSettings, "sort-case-sensitive"))
     {
         if ( strcmp(((File_Tag *)ETFile1->FileTag->data)->copyright,((File_Tag *)ETFile2->FileTag->data)->copyright) == 0 )
             // Second criterion
@@ -1753,7 +1842,9 @@ gint ET_Comp_Func_Sort_File_By_Ascending_Copyright (ET_File *ETFile1, ET_File *E
 /*
  * Comparison function for sorting by descending copyright.
  */
-gint ET_Comp_Func_Sort_File_By_Descending_Copyright (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Descending_Copyright (const ET_File *ETFile1,
+                                                const ET_File *ETFile2)
 {
     return ET_Comp_Func_Sort_File_By_Ascending_Copyright(ETFile2,ETFile1);
 }
@@ -1762,7 +1853,9 @@ gint ET_Comp_Func_Sort_File_By_Descending_Copyright (ET_File *ETFile1, ET_File *
 /*
  * Comparison function for sorting by ascending URL.
  */
-gint ET_Comp_Func_Sort_File_By_Ascending_Url (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Ascending_Url (const ET_File *ETFile1,
+                                         const ET_File *ETFile2)
 {
    // Compare pointers just in case they are the same (e.g. both are NULL)
    if ((ETFile1->FileTag->data == ETFile2->FileTag->data)
@@ -1774,7 +1867,7 @@ gint ET_Comp_Func_Sort_File_By_Ascending_Url (ET_File *ETFile1, ET_File *ETFile2
     if ( !ETFile2->FileTag->data || !((File_Tag *)ETFile2->FileTag->data)->url )
         return 1;
 
-    if (SORTING_FILE_CASE_SENSITIVE)
+    if (g_settings_get_boolean (MainSettings, "sort-case-sensitive"))
     {
         if ( strcmp(((File_Tag *)ETFile1->FileTag->data)->url,((File_Tag *)ETFile2->FileTag->data)->url) == 0 )
             // Second criterion
@@ -1796,7 +1889,9 @@ gint ET_Comp_Func_Sort_File_By_Ascending_Url (ET_File *ETFile1, ET_File *ETFile2
 /*
  * Comparison function for sorting by descending URL.
  */
-gint ET_Comp_Func_Sort_File_By_Descending_Url (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Descending_Url (const ET_File *ETFile1,
+                                          const ET_File *ETFile2)
 {
     return ET_Comp_Func_Sort_File_By_Ascending_Url(ETFile2,ETFile1);
 }
@@ -1805,7 +1900,9 @@ gint ET_Comp_Func_Sort_File_By_Descending_Url (ET_File *ETFile1, ET_File *ETFile
 /*
  * Comparison function for sorting by ascending encoded by.
  */
-gint ET_Comp_Func_Sort_File_By_Ascending_Encoded_By (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Ascending_Encoded_By (const ET_File *ETFile1,
+                                                const ET_File *ETFile2)
 {
    // Compare pointers just in case they are the same (e.g. both are NULL)
    if ((ETFile1->FileTag->data == ETFile2->FileTag->data)
@@ -1817,7 +1914,7 @@ gint ET_Comp_Func_Sort_File_By_Ascending_Encoded_By (ET_File *ETFile1, ET_File *
     if ( !ETFile2->FileTag->data || !((File_Tag *)ETFile2->FileTag->data)->encoded_by )
         return 1;
 
-    if (SORTING_FILE_CASE_SENSITIVE)
+    if (g_settings_get_boolean (MainSettings, "sort-case-sensitive"))
     {
         if ( strcmp(((File_Tag *)ETFile1->FileTag->data)->encoded_by,((File_Tag *)ETFile2->FileTag->data)->encoded_by) == 0 )
             // Second criterion
@@ -1839,7 +1936,9 @@ gint ET_Comp_Func_Sort_File_By_Ascending_Encoded_By (ET_File *ETFile1, ET_File *
 /*
  * Comparison function for sorting by descendingencoded by.
  */
-gint ET_Comp_Func_Sort_File_By_Descending_Encoded_By (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Descending_Encoded_By (const ET_File *ETFile1,
+                                                 const ET_File *ETFile2)
 {
     return ET_Comp_Func_Sort_File_By_Ascending_Encoded_By(ETFile2,ETFile1);
 }
@@ -1848,7 +1947,9 @@ gint ET_Comp_Func_Sort_File_By_Descending_Encoded_By (ET_File *ETFile1, ET_File
 /*
  * Comparison function for sorting by ascending file type (mp3, ogg, ...).
  */
-gint ET_Comp_Func_Sort_File_By_Ascending_File_Type (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Ascending_File_Type (const ET_File *ETFile1,
+                                               const ET_File *ETFile2)
 {
     if ( !ETFile1->ETFileDescription ) return -1;
     if ( !ETFile2->ETFileDescription ) return 1;
@@ -1864,7 +1965,9 @@ gint ET_Comp_Func_Sort_File_By_Ascending_File_Type (ET_File *ETFile1, ET_File *E
 /*
  * Comparison function for sorting by descending file type (mp3, ogg, ...).
  */
-gint ET_Comp_Func_Sort_File_By_Descending_File_Type (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Descending_File_Type (const ET_File *ETFile1,
+                                                const ET_File *ETFile2)
 {
     return ET_Comp_Func_Sort_File_By_Ascending_File_Type(ETFile2,ETFile1);
 }
@@ -1873,7 +1976,9 @@ gint ET_Comp_Func_Sort_File_By_Descending_File_Type (ET_File *ETFile1, ET_File *
 /*
  * Comparison function for sorting by ascending file size.
  */
-gint ET_Comp_Func_Sort_File_By_Ascending_File_Size (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Ascending_File_Size (const ET_File *ETFile1,
+                                               const ET_File *ETFile2)
 {
     if ( !ETFile1->ETFileInfo ) return -1;
     if ( !ETFile2->ETFileInfo ) return 1;
@@ -1889,7 +1994,9 @@ gint ET_Comp_Func_Sort_File_By_Ascending_File_Size (ET_File *ETFile1, ET_File *E
 /*
  * Comparison function for sorting by descending file size.
  */
-gint ET_Comp_Func_Sort_File_By_Descending_File_Size (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Descending_File_Size (const ET_File *ETFile1,
+                                                const ET_File *ETFile2)
 {
     return ET_Comp_Func_Sort_File_By_Ascending_File_Size(ETFile2,ETFile1);
 }
@@ -1898,7 +2005,9 @@ gint ET_Comp_Func_Sort_File_By_Descending_File_Size (ET_File *ETFile1, ET_File *
 /*
  * Comparison function for sorting by ascending file duration.
  */
-gint ET_Comp_Func_Sort_File_By_Ascending_File_Duration (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Ascending_File_Duration (const ET_File *ETFile1,
+                                                   const ET_File *ETFile2)
 {
     if ( !ETFile1->ETFileInfo ) return -1;
     if ( !ETFile2->ETFileInfo ) return 1;
@@ -1914,7 +2023,9 @@ gint ET_Comp_Func_Sort_File_By_Ascending_File_Duration (ET_File *ETFile1, ET_Fil
 /*
  * Comparison function for sorting by descending file duration.
  */
-gint ET_Comp_Func_Sort_File_By_Descending_File_Duration (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Descending_File_Duration (const ET_File *ETFile1,
+                                                    const ET_File *ETFile2)
 {
     return ET_Comp_Func_Sort_File_By_Ascending_File_Duration(ETFile2,ETFile1);
 }
@@ -1923,7 +2034,9 @@ gint ET_Comp_Func_Sort_File_By_Descending_File_Duration (ET_File *ETFile1, ET_Fi
 /*
  * Comparison function for sorting by ascending file bitrate.
  */
-gint ET_Comp_Func_Sort_File_By_Ascending_File_Bitrate (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Ascending_File_Bitrate (const ET_File *ETFile1,
+                                                  const ET_File *ETFile2)
 {
     if ( !ETFile1->ETFileInfo ) return -1;
     if ( !ETFile2->ETFileInfo ) return 1;
@@ -1939,7 +2052,9 @@ gint ET_Comp_Func_Sort_File_By_Ascending_File_Bitrate (ET_File *ETFile1, ET_File
 /*
  * Comparison function for sorting by descending file bitrate.
  */
-gint ET_Comp_Func_Sort_File_By_Descending_File_Bitrate (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Descending_File_Bitrate (const ET_File *ETFile1,
+                                                   const ET_File *ETFile2)
 {
     return ET_Comp_Func_Sort_File_By_Ascending_File_Bitrate(ETFile2,ETFile1);
 }
@@ -1948,7 +2063,9 @@ gint ET_Comp_Func_Sort_File_By_Descending_File_Bitrate (ET_File *ETFile1, ET_Fil
 /*
  * Comparison function for sorting by ascending file samplerate.
  */
-gint ET_Comp_Func_Sort_File_By_Ascending_File_Samplerate (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Ascending_File_Samplerate (const ET_File *ETFile1,
+                                                     const ET_File *ETFile2)
 {
     if ( !ETFile1->ETFileInfo ) return -1;
     if ( !ETFile2->ETFileInfo ) return 1;
@@ -1964,7 +2081,9 @@ gint ET_Comp_Func_Sort_File_By_Ascending_File_Samplerate (ET_File *ETFile1, ET_F
 /*
  * Comparison function for sorting by descending file samplerate.
  */
-gint ET_Comp_Func_Sort_File_By_Descending_File_Samplerate (ET_File *ETFile1, ET_File *ETFile2)
+gint
+ET_Comp_Func_Sort_File_By_Descending_File_Samplerate (const ET_File *ETFile1,
+                                                      const ET_File *ETFile2)
 {
     return ET_Comp_Func_Sort_File_By_Ascending_File_Samplerate(ETFile2,ETFile1);
 }
@@ -1973,12 +2092,16 @@ gint ET_Comp_Func_Sort_File_By_Descending_File_Samplerate (ET_File *ETFile1, ET_
 /*
  * Comparison function for sorting by ascending artist in the ArtistAlbumList.
  */
-static gint ET_Comp_Func_Sort_Artist_Item_By_Ascending_Artist (GList *AlbumList1,
-                                                               GList *AlbumList2)
+static gint
+ET_Comp_Func_Sort_Artist_Item_By_Ascending_Artist (const GList *AlbumList1,
+                                                   const GList *AlbumList2)
 {
-    GList   *etfilelist1 = NULL,    *etfilelist2 = NULL;
-    ET_File *etfile1 = NULL,        *etfile2 = NULL;
-    gchar   *etfile1_artist, *etfile2_artist;
+    const GList *etfilelist1 = NULL;
+    const GList *etfilelist2 = NULL;
+    const ET_File *etfile1 = NULL;
+    const ET_File *etfile2 = NULL;
+    const gchar *etfile1_artist;
+    const gchar *etfile2_artist;
 
     if (!AlbumList1
     || !(etfilelist1    = (GList *)AlbumList1->data)
@@ -1992,8 +2115,8 @@ static gint ET_Comp_Func_Sort_Artist_Item_By_Ascending_Artist (GList *AlbumList1
     || !(etfile2_artist = ((File_Tag *)etfile2->FileTag->data)->artist) )
         return 1;
 
-    //if (SORTING_FILE_CASE_SENSITIVE)
-    //    return strcmp(etfile1_artist,etfile2_artist);
+    /*if (g_settings_get_boolean (MainSettings, "sort-case-sensitive"))
+     *    return strcmp(etfile1_artist,etfile2_artist); */
     //else
         return strcasecmp(etfile1_artist,etfile2_artist);
 }
@@ -2002,11 +2125,13 @@ static gint ET_Comp_Func_Sort_Artist_Item_By_Ascending_Artist (GList *AlbumList1
  * Comparison function for sorting by ascending album in the ArtistAlbumList.
  */
 static gint
-ET_Comp_Func_Sort_Album_Item_By_Ascending_Album (GList *etfilelist1,
-                                                 GList *etfilelist2)
+ET_Comp_Func_Sort_Album_Item_By_Ascending_Album (const GList *etfilelist1,
+                                                 const GList *etfilelist2)
 {
-    ET_File *etfile1,       *etfile2;
-    gchar   *etfile1_album, *etfile2_album;
+    const ET_File *etfile1;
+    const ET_File *etfile2;
+    const gchar *etfile1_album;
+    const gchar *etfile2_album;
 
     if (!etfilelist1
     || !(etfile1        = (ET_File *)etfilelist1->data)
@@ -2018,8 +2143,8 @@ ET_Comp_Func_Sort_Album_Item_By_Ascending_Album (GList *etfilelist1,
     || !(etfile2_album  = ((File_Tag *)etfile2->FileTag->data)->album) )
         return 1;
 
-    //if (SORTING_FILE_CASE_SENSITIVE)
-    //    return strcmp(etfile1_album,etfile2_album);
+    /*if (g_settings_get_boolean (MainSettings, "sort-case-sensitive"))
+     *    return strcmp(etfile1_album,etfile2_album); */
     //else
         return strcasecmp(etfile1_album,etfile2_album);
 }
@@ -2029,8 +2154,8 @@ ET_Comp_Func_Sort_Album_Item_By_Ascending_Album (GList *etfilelist1,
  * FIX ME : should use the default sorting!
  */
 static gint
-ET_Comp_Func_Sort_Etfile_Item_By_Ascending_Filename (ET_File *ETFile1,
-                                                     ET_File *ETFile2)
+ET_Comp_Func_Sort_Etfile_Item_By_Ascending_Filename (const ET_File *ETFile1,
+                                                     const ET_File *ETFile2)
 {
 
     if (!ETFile1) return -1;
@@ -2090,7 +2215,8 @@ GList *ET_Displayed_File_List_Last (void)
 /*
  * Returns the item of the "displayed list" which correspond to the given 'ETFile' (used into browser list).
  */
-GList *ET_Displayed_File_List_By_Etfile (ET_File *ETFile)
+GList *
+ET_Displayed_File_List_By_Etfile (const ET_File *ETFile)
 {
     GList *etfilelist;
 
@@ -2170,8 +2296,9 @@ gboolean ET_Set_Displayed_File_List (GList *ETFileList)
         ETCore->ETFileDisplayedList_TotalDuration += ((ET_File_Info *)((ET_File *)l->data)->ETFileInfo)->duration;
     }
 
-    // Sort the file list
-    ET_Sort_Displayed_File_List(SORTING_FILE_MODE);
+    /* Sort the file list. */
+    ET_Sort_Displayed_File_List (g_settings_get_enum (MainSettings,
+                                 "sort-mode"));
 
     // Should renums ETCore->ETFileDisplayedList only!
     ET_Displayed_File_List_Number();
@@ -2203,7 +2330,8 @@ gboolean ET_Free_File_List (void)
 /*
  * Frees one item of the full main list of files.
  */
-gboolean ET_Free_File_List_Item (ET_File *ETFile)
+void
+ET_Free_File_List_Item (ET_File *ETFile)
 {
     if (ETFile)
     {
@@ -2232,8 +2360,6 @@ gboolean ET_Free_File_List_Item (ET_File *ETFile)
         g_free(ETFile->ETFileExtension);
         g_free(ETFile);
     }
-
-    return TRUE;
 }
 
 
@@ -2255,16 +2381,16 @@ gboolean ET_Free_File_Name_List (GList *FileNameList)
 /*
  * Frees a File_Name item.
  */
-gboolean ET_Free_File_Name_Item (File_Name *FileName)
+static void
+ET_Free_File_Name_Item (File_Name *FileName)
 {
-    g_return_val_if_fail (FileName != NULL, FALSE);
+    g_return_if_fail (FileName != NULL);
 
     g_free(FileName->value);
     g_free(FileName->value_utf8);
     g_free(FileName->value_ck);
     g_free(FileName);
 
-    return TRUE;
 }
 
 
@@ -2398,14 +2524,14 @@ ET_Free_Artist_Album_File_List (void)
 
     /* Pointers are stored inside the artist/album list-stores, so free them
      * first. */
-    browser_artist_model_clear ();
-    browser_album_model_clear ();
+    et_application_window_browser_clear_artist_model (ET_APPLICATION_WINDOW (MainWindow));
+    et_application_window_browser_clear_album_model (ET_APPLICATION_WINDOW (MainWindow));
 
     for (l = ETCore->ETArtistAlbumFileList; l != NULL; l = g_list_next (l))
     {
         GList *m;
 
-	for (m = (GList *)l->data; m != NULL; m = g_list_next (m))
+        for (m = (GList *)l->data; m != NULL; m = g_list_next (m))
         {
             GList *n = (GList *)m->data;
             if (n)
@@ -2435,9 +2561,10 @@ ET_Free_Artist_Album_File_List (void)
  * Duplicate the 'other' list
  */
 static gboolean
-ET_Copy_File_Tag_Item_Other_Field (ET_File *ETFile, File_Tag *FileTag)
+ET_Copy_File_Tag_Item_Other_Field (const ET_File *ETFile,
+                                   File_Tag *FileTag)
 {
-    File_Tag *FileTagCur;
+    const File_Tag *FileTagCur;
     GList *l;
 
     FileTagCur = (File_Tag *)(ETFile->FileTag)->data;
@@ -2456,9 +2583,10 @@ ET_Copy_File_Tag_Item_Other_Field (ET_File *ETFile, File_Tag *FileTag)
  * Copy data of the File_Tag structure (of ETFile) to the FileTag item.
  * Reallocate data if not null.
  */
-gboolean ET_Copy_File_Tag_Item (ET_File *ETFile, File_Tag *FileTag)
+gboolean
+ET_Copy_File_Tag_Item (const ET_File *ETFile, File_Tag *FileTag)
 {
-    File_Tag *FileTagCur;
+    const File_Tag *FileTagCur;
 
     g_return_val_if_fail (ETFile != NULL && ETFile->FileTag != NULL &&
                           (File_Tag *)(ETFile->FileTag)->data != NULL, FALSE);
@@ -2642,7 +2770,10 @@ gboolean ET_Copy_File_Tag_Item (ET_File *ETFile, File_Tag *FileTag)
  * Calculate also the collate key.
  * It treats numbers intelligently so that "file1" "file10" "file5" is sorted as "file1" "file5" "file10"
  */
-gboolean ET_Set_Filename_File_Name_Item (File_Name *FileName, gchar *filename_utf8, gchar *filename)
+gboolean
+ET_Set_Filename_File_Name_Item (File_Name *FileName,
+                                const gchar *filename_utf8,
+                                const gchar *filename)
 {
     g_return_val_if_fail (FileName != NULL, FALSE);
 
@@ -2699,7 +2830,8 @@ gboolean ET_Set_Field_File_Tag_Item (gchar **FileTagField, const gchar *value)
 /*
  * Set the value of a field of a FileTag Picture item.
  */
-gboolean ET_Set_Field_File_Tag_Picture (Picture **FileTagField, Picture *pic)
+gboolean
+ET_Set_Field_File_Tag_Picture (Picture **FileTagField, const Picture *pic)
 {
     g_return_val_if_fail (FileTagField != NULL, FALSE);
 
@@ -2720,277 +2852,139 @@ gboolean ET_Set_Field_File_Tag_Picture (Picture **FileTagField, Picture *pic)
  * Displaying functions *
  ************************/
 
+static void
+et_file_header_fields_free (EtFileHeaderFields *fields)
+{
+    g_free (fields->version);
+    g_free (fields->bitrate);
+    g_free (fields->samplerate);
+    g_free (fields->mode);
+    g_free (fields->size);
+    g_free (fields->duration);
+    g_slice_free (EtFileHeaderFields, fields);
+}
+
 /*
  * Display information of the file (Position + Header + Tag) to the user interface.
  * Before doing it, it saves data of the file currently displayed
  */
-void ET_Display_File_Data_To_UI (ET_File *ETFile)
+void
+ET_Display_File_Data_To_UI (ET_File *ETFile)
 {
-    ET_File_Description *ETFileDescription;
-    gchar *cur_filename;
-    gchar *cur_filename_utf8;
+    EtApplicationWindow *window;
+    const ET_File_Description *ETFileDescription;
+    const gchar *cur_filename_utf8;
     gchar *msg;
-#ifdef ENABLE_OPUS
-    GFile *file;
-#endif
+    EtFileHeaderFields *fields;
 
     g_return_if_fail (ETFile != NULL &&
                       ((GList *)ETFile->FileNameCur)->data != NULL);
                       /* For the case where ETFile is an "empty" structure. */
 
-    cur_filename      = ((File_Name *)((GList *)ETFile->FileNameCur)->data)->value;
     cur_filename_utf8 = ((File_Name *)((GList *)ETFile->FileNameCur)->data)->value_utf8;
     ETFileDescription = ETFile->ETFileDescription;
 
     /* Save the current displayed file */
     ETCore->ETFileDisplayed = ETFile;
 
+    window = ET_APPLICATION_WINDOW (MainWindow);
+
     /* Display position in list + show/hide icon if file writable/read_only (cur_filename) */
-    ET_Display_File_And_List_Status_To_UI(ETFile);
+    et_application_window_file_area_set_file_fields (window, ETFile);
 
     /* Display filename (and his path) (value in FileNameNew) */
     ET_Display_Filename_To_UI(ETFile);
 
     /* Display tag data */
-    switch (ETFileDescription->TagType)
-    {
-#ifdef ENABLE_MP3
-        case ID3_TAG:
-            gtk_frame_set_label(GTK_FRAME(TagFrame),_("ID3 Tag"));
-            ET_Display_File_Tag_To_UI(ETFile);
-            break;
-#endif
-#ifdef ENABLE_OGG
-        case OGG_TAG:
-            gtk_frame_set_label(GTK_FRAME(TagFrame),_("Ogg Vorbis Tag"));
-            ET_Display_File_Tag_To_UI(ETFile);
-            break;
-#endif
-#ifdef ENABLE_FLAC
-        case FLAC_TAG:
-            gtk_frame_set_label(GTK_FRAME(TagFrame),_("FLAC Vorbis Tag"));
-            ET_Display_File_Tag_To_UI(ETFile);
-            break;
-#endif
-        case APE_TAG:
-            gtk_frame_set_label(GTK_FRAME(TagFrame),_("APE Tag"));
-            ET_Display_File_Tag_To_UI(ETFile);
-            break;
-#ifdef ENABLE_MP4
-        case MP4_TAG:
-            gtk_frame_set_label(GTK_FRAME(TagFrame),_("MP4/M4A/AAC Tag"));
-            ET_Display_File_Tag_To_UI(ETFile);
-            break;
-#endif
-#ifdef ENABLE_WAVPACK
-        case WAVPACK_TAG:
-            gtk_frame_set_label(GTK_FRAME(TagFrame),_("Wavpack Tag"));
-            ET_Display_File_Tag_To_UI(ETFile);
-            break;
-#endif
-#ifdef ENABLE_OPUS
-        case OPUS_TAG:
-            gtk_frame_set_label (GTK_FRAME (TagFrame), _("Opus Tag"));
-            ET_Display_File_Tag_To_UI (ETFile);
-            break;
-#endif
-        case UNKNOWN_TAG:
-        default:
-            gtk_frame_set_label(GTK_FRAME(TagFrame),_("Tag"));
-            ET_Display_File_Tag_To_UI(ETFile); // To reinit screen
-            Log_Print(LOG_ERROR,"FileTag: Undefined tag type %d for file %s.",ETFileDescription->TagType,cur_filename_utf8);
-            break;
-    }
+    et_application_window_tag_area_display_et_file (window, ETFile);
 
     /* Display controls in tag area */
-    Tag_Area_Display_Controls(ETFile);
+    et_application_window_tag_area_display_controls (window, ETFile);
 
     /* Display file data, header data and file type */
     switch (ETFileDescription->FileType)
     {
 #if defined ENABLE_MP3 && defined ENABLE_ID3LIB
         case MP3_FILE:
-            gtk_frame_set_label(GTK_FRAME(FileFrame),_("MP3 File"));
-            Mpeg_Header_Display_File_Info_To_UI(cur_filename,ETFile->ETFileInfo);
-            break;
         case MP2_FILE:
-            gtk_frame_set_label(GTK_FRAME(FileFrame),_("MP2 File"));
-            Mpeg_Header_Display_File_Info_To_UI(cur_filename,ETFile->ETFileInfo);
+            fields = et_mpeg_header_display_file_info_to_ui (ETFile);
+            et_application_window_file_area_set_header_fields (window, fields);
+            et_mpeg_file_header_fields_free (fields);
             break;
 #endif
 #ifdef ENABLE_OGG
         case OGG_FILE:
-            gtk_frame_set_label(GTK_FRAME(FileFrame),_("Ogg Vorbis File"));
-            Ogg_Header_Display_File_Info_To_UI(cur_filename,ETFile->ETFileInfo);
+            fields = et_ogg_header_display_file_info_to_ui (ETFile);
+            et_application_window_file_area_set_header_fields (window, fields);
+            et_ogg_file_header_fields_free (fields);
             break;
 #endif
 #ifdef ENABLE_SPEEX
         case SPEEX_FILE:
-            gtk_frame_set_label(GTK_FRAME(FileFrame),_("Speex File"));
-            Ogg_Header_Display_File_Info_To_UI(cur_filename,ETFile->ETFileInfo);
+            fields = et_ogg_header_display_file_info_to_ui (ETFile);
+            et_application_window_file_area_set_header_fields (window, fields);
+            et_ogg_file_header_fields_free (fields);
             break;
 #endif
 #ifdef ENABLE_FLAC
         case FLAC_FILE:
-            gtk_frame_set_label(GTK_FRAME(FileFrame),_("FLAC File"));
-            Flac_Header_Display_File_Info_To_UI(cur_filename,ETFile->ETFileInfo);
+            fields = et_flac_header_display_file_info_to_ui (ETFile);
+            et_application_window_file_area_set_header_fields (window, fields);
+            et_flac_file_header_fields_free (fields);
             break;
 #endif
         case MPC_FILE:
-            gtk_frame_set_label(GTK_FRAME(FileFrame),_("MusePack File"));
-            Mpc_Header_Display_File_Info_To_UI(cur_filename,ETFile->ETFileInfo);
+            fields = et_mpc_header_display_file_info_to_ui (ETFile);
+            et_application_window_file_area_set_header_fields (window, fields);
+            et_mpc_file_header_fields_free (fields);
             break;
         case MAC_FILE:
-            gtk_frame_set_label(GTK_FRAME(FileFrame),_("Monkey's Audio File"));
-            Mac_Header_Display_File_Info_To_UI(cur_filename,ETFile->ETFileInfo);
+            fields = et_mac_header_display_file_info_to_ui (ETFile);
+            et_application_window_file_area_set_header_fields (window, fields);
+            et_mac_file_header_fields_free (fields);
             break;
 #ifdef ENABLE_MP4
         case MP4_FILE:
-            gtk_frame_set_label(GTK_FRAME(FileFrame),_("MP4/AAC File"));
-            Mp4_Header_Display_File_Info_To_UI(cur_filename,ETFile->ETFileInfo);
+            fields = et_mp4_header_display_file_info_to_ui (ETFile);
+            et_application_window_file_area_set_header_fields (window, fields);
+            et_mp4_file_header_fields_free (fields);
             break;
 #endif
 #ifdef ENABLE_WAVPACK
         case WAVPACK_FILE:
-            gtk_frame_set_label(GTK_FRAME(FileFrame),_("Wavpack File"));
-            Wavpack_Header_Display_File_Info_To_UI(cur_filename,ETFile->ETFileInfo);
+            fields = et_wavpack_header_display_file_info_to_ui (ETFile);
+            et_application_window_file_area_set_header_fields (window, fields);
+            et_wavpack_file_header_fields_free (fields);
             break;
 #endif
 #ifdef ENABLE_OPUS
         case OPUS_FILE:
-            gtk_frame_set_label (GTK_FRAME (FileFrame), _("Opus File"));
-            file = g_file_new_for_path (cur_filename);
-            et_opus_header_display_file_info_to_ui (file, ETFile->ETFileInfo);
-            g_object_unref (file);
+            fields = et_opus_header_display_file_info_to_ui (ETFile);
+            et_application_window_file_area_set_header_fields (window, fields);
+            et_opus_file_header_fields_free (fields);
             break;
 #endif
         case UNKNOWN_FILE:
         default:
-            gtk_frame_set_label(GTK_FRAME(FileFrame),_("File"));
-            // Default displaying
-            ET_Display_File_Info_To_UI(ETFile->ETFileInfo);
-            Log_Print(LOG_ERROR,"ETFileInfo: Undefined file type %d for file %s.",ETFileDescription->FileType,cur_filename_utf8);
+            /* Default displaying. */
+            fields = ET_Display_File_Info_To_UI (ETFile);
+            et_application_window_file_area_set_header_fields (window, fields);
+            et_file_header_fields_free (fields);
+            Log_Print (LOG_ERROR,
+                       "ETFileInfo: Undefined file type %d for file %s.",
+                       ETFileDescription->FileType, cur_filename_utf8);
             break;
     }
 
-    msg = g_strdup_printf(_("File: '%s'"), cur_filename_utf8);
-    Statusbar_Message(msg,FALSE);
-    g_free(msg);
+    msg = g_strdup_printf (_("File: ‘%s’"), cur_filename_utf8);
+    et_application_window_status_bar_message (window, msg, FALSE);
+    g_free (msg);
 }
 
-
-/*
- * Toggle visibility of the small status icon if filename is read-only or not found.
- * Show the position of the current file in the list, by using the index and list length.
- */
 static void
-ET_Display_File_And_List_Status_To_UI (ET_File *ETFile)
+ET_Display_Filename_To_UI (const ET_File *ETFile)
 {
-    GFile *file;
-    gchar *text;
-    gchar *cur_filename;
-    GFileInfo *info;
-    GError *error = NULL;
-
-    g_return_if_fail (ETFile != NULL);
-
-    cur_filename = ((File_Name *)((GList *)ETFile->FileNameCur)->data)->value;
-
-    file = g_file_new_for_path (cur_filename);
-
-    info = g_file_query_info (file, G_FILE_ATTRIBUTE_ACCESS_CAN_READ ","
-                              G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE,
-                              G_FILE_QUERY_INFO_NONE, NULL, &error);
-
-    /* Show/hide 'AccessStatusIcon' */
-    if (!info)
-    {
-        if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
-        {
-            /* No such file or directory. */
-            GIcon *emblem_icon;
-
-            emblem_icon = g_themed_icon_new ("emblem-unreadable");
-
-            gtk_entry_set_icon_from_gicon (GTK_ENTRY (FileEntry),
-                                           GTK_ENTRY_ICON_SECONDARY,
-                                           emblem_icon);
-            gtk_entry_set_icon_tooltip_text (GTK_ENTRY (FileEntry),
-                                             GTK_ENTRY_ICON_SECONDARY,
-                                             _("File not found"));
-            g_object_unref (emblem_icon);
-        }
-        else
-        {
-            Log_Print (LOG_ERROR, _("Cannot query file information (%s)"),
-                       error->message);
-            g_error_free (error);
-            g_object_unref (file);
-            return;
-        }
-    }
-    else
-    {
-        gboolean readable, writable;
-
-        readable = g_file_info_get_attribute_boolean (info,
-                                                      G_FILE_ATTRIBUTE_ACCESS_CAN_READ);
-        writable = g_file_info_get_attribute_boolean (info,
-                                                      G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE);
-
-        if (readable && writable)
-        {
-            /* User has all necessary permissions. */
-            gtk_entry_set_icon_from_gicon (GTK_ENTRY (FileEntry),
-                                           GTK_ENTRY_ICON_SECONDARY, NULL);
-        }
-        else if (!writable)
-        {
-            /* Read only file or permission denied. */
-            GIcon *emblem_icon;
-
-            emblem_icon = g_themed_icon_new ("emblem-readonly");
-
-            gtk_entry_set_icon_from_gicon (GTK_ENTRY (FileEntry),
-                                           GTK_ENTRY_ICON_SECONDARY,
-                                           emblem_icon);
-            gtk_entry_set_icon_tooltip_text (GTK_ENTRY (FileEntry),
-                                             GTK_ENTRY_ICON_SECONDARY,
-                                             _("Read-only file"));
-            g_object_unref (emblem_icon);
-
-        }
-        else
-        {
-            /* Otherwise unreadable. */
-            GIcon *emblem_icon;
-
-            emblem_icon = g_themed_icon_new ("emblem-unreadable");
-
-            gtk_entry_set_icon_from_gicon (GTK_ENTRY (FileEntry),
-                                           GTK_ENTRY_ICON_SECONDARY,
-                                           emblem_icon);
-            gtk_entry_set_icon_tooltip_text (GTK_ENTRY (FileEntry),
-                                             GTK_ENTRY_ICON_SECONDARY,
-                                             _("File not found"));
-            g_object_unref (emblem_icon);
-        }
-        g_object_unref (info);
-    }
-
-    /* Show position of current file in list */
-    text = g_strdup_printf("%d/%d:",ETFile->IndexKey,ETCore->ETFileDisplayedList_Length);
-    gtk_label_set_text(GTK_LABEL(FileIndex),text);
-    g_object_unref (file);
-    g_free(text);
-}
-
-static void
-ET_Display_Filename_To_UI (ET_File *ETFile)
-{
-    gchar *pos;
-    gchar *new_filename_utf8;
-    gchar *basename_utf8;
+    const gchar *new_filename_utf8;
     gchar *dirname_utf8;
     gchar *text;
 
@@ -2999,311 +2993,69 @@ ET_Display_Filename_To_UI (ET_File *ETFile)
     new_filename_utf8 = ((File_Name *)((GList *)ETFile->FileNameNew)->data)->value_utf8;
 
     /*
-     * Set filename into FileEntry
-     */
-    basename_utf8 = g_path_get_basename(new_filename_utf8);
-
-    // Remove the extension
-    if ((pos=g_utf8_strrchr(basename_utf8, -1, '.'))!=NULL)
-        *pos = 0;
-    gtk_entry_set_text(GTK_ENTRY(FileEntry),basename_utf8);
-    /*FIX ME : gchar *tmp = Try_To_Validate_Utf8_String(basename_utf8);
-    g_free(tmp);*/
-    g_free(basename_utf8);
-    // Justify to the left text into FileEntry
-    gtk_editable_set_position(GTK_EDITABLE(FileEntry),0);
-
-    /*
      * Set the path to the file into BrowserEntry (dirbrowser)
      */
     dirname_utf8 = g_path_get_dirname(new_filename_utf8);
-    Browser_Entry_Set_Text(dirname_utf8);
+    et_application_window_browser_entry_set_text (ET_APPLICATION_WINDOW (MainWindow),
+                                                  dirname_utf8);
 
     // And refresh the number of files in this directory
     text = g_strdup_printf(ngettext("One file","%u files",ET_Get_Number_Of_Files_In_Directory(dirname_utf8)),ET_Get_Number_Of_Files_In_Directory(dirname_utf8));
-    Browser_Label_Set_Text(text);
+    et_application_window_browser_label_set_text (ET_APPLICATION_WINDOW (MainWindow),
+                                                  text);
     g_free(dirname_utf8);
     g_free(text);
 }
 
 
 /*
- * Display all tag infos (tags fields) into entry boxes of the user interface.
- * These data have the same structure for all files.
- */
-static gboolean
-ET_Display_File_Tag_To_UI (ET_File *ETFile)
-{
-    File_Tag *FileTag = NULL;
-    //GtkTextBuffer *textbuffer;
-
-    if (!ETFile || !ETFile->FileTag)
-    {
-        // Reset all tag entries
-        Clear_Tag_Entry_Fields();
-        //Tag_Area_Set_Sensitive(FALSE);
-        return FALSE;
-    }
-
-    //Tag_Area_Set_Sensitive(TRUE); // Causes displaying problem when saving files
-
-    FileTag = (File_Tag *)(ETFile->FileTag->data);
-
-    /* Show title */
-    if (FileTag && FileTag->title)
-    {
-        gchar *tmp = Try_To_Validate_Utf8_String(FileTag->title);
-        gtk_entry_set_text(GTK_ENTRY(TitleEntry), tmp);
-        g_free(tmp);
-    }else
-        gtk_entry_set_text(GTK_ENTRY(TitleEntry),"");
-
-    /* Show artist */
-    if (FileTag && FileTag->artist)
-    {
-        gchar *tmp = Try_To_Validate_Utf8_String(FileTag->artist);
-        gtk_entry_set_text(GTK_ENTRY(ArtistEntry), tmp);
-        g_free(tmp);
-    }else
-        gtk_entry_set_text(GTK_ENTRY(ArtistEntry),"");
-
-	/* Show album artist */
-    if (FileTag && FileTag->album_artist)
-    {
-        gchar *tmp = Try_To_Validate_Utf8_String(FileTag->album_artist);
-        gtk_entry_set_text(GTK_ENTRY(AlbumArtistEntry), tmp);
-        g_free(tmp);
-    }else
-        gtk_entry_set_text(GTK_ENTRY(AlbumArtistEntry),"");
-
-    /* Show album */
-    if (FileTag && FileTag->album)
-    {
-        gchar *tmp = Try_To_Validate_Utf8_String(FileTag->album);
-        gtk_entry_set_text(GTK_ENTRY(AlbumEntry), tmp);
-        g_free(tmp);
-    }else
-        gtk_entry_set_text(GTK_ENTRY(AlbumEntry),"");
-
-    /* Show disc number and number of discs. */
-    if (FileTag && FileTag->disc_number)
-    {
-        gchar *tmp;
-
-        if (FileTag->disc_total)
-        {
-            gchar *total;
-
-            total = g_strjoin ("/", FileTag->disc_number, FileTag->disc_total,
-                               NULL);
-            tmp = Try_To_Validate_Utf8_String (total);
-            g_free (total);
-        }
-        else
-        {
-            tmp = Try_To_Validate_Utf8_String (FileTag->disc_number);
-        }
-
-        gtk_entry_set_text (GTK_ENTRY (DiscNumberEntry), tmp);
-        g_free (tmp);
-    }
-    else
-    {
-        gtk_entry_set_text (GTK_ENTRY (DiscNumberEntry), "");
-    }
-
-    /* Show year */
-    if (FileTag && FileTag->year)
-    {
-        gchar *tmp = Try_To_Validate_Utf8_String(FileTag->year);
-        gtk_entry_set_text(GTK_ENTRY(YearEntry),tmp);
-        g_free(tmp);
-    }else
-        gtk_entry_set_text(GTK_ENTRY(YearEntry),"");
-
-    /* Show track */
-    if (FileTag && FileTag->track)
-    {
-        gchar *tmp = Try_To_Validate_Utf8_String(FileTag->track);
-        gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(TrackEntryCombo))),tmp);
-        g_free(tmp);
-    }else
-        gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(TrackEntryCombo))),"");
-
-    /* Show number of tracks on the album */
-    if (FileTag && FileTag->track_total)
-    {
-        gchar *tmp = Try_To_Validate_Utf8_String(FileTag->track_total);
-        gtk_entry_set_text(GTK_ENTRY(TrackTotalEntry),tmp);
-        g_free(tmp);
-    }else
-        gtk_entry_set_text(GTK_ENTRY(TrackTotalEntry),"");
-
-    /* Show genre */
-    if (FileTag && FileTag->genre)
-    {
-        gchar *tmp = Try_To_Validate_Utf8_String(FileTag->genre);
-        gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(GenreCombo))), tmp);
-        g_free(tmp);
-    }else
-        gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(GenreCombo))),"");
-
-    /* Show comment */
-    //textbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(CommentView));
-    if (FileTag && FileTag->comment)
-    {
-        gchar *tmp = Try_To_Validate_Utf8_String(FileTag->comment);
-        //gtk_text_buffer_set_text(GTK_TEXT_BUFFER(textbuffer), FileTag->comment, -1);
-        gtk_entry_set_text(GTK_ENTRY(CommentEntry), tmp);
-        g_free(tmp);
-    }else
-        //gtk_text_buffer_set_text(GTK_TEXT_BUFFER(textbuffer), "", -1);
-        gtk_entry_set_text(GTK_ENTRY(CommentEntry),"");
-
-    /* Show composer */
-    if (FileTag && FileTag->composer)
-    {
-        gchar *tmp = Try_To_Validate_Utf8_String(FileTag->composer);
-        gtk_entry_set_text(GTK_ENTRY(ComposerEntry), tmp);
-        g_free(tmp);
-    }else
-        gtk_entry_set_text(GTK_ENTRY(ComposerEntry),"");
-
-    /* Show original artist */
-    if (FileTag && FileTag->orig_artist)
-    {
-        gchar *tmp = Try_To_Validate_Utf8_String(FileTag->orig_artist);
-        gtk_entry_set_text(GTK_ENTRY(OrigArtistEntry), tmp);
-        g_free(tmp);
-    }else
-        gtk_entry_set_text(GTK_ENTRY(OrigArtistEntry),"");
-
-    /* Show copyright */
-    if (FileTag && FileTag->copyright)
-    {
-        gchar *tmp = Try_To_Validate_Utf8_String(FileTag->copyright);
-        gtk_entry_set_text(GTK_ENTRY(CopyrightEntry), tmp);
-        g_free(tmp);
-    }else
-        gtk_entry_set_text(GTK_ENTRY(CopyrightEntry),"");
-
-    /* Show URL */
-    if (FileTag && FileTag->url)
-    {
-        gchar *tmp = Try_To_Validate_Utf8_String(FileTag->url);
-        gtk_entry_set_text(GTK_ENTRY(URLEntry), tmp);
-        g_free(tmp);
-    }else
-        gtk_entry_set_text(GTK_ENTRY(URLEntry),"");
-
-    /* Show Encoded by */
-    if (FileTag && FileTag->encoded_by)
-    {
-        gchar *tmp = Try_To_Validate_Utf8_String(FileTag->encoded_by);
-        gtk_entry_set_text(GTK_ENTRY(EncodedByEntry), tmp);
-        g_free(tmp);
-    }else
-        gtk_entry_set_text(GTK_ENTRY(EncodedByEntry),"");
-
-    /* Show picture */
-    PictureEntry_Clear();
-    if (FileTag && FileTag->picture)
-    {
-        Picture *pic = FileTag->picture;
-        guint    nbr_pic = 0;
-        GtkWidget *page;
-        gchar *string;
-
-        PictureEntry_Update(FileTag->picture, FALSE);
-
-        // Count the number of items
-        for (pic = FileTag->picture; pic != NULL; pic = pic->next)
-        {
-            nbr_pic++;
-        }
-
-        // Get page "Images" of the notebook
-        page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(TagNoteBook),1);
-        string = g_strdup_printf (_("Images (%d)"), nbr_pic);
-        // Update the notebook tab
-        gtk_notebook_set_tab_label_text(GTK_NOTEBOOK(TagNoteBook),page,string);
-        // Update the notebook menu
-        gtk_notebook_set_menu_label_text(GTK_NOTEBOOK(TagNoteBook),page,string);
-        g_free(string);
-
-    }else
-    {
-        GtkWidget *page;
-        // Get page "Images" of the notebook
-        page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(TagNoteBook),1);
-        // Update the notebook tab
-        gtk_notebook_set_tab_label_text (GTK_NOTEBOOK (TagNoteBook), page,
-                                         _("Images"));
-        // Update the notebook menu
-        gtk_notebook_set_menu_label_text (GTK_NOTEBOOK (TagNoteBook), page,
-                                          _("Images"));
-    }
-
-    return TRUE;
-}
-
-
-/*
  * "Default" way to display File Info to the user interface.
  */
-static gboolean
-ET_Display_File_Info_To_UI(ET_File_Info *ETFileInfo)
+static EtFileHeaderFields *
+ET_Display_File_Info_To_UI (const ET_File *ETFile)
 {
-    gchar *text;
+    EtFileHeaderFields *fields;
+    ET_File_Info *info;
     gchar *time  = NULL;
     gchar *time1 = NULL;
     gchar *size  = NULL;
     gchar *size1 = NULL;
 
+    info = ETFile->ETFileInfo;
+    fields = g_slice_new (EtFileHeaderFields);
+
+    fields->description = _("File");
+
     /* MPEG, Layer versions */
-    text = g_strdup_printf("%d, Layer %d",ETFileInfo->version,ETFileInfo->layer);
-    gtk_label_set_text(GTK_LABEL(VersionValueLabel),text);
-    g_free(text);
+    fields->version = g_strdup_printf ("%d, Layer %d", info->version,
+                                       info->layer);
 
     /* Bitrate */
-    text = g_strdup_printf(_("%d kb/s"),ETFileInfo->bitrate);
-    gtk_label_set_text(GTK_LABEL(BitrateValueLabel),text);
-    g_free(text);
+    fields->bitrate = g_strdup_printf (_("%d kb/s"), info->bitrate);
 
     /* Samplerate */
-    text = g_strdup_printf(_("%d Hz"),ETFileInfo->samplerate);
-    gtk_label_set_text(GTK_LABEL(SampleRateValueLabel),text);
-    g_free(text);
+    fields->samplerate = g_strdup_printf (_("%d Hz"), info->samplerate);
 
     /* Mode */
-    text = g_strdup_printf("%d",ETFileInfo->mode);
-    gtk_label_set_text(GTK_LABEL(ModeValueLabel),text);
-    g_free(text);
+    fields->mode = g_strdup_printf ("%d", info->mode);
 
     /* Size */
-    size  = g_format_size (ETFileInfo->size);
+    size = g_format_size (info->size);
     size1 = g_format_size (ETCore->ETFileDisplayedList_TotalSize);
-    text  = g_strdup_printf("%s (%s)",size,size1);
-    gtk_label_set_text(GTK_LABEL(SizeValueLabel),text);
-    g_free(size);
-    g_free(size1);
-    g_free(text);
+    fields->size = g_strdup_printf ("%s (%s)", size, size1);
+    g_free (size);
+    g_free (size1);
 
     /* Duration */
-    time  = Convert_Duration(ETFileInfo->duration);
-    time1 = Convert_Duration(ETCore->ETFileDisplayedList_TotalDuration);
-    text  = g_strdup_printf("%s (%s)",time,time1);
-    gtk_label_set_text(GTK_LABEL(DurationValueLabel),text);
-    g_free(time);
-    g_free(time1);
-    g_free(text);
+    time = Convert_Duration (info->duration);
+    time1 = Convert_Duration (ETCore->ETFileDisplayedList_TotalDuration);
+    fields->duration = g_strdup_printf ("%s (%s)", time, time1);
+    g_free (time);
+    g_free (time1);
 
-    return TRUE;
+    return fields;
 }
 
-
-
-
 /********************
  * Saving functions *
  ********************/
@@ -3315,16 +3067,14 @@ ET_Display_File_Info_To_UI(ET_File_Info *ETFileInfo)
  */
 void ET_Save_File_Data_From_UI (ET_File *ETFile)
 {
-    ET_File_Description *ETFileDescription;
+    const ET_File_Description *ETFileDescription;
     File_Name *FileName;
     File_Tag  *FileTag;
     guint      undo_key;
-    gchar     *cur_filename_utf8;
+    const gchar *cur_filename_utf8;
 
-    if (!ETFile ||
-        !ETFile->FileNameCur ||
-        !ETFile->FileNameCur->data)
-        return;
+    g_return_if_fail (ETFile != NULL && ETFile->FileNameCur != NULL
+                      && ETFile->FileNameCur->data != NULL);
 
     cur_filename_utf8 = ((File_Name *)((GList *)ETFile->FileNameCur)->data)->value_utf8;
     ETFileDescription = ETFile->ETFileDescription;
@@ -3339,13 +3089,6 @@ void ET_Save_File_Data_From_UI (ET_File *ETFile)
     FileName->key = undo_key;
     ET_Save_File_Name_From_UI(ETFile,FileName); // Used for all files!
 
-    /*
-     * Save tag data and generate undo for tag
-     */
-    FileTag = g_malloc0(sizeof(File_Tag));
-    ET_Initialize_File_Tag_Item(FileTag);
-    FileTag->key = undo_key;
-
     switch (ETFileDescription->TagType)
     {
 #ifdef ENABLE_MP3
@@ -3367,11 +3110,12 @@ void ET_Save_File_Data_From_UI (ET_File *ETFile)
         case OPUS_TAG:
 #endif
         case APE_TAG:
-            ET_Save_File_Tag_From_UI(FileTag);
-            ET_Copy_File_Tag_Item_Other_Field(ETFile,FileTag);
+            FileTag = et_application_window_tag_area_create_file_tag (ET_APPLICATION_WINDOW (MainWindow));
+            ET_Copy_File_Tag_Item_Other_Field (ETFile, FileTag);
             break;
         case UNKNOWN_TAG:
         default:
+            FileTag = ET_File_Tag_Item_New ();
             Log_Print(LOG_ERROR,"FileTag: Undefined tag type %d for file %s.",ETFileDescription->TagType,cur_filename_utf8);
             break;
     }
@@ -3383,7 +3127,8 @@ void ET_Save_File_Data_From_UI (ET_File *ETFile)
     ET_Manage_Changes_Of_File_Data(ETFile,FileName,FileTag);
 
     /* Refresh file into browser list */
-    Browser_List_Refresh_File_In_List(ETFile);
+    et_application_window_browser_refresh_file_in_list (ET_APPLICATION_WINDOW (MainWindow),
+                                                        ETFile);
 }
 
 
@@ -3396,7 +3141,7 @@ void ET_Save_File_Data_From_UI (ET_File *ETFile)
  *        encoding, not UTF-8 (it preserves file system encoding of parent directories).
  */
 static gboolean
-ET_Save_File_Name_From_UI (ET_File *ETFile, File_Name *FileName)
+ET_Save_File_Name_From_UI (const ET_File *ETFile, File_Name *FileName)
 {
     gchar *filename_new = NULL;
     gchar *dirname = NULL;
@@ -3406,8 +3151,9 @@ ET_Save_File_Name_From_UI (ET_File *ETFile, File_Name *FileName)
 
     g_return_val_if_fail (ETFile != NULL && FileName != NULL, FALSE);
 
-    filename_utf8 = gtk_entry_get_text(GTK_ENTRY(FileEntry));
-    filename = filename_from_display(filename_utf8);
+    filename_utf8 = et_application_window_file_area_get_filename (ET_APPLICATION_WINDOW (MainWindow));
+    filename = filename_from_display (filename_utf8);
+
     if (!filename)
     {
         // If translation fails...
@@ -3417,14 +3163,13 @@ ET_Save_File_Name_From_UI (ET_File *ETFile, File_Name *FileName)
                                            GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
                                            GTK_MESSAGE_ERROR,
                                            GTK_BUTTONS_CLOSE,
-                                           _("Could not convert filename '%s' into system filename encoding"),
+                                           _("Could not convert filename ‘%s’ to system filename encoding"),
                                            filename_escaped_utf8);
         gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(msgdialog),_("Try setting the environment variable G_FILENAME_ENCODING."));
         gtk_window_set_title(GTK_WINDOW(msgdialog), _("Filename translation"));
 
         gtk_dialog_run(GTK_DIALOG(msgdialog));
         gtk_widget_destroy(msgdialog);
-        g_free(filename);
         g_free(filename_escaped_utf8);
         return FALSE;
     }
@@ -3448,8 +3193,8 @@ ET_Save_File_Name_From_UI (ET_File *ETFile, File_Name *FileName)
         // Keep the 'last' filename (if a 'blank' filename was entered in the fileentry for ex)...
         filename_new = g_path_get_basename( ((File_Name *)ETFile->FileNameNew->data)->value );
     }
-    g_free(extension);
-    g_free(filename);
+    g_free (filename);
+    g_free (extension);
 
     // Check if new filename seems to be correct
     if ( !filename_new || strlen(filename_new) <= strlen(ETFile->ETFileDescription->Extension) )
@@ -3484,7 +3229,8 @@ ET_Save_File_Name_From_UI (ET_File *ETFile, File_Name *FileName)
  * data from the UI.
  */
 static gboolean
-ET_Save_File_Name_Internal (ET_File *ETFile, File_Name *FileName)
+ET_Save_File_Name_Internal (const ET_File *ETFile,
+                            File_Name *FileName)
 {
     gchar *filename_new = NULL;
     gchar *dirname = NULL;
@@ -3543,260 +3289,8 @@ ET_Save_File_Name_Internal (ET_File *ETFile, File_Name *FileName)
     }
 }
 
-
 /*
- * Load values, entered into entries of the UI, into a File_Tag structure which had been newly created.
- */
-static gboolean
-ET_Save_File_Tag_From_UI (File_Tag *FileTag)
-{
-    gchar *buffer = NULL;
-    //GtkTextBuffer *textbuffer;
-    //GtkTextIter    start_iter;
-    //GtkTextIter    end_iter;
-
-    g_return_val_if_fail (FileTag != NULL, FALSE);
-
-    /* Title */
-    buffer = g_strdup(gtk_entry_get_text(GTK_ENTRY(TitleEntry)));
-    g_strstrip (buffer);
-
-    if ( g_utf8_strlen(buffer, -1) > 0 )
-        FileTag->title = buffer;
-    else
-    {
-        FileTag->title = NULL;
-        g_free(buffer);
-    }
-
-    /* Artist */
-    buffer = g_strdup(gtk_entry_get_text(GTK_ENTRY(ArtistEntry)));
-    g_strstrip (buffer);
-
-    if ( g_utf8_strlen(buffer, -1) > 0 )
-        FileTag->artist = buffer;
-    else
-    {
-        FileTag->artist = NULL;
-        g_free(buffer);
-    }
-
-	/* Album Artist */
-    buffer = g_strdup(gtk_entry_get_text(GTK_ENTRY(AlbumArtistEntry)));
-    g_strstrip (buffer);
-
-    if ( g_utf8_strlen(buffer, -1) > 0 )
-        FileTag->album_artist = buffer;
-    else
-    {
-        FileTag->album_artist = NULL;
-        g_free(buffer);
-    }
-
-    /* Album */
-    buffer = g_strdup(gtk_entry_get_text(GTK_ENTRY(AlbumEntry)));
-    g_strstrip (buffer);
-
-    if ( g_utf8_strlen(buffer, -1) > 0 )
-        FileTag->album = buffer;
-    else
-    {
-        FileTag->album = NULL;
-        g_free(buffer);
-    }
-
-    /* Disc number and total number of discs. */
-    buffer = g_strdup (gtk_entry_get_text (GTK_ENTRY (DiscNumberEntry)));
-    g_strstrip (buffer);
-
-    if (g_utf8_strlen (buffer, -1) > 0)
-    {
-        gchar *separator;
-
-        separator = g_utf8_strchr (buffer, -1, '/');
-
-        if (separator != NULL && g_utf8_strlen (separator + 1, -1) > 0)
-        {
-            /* Copy before the separator for the disc number, beyond the
-             * separator for the total number of discs. */
-            FileTag->disc_number = g_strndup (buffer, separator - buffer);
-            FileTag->disc_total = g_strdup (separator + 1);
-            g_free (buffer);
-        }
-        else
-        {
-            FileTag->disc_number = buffer;
-            FileTag->disc_total = NULL;
-        }
-    }
-    else
-    {
-        FileTag->disc_number = NULL;
-        FileTag->disc_total = NULL;
-        g_free (buffer);
-    }
-
-    /* Year */
-    buffer = g_strdup(gtk_entry_get_text(GTK_ENTRY(YearEntry)));
-    g_strstrip (buffer);
-
-    if ( g_utf8_strlen(buffer, -1) > 0 )
-        FileTag->year = buffer;
-    else
-    {
-        FileTag->year = NULL;
-        g_free(buffer);
-    }
-
-    /* Track */
-    buffer = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(TrackEntryCombo)))));
-    g_strstrip (buffer);
-
-    if ( g_utf8_strlen(buffer, -1) > 0  )
-    {
-        FileTag->track = et_track_number_to_string (atoi (buffer));
-        g_free (buffer);
-    } else
-    {
-        FileTag->track = NULL;
-        g_free(buffer);
-    }
-
-    /* Track Total */
-    buffer = g_strdup(gtk_entry_get_text(GTK_ENTRY(TrackTotalEntry)));
-    g_strstrip (buffer);
-
-    if ( g_utf8_strlen(buffer, -1) > 0  )
-    {
-        FileTag->track_total = et_track_number_to_string (atoi (buffer));
-        g_free (buffer);
-    } else
-    {
-        FileTag->track_total = NULL;
-        g_free(buffer);
-    }
-
-    /* Genre */
-    buffer = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(GenreCombo)))));
-    g_strstrip (buffer);
-
-    if ( g_utf8_strlen(buffer, -1) > 0 )
-        FileTag->genre = buffer;
-    else
-    {
-        FileTag->genre = NULL;
-        g_free(buffer);
-    }
-
-    /* Comment */
-    //textbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(CommentView));
-    //gtk_text_buffer_get_bounds(GTK_TEXT_BUFFER(textbuffer),&start_iter,&end_iter);
-    //buffer = gtk_text_buffer_get_text(GTK_TEXT_BUFFER(textbuffer),&start_iter,&end_iter,TRUE);
-    buffer = g_strdup(gtk_entry_get_text(GTK_ENTRY(CommentEntry)));
-    g_strstrip (buffer);
-
-    if ( g_utf8_strlen(buffer, -1) > 0 )
-        FileTag->comment = buffer;
-    else
-    {
-        FileTag->comment = NULL;
-        g_free(buffer);
-    }
-
-    /* Composer */
-    buffer = g_strdup(gtk_entry_get_text(GTK_ENTRY(ComposerEntry)));
-    g_strstrip (buffer);
-
-    if ( g_utf8_strlen(buffer, -1) > 0 )
-        FileTag->composer = buffer;
-    else
-    {
-        FileTag->composer = NULL;
-        g_free(buffer);
-    }
-
-    /* Original Artist */
-    buffer = g_strdup(gtk_entry_get_text(GTK_ENTRY(OrigArtistEntry)));
-    g_strstrip (buffer);
-
-    if ( g_utf8_strlen(buffer, -1) > 0 )
-        FileTag->orig_artist = buffer;
-    else
-    {
-        FileTag->orig_artist = NULL;
-        g_free(buffer);
-    }
-
-    /* Copyright */
-    buffer = g_strdup(gtk_entry_get_text(GTK_ENTRY(CopyrightEntry)));
-    g_strstrip (buffer);
-
-    if ( g_utf8_strlen(buffer, -1) > 0 )
-        FileTag->copyright = buffer;
-    else
-    {
-        FileTag->copyright = NULL;
-        g_free(buffer);
-    }
-
-    /* URL */
-    buffer = g_strdup(gtk_entry_get_text(GTK_ENTRY(URLEntry)));
-    g_strstrip (buffer);
-
-    if ( g_utf8_strlen(buffer, -1) > 0 )
-        FileTag->url = buffer;
-    else
-    {
-        FileTag->url = NULL;
-        g_free(buffer);
-    }
-
-    /* Encoded by */
-    buffer = g_strdup(gtk_entry_get_text(GTK_ENTRY(EncodedByEntry)));
-    g_strstrip (buffer);
-
-    if ( g_utf8_strlen(buffer, -1) > 0 )
-        FileTag->encoded_by = buffer;
-    else
-    {
-        FileTag->encoded_by = NULL;
-        g_free(buffer);
-    }
-
-    /* Picture */
-    {
-        Picture *pic, *prev_pic = NULL;
-        GtkTreeModel *model;
-        GtkTreeIter iter;
-
-        if (FileTag->picture)
-        {
-            Picture_Free(FileTag->picture);
-            FileTag->picture = NULL;
-        }
-
-        model = gtk_tree_view_get_model(GTK_TREE_VIEW(PictureEntryView));
-        if (gtk_tree_model_get_iter_first(model, &iter))
-        {
-            do
-            {
-                gtk_tree_model_get(model, &iter, PICTURE_COLUMN_DATA, &pic,-1);
-                pic = Picture_Copy_One(pic);
-                if (!FileTag->picture)
-                    FileTag->picture = pic;
-                else
-                    prev_pic->next = pic;
-                prev_pic = pic;
-            } while (gtk_tree_model_iter_next(model, &iter));
-        }
-    }
-
-    return TRUE;
-}
-
-
-/*
- * Do the same thing of ET_Save_File_Tag_From_UI without getting the data from the UI.
+ * Do the same thing of et_tag_area_create_file_tag without getting the data from the UI.
  */
 static gboolean
 ET_Save_File_Tag_Internal (ET_File *ETFile, File_Tag *FileTag)
@@ -4014,9 +3508,9 @@ ET_Save_File_Tag_Internal (ET_File *ETFile, File_Tag *FileTag)
 gboolean
 ET_Save_File_Tag_To_HD (ET_File *ETFile, GError **error)
 {
-    ET_File_Description *ETFileDescription;
-    gchar *cur_filename;
-    gchar *cur_filename_utf8;
+    const ET_File_Description *ETFileDescription;
+    const gchar *cur_filename;
+    const gchar *cur_filename_utf8;
     gboolean state;
     GFile *file;
     GFileInfo *fileinfo;
@@ -4024,7 +3518,7 @@ ET_Save_File_Tag_To_HD (ET_File *ETFile, GError **error)
     g_return_val_if_fail (ETFile != NULL, FALSE);
     g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
-    cur_filename      = ((File_Name *)(ETFile->FileNameCur)->data)->value;
+    cur_filename = ((File_Name *)(ETFile->FileNameCur)->data)->value;
     cur_filename_utf8 = ((File_Name *)(ETFile->FileNameCur)->data)->value_utf8;
 
     ETFileDescription = ETFile->ETFileDescription;
@@ -4038,7 +3532,7 @@ ET_Save_File_Tag_To_HD (ET_File *ETFile, GError **error)
     {
 #ifdef ENABLE_MP3
         case ID3_TAG:
-            state = Id3tag_Write_File_Tag(ETFile);
+            state = id3tag_write_file_tag (ETFile, error);
             break;
 #endif
 #ifdef ENABLE_OGG
@@ -4048,20 +3542,20 @@ ET_Save_File_Tag_To_HD (ET_File *ETFile, GError **error)
 #endif
 #ifdef ENABLE_FLAC
         case FLAC_TAG:
-            state = Flac_Tag_Write_File_Tag(ETFile);
+            state = flac_tag_write_file_tag (ETFile, error);
             break;
 #endif
         case APE_TAG:
-            state = Ape_Tag_Write_File_Tag(ETFile);
+            state = ape_tag_write_file_tag (ETFile, error);
             break;
 #ifdef ENABLE_MP4
         case MP4_TAG:
-            state = Mp4tag_Write_File_Tag(ETFile);
+            state = mp4tag_write_file_tag (ETFile, error);
             break;
 #endif
 #ifdef ENABLE_WAVPACK
         case WAVPACK_TAG:
-            state = Wavpack_Tag_Write_File_Tag(ETFile);
+            state = wavpack_tag_write_file_tag (ETFile, error);
             break;
 #endif
 #ifdef ENABLE_OPUS
@@ -4080,7 +3574,8 @@ ET_Save_File_Tag_To_HD (ET_File *ETFile, GError **error)
     /* Update properties for the file. */
     if (fileinfo)
     {
-        if (PRESERVE_MODIFICATION_TIME)
+        if (g_settings_get_boolean (MainSettings,
+                                    "file-preserve-modification-time"))
         {
             g_file_set_attributes_from_info (file, fileinfo,
                                              G_FILE_QUERY_INFO_NONE,
@@ -4108,10 +3603,13 @@ ET_Save_File_Tag_To_HD (ET_File *ETFile, GError **error)
     if (state==TRUE)
     {
 
-        // Update date and time of the parent directory of the file after changing the tag
-        // value (ex: needed for Amarok for refreshing). Note that when renaming a file the
-        // parent directory is automatically updated.
-        if (UPDATE_PARENT_DIRECTORY_MODIFICATION_TIME)
+        /* Update date and time of the parent directory of the file after
+         * changing the tag value (ex: needed for Amarok for refreshing). Note
+         * that when renaming a file the parent directory is automatically
+         * updated.
+         */
+        if (g_settings_get_boolean (MainSettings,
+                                    "file-update-parent-modification-time"))
         {
             gchar *path = g_path_get_dirname (cur_filename);
             utime (path, NULL);
@@ -4123,13 +3621,7 @@ ET_Save_File_Tag_To_HD (ET_File *ETFile, GError **error)
     }
     else
     {
-        if (*error == NULL)
-        {
-            g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN,
-                         _("Error writing tag type %d to file %s (%s)"),
-                         ETFileDescription->TagType, cur_filename_utf8,
-                         g_strerror (EIO));
-        }
+        g_assert (error == NULL || *error != NULL);
 
         return FALSE;
     }
@@ -4139,7 +3631,9 @@ ET_Save_File_Tag_To_HD (ET_File *ETFile, GError **error)
  * Function used to update path of filenames into list after renaming a parent directory
  * (for ex: "/mp3/old_path/file.mp3" to "/mp3/new_path/file.mp3"
  */
-void ET_Update_Directory_Name_Into_File_List (gchar* last_path, gchar *new_path)
+void
+ET_Update_Directory_Name_Into_File_List (const gchar *last_path,
+                                         const gchar *new_path)
 {
     GList *filelist;
     ET_File *file;
@@ -4260,7 +3754,8 @@ gboolean ET_Manage_Changes_Of_File_Data (ET_File *ETFile, File_Name *FileName, F
  *  - else returns FALSE
  */
 static gboolean
-ET_Detect_Changes_Of_File_Name (File_Name *FileName1, File_Name *FileName2)
+ET_Detect_Changes_Of_File_Name (const File_Name *FileName1,
+                                const File_Name *FileName2)
 {
     const gchar *filename1_ck;
     const gchar *filename2_ck;
@@ -4295,10 +3790,12 @@ ET_Detect_Changes_Of_File_Name (File_Name *FileName1, File_Name *FileName2)
  * Notes:
  *  - if field is '' or NULL => will be removed
  */
-gboolean ET_Detect_Changes_Of_File_Tag (File_Tag *FileTag1, File_Tag *FileTag2)
+gboolean
+ET_Detect_Changes_Of_File_Tag (const File_Tag *FileTag1,
+                               const File_Tag *FileTag2)
 {
-    Picture *pic1;
-    Picture *pic2;
+    const Picture *pic1;
+    const Picture *pic2;
 
     g_return_val_if_fail (FileTag1 != NULL && FileTag2 != NULL, FALSE);
 
@@ -4569,7 +4066,8 @@ gboolean ET_Undo_File_Data (ET_File *ETFile)
 /*
  * Returns TRUE if file contains undo data (filename or tag)
  */
-gboolean ET_File_Data_Has_Undo_Data (ET_File *ETFile)
+gboolean
+ET_File_Data_Has_Undo_Data (const ET_File *ETFile)
 {
     gboolean has_filename_undo_data = FALSE;
     gboolean has_filetag_undo_data  = FALSE;
@@ -4629,7 +4127,8 @@ gboolean ET_Redo_File_Data (ET_File *ETFile)
 /*
  * Returns TRUE if file contains redo data (filename or tag)
  */
-gboolean ET_File_Data_Has_Redo_Data (ET_File *ETFile)
+gboolean
+ET_File_Data_Has_Redo_Data (const ET_File *ETFile)
 {
     gboolean has_filename_redo_data = FALSE;
     gboolean has_filetag_redo_data  = FALSE;
@@ -4650,7 +4149,7 @@ gboolean ET_File_Data_Has_Redo_Data (ET_File *ETFile)
 ET_File *ET_Undo_History_File_Data (void)
 {
     ET_File *ETFile;
-    ET_History_File *ETHistoryFile;
+    const ET_History_File *ETHistoryFile;
 
     g_return_val_if_fail (ETCore->ETHistoryFileList != NULL ||
                           ET_History_File_List_Has_Undo_Data (), NULL);
@@ -4723,7 +4222,8 @@ gboolean ET_History_File_List_Has_Redo_Data (void)
  * Returns TRUE if the file has been saved.
  * Returns FALSE if some changes haven't been saved.
  */
-gboolean ET_Check_If_File_Is_Saved (ET_File *ETFile)
+gboolean
+ET_Check_If_File_Is_Saved (const ET_File *ETFile)
 {
     File_Tag  *FileTag     = NULL;
     File_Name *FileNameNew = NULL;
@@ -4817,7 +4317,7 @@ void ET_Mark_File_Name_As_Saved (ET_File *ETFile)
 
 /*
  * et_core_read_file_info:
- * @filename: (type filename): a file from which to read information
+ * @file: a file from which to read information
  * @ETFileInfo: (out caller-allocates): a file information structure
  * @error: a #GError to provide information on erros, or %NULL to ignore
  *
@@ -4827,23 +4327,21 @@ void ET_Mark_File_Name_As_Saved (ET_File *ETFile)
  * Returns: %TRUE on success, %FALSE otherwise
  */
 static gboolean
-et_core_read_file_info (const gchar *filename, ET_File_Info *ETFileInfo,
+et_core_read_file_info (GFile *file,
+                        ET_File_Info *ETFileInfo,
                         GError **error)
 {
-    GFile *file;
     GFileInfo *info;
 
     g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-    g_return_val_if_fail (filename != NULL && ETFileInfo != NULL, FALSE);
+    g_return_val_if_fail (file != NULL && ETFileInfo != NULL, FALSE);
 
-    file = g_file_new_for_path (filename);
     info = g_file_query_info (file, G_FILE_ATTRIBUTE_STANDARD_SIZE,
                               G_FILE_QUERY_INFO_NONE, NULL, error);
 
     if (!info)
     {
         g_assert (error == NULL || *error != NULL);
-        g_object_unref (file);
         return FALSE;
     }
 
@@ -4856,7 +4354,7 @@ et_core_read_file_info (const gchar *filename, ET_File_Info *ETFileInfo,
 
     g_assert (error == NULL || *error == NULL);
     g_object_unref (info);
-    g_object_unref (file);
+
     return TRUE;
 }
 
@@ -4871,7 +4369,9 @@ et_core_read_file_info (const gchar *filename, ET_File_Info *ETFileInfo,
  *   - ogg filename musn't exceed 255-6 characters as we use mkstemp
  */
 #if 1
-gchar *ET_File_Name_Generate (ET_File *ETFile, gchar *new_file_name_utf8)
+gchar *
+ET_File_Name_Generate (const ET_File *ETFile,
+                       const gchar *new_file_name_utf8)
 {
     gchar *dirname_utf8;
 
@@ -4957,18 +4457,25 @@ gchar *ET_File_Name_Generate (ET_File *ETFile, gchar *new_file_name_utf8)
 #endif
 
 
+/* Convert filename extension (lower/upper/no change). */
 static gchar *
-ET_File_Name_Format_Extension (ET_File *ETFile)
+ET_File_Name_Format_Extension (const ET_File *ETFile)
 {
-    // Convert filename extension (lower/upper/no change)
-    if (FILENAME_EXTENSION_LOWER_CASE)
-        return g_utf8_strdown(ETFile->ETFileDescription->Extension,-1);
+    EtFilenameExtensionMode mode;
 
-    else if (FILENAME_EXTENSION_UPPER_CASE)
-        return g_utf8_strup(ETFile->ETFileDescription->Extension,-1);
+    mode = g_settings_get_enum (MainSettings, "rename-extension-mode");
 
-    else // FILENAME_EXTENSION_NO_CHANGE
-        return g_strdup(ETFile->ETFileExtension);
+    switch (mode)
+    {
+        /* FIXME: Should use filename encoding, not UTF-8! */
+        case ET_FILENAME_EXTENSION_LOWER_CASE:
+            return g_utf8_strdown (ETFile->ETFileDescription->Extension, -1);
+        case ET_FILENAME_EXTENSION_UPPER_CASE:
+            return g_utf8_strup (ETFile->ETFileDescription->Extension, -1);
+        case ET_FILENAME_EXTENSION_NO_CHANGE:
+        default:
+            return g_strdup (ETFile->ETFileExtension);
+    };
 }
 
 
@@ -4995,8 +4502,9 @@ gboolean ET_File_Name_Convert_Character (gchar *filename_utf8)
         *character = '-';
 #endif /* G_OS_WIN32 */
 
-    // Convert other illegal characters on FAT32/16 filesystems and ISO9660 and Joliet (CD-ROM filesystems)
-    if (REPLACE_ILLEGAL_CHARACTERS_IN_FILENAME)
+    /* Convert other illegal characters on FAT32/16 filesystems and ISO9660 and
+     * Joliet (CD-ROM filesystems). */
+    if (g_settings_get_boolean (MainSettings, "rename-replace-illegal-chars"))
     {
         // Commented as we display unicode values as "\351" for "é"
         //while ( (character=g_utf8_strchr(filename_utf8, -1, '\\'))!=NULL )
@@ -5054,24 +4562,32 @@ ET_Get_Number_Of_Files_In_Directory (const gchar *path_utf8)
  */
 static void
 set_sort_order_for_column_id (gint column_id, GtkTreeViewColumn *column,
-                              ET_Sorting_Type sort_type)
+                              EtSortMode sort_type)
 {
+    EtApplicationWindow *window;
+    EtSortMode current_mode;
+
+    window = ET_APPLICATION_WINDOW (MainWindow);
+
     /* Removing the sort indicator for the currently selected treeview
      * column. */
-    if (SORTING_FILE_MODE < SORTING_BY_ASCENDING_CREATION_DATE)
+    current_mode = g_settings_get_enum (MainSettings, "sort-mode");
+
+    if (current_mode < ET_SORT_MODE_ASCENDING_CREATION_DATE)
     {
-        gtk_tree_view_column_set_sort_indicator (get_column_for_column_id (SORTING_FILE_MODE / 2),
+        gtk_tree_view_column_set_sort_indicator (et_application_window_browser_get_column_for_column_id (window, current_mode / 2),
                                                  FALSE);
     }
 
-    if (sort_type < SORTING_BY_ASCENDING_CREATION_DATE)
+    if (sort_type < ET_SORT_MODE_ASCENDING_CREATION_DATE)
     {
-        gtk_tree_view_column_clicked (get_column_for_column_id (column_id));
+        gtk_tree_view_column_clicked (et_application_window_browser_get_column_for_column_id (window, column_id));
 
         if (sort_type % 2 == 0)
         {
             /* GTK_SORT_ASCENDING */
-            if (get_sort_order_for_column_id (column_id) == GTK_SORT_DESCENDING)
+            if (et_application_window_browser_get_sort_order_for_column_id (window, column_id)
+                == GTK_SORT_DESCENDING)
             {
                 gtk_tree_view_column_set_sort_order (column,
                                                      GTK_SORT_ASCENDING);
@@ -5080,7 +4596,8 @@ set_sort_order_for_column_id (gint column_id, GtkTreeViewColumn *column,
         else
         {
             /* GTK_SORT_DESCENDING */
-            if (get_sort_order_for_column_id (column_id) == GTK_SORT_ASCENDING)
+            if (et_application_window_browser_get_sort_order_for_column_id (window, column_id)
+                == GTK_SORT_ASCENDING)
             {
                 gtk_tree_view_column_set_sort_order (column,
                                                      GTK_SORT_DESCENDING);
diff --git a/src/et_core.h b/src/et_core.h
index ea00217..3feaecb 100644
--- a/src/et_core.h
+++ b/src/et_core.h
@@ -1,96 +1,38 @@
-/* et_core.h - 2001/10/21 */
-/*
- *  EasyTAG - Tag editor for MP3 and Ogg Vorbis files
- *  Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
+/* EasyTAG - Tag editor for audio files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ * Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
  *
- *  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
- *  (at your option) any later version.
+ * 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
+ * (at your option) any later version.
  *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
  *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
+#ifndef ET_CORE_H_
+#define ET_CORE_H_
 
-#ifndef __ET_CORE_H__
-#define __ET_CORE_H__
+#include "config.h" /* For definition of ENABLE_OGG and so on. */
 
+#include "setting.h"
 
 #include <glib.h>
 #include <gdk/gdk.h>
-#include <config.h> // For definition of ENABLE_OGG, ...
 
 G_BEGIN_DECLS
 
 /*
  * Colors Used (see declaration into et_core.c)
  */
-extern GdkColor LIGHT_BLUE;
-extern GdkColor RED;
-extern GdkColor LIGHT_RED;
-extern GdkColor GREY;
-extern GdkColor LIGHT_GREY;
-extern GdkColor YELLOW;
-extern GdkColor BLACK;
-
-
-/*
- * Types of sorting (discontinuous value to avoid separators in SortingFileOptionMenu).
- */
-typedef enum
-{
-    SORTING_BY_ASCENDING_FILENAME,
-    SORTING_BY_DESCENDING_FILENAME,
-    SORTING_BY_ASCENDING_TITLE,
-    SORTING_BY_DESCENDING_TITLE,
-    SORTING_BY_ASCENDING_ARTIST,
-    SORTING_BY_DESCENDING_ARTIST,
-    SORTING_BY_ASCENDING_ALBUM_ARTIST,
-    SORTING_BY_DESCENDING_ALBUM_ARTIST,
-    SORTING_BY_ASCENDING_ALBUM,
-    SORTING_BY_DESCENDING_ALBUM,
-    SORTING_BY_ASCENDING_YEAR,
-    SORTING_BY_DESCENDING_YEAR,
-    SORTING_BY_ASCENDING_DISC_NUMBER,
-    SORTING_BY_DESCENDING_DISC_NUMBER,
-    SORTING_BY_ASCENDING_TRACK_NUMBER,
-    SORTING_BY_DESCENDING_TRACK_NUMBER,
-    SORTING_BY_ASCENDING_GENRE,
-    SORTING_BY_DESCENDING_GENRE,
-    SORTING_BY_ASCENDING_COMMENT,
-    SORTING_BY_DESCENDING_COMMENT,
-    SORTING_BY_ASCENDING_COMPOSER,
-    SORTING_BY_DESCENDING_COMPOSER,
-    SORTING_BY_ASCENDING_ORIG_ARTIST,
-    SORTING_BY_DESCENDING_ORIG_ARTIST,
-    SORTING_BY_ASCENDING_COPYRIGHT,
-    SORTING_BY_DESCENDING_COPYRIGHT,
-    SORTING_BY_ASCENDING_URL,
-    SORTING_BY_DESCENDING_URL,
-    SORTING_BY_ASCENDING_ENCODED_BY,
-    SORTING_BY_DESCENDING_ENCODED_BY,
-    SORTING_BY_ASCENDING_CREATION_DATE,
-    SORTING_BY_DESCENDING_CREATION_DATE,
-    SORTING_BY_ASCENDING_FILE_TYPE,
-    SORTING_BY_DESCENDING_FILE_TYPE,
-    SORTING_BY_ASCENDING_FILE_SIZE,
-    SORTING_BY_DESCENDING_FILE_SIZE,
-    SORTING_BY_ASCENDING_FILE_DURATION,
-    SORTING_BY_DESCENDING_FILE_DURATION,
-    SORTING_BY_ASCENDING_FILE_BITRATE,
-    SORTING_BY_DESCENDING_FILE_BITRATE,
-    SORTING_BY_ASCENDING_FILE_SAMPLERATE,
-    SORTING_BY_DESCENDING_FILE_SAMPLERATE,
-    SORTING_UNKNOWN
-} ET_Sorting_Type;
-
+extern GdkRGBA RED;
 
 /*
  * Types of files
@@ -208,6 +150,34 @@ struct _ET_File_Info
     gchar *mpc_version;         /* MPC data : encoder version  (also for Speex) */
 };
 
+/*
+ * EtFileHeaderFields:
+ * @description: a description of the file type, such as MP3 File
+ * @version_label: the label for the encoder version, such as MPEG
+ * @version: the encoder version (such as 2, Layer III)
+ * @bitrate: the bitrate of the file (not the bit depth of the samples)
+ * @samplerate: the sample rate of the primary audio track, generally in Hz
+ * @mode_label: the label for the audio mode, for example Mode
+ * @mode: the audio mode (stereo, mono, and so on)
+ * @size: the size of the audio file
+ * @duration: the length of the primary audio track
+ *
+ * UI-visible strings, populated by the tagging support code to be displayed in
+ * the EtFileArea.
+ */
+typedef struct
+{
+    /*< public >*/
+    gchar *description;
+    gchar *version_label;
+    gchar *version;
+    gchar *bitrate;
+    gchar *samplerate;
+    gchar *mode_label;
+    gchar *mode;
+    gchar *size;
+    gchar *duration;
+} EtFileHeaderFields;
 
 /*
  * Structure for descripting supported files
@@ -242,7 +212,7 @@ struct _ET_File
 
     time_t FileModificationTime;            /* Save modification time of the file */
 
-    ET_File_Description *ETFileDescription;
+    const ET_File_Description *ETFileDescription;
     gchar               *ETFileExtension;   /* Real extension of the file (keeping the case) (should be placed in ETFileDescription?) */
     ET_File_Info        *ETFileInfo;        /* Header infos: bitrate, duration, ... */
 
@@ -318,26 +288,26 @@ gboolean ET_Remove_File_From_File_List   (ET_File *ETFile);
 gboolean ET_Create_Artist_Album_File_List      (void);
 gboolean ET_Remove_File_From_File_List         (ET_File *ETFile);
 
-gboolean ET_Check_If_File_Is_Saved       (ET_File *ETFile);
+gboolean ET_Check_If_File_Is_Saved (const ET_File *ETFile);
 gboolean ET_Check_If_All_Files_Are_Saved (void);
 
 ET_File      *ET_File_Item_New       (void);
 File_Name    *ET_File_Name_Item_New  (void);
 File_Tag     *ET_File_Tag_Item_New   (void);
 gboolean      ET_Free_File_Tag_Item  (File_Tag *FileTag);
-gboolean      ET_Free_File_List_Item (ET_File *ETFile);
+void      ET_Free_File_List_Item (ET_File *ETFile);
 
-gboolean ET_Copy_File_Tag_Item          (ET_File *ETFile, File_Tag *FileTag);
+gboolean ET_Copy_File_Tag_Item (const ET_File *ETFile, File_Tag *FileTag);
 gboolean ET_Set_Field_File_Name_Item    (gchar **FileNameField, gchar *value);
-gboolean ET_Set_Filename_File_Name_Item (File_Name *FileName, gchar *filename_utf8, gchar *filename);
+gboolean ET_Set_Filename_File_Name_Item (File_Name *FileName, const gchar *filename_utf8, const gchar *filename);
 gboolean ET_Set_Field_File_Tag_Item (gchar **FileTagField, const gchar *value);
-gboolean ET_Set_Field_File_Tag_Picture  (Picture **FileTagField, Picture *pic);
+gboolean ET_Set_Field_File_Tag_Picture (Picture **FileTagField, const Picture *pic);
 
 GList   *ET_Displayed_File_List_First       (void);
 GList   *ET_Displayed_File_List_Previous    (void);
 GList   *ET_Displayed_File_List_Next        (void);
 GList   *ET_Displayed_File_List_Last        (void);
-GList   *ET_Displayed_File_List_By_Etfile   (ET_File *ETFile);
+GList *ET_Displayed_File_List_By_Etfile (const ET_File *ETFile);
 
 gboolean ET_Set_Displayed_File_List         (GList *ETFileList);
 
@@ -347,8 +317,8 @@ gboolean ET_Save_File_Tag_To_HD (ET_File *ETFile, GError **error);
 
 gboolean ET_Undo_File_Data          (ET_File *ETFile);
 gboolean ET_Redo_File_Data          (ET_File *ETFile);
-gboolean ET_File_Data_Has_Undo_Data (ET_File *ETFile);
-gboolean ET_File_Data_Has_Redo_Data (ET_File *ETFile);
+gboolean ET_File_Data_Has_Undo_Data (const ET_File *ETFile);
+gboolean ET_File_Data_Has_Redo_Data (const ET_File *ETFile);
 
 ET_File *ET_Undo_History_File_Data          (void);
 ET_File *ET_Redo_History_File_Data          (void);
@@ -357,61 +327,61 @@ gboolean ET_History_File_List_Has_Redo_Data (void);
 
 gboolean ET_Manage_Changes_Of_File_Data          (ET_File *ETFile, File_Name *FileName, File_Tag *FileTag);
 void     ET_Mark_File_Name_As_Saved              (ET_File *ETFile);
-void     ET_Update_Directory_Name_Into_File_List (gchar* last_path, gchar *new_path);
+void ET_Update_Directory_Name_Into_File_List (const gchar *last_path, const gchar *new_path);
 gboolean ET_File_Name_Convert_Character          (gchar *filename_utf8);
-gchar   *ET_File_Name_Generate                   (ET_File *ETFile, gchar *new_file_name);
+gchar *ET_File_Name_Generate (const ET_File *ETFile, const gchar *new_file_name);
 guint ET_Get_Number_Of_Files_In_Directory (const gchar *path_utf8);
 
-gboolean ET_Detect_Changes_Of_File_Tag          (File_Tag  *FileTag1,  File_Tag  *FileTag2);
-
-GList *ET_Sort_File_List                                  (GList *ETFileList, ET_Sorting_Type Sorting_Type);
-void   ET_Sort_Displayed_File_List_And_Update_UI          (ET_Sorting_Type Sorting_Type);
-gint ET_Comp_Func_Sort_File_By_Ascending_Filename         (ET_File *ETFile1, ET_File *ETFile2);
-gint ET_Comp_Func_Sort_File_By_Descending_Filename        (ET_File *ETFile1, ET_File *ETFile2);
-gint ET_Comp_Func_Sort_File_By_Ascending_Creation_Date    (ET_File *ETFile1, ET_File *ETFile2);
-gint ET_Comp_Func_Sort_File_By_Descending_Creation_Date   (ET_File *ETFile1, ET_File *ETFile2);
-gint et_comp_func_sort_file_by_ascending_disc_number (ET_File *ETFile1,
-                                                      ET_File *ETFile2);
-gint et_comp_func_sort_file_by_descending_disc_number (ET_File *ETFile1,
-                                                       ET_File *ETFile2);
-gint ET_Comp_Func_Sort_File_By_Ascending_Track_Number     (ET_File *ETFile1, ET_File *ETFile2);
-gint ET_Comp_Func_Sort_File_By_Descending_Track_Number    (ET_File *ETFile1, ET_File *ETFile2);
-gint ET_Comp_Func_Sort_File_By_Ascending_Title            (ET_File *ETFile1, ET_File *ETFile2);
-gint ET_Comp_Func_Sort_File_By_Descending_Title           (ET_File *ETFile1, ET_File *ETFile2);
-gint ET_Comp_Func_Sort_File_By_Ascending_Artist           (ET_File *ETFile1, ET_File *ETFile2);
-gint ET_Comp_Func_Sort_File_By_Descending_Artist          (ET_File *ETFile1, ET_File *ETFile2);
-gint ET_Comp_Func_Sort_File_By_Ascending_Album_Artist     (ET_File *ETFile1, ET_File *ETFile2);
-gint ET_Comp_Func_Sort_File_By_Descending_Album_Artist    (ET_File *ETFile1, ET_File *ETFile2);
-gint ET_Comp_Func_Sort_File_By_Ascending_Album            (ET_File *ETFile1, ET_File *ETFile2);
-gint ET_Comp_Func_Sort_File_By_Descending_Album           (ET_File *ETFile1, ET_File *ETFile2);
-gint ET_Comp_Func_Sort_File_By_Ascending_Year             (ET_File *ETFile1, ET_File *ETFile2);
-gint ET_Comp_Func_Sort_File_By_Descending_Year            (ET_File *ETFile1, ET_File *ETFile2);
-gint ET_Comp_Func_Sort_File_By_Ascending_Genre            (ET_File *ETFile1, ET_File *ETFile2);
-gint ET_Comp_Func_Sort_File_By_Descending_Genre           (ET_File *ETFile1, ET_File *ETFile2);
-gint ET_Comp_Func_Sort_File_By_Ascending_Comment          (ET_File *ETFile1, ET_File *ETFile2);
-gint ET_Comp_Func_Sort_File_By_Descending_Comment         (ET_File *ETFile1, ET_File *ETFile2);
-gint ET_Comp_Func_Sort_File_By_Ascending_Composer         (ET_File *ETFile1, ET_File *ETFile2);
-gint ET_Comp_Func_Sort_File_By_Descending_Composer        (ET_File *ETFile1, ET_File *ETFile2);
-gint ET_Comp_Func_Sort_File_By_Ascending_Orig_Artist      (ET_File *ETFile1, ET_File *ETFile2);
-gint ET_Comp_Func_Sort_File_By_Descending_Orig_Artist     (ET_File *ETFile1, ET_File *ETFile2);
-gint ET_Comp_Func_Sort_File_By_Ascending_Copyright        (ET_File *ETFile1, ET_File *ETFile2);
-gint ET_Comp_Func_Sort_File_By_Descending_Copyright       (ET_File *ETFile1, ET_File *ETFile2);
-gint ET_Comp_Func_Sort_File_By_Ascending_Url              (ET_File *ETFile1, ET_File *ETFile2);
-gint ET_Comp_Func_Sort_File_By_Descending_Url             (ET_File *ETFile1, ET_File *ETFile2);
-gint ET_Comp_Func_Sort_File_By_Ascending_Encoded_By       (ET_File *ETFile1, ET_File *ETFile2);
-gint ET_Comp_Func_Sort_File_By_Descending_Encoded_By      (ET_File *ETFile1, ET_File *ETFile2);
-
-gint ET_Comp_Func_Sort_File_By_Ascending_File_Type        (ET_File *ETFile1, ET_File *ETFile2);
-gint ET_Comp_Func_Sort_File_By_Descending_File_Type       (ET_File *ETFile1, ET_File *ETFile2);
-gint ET_Comp_Func_Sort_File_By_Ascending_File_Size        (ET_File *ETFile1, ET_File *ETFile2);
-gint ET_Comp_Func_Sort_File_By_Descending_File_Size       (ET_File *ETFile1, ET_File *ETFile2);
-gint ET_Comp_Func_Sort_File_By_Ascending_File_Duration    (ET_File *ETFile1, ET_File *ETFile2);
-gint ET_Comp_Func_Sort_File_By_Descending_File_Duration   (ET_File *ETFile1, ET_File *ETFile2);
-gint ET_Comp_Func_Sort_File_By_Ascending_File_Bitrate     (ET_File *ETFile1, ET_File *ETFile2);
-gint ET_Comp_Func_Sort_File_By_Descending_File_Bitrate    (ET_File *ETFile1, ET_File *ETFile2);
-gint ET_Comp_Func_Sort_File_By_Ascending_File_Samplerate  (ET_File *ETFile1, ET_File *ETFile2);
-gint ET_Comp_Func_Sort_File_By_Descending_File_Samplerate (ET_File *ETFile1, ET_File *ETFile2);
+gboolean ET_Detect_Changes_Of_File_Tag (const File_Tag *FileTag1, const File_Tag  *FileTag2);
+
+GList *ET_Sort_File_List (GList *ETFileList, EtSortMode Sorting_Type);
+void ET_Sort_Displayed_File_List_And_Update_UI (EtSortMode Sorting_Type);
+gint ET_Comp_Func_Sort_File_By_Ascending_Filename (const ET_File *ETFile1, const ET_File *ETFile2);
+gint ET_Comp_Func_Sort_File_By_Descending_Filename (const ET_File *ETFile1, const ET_File *ETFile2);
+gint ET_Comp_Func_Sort_File_By_Ascending_Creation_Date (const ET_File *ETFile1, const ET_File *ETFile2);
+gint ET_Comp_Func_Sort_File_By_Descending_Creation_Date (const ET_File *ETFile1, const ET_File *ETFile2);
+gint et_comp_func_sort_file_by_ascending_disc_number (const ET_File *ETFile1,
+                                                      const ET_File *ETFile2);
+gint et_comp_func_sort_file_by_descending_disc_number (const ET_File *ETFile1,
+                                                       const ET_File *ETFile2);
+gint ET_Comp_Func_Sort_File_By_Ascending_Track_Number (const ET_File *ETFile1, const ET_File *ETFile2);
+gint ET_Comp_Func_Sort_File_By_Descending_Track_Number (const ET_File *ETFile1, const ET_File *ETFile2);
+gint ET_Comp_Func_Sort_File_By_Ascending_Title (const ET_File *ETFile1, const ET_File *ETFile2);
+gint ET_Comp_Func_Sort_File_By_Descending_Title (const ET_File *ETFile1, const ET_File *ETFile2);
+gint ET_Comp_Func_Sort_File_By_Ascending_Artist (const ET_File *ETFile1, const ET_File *ETFile2);
+gint ET_Comp_Func_Sort_File_By_Descending_Artist (const ET_File *ETFile1, const ET_File *ETFile2);
+gint ET_Comp_Func_Sort_File_By_Ascending_Album_Artist (const ET_File *ETFile1, const ET_File *ETFile2);
+gint ET_Comp_Func_Sort_File_By_Descending_Album_Artist (const ET_File *ETFile1, const ET_File *ETFile2);
+gint ET_Comp_Func_Sort_File_By_Ascending_Album (const ET_File *ETFile1, const ET_File *ETFile2);
+gint ET_Comp_Func_Sort_File_By_Descending_Album (const ET_File *ETFile1, const ET_File *ETFile2);
+gint ET_Comp_Func_Sort_File_By_Ascending_Year (const ET_File *ETFile1, const ET_File *ETFile2);
+gint ET_Comp_Func_Sort_File_By_Descending_Year (const ET_File *ETFile1, const ET_File *ETFile2);
+gint ET_Comp_Func_Sort_File_By_Ascending_Genre (const ET_File *ETFile1, const ET_File *ETFile2);
+gint ET_Comp_Func_Sort_File_By_Descending_Genre (const ET_File *ETFile1, const ET_File *ETFile2);
+gint ET_Comp_Func_Sort_File_By_Ascending_Comment (const ET_File *ETFile1, const ET_File *ETFile2);
+gint ET_Comp_Func_Sort_File_By_Descending_Comment (const ET_File *ETFile1, const ET_File *ETFile2);
+gint ET_Comp_Func_Sort_File_By_Ascending_Composer (const ET_File *ETFile1, const ET_File *ETFile2);
+gint ET_Comp_Func_Sort_File_By_Descending_Composer (const ET_File *ETFile1, const ET_File *ETFile2);
+gint ET_Comp_Func_Sort_File_By_Ascending_Orig_Artist (const ET_File *ETFile1, const ET_File *ETFile2);
+gint ET_Comp_Func_Sort_File_By_Descending_Orig_Artist (const ET_File *ETFile1, const ET_File *ETFile2);
+gint ET_Comp_Func_Sort_File_By_Ascending_Copyright (const ET_File *ETFile1, const ET_File *ETFile2);
+gint ET_Comp_Func_Sort_File_By_Descending_Copyright (const ET_File *ETFile1, const ET_File *ETFile2);
+gint ET_Comp_Func_Sort_File_By_Ascending_Url (const ET_File *ETFile1, const ET_File *ETFile2);
+gint ET_Comp_Func_Sort_File_By_Descending_Url (const ET_File *ETFile1, const ET_File *ETFile2);
+gint ET_Comp_Func_Sort_File_By_Ascending_Encoded_By (const ET_File *ETFile1, const ET_File *ETFile2);
+gint ET_Comp_Func_Sort_File_By_Descending_Encoded_By (const ET_File *ETFile1, const ET_File *ETFile2);
+
+gint ET_Comp_Func_Sort_File_By_Ascending_File_Type (const ET_File *ETFile1, const ET_File *ETFile2);
+gint ET_Comp_Func_Sort_File_By_Descending_File_Type (const ET_File *ETFile1, const ET_File *ETFile2);
+gint ET_Comp_Func_Sort_File_By_Ascending_File_Size (const ET_File *ETFile1, const ET_File *ETFile2);
+gint ET_Comp_Func_Sort_File_By_Descending_File_Size (const ET_File *ETFile1, const ET_File *ETFile2);
+gint ET_Comp_Func_Sort_File_By_Ascending_File_Duration (const ET_File *ETFile1, const ET_File *ETFile2);
+gint ET_Comp_Func_Sort_File_By_Descending_File_Duration (const ET_File *ETFile1, const ET_File *ETFile2);
+gint ET_Comp_Func_Sort_File_By_Ascending_File_Bitrate (const ET_File *ETFile1, const ET_File *ETFile2);
+gint ET_Comp_Func_Sort_File_By_Descending_File_Bitrate (const ET_File *ETFile1, const ET_File *ETFile2);
+gint ET_Comp_Func_Sort_File_By_Ascending_File_Samplerate (const ET_File *ETFile1, const ET_File *ETFile2);
+gint ET_Comp_Func_Sort_File_By_Descending_File_Samplerate (const ET_File *ETFile1, const ET_File *ETFile2);
 
 G_END_DECLS
 
-#endif /* __ET_CORE_H__ */
+#endif /* ET_CORE_H_ */
diff --git a/src/file_area.c b/src/file_area.c
new file mode 100644
index 0000000..67c2ba4
--- /dev/null
+++ b/src/file_area.c
@@ -0,0 +1,370 @@
+/* EasyTAG - tag editor for audio files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ *
+ * 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 (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+#include "config.h"
+
+#include "file_area.h"
+
+#include <glib/gi18n.h>
+
+#include "charset.h"
+#include "et_core.h"
+#include "log.h"
+#include "tag_area.h"
+
+/* TODO: Use G_DEFINE_TYPE_WITH_PRIVATE. */
+G_DEFINE_TYPE (EtFileArea, et_file_area, GTK_TYPE_BIN)
+
+#define et_file_area_get_instance_private(area) (area->priv)
+
+struct _EtFileAreaPrivate
+{
+    GtkWidget *file_label;
+
+    GtkWidget *index_label;
+    GtkWidget *name_entry;
+
+    GtkWidget *header_grid;
+
+    GtkWidget *version_label;
+    GtkWidget *version_value_label;
+    GtkWidget *bitrate_label;
+    GtkWidget *bitrate_value_label;
+    GtkWidget *samplerate_label;
+    GtkWidget *samplerate_value_label;
+    GtkWidget *mode_label;
+    GtkWidget *mode_value_label;
+    GtkWidget *size_label;
+    GtkWidget *size_value_label;
+    GtkWidget *duration_label;
+    GtkWidget *duration_value_label;
+};
+
+static void
+on_file_show_header_changed (EtFileArea *self,
+                             gchar *key,
+                             GSettings *settings)
+{
+    EtFileAreaPrivate *priv;
+
+    priv = et_file_area_get_instance_private (self);
+
+    if (g_settings_get_boolean (settings, key))
+    {
+        gtk_widget_show (priv->header_grid);
+    }
+    else
+    {
+        gtk_widget_hide (priv->header_grid);
+    }
+}
+
+static void
+create_file_area (EtFileArea *self)
+{
+    EtFileAreaPrivate *priv;
+    GtkBuilder *builder;
+    GError *error = NULL;
+    GtkWidget *grid;
+
+    priv = et_file_area_get_instance_private (self);
+
+    builder = gtk_builder_new ();
+    gtk_builder_add_from_resource (builder,
+                                   "/org/gnome/EasyTAG/file_area.ui",
+                                   &error);
+
+    if (error != NULL)
+    {
+        g_error ("Unable to get file area from resource: %s",
+                 error->message);
+    }
+
+    grid = GTK_WIDGET (gtk_builder_get_object (builder, "file_grid"));
+    gtk_container_add (GTK_CONTAINER (self), grid);
+
+    priv->file_label = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                           "file_label"));
+
+    priv->index_label = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                            "index_label"));
+
+    /* Filename. */
+    priv->name_entry = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                           "filename_entry"));
+
+    g_signal_connect (priv->name_entry, "populate-popup",
+                      G_CALLBACK (on_entry_populate_popup), NULL);
+
+    /* File information. */
+    priv->header_grid = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                            "header_grid"));
+    priv->version_label = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                              "version_label"));
+    priv->version_value_label = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                    "version_value_label"));
+
+    priv->bitrate_label = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                              "bitrate_label"));
+    priv->bitrate_value_label = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                    "bitrate_value_label"));
+
+    priv->samplerate_label = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                 "samplerate_label"));
+    priv->samplerate_value_label = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                       "samplerate_value_label"));
+
+    priv->mode_label = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                           "mode_label"));
+    priv->mode_value_label = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                 "mode_value_label"));
+
+    priv->size_label = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                           "size_label"));
+    priv->size_value_label = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                 "size_value_label"));
+
+    priv->duration_label = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                               "duration_label"));
+    priv->duration_value_label = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                     "duration_value_label"));
+
+    g_object_unref (builder);
+
+    g_signal_connect_swapped (MainSettings, "changed::file-show-header",
+                              G_CALLBACK (on_file_show_header_changed), self);
+    on_file_show_header_changed (self, "file-show-header", MainSettings);
+}
+
+static void
+et_file_area_init (EtFileArea *self)
+{
+    self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, ET_TYPE_FILE_AREA,
+                                              EtFileAreaPrivate);
+    create_file_area (self);
+}
+
+static void
+et_file_area_class_init (EtFileAreaClass *klass)
+{
+    g_type_class_add_private (klass, sizeof (EtFileAreaPrivate));
+}
+
+/*
+ * et_file_area_new:
+ *
+ * Create a new EtFileArea instance.
+ *
+ * Returns: a new #EtFileArea
+ */
+GtkWidget *
+et_file_area_new (void)
+{
+    return g_object_new (ET_TYPE_FILE_AREA, NULL);
+}
+
+void
+et_file_area_clear (EtFileArea *self)
+{
+    EtFileAreaPrivate *priv;
+    EtFileHeaderFields fields;
+
+    g_return_if_fail (ET_FILE_AREA (self));
+
+    priv = et_file_area_get_instance_private (self);
+
+    /* Default values are MPEG data. */
+    fields.description = _("File");
+    fields.version_label = _("Encoder:");
+    fields.version =  "";
+    fields.bitrate = "";
+    fields.samplerate = "";
+    fields.mode_label = _("Mode:");
+    fields.mode = "";
+    fields.size = "";
+    fields.duration = "";
+
+    et_file_area_set_header_fields (self, &fields);
+
+    gtk_entry_set_text (GTK_ENTRY (priv->name_entry), "");
+    gtk_label_set_text (GTK_LABEL (priv->index_label), "0/0:");
+}
+
+void
+et_file_area_set_header_fields (EtFileArea *self,
+                                EtFileHeaderFields *fields)
+{
+    EtFileAreaPrivate *priv;
+
+    g_return_if_fail (ET_FILE_AREA (self));
+    g_return_if_fail (fields != NULL);
+
+    priv = et_file_area_get_instance_private (self);
+
+    gtk_label_set_text (GTK_LABEL (priv->file_label), fields->description);
+    gtk_label_set_text (GTK_LABEL (priv->version_label),
+                        fields->version_label);
+    gtk_label_set_text (GTK_LABEL (priv->version_value_label),
+                        fields->version);
+    gtk_label_set_text (GTK_LABEL (priv->bitrate_value_label),
+                        fields->bitrate);
+    gtk_label_set_text (GTK_LABEL (priv->samplerate_value_label),
+                        fields->samplerate);
+    gtk_label_set_text (GTK_LABEL (priv->mode_label), fields->mode_label);
+    gtk_label_set_text (GTK_LABEL (priv->mode_value_label), fields->mode);
+    gtk_label_set_text (GTK_LABEL (priv->size_value_label), fields->size);
+    gtk_label_set_text (GTK_LABEL (priv->duration_value_label),
+                        fields->duration);
+}
+
+/* Toggle visibility of the small status icon if filename is read-only or not
+ * found. Show the position of the current file in the list, by using the index
+ * and list length. */
+void
+et_file_area_set_file_fields (EtFileArea *self,
+                              const ET_File *ETFile)
+{
+    EtFileAreaPrivate *priv;
+    GFile *file;
+    gchar *text;
+    gchar *cur_filename;
+    gchar *basename_utf8;
+    gchar *pos;
+    GFileInfo *info;
+    GError *error = NULL;
+
+    g_return_if_fail (ET_FILE_AREA (self));
+    g_return_if_fail (ETFile != NULL);
+
+    priv = et_file_area_get_instance_private (self);
+
+    cur_filename = ((File_Name *)((GList *)ETFile->FileNameCur)->data)->value;
+
+    file = g_file_new_for_path (cur_filename);
+
+    info = g_file_query_info (file, G_FILE_ATTRIBUTE_ACCESS_CAN_READ ","
+                              G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE,
+                              G_FILE_QUERY_INFO_NONE, NULL, &error);
+
+    /* Show/hide 'AccessStatusIcon' */
+    if (!info)
+    {
+        if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
+        {
+            /* No such file or directory. */
+            GIcon *emblem_icon;
+
+            emblem_icon = g_themed_icon_new ("emblem-unreadable");
+
+            gtk_entry_set_icon_from_gicon (GTK_ENTRY (priv->name_entry),
+                                           GTK_ENTRY_ICON_SECONDARY,
+                                           emblem_icon);
+            gtk_entry_set_icon_tooltip_text (GTK_ENTRY (priv->name_entry),
+                                             GTK_ENTRY_ICON_SECONDARY,
+                                             _("File not found"));
+            g_object_unref (emblem_icon);
+        }
+        else
+        {
+            Log_Print (LOG_ERROR, _("Cannot query file information ‘%s’"),
+                       error->message);
+            g_error_free (error);
+            g_object_unref (file);
+            return;
+        }
+    }
+    else
+    {
+        gboolean readable, writable;
+
+        readable = g_file_info_get_attribute_boolean (info,
+                                                      G_FILE_ATTRIBUTE_ACCESS_CAN_READ);
+        writable = g_file_info_get_attribute_boolean (info,
+                                                      G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE);
+
+        if (readable && writable)
+        {
+            /* User has all necessary permissions. */
+            gtk_entry_set_icon_from_gicon (GTK_ENTRY (priv->name_entry),
+                                           GTK_ENTRY_ICON_SECONDARY, NULL);
+        }
+        else if (!writable)
+        {
+            /* Read only file or permission denied. */
+            GIcon *emblem_icon;
+
+            emblem_icon = g_themed_icon_new ("emblem-readonly");
+
+            gtk_entry_set_icon_from_gicon (GTK_ENTRY (priv->name_entry),
+                                           GTK_ENTRY_ICON_SECONDARY,
+                                           emblem_icon);
+            gtk_entry_set_icon_tooltip_text (GTK_ENTRY (priv->name_entry),
+                                             GTK_ENTRY_ICON_SECONDARY,
+                                             _("Read-only file"));
+            g_object_unref (emblem_icon);
+
+        }
+        else
+        {
+            /* Otherwise unreadable. */
+            GIcon *emblem_icon;
+
+            emblem_icon = g_themed_icon_new ("emblem-unreadable");
+
+            gtk_entry_set_icon_from_gicon (GTK_ENTRY (priv->name_entry),
+                                           GTK_ENTRY_ICON_SECONDARY,
+                                           emblem_icon);
+            gtk_entry_set_icon_tooltip_text (GTK_ENTRY (priv->name_entry),
+                                             GTK_ENTRY_ICON_SECONDARY,
+                                             _("File not found"));
+            g_object_unref (emblem_icon);
+        }
+        g_object_unref (info);
+    }
+
+    /* Set filename into name_entry. */
+    basename_utf8 = g_path_get_basename (((File_Name *)((GList *)ETFile->FileNameNew)->data)->value_utf8);
+
+    /* Remove the extension. */
+    if ((pos = g_utf8_strrchr (basename_utf8, -1, '.')) != NULL)
+    {
+        *pos = 0;
+    }
+
+    gtk_entry_set_text (GTK_ENTRY (priv->name_entry), basename_utf8);
+    g_free (basename_utf8);
+
+    /* Show position of current file in list */
+    text = g_strdup_printf ("%d/%d:", ETFile->IndexKey,
+                            ETCore->ETFileDisplayedList_Length);
+    gtk_label_set_text (GTK_LABEL (priv->index_label), text);
+    g_object_unref (file);
+    g_free (text);
+}
+
+const gchar *
+et_file_area_get_filename (EtFileArea *self)
+{
+    EtFileAreaPrivate *priv;
+
+    g_return_val_if_fail (ET_FILE_AREA (self), NULL);
+
+    priv = et_file_area_get_instance_private (self);
+
+    return gtk_entry_get_text (GTK_ENTRY (priv->name_entry));
+}
diff --git a/src/file_area.h b/src/file_area.h
new file mode 100644
index 0000000..df70a56
--- /dev/null
+++ b/src/file_area.h
@@ -0,0 +1,57 @@
+/* EasyTAG - tag editor for audio files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ *
+ * 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 (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+#ifndef ET_FILE_AREA_H_
+#define ET_FILE_AREA_H_
+
+#include <gtk/gtk.h>
+
+#include "et_core.h"
+
+G_BEGIN_DECLS
+
+#define ET_TYPE_FILE_AREA (et_file_area_get_type ())
+#define ET_FILE_AREA(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), ET_TYPE_FILE_AREA, EtFileArea))
+
+typedef struct _EtFileArea EtFileArea;
+typedef struct _EtFileAreaClass EtFileAreaClass;
+typedef struct _EtFileAreaPrivate EtFileAreaPrivate;
+
+struct _EtFileArea
+{
+    /*< private >*/
+    GtkBin parent_instance;
+    EtFileAreaPrivate *priv;
+};
+
+struct _EtFileAreaClass
+{
+    /*< private >*/
+    GtkBinClass parent_class;
+};
+
+GType et_file_area_get_type (void);
+GtkWidget * et_file_area_new (void);
+void et_file_area_clear (EtFileArea *self);
+void et_file_area_set_header_fields (EtFileArea *self, EtFileHeaderFields *fields);
+void et_file_area_set_file_fields (EtFileArea *self, const ET_File *ETFile);
+const gchar * et_file_area_get_filename (EtFileArea *self);
+
+G_END_DECLS
+
+#endif /* ET_FILE_AREA_H_ */
diff --git a/src/flac_header.c b/src/flac_header.c
deleted file mode 100644
index 535f7b0..0000000
--- a/src/flac_header.c
+++ /dev/null
@@ -1,241 +0,0 @@
-/* flac_header.c - 2002/07/03 */
-/*
- *  EasyTAG - Tag editor for MP3 and Ogg Vorbis files
- *  Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
- *
- *  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
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-/*
- * Code taken from :
- * FLAC - Free Lossless Audio Codec - v1.0.3
- * Copyright (C) 2001  Josh Coalson
- *
- */
-
-#include "config.h" /* For definition of ENABLE_FLAC. */
-
-#ifdef ENABLE_FLAC
-
-#include <gtk/gtk.h>
-#include <glib/gi18n.h>
-#include <FLAC/all.h>
-
-#include "easytag.h"
-#include "et_core.h"
-#include "flac_header.h"
-#include "misc.h"
-
-
-/****************
- * Declarations *
- ****************/
-typedef struct {
-    FLAC__bool abort_flag;
-    FLAC__bool is_playing;
-    FLAC__bool eof;
-    FLAC__bool play_thread_open; /* if true, is_playing must also be true */
-    unsigned total_samples;
-    unsigned bits_per_sample;
-    unsigned channels;
-    unsigned sample_rate;
-    unsigned length_in_msec;
-    int seek_to_in_sec;
-} file_info_struct;
-
-
-static FLAC__byte reservoir_[FLAC__MAX_BLOCK_SIZE * 2 * 2 * 2]; /* *2 for max bytes-per-sample, *2 for max channels, another *2 for overflow */
-static unsigned reservoir_samples_ = 0;
-
-
-/**************
- * Prototypes *
- **************/
-static FLAC__StreamDecoderWriteStatus write_callback_(const FLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data);
-static void metadata_callback_(const FLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data);
-static void error_callback_   (const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data);
-
-
-
-/*************
- * Functions *
- *************/
-
-/****************************
- * Header info of FLAC file *
- ****************************/
-
-gboolean Flac_Header_Read_File_Info (gchar *filename, ET_File_Info *ETFileInfo)
-{
-    gint duration = 0;
-    gulong filesize;
-    FLAC__StreamDecoder *tmp_decoder;
-
-    file_info_struct tmp_file_info;
-
-    g_return_val_if_fail (filename != NULL && ETFileInfo != NULL, FALSE);
-
-    /* Decoding FLAC file */
-    tmp_decoder = FLAC__stream_decoder_new();
-    if (tmp_decoder == NULL)
-    {
-        return FALSE;
-    }
-
-    tmp_file_info.abort_flag = false;
-
-    FLAC__stream_decoder_set_md5_checking     (tmp_decoder, false);
-    if(FLAC__stream_decoder_init_file(tmp_decoder, filename, write_callback_, metadata_callback_, error_callback_, &tmp_file_info) != FLAC__STREAM_DECODER_INIT_STATUS_OK)
-        return FALSE;
-
-    if(!FLAC__stream_decoder_process_until_end_of_metadata(tmp_decoder))
-    {
-        return FALSE;
-    }
-
-    FLAC__stream_decoder_finish(tmp_decoder);
-    FLAC__stream_decoder_delete(tmp_decoder);
-    /* End of decoding FLAC file */
-
-
-    filesize = et_get_file_size (filename);
-    duration = (gint)tmp_file_info.length_in_msec/1000;
-
-    ETFileInfo->version     = 0; // Not defined in FLAC file
-    if (duration > 0)
-        ETFileInfo->bitrate = filesize*8/duration/1000; // FIXME : Approximation!! Needs to remove tag size!
-    ETFileInfo->samplerate  = tmp_file_info.sample_rate;
-    ETFileInfo->mode        = tmp_file_info.channels;
-    ETFileInfo->size        = filesize;
-    ETFileInfo->duration    = duration;
-
-    return TRUE;
-}
-
-
-
-FLAC__StreamDecoderWriteStatus write_callback_(const FLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data)
-{
-    file_info_struct *file_info = (file_info_struct *)client_data;
-    const unsigned bps = file_info->bits_per_sample, channels = file_info->channels, wide_samples = frame->header.blocksize;
-    unsigned wide_sample, sample, channel;
-    FLAC__int8 *scbuffer = (FLAC__int8*)reservoir_;
-    FLAC__int16 *ssbuffer = (FLAC__int16*)reservoir_;
-
-    (void)decoder;
-
-    if (file_info->abort_flag)
-        return FLAC__STREAM_DECODER_WRITE_STATUS_ABORT;
-
-    if (bps == 8) {
-        for(sample = reservoir_samples_*channels, wide_sample = 0; wide_sample < wide_samples; wide_sample++)
-            for(channel = 0; channel < channels; channel++, sample++)
-                scbuffer[sample] = (FLAC__int8)buffer[channel][wide_sample];
-    }
-    else if (bps == 16) {
-        for(sample = reservoir_samples_*channels, wide_sample = 0; wide_sample < wide_samples; wide_sample++)
-            for(channel = 0; channel < channels; channel++, sample++)
-                ssbuffer[sample] = (FLAC__int16)buffer[channel][wide_sample];
-    }
-    else {
-        file_info->abort_flag = true;
-        return FLAC__STREAM_DECODER_WRITE_STATUS_ABORT;
-    }
-
-    reservoir_samples_ += wide_samples;
-
-    return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE;
-}
-
-void metadata_callback_(const FLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data)
-{
-    file_info_struct *file_info = (file_info_struct *)client_data;
-    (void)decoder;
-    if (metadata->type == FLAC__METADATA_TYPE_STREAMINFO)
-    {
-        FLAC__ASSERT(metadata->data.stream_info.total_samples < 0x100000000); /* this plugin can only handle < 4 gigasamples */
-        file_info->total_samples = (unsigned)(metadata->data.stream_info.total_samples&0xffffffff);
-        file_info->bits_per_sample = metadata->data.stream_info.bits_per_sample;
-        file_info->channels = metadata->data.stream_info.channels;
-        file_info->sample_rate = metadata->data.stream_info.sample_rate;
-
-        if (file_info->sample_rate != 0 && (file_info->sample_rate / 100) != 0) // To prevent crash...
-            file_info->length_in_msec = file_info->total_samples * 10 / (file_info->sample_rate / 100);
-    }
-}
-
-void error_callback_(const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data)
-{
-    file_info_struct *file_info = (file_info_struct *)client_data;
-    (void)decoder;
-    if (status != FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC)
-        file_info->abort_flag = true;
-}
-
-
-
-
-gboolean Flac_Header_Display_File_Info_To_UI (gchar *filename_utf8, ET_File_Info *ETFileInfo)
-{
-    gchar *text;
-    gchar *time = NULL;
-    gchar *time1 = NULL;
-    gchar *size = NULL;
-    gchar *size1 = NULL;
-
-    /* Nothing to display */
-    //gtk_label_set_text(GTK_LABEL(VersionLabel),"");
-    //gtk_label_set_text(GTK_LABEL(VersionValueLabel),"");
-    gtk_label_set_text(GTK_LABEL(VersionLabel),_("Encoder:"));
-    gtk_label_set_text(GTK_LABEL(VersionValueLabel),"flac");
-
-    /* Bitrate */
-    text = g_strdup_printf(_("%d kb/s"),ETFileInfo->bitrate);
-    gtk_label_set_text(GTK_LABEL(BitrateValueLabel),text);
-    g_free(text);
-
-    /* Samplerate */
-    text = g_strdup_printf(_("%d Hz"),ETFileInfo->samplerate);
-    gtk_label_set_text(GTK_LABEL(SampleRateValueLabel),text);
-    g_free(text);
-
-    /* Mode */
-    gtk_label_set_text(GTK_LABEL(ModeLabel),_("Channels:"));
-    text = g_strdup_printf("%d",ETFileInfo->mode);
-    gtk_label_set_text(GTK_LABEL(ModeValueLabel),text);
-    g_free(text);
-
-    /* Size */
-    size  = g_format_size (ETFileInfo->size);
-    size1 = g_format_size (ETCore->ETFileDisplayedList_TotalSize);
-    text  = g_strdup_printf("%s (%s)",size,size1);
-    gtk_label_set_text(GTK_LABEL(SizeValueLabel),text);
-    g_free(size);
-    g_free(size1);
-    g_free(text);
-
-    /* Duration */
-    time  = Convert_Duration(ETFileInfo->duration);
-    time1 = Convert_Duration(ETCore->ETFileDisplayedList_TotalDuration);
-    text  = g_strdup_printf("%s (%s)",time,time1);
-    gtk_label_set_text(GTK_LABEL(DurationValueLabel),text);
-    g_free(time);
-    g_free(time1);
-    g_free(text);
-
-    return TRUE;
-}
-
-#endif /* ENABLE_FLAC */
diff --git a/src/flac_header.h b/src/flac_header.h
deleted file mode 100644
index 775f97f..0000000
--- a/src/flac_header.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* flac_header.h - 2002/07/03 */
-/*
- *  EasyTAG - Tag editor for MP3 and Ogg Vorbis files
- *  Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
- *
- *  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
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-
-#ifndef __FLAC_HEADER_H__
-#define __FLAC_HEADER_H__
-
-
-#include "et_core.h"
-
-/****************
- * Declarations *
- ****************/
-
-
-/**************
- * Prototypes *
- **************/
-
-gboolean Flac_Header_Read_File_Info          (gchar *filename, ET_File_Info *ETFileInfo);
-gboolean Flac_Header_Display_File_Info_To_UI (gchar *filename, ET_File_Info *ETFileInfo);
-
-
-#endif /* __FLAC_HEADER_H__ */
diff --git a/src/flac_tag.h b/src/flac_tag.h
deleted file mode 100644
index bc6506e..0000000
--- a/src/flac_tag.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/* flac_tag.h - 2003/12/27 */
-/*
- *  EasyTAG - Tag editor for MP3 and Ogg Vorbis files
- *  Copyright (C) 2001-2003  Jerome Couderc <easytag at gmail.com>
- *  Copyright (C) 2003       Pavel Minayev <thalion at front.ru>
- *
- *  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
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-
-#ifndef __FLAC_TAG_H__
-#define __FLAC_TAG_H__
-
-
-#include <glib.h>
-#include "et_core.h"
-
-/***************
- * Declaration *
- ***************/
-const gchar *flac_error_msg;
-
-
-/**************
- * Prototypes *
- **************/
-gboolean Flac_Tag_Read_File_Tag  (gchar *filename, File_Tag *FileTag);
-gboolean Flac_Tag_Write_File_Tag (ET_File *ETFile);
-
-
-#endif /* __FLAC_TAG_H__ */
diff --git a/src/genres.h b/src/genres.h
index 4b6d5c5..63c93a9 100644
--- a/src/genres.h
+++ b/src/genres.h
@@ -35,7 +35,7 @@
  * Last Update: 2014-05-05
  * https://en.wikipedia.org/wiki/ID3#List_of_genres
  */
-static char *id3_genres[] =
+static const char *id3_genres[] =
 {
     "Blues", /* 0: Core ID3 support */
     "Classic Rock",
diff --git a/src/gtk2_compat.c b/src/gtk2_compat.c
deleted file mode 100644
index 0f416d5..0000000
--- a/src/gtk2_compat.c
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * EasyTAG - Tag editor for MP3 and Ogg Vorbis files
- * Copyright (C) 2012  David King <amigadave at amigadave.com>
- *
- * 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
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "gtk2_compat.h"
-
-#if !GTK_CHECK_VERSION(3,0,0)
-
-void et_grid_attach_full (GtkGrid *grid, GtkWidget *child, gint left, gint top,
-                          gint width, gint height, gboolean hexpand,
-                          gboolean vexpand, gint hmargin, gint vmargin)
-{
-    GtkAttachOptions xoptions = GTK_FILL;
-    GtkAttachOptions yoptions = GTK_FILL;
-
-    if (hexpand)
-    {
-        xoptions |= GTK_EXPAND;
-    }
-    if (vexpand)
-    {
-        yoptions |= GTK_EXPAND;
-    }
-
-    gtk_table_attach (grid, child, left, left + width, top, top + height,
-                      xoptions, yoptions, hmargin, vmargin);
-}
-
-void gtk_grid_attach (GtkGrid *grid, GtkWidget *child, gint left, gint top,
-                      gint width, gint height)
-{
-    et_grid_attach_full (grid, child, left, top, width, height, FALSE, FALSE,
-                         0, 0);
-}
-
-GtkWidget *gtk_box_new(GtkOrientation orientation,gint padding)
-{
-    if (orientation==GTK_ORIENTATION_HORIZONTAL)
-        return gtk_hbox_new(FALSE,padding);
-    return gtk_vbox_new(FALSE,padding);
-}
-
-GtkWidget *gtk_button_box_new(GtkOrientation orientation)
-{
-    if (orientation==GTK_ORIENTATION_HORIZONTAL)
-        return gtk_hbutton_box_new();
-    return gtk_vbutton_box_new();
-}
-
-GtkWidget *gtk_paned_new(GtkOrientation orientation)
-{
-    if (orientation==GTK_ORIENTATION_HORIZONTAL)
-        return gtk_hpaned_new();
-    return gtk_vpaned_new();
-}
-
-GtkWidget *gtk_separator_new(GtkOrientation orientation)
-{
-    if (orientation==GTK_ORIENTATION_HORIZONTAL)
-        return gtk_hseparator_new();
-    return gtk_vseparator_new();
-}
-
-#else /* GTK_CHECK_VERSION(3,0,0) */
-
-void et_grid_attach_full (GtkGrid *grid, GtkWidget *child, gint left, gint top,
-                          gint width, gint height, gboolean hexpand,
-                          gboolean vexpand, gint hmargin, gint vmargin)
-{
-    g_object_set (G_OBJECT(child),
-                  "hexpand", hexpand,
-                  "vexpand", vexpand,
-                  "margin-left", hmargin,
-                  "margin-right", hmargin,
-                  "margin-top", vmargin,
-                  "margin-bottom", vmargin,
-                  NULL);
-    gtk_grid_attach (grid, child, left, top, width, height);
-}
-
-#endif /* GTK_CHECK_VERSION(3,0,0) */
-
-void et_grid_attach_margins (GtkGrid *grid, GtkWidget *child, gint left,
-                              gint top, gint width, gint height, gint hmargin,
-                              gint vmargin)
-{
-    et_grid_attach_full (grid, child, left, top, width, height, FALSE, FALSE,
-                         hmargin, vmargin);
-}
-
-GtkWidget *
-et_progress_bar_new (void)
-{
-    GtkWidget *progress;
-
-    progress = gtk_progress_bar_new ();
-
-#if GTK_CHECK_VERSION(3,0,0)
-    gtk_progress_bar_set_show_text (GTK_PROGRESS_BAR (progress), TRUE);
-    gtk_progress_bar_set_text (GTK_PROGRESS_BAR (progress), "");
-#endif
-
-    return progress;
-}
diff --git a/src/gtk2_compat.h b/src/gtk2_compat.h
deleted file mode 100644
index 382e2dd..0000000
--- a/src/gtk2_compat.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * EasyTAG - Tag editor for MP3 and Ogg Vorbis files
- * Copyright (C) 2012  David King <amigadave at amigadave.com>
- *
- * 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
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef GTK2_COMPAT_H_
-#define GTK2_COMPAT_H_
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-#if !GTK_CHECK_VERSION(3,0,0)
-
-#define GTK_SCROLLABLE(x) GTK_TREE_VIEW(x)
-#define gtk_scrollable_get_vadjustment(x) gtk_tree_view_get_vadjustment(x)
-
-#define GTK_GRID(x) GTK_TABLE(x)
-#define GtkGrid GtkTable
-
-#define et_grid_new(r, c) gtk_table_new((r),(c),FALSE)
-
-#define gtk_grid_set_row_spacing gtk_table_set_row_spacings
-#define gtk_grid_set_column_spacing gtk_table_set_col_spacings
-void gtk_grid_attach (GtkGrid *grid, GtkWidget *child, gint left, gint top,
-                      gint width, gint height);
-
-GtkWidget *gtk_box_new(GtkOrientation orientation, gint padding);
-GtkWidget *gtk_button_box_new(GtkOrientation orientation);
-GtkWidget *gtk_paned_new(GtkOrientation orientation);
-GtkWidget *gtk_separator_new(GtkOrientation orientation);
-
-#else /* GTK_CHECK_VERSION(3,0,0) */
-
-#define et_grid_new(r,c) gtk_grid_new()
-
-#endif /* GTK_CHECK_VERSION(3,0,0) */
-
-void et_grid_attach_full (GtkGrid *grid, GtkWidget *child, gint left, gint top,
-                          gint width, gint height, gboolean hexpand,
-                          gboolean vexpand, gint hmargin, gint vmargin);
-
-void et_grid_attach_margins (GtkGrid *grid, GtkWidget *child, gint left,
-                             gint top, gint width, gint height, gint hmargin,
-                             gint vmargin);
-
-GtkWidget * et_progress_bar_new (void);
-
-G_END_DECLS
-
-#endif /* GTK2_COMPAT_H_ */
diff --git a/src/id3_tag.h b/src/id3_tag.h
deleted file mode 100644
index 9424506..0000000
--- a/src/id3_tag.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* id3tag.h - 2001/02/16 */
-/*
- *  EasyTAG - Tag editor for MP3 and Ogg Vorbis files
- *  Copyright (C) 2001-2003  Jerome Couderc <easytag at gmail.com>
- *
- *  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
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-
-#ifndef __ID3TAG_H__
-#define __ID3TAG_H__
-
-
-#include <glib.h>
-#include "et_core.h"
-
-
-/****************
- * Declarations *
- ****************/
-#define ID3_INVALID_GENRE 255
-
-
-/**************
- * Prototypes *
- **************/
-gboolean Id3tag_Read_File_Tag (const gchar *filename, File_Tag *FileTag);
-gboolean Id3tag_Write_File_v24Tag (ET_File *ETFile);
-gboolean Id3tag_Write_File_Tag    (ET_File *ETFile);
-
-gchar   *Id3tag_Genre_To_String (unsigned char genre_code);
-guchar   Id3tag_String_To_Genre (gchar *genre);
-
-gchar *et_id3tag_get_tpos_from_file_tag (File_Tag *file_tag);
-
-#endif /* __ID3TAG_H__ */
diff --git a/src/load_files_dialog.c b/src/load_files_dialog.c
new file mode 100644
index 0000000..0c3a2d6
--- /dev/null
+++ b/src/load_files_dialog.c
@@ -0,0 +1,1111 @@
+/* EasyTAG - tag editor for audio files
+ * Copyright (C) 2013,2014  David King <amigadave at amigadave.com>
+ *
+ * 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 (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+#include "config.h"
+
+#include "load_files_dialog.h"
+
+#include <gdk/gdkkeysyms.h>
+#include <glib/gi18n.h>
+
+#include "application_window.h"
+#include "browser.h"
+#include "charset.h"
+#include "easytag.h"
+#include "log.h"
+#include "misc.h"
+#include "picture.h"
+#include "scan_dialog.h"
+#include "setting.h"
+
+/* TODO: Use G_DEFINE_TYPE_WITH_PRIVATE. */
+G_DEFINE_TYPE (EtLoadFilesDialog, et_load_files_dialog, GTK_TYPE_DIALOG)
+
+#define et_load_files_dialog_get_instance_private(dialog) (dialog->priv)
+
+static const guint BOX_SPACING = 6;
+
+enum
+{
+    LOAD_FILE_CONTENT_TEXT,
+    LOAD_FILE_CONTENT_COUNT
+};
+
+enum
+{
+    LOAD_FILE_NAME_TEXT,
+    LOAD_FILE_NAME_POINTER,
+    LOAD_FILE_NAME_COUNT
+};
+
+struct _EtLoadFilesDialogPrivate
+{
+    GtkWidget *file_chooser;
+    GtkWidget *load_file_content_view;
+    GtkListStore *load_file_content_model;
+    GtkWidget *load_file_content_menu;
+    GtkWidget *load_file_name_view;
+    GtkListStore *load_file_name_model;
+    GtkWidget *load_file_name_menu;
+
+    GtkWidget *selected_line_entry;
+};
+
+
+/*
+ * Set the new filename of each file.
+ * Associate lines from priv->load_file_content_view with priv->load_file_name_view
+ */
+static void
+Load_Filename_Set_Filenames (EtLoadFilesDialog *self)
+{
+    EtLoadFilesDialogPrivate *priv;
+    gint row;
+    ET_File *ETFile = NULL;
+    File_Name *FileName;
+    gchar *list_text = NULL;
+    gint rowcount;
+    gboolean found;
+
+    GtkTreePath *currentPath = NULL;
+    GtkTreeIter iter_name;
+    GtkTreeIter iter_content;
+
+    priv = et_load_files_dialog_get_instance_private (self);
+
+    if ( !ETCore->ETFileList || !priv->load_file_content_view || !priv->load_file_name_view)
+        return;
+
+    /* Save current file */
+    ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
+
+    rowcount = MIN(gtk_tree_model_iter_n_children(GTK_TREE_MODEL(priv->load_file_name_model), NULL),
+                   gtk_tree_model_iter_n_children(GTK_TREE_MODEL(priv->load_file_content_model), NULL));
+
+    for (row=0; row < rowcount; row++)
+    {
+        if (row == 0)
+            currentPath = gtk_tree_path_new_first();
+        else
+            gtk_tree_path_next(currentPath);
+
+        found = gtk_tree_model_get_iter(GTK_TREE_MODEL(priv->load_file_name_model), &iter_name, currentPath);
+        if (found)
+            gtk_tree_model_get(GTK_TREE_MODEL(priv->load_file_name_model), &iter_name, 
+                               LOAD_FILE_NAME_POINTER, &ETFile, -1);
+
+        found = gtk_tree_model_get_iter(GTK_TREE_MODEL(priv->load_file_content_model), &iter_content, currentPath);
+        if (found)
+            gtk_tree_model_get(GTK_TREE_MODEL(priv->load_file_content_model), &iter_content, 
+                               LOAD_FILE_CONTENT_TEXT, &list_text, -1);
+
+        if (ETFile && list_text && (g_utf8_strlen (list_text, -1) > 0))
+        {
+            gchar *list_text_tmp;
+            gchar *filename_new_utf8;
+
+            list_text_tmp = g_strdup(list_text);
+            ET_File_Name_Convert_Character(list_text_tmp); // Replace invalid characters
+
+            /* Build the filename with the path */
+            filename_new_utf8 = ET_File_Name_Generate(ETFile,list_text_tmp);
+            g_free(list_text_tmp);
+
+            /* Set the new filename */
+            // Create a new 'File_Name' item
+            FileName = ET_File_Name_Item_New();
+            // Save changes of the 'File_Name' item
+            ET_Set_Filename_File_Name_Item(FileName,filename_new_utf8,NULL);
+            ET_Manage_Changes_Of_File_Data(ETFile,FileName,NULL);
+
+            g_free(filename_new_utf8);
+
+            /* Then run current scanner if requested. */
+            if (g_settings_get_boolean (MainSettings,
+                                        "load-filenames-run-scanner"))
+            {
+                EtScanDialog *dialog;
+
+                dialog = ET_SCAN_DIALOG (et_application_window_get_scan_dialog (ET_APPLICATION_WINDOW (MainWindow)));
+
+                if (dialog)
+                {
+                    Scan_Select_Mode_And_Run_Scanner (dialog, ETFile);
+                }
+            }
+        }
+        g_free(list_text);
+    }
+
+    gtk_tree_path_free(currentPath);
+
+    et_application_window_browser_refresh_list (ET_APPLICATION_WINDOW (MainWindow));
+    ET_Display_File_Data_To_UI(ETCore->ETFileDisplayed);
+}
+
+/*
+ * on_response:
+ * @dialog: the dialog which emitted the response signal
+ * @response_id: the response ID
+ * @user_data: user data set when the signal was connected
+ *
+ * Signal handler for the load filenames from text file dialog.
+ */
+static void
+on_response (GtkDialog *dialog, gint response_id, gpointer user_data)
+{
+    switch (response_id)
+    {
+        case GTK_RESPONSE_APPLY:
+            Load_Filename_Set_Filenames (ET_LOAD_FILES_DIALOG (dialog));
+            break;
+        case GTK_RESPONSE_CANCEL:
+            gtk_widget_hide (GTK_WIDGET (dialog));
+            break;
+        case GTK_RESPONSE_DELETE_EVENT:
+            break;
+        default:
+            g_assert_not_reached ();
+    }
+}
+
+/*
+ * To enable/disable sensitivity of the button 'Load'
+ */
+static void
+set_load_button_sensitivity (GtkWidget *button, GtkWidget *chooser)
+{
+    GFile *file;
+    GFileInfo *info;
+    GError *error = NULL;
+
+    g_return_if_fail (button != NULL && chooser != NULL);
+
+    file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (chooser));
+
+    if (!file)
+    {
+        gtk_widget_set_sensitive (GTK_WIDGET (button), FALSE);
+        return;
+    }
+
+    info = g_file_query_info (file, G_FILE_ATTRIBUTE_STANDARD_TYPE,
+                              G_FILE_QUERY_INFO_NONE, NULL, &error);
+    g_object_unref (file);
+
+    if (info && G_FILE_TYPE_REGULAR == g_file_info_get_file_type (info))
+    {
+        gtk_widget_set_sensitive (GTK_WIDGET (button), TRUE);
+    }
+    else
+    {
+        gtk_widget_set_sensitive (GTK_WIDGET (button), FALSE);
+
+        if (!info)
+        {
+            Log_Print (LOG_ERROR, _("Cannot query file information ‘%s’"),
+                       error->message);
+            g_error_free (error);
+            return;
+        }
+    }
+
+    g_object_unref (info);
+}
+
+/*
+ * Load content of the file into the priv->load_file_content_view list
+ */
+static void
+Load_File_Content (G_GNUC_UNUSED GtkButton *button, gpointer user_data)
+{
+    EtLoadFilesDialogPrivate *priv;
+    GFile *file;
+    GFileInputStream *istream;
+    GDataInputStream *data;
+    GError *error = NULL;
+    gsize size_read;
+    gchar *path;
+    gchar *filename_utf8;
+    gchar *line;
+    gchar *valid;
+
+    priv = et_load_files_dialog_get_instance_private (ET_LOAD_FILES_DIALOG (user_data));
+    file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (priv->file_chooser));
+
+    /* The file to read. */
+    path = g_file_get_path (file);
+    filename_utf8 = filename_to_display (path);
+    g_free (path);
+
+    istream = g_file_read (file, NULL, &error);
+    g_object_unref (file);
+
+    if (!istream)
+    {
+        Log_Print (LOG_ERROR, _("Cannot open file ‘%s’: %s"), filename_utf8,
+                   error->message);
+        g_error_free (error);
+        g_object_unref (file);
+        g_free (filename_utf8);
+        return;
+    }
+
+    g_free (filename_utf8);
+    data = g_data_input_stream_new (G_INPUT_STREAM (istream));
+    /* TODO: Find a safer alternative to _ANY. */
+    g_data_input_stream_set_newline_type (data,
+                                          G_DATA_STREAM_NEWLINE_TYPE_ANY);
+    gtk_list_store_clear (priv->load_file_content_model);
+
+    while ((line = g_data_input_stream_read_line (data, &size_read, NULL,
+                                                  &error)))
+    {
+        /* FIXME: This should use the GLib filename encoding, not UTF-8. */
+        valid = Try_To_Validate_Utf8_String (line);
+        g_free (line);
+
+        gtk_list_store_insert_with_values (priv->load_file_content_model, NULL,
+                                           G_MAXINT, LOAD_FILE_CONTENT_TEXT,
+                                           valid, -1);
+        g_free (valid);
+    }
+
+    if (error)
+    {
+        Log_Print (LOG_ERROR, _("Error reading file ‘%s’"), error->message);
+        g_error_free (error);
+    }
+
+    g_object_unref (data);
+    g_object_unref (istream);
+}
+
+/*
+ * Delete the selected line in the treeview passed as parameter
+ */
+static void
+Load_Filename_List_Delete_Line (GtkWidget *treeview)
+{
+    GtkTreeSelection *selection;
+    GtkTreeIter selectedIter, itercopy;
+    GtkTreeModel *model;
+    gboolean rowafter;
+
+    g_return_if_fail (treeview != NULL);
+
+    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
+
+    if (gtk_tree_selection_get_selected(selection, &model, &selectedIter) != TRUE)
+    {
+        return;
+    }
+
+    // If there is a line following the one about to be removed, select it for convenience
+    itercopy = selectedIter;
+    rowafter = gtk_tree_model_iter_next(model, &itercopy);
+
+    // Remove the line to be deleted
+    gtk_list_store_remove(GTK_LIST_STORE(model), &selectedIter);
+
+    if (rowafter)
+        gtk_tree_selection_select_iter(selection, &itercopy);
+}
+
+/*
+ * Insert a blank line before the selected line in the treeview passed as parameter
+ */
+static void
+Load_Filename_List_Insert_Blank_Line (GtkWidget *treeview)
+{
+    GtkTreeSelection *selection;
+    GtkTreeIter selectedIter;
+    GtkTreeIter *temp;
+    GtkTreeModel *model;
+
+    g_return_if_fail (treeview != NULL);
+
+    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
+
+    if (gtk_tree_selection_get_selected(selection, &model, &selectedIter) != TRUE)
+        return;
+
+    temp = &selectedIter; /* Not used here, but it must be non-NULL to keep GTK+ happy! */
+    gtk_list_store_insert_before(GTK_LIST_STORE(model), temp, &selectedIter);
+}
+
+static gboolean
+Load_Filename_List_Key_Press (GtkWidget *treeview, GdkEvent *event)
+{
+    if (event && event->type == GDK_KEY_PRESS)
+    {
+        GdkEventKey *kevent = (GdkEventKey *)event;
+
+        switch(kevent->keyval)
+        {
+            case GDK_KEY_Delete:
+                Load_Filename_List_Delete_Line(treeview);
+                return GDK_EVENT_STOP;
+                break;
+            case GDK_KEY_I:
+            case GDK_KEY_i:
+                Load_Filename_List_Insert_Blank_Line(treeview);
+                return GDK_EVENT_STOP;
+                break;
+        }
+    }
+
+    return GDK_EVENT_PROPAGATE;
+}
+
+/*
+ * Delete all blank lines in the treeview passed as parameter
+ */
+static void
+Load_Filename_List_Delete_All_Blank_Lines (GtkWidget *treeview)
+{
+    gchar *text = NULL;
+    GtkTreeIter iter;
+    GtkTreeModel *model;
+
+    model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeview));
+
+    if (!gtk_tree_model_get_iter_first(model, &iter))
+        return;
+
+    while (TRUE)
+    {
+        gtk_tree_model_get(model, &iter, LOAD_FILE_NAME_TEXT, &text, -1);
+
+        /* Check for blank entry */
+        if (!text || g_utf8_strlen(text, -1) == 0)
+        {
+            g_free(text);
+
+            if (!gtk_list_store_remove(GTK_LIST_STORE(model), &iter))
+                break;
+            else
+                continue;
+        }
+        g_free(text);
+
+        if (!gtk_tree_model_iter_next(model, &iter))
+            break;
+    }
+}
+
+/*
+ * Move up the selected line in the treeview passed as parameter
+ */
+static void
+Load_Filename_List_Move_Up (GtkWidget *treeview)
+{
+    GtkTreeSelection *selection;
+    GList *selectedRows;
+    GList *l;
+    GtkTreeIter currentFile;
+    GtkTreeIter nextFile;
+    GtkTreePath *currentPath;
+    GtkTreeModel *treemodel;
+
+    g_return_if_fail (treeview != NULL);
+
+    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
+    treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(treeview));
+    selectedRows = gtk_tree_selection_get_selected_rows(selection, NULL);
+
+    if (!selectedRows)
+    {
+        return;
+    }
+
+    for (l = selectedRows; l != NULL; l = g_list_next (l))
+    {
+        currentPath = (GtkTreePath *)l->data;
+
+        if (gtk_tree_model_get_iter (treemodel, &currentFile, currentPath))
+        {
+            // Find the entry above the node...
+            if (gtk_tree_path_prev(currentPath))
+            {
+                // ...and if it exists, swap the two rows by iter
+                gtk_tree_model_get_iter(treemodel, &nextFile, currentPath);
+                gtk_list_store_swap(GTK_LIST_STORE(treemodel), &currentFile, &nextFile);
+            }
+        }
+    }
+
+    g_list_free_full (selectedRows, (GDestroyNotify)gtk_tree_path_free);
+}
+
+/*
+ * Move down the selected line in the treeview passed as parameter
+ */
+static void
+Load_Filename_List_Move_Down (GtkWidget *treeview)
+{
+    GtkTreeSelection *selection;
+    GList *selectedRows;
+    GList *l;
+    GtkTreeIter currentFile;
+    GtkTreeIter nextFile;
+    GtkTreePath *currentPath;
+    GtkTreeModel *treemodel;
+
+    g_return_if_fail (treeview != NULL);
+
+    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
+    treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(treeview));
+    selectedRows = gtk_tree_selection_get_selected_rows(selection, NULL);
+
+    if (!selectedRows)
+    {
+        return;
+    }
+
+    for (l = selectedRows; l != NULL; l = g_list_next (l))
+    {
+        currentPath = (GtkTreePath *)l->data;
+
+        if (gtk_tree_model_get_iter (treemodel, &currentFile, currentPath))
+        {
+            // Find the entry below the node and swap the two nodes by iter
+            gtk_tree_path_next(currentPath);
+            if (gtk_tree_model_get_iter(treemodel, &nextFile, currentPath))
+                gtk_list_store_swap(GTK_LIST_STORE(treemodel), &currentFile, &nextFile);
+        }
+    }
+
+    g_list_free_full (selectedRows, (GDestroyNotify)gtk_tree_path_free);
+}
+
+/*
+ * Load the names of the current list of files
+ */
+static void
+Load_File_List (EtLoadFilesDialog *self)
+{
+    EtLoadFilesDialogPrivate *priv;
+    GList *l;
+    ET_File *etfile;
+    gchar *filename_utf8;
+    gchar *pos;
+
+    priv = et_load_files_dialog_get_instance_private (self);
+
+    gtk_list_store_clear(priv->load_file_name_model);
+
+    for (l = g_list_first (ETCore->ETFileList); l != NULL; l = g_list_next (l))
+    {
+        etfile = (ET_File *)l->data;
+        filename_utf8 = g_path_get_basename(((File_Name *)etfile->FileNameNew->data)->value_utf8);
+        // Remove the extension ('filename' must be allocated to don't affect the initial value)
+        if ((pos=strrchr(filename_utf8,'.'))!=NULL)
+            *pos = 0;
+        gtk_list_store_insert_with_values (priv->load_file_name_model, NULL,
+                                           G_MAXINT, LOAD_FILE_NAME_TEXT,
+                                           filename_utf8,
+                                           LOAD_FILE_NAME_POINTER, l->data,
+                                           -1);
+        g_free(filename_utf8);
+    }
+}
+
+static void
+on_load_file_name_view_reload_clicked (G_GNUC_UNUSED GtkButton *button,
+                                       gpointer user_data)
+{
+    Load_File_List (ET_LOAD_FILES_DIALOG (user_data));
+}
+
+static void
+on_load_file_content_view_reload_clicked (G_GNUC_UNUSED GtkButton *button,
+                                          gpointer user_data)
+{
+    Load_File_Content (NULL, ET_LOAD_FILES_DIALOG (user_data));
+}
+
+/*
+ * To select the corresponding row in the other list
+ */
+static void
+Load_Filename_Select_Row_In_Other_List (GtkWidget* treeview_target,
+                                        GtkTreeSelection *selection_orig)
+{
+    GtkAdjustment *ct_adj, *ce_adj;
+    GtkTreeSelection *selection_target;
+    GtkTreeView *treeview_orig;
+    GtkTreeModel *treemodel_orig;
+    GtkTreeModel *treemodel_target;
+    GtkTreeIter iter_orig;
+    GtkTreeIter iter_target;
+    GtkTreePath *path_orig;
+    gint *indices_orig;
+    gchar *stringiter;
+
+    g_return_if_fail (treeview_target != NULL && selection_orig != NULL);
+
+    selection_target = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview_target));
+    treemodel_target = gtk_tree_view_get_model(GTK_TREE_VIEW(treeview_target));
+
+    if (!gtk_tree_selection_get_selected(selection_orig, &treemodel_orig, &iter_orig))
+        return; /* Might be called with no selection */
+
+    treeview_orig = gtk_tree_selection_get_tree_view(selection_orig);
+    path_orig = gtk_tree_model_get_path(treemodel_orig, &iter_orig);
+    gtk_tree_selection_unselect_all(selection_target);
+
+    /* Synchronize the two lists. */
+    ce_adj = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (treeview_orig));
+    ct_adj = gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(treeview_target));
+
+    if (gtk_adjustment_get_upper(GTK_ADJUSTMENT(ct_adj)) >= gtk_adjustment_get_page_size(GTK_ADJUSTMENT(ct_adj))
+    &&  gtk_adjustment_get_upper(GTK_ADJUSTMENT(ce_adj)) >= gtk_adjustment_get_page_size(GTK_ADJUSTMENT(ce_adj)))
+    {
+        // Rules are displayed in the both clist
+        if (gtk_adjustment_get_value(GTK_ADJUSTMENT(ce_adj)) <= gtk_adjustment_get_upper(GTK_ADJUSTMENT(ct_adj)) - gtk_adjustment_get_page_size(GTK_ADJUSTMENT(ct_adj)))
+        {
+            gtk_adjustment_set_value(GTK_ADJUSTMENT(ct_adj),gtk_adjustment_get_value(GTK_ADJUSTMENT(ce_adj)));
+        } else
+        {
+            gtk_adjustment_set_value(GTK_ADJUSTMENT(ct_adj),gtk_adjustment_get_upper(GTK_ADJUSTMENT(ct_adj)) - gtk_adjustment_get_page_size(GTK_ADJUSTMENT(ct_adj)));
+            indices_orig = gtk_tree_path_get_indices(path_orig);
+
+            if (indices_orig[0] <= (gtk_tree_model_iter_n_children(treemodel_target, NULL) - 1))
+                gtk_adjustment_set_value(GTK_ADJUSTMENT(ce_adj),gtk_adjustment_get_value(GTK_ADJUSTMENT(ct_adj)));
+
+        }
+    }else if (gtk_adjustment_get_upper(GTK_ADJUSTMENT(ct_adj)) < gtk_adjustment_get_page_size(GTK_ADJUSTMENT(ct_adj))) // Target Clist rule not visible
+    {
+        indices_orig = gtk_tree_path_get_indices(path_orig);
+
+        if (indices_orig[0] <= (gtk_tree_model_iter_n_children(treemodel_target, NULL) - 1))
+            gtk_adjustment_set_value(GTK_ADJUSTMENT(ce_adj),gtk_adjustment_get_value(GTK_ADJUSTMENT(ct_adj)));
+    }
+
+    // Must block the select signal of the target to avoid looping
+    g_signal_handlers_block_by_func(G_OBJECT(selection_target), G_CALLBACK(Load_Filename_Select_Row_In_Other_List), G_OBJECT(treeview_orig));
+
+    stringiter = gtk_tree_model_get_string_from_iter(treemodel_orig, &iter_orig);
+    if (gtk_tree_model_get_iter_from_string(treemodel_target, &iter_target, stringiter))
+    {
+        gtk_tree_selection_select_iter(selection_target, &iter_target);
+    }
+
+    g_free(stringiter);
+    g_signal_handlers_unblock_by_func(G_OBJECT(selection_target), G_CALLBACK(Load_Filename_Select_Row_In_Other_List), G_OBJECT(treeview_orig));
+}
+
+static void
+create_load_file_content_view_popup (EtLoadFilesDialog *self)
+{
+    EtLoadFilesDialogPrivate *priv;
+    GtkWidget *list;
+    GtkWidget *BrowserPopupMenu;
+    GtkWidget *MenuItem;
+
+    priv = et_load_files_dialog_get_instance_private (self);
+    list = priv->load_file_name_view;
+
+    BrowserPopupMenu = gtk_menu_new();
+    gtk_menu_attach_to_widget (GTK_MENU (BrowserPopupMenu), list, NULL);
+    
+    MenuItem = gtk_menu_item_new_with_label(_("Insert a blank line"));
+    gtk_menu_shell_append(GTK_MENU_SHELL(BrowserPopupMenu), MenuItem);
+    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate", G_CALLBACK(Load_Filename_List_Insert_Blank_Line), G_OBJECT(list));
+
+    MenuItem = gtk_menu_item_new_with_label(_("Delete this line"));
+    gtk_menu_shell_append(GTK_MENU_SHELL(BrowserPopupMenu),MenuItem);
+    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate", G_CALLBACK(Load_Filename_List_Delete_Line), G_OBJECT(list));
+
+    MenuItem = gtk_menu_item_new_with_label(_("Delete all blank lines"));
+    gtk_menu_shell_append(GTK_MENU_SHELL(BrowserPopupMenu),MenuItem);
+    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate", G_CALLBACK(Load_Filename_List_Delete_All_Blank_Lines),G_OBJECT(list));
+
+    MenuItem = gtk_menu_item_new();
+    gtk_menu_shell_append(GTK_MENU_SHELL(BrowserPopupMenu),MenuItem);
+
+    MenuItem = gtk_menu_item_new_with_label (_("Move this line up"));
+    gtk_menu_shell_append(GTK_MENU_SHELL(BrowserPopupMenu),MenuItem);
+    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate", G_CALLBACK(Load_Filename_List_Move_Up),G_OBJECT(list));
+
+    MenuItem = gtk_menu_item_new_with_label (_("Move this line down"));
+    gtk_menu_shell_append(GTK_MENU_SHELL(BrowserPopupMenu),MenuItem);
+    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate", G_CALLBACK(Load_Filename_List_Move_Down),G_OBJECT(list));
+
+    MenuItem = gtk_menu_item_new();
+    gtk_menu_shell_append(GTK_MENU_SHELL(BrowserPopupMenu),MenuItem);
+
+    MenuItem = gtk_menu_item_new_with_label(_("Reload"));
+    gtk_menu_shell_append(GTK_MENU_SHELL(BrowserPopupMenu),MenuItem);
+    g_signal_connect (MenuItem, "activate",
+                      G_CALLBACK (on_load_file_name_view_reload_clicked),
+                      self);
+
+    gtk_widget_show_all(BrowserPopupMenu);
+
+    priv->load_file_content_menu = BrowserPopupMenu;
+}
+
+static void
+do_name_view_popup_menu (EtLoadFilesDialog *self,
+                         GdkEventButton *event)
+{
+    EtLoadFilesDialogPrivate *priv;
+    gint button;
+    gint event_time;
+
+    priv = et_load_files_dialog_get_instance_private (self);
+
+    if (event)
+    {
+        button = event->button;
+        event_time = event->time;
+    }
+    else
+    {
+        button = 0;
+        event_time = gtk_get_current_event_time ();
+    }
+
+    /* TODO: Add popup positioning function. */
+    gtk_menu_popup (GTK_MENU (priv->load_file_content_menu), NULL, NULL, NULL,
+                    NULL, button, event_time);
+}
+
+static gboolean
+on_name_view_popup_menu (GtkWidget *treeview,
+                         EtLoadFilesDialog *self)
+{
+    do_name_view_popup_menu (self, NULL);
+
+    return GDK_EVENT_STOP;
+}
+
+/*
+ * Handle button press events from the file name view. */
+static gboolean
+on_name_view_button_press_event (GtkWidget *treeview,
+                                 GdkEventButton *event,
+                                 EtLoadFilesDialog *self)
+{
+    if (gdk_event_triggers_context_menu ((GdkEvent *)event))
+    {
+        do_name_view_popup_menu (self, event);
+
+        return GDK_EVENT_STOP;
+    }
+
+    return GDK_EVENT_PROPAGATE;
+}
+
+static void
+create_load_file_name_view_popup (EtLoadFilesDialog *self)
+{
+    EtLoadFilesDialogPrivate *priv;
+    GtkWidget *list;
+    GtkWidget *BrowserPopupMenu;
+    GtkWidget *MenuItem;
+
+    priv = et_load_files_dialog_get_instance_private (self);
+    list = priv->load_file_content_view;
+
+    BrowserPopupMenu = gtk_menu_new();
+    gtk_menu_attach_to_widget (GTK_MENU (BrowserPopupMenu), list, NULL);
+    
+    MenuItem = gtk_menu_item_new_with_label (_("Insert a blank line"));
+    gtk_menu_shell_append(GTK_MENU_SHELL(BrowserPopupMenu), MenuItem);
+    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate", G_CALLBACK(Load_Filename_List_Insert_Blank_Line), G_OBJECT(list));
+
+    MenuItem = gtk_menu_item_new_with_label (_("Delete this line"));
+    gtk_menu_shell_append(GTK_MENU_SHELL(BrowserPopupMenu),MenuItem);
+    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate", G_CALLBACK(Load_Filename_List_Delete_Line), G_OBJECT(list));
+
+    MenuItem = gtk_menu_item_new_with_label (_("Delete all blank lines"));
+    gtk_menu_shell_append(GTK_MENU_SHELL(BrowserPopupMenu),MenuItem);
+    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate", G_CALLBACK(Load_Filename_List_Delete_All_Blank_Lines),G_OBJECT(list));
+
+    MenuItem = gtk_menu_item_new();
+    gtk_menu_shell_append(GTK_MENU_SHELL(BrowserPopupMenu),MenuItem);
+
+    MenuItem = gtk_menu_item_new_with_label (_("Move this line up"));
+    gtk_menu_shell_append(GTK_MENU_SHELL(BrowserPopupMenu),MenuItem);
+    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate", G_CALLBACK(Load_Filename_List_Move_Up),G_OBJECT(list));
+
+    MenuItem = gtk_menu_item_new_with_label (_("Move this line down"));
+    gtk_menu_shell_append(GTK_MENU_SHELL(BrowserPopupMenu),MenuItem);
+    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate", G_CALLBACK(Load_Filename_List_Move_Down),G_OBJECT(list));
+
+    MenuItem = gtk_menu_item_new();
+    gtk_menu_shell_append(GTK_MENU_SHELL(BrowserPopupMenu),MenuItem);
+
+    MenuItem = gtk_menu_item_new_with_label (_("Reload"));
+    gtk_menu_shell_append(GTK_MENU_SHELL(BrowserPopupMenu),MenuItem);
+    g_signal_connect (MenuItem, "activate",
+                      G_CALLBACK (on_load_file_content_view_reload_clicked),
+                      self);
+
+    gtk_widget_show_all(BrowserPopupMenu);
+
+    priv->load_file_name_menu = BrowserPopupMenu;
+}
+
+static void
+do_content_view_popup_menu (EtLoadFilesDialog *self,
+                            GdkEventButton *event)
+{
+    EtLoadFilesDialogPrivate *priv;
+    gint button;
+    gint event_time;
+
+    priv = et_load_files_dialog_get_instance_private (self);
+
+    if (event)
+    {
+        button = event->button;
+        event_time = event->time;
+    }
+    else
+    {
+        button = 0;
+        event_time = gtk_get_current_event_time ();
+    }
+
+    /* TODO: Add popup positioning function. */
+    gtk_menu_popup (GTK_MENU (priv->load_file_name_menu), NULL, NULL, NULL,
+                    NULL, button, event_time);
+}
+
+static gboolean
+on_content_view_popup_menu (GtkWidget *treeview,
+                            EtLoadFilesDialog *self)
+{
+    do_content_view_popup_menu (self, NULL);
+
+    return GDK_EVENT_STOP;
+}
+
+/*
+ * Handle button press events from the file content view. */
+static gboolean
+on_content_view_button_press_event (GtkWidget *treeview,
+                                    GdkEventButton *event,
+                                    EtLoadFilesDialog *self)
+{
+    if (gdk_event_triggers_context_menu ((GdkEvent *)event))
+    {
+        do_content_view_popup_menu (self, event);
+
+        return GDK_EVENT_STOP;
+    }
+
+    return GDK_EVENT_PROPAGATE;
+}
+
+/*
+ * Update the text of the selected line into the list, with the text entered into the entry
+ */
+static void
+Load_Filename_Update_Text_Line(GtkWidget *entry, GtkWidget *list)
+{
+    GtkTreeIter SelectedRow;
+    GtkTreeSelection *selection;
+    GtkTreeModel *model;
+    gboolean hasSelectedRows;
+
+    g_return_if_fail (entry != NULL || list != NULL);
+
+    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list));
+    hasSelectedRows = gtk_tree_selection_get_selected(selection, &model, &SelectedRow);
+    if (hasSelectedRows)
+    {
+        const gchar *text = gtk_entry_get_text(GTK_ENTRY(entry));
+        gtk_list_store_set(GTK_LIST_STORE(model), &SelectedRow, LOAD_FILE_CONTENT_TEXT, text, -1);
+    }
+}
+
+/*
+ * Set the text of the selected line of the list into the entry
+ */
+static void
+Load_Filename_Edit_Text_Line (GtkTreeSelection *selection, gpointer user_data)
+{
+    EtLoadFilesDialogPrivate *priv;
+    gchar *text;
+    GtkTreeIter selectedIter;
+    GtkEntry *entry;
+    gulong handler;
+
+    priv = et_load_files_dialog_get_instance_private (ET_LOAD_FILES_DIALOG (user_data));
+
+    entry = GTK_ENTRY (priv->selected_line_entry);
+
+    if (gtk_tree_selection_get_selected(selection, NULL, &selectedIter) != TRUE)
+        return;
+
+    gtk_tree_model_get(GTK_TREE_MODEL(priv->load_file_content_model), &selectedIter, LOAD_FILE_NAME_TEXT, &text, -1);
+
+    handler = g_signal_handler_find(entry, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, Load_Filename_Update_Text_Line, NULL);
+    g_signal_handler_block(entry, handler);
+    if (text)
+    {
+        gtk_entry_set_text(entry, text);
+        g_free(text);
+    } else
+        gtk_entry_set_text(entry, "");
+
+    g_signal_handler_unblock(entry, handler);
+}
+
+/*
+ * The window to load the filenames from a txt.
+ */
+static void
+create_load_files_dialog (EtLoadFilesDialog *self)
+{
+    EtLoadFilesDialogPrivate *priv;
+    GtkWidget *content_area;
+    GtkBuilder *builder;
+    GError *error = NULL;
+    GtkWidget *grid;
+    GtkWidget *button;
+    GtkWidget *load_file_run_scanner;
+    const gchar *path;
+
+    priv = et_load_files_dialog_get_instance_private (self);
+
+    gtk_window_set_title (GTK_WINDOW (self),
+                          _("Load Filenames From a Text File"));
+    gtk_window_set_destroy_with_parent (GTK_WINDOW (self), TRUE);
+    gtk_dialog_add_buttons (GTK_DIALOG (self), _("_Close"),
+                            GTK_RESPONSE_CANCEL, _("_Apply"),
+                            GTK_RESPONSE_APPLY, NULL);
+    gtk_dialog_set_default_response (GTK_DIALOG (self), GTK_RESPONSE_APPLY);
+    g_signal_connect (self, "response", G_CALLBACK (on_response), NULL);
+    g_signal_connect (self, "delete-event",
+                      G_CALLBACK (gtk_widget_hide_on_delete), NULL);
+
+    content_area = gtk_dialog_get_content_area (GTK_DIALOG (self));
+    gtk_container_set_border_width (GTK_CONTAINER (self), BOX_SPACING);
+    gtk_box_set_spacing (GTK_BOX (content_area), BOX_SPACING);
+
+    builder = gtk_builder_new ();
+    gtk_builder_add_from_resource (builder,
+                                   "/org/gnome/EasyTAG/load_files_dialog.ui",
+                                   &error);
+
+    if (error != NULL)
+    {
+        g_error ("Unable to get scanner page from resource: %s",
+                 error->message);
+    }
+
+    grid = GTK_WIDGET (gtk_builder_get_object (builder, "file_grid"));
+    gtk_container_add (GTK_CONTAINER (content_area), grid);
+
+    /* File to load. */
+    priv->file_chooser = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                             "file_chooser"));
+    /* Initial value. */
+    if ((path = et_application_window_get_current_path (ET_APPLICATION_WINDOW (MainWindow))) != NULL)
+    {
+        gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (priv->file_chooser),
+                                             path);
+    }
+    // the 'changed' signal is attached below to enable/disable the button to load
+    /* Button 'load'
+     * the signal attached to this button, to load the file, is placed after
+     * the priv->load_file_content_view definition. */
+    button = GTK_WIDGET (gtk_builder_get_object (builder, "file_load_button"));
+    g_signal_connect_swapped (priv->file_chooser, "file-set",
+                              G_CALLBACK (set_load_button_sensitivity),
+                              button);
+
+    /* Content of the loaded file. */
+    priv->load_file_content_model = GTK_LIST_STORE (gtk_builder_get_object (builder,
+                                                                            "file_content_model"));
+    priv->load_file_content_view = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                       "file_content_view"));
+    
+    /* Signal to automatically load the file. */
+    g_signal_connect (button, "clicked", G_CALLBACK (Load_File_Content), self);
+    g_signal_connect (priv->load_file_content_view, "key-press-event",
+                      G_CALLBACK (Load_Filename_List_Key_Press), NULL);
+
+    /* Commands (like the popup menu). */
+    button = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                 "content_insert_blank"));
+    g_signal_connect_swapped (button, "clicked",
+                              G_CALLBACK (Load_Filename_List_Insert_Blank_Line),
+                              G_OBJECT (priv->load_file_content_view));
+
+    button = GTK_WIDGET (gtk_builder_get_object (builder, "content_remove"));
+    g_signal_connect_swapped (button, "clicked",
+                              G_CALLBACK (Load_Filename_List_Delete_Line),
+                              G_OBJECT (priv->load_file_content_view));
+    
+    button = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                 "content_remove_blank"));
+    g_signal_connect_swapped (button, "clicked",
+                              G_CALLBACK (Load_Filename_List_Delete_All_Blank_Lines),
+                              G_OBJECT (priv->load_file_content_view));
+    
+    button = GTK_WIDGET (gtk_builder_get_object (builder, "content_up"));
+    g_signal_connect_swapped (button, "clicked",
+                              G_CALLBACK (Load_Filename_List_Move_Up),
+                              G_OBJECT (priv->load_file_content_view));
+
+    button = GTK_WIDGET (gtk_builder_get_object (builder, "content_down"));
+    g_signal_connect_swapped (button, "clicked",
+                              G_CALLBACK (Load_Filename_List_Move_Down),
+                              G_OBJECT (priv->load_file_content_view));
+
+    button = GTK_WIDGET (gtk_builder_get_object (builder, "content_reload"));
+    g_signal_connect (button, "clicked",
+                      G_CALLBACK (on_load_file_content_view_reload_clicked),
+                      self);
+    
+    /* List of current filenames. */
+    priv->load_file_name_model = GTK_LIST_STORE (gtk_builder_get_object (builder,
+                                                                         "file_name_model"));
+    priv->load_file_name_view = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                    "file_name_view"));
+    
+    g_signal_connect (priv->load_file_name_view, "key-press-event",
+                      G_CALLBACK (Load_Filename_List_Key_Press), NULL);
+
+    /* Signals to 'select' the same row into the other list (to show the
+     * corresponding filenames). */
+    g_signal_connect_swapped (gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->load_file_content_view)),
+                              "changed",
+                              G_CALLBACK (Load_Filename_Select_Row_In_Other_List),
+                              priv->load_file_name_view);
+    g_signal_connect_swapped (gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->load_file_name_view)),
+                              "changed",
+                              G_CALLBACK (Load_Filename_Select_Row_In_Other_List),
+                              priv->load_file_content_view);
+
+    /* Commands (like the popup menu). */
+    button = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                 "name_insert_blank"));
+    g_signal_connect_swapped (button, "clicked",
+                              G_CALLBACK (Load_Filename_List_Insert_Blank_Line),
+                              priv->load_file_name_view);
+
+    button = GTK_WIDGET (gtk_builder_get_object (builder, "name_remove"));
+    g_signal_connect_swapped (button, "clicked",
+                              G_CALLBACK (Load_Filename_List_Delete_Line),
+                              priv->load_file_name_view);
+
+    button = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                 "name_remove_blank"));
+    g_signal_connect_swapped (button, "clicked",
+                              G_CALLBACK (Load_Filename_List_Delete_All_Blank_Lines),
+                              priv->load_file_name_view);
+    
+    button = GTK_WIDGET (gtk_builder_get_object (builder, "name_up"));
+    g_signal_connect_swapped (button, "clicked",
+                              G_CALLBACK (Load_Filename_List_Move_Up),
+                              priv->load_file_name_view);
+
+    button = GTK_WIDGET (gtk_builder_get_object (builder, "name_down"));
+    g_signal_connect_swapped (button, "clicked",
+                              G_CALLBACK (Load_Filename_List_Move_Down),
+                              priv->load_file_name_view);
+
+    button = GTK_WIDGET (gtk_builder_get_object (builder, "name_reload"));
+    g_signal_connect (button, "clicked",
+                      G_CALLBACK (on_load_file_name_view_reload_clicked),
+                      self);
+    
+    /* Load the list of files in the list widget. */
+    Load_File_List (self);
+
+    /* Create popup menus. */
+    create_load_file_content_view_popup (self);
+    create_load_file_name_view_popup (self);
+    g_signal_connect (priv->load_file_content_view, "button-press-event",
+                      G_CALLBACK (on_content_view_button_press_event), self);
+    g_signal_connect (priv->load_file_content_view, "popup-menu",
+                      G_CALLBACK (on_content_view_popup_menu), self);
+    g_signal_connect (priv->load_file_name_view, "button-press-event",
+                      G_CALLBACK (on_name_view_button_press_event), self);
+    g_signal_connect (priv->load_file_name_view, "popup-menu",
+                      G_CALLBACK (on_name_view_popup_menu), self);
+
+    /* Entry to edit a line in the list. */
+    priv->selected_line_entry = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                    "file_entry"));
+    g_signal_connect (priv->selected_line_entry, "changed",
+                      G_CALLBACK (Load_Filename_Update_Text_Line),
+                      G_OBJECT (priv->load_file_content_view));
+
+    /* Signal to load the line text in the editing entry. */
+    g_signal_connect (gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->load_file_content_view)),
+                      "changed", G_CALLBACK (Load_Filename_Edit_Text_Line),
+                      self);
+
+    load_file_run_scanner = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                "file_scanner_check"));
+    g_settings_bind (MainSettings, "load-filenames-run-scanner",
+                     load_file_run_scanner, "active", G_SETTINGS_BIND_DEFAULT);
+
+    g_object_unref (builder);
+
+    /* To initialize load button sensitivity. */
+    g_signal_emit_by_name (G_OBJECT (priv->file_chooser), "file-set");
+}
+
+static void
+et_load_files_dialog_finalize (GObject *object)
+{
+    G_OBJECT_CLASS (et_load_files_dialog_parent_class)->finalize (object);
+}
+
+static void
+et_load_files_dialog_init (EtLoadFilesDialog *self)
+{
+    self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, ET_TYPE_LOAD_FILES_DIALOG,
+                                              EtLoadFilesDialogPrivate);
+
+    create_load_files_dialog (self);
+}
+
+static void
+et_load_files_dialog_class_init (EtLoadFilesDialogClass *klass)
+{
+    G_OBJECT_CLASS (klass)->finalize = et_load_files_dialog_finalize;
+
+    g_type_class_add_private (klass, sizeof (EtLoadFilesDialogPrivate));
+}
+
+/*
+ * et_load_files_dialog_new:
+ *
+ * Create a new EtLoadFilesDialog instance.
+ *
+ * Returns: a new #EtLoadFilesDialog
+ */
+EtLoadFilesDialog *
+et_load_files_dialog_new (GtkWindow *parent)
+{
+    g_return_val_if_fail (GTK_WINDOW (parent), NULL);
+
+    return g_object_new (ET_TYPE_LOAD_FILES_DIALOG, "transient-for", parent,
+                         NULL);
+}
diff --git a/src/application.h b/src/load_files_dialog.h
similarity index 53%
copy from src/application.h
copy to src/load_files_dialog.h
index c3a1858..d455b1d 100644
--- a/src/application.h
+++ b/src/load_files_dialog.h
@@ -16,39 +16,38 @@
  * Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 
-#ifndef ET_APPLICATION_H_
-#define ET_APPLICATION_H_
+#ifndef ET_LOAD_FILES_DIALOG_H_
+#define ET_LOAD_FILES_DIALOG_H_
 
-#include <gio/gio.h>
 #include <gtk/gtk.h>
 
 G_BEGIN_DECLS
 
-#define ET_TYPE_APPLICATION (et_application_get_type ())
-#define ET_APPLICATION(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), ET_TYPE_APPLICATION, EtApplication))
+#include "et_core.h"
 
-typedef struct _EtApplication EtApplication;
-typedef struct _EtApplicationClass EtApplicationClass;
-typedef struct _EtApplicationPrivate EtApplicationPrivate;
+#define ET_TYPE_LOAD_FILES_DIALOG (et_load_files_dialog_get_type ())
+#define ET_LOAD_FILES_DIALOG(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), ET_TYPE_LOAD_FILES_DIALOG, EtLoadFilesDialog))
 
-struct _EtApplication
+typedef struct _EtLoadFilesDialog EtLoadFilesDialog;
+typedef struct _EtLoadFilesDialogClass EtLoadFilesDialogClass;
+typedef struct _EtLoadFilesDialogPrivate EtLoadFilesDialogPrivate;
+
+struct _EtLoadFilesDialog
 {
     /*< private >*/
-    GApplication parent_instance;
-    EtApplicationPrivate *priv;
+    GtkDialog parent_instance;
+    EtLoadFilesDialogPrivate *priv;
 };
 
-struct _EtApplicationClass
+struct _EtLoadFilesDialogClass
 {
     /*< private >*/
-    GApplicationClass parent_class;
+    GtkDialogClass parent_class;
 };
 
-GType et_application_get_type (void);
-EtApplication *et_application_new (void);
-GtkWindow *et_application_get_window (EtApplication *application);
-void et_application_set_window (EtApplication *application, GtkWindow *window);
+GType et_load_files_dialog_get_type (void);
+EtLoadFilesDialog *et_load_files_dialog_new (GtkWindow *parent);
 
 G_END_DECLS
 
-#endif /* !ET_APPLICATION_H_ */
+#endif /* !ET_LOAD_FILES_DIALOG_H_ */
diff --git a/src/log.c b/src/log.c
index 1ab65f0..bc8c7fa 100644
--- a/src/log.c
+++ b/src/log.c
@@ -1,21 +1,20 @@
-/* log.c - 2007/03/25 */
-/*
- *  EasyTAG - Tag editor for MP3 and Ogg Vorbis files
- *  Copyright (C) 2000-2007  Jerome Couderc <easytag at gmail.com>
+/* EasyTAG - Tag editor for audio files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ * Copyright (C) 2000-2007  Jerome Couderc <easytag at gmail.com>
  *
- *  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
- *  (at your option) any later version.
+ * 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
+ * (at your option) any later version.
  *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
  *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
 #include <config.h>
@@ -30,57 +29,56 @@
 #include <unistd.h>
 
 #include "log.h"
+#include "application_window.h"
 #include "easytag.h"
-#include "bar.h"
 #include "setting.h"
 #include "charset.h"
 
 #include "win32/win32dep.h"
 
+/* TODO: Use G_DEFINE_TYPE_WITH_PRIVATE. */
+G_DEFINE_TYPE (EtLogArea, et_log_area, GTK_TYPE_BIN)
 
-/****************
- * Declarations *
- ****************/
+#define et_log_area_get_instance_private(self) (self->priv)
 
-static GtkWidget *LogList = NULL;
-static GtkListStore *logListModel;
-/* Temporary list to store messages for the LogList when this control was not
- * yet created. */
-static GList *LogPrintTmpList = NULL;
+struct _EtLogAreaPrivate
+{
+    GtkWidget *log_view;
+    GtkListStore *log_model;
+    /* Temporary list to store messages for the LogList when this control was
+     * not yet created. */
+    GList *log_tmp_list;
+
+    /* Popup menu. */
+    GtkWidget *menu;
+};
 
 enum
 {
-    LOG_PIXBUF,
+    LOG_ICON_NAME,
     LOG_TIME_TEXT,
     LOG_TEXT,
-    LOG_ROW_BACKGROUND,
-    LOG_ROW_FOREGROUND,
     LOG_COLUMN_COUNT
 };
 
-// File for log
+/* File for log. */
 static const gchar LOG_FILE[] = "easytag.log";
 
 // Structure used to store information for the temporary list
-typedef struct _Log_Data Log_Data;
-struct _Log_Data
+typedef struct
 {
-    gchar         *time;    /* The time of this line of log */
-    Log_Error_Type error_type;
-    gchar         *string;  /* The string of the line of log to display */
-};
+    gchar *time;    /* The time of this line of log */
+    EtLogAreaKind error_type;
+    gchar *string;  /* The string of the line of log to display */
+} EtLogAreaData;
 
 
 /**************
  * Prototypes *
  **************/
-static gboolean Log_Popup_Menu_Handler (GtkWidget *treeview,
-                                        GdkEventButton *event, GtkMenu *menu);
-static void Log_List_Set_Row_Visible (GtkTreeModel *treeModel,
-                                      GtkTreeIter *rowIter);
-static void Log_Print_Tmp_List (void);
+static void Log_List_Set_Row_Visible (EtLogArea *self, GtkTreeIter *rowIter);
+static void Log_Print_Tmp_List (EtLogArea *self);
 static gchar *Log_Format_Date (void);
-static gchar *Log_Get_Stock_Id_From_Error_Type (Log_Error_Type error_type);
 
 
 
@@ -88,109 +86,137 @@ static gchar *Log_Get_Stock_Id_From_Error_Type (Log_Error_Type error_type);
  * Functions *
  *************/
 
-GtkWidget *Create_Log_Area (void)
+static void
+do_popup_menu (EtLogArea *self,
+               GdkEventButton *event)
 {
-    GtkWidget *Frame;
-    GtkWidget *ScrollWindowLogList;
-    GtkCellRenderer *renderer;
-    GtkTreeViewColumn *column;
-    GtkWidget *PopupMenu;
+    EtLogAreaPrivate *priv;
+    gint button;
+    gint event_time;
 
+    priv = et_log_area_get_instance_private (self);
 
-    Frame = gtk_frame_new(_("Log"));
-    gtk_container_set_border_width(GTK_CONTAINER(Frame), 2);
+    if (event)
+    {
+        button = event->button;
+        event_time = event->time;
+    }
+    else
+    {
+        button = 0;
+        event_time = gtk_get_current_event_time ();
+    }
 
-    /*
-     * The ScrollWindow and the List
-     */
-    ScrollWindowLogList = gtk_scrolled_window_new(NULL,NULL);
-    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(ScrollWindowLogList),
-                                   GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
-    gtk_container_add(GTK_CONTAINER(Frame),ScrollWindowLogList);
-
-    /* The file list */
-    logListModel = gtk_list_store_new(LOG_COLUMN_COUNT,
-                                      G_TYPE_STRING,
-                                      G_TYPE_STRING,
-                                      G_TYPE_STRING,
-                                      GDK_TYPE_COLOR,
-                                      GDK_TYPE_COLOR);
-
-    LogList = gtk_tree_view_new_with_model(GTK_TREE_MODEL(logListModel));
-    g_object_unref (logListModel);
-    gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(LogList), FALSE);
-    gtk_container_add(GTK_CONTAINER(ScrollWindowLogList), LogList);
-    gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(LogList), FALSE);
-    gtk_widget_set_size_request(LogList, 0, 0);
-    gtk_tree_view_set_reorderable(GTK_TREE_VIEW(LogList), FALSE);
-    gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(LogList)),GTK_SELECTION_MULTIPLE);
-
-    column = gtk_tree_view_column_new();
-    gtk_tree_view_append_column(GTK_TREE_VIEW(LogList), column);
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-
-    renderer = gtk_cell_renderer_pixbuf_new();
-    gtk_tree_view_column_pack_start(column, renderer, FALSE);
-    gtk_tree_view_column_set_attributes(column, renderer,
-                                       "stock-id", LOG_PIXBUF,
-                                        NULL);
-
-    renderer = gtk_cell_renderer_text_new();
-    gtk_tree_view_column_pack_start(column, renderer, FALSE);
-    gtk_tree_view_column_set_attributes(column, renderer,
-                                        "text",           LOG_TIME_TEXT,
-                                        "background-gdk", LOG_ROW_BACKGROUND,
-                                        "foreground-gdk", LOG_ROW_FOREGROUND,
-                                        NULL);
-
-    renderer = gtk_cell_renderer_text_new();
-    gtk_tree_view_column_pack_start(column, renderer, FALSE);
-    gtk_tree_view_column_set_attributes(column, renderer,
-                                        "text",           LOG_TEXT,
-                                        "background-gdk", LOG_ROW_BACKGROUND,
-                                        "foreground-gdk", LOG_ROW_FOREGROUND,
-                                        NULL);
-
-    // Create Popup Menu on browser album list
-    PopupMenu = gtk_ui_manager_get_widget(UIManager, "/LogPopup");
-    gtk_menu_attach_to_widget (GTK_MENU (PopupMenu), LogList, NULL);
-    g_signal_connect (G_OBJECT (LogList), "button-press-event",
-                      G_CALLBACK (Log_Popup_Menu_Handler), PopupMenu);
-
-    // Load pending messages in the Log list
-    Log_Print_Tmp_List();
-
-    if (SHOW_LOG_VIEW)
-        //gtk_widget_show_all(ScrollWindowLogList);
-        gtk_widget_show_all(Frame);
-
-    //return ScrollWindowLogList;
-    return Frame;
+    /* TODO: Add popup positioning function. */
+    gtk_menu_popup (GTK_MENU (priv->menu), NULL, NULL, NULL, NULL, button,
+                    event_time);
 }
 
+static gboolean
+on_popup_menu (GtkWidget *treeview,
+               EtLogArea *self)
+{
+    do_popup_menu (self, NULL);
+
+    return GDK_EVENT_STOP;
+}
 
 /*
  * Log_Popup_Menu_Handler : displays the corresponding menu
  */
 static gboolean
-Log_Popup_Menu_Handler (GtkWidget *treeview, GdkEventButton *event,
-                        GtkMenu *menu)
+on_button_press_event (GtkWidget *treeview,
+                       GdkEventButton *event,
+                       EtLogArea *self)
+{
+    if (gdk_event_triggers_context_menu ((GdkEvent *)event))
+    {
+        do_popup_menu (self, event);
+
+        return GDK_EVENT_STOP;
+    }
+
+    return GDK_EVENT_PROPAGATE;
+}
+
+
+static void
+et_log_area_class_init (EtLogAreaClass *klass)
 {
-    if (event && (event->type==GDK_BUTTON_PRESS) && (event->button == 3))
+    g_type_class_add_private (klass, sizeof (EtLogAreaPrivate));
+}
+
+static void
+et_log_area_init (EtLogArea *self)
+{
+    EtLogAreaPrivate *priv;
+    GtkWidget *grid;
+    GtkBuilder *builder;
+    GError *error = NULL;
+    GMenuModel *menu_model;
+
+    priv = self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, ET_TYPE_LOG_AREA,
+                                                     EtLogAreaPrivate);
+
+    gtk_container_set_border_width (GTK_CONTAINER (self), 2);
+
+    builder = gtk_builder_new ();
+    gtk_builder_add_from_resource (builder, "/org/gnome/EasyTAG/log_area.ui",
+                                   &error);
+
+    if (error != NULL)
     {
-        gtk_menu_popup(menu,NULL,NULL,NULL,NULL,event->button,event->time);
-        return TRUE;
+        g_error ("Unable to get log area from resource: %s",
+                 error->message);
     }
-    return FALSE;
+
+    grid = GTK_WIDGET (gtk_builder_get_object (builder, "log_grid"));
+    gtk_container_add (GTK_CONTAINER (self), grid);
+
+    /* The list. */
+    priv->log_model = GTK_LIST_STORE (gtk_builder_get_object (builder,
+                                                              "log_model"));
+    priv->log_view = GTK_WIDGET (gtk_builder_get_object (builder, "log_view"));
+
+    /* Create popup menu. */
+    gtk_builder_add_from_resource (builder, "/org/gnome/EasyTAG/menus.ui",
+                                   &error);
+
+    if (error != NULL)
+    {
+        g_error ("Unable to get popup menu from resource: %s",
+                 error->message);
+    }
+
+    menu_model = G_MENU_MODEL (gtk_builder_get_object (builder, "log-menu"));
+    priv->menu = gtk_menu_new_from_model (menu_model);
+    gtk_menu_attach_to_widget (GTK_MENU (priv->menu), priv->log_view, NULL);
+
+    g_object_unref (builder);
+
+    g_signal_connect (priv->log_view, "popup-menu", G_CALLBACK (on_popup_menu),
+                      self);
+    g_signal_connect (priv->log_view, "button-press-event",
+                      G_CALLBACK (on_button_press_event), self);
+
+    /* Load pending messages in the Log list. */
+    Log_Print_Tmp_List (self);
 }
 
 
+GtkWidget *
+et_log_area_new ()
+{
+    return g_object_new (ET_TYPE_LOG_AREA, NULL);
+}
+
 /*
  * Set a row visible in the log list (by scrolling the list)
  */
 static void
-Log_List_Set_Row_Visible (GtkTreeModel *treeModel, GtkTreeIter *rowIter)
+Log_List_Set_Row_Visible (EtLogArea *self, GtkTreeIter *rowIter)
 {
+    EtLogAreaPrivate *priv;
     /*
      * TODO: Make this only scroll to the row if it is not visible
      * (like in easytag GTK1)
@@ -198,22 +224,33 @@ Log_List_Set_Row_Visible (GtkTreeModel *treeModel, GtkTreeIter *rowIter)
      */
     GtkTreePath *rowPath;
 
-    g_return_if_fail (treeModel != NULL);
+    priv = et_log_area_get_instance_private (self);
 
-    rowPath = gtk_tree_model_get_path(treeModel, rowIter);
-    gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(LogList), rowPath, NULL, FALSE, 0, 0);
-    gtk_tree_path_free(rowPath);
+    g_return_if_fail (priv->log_model != NULL);
+
+    rowPath = gtk_tree_model_get_path (GTK_TREE_MODEL (priv->log_model),
+                                       rowIter);
+    gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (priv->log_view), rowPath,
+                                  NULL, FALSE, 0, 0);
+    gtk_tree_path_free (rowPath);
 }
 
 
 /*
  * Remove all lines in the log list
  */
-void Log_Clean_Log_List (void)
+void
+et_log_area_clear (EtLogArea *self)
 {
-    if (logListModel)
+    EtLogAreaPrivate *priv;
+
+    g_return_if_fail (ET_LOG_AREA (self));
+
+    priv = et_log_area_get_instance_private (self);
+
+    if (priv->log_model)
     {
-        gtk_list_store_clear(logListModel);
+        gtk_list_store_clear (priv->log_model);
     }
 }
 
@@ -236,15 +273,40 @@ Log_Format_Date (void)
     return time;
 }
 
+static const gchar *
+get_icon_name_from_error_kind (EtLogAreaKind error_kind)
+{
+    switch (error_kind)
+    {
+        /* Same icon for information and OK messages. */
+        case LOG_OK:
+        case LOG_INFO:
+            return "dialog-information";
+            break;
+        case LOG_WARNING:
+            return "dialog-warning";
+            break;
+        case LOG_ERROR:
+            return "dialog-error";
+            break;
+        case LOG_UNKNOWN:
+            return NULL;
+            break;
+        default:
+            g_assert_not_reached ();
+    }
+}
 
 /*
  * Function to use anywhere in the application to send a message to the LogList
  */
-void Log_Print (Log_Error_Type error_type, gchar const *format, ...)
+void
+Log_Print (EtLogAreaKind error_type, const gchar * const format, ...)
 {
+    EtLogArea *self;
+    EtLogAreaPrivate *priv;
     va_list args;
     gchar *string;
-
     GtkTreeIter iter;
     static gboolean first_time = TRUE;
     static gchar *file_path = NULL;
@@ -252,44 +314,47 @@ void Log_Print (Log_Error_Type error_type, gchar const *format, ...)
     GFileOutputStream *file_ostream;
     GError *error = NULL;
 
+    self = ET_LOG_AREA (et_application_window_get_log_area (ET_APPLICATION_WINDOW (MainWindow)));
+    priv = et_log_area_get_instance_private (self);
+
     va_start (args, format);
-    string = g_strdup_vprintf(format, args);
+    string = g_strdup_vprintf (format, args);
     va_end (args);
 
     // If the log window is displayed then messages are displayed, else
     // the messages are stored in a temporary list.
-    if (LogList && logListModel)
+    if (priv->log_view && priv->log_model)
     {
         gint n_items;
         gchar *time = Log_Format_Date();
 
         /* Remove lines that exceed the limit. */
-        n_items = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (logListModel),
+        n_items = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (priv->log_model),
                                                   NULL);
 
-        if (n_items > LOG_MAX_LINES - 1
-        &&  gtk_tree_model_get_iter_first(GTK_TREE_MODEL(logListModel), &iter))
+        if (n_items > g_settings_get_uint (MainSettings, "log-lines") - 1
+            &&  gtk_tree_model_get_iter_first (GTK_TREE_MODEL (priv->log_model),
+                                               &iter))
         {
-            gtk_list_store_remove(GTK_LIST_STORE(logListModel), &iter);
+            gtk_list_store_remove (GTK_LIST_STORE (priv->log_model), &iter);
         }
 
-        gtk_list_store_insert_with_values (logListModel, &iter, G_MAXINT,
-                                           LOG_PIXBUF,
-                                           Log_Get_Stock_Id_From_Error_Type (error_type),
+        gtk_list_store_insert_with_values (priv->log_model, &iter, G_MAXINT,
+                                           LOG_ICON_NAME,
+                                           get_icon_name_from_error_kind (error_type),
                                            LOG_TIME_TEXT, time, LOG_TEXT,
-                                           string, LOG_ROW_BACKGROUND, NULL,
-                                           LOG_ROW_FOREGROUND, NULL, -1);
-        Log_List_Set_Row_Visible(GTK_TREE_MODEL(logListModel), &iter);
-        g_free(time);
-    }else
+                                           string, -1);
+        Log_List_Set_Row_Visible (self, &iter);
+        g_free (time);
+    }
+    else
     {
-        Log_Data *LogData = g_malloc0(sizeof(Log_Data));
-        LogData->time       = Log_Format_Date();
-        LogData->error_type = error_type;
-        LogData->string     = g_strdup(string);
+        EtLogAreaData *log_data = g_malloc0 (sizeof (EtLogAreaData));
+        log_data->time = Log_Format_Date ();
+        log_data->error_type = error_type;
+        log_data->string = g_strdup (string);
 
-        LogPrintTmpList = g_list_append(LogPrintTmpList,LogData);
-        //g_print("%s",string);
+        priv->log_tmp_list = g_list_append (priv->log_tmp_list, log_data);
     }
 
     // Store also the messages in the log file.
@@ -386,76 +451,45 @@ void Log_Print (Log_Error_Type error_type, gchar const *format, ...)
  * Display pending messages in the LogList
  */
 static void
-Log_Print_Tmp_List (void)
+Log_Print_Tmp_List (EtLogArea *self)
 {
+    EtLogAreaPrivate *priv;
     GList *l;
     GtkTreeIter iter;
 
-    LogPrintTmpList = g_list_first (LogPrintTmpList);
-    for (l = LogPrintTmpList; l != NULL; l = g_list_next (l))
+    priv = et_log_area_get_instance_private (self);
+
+    priv->log_tmp_list = g_list_first (priv->log_tmp_list);
+
+    for (l = priv->log_tmp_list; l != NULL; l = g_list_next (l))
     {
-        if (LogList && logListModel)
+        if (priv->log_model && priv->log_view)
         {
-            gtk_list_store_insert_with_values (logListModel, &iter, G_MAXINT,
-                                               LOG_PIXBUF,
-                                               Log_Get_Stock_Id_From_Error_Type (((Log_Data *)l->data)->error_type),
-                                               LOG_TIME_TEXT,
-                                               ((Log_Data *)l->data)->time,
-                                               LOG_TEXT,
-                                               ((Log_Data *)l->data)->string,
-                                               LOG_ROW_BACKGROUND, NULL,
-                                               LOG_ROW_FOREGROUND, NULL, -1);
-            Log_List_Set_Row_Visible(GTK_TREE_MODEL(logListModel), &iter);
+            EtLogAreaData *log_data = (EtLogAreaData *)l->data;
+            gtk_list_store_insert_with_values (priv->log_model, &iter,
+                                               G_MAXINT, LOG_ICON_NAME,
+                                               get_icon_name_from_error_kind (log_data->error_type),
+                                               LOG_TIME_TEXT, log_data->time,
+                                               LOG_TEXT, log_data->string, -1);
+            Log_List_Set_Row_Visible (self, &iter);
         }
     }
 
-    // Free the list...
-    if (LogPrintTmpList)
+    /* Free the list. */
+    if (priv->log_tmp_list)
     {
         GList *l;
 
-        for (l = LogPrintTmpList; l != NULL; l = g_list_next (l))
+        for (l = priv->log_tmp_list; l != NULL; l = g_list_next (l))
         {
-            g_free (((Log_Data *)l->data)->string);
-            g_free (((Log_Data *)l->data)->time);
-            g_free (((Log_Data *)l->data));
-        }
+            EtLogAreaData *log_data = (EtLogAreaData *)l->data;
 
-        g_list_free (LogPrintTmpList);
-        LogPrintTmpList = NULL;
-    }
-}
-
-
-static gchar *
-Log_Get_Stock_Id_From_Error_Type (Log_Error_Type error_type)
-{
-    gchar *stock_id;
-
-    switch (error_type)
-    {
-        case LOG_OK:
-            stock_id = GTK_STOCK_OK;
-            break;
-
-        case LOG_INFO:
-            stock_id = GTK_STOCK_DIALOG_INFO;
-            break;
-
-        case LOG_WARNING:
-            stock_id = GTK_STOCK_DIALOG_WARNING;
-            break;
-
-        case LOG_ERROR:
-            stock_id = GTK_STOCK_DIALOG_ERROR;
-            break;
+            g_free (log_data->string);
+            g_free (log_data->time);
+            g_free (log_data);
+        }
 
-        case LOG_UNKNOWN:
-            stock_id = NULL;
-            break;
-        default:
-            g_assert_not_reached ();
+        g_list_free (priv->log_tmp_list);
+        priv->log_tmp_list = NULL;
     }
-
-    return stock_id;
 }
diff --git a/src/log.h b/src/log.h
index 743f246..871316d 100644
--- a/src/log.h
+++ b/src/log.h
@@ -1,55 +1,72 @@
-/* log.h - 2007/03/25 */
-/*
- *  EasyTAG - Tag editor for MP3 and Ogg Vorbis files
- *  Copyright (C) 2000-2007  Jerome Couderc <easytag at gmail.com>
+/* EasyTAG - Tag editor for audio files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ * Copyright (C) 2000-2007  Jerome Couderc <easytag at gmail.com>
  *
- *  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
- *  (at your option) any later version.
+ * 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
+ * (at your option) any later version.
  *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
  *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-
-#ifndef __LOG_H__
-#define __LOG_H__
+#ifndef ET_LOG_AREA_H_
+#define ET_LOG_AREA_H_
 
 #include <gtk/gtk.h>
 
 G_BEGIN_DECLS
 
+#define ET_TYPE_LOG_AREA (et_log_area_get_type ())
+#define ET_LOG_AREA(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), ET_TYPE_LOG_AREA, EtLogArea))
+
+typedef struct _EtLogArea EtLogArea;
+typedef struct _EtLogAreaClass EtLogAreaClass;
+typedef struct _EtLogAreaPrivate EtLogAreaPrivate;
+
+struct _EtLogArea
+{
+    /*< private >*/
+    GtkBin parent_instance;
+    EtLogAreaPrivate *priv;
+};
+
+struct _EtLogAreaClass
+{
+    /*< private >*/
+    GtkBinClass parent_class;
+};
+
 /*
  * Types of errors
  */
 typedef enum
 {                  
-    LOG_UNKNOWN = 0,
+    LOG_UNKNOWN,
     LOG_OK,
     LOG_INFO,
     LOG_WARNING,
     LOG_ERROR
-} Log_Error_Type;
+} EtLogAreaKind;
 
 
 /**************
  * Prototypes *
  **************/
 
-GtkWidget *Create_Log_Area      (void);
-
-void       Log_Clean_Log_List   (void);
-
-void Log_Print (Log_Error_Type error_type,
-                gchar const *format, ...) G_GNUC_PRINTF (2, 3);
+GType et_log_area_get_type (void);
+GtkWidget * et_log_area_new (void);
+void et_log_area_clear (EtLogArea *self);
+void Log_Print (EtLogAreaKind error_type,
+                const gchar * const format, ...) G_GNUC_PRINTF (2, 3);
 
 G_END_DECLS
 
-#endif /* __LOG_H__ */
+#endif /* ET_LOG_AREA_H_ */
diff --git a/src/main.c b/src/main.c
new file mode 100644
index 0000000..486210a
--- /dev/null
+++ b/src/main.c
@@ -0,0 +1,46 @@
+/* EasyTAG - Tag editor for audio files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ *
+ * 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
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+
+#include <glib/gi18n.h>
+
+#include "application.h"
+
+int
+main (int argc, char *argv[])
+{
+    EtApplication *application;
+    gint status;
+
+#if ENABLE_NLS
+    textdomain (GETTEXT_PACKAGE);
+    bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
+    bind_textdomain_codeset (PACKAGE_TARNAME, "UTF-8");
+#endif /* ENABLE_NLS */
+
+#if !GLIB_CHECK_VERSION (2, 35, 1)
+    g_type_init ();
+#endif /* !GLIB_CHECK_VERSION (2, 35, 1) */
+
+    application = et_application_new ();
+    status = g_application_run (G_APPLICATION (application), argc, argv);
+    g_object_unref (application);
+
+    return status;
+}
diff --git a/src/misc.c b/src/misc.c
index e2641f7..7ac2f68 100644
--- a/src/misc.c
+++ b/src/misc.c
@@ -1,4 +1,3 @@
-/* misc.c - 2000/06/28 */
 /*
  *  EasyTAG - Tag editor for MP3 and Ogg Vorbis files
  *  Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
@@ -27,17 +26,13 @@
 #include <sys/stat.h>
 #include <errno.h>
 
-#include "gtk2_compat.h"
+#include "application_window.h"
 #include "misc.h"
 #include "easytag.h"
 #include "id3_tag.h"
 #include "browser.h"
 #include "setting.h"
-#include "bar.h"
-#include "prefs.h"
-#include "scan.h"
-#include "scan_dialog.h"
-#include "genres.h"
+#include "preferences_dialog.h"
 #include "log.h"
 #include "charset.h"
 
@@ -49,159 +44,18 @@
 /***************
  * Declaration *
  ***************/
-/* Playlist window. */
-static GtkWidget *WritePlaylistWindow;
-static GtkWidget *PlayListNameMaskCombo;
-static GtkWidget *PlayListContentMaskCombo;
-static GtkListStore *PlayListNameMaskModel;
-static GtkListStore *PlayListContentMaskModel;
-
 static const guint BOX_SPACING = 6;
 
 static GdkCursor *MouseCursor;
 
-/* Search file window. */
-static GtkWidget *SearchFileWindow = NULL;
-static GtkWidget *SearchStringCombo;
-static GtkListStore *SearchStringModel = NULL;
-static GtkWidget *SearchInFilename;
-static GtkWidget *SearchInTag;
-static GtkWidget *SearchCaseSensitive;
-static GtkWidget *SearchResultList;
-static GtkListStore *SearchResultListModel;
-static GtkWidget *SearchStatusBar;
-static guint SearchStatusBarContext;
-
-/* Load filename window. */
-static GtkWidget *LoadFilenameWindow = NULL;
-static GtkWidget *FileToLoadCombo;
-static GtkListStore *FileToLoadModel = NULL;
-static GtkWidget *LoadFileContentList;
-static GtkListStore* LoadFileContentListModel;
-static GtkWidget *LoadFileNameList;
-static GtkListStore* LoadFileNameListModel;
-static GtkWidget *LoadFileRunScanner;
-
-enum
-{
-    // Columns for titles
-    SEARCH_RESULT_FILENAME = 0,
-    SEARCH_RESULT_TITLE,
-    SEARCH_RESULT_ARTIST,
-    SEARCH_RESULT_ALBUM_ARTIST,
-    SEARCH_RESULT_ALBUM,
-    SEARCH_RESULT_DISC_NUMBER,
-    SEARCH_RESULT_YEAR,
-    SEARCH_RESULT_TRACK,
-    SEARCH_RESULT_GENRE,
-    SEARCH_RESULT_COMMENT,
-    SEARCH_RESULT_COMPOSER,
-    SEARCH_RESULT_ORIG_ARTIST,
-    SEARCH_RESULT_COPYRIGHT,
-    SEARCH_RESULT_URL,
-    SEARCH_RESULT_ENCODED_BY,
-
-    // Columns for pango style (normal/bold)
-    SEARCH_RESULT_FILENAME_WEIGHT,
-    SEARCH_RESULT_TITLE_WEIGHT,
-    SEARCH_RESULT_ARTIST_WEIGHT,
-    SEARCH_RESULT_ALBUM_ARTIST_WEIGHT,
-    SEARCH_RESULT_ALBUM_WEIGHT,
-    SEARCH_RESULT_DISC_NUMBER_WEIGHT,
-    SEARCH_RESULT_YEAR_WEIGHT,
-    SEARCH_RESULT_TRACK_WEIGHT,
-    SEARCH_RESULT_GENRE_WEIGHT,
-    SEARCH_RESULT_COMMENT_WEIGHT,
-    SEARCH_RESULT_COMPOSER_WEIGHT,
-    SEARCH_RESULT_ORIG_ARTIST_WEIGHT,
-    SEARCH_RESULT_COPYRIGHT_WEIGHT,
-    SEARCH_RESULT_URL_WEIGHT,
-    SEARCH_RESULT_ENCODED_BY_WEIGHT,
-
-    // Columns for color (normal/red)
-    SEARCH_RESULT_FILENAME_FOREGROUND,
-    SEARCH_RESULT_TITLE_FOREGROUND,
-    SEARCH_RESULT_ARTIST_FOREGROUND,
-    SEARCH_RESULT_ALBUM_ARTIST_FOREGROUND,
-    SEARCH_RESULT_ALBUM_FOREGROUND,
-    SEARCH_RESULT_DISC_NUMBER_FOREGROUND,
-    SEARCH_RESULT_YEAR_FOREGROUND,
-    SEARCH_RESULT_TRACK_FOREGROUND,
-    SEARCH_RESULT_GENRE_FOREGROUND,
-    SEARCH_RESULT_COMMENT_FOREGROUND,
-    SEARCH_RESULT_COMPOSER_FOREGROUND,
-    SEARCH_RESULT_ORIG_ARTIST_FOREGROUND,
-    SEARCH_RESULT_COPYRIGHT_FOREGROUND,
-    SEARCH_RESULT_URL_FOREGROUND,
-    SEARCH_RESULT_ENCODED_BY_FOREGROUND,
-
-    SEARCH_RESULT_POINTER,
-    SEARCH_COLUMN_COUNT
-};
-
-enum
-{
-    LOAD_FILE_CONTENT_TEXT,
-    LOAD_FILE_CONTENT_COUNT
-};
-
-enum
-{
-    LOAD_FILE_NAME_TEXT,
-    LOAD_FILE_NAME_POINTER,
-    LOAD_FILE_NAME_COUNT
-};
-
 /**************
  * Prototypes *
  **************/
-void     Open_Write_Playlist_Window      (void);
-static void Destroy_Write_Playlist_Window (void);
-static void Playlist_Write_Button_Pressed (void);
-static gboolean write_playlist (GFile *file, GError **error);
-static void entry_check_content_mask (GtkEntry *entry, gpointer user_data);
-static void Playlist_Convert_Forwardslash_Into_Backslash (const gchar *string);
-
-void Open_Search_File_Window          (void);
-static void Destroy_Search_File_Window (void);
-static void Search_File (GtkWidget *search_button);
-static void Add_Row_To_Search_Result_List (ET_File *ETFile,
-                                           const gchar *string_to_search);
-static void Search_Result_List_Row_Selected (GtkTreeSelection* selection,
-                                             gpointer data);
-
-void Open_Load_Filename_Window      (void);
-static void Destroy_Load_Filename_Window (void);
-static void Load_Filename_List_Key_Press (GtkWidget *clist, GdkEvent *event);
-static void Load_File_Content (GtkWidget *file_entry);
-static void Load_File_List (void);
-static void Load_Filename_Select_Row_In_Other_List (GtkWidget *target,
-                                                    gpointer selection_emit);
-static void Load_Filename_Set_Filenames (void);
-static void Button_Load_Set_Sensivity (GtkWidget *button, GtkWidget *entry);
-static GtkWidget *Create_Load_Filename_Popup_Menu (GtkWidget *list);
-static void Load_Filename_List_Insert_Blank_Line (GtkWidget *list);
-static void Load_Filename_List_Delete_Line (GtkWidget *list);
-static void Load_Filename_List_Move_Up (GtkWidget *list);
-static void Load_Filename_List_Move_Down (GtkWidget *list);
-static void Load_Filename_List_Delete_All_Blank_Lines (GtkWidget *list);
-static void Load_Filename_List_Reload (GtkWidget *list);
-static void Load_Filename_Update_Text_Line (GtkWidget *entry, GtkWidget *list);
-static void Load_Filename_Edit_Text_Line (GtkTreeSelection *selection,
-                                          gpointer data);
-
-static void Create_Xpm_Icon_Factory (const char **xpm_data,
-                                     const char *name_in_factory);
-
 /* Browser */
 static void Open_File_Selection_Window (GtkWidget *entry, gchar *title, GtkFileChooserAction action);
 void        File_Selection_Window_For_File      (GtkWidget *entry);
 void        File_Selection_Window_For_Directory (GtkWidget *entry);
 
-static void et_load_text_file_on_response (GtkDialog *dialog, gint response_id,
-                                           gpointer user_data);
-static void et_playlist_on_response (GtkDialog *dialog, gint response_id,
-                                     gpointer user_data);
 
 /*************
  * Functions *
@@ -212,42 +66,6 @@ static void et_playlist_on_response (GtkDialog *dialog, gint response_id,
  ******************************/
 
 /*
- * Return a button with an icon and a label
- */
-GtkWidget *Create_Button_With_Icon_And_Label (const gchar *pixmap_name, gchar *label)
-{
-    GtkWidget *Button;
-    GtkWidget *HBox;
-    GtkWidget *Label;
-    GtkWidget *Pixmap;
-
-    Button = gtk_button_new();
-    HBox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0);
-    gtk_container_add(GTK_CONTAINER(Button),HBox);
-
-    /* Add a pixmap if not null */
-    if (pixmap_name != NULL)
-    {
-        gtk_widget_realize(MainWindow);
-        Pixmap = gtk_image_new_from_stock(pixmap_name, GTK_ICON_SIZE_BUTTON);
-        gtk_container_add(GTK_CONTAINER(HBox),Pixmap);
-    }
-
-    /* Add a label if not null */
-    if (label != NULL)
-    {
-        Label = gtk_label_new(label);
-        gtk_container_add(GTK_CONTAINER(HBox),Label);
-    }
-
-    /* Display a warning message if the both parameters are NULL */
-    if (pixmap_name==NULL && label==NULL)
-        g_warning("Empty button created 'adr=%p' (no icon and no label)!",Button);
-
-    return Button;
-}
-
-/*
  * Add the 'string' passed in parameter to the list store
  * If this string already exists in the list store, it doesn't add it.
  * Returns TRUE if string was added.
@@ -371,159 +189,6 @@ gchar *Get_Active_Combo_Box_Item (GtkComboBox *combo)
 }
 
 /*
- * To insert only digits in an entry. If the text contains only digits: returns it,
- * else only first digits.
- */
-void Insert_Only_Digit (GtkEditable *editable, const gchar *inserted_text, gint length,
-                        gint *position, gpointer data)
-{
-    int i = 1; // Ignore first character
-    int j = 1;
-    gchar *result;
-
-    if (length<=0 || !inserted_text)
-        return;
-
-    if (!isdigit((guchar)inserted_text[0]) && inserted_text[0] != '-')
-    {
-        g_signal_stop_emission_by_name(G_OBJECT(editable),"insert_text");
-        return;
-    } else if (length == 1)
-    {
-        // We already checked the first digit...
-        return;
-    }
-
-    g_signal_stop_emission_by_name(G_OBJECT(editable),"insert_text");
-    result = g_malloc0(length+1);
-    result[0] = inserted_text[0];
-
-    // Check the rest, if any...
-    for (i = 1; i < length; i++)
-    {
-        if (isdigit((guchar)inserted_text[i]))
-        {
-            result[j++] = inserted_text[i];
-        }
-    }
-    // Null terminate for the benefit of glib/gtk
-    result[j] = '\0';
-
-    if (result[0] == '\0')
-    {
-        g_free(result);
-        return;
-    }
-
-    g_signal_handlers_block_by_func(G_OBJECT(editable),G_CALLBACK(Insert_Only_Digit),data);
-    gtk_editable_insert_text(editable, result, j, position);
-    g_signal_handlers_unblock_by_func(G_OBJECT(editable),G_CALLBACK(Insert_Only_Digit),data);
-    g_free(result);
-}
-
-/*
- * Parse and auto complete date entry if you don't type the 4 digits.
- */
-#include <stdlib.h>
-gboolean Parse_Date (void)
-{
-    const gchar *year;
-    gchar *tmp, *tmp1;
-    gchar *current_year;
-    GDateTime *dt;
-
-    /* Early return. */
-    if (!DATE_AUTO_COMPLETION) return FALSE;
-
-    /* Get the info entered by user */
-    year = gtk_entry_get_text(GTK_ENTRY(YearEntry));
-
-    if ( strcmp(year,"")!=0 && strlen(year)<4 )
-    {
-        dt = g_date_time_new_now_local ();
-        current_year = g_date_time_format (dt, "%Y");
-        g_date_time_unref (dt);
-
-        tmp = &current_year[4-strlen(year)];
-        if ( atoi(year) <= atoi(tmp) )
-        {
-            sprintf(current_year,"%d",atoi(current_year)-atoi(tmp));
-            tmp1 = g_strdup_printf("%d",atoi(current_year)+atoi(year));
-            gtk_entry_set_text(GTK_ENTRY(YearEntry),tmp1);
-            g_free(tmp1);
-
-        }else
-        {
-            sprintf(current_year,"%d",atoi(current_year)-atoi(tmp)
-                -(strlen(year)<=0 ? 1 : strlen(year)<=1 ? 10 :          // pow(10,strlen(year)) returns 99 instead of 100 under Win32...
-                 strlen(year)<=2 ? 100 : strlen(year)<=3 ? 1000 : 0));
-            tmp1 = g_strdup_printf("%d",atoi(current_year)+atoi(year));
-            gtk_entry_set_text(GTK_ENTRY(YearEntry),tmp1);
-            g_free(tmp1);
-        }
-
-        g_free (current_year);
-    }
-    return FALSE;
-}
-
-/*
- * Load the genres list to the combo, and sorts it
- */
-void Load_Genres_List_To_UI (void)
-{
-    gsize i;
-
-    g_return_if_fail (GenreComboModel != NULL);
-
-    gtk_list_store_insert_with_values (GTK_LIST_STORE (GenreComboModel), NULL,
-                                       G_MAXINT, MISC_COMBO_TEXT, "", -1);
-    gtk_list_store_insert_with_values (GTK_LIST_STORE (GenreComboModel), NULL,
-                                       G_MAXINT, MISC_COMBO_TEXT, "Unknown",
-                                       -1);
-
-    for (i = 0; i <= GENRE_MAX; i++)
-    {
-        gtk_list_store_insert_with_values (GTK_LIST_STORE (GenreComboModel),
-                                           NULL, G_MAXINT, MISC_COMBO_TEXT,
-                                           id3_genres[i], -1);
-    }
-}
-
-/*
- * Load the track numbers into the track combo list
- * We limit the preloaded values to 30 to avoid lost of time with lot of files...
- */
-void Load_Track_List_To_UI (void)
-{
-    /* Number mini of items
-     *if ((len=ETCore->ETFileDisplayedList_Length) < 30)
-     * Length limited to 30 (instead to the number of files)! */
-    const gsize len = 30;
-    gsize i;
-    gchar *text;
-
-    g_return_if_fail (ETCore->ETFileDisplayedList != NULL ||
-                      TrackEntryComboModel != NULL);
-
-    /* Remove the entries in the list to avoid duplicates. */
-    gtk_list_store_clear (TrackEntryComboModel);
-
-    /* Create list of tracks. */
-    for (i = 1; i <= len; i++)
-    {
-        text = et_track_number_to_string (i);
-
-        gtk_list_store_insert_with_values (GTK_LIST_STORE (TrackEntryComboModel),
-                                           NULL, G_MAXINT, MISC_COMBO_TEXT,
-                                           text, -1);
-        g_free(text);
-    }
-
-}
-
-
-/*
  * Change mouse cursor
  */
 void Init_Mouse_Cursor (void)
@@ -536,11 +201,7 @@ Destroy_Mouse_Cursor (void)
 {
     if (MouseCursor)
     {
-#if GTK_CHECK_VERSION (3,0,0)
         g_object_unref (MouseCursor);
-#else
-        gdk_cursor_unref (MouseCursor);
-#endif
         MouseCursor = NULL;
     }
 }
@@ -561,130 +222,6 @@ void Set_Unbusy_Cursor (void)
     Destroy_Mouse_Cursor();
 }
 
-
-
-/*
- * Add easytag specific icons to GTK stock set
- */
-#include "data/pixmaps/all_uppercase.xpm"
-#include "data/pixmaps/all_downcase.xpm"
-#include "data/pixmaps/artist.xpm"
-#include "data/pixmaps/artist_album.xpm"
-//#include "data/pixmaps/blackwhite.xpm"
-#include "data/pixmaps/first_letter_uppercase.xpm"
-#include "data/pixmaps/first_letter_uppercase_word.xpm"
-#include "data/pixmaps/invert_selection.xpm"
-#include "data/pixmaps/mask.xpm"
-#include "data/pixmaps/red_lines.xpm"
-//#include "data/pixmaps/sequence_track.xpm"
-#include "data/pixmaps/unselect_all.xpm"
-void Init_Custom_Icons (void)
-{
-    Create_Xpm_Icon_Factory((const char**)artist_xpm,               "easytag-artist");
-    Create_Xpm_Icon_Factory((const char**)invert_selection_xpm,     "easytag-invert-selection");
-    Create_Xpm_Icon_Factory((const char**)unselect_all_xpm,         "easytag-unselect-all");
-    Create_Xpm_Icon_Factory((const char**)mask_xpm,                 "easytag-mask");
-    //Create_Xpm_Icon_Factory((const char**)blackwhite_xpm,         "easytag-blackwhite");
-    //Create_Xpm_Icon_Factory((const char**)sequence_track_xpm,     "easytag-sequence-track");
-    Create_Xpm_Icon_Factory((const char**)red_lines_xpm,            "easytag-red-lines");
-    Create_Xpm_Icon_Factory((const char**)artist_album_xpm,     "easytag-artist-album");
-    Create_Xpm_Icon_Factory((const char**)all_uppercase_xpm,        "easytag-all-uppercase");
-    Create_Xpm_Icon_Factory((const char**)all_downcase_xpm,         "easytag-all-downcase");
-    Create_Xpm_Icon_Factory((const char**)first_letter_uppercase_xpm,       "easytag-first-letter-uppercase");
-    Create_Xpm_Icon_Factory((const char**)first_letter_uppercase_word_xpm,  "easytag-first-letter-uppercase-word");
-}
-
-
-/*
- * Create an icon factory from the specified pixmap
- * Also add it to the GTK stock images
- */
-static void
-Create_Xpm_Icon_Factory (const char **xpm_data, const char *name_in_factory)
-{
-    GtkIconSet      *icon;
-    GtkIconFactory  *factory;
-    GdkPixbuf       *pixbuf;
-
-    if (!*xpm_data || !name_in_factory)
-        return;
-
-    pixbuf = gdk_pixbuf_new_from_xpm_data(xpm_data);
-
-    if (pixbuf)
-    {
-        icon = gtk_icon_set_new_from_pixbuf(pixbuf);
-        g_object_unref(G_OBJECT(pixbuf));
-
-        factory = gtk_icon_factory_new();
-        gtk_icon_factory_add(factory, name_in_factory, icon);
-        gtk_icon_set_unref(icon);
-        gtk_icon_factory_add_default(factory);
-    }
-}
-
-/*
- * Return a widget with a pixmap
- * Note: for pixmap 'pixmap.xpm', pixmap_name is 'pixmap_xpm'
- */
-GtkWidget *Create_Xpm_Image (const char **xpm_name)
-{
-    GdkPixbuf *pixbuf;
-    GtkWidget *image;
-
-    g_return_val_if_fail (*xpm_name != NULL, NULL);
-
-    pixbuf = gdk_pixbuf_new_from_xpm_data(xpm_name);
-    image = gtk_image_new_from_pixbuf(GDK_PIXBUF(pixbuf));
-
-    return image;
-}
-
-
-
-/*
- * Iter compare func: Sort alphabetically
- */
-gint Combo_Alphabetic_Sort (GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer data)
-{
-    gchar *text1, *text1_folded;
-    gchar *text2, *text2_folded;
-    gint ret;
-
-    gtk_tree_model_get(model, a, MISC_COMBO_TEXT, &text1, -1);
-    gtk_tree_model_get(model, b, MISC_COMBO_TEXT, &text2, -1);
-
-    if (text1 == text2)
-    {
-        g_free(text1);
-        g_free(text2);
-        return 0;
-    }
-
-    if (text1 == NULL)
-    {
-        g_free(text2);
-        return -1;
-    }
-
-    if (text2 == NULL)
-    {
-        g_free(text1);
-        return 1;
-    }
-
-    text1_folded = g_utf8_casefold(text1, -1);
-    text2_folded = g_utf8_casefold(text2, -1);
-    ret = g_utf8_collate(text1_folded, text2_folded);
-
-    g_free(text1);
-    g_free(text2);
-    g_free(text1_folded);
-    g_free(text2_folded);
-    return ret;
-}
-
-
 /*
  * Run a program with a list of parameters
  *  - args_list : list of filename (with path)
@@ -707,8 +244,8 @@ et_run_program (const gchar *program_name, GList *args_list)
 
     g_return_val_if_fail (program_name != NULL && args_list != NULL, FALSE);
 
-    /* Check if a name for the program have been supplied */
-    if (!program_name && *program_name)
+    /* Check if a name for the program has been supplied */
+    if (*program_name)
     {
         GtkWidget *msgdialog;
 
@@ -729,8 +266,7 @@ et_run_program (const gchar *program_name, GList *args_list)
      * poorly when there are spaces in the absolute path to the binary. */
     program_tmp = g_strdup (program_name);
 
-    /* Skip the binary name and a delimiter. Same logic in
-     * Check_If_Executable_Exists()*/
+    /* Skip the binary name and a delimiter. */
 #ifdef G_OS_WIN32
     /* FIXME: Should also consider .com, .bat, .sys. See
      * g_find_program_in_path(). */
@@ -797,14 +333,15 @@ et_run_program (const gchar *program_name, GList *args_list)
     {
         g_child_watch_add (pid, et_on_child_exited, NULL);
 
-        msg = g_strdup_printf (_("Executed command: %s"), program_name);
-        Statusbar_Message (msg, TRUE);
+        msg = g_strdup_printf (_("Executed command ‘%s’"), program_name);
+        et_application_window_status_bar_message (ET_APPLICATION_WINDOW (MainWindow),
+                                                  msg, TRUE);
         g_free (msg);
         res = TRUE;
     }
     else
     {
-        Log_Print (LOG_ERROR, _("Failed to launch program: %s"),
+        Log_Print (LOG_ERROR, _("Failed to launch program ‘%s’"),
                    error->message);
         g_clear_error (&error);
     }
@@ -849,11 +386,15 @@ static void Open_File_Selection_Window (GtkWidget *entry, gchar *title, GtkFileC
         return;
     }
 
-    FileSelectionWindow = gtk_file_chooser_dialog_new(title, parent_window, action,
-                                                      GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
-                                                      GTK_STOCK_OPEN,   GTK_RESPONSE_ACCEPT,
-                                                      NULL);
-    // Set initial directory
+    FileSelectionWindow = gtk_file_chooser_dialog_new (title, parent_window,
+                                                       action,
+                                                       _("_Cancel"),
+                                                       GTK_RESPONSE_CANCEL,
+                                                       _("_Open"),
+                                                       GTK_RESPONSE_ACCEPT,
+                                                       NULL);
+
+    /* Set initial directory. */
     tmp = gtk_entry_get_text(GTK_ENTRY(entry));
     if (tmp && *tmp)
     {
@@ -879,162 +420,65 @@ static void Open_File_Selection_Window (GtkWidget *entry, gchar *title, GtkFileC
 
 
 
-void Run_Audio_Player_Using_Directory (void)
-{
-    GList *l;
-    GList *path_list = NULL;
-
-    for (l = g_list_first (ETCore->ETFileList); l != NULL; l = g_list_next (l))
-    {
-        ET_File *etfile = (ET_File *)l->data;
-        gchar *path = ((File_Name *)etfile->FileNameCur->data)->value;
-        path_list = g_list_prepend (path_list, path);
-    }
-
-    path_list = g_list_reverse (path_list);
-
-    et_run_program (AUDIO_FILE_PLAYER, path_list);
-    g_list_free (path_list);
-}
-
-void Run_Audio_Player_Using_Selection (void)
+void
+et_run_audio_player (GList *files)
 {
-    GList *selfilelist = NULL;
-    GList *l;
-    GList *path_list = NULL;
-    GtkTreeSelection *selection;
+    GFileInfo *info;
+    GError *error = NULL;
+    const gchar *content_type;
+    GAppInfo *app_info;
+    GdkAppLaunchContext *context;
 
-    g_return_if_fail (BrowserList != NULL);
+    g_return_if_fail (files != NULL);
 
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserList));
-    selfilelist = gtk_tree_selection_get_selected_rows(selection, NULL);
+    info = g_file_query_info (files->data,
+                              G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE,
+                              G_FILE_QUERY_INFO_NONE, NULL, &error);
 
-    for (l = selfilelist; l != NULL; l = g_list_next (l))
+    if (error)
     {
-        ET_File *etfile = Browser_List_Get_ETFile_From_Path (l->data);
-        gchar *path = ((File_Name *)etfile->FileNameCur->data)->value;
-        path_list = g_list_prepend (path_list, path);
+        g_warning ("Unable to get content type for file: %s",
+                   error->message);
+        g_error_free (error);
+        return;
     }
 
-    path_list = g_list_reverse (path_list);
-
-    et_run_program (AUDIO_FILE_PLAYER, path_list);
-    g_list_free (path_list);
-    g_list_free_full (selfilelist, (GDestroyNotify)gtk_tree_path_free);
-}
-
-void Run_Audio_Player_Using_Browser_Artist_List (void)
-{
-    GtkTreeIter iter;
-    GtkTreeSelection *selection;
-    GtkTreeModel *artistListModel;
-    GList *l, *m;
-    GList *path_list = NULL;
-
-    g_return_if_fail (BrowserArtistList != NULL);
-
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserArtistList));
-    if (!gtk_tree_selection_get_selected(selection, &artistListModel, &iter))
-        return;
+    content_type = g_file_info_get_content_type (info);
+    app_info = g_app_info_get_default_for_type (content_type, FALSE);
+    g_object_unref (info);
 
-    gtk_tree_model_get (artistListModel, &iter, ARTIST_ALBUM_LIST_POINTER, &l,
-                        -1);
+    context = gdk_display_get_app_launch_context (gdk_display_get_default ());
 
-    for (; l != NULL; l = g_list_next (l))
+    if (!g_app_info_launch (app_info, files, G_APP_LAUNCH_CONTEXT (context),
+                            &error))
     {
-        for (m = l->data; m != NULL; m = g_list_next (m))
-        {
-            ET_File *etfile = (ET_File *)m->data;
-            gchar *path = ((File_Name *)etfile->FileNameCur->data)->value;
-            path_list = g_list_prepend (path_list, path);
-        }
+        Log_Print (LOG_ERROR, _("Failed to launch program ‘%s’"),
+                   error->message);
+        g_error_free (error);
     }
 
-    path_list = g_list_reverse (path_list);
-
-    et_run_program (AUDIO_FILE_PLAYER, path_list);
-    g_list_free (path_list);
+    g_object_unref (context);
+    g_object_unref (app_info);
 }
 
-void Run_Audio_Player_Using_Browser_Album_List (void)
+void
+Run_Audio_Player_Using_Directory (void)
 {
-    GtkTreeIter iter;
-    GtkTreeSelection *selection;
-    GtkTreeModel *albumListModel;
     GList *l;
-    GList *path_list = NULL;
-
-    g_return_if_fail (BrowserAlbumList != NULL);
+    GList *file_list = NULL;
 
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserAlbumList));
-    if (!gtk_tree_selection_get_selected(selection, &albumListModel, &iter))
-        return;
-
-    gtk_tree_model_get (albumListModel, &iter, ALBUM_ETFILE_LIST_POINTER, &l,
-                        -1);
-
-    for (; l != NULL; l = g_list_next (l))
+    for (l = g_list_first (ETCore->ETFileList); l != NULL; l = g_list_next (l))
     {
         ET_File *etfile = (ET_File *)l->data;
         gchar *path = ((File_Name *)etfile->FileNameCur->data)->value;
-        path_list = g_list_prepend (path_list, path);
+        file_list = g_list_prepend (file_list, g_file_new_for_path (path));
     }
 
-    path_list = g_list_reverse (path_list);
-
-    et_run_program (AUDIO_FILE_PLAYER, path_list);
-    g_list_free (path_list);
-}
-
-
-/*
- * Check if the executable passed in parameter can be launched
- * Returns the full path of the file (must be freed if not used)
- */
-gchar *Check_If_Executable_Exists (const gchar *program)
-{
-    gchar *program_tmp;
-    gchar *tmp;
-
-    g_return_val_if_fail (program != NULL, NULL);
-
-    program_tmp = g_strdup(program);
-    g_strstrip(program_tmp);
-
-#ifdef G_OS_WIN32
-    // Remove arguments if found, after '.exe'
-    if ( (tmp=strstr(program_tmp,".exe")) )
-        *(tmp + 4) = 0;
-#else /* !G_OS_WIN32 */
-    // Remove arguments if found
-    if ( (tmp=strchr(program_tmp,' ')) )
-        *tmp = 0;
-#endif /* !G_OS_WIN32 */
+    file_list = g_list_reverse (file_list);
 
-    if (g_path_is_absolute(program_tmp))
-    {
-        if (access(program_tmp, X_OK) == 0)
-        {
-            return program_tmp;
-        } else
-        {
-            g_free(program_tmp);
-            return NULL;
-        }
-    } else
-    {
-        tmp = g_find_program_in_path(program_tmp);
-        if (tmp)
-        {
-            g_free(program_tmp);
-            return tmp;
-        }else
-        {
-            g_free(program_tmp);
-            return NULL;
-        }
-    }
+    et_run_audio_player (file_list);
 
+    g_list_free_full (file_list, g_object_unref);
 }
 
 /*
@@ -1064,25 +508,6 @@ gchar *Convert_Duration (gulong duration)
 }
 
 /*
- * et_show_help:
- */
-void
-et_show_help (void)
-{
-    GError *error = NULL;
-
-    /* TODO: Add link to application help instead. */
-    gtk_show_uri (gtk_window_get_screen (GTK_WINDOW (MainWindow)),
-                  "help:easytag", GDK_CURRENT_TIME, &error);
-
-    if (error)
-    {
-        g_debug ("Error while opening help: %s", error->message);
-        g_error_free (error);
-    }
-}
-
-/*
  * @filename: (type filename): the path to a file
  *
  * Gets the size of a file in bytes.
@@ -1119,2636 +544,35 @@ et_get_file_size (const gchar *filename)
     return size;
 }
 
-
-
-/*******************************
- * Writting playlist functions *
- *******************************/
-/*
- * The window to write playlists.
- */
-void Open_Write_Playlist_Window (void)
+gchar *
+et_disc_number_to_string (const guint disc_number)
 {
-    GtkWidget *Frame;
-    GtkWidget *VBox;
-    GtkWidget *vbox, *hbox;
-
-    if (WritePlaylistWindow != NULL)
+    if (g_settings_get_boolean (MainSettings, "tag-disc-padded"))
     {
-        gtk_window_present(GTK_WINDOW(WritePlaylistWindow));
-        return;
+        return g_strdup_printf ("%.*d",
+                                g_settings_get_uint (MainSettings,
+                                                     "tag-disc-length"),
+                                disc_number);
     }
 
-    WritePlaylistWindow = gtk_dialog_new_with_buttons (_("Generate Playlist"),
-                                                       GTK_WINDOW (MainWindow),
-                                                       GTK_DIALOG_DESTROY_WITH_PARENT,
-                                                       GTK_STOCK_CANCEL,
-                                                       GTK_RESPONSE_CANCEL,
-                                                       GTK_STOCK_SAVE,
-                                                       GTK_RESPONSE_OK, NULL);
-
-    gtk_dialog_set_default_response (GTK_DIALOG (WritePlaylistWindow),
-                                     GTK_RESPONSE_OK);
-    g_signal_connect (WritePlaylistWindow, "response",
-                      G_CALLBACK (et_playlist_on_response), NULL);
-
-    VBox = gtk_dialog_get_content_area (GTK_DIALOG (WritePlaylistWindow));
-    gtk_box_set_spacing (GTK_BOX (VBox), BOX_SPACING);
-    gtk_container_set_border_width (GTK_CONTAINER (VBox), BOX_SPACING);
-
-
-    /* Playlist name */
-    if (!PlayListNameMaskModel)
-        PlayListNameMaskModel = gtk_list_store_new(MISC_COMBO_COUNT, G_TYPE_STRING);
-    else
-        gtk_list_store_clear(PlayListNameMaskModel);
-
-    Frame = gtk_frame_new(_("M3U Playlist Name"));
-    gtk_box_pack_start(GTK_BOX(VBox),Frame,TRUE,TRUE,0);
-    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
-    gtk_container_add(GTK_CONTAINER(Frame),vbox);
-    gtk_container_set_border_width(GTK_CONTAINER(vbox), 4);
-
-    playlist_use_mask_name = gtk_radio_button_new_with_label(NULL, _("Use mask:"));
-    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, BOX_SPACING);
-    gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,0);
-    gtk_box_pack_start(GTK_BOX(hbox),playlist_use_mask_name,FALSE,FALSE,0);
-    PlayListNameMaskCombo = gtk_combo_box_new_with_model_and_entry(GTK_TREE_MODEL(PlayListNameMaskModel));
-    gtk_combo_box_set_entry_text_column(GTK_COMBO_BOX(PlayListNameMaskCombo),MISC_COMBO_TEXT);
-    gtk_box_pack_start (GTK_BOX (hbox), PlayListNameMaskCombo, FALSE, FALSE,
-                        0);
-    playlist_use_dir_name = gtk_radio_button_new_with_label_from_widget(
-        GTK_RADIO_BUTTON(playlist_use_mask_name),_("Use directory name"));
-    gtk_box_pack_start(GTK_BOX(vbox),playlist_use_dir_name,FALSE,FALSE,0);
-    // History list
-    Load_Play_List_Name_List(PlayListNameMaskModel, MISC_COMBO_TEXT);
-    Add_String_To_Combo_List(PlayListNameMaskModel, PLAYLIST_NAME);
-    gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(PlayListNameMaskCombo))), PLAYLIST_NAME);
-
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(playlist_use_mask_name),PLAYLIST_USE_MASK_NAME);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(playlist_use_dir_name),PLAYLIST_USE_DIR_NAME);
-
-    // Mask status icon
-    // Signal connection to check if mask is correct into the mask entry
-    g_signal_connect (gtk_bin_get_child (GTK_BIN (PlayListNameMaskCombo)),
-                      "changed", G_CALLBACK (entry_check_content_mask),
-                      NULL);
-
-    /* Playlist options */
-    Frame = gtk_frame_new(_("Playlist Options"));
-    gtk_box_pack_start(GTK_BOX(VBox),Frame,TRUE,TRUE,0);
-    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
-    gtk_container_add(GTK_CONTAINER(Frame),vbox);
-    gtk_container_set_border_width (GTK_CONTAINER (vbox), BOX_SPACING);
-
-    playlist_only_selected_files = gtk_check_button_new_with_label(_("Include only the selected files"));
-    gtk_box_pack_start(GTK_BOX(vbox),playlist_only_selected_files,FALSE,FALSE,0);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(playlist_only_selected_files),PLAYLIST_ONLY_SELECTED_FILES);
-    gtk_widget_set_tooltip_text(playlist_only_selected_files,_("If activated, only the selected files will be "
-        "written in the playlist file. Else, all the files will be written."));
-
-    playlist_full_path = gtk_radio_button_new_with_label(NULL,_("Use full path for files in playlist"));
-    gtk_box_pack_start(GTK_BOX(vbox),playlist_full_path,FALSE,FALSE,0);
-    playlist_relative_path = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(playlist_full_path),
-        _("Use relative path for files in playlist"));
-    gtk_box_pack_start(GTK_BOX(vbox),playlist_relative_path,FALSE,FALSE,0);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(playlist_full_path),PLAYLIST_FULL_PATH);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(playlist_relative_path),PLAYLIST_RELATIVE_PATH);
-
-    // Create playlist in parent directory
-    playlist_create_in_parent_dir = gtk_check_button_new_with_label(_("Create playlist in the parent directory"));
-    gtk_box_pack_start(GTK_BOX(vbox),playlist_create_in_parent_dir,FALSE,FALSE,0);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(playlist_create_in_parent_dir),PLAYLIST_CREATE_IN_PARENT_DIR);
-    gtk_widget_set_tooltip_text(playlist_create_in_parent_dir,_("If activated, the playlist will be created "
-        "in the parent directory."));
-
-    // DOS Separator
-    playlist_use_dos_separator = gtk_check_button_new_with_label(_("Use DOS directory separator"));
-#ifndef G_OS_WIN32
-    /* This makes no sense under Win32, so we do not display it. */
-    gtk_box_pack_start(GTK_BOX(vbox),playlist_use_dos_separator,FALSE,FALSE,0);
-#endif /* !G_OS_WIN32 */
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(playlist_use_dos_separator),PLAYLIST_USE_DOS_SEPARATOR);
-    gtk_widget_set_tooltip_text(playlist_use_dos_separator,_("This option replaces the UNIX directory "
-        "separator '/' into DOS separator '\\'."));
-
-    /* Playlist content */
-    if (!PlayListContentMaskModel)
-        PlayListContentMaskModel = gtk_list_store_new(MISC_COMBO_COUNT, G_TYPE_STRING);
-    else
-        gtk_list_store_clear(PlayListContentMaskModel);
-
-    Frame = gtk_frame_new(_("Playlist Content"));
-    gtk_box_pack_start(GTK_BOX(VBox),Frame,TRUE,TRUE,0);
-    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
-    gtk_container_add(GTK_CONTAINER(Frame),vbox);
-    gtk_container_set_border_width (GTK_CONTAINER (vbox), BOX_SPACING);
-
-    playlist_content_none = gtk_radio_button_new_with_label(NULL,_("Write only list of files"));
-    gtk_box_pack_start(GTK_BOX(vbox),playlist_content_none,FALSE,FALSE,0);
-
-    playlist_content_filename = gtk_radio_button_new_with_label_from_widget(
-        GTK_RADIO_BUTTON(playlist_content_none),_("Write info using filename"));
-    gtk_box_pack_start(GTK_BOX(vbox),playlist_content_filename,FALSE,FALSE,0);
-
-    playlist_content_mask = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(playlist_content_none), _("Write info using:"));
-    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, BOX_SPACING);
-    gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,0);
-    gtk_box_pack_start(GTK_BOX(hbox),playlist_content_mask,FALSE,FALSE,0);
-    // Set a label, a combobox and un editor button in the 3rd radio button
-    PlayListContentMaskCombo = gtk_combo_box_new_with_model_and_entry(GTK_TREE_MODEL(PlayListContentMaskModel));
-    gtk_combo_box_set_entry_text_column(GTK_COMBO_BOX(PlayListContentMaskCombo),MISC_COMBO_TEXT);
-    gtk_box_pack_start(GTK_BOX(hbox),PlayListContentMaskCombo,FALSE,FALSE,0);
-    // History list
-    Load_Playlist_Content_Mask_List(PlayListContentMaskModel, MISC_COMBO_TEXT);
-    Add_String_To_Combo_List(PlayListContentMaskModel, PLAYLIST_CONTENT_MASK_VALUE);
-    gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(PlayListContentMaskCombo))), PLAYLIST_CONTENT_MASK_VALUE);
-
-    // Mask status icon
-    // Signal connection to check if mask is correct into the mask entry
-    g_signal_connect (gtk_bin_get_child (GTK_BIN (PlayListContentMaskCombo)),
-                      "changed", G_CALLBACK (entry_check_content_mask),
-                      NULL);
-
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(playlist_content_none),    PLAYLIST_CONTENT_NONE);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(playlist_content_filename),PLAYLIST_CONTENT_FILENAME);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(playlist_content_mask),    PLAYLIST_CONTENT_MASK);
-
-
-    gtk_widget_show_all(WritePlaylistWindow);
-    if (PLAYLIST_WINDOW_X > 0 && PLAYLIST_WINDOW_Y > 0)
-        gtk_window_move(GTK_WINDOW(WritePlaylistWindow),PLAYLIST_WINDOW_X,PLAYLIST_WINDOW_Y);
-
-    /* To initialize the mask status icon and visibility */
-    g_signal_emit_by_name(G_OBJECT(gtk_bin_get_child(GTK_BIN(PlayListNameMaskCombo))),"changed");
-    g_signal_emit_by_name(G_OBJECT(gtk_bin_get_child(GTK_BIN(PlayListContentMaskCombo))),"changed");
+    return g_strdup_printf ("%d", disc_number);
 }
 
-static void
-Destroy_Write_Playlist_Window (void)
+gchar *
+et_track_number_to_string (const guint track_number)
 {
-    if (WritePlaylistWindow)
+    if (g_settings_get_boolean (MainSettings, "tag-number-padded"))
     {
-        Write_Playlist_Window_Apply_Changes();
-
-        gtk_widget_destroy(WritePlaylistWindow);
-        WritePlaylistWindow = NULL;
+        return g_strdup_printf ("%.*d", g_settings_get_uint (MainSettings,
+                                                             "tag-number-length"),
+                                track_number);
     }
-}
-
-/*
- * For the configuration file...
- */
-void Write_Playlist_Window_Apply_Changes (void)
-{
-    if (WritePlaylistWindow)
+    else
     {
-        gint x, y;
-        GdkWindow *window;
-
-        window = gtk_widget_get_window (WritePlaylistWindow);
-
-        if ( window && gdk_window_is_visible(window) && gdk_window_get_state(window)!=GDK_WINDOW_STATE_MAXIMIZED )
-        {
-            /* Origin of the window. */
-            gdk_window_get_root_origin(window,&x,&y);
-            PLAYLIST_WINDOW_X = x;
-            PLAYLIST_WINDOW_Y = y;
-        }
-
-        /* List of variables also set in the function 'Playlist_Write_Button_Pressed' */
-        if (PLAYLIST_NAME) g_free(PLAYLIST_NAME);
-        PLAYLIST_NAME                 = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(PlayListNameMaskCombo)))));
-        PLAYLIST_USE_MASK_NAME        = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(playlist_use_mask_name));
-        PLAYLIST_USE_DIR_NAME         = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(playlist_use_dir_name));
-
-        PLAYLIST_ONLY_SELECTED_FILES  = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(playlist_only_selected_files));
-        PLAYLIST_FULL_PATH            = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(playlist_full_path));
-        PLAYLIST_RELATIVE_PATH        = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(playlist_relative_path));
-        PLAYLIST_CREATE_IN_PARENT_DIR = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(playlist_create_in_parent_dir));
-        PLAYLIST_USE_DOS_SEPARATOR    = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(playlist_use_dos_separator));
-
-        PLAYLIST_CONTENT_NONE         = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(playlist_content_none));
-        PLAYLIST_CONTENT_FILENAME     = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(playlist_content_filename));
-        PLAYLIST_CONTENT_MASK         = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(playlist_content_mask));
-        
-        if (PLAYLIST_CONTENT_MASK_VALUE) g_free(PLAYLIST_CONTENT_MASK_VALUE);
-        PLAYLIST_CONTENT_MASK_VALUE   = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(PlayListContentMaskCombo)))));
-
-        /* Save combobox history lists before exit */
-        Save_Play_List_Name_List(PlayListNameMaskModel, MISC_COMBO_TEXT);
-        Save_Playlist_Content_Mask_List(PlayListContentMaskModel, MISC_COMBO_TEXT);
+        return g_strdup_printf ("%d", track_number);
     }
 }
 
-static void
-Playlist_Write_Button_Pressed (void)
-{
-    gchar *playlist_name = NULL;
-    gchar *playlist_path_utf8;      // Path
-    gchar *playlist_basename_utf8;  // Filename
-    gchar *playlist_name_utf8;      // Path + filename
-    gchar *temp;
-    GtkWidget *msgdialog;
-
-    // Check if playlist name was filled
-    if ( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(playlist_use_mask_name))
-    &&   g_utf8_strlen(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(PlayListNameMaskCombo)))), -1)<=0 )
-        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(playlist_use_dir_name),TRUE);
-
-    /* List of variables also set in the function 'Write_Playlist_Window_Apply_Changes' */
-    /***if (PLAYLIST_NAME) g_free(PLAYLIST_NAME);
-    PLAYLIST_NAME                 = g_strdup(gtk_entry_get_text(GTK_ENTRY(GTK_BIN(PlayListNameMaskCombo)->child)));
-    PLAYLIST_USE_MASK_NAME        = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(playlist_use_mask_name));
-    PLAYLIST_USE_DIR_NAME         = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(playlist_use_dir_name));
-
-    PLAYLIST_ONLY_SELECTED_FILES  = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(playlist_only_selected_files));
-    PLAYLIST_FULL_PATH            = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(playlist_full_path));
-    PLAYLIST_RELATIVE_PATH        = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(playlist_relative_path));
-    PLAYLIST_CREATE_IN_PARENT_DIR = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(playlist_create_in_parent_dir));
-    PLAYLIST_USE_DOS_SEPARATOR    = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(playlist_use_dos_separator));
-
-    PLAYLIST_CONTENT_NONE         = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(playlist_content_none));
-    PLAYLIST_CONTENT_FILENAME     = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(playlist_content_filename));
-    PLAYLIST_CONTENT_MASK         = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(playlist_content_mask));
-    if (PLAYLIST_CONTENT_MASK_VALUE) g_free(PLAYLIST_CONTENT_MASK_VALUE);
-    PLAYLIST_CONTENT_MASK_VALUE   = g_strdup(gtk_entry_get_text(GTK_ENTRY(GTK_BIN(PlayListContentMaskCombo)->child)));***/
-    Write_Playlist_Window_Apply_Changes();
-
-    // Path of the playlist file (may be truncated later if PLAYLIST_CREATE_IN_PARENT_DIR is TRUE)
-    playlist_path_utf8 = filename_to_display(Browser_Get_Current_Path());
-
-    /* Build the playlist filename. */
-    if (PLAYLIST_USE_MASK_NAME)
-    {
-
-        if (!ETCore->ETFileList)
-            return;
-
-        Add_String_To_Combo_List(PlayListNameMaskModel, PLAYLIST_NAME);
-
-        // Generate filename from tag of the current selected file (hummm FIX ME)
-        temp = filename_from_display(PLAYLIST_NAME);
-        playlist_basename_utf8 = Scan_Generate_New_Filename_From_Mask(ETCore->ETFileDisplayed,temp,FALSE);
-        g_free(temp);
-
-        // Replace Characters (with scanner)
-        if (RFS_CONVERT_UNDERSCORE_AND_P20_INTO_SPACE)
-        {
-            Scan_Convert_Underscore_Into_Space(playlist_basename_utf8);
-            Scan_Convert_P20_Into_Space(playlist_basename_utf8);
-        }
-        if (RFS_CONVERT_SPACE_INTO_UNDERSCORE)
-        {
-            Scan_Convert_Space_Into_Underscore (playlist_basename_utf8);
-        }
-        if (RFS_REMOVE_SPACES)
-				 {
-				    Scan_Remove_Spaces(playlist_basename_utf8);
-				 }
-
-    }else // PLAYLIST_USE_DIR_NAME
-    {
-
-        if ( strcmp(playlist_path_utf8,G_DIR_SEPARATOR_S)==0 )
-        {
-            playlist_basename_utf8 = g_strdup("playlist");
-        }else
-        {
-            gchar *tmp_string = g_strdup(playlist_path_utf8);
-            // Remove last '/'
-            if (tmp_string[strlen(tmp_string)-1]==G_DIR_SEPARATOR)
-                tmp_string[strlen(tmp_string)-1] = '\0';
-            // Get directory name
-            temp = g_path_get_basename(tmp_string);
-            playlist_basename_utf8 = g_strdup(temp);
-            g_free(tmp_string);
-            g_free(temp);
-        }
-
-    }
-
-    // Must be placed after "Build the playlist filename", as we can truncate the path!
-    if (PLAYLIST_CREATE_IN_PARENT_DIR)
-    {
-        if ( (strcmp(playlist_path_utf8,G_DIR_SEPARATOR_S) != 0) )
-        {
-            gchar *tmp;
-            // Remove last '/'
-            if (playlist_path_utf8[strlen(playlist_path_utf8)-1]==G_DIR_SEPARATOR)
-                playlist_path_utf8[strlen(playlist_path_utf8)-1] = '\0';
-            // Get parent directory
-            if ( (tmp=strrchr(playlist_path_utf8,G_DIR_SEPARATOR)) != NULL )
-                *(tmp + 1) = '\0';
-        }
-    }
-
-    // Generate path + filename of playlist
-    if (playlist_path_utf8[strlen(playlist_path_utf8)-1]==G_DIR_SEPARATOR)
-        playlist_name_utf8 = g_strconcat(playlist_path_utf8,playlist_basename_utf8,".m3u",NULL);
-    else
-        playlist_name_utf8 = g_strconcat(playlist_path_utf8,G_DIR_SEPARATOR_S,playlist_basename_utf8,".m3u",NULL);
-
-    g_free(playlist_path_utf8);
-    g_free(playlist_basename_utf8);
-
-    playlist_name = filename_from_display(playlist_name_utf8);
-
-    {
-        GFile *file = g_file_new_for_path (playlist_name);
-        GError *error = NULL;
-
-        if (!write_playlist (file, &error))
-        {
-            // Writing fails...
-            msgdialog = gtk_message_dialog_new(GTK_WINDOW(WritePlaylistWindow),
-                                               GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-                                               GTK_MESSAGE_ERROR,
-                                               GTK_BUTTONS_CLOSE,
-                                               _("Cannot write playlist file '%s'"),
-                                               playlist_name_utf8);
-            gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (msgdialog),
-                                                      "%s", error->message);
-            gtk_window_set_title(GTK_WINDOW(msgdialog),_("Playlist File Error"));
-
-            gtk_dialog_run(GTK_DIALOG(msgdialog));
-            gtk_widget_destroy(msgdialog);
-            g_error_free (error);
-        }else
-        {
-            gchar *msg;
-            msg = g_strdup_printf(_("Written playlist file '%s'"),playlist_name_utf8);
-            /*msgbox = msg_box_new(_("Information"),
-                                   GTK_WINDOW(WritePlaylistWindow),
-                                   NULL,
-                                   GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-								   msg,
-								   GTK_STOCK_DIALOG_INFO,
-                                   GTK_STOCK_OK, GTK_RESPONSE_OK,
-                                   NULL);
-            gtk_dialog_run(GTK_DIALOG(msgbox));
-            gtk_widget_destroy(msgbox);*/
-            Statusbar_Message(msg,TRUE);
-            g_free(msg);
-        }
-        g_object_unref (file);
-    }
-    g_free(playlist_name_utf8);
-    g_free(playlist_name);
-}
-
-/*
- * entry_check_content_mask:
- * @entry: the entry for which to check the mask
- * @user_data: user data set when the signal was connected
- *
- * Display an icon in the entry if the current text contains an invalid mask.
- */
-static void
-entry_check_content_mask (GtkEntry *entry, gpointer user_data)
-{
-    gchar *tmp  = NULL;
-    gchar *mask = NULL;
-
-    g_return_if_fail (entry != NULL);
-
-    mask = g_strdup (gtk_entry_get_text (entry));
-    if (!mask || strlen(mask)<1)
-        goto Bad_Mask;
-
-    while (mask)
-    {
-        if ( (tmp=strrchr(mask,'%'))==NULL )
-        {
-            /* There is no more code. */
-            /* No code in mask is accepted. */
-            goto Good_Mask;
-        }
-        if (strlen(tmp)>1 && (tmp[1]=='t' || tmp[1]=='a' || tmp[1]=='b' || tmp[1]=='y' ||
-                              tmp[1]=='g' || tmp[1]=='n' || tmp[1]=='l' || tmp[1]=='c' || tmp[1]=='i'))
-        {
-            /* The code is valid. */
-            /* No separator is accepted. */
-            *(mask+strlen(mask)-strlen(tmp)) = '\0';
-        }else
-        {
-            goto Bad_Mask;
-        }
-    }
-
-    Bad_Mask:
-        g_free(mask);
-        gtk_entry_set_icon_from_icon_name (entry, GTK_ENTRY_ICON_SECONDARY,
-                                           "emblem-unreadable");
-        gtk_entry_set_icon_tooltip_text (entry, GTK_ENTRY_ICON_SECONDARY,
-                                         _("Invalid scanner mask"));
-        return;
-
-    Good_Mask:
-        g_free(mask);
-        gtk_entry_set_icon_from_stock (entry, GTK_ENTRY_ICON_SECONDARY, NULL);
-        return;
-}
-
-/*
- * Function to replace UNIX ForwardSlash with a DOS BackSlash
- */
-static void
-Playlist_Convert_Forwardslash_Into_Backslash (const gchar *string)
-{
-    gchar *tmp;
-
-    while ((tmp=strchr(string,'/'))!=NULL)
-        *tmp = '\\';
-}
-
-
-/*
- * Write a playlist
- *  - 'playlist_name' in file system encoding (not UTF-8)
- */
-static gboolean
-write_playlist (GFile *file, GError **error)
-{
-    GFile *parent;
-    GFileOutputStream *ostream;
-    GString *to_write;
-    ET_File *etfile;
-    GList *l;
-    GList *etfilelist = NULL;
-    gchar *filename;
-    gchar *basedir;
-    gchar *temp;
-    gint   duration;
-
-    g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-
-    ostream = g_file_replace (file, NULL, FALSE, G_FILE_CREATE_NONE, NULL, error);
-
-    if (!ostream)
-    {
-        g_assert (error == NULL || *error != NULL);
-        return FALSE;
-    }
-
-    /* 'base directory' where is located the playlist. Used also to write file with a
-     * relative path for file located in this directory and sub-directories
-     */
-    parent = g_file_get_parent (file);
-    basedir = g_file_get_path (parent);
-    g_object_unref (parent);
-
-    // 1) First line of the file (if playlist content is not set to "write only list of files")
-    if (!PLAYLIST_CONTENT_NONE)
-    {
-        gsize bytes_written;
-
-        to_write = g_string_new ("#EXTM3U\r\n");
-
-        if (!g_output_stream_write_all (G_OUTPUT_STREAM (ostream),
-                                        to_write->str, to_write->len,
-                                        &bytes_written, NULL, error))
-        {
-            g_debug ("Only %" G_GSIZE_FORMAT " bytes out of %" G_GSIZE_FORMAT
-                     "bytes of data were written", bytes_written,
-                     to_write->len);
-            g_assert (error == NULL || *error != NULL);
-            g_string_free (to_write, TRUE);
-            g_object_unref (ostream);
-            return FALSE;
-        }
-        g_string_free (to_write, TRUE);
-    }
-
-    if (PLAYLIST_ONLY_SELECTED_FILES)
-    {
-        GList *selfilelist = NULL;
-        GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserList));
-
-        selfilelist = gtk_tree_selection_get_selected_rows(selection, NULL);
-
-        for (l = selfilelist; l != NULL; l = g_list_next (l))
-        {
-            etfile = Browser_List_Get_ETFile_From_Path (l->data);
-            etfilelist = g_list_prepend (etfilelist, etfile);
-        }
-
-        etfilelist = g_list_reverse (etfilelist);
-
-        g_list_free_full (selfilelist, (GDestroyNotify)gtk_tree_path_free);
-    }else
-    {
-        etfilelist = g_list_first(ETCore->ETFileList);
-    }
-
-    for (l = etfilelist; l != NULL; l = g_list_next (l))
-    {
-        etfile = (ET_File *)l->data;
-        filename = ((File_Name *)etfile->FileNameCur->data)->value;
-        duration = ((ET_File_Info *)etfile->ETFileInfo)->duration;
-
-        if (PLAYLIST_RELATIVE_PATH)
-        {
-            // Keep only files in this directory and sub-dirs
-            if ( strncmp(filename,basedir,strlen(basedir))==0 )
-            {
-                gsize bytes_written;
-
-                // 2) Write the header
-                if (PLAYLIST_CONTENT_NONE)
-                {
-                    // No header written
-                }else if (PLAYLIST_CONTENT_FILENAME)
-                {
-
-                    // Header uses only filename
-                    temp = g_path_get_basename(filename);
-                    to_write = g_string_new ("#EXTINF:");
-                    /* Must be written in system encoding (not UTF-8)*/
-                    g_string_append_printf (to_write, "%d,%s\r\n", duration,
-                                            temp);
-
-                    if (!g_output_stream_write_all (G_OUTPUT_STREAM (ostream),
-                                                    to_write->str,
-                                                    to_write->len,
-                                                    &bytes_written, NULL,
-                                                    error))
-                    {
-                        g_debug ("Only %" G_GSIZE_FORMAT " bytes out of %"
-                                 G_GSIZE_FORMAT "bytes of data were written",
-                                 bytes_written, to_write->len);
-                        g_assert (error == NULL || *error != NULL);
-                        g_string_free (to_write, TRUE);
-                        g_object_unref (ostream);
-                        return FALSE;
-                    }
-                    g_string_free (to_write, TRUE);
-                    g_free(temp);
-                }else if (PLAYLIST_CONTENT_MASK)
-                {
-                    // Header uses generated filename from a mask
-                    gchar *mask = filename_from_display(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(PlayListContentMaskCombo)))));
-                    // Special case : we don't replace illegal characters and don't check if there is a directory separator in the mask.
-                    gchar *filename_generated_utf8 = Scan_Generate_New_Filename_From_Mask(etfile,mask,TRUE);
-                    gchar *filename_generated = filename_from_display(filename_generated_utf8);
-
-                    to_write = g_string_new ("#EXTINF:");
-                    /* Must be written in system encoding (not UTF-8)*/
-                    g_string_append_printf (to_write, "%d,%s\r\n", duration,
-                                            filename_generated);
-
-                    if (!g_output_stream_write_all (G_OUTPUT_STREAM (ostream),
-                                                    to_write->str,
-                                                    to_write->len,
-                                                    &bytes_written, NULL,
-                                                    error))
-                    {
-                        g_debug ("Only %" G_GSIZE_FORMAT " bytes out of %"
-                                 G_GSIZE_FORMAT "bytes of data were written",
-                                 bytes_written, to_write->len);
-                        g_assert (error == NULL || *error != NULL);
-                        g_string_free (to_write, TRUE);
-                        g_object_unref (ostream);
-                        return FALSE;
-                    }
-                    g_string_free (to_write, TRUE);
-                    g_free(mask);
-                    g_free(filename_generated_utf8);
-                }
-
-                // 3) Write the file path
-                if (PLAYLIST_USE_DOS_SEPARATOR)
-                {
-                    gchar *filename_conv = g_strdup(filename+strlen(basedir)+1);
-                    Playlist_Convert_Forwardslash_Into_Backslash(filename_conv);
-
-                    to_write = g_string_new (filename_conv);
-                    /* Must be written in system encoding (not UTF-8)*/
-                    to_write = g_string_append (to_write, "\r\n");
-
-                    if (!g_output_stream_write_all (G_OUTPUT_STREAM (ostream),
-                                                    to_write->str,
-                                                    to_write->len,
-                                                    &bytes_written, NULL,
-                                                    error))
-                    {
-                        g_debug ("Only %" G_GSIZE_FORMAT " bytes out of %"
-                                 G_GSIZE_FORMAT "bytes of data were written",
-                                 bytes_written, to_write->len);
-                        g_assert (error == NULL || *error != NULL);
-                        g_string_free (to_write, TRUE);
-                        g_object_unref (ostream);
-                        return FALSE;
-                    }
-                    g_string_free (to_write, TRUE);
-                    g_free(filename_conv);
-                }else
-                {
-                    to_write = g_string_new (filename+strlen(basedir)+1);
-                    /* Must be written in system encoding (not UTF-8)*/
-                    to_write = g_string_append (to_write, "\r\n");
-
-                    if (!g_output_stream_write_all (G_OUTPUT_STREAM (ostream),
-                                                    to_write->str,
-                                                    to_write->len,
-                                                    &bytes_written, NULL,
-                                                    error))
-                    {
-                        g_debug ("Only %" G_GSIZE_FORMAT " bytes out of %"
-                                 G_GSIZE_FORMAT "bytes of data were written",
-                                 bytes_written, to_write->len);
-                        g_assert (error == NULL || *error != NULL);
-                        g_string_free (to_write, TRUE);
-                        g_object_unref (ostream);
-                        return FALSE;
-                    }
-                    g_string_free (to_write, TRUE);
-                }
-            }
-        }else // PLAYLIST_FULL_PATH
-        {
-            gsize bytes_written;
-
-            // 2) Write the header
-            if (PLAYLIST_CONTENT_NONE)
-            {
-                // No header written
-            }else if (PLAYLIST_CONTENT_FILENAME)
-            {
-                // Header uses only filename
-                temp = g_path_get_basename(filename);
-                to_write = g_string_new ("#EXTINF:");
-                /* Must be written in system encoding (not UTF-8)*/
-                g_string_append_printf (to_write, "%d,%s\r\n", duration,
-                                        temp);
-
-                if (!g_output_stream_write_all (G_OUTPUT_STREAM (ostream),
-                                                to_write->str, to_write->len,
-                                                &bytes_written, NULL, error))
-                {
-                    g_debug ("Only %" G_GSIZE_FORMAT " bytes out of %"
-                             G_GSIZE_FORMAT" bytes of data were written",
-                             bytes_written, to_write->len);
-                    g_assert (error == NULL || *error != NULL);
-                    g_string_free (to_write, TRUE);
-                    g_object_unref (ostream);
-                    return FALSE;
-                }
-                g_string_free (to_write, TRUE);
-                g_free(temp);
-            }else if (PLAYLIST_CONTENT_MASK)
-            {
-                // Header uses generated filename from a mask
-                gchar *mask = filename_from_display(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(PlayListContentMaskCombo)))));
-                gchar *filename_generated_utf8 = Scan_Generate_New_Filename_From_Mask(etfile,mask,TRUE);
-                gchar *filename_generated = filename_from_display(filename_generated_utf8);
-
-                to_write = g_string_new ("#EXTINF:");
-                /* Must be written in system encoding (not UTF-8)*/
-                g_string_append_printf (to_write, "%d,%s\r\n", duration,
-                                        filename_generated);
-
-                if (!g_output_stream_write_all (G_OUTPUT_STREAM (ostream),
-                                                to_write->str, to_write->len,
-                                                &bytes_written, NULL, error))
-                {
-                    g_debug ("Only %" G_GSIZE_FORMAT " bytes out of %"
-                             G_GSIZE_FORMAT" bytes of data were written",
-                             bytes_written, to_write->len);
-                    g_assert (error == NULL || *error != NULL);
-                    g_string_free (to_write, TRUE);
-                    g_object_unref (ostream);
-                    return FALSE;
-                }
-                g_string_free (to_write, TRUE);
-                g_free(mask);
-                g_free(filename_generated_utf8);
-            }
-
-            // 3) Write the file path
-            if (PLAYLIST_USE_DOS_SEPARATOR)
-            {
-                gchar *filename_conv = g_strdup(filename);
-                Playlist_Convert_Forwardslash_Into_Backslash(filename_conv);
-
-                to_write = g_string_new (filename_conv);
-                /* Must be written in system encoding (not UTF-8)*/
-                to_write = g_string_append (to_write, "\r\n");
-
-                if (!g_output_stream_write_all (G_OUTPUT_STREAM (ostream),
-                                                to_write->str, to_write->len,
-                                                &bytes_written, NULL, error))
-                {
-                    g_debug ("Only %" G_GSIZE_FORMAT " bytes out of %"
-                             G_GSIZE_FORMAT" bytes of data were written",
-                             bytes_written, to_write->len);
-                    g_assert (error == NULL || *error != NULL);
-                    g_string_free (to_write, TRUE);
-                    g_object_unref (ostream);
-                    return FALSE;
-                }
-                g_string_free (to_write, TRUE);
-                g_free(filename_conv);
-            }else
-            {
-                to_write = g_string_new (filename);
-                /* Must be written in system encoding (not UTF-8)*/
-                to_write = g_string_append (to_write, "\r\n");
-
-                if (!g_output_stream_write_all (G_OUTPUT_STREAM (ostream),
-                                                to_write->str, to_write->len,
-                                                &bytes_written, NULL, error))
-                {
-                    g_debug ("Only %" G_GSIZE_FORMAT " bytes out of %"
-                             G_GSIZE_FORMAT" bytes of data were written",
-                             bytes_written, to_write->len);
-                    g_assert (error == NULL || *error != NULL);
-                    g_string_free (to_write, TRUE);
-                    g_object_unref (ostream);
-                    return FALSE;
-                }
-                g_string_free (to_write, TRUE);
-            }
-        }
-    }
-
-    if (PLAYLIST_ONLY_SELECTED_FILES)
-        g_list_free(etfilelist);
-
-    g_assert (error == NULL || *error == NULL);
-    g_object_unref (ostream);
-    g_free(basedir);
-    return TRUE;
-}
-
-
-
-
-/*****************************
- * Searching files functions *
- *****************************/
-/*
- * The window to search keywords in the list of files.
- */
-void Open_Search_File_Window (void)
-{
-    GtkWidget *VBox;
-    GtkWidget *Table;
-    GtkWidget *Label;
-    GtkWidget *Button;
-    GtkWidget *Separator;
-    GtkWidget *ScrollWindow;
-    GtkTreeViewColumn* column;
-    GtkCellRenderer* renderer;
-    gchar *SearchResultList_Titles[] = { N_("Filename"),
-                                         N_("Title"),
-                                         N_("Artist"),
-                                         N_("Album Artist"),
-                                         N_("Album"),
-                                         N_("CD"),
-                                         N_("Year"),
-                                         N_("Track"),
-                                         N_("Genre"),
-                                         N_("Comment"),
-                                         N_("Composer"),
-                                         N_("Original Artist"),
-                                         N_("Copyright"),
-                                         N_("URL"),
-                                         N_("Encoded By")
-                                       };
-
-
-    if (SearchFileWindow != NULL)
-    {
-        gtk_window_present(GTK_WINDOW(SearchFileWindow));
-        return;
-    }
-
-    SearchFileWindow = gtk_dialog_new ();
-    gtk_window_set_transient_for (GTK_WINDOW (SearchFileWindow),
-                                  GTK_WINDOW (MainWindow));
-    gtk_window_set_title (GTK_WINDOW (SearchFileWindow), _("Find Files"));
-    g_signal_connect(G_OBJECT(SearchFileWindow),"destroy", G_CALLBACK(Destroy_Search_File_Window),NULL);
-    g_signal_connect(G_OBJECT(SearchFileWindow),"delete_event", G_CALLBACK(Destroy_Search_File_Window),NULL);
-    gtk_window_set_default_size(GTK_WINDOW(SearchFileWindow),SEARCH_WINDOW_WIDTH,SEARCH_WINDOW_HEIGHT);
-
-    VBox = gtk_dialog_get_content_area (GTK_DIALOG (SearchFileWindow));
-    gtk_box_set_spacing (GTK_BOX (VBox), BOX_SPACING);
-    gtk_container_set_border_width (GTK_CONTAINER (SearchFileWindow),
-                                    BOX_SPACING);
-
-    Table = et_grid_new (3, 6);
-    gtk_container_add (GTK_CONTAINER (VBox), Table);
-    gtk_grid_set_row_spacing (GTK_GRID (Table), BOX_SPACING);
-    gtk_grid_set_column_spacing (GTK_GRID (Table), BOX_SPACING);
-
-    // Words to search
-    if (!SearchStringModel)
-        SearchStringModel = gtk_list_store_new(MISC_COMBO_COUNT, G_TYPE_STRING);
-    else
-        gtk_list_store_clear(SearchStringModel);
-
-    Label = gtk_label_new(_("Search:"));
-    gtk_misc_set_alignment(GTK_MISC(Label),1.0,0.5);
-    gtk_grid_attach (GTK_GRID (Table), Label, 0, 0, 1, 1);
-    SearchStringCombo = gtk_combo_box_new_with_model_and_entry(GTK_TREE_MODEL(SearchStringModel));
-    gtk_combo_box_set_entry_text_column(GTK_COMBO_BOX(SearchStringCombo),MISC_COMBO_TEXT);
-    gtk_widget_set_size_request(GTK_WIDGET(SearchStringCombo),200,-1);
-    gtk_grid_attach (GTK_GRID (Table), SearchStringCombo, 1, 0, 4, 1);
-    // History List
-    Load_Search_File_List(SearchStringModel, MISC_COMBO_TEXT);
-    gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(SearchStringCombo))),"");
-    gtk_widget_set_tooltip_text(GTK_WIDGET(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(SearchStringCombo)))),
-        _("Type the word to search into files. Or type nothing to display all files."));
-
-    // Set content of the clipboard if available
-    gtk_editable_paste_clipboard(GTK_EDITABLE(gtk_bin_get_child(GTK_BIN(SearchStringCombo))));
-
-    // Where...
-    Label = gtk_label_new(_("In:"));
-    gtk_misc_set_alignment(GTK_MISC(Label),1.0,0.5);
-    gtk_grid_attach (GTK_GRID (Table), Label, 0, 1, 1, 1);
-    /* Translators: This option is for the previous 'in' option. For instance,
-     * translate this as "Search" "In:" "the Filename". */
-    SearchInFilename = gtk_check_button_new_with_label(_("the Filename"));
-    /* Translators: This option is for the previous 'in' option. For instance,
-     * translate this as "Search" "In:" "the Tag".
-     * Note: label changed to "the Tag" (to be the only one) to fix a Hungarian
-     * grammatical problem (which uses one word to say "in the tag" like here)
-     */
-    SearchInTag = gtk_check_button_new_with_label(_("the Tag"));
-    gtk_grid_attach (GTK_GRID (Table), SearchInFilename, 1, 1, 1, 1);
-    gtk_grid_attach (GTK_GRID (Table), SearchInTag, 2, 1, 1, 1);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(SearchInFilename),SEARCH_IN_FILENAME);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(SearchInTag),SEARCH_IN_TAG);
-
-    Separator = gtk_separator_new(GTK_ORIENTATION_VERTICAL);
-    et_grid_attach_full (GTK_GRID (Table), Separator, 3, 1, 1, 1, FALSE, FALSE,
-                         4, 0);
-
-    // Property of the search
-    SearchCaseSensitive = gtk_check_button_new_with_label(_("Case sensitive"));
-    et_grid_attach_full (GTK_GRID (Table), SearchCaseSensitive, 4, 1, 1, 1,
-                         TRUE, FALSE, 0, 0);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(SearchCaseSensitive),SEARCH_CASE_SENSITIVE);
-
-    // Results list
-    ScrollWindow = gtk_scrolled_window_new(NULL,NULL);
-    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(ScrollWindow),GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
-    gtk_widget_set_size_request(GTK_WIDGET(ScrollWindow), -1, 130);
-    et_grid_attach_full (GTK_GRID (Table), ScrollWindow, 0, 2, 6, 1, TRUE,
-                         TRUE, 0, 0);
-
-    SearchResultListModel = gtk_list_store_new(SEARCH_COLUMN_COUNT,
-                                               G_TYPE_STRING, /* Filename */
-                                               G_TYPE_STRING, /* Title */
-                                               G_TYPE_STRING, /* Artist */
-                                               G_TYPE_STRING, /* Album Artist */
-											   G_TYPE_STRING, /* Album */
-                                               G_TYPE_STRING, /* Disc Number */
-                                               G_TYPE_STRING, /* Year */
-                                               G_TYPE_STRING, /* Track + Track Total */
-                                               G_TYPE_STRING, /* Genre */
-                                               G_TYPE_STRING, /* Comment */
-                                               G_TYPE_STRING, /* Composer */
-                                               G_TYPE_STRING, /* Orig. Artist */
-                                               G_TYPE_STRING, /* Copyright */
-                                               G_TYPE_STRING, /* URL */
-                                               G_TYPE_STRING, /* Encoded by */
-
-                                               G_TYPE_INT, /* Font Weight for Filename */
-                                               G_TYPE_INT, /* Font Weight for Title */
-                                               G_TYPE_INT, /* Font Weight for Artist */
-                                               G_TYPE_INT, /* Font Weight for Album Artist */
-											   G_TYPE_INT, /* Font Weight for Album */
-                                               G_TYPE_INT, /* Font Weight for Disc Number */
-                                               G_TYPE_INT, /* Font Weight for Year */
-                                               G_TYPE_INT, /* Font Weight for Track + Track Total */
-                                               G_TYPE_INT, /* Font Weight for Genre */
-                                               G_TYPE_INT, /* Font Weight for Comment */
-                                               G_TYPE_INT, /* Font Weight for Composer */
-                                               G_TYPE_INT, /* Font Weight for Orig. Artist */
-                                               G_TYPE_INT, /* Font Weight for Copyright */
-                                               G_TYPE_INT, /* Font Weight for URL */
-                                               G_TYPE_INT, /* Font Weight for Encoded by */
-
-                                               GDK_TYPE_COLOR, /* Color Weight for Filename */
-                                               GDK_TYPE_COLOR, /* Color Weight for Title */
-                                               GDK_TYPE_COLOR, /* Color Weight for Artist */
-                                               GDK_TYPE_COLOR, /* Color Weight for Album Artist */
-											   GDK_TYPE_COLOR, /* Color Weight for Album */
-                                               GDK_TYPE_COLOR, /* Color Weight for Disc Number */
-                                               GDK_TYPE_COLOR, /* Color Weight for Year */
-                                               GDK_TYPE_COLOR, /* Color Weight for Track + Track Total */
-                                               GDK_TYPE_COLOR, /* Color Weight for Genre */
-                                               GDK_TYPE_COLOR, /* Color Weight for Comment */
-                                               GDK_TYPE_COLOR, /* Color Weight for Composer */
-                                               GDK_TYPE_COLOR, /* Color Weight for Orig. Artist */
-                                               GDK_TYPE_COLOR, /* Color Weight for Copyright */
-                                               GDK_TYPE_COLOR, /* Color Weight for URL */
-                                               GDK_TYPE_COLOR, /* Color Weight for Encoded by */
-
-                                               G_TYPE_POINTER);
-    SearchResultList = gtk_tree_view_new_with_model(GTK_TREE_MODEL(SearchResultListModel));
-    g_object_unref (SearchResultListModel);
-
-    renderer = gtk_cell_renderer_text_new(); /* Filename */
-    column = gtk_tree_view_column_new_with_attributes(_(SearchResultList_Titles[0]), renderer,
-                                                      "text",           SEARCH_RESULT_FILENAME,
-                                                      "weight",         SEARCH_RESULT_FILENAME_WEIGHT,
-                                                      "foreground-gdk", SEARCH_RESULT_FILENAME_FOREGROUND,
-                                                      NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(SearchResultList), column);
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-
-    renderer = gtk_cell_renderer_text_new(); /* Title */
-    column = gtk_tree_view_column_new_with_attributes(_(SearchResultList_Titles[1]), renderer,
-                                                      "text",           SEARCH_RESULT_TITLE,
-                                                      "weight",         SEARCH_RESULT_TITLE_WEIGHT,
-                                                      "foreground-gdk", SEARCH_RESULT_TITLE_FOREGROUND,
-                                                      NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(SearchResultList), column);
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-
-    renderer = gtk_cell_renderer_text_new(); /* Artist */
-    column = gtk_tree_view_column_new_with_attributes(_(SearchResultList_Titles[2]), renderer,
-                                                      "text",           SEARCH_RESULT_ARTIST,
-                                                      "weight",         SEARCH_RESULT_ARTIST_WEIGHT,
-                                                      "foreground-gdk", SEARCH_RESULT_ARTIST_FOREGROUND,
-                                                      NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(SearchResultList), column);
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-
-	renderer = gtk_cell_renderer_text_new(); /* Album Artist */
-    column = gtk_tree_view_column_new_with_attributes(_(SearchResultList_Titles[3]), renderer,
-                                                      "text",           SEARCH_RESULT_ALBUM_ARTIST,
-                                                      "weight",         SEARCH_RESULT_ALBUM_ARTIST_WEIGHT,
-                                                      "foreground-gdk", SEARCH_RESULT_ALBUM_ARTIST_FOREGROUND,
-                                                      NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(SearchResultList), column);
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-
-    renderer = gtk_cell_renderer_text_new(); /* Album */
-    column = gtk_tree_view_column_new_with_attributes(_(SearchResultList_Titles[4]), renderer,
-                                                      "text",           SEARCH_RESULT_ALBUM,
-                                                      "weight",         SEARCH_RESULT_ALBUM_WEIGHT,
-                                                      "foreground-gdk", SEARCH_RESULT_ALBUM_FOREGROUND,
-                                                      NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(SearchResultList), column);
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-
-    renderer = gtk_cell_renderer_text_new(); /* Disc Number */
-    column = gtk_tree_view_column_new_with_attributes(_(SearchResultList_Titles[5]), renderer,
-                                                      "text",           SEARCH_RESULT_DISC_NUMBER,
-                                                      "weight",         SEARCH_RESULT_DISC_NUMBER_WEIGHT,
-                                                      "foreground-gdk", SEARCH_RESULT_DISC_NUMBER_FOREGROUND,
-                                                      NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(SearchResultList), column);
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-
-    renderer = gtk_cell_renderer_text_new(); /* Year */
-    column = gtk_tree_view_column_new_with_attributes(_(SearchResultList_Titles[6]), renderer,
-                                                      "text",           SEARCH_RESULT_YEAR,
-                                                      "weight",         SEARCH_RESULT_YEAR_WEIGHT,
-                                                      "foreground-gdk", SEARCH_RESULT_YEAR_FOREGROUND,
-                                                      NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(SearchResultList), column);
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-
-    renderer = gtk_cell_renderer_text_new(); /* Track */
-    column = gtk_tree_view_column_new_with_attributes(_(SearchResultList_Titles[7]), renderer,
-                                                      "text",           SEARCH_RESULT_TRACK,
-                                                      "weight",         SEARCH_RESULT_TRACK_WEIGHT,
-                                                      "foreground-gdk", SEARCH_RESULT_TRACK_FOREGROUND,
-                                                      NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(SearchResultList), column);
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-
-    renderer = gtk_cell_renderer_text_new(); /* Genre */
-    column = gtk_tree_view_column_new_with_attributes(_(SearchResultList_Titles[8]), renderer,
-                                                      "text",           SEARCH_RESULT_GENRE,
-                                                      "weight",         SEARCH_RESULT_GENRE_WEIGHT,
-                                                      "foreground-gdk", SEARCH_RESULT_GENRE_FOREGROUND,
-                                                      NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(SearchResultList), column);
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-
-    renderer = gtk_cell_renderer_text_new(); /* Comment */
-    column = gtk_tree_view_column_new_with_attributes(_(SearchResultList_Titles[9]), renderer,
-                                                      "text",           SEARCH_RESULT_COMMENT,
-                                                      "weight",         SEARCH_RESULT_COMMENT_WEIGHT,
-                                                      "foreground-gdk", SEARCH_RESULT_COMMENT_FOREGROUND,
-                                                      NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(SearchResultList), column);
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-
-    renderer = gtk_cell_renderer_text_new(); /* Composer */
-    column = gtk_tree_view_column_new_with_attributes(_(SearchResultList_Titles[10]), renderer,
-                                                      "text",           SEARCH_RESULT_COMPOSER,
-                                                      "weight",         SEARCH_RESULT_COMPOSER_WEIGHT,
-                                                      "foreground-gdk", SEARCH_RESULT_COMPOSER_FOREGROUND,
-                                                      NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(SearchResultList), column);
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-
-    renderer = gtk_cell_renderer_text_new(); /* Orig. Artist */
-    column = gtk_tree_view_column_new_with_attributes(_(SearchResultList_Titles[11]), renderer,
-                                                      "text",           SEARCH_RESULT_ORIG_ARTIST,
-                                                      "weight",         SEARCH_RESULT_ORIG_ARTIST_WEIGHT,
-                                                      "foreground-gdk", SEARCH_RESULT_ORIG_ARTIST_FOREGROUND,
-                                                      NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(SearchResultList), column);
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-
-    renderer = gtk_cell_renderer_text_new(); /* Copyright */
-    column = gtk_tree_view_column_new_with_attributes(_(SearchResultList_Titles[12]), renderer,
-                                                      "text",           SEARCH_RESULT_COPYRIGHT,
-                                                      "weight",         SEARCH_RESULT_COPYRIGHT_WEIGHT,
-                                                      "foreground-gdk", SEARCH_RESULT_COPYRIGHT_FOREGROUND,
-                                                      NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(SearchResultList), column);
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-
-    renderer = gtk_cell_renderer_text_new(); /* URL */
-    column = gtk_tree_view_column_new_with_attributes(_(SearchResultList_Titles[13]), renderer,
-                                                      "text",           SEARCH_RESULT_URL,
-                                                      "weight",         SEARCH_RESULT_URL_WEIGHT,
-                                                      "foreground-gdk", SEARCH_RESULT_URL_FOREGROUND,
-                                                      NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(SearchResultList), column);
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-
-    renderer = gtk_cell_renderer_text_new(); /* Encoded by */
-    column = gtk_tree_view_column_new_with_attributes(_(SearchResultList_Titles[14]), renderer,
-                                                      "text",           SEARCH_RESULT_ENCODED_BY,
-                                                      "weight",         SEARCH_RESULT_ENCODED_BY_WEIGHT,
-                                                      "foreground-gdk", SEARCH_RESULT_ENCODED_BY_FOREGROUND,
-                                                      NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(SearchResultList), column);
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-
-    gtk_container_add(GTK_CONTAINER(ScrollWindow),SearchResultList);
-    gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(SearchResultList)),
-            GTK_SELECTION_MULTIPLE);
-    //gtk_tree_view_columns_autosize(GTK_TREE_VIEW(SearchResultList)); // Doesn't seem to work...
-    gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(SearchResultList), FALSE);
-    gtk_widget_set_sensitive(GTK_WIDGET(SearchResultList), FALSE);
-    g_signal_connect(G_OBJECT(gtk_tree_view_get_selection(GTK_TREE_VIEW(SearchResultList))),
-            "changed", G_CALLBACK(Search_Result_List_Row_Selected), NULL);
-
-    // Button to run the search
-    Button = gtk_button_new_from_stock(GTK_STOCK_FIND);
-    gtk_grid_attach (GTK_GRID (Table), Button, 5, 0, 1, 1);
-    gtk_widget_set_can_default(Button,TRUE);
-    gtk_widget_grab_default(Button);
-    g_signal_connect(G_OBJECT(Button),"clicked", G_CALLBACK(Search_File),NULL);
-    g_signal_connect(G_OBJECT(gtk_bin_get_child(GTK_BIN(SearchStringCombo))),"activate", G_CALLBACK(Search_File),NULL);
-
-    // Button to cancel
-    Button = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
-    gtk_grid_attach (GTK_GRID (Table), Button, 5, 1, 1, 1);
-    g_signal_connect(G_OBJECT(Button),"clicked", G_CALLBACK(Destroy_Search_File_Window),NULL);
-
-    // Status bar
-    SearchStatusBar = gtk_statusbar_new();
-    /*gtk_grid_attach (GTK_GRID (Table), SearchStatusBar, 0, 3, 5, 1);*/
-    gtk_box_pack_start(GTK_BOX(VBox),SearchStatusBar,FALSE,TRUE,0);
-    SearchStatusBarContext = gtk_statusbar_get_context_id(GTK_STATUSBAR(SearchStatusBar),"Messages");
-    gtk_statusbar_push(GTK_STATUSBAR(SearchStatusBar),SearchStatusBarContext,_("Ready to search…"));
-
-    gtk_widget_show_all(SearchFileWindow);
-
-    if (SET_SEARCH_WINDOW_POSITION)
-        gtk_window_move(GTK_WINDOW(SearchFileWindow), SEARCH_WINDOW_X, SEARCH_WINDOW_Y);
-}
-
-static void
-Destroy_Search_File_Window (void)
-{
-    if (SearchFileWindow)
-    {
-        /* Save combobox history lists before exit */
-        Save_Search_File_List(SearchStringModel, MISC_COMBO_TEXT);
-
-        Search_File_Window_Apply_Changes();
-
-        gtk_widget_destroy(SearchFileWindow);
-        SearchFileWindow = NULL;
-    }
-}
-
-/*
- * For the configuration file...
- */
-void Search_File_Window_Apply_Changes (void)
-{
-    if (SearchFileWindow)
-    {
-        gint x, y, width, height;
-        GdkWindow *window;
-
-        window = gtk_widget_get_window(SearchFileWindow);
-
-        if ( window && gdk_window_is_visible(window) && gdk_window_get_state(window)!=GDK_WINDOW_STATE_MAXIMIZED )
-        {
-            // Position and Origin of the scanner window
-            gdk_window_get_root_origin(window,&x,&y);
-            SEARCH_WINDOW_X = x;
-            SEARCH_WINDOW_Y = y;
-            width = gdk_window_get_width(window);
-            height = gdk_window_get_height(window);
-            SEARCH_WINDOW_WIDTH  = width;
-            SEARCH_WINDOW_HEIGHT = height;
-        }
-
-        SEARCH_IN_FILENAME    = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(SearchInFilename));
-        SEARCH_IN_TAG         = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(SearchInTag));
-        SEARCH_CASE_SENSITIVE = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(SearchCaseSensitive));
-    }
-}
-
-/*
- * This function and the one below could do with improving
- * as we are looking up tag data twice (once when searching, once when adding to list)
- */
-static void
-Search_File (GtkWidget *search_button)
-{
-    const gchar *string_to_search = NULL;
-    GList *l;
-    ET_File *ETFile;
-    gchar *msg;
-    gchar *temp = NULL;
-    gchar *title2, *artist2, *album_artist2, *album2, *disc_number2,
-          *disc_total2, *year2, *track2, *track_total2, *genre2, *comment2,
-          *composer2, *orig_artist2, *copyright2, *url2, *encoded_by2,
-          *string_to_search2;
-    gint resultCount = 0;
-
-
-    if (!SearchStringCombo || !SearchInFilename || !SearchInTag || !SearchResultList)
-        return;
-
-    string_to_search = gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(SearchStringCombo))));
-    if (!string_to_search)
-        return;
-
-    Add_String_To_Combo_List(SearchStringModel, string_to_search);
-
-    gtk_widget_set_sensitive(GTK_WIDGET(search_button),FALSE);
-    gtk_list_store_clear(SearchResultListModel);
-    gtk_statusbar_push(GTK_STATUSBAR(SearchStatusBar),SearchStatusBarContext,"");
-
-    for (l = g_list_first (ETCore->ETFileList); l != NULL; l = g_list_next (l))
-    {
-        ETFile = (ET_File *)l->data;
-
-        // Search in the filename
-        if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(SearchInFilename)))
-        {
-            gchar *filename_utf8 = ((File_Name *)ETFile->FileNameNew->data)->value_utf8;
-            gchar *basename_utf8;
-
-            // To search without case sensivity
-            if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(SearchCaseSensitive)))
-            {
-                temp = g_path_get_basename(filename_utf8);
-                basename_utf8 = g_utf8_casefold(temp, -1);
-                g_free(temp);
-                string_to_search2 = g_utf8_casefold(string_to_search, -1);
-            } else
-            {
-                basename_utf8 = g_path_get_basename(filename_utf8);
-                string_to_search2 = g_strdup(string_to_search);
-            }
-
-            if ( basename_utf8 && strstr(basename_utf8,string_to_search2) )
-            {
-                Add_Row_To_Search_Result_List(ETFile, string_to_search2);
-                g_free(basename_utf8);
-                g_free(string_to_search2);
-                continue;
-            }
-            g_free(basename_utf8);
-            g_free(string_to_search2);
-        }
-
-        // Search in the tag
-        if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(SearchInTag)))
-        {
-            File_Tag *FileTag   = (File_Tag *)ETFile->FileTag->data;
-
-            // To search with or without case sensivity
-            if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(SearchCaseSensitive)))
-            {
-                // To search without case sensivity...
-                // Duplicate and convert the strings into UTF-8 in loxer case
-                if (FileTag->title)       title2       = g_utf8_casefold(FileTag->title, -1);        else title2       = NULL;
-                if (FileTag->artist)      artist2      = g_utf8_casefold(FileTag->artist, -1);       else artist2      = NULL;
-                if (FileTag->album_artist) album_artist2 = g_utf8_casefold(FileTag->album_artist, -1); else album_artist2= NULL;
-                if (FileTag->album)       album2       = g_utf8_casefold(FileTag->album, -1);        else album2       = NULL;
-                if (FileTag->disc_number) disc_number2 = g_utf8_casefold(FileTag->disc_number, -1);  else disc_number2 = NULL;
-                if (FileTag->disc_total)
-                {
-                    disc_total2 = g_utf8_casefold (FileTag->disc_total, -1);
-                }
-                else
-                {
-                    disc_total2 = NULL;
-                }
-                if (FileTag->year)        year2        = g_utf8_casefold(FileTag->year, -1);         else year2        = NULL;
-                if (FileTag->track)       track2       = g_utf8_casefold(FileTag->track, -1);        else track2       = NULL;
-                if (FileTag->track_total) track_total2 = g_utf8_casefold(FileTag->track_total, -1);  else track_total2 = NULL;
-                if (FileTag->genre)       genre2       = g_utf8_casefold(FileTag->genre, -1);        else genre2       = NULL;
-                if (FileTag->comment)     comment2     = g_utf8_casefold(FileTag->comment, -1);      else comment2     = NULL;
-                if (FileTag->composer)    composer2    = g_utf8_casefold(FileTag->composer, -1);     else composer2    = NULL;
-                if (FileTag->orig_artist) orig_artist2 = g_utf8_casefold(FileTag->orig_artist, -1);  else orig_artist2 = NULL;
-                if (FileTag->copyright)   copyright2   = g_utf8_casefold(FileTag->copyright, -1);    else copyright2   = NULL;
-                if (FileTag->url)         url2         = g_utf8_casefold(FileTag->url, -1);          else url2         = NULL;
-                if (FileTag->encoded_by)  encoded_by2  = g_utf8_casefold(FileTag->encoded_by, -1);   else encoded_by2  = NULL;
-                string_to_search2 = g_utf8_strdown(string_to_search, -1);
-            }else
-            {
-                // To search with case sensivity...
-                // Duplicate and convert the strings into UTF-8
-                title2       = g_strdup(FileTag->title);
-                artist2      = g_strdup(FileTag->artist);
-                album_artist2= g_strdup(FileTag->album_artist);
-                album2       = g_strdup(FileTag->album);
-                disc_number2 = g_strdup(FileTag->disc_number);
-                disc_total2 = g_strdup (FileTag->disc_total);
-                year2        = g_strdup(FileTag->year);
-                track2       = g_strdup(FileTag->track);
-                track_total2 = g_strdup(FileTag->track_total);
-                genre2       = g_strdup(FileTag->genre);
-                comment2     = g_strdup(FileTag->comment);
-                composer2    = g_strdup(FileTag->composer);
-                orig_artist2 = g_strdup(FileTag->orig_artist);
-                copyright2   = g_strdup(FileTag->copyright);
-                url2         = g_strdup(FileTag->url);
-                encoded_by2  = g_strdup(FileTag->encoded_by);
-                string_to_search2 = g_strdup(string_to_search);
-            }
-
-            // FIX ME : should use UTF-8 functions?
-            if ( (title2       && strstr(title2,       string_to_search2) )
-             ||  (artist2      && strstr(artist2,      string_to_search2) )
-             ||  (album_artist2 && strstr(album_artist2,string_to_search2) )
-             ||  (album2       && strstr(album2,       string_to_search2) )
-             ||  (disc_number2 && strstr(disc_number2, string_to_search2) )
-             ||  (disc_total2 && strstr (disc_total2, string_to_search2))
-             ||  (year2        && strstr(year2,        string_to_search2) )
-             ||  (track2       && strstr(track2,       string_to_search2) )
-             ||  (track_total2 && strstr(track_total2, string_to_search2) )
-             ||  (genre2       && strstr(genre2,       string_to_search2) )
-             ||  (comment2     && strstr(comment2,     string_to_search2) )
-             ||  (composer2    && strstr(composer2,    string_to_search2) )
-             ||  (orig_artist2 && strstr(orig_artist2, string_to_search2) )
-             ||  (copyright2   && strstr(copyright2,   string_to_search2) )
-             ||  (url2         && strstr(url2,         string_to_search2) )
-             ||  (encoded_by2  && strstr(encoded_by2,  string_to_search2) ) )
-            {
-                Add_Row_To_Search_Result_List(ETFile, string_to_search);
-            }
-            g_free(title2);
-            g_free(artist2);
-            g_free(album_artist2);
-            g_free(album2);
-            g_free(disc_number2);
-            g_free (disc_total2);
-            g_free(year2);
-            g_free(track2);
-            g_free(track_total2);
-            g_free(genre2);
-            g_free(comment2);
-            g_free(composer2);
-            g_free(orig_artist2);
-            g_free(copyright2);
-            g_free(url2);
-            g_free(encoded_by2);
-            g_free(string_to_search2);
-        }
-    }
-
-    gtk_widget_set_sensitive(GTK_WIDGET(search_button),TRUE);
-
-    // Display the number of files in the statusbar
-    resultCount = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(SearchResultListModel), NULL);
-    msg = g_strdup_printf (ngettext ("Found one file", "Found %d files",
-                           resultCount), resultCount);
-    gtk_statusbar_push(GTK_STATUSBAR(SearchStatusBar),SearchStatusBarContext,msg);
-    g_free(msg);
-
-    // Disable result list if no row inserted
-    if (resultCount > 0 )
-    {
-        gtk_widget_set_sensitive(GTK_WIDGET(SearchResultList), TRUE);
-    } else
-    {
-        gtk_widget_set_sensitive(GTK_WIDGET(SearchResultList), FALSE);
-    }
-}
-
-static void
-Add_Row_To_Search_Result_List (ET_File *ETFile, const gchar *string_to_search)
-{
-    gchar *SearchResultList_Text[15]; // Because : 15 columns to display
-    gint SearchResultList_Weight[15] = {PANGO_WEIGHT_NORMAL, PANGO_WEIGHT_NORMAL,
-                                        PANGO_WEIGHT_NORMAL, PANGO_WEIGHT_NORMAL,
-                                        PANGO_WEIGHT_NORMAL, PANGO_WEIGHT_NORMAL,
-                                        PANGO_WEIGHT_NORMAL, PANGO_WEIGHT_NORMAL,
-                                        PANGO_WEIGHT_NORMAL, PANGO_WEIGHT_NORMAL,
-                                        PANGO_WEIGHT_NORMAL, PANGO_WEIGHT_NORMAL,
-                                        PANGO_WEIGHT_NORMAL, PANGO_WEIGHT_NORMAL,
-                                        PANGO_WEIGHT_NORMAL};
-    GdkColor *SearchResultList_Color[15] = {NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-                                            NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-                                            NULL};
-    gchar *track, *track_total;
-    gchar *disc_number, *disc_total;
-    gboolean case_sensitive;
-    gint column;
-
-    if (!ETFile || !string_to_search)
-        return;
-
-    case_sensitive = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(SearchCaseSensitive));
-
-    // Filename
-    SearchResultList_Text[SEARCH_RESULT_FILENAME]    = g_path_get_basename( ((File_Name *)ETFile->FileNameNew->data)->value_utf8 );
-    // Title
-    SearchResultList_Text[SEARCH_RESULT_TITLE]       = g_strdup(((File_Tag *)ETFile->FileTag->data)->title);
-    // Artist
-    SearchResultList_Text[SEARCH_RESULT_ARTIST]      = g_strdup(((File_Tag *)ETFile->FileTag->data)->artist);
-    // Album Artist
-    SearchResultList_Text[SEARCH_RESULT_ALBUM_ARTIST]= g_strdup(((File_Tag *)ETFile->FileTag->data)->album_artist);
-    // Album
-    SearchResultList_Text[SEARCH_RESULT_ALBUM]       = g_strdup(((File_Tag *)ETFile->FileTag->data)->album);
-    // Year
-    SearchResultList_Text[SEARCH_RESULT_YEAR]        = g_strdup(((File_Tag *)ETFile->FileTag->data)->year);
-    //Genre
-    SearchResultList_Text[SEARCH_RESULT_GENRE]       = g_strdup(((File_Tag *)ETFile->FileTag->data)->genre);
-    // Comment
-    SearchResultList_Text[SEARCH_RESULT_COMMENT]     = g_strdup(((File_Tag *)ETFile->FileTag->data)->comment);
-    // Composer
-    SearchResultList_Text[SEARCH_RESULT_COMPOSER]    = g_strdup(((File_Tag *)ETFile->FileTag->data)->composer);
-    // Orig. Artist
-    SearchResultList_Text[SEARCH_RESULT_ORIG_ARTIST] = g_strdup(((File_Tag *)ETFile->FileTag->data)->orig_artist);
-    // Copyright
-    SearchResultList_Text[SEARCH_RESULT_COPYRIGHT]   = g_strdup(((File_Tag *)ETFile->FileTag->data)->copyright);
-    // URL
-    SearchResultList_Text[SEARCH_RESULT_URL]         = g_strdup(((File_Tag *)ETFile->FileTag->data)->url);
-    // Encoded by
-    SearchResultList_Text[SEARCH_RESULT_ENCODED_BY]  = g_strdup(((File_Tag *)ETFile->FileTag->data)->encoded_by);
-
-    /* Disc Number. */
-    disc_number = ((File_Tag *)ETFile->FileTag->data)->disc_number;
-    disc_total = ((File_Tag *)ETFile->FileTag->data)->disc_total;
-
-    if (disc_number)
-    {
-        if (disc_total)
-        {
-            SearchResultList_Text[SEARCH_RESULT_DISC_NUMBER] = g_strconcat (disc_number, "/", disc_total, NULL);
-        }
-        else
-        {
-            SearchResultList_Text[SEARCH_RESULT_DISC_NUMBER] = g_strdup (disc_number);
-        }
-    }
-    else
-    {
-        SearchResultList_Text[SEARCH_RESULT_DISC_NUMBER] = NULL;
-    }
-
-    // Track
-    track       = ((File_Tag *)ETFile->FileTag->data)->track;
-    track_total = ((File_Tag *)ETFile->FileTag->data)->track_total;
-    if (track)
-    {
-        if (track_total)
-            SearchResultList_Text[SEARCH_RESULT_TRACK] = g_strconcat(track,"/",track_total,NULL);
-        else
-            SearchResultList_Text[SEARCH_RESULT_TRACK] = g_strdup(track);
-    } else
-    {
-        SearchResultList_Text[SEARCH_RESULT_TRACK] = NULL;
-    }
-
-
-    // Highlight the keywords in the result list
-    // Don't display files to red if the searched string is '' (to display all files)
-    for (column=0;column<14;column++)
-    {
-        if (case_sensitive)
-        {
-            if ( SearchResultList_Text[column] && strlen(string_to_search) && strstr(SearchResultList_Text[column],string_to_search) )
-            {
-                if (CHANGED_FILES_DISPLAYED_TO_BOLD)
-                    SearchResultList_Weight[column] = PANGO_WEIGHT_BOLD;
-                else
-                    SearchResultList_Color[column] = &RED;
-            }
-
-        } else
-        {
-            // Search wasn't case sensitive
-            gchar *list_text = NULL;
-            gchar *string_to_search2 = g_utf8_casefold(string_to_search, -1);
-
-            if (!SearchResultList_Text[column])
-            {
-                g_free(string_to_search2);
-                continue;
-            }
-
-            list_text = g_utf8_casefold(SearchResultList_Text[column], -1);
-
-            if ( list_text && strlen(string_to_search2) && strstr(list_text,string_to_search2) )
-            {
-                if (CHANGED_FILES_DISPLAYED_TO_BOLD)
-                    SearchResultList_Weight[column] = PANGO_WEIGHT_BOLD;
-                else
-                    SearchResultList_Color[column] = &RED;
-            }
-
-            g_free(list_text);
-            g_free(string_to_search2);
-        }
-    }
-
-    // Load the row in the list
-    gtk_list_store_insert_with_values (SearchResultListModel, NULL, G_MAXINT,
-                       SEARCH_RESULT_FILENAME,    SearchResultList_Text[SEARCH_RESULT_FILENAME],
-                       SEARCH_RESULT_TITLE,       SearchResultList_Text[SEARCH_RESULT_TITLE],
-                       SEARCH_RESULT_ARTIST,      SearchResultList_Text[SEARCH_RESULT_ARTIST],
-                       SEARCH_RESULT_ALBUM_ARTIST,SearchResultList_Text[SEARCH_RESULT_ALBUM_ARTIST],
-                       SEARCH_RESULT_ALBUM,       SearchResultList_Text[SEARCH_RESULT_ALBUM],
-                       SEARCH_RESULT_DISC_NUMBER, SearchResultList_Text[SEARCH_RESULT_DISC_NUMBER],
-                       SEARCH_RESULT_YEAR,        SearchResultList_Text[SEARCH_RESULT_YEAR],
-                       SEARCH_RESULT_TRACK,       SearchResultList_Text[SEARCH_RESULT_TRACK],
-                       SEARCH_RESULT_GENRE,       SearchResultList_Text[SEARCH_RESULT_GENRE],
-                       SEARCH_RESULT_COMMENT,     SearchResultList_Text[SEARCH_RESULT_COMMENT],
-                       SEARCH_RESULT_COMPOSER,    SearchResultList_Text[SEARCH_RESULT_COMPOSER],
-                       SEARCH_RESULT_ORIG_ARTIST, SearchResultList_Text[SEARCH_RESULT_ORIG_ARTIST],
-                       SEARCH_RESULT_COPYRIGHT,   SearchResultList_Text[SEARCH_RESULT_COPYRIGHT],
-                       SEARCH_RESULT_URL,         SearchResultList_Text[SEARCH_RESULT_URL],
-                       SEARCH_RESULT_ENCODED_BY,  SearchResultList_Text[SEARCH_RESULT_ENCODED_BY],
-
-                       SEARCH_RESULT_FILENAME_WEIGHT,    SearchResultList_Weight[SEARCH_RESULT_FILENAME],
-                       SEARCH_RESULT_TITLE_WEIGHT,       SearchResultList_Weight[SEARCH_RESULT_TITLE],
-                       SEARCH_RESULT_ARTIST_WEIGHT,      SearchResultList_Weight[SEARCH_RESULT_ARTIST],
-                       SEARCH_RESULT_ALBUM_ARTIST_WEIGHT, SearchResultList_Weight[SEARCH_RESULT_ALBUM_ARTIST],
-		       SEARCH_RESULT_ALBUM_WEIGHT,       SearchResultList_Weight[SEARCH_RESULT_ALBUM],
-                       SEARCH_RESULT_DISC_NUMBER_WEIGHT, SearchResultList_Weight[SEARCH_RESULT_DISC_NUMBER],
-                       SEARCH_RESULT_YEAR_WEIGHT,        SearchResultList_Weight[SEARCH_RESULT_YEAR],
-                       SEARCH_RESULT_TRACK_WEIGHT,       SearchResultList_Weight[SEARCH_RESULT_TRACK],
-                       SEARCH_RESULT_GENRE_WEIGHT,       SearchResultList_Weight[SEARCH_RESULT_GENRE],
-                       SEARCH_RESULT_COMMENT_WEIGHT,     SearchResultList_Weight[SEARCH_RESULT_COMMENT],
-                       SEARCH_RESULT_COMPOSER_WEIGHT,    SearchResultList_Weight[SEARCH_RESULT_COMPOSER],
-                       SEARCH_RESULT_ORIG_ARTIST_WEIGHT, SearchResultList_Weight[SEARCH_RESULT_ORIG_ARTIST],
-                       SEARCH_RESULT_COPYRIGHT_WEIGHT,   SearchResultList_Weight[SEARCH_RESULT_COPYRIGHT],
-                       SEARCH_RESULT_URL_WEIGHT,         SearchResultList_Weight[SEARCH_RESULT_URL],
-                       SEARCH_RESULT_ENCODED_BY_WEIGHT,  SearchResultList_Weight[SEARCH_RESULT_ENCODED_BY],
-
-                       SEARCH_RESULT_FILENAME_FOREGROUND,    SearchResultList_Color[SEARCH_RESULT_FILENAME],
-                       SEARCH_RESULT_TITLE_FOREGROUND,       SearchResultList_Color[SEARCH_RESULT_TITLE],
-                       SEARCH_RESULT_ARTIST_FOREGROUND,      SearchResultList_Color[SEARCH_RESULT_ARTIST],
-                       SEARCH_RESULT_ALBUM_ARTIST_FOREGROUND,       SearchResultList_Color[SEARCH_RESULT_ALBUM_ARTIST],
-		       SEARCH_RESULT_ALBUM_FOREGROUND,       SearchResultList_Color[SEARCH_RESULT_ALBUM],
-                       SEARCH_RESULT_DISC_NUMBER_FOREGROUND, SearchResultList_Color[SEARCH_RESULT_DISC_NUMBER],
-                       SEARCH_RESULT_YEAR_FOREGROUND,        SearchResultList_Color[SEARCH_RESULT_YEAR],
-                       SEARCH_RESULT_TRACK_FOREGROUND,       SearchResultList_Color[SEARCH_RESULT_TRACK],
-                       SEARCH_RESULT_GENRE_FOREGROUND,       SearchResultList_Color[SEARCH_RESULT_GENRE],
-                       SEARCH_RESULT_COMMENT_FOREGROUND,     SearchResultList_Color[SEARCH_RESULT_COMMENT],
-                       SEARCH_RESULT_COMPOSER_FOREGROUND,    SearchResultList_Color[SEARCH_RESULT_COMPOSER],
-                       SEARCH_RESULT_ORIG_ARTIST_FOREGROUND, SearchResultList_Color[SEARCH_RESULT_ORIG_ARTIST],
-                       SEARCH_RESULT_COPYRIGHT_FOREGROUND,   SearchResultList_Color[SEARCH_RESULT_COPYRIGHT],
-                       SEARCH_RESULT_URL_FOREGROUND,         SearchResultList_Color[SEARCH_RESULT_URL],
-                       SEARCH_RESULT_ENCODED_BY_FOREGROUND,  SearchResultList_Color[SEARCH_RESULT_ENCODED_BY],
-
-                       SEARCH_RESULT_POINTER, ETFile,
-                       -1);
-
-    // Frees allocated data
-    g_free(SearchResultList_Text[SEARCH_RESULT_FILENAME]);
-    g_free(SearchResultList_Text[SEARCH_RESULT_TITLE]);
-    g_free(SearchResultList_Text[SEARCH_RESULT_ARTIST]);
-    g_free(SearchResultList_Text[SEARCH_RESULT_ALBUM_ARTIST]);
-    g_free(SearchResultList_Text[SEARCH_RESULT_ALBUM]);
-    g_free(SearchResultList_Text[SEARCH_RESULT_DISC_NUMBER]);
-    g_free(SearchResultList_Text[SEARCH_RESULT_YEAR]);
-    g_free(SearchResultList_Text[SEARCH_RESULT_TRACK]);
-    g_free(SearchResultList_Text[SEARCH_RESULT_GENRE]);
-    g_free(SearchResultList_Text[SEARCH_RESULT_COMMENT]);
-    g_free(SearchResultList_Text[SEARCH_RESULT_COMPOSER]);
-    g_free(SearchResultList_Text[SEARCH_RESULT_ORIG_ARTIST]);
-    g_free(SearchResultList_Text[SEARCH_RESULT_COPYRIGHT]);
-    g_free(SearchResultList_Text[SEARCH_RESULT_URL]);
-    g_free(SearchResultList_Text[SEARCH_RESULT_ENCODED_BY]);
-}
-
-/*
- * Callback to select-row event
- * Select all results that are selected in the search result list also in the browser list
- */
-static void
-Search_Result_List_Row_Selected (GtkTreeSelection *selection, gpointer data)
-{
-    GList       *selectedRows;
-    GList *l;
-    ET_File     *ETFile;
-    GtkTreeIter  currentFile;
-
-    selectedRows = gtk_tree_selection_get_selected_rows(selection, NULL);
-
-    /* We might be called with no rows selected */
-    if (!selectedRows)
-    {
-        return;
-    }
-
-    // Unselect files in the main list before re-selecting them...
-    Browser_List_Unselect_All_Files();
-
-    for (l = selectedRows; l != NULL; l = g_list_next (l))
-    {
-        if (gtk_tree_model_get_iter (GTK_TREE_MODEL (SearchResultListModel),
-                                     &currentFile, (GtkTreePath *)l->data))
-        {
-            gtk_tree_model_get(GTK_TREE_MODEL(SearchResultListModel), &currentFile, 
-                               SEARCH_RESULT_POINTER, &ETFile, -1);
-            // Select the files (but don't display them to increase speed)
-            Browser_List_Select_File_By_Etfile(ETFile, TRUE);
-            // Display only the last file (to increase speed)
-            if (!selectedRows->next)
-                Action_Select_Nth_File_By_Etfile(ETFile);
-        }
-    }
-
-    g_list_free_full (selectedRows, (GDestroyNotify)gtk_tree_path_free);
-}
-
-
-/********************************************
- * Load Filenames from a TXT file functions *
- ********************************************/
-/*
- * The window to load the filenames from a txt.
- */
-void Open_Load_Filename_Window (void)
-{
-    GtkWidget *VBox, *hbox;
-    GtkWidget *Label;
-    GtkWidget *Button;
-    GtkWidget *Icon;
-    GtkWidget *Entry;
-    GtkWidget *ButtonLoad;
-    GtkWidget *Separator;
-    GtkWidget *ScrollWindow;
-    GtkWidget *loadedvbox;
-    GtkWidget *filelistvbox;
-    GtkWidget *vboxpaned;
-    gchar *path;
-    GtkCellRenderer* renderer;
-    GtkTreeViewColumn* column;
-
-    if (LoadFilenameWindow != NULL)
-    {
-        gtk_window_present(GTK_WINDOW(LoadFilenameWindow));
-        return;
-    }
-
-    LoadFilenameWindow = gtk_dialog_new_with_buttons (_("Load Filenames From a Text File"),
-                                                      GTK_WINDOW (MainWindow),
-                                                      GTK_DIALOG_DESTROY_WITH_PARENT,
-                                                      GTK_STOCK_CLOSE,
-                                                      GTK_RESPONSE_CANCEL,
-                                                      GTK_STOCK_APPLY,
-                                                      GTK_RESPONSE_APPLY,
-                                                      NULL);
-    gtk_dialog_set_default_response (GTK_DIALOG (LoadFilenameWindow),
-                                     GTK_RESPONSE_ACCEPT);
-    g_signal_connect (LoadFilenameWindow, "response",
-                      G_CALLBACK (et_load_text_file_on_response), NULL);
-
-    gtk_window_set_default_size(GTK_WINDOW(LoadFilenameWindow),LOAD_FILE_WINDOW_WIDTH,LOAD_FILE_WINDOW_HEIGHT);
-
-    VBox = gtk_dialog_get_content_area (GTK_DIALOG (LoadFilenameWindow));
-    gtk_container_set_border_width (GTK_CONTAINER (LoadFilenameWindow), BOX_SPACING);
-    gtk_box_set_spacing (GTK_BOX (VBox), BOX_SPACING);
-
-    // Hbox for file entry and browser/load buttons
-    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, BOX_SPACING);
-    gtk_box_pack_start(GTK_BOX(VBox),hbox,FALSE,TRUE,0);
-
-    // File to load
-    if (!FileToLoadModel)
-        FileToLoadModel = gtk_list_store_new(MISC_COMBO_COUNT, G_TYPE_STRING);
-    else
-        gtk_list_store_clear(FileToLoadModel);
-
-    Label = gtk_label_new(_("File:"));
-    gtk_misc_set_alignment(GTK_MISC(Label),1.0,0.5);
-    gtk_box_pack_start(GTK_BOX(hbox),Label,FALSE,FALSE,0);
-    FileToLoadCombo = gtk_combo_box_new_with_model_and_entry(GTK_TREE_MODEL(FileToLoadModel));
-    gtk_combo_box_set_entry_text_column(GTK_COMBO_BOX(FileToLoadCombo),MISC_COMBO_TEXT);
-    gtk_widget_set_size_request(GTK_WIDGET(FileToLoadCombo), 200, -1);
-    gtk_box_pack_start(GTK_BOX(hbox),FileToLoadCombo,TRUE,TRUE,0);
-    // History List
-    Load_File_To_Load_List(FileToLoadModel, MISC_COMBO_TEXT);
-    // Initial value
-    if ((path=Browser_Get_Current_Path())!=NULL)
-        gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(FileToLoadCombo))),path);
-    // the 'changed' signal is attached below to enable/disable the button to load
-    // Button 'browse'
-    Button = gtk_button_new_from_stock(GTK_STOCK_OPEN);
-    gtk_box_pack_start(GTK_BOX(hbox),Button,FALSE,FALSE,0);
-    g_signal_connect_swapped(G_OBJECT(Button),"clicked", G_CALLBACK(File_Selection_Window_For_File), G_OBJECT(gtk_bin_get_child(GTK_BIN(FileToLoadCombo))));
-    // Button 'load'
-    // the signal attached to this button, to load the file, is placed after the LoadFileContentList definition
-    ButtonLoad = Create_Button_With_Icon_And_Label(GTK_STOCK_REVERT_TO_SAVED,_(" Load "));
-    //ButtonLoad = gtk_button_new_with_label(_(" Load "));
-    gtk_box_pack_start(GTK_BOX(hbox),ButtonLoad,FALSE,FALSE,0);
-    g_signal_connect_swapped(G_OBJECT(gtk_bin_get_child(GTK_BIN(FileToLoadCombo))),"changed", G_CALLBACK(Button_Load_Set_Sensivity), G_OBJECT(ButtonLoad));
-
-    // Vbox for loaded files
-    loadedvbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
-
-    // Content of the loaded file
-    ScrollWindow = gtk_scrolled_window_new(NULL,NULL);
-    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(ScrollWindow),GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
-    gtk_widget_set_size_request(GTK_WIDGET(ScrollWindow), 250, 200);
-    gtk_box_pack_start(GTK_BOX(loadedvbox), ScrollWindow, TRUE, TRUE, 0);
-    LoadFileContentListModel = gtk_list_store_new(LOAD_FILE_CONTENT_COUNT, G_TYPE_STRING);
-    LoadFileContentList = gtk_tree_view_new_with_model(GTK_TREE_MODEL(LoadFileContentListModel));
-    g_object_unref (LoadFileContentListModel);
-    
-    renderer = gtk_cell_renderer_text_new();
-    column = gtk_tree_view_column_new_with_attributes (_("Content of Text File"),
-                                                      renderer, "text", LOAD_FILE_CONTENT_TEXT, NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(LoadFileContentList), column);
-    gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(LoadFileContentList), TRUE);
-    //gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(LoadFileContentList)),GTK_SELECTION_MULTIPLE);
-    gtk_tree_view_set_reorderable(GTK_TREE_VIEW(LoadFileContentList),TRUE);
-    gtk_container_add(GTK_CONTAINER(ScrollWindow),LoadFileContentList);
-
-    // Signal to automatically load the file
-    g_signal_connect_swapped(G_OBJECT(ButtonLoad),"clicked", G_CALLBACK(Load_File_Content), G_OBJECT(gtk_bin_get_child(GTK_BIN(FileToLoadCombo))));
-    g_signal_connect(G_OBJECT(LoadFileContentList),"key-press-event", G_CALLBACK(Load_Filename_List_Key_Press),NULL);
-
-    // Commands (like the popup menu)
-    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, BOX_SPACING);
-    gtk_box_pack_start(GTK_BOX(loadedvbox),hbox,FALSE,FALSE,0);
-
-    Button = gtk_button_new();
-    Icon = gtk_image_new_from_stock(GTK_STOCK_ADD,GTK_ICON_SIZE_SMALL_TOOLBAR);
-    gtk_container_add(GTK_CONTAINER(Button),Icon);
-    gtk_box_pack_start(GTK_BOX(hbox),Button,FALSE,FALSE,0);
-    //gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-    gtk_widget_set_tooltip_text(Button,_("Insert a blank line before the selected line"));
-    g_signal_connect_swapped(G_OBJECT(Button),"clicked",
-                             G_CALLBACK(Load_Filename_List_Insert_Blank_Line), G_OBJECT(LoadFileContentList));
-
-    Button = gtk_button_new();
-    Icon = gtk_image_new_from_stock(GTK_STOCK_REMOVE,GTK_ICON_SIZE_SMALL_TOOLBAR);
-    gtk_container_add(GTK_CONTAINER(Button),Icon);
-    gtk_box_pack_start(GTK_BOX(hbox),Button,FALSE,FALSE,0);
-    //gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-    gtk_widget_set_tooltip_text(Button,_("Delete the selected line"));
-    g_signal_connect_swapped(G_OBJECT(Button),"clicked",
-                             G_CALLBACK(Load_Filename_List_Delete_Line), G_OBJECT(LoadFileContentList));
-    
-    Button = gtk_button_new();
-    Icon = gtk_image_new_from_stock(GTK_STOCK_REMOVE,GTK_ICON_SIZE_SMALL_TOOLBAR);
-    gtk_container_add(GTK_CONTAINER(Button),Icon);
-    gtk_box_pack_start(GTK_BOX(hbox),Button,FALSE,FALSE,0);
-    //gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-    gtk_widget_set_tooltip_text(Button,_("Delete all blank lines"));
-    g_signal_connect_swapped(G_OBJECT(Button),"clicked",
-                             G_CALLBACK(Load_Filename_List_Delete_All_Blank_Lines), G_OBJECT(LoadFileContentList));
-    
-    Label = gtk_label_new("   ");
-    gtk_box_pack_start(GTK_BOX(hbox),Label,FALSE,FALSE,0);
-
-    Button = gtk_button_new();
-    Icon = gtk_image_new_from_stock(GTK_STOCK_GO_UP, GTK_ICON_SIZE_SMALL_TOOLBAR);
-    gtk_container_add(GTK_CONTAINER(Button),Icon);
-    gtk_box_pack_start(GTK_BOX(hbox),Button,FALSE,FALSE,0);
-    //gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-    gtk_widget_set_tooltip_text(Button,_("Move up the selected line"));
-    g_signal_connect_swapped(G_OBJECT(Button),"clicked",
-                             G_CALLBACK(Load_Filename_List_Move_Up), G_OBJECT(LoadFileContentList));
-
-    Button = gtk_button_new();
-    Icon = gtk_image_new_from_stock(GTK_STOCK_GO_DOWN, GTK_ICON_SIZE_SMALL_TOOLBAR);
-    gtk_container_add(GTK_CONTAINER(Button),Icon);
-    gtk_box_pack_start(GTK_BOX(hbox),Button,FALSE,FALSE,0);
-    //gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-    gtk_widget_set_tooltip_text(Button,_("Move down the selected line"));
-    g_signal_connect_swapped(G_OBJECT(Button),"clicked",
-                             G_CALLBACK(Load_Filename_List_Move_Down), G_OBJECT(LoadFileContentList));
-
-    Label = gtk_label_new("   ");
-    gtk_box_pack_start(GTK_BOX(hbox),Label,FALSE,FALSE,0);
-
-    Button = gtk_button_new();
-    Icon = gtk_image_new_from_stock(GTK_STOCK_REFRESH,GTK_ICON_SIZE_SMALL_TOOLBAR);
-    gtk_container_add(GTK_CONTAINER(Button),Icon);
-    gtk_box_pack_start(GTK_BOX(hbox),Button,FALSE,FALSE,0);
-    //gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-    gtk_widget_set_tooltip_text(Button,_("Reload"));
-    g_signal_connect_swapped(G_OBJECT(Button),"clicked",
-                             G_CALLBACK(Load_Filename_List_Reload), G_OBJECT(LoadFileContentList));
-    
-    gtk_widget_show_all(loadedvbox);
-
-    
-    //
-    // Vbox for file list files
-    //
-    filelistvbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
-
-    // List of current filenames
-    ScrollWindow = gtk_scrolled_window_new(NULL,NULL);
-    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(ScrollWindow),GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
-    gtk_widget_set_size_request(GTK_WIDGET(ScrollWindow), 250, 200);
-    gtk_box_pack_start(GTK_BOX(filelistvbox), ScrollWindow, TRUE, TRUE, 0);
-    LoadFileNameListModel = gtk_list_store_new(LOAD_FILE_NAME_COUNT, G_TYPE_STRING,G_TYPE_POINTER);
-    LoadFileNameList = gtk_tree_view_new_with_model(GTK_TREE_MODEL(LoadFileNameListModel));
-    g_object_unref (LoadFileNameListModel);
-    
-    renderer = gtk_cell_renderer_text_new();
-    column = gtk_tree_view_column_new_with_attributes(_("List of Files"),
-                                                      renderer, "text", LOAD_FILE_NAME_TEXT, NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(LoadFileNameList), column);
-    gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(LoadFileNameList), TRUE);
-    //gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(LoadFileNameList)),GTK_SELECTION_MULTIPLE);
-    gtk_tree_view_set_reorderable(GTK_TREE_VIEW(LoadFileNameList),TRUE);
-    g_signal_connect(G_OBJECT(LoadFileNameList),"key-press-event", G_CALLBACK(Load_Filename_List_Key_Press),NULL);
-    gtk_container_add(GTK_CONTAINER(ScrollWindow),LoadFileNameList);
-
-    // Signals to 'select' the same row into the other list (to show the corresponding filenames)
-    g_signal_connect_swapped(G_OBJECT(gtk_tree_view_get_selection(GTK_TREE_VIEW(LoadFileContentList))),"changed", G_CALLBACK(Load_Filename_Select_Row_In_Other_List), G_OBJECT(LoadFileNameList));
-    g_signal_connect_swapped(G_OBJECT(gtk_tree_view_get_selection(GTK_TREE_VIEW(LoadFileNameList))),"changed", G_CALLBACK(Load_Filename_Select_Row_In_Other_List), G_OBJECT(LoadFileContentList));
-
-    // Commands (like the popup menu)
-    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, BOX_SPACING);
-    gtk_box_pack_start(GTK_BOX(filelistvbox),hbox,FALSE,FALSE,0);
-
-    Button = gtk_button_new();
-    Icon = gtk_image_new_from_stock(GTK_STOCK_ADD,GTK_ICON_SIZE_SMALL_TOOLBAR);
-    gtk_container_add(GTK_CONTAINER(Button),Icon);
-    gtk_box_pack_start(GTK_BOX(hbox),Button,FALSE,FALSE,0);
-    //gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-    gtk_widget_set_tooltip_text(Button,_("Insert a blank line before the selected line"));
-    g_signal_connect_swapped(G_OBJECT(Button),"clicked",
-                             G_CALLBACK(Load_Filename_List_Insert_Blank_Line), G_OBJECT(LoadFileNameList));
-
-    Button = gtk_button_new();
-    Icon = gtk_image_new_from_stock(GTK_STOCK_REMOVE,GTK_ICON_SIZE_SMALL_TOOLBAR);
-    gtk_container_add(GTK_CONTAINER(Button),Icon);
-    gtk_box_pack_start(GTK_BOX(hbox),Button,FALSE,FALSE,0);
-    //gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-    gtk_widget_set_tooltip_text(Button,_("Delete the selected line"));
-    g_signal_connect_swapped(G_OBJECT(Button),"clicked",
-                             G_CALLBACK(Load_Filename_List_Delete_Line), G_OBJECT(LoadFileNameList));
-
-    Button = gtk_button_new();
-    Icon = gtk_image_new_from_stock(GTK_STOCK_REMOVE,GTK_ICON_SIZE_SMALL_TOOLBAR);
-    gtk_container_add(GTK_CONTAINER(Button),Icon);
-    gtk_box_pack_start(GTK_BOX(hbox),Button,FALSE,FALSE,0);
-    //gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-    gtk_widget_set_tooltip_text(Button,_("Delete all blank lines"));
-    g_signal_connect_swapped(G_OBJECT(Button),"clicked",
-                             G_CALLBACK(Load_Filename_List_Delete_All_Blank_Lines), G_OBJECT(LoadFileNameList));
-    
-    Label = gtk_label_new("   ");
-    gtk_box_pack_start(GTK_BOX(hbox),Label,FALSE,FALSE,0);
-
-    Button = gtk_button_new();
-    Icon = gtk_image_new_from_stock(GTK_STOCK_GO_UP, GTK_ICON_SIZE_SMALL_TOOLBAR);
-    gtk_container_add(GTK_CONTAINER(Button),Icon);
-    gtk_box_pack_start(GTK_BOX(hbox),Button,FALSE,FALSE,0);
-    //gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-    gtk_widget_set_tooltip_text(Button,_("Move up the selected line"));
-    g_signal_connect_swapped(G_OBJECT(Button),"clicked",
-                             G_CALLBACK(Load_Filename_List_Move_Up), G_OBJECT(LoadFileNameList));
-
-    Button = gtk_button_new();
-    Icon = gtk_image_new_from_stock(GTK_STOCK_GO_DOWN, GTK_ICON_SIZE_SMALL_TOOLBAR);
-    gtk_container_add(GTK_CONTAINER(Button),Icon);
-    gtk_box_pack_start(GTK_BOX(hbox),Button,FALSE,FALSE,0);
-    //gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-    gtk_widget_set_tooltip_text(Button,_("Move down the selected line"));
-    g_signal_connect_swapped(G_OBJECT(Button),"clicked",
-                             G_CALLBACK(Load_Filename_List_Move_Down), G_OBJECT(LoadFileNameList));
-
-    Label = gtk_label_new("   ");
-    gtk_box_pack_start(GTK_BOX(hbox),Label,FALSE,FALSE,0);
-
-    Button = gtk_button_new();
-    Icon = gtk_image_new_from_stock(GTK_STOCK_REFRESH,GTK_ICON_SIZE_SMALL_TOOLBAR);
-    gtk_container_add(GTK_CONTAINER(Button),Icon);
-    gtk_box_pack_start(GTK_BOX(hbox),Button,FALSE,FALSE,0);
-    //gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-    gtk_widget_set_tooltip_text(Button,_("Reload"));
-    g_signal_connect_swapped(G_OBJECT(Button),"clicked",
-                             G_CALLBACK(Load_Filename_List_Reload), G_OBJECT(LoadFileNameList));
-    
-    gtk_widget_show_all(filelistvbox);
-
-    
-    // Load the list of files in the list widget
-    Load_File_List();
-
-    vboxpaned = gtk_paned_new(GTK_ORIENTATION_HORIZONTAL);
-    gtk_paned_pack1(GTK_PANED(vboxpaned),loadedvbox,  TRUE,FALSE);
-    gtk_paned_pack2(GTK_PANED(vboxpaned),filelistvbox,TRUE,FALSE);
-    gtk_box_pack_start(GTK_BOX(VBox),vboxpaned,TRUE,TRUE,0);
-
-    // Create popup menus
-    Create_Load_Filename_Popup_Menu(LoadFileContentList);
-    Create_Load_Filename_Popup_Menu(LoadFileNameList);
-
-    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, BOX_SPACING);
-    gtk_box_pack_start(GTK_BOX(VBox),hbox,FALSE,TRUE,0);
-
-    Label = gtk_label_new(_("Selected line:"));
-    gtk_box_pack_start(GTK_BOX(hbox),Label,FALSE,FALSE,0);
-
-    // Entry to edit a line into the list
-    Entry = gtk_entry_new();
-    gtk_box_pack_start(GTK_BOX(hbox),Entry,TRUE,TRUE,0);
-    g_signal_connect(G_OBJECT(Entry),"changed",G_CALLBACK(Load_Filename_Update_Text_Line),G_OBJECT(LoadFileContentList));
-
-    // Signal to load the line text in the editing entry
-    g_signal_connect(G_OBJECT(gtk_tree_view_get_selection(GTK_TREE_VIEW(LoadFileContentList))),"changed", G_CALLBACK(Load_Filename_Edit_Text_Line), G_OBJECT(Entry));
-
-    // Separator line
-    Separator = gtk_separator_new(GTK_ORIENTATION_HORIZONTAL);
-    gtk_box_pack_start(GTK_BOX(VBox),Separator,FALSE,FALSE,0);
-
-    LoadFileRunScanner = gtk_check_button_new_with_label(_("Run the current scanner for each file"));
-    gtk_box_pack_start(GTK_BOX(VBox),LoadFileRunScanner,FALSE,TRUE,0);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LoadFileRunScanner),LOAD_FILE_RUN_SCANNER);
-    gtk_widget_set_tooltip_text(LoadFileRunScanner,_("When activating this option, after loading the "
-        "filenames, the current selected scanner will be ran (the scanner window must be opened)."));
-
-    // To initialize 'ButtonLoad' sensivity
-    g_signal_emit_by_name(G_OBJECT(gtk_bin_get_child(GTK_BIN(FileToLoadCombo))),"changed");
-
-    gtk_widget_show_all(LoadFilenameWindow);
-    if (LOAD_FILE_WINDOW_X > 0 && LOAD_FILE_WINDOW_Y > 0)
-        gtk_window_move(GTK_WINDOW(LoadFilenameWindow),LOAD_FILE_WINDOW_X,LOAD_FILE_WINDOW_Y);
-}
-
-static void
-Destroy_Load_Filename_Window (void)
-{
-    if (LoadFilenameWindow)
-    {
-        /* Save combobox history lists before exit */
-        Save_File_To_Load_List(FileToLoadModel, MISC_COMBO_TEXT);
-
-        Load_Filename_Window_Apply_Changes();
-
-        gtk_widget_destroy(LoadFilenameWindow);
-        LoadFilenameWindow = NULL;
-    }
-}
-
-/*
- * For the configuration file...
- */
-void Load_Filename_Window_Apply_Changes (void)
-{
-    if (LoadFilenameWindow)
-    {
-        gint x, y, width, height;
-        GdkWindow *window;
-
-        window = gtk_widget_get_window (LoadFilenameWindow);
-
-        if ( window && gdk_window_is_visible(window) && gdk_window_get_state(window)!=GDK_WINDOW_STATE_MAXIMIZED )
-        {
-            // Position and Origin of the window
-            gdk_window_get_root_origin(window,&x,&y);
-            LOAD_FILE_WINDOW_X = x;
-            LOAD_FILE_WINDOW_Y = y;
-            width = gdk_window_get_width(window);
-            height = gdk_window_get_height(window);
-            LOAD_FILE_WINDOW_WIDTH  = width;
-            LOAD_FILE_WINDOW_HEIGHT = height;
-        }
-
-        LOAD_FILE_RUN_SCANNER = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(LoadFileRunScanner));
-    }
-}
-
-/*
- * To enable/disable sensivity of the button 'Load'
- */
-static void
-Button_Load_Set_Sensivity (GtkWidget *button, GtkWidget *entry)
-{
-    gchar *path;
-    GFile *file;
-    GFileInfo *info;
-    GError *error = NULL;
-
-    if (!entry || !button)
-        return;
-
-    path = filename_from_display(gtk_entry_get_text(GTK_ENTRY(entry)));
-
-    if (!path)
-    {
-        gtk_widget_set_sensitive(GTK_WIDGET(button),FALSE);
-        return;
-    }
-
-    file = g_file_new_for_path (path);
-    info = g_file_query_info (file, G_FILE_ATTRIBUTE_STANDARD_TYPE,
-                              G_FILE_QUERY_INFO_NONE, NULL, &error);
-
-    if (info && G_FILE_TYPE_REGULAR == g_file_info_get_file_type (info))
-        gtk_widget_set_sensitive(GTK_WIDGET(button),TRUE);
-    else
-    {
-        gtk_widget_set_sensitive(GTK_WIDGET(button),FALSE);
-        if (!info)
-        {
-            Log_Print (LOG_ERROR, _("Cannot retrieve file info (%s)"),
-                       error->message);
-            g_error_free (error);
-            g_object_unref (file);
-            g_free (path);
-            return;
-        }
-    }
-
-    g_object_unref (info);
-    g_object_unref (file);
-    g_free(path);
-}
-
-static void
-Load_Filename_List_Key_Press (GtkWidget *treeview, GdkEvent *event)
-{
-    if (event && event->type == GDK_KEY_PRESS)
-    {
-        GdkEventKey *kevent = (GdkEventKey *)event;
-
-        switch(kevent->keyval)
-        {
-            case GDK_KEY_Delete:
-                Load_Filename_List_Delete_Line(treeview);
-                break;
-            case GDK_KEY_I:
-            case GDK_KEY_i:
-                Load_Filename_List_Insert_Blank_Line(treeview);
-                break;
-        }
-    }
-}
-
-/*
- * Load content of the file into the LoadFileContentList list
- */
-static void
-Load_File_Content (GtkWidget *entry)
-{
-    GFile *file;
-    GFileInputStream *istream;
-    GDataInputStream *data;
-    GError *error = NULL;
-    gsize size_read;
-    gchar *filename;
-    const gchar *filename_utf8;
-    gchar *line;
-    gchar *valid;
-
-    g_return_if_fail (entry != NULL);
-
-    // The file to read
-    filename_utf8 = gtk_entry_get_text(GTK_ENTRY(entry)); // Don't free me!
-    Add_String_To_Combo_List(FileToLoadModel, filename_utf8);
-    filename = filename_from_display(filename_utf8);
-
-    file = g_file_new_for_path (filename);
-    istream = g_file_read (file, NULL, &error);
-    g_object_unref (file);
-
-    if (!istream)
-    {
-        Log_Print (LOG_ERROR, _("Can't open file '%s' (%s)"), filename_utf8,
-                   error->message);
-        g_error_free (error);
-        g_object_unref (file);
-        g_free(filename);
-        return;
-    }
-
-    data = g_data_input_stream_new (G_INPUT_STREAM (istream));
-    /* TODO: Find a safer alternative to _ANY. */
-    g_data_input_stream_set_newline_type (data,
-                                          G_DATA_STREAM_NEWLINE_TYPE_ANY);
-    gtk_list_store_clear (LoadFileContentListModel);
-
-    while ((line = g_data_input_stream_read_line (data, &size_read, NULL,
-                                                  &error)))
-    {
-        /* FIXME: This should use the GLib filename encoding, not UTF-8. */
-        valid = Try_To_Validate_Utf8_String (line);
-        g_free (line);
-
-        gtk_list_store_insert_with_values (LoadFileContentListModel, NULL,
-                                           G_MAXINT, LOAD_FILE_CONTENT_TEXT,
-                                           valid, -1);
-        g_free (valid);
-    }
-
-    if (error)
-    {
-        Log_Print (LOG_ERROR, _("Error reading file (%s)"), error->message);
-        g_error_free (error);
-    }
-
-    g_object_unref (data);
-    g_object_unref (istream);
-    g_free (filename);
-}
-
-/*
- * Load the names of the current list of files
- */
-static void
-Load_File_List (void)
-{
-    GList *l;
-    ET_File *etfile;
-    gchar *filename_utf8;
-    gchar *pos;
-
-    gtk_list_store_clear(LoadFileNameListModel);
-
-    for (l = g_list_first (ETCore->ETFileList); l != NULL; l = g_list_next (l))
-    {
-        etfile = (ET_File *)l->data;
-        filename_utf8 = g_path_get_basename(((File_Name *)etfile->FileNameNew->data)->value_utf8);
-        // Remove the extension ('filename' must be allocated to don't affect the initial value)
-        if ((pos=strrchr(filename_utf8,'.'))!=NULL)
-            *pos = 0;
-        gtk_list_store_insert_with_values (LoadFileNameListModel, NULL,
-                                           G_MAXINT, LOAD_FILE_NAME_TEXT,
-                                           filename_utf8,
-                                           LOAD_FILE_NAME_POINTER, l->data,
-                                           -1);
-        g_free(filename_utf8);
-    }
-}
-/*
- * To select the corresponding row in the other list
- */
-static void
-Load_Filename_Select_Row_In_Other_List (GtkWidget* treeview_target, gpointer origselection)
-{
-    GtkAdjustment *ct_adj, *ce_adj;
-    GtkTreeSelection *selection_orig;
-    GtkTreeSelection *selection_target;
-    GtkTreeView *treeview_orig;
-    GtkTreeModel *treemodel_orig;
-    GtkTreeModel *treemodel_target;
-    GtkTreeIter iter_orig;
-    GtkTreeIter iter_target;
-    GtkTreePath *path_orig;
-    gint *indices_orig;
-    gchar *stringiter;
-
-    if (!treeview_target || !origselection)
-        return;
-
-    selection_orig = GTK_TREE_SELECTION(origselection);
-    selection_target = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview_target));
-    treemodel_target = gtk_tree_view_get_model(GTK_TREE_VIEW(treeview_target));
-
-    if (!gtk_tree_selection_get_selected(selection_orig, &treemodel_orig, &iter_orig))
-        return; /* Might be called with no selection */
-
-    treeview_orig = gtk_tree_selection_get_tree_view(selection_orig);
-    path_orig = gtk_tree_model_get_path(treemodel_orig, &iter_orig);
-    gtk_tree_selection_unselect_all(selection_target);
-
-    /* Synchronize the two lists. */
-    ce_adj = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (treeview_orig));
-    ct_adj = gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(treeview_target));
-
-    if (gtk_adjustment_get_upper(GTK_ADJUSTMENT(ct_adj)) >= gtk_adjustment_get_page_size(GTK_ADJUSTMENT(ct_adj))
-    &&  gtk_adjustment_get_upper(GTK_ADJUSTMENT(ce_adj)) >= gtk_adjustment_get_page_size(GTK_ADJUSTMENT(ce_adj)))
-    {
-        // Rules are displayed in the both clist
-        if (gtk_adjustment_get_value(GTK_ADJUSTMENT(ce_adj)) <= gtk_adjustment_get_upper(GTK_ADJUSTMENT(ct_adj)) - gtk_adjustment_get_page_size(GTK_ADJUSTMENT(ct_adj)))
-        {
-            gtk_adjustment_set_value(GTK_ADJUSTMENT(ct_adj),gtk_adjustment_get_value(GTK_ADJUSTMENT(ce_adj)));
-        } else
-        {
-            gtk_adjustment_set_value(GTK_ADJUSTMENT(ct_adj),gtk_adjustment_get_upper(GTK_ADJUSTMENT(ct_adj)) - gtk_adjustment_get_page_size(GTK_ADJUSTMENT(ct_adj)));
-            indices_orig = gtk_tree_path_get_indices(path_orig);
-
-            if (indices_orig[0] <= (gtk_tree_model_iter_n_children(treemodel_target, NULL) - 1))
-                gtk_adjustment_set_value(GTK_ADJUSTMENT(ce_adj),gtk_adjustment_get_value(GTK_ADJUSTMENT(ct_adj)));
-
-        }
-    }else if (gtk_adjustment_get_upper(GTK_ADJUSTMENT(ct_adj)) < gtk_adjustment_get_page_size(GTK_ADJUSTMENT(ct_adj))) // Target Clist rule not visible
-    {
-        indices_orig = gtk_tree_path_get_indices(path_orig);
-
-        if (indices_orig[0] <= (gtk_tree_model_iter_n_children(treemodel_target, NULL) - 1))
-            gtk_adjustment_set_value(GTK_ADJUSTMENT(ce_adj),gtk_adjustment_get_value(GTK_ADJUSTMENT(ct_adj)));
-    }
-
-    // Must block the select signal of the target to avoid looping
-    g_signal_handlers_block_by_func(G_OBJECT(selection_target), G_CALLBACK(Load_Filename_Select_Row_In_Other_List), G_OBJECT(treeview_orig));
-
-    stringiter = gtk_tree_model_get_string_from_iter(treemodel_orig, &iter_orig);
-    if (gtk_tree_model_get_iter_from_string(treemodel_target, &iter_target, stringiter))
-    {
-        gtk_tree_selection_select_iter(selection_target, &iter_target);
-    }
-
-    g_free(stringiter);
-    g_signal_handlers_unblock_by_func(G_OBJECT(selection_target), G_CALLBACK(Load_Filename_Select_Row_In_Other_List), G_OBJECT(treeview_orig));
-}
-
-/*
- * Set the new filename of each file.
- * Associate lines from LoadFileContentList with LoadFileNameList
- */
-static void
-Load_Filename_Set_Filenames (void)
-{
-    gint row;
-    ET_File *ETFile = NULL;
-    File_Name *FileName;
-    gchar *list_text = NULL;
-    gint rowcount;
-    gboolean found;
-
-    GtkTreePath *currentPath = NULL;
-    GtkTreeIter iter_name;
-    GtkTreeIter iter_content;
-
-    if ( !ETCore->ETFileList || !LoadFileContentList || !LoadFileNameList)
-        return;
-
-    /* Save current file */
-    ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
-
-    rowcount = MIN(gtk_tree_model_iter_n_children(GTK_TREE_MODEL(LoadFileNameListModel), NULL),
-                   gtk_tree_model_iter_n_children(GTK_TREE_MODEL(LoadFileContentListModel), NULL));
-
-    for (row=0; row < rowcount; row++)
-    {
-        if (row == 0)
-            currentPath = gtk_tree_path_new_first();
-        else
-            gtk_tree_path_next(currentPath);
-
-        found = gtk_tree_model_get_iter(GTK_TREE_MODEL(LoadFileNameListModel), &iter_name, currentPath);
-        if (found)
-            gtk_tree_model_get(GTK_TREE_MODEL(LoadFileNameListModel), &iter_name, 
-                               LOAD_FILE_NAME_POINTER, &ETFile, -1);
-
-        found = gtk_tree_model_get_iter(GTK_TREE_MODEL(LoadFileContentListModel), &iter_content, currentPath);
-        if (found)
-            gtk_tree_model_get(GTK_TREE_MODEL(LoadFileContentListModel), &iter_content, 
-                               LOAD_FILE_CONTENT_TEXT, &list_text, -1);
-
-        if (ETFile && list_text && (g_utf8_strlen (list_text, -1) > 0))
-        {
-            gchar *list_text_tmp;
-            gchar *filename_new_utf8;
-
-            list_text_tmp = g_strdup(list_text);
-            ET_File_Name_Convert_Character(list_text_tmp); // Replace invalid characters
-
-            /* Build the filename with the path */
-            filename_new_utf8 = ET_File_Name_Generate(ETFile,list_text_tmp);
-            g_free(list_text_tmp);
-
-            /* Set the new filename */
-            // Create a new 'File_Name' item
-            FileName = ET_File_Name_Item_New();
-            // Save changes of the 'File_Name' item
-            ET_Set_Filename_File_Name_Item(FileName,filename_new_utf8,NULL);
-            ET_Manage_Changes_Of_File_Data(ETFile,FileName,NULL);
-
-            g_free(filename_new_utf8);
-
-            // Then run current scanner if asked...
-            if (ScannerWindow && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(LoadFileRunScanner)) )
-                Scan_Select_Mode_And_Run_Scanner(ETFile);
-        }
-        g_free(list_text);
-    }
-
-    gtk_tree_path_free(currentPath);
-
-    Browser_List_Refresh_Whole_List();
-    ET_Display_File_Data_To_UI(ETCore->ETFileDisplayed);
-}
-
-/*
- * Create and attach a popup menu on the two clist of the LoadFileWindow
- */
-static gboolean
-Load_Filename_Popup_Menu_Handler (GtkWidget *treeview, GdkEventButton *event,
-                                  GtkMenu *menu)
-{
-    if (event && (event->type==GDK_BUTTON_PRESS) && (event->button==3))
-    {
-        gtk_menu_popup(menu,NULL,NULL,NULL,NULL,event->button,event->time);
-        return TRUE;
-    }
-    return FALSE;
-}
-
-static GtkWidget *
-Create_Load_Filename_Popup_Menu (GtkWidget *list)
-{
-    GtkWidget *BrowserPopupMenu;
-    GtkWidget *Image;
-    GtkWidget *MenuItem;
-
-
-    BrowserPopupMenu = gtk_menu_new();
-    gtk_menu_attach_to_widget (GTK_MENU (BrowserPopupMenu), list, NULL);
-    g_signal_connect (G_OBJECT (list), "button-press-event",
-                      G_CALLBACK (Load_Filename_Popup_Menu_Handler),
-                      BrowserPopupMenu);
-    
-    MenuItem = gtk_image_menu_item_new_with_label(_("Insert a blank line"));
-    Image = gtk_image_new_from_stock(GTK_STOCK_ADD,GTK_ICON_SIZE_MENU);
-    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image);
-    gtk_menu_shell_append(GTK_MENU_SHELL(BrowserPopupMenu), MenuItem);
-    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate", G_CALLBACK(Load_Filename_List_Insert_Blank_Line), G_OBJECT(list));
-
-    MenuItem = gtk_image_menu_item_new_with_label(_("Delete this line"));
-    Image = gtk_image_new_from_stock(GTK_STOCK_REMOVE,GTK_ICON_SIZE_MENU);
-    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image);
-    gtk_menu_shell_append(GTK_MENU_SHELL(BrowserPopupMenu),MenuItem);
-    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate", G_CALLBACK(Load_Filename_List_Delete_Line), G_OBJECT(list));
-
-    MenuItem = gtk_image_menu_item_new_with_label(_("Delete all blank lines"));
-    Image = gtk_image_new_from_stock(GTK_STOCK_REMOVE,GTK_ICON_SIZE_MENU);
-    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image);
-    gtk_menu_shell_append(GTK_MENU_SHELL(BrowserPopupMenu),MenuItem);
-    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate", G_CALLBACK(Load_Filename_List_Delete_All_Blank_Lines),G_OBJECT(list));
-
-    MenuItem = gtk_menu_item_new();
-    gtk_menu_shell_append(GTK_MENU_SHELL(BrowserPopupMenu),MenuItem);
-
-    MenuItem = gtk_image_menu_item_new_with_label(_("Move up this line"));
-    Image = gtk_image_new_from_stock(GTK_STOCK_GO_UP,GTK_ICON_SIZE_MENU);
-    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image);
-    gtk_menu_shell_append(GTK_MENU_SHELL(BrowserPopupMenu),MenuItem);
-    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate", G_CALLBACK(Load_Filename_List_Move_Up),G_OBJECT(list));
-
-    MenuItem = gtk_image_menu_item_new_with_label(_("Move down this line"));
-    Image = gtk_image_new_from_stock(GTK_STOCK_GO_DOWN,GTK_ICON_SIZE_MENU);
-    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image);
-    gtk_menu_shell_append(GTK_MENU_SHELL(BrowserPopupMenu),MenuItem);
-    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate", G_CALLBACK(Load_Filename_List_Move_Down),G_OBJECT(list));
-
-    MenuItem = gtk_menu_item_new();
-    gtk_menu_shell_append(GTK_MENU_SHELL(BrowserPopupMenu),MenuItem);
-
-    MenuItem = gtk_image_menu_item_new_with_label(_("Reload"));
-    Image = gtk_image_new_from_stock(GTK_STOCK_REFRESH,GTK_ICON_SIZE_MENU);
-    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(MenuItem),Image);
-    gtk_menu_shell_append(GTK_MENU_SHELL(BrowserPopupMenu),MenuItem);
-    g_signal_connect_swapped(G_OBJECT(MenuItem),"activate", G_CALLBACK(Load_Filename_List_Reload), G_OBJECT(list));
-
-    gtk_widget_show_all(BrowserPopupMenu);
-    return BrowserPopupMenu;
-}
-
-/*
- * Insert a blank line before the selected line in the treeview passed as parameter
- */
-static void
-Load_Filename_List_Insert_Blank_Line (GtkWidget *treeview)
-{
-    GtkTreeSelection *selection;
-    GtkTreeIter selectedIter;
-    GtkTreeIter *temp;
-    GtkTreeModel *model;
-
-    g_return_if_fail (treeview != NULL);
-
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
-
-    if (gtk_tree_selection_get_selected(selection, &model, &selectedIter) != TRUE)
-        return;
-
-    temp = &selectedIter; /* Not used here, but it must be non-NULL to keep GTK+ happy! */
-    gtk_list_store_insert_before(GTK_LIST_STORE(model), temp, &selectedIter);
-}
-
-/*
- * Delete all blank lines in the treeview passed as parameter
- */
-static void
-Load_Filename_List_Delete_All_Blank_Lines (GtkWidget *treeview)
-{
-    gchar *text = NULL;
-    GtkTreeIter iter;
-    GtkTreeModel *model;
-
-    model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeview));
-
-    if (!gtk_tree_model_get_iter_first(model, &iter))
-        return;
-
-    while (TRUE)
-    {
-        gtk_tree_model_get(model, &iter, LOAD_FILE_NAME_TEXT, &text, -1);
-
-        /* Check for blank entry */
-        if (!text || g_utf8_strlen(text, -1) == 0)
-        {
-            g_free(text);
-
-            if (!gtk_list_store_remove(GTK_LIST_STORE(model), &iter))
-                break;
-            else
-                continue;
-        }
-        g_free(text);
-
-        if (!gtk_tree_model_iter_next(model, &iter))
-            break;
-    }
-}
-
-/*
- * Delete the selected line in the treeview passed as parameter
- */
-static void
-Load_Filename_List_Delete_Line (GtkWidget *treeview)
-{
-    GtkTreeSelection *selection;
-    GtkTreeIter selectedIter, itercopy;
-    GtkTreeModel *model;
-    gboolean rowafter;
-
-    g_return_if_fail (treeview != NULL);
-
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
-
-    if (gtk_tree_selection_get_selected(selection, &model, &selectedIter) != TRUE)
-    {
-        return;
-    }
-
-    // If there is a line following the one about to be removed, select it for convenience
-    itercopy = selectedIter;
-    rowafter = gtk_tree_model_iter_next(model, &itercopy);
-
-    // Remove the line to be deleted
-    gtk_list_store_remove(GTK_LIST_STORE(model), &selectedIter);
-
-    if (rowafter)
-        gtk_tree_selection_select_iter(selection, &itercopy);
-}
-
-/*
- * Move up the selected line in the treeview passed as parameter
- */
-static void
-Load_Filename_List_Move_Up (GtkWidget *treeview)
-{
-    GtkTreeSelection *selection;
-    GList *selectedRows;
-    GList *l;
-    GtkTreeIter currentFile;
-    GtkTreeIter nextFile;
-    GtkTreePath *currentPath;
-    GtkTreeModel *treemodel;
-
-    g_return_if_fail (treeview != NULL);
-
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
-    treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(treeview));
-    selectedRows = gtk_tree_selection_get_selected_rows(selection, NULL);
-
-    if (!selectedRows)
-    {
-        return;
-    }
-
-    for (l = selectedRows; l != NULL; l = g_list_next (l))
-    {
-        currentPath = (GtkTreePath *)l->data;
-
-        if (gtk_tree_model_get_iter (treemodel, &currentFile, currentPath))
-        {
-            // Find the entry above the node...
-            if (gtk_tree_path_prev(currentPath))
-            {
-                // ...and if it exists, swap the two rows by iter
-                gtk_tree_model_get_iter(treemodel, &nextFile, currentPath);
-                gtk_list_store_swap(GTK_LIST_STORE(treemodel), &currentFile, &nextFile);
-            }
-        }
-    }
-
-    g_list_free_full (selectedRows, (GDestroyNotify)gtk_tree_path_free);
-}
-
-/*
- * Move down the selected line in the treeview passed as parameter
- */
-static void
-Load_Filename_List_Move_Down (GtkWidget *treeview)
-{
-    GtkTreeSelection *selection;
-    GList *selectedRows;
-    GList *l;
-    GtkTreeIter currentFile;
-    GtkTreeIter nextFile;
-    GtkTreePath *currentPath;
-    GtkTreeModel *treemodel;
-
-    g_return_if_fail (treeview != NULL);
-
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
-    treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(treeview));
-    selectedRows = gtk_tree_selection_get_selected_rows(selection, NULL);
-
-    if (!selectedRows)
-    {
-        return;
-    }
-
-    for (l = selectedRows; l != NULL; l = g_list_next (l))
-    {
-        currentPath = (GtkTreePath *)l->data;
-
-        if (gtk_tree_model_get_iter (treemodel, &currentFile, currentPath))
-        {
-            // Find the entry below the node and swap the two nodes by iter
-            gtk_tree_path_next(currentPath);
-            if (gtk_tree_model_get_iter(treemodel, &nextFile, currentPath))
-                gtk_list_store_swap(GTK_LIST_STORE(treemodel), &currentFile, &nextFile);
-        }
-    }
-
-    g_list_free_full (selectedRows, (GDestroyNotify)gtk_tree_path_free);
-}
-
-/*
- * Reload a list of choice
- * The list parameter refers to a GtkTreeView (LoadFileNameList or LoadFileContentList)
- */
-static void
-Load_Filename_List_Reload (GtkWidget *treeview)
-{
-    g_return_if_fail (treeview != NULL);
-
-    if (GTK_TREE_VIEW(treeview) == GTK_TREE_VIEW(LoadFileContentList))
-    {
-        Load_File_Content(gtk_bin_get_child(GTK_BIN(FileToLoadCombo)));
-        
-    } else if (GTK_TREE_VIEW(treeview) == GTK_TREE_VIEW(LoadFileNameList))
-    {
-        Load_File_List();
-    }
-}
-
-/*
- * Update the text of the selected line into the list, with the text entered into the entry
- */
-static void
-Load_Filename_Update_Text_Line(GtkWidget *entry, GtkWidget *list)
-{
-    GtkTreeIter SelectedRow;
-    GtkTreeSelection *selection;
-    GtkTreeModel *model;
-    gboolean hasSelectedRows;
-
-    g_return_if_fail (entry != NULL || list != NULL);
-
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list));
-    hasSelectedRows = gtk_tree_selection_get_selected(selection, &model, &SelectedRow);
-    if (hasSelectedRows)
-    {
-        const gchar *text = gtk_entry_get_text(GTK_ENTRY(entry));
-        gtk_list_store_set(GTK_LIST_STORE(model), &SelectedRow, LOAD_FILE_CONTENT_TEXT, text, -1);
-    }
-}
-
-/*
- * Set the text of the selected line of the list into the entry
- */
-static void
-Load_Filename_Edit_Text_Line(GtkTreeSelection *selection, gpointer data)
-{
-    gchar *text;
-    GtkTreeIter selectedIter;
-    GtkEntry *entry = GTK_ENTRY(data);
-    gulong handler;
-
-    if (gtk_tree_selection_get_selected(selection, NULL, &selectedIter) != TRUE)
-        return;
-
-    gtk_tree_model_get(GTK_TREE_MODEL(LoadFileContentListModel), &selectedIter, LOAD_FILE_NAME_TEXT, &text, -1);
-
-    handler = g_signal_handler_find(entry, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, Load_Filename_Update_Text_Line, NULL);
-    g_signal_handler_block(entry, handler);
-    if (text)
-    {
-        gtk_entry_set_text(entry, text);
-        g_free(text);
-    } else
-        gtk_entry_set_text(entry, "");
-
-    g_signal_handler_unblock(entry, handler);
-}
-
-/*
- * et_load_text_file_on_response:
- * @dialog: the dialog which emitted the response signal
- * @response_id: the response ID
- * @user_data: user data set when the signal was connected
- *
- * Signal handler for the load filenames from text file dialog.
- */
-static void
-et_load_text_file_on_response (GtkDialog *dialog, gint response_id,
-                               gpointer user_data)
-{
-    switch (response_id)
-    {
-        case GTK_RESPONSE_APPLY:
-            Load_Filename_Set_Filenames ();
-            break;
-        case GTK_RESPONSE_CANCEL:
-        case GTK_RESPONSE_DELETE_EVENT:
-            Destroy_Load_Filename_Window ();
-            break;
-        default:
-            g_assert_not_reached ();
-    }
-}
-
-/*
- * et_playlist_on_response:
- * @dialog: the dialog which emitted the response signal
- * @response_id: the response ID
- * @user_data: user data set when the signal was connected
- *
- * Signal handler for the write playlist dialog.
- */
-static void
-et_playlist_on_response (GtkDialog *dialog, gint response_id,
-                         gpointer user_data)
-{
-    switch (response_id)
-    {
-        case GTK_RESPONSE_OK:
-            Playlist_Write_Button_Pressed ();
-            break;
-        case GTK_RESPONSE_CANCEL:
-        case GTK_RESPONSE_DELETE_EVENT:
-            Destroy_Write_Playlist_Window ();
-            break;
-        default:
-            g_assert_not_reached ();
-    }
-}
-
-gchar *
-et_disc_number_to_string (const guint disc_number)
-{
-    if (PAD_DISC_NUMBER)
-    {
-        return g_strdup_printf ("%.*d", PAD_DISC_NUMBER_DIGITS, disc_number);
-    }
-
-    return g_strdup_printf ("%d", disc_number);
-}
-
-gchar *
-et_track_number_to_string (const guint track_number)
-{
-    return NUMBER_TRACK_FORMATED ? g_strdup_printf ("%.*d",
-                                                    NUMBER_TRACK_FORMATED_SPIN_BUTTON,
-                                                    track_number)
-                                 : g_strdup_printf ("%d", track_number);
-}
-
 void
 et_on_child_exited (GPid pid, gint status, gpointer user_data)
 {
diff --git a/src/misc.h b/src/misc.h
index 2ca216d..6a21b0c 100644
--- a/src/misc.h
+++ b/src/misc.h
@@ -26,30 +26,11 @@
 
 G_BEGIN_DECLS
 
-GtkWidget *playlist_use_mask_name;
-GtkWidget *playlist_use_dir_name;
-GtkWidget *playlist_only_selected_files;
-GtkWidget *playlist_full_path;
-GtkWidget *playlist_relative_path;
-GtkWidget *playlist_create_in_parent_dir;
-GtkWidget *playlist_use_dos_separator;
-GtkWidget *playlist_content_none;
-GtkWidget *playlist_content_filename;
-GtkWidget *playlist_content_mask;
-
-
 /**************
  * Prototypes *
  **************/
 
 /*
- * Create Pixmaps, buttons...
- */
-GtkWidget *Create_Button_With_Icon_And_Label (const gchar *pixmap_name, gchar *label);
-GtkWidget *Create_Xpm_Image                  (const char **xpm_name);
-
-
-/*
  * Combobox misc functions
  */
 gboolean Add_String_To_Combo_List(GtkListStore *liststore, const gchar *string);
@@ -59,13 +40,7 @@ gchar   *Get_Active_Combo_Box_Item(GtkComboBox *combo);
 /*
  * Other
  */
-void Insert_Only_Digit (GtkEditable *editable,const gchar *text,gint length,gint *position,gpointer data);
-gboolean Parse_Date (void);
-void Load_Genres_List_To_UI (void);
-void Load_Track_List_To_UI  (void);
 void Init_Character_Translation_Table (void);
-void Init_Custom_Icons (void);
-gchar *Check_If_Executable_Exists (const gchar *program);
 
 // Mouse cursor
 void Init_Mouse_Cursor    (void);
@@ -74,35 +49,19 @@ void Set_Unbusy_Cursor    (void);
 
 // Run Audio Player
 void Run_Audio_Player_Using_Directory (void);
-void Run_Audio_Player_Using_Selection (void);
-void Run_Audio_Player_Using_Browser_Artist_List (void);
-void Run_Audio_Player_Using_Browser_Album_List  (void);
 
 gchar *Convert_Duration (gulong duration);
 
-void et_show_help (void);
-
 goffset et_get_file_size (const gchar *filename);
 
 gint Combo_Alphabetic_Sort (GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer data);
 
+void et_run_audio_player (GList *files);
 gboolean et_run_program (const gchar *program_name, GList *args_list);
 
 void File_Selection_Window_For_File      (GtkWidget *entry);
 void File_Selection_Window_For_Directory (GtkWidget *entry);
 
-// Playlist window
-void Open_Write_Playlist_Window          (void);
-void Write_Playlist_Window_Apply_Changes (void);
-
-// Search file window
-void Open_Search_File_Window (void);
-void Search_File_Window_Apply_Changes (void);
-
-// Load filenames window
-void Open_Load_Filename_Window          (void);
-void Load_Filename_Window_Apply_Changes (void);
-
 gchar * et_disc_number_to_string (const guint disc_number);
 gchar * et_track_number_to_string (const guint track_number);
 
diff --git a/src/monkeyaudio_header.c b/src/monkeyaudio_header.c
deleted file mode 100644
index 30f9122..0000000
--- a/src/monkeyaudio_header.c
+++ /dev/null
@@ -1,122 +0,0 @@
-/* monkeyaudio_header.c */
-/*
- *  EasyTAG - Tag editor for MP3, Ogg Vorbis and MPC files
- *  Copyright (C) 2001-2003  Jerome Couderc <easytag at gmail.com>
- *  Copyright (C) 2002-2003  Artur Polaczyñski <artii at o2.pl>
- *
- *  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
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include <config.h>
-
-#include <gtk/gtk.h>
-#include <glib/gi18n.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-
-#include "easytag.h"
-#include "et_core.h"
-#include "misc.h"
-#include "setting.h"
-#include "charset.h"
-#include "monkeyaudio_header.h"
-#include "libapetag/info_mac.h"
-
-
-/***************
- * Header info *
- ***************/
-
-gboolean Mac_Header_Read_File_Info(gchar *filename, ET_File_Info *ETFileInfo)
-{
-    StreamInfoMac Info;
-
-    if (info_mac_read(filename, &Info))
-    {
-        gchar *filename_utf8 = filename_to_display(filename);
-        fprintf(stderr,"MAC header not found for file '%s'\n", filename_utf8);
-        g_free(filename_utf8);
-        return FALSE;
-    }
-    ETFileInfo->mpc_profile   = g_strdup(Info.CompresionName);
-    ETFileInfo->version       = Info.Version;
-    ETFileInfo->bitrate       = Info.Bitrate/1000.0;
-    ETFileInfo->samplerate    = Info.SampleFreq;
-    ETFileInfo->mode          = Info.Channels;
-    ETFileInfo->size          = Info.FileSize;
-    ETFileInfo->duration      = Info.Duration/1000;
-
-    return TRUE;
-}
-
-
-
-gboolean Mac_Header_Display_File_Info_To_UI (gchar *filename_utf8, ET_File_Info *ETFileInfo)
-{
-    gchar *text;
-    gchar *time  = NULL;
-    gchar *time1 = NULL;
-    gchar *size  = NULL;
-    gchar *size1 = NULL;
-
-    /* Mode changed to profile name  */
-    text = g_strdup_printf(_("Profile:"));
-    gtk_label_set_text(GTK_LABEL(ModeLabel),text);
-    g_free(text);
-    text = g_strdup_printf("%s",ETFileInfo->mpc_profile);
-    gtk_label_set_text(GTK_LABEL(ModeValueLabel),text);
-    g_free(text);
-
-    /* Bitrate */
-    text = g_strdup_printf(_("%d kb/s"),ETFileInfo->bitrate);
-    gtk_label_set_text(GTK_LABEL(BitrateValueLabel),text);
-    g_free(text);
-
-    /* Samplerate */
-    text = g_strdup_printf(_("%d Hz"),ETFileInfo->samplerate);
-    gtk_label_set_text(GTK_LABEL(SampleRateValueLabel),text);
-    g_free(text);
-
-    /* Version changed to encoder version */
-    text = g_strdup_printf(_("Encoder:"));
-    gtk_label_set_text(GTK_LABEL(VersionLabel),text);
-    g_free(text);
-    text = g_strdup_printf("%i.%i",ETFileInfo->version/1000,ETFileInfo->version%1000);
-    gtk_label_set_text(GTK_LABEL(VersionValueLabel),text);
-    g_free(text);
-
-    /* Size */
-    size  = g_format_size (ETFileInfo->size);
-    size1 = g_format_size (ETCore->ETFileDisplayedList_TotalSize);
-    text  = g_strdup_printf("%s (%s)",size,size1);
-    gtk_label_set_text(GTK_LABEL(SizeValueLabel),text);
-    g_free(size);
-    g_free(size1);
-    g_free(text);
-
-    /* Duration */
-    time  = Convert_Duration(ETFileInfo->duration);
-    time1 = Convert_Duration(ETCore->ETFileDisplayedList_TotalDuration);
-    text  = g_strdup_printf("%s (%s)",time,time1);
-    gtk_label_set_text(GTK_LABEL(DurationValueLabel),text);
-    g_free(time);
-    g_free(time1);
-    g_free(text);
-
-    return TRUE;
-}
diff --git a/src/monkeyaudio_header.h b/src/monkeyaudio_header.h
deleted file mode 100644
index 7eab16a..0000000
--- a/src/monkeyaudio_header.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* monkeyaudio_header.h - 16 IV 2003 */
-/*
- *  EasyTAG - Tag editor for MP3 and Ogg Vorbis files
- *  Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
- *  Copyright (C) 2002-2003  Artur Polaczyñski <artii at o2.pl>
- *
- *  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
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-
-#ifndef __MONKEYAUDIO_HEADER_H__
-#define __MONKEYAUDIO_HEADER_H__
-
-
-#include "et_core.h"
-
-/****************
- * Declarations *
- ****************/
-
-
-/**************
- * Prototypes *
- **************/
-
-gboolean Mac_Header_Read_File_Info(gchar *filename, ET_File_Info *ETFileInfo);
-gboolean Mac_Header_Display_File_Info_To_UI (gchar *filename, ET_File_Info *ETFileInfo);
-
-
-#endif /* __MONKAYAUDIO_HEADER_H__ */
diff --git a/src/mp4_header.h b/src/mp4_header.h
deleted file mode 100644
index 97de5b6..0000000
--- a/src/mp4_header.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- *  EasyTAG - Tag editor for audio files
- *  Copyright (C) 2012-2014  David King <amigadave at amigadave.com>
- *  Copyright (C) 2000-2005  Jerome Couderc <easytag at gmail.com>
- *  Copyright (C) 2005  Stewart Whitman <swhitman at cox.net>
- *
- *  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
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-
-#ifndef ET_MP4_HEADER_H_
-#define ET_MP4_HEADER_H_
-
-
-#include "et_core.h"
-
-G_BEGIN_DECLS
-
-gboolean Mp4_Header_Read_File_Info (gchar *filename, ET_File_Info *ETFileInfo);
-gboolean Mp4_Header_Display_File_Info_To_UI (gchar *filename, ET_File_Info *ETFileInfo);
-
-G_END_DECLS
-
-#endif /* ET_MP4_HEADER_H_ */
diff --git a/src/mp4_tag.h b/src/mp4_tag.h
deleted file mode 100644
index 64d7f54..0000000
--- a/src/mp4_tag.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- *  EasyTAG - Tag editor for MP3 and Ogg Vorbis files
- *  Copyright (C) 2012-1014  David King <amigadave at amigadave.com>
- *  Copyright (C) 2001-2005  Jerome Couderc <easytag at gmail.com>
- *  Copyright (C) 2005  Michael Ihde <mike.ihde at randomwalking.com>
- *
- *  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
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#ifndef ET_MP4_TAG_H_
-#define ET_MP4_TAG_H_
-
-#include "et_core.h"
-
-G_BEGIN_DECLS
-
-gboolean Mp4tag_Read_File_Tag (gchar *filename, File_Tag *FileTag);
-gboolean Mp4tag_Write_File_Tag (ET_File *ETFile);
-
-G_END_DECLS
-
-#endif /* ET_MP4_TAG_H_ */
diff --git a/src/mpeg_header.c b/src/mpeg_header.c
deleted file mode 100644
index ba46ff4..0000000
--- a/src/mpeg_header.c
+++ /dev/null
@@ -1,242 +0,0 @@
-/* mpeg_header.c - 2000/05/12 */
-/*
- *  EasyTAG - Tag editor for MP3 and Ogg Vorbis files
- *  Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
- *
- *  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
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include "config.h"
-
-#if defined ENABLE_MP3 && defined ENABLE_ID3LIB
-
-#include <gtk/gtk.h>
-#include <glib/gi18n.h>
-
-#include "mpeg_header.h"
-#include "easytag.h"
-#include "misc.h"
-
-#include <id3.h>
-#include "id3lib/id3_bugfix.h"
-
-
-
-/****************
- * Declarations *
- ****************/
-static const gchar *layer_names[3] =
-{
-    "I",    /* Layer 1 */
-    "II",   /* Layer 2 */
-    "III"   /* Layer 3 */
-};
-
-
-
-/**************
- * Prototypes *
- **************/
-static gchar* channel_mode_name(int mode);
-
-
-
-/*************
- * Functions *
- *************/
-
-static gchar* channel_mode_name(int mode)
-{
-    static const gchar *channel_mode[] =
-    {
-        N_("Stereo"),
-        N_("Joint stereo"),
-        N_("Dual channel"),
-        N_("Single channel")
-    };
-    if (mode < 0 || mode > 3)
-        return "";
-    return _(channel_mode[mode]);
-}
-
-
-
-/*
- * Read infos into header of first frame
- */
-gboolean
-Mpeg_Header_Read_File_Info (gchar *filename, ET_File_Info *ETFileInfo)
-{
-    /*
-     * With id3lib, the header frame couldn't be read if the file contains an ID3v2 tag with an APIC frame
-     */
-    ID3Tag *id3_tag = NULL;    /* Tag defined by the id3lib */
-    const Mp3_Headerinfo* headerInfo = NULL;
-
-    g_return_val_if_fail (filename != NULL || ETFileInfo != NULL, FALSE);
-
-    /* Get size of file */
-    ETFileInfo->size = et_get_file_size (filename);
-
-    /* Get data from tag */
-    if ( (id3_tag = ID3Tag_New()) == NULL )
-        return FALSE;
-
-    /* Link the file to the tag (uses ID3TT_ID3V2 to get header if APIC is present in Tag) */
-    ID3Tag_LinkWithFlags(id3_tag,filename,ID3TT_ID3V2);
-
-    if ( (headerInfo = ID3Tag_GetMp3HeaderInfo(id3_tag)) )
-    {
-        switch (headerInfo->version)
-        {
-            case MPEGVERSION_1:
-                ETFileInfo->version = 1;
-                ETFileInfo->mpeg25 = FALSE;
-                break;
-            case MPEGVERSION_2:
-                ETFileInfo->version = 2;
-                ETFileInfo->mpeg25 = FALSE;
-                break;
-            case MPEGVERSION_2_5:
-                ETFileInfo->version = 2;
-                ETFileInfo->mpeg25 = TRUE;
-                break;
-            default:
-                break;
-        }
-
-        switch (headerInfo->layer)
-        {
-            case MPEGLAYER_I:
-                ETFileInfo->layer = 1;
-                break;
-            case MPEGLAYER_II:
-                ETFileInfo->layer = 2;
-                break;
-            case MPEGLAYER_III:
-                ETFileInfo->layer = 3;
-                break;
-            default:
-                break;
-        }
-
-        // Samplerate
-        ETFileInfo->samplerate = headerInfo->frequency;
-
-        // Mode -> Seems to be detected but incorrect?!
-        switch (headerInfo->modeext)
-        {
-            case MP3CHANNELMODE_STEREO:
-                ETFileInfo->mode = 0;
-                break;
-            case MP3CHANNELMODE_JOINT_STEREO:
-                ETFileInfo->mode = 1;
-                break;
-            case MP3CHANNELMODE_DUAL_CHANNEL:
-                ETFileInfo->mode = 2;
-                break;
-            case MP3CHANNELMODE_SINGLE_CHANNEL:
-                ETFileInfo->mode = 3;
-                break;
-            default:
-                break;
-        }
-
-        // Bitrate
-        if (headerInfo->vbr_bitrate <= 0)
-        {
-            ETFileInfo->variable_bitrate = FALSE;
-            ETFileInfo->bitrate = headerInfo->bitrate/1000;
-        }else
-        {
-            ETFileInfo->variable_bitrate = TRUE;
-            ETFileInfo->bitrate = headerInfo->vbr_bitrate/1000;
-        }
-
-        // Duration
-        ETFileInfo->duration = headerInfo->time;
-    }
-
-    /* Free allocated data */
-    ID3Tag_Delete(id3_tag);
-
-    return TRUE;
-}
-
-
-
-/*
- * Display header infos in the main window
- */
-gboolean Mpeg_Header_Display_File_Info_To_UI(gchar *filename_utf8, ET_File_Info *ETFileInfo)
-{
-    gchar *text;
-    gchar *time = NULL;
-    gchar *time1 = NULL;
-    gchar *size = NULL;
-    gchar *size1 = NULL;
-    gint ln_num = sizeof(layer_names)/sizeof(layer_names[0]);
-
-
-    /* MPEG, Layer versions */
-    gtk_label_set_text(GTK_LABEL(VersionLabel),_("MPEG"));
-    if (ETFileInfo->mpeg25)
-        text = g_strdup_printf("2.5, Layer %s",(ETFileInfo->layer>=1 && ETFileInfo->layer<=ln_num)?layer_names[ETFileInfo->layer-1]:"?");
-    else
-        text = g_strdup_printf("%d, Layer %s",ETFileInfo->version,(ETFileInfo->layer>=1 && ETFileInfo->layer<=ln_num)?layer_names[ETFileInfo->layer-1]:"?");
-    gtk_label_set_text(GTK_LABEL(VersionValueLabel),text);
-    g_free(text);
-
-    /* Bitrate */
-    if (ETFileInfo->variable_bitrate)
-        text = g_strdup_printf(_("~%d kb/s"),ETFileInfo->bitrate);
-    else
-        text = g_strdup_printf(_("%d kb/s"),ETFileInfo->bitrate);
-    gtk_label_set_text(GTK_LABEL(BitrateValueLabel),text);
-    g_free(text);
-
-    /* Samplerate */
-    text = g_strdup_printf(_("%d Hz"),ETFileInfo->samplerate);
-    gtk_label_set_text(GTK_LABEL(SampleRateValueLabel),text);
-    g_free(text);
-
-    /* Mode */
-    gtk_label_set_text(GTK_LABEL(ModeLabel),_("Mode:"));
-    text = g_strdup_printf("%s",_(channel_mode_name(ETFileInfo->mode)));
-    gtk_label_set_text(GTK_LABEL(ModeValueLabel),text);
-    g_free(text);
-
-    /* Size */
-    size  = g_format_size (ETFileInfo->size);
-    size1 = g_format_size (ETCore->ETFileDisplayedList_TotalSize);
-    text  = g_strdup_printf("%s (%s)",size,size1);
-    gtk_label_set_text(GTK_LABEL(SizeValueLabel),text);
-    g_free(size);
-    g_free(size1);
-    g_free(text);
-
-    /* Duration */
-    time  = Convert_Duration(ETFileInfo->duration);
-    time1 = Convert_Duration(ETCore->ETFileDisplayedList_TotalDuration);
-    text  = g_strdup_printf("%s (%s)",time,time1);
-    gtk_label_set_text(GTK_LABEL(DurationValueLabel),text);
-    g_free(time);
-    g_free(time1);
-    g_free(text);
-
-    return TRUE;
-}
-
-#endif /* defined ENABLE_MP3 && defined ENABLE_ID3LIB */
diff --git a/src/mpeg_header.h b/src/mpeg_header.h
deleted file mode 100644
index fc49e41..0000000
--- a/src/mpeg_header.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* mpeg_header.h - 2000/05/12 */
-/*
- *  EasyTAG - Tag editor for MP3 and Ogg Vorbis files
- *  Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
- *
- *  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
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-
-#ifndef __MPEG_HEADER_H__
-#define __MPEG_HEADER_H__
-
-
-#include "et_core.h"
-
-/****************
- * Declarations *
- ****************/
-
-
-/**************
- * Prototypes *
- **************/
-
-gboolean Mpeg_Header_Read_File_Info          (gchar *filename, ET_File_Info *ETFileInfo);
-gboolean Mpeg_Header_Display_File_Info_To_UI (gchar *filename, ET_File_Info *ETFileInfo);
-
-
-#endif /* __MPEG_HEADER_H__ */
diff --git a/src/musepack_header.c b/src/musepack_header.c
deleted file mode 100644
index 84f6be3..0000000
--- a/src/musepack_header.c
+++ /dev/null
@@ -1,125 +0,0 @@
-/* musepack_header.c */
-/*
- *  EasyTAG - Tag editor for MP3, Ogg Vorbis and MPC files
- *  Copyright (C) 2001-2003  Jerome Couderc <easytag at gmail.com>
- *  Copyright (C) 2002-2003  Artur Polaczyñski <artii at o2.pl>
- *
- *  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
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include <config.h>
-
-#include <gtk/gtk.h>
-#include <glib/gi18n.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-
-#include "easytag.h"
-#include "et_core.h"
-#include "misc.h"
-#include "setting.h"
-#include "charset.h"
-#include "musepack_header.h"
-#include "libapetag/info_mpc.h"
-
-
-/***************
- * Header info *
- ***************/
-
-gboolean Mpc_Header_Read_File_Info (gchar *filename, ET_File_Info *ETFileInfo)
-{
-    StreamInfoMpc Info;
-
-    if (info_mpc_read(filename, &Info))
-    {
-        gchar *filename_utf8 = filename_to_display(filename);
-        fprintf(stderr,"MPC header not found for file '%s'\n", filename_utf8);
-        g_free(filename_utf8);
-        return FALSE;
-    }
-    //printf("%",Info.fields);
-    ETFileInfo->mpc_profile = g_strdup(Info.ProfileName);
-    ETFileInfo->version     = Info.StreamVersion;
-    ETFileInfo->bitrate     = Info.Bitrate/1000.0;
-    ETFileInfo->samplerate  = Info.SampleFreq;
-    ETFileInfo->mode        = Info.Channels;
-    ETFileInfo->size        = Info.FileSize;
-    ETFileInfo->duration    = Info.Duration/1000;
-    ETFileInfo->mpc_version = g_strdup_printf("%s",Info.Encoder);
-
-    return TRUE;
-}
-
-
-
-gboolean Mpc_Header_Display_File_Info_To_UI (gchar *filename_utf8, ET_File_Info *ETFileInfo)
-{
-    gchar *text;
-    gchar *time  = NULL;
-    gchar *time1 = NULL;
-    gchar *size  = NULL;
-    gchar *size1 = NULL;
-
-    /* Mode changed to profile name  */
-    text = g_strdup_printf(_("Profile:"));
-    gtk_label_set_text(GTK_LABEL(ModeLabel),text);
-    g_free(text);
-    text = g_strdup_printf("%s (SV%d)",ETFileInfo->mpc_profile,ETFileInfo->version);
-    gtk_label_set_text(GTK_LABEL(ModeValueLabel),text);
-    g_free(text);
-
-    /* Bitrate */
-    text = g_strdup_printf(_("%d kb/s"),ETFileInfo->bitrate);
-    gtk_label_set_text(GTK_LABEL(BitrateValueLabel),text);
-    g_free(text);
-
-    /* Samplerate */
-    text = g_strdup_printf(_("%d Hz"),ETFileInfo->samplerate);
-    gtk_label_set_text(GTK_LABEL(SampleRateValueLabel),text);
-    g_free(text);
-
-    /* Version changed to encoder version */
-    text = g_strdup_printf(_("Encoder:"));
-    gtk_label_set_text(GTK_LABEL(VersionLabel),text);
-    g_free(text);
-
-    text = g_strdup_printf("%s",ETFileInfo->mpc_version);
-    gtk_label_set_text(GTK_LABEL(VersionValueLabel),text);
-    g_free(text);
-
-    /* Size */
-    size  = g_format_size (ETFileInfo->size);
-    size1 = g_format_size (ETCore->ETFileDisplayedList_TotalSize);
-    text  = g_strdup_printf("%s (%s)",size,size1);
-    gtk_label_set_text(GTK_LABEL(SizeValueLabel),text);
-    g_free(size);
-    g_free(size1);
-    g_free(text);
-
-    /* Duration */
-    time  = Convert_Duration(ETFileInfo->duration);
-    time1 = Convert_Duration(ETCore->ETFileDisplayedList_TotalDuration);
-    text  = g_strdup_printf("%s (%s)",time,time1);
-    gtk_label_set_text(GTK_LABEL(DurationValueLabel),text);
-    g_free(time);
-    g_free(time1);
-    g_free(text);
-
-    return TRUE;
-}
diff --git a/src/musepack_header.h b/src/musepack_header.h
deleted file mode 100644
index 99b3562..0000000
--- a/src/musepack_header.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* musepack_header.h - 26 XI 2002 */
-/*
- *  EasyTAG - Tag editor for MP3 and Ogg Vorbis files
- *  Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
- *  Copyright (C) 2002-2003  Artur Polaczyñski <artii at o2.pl>
- *
- *  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
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-
-#ifndef __MUSEPACK_HEADER_H__
-#define __MUSEPACK_HEADER_H__
-
-
-#include "et_core.h"
-
-/****************
- * Declarations *
- ****************/
-
-
-/**************
- * Prototypes *
- **************/
-
-gboolean Mpc_Header_Read_File_Info          (gchar *filename, ET_File_Info *ETFileInfo);
-gboolean Mpc_Header_Display_File_Info_To_UI (gchar *filename, ET_File_Info *ETFileInfo);
-
-
-#endif /* __MUSEPACK_HEADER_H__ */
diff --git a/src/ogg_tag.h b/src/ogg_tag.h
deleted file mode 100644
index d2099a5..0000000
--- a/src/ogg_tag.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/* ogg_tag.h - 2001/11/08 */
-/*
- *  EasyTAG - Tag editor for MP3 and Ogg Vorbis files
- *  Copyright (C) 2001-2003  Jerome Couderc <easytag at gmail.com>
- *
- *  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
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-
-#ifndef __OGG_TAG_H__
-#define __OGG_TAG_H__
-
-
-#include <glib.h>
-
-#include "config.h"
-
-#ifdef ENABLE_OGG
-
-#include "vcedit.h"
-#include "et_core.h"
-
-/**************
- * Prototypes *
- **************/
-gboolean ogg_tag_read_file_tag (gchar *filename, File_Tag *FileTag,
-                                GError **error);
-gboolean ogg_tag_write_file_tag (ET_File *ETFile, GError **error);
-
-void et_add_file_tags_from_vorbis_comments (vorbis_comment *vc, File_Tag *FileTag, const gchar *filename_utf8);
-void et_add_vorbis_comments_from_file_tags (vorbis_comment *vc, File_Tag *FileTag);
-
-#endif /* ENABLE_OGG */
-
-#endif /* __OGG_TAG_H__ */
diff --git a/src/picture.c b/src/picture.c
index 105876f..88fe08e 100644
--- a/src/picture.c
+++ b/src/picture.c
@@ -1,24 +1,22 @@
-/* picture.c - 2004/11/21 */
-/*
- *  EasyTAG - Tag editor for MP3 and Ogg Vorbis files
- *  Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
+/* EasyTAG - Tag editor for audio files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ * Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
  *
- *  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
- *  (at your option) any later version.
+ * 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
+ * (at your option) any later version.
  *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
  *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-
 #include <config.h>
 #include <gtk/gtk.h>
 #include <gdk/gdkkeysyms.h>
@@ -37,7 +35,6 @@
 #include "log.h"
 #include "misc.h"
 #include "setting.h"
-#include "bar.h"
 #include "charset.h"
 
 #include "win32/win32dep.h"
@@ -47,15 +44,8 @@
  * Prototypes *
  **************/
 
-static void et_picture_load_file (GFile *file, gpointer user_data);
-
 static const gchar *Picture_Format_String (Picture_Format format);
-static const gchar *Picture_Type_String (EtPictureType type);
-static gchar *Picture_Info (Picture *pic);
 
-static Picture *et_picture_load_file_data (GFile *file, GError **error);
-static gboolean et_picture_save_file_data (const Picture *pic, GFile *file,
-                                           GError **error);
 
 /*
  * Note :
@@ -69,104 +59,6 @@ static gboolean et_picture_save_file_data (const Picture *pic, GFile *file,
  * Functions *
  *************/
 
-void Tag_Area_Picture_Drag_Data (GtkWidget *widget, GdkDragContext *dc,
-                                 gint x, gint y, GtkSelectionData *selection_data,
-                                 guint info, guint t, gpointer data)
-{
-    GtkTreeSelection *selection;
-    gchar **uri_list, **uri;
-
-    gtk_drag_finish(dc, TRUE, FALSE, t);
-
-    if (info != TARGET_URI_LIST
-    ||  !selection_data
-    ||  !PictureEntryView)
-        return;
-
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(PictureEntryView));
-    gtk_tree_selection_unselect_all(selection);
-
-    uri = uri_list = g_strsplit((gchar *)gtk_selection_data_get_data(selection_data), "\r\n", 0);
-    while (*uri && strlen(*uri))
-    {
-        GFile *file = g_file_new_for_uri (*uri);
-
-        et_picture_load_file (file, NULL);
-
-        g_object_unref (file);
-        uri++;
-    }
-    g_strfreev(uri_list);
-}
-
-void
-Picture_Selection_Changed_cb (GtkTreeSelection *selection, gpointer data)
-{
-    if (gtk_tree_selection_count_selected_rows (GTK_TREE_SELECTION (selection)) >= 1)
-    {
-        gtk_widget_set_sensitive (GTK_WIDGET (remove_image_toolitem), TRUE);
-        gtk_widget_set_sensitive (GTK_WIDGET (save_image_toolitem), TRUE);
-        gtk_widget_set_sensitive (GTK_WIDGET (image_properties_toolitem),
-                                  TRUE);
-    }
-    else
-    {
-        gtk_widget_set_sensitive (GTK_WIDGET (remove_image_toolitem), FALSE);
-        gtk_widget_set_sensitive (GTK_WIDGET (save_image_toolitem), FALSE);
-        gtk_widget_set_sensitive (GTK_WIDGET (image_properties_toolitem),
-                                  FALSE);
-    }
-}
-
-void Picture_Clear_Button_Clicked (GObject *object)
-{
-    GList *paths, *refs = NULL;
-    GList *l;
-    GtkTreeSelection *selection;
-    GtkTreeModel *model;
-    GtkTreeIter iter;
-
-    g_return_if_fail (PictureEntryView != NULL);
-
-    model = gtk_tree_view_get_model(GTK_TREE_VIEW(PictureEntryView));
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(PictureEntryView));
-    paths = gtk_tree_selection_get_selected_rows (selection, NULL);
-
-    /* List of items to delete. */
-    for (l = paths; l != NULL; l = g_list_next (l))
-    {
-        refs = g_list_prepend (refs, gtk_tree_row_reference_new (model,
-                                                                 l->data));
-    }
-
-    g_list_free_full (paths, (GDestroyNotify)gtk_tree_path_free);
-
-    for (l = refs; l != NULL; l = g_list_next (l))
-    {
-        GtkTreePath *path = gtk_tree_row_reference_get_path (l->data);
-        Picture *pic;
-
-        if (gtk_tree_model_get_iter (model, &iter, path))
-        {
-            gtk_tree_model_get(model, &iter, PICTURE_COLUMN_DATA, &pic,-1);
-            Picture_Free(pic);
-
-            gtk_list_store_remove(GTK_LIST_STORE(model), &iter);
-        }
-
-        gtk_tree_path_free(path);
-        gtk_tree_row_reference_free (l->data);
-    }
-
-    if (ETCore->ETFileDisplayed)
-    {
-        ET_Save_File_Data_From_UI (ETCore->ETFileDisplayed);
-        ET_Display_File_Data_To_UI (ETCore->ETFileDisplayed);
-    }
-
-    g_list_free(refs);
-}
-
 /*
  * et_picture_type_from_filename:
  * @filename: UTF-8 representation of a filename
@@ -177,7 +69,7 @@ void Picture_Clear_Button_Clicked (GObject *object)
  * Returns: the picture type, or %ET_PICTURE_TYPE_FRONT_COVER if the type could
  * not be estimated
  */
-static EtPictureType
+EtPictureType
 et_picture_type_from_filename (const gchar *filename_utf8)
 {
     EtPictureType picture_type = ET_PICTURE_TYPE_FRONT_COVER;
@@ -221,561 +113,9 @@ et_picture_type_from_filename (const gchar *filename_utf8)
     return picture_type;
 }
 
-/*
- * et_picture_load_file:
- * @file: the image file to load
- * @user_data: (unused) user data
- *
- * Load the image file @file and update the images tree model.
- */
-static void
-et_picture_load_file (GFile *file, gpointer user_data)
-{
-    Picture *pic;
-    const gchar *filename_utf8;
-    GFileInfo *info;
-    GError *error = NULL;
-
-    info = g_file_query_info (file, G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME,
-                              G_FILE_QUERY_INFO_NONE, NULL, &error);
-
-    if (!info)
-    {
-        Log_Print (LOG_ERROR, _("Image file not loaded: %s"), error->message);
-        g_error_free (error);
-        return;
-    }
-
-    filename_utf8 = g_file_info_get_display_name (info);
-    pic = et_picture_load_file_data (file, &error);
-
-    if (!pic)
-    {
-        GtkWidget *msgdialog;
-
-        /* Picture file not opened */
-        msgdialog = gtk_message_dialog_new (GTK_WINDOW (MainWindow),
-                                            GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-                                            GTK_MESSAGE_ERROR,
-                                            GTK_BUTTONS_CLOSE,
-                                            _("Cannot open file: '%s'"),
-                                            filename_utf8);
-        gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG(msgdialog),
-                                                  "%s", error->message);
-        gtk_window_set_title (GTK_WINDOW (msgdialog), _("Image File Error"));
-        gtk_dialog_run (GTK_DIALOG (msgdialog));
-        gtk_widget_destroy (msgdialog);
-
-        Log_Print (LOG_ERROR, _("Image file not loaded: %s"),
-                   error->message);
-        g_error_free (error);
-        return;
-    }
-    else
-    {
-        Log_Print (LOG_OK, _("Image file loaded"));
-    }
-
-    if (filename_utf8)
-    {
-        // Behaviour following the tag type...
-        switch (ETCore->ETFileDisplayed->ETFileDescription->TagType)
-        {
-            // Only one picture supported for MP4
-            case MP4_TAG:
-                pic->type = ET_PICTURE_TYPE_FRONT_COVER;
-                break;
-
-            // Other tag types
-            case ID3_TAG:
-            case OGG_TAG:
-            case OPUS_TAG:
-            case APE_TAG:
-            case FLAC_TAG:
-            case WAVPACK_TAG:
-                // By default, set the filename in the description
-                pic->description = g_strdup (filename_utf8);
-                pic->type = et_picture_type_from_filename (pic->description);
-                break;
-
-            default:
-                g_assert_not_reached ();
-        }
-
-        PictureEntry_Update (pic, TRUE);
-
-        Picture_Free (pic);
-    }
-
-    g_object_unref (info);
-}
-
-/*
- * To add a picture in the list -> call a FileSelectionWindow
- */
-void Picture_Add_Button_Clicked (GObject *object)
-{
-    GtkWidget *FileSelectionWindow;
-    GtkFileFilter *filter;
-    GtkWindow *parent_window = NULL;
-    static gchar *init_dir = NULL;
-    gint response;
-
-    g_return_if_fail (PictureEntryView != NULL);
-
-    parent_window = GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(object)));
-    if (!gtk_widget_is_toplevel(GTK_WIDGET(parent_window)))
-    {
-        g_warning("Could not get parent window\n");
-        return;
-    }
-
-
-    FileSelectionWindow = gtk_file_chooser_dialog_new(_("Add Images"),
-                                                      parent_window,
-                                                      GTK_FILE_CHOOSER_ACTION_OPEN,
-                                                      GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
-                                                      GTK_STOCK_OPEN,   GTK_RESPONSE_OK,
-                                                      NULL);
-
-    // Add files filters
-    // "All files" filter
-    filter = gtk_file_filter_new ();
-    gtk_file_filter_set_name(GTK_FILE_FILTER(filter), _("All Files"));
-    gtk_file_filter_add_pattern(GTK_FILE_FILTER(filter), "*");
-    gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(FileSelectionWindow), GTK_FILE_FILTER(filter));
-
-    // "PNG and JPEG" filter
-    filter = gtk_file_filter_new ();
-    gtk_file_filter_set_name(GTK_FILE_FILTER(filter), _("PNG and JPEG"));
-    gtk_file_filter_add_mime_type(GTK_FILE_FILTER(filter), "image/jpeg"); // Using mime type avoid problem of case sensitive with extensions
-    gtk_file_filter_add_mime_type(GTK_FILE_FILTER(filter), "image/png");
-    //gtk_file_filter_add_pattern(GTK_FILE_FILTER(filter), "*.jpeg"); // Warning: *.JPEG or *.JpEg files will not be displayed
-    //gtk_file_filter_add_pattern(GTK_FILE_FILTER(filter), "*.jpg");
-    //gtk_file_filter_add_pattern(GTK_FILE_FILTER(filter), "*.png");
-    gtk_file_chooser_add_filter(GTK_FILE_CHOOSER (FileSelectionWindow), GTK_FILE_FILTER(filter));
-    // Make this filter the default
-    gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(FileSelectionWindow), GTK_FILE_FILTER(filter));
-
-    // Behaviour following the tag type...
-    switch (ETCore->ETFileDisplayed->ETFileDescription->TagType)
-    {
-        case MP4_TAG:
-        {
-            // Only one file can be selected
-            gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(FileSelectionWindow), FALSE);
-            break;
-        }
-
-        // Other tag types
-        default:
-        {
-            gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(FileSelectionWindow), TRUE);
-            break;
-        }
-    }
-
-    gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (FileSelectionWindow),
-                                     FALSE);
-
-    // Starting directory (the same of the current file)
-    if (ETCore->ETFileDisplayed)
-    {
-        gchar *cur_filename_utf8 = ((File_Name *)((GList *)ETCore->ETFileDisplayed->FileNameCur)->data)->value_utf8;
-        init_dir = g_path_get_dirname(cur_filename_utf8);
-        gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(FileSelectionWindow),init_dir);
-    }else
-    // Starting directory (the same than the previous one)
-    if (init_dir)
-        gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(FileSelectionWindow),init_dir);
-
-    response = gtk_dialog_run(GTK_DIALOG(FileSelectionWindow));
-    if (response == GTK_RESPONSE_OK)
-    {
-        GtkTreeSelection *selection;
-        GSList *list;
-
-        selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(PictureEntryView));
-        gtk_tree_selection_unselect_all(selection);
-
-        list = gtk_file_chooser_get_files (GTK_FILE_CHOOSER (FileSelectionWindow));
-        g_slist_foreach (list, (GFunc) et_picture_load_file, NULL);
-        g_slist_free_full (list, g_object_unref);
-
-        // Save the directory selected for initialize next time
-        g_free(init_dir);
-        init_dir = gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER(FileSelectionWindow));
-    }
-
-    if (ETCore->ETFileDisplayed)
-    {
-        ET_Save_File_Data_From_UI (ETCore->ETFileDisplayed);
-        ET_Display_File_Data_To_UI (ETCore->ETFileDisplayed);
-    }
-
-    gtk_widget_destroy(FileSelectionWindow);
-}
-
-
-/*
- * Open the window to select and type the picture properties
- */
-void Picture_Properties_Button_Clicked (GObject *object)
-{
-    GtkWidget *ScrollWindowPictureTypes, *PictureTypesWindow;
-    GtkWidget *type, *label, *desc;
-    GtkCellRenderer *renderer;
-    GtkTreeViewColumn *column;
-    GtkTreeSelection *selection;
-    GtkListStore *store;
-    GtkTreeIter type_iter_to_select, iter;
-    GtkTreeModel *model;
-    GtkWindow *parent_window = NULL;
-    GList *selection_list = NULL;
-    GList *l;
-    gint selection_nbr, selection_i = 1;
-    gint response;
-    EtPictureType pic_type;
-
-    g_return_if_fail (PictureEntryView != NULL);
-
-    parent_window = GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(object)));
-    if (!gtk_widget_is_toplevel(GTK_WIDGET(parent_window)))
-    {
-        g_warning("Could not get parent window\n");
-        return;
-    }
-
-    model          = gtk_tree_view_get_model(GTK_TREE_VIEW(PictureEntryView));
-    selection      = gtk_tree_view_get_selection(GTK_TREE_VIEW(PictureEntryView));
-    selection_list = gtk_tree_selection_get_selected_rows(selection, NULL);
-    selection_nbr  = gtk_tree_selection_count_selected_rows(GTK_TREE_SELECTION(selection));
-
-    for (l = selection_list; l != NULL; l = g_list_next (l))
-    {
-        GtkTreePath *path = l->data;
-        Picture *pic = NULL;
-        GtkTreeSelection *selectiontype;
-        gchar *title;
-        GtkTreePath *rowPath;
-        gboolean valid;
-
-        // Get corresponding picture
-        valid = gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &iter, path);
-
-        if (valid)
-        {
-            gtk_tree_model_get (GTK_TREE_MODEL (model), &iter,
-                                PICTURE_COLUMN_DATA, &pic, -1);
-        }
-        else
-        {
-            g_warning ("Iter not found in picture model");
-            break;
-        }
-
-        title = g_strdup_printf (_("Image Properties %d/%d"), selection_i++,
-                                 selection_nbr);
-        PictureTypesWindow = gtk_dialog_new_with_buttons(title,
-                                                         parent_window,
-                                                         GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-                                                         GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
-                                                         GTK_STOCK_OK,     GTK_RESPONSE_OK,
-                                                         NULL);
-        g_free(title);
-
-        gtk_window_set_default_size (GTK_WINDOW (PictureTypesWindow), 400,
-                                     400);
-        gtk_dialog_set_default_response(GTK_DIALOG(PictureTypesWindow), GTK_RESPONSE_OK);
-
-        ScrollWindowPictureTypes = gtk_scrolled_window_new(NULL, NULL);
-        gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(ScrollWindowPictureTypes),
-                                       GTK_POLICY_AUTOMATIC,
-                                       GTK_POLICY_AUTOMATIC);
-        store = gtk_list_store_new(PICTURE_TYPE_COLUMN_COUNT, G_TYPE_STRING, G_TYPE_INT);
-        type = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
-        g_object_unref (store);
-        gtk_container_add(GTK_CONTAINER(ScrollWindowPictureTypes), type);
-
-        renderer = gtk_cell_renderer_text_new();
-        column = gtk_tree_view_column_new();
-        gtk_tree_view_column_pack_start(column, renderer, FALSE);
-        gtk_tree_view_column_set_title (column, _("Image Type"));
-        gtk_tree_view_column_set_attributes(column, renderer,
-                                            "text", PICTURE_TYPE_COLUMN_TEXT,
-                                            NULL);
-        gtk_tree_view_append_column(GTK_TREE_VIEW(type), column);
-        gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(PictureTypesWindow))),ScrollWindowPictureTypes,TRUE,TRUE,0);
-
-        // Behaviour following the tag type...
-        switch (ETCore->ETFileDisplayed->ETFileDescription->TagType)
-        {
-            case MP4_TAG:
-            {
-                /* Load picture type (only Front Cover!). */
-                GtkTreeIter itertype;
-
-                gtk_list_store_insert_with_values (store, &itertype, G_MAXINT,
-                                                   PICTURE_TYPE_COLUMN_TEXT,
-                                                   _(Picture_Type_String (ET_PICTURE_TYPE_FRONT_COVER)),
-                                                   PICTURE_TYPE_COLUMN_TYPE_CODE,
-                                                   ET_PICTURE_TYPE_FRONT_COVER,
-                                                   -1);
-                /* Line to select by default. */
-                type_iter_to_select = itertype;
-                break;
-            }
-
-            // Other tag types
-            default:
-            {
-                // Load pictures types
-                for (pic_type = ET_PICTURE_TYPE_OTHER; pic_type < ET_PICTURE_TYPE_UNDEFINED; pic_type++)
-                {
-                    GtkTreeIter itertype;
-
-                    gtk_list_store_insert_with_values (store, &itertype,
-                                                       G_MAXINT,
-                                                       PICTURE_TYPE_COLUMN_TEXT,
-                                                       _(Picture_Type_String (pic_type)),
-                                                       PICTURE_TYPE_COLUMN_TYPE_CODE,
-                                                       pic_type, -1);
-                    /* Line to select by default. */
-                    if (pic->type == pic_type)
-                        type_iter_to_select = itertype;
-                }
-                break;
-            }
-        }
-
-        // Select the line by default
-        selectiontype = gtk_tree_view_get_selection(GTK_TREE_VIEW(type));
-        gtk_tree_selection_select_iter(selectiontype, &type_iter_to_select);
-
-        // Set visible the current selected line
-        rowPath = gtk_tree_model_get_path(GTK_TREE_MODEL(store), &type_iter_to_select);
-        gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(type), rowPath, NULL, FALSE, 0, 0);
-        gtk_tree_path_free(rowPath);
-
-        // Description of the picture
-        label = gtk_label_new (_("Image Description:"));
-        gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(PictureTypesWindow))),label,FALSE,FALSE,4);
-
-        // Entry for the description
-        desc = gtk_entry_new();
-        gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(PictureTypesWindow))),desc,FALSE,FALSE,0);
-        if (pic->description)
-        {
-            gchar *tmp = Try_To_Validate_Utf8_String(pic->description);
-            gtk_entry_set_text(GTK_ENTRY(desc), tmp);
-            g_free(tmp);
-        }
-
-        // Behaviour following the tag type...
-        switch (ETCore->ETFileDisplayed->ETFileDescription->TagType)
-        {
-            case MP4_TAG:
-            {
-                gtk_widget_set_sensitive(GTK_WIDGET(label), FALSE);
-                gtk_widget_set_sensitive(GTK_WIDGET(desc), FALSE);
-                break;
-            }
-
-            // Other tag types
-            default:
-            {
-                break;
-            }
-        }
-
-        gtk_widget_show_all(PictureTypesWindow);
-
-        response = gtk_dialog_run(GTK_DIALOG(PictureTypesWindow));
-        if (response == GTK_RESPONSE_OK)
-        {
-            GtkTreeModel *modeltype;
-            GtkTreeIter itertype;
-
-            modeltype     = gtk_tree_view_get_model(GTK_TREE_VIEW(type));
-            selectiontype = gtk_tree_view_get_selection(GTK_TREE_VIEW(type));
-            if (gtk_tree_selection_get_selected(selectiontype, &modeltype, &itertype))
-            {
-                gchar *buffer, *pic_info;
-                gint t;
-
-                gtk_tree_model_get(modeltype, &itertype,
-                                   PICTURE_TYPE_COLUMN_TYPE_CODE, &t, -1);
-                pic->type = t;
-
-                buffer = g_strdup(gtk_entry_get_text(GTK_ENTRY(desc)));
-                g_strstrip (buffer);
-                if (pic->description)
-                    g_free(pic->description);
-
-                /* If the entry was empty, buffer will be the empty string "".
-                 * This can be safely passed to the underlying
-                 * FLAC__metadata_object_picture_set_description(). See
-                 * https://bugs.launchpad.net/ubuntu/+source/easytag/+bug/558804
-                 * and https://bugzilla.redhat.com/show_bug.cgi?id=559828 for
-                 * downstream bugs when 0 was passed instead. */
-                pic->description = buffer;
-
-                // Update value in the PictureEntryView
-                pic_info = Picture_Info(pic);
-                gtk_list_store_set(GTK_LIST_STORE(model), &iter,
-                                   PICTURE_COLUMN_TEXT, pic_info,
-                                   -1);
-                g_free(pic_info);
-            }
-        }
-        gtk_widget_destroy(PictureTypesWindow);
-    }
-
-    g_list_free_full (selection_list, (GDestroyNotify)gtk_tree_path_free);
-}
-
-
-void Picture_Save_Button_Clicked (GObject *object)
-{
-    GtkWidget *FileSelectionWindow;
-    GtkFileFilter *filter;
-    GtkWindow *parent_window = NULL;
-    static gchar *init_dir = NULL;
-
-    GtkTreeSelection *selection;
-    GList *selection_list = NULL;
-    GList *l;
-    GtkTreeModel *model;
-    gint selection_nbr, selection_i = 1;
-
-    g_return_if_fail (PictureEntryView != NULL);
-
-    parent_window = GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(object)));
-    if (!gtk_widget_is_toplevel(GTK_WIDGET(parent_window)))
-    {
-        g_warning("Could not get parent window\n");
-        return;
-    }
-
-    model          = gtk_tree_view_get_model(GTK_TREE_VIEW(PictureEntryView));
-    selection      = gtk_tree_view_get_selection(GTK_TREE_VIEW(PictureEntryView));
-    selection_list = gtk_tree_selection_get_selected_rows(selection, NULL);
-    selection_nbr  = gtk_tree_selection_count_selected_rows(GTK_TREE_SELECTION(selection));
-
-    for (l = selection_list; l != NULL; l = g_list_next (l))
-    {
-        GtkTreePath *path = l->data;
-        GtkTreeIter iter;
-        Picture *pic;
-        gchar *title;
-        gboolean valid;
-        gint response;
-
-        // Get corresponding picture
-        valid = gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &iter, path);
-
-        if (valid)
-        {
-            gtk_tree_model_get (GTK_TREE_MODEL (model), &iter,
-                                PICTURE_COLUMN_DATA, &pic, -1);
-        }
-        else
-        {
-            g_warning ("Iter not found in picture model");
-            break;
-        }
-
-        title = g_strdup_printf (_("Save Image %d/%d"), selection_i++,
-                                 selection_nbr);
-        FileSelectionWindow = gtk_file_chooser_dialog_new(title,
-                                                          parent_window,
-                                                          GTK_FILE_CHOOSER_ACTION_SAVE,
-                                                          GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
-                                                          GTK_STOCK_SAVE,   GTK_RESPONSE_OK,
-                                                          NULL);
-        g_free(title);
-
-        // Add files filters
-        // "All files" filter
-        filter = gtk_file_filter_new ();
-        gtk_file_filter_set_name(GTK_FILE_FILTER(filter), _("All Files"));
-        gtk_file_filter_add_pattern(GTK_FILE_FILTER(filter), "*");
-        gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(FileSelectionWindow), GTK_FILE_FILTER(filter));
-
-        // "PNG and JPEG" filter
-        filter = gtk_file_filter_new ();
-        gtk_file_filter_set_name(GTK_FILE_FILTER(filter), _("PNG and JPEG"));
-        gtk_file_filter_add_mime_type(GTK_FILE_FILTER(filter), "image/jpeg");
-        gtk_file_filter_add_mime_type(GTK_FILE_FILTER(filter), "image/png");
-        gtk_file_chooser_add_filter(GTK_FILE_CHOOSER (FileSelectionWindow), GTK_FILE_FILTER(filter));
-        // Make this filter the default
-        gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(FileSelectionWindow),  GTK_FILE_FILTER(filter));
-
-        // Set the default folder if defined
-        if (init_dir)
-            gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(FileSelectionWindow),init_dir);
-
-        // Suggest a filename to the user
-        if ( pic->description && strlen(pic->description) )
-        {
-            gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(FileSelectionWindow), pic->description); //filename in UTF8
-        }else
-        {
-            gchar *image_name = NULL;
-            switch (Picture_Format_From_Data(pic))
-            {
-                case PICTURE_FORMAT_JPEG :
-                    image_name = g_strdup("image_name.jpg");
-                    break;
-                case PICTURE_FORMAT_PNG :
-                    image_name = g_strdup("image_name.png");
-                    break;
-                case PICTURE_FORMAT_GIF:
-                    image_name = g_strdup ("image_name.gif");
-                    break;
-                case PICTURE_FORMAT_UNKNOWN :
-                    image_name = g_strdup("image_name.ext");
-                    break;
-            }
-            gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(FileSelectionWindow), image_name); //filename in UTF8
-            g_free(image_name);
-        }
-
-        gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (FileSelectionWindow),
-                                                        TRUE);
-        gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (FileSelectionWindow),
-                                         FALSE);
-
-        response = gtk_dialog_run(GTK_DIALOG(FileSelectionWindow));
-        if (response == GTK_RESPONSE_OK)
-        {
-            GFile *file;
-            GError *error = NULL;
-
-            // Save the directory selected for initialize next time
-            g_free(init_dir);
-            init_dir = gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER(FileSelectionWindow));
-
-            file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (FileSelectionWindow));
-
-            if (!et_picture_save_file_data (pic, file, &error))
-            {
-                 Log_Print (LOG_ERROR, _("Image file not saved: %s"),
-                            error->message);
-                 g_error_free (error);
-            }
-
-            g_object_unref (file);
-        }
-        gtk_widget_destroy(FileSelectionWindow);
-    }
-
-    g_list_free_full (selection_list, (GDestroyNotify)gtk_tree_path_free);
-}
-
-
 /* FIXME: Possibly use gnome_vfs_get_mime_type_for_buffer. */
-Picture_Format Picture_Format_From_Data (Picture *pic)
+Picture_Format
+Picture_Format_From_Data (const Picture *pic)
 {
     // JPEG : "\xff\xd8"
     if (pic->data && pic->size > 2
@@ -853,7 +193,7 @@ Picture_Format_String (Picture_Format format)
     }
 }
 
-static const gchar *
+const gchar *
 Picture_Type_String (EtPictureType type)
 {
     switch (type)
@@ -861,7 +201,7 @@ Picture_Type_String (EtPictureType type)
         case ET_PICTURE_TYPE_OTHER:
             return _("Other");
         case ET_PICTURE_TYPE_FILE_ICON:
-            return _("32x32 pixel PNG file icon");
+            return _("32×32 pixel PNG file icon");
         case ET_PICTURE_TYPE_OTHER_FILE_ICON:
             return _("Other file icon");
         case ET_PICTURE_TYPE_FRONT_COVER:
@@ -871,7 +211,7 @@ Picture_Type_String (EtPictureType type)
         case ET_PICTURE_TYPE_LEAFLET_PAGE:
             return _("Leaflet page");
         case ET_PICTURE_TYPE_MEDIA:
-            return _("Media (e.g. label side of CD)");
+            return _("Media (such as label side of CD)");
         case ET_PICTURE_TYPE_LEAD_ARTIST_LEAD_PERFORMER_SOLOIST:
             return _("Lead artist/lead performer/soloist");
         case ET_PICTURE_TYPE_ARTIST_PERFORMER:
@@ -907,8 +247,8 @@ Picture_Type_String (EtPictureType type)
     }
 }
 
-static gchar *
-Picture_Info (Picture *pic)
+gchar *
+Picture_Info (const Picture *pic)
 {
     const gchar *format, *desc, *type;
     gchar *r, *size_str;
@@ -957,141 +297,6 @@ Picture_Info (Picture *pic)
     return r;
 }
 
-void PictureEntry_Clear (void)
-{
-    GtkListStore *picture_store;
-    GtkTreeModel *model;
-    GtkTreeIter iter;
-    Picture *pic;
-
-    model = gtk_tree_view_get_model(GTK_TREE_VIEW(PictureEntryView));
-    if (gtk_tree_model_get_iter_first(model, &iter))
-    {
-        do
-        {
-            gtk_tree_model_get(model, &iter, PICTURE_COLUMN_DATA, &pic,-1);
-            Picture_Free(pic);
-        } while (gtk_tree_model_iter_next(model, &iter));
-    }
-
-    picture_store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(PictureEntryView)));
-    if (picture_store)
-        gtk_list_store_clear(picture_store);
-}
-
-void PictureEntry_Update (Picture *pic, gboolean select_it)
-{
-    GdkPixbufLoader *loader = 0;
-    GError *error = NULL;
-    
-    g_return_if_fail (pic != NULL && PictureEntryView != NULL);
-
-    if (!pic->data)
-    {
-        PictureEntry_Clear();
-        return;
-    }
-
-    loader = gdk_pixbuf_loader_new();
-    if (loader)
-    {
-        if (gdk_pixbuf_loader_write(loader, pic->data, pic->size, &error))
-        {
-            GtkTreeSelection *selection;
-            GdkPixbuf *pixbuf;
-
-            if (!gdk_pixbuf_loader_close(loader, &error))
-            {
-                Log_Print(LOG_ERROR,_("Error with 'loader_close': %s"), error->message);
-                g_error_free(error);
-            }
-
-            selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(PictureEntryView));
-
-            pixbuf = gdk_pixbuf_loader_get_pixbuf(loader);
-            if (pixbuf)
-            {
-                GtkListStore *picture_store;
-                GtkTreeIter iter1;
-                GdkPixbuf *scaled_pixbuf;
-                gint scaled_pixbuf_width;
-                gint scaled_pixbuf_height;
-                gchar *pic_info;
-
-                g_object_ref(pixbuf);
-                g_object_unref(loader);
-                
-                // Keep aspect ratio of the picture
-                pic->width  = gdk_pixbuf_get_width(pixbuf);
-                pic->height = gdk_pixbuf_get_height(pixbuf);
-                if (pic->width > pic->height)
-                {
-                    scaled_pixbuf_width  = 96;
-                    scaled_pixbuf_height = 96 * pic->height / pic->width;
-                }else
-                {
-                    scaled_pixbuf_width = 96 * pic->width / pic->height;
-                    scaled_pixbuf_height = 96;
-                }
-
-                scaled_pixbuf = gdk_pixbuf_scale_simple(pixbuf,
-                                    scaled_pixbuf_width, scaled_pixbuf_height,
-                                    //GDK_INTERP_NEAREST); // Lower quality but better speed
-                                    GDK_INTERP_BILINEAR);
-                g_object_unref(pixbuf);
-
-                picture_store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(PictureEntryView)));
-                pic_info = Picture_Info(pic);
-                gtk_list_store_insert_with_values (picture_store, &iter1,
-                                                   G_MAXINT,
-                                                   PICTURE_COLUMN_PIC,
-                                                   scaled_pixbuf,
-                                                   PICTURE_COLUMN_TEXT,
-                                                   pic_info,
-                                                   PICTURE_COLUMN_DATA,
-                                                   Picture_Copy_One (pic), -1);
-                g_free(pic_info);
-
-                if (select_it)
-                    gtk_tree_selection_select_iter(selection, &iter1);
-                g_object_unref(scaled_pixbuf);
-            }else
-            {
-                GtkWidget *msgdialog;
-                
-                g_object_unref(loader);
-                
-                Log_Print (LOG_ERROR, "%s",
-                           _("Cannot display the image because not enough data has been read to determine how to create the image buffer."));
-
-                msgdialog = gtk_message_dialog_new(GTK_WINDOW(MainWindow),
-                                                   GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-                                                   GTK_MESSAGE_ERROR,
-                                                   GTK_BUTTONS_CLOSE,
-                                                   "%s",
-                                                   _("Cannot display the image"));
-                gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (msgdialog),
-                                                          _("Not enough data has been read to determine how to create the image buffer."));
-                gtk_window_set_title (GTK_WINDOW (msgdialog),
-                                      _("Load Image File"));
-                gtk_dialog_run(GTK_DIALOG(msgdialog));
-                gtk_widget_destroy(msgdialog);
-            }
-        }else
-        {
-            Log_Print(LOG_ERROR,_("Error with 'loader_write': %s"), error->message);
-            g_error_free(error);
-        }
-    }
-
-    // Do also for next picture
-    if (pic->next)
-        PictureEntry_Update(pic->next, select_it);
-
-    return;
-}
-
-
 Picture *Picture_Allocate (void)
 {
     Picture *pic = g_malloc0(sizeof(Picture));
@@ -1150,7 +355,7 @@ void Picture_Free (Picture *pic)
  *
  * Returns: an image on success, %NULL otherwise
  */
-static Picture *
+Picture *
 et_picture_load_file_data (GFile *file, GError **error)
 {
     gsize size;
@@ -1236,7 +441,7 @@ et_picture_load_file_data (GFile *file, GError **error)
  *
  * Returns: %TRUE on success, %FALSE otherwise
  */
-static gboolean
+gboolean
 et_picture_save_file_data (const Picture *pic, GFile *file, GError **error)
 {
     GFileOutputStream *file_ostream;
@@ -1275,60 +480,3 @@ et_picture_save_file_data (const Picture *pic, GFile *file, GError **error)
     g_object_unref (file_ostream);
     return TRUE;
 }
-
-/*
- * If double clicking the PictureEntryView :
- *  - over a selected row : opens properties window
- *  - over an empty area : open the adding window
- */
-gboolean Picture_Entry_View_Button_Pressed (GtkTreeView *treeview, GdkEventButton *event, gpointer data)
-{
-    if (event->type == GDK_BUTTON_PRESS && event->button == 1)
-    {
-        if (event->window == gtk_tree_view_get_bin_window (treeview))
-        {
-            if (!gtk_tree_view_get_path_at_pos (treeview, event->x, event->y,
-                                                NULL, NULL, NULL, NULL))
-            {
-                gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (treeview));
-            }
-        }
-    }
-
-    if (event->type==GDK_2BUTTON_PRESS && event->button==1)
-    {
-        GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(PictureEntryView));
-
-        if (gtk_tree_selection_count_selected_rows (GTK_TREE_SELECTION (selection)) >= 1)
-            Picture_Properties_Button_Clicked (G_OBJECT (image_properties_toolitem));
-        else
-            Picture_Add_Button_Clicked (G_OBJECT (add_image_toolitem));
-
-        return TRUE;
-    }
-
-    return FALSE;
-}
-
-
-/*
- * Key press into picture entry
- *   - Delete = delete selected picture files
- */
-gboolean Picture_Entry_View_Key_Pressed (GtkTreeView *treeview, GdkEvent *event, gpointer data)
-{
-    GdkEventKey *kevent;
-
-    kevent = (GdkEventKey *)event;
-    if (event && event->type==GDK_KEY_PRESS)
-    {
-        switch(kevent->keyval)
-        {
-            case GDK_KEY_Delete:
-                Picture_Clear_Button_Clicked(NULL);
-                return TRUE;
-        }
-    }
-
-    return FALSE;
-}
diff --git a/src/picture.h b/src/picture.h
index caf5616..a3d8904 100644
--- a/src/picture.h
+++ b/src/picture.h
@@ -18,9 +18,8 @@
  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-
-#ifndef __PICTURE_H__
-#define __PICTURE_H__
+#ifndef ET_PICTURE_H_
+#define ET_PICTURE_H_
 
 #include "et_core.h"
 
@@ -79,54 +78,24 @@ typedef enum
     PICTURE_FORMAT_UNKNOWN
 } Picture_Format;
 
-enum // Columns for PictureEntryView
-{
-    PICTURE_COLUMN_PIC, // Column 0
-    PICTURE_COLUMN_TEXT,
-    PICTURE_COLUMN_DATA,
-    PICTURE_COLUMN_COUNT
-};
-
-enum // Columns for list in properties window
-{
-    PICTURE_TYPE_COLUMN_TEXT, // Column 0
-    PICTURE_TYPE_COLUMN_TYPE_CODE,
-    PICTURE_TYPE_COLUMN_COUNT
-};
-
-enum
-{
-    TARGET_URI_LIST
-};
-
-
 /**************
  * Prototypes *
  **************/
 
-void Tag_Area_Picture_Drag_Data (GtkWidget *widget, GdkDragContext *dc, 
-                                 gint x, gint y, GtkSelectionData *selection_data,
-                                 guint info, guint t, gpointer data);
-void Picture_Selection_Changed_cb (GtkTreeSelection *selection, gpointer data);
-
-void Picture_Add_Button_Clicked         (GObject *object);
-void Picture_Properties_Button_Clicked  (GObject *object);
-void Picture_Save_Button_Clicked        (GObject *object);
-void Picture_Clear_Button_Clicked       (GObject *object);
-
-void PictureEntry_Clear  (void);
-void PictureEntry_Update (Picture *pic, gboolean select_it);
-
 Picture       *Picture_Allocate         (void);
 Picture       *Picture_Copy_One         (const Picture *pic);
 Picture       *Picture_Copy             (const Picture *pic);
 void           Picture_Free             (Picture *pic);
-Picture_Format Picture_Format_From_Data (Picture *pic);
+Picture_Format Picture_Format_From_Data (const Picture *pic);
 const gchar   *Picture_Mime_Type_String (Picture_Format format);
+const gchar * Picture_Type_String (EtPictureType type);
+gchar * Picture_Info (const Picture *pic);
+
+Picture *et_picture_load_file_data (GFile *file, GError **error);
+gboolean et_picture_save_file_data (const Picture *pic, GFile *file, GError **error);
 
-gboolean Picture_Entry_View_Button_Pressed (GtkTreeView *treeview, GdkEventButton *event, gpointer data);
-gboolean Picture_Entry_View_Key_Pressed    (GtkTreeView *treeview, GdkEvent *event, gpointer data);
+EtPictureType et_picture_type_from_filename (const gchar *filename_utf8);
 
 G_END_DECLS
 
-#endif /* __PICTURE_H__ */
+#endif /* ET_PICTURE_H_ */
diff --git a/src/playlist_dialog.c b/src/playlist_dialog.c
new file mode 100644
index 0000000..7eb6293
--- /dev/null
+++ b/src/playlist_dialog.c
@@ -0,0 +1,801 @@
+/* EasyTAG - tag editor for audio files
+ * Copyright (C) 2013-2014  David King <amigadave at amigadave.com>
+ *
+ * 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 (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+#include "config.h"
+
+#include "playlist_dialog.h"
+
+#include <glib/gi18n.h>
+
+#include "application_window.h"
+#include "browser.h"
+#include "charset.h"
+#include "easytag.h"
+#include "log.h"
+#include "misc.h"
+#include "picture.h"
+#include "scan.h"
+#include "scan_dialog.h"
+#include "setting.h"
+
+/* TODO: Use G_DEFINE_TYPE_WITH_PRIVATE. */
+G_DEFINE_TYPE (EtPlaylistDialog, et_playlist_dialog, GTK_TYPE_DIALOG)
+
+#define et_playlist_dialog_get_instance_private(dialog) (dialog->priv)
+
+static const guint BOX_SPACING = 6;
+
+struct _EtPlaylistDialogPrivate
+{
+    GtkWidget *name_mask_entry;
+    GtkWidget *content_mask_entry;
+};
+
+/*
+ * Function to replace UNIX ForwardSlash with a DOS BackSlash
+ */
+static void
+convert_forwardslash_to_backslash (const gchar *string)
+{
+    gchar *tmp;
+
+    while ((tmp = strchr (string,'/')) != NULL)
+    {
+        *tmp = '\\';
+    }
+}
+
+/*
+ * Write a playlist
+ *  - 'playlist_name' in file system encoding (not UTF-8)
+ */
+static gboolean
+write_playlist (EtPlaylistDialog *self, GFile *file, GError **error)
+{
+    EtPlaylistDialogPrivate *priv;
+    GFile *parent;
+    GFileOutputStream *ostream;
+    GString *to_write;
+    ET_File *etfile;
+    GList *l;
+    GList *etfilelist = NULL;
+    gchar *filename;
+    gchar *basedir;
+    gchar *temp;
+    gint duration;
+    EtPlaylistContent playlist_content;
+
+    g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+    priv = et_playlist_dialog_get_instance_private (self);
+
+    ostream = g_file_replace (file, NULL, FALSE, G_FILE_CREATE_NONE, NULL, error);
+
+    if (!ostream)
+    {
+        g_assert (error == NULL || *error != NULL);
+        return FALSE;
+    }
+
+    /* 'base directory' where is located the playlist. Used also to write file with a
+     * relative path for file located in this directory and sub-directories
+     */
+    parent = g_file_get_parent (file);
+    basedir = g_file_get_path (parent);
+    g_object_unref (parent);
+
+    playlist_content = g_settings_get_enum (MainSettings, "playlist-content");
+
+    /* 1) First line of the file (if playlist content is not set to "write only
+     * list of files") */
+    if (playlist_content != ET_PLAYLIST_CONTENT_FILENAMES)
+    {
+        gsize bytes_written;
+
+        to_write = g_string_new ("#EXTM3U\r\n");
+
+        if (!g_output_stream_write_all (G_OUTPUT_STREAM (ostream),
+                                        to_write->str, to_write->len,
+                                        &bytes_written, NULL, error))
+        {
+            g_debug ("Only %" G_GSIZE_FORMAT " bytes out of %" G_GSIZE_FORMAT
+                     "bytes of data were written", bytes_written,
+                     to_write->len);
+            g_assert (error == NULL || *error != NULL);
+            g_string_free (to_write, TRUE);
+            g_object_unref (ostream);
+            return FALSE;
+        }
+        g_string_free (to_write, TRUE);
+    }
+
+    if (g_settings_get_boolean (MainSettings, "playlist-selected-only"))
+    {
+        GList *selfilelist = NULL;
+        GtkTreeSelection *selection = et_application_window_browser_get_selection (ET_APPLICATION_WINDOW (MainWindow));
+
+        selfilelist = gtk_tree_selection_get_selected_rows(selection, NULL);
+
+        for (l = selfilelist; l != NULL; l = g_list_next (l))
+        {
+            etfile = et_application_window_browser_get_et_file_from_path (ET_APPLICATION_WINDOW (MainWindow),
+                                                                          l->data);
+            etfilelist = g_list_prepend (etfilelist, etfile);
+        }
+
+        etfilelist = g_list_reverse (etfilelist);
+
+        g_list_free_full (selfilelist, (GDestroyNotify)gtk_tree_path_free);
+    }else
+    {
+        etfilelist = g_list_first(ETCore->ETFileList);
+    }
+
+    for (l = etfilelist; l != NULL; l = g_list_next (l))
+    {
+        etfile = (ET_File *)l->data;
+        filename = ((File_Name *)etfile->FileNameCur->data)->value;
+        duration = ((ET_File_Info *)etfile->ETFileInfo)->duration;
+
+        if (g_settings_get_boolean (MainSettings, "playlist-relative"))
+        {
+            // Keep only files in this directory and sub-dirs
+            if ( strncmp(filename,basedir,strlen(basedir))==0 )
+            {
+                gsize bytes_written;
+
+                /* 2) Write the header. */
+                switch (playlist_content)
+                {
+                    case ET_PLAYLIST_CONTENT_FILENAMES:
+                        /* No header written. */
+                        break;
+                    case ET_PLAYLIST_CONTENT_EXTENDED:
+                        /* Header has extended information. */
+                        temp = g_path_get_basename (filename);
+                        to_write = g_string_new ("#EXTINF:");
+                        /* Must be written in system encoding (not UTF-8). */
+                        g_string_append_printf (to_write, "%d,%s\r\n", duration,
+                                                temp);
+
+                        if (!g_output_stream_write_all (G_OUTPUT_STREAM (ostream),
+                                                        to_write->str,
+                                                        to_write->len,
+                                                        &bytes_written, NULL,
+                                                        error))
+                        {
+                            g_debug ("Only %" G_GSIZE_FORMAT " bytes out of %"
+                                     G_GSIZE_FORMAT "bytes of data were written",
+                                     bytes_written, to_write->len);
+                            g_assert (error == NULL || *error != NULL);
+                            g_string_free (to_write, TRUE);
+                            g_object_unref (ostream);
+                            return FALSE;
+                        }
+                        g_string_free (to_write, TRUE);
+                        g_free (temp);
+                        break;
+                    case ET_PLAYLIST_CONTENT_EXTENDED_MASK:
+                    {
+                        /* Header uses information generated from a mask. */
+                        gchar *mask = filename_from_display (gtk_entry_get_text (GTK_ENTRY (priv->content_mask_entry)));
+                        /* Special case: do not replace illegal characters and
+                         * do not check if there is a directory separator in
+                         * the mask. */
+                        gchar *filename_generated_utf8 = et_scan_generate_new_filename_from_mask (etfile, mask, TRUE);
+                        gchar *filename_generated = filename_from_display (filename_generated_utf8);
+
+                        to_write = g_string_new ("#EXTINF:");
+                        /* Must be written in system encoding (not UTF-8). */
+                        g_string_append_printf (to_write, "%d,%s\r\n", duration,
+                                                filename_generated);
+
+                        if (!g_output_stream_write_all (G_OUTPUT_STREAM (ostream),
+                                                        to_write->str,
+                                                        to_write->len,
+                                                        &bytes_written, NULL,
+                                                        error))
+                        {
+                            g_debug ("Only %" G_GSIZE_FORMAT " bytes out of %"
+                                     G_GSIZE_FORMAT "bytes of data were written",
+                                     bytes_written, to_write->len);
+                            g_assert (error == NULL || *error != NULL);
+                            g_string_free (to_write, TRUE);
+                            g_object_unref (ostream);
+                            return FALSE;
+                        }
+                        g_string_free (to_write, TRUE);
+                        g_free (mask);
+                        g_free (filename_generated_utf8);
+                    }
+                }
+
+                /* 3) Write the file path. */
+                if (g_settings_get_boolean (MainSettings,
+                                            "playlist-dos-separator"))
+                {
+                    gchar *filename_conv = g_strdup(filename+strlen(basedir)+1);
+                    convert_forwardslash_to_backslash (filename_conv);
+
+                    to_write = g_string_new (filename_conv);
+                    /* Must be written in system encoding (not UTF-8)*/
+                    to_write = g_string_append (to_write, "\r\n");
+
+                    if (!g_output_stream_write_all (G_OUTPUT_STREAM (ostream),
+                                                    to_write->str,
+                                                    to_write->len,
+                                                    &bytes_written, NULL,
+                                                    error))
+                    {
+                        g_debug ("Only %" G_GSIZE_FORMAT " bytes out of %"
+                                 G_GSIZE_FORMAT "bytes of data were written",
+                                 bytes_written, to_write->len);
+                        g_assert (error == NULL || *error != NULL);
+                        g_string_free (to_write, TRUE);
+                        g_object_unref (ostream);
+                        return FALSE;
+                    }
+                    g_string_free (to_write, TRUE);
+                    g_free(filename_conv);
+                }else
+                {
+                    to_write = g_string_new (filename+strlen(basedir)+1);
+                    /* Must be written in system encoding (not UTF-8)*/
+                    to_write = g_string_append (to_write, "\r\n");
+
+                    if (!g_output_stream_write_all (G_OUTPUT_STREAM (ostream),
+                                                    to_write->str,
+                                                    to_write->len,
+                                                    &bytes_written, NULL,
+                                                    error))
+                    {
+                        g_debug ("Only %" G_GSIZE_FORMAT " bytes out of %"
+                                 G_GSIZE_FORMAT "bytes of data were written",
+                                 bytes_written, to_write->len);
+                        g_assert (error == NULL || *error != NULL);
+                        g_string_free (to_write, TRUE);
+                        g_object_unref (ostream);
+                        return FALSE;
+                    }
+                    g_string_free (to_write, TRUE);
+                }
+            }
+        }
+        else /* !ETSettings:playlist-relative */
+        {
+            gsize bytes_written;
+
+            /* 2) Write the header. */
+            switch (playlist_content)
+            {
+                case ET_PLAYLIST_CONTENT_FILENAMES:
+                    /* No header written. */
+                    break;
+                case ET_PLAYLIST_CONTENT_EXTENDED:
+                    /* Header has extended information. */
+                    temp = g_path_get_basename (filename);
+                    to_write = g_string_new ("#EXTINF:");
+                    /* Must be written in system encoding (not UTF-8). */
+                    g_string_append_printf (to_write, "%d,%s\r\n", duration,
+                                            temp);
+                    g_free (temp);
+
+                    if (!g_output_stream_write_all (G_OUTPUT_STREAM (ostream),
+                                                    to_write->str, to_write->len,
+                                                    &bytes_written, NULL, error))
+                    {
+                        g_debug ("Only %" G_GSIZE_FORMAT " bytes out of %"
+                                 G_GSIZE_FORMAT" bytes of data were written",
+                                 bytes_written, to_write->len);
+                        g_assert (error == NULL || *error != NULL);
+                        g_string_free (to_write, TRUE);
+                        g_object_unref (ostream);
+                        return FALSE;
+                    }
+                    g_string_free (to_write, TRUE);
+                    break;
+                case ET_PLAYLIST_CONTENT_EXTENDED_MASK:
+                {
+                    /* Header uses information generated from a mask. */
+                    gchar *mask = filename_from_display (gtk_entry_get_text (GTK_ENTRY (priv->content_mask_entry)));
+                    /* Special case: do not replace illegal characters and
+                     * do not check if there is a directory separator in
+                     * the mask. */
+                    gchar *filename_generated_utf8 = et_scan_generate_new_filename_from_mask (etfile, mask, TRUE);
+                    gchar *filename_generated = filename_from_display (filename_generated_utf8);
+
+                    to_write = g_string_new ("#EXTINF:");
+                    /* Must be written in system encoding (not UTF-8). */
+                    g_string_append_printf (to_write, "%d,%s\r\n", duration,
+                                            filename_generated);
+                    g_free (filename_generated);
+
+                    if (!g_output_stream_write_all (G_OUTPUT_STREAM (ostream),
+                                                    to_write->str, to_write->len,
+                                                    &bytes_written, NULL, error))
+                    {
+                        g_debug ("Only %" G_GSIZE_FORMAT " bytes out of %"
+                                 G_GSIZE_FORMAT" bytes of data were written",
+                                 bytes_written, to_write->len);
+                        g_assert (error == NULL || *error != NULL);
+                        g_string_free (to_write, TRUE);
+                        g_object_unref (ostream);
+                        return FALSE;
+                    }
+                    g_string_free (to_write, TRUE);
+                    g_free (mask);
+                    g_free (filename_generated_utf8);
+                }
+                break;
+            }
+
+            /* 3) Write the file path. */
+            if (g_settings_get_boolean (MainSettings,
+                                        "playlist-dos-separator"))
+            {
+                gchar *filename_conv = g_strdup(filename);
+                convert_forwardslash_to_backslash(filename_conv);
+
+                to_write = g_string_new (filename_conv);
+                /* Must be written in system encoding (not UTF-8)*/
+                to_write = g_string_append (to_write, "\r\n");
+
+                if (!g_output_stream_write_all (G_OUTPUT_STREAM (ostream),
+                                                to_write->str, to_write->len,
+                                                &bytes_written, NULL, error))
+                {
+                    g_debug ("Only %" G_GSIZE_FORMAT " bytes out of %"
+                             G_GSIZE_FORMAT" bytes of data were written",
+                             bytes_written, to_write->len);
+                    g_assert (error == NULL || *error != NULL);
+                    g_string_free (to_write, TRUE);
+                    g_object_unref (ostream);
+                    return FALSE;
+                }
+                g_string_free (to_write, TRUE);
+                g_free(filename_conv);
+            }else
+            {
+                to_write = g_string_new (filename);
+                /* Must be written in system encoding (not UTF-8)*/
+                to_write = g_string_append (to_write, "\r\n");
+
+                if (!g_output_stream_write_all (G_OUTPUT_STREAM (ostream),
+                                                to_write->str, to_write->len,
+                                                &bytes_written, NULL, error))
+                {
+                    g_debug ("Only %" G_GSIZE_FORMAT " bytes out of %"
+                             G_GSIZE_FORMAT" bytes of data were written",
+                             bytes_written, to_write->len);
+                    g_assert (error == NULL || *error != NULL);
+                    g_string_free (to_write, TRUE);
+                    g_object_unref (ostream);
+                    return FALSE;
+                }
+                g_string_free (to_write, TRUE);
+            }
+        }
+    }
+
+    if (g_settings_get_boolean (MainSettings, "playlist-selected-only"))
+    {
+        g_list_free (etfilelist);
+    }
+
+    g_assert (error == NULL || *error == NULL);
+    g_object_unref (ostream);
+    g_free(basedir);
+    return TRUE;
+}
+
+static void
+write_button_clicked (EtPlaylistDialog *self)
+{
+    EtPlaylistDialogPrivate *priv;
+    gchar *playlist_name = NULL;
+    gchar *playlist_path_utf8;      // Path
+    gchar *playlist_basename_utf8;  // Filename
+    gchar *playlist_name_utf8;      // Path + filename
+    gchar *temp;
+    GtkWidget *msgdialog;
+
+    priv = et_playlist_dialog_get_instance_private (self);
+
+    /* Check if playlist name was filled. */
+    if (g_settings_get_boolean (MainSettings, "playlist-use-mask")
+        && g_utf8_strlen (gtk_entry_get_text (GTK_ENTRY(priv->name_mask_entry)), -1) <=0)
+    {
+        /* TODO: Can this happen? */
+        g_settings_set_boolean (MainSettings, "playlist-use-mask", FALSE);
+    }
+
+    // Path of the playlist file (may be truncated later if PLAYLIST_CREATE_IN_PARENT_DIR is TRUE)
+    playlist_path_utf8 = filename_to_display (et_application_window_get_current_path (ET_APPLICATION_WINDOW (MainWindow)));
+
+    /* Build the playlist filename. */
+    if (g_settings_get_boolean (MainSettings, "playlist-use-mask"))
+    {
+        gchar *playlist_name;
+        EtConvertSpaces convert_mode;
+
+        if (!ETCore->ETFileList)
+            return;
+
+        playlist_name = g_settings_get_string (MainSettings,
+                                               "playlist-filename-mask");
+
+        /* Generate filename from tag of the current selected file (FIXME). */
+        temp = filename_from_display (playlist_name);
+        g_free (playlist_name);
+        playlist_basename_utf8 = et_scan_generate_new_filename_from_mask (ETCore->ETFileDisplayed,
+                                                                          temp,
+                                                                          FALSE);
+        g_free (temp);
+
+        /* Replace Characters (with scanner). */
+        convert_mode = g_settings_get_flags (MainSettings,
+                                             "rename-convert-spaces");
+
+        switch (convert_mode)
+        {
+            case ET_CONVERT_SPACES_SPACES:
+                Scan_Convert_Underscore_Into_Space (playlist_basename_utf8);
+                Scan_Convert_P20_Into_Space (playlist_basename_utf8);
+                break;
+            case ET_CONVERT_SPACES_UNDERSCORES:
+                Scan_Convert_Space_Into_Underscore (playlist_basename_utf8);
+                break;
+            case ET_CONVERT_SPACES_REMOVE:
+                Scan_Remove_Spaces (playlist_basename_utf8);
+                break;
+            default:
+                g_assert_not_reached ();
+        }
+    }else // PLAYLIST_USE_DIR_NAME
+    {
+
+        if ( strcmp(playlist_path_utf8,G_DIR_SEPARATOR_S)==0 )
+        {
+            playlist_basename_utf8 = g_strdup("playlist");
+        }else
+        {
+            gchar *tmp_string = g_strdup(playlist_path_utf8);
+            // Remove last '/'
+            if (tmp_string[strlen(tmp_string)-1]==G_DIR_SEPARATOR)
+                tmp_string[strlen(tmp_string)-1] = '\0';
+            // Get directory name
+            temp = g_path_get_basename(tmp_string);
+            playlist_basename_utf8 = g_strdup(temp);
+            g_free(tmp_string);
+            g_free(temp);
+        }
+
+    }
+
+    /* Must be placed after "Build the playlist filename", as we can truncate
+     * the path! */
+    if (g_settings_get_boolean (MainSettings, "playlist-parent-directory"))
+    {
+        if ( (strcmp(playlist_path_utf8,G_DIR_SEPARATOR_S) != 0) )
+        {
+            gchar *tmp;
+            // Remove last '/'
+            if (playlist_path_utf8[strlen(playlist_path_utf8)-1]==G_DIR_SEPARATOR)
+                playlist_path_utf8[strlen(playlist_path_utf8)-1] = '\0';
+            // Get parent directory
+            if ( (tmp=strrchr(playlist_path_utf8,G_DIR_SEPARATOR)) != NULL )
+                *(tmp + 1) = '\0';
+        }
+    }
+
+    // Generate path + filename of playlist
+    if (playlist_path_utf8[strlen(playlist_path_utf8)-1]==G_DIR_SEPARATOR)
+        playlist_name_utf8 = g_strconcat(playlist_path_utf8,playlist_basename_utf8,".m3u",NULL);
+    else
+        playlist_name_utf8 = g_strconcat(playlist_path_utf8,G_DIR_SEPARATOR_S,playlist_basename_utf8,".m3u",NULL);
+
+    g_free(playlist_path_utf8);
+    g_free(playlist_basename_utf8);
+
+    playlist_name = filename_from_display(playlist_name_utf8);
+
+    {
+        GFile *file = g_file_new_for_path (playlist_name);
+        GError *error = NULL;
+
+        if (!write_playlist (self, file, &error))
+        {
+            // Writing fails...
+            msgdialog = gtk_message_dialog_new (GTK_WINDOW (self),
+                                               GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+                                               GTK_MESSAGE_ERROR,
+                                               GTK_BUTTONS_CLOSE,
+                                               _("Cannot write playlist file ‘%s’"),
+                                               playlist_name_utf8);
+            gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (msgdialog),
+                                                      "%s", error->message);
+            gtk_window_set_title(GTK_WINDOW(msgdialog),_("Playlist File Error"));
+
+            gtk_dialog_run(GTK_DIALOG(msgdialog));
+            gtk_widget_destroy(msgdialog);
+            g_error_free (error);
+        }else
+        {
+            gchar *msg;
+            msg = g_strdup_printf (_("Wrote playlist file ‘%s’"),
+                                   playlist_name_utf8);
+            et_application_window_status_bar_message (ET_APPLICATION_WINDOW (MainWindow),
+                                                      msg, TRUE);
+            g_free (msg);
+        }
+        g_object_unref (file);
+    }
+    g_free(playlist_name_utf8);
+    g_free(playlist_name);
+}
+
+/*
+ * on_response:
+ * @dialog: the dialog which emitted the response signal
+ * @response_id: the response ID
+ * @user_data: user data set when the signal was connected
+ *
+ * Signal handler for the write playlist dialog.
+ */
+static void
+on_response (GtkDialog *dialog, gint response_id, gpointer user_data)
+{
+    switch (response_id)
+    {
+        case GTK_RESPONSE_OK:
+            write_button_clicked (ET_PLAYLIST_DIALOG (dialog));
+            break;
+        case GTK_RESPONSE_CANCEL:
+            gtk_widget_hide (GTK_WIDGET (dialog));
+            break;
+        case GTK_RESPONSE_DELETE_EVENT:
+            break;
+        default:
+            g_assert_not_reached ();
+    }
+}
+
+/*
+ * entry_check_content_mask:
+ * @entry: the entry for which to check the mask
+ * @user_data: user data set when the signal was connected
+ *
+ * Display an icon in the entry if the current text contains an invalid mask.
+ */
+static void
+entry_check_content_mask (GtkEntry *entry, gpointer user_data)
+{
+    gchar *tmp  = NULL;
+    gchar *mask = NULL;
+
+    g_return_if_fail (entry != NULL);
+
+    mask = g_strdup (gtk_entry_get_text (entry));
+    if (!mask || strlen(mask)<1)
+        goto Bad_Mask;
+
+    while (mask)
+    {
+        if ( (tmp=strrchr(mask,'%'))==NULL )
+        {
+            /* There is no more code. */
+            /* No code in mask is accepted. */
+            goto Good_Mask;
+        }
+        if (strlen(tmp)>1 && (tmp[1]=='t' || tmp[1]=='a' || tmp[1]=='b' || tmp[1]=='y' ||
+                              tmp[1]=='g' || tmp[1]=='n' || tmp[1]=='l' || tmp[1]=='c' || tmp[1]=='i'))
+        {
+            /* The code is valid. */
+            /* No separator is accepted. */
+            *(mask+strlen(mask)-strlen(tmp)) = '\0';
+        }else
+        {
+            goto Bad_Mask;
+        }
+    }
+
+    Bad_Mask:
+        g_free(mask);
+        gtk_entry_set_icon_from_icon_name (entry, GTK_ENTRY_ICON_SECONDARY,
+                                           "emblem-unreadable");
+        gtk_entry_set_icon_tooltip_text (entry, GTK_ENTRY_ICON_SECONDARY,
+                                         _("Invalid scanner mask"));
+        return;
+
+    Good_Mask:
+        g_free(mask);
+        gtk_entry_set_icon_from_icon_name (entry, GTK_ENTRY_ICON_SECONDARY,
+                                           NULL);
+        return;
+}
+
+static void
+create_playlist_dialog (EtPlaylistDialog *self)
+{
+    EtPlaylistDialogPrivate *priv;
+    GtkDialog *dialog;
+    GtkWidget *content_area;
+    GtkBuilder *builder;
+    GError *error = NULL;
+    GtkWidget *grid;
+    GtkWidget *playlist_use_mask_name;
+    GtkWidget *playlist_only_selected_files;
+    GtkWidget *playlist_relative_path;
+    GtkWidget *playlist_create_in_parent_dir;
+    GtkWidget *playlist_use_dos_separator;
+    GtkWidget *playlist_content_filenames;
+    GtkWidget *playlist_content_extended;
+    GtkWidget *playlist_content_mask;
+
+    priv = et_playlist_dialog_get_instance_private (self);
+    dialog = GTK_DIALOG (self);
+
+    gtk_window_set_title (GTK_WINDOW (self), _("Generate Playlist"));
+    gtk_window_set_destroy_with_parent (GTK_WINDOW (self), TRUE);
+    gtk_dialog_add_buttons (dialog, _("_Cancel"), GTK_RESPONSE_CANCEL,
+                            _("_Save"), GTK_RESPONSE_OK, NULL);
+    gtk_dialog_set_default_response (dialog, GTK_RESPONSE_OK);
+    g_signal_connect (dialog, "response", G_CALLBACK (on_response), NULL);
+    g_signal_connect (dialog, "delete-event",
+                      G_CALLBACK (gtk_widget_hide_on_delete), NULL);
+
+    content_area = gtk_dialog_get_content_area (dialog);
+    gtk_box_set_spacing (GTK_BOX (content_area), BOX_SPACING);
+    gtk_container_set_border_width (GTK_CONTAINER (content_area), BOX_SPACING);
+    builder = gtk_builder_new ();
+    gtk_builder_add_from_resource (builder,
+                                   "/org/gnome/EasyTAG/playlist_dialog.ui",
+                                   &error);
+
+    if (error != NULL)
+    {
+        g_error ("Unable to get scanner page from resource: %s",
+                 error->message);
+    }
+
+    grid = GTK_WIDGET (gtk_builder_get_object (builder, "playlist_grid"));
+    gtk_container_add (GTK_CONTAINER (content_area), grid);
+
+    /* Playlist name */
+    playlist_use_mask_name = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                 "name_mask_radio"));
+    priv->name_mask_entry = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                "name_mask_entry"));
+    g_settings_bind (MainSettings, "playlist-filename-mask",
+                     priv->name_mask_entry, "text", G_SETTINGS_BIND_DEFAULT);
+    g_settings_bind (MainSettings, "playlist-use-mask", playlist_use_mask_name,
+                     "active", G_SETTINGS_BIND_DEFAULT);
+
+    /* Mask status icon. Signal connection to check if mask is correct in the
+     * mask entry. */
+    g_signal_connect (priv->name_mask_entry, "changed",
+                      G_CALLBACK (entry_check_content_mask), NULL);
+
+    /* Playlist options */
+    playlist_only_selected_files = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                       "selected_files_check"));
+    g_settings_bind (MainSettings, "playlist-selected-only",
+                     playlist_only_selected_files, "active",
+                     G_SETTINGS_BIND_DEFAULT);
+
+    playlist_relative_path = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                 "path_relative_radio"));
+    g_settings_bind (MainSettings, "playlist-relative", playlist_relative_path,
+                     "active", G_SETTINGS_BIND_DEFAULT);
+
+    /* Create playlist in parent directory. */
+    playlist_create_in_parent_dir = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                        "playlist_parent_check"));
+    g_settings_bind (MainSettings, "playlist-parent-directory",
+                     playlist_create_in_parent_dir, "active",
+                     G_SETTINGS_BIND_DEFAULT);
+
+    /* DOS Separator. */
+    playlist_use_dos_separator = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                     "playlist_dos_check"));
+    g_settings_bind (MainSettings, "playlist-dos-separator",
+                     playlist_use_dos_separator, "active",
+                     G_SETTINGS_BIND_DEFAULT);
+
+    /* Playlist content */
+    playlist_content_filenames = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                     "content_filenames_radio"));
+    playlist_content_extended = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                    "content_extended_radio"));
+    playlist_content_mask = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                "content_extended_mask_radio"));
+    priv->content_mask_entry = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                   "content_mask_entry"));
+    g_settings_bind (MainSettings, "playlist-default-mask",
+                     priv->content_mask_entry, "text",
+                     G_SETTINGS_BIND_DEFAULT);
+
+    /* Mask status icon. Signal connection to check if mask is correct in the
+     * mask entry. */
+    g_signal_connect (priv->content_mask_entry, "changed",
+                      G_CALLBACK (entry_check_content_mask), NULL);
+
+    g_settings_bind_with_mapping (MainSettings, "playlist-content",
+                                  playlist_content_filenames, "active",
+                                  G_SETTINGS_BIND_DEFAULT,
+                                  et_settings_enum_radio_get,
+                                  et_settings_enum_radio_set,
+                                  playlist_content_filenames, NULL);
+    g_settings_bind_with_mapping (MainSettings, "playlist-content",
+                                  playlist_content_extended, "active",
+                                  G_SETTINGS_BIND_DEFAULT,
+                                  et_settings_enum_radio_get,
+                                  et_settings_enum_radio_set,
+                                  playlist_content_extended, NULL);
+    g_settings_bind_with_mapping (MainSettings, "playlist-content",
+                                  playlist_content_mask, "active",
+                                  G_SETTINGS_BIND_DEFAULT,
+                                  et_settings_enum_radio_get,
+                                  et_settings_enum_radio_set,
+                                  playlist_content_mask, NULL);
+
+    g_object_unref (builder);
+
+    /* To initialize the mask status icon and visibility. */
+    g_signal_emit_by_name (priv->name_mask_entry, "changed");
+    g_signal_emit_by_name (priv->content_mask_entry, "changed");
+}
+
+static void
+et_playlist_dialog_finalize (GObject *object)
+{
+    G_OBJECT_CLASS (et_playlist_dialog_parent_class)->finalize (object);
+}
+
+static void
+et_playlist_dialog_init (EtPlaylistDialog *self)
+{
+    self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, ET_TYPE_PLAYLIST_DIALOG,
+                                              EtPlaylistDialogPrivate);
+
+    create_playlist_dialog (self);
+}
+
+static void
+et_playlist_dialog_class_init (EtPlaylistDialogClass *klass)
+{
+    G_OBJECT_CLASS (klass)->finalize = et_playlist_dialog_finalize;
+
+    g_type_class_add_private (klass, sizeof (EtPlaylistDialogPrivate));
+}
+
+/*
+ * et_playlist_dialog_new:
+ *
+ * Create a new EtPlaylistDialog instance.
+ *
+ * Returns: a new #EtPlaylistDialog
+ */
+EtPlaylistDialog *
+et_playlist_dialog_new (GtkWindow *parent)
+{
+    g_return_val_if_fail (GTK_WINDOW (parent), NULL);
+
+    return g_object_new (ET_TYPE_PLAYLIST_DIALOG, "transient-for", parent,
+                         NULL);
+}
diff --git a/src/application.h b/src/playlist_dialog.h
similarity index 53%
copy from src/application.h
copy to src/playlist_dialog.h
index c3a1858..a6d1b9d 100644
--- a/src/application.h
+++ b/src/playlist_dialog.h
@@ -16,39 +16,38 @@
  * Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 
-#ifndef ET_APPLICATION_H_
-#define ET_APPLICATION_H_
+#ifndef ET_PLAYLIST_DIALOG_H_
+#define ET_PLAYLIST_DIALOG_H_
 
-#include <gio/gio.h>
 #include <gtk/gtk.h>
 
 G_BEGIN_DECLS
 
-#define ET_TYPE_APPLICATION (et_application_get_type ())
-#define ET_APPLICATION(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), ET_TYPE_APPLICATION, EtApplication))
+#include "et_core.h"
 
-typedef struct _EtApplication EtApplication;
-typedef struct _EtApplicationClass EtApplicationClass;
-typedef struct _EtApplicationPrivate EtApplicationPrivate;
+#define ET_TYPE_PLAYLIST_DIALOG (et_playlist_dialog_get_type ())
+#define ET_PLAYLIST_DIALOG(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), ET_TYPE_PLAYLIST_DIALOG, EtPlaylistDialog))
 
-struct _EtApplication
+typedef struct _EtPlaylistDialog EtPlaylistDialog;
+typedef struct _EtPlaylistDialogClass EtPlaylistDialogClass;
+typedef struct _EtPlaylistDialogPrivate EtPlaylistDialogPrivate;
+
+struct _EtPlaylistDialog
 {
     /*< private >*/
-    GApplication parent_instance;
-    EtApplicationPrivate *priv;
+    GtkDialog parent_instance;
+    EtPlaylistDialogPrivate *priv;
 };
 
-struct _EtApplicationClass
+struct _EtPlaylistDialogClass
 {
     /*< private >*/
-    GApplicationClass parent_class;
+    GtkDialogClass parent_class;
 };
 
-GType et_application_get_type (void);
-EtApplication *et_application_new (void);
-GtkWindow *et_application_get_window (EtApplication *application);
-void et_application_set_window (EtApplication *application, GtkWindow *window);
+GType et_playlist_dialog_get_type (void);
+EtPlaylistDialog *et_playlist_dialog_new (GtkWindow *window);
 
 G_END_DECLS
 
-#endif /* !ET_APPLICATION_H_ */
+#endif /* !ET_PLAYLIST_DIALOG_H_ */
diff --git a/src/preferences_dialog.c b/src/preferences_dialog.c
new file mode 100644
index 0000000..c6fa43b
--- /dev/null
+++ b/src/preferences_dialog.c
@@ -0,0 +1,1307 @@
+/* EasyTAG - Tag editor for audio files
+ * Copyright (C) 2013-2014  David King <amigadave at amigadave.com>
+ * Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
+ *
+ * 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 (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+
+#include "preferences_dialog.h"
+
+#include <errno.h>
+#include <stdlib.h>
+#include <gdk/gdkkeysyms.h>
+#include <glib/gi18n.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include "application_window.h"
+#include "setting.h"
+#include "misc.h"
+#include "scan_dialog.h"
+#include "easytag.h"
+#include "enums.h"
+#include "browser.h"
+#include "cddb_dialog.h"
+#include "charset.h"
+#include "win32/win32dep.h"
+
+/* TODO: Use G_DEFINE_TYPE_WITH_PRIVATE. */
+G_DEFINE_TYPE (EtPreferencesDialog, et_preferences_dialog, GTK_TYPE_DIALOG)
+
+#define et_preferences_dialog_get_instance_private(dialog) (dialog->priv)
+
+static const guint BOX_SPACING = 6;
+
+struct _EtPreferencesDialogPrivate
+{
+    GtkListStore *default_path_model;
+    GtkListStore *file_player_model;
+
+    GtkWidget *id3_v1_encoding_grid;
+
+    GtkWidget *LabelAdditionalId3v2IconvOptions;
+    GtkWidget *LabelId3v2Charset;
+    GtkWidget *LabelId3v2Version;
+    GtkWidget *FileWritingId3v2VersionCombo;
+    GtkWidget *FileWritingId3v2UseUnicodeCharacterSet;
+    GtkWidget *FileWritingId3v2UseNoUnicodeCharacterSet;
+
+    GtkWidget *FileWritingId3v2UnicodeCharacterSetCombo;
+    GtkWidget *FileWritingId3v2NoUnicodeCharacterSetCombo;
+    GtkWidget *FileWritingId3v1CharacterSetCombo;
+    GtkWidget *FileReadingId3v1v2CharacterSetCombo;
+
+    GtkWidget *ConvertOldId3v2TagVersion;
+    GtkWidget *FileWritingId3v2UseCrc32;
+    GtkWidget *FileWritingId3v2UseCompression;
+    GtkWidget *FileWritingId3v2TextOnlyGenre;
+    GtkWidget *FileWritingId3v2IconvOptionsNo;
+    GtkWidget *FileWritingId3v2IconvOptionsTranslit;
+    GtkWidget *FileWritingId3v2IconvOptionsIgnore;
+    GtkWidget *FileWritingId3v1IconvOptionsNo;
+    GtkWidget *FileWritingId3v1IconvOptionsTranslit;
+    GtkWidget *FileWritingId3v1IconvOptionsIgnore;
+
+    GtkWidget *options_notebook;
+    gint options_notebook_scanner;
+};
+
+/**************
+ * Prototypes *
+ **************/
+/* Options window */
+static void notify_id3_settings_active (GObject *object, GParamSpec *pspec, EtPreferencesDialog *self);
+
+static void et_preferences_on_response (GtkDialog *dialog, gint response_id,
+                                        gpointer user_data);
+
+
+/*************
+ * Functions *
+ *************/
+static void
+et_prefs_current_folder_changed (EtPreferencesDialog *self,
+                                 GtkFileChooser *default_path_button)
+{
+    gchar *path;
+
+    /* The path that is currently selected, not that which is currently being
+     * displayed. */
+    path = gtk_file_chooser_get_filename (default_path_button);
+
+    if (path)
+    {
+        g_settings_set_value (MainSettings, "default-path",
+                              g_variant_new_bytestring (path));
+        g_free (path);
+    }
+}
+
+static void
+on_default_path_changed (GSettings *settings,
+                         const gchar *key,
+                         GtkFileChooserButton *default_path_button)
+{
+    GVariant *default_path;
+    const gchar *path;
+
+    default_path = g_settings_get_value (settings, key);
+    path = g_variant_get_bytestring (default_path);
+
+    gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (default_path_button),
+                                         path);
+    g_variant_unref (default_path);
+}
+
+static gboolean
+et_preferences_id3v2_version_get (GValue *value,
+                                  GVariant *variant,
+                                  gpointer user_data)
+{
+    gboolean id3v24;
+
+    id3v24 = g_variant_get_boolean (variant);
+
+    g_value_set_int (value, id3v24 ? 1 : 0);
+
+    return TRUE;
+}
+
+static GVariant *
+et_preferences_id3v2_version_set (const GValue *value,
+                                  const GVariantType *variant_type,
+                                  gpointer user_data)
+{
+    GVariant *id3v24;
+    gint active_row;
+
+    active_row = g_value_get_int (value);
+
+    id3v24 = g_variant_new_boolean (active_row == 1);
+
+    return id3v24;
+}
+
+static gboolean
+et_preferences_id3v2_unicode_charset_get (GValue *value,
+                                          GVariant *variant,
+                                          gpointer user_data)
+{
+    const gchar *charset;
+
+    charset = g_variant_get_string (variant, NULL);
+
+    if (strcmp (charset, "UTF-8") == 0)
+    {
+        g_value_set_int (value, 0);
+    }
+    else if (strcmp (charset, "UTF-16") == 0)
+    {
+        g_value_set_int (value, 1);
+    }
+    else
+    {
+        return FALSE;
+    }
+
+    return TRUE;
+}
+
+static GVariant *
+et_preferences_id3v2_unicode_charset_set (const GValue *value,
+                                          const GVariantType *variant_type,
+                                          gpointer user_data)
+{
+    gint active_row;
+
+    active_row = g_value_get_int (value);
+
+    switch (active_row)
+    {
+        case 0:
+            return g_variant_new_string ("UTF-8");
+            break;
+        case 1:
+            return g_variant_new_string ("UTF-16");
+            break;
+        default:
+            g_assert_not_reached ();
+    }
+}
+
+/*
+ * The window for options
+ */
+static void
+create_preferences_dialog (EtPreferencesDialog *self)
+{
+    EtPreferencesDialogPrivate *priv;
+    GtkWidget *vbox;
+    GtkWidget *LoadOnStartup;
+    GtkWidget *BrowseSubdir;
+    GtkWidget *OpenSelectedBrowserNode;
+    GtkWidget *BrowseHiddendir;
+    GtkWidget *ShowHeaderInfos;
+    GtkWidget *ChangedFilesDisplayedToBold;
+    GtkWidget *SortingFileCaseSensitive;
+    GtkWidget *ShowLogView;
+    GtkWidget *LogMaxLinesSpinButton;
+    GtkWidget *ReplaceIllegalCharactersInFilename;
+    GtkWidget *PreserveModificationTime;
+    GtkWidget *UpdateParentDirectoryModificationTime;
+    GtkWidget *FilenameCharacterSetOther;
+    GtkWidget *FilenameCharacterSetApproximate;
+    GtkWidget *FilenameCharacterSetDiscard;
+    GtkWidget *DateAutoCompletion;
+    GtkWidget *widget;
+    GtkWidget *NumberTrackFormated;
+    GtkWidget *NumberTrackFormatedSpinButton;
+    GtkWidget *pad_disc_number;
+    GtkWidget *pad_disc_number_spinbutton;
+    GtkWidget *SetFocusToSameTagField;
+    GtkWidget *VorbisSplitFieldTitle;
+    GtkWidget *VorbisSplitFieldArtist;
+    GtkWidget *VorbisSplitFieldAlbum;
+    GtkWidget *VorbisSplitFieldGenre;
+    GtkWidget *VorbisSplitFieldComment;
+    GtkWidget *VorbisSplitFieldComposer;
+    GtkWidget *VorbisSplitFieldOrigArtist;
+    GtkWidget *StripTagWhenEmptyFields;
+    GtkWidget *FileWritingId3v2WriteTag;
+    GtkWidget *FileWritingId3v1WriteTag;
+    GtkWidget *UseNonStandardId3ReadingCharacterSet;
+    GtkWidget *FTSConvertUnderscoreAndP20IntoSpace;
+    GtkWidget *FTSConvertSpaceIntoUnderscore;
+    GtkWidget *FTSConvertSpaceNoChange;
+    GtkWidget *RFSConvertUnderscoreAndP20IntoSpace;
+    GtkWidget *RFSConvertSpaceIntoUnderscore;
+    GtkWidget *RFSRemoveSpaces;
+    GtkWidget *PFSDontUpperSomeWords;
+    GtkWidget *OpenScannerWindowOnStartup;
+    GtkWidget *OverwriteTagField;
+    GtkWidget *SetDefaultComment;
+    GtkWidget *DefaultComment;
+    GtkWidget *Crc32Comment;
+    GtkWidget *CddbServerNameAutomaticSearch;
+    GtkWidget *CddbServerPortAutomaticSearch;
+    GtkWidget *CddbServerCgiPathAutomaticSearch;
+    GtkWidget *CddbServerNameAutomaticSearch2;
+    GtkWidget *CddbServerPortAutomaticSearch2;
+    GtkWidget *CddbServerCgiPathAutomaticSearch2;
+    GtkWidget *CddbServerNameManualSearch;
+    GtkWidget *CddbServerPortManualSearch;
+    GtkWidget *CddbServerCgiPathManualSearch;
+    GtkWidget *CddbUseProxy;
+    GtkWidget *CddbProxyName;
+    GtkWidget *CddbProxyPort;
+    GtkWidget *CddbProxyUserName;
+    GtkWidget *CddbProxyUserPassword;
+    GtkWidget *CddbFollowFile;
+    GtkWidget *CddbUseDLM;
+    GtkWidget *ConfirmBeforeExit;
+    GtkWidget *ConfirmWriteTag;
+    GtkWidget *ConfirmRenameFile;
+    GtkWidget *ConfirmDeleteFile;
+    GtkWidget *ConfirmWritePlayList;
+    GtkWidget *ConfirmWhenUnsavedFiles;
+    GtkWidget *FilenameExtensionNoChange;
+    GtkWidget *FilenameExtensionLowerCase;
+    GtkWidget *FilenameExtensionUpperCase;
+    GtkWidget *default_path_button;
+    GtkBuilder *builder;
+    GError *error = NULL;
+
+    priv = et_preferences_dialog_get_instance_private (self);
+
+    /* The window */
+    gtk_window_set_title (GTK_WINDOW (self), _("Preferences"));
+    gtk_window_set_destroy_with_parent (GTK_WINDOW (self), TRUE);
+    gtk_dialog_add_buttons (GTK_DIALOG (self), _("_Close"), GTK_RESPONSE_CLOSE,
+                            NULL);
+    gtk_dialog_set_default_response (GTK_DIALOG (self), GTK_RESPONSE_CLOSE);
+    g_signal_connect (self, "response",
+                      G_CALLBACK (et_preferences_on_response), NULL);
+    g_signal_connect (self, "delete-event",
+                      G_CALLBACK (gtk_widget_hide_on_delete), NULL);
+
+    gtk_container_set_border_width (GTK_CONTAINER (self), BOX_SPACING);
+
+     /* Options */
+     /* The vbox */
+    vbox = gtk_dialog_get_content_area (GTK_DIALOG (self));
+    gtk_box_set_spacing (GTK_BOX (vbox), BOX_SPACING);
+
+     /* Options NoteBook */
+    builder = gtk_builder_new ();
+    gtk_builder_add_from_resource (builder,
+                                   "/org/gnome/EasyTAG/preferences_dialog.ui",
+                                   &error);
+
+    if (error != NULL)
+    {
+        g_error ("Unable to get scanner page from resource: %s",
+                 error->message);
+    }
+
+    priv->options_notebook = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                 "preferences_notebook"));
+    gtk_box_pack_start (GTK_BOX (vbox), priv->options_notebook, TRUE, TRUE, 0);
+
+    /*
+     * Browser
+     */
+    default_path_button = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                              "default_path_button"));
+    on_default_path_changed (MainSettings, "default-path",
+                             GTK_FILE_CHOOSER_BUTTON (default_path_button));
+    /* Connecting to current-folder-changed does not work if the user selects
+     * a directory from the combo box list provided by the file chooser button.
+     */
+    g_signal_connect_swapped (default_path_button, "file-set",
+                              G_CALLBACK (et_prefs_current_folder_changed),
+                              self);
+    g_signal_connect (MainSettings, "changed::default-path",
+                      G_CALLBACK (on_default_path_changed),
+                      default_path_button);
+
+    /* Load directory on startup */
+    LoadOnStartup = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                        "browser_startup_check"));
+    g_settings_bind (MainSettings, "load-on-startup", LoadOnStartup, "active",
+                     G_SETTINGS_BIND_DEFAULT);
+
+    /* Browse subdirectories */
+    BrowseSubdir = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                       "browser_subdirs_check"));
+    g_settings_bind (MainSettings, "browse-subdir", BrowseSubdir, "active",
+                     G_SETTINGS_BIND_DEFAULT);
+
+    /* Open the node to show subdirectories */
+    OpenSelectedBrowserNode = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                  "browser_expand_subdirs_check"));
+    g_settings_bind (MainSettings, "browse-expand-children",
+                     OpenSelectedBrowserNode, "active",
+                     G_SETTINGS_BIND_DEFAULT);
+
+    /* Browse hidden directories */
+    BrowseHiddendir = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                          "browser_hidden_check"));
+    g_settings_bind (MainSettings, "browse-show-hidden", BrowseHiddendir,
+                     "active", G_SETTINGS_BIND_DEFAULT);
+
+    SortingFileCaseSensitive = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                   "browser_case_check"));
+    g_settings_bind (MainSettings, "sort-case-sensitive",
+                     SortingFileCaseSensitive, "active",
+                     G_SETTINGS_BIND_DEFAULT);
+
+    /* Show / hide log view. */
+    ShowLogView = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                      "log_show_check"));
+    g_settings_bind (MainSettings, "log-show", ShowLogView, "active",
+                     G_SETTINGS_BIND_DEFAULT);
+   
+    /* Max number of lines. */
+    LogMaxLinesSpinButton = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                "log_lines_button"));
+    g_settings_bind (MainSettings, "log-lines", LogMaxLinesSpinButton,
+                     "value", G_SETTINGS_BIND_DEFAULT);
+
+    /* Show header informantion. */
+    ShowHeaderInfos = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                          "header_show_check"));
+    g_settings_bind (MainSettings, "file-show-header", ShowHeaderInfos,
+                     "active", G_SETTINGS_BIND_DEFAULT);
+
+    /* Display color mode for changed files in list. */
+    /* Set "new" Gtk+-2.0ish black/bold style for changed items. */
+    ChangedFilesDisplayedToBold = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                      "list_bold_radio"));
+    g_settings_bind (MainSettings, "file-changed-bold",
+                     ChangedFilesDisplayedToBold, "active",
+                     G_SETTINGS_BIND_DEFAULT);
+    g_signal_connect_swapped (ChangedFilesDisplayedToBold, "notify::active",
+                              G_CALLBACK (et_application_window_browser_refresh_list),
+                              MainWindow);
+
+    /*
+     * File Settings
+     */
+    /* File (name) Options */
+    ReplaceIllegalCharactersInFilename = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                             "file_name_replace_check"));
+    g_settings_bind (MainSettings, "rename-replace-illegal-chars",
+                     ReplaceIllegalCharactersInFilename, "active",
+                     G_SETTINGS_BIND_DEFAULT);
+
+    /* Extension case (lower/upper?) */
+    FilenameExtensionLowerCase = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                     "name_lower_radio"));
+    FilenameExtensionUpperCase = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                     "name_upper_radio"));
+    FilenameExtensionNoChange = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                    "name_no_change_radio"));
+
+    g_settings_bind_with_mapping (MainSettings, "rename-extension-mode",
+                                  FilenameExtensionLowerCase, "active",
+                                  G_SETTINGS_BIND_DEFAULT,
+                                  et_settings_enum_radio_get,
+                                  et_settings_enum_radio_set,
+                                  FilenameExtensionLowerCase, NULL);
+    g_settings_bind_with_mapping (MainSettings, "rename-extension-mode",
+                                  FilenameExtensionUpperCase, "active",
+                                  G_SETTINGS_BIND_DEFAULT,
+                                  et_settings_enum_radio_get,
+                                  et_settings_enum_radio_set,
+                                  FilenameExtensionUpperCase, NULL);
+    g_settings_bind_with_mapping (MainSettings, "rename-extension-mode",
+                                  FilenameExtensionNoChange, "active",
+                                  G_SETTINGS_BIND_DEFAULT,
+                                  et_settings_enum_radio_get,
+                                  et_settings_enum_radio_set,
+                                  FilenameExtensionNoChange, NULL);
+
+    /* Preserve modification time */
+    PreserveModificationTime = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                   "file_preserve_check"));
+    g_settings_bind (MainSettings, "file-preserve-modification-time",
+                     PreserveModificationTime, "active",
+                     G_SETTINGS_BIND_DEFAULT);
+
+    /* Change directory modification time */
+    UpdateParentDirectoryModificationTime = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                                "file_parent_check"));
+    g_settings_bind (MainSettings, "file-update-parent-modification-time",
+                     UpdateParentDirectoryModificationTime, "active",
+                     G_SETTINGS_BIND_DEFAULT);
+
+    /* Character Set for Filename */
+    FilenameCharacterSetOther = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                    "file_encoding_try_alternative_radio"));
+    FilenameCharacterSetApproximate = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                          "file_encoding_transliterate_radio"));
+    FilenameCharacterSetDiscard = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                      "file_encoding_ignore_radio"));
+
+    g_settings_bind_with_mapping (MainSettings, "rename-encoding",
+                                  FilenameCharacterSetOther, "active",
+                                  G_SETTINGS_BIND_DEFAULT,
+                                  et_settings_enum_radio_get,
+                                  et_settings_enum_radio_set,
+                                  FilenameCharacterSetOther, NULL);
+    g_settings_bind_with_mapping (MainSettings, "rename-encoding",
+                                  FilenameCharacterSetApproximate,
+                                  "active", G_SETTINGS_BIND_DEFAULT,
+                                  et_settings_enum_radio_get,
+                                  et_settings_enum_radio_set,
+                                  FilenameCharacterSetApproximate, NULL);
+    g_settings_bind_with_mapping (MainSettings, "rename-encoding",
+                                  FilenameCharacterSetDiscard, "active",
+                                  G_SETTINGS_BIND_DEFAULT,
+                                  et_settings_enum_radio_get,
+                                  et_settings_enum_radio_set,
+                                  FilenameCharacterSetDiscard, NULL);
+
+    /*
+     * Tag Settings
+     */
+    /* Tag Options */
+    DateAutoCompletion = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                             "tags_auto_date_check"));
+    g_settings_bind (MainSettings, "tag-date-autocomplete", DateAutoCompletion,
+                     "active", G_SETTINGS_BIND_DEFAULT);
+
+    widget = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                 "tags_auto_image_type_check"));
+    g_settings_bind (MainSettings, "tag-image-type-automatic", widget,
+                     "active", G_SETTINGS_BIND_DEFAULT);
+
+    /* Track formatting. */
+    NumberTrackFormated = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                              "tags_track_check"));
+    g_settings_bind (MainSettings, "tag-number-padded", NumberTrackFormated,
+                     "active", G_SETTINGS_BIND_DEFAULT);
+
+    NumberTrackFormatedSpinButton = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                        "tags_track_button"));
+    g_settings_bind (MainSettings, "tag-number-length",
+                     NumberTrackFormatedSpinButton, "value",
+                     G_SETTINGS_BIND_DEFAULT);
+    g_settings_bind (MainSettings, "tag-number-padded",
+                     NumberTrackFormatedSpinButton, "sensitive",
+                     G_SETTINGS_BIND_GET);
+
+    /* Disc formatting. */
+    pad_disc_number = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                          "tags_disc_check"));
+    g_settings_bind (MainSettings, "tag-number-padded", pad_disc_number,
+                     "active", G_SETTINGS_BIND_DEFAULT);
+
+    pad_disc_number_spinbutton = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                     "tags_disc_button"));
+    g_settings_bind (MainSettings, "tag-number-length",
+                     pad_disc_number_spinbutton, "value",
+                     G_SETTINGS_BIND_DEFAULT);
+    g_settings_bind (MainSettings, "tag-number-padded",
+                     pad_disc_number_spinbutton, "sensitive",
+                     G_SETTINGS_BIND_GET);
+    g_signal_emit_by_name (G_OBJECT (pad_disc_number), "toggled");
+
+    /* Tag field focus */
+    SetFocusToSameTagField = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                 "tags_preserve_focus_check"));
+    g_settings_bind (MainSettings, "tag-preserve-focus", SetFocusToSameTagField,
+                     "active", G_SETTINGS_BIND_DEFAULT);
+
+    /* Tag Splitting */
+    VorbisSplitFieldTitle = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                "split_title_check"));
+    VorbisSplitFieldArtist = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                 "split_artist_check"));
+    VorbisSplitFieldAlbum = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                "split_album_check"));
+    VorbisSplitFieldGenre = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                "split_genre_check"));
+    VorbisSplitFieldComment = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                  "split_comment_check"));
+    VorbisSplitFieldComposer = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                   "split_composer_check"));
+    VorbisSplitFieldOrigArtist = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                     "split_orig_artist_check"));
+
+    g_settings_bind (MainSettings, "ogg-split-title", VorbisSplitFieldTitle,
+                     "active", G_SETTINGS_BIND_DEFAULT);
+    g_settings_bind (MainSettings, "ogg-split-artist", VorbisSplitFieldArtist,
+                     "active", G_SETTINGS_BIND_DEFAULT);
+    g_settings_bind (MainSettings, "ogg-split-album", VorbisSplitFieldAlbum,
+                     "active", G_SETTINGS_BIND_DEFAULT);
+    g_settings_bind (MainSettings, "ogg-split-genre", VorbisSplitFieldGenre,
+                     "active", G_SETTINGS_BIND_DEFAULT);
+    g_settings_bind (MainSettings, "ogg-split-comment", VorbisSplitFieldComment,
+                     "active", G_SETTINGS_BIND_DEFAULT);
+    g_settings_bind (MainSettings, "ogg-split-composer",
+                     VorbisSplitFieldComposer, "active",
+                     G_SETTINGS_BIND_DEFAULT);
+    g_settings_bind (MainSettings, "ogg-split-original-artist",
+                     VorbisSplitFieldOrigArtist, "active",
+                     G_SETTINGS_BIND_DEFAULT);
+
+    /*
+     * ID3 Tag Settings
+     */
+    /* Strip tag when fields (managed by EasyTAG) are empty */
+    StripTagWhenEmptyFields = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                  "id3_strip_check"));
+    g_settings_bind (MainSettings, "id3-strip-empty", StripTagWhenEmptyFields,
+                     "active", G_SETTINGS_BIND_DEFAULT);
+
+    /* Convert old ID3v2 tag version */
+    priv->ConvertOldId3v2TagVersion = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                          "id3_v2_convert_check"));
+    g_settings_bind (MainSettings, "id3v2-convert-old",
+                     priv->ConvertOldId3v2TagVersion, "active",
+                     G_SETTINGS_BIND_DEFAULT);
+
+    /* Use CRC32 */
+    priv->FileWritingId3v2UseCrc32 = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                         "id3_v2_crc32_check"));
+    g_settings_bind (MainSettings, "id3v2-crc32", priv->FileWritingId3v2UseCrc32,
+                     "active", G_SETTINGS_BIND_DEFAULT);
+
+    /* Use Compression */
+    priv->FileWritingId3v2UseCompression = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                               "id3_v2_compression_check"));
+    g_settings_bind (MainSettings, "id3v2-compression",
+                     priv->FileWritingId3v2UseCompression, "active",
+                     G_SETTINGS_BIND_DEFAULT);
+	
+    /* Write Genre in text */
+    priv->FileWritingId3v2TextOnlyGenre = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                              "id3_v2_genre_check"));
+    g_settings_bind (MainSettings, "id3v2-text-only-genre",
+                     priv->FileWritingId3v2TextOnlyGenre, "active",
+                     G_SETTINGS_BIND_DEFAULT);
+
+    /* Write ID3v2 tag */
+    FileWritingId3v2WriteTag = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                   "id3_v2_check"));
+    g_settings_bind (MainSettings, "id3v2-enabled", FileWritingId3v2WriteTag,
+                     "active", G_SETTINGS_BIND_DEFAULT);
+    g_signal_connect (FileWritingId3v2WriteTag, "notify::active",
+                      G_CALLBACK (notify_id3_settings_active), self);
+
+#ifdef ENABLE_ID3LIB
+    /* ID3v2 tag version */
+    priv->LabelId3v2Version = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                  "id3_v2_version_label"));
+    priv->FileWritingId3v2VersionCombo = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                             "id3_v2_version_combo"));
+    g_settings_bind_with_mapping (MainSettings, "id3v2-version-4",
+                                  priv->FileWritingId3v2VersionCombo, "active",
+                                  G_SETTINGS_BIND_DEFAULT,
+                                  et_preferences_id3v2_version_get,
+                                  et_preferences_id3v2_version_set, self,
+                                  NULL);
+    g_signal_connect (MainSettings, "changed::id3v2-version-4",
+                      G_CALLBACK (notify_id3_settings_active), self);
+#endif
+
+    /* Charset */
+    priv->LabelId3v2Charset = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                  "id3_v2_encoding_label"));
+    /* Unicode. */
+    priv->FileWritingId3v2UseUnicodeCharacterSet = GTK_WIDGET (gtk_builder_get_object (builder, "id3_v2_unicode_radio"));
+    g_settings_bind (MainSettings, "id3v2-enable-unicode",
+                     priv->FileWritingId3v2UseUnicodeCharacterSet, "active",
+                     G_SETTINGS_BIND_DEFAULT);
+
+    priv->FileWritingId3v2UnicodeCharacterSetCombo = GTK_WIDGET (gtk_builder_get_object (builder, "id3_v2_unicode_encoding_combo"));
+    g_settings_bind_with_mapping (MainSettings, "id3v2-unicode-charset",
+                                  priv->FileWritingId3v2UnicodeCharacterSetCombo,
+                                  "active", G_SETTINGS_BIND_DEFAULT,
+                                  et_preferences_id3v2_unicode_charset_get,
+                                  et_preferences_id3v2_unicode_charset_set,
+                                  NULL, NULL);
+    g_signal_connect (priv->FileWritingId3v2UseUnicodeCharacterSet,
+                      "notify::active",
+                      G_CALLBACK (notify_id3_settings_active), self);
+
+    /* Non-Unicode. */
+    priv->FileWritingId3v2UseNoUnicodeCharacterSet = GTK_WIDGET (gtk_builder_get_object (builder, "id3_v2_other_radio"));
+    priv->FileWritingId3v2NoUnicodeCharacterSetCombo = GTK_WIDGET (gtk_builder_get_object (builder, "id3_v2_override_encoding_combo"));
+    Charset_Populate_Combobox (GTK_COMBO_BOX (priv->FileWritingId3v2NoUnicodeCharacterSetCombo), 
+                               g_settings_get_enum (MainSettings,
+                                                    "id3v2-no-unicode-charset"));
+    g_settings_bind_with_mapping (MainSettings, "id3v2-no-unicode-charset",
+                                  priv->FileWritingId3v2NoUnicodeCharacterSetCombo,
+                                  "active", G_SETTINGS_BIND_DEFAULT,
+                                  et_settings_enum_get, et_settings_enum_set,
+                                  GSIZE_TO_POINTER (ET_TYPE_CHARSET), NULL);
+    g_signal_connect (priv->FileWritingId3v2UseNoUnicodeCharacterSet,
+                      "notify::active",
+                      G_CALLBACK (notify_id3_settings_active), self);
+
+    /* ID3v2 Additional iconv() options. */
+    priv->LabelAdditionalId3v2IconvOptions = GTK_WIDGET (gtk_builder_get_object (builder, "id3_v2_iconv_label"));
+    priv->FileWritingId3v2IconvOptionsNo = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                               "id3_v2_none_radio"));
+    priv->FileWritingId3v2IconvOptionsTranslit = GTK_WIDGET (gtk_builder_get_object (builder, "id3_v2_transliterate_radio")),
+    priv->FileWritingId3v2IconvOptionsIgnore = GTK_WIDGET (gtk_builder_get_object (builder, "id3_v2_ignore_radio"));
+
+    g_settings_bind_with_mapping (MainSettings, "id3v2-encoding-option",
+                                  priv->FileWritingId3v2IconvOptionsNo, "active",
+                                  G_SETTINGS_BIND_DEFAULT,
+                                  et_settings_enum_radio_get,
+                                  et_settings_enum_radio_set,
+                                  priv->FileWritingId3v2IconvOptionsNo, NULL);
+    g_settings_bind_with_mapping (MainSettings, "id3v2-encoding-option",
+                                  priv->FileWritingId3v2IconvOptionsTranslit,
+                                  "active", G_SETTINGS_BIND_DEFAULT,
+                                  et_settings_enum_radio_get,
+                                  et_settings_enum_radio_set,
+                                  priv->FileWritingId3v2IconvOptionsTranslit, NULL);
+    g_settings_bind_with_mapping (MainSettings, "id3v2-encoding-option",
+                                  priv->FileWritingId3v2IconvOptionsIgnore, "active",
+                                  G_SETTINGS_BIND_DEFAULT,
+                                  et_settings_enum_radio_get,
+                                  et_settings_enum_radio_set,
+                                  priv->FileWritingId3v2IconvOptionsIgnore, NULL);
+
+    /* Write ID3v1 tag */
+    FileWritingId3v1WriteTag = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                   "id3_v1_check"));
+    g_settings_bind (MainSettings, "id3v1-enabled", FileWritingId3v1WriteTag,
+                     "active", G_SETTINGS_BIND_DEFAULT);
+    g_signal_connect (FileWritingId3v1WriteTag, "notify::active",
+                      G_CALLBACK (notify_id3_settings_active), self);
+
+    priv->id3_v1_encoding_grid = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                     "id3_v1_encoding_grid"));
+    /* Id3V1 writing character set */
+    priv->FileWritingId3v1CharacterSetCombo = GTK_WIDGET (gtk_builder_get_object (builder, "id3_v1_encoding_combo"));
+    Charset_Populate_Combobox (GTK_COMBO_BOX (priv->FileWritingId3v1CharacterSetCombo),
+                               g_settings_get_enum (MainSettings,
+                                                    "id3v1-charset"));
+    g_settings_bind_with_mapping (MainSettings, "id3v1-charset",
+                                  priv->FileWritingId3v1CharacterSetCombo,
+                                  "active", G_SETTINGS_BIND_DEFAULT,
+                                  et_settings_enum_get, et_settings_enum_set,
+                                  GSIZE_TO_POINTER (ET_TYPE_CHARSET), NULL);
+
+    /* ID3V1 Additional iconv() options*/
+    priv->FileWritingId3v1IconvOptionsNo = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                               "id3_v1_none_radio"));
+    priv->FileWritingId3v1IconvOptionsTranslit = GTK_WIDGET (gtk_builder_get_object (builder, "id3_v1_transliterate_radio"));
+    priv->FileWritingId3v1IconvOptionsIgnore = GTK_WIDGET (gtk_builder_get_object (builder, "id3_v1_ignore_radio"));
+
+    g_settings_bind_with_mapping (MainSettings, "id3v1-encoding-option",
+                                  priv->FileWritingId3v1IconvOptionsNo, "active",
+                                  G_SETTINGS_BIND_DEFAULT,
+                                  et_settings_enum_radio_get,
+                                  et_settings_enum_radio_set,
+                                  priv->FileWritingId3v1IconvOptionsNo, NULL);
+    g_settings_bind_with_mapping (MainSettings, "id3v1-encoding-option",
+                                  priv->FileWritingId3v1IconvOptionsTranslit,
+                                  "active", G_SETTINGS_BIND_DEFAULT,
+                                  et_settings_enum_radio_get,
+                                  et_settings_enum_radio_set,
+                                  priv->FileWritingId3v1IconvOptionsTranslit, NULL);
+    g_settings_bind_with_mapping (MainSettings, "id3v1-encoding-option",
+                                  priv->FileWritingId3v1IconvOptionsIgnore, "active",
+                                  G_SETTINGS_BIND_DEFAULT,
+                                  et_settings_enum_radio_get,
+                                  et_settings_enum_radio_set,
+                                  priv->FileWritingId3v1IconvOptionsIgnore, NULL);
+
+    /* Character Set for reading tag */
+    /* "File Reading Charset" Check Button + Combo. */
+    UseNonStandardId3ReadingCharacterSet = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                               "id3_read_encoding_check"));
+    g_settings_bind (MainSettings, "id3-override-read-encoding",
+                     UseNonStandardId3ReadingCharacterSet, "active",
+                     G_SETTINGS_BIND_DEFAULT);
+
+    priv->FileReadingId3v1v2CharacterSetCombo = GTK_WIDGET (gtk_builder_get_object (builder, "id3_read_encoding_combo"));
+    Charset_Populate_Combobox (GTK_COMBO_BOX (priv->FileReadingId3v1v2CharacterSetCombo),
+                               g_settings_get_enum (MainSettings,
+                                                    "id3v1v2-charset"));
+    g_settings_bind_with_mapping (MainSettings, "id3v1v2-charset",
+                                  priv->FileReadingId3v1v2CharacterSetCombo,
+                                  "active", G_SETTINGS_BIND_DEFAULT,
+                                  et_settings_enum_get, et_settings_enum_set,
+                                  GSIZE_TO_POINTER (ET_TYPE_CHARSET), NULL);
+    g_settings_bind (MainSettings, "id3-override-read-encoding",
+                     priv->FileReadingId3v1v2CharacterSetCombo, "sensitive",
+                     G_SETTINGS_BIND_GET);
+    notify_id3_settings_active (NULL, NULL, self);
+
+    /*
+     * Scanner
+     */
+    /* Save the number of the page. Asked in Scanner window */
+    vbox = GTK_WIDGET (gtk_builder_get_object (builder, "scanner_grid"));
+    priv->options_notebook_scanner = gtk_notebook_page_num (GTK_NOTEBOOK (priv->options_notebook),
+                                                            vbox);
+
+    /* Character conversion for the 'Fill Tag' scanner (=> FTS...) */
+    FTSConvertUnderscoreAndP20IntoSpace = GTK_WIDGET (gtk_builder_get_object (builder, "fts_underscore_p20_radio"));
+    FTSConvertSpaceIntoUnderscore = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                        "fts_spaces_radio"));
+    FTSConvertSpaceNoChange = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                  "fts_none_radio"));
+    g_settings_bind_with_mapping (MainSettings, "fill-convert-spaces",
+                                  FTSConvertUnderscoreAndP20IntoSpace,
+                                  "active", G_SETTINGS_BIND_DEFAULT,
+                                  et_settings_enum_radio_get,
+                                  et_settings_enum_radio_set,
+                                  FTSConvertUnderscoreAndP20IntoSpace, NULL);
+    g_settings_bind_with_mapping (MainSettings, "fill-convert-spaces",
+                                  FTSConvertSpaceIntoUnderscore, "active",
+                                  G_SETTINGS_BIND_DEFAULT,
+                                  et_settings_enum_radio_get,
+                                  et_settings_enum_radio_set,
+                                  FTSConvertSpaceIntoUnderscore, NULL);
+    g_settings_bind_with_mapping (MainSettings, "fill-convert-spaces",
+                                  FTSConvertSpaceNoChange, "active",
+                                  G_SETTINGS_BIND_DEFAULT,
+                                  et_settings_enum_radio_get,
+                                  et_settings_enum_radio_set,
+                                  FTSConvertSpaceNoChange, NULL);
+    /* TODO: No change tooltip. */
+
+    /* Character conversion for the 'Rename File' scanner (=> RFS...) */
+    RFSConvertUnderscoreAndP20IntoSpace = GTK_WIDGET (gtk_builder_get_object (builder, "rfs_underscore_p20_radio"));
+    RFSConvertSpaceIntoUnderscore = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                        "rfs_spaces_radio"));
+    RFSRemoveSpaces = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                          "rfs_remove_radio"));
+    g_settings_bind_with_mapping (MainSettings, "rename-convert-spaces",
+                                  RFSConvertUnderscoreAndP20IntoSpace,
+                                  "active", G_SETTINGS_BIND_DEFAULT,
+                                  et_settings_enum_radio_get,
+                                  et_settings_enum_radio_set,
+                                  RFSConvertUnderscoreAndP20IntoSpace, NULL);
+    g_settings_bind_with_mapping (MainSettings, "rename-convert-spaces",
+                                  RFSConvertSpaceIntoUnderscore, "active",
+                                  G_SETTINGS_BIND_DEFAULT,
+                                  et_settings_enum_radio_get,
+                                  et_settings_enum_radio_set,
+                                  RFSConvertSpaceIntoUnderscore, NULL);
+    g_settings_bind_with_mapping (MainSettings, "rename-convert-spaces",
+                                  RFSRemoveSpaces, "active",
+                                  G_SETTINGS_BIND_DEFAULT,
+                                  et_settings_enum_radio_get,
+                                  et_settings_enum_radio_set, RFSRemoveSpaces,
+                                  NULL);
+
+    /* Character conversion for the 'Process Fields' scanner (=> PFS...) */
+    PFSDontUpperSomeWords = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                "pfs_uppercase_prep_check"));
+    g_settings_bind (MainSettings, "process-uppercase-prepositions",
+                     PFSDontUpperSomeWords, "active",
+                     G_SETTINGS_BIND_DEFAULT);
+
+    /* Other options */
+    OverwriteTagField = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                            "overwrite_fields_check"));
+    g_settings_bind (MainSettings, "fill-overwrite-tag-fields",
+                     OverwriteTagField, "active", G_SETTINGS_BIND_DEFAULT);
+
+    /* Set a default comment text or CRC-32 checksum. */
+    SetDefaultComment = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                            "default_comment_check"));
+    DefaultComment = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                         "default_comment_entry"));
+    g_settings_bind (MainSettings, "fill-set-default-comment",
+                     SetDefaultComment, "active", G_SETTINGS_BIND_DEFAULT);
+    g_settings_bind (MainSettings, "fill-set-default-comment", DefaultComment,
+                     "sensitive", G_SETTINGS_BIND_GET);
+    g_settings_bind (MainSettings, "fill-default-comment", DefaultComment,
+                     "text", G_SETTINGS_BIND_DEFAULT);
+
+    /* CRC32 comment. */
+    Crc32Comment = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                       "crc32_default_check"));
+    g_settings_bind (MainSettings, "fill-crc32-comment", Crc32Comment,
+                     "active", G_SETTINGS_BIND_DEFAULT);
+
+    /*
+     * CDDB
+     */
+    /* 1st automatic search server. */
+    CddbServerNameAutomaticSearch = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                        "cddb_automatic_host1_combo"));
+    g_settings_bind (MainSettings, "cddb-automatic-search-hostname",
+                     gtk_bin_get_child (GTK_BIN (CddbServerNameAutomaticSearch)),
+                     "text", G_SETTINGS_BIND_DEFAULT);
+
+    CddbServerPortAutomaticSearch = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                        "cddb_automatic_port1_button"));
+    g_settings_bind (MainSettings, "cddb-automatic-search-port",
+                     CddbServerPortAutomaticSearch, "value",
+                     G_SETTINGS_BIND_DEFAULT);
+
+    CddbServerCgiPathAutomaticSearch = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                           "cddb_automatic_path1_entry"));
+    g_settings_bind (MainSettings, "cddb-automatic-search-path",
+                     CddbServerCgiPathAutomaticSearch, "text",
+                     G_SETTINGS_BIND_DEFAULT);
+
+    /* 2nd automatic search server. */
+    CddbServerNameAutomaticSearch2 = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                         "cddb_automatic_host2_combo"));
+    g_settings_bind (MainSettings, "cddb-automatic-search-hostname2",
+                     gtk_bin_get_child (GTK_BIN (CddbServerNameAutomaticSearch2)),
+                     "text", G_SETTINGS_BIND_DEFAULT);
+
+    CddbServerPortAutomaticSearch2 = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                         "cddb_automatic_port2_button"));
+    g_settings_bind (MainSettings, "cddb-automatic-search-port2",
+                     CddbServerPortAutomaticSearch2, "value",
+                     G_SETTINGS_BIND_DEFAULT);
+
+    CddbServerCgiPathAutomaticSearch2 = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                            "cddb_automatic_path2_entry"));
+    g_settings_bind (MainSettings, "cddb-automatic-search-path2",
+                     CddbServerCgiPathAutomaticSearch2, "text",
+                     G_SETTINGS_BIND_DEFAULT);
+
+    /* CDDB Server Settings (Manual Search). */
+    CddbServerNameManualSearch = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                     "cddb_manual_host_combo"));
+    g_settings_bind (MainSettings, "cddb-manual-search-hostname",
+                     gtk_bin_get_child (GTK_BIN (CddbServerNameManualSearch)),
+                     "text", G_SETTINGS_BIND_DEFAULT);
+
+    CddbServerPortManualSearch = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                     "cddb_manual_port_button"));
+    g_settings_bind (MainSettings, "cddb-manual-search-port",
+                     CddbServerPortManualSearch, "value",
+                     G_SETTINGS_BIND_DEFAULT);
+
+    CddbServerCgiPathManualSearch = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                        "cddb_manual_path_entry"));
+    g_settings_bind (MainSettings, "cddb-manual-search-path",
+                     CddbServerCgiPathManualSearch, "text",
+                     G_SETTINGS_BIND_DEFAULT);
+
+    /* CDDB Proxy Settings. */
+    CddbUseProxy = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                       "cddb_proxy_check"));
+    g_settings_bind (MainSettings, "cddb-proxy-enabled", CddbUseProxy, "active",
+                     G_SETTINGS_BIND_DEFAULT);
+
+    CddbProxyName = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                        "cddb_host_entry"));
+    g_settings_bind (MainSettings, "cddb-proxy-hostname",
+                     CddbProxyName, "text", G_SETTINGS_BIND_DEFAULT);
+    g_settings_bind (MainSettings, "cddb-proxy-enabled", CddbProxyName,
+                     "sensitive", G_SETTINGS_BIND_GET);
+    CddbProxyPort = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                        "cddb_port_button"));
+    g_settings_bind (MainSettings, "cddb-proxy-port", CddbProxyPort, "value",
+                     G_SETTINGS_BIND_DEFAULT);
+    g_settings_bind (MainSettings, "cddb-proxy-enabled", CddbProxyPort,
+                     "sensitive", G_SETTINGS_BIND_GET);
+    CddbProxyUserName = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                            "cddb_user_entry"));
+    g_settings_bind (MainSettings, "cddb-proxy-username", CddbProxyUserName,
+                     "text", G_SETTINGS_BIND_DEFAULT);
+    g_settings_bind (MainSettings, "cddb-proxy-enabled", CddbProxyUserName,
+                     "sensitive", G_SETTINGS_BIND_GET);
+    CddbProxyUserPassword = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                "cddb_password_entry"));
+    g_settings_bind (MainSettings, "cddb-proxy-password", CddbProxyUserPassword,
+                     "text", G_SETTINGS_BIND_DEFAULT);
+    g_settings_bind (MainSettings, "cddb-proxy-enabled", CddbProxyUserPassword,
+                     "sensitive", G_SETTINGS_BIND_GET);
+
+    /* Track Name list (CDDB results). */
+    CddbFollowFile = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                         "cddb_follow_check"));
+    g_settings_bind (MainSettings, "cddb-follow-file", CddbFollowFile,
+                     "active", G_SETTINGS_BIND_DEFAULT);
+
+    /* Check box to use DLM. */
+    CddbUseDLM = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                     "cddb_dlm_check"));
+    g_settings_bind (MainSettings, "cddb-dlm-enabled", CddbUseDLM, "active",
+                     G_SETTINGS_BIND_DEFAULT);
+
+
+    /*
+     * Confirmation
+     */
+    ConfirmBeforeExit = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                            "confirm_quit_check"));
+    g_settings_bind (MainSettings, "confirm-quit", ConfirmBeforeExit, "active",
+                     G_SETTINGS_BIND_DEFAULT);
+
+    ConfirmWriteTag = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                          "confirm_write_check"));
+    g_settings_bind (MainSettings, "confirm-write-tags", ConfirmWriteTag,
+                     "active", G_SETTINGS_BIND_DEFAULT);
+
+    ConfirmRenameFile = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                            "confirm_rename_check"));
+    g_settings_bind (MainSettings, "confirm-rename-file", ConfirmRenameFile,
+                     "active", G_SETTINGS_BIND_DEFAULT);
+
+    ConfirmDeleteFile = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                            "confirm_delete_check"));
+    g_settings_bind (MainSettings, "confirm-delete-file", ConfirmDeleteFile,
+                     "active", G_SETTINGS_BIND_DEFAULT);
+
+    ConfirmWritePlayList = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                               "confirm_write_playlist_check"));
+    g_settings_bind (MainSettings, "confirm-write-playlist",
+                     ConfirmWritePlayList, "active", G_SETTINGS_BIND_DEFAULT);
+
+    ConfirmWhenUnsavedFiles = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                  "confirm_unsaved_files_check"));
+    g_settings_bind (MainSettings, "confirm-when-unsaved-files",
+                     ConfirmWhenUnsavedFiles, "active",
+                     G_SETTINGS_BIND_DEFAULT);
+
+    /* Properties of the scanner window */
+    OpenScannerWindowOnStartup = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                     "scanner_dialog_startup_check"));
+    g_settings_bind (MainSettings, "scan-startup", OpenScannerWindowOnStartup,
+                     "active", G_SETTINGS_BIND_DEFAULT);
+
+    g_object_unref (builder);
+
+    /* Load the default page */
+    g_settings_bind (MainSettings, "preferences-page", priv->options_notebook,
+                     "page", G_SETTINGS_BIND_DEFAULT);
+}
+
+static void
+notify_id3_settings_active (GObject *object,
+                            GParamSpec *pspec,
+                            EtPreferencesDialog *self)
+{
+    EtPreferencesDialogPrivate *priv;
+    gboolean active;
+
+    priv = et_preferences_dialog_get_instance_private (self);
+
+    active = g_settings_get_boolean (MainSettings, "id3v2-enable-unicode");
+
+    if (g_settings_get_boolean (MainSettings, "id3v2-enabled"))
+    {
+        gtk_widget_set_sensitive (priv->LabelId3v2Charset, TRUE);
+
+#ifdef ENABLE_ID3LIB
+        gtk_widget_set_sensitive (priv->LabelId3v2Version, TRUE);
+        gtk_widget_set_sensitive (priv->FileWritingId3v2VersionCombo, TRUE);
+
+        if (!g_settings_get_boolean (MainSettings, "id3v2-version-4"))
+        {
+            /* When "ID3v2.3" is selected. */
+            gtk_combo_box_set_active (GTK_COMBO_BOX (priv->FileWritingId3v2UnicodeCharacterSetCombo), 1);
+            gtk_widget_set_sensitive (priv->FileWritingId3v2UnicodeCharacterSetCombo,
+                                      FALSE);
+        }
+        else
+        {
+            /* When "ID3v2.4" is selected, set "UTF-8" as default value. */
+            gtk_combo_box_set_active (GTK_COMBO_BOX (priv->FileWritingId3v2UnicodeCharacterSetCombo),
+                                      0);
+            gtk_widget_set_sensitive (priv->FileWritingId3v2UnicodeCharacterSetCombo,
+                                      active);
+        }
+#else 
+        gtk_widget_set_sensitive (priv->FileWritingId3v2UnicodeCharacterSetCombo,
+                                  active);
+#endif
+        gtk_widget_set_sensitive(priv->FileWritingId3v2UseUnicodeCharacterSet, TRUE);
+        gtk_widget_set_sensitive(priv->FileWritingId3v2UseNoUnicodeCharacterSet, TRUE);
+        gtk_widget_set_sensitive (priv->FileWritingId3v2NoUnicodeCharacterSetCombo,
+                                  !active);
+        gtk_widget_set_sensitive (priv->LabelAdditionalId3v2IconvOptions, !active);
+        gtk_widget_set_sensitive (priv->FileWritingId3v2IconvOptionsNo, !active);
+        gtk_widget_set_sensitive (priv->FileWritingId3v2IconvOptionsTranslit, !active);
+        gtk_widget_set_sensitive (priv->FileWritingId3v2IconvOptionsIgnore, !active);
+        gtk_widget_set_sensitive (priv->FileWritingId3v2UseCrc32, TRUE);
+        gtk_widget_set_sensitive (priv->FileWritingId3v2UseCompression, TRUE);
+        gtk_widget_set_sensitive (priv->FileWritingId3v2TextOnlyGenre, TRUE);
+        gtk_widget_set_sensitive (priv->ConvertOldId3v2TagVersion, TRUE);
+
+    }else
+    {
+        gtk_widget_set_sensitive (priv->LabelId3v2Charset, FALSE);
+#ifdef ENABLE_ID3LIB
+        gtk_widget_set_sensitive (priv->LabelId3v2Version, FALSE);
+        gtk_widget_set_sensitive (priv->FileWritingId3v2VersionCombo, FALSE);
+#endif
+        gtk_widget_set_sensitive (priv->FileWritingId3v2UseUnicodeCharacterSet, FALSE);
+        gtk_widget_set_sensitive (priv->FileWritingId3v2UseNoUnicodeCharacterSet, FALSE);
+        gtk_widget_set_sensitive (priv->FileWritingId3v2UnicodeCharacterSetCombo,
+                                  FALSE);
+        gtk_widget_set_sensitive (priv->FileWritingId3v2NoUnicodeCharacterSetCombo,
+                                  FALSE);
+        gtk_widget_set_sensitive (priv->LabelAdditionalId3v2IconvOptions, FALSE);
+        gtk_widget_set_sensitive (priv->FileWritingId3v2IconvOptionsNo, FALSE);
+        gtk_widget_set_sensitive (priv->FileWritingId3v2IconvOptionsTranslit, FALSE);
+        gtk_widget_set_sensitive (priv->FileWritingId3v2IconvOptionsIgnore, FALSE);
+        gtk_widget_set_sensitive (priv->FileWritingId3v2UseCrc32, FALSE);
+        gtk_widget_set_sensitive (priv->FileWritingId3v2UseCompression, FALSE);
+        gtk_widget_set_sensitive (priv->FileWritingId3v2TextOnlyGenre, FALSE);
+        gtk_widget_set_sensitive (priv->ConvertOldId3v2TagVersion, 0);
+    }
+
+    active = g_settings_get_boolean (MainSettings, "id3v1-enabled");
+
+    gtk_widget_set_sensitive (priv->id3_v1_encoding_grid, active);
+}
+
+/*
+ * Check_Config: Check if config information are correct
+ *
+ * Problem noted : if a character is escaped (like : 'C\351line DION') in
+ *                 gtk_file_chooser it will converted to UTF-8. So after, there
+ *                 is a problem to convert it in the right system encoding to be
+ *                 passed to stat(), and it can find the directory.
+ * exemple :
+ *  - initial file on system                        : C\351line DION - D'eux (1995)
+ *  - converted to UTF-8 (path_utf8)                : Céline DION - D'eux (1995)
+ *  - try to convert to system encoding (path_real) : ?????
+ */
+static gboolean
+Check_DefaultPathToMp3 (EtPreferencesDialog *self)
+{
+    GVariant *default_path;
+    const gchar *path_real;
+    GFile *file;
+    GFileInfo *fileinfo;
+
+    default_path = g_settings_get_value (MainSettings, "default-path");
+    path_real = g_variant_get_bytestring (default_path);
+
+    if (!*path_real)
+    {
+        g_variant_unref (default_path);
+        return TRUE;
+    }
+
+    file = g_file_new_for_path (path_real);
+    fileinfo = g_file_query_info (file, G_FILE_ATTRIBUTE_STANDARD_TYPE ","
+                                  G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME,
+                                  G_FILE_QUERY_INFO_NONE, NULL, NULL);
+    g_variant_unref (default_path);
+    g_object_unref (file);
+
+    if (fileinfo)
+    {
+        if (g_file_info_get_file_type (fileinfo) == G_FILE_TYPE_DIRECTORY)
+        {
+            g_object_unref (fileinfo);
+            return TRUE; /* Path is good */
+        }
+        else
+        {
+            GtkWidget *msgdialog;
+            const gchar *path_utf8;
+
+            path_utf8 = g_file_info_get_display_name (fileinfo);
+            msgdialog = gtk_message_dialog_new (GTK_WINDOW (self),
+                                                GTK_DIALOG_MODAL
+                                                | GTK_DIALOG_DESTROY_WITH_PARENT,
+                                                GTK_MESSAGE_ERROR,
+                                                GTK_BUTTONS_CLOSE,
+                                                "%s",
+                                                _("The selected default path is invalid"));
+            gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (msgdialog),
+                                                      _("Path: ‘%s’\nError: %s"),
+                                                      path_utf8,
+                                                      g_strerror (errno));
+            gtk_window_set_title (GTK_WINDOW (msgdialog),
+                                  _("Invalid Path Error"));
+
+            gtk_dialog_run (GTK_DIALOG (msgdialog));
+            gtk_widget_destroy (msgdialog);
+        }
+
+        g_object_unref (fileinfo);
+    }
+
+    return FALSE;
+}
+
+/*
+ * The character set conversion is used for ID3 tag. UTF-8 is used to display.
+ *  - reading_character is converted to UTF-8
+ *  - writing_character is converted from UTF-8
+ */
+/*****************
+gint Check_CharacterSetTranslation (void)
+{
+    gchar *temp;
+    gchar *reading_character;
+    gchar *writing_character;
+
+    temp = Get_Active_Combo_Box_Item(GTK_COMBO_BOX(FileReadingCharacterSetCombo));
+    reading_character = Charset_Get_Name_From_Title(temp);
+    g_free(temp);
+
+    temp = Get_Active_Combo_Box_Item(GTK_COMBO_BOX(FileWritingCharacterSetCombo));
+    writing_character = Charset_Get_Name_From_Title(temp);
+    g_free(temp);
+
+    // Check conversion when reading file
+    if ( GTK_TOGGLE_BUTTON(UseNonStandardId3ReadingCharacterSet)->active
+    && (test_conversion_charset(reading_character,"UTF-8")!=TRUE) )
+    {
+        gchar *msg = g_strdup_printf(_("The character set translation from '%s'\n"
+                                       "to '%s' is not supported"),reading_character,"UTF-8");
+        GtkWidget *msgbox = msg_box_new(_("Error"),
+                                        GTK_WINDOW(OptionsWindow),
+                                        NULL,
+                                        GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+                                        msg,
+                                        GTK_STOCK_DIALOG_ERROR,
+                                        GTK_STOCK_OK, GTK_RESPONSE_OK,
+                                        NULL);
+        gtk_dialog_run(GTK_DIALOG(msgbox));
+        gtk_widget_destroy(msgbox);
+        g_free(msg);
+        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(UseNonStandardId3ReadingCharacterSet),FALSE);
+        return 0;
+    }
+    // Check conversion when writing file
+    if ( GTK_TOGGLE_BUTTON(UseNonStandardId3WritingCharacterSet)->active
+    && (test_conversion_charset("UTF-8",writing_character)!=TRUE) )
+    {
+        gchar *msg = g_strdup_printf(_("The character set translation from '%s'\n"
+                                       "to '%s' is not supported"),"UTF-8",writing_character);
+        GtkWidget *msgbox = msg_box_new(_("Error"),
+                                        GTK_WINDOW(OptionsWindow),
+                                        NULL,
+                                        GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+                                        msg,
+                                        GTK_STOCK_DIALOG_ERROR,
+                                        GTK_STOCK_OK, GTK_RESPONSE_OK,
+                                        NULL);
+        gtk_dialog_run(GTK_DIALOG(msgbox));
+        gtk_widget_destroy(msgbox);
+        g_free(msg);
+        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(UseNonStandardId3WritingCharacterSet),FALSE);
+        return 0;
+    }
+
+    return 1;
+}
+*************/
+
+static gboolean
+Check_Config (EtPreferencesDialog *self)
+{
+    if (Check_DefaultPathToMp3 (self))
+        return TRUE; /* No problem detected */
+    else
+        return FALSE; /* Oops! */
+}
+
+/* Callback from et_preferences_dialog_on_response. */
+static void
+OptionsWindow_Save_Button (EtPreferencesDialog *self)
+{
+    if (!Check_Config (self)) return;
+
+    gtk_widget_hide (GTK_WIDGET (self));
+}
+
+void
+et_preferences_dialog_show_scanner (EtPreferencesDialog *self)
+{
+    EtPreferencesDialogPrivate *priv;
+
+    g_return_if_fail (ET_PREFERENCES_DIALOG (self));
+
+    priv = et_preferences_dialog_get_instance_private (self);
+
+    gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->options_notebook),
+                                   priv->options_notebook_scanner);
+    gtk_window_present (GTK_WINDOW (self));
+}
+
+/*
+ * et_preferences_on_response:
+ * @dialog: the dialog which trigerred the response signal
+ * @response_id: the response which was triggered
+ * @user_data: user data set when the signal was connected
+ *
+ * Signal handler for the response signal, to check whether the OK or cancel
+ * button was clicked, or if a delete event was received.
+ */
+static void
+et_preferences_on_response (GtkDialog *dialog, gint response_id,
+                            gpointer user_data)
+{
+    switch (response_id)
+    {
+        case GTK_RESPONSE_CLOSE:
+            OptionsWindow_Save_Button (ET_PREFERENCES_DIALOG (dialog));
+            break;
+        case GTK_RESPONSE_DELETE_EVENT:
+            break;
+        default:
+            g_assert_not_reached ();
+    }
+}
+
+static void
+et_preferences_dialog_finalize (GObject *object)
+{
+    G_OBJECT_CLASS (et_preferences_dialog_parent_class)->finalize (object);
+}
+
+static void
+et_preferences_dialog_init (EtPreferencesDialog *self)
+{
+    self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, ET_TYPE_PREFERENCES_DIALOG,
+                                              EtPreferencesDialogPrivate);
+
+    create_preferences_dialog (self);
+}
+
+static void
+et_preferences_dialog_class_init (EtPreferencesDialogClass *klass)
+{
+    G_OBJECT_CLASS (klass)->finalize = et_preferences_dialog_finalize;
+
+    g_type_class_add_private (klass, sizeof (EtPreferencesDialogPrivate));
+}
+
+/*
+ * et_preferences_dialog_new:
+ *
+ * Create a new EtPreferencesDialog instance.
+ *
+ * Returns: a new #EtPreferencesDialog
+ */
+EtPreferencesDialog *
+et_preferences_dialog_new (GtkWindow *parent)
+{
+    g_return_val_if_fail (GTK_WINDOW (parent), NULL);
+
+    return g_object_new (ET_TYPE_PREFERENCES_DIALOG, "transient-for", parent,
+                         NULL);
+}
diff --git a/src/preferences_dialog.h b/src/preferences_dialog.h
new file mode 100644
index 0000000..71612da
--- /dev/null
+++ b/src/preferences_dialog.h
@@ -0,0 +1,54 @@
+/*
+ * EasyTAG - Tag editor for audio files
+ * Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
+ * Copyright (C) 2013  David King <amigadave at amigadave.com>
+ *
+ * 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 (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef ET_PREFERENCES_DIALOG_H_
+#define ET_PREFERENCES_DIALOG_H_
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define ET_TYPE_PREFERENCES_DIALOG (et_preferences_dialog_get_type ())
+#define ET_PREFERENCES_DIALOG(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), ET_TYPE_PREFERENCES_DIALOG, EtPreferencesDialog))
+
+typedef struct _EtPreferencesDialog EtPreferencesDialog;
+typedef struct _EtPreferencesDialogClass EtPreferencesDialogClass;
+typedef struct _EtPreferencesDialogPrivate EtPreferencesDialogPrivate;
+
+struct _EtPreferencesDialog
+{
+    /*< private >*/
+    GtkDialog parent_instance;
+    EtPreferencesDialogPrivate *priv;
+};
+
+struct _EtPreferencesDialogClass
+{
+    /*< private >*/
+    GtkDialogClass parent_class;
+};
+
+GType et_preferences_dialog_get_type (void);
+EtPreferencesDialog *et_preferences_dialog_new (GtkWindow *parent);
+void et_preferences_dialog_show_scanner (EtPreferencesDialog *self);
+
+G_END_DECLS
+
+#endif /* ET_PREFERENCES_DIALOG_H_ */
diff --git a/src/prefs.c b/src/prefs.c
deleted file mode 100644
index e27ffe2..0000000
--- a/src/prefs.c
+++ /dev/null
@@ -1,1919 +0,0 @@
-/* prefs.c - 2000/05/06 */
-/*
- *  EasyTAG - Tag editor for MP3 and Ogg Vorbis files
- *  Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
- *
- *  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
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include <config.h>
-
-#include <gtk/gtk.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <gdk/gdkkeysyms.h>
-#include <gdk/gdk.h>
-#include <glib/gi18n.h>
-#include <stdio.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <unistd.h>
-
-#include "gtk2_compat.h"
-#include "prefs.h"
-#include "setting.h"
-#include "bar.h"
-#include "misc.h"
-#include "scan.h"
-#include "easytag.h"
-#include "browser.h"
-#include "cddb.h"
-#include "charset.h"
-#include "win32/win32dep.h"
-
-static const guint BOX_SPACING = 6;
-
-/**************
- * Prototypes *
- **************/
-/* Options window */
-static void OptionsWindow_Quit (void);
-static void OptionsWindow_Save_Button (void);
-static void OptionsWindow_Cancel_Button (void);
-static gboolean Check_Config (void);
-
-static void Set_Default_Comment_Check_Button_Toggled (void);
-static void Number_Track_Formatted_Toggled (void);
-static void Number_Track_Formatted_Spin_Button_Changed (GtkWidget *Label,
-                                                        GtkWidget *SpinButton);
-static void et_prefs_on_pad_disc_number_toggled (void);
-static void et_prefs_on_pad_disc_number_spinbutton_changed (GtkWidget *label,
-                                                            GtkWidget *spinbutton);
-
-static void Change_Id3_Settings_Toggled (void);
-static void Use_Non_Standard_Id3_Reading_Character_Set_Toggled (void);
-static void Scanner_Convert_Check_Button_Toggled_1 (GtkWidget *object_rec,
-                                                    GtkWidget *object_emi);
-static void Cddb_Use_Proxy_Toggled (void);
-
-static void DefaultPathToMp3_Combo_Add_String (void);
-static void CddbLocalPath_Combo_Add_String (void);
-
-static void et_preferences_on_response (GtkDialog *dialog, gint response_id,
-                                        gpointer user_data);
-
-
-/*************
- * Functions *
- *************/
-void Init_OptionsWindow (void)
-{
-    OptionsWindow = NULL;
-}
-
-/*
- * The window for options
- */
-void Open_OptionsWindow (void)
-{
-    GtkWidget *OptionsVBox;
-    GtkWidget *Button;
-    GtkWidget *Label;
-    GtkWidget *Frame;
-    GtkWidget *Table;
-    GtkWidget *VBox, *vbox;
-    GtkWidget *HBox, *hbox, *id3v1v2hbox;
-    GtkWidget *Separator;
-    gchar *path_utf8;
-    gchar *program_path;
-
-    /* Check if already opened */
-    if (OptionsWindow)
-    {
-        gtk_window_present(GTK_WINDOW(OptionsWindow));
-        return;
-    }
-
-    /* The window */
-    OptionsWindow = gtk_dialog_new_with_buttons (_("Preferences"),
-                                                 GTK_WINDOW (MainWindow),
-                                                 GTK_DIALOG_DESTROY_WITH_PARENT,
-                                                 GTK_STOCK_CANCEL,
-                                                 GTK_RESPONSE_REJECT,
-                                                 GTK_STOCK_OK,
-                                                 GTK_RESPONSE_ACCEPT, NULL);
-
-    gtk_container_set_border_width (GTK_CONTAINER (OptionsWindow), 6);
-
-    /* Signals connection */
-    gtk_dialog_set_default_response (GTK_DIALOG (OptionsWindow),
-                                     GTK_RESPONSE_ACCEPT);
-    g_signal_connect (OptionsWindow, "response",
-                      G_CALLBACK (et_preferences_on_response), NULL);
-
-     /* Options */
-     /* The vbox */
-    OptionsVBox = gtk_dialog_get_content_area (GTK_DIALOG (OptionsWindow));
-    gtk_box_set_spacing (GTK_BOX (OptionsVBox), 12);
-
-     /* Options NoteBook */
-    OptionsNoteBook = gtk_notebook_new();
-    gtk_notebook_popup_enable(GTK_NOTEBOOK(OptionsNoteBook));
-    gtk_notebook_set_scrollable(GTK_NOTEBOOK(OptionsNoteBook),TRUE);
-    gtk_box_pack_start(GTK_BOX(OptionsVBox),OptionsNoteBook,TRUE,TRUE,0);
-
-
-
-    /*
-     * Browser
-     */
-    Label = gtk_label_new(_("Browser"));
-    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
-    gtk_notebook_append_page (GTK_NOTEBOOK (OptionsNoteBook), vbox, Label);
-    gtk_container_set_border_width (GTK_CONTAINER (vbox), BOX_SPACING);
-
-    /* Default directory */
-    HBox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, BOX_SPACING);
-    gtk_box_pack_start(GTK_BOX(vbox),HBox,FALSE,FALSE,0);
-
-    // Label
-    Label = gtk_label_new(_("Default directory:"));
-    gtk_box_pack_start(GTK_BOX(HBox),Label,FALSE,FALSE,0);
-
-    // Combo
-    if (DefaultPathModel != NULL)
-        gtk_list_store_clear(DefaultPathModel);
-    else
-        DefaultPathModel = gtk_list_store_new(MISC_COMBO_COUNT, G_TYPE_STRING);
-
-    DefaultPathToMp3 = gtk_combo_box_new_with_model_and_entry(GTK_TREE_MODEL(DefaultPathModel));
-    gtk_combo_box_set_entry_text_column(GTK_COMBO_BOX(DefaultPathToMp3), MISC_COMBO_TEXT);
-    gtk_box_pack_start(GTK_BOX(HBox),DefaultPathToMp3,TRUE,TRUE,0);
-    gtk_widget_set_size_request(DefaultPathToMp3, 400, -1);
-    gtk_widget_set_tooltip_text(gtk_bin_get_child(GTK_BIN(DefaultPathToMp3)),_("Specify the directory where "
-        "your files are located. This path will be loaded when EasyTAG starts without parameter."));
-    g_signal_connect(G_OBJECT(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(DefaultPathToMp3)))),"activate",G_CALLBACK(DefaultPathToMp3_Combo_Add_String),NULL);
-    //g_signal_connect(G_OBJECT(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(DefaultPathToMp3)))),"focus_out_event",G_CALLBACK(DefaultPathToMp3_Combo_Add_String),NULL);
-
-    // History list
-    Load_Default_Path_To_MP3_List(DefaultPathModel, MISC_COMBO_TEXT);
-    // If default path hasn't been added already, add it now..
-    path_utf8 = filename_to_display(DEFAULT_PATH_TO_MP3);
-    Add_String_To_Combo_List(DefaultPathModel, path_utf8);
-    if (path_utf8)
-        gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(DefaultPathToMp3))), path_utf8);
-    g_free(path_utf8);
-
-    // Button browse
-    Button = gtk_button_new_from_stock(GTK_STOCK_OPEN);
-    gtk_box_pack_start(GTK_BOX(HBox),Button,FALSE,FALSE,0);
-    g_signal_connect_swapped(G_OBJECT(Button),"clicked",
-                             G_CALLBACK(File_Selection_Window_For_Directory),G_OBJECT(gtk_bin_get_child(GTK_BIN(DefaultPathToMp3))));
-
-    /* Load directory on startup */
-    LoadOnStartup = gtk_check_button_new_with_label(_("Load on startup the default directory or the directory passed as argument"));
-    gtk_box_pack_start(GTK_BOX(vbox),LoadOnStartup,FALSE,FALSE,0);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LoadOnStartup),LOAD_ON_STARTUP);
-    gtk_widget_set_tooltip_text(LoadOnStartup,_("Automatically search files, when EasyTAG starts, "
-        "into the default directory. Note that this path may be overridden by the parameter "
-        "passed to easytag (easytag /path_to/mp3_files)."));
-
-    /* Browse subdirectories */
-    BrowseSubdir = gtk_check_button_new_with_label(_("Search subdirectories"));
-    gtk_box_pack_start(GTK_BOX(vbox),BrowseSubdir,FALSE,FALSE,0);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(BrowseSubdir),BROWSE_SUBDIR);
-    gtk_widget_set_tooltip_text(BrowseSubdir,_("Search subdirectories for files when reading "
-        "a directory into the tree."));
-
-    /* Open the node to show subdirectories */
-    OpenSelectedBrowserNode = gtk_check_button_new_with_label(_("Show subdirectories when selecting "
-        "a directory"));
-    gtk_box_pack_start(GTK_BOX(vbox),OpenSelectedBrowserNode,FALSE,FALSE,0);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(OpenSelectedBrowserNode),OPEN_SELECTED_BROWSER_NODE);
-    gtk_widget_set_tooltip_text(OpenSelectedBrowserNode,_("This expands the selected node into the file "
-        "browser to display the sub-directories."));
-
-    /* Browse hidden directories */
-    BrowseHiddendir = gtk_check_button_new_with_label(_("Search hidden directories"));
-#ifndef G_OS_WIN32 /* Always true and not user modifiable on win32 */
-    gtk_box_pack_start(GTK_BOX(vbox),BrowseHiddendir,FALSE,FALSE,0);
-#endif /* !G_OS_WIN32 */
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(BrowseHiddendir),BROWSE_HIDDEN_DIR);
-    gtk_widget_set_tooltip_text(BrowseHiddendir,_("Search hidden directories for files "
-        "(directories starting by a '.')."));
-
-
-
-    /*
-     * Misc
-     */
-    Label = gtk_label_new (_("Misc"));
-    VBox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
-    gtk_notebook_append_page (GTK_NOTEBOOK (OptionsNoteBook), VBox, Label);
-    gtk_container_set_border_width (GTK_CONTAINER (VBox), BOX_SPACING);
-
-    /* User interface */
-    Frame = gtk_frame_new (_("User Interface"));
-    gtk_box_pack_start(GTK_BOX(VBox),Frame,FALSE,FALSE,0);
-    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
-    gtk_container_add(GTK_CONTAINER(Frame),vbox);
-    gtk_container_set_border_width (GTK_CONTAINER (vbox), BOX_SPACING);
-
-    // Show header infos
-    ShowHeaderInfos = gtk_check_button_new_with_label(_("Show header information of file"));
-    gtk_box_pack_start(GTK_BOX(vbox),ShowHeaderInfos,FALSE,FALSE,0);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ShowHeaderInfos),SHOW_HEADER_INFO);
-    gtk_widget_set_tooltip_text(ShowHeaderInfos,_("If activated, information about the file as "
-        "the bitrate, the time, the size, will be displayed under the filename entry."));
-
-    // Display color mode for changed files in list
-    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, BOX_SPACING);
-    gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,0);
-    Label = gtk_label_new(_("Display changed files in list using:"));
-    gtk_box_pack_start(GTK_BOX(hbox),Label,FALSE,FALSE,0);
-
-    ChangedFilesDisplayedToRed = gtk_radio_button_new_with_label(NULL,_("Red color"));
-    gtk_box_pack_start(GTK_BOX(hbox),ChangedFilesDisplayedToRed,FALSE,FALSE,4);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ChangedFilesDisplayedToRed),CHANGED_FILES_DISPLAYED_TO_RED);
-
-    // Set "new" Gtk+-2.0ish black/bold style for changed items
-    ChangedFilesDisplayedToBold = gtk_radio_button_new_with_label(
-        gtk_radio_button_get_group(GTK_RADIO_BUTTON(ChangedFilesDisplayedToRed)),_("Bold style"));
-    gtk_box_pack_start(GTK_BOX(hbox),ChangedFilesDisplayedToBold,FALSE,FALSE,2);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ChangedFilesDisplayedToBold),CHANGED_FILES_DISPLAYED_TO_BOLD);
-
-
-    /* Sorting List Options */
-    Frame = gtk_frame_new (_("Sorting List Options"));
-    gtk_box_pack_start(GTK_BOX(VBox),Frame,FALSE,FALSE,0);
-    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
-    gtk_container_add(GTK_CONTAINER(Frame),vbox);
-    gtk_container_set_border_width (GTK_CONTAINER(vbox), BOX_SPACING);
-
-    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
-    gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,0);
-    /* Sorting method */
-    Label = gtk_label_new(_("Sort the file list by:"));
-    gtk_box_pack_start(GTK_BOX(hbox),Label,FALSE,FALSE,0);
-
-    SortingFileCombo = gtk_combo_box_text_new();
-    gtk_box_pack_start (GTK_BOX (hbox), SortingFileCombo, FALSE, FALSE, 2);
-    gtk_widget_set_size_request(GTK_WIDGET(SortingFileCombo), 260, -1);
-    gtk_combo_box_set_wrap_width(GTK_COMBO_BOX(SortingFileCombo),2); // Two columns
-
-    // Items of option menu
-    gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (SortingFileCombo),
-                                    _("Ascending filename"));
-    gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (SortingFileCombo),
-                                    _("Descending filename"));
-    gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(SortingFileCombo), _("Ascending title"));
-    gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(SortingFileCombo), _("Descending title"));
-    gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(SortingFileCombo), _("Ascending artist"));
-    gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(SortingFileCombo), _("Descending artist"));
-    gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (SortingFileCombo),
-                                    _("Ascending album artist"));
-    gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (SortingFileCombo),
-                                    _("Descending album artist"));
-    gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(SortingFileCombo), _("Ascending album"));
-    gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(SortingFileCombo), _("Descending album"));
-    gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(SortingFileCombo), _("Ascending year"));
-    gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(SortingFileCombo), _("Descending year"));
-    gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (SortingFileCombo),
-                                    _("Ascending disc number"));
-    gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (SortingFileCombo),
-                                    _("Descending disc number"));
-    gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (SortingFileCombo),
-                                    _("Ascending track number"));
-    gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (SortingFileCombo),
-                                    _("Descending track number"));
-    gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(SortingFileCombo), _("Ascending genre"));
-    gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(SortingFileCombo), _("Descending genre"));
-    gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(SortingFileCombo), _("Ascending comment"));
-    gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(SortingFileCombo), _("Descending comment"));
-    gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (SortingFileCombo),
-                                    _("Ascending composer"));
-    gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (SortingFileCombo),
-                                    _("Descending composer"));
-    gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (SortingFileCombo),
-                                    _("Ascending original artist"));
-    gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (SortingFileCombo),
-                                    _("Descending original artist"));
-    gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (SortingFileCombo),
-                                    _("Ascending copyright"));
-    gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (SortingFileCombo),
-                                    _("Descending copyright"));
-    gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (SortingFileCombo),
-                                    _("Ascending URL"));
-    gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (SortingFileCombo),
-                                    _("Descending URL"));
-    gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (SortingFileCombo),
-                                    _("Ascending encoded by"));
-    gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (SortingFileCombo),
-                                    _("Descending encoded by"));
-    gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (SortingFileCombo),
-                                    _("Ascending creation date"));
-    gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (SortingFileCombo),
-                                    _("Descending creation date"));
-
-    gtk_combo_box_set_active(GTK_COMBO_BOX(SortingFileCombo), SORTING_FILE_MODE);
-    gtk_widget_set_tooltip_text(SortingFileCombo,
-                                _("Select the type of file sorting when "
-                                "loading a directory."));
-
-    SortingFileCaseSensitive = gtk_check_button_new_with_label(_("Case sensitive"));
-#ifndef G_OS_WIN32
-    /* Always true and not user modifiable on win32, as strncasecmp() does not
-     * work correctly with g_utf8_collate_key().
-     */
-    gtk_box_pack_start(GTK_BOX(hbox),SortingFileCaseSensitive,FALSE,FALSE,0);
-#endif /* !G_OS_WIN32 */
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(SortingFileCaseSensitive),
-        SORTING_FILE_CASE_SENSITIVE);
-    gtk_widget_set_tooltip_text(SortingFileCaseSensitive,_("If activated, the "
-        "sorting of the list will be dependent on the case."));
-
-    /* File Player */
-    Frame = gtk_frame_new (_("File Audio Player"));
-    gtk_box_pack_start(GTK_BOX(VBox),Frame,FALSE,FALSE,0);
-
-    // Player name with params
-    if (FilePlayerModel == NULL)
-        FilePlayerModel = gtk_list_store_new(MISC_COMBO_COUNT, G_TYPE_STRING);
-    else
-        gtk_list_store_clear(FilePlayerModel);
-
-    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, BOX_SPACING);
-    gtk_container_add(GTK_CONTAINER(Frame),hbox);
-    gtk_container_set_border_width (GTK_CONTAINER (hbox), BOX_SPACING);
-    Label = gtk_label_new (_("Player to run:"));
-    gtk_box_pack_start(GTK_BOX(hbox),Label,FALSE,FALSE,0);
-    FilePlayerCombo = gtk_combo_box_new_with_model_and_entry(GTK_TREE_MODEL(FilePlayerModel));
-    gtk_combo_box_set_entry_text_column(GTK_COMBO_BOX(FilePlayerCombo),MISC_COMBO_TEXT);
-    gtk_widget_set_size_request(GTK_WIDGET(FilePlayerCombo), 300, -1);
-    gtk_box_pack_start(GTK_BOX(hbox),FilePlayerCombo,FALSE,FALSE,0);
-    gtk_widget_set_tooltip_text(gtk_bin_get_child(GTK_BIN(FilePlayerCombo)),_("Enter the program used to "
-        "play the files. Some arguments can be passed for the program (as 'xmms -p') before "
-        "to receive files as other arguments."));
-    // History List
-    Load_Audio_File_Player_List(FilePlayerModel, MISC_COMBO_TEXT);
-    Add_String_To_Combo_List(FilePlayerModel, AUDIO_FILE_PLAYER);
-    // Don't load the parameter if XMMS not found, else user can't save the preference
-    if ( (program_path=Check_If_Executable_Exists(AUDIO_FILE_PLAYER)))
-        gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(FilePlayerCombo))), AUDIO_FILE_PLAYER);
-    g_free(program_path);
-
-    // Button browse
-    Button = gtk_button_new_from_stock(GTK_STOCK_OPEN);
-    gtk_box_pack_start(GTK_BOX(hbox),Button,FALSE,FALSE,0);
-    g_signal_connect_swapped(G_OBJECT(Button),"clicked",
-        G_CALLBACK(File_Selection_Window_For_File), G_OBJECT(gtk_bin_get_child(GTK_BIN(FilePlayerCombo))));
-
-    /* Log options */
-    Frame = gtk_frame_new (_("Log Options"));
-    gtk_box_pack_start(GTK_BOX(VBox),Frame,FALSE,FALSE,0);
-    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
-    gtk_container_add(GTK_CONTAINER(Frame),vbox);
-    gtk_container_set_border_width (GTK_CONTAINER (vbox), BOX_SPACING);
-
-    // Show / hide log view
-    ShowLogView = gtk_check_button_new_with_label(_("Show log view in main window"));
-    gtk_box_pack_start(GTK_BOX(vbox),ShowLogView,FALSE,FALSE,0);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ShowLogView),SHOW_LOG_VIEW);
-    gtk_widget_set_tooltip_text(ShowLogView,_("If activated, the log view would be "
-                                            "visible in the main window."));
-   
-    // Max number of lines
-    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, BOX_SPACING);
-    gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,0);
-    Label = gtk_label_new (_("Max number of lines:"));
-    gtk_box_pack_start(GTK_BOX(hbox),Label,FALSE,FALSE,0);
-    
-    LogMaxLinesSpinButton = gtk_spin_button_new_with_range(10.0,1500.0,10.0);
-    gtk_box_pack_start(GTK_BOX(hbox),LogMaxLinesSpinButton,FALSE,FALSE,0);
-    gtk_spin_button_set_value(GTK_SPIN_BUTTON(LogMaxLinesSpinButton),(gfloat)LOG_MAX_LINES);
-    /* g_signal_connect(G_OBJECT(NumberTrackFormated),"toggled",G_CALLBACK(Number_Track_Formatted_Toggled),NULL);
-     * g_signal_emit_by_name(G_OBJECT(NumberTrackFormated),"toggled");
-       gtk_tooltips_set_tip(Tips,GTK_BIN(FilePlayerCombo)->child,_("Enter the program used to "
-        "play the files. Some arguments can be passed for the program (as 'xmms -p') before "
-        "to receive files as other arguments."),NULL);
-*/
-
-
-
-    /*
-     * File Settings
-     */
-    Label = gtk_label_new (_("File Settings"));
-    VBox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
-    gtk_notebook_append_page (GTK_NOTEBOOK (OptionsNoteBook), VBox, Label);
-    gtk_container_set_border_width (GTK_CONTAINER (VBox), BOX_SPACING);
-
-    /* File (name) Options */
-    Frame = gtk_frame_new (_("File Options"));
-    gtk_box_pack_start(GTK_BOX(VBox),Frame,FALSE,FALSE,0);
-    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
-    gtk_container_add(GTK_CONTAINER(Frame),vbox);
-    gtk_container_set_border_width (GTK_CONTAINER(vbox), BOX_SPACING);
-
-    ReplaceIllegalCharactersInFilename = gtk_check_button_new_with_label(_("Replace illegal characters in filename (for Windows and CD-Rom)"));
-    gtk_box_pack_start(GTK_BOX(vbox),ReplaceIllegalCharactersInFilename,FALSE,FALSE,0);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ReplaceIllegalCharactersInFilename),REPLACE_ILLEGAL_CHARACTERS_IN_FILENAME);
-    gtk_widget_set_tooltip_text(ReplaceIllegalCharactersInFilename,_("Convert illegal characters for "
-        "FAT32/16 and ISO9660 + Joliet filesystems ('\\', ':', ';', '*', '?', '\"', '<', '>', '|') "
-        "of the filename to avoid problem when renaming the file. This is useful when renaming the "
-        "file from the tag with the scanner."));
-
-    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, BOX_SPACING);
-    gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,0);
-    /* Extension case (lower/upper?) */
-    Label = gtk_label_new(_("Convert filename extension to:"));
-    gtk_box_pack_start(GTK_BOX(hbox),Label,FALSE,FALSE,0);
-
-    FilenameExtensionLowerCase = gtk_radio_button_new_with_label(NULL,_("Lower Case"));
-    gtk_box_pack_start(GTK_BOX(hbox),FilenameExtensionLowerCase,FALSE,FALSE,2);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(FilenameExtensionLowerCase),FILENAME_EXTENSION_LOWER_CASE);
-    gtk_widget_set_tooltip_text(FilenameExtensionLowerCase,_("For example, the extension will be converted to '.mp3'"));
-
-    FilenameExtensionUpperCase = gtk_radio_button_new_with_label(
-        gtk_radio_button_get_group(GTK_RADIO_BUTTON(FilenameExtensionLowerCase)),_("Upper Case"));
-    gtk_box_pack_start(GTK_BOX(hbox),FilenameExtensionUpperCase,FALSE,FALSE,2);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(FilenameExtensionUpperCase),FILENAME_EXTENSION_UPPER_CASE);
-    gtk_widget_set_tooltip_text(FilenameExtensionUpperCase,_("For example, the extension will be converted to '.MP3'"));
-
-    FilenameExtensionNoChange = gtk_radio_button_new_with_label(
-        gtk_radio_button_get_group(GTK_RADIO_BUTTON(FilenameExtensionLowerCase)),_("No Change"));
-    gtk_box_pack_start(GTK_BOX(hbox),FilenameExtensionNoChange,FALSE,FALSE,2);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(FilenameExtensionNoChange),FILENAME_EXTENSION_NO_CHANGE);
-    gtk_widget_set_tooltip_text(FilenameExtensionNoChange,_("The extension will not be converted"));
-
-    /* Preserve modification time */
-    PreserveModificationTime = gtk_check_button_new_with_label(_("Preserve modification time of the file"));
-    gtk_box_pack_start(GTK_BOX(vbox),PreserveModificationTime,FALSE,FALSE,0);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(PreserveModificationTime),PRESERVE_MODIFICATION_TIME);
-    gtk_widget_set_tooltip_text(PreserveModificationTime,_("Preserve the modification time "
-        "(in file properties) when saving the file."));
-
-    /* Change directory modification time */
-    UpdateParentDirectoryModificationTime = gtk_check_button_new_with_label(_("Update modification time "
-        "of the parent directory of the file (recommended when using Amarok)"));
-    gtk_box_pack_start(GTK_BOX(vbox),UpdateParentDirectoryModificationTime,FALSE,FALSE,0);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(UpdateParentDirectoryModificationTime),UPDATE_PARENT_DIRECTORY_MODIFICATION_TIME);
-    gtk_widget_set_tooltip_text(UpdateParentDirectoryModificationTime,_("The modification time "
-        "of the parent directory of the file will be updated when saving tag the file. At the "
-        "present time it is automatically done only when renaming a file.\nThis feature is "
-        "interesting when using applications like Amarok. For performance reasons, they refresh "
-        "file information by detecting changes of the parent directory."));
-
-
-    /* Character Set for Filename */
-    Frame = gtk_frame_new (_("Character Set for Filename"));
-    gtk_box_pack_start(GTK_BOX(VBox),Frame,FALSE,FALSE,0);
-    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
-    gtk_container_add(GTK_CONTAINER(Frame),vbox);
-    gtk_container_set_border_width (GTK_CONTAINER (vbox), BOX_SPACING);
-
-    Table = et_grid_new (4, 2);
-    gtk_box_pack_start(GTK_BOX(vbox),Table,FALSE,FALSE,0);
-    /*gtk_grid_set_row_spacing (GTK_GRID (Table), 2);*/
-    gtk_grid_set_column_spacing (GTK_GRID (Table), 2 * BOX_SPACING);
-
-    /* Rules for character set */
-    Label = gtk_label_new(_("Rules to apply if some characters can't be converted to "
-        "the system character encoding when writing filename:"));
-    gtk_grid_attach (GTK_GRID (Table), Label, 0, 0, 2, 1);
-    gtk_misc_set_alignment(GTK_MISC(Label),0,0.5);
-
-
-    FilenameCharacterSetOther = gtk_radio_button_new_with_label(NULL,_("Try another "
-        "character encoding"));
-    gtk_grid_attach (GTK_GRID (Table), FilenameCharacterSetOther, 1, 1, 1, 1);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(FilenameCharacterSetOther),FILENAME_CHARACTER_SET_OTHER);
-    gtk_widget_set_tooltip_text(FilenameCharacterSetOther,_("With this option, it will "
-        "try the conversion to the encoding associated to your locale (for example: "
-        "ISO-8859-1 for 'fr', KOI8-R for 'ru', ISO-8859-2 for 'ro'). If it fails, it "
-        "will try the character encoding ISO-8859-1."));
-
-    FilenameCharacterSetApproximate = gtk_radio_button_new_with_label(
-        gtk_radio_button_get_group(GTK_RADIO_BUTTON(FilenameCharacterSetOther)),
-        _("Force using the system character encoding and activate the transliteration"));
-    gtk_grid_attach (GTK_GRID (Table), FilenameCharacterSetApproximate, 1, 2,
-                     1, 1);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(FilenameCharacterSetApproximate),FILENAME_CHARACTER_SET_APPROXIMATE);
-    gtk_widget_set_tooltip_text(FilenameCharacterSetApproximate,_("With this option, when "
-        "a character cannot be represented in the target character set, it can be "
-        "approximated through one or several similarly looking characters."));
-
-    FilenameCharacterSetDiscard = gtk_radio_button_new_with_label(
-        gtk_radio_button_get_group(GTK_RADIO_BUTTON(FilenameCharacterSetOther)),
-        _("Force using the system character encoding and silently discard some characters"));
-    gtk_grid_attach (GTK_GRID (Table), FilenameCharacterSetDiscard, 1, 3, 1,
-                     1);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(FilenameCharacterSetDiscard),FILENAME_CHARACTER_SET_DISCARD);
-    gtk_widget_set_tooltip_text(FilenameCharacterSetDiscard,_("With this option, when "
-        "a character cannot be represented in the target character set, it will "
-        "be silently discarded."));
-
-
-
-    /*
-     * Tag Settings
-     */
-    Label = gtk_label_new (_("Tag Settings"));
-    VBox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
-    gtk_notebook_append_page (GTK_NOTEBOOK (OptionsNoteBook), VBox, Label);
-    gtk_container_set_border_width (GTK_CONTAINER (VBox), BOX_SPACING);
-
-    /* Tag Options */
-    Frame = gtk_frame_new (_("Tag Options"));
-    gtk_box_pack_start(GTK_BOX(VBox),Frame,FALSE,FALSE,0);
-    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
-    gtk_container_add(GTK_CONTAINER(Frame),vbox);
-    gtk_container_set_border_width (GTK_CONTAINER (vbox), BOX_SPACING);
-
-    DateAutoCompletion = gtk_check_button_new_with_label(_("Auto completion of date if not complete"));
-    gtk_box_pack_start(GTK_BOX(vbox),DateAutoCompletion,FALSE,FALSE,0);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(DateAutoCompletion),DATE_AUTO_COMPLETION);
-    gtk_widget_set_tooltip_text(DateAutoCompletion,_("Try to complete the year field if you enter "
-        "only the last numerals of the date (for instance, if the current year is 2005: "
-        "5 => 2005, 4 => 2004, 6 => 1996, 95 => 1995…)."));
-
-    /* Track formatting. */
-    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, BOX_SPACING);
-    gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,0);
-
-    NumberTrackFormated = gtk_check_button_new_with_label(_("Write the track field with the following number of digits:"));
-    gtk_box_pack_start(GTK_BOX(hbox),NumberTrackFormated,FALSE,FALSE,0);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(NumberTrackFormated),NUMBER_TRACK_FORMATED);
-    gtk_widget_set_tooltip_text(NumberTrackFormated,_("If activated, the track field is written using "
-        "the number '0' as padding to obtain a number with 'n' digits (for example, with two digits: '05', "
-        "'09', '10'…). Else it keeps the 'raw' track value."));
-
-    NumberTrackFormatedSpinButton = gtk_spin_button_new_with_range(2.0,6.0,1.0);
-    gtk_box_pack_start(GTK_BOX(hbox),NumberTrackFormatedSpinButton,FALSE,FALSE,0);
-    gtk_spin_button_set_value(GTK_SPIN_BUTTON(NumberTrackFormatedSpinButton),(gfloat)NUMBER_TRACK_FORMATED_SPIN_BUTTON);
-    g_signal_connect(G_OBJECT(NumberTrackFormated),"toggled",G_CALLBACK(Number_Track_Formatted_Toggled),NULL);
-    g_signal_emit_by_name(G_OBJECT(NumberTrackFormated),"toggled");
-
-    Label = gtk_label_new(""); // Label to show the example
-    gtk_box_pack_start(GTK_BOX(hbox),Label,FALSE,FALSE,4);
-    g_signal_connect_swapped(G_OBJECT(NumberTrackFormatedSpinButton),"changed",G_CALLBACK(Number_Track_Formatted_Spin_Button_Changed),G_OBJECT(Label));
-    g_signal_emit_by_name(G_OBJECT(NumberTrackFormatedSpinButton),"changed",NULL);
-
-    /* Disc formatting. */
-    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, BOX_SPACING);
-    gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
-
-    pad_disc_number = gtk_check_button_new_with_label (_("Write the disc field with the following number of digits:"));
-    gtk_box_pack_start (GTK_BOX (hbox), pad_disc_number, FALSE, FALSE, 0);
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pad_disc_number),
-                                  PAD_DISC_NUMBER);
-    gtk_widget_set_tooltip_text (pad_disc_number,
-                                 _("Whether to pad the disc field with leading zeroes"));
-
-    pad_disc_number_spinbutton = gtk_spin_button_new_with_range (1.0, 6.0,
-                                                                 1.0);
-    gtk_box_pack_start (GTK_BOX (hbox), pad_disc_number_spinbutton, FALSE,
-                        FALSE, 0);
-    gtk_spin_button_set_value (GTK_SPIN_BUTTON (pad_disc_number_spinbutton),
-                               (gfloat)PAD_DISC_NUMBER_DIGITS);
-    g_signal_connect (G_OBJECT (pad_disc_number), "toggled",
-                      G_CALLBACK (et_prefs_on_pad_disc_number_toggled), NULL);
-    g_signal_emit_by_name (G_OBJECT (pad_disc_number), "toggled");
-
-    /* Label to show the example. */
-    Label = gtk_label_new ("");
-    gtk_box_pack_start (GTK_BOX (hbox), Label, FALSE, FALSE, BOX_SPACING);
-    g_signal_connect_swapped (G_OBJECT (pad_disc_number_spinbutton), "changed",
-                              G_CALLBACK (et_prefs_on_pad_disc_number_spinbutton_changed),
-                              Label);
-    g_signal_emit_by_name (G_OBJECT (pad_disc_number_spinbutton), "changed");
-
-    // Separator line
-    Separator = gtk_separator_new(GTK_ORIENTATION_HORIZONTAL);
-    gtk_box_pack_start(GTK_BOX(vbox),Separator,FALSE,FALSE,0);
-
-    /* Tag field focus */
-    Table = et_grid_new (2, 3);
-    gtk_box_pack_start(GTK_BOX(vbox),Table,FALSE,FALSE,0);
-    /*gtk_grid_set_row_spacing (GTK_GRID (Table), 2);*/
-    gtk_grid_set_column_spacing (GTK_GRID (Table), 2 * BOX_SPACING);
-
-    Label = gtk_label_new(_("Tag field focus when switching files in list with "
-        "shortcuts Page Up/Page Down:"));
-    gtk_grid_attach (GTK_GRID (Table), Label, 0, 0, 2, 1);
-    gtk_misc_set_alignment(GTK_MISC(Label),0,0.5);
-
-    SetFocusToSameTagField = gtk_radio_button_new_with_label(NULL,
-        _("Keep focus to the same tag field"));
-    gtk_grid_attach (GTK_GRID (Table), SetFocusToSameTagField, 1, 1, 1, 1);
-    //gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(SetFocusToSameTagField),SET_FOCUS_TO_SAME_TAG_FIELD);
-
-    SetFocusToFirstTagField = gtk_radio_button_new_with_label(
-        gtk_radio_button_get_group(GTK_RADIO_BUTTON(SetFocusToSameTagField)),
-        _("Return focus to the first tag field (i.e. 'Title' field)"));
-    gtk_grid_attach (GTK_GRID (Table), SetFocusToFirstTagField, 1, 2, 1, 1);
-    //gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(SetFocusToFirstTagField),SET_FOCUS_TO_FIRST_TAG_FIELD);
-    
-    /* Tag Splitting */
-    Frame = gtk_frame_new (_("Tag Splitting"));
-    gtk_box_pack_start(GTK_BOX(VBox),Frame,FALSE,FALSE,0);
-
-    Table = et_grid_new (5, 2);
-    gtk_container_add(GTK_CONTAINER(Frame),Table);
-    gtk_container_set_border_width (GTK_CONTAINER (Table), BOX_SPACING);
-    gtk_grid_set_column_spacing (GTK_GRID (Table), BOX_SPACING);
-    gtk_grid_set_row_spacing (GTK_GRID (Table), BOX_SPACING);
-    
-    Label = gtk_label_new(_("For Vorbis tags, selected fields will be split at dashes and saved as separate tags"));
-    gtk_grid_attach (GTK_GRID (Table), Label, 0, 0, 2, 1);
-    gtk_misc_set_alignment(GTK_MISC(Label),0,0.5);
-
-    VorbisSplitFieldTitle = gtk_check_button_new_with_label(_("Title"));
-    VorbisSplitFieldArtist = gtk_check_button_new_with_label(_("Artist"));
-    VorbisSplitFieldAlbum = gtk_check_button_new_with_label(_("Album"));
-    VorbisSplitFieldGenre = gtk_check_button_new_with_label(_("Genre"));
-    VorbisSplitFieldComment = gtk_check_button_new_with_label(_("Comment"));
-    VorbisSplitFieldComposer = gtk_check_button_new_with_label(_("Composer"));
-    VorbisSplitFieldOrigArtist = gtk_check_button_new_with_label(_("Original artist"));
-
-    gtk_grid_attach (GTK_GRID (Table), VorbisSplitFieldTitle, 0, 1, 1, 1);
-    gtk_grid_attach (GTK_GRID (Table), VorbisSplitFieldArtist, 0, 2, 1, 1);
-    gtk_grid_attach (GTK_GRID (Table), VorbisSplitFieldAlbum, 0, 3, 1, 1);
-    gtk_grid_attach (GTK_GRID (Table), VorbisSplitFieldGenre, 0, 4, 1, 1);
-    gtk_grid_attach (GTK_GRID (Table), VorbisSplitFieldComment, 1, 1, 1, 1);
-    gtk_grid_attach (GTK_GRID (Table), VorbisSplitFieldComposer, 1, 2, 1, 1);
-    gtk_grid_attach (GTK_GRID (Table), VorbisSplitFieldOrigArtist, 1, 3, 1, 1);
-
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(VorbisSplitFieldTitle), VORBIS_SPLIT_FIELD_TITLE);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(VorbisSplitFieldArtist), VORBIS_SPLIT_FIELD_ARTIST);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(VorbisSplitFieldAlbum), VORBIS_SPLIT_FIELD_ALBUM);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(VorbisSplitFieldGenre), VORBIS_SPLIT_FIELD_GENRE);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(VorbisSplitFieldComment), VORBIS_SPLIT_FIELD_COMMENT);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(VorbisSplitFieldComposer), VORBIS_SPLIT_FIELD_COMPOSER);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(VorbisSplitFieldOrigArtist), VORBIS_SPLIT_FIELD_ORIG_ARTIST);
-
-    /*
-     * ID3 Tag Settings
-     */
-    Label = gtk_label_new (_("ID3 Tag Settings"));
-    VBox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
-#ifdef ENABLE_MP3
-    gtk_notebook_append_page (GTK_NOTEBOOK (OptionsNoteBook), VBox, Label);
-#endif
-    gtk_container_set_border_width (GTK_CONTAINER (VBox), BOX_SPACING);
-
-
-    /* Tag Rules frame */
-    Frame = gtk_frame_new (_("ID3 Tag Rules"));
-    gtk_box_pack_start(GTK_BOX(VBox),Frame,FALSE,FALSE,0);
-    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
-    gtk_container_add(GTK_CONTAINER(Frame),vbox);
-    gtk_container_set_border_width (GTK_CONTAINER (vbox), BOX_SPACING);
-
-    Table = et_grid_new (3, 2);
-    gtk_box_pack_start(GTK_BOX(vbox),Table,FALSE,FALSE,0);
-    gtk_grid_set_row_spacing (GTK_GRID (Table), BOX_SPACING);
-    gtk_grid_set_column_spacing (GTK_GRID (Table), BOX_SPACING);
-
-    /* Strip tag when fields (managed by EasyTAG) are empty */
-    StripTagWhenEmptyFields = gtk_check_button_new_with_label(_("Strip tags if all fields are set to blank"));
-    gtk_grid_attach (GTK_GRID (Table), StripTagWhenEmptyFields, 0, 0, 1, 1);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(StripTagWhenEmptyFields),STRIP_TAG_WHEN_EMPTY_FIELDS);
-    gtk_widget_set_tooltip_text(StripTagWhenEmptyFields,_("As ID3v2 tags may contain other data than "
-        "Title, Artist, Album, Year, Track, Genre or Comment (as an attached image, lyrics…), "
-        "this option allows you to strip the whole tag when these seven standard data fields have "
-        "been set to blank."));
-
-    /* Convert old ID3v2 tag version */
-    ConvertOldId3v2TagVersion = gtk_check_button_new_with_label(_("Automatically convert old ID3v2 tag versions"));
-    gtk_grid_attach (GTK_GRID (Table), ConvertOldId3v2TagVersion, 0, 1, 1, 1);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ConvertOldId3v2TagVersion),CONVERT_OLD_ID3V2_TAG_VERSION);
-    gtk_widget_set_tooltip_text(ConvertOldId3v2TagVersion,_("If activated, an old ID3v2 tag version (as "
-        "ID3v2.2) will be updated to the ID3v2.3 version."));
-
-    /* Use CRC32 */
-    FileWritingId3v2UseCrc32 = gtk_check_button_new_with_label(_("Use CRC32"));
-    gtk_grid_attach (GTK_GRID (Table), FileWritingId3v2UseCrc32, 1, 0, 1, 1);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(FileWritingId3v2UseCrc32),FILE_WRITING_ID3V2_USE_CRC32);
-    gtk_widget_set_tooltip_text(FileWritingId3v2UseCrc32,_("Set CRC32 in the ID3v2 tags"));
-
-    /* Use Compression */
-    FileWritingId3v2UseCompression = gtk_check_button_new_with_label(_("Use Compression"));
-    gtk_grid_attach (GTK_GRID (Table), FileWritingId3v2UseCompression, 1, 1, 1,
-                     1);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(FileWritingId3v2UseCompression),FILE_WRITING_ID3V2_USE_COMPRESSION);
-    gtk_widget_set_tooltip_text(FileWritingId3v2UseCompression,_("Set Compression in the ID3v2 tags"));
-	
-    /* Write Genre in text */
-    FileWritingId3v2TextOnlyGenre = gtk_check_button_new_with_label(_("Write Genre in text only"));
-    gtk_grid_attach (GTK_GRID (Table), FileWritingId3v2TextOnlyGenre, 0, 2, 1,
-                     1);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(FileWritingId3v2TextOnlyGenre),FILE_WRITING_ID3V2_TEXT_ONLY_GENRE);
-    gtk_widget_set_tooltip_text(FileWritingId3v2TextOnlyGenre,_("Don't use ID3v1 number references in genre tag. Enable this if you see numbers as genre in your music player."));	
-
-    /* Character Set for writing ID3 tag */
-    Frame = gtk_frame_new (_("Character Set for writing ID3 tags"));
-    gtk_box_pack_start(GTK_BOX(VBox),Frame,FALSE,FALSE,0);
-    id3v1v2hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, BOX_SPACING);
-    gtk_container_add(GTK_CONTAINER(Frame),id3v1v2hbox);
-    gtk_container_set_border_width (GTK_CONTAINER (id3v1v2hbox), BOX_SPACING);
-
-    // ID3v2 tags
-    Frame = gtk_frame_new (_("ID3v2 tags"));
-    gtk_box_pack_start(GTK_BOX(id3v1v2hbox),Frame,FALSE,FALSE,2);
-
-    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
-    gtk_container_add(GTK_CONTAINER(Frame),vbox);
-    gtk_container_set_border_width (GTK_CONTAINER (vbox), BOX_SPACING);
-
-    Table = et_grid_new (8, 6);
-    gtk_box_pack_start(GTK_BOX(vbox),Table,FALSE,FALSE,0);
-    gtk_grid_set_row_spacing (GTK_GRID (Table), BOX_SPACING);
-    gtk_grid_set_column_spacing (GTK_GRID (Table), BOX_SPACING);
-
-    /* Write ID3v2 tag */
-    FileWritingId3v2WriteTag = gtk_check_button_new_with_label(_("Write ID3v2 tag"));
-    gtk_grid_attach (GTK_GRID (Table), FileWritingId3v2WriteTag, 0, 0, 5, 1);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(FileWritingId3v2WriteTag),FILE_WRITING_ID3V2_WRITE_TAG);
-    gtk_widget_set_tooltip_text(FileWritingId3v2WriteTag,_("If activated, an ID3v2.4 tag will be added or "
-        "updated at the beginning of the MP3 files. Else it will be stripped."));
-    g_signal_connect_after(G_OBJECT(FileWritingId3v2WriteTag),"toggled",
-        G_CALLBACK(Change_Id3_Settings_Toggled),NULL);
-
-#ifdef ENABLE_ID3LIB
-    /* ID3v2 tag version */
-    LabelId3v2Version = gtk_label_new(_("Version:"));
-    gtk_grid_attach (GTK_GRID (Table), LabelId3v2Version, 0, 1, 2, 1);
-    gtk_misc_set_alignment(GTK_MISC(LabelId3v2Version),0,0.5);
-
-    FileWritingId3v2VersionCombo = gtk_combo_box_text_new();
-    gtk_widget_set_tooltip_text (FileWritingId3v2VersionCombo,
-                                 _("Select the ID3v2 tag version to write:\n"
-                                   " - ID3v2.3 is written using id3lib,\n"
-                                   " - ID3v2.4 is written using libid3tag (recommended)."));
-    gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(FileWritingId3v2VersionCombo), "ID3v2.4");
-    gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(FileWritingId3v2VersionCombo), "ID3v2.3");
-    gtk_combo_box_set_active(GTK_COMBO_BOX(FileWritingId3v2VersionCombo),
-        FILE_WRITING_ID3V2_VERSION_4 ? 0 : 1);
-    gtk_grid_attach (GTK_GRID (Table), FileWritingId3v2VersionCombo, 2, 1, 2,
-                     1);
-    g_signal_connect_after(G_OBJECT(FileWritingId3v2VersionCombo),"changed",
-        G_CALLBACK(Change_Id3_Settings_Toggled),NULL);
-#endif
-
-
-    /* Charset */
-    LabelId3v2Charset = gtk_label_new(_("Charset:"));
-    gtk_grid_attach (GTK_GRID (Table), LabelId3v2Charset, 0, 2, 5, 1);
-    gtk_misc_set_alignment(GTK_MISC(LabelId3v2Charset),0,0.5);
-
-    // Unicode
-    FileWritingId3v2UseUnicodeCharacterSet = gtk_radio_button_new_with_label(NULL, _("Unicode "));
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(FileWritingId3v2UseUnicodeCharacterSet),
-        FILE_WRITING_ID3V2_USE_UNICODE_CHARACTER_SET);
-    gtk_grid_attach (GTK_GRID (Table), FileWritingId3v2UseUnicodeCharacterSet,
-                     1, 3, 1, 1);
-
-    FileWritingId3v2UnicodeCharacterSetCombo = gtk_combo_box_text_new();
-    gtk_widget_set_tooltip_text(FileWritingId3v2UnicodeCharacterSetCombo,
-                                _("Unicode type to use"));
-    gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(FileWritingId3v2UnicodeCharacterSetCombo), "UTF-8");
-    gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(FileWritingId3v2UnicodeCharacterSetCombo), "UTF-16");
-    if ( FILE_WRITING_ID3V2_UNICODE_CHARACTER_SET == NULL )
-        gtk_combo_box_set_active(GTK_COMBO_BOX(FileWritingId3v2UnicodeCharacterSetCombo), 0); // Set UTF-8 by default
-    else
-        gtk_combo_box_set_active(GTK_COMBO_BOX(FileWritingId3v2UnicodeCharacterSetCombo),
-            strcmp(FILE_WRITING_ID3V2_UNICODE_CHARACTER_SET, "UTF-8") ? 1 : 0);
-    gtk_grid_attach (GTK_GRID (Table),
-                     FileWritingId3v2UnicodeCharacterSetCombo, 2, 3, 2, 1);
-    g_signal_connect_after(G_OBJECT(FileWritingId3v2UseUnicodeCharacterSet),"toggled",
-        G_CALLBACK(Change_Id3_Settings_Toggled),NULL);
-
-    // Non-unicode
-    FileWritingId3v2UseNoUnicodeCharacterSet = gtk_radio_button_new_with_label(
-        gtk_radio_button_get_group(GTK_RADIO_BUTTON(FileWritingId3v2UseUnicodeCharacterSet)),
-        _("Other"));
-    gtk_grid_attach (GTK_GRID (Table),
-                     FileWritingId3v2UseNoUnicodeCharacterSet, 1, 4, 1, 1);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(FileWritingId3v2UseNoUnicodeCharacterSet),
-        !FILE_WRITING_ID3V2_USE_UNICODE_CHARACTER_SET);
-
-    FileWritingId3v2NoUnicodeCharacterSetCombo = gtk_combo_box_text_new();
-    gtk_widget_set_tooltip_text (FileWritingId3v2NoUnicodeCharacterSetCombo,
-                                 _("Character set used to write the tag data in the file."));
-
-    Charset_Populate_Combobox(GTK_COMBO_BOX(FileWritingId3v2NoUnicodeCharacterSetCombo), 
-        FILE_WRITING_ID3V2_NO_UNICODE_CHARACTER_SET);
-    gtk_grid_attach (GTK_GRID (Table),
-                     FileWritingId3v2NoUnicodeCharacterSetCombo, 2, 4, 3, 1);
-    g_signal_connect_after(G_OBJECT(FileWritingId3v2UseNoUnicodeCharacterSet),"toggled",
-        G_CALLBACK(Change_Id3_Settings_Toggled),NULL);
-    
-    // ID3v2 Additional iconv() options
-    LabelAdditionalId3v2IconvOptions = gtk_label_new(_("Additional settings for iconv():"));
-    gtk_grid_attach (GTK_GRID (Table), LabelAdditionalId3v2IconvOptions, 2, 5,
-                     3, 1);
-    gtk_misc_set_alignment(GTK_MISC(LabelAdditionalId3v2IconvOptions),0,0.5);
-
-    FileWritingId3v2IconvOptionsNo = gtk_radio_button_new_with_label(NULL,
-        _("No"));
-    gtk_grid_attach (GTK_GRID (Table), FileWritingId3v2IconvOptionsNo, 2, 6, 1,
-                     1);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(FileWritingId3v2IconvOptionsNo),FILE_WRITING_ID3V2_ICONV_OPTIONS_NO);
-    gtk_widget_set_tooltip_text(FileWritingId3v2IconvOptionsNo,_("With this option, when "
-        "a character cannot be represented in the target character set, it isn't changed. "
-        "But note that an error message will be displayed for information."));
-    FileWritingId3v2IconvOptionsTranslit = gtk_radio_button_new_with_label(
-        gtk_radio_button_get_group(GTK_RADIO_BUTTON(FileWritingId3v2IconvOptionsNo)),
-        _("//TRANSLIT"));
-    gtk_grid_attach (GTK_GRID (Table), FileWritingId3v2IconvOptionsTranslit, 3,
-                     6, 1, 1);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(FileWritingId3v2IconvOptionsTranslit),FILE_WRITING_ID3V2_ICONV_OPTIONS_TRANSLIT);
-    gtk_widget_set_tooltip_text(FileWritingId3v2IconvOptionsTranslit,_("With this option, when "
-        "a character cannot be represented in the target character set, it can be "
-        "approximated through one or several similarly looking characters."));
-
-    FileWritingId3v2IconvOptionsIgnore = gtk_radio_button_new_with_label(
-        gtk_radio_button_get_group(GTK_RADIO_BUTTON(FileWritingId3v2IconvOptionsNo)),
-        _("//IGNORE"));
-    gtk_grid_attach (GTK_GRID (Table), FileWritingId3v2IconvOptionsIgnore, 4,
-                     6, 1, 1);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(FileWritingId3v2IconvOptionsIgnore),FILE_WRITING_ID3V2_ICONV_OPTIONS_IGNORE);
-    gtk_widget_set_tooltip_text(FileWritingId3v2IconvOptionsIgnore,_("With this option, when "
-        "a character cannot be represented in the target character set, it will "
-        "be silently discarded."));
-
-    // ID3v1 tags
-    Frame = gtk_frame_new (_("ID3v1 tags"));
-    gtk_box_pack_start(GTK_BOX(id3v1v2hbox),Frame,FALSE,FALSE,2);
-
-    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
-    gtk_container_add(GTK_CONTAINER(Frame),vbox);
-    gtk_container_set_border_width (GTK_CONTAINER (vbox), BOX_SPACING);
-
-    Table = et_grid_new (6, 5);
-    gtk_box_pack_start(GTK_BOX(vbox),Table,FALSE,FALSE,0);
-    gtk_grid_set_row_spacing (GTK_GRID (Table), BOX_SPACING);
-    gtk_grid_set_column_spacing (GTK_GRID (Table), BOX_SPACING);
-
-
-    /* Write ID3v1 tag */
-    FileWritingId3v1WriteTag = gtk_check_button_new_with_label(_("Write ID3v1.x tag"));
-    gtk_grid_attach (GTK_GRID (Table), FileWritingId3v1WriteTag, 0, 0, 4, 1);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(FileWritingId3v1WriteTag),FILE_WRITING_ID3V1_WRITE_TAG);
-    gtk_widget_set_tooltip_text(FileWritingId3v1WriteTag,_("If activated, an ID3v1 tag will be added or "
-        "updated at the end of the MP3 files. Else it will be stripped."));
-    g_signal_connect_after(G_OBJECT(FileWritingId3v1WriteTag),"toggled",
-        G_CALLBACK(Change_Id3_Settings_Toggled),NULL);
-
-    /* Id3V1 writing character set */
-    LabelId3v1Charset = gtk_label_new(_("Charset:"));
-    gtk_grid_attach (GTK_GRID (Table), LabelId3v1Charset, 0, 1, 4, 1);
-    gtk_misc_set_alignment(GTK_MISC(LabelId3v1Charset),0,0.5);
-
-    FileWritingId3v1CharacterSetCombo = gtk_combo_box_text_new();
-    gtk_grid_attach (GTK_GRID (Table), FileWritingId3v1CharacterSetCombo, 1, 2,
-                     3, 1);
-    gtk_widget_set_tooltip_text (FileWritingId3v1CharacterSetCombo,
-                                 _("Character set used to write ID3v1 tag data in the file."));
-    Charset_Populate_Combobox(GTK_COMBO_BOX(FileWritingId3v1CharacterSetCombo), FILE_WRITING_ID3V1_CHARACTER_SET);
-
-    /* ID3V1 Additional iconv() options*/
-    LabelAdditionalId3v1IconvOptions = gtk_label_new(_("Additional settings for iconv():"));
-    gtk_grid_attach (GTK_GRID (Table), LabelAdditionalId3v1IconvOptions, 1, 3,
-                     3, 1);
-    gtk_misc_set_alignment(GTK_MISC(LabelAdditionalId3v1IconvOptions),0,0.5);
-
-    FileWritingId3v1IconvOptionsNo = gtk_radio_button_new_with_label(NULL,
-        _("No"));
-    gtk_grid_attach (GTK_GRID (Table), FileWritingId3v1IconvOptionsNo, 1, 4, 1,
-                     1);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(FileWritingId3v1IconvOptionsNo),FILE_WRITING_ID3V1_ICONV_OPTIONS_NO);
-    gtk_widget_set_tooltip_text(FileWritingId3v1IconvOptionsNo,_("With this option, when "
-        "a character cannot be represented in the target character set, it isn't changed. "
-        "But note that an error message will be displayed for information."));
-    FileWritingId3v1IconvOptionsTranslit = gtk_radio_button_new_with_label(
-        gtk_radio_button_get_group(GTK_RADIO_BUTTON(FileWritingId3v1IconvOptionsNo)),
-        _("//TRANSLIT"));
-    gtk_grid_attach (GTK_GRID (Table), FileWritingId3v1IconvOptionsTranslit, 2,
-                     4, 1, 1);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(FileWritingId3v1IconvOptionsTranslit),FILE_WRITING_ID3V1_ICONV_OPTIONS_TRANSLIT);
-    gtk_widget_set_tooltip_text(FileWritingId3v1IconvOptionsTranslit,_("With this option, when "
-        "a character cannot be represented in the target character set, it can be "
-        "approximated through one or several similarly looking characters."));
-
-    FileWritingId3v1IconvOptionsIgnore = gtk_radio_button_new_with_label(
-        gtk_radio_button_get_group(GTK_RADIO_BUTTON(FileWritingId3v1IconvOptionsNo)),
-        _("//IGNORE"));
-    gtk_grid_attach (GTK_GRID (Table), FileWritingId3v1IconvOptionsIgnore, 3,
-                     4, 1, 1);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(FileWritingId3v1IconvOptionsIgnore),FILE_WRITING_ID3V1_ICONV_OPTIONS_IGNORE);
-    gtk_widget_set_tooltip_text(FileWritingId3v1IconvOptionsIgnore,_("With this option, when "
-        "a character cannot be represented in the target character set, it will "
-        "be silently discarded."));
-
-    /* Character Set for reading tag */
-    Frame = gtk_frame_new (_("Character Set for reading ID3 tags"));
-    gtk_box_pack_start(GTK_BOX(VBox),Frame,FALSE,FALSE,0);
-    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
-    gtk_container_add(GTK_CONTAINER(Frame),vbox);
-    gtk_container_set_border_width (GTK_CONTAINER (vbox), BOX_SPACING);
-
-    Table = et_grid_new(4,2);
-    gtk_box_pack_start(GTK_BOX(vbox),Table,FALSE,FALSE,0);
-    //gtk_container_set_border_width(GTK_CONTAINER(Table), 2);
-    /*gtk_grid_set_row_spacing (GTK_GRID (Table), 2);*/
-    gtk_grid_set_column_spacing (GTK_GRID (Table), BOX_SPACING);
-
-    // "File Reading Charset" Check Button + Combo
-    UseNonStandardId3ReadingCharacterSet = gtk_check_button_new_with_label(_(
-        "Non-standard:"));
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(UseNonStandardId3ReadingCharacterSet),
-        USE_NON_STANDARD_ID3_READING_CHARACTER_SET);
-    gtk_grid_attach (GTK_GRID (Table), UseNonStandardId3ReadingCharacterSet, 0,
-                     0, 1, 1);
-    gtk_widget_set_tooltip_text(UseNonStandardId3ReadingCharacterSet,
-        _("This character set will be used when reading the tag data, to convert "
-        "each string found in an ISO-8859-1 field in the tag (for ID3v2 or/and ID3v1 tag).\n"
-        "\n"
-        "For example:\n"
-        "  - In previous versions of EasyTAG, you could save UTF-8 strings in an ISO-8859-1 "
-        "field. This is not correct. To convert these tags to Unicode: activate this option "
-        "and select UTF-8. You must also activate above the option 'Try to save tags to "
-        "ISO-8859-1. If it isn't possible then use UNICODE (recommended)' or 'Always save "
-        "tags to UNICODE character set'.\n"
-        "  - If Unicode was not used, Russian people can select the character set "
-        "'Windows-1251' to load tags written under Windows. And 'KOI8-R' to load tags "
-        "written under Unix systems."));
-
-    FileReadingId3v1v2CharacterSetCombo = gtk_combo_box_text_new();
-    gtk_grid_attach (GTK_GRID (Table), FileReadingId3v1v2CharacterSetCombo, 2,
-                     0, 1, 1);
-
-    gtk_widget_set_tooltip_text (FileReadingId3v1v2CharacterSetCombo,
-                                 _("Character set used to read tag data in the file."));
-
-    Charset_Populate_Combobox(GTK_COMBO_BOX(FileReadingId3v1v2CharacterSetCombo), 
-        FILE_READING_ID3V1V2_CHARACTER_SET);
-    g_signal_connect_after(G_OBJECT(UseNonStandardId3ReadingCharacterSet),"toggled",
-                           G_CALLBACK(Use_Non_Standard_Id3_Reading_Character_Set_Toggled),NULL);
-
-    Use_Non_Standard_Id3_Reading_Character_Set_Toggled();
-    Change_Id3_Settings_Toggled();
-
-
-    /*
-     * Scanner
-     */
-    Label = gtk_label_new (_("Scanner"));
-    VBox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
-    gtk_notebook_append_page (GTK_NOTEBOOK(OptionsNoteBook), VBox, Label);
-    gtk_container_set_border_width (GTK_CONTAINER (VBox), BOX_SPACING);
-
-    /* Save the number of the page. Asked in Scanner window */
-    OptionsNoteBook_Scanner_Page_Num = gtk_notebook_page_num (GTK_NOTEBOOK (OptionsNoteBook),
-                                                              VBox);
-
-    /* Character conversion for the 'Fill Tag' scanner (=> FTS...) */
-    Frame = gtk_frame_new (_("Fill Tag Scanner - Character Conversion"));
-    gtk_box_pack_start(GTK_BOX(VBox),Frame,FALSE,FALSE,0);
-    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
-    gtk_container_add(GTK_CONTAINER(Frame),vbox);
-    gtk_container_set_border_width (GTK_CONTAINER (vbox), BOX_SPACING);
-
-    FTSConvertUnderscoreAndP20IntoSpace = gtk_check_button_new_with_label(_("Convert underscore "
-        "character '_' and string '%20' to space ' '"));
-    FTSConvertSpaceIntoUnderscore = gtk_check_button_new_with_label(_("Convert space ' ' to underscore '_'"));
-    gtk_box_pack_start(GTK_BOX(vbox),FTSConvertUnderscoreAndP20IntoSpace,FALSE,FALSE,0);
-    gtk_box_pack_start(GTK_BOX(vbox),FTSConvertSpaceIntoUnderscore,      FALSE,FALSE,0);
-    g_signal_connect_swapped(G_OBJECT(FTSConvertUnderscoreAndP20IntoSpace),"toggled",
-        G_CALLBACK(Scanner_Convert_Check_Button_Toggled_1),G_OBJECT(FTSConvertSpaceIntoUnderscore));
-    g_signal_connect_swapped(G_OBJECT(FTSConvertSpaceIntoUnderscore),"toggled",
-        G_CALLBACK(Scanner_Convert_Check_Button_Toggled_1),G_OBJECT(FTSConvertUnderscoreAndP20IntoSpace));
-
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(FTSConvertUnderscoreAndP20IntoSpace),
-        FTS_CONVERT_UNDERSCORE_AND_P20_INTO_SPACE);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(FTSConvertSpaceIntoUnderscore),
-        FTS_CONVERT_SPACE_INTO_UNDERSCORE);
-    gtk_widget_set_tooltip_text(FTSConvertUnderscoreAndP20IntoSpace,_("If activated, this conversion "
-        "will be used when applying a mask from the scanner for tags."));
-    gtk_widget_set_tooltip_text(FTSConvertSpaceIntoUnderscore,_("If activated, this conversion "
-        "will be used when applying a mask from the scanner for tags."));
-
-    /* Character conversion for the 'Rename File' scanner (=> RFS...) */
-    Frame = gtk_frame_new (_("Rename File Scanner - Character Conversion"));
-    gtk_box_pack_start(GTK_BOX(VBox),Frame,FALSE,FALSE,0);
-    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
-    gtk_container_add(GTK_CONTAINER(Frame),vbox);
-    gtk_container_set_border_width (GTK_CONTAINER (vbox), BOX_SPACING);
-    RFSConvertUnderscoreAndP20IntoSpace = gtk_radio_button_new_with_label(NULL, _("Convert underscore " "character '_' and string '%20' to space ' '"));
-    RFSConvertSpaceIntoUnderscore = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(RFSConvertUnderscoreAndP20IntoSpace), _("Convert space ' ' to underscore '_'"));
-		RFSRemoveSpaces = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(RFSConvertUnderscoreAndP20IntoSpace), _("Remove spaces"));
-    gtk_box_pack_start(GTK_BOX(vbox),RFSConvertUnderscoreAndP20IntoSpace,FALSE,FALSE,0);
-    gtk_box_pack_start(GTK_BOX(vbox),RFSConvertSpaceIntoUnderscore,      FALSE,FALSE,0);
-    gtk_box_pack_start (GTK_BOX (vbox), RFSRemoveSpaces, FALSE, FALSE, 0);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(RFSConvertUnderscoreAndP20IntoSpace),
-        RFS_CONVERT_UNDERSCORE_AND_P20_INTO_SPACE);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(RFSConvertSpaceIntoUnderscore),
-        RFS_CONVERT_SPACE_INTO_UNDERSCORE);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(RFSRemoveSpaces),
-        RFS_REMOVE_SPACES);
-    gtk_widget_set_tooltip_text(RFSConvertUnderscoreAndP20IntoSpace,_("If activated, this conversion "
-        "will be used when applying a mask from the scanner for filenames."));
-    gtk_widget_set_tooltip_text(RFSConvertSpaceIntoUnderscore,_("If activated, this conversion "
-        "will be used when applying a mask from the scanner for filenames."));
-    gtk_widget_set_tooltip_text(RFSRemoveSpaces,_("If activated, this conversion "        "will be used when applying a mask from the scanner for filenames."));
-
-    /* Character conversion for the 'Process Fields' scanner (=> PFS...) */
-    Frame = gtk_frame_new (_("Process Fields Scanner - Character Conversion"));
-    gtk_box_pack_start(GTK_BOX(VBox),Frame,FALSE,FALSE,0);
-    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
-    gtk_container_add(GTK_CONTAINER(Frame),vbox);
-    gtk_container_set_border_width (GTK_CONTAINER (vbox), BOX_SPACING);
-
-    // Don't convert some words like to, feat. first letter uppercase.
-    PFSDontUpperSomeWords = gtk_check_button_new_with_label(_("Don't uppercase "
-        "first letter of words for some prepositions and articles."));
-    gtk_box_pack_start(GTK_BOX(vbox),PFSDontUpperSomeWords, FALSE, FALSE, 0);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(PFSDontUpperSomeWords), PFS_DONT_UPPER_SOME_WORDS);
-    gtk_widget_set_tooltip_text(PFSDontUpperSomeWords, _("Don't convert first "
-        "letter of words like prepositions, articles and words like feat., "
-        "when using the scanner 'First letter uppercase of each word' (for "
-        "example, you will obtain 'Text in an Entry' instead of 'Text In An Entry')."));
-
-    /* Properties of the scanner window */
-    Frame = gtk_frame_new (_("Scanner Window"));
-    gtk_box_pack_start(GTK_BOX(VBox),Frame,FALSE,FALSE,0);
-    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
-    gtk_container_add(GTK_CONTAINER(Frame),vbox);
-    gtk_container_set_border_width (GTK_CONTAINER (vbox), BOX_SPACING);
-
-    OpenScannerWindowOnStartup = gtk_check_button_new_with_label(_("Open the Scanner Window on startup"));
-    gtk_box_pack_start(GTK_BOX(vbox),OpenScannerWindowOnStartup,FALSE,FALSE,0);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(OpenScannerWindowOnStartup),OPEN_SCANNER_WINDOW_ON_STARTUP);
-    gtk_widget_set_tooltip_text(OpenScannerWindowOnStartup,_("Activate this option to open automatically "
-        "the scanner window when EasyTAG starts."));
-
-
-    /* Other options */
-    Frame = gtk_frame_new (_("Fields"));
-    gtk_box_pack_start(GTK_BOX(VBox),Frame,FALSE,FALSE,0);
-    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
-    gtk_container_add(GTK_CONTAINER(Frame),vbox);
-    gtk_container_set_border_width (GTK_CONTAINER (vbox), BOX_SPACING);
-
-    // Overwrite text into tag fields
-    OverwriteTagField = gtk_check_button_new_with_label(_("Overwrite fields when scanning tags"));
-    gtk_box_pack_start(GTK_BOX(vbox),OverwriteTagField,FALSE,FALSE,0);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(OverwriteTagField),OVERWRITE_TAG_FIELD);
-    gtk_widget_set_tooltip_text(OverwriteTagField,_("If activated, the scanner will replace existing text "
-        "in fields by the new one. If deactivated, only blank fields of the tag will be filled."));
-
-    // Set a default comment text or CRC-32 checksum
-    if (!DefaultCommentModel)
-        DefaultCommentModel = gtk_list_store_new(MISC_COMBO_COUNT, G_TYPE_STRING);
-    else
-        gtk_list_store_clear(DefaultCommentModel);
-
-    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, BOX_SPACING);
-    gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,0);
-    SetDefaultComment = gtk_check_button_new_with_label(_("Set this text as default comment:"));
-    gtk_box_pack_start(GTK_BOX(hbox),SetDefaultComment,FALSE,FALSE,0);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(SetDefaultComment),SET_DEFAULT_COMMENT);
-    gtk_widget_set_tooltip_text(SetDefaultComment,_("Activate this option if you want to put the "
-        "following string into the comment field when using the 'Fill Tag' scanner."));
-    DefaultComment = gtk_combo_box_new_with_model_and_entry(GTK_TREE_MODEL(DefaultCommentModel));
-    gtk_combo_box_set_entry_text_column(GTK_COMBO_BOX(DefaultComment),MISC_COMBO_TEXT);
-    gtk_box_pack_start(GTK_BOX(hbox),DefaultComment,FALSE,FALSE,0);
-    gtk_widget_set_size_request(GTK_WIDGET(DefaultComment), 250, -1);
-    g_signal_connect(G_OBJECT(SetDefaultComment),"toggled",
-            G_CALLBACK(Set_Default_Comment_Check_Button_Toggled),NULL);
-    if (DEFAULT_COMMENT==NULL)
-        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(SetDefaultComment),FALSE);
-    Set_Default_Comment_Check_Button_Toggled();
-    /* History list */
-    Load_Default_Tag_Comment_Text_List(DefaultCommentModel, MISC_COMBO_TEXT);
-    Add_String_To_Combo_List(DefaultCommentModel, DEFAULT_COMMENT);
-    if (DEFAULT_COMMENT)
-        gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(DefaultComment))), DEFAULT_COMMENT);
-
-    // CRC32 comment
-    Crc32Comment = gtk_check_button_new_with_label(_("Use CRC32 as the default "
-        "comment (for files with ID3 tags only)."));
-    gtk_box_pack_start(GTK_BOX(vbox),Crc32Comment,FALSE,FALSE,0);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(Crc32Comment),SET_CRC32_COMMENT);
-    gtk_widget_set_tooltip_text(Crc32Comment,_("Calculates the CRC-32 value of the file "
-        "and writes it into the comment field when using the 'Fill Tag' scanner."));
-    g_signal_connect_swapped(G_OBJECT(SetDefaultComment), "toggled",
-        G_CALLBACK(Scanner_Convert_Check_Button_Toggled_1),G_OBJECT(Crc32Comment));
-    g_signal_connect_swapped(G_OBJECT(Crc32Comment), "toggled",
-        G_CALLBACK(Scanner_Convert_Check_Button_Toggled_1),G_OBJECT(SetDefaultComment));
-
-
-    /*
-     * CDDB
-     */
-    Label = gtk_label_new (_("CDDB"));
-    VBox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
-    gtk_notebook_append_page (GTK_NOTEBOOK (OptionsNoteBook), VBox, Label);
-    gtk_container_set_border_width (GTK_CONTAINER (VBox), BOX_SPACING);
-
-    // CDDB Server Settings (Automatic Search)
-    Frame = gtk_frame_new (_("Server Settings for Automatic Search"));
-    gtk_box_pack_start(GTK_BOX(VBox),Frame,FALSE,FALSE, 0);
-    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
-    gtk_container_add(GTK_CONTAINER(Frame),vbox);
-    gtk_container_set_border_width (GTK_CONTAINER (vbox), BOX_SPACING);
-
-    // 1rst automatic search server
-    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, BOX_SPACING);
-    gtk_container_add(GTK_CONTAINER(vbox),hbox);
-    Label = gtk_label_new(_("Name:"));
-    gtk_box_pack_start(GTK_BOX(hbox),Label,FALSE,FALSE,2);
-    CddbServerNameAutomaticSearch = gtk_combo_box_text_new_with_entry();
-    gtk_box_pack_start(GTK_BOX(hbox),CddbServerNameAutomaticSearch,FALSE,FALSE,0);
-    gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(CddbServerNameAutomaticSearch), "freedb.freedb.org");
-    gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(CddbServerNameAutomaticSearch), "www.gnudb.org");
-    gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(CddbServerNameAutomaticSearch), "at.freedb.org");
-    gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(CddbServerNameAutomaticSearch), "au.freedb.org");
-    gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(CddbServerNameAutomaticSearch), "ca.freedb.org");
-    //gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(CddbServerNameAutomaticSearch), "ca2.freedb.org");
-    //gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(CddbServerNameAutomaticSearch), "de.freedb.org");
-    gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(CddbServerNameAutomaticSearch), "es.freedb.org");
-    gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(CddbServerNameAutomaticSearch), "fi.freedb.org");
-    gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(CddbServerNameAutomaticSearch), "ru.freedb.org");
-    gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(CddbServerNameAutomaticSearch), "uk.freedb.org");
-    gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(CddbServerNameAutomaticSearch), "us.freedb.org");
-    if (CDDB_SERVER_NAME_AUTOMATIC_SEARCH)
-        gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(CddbServerNameAutomaticSearch))),CDDB_SERVER_NAME_AUTOMATIC_SEARCH);
-
-    Label = gtk_label_new (_("Port:"));
-    gtk_box_pack_start(GTK_BOX(hbox),Label,FALSE,FALSE,2);
-    CddbServerPortAutomaticSearch = gtk_spin_button_new_with_range (0.0,
-                                                                    65535.0,
-                                                                    1.0);
-    gtk_widget_set_size_request(GTK_WIDGET(CddbServerPortAutomaticSearch), 45, -1);
-    gtk_box_pack_start(GTK_BOX(hbox),CddbServerPortAutomaticSearch,FALSE,FALSE,0);
-    gtk_spin_button_set_value (GTK_SPIN_BUTTON (CddbServerPortAutomaticSearch),
-                               CDDB_SERVER_PORT_AUTOMATIC_SEARCH);
-
-    Label = gtk_label_new (_("CGI Path:"));
-    gtk_box_pack_start(GTK_BOX(hbox),Label,FALSE,FALSE,2);
-    CddbServerCgiPathAutomaticSearch = gtk_entry_new();
-    gtk_box_pack_start(GTK_BOX(hbox),CddbServerCgiPathAutomaticSearch,FALSE,FALSE,0);
-    if (CDDB_SERVER_CGI_PATH_AUTOMATIC_SEARCH)
-        gtk_entry_set_text(GTK_ENTRY(CddbServerCgiPathAutomaticSearch),CDDB_SERVER_CGI_PATH_AUTOMATIC_SEARCH);
-
-    // 2sd automatic search server
-    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, BOX_SPACING);
-    gtk_container_add(GTK_CONTAINER(vbox),hbox);
-    Label = gtk_label_new(_("Name:"));
-    gtk_box_pack_start(GTK_BOX(hbox),Label,FALSE,FALSE,2);
-    CddbServerNameAutomaticSearch2 = gtk_combo_box_text_new_with_entry();
-    gtk_box_pack_start(GTK_BOX(hbox),CddbServerNameAutomaticSearch2,FALSE,FALSE,0);
-    gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(CddbServerNameAutomaticSearch2), "freedb.musicbrainz.org");
-    if (CDDB_SERVER_NAME_AUTOMATIC_SEARCH2)
-        gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(CddbServerNameAutomaticSearch2))),CDDB_SERVER_NAME_AUTOMATIC_SEARCH2);
-
-    Label = gtk_label_new (_("Port:"));
-    gtk_box_pack_start(GTK_BOX(hbox),Label,FALSE,FALSE,2);
-    CddbServerPortAutomaticSearch2 = gtk_spin_button_new_with_range (0.0,
-                                                                     65535.0,
-                                                                     1.0);
-    gtk_widget_set_size_request(GTK_WIDGET(CddbServerPortAutomaticSearch2), 45, -1);
-    gtk_box_pack_start(GTK_BOX(hbox),CddbServerPortAutomaticSearch2,FALSE,FALSE,0);
-    gtk_spin_button_set_value (GTK_SPIN_BUTTON (CddbServerPortAutomaticSearch2),
-                               CDDB_SERVER_PORT_AUTOMATIC_SEARCH2);
-
-    Label = gtk_label_new (_("CGI Path:"));
-    gtk_box_pack_start(GTK_BOX(hbox),Label,FALSE,FALSE,2);
-    CddbServerCgiPathAutomaticSearch2 = gtk_entry_new();
-    gtk_box_pack_start(GTK_BOX(hbox),CddbServerCgiPathAutomaticSearch2,FALSE,FALSE,0);
-    if (CDDB_SERVER_CGI_PATH_AUTOMATIC_SEARCH2)
-        gtk_entry_set_text(GTK_ENTRY(CddbServerCgiPathAutomaticSearch2) ,CDDB_SERVER_CGI_PATH_AUTOMATIC_SEARCH2);
-
-    // CDDB Server Settings (Manual Search)
-    Frame = gtk_frame_new (_("Server Settings for Manual Search"));
-    gtk_box_pack_start(GTK_BOX(VBox),Frame,FALSE,FALSE,0);
-    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
-    gtk_container_add(GTK_CONTAINER(Frame),vbox);
-    gtk_container_set_border_width(GTK_CONTAINER(vbox), 4);
-
-    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, BOX_SPACING);
-    gtk_container_add(GTK_CONTAINER(vbox),hbox);
-    Label = gtk_label_new(_("Name:"));
-    gtk_box_pack_start(GTK_BOX(hbox),Label,FALSE,FALSE,2);
-    CddbServerNameManualSearch = gtk_combo_box_text_new_with_entry();
-    gtk_box_pack_start(GTK_BOX(hbox),CddbServerNameManualSearch,FALSE,FALSE,0);
-    gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(CddbServerNameManualSearch), "www.freedb.org");
-    gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(CddbServerNameManualSearch), "www.gnudb.org");
-    if (CDDB_SERVER_NAME_MANUAL_SEARCH)
-        gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(CddbServerNameManualSearch))),CDDB_SERVER_NAME_MANUAL_SEARCH);
-
-    Label = gtk_label_new (_("Port:"));
-    gtk_box_pack_start(GTK_BOX(hbox),Label,FALSE,FALSE,2);
-    CddbServerPortManualSearch = gtk_spin_button_new_with_range (0.0, 65535.0,
-                                                                 1.0);
-    gtk_widget_set_size_request(GTK_WIDGET(CddbServerPortManualSearch), 45, -1);
-    gtk_box_pack_start(GTK_BOX(hbox),CddbServerPortManualSearch,FALSE,FALSE,0);
-    gtk_spin_button_set_value (GTK_SPIN_BUTTON (CddbServerPortManualSearch),
-                               CDDB_SERVER_PORT_MANUAL_SEARCH);
-
-    Label = gtk_label_new (_("CGI Path:"));
-    gtk_box_pack_start(GTK_BOX(hbox),Label,FALSE,FALSE,2);
-    CddbServerCgiPathManualSearch = gtk_entry_new();
-    gtk_box_pack_start(GTK_BOX(hbox),CddbServerCgiPathManualSearch,FALSE,FALSE,0);
-    if (CDDB_SERVER_CGI_PATH_MANUAL_SEARCH)
-        gtk_entry_set_text(GTK_ENTRY(CddbServerCgiPathManualSearch) ,CDDB_SERVER_CGI_PATH_MANUAL_SEARCH);
-
-    // Local access for CDDB (Automatic Search)
-    Frame = gtk_frame_new (_("Local CDDB"));
-    gtk_box_pack_start(GTK_BOX(VBox),Frame,FALSE,FALSE,0);
-    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
-    gtk_container_add(GTK_CONTAINER(Frame),vbox);
-    gtk_container_set_border_width (GTK_CONTAINER (vbox), BOX_SPACING);
-
-    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, BOX_SPACING);
-    gtk_container_add(GTK_CONTAINER(vbox),hbox);
-    Label = gtk_label_new(_("Path:"));
-    gtk_box_pack_start(GTK_BOX(hbox),Label,FALSE,FALSE,2);
-
-    if (CddbLocalPathModel != NULL)
-        gtk_list_store_clear(CddbLocalPathModel);
-    else
-        CddbLocalPathModel = gtk_list_store_new(MISC_COMBO_COUNT, G_TYPE_STRING);
-
-    CddbLocalPath = gtk_combo_box_new_with_model_and_entry(GTK_TREE_MODEL(CddbLocalPathModel));
-    gtk_combo_box_set_entry_text_column(GTK_COMBO_BOX(CddbLocalPath),MISC_COMBO_TEXT);
-    gtk_box_pack_start(GTK_BOX(hbox),CddbLocalPath,FALSE,FALSE,0);
-    gtk_widget_set_size_request(GTK_WIDGET(CddbLocalPath), 450, -1);
-    gtk_widget_set_tooltip_text(gtk_bin_get_child(GTK_BIN(CddbLocalPath)),_("Specify the directory "
-        "where the local CD database is located. The local CD database contains the eleven following "
-        "directories 'blues', 'classical', 'country', 'data', 'folk', 'jazz', 'newage', 'reggae', "
-        "'rock', 'soundtrack' and 'misc'."));
-    g_signal_connect(G_OBJECT(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(CddbLocalPath)))),"activate",G_CALLBACK(CddbLocalPath_Combo_Add_String),NULL);
-    //g_signal_connect(G_OBJECT(GTK_ENTRY(GTK_BIN(CddbLocalPath)->child)),"focus_out_event",G_CALLBACK(CddbLocalPath_Combo_Add_String),NULL);
-
-    // History list
-    Load_Cddb_Local_Path_List(CddbLocalPathModel, MISC_COMBO_TEXT);
-
-    // If default path hasn't been added already, add it now..
-    if (CDDB_LOCAL_PATH)
-    {
-        path_utf8 = filename_to_display(CDDB_LOCAL_PATH);
-        Add_String_To_Combo_List(CddbLocalPathModel, path_utf8);
-        if (path_utf8)
-            gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(CddbLocalPath))), path_utf8);
-        g_free(path_utf8);
-    }
-
-    Button = gtk_button_new_from_stock(GTK_STOCK_OPEN);
-    gtk_box_pack_start(GTK_BOX(hbox),Button,FALSE,FALSE,0);
-    g_signal_connect_swapped(G_OBJECT(Button),"clicked",
-                             G_CALLBACK(File_Selection_Window_For_Directory),G_OBJECT(gtk_bin_get_child(GTK_BIN(CddbLocalPath))));
-
-    // CDDB Proxy Settings
-    Frame = gtk_frame_new (_("Proxy Settings"));
-    gtk_box_pack_start(GTK_BOX(VBox),Frame,FALSE,FALSE,0);
-
-    Table = et_grid_new (3, 5);
-    gtk_container_add(GTK_CONTAINER(Frame),Table);
-    gtk_grid_set_row_spacing (GTK_GRID (Table), BOX_SPACING);
-    gtk_grid_set_column_spacing (GTK_GRID (Table), BOX_SPACING);
-    gtk_container_set_border_width(GTK_CONTAINER(Table), BOX_SPACING);
-
-    CddbUseProxy = gtk_check_button_new_with_label(_("Use a proxy"));
-    gtk_grid_attach (GTK_GRID (Table), CddbUseProxy, 0, 0, 5, 1);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbUseProxy),CDDB_USE_PROXY);
-    gtk_widget_set_tooltip_text(CddbUseProxy,_("Set active the settings of the proxy server."));
-
-    Label = gtk_label_new(_("Host Name:"));
-    gtk_grid_attach (GTK_GRID (Table), Label, 1, 1, 1, 1);
-    gtk_misc_set_alignment(GTK_MISC(Label),1,0.5);
-    CddbProxyName = gtk_entry_new();
-    gtk_grid_attach (GTK_GRID (Table), CddbProxyName, 2, 1, 1, 1);
-    if (CDDB_PROXY_NAME)
-        gtk_entry_set_text(GTK_ENTRY(CddbProxyName),CDDB_PROXY_NAME);
-    gtk_widget_set_tooltip_text(CddbProxyName,_("Name of the proxy server."));
-    Label = gtk_label_new (_("Port:"));
-    gtk_grid_attach (GTK_GRID (Table), Label, 3, 1, 1, 1);
-    gtk_misc_set_alignment(GTK_MISC(Label),1,0.5);
-    CddbProxyPort = gtk_entry_new();
-    CddbProxyPort = gtk_spin_button_new_with_range (0.0, 65535.0, 1.0);
-    gtk_widget_set_size_request(GTK_WIDGET(CddbProxyPort), 45, -1);
-    gtk_grid_attach (GTK_GRID (Table), CddbProxyPort, 4, 1, 1, 1);
-    gtk_widget_set_tooltip_text(CddbProxyPort,_("Port of the proxy server."));
-    gtk_spin_button_set_value (GTK_SPIN_BUTTON (CddbProxyPort),
-                               CDDB_PROXY_PORT);
-    g_signal_connect(G_OBJECT(CddbUseProxy),"toggled",G_CALLBACK(Cddb_Use_Proxy_Toggled),NULL);
-    Label = gtk_label_new(_("User Name:"));
-    gtk_grid_attach (GTK_GRID (Table), Label, 1, 2, 1, 1);
-    gtk_misc_set_alignment(GTK_MISC(Label),1,0.5);
-    CddbProxyUserName = gtk_entry_new();
-    if (CDDB_PROXY_USER_NAME)
-        gtk_entry_set_text(GTK_ENTRY(CddbProxyUserName),CDDB_PROXY_USER_NAME);
-    gtk_grid_attach (GTK_GRID (Table), CddbProxyUserName, 2, 2, 1, 1);
-    gtk_widget_set_tooltip_text(CddbProxyUserName,_("Name of user for the the proxy server."));
-    Label = gtk_label_new(_("User Password:"));
-    gtk_grid_attach (GTK_GRID (Table), Label, 3, 2, 1, 1);
-    gtk_misc_set_alignment(GTK_MISC(Label),1,0.5);
-    CddbProxyUserPassword = gtk_entry_new();
-    if (CDDB_PROXY_USER_PASSWORD)
-        gtk_entry_set_text(GTK_ENTRY(CddbProxyUserPassword),CDDB_PROXY_USER_PASSWORD);
-    gtk_grid_attach (GTK_GRID (Table), CddbProxyUserPassword, 4, 2, 1, 1);
-    gtk_entry_set_visibility(GTK_ENTRY(CddbProxyUserPassword),FALSE);
-    gtk_widget_set_tooltip_text (CddbProxyUserPassword,
-                                 _("Password of user for the proxy server."));
-    Cddb_Use_Proxy_Toggled();
-
-
-    // Track Name list (CDDB results)
-    Frame = gtk_frame_new (_("Track Name List"));
-    gtk_box_pack_start(GTK_BOX(VBox),Frame,FALSE,FALSE,0);
-
-    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
-    gtk_container_add(GTK_CONTAINER(Frame),vbox);
-    gtk_container_set_border_width (GTK_CONTAINER (vbox), BOX_SPACING);
-
-    CddbFollowFile = gtk_check_button_new_with_label(_("Select corresponding audio "
-        "file (according position or DLM if activated below)"));
-    gtk_box_pack_start(GTK_BOX(vbox),CddbFollowFile,FALSE,FALSE,0);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbFollowFile),CDDB_FOLLOW_FILE);
-    gtk_widget_set_tooltip_text(CddbFollowFile,_("If activated, when selecting a "
-        "line in the list of tracks name, the corresponding audio file in the "
-        "main list will be also selected."));
-
-    // Check box to use DLM (also used in the cddb window)
-    CddbUseDLM = gtk_check_button_new_with_label(_("Use the Levenshtein algorithm "
-        "(DLM) to match lines (using title) with audio files (using filename)"));
-    gtk_box_pack_start(GTK_BOX(vbox),CddbUseDLM,FALSE,FALSE,0);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(CddbUseDLM),CDDB_USE_DLM);
-    gtk_widget_set_tooltip_text(CddbUseDLM,_("When activating this option, the "
-        "Levenshtein algorithm (DLM: Damerau-Levenshtein Metric) will be used "
-        "to match the CDDB title against every filename in the current folder, "
-        "and to select the best match. This will be used when selecting the "
-        "corresponding audio file, or applying CDDB results, instead of using "
-        "directly the position order."));
-
-
-    /*
-     * Confirmation
-     */
-    Label = gtk_label_new (_("Confirmation"));
-    VBox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
-    gtk_notebook_append_page (GTK_NOTEBOOK(OptionsNoteBook), VBox, Label);
-    gtk_container_set_border_width (GTK_CONTAINER (VBox), BOX_SPACING);
-
-    ConfirmBeforeExit = gtk_check_button_new_with_label(_("Confirm exit from program"));
-    gtk_box_pack_start(GTK_BOX(VBox),ConfirmBeforeExit,FALSE,FALSE,0);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ConfirmBeforeExit),CONFIRM_BEFORE_EXIT);
-    gtk_widget_set_tooltip_text(ConfirmBeforeExit,_("If activated, opens a dialog box to ask "
-        "confirmation before exiting the program."));
-
-    ConfirmWriteTag = gtk_check_button_new_with_label(_("Confirm writing of file tag"));
-    gtk_box_pack_start(GTK_BOX(VBox),ConfirmWriteTag,FALSE,FALSE,0);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ConfirmWriteTag),CONFIRM_WRITE_TAG);
-
-    ConfirmRenameFile = gtk_check_button_new_with_label(_("Confirm renaming of file"));
-    gtk_box_pack_start(GTK_BOX(VBox),ConfirmRenameFile,FALSE,FALSE,0);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ConfirmRenameFile),CONFIRM_RENAME_FILE);
-
-    ConfirmDeleteFile = gtk_check_button_new_with_label(_("Confirm deleting of file"));
-    gtk_box_pack_start(GTK_BOX(VBox),ConfirmDeleteFile,FALSE,FALSE,0);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ConfirmDeleteFile),CONFIRM_DELETE_FILE);
-
-    ConfirmWritePlayList = gtk_check_button_new_with_label(_("Confirm writing of playlist"));
-    gtk_box_pack_start(GTK_BOX(VBox),ConfirmWritePlayList,FALSE,FALSE,0);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ConfirmWritePlayList),CONFIRM_WRITE_PLAYLIST);
-
-    ConfirmWhenUnsavedFiles = gtk_check_button_new_with_label(_("Confirm changing directory when there are unsaved changes"));
-    gtk_box_pack_start(GTK_BOX(VBox),ConfirmWhenUnsavedFiles,FALSE,FALSE,0);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ConfirmWhenUnsavedFiles),CONFIRM_WHEN_UNSAVED_FILES);
-
-
-    /* Show all in the options window */
-    gtk_widget_show_all(OptionsWindow);
-
-    /* Load the default page */
-    gtk_notebook_set_current_page(GTK_NOTEBOOK(OptionsNoteBook), OPTIONS_NOTEBOOK_PAGE);
-}
-
-
-static void Set_Default_Comment_Check_Button_Toggled (void)
-{
-    gtk_widget_set_sensitive(DefaultComment,gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(SetDefaultComment)));
-}
-
-void Number_Track_Formatted_Toggled (void)
-{
-    gtk_widget_set_sensitive(NumberTrackFormatedSpinButton,gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(NumberTrackFormated)));
-    // To update the example...
-    g_signal_emit_by_name(G_OBJECT(NumberTrackFormatedSpinButton),"changed",NULL);
-}
-
-static void
-Number_Track_Formatted_Spin_Button_Changed (GtkWidget *Label,
-                                            GtkWidget *SpinButton)
-{
-    gchar *tmp;
-    gint val;
-
-    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(NumberTrackFormated)))
-        val = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(SpinButton));
-    else
-        val = 1;
-
-    // For translators : be aware to NOT translate '%.*d' in this string
-    tmp = g_strdup_printf(_("(Example: %.*d_-_Track_name_1.mp3)"),val,1);
-
-    gtk_label_set_text(GTK_LABEL(Label),tmp);
-    g_free(tmp);
-}
-
-static void
-et_prefs_on_pad_disc_number_toggled (void)
-{
-    gtk_widget_set_sensitive (pad_disc_number_spinbutton,
-                              gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (pad_disc_number)));
-    /* Update the example. */
-    g_signal_emit_by_name (G_OBJECT (pad_disc_number_spinbutton), "changed",
-                           NULL);
-}
-
-static void
-et_prefs_on_pad_disc_number_spinbutton_changed (GtkWidget *label,
-                                                GtkWidget *spinbutton)
-{
-    gchar *tmp;
-    guint val;
-
-    if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (pad_disc_number)))
-    {
-        val = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spinbutton));
-    }
-    else
-    {
-        val = 1;
-    }
-
-    /* Translators: please do NOT translate '%.*d' in this string. */
-    tmp = g_strdup_printf (_("(Example: disc_%.*d_of_10/Track_name_1.mp3)"),
-                           val, 1);
-
-    gtk_label_set_text (GTK_LABEL (label), tmp);
-    g_free (tmp);
-}
-
-static void
-Use_Non_Standard_Id3_Reading_Character_Set_Toggled (void)
-{
-    gtk_widget_set_sensitive(FileReadingId3v1v2CharacterSetCombo,
-        gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(UseNonStandardId3ReadingCharacterSet)));
-}
-
-static void
-Change_Id3_Settings_Toggled (void)
-{
-    int active;
-
-    if ( !FileWritingId3v2UseUnicodeCharacterSet 
-    ||   !FileWritingId3v2UseNoUnicodeCharacterSet
-    ||   !FileWritingId3v2WriteTag
-#ifdef ENABLE_ID3LIB
-    ||   !FileWritingId3v2VersionCombo
-    ||   !LabelId3v2Version
-#endif
-    ||   !FileWritingId3v1WriteTag
-    ||   !LabelId3v2Charset
-    ||   !FileWritingId3v2UnicodeCharacterSetCombo
-    ||   !FileWritingId3v2NoUnicodeCharacterSetCombo
-    ||   !LabelAdditionalId3v2IconvOptions
-    ||   !FileWritingId3v2IconvOptionsNo
-    ||   !FileWritingId3v2IconvOptionsTranslit
-    ||   !FileWritingId3v2IconvOptionsIgnore
-    ||   !FileWritingId3v2UseCrc32
-    ||   !FileWritingId3v2UseCompression
-    ||   !FileWritingId3v2TextOnlyGenre
-    ||   !ConvertOldId3v2TagVersion
-    ||   !LabelId3v1Charset
-    ||   !FileWritingId3v1CharacterSetCombo
-    ||   !LabelAdditionalId3v1IconvOptions
-    ||   !FileWritingId3v1IconvOptionsNo
-    ||   !FileWritingId3v1IconvOptionsTranslit
-    ||   !FileWritingId3v1IconvOptionsIgnore
-       )
-        return;
-
-    active = (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(FileWritingId3v2UseUnicodeCharacterSet)) != 0);
-
-    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(FileWritingId3v2WriteTag)))
-    {
-        gtk_widget_set_sensitive(LabelId3v2Charset, TRUE);
-
-#ifdef ENABLE_ID3LIB
-        gtk_widget_set_sensitive(LabelId3v2Version, TRUE);
-        gtk_widget_set_sensitive(FileWritingId3v2VersionCombo, TRUE);
-        if (gtk_combo_box_get_active(GTK_COMBO_BOX(FileWritingId3v2VersionCombo)) == 1)
-        {
-            // When "ID3v2.3" is selected
-            gtk_combo_box_set_active(GTK_COMBO_BOX(FileWritingId3v2UnicodeCharacterSetCombo), 1);
-            gtk_widget_set_sensitive(FileWritingId3v2UnicodeCharacterSetCombo, FALSE);
-        }else
-        {
-            // When "ID3v2.4" is selected
-            gtk_combo_box_set_active(GTK_COMBO_BOX(FileWritingId3v2UnicodeCharacterSetCombo), 0); // Set "UTF-8" as default value for this version of tag
-            gtk_widget_set_sensitive(FileWritingId3v2UnicodeCharacterSetCombo, active);
-        }
-#else 
-        gtk_widget_set_sensitive(FileWritingId3v2UnicodeCharacterSetCombo, active);
-#endif
-        gtk_widget_set_sensitive(FileWritingId3v2UseUnicodeCharacterSet, TRUE);
-        gtk_widget_set_sensitive(FileWritingId3v2UseNoUnicodeCharacterSet, TRUE);
-        gtk_widget_set_sensitive(FileWritingId3v2NoUnicodeCharacterSetCombo, !active);
-        gtk_widget_set_sensitive(LabelAdditionalId3v2IconvOptions, !active);
-        gtk_widget_set_sensitive(FileWritingId3v2IconvOptionsNo, !active);
-        gtk_widget_set_sensitive(FileWritingId3v2IconvOptionsTranslit, !active);
-        gtk_widget_set_sensitive(FileWritingId3v2IconvOptionsIgnore, !active);
-        gtk_widget_set_sensitive(FileWritingId3v2UseCrc32, TRUE);
-        gtk_widget_set_sensitive(FileWritingId3v2UseCompression, TRUE);
-        gtk_widget_set_sensitive(FileWritingId3v2TextOnlyGenre, TRUE);
-        gtk_widget_set_sensitive(ConvertOldId3v2TagVersion, TRUE);
-
-    }else
-    {
-        gtk_widget_set_sensitive(LabelId3v2Charset, FALSE);
-#ifdef ENABLE_ID3LIB
-        gtk_widget_set_sensitive(LabelId3v2Version, FALSE);
-        gtk_widget_set_sensitive(FileWritingId3v2VersionCombo, FALSE);
-#endif
-        gtk_widget_set_sensitive(FileWritingId3v2UseUnicodeCharacterSet, FALSE);
-        gtk_widget_set_sensitive(FileWritingId3v2UseNoUnicodeCharacterSet, FALSE);
-        gtk_widget_set_sensitive(FileWritingId3v2UnicodeCharacterSetCombo, FALSE);
-        gtk_widget_set_sensitive(FileWritingId3v2NoUnicodeCharacterSetCombo, FALSE);
-        gtk_widget_set_sensitive(LabelAdditionalId3v2IconvOptions, FALSE);
-        gtk_widget_set_sensitive(FileWritingId3v2IconvOptionsNo, FALSE);
-        gtk_widget_set_sensitive(FileWritingId3v2IconvOptionsTranslit, FALSE);
-        gtk_widget_set_sensitive(FileWritingId3v2IconvOptionsIgnore, FALSE);
-        gtk_widget_set_sensitive(FileWritingId3v2UseCrc32, FALSE);
-        gtk_widget_set_sensitive(FileWritingId3v2UseCompression, FALSE);
-        gtk_widget_set_sensitive(FileWritingId3v2TextOnlyGenre, FALSE);
-        gtk_widget_set_sensitive(ConvertOldId3v2TagVersion, 0);
-    }
-
-    active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(FileWritingId3v1WriteTag));
-
-    gtk_widget_set_sensitive(LabelId3v1Charset, active);
-    gtk_widget_set_sensitive(FileWritingId3v1CharacterSetCombo, active);
-    gtk_widget_set_sensitive(LabelAdditionalId3v1IconvOptions, active);
-    gtk_widget_set_sensitive(FileWritingId3v1IconvOptionsNo, active);
-    gtk_widget_set_sensitive(FileWritingId3v1IconvOptionsTranslit, active);
-    gtk_widget_set_sensitive(FileWritingId3v1IconvOptionsIgnore, active);
-}
-
-static void
-Cddb_Use_Proxy_Toggled (void)
-{
-    gboolean active;
-
-    active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbUseProxy));
-    gtk_widget_set_sensitive(CddbProxyName,active);
-    gtk_widget_set_sensitive(CddbProxyPort,active);
-    gtk_widget_set_sensitive(CddbProxyUserName,active);
-    gtk_widget_set_sensitive(CddbProxyUserPassword,active);
-}
-
-/* Callback from Open_OptionsWindow */
-static void
-OptionsWindow_Save_Button (void)
-{
-    if (!Check_Config()) return;
-
-#ifndef G_OS_WIN32
-    /* FIXME : make gtk crash on win32 */
-    Add_String_To_Combo_List(DefaultPathModel,      gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(DefaultPathToMp3)))));
-    Add_String_To_Combo_List(FilePlayerModel,       gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(FilePlayerCombo)))));
-    Add_String_To_Combo_List(DefaultCommentModel,   gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(DefaultComment)))));
-    Add_String_To_Combo_List(CddbLocalPathModel,    gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(CddbLocalPath)))));
-#endif /* !G_OS_WIN32 */
-
-    Save_Changes_Of_Preferences_Window();
-
-    OptionsWindow_Quit();
-    Statusbar_Message(_("Configuration saved"),TRUE);
-}
-
-/* Callback from Open_OptionsWindow */
-static void
-OptionsWindow_Cancel_Button (void)
-{
-    OptionsWindow_Quit();
-    Statusbar_Message(_("Configuration unchanged"),TRUE);
-}
-
-/* Callback from Open_OptionsWindow */
-static void
-OptionsWindow_Quit (void)
-{
-    if (OptionsWindow)
-    {
-        OptionsWindow_Apply_Changes();
-
-        /* Now quit */
-        gtk_widget_destroy(OptionsWindow);
-        OptionsWindow = NULL;
-        gtk_widget_set_sensitive(MainWindow, TRUE);
-    }
-}
-
-/*
- * For the configuration file...
- */
-void OptionsWindow_Apply_Changes (void)
-{
-    if (OptionsWindow)
-    {
-        /* Get the last visible notebook page */
-        OPTIONS_NOTEBOOK_PAGE = gtk_notebook_get_current_page(GTK_NOTEBOOK(OptionsNoteBook));
-
-        /* Save combobox history lists before exit */
-        Save_Default_Path_To_MP3_List     (DefaultPathModel, MISC_COMBO_TEXT);
-        Save_Default_Tag_Comment_Text_List(DefaultCommentModel, MISC_COMBO_TEXT);
-        Save_Audio_File_Player_List       (FilePlayerModel, MISC_COMBO_TEXT);
-        Save_Cddb_Local_Path_List         (CddbLocalPathModel, MISC_COMBO_TEXT);
-    }
-}
-
-
-
-/*
- * Check_Config: Check if config information are correct
- * dsd: Check this... going from utf8 to raw is dodgy stuff
- *
- * Problem noted : if a character is escaped (like : 'C\351line DION') in
- *                 gtk_file_chooser it will converted to UTF-8. So after, there
- *                 is a problem to convert it in the right system encoding to be
- *                 passed to stat(), and it can find the directory.
- * exemple :
- *  - initial file on system                        : C\351line DION - D'eux (1995)
- *  - converted to UTF-8 (path_utf8)                : Céline DION - D'eux (1995)
- *  - try to convert to system encoding (path_real) : ?????
- */
-static gboolean
-Check_DefaultPathToMp3 (void)
-{
-    gchar *path_utf8;
-    gchar *path_real;
-    GFile *file;
-    GFileInfo *fileinfo;
-    GtkWidget *msgdialog;
-
-    path_utf8 = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(DefaultPathToMp3)))));
-    if (!path_utf8 || g_utf8_strlen(path_utf8, -1) < 1)
-    {
-        g_free(path_utf8);
-        return TRUE;
-    }
-
-    path_real = filename_from_display (path_utf8);
-    file = g_file_new_for_path (path_real);
-    fileinfo = g_file_query_info (file, G_FILE_ATTRIBUTE_STANDARD_TYPE,
-                                  G_FILE_QUERY_INFO_NONE, NULL, NULL);
-    g_object_unref (file);
-
-    if (fileinfo)
-    {
-        if (g_file_info_get_file_type (fileinfo) == G_FILE_TYPE_DIRECTORY)
-        {
-            g_free (path_real);
-            g_free (path_utf8);
-            g_object_unref (fileinfo);
-            return TRUE; /* Path is good */
-        }
-
-        g_object_unref (fileinfo);
-    }
-
-    msgdialog = gtk_message_dialog_new (GTK_WINDOW (OptionsWindow),
-                                        GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-                                        GTK_MESSAGE_ERROR,
-                                        GTK_BUTTONS_CLOSE,
-                                        "%s",
-                                        _("The selected path for 'Default path to files' is invalid"));
-    gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (msgdialog),
-                                              _("Path: '%s'\nError: %s"),
-                                              path_utf8, g_strerror (errno));
-    gtk_window_set_title (GTK_WINDOW (msgdialog), _("Invalid Path Error"));
-
-    gtk_dialog_run (GTK_DIALOG (msgdialog));
-    gtk_widget_destroy (msgdialog);
-    g_free (path_real);
-    g_free (path_utf8);
-
-    return FALSE;
-}
-
-/*
- * The character set conversion is used for ID3 tag. UTF-8 is used to display.
- *  - reading_character is converted to UTF-8
- *  - writing_character is converted from UTF-8
- */
-/*****************
-gint Check_CharacterSetTranslation (void)
-{
-    gchar *temp;
-    gchar *reading_character;
-    gchar *writing_character;
-
-    temp = Get_Active_Combo_Box_Item(GTK_COMBO_BOX(FileReadingCharacterSetCombo));
-    reading_character = Charset_Get_Name_From_Title(temp);
-    g_free(temp);
-
-    temp = Get_Active_Combo_Box_Item(GTK_COMBO_BOX(FileWritingCharacterSetCombo));
-    writing_character = Charset_Get_Name_From_Title(temp);
-    g_free(temp);
-
-    // Check conversion when reading file
-    if ( GTK_TOGGLE_BUTTON(UseNonStandardId3ReadingCharacterSet)->active
-    && (test_conversion_charset(reading_character,"UTF-8")!=TRUE) )
-    {
-        gchar *msg = g_strdup_printf(_("The character set translation from '%s'\n"
-                                       "to '%s' is not supported"),reading_character,"UTF-8");
-        GtkWidget *msgbox = msg_box_new(_("Error"),
-                                        GTK_WINDOW(OptionsWindow),
-                                        NULL,
-                                        GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-                                        msg,
-                                        GTK_STOCK_DIALOG_ERROR,
-                                        GTK_STOCK_OK, GTK_RESPONSE_OK,
-                                        NULL);
-        gtk_dialog_run(GTK_DIALOG(msgbox));
-        gtk_widget_destroy(msgbox);
-        g_free(msg);
-        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(UseNonStandardId3ReadingCharacterSet),FALSE);
-        return 0;
-    }
-    // Check conversion when writing file
-    if ( GTK_TOGGLE_BUTTON(UseNonStandardId3WritingCharacterSet)->active
-    && (test_conversion_charset("UTF-8",writing_character)!=TRUE) )
-    {
-        gchar *msg = g_strdup_printf(_("The character set translation from '%s'\n"
-                                       "to '%s' is not supported"),"UTF-8",writing_character);
-        GtkWidget *msgbox = msg_box_new(_("Error"),
-                                        GTK_WINDOW(OptionsWindow),
-                                        NULL,
-                                        GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-                                        msg,
-                                        GTK_STOCK_DIALOG_ERROR,
-                                        GTK_STOCK_OK, GTK_RESPONSE_OK,
-                                        NULL);
-        gtk_dialog_run(GTK_DIALOG(msgbox));
-        gtk_widget_destroy(msgbox);
-        g_free(msg);
-        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(UseNonStandardId3WritingCharacterSet),FALSE);
-        return 0;
-    }
-
-    return 1;
-}
-*************/
-
-static gboolean
-Check_DefaultComment (void)
-{
-    const gchar *file;
-
-    file = gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(DefaultComment))));
-    if (!file || g_utf8_strlen(file, -1) < 1)
-        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(SetDefaultComment),FALSE);
-
-    return TRUE;    /* A blank entry is ignored */
-}
-
-/*
- * Check if player binary is found
- */
-static gboolean
-Check_FilePlayerCombo (void)
-{
-    gchar *program_path = NULL;
-    gchar *program_path_validated = NULL;
-
-#ifdef G_OS_WIN32
-    return TRUE; /* FIXME see Check_If_Executable_Exists */
-    /* Note : Check_If_Executable_Exists crashes when player is 'winamp.exe' with g_find_program_in_path */
-#endif /* G_OS_WIN32 */
-
-    // The program typed
-    program_path = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(FilePlayerCombo)))));
-    g_strstrip(program_path);
-    // The program file validated
-    if (program_path && strlen(program_path)>0)
-        program_path_validated = Check_If_Executable_Exists(program_path);
-
-    if ( program_path && strlen(program_path)>0 && !program_path_validated ) // A file is typed but it is invalid!
-    {
-        GtkWidget *msgdialog = gtk_message_dialog_new(GTK_WINDOW(OptionsWindow),
-                                                      GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-                                                      GTK_MESSAGE_ERROR,
-                                                      GTK_BUTTONS_CLOSE,
-                                                      _("The audio file player '%s' cannot be found"),
-                                                      program_path);
-        gtk_window_set_title(GTK_WINDOW(msgdialog),_("Audio Player Error"));
-
-        gtk_dialog_run(GTK_DIALOG(msgdialog));
-        gtk_widget_destroy(msgdialog);
-
-        g_free(program_path);
-        return FALSE;
-    } else
-    {
-        g_free(program_path);
-        g_free(program_path_validated);
-        return TRUE;
-    }
-}
-
-static gboolean
-Check_Config (void)
-{
-    if (Check_DefaultPathToMp3 ()
-        && Check_DefaultComment ()
-        && Check_FilePlayerCombo ())
-        return TRUE; /* No problem detected */
-    else
-        return FALSE; /* Oops! */
-}
-
-
-
-/*
- * Manage Check buttons into Scanner tab: conversion group
- * This reproduces "something" like the behaviour of radio buttons with check buttons
- */
-static void
-Scanner_Convert_Check_Button_Toggled_1 (GtkWidget *object_rec,
-                                        GtkWidget *object_emi)
-{
-    g_return_if_fail (object_rec != NULL || object_emi != NULL);
-
-    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(object_emi)) == TRUE)
-        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(object_rec),!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(object_emi)));
-}
-
-static void
-DefaultPathToMp3_Combo_Add_String (void)
-{
-    const gchar *path;
-
-    path = gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(DefaultPathToMp3))));
-    Add_String_To_Combo_List(GTK_LIST_STORE(DefaultPathModel), path);
-}
-
-static void
-CddbLocalPath_Combo_Add_String (void)
-{
-    const gchar *path;
-
-    path = gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(CddbLocalPath))));
-    Add_String_To_Combo_List(GTK_LIST_STORE(CddbLocalPath), path);
-}
-
-/*
- * et_preferences_on_response:
- * @dialog: the dialog which trigerred the response signal
- * @response_id: the response which was triggered
- * @user_data: user data set when the signal was connected
- *
- * Signal handler for the response signal, to check whether the OK or cancel
- * button was clicked, or if a delete event was received.
- */
-static void
-et_preferences_on_response (GtkDialog *dialog, gint response_id,
-                            gpointer user_data)
-{
-    switch (response_id)
-    {
-        case GTK_RESPONSE_ACCEPT:
-            OptionsWindow_Save_Button ();
-            break;
-        case GTK_RESPONSE_DELETE_EVENT:
-            OptionsWindow_Quit ();
-        case GTK_RESPONSE_REJECT:
-            OptionsWindow_Cancel_Button ();
-            break;
-        default:
-            g_assert_not_reached ();
-    }
-}
diff --git a/src/prefs.h b/src/prefs.h
deleted file mode 100644
index 5e8442e..0000000
--- a/src/prefs.h
+++ /dev/null
@@ -1,189 +0,0 @@
-/* prefs.h - 2000/05/06 */
-/*
- *  EasyTAG - Tag editor for MP3 and Ogg Vorbis files
- *  Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
- *
- *  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
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-
-#ifndef __PREFS_H__
-#define __PREFS_H__
-
-
-/***************
- * Declaration *
- ***************/
-
-GtkWidget *OptionsWindow;
-GtkWidget *OptionsNoteBook;
-gint OptionsNoteBook_Scanner_Page_Num;    /* Contains the number of the page "Scanner Option" */
-
-
-/* Widgets included in config */
-/* Common */
-GtkWidget *LoadOnStartup;
-GtkWidget *DefaultPathToMp3;
-GtkWidget *BrowserLineStyleOptionMenu;
-GtkWidget *BrowserExpanderStyleOptionMenu;
-GtkWidget *BrowseSubdir;
-GtkWidget *BrowseHiddendir;
-GtkWidget *OpenSelectedBrowserNode;
-
-GtkListStore *DefaultPathModel;
-
-/* User interface */
-GtkWidget *ShowHeaderInfos;
-GtkWidget *ChangedFilesDisplayedToRed;
-GtkWidget *ChangedFilesDisplayedToBold;
-
-/* Misc */
-GtkWidget *SortingFileCombo;
-GtkWidget *SortingFileCaseSensitive;
-
-GtkWidget *MessageBoxPositionNone;
-GtkWidget *MessageBoxPositionCenter;
-GtkWidget *MessageBoxPositionMouse;
-GtkWidget *MessageBoxPositionCenterOnParent;
-
-GtkWidget *FilePlayerCombo;
-GtkListStore *FilePlayerModel;
-
-/* File Settings */
-GtkWidget *ReplaceIllegalCharactersInFilename;
-GtkWidget *FilenameExtensionNoChange;
-GtkWidget *FilenameExtensionLowerCase;
-GtkWidget *FilenameExtensionUpperCase;
-GtkWidget *PreserveModificationTime;
-GtkWidget *UpdateParentDirectoryModificationTime;
-
-GtkWidget *FilenameCharacterSetOther;
-GtkWidget *FilenameCharacterSetApproximate;
-GtkWidget *FilenameCharacterSetDiscard;
-
-/* Tag Settings */
-GtkWidget *FileWritingId3v2WriteTag;
-GtkWidget *FileWritingId3v1WriteTag;
-GtkWidget *FileWritingId3v2UseCrc32;
-GtkWidget *FileWritingId3v2UseCompression;
-GtkWidget *FileWritingId3v2TextOnlyGenre;
-GtkWidget *StripTagWhenEmptyFields;
-GtkWidget *ConvertOldId3v2TagVersion;
-
-GtkWidget *FileWritingId3v2VersionCombo;
-GtkWidget *FileWritingId3v2UnicodeCharacterSetCombo;
-GtkWidget *FileWritingId3v2NoUnicodeCharacterSetCombo;
-GtkWidget *FileWritingId3v1CharacterSetCombo;
-GtkWidget *FileWritingId3v2UseUnicodeCharacterSet;
-GtkWidget *FileWritingId3v2UseNoUnicodeCharacterSet;
-GtkWidget *UseNonStandardId3ReadingCharacterSet;
-GtkWidget *FileReadingId3v1v2CharacterSetCombo;
-
-GtkWidget *FileWritingId3v2IconvOptionsNo;
-GtkWidget *FileWritingId3v2IconvOptionsTranslit;
-GtkWidget *FileWritingId3v2IconvOptionsIgnore;
-GtkWidget *FileWritingId3v1IconvOptionsNo;
-GtkWidget *FileWritingId3v1IconvOptionsTranslit;
-GtkWidget *FileWritingId3v1IconvOptionsIgnore;
-
-GtkWidget *LabelAdditionalId3v1IconvOptions;
-GtkWidget *LabelAdditionalId3v2IconvOptions;
-GtkWidget *LabelId3v2Charset;
-GtkWidget *LabelId3v1Charset;
-GtkWidget *LabelId3v2Version;
-
-GtkWidget *DateAutoCompletion;
-GtkWidget *NumberTrackFormated;
-GtkWidget *NumberTrackFormatedSpinButton;
-GtkWidget *pad_disc_number;
-GtkWidget *pad_disc_number_spinbutton;
-GtkWidget *SetFocusToSameTagField;
-GtkWidget *SetFocusToFirstTagField;
-GtkWidget *LogMaxLinesSpinButton;
-GtkWidget *ShowLogView;
-
-GtkWidget *VorbisSplitFieldTitle;
-GtkWidget *VorbisSplitFieldArtist;
-GtkWidget *VorbisSplitFieldAlbum;
-GtkWidget *VorbisSplitFieldGenre;
-GtkWidget *VorbisSplitFieldComment;
-GtkWidget *VorbisSplitFieldComposer;
-GtkWidget *VorbisSplitFieldOrigArtist;
-
-/* Scanner */
-GtkWidget *FTSConvertUnderscoreAndP20IntoSpace;
-GtkWidget *FTSConvertSpaceIntoUnderscore;
-GtkWidget *RFSConvertUnderscoreAndP20IntoSpace;
-GtkWidget *RFSConvertSpaceIntoUnderscore;
-GtkWidget *RFSRemoveSpaces;
-GtkWidget *PFSDontUpperSomeWords;
-GtkWidget *OverwriteTagField;
-GtkWidget *OpenScannerWindowOnStartup;
-GtkWidget *ScannerWindowOnTop;
-
-GtkWidget *SetDefaultComment;
-GtkWidget *DefaultComment;
-GtkWidget *Crc32Comment;
-GtkListStore *DefaultCommentModel;
-
-/* CDDB */
-GtkWidget *CddbServerNameAutomaticSearch;
-GtkWidget *CddbServerPortAutomaticSearch;
-GtkWidget *CddbServerCgiPathAutomaticSearch;
-GtkWidget *CddbServerNameAutomaticSearch2;
-GtkWidget *CddbServerPortAutomaticSearch2;
-GtkWidget *CddbServerCgiPathAutomaticSearch2;
-GtkWidget *CddbServerNameManualSearch;
-GtkWidget *CddbServerPortManualSearch;
-GtkWidget *CddbServerCgiPathManualSearch;
-GtkWidget *CddbUseProxy;
-GtkWidget *CddbProxyName;
-GtkWidget *CddbProxyPort;
-GtkWidget *CddbProxyUserName;
-GtkWidget *CddbProxyUserPassword;
-
-GtkWidget *CddbLocalPath;
-GtkListStore *CddbLocalPathModel;
-
-GtkWidget *SetCddbWindowSize;
-GtkWidget *CddbWindowWidth;
-GtkWidget *CddbWindowHeight;
-GtkWidget *CddbWindowButton;
-GtkWidget *SetCddbPaneHandlePosition;
-GtkWidget *CddbPaneHandlePosition;
-GtkWidget *CddbPaneHandleButton;
-
-GtkWidget *CddbFollowFile;
-GtkWidget *CddbUseDLM;  // Also used in the cddb.c
-
-
-/* Confirmation */
-GtkWidget *ConfirmBeforeExit;
-GtkWidget *ConfirmWriteTag;
-GtkWidget *ConfirmRenameFile;
-GtkWidget *ConfirmDeleteFile;
-GtkWidget *ConfirmWritePlayList;
-GtkWidget *ConfirmWhenUnsavedFiles;
-
-
-/**************
- * Prototypes *
- **************/
-
-void Init_OptionsWindow (void);
-void Open_OptionsWindow (void);
-void OptionsWindow_Apply_Changes (void);
-
-#endif /* __PREFS_H__ */
diff --git a/src/progress_bar.c b/src/progress_bar.c
new file mode 100644
index 0000000..afb2b45
--- /dev/null
+++ b/src/progress_bar.c
@@ -0,0 +1,31 @@
+/* EasyTAG - Tag editor for audio files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ *
+ * 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
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "progress_bar.h"
+
+GtkWidget *
+et_progress_bar_new (void)
+{
+    GtkWidget *progress;
+
+    progress = gtk_progress_bar_new ();
+
+    gtk_progress_bar_set_show_text (GTK_PROGRESS_BAR (progress), TRUE);
+    gtk_progress_bar_set_text (GTK_PROGRESS_BAR (progress), "");
+
+    return progress;
+}
diff --git a/src/progress_bar.h b/src/progress_bar.h
new file mode 100644
index 0000000..1d9d63c
--- /dev/null
+++ b/src/progress_bar.h
@@ -0,0 +1,29 @@
+/* EasyTAG - Tag editor for audio files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ *
+ * 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
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef ET_PROGRESS_BAR_H_
+#define ET_PROGRESS_BAR_H_
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+GtkWidget * et_progress_bar_new (void);
+
+G_END_DECLS
+
+#endif /* ET_PROGRESS_BAR_H_ */
diff --git a/src/scan.c b/src/scan.c
index cc74e04..f9b2f38 100644
--- a/src/scan.c
+++ b/src/scan.c
@@ -229,3 +229,247 @@ Scan_Process_Fields_Letter_Uppercase (const gchar *string)
 
     return g_string_free (string1, FALSE);
 }
+
+static gint
+Scan_Word_Is_Roman_Numeral (const gchar *text)
+{
+    /* No need for caseless strchr. */
+    static const gchar romans[] = "MmDdCcLlXxVvIi";
+
+    gsize next_allowed = 0;
+    gsize prev = 0;
+    gsize count = 0;
+    const gchar *i;
+
+    for (i = text; *i; i++)
+    {
+        const char *s = strchr (romans, *i);
+
+        if (s)
+        {
+            gsize c = (s - romans) / 2;
+
+            if (c < next_allowed)
+            {
+                return 0;
+            }
+
+            if (c < prev)
+            {
+                /* After subtraction, no more subtracted chars allowed. */
+                next_allowed = prev + 1;
+            }
+            else if (c == prev)
+            {
+                /* Allow indefinite repetition for m; three for c, x and i; and
+                 * none for d, l and v. */
+                if ((c && ++count > 3) || (c & 1))
+                {
+                    return 0;
+                }
+
+                /* No more subtraction. */
+                next_allowed = c;
+            }
+            else if (c && !(c & 1))
+            {
+                /* For first occurrence of c, x and i, allow "subtraction" from
+                 * 10 and 5 times self, reset counting. */
+                next_allowed = c - 2;
+                count = 1;
+            }
+
+            prev = c;
+        }
+        else
+        {
+            if (g_unichar_isalnum (g_utf8_get_char (i)))
+            {
+                return 0;
+            }
+
+            break;
+        }
+    }
+
+    /* Return length of found Roman numeral. */
+    return i - text;
+}
+
+/*
+ * Function to set the first letter of each word to uppercase, according the "Chicago Manual of Style" (http://www.docstyles.com/cmscrib.htm#Note2)
+ * No needed to reallocate
+ */
+void
+Scan_Process_Fields_First_Letters_Uppercase (gchar **str,
+                                             gboolean uppercase_preps,
+                                             gboolean handle_roman)
+{
+/**** DANIEL TEST *****
+    gchar *iter;
+    gchar utf8_character[6];
+    gboolean set_to_upper_case = TRUE;
+    gunichar c;
+
+    for (iter = text; *iter; iter = g_utf8_next_char(iter))
+    {
+        c = g_utf8_get_char(iter);
+        if (set_to_upper_case && g_unichar_islower(c))
+            strncpy(iter, utf8_character, g_unichar_to_utf8(g_unichar_toupper(c), utf8_character));
+        else if (!set_to_upper_case && g_unichar_isupper(c))
+            strncpy(iter, utf8_character, g_unichar_to_utf8(g_unichar_tolower(c), utf8_character));
+
+        set_to_upper_case = (g_unichar_isalpha(c)
+                            || c == (gunichar)'.'
+                            || c == (gunichar)'\''
+                            || c == (gunichar)'`') ? FALSE : TRUE;
+    }
+****/
+/**** Barış Çiçek version ****/
+    gchar *string = *str;
+    gchar *word, *word1, *word2, *temp;
+    gint i, len;
+    gchar utf8_character[6];
+    gunichar c;
+    gboolean set_to_upper_case, set_to_upper_case_tmp;
+    // There have to be space at the end of words to seperate them from prefix
+    // Chicago Manual of Style "Heading caps" Capitalization Rules (CMS 1993, 282) (http://www.docstyles.com/cmscrib.htm#Note2)
+    const gchar * exempt[] =
+    {
+        "a ",       "a_",
+        "against ", "against_",
+        "an ",      "an_",
+        "and ",     "and_",
+        "at ",      "at_",
+        "between ", "between_",
+        "but ",     "but_",
+        "feat. ",   "feat._",
+        "for ",     "for_",
+        "in ",      "in_",
+        "nor ",     "nor_",
+        "of ",      "of_",
+        //"off ",     "off_",   // Removed by Slash Bunny
+        "on ",      "on_",
+        "or ",      "or_",
+        //"over ",    "over_",  // Removed by Slash Bunny
+        "so ",      "so_",
+        "the ",     "the_",
+        "to ",      "to_",
+        "with ",    "with_",
+        "yet ",     "yet_",
+        NULL
+    };
+
+    temp = Scan_Process_Fields_All_Downcase (string);
+    g_free (*str);
+    *str = string = temp;
+
+    if (!g_utf8_validate(string,-1,NULL))
+    {
+        /* FIXME: Translatable string. */
+        g_warning ("%s",
+                   "Scan_Process_Fields_First_Letters_Uppercase: Not valid UTF-8!");
+        return;
+    }
+    /* Removes trailing whitespace. */
+    string = g_strchomp(string);
+
+    temp = string;
+
+    /* If the word is a roman numeral, capitalize all of it. */
+    if (handle_roman && (len = Scan_Word_Is_Roman_Numeral (temp)))
+    {
+        gchar *tmp = g_utf8_strup (temp, len);
+        strncpy (string, tmp, len);
+        g_free (tmp);
+    }
+    else
+    {
+        // Set first character to uppercase
+        c = g_utf8_get_char(temp);
+        strncpy(string, utf8_character, g_unichar_to_utf8(g_unichar_toupper(c), utf8_character));
+    }
+
+    // Uppercase first character of each word, except for 'exempt[]' words lists
+    while ( temp )
+    {
+        word = temp; // Needed if there is only one word
+        word1 = g_utf8_strchr(temp,-1,' ');
+        word2 = g_utf8_strchr(temp,-1,'_');
+
+        // Take the first string found (near beginning of string)
+        if (word1 && word2)
+            word = MIN(word1,word2);
+        else if (word1)
+            word = word1;
+        else if (word2)
+            word = word2;
+        else
+        {
+            // Last word of the string: the first letter is always uppercase,
+            // even if it's in the exempt list. This is a Chicago Manual of Style rule.
+            // Last Word In String - Should Capitalize Regardless of Word (Chicago Manual of Style)
+            c = g_utf8_get_char(word);
+            strncpy(word, utf8_character, g_unichar_to_utf8(g_unichar_toupper(c), utf8_character));
+            break;
+        }
+
+        // Go to first character of the word (char. after ' ' or '_')
+        word = word+1;
+
+        // If the word is a roman numeral, capitalize all of it
+        if (handle_roman && (len = Scan_Word_Is_Roman_Numeral (word)))
+        {
+            gchar *tmp = g_utf8_strup (word, len);
+            strncpy (word, tmp, len);
+            g_free (tmp);
+        }
+        else
+        {
+            // Set uppercase the first character of this word
+            c = g_utf8_get_char(word);
+            strncpy(word, utf8_character, g_unichar_to_utf8(g_unichar_toupper(c), utf8_character));
+
+            if (uppercase_preps)
+            {
+                goto increment;
+            }
+
+            /* Lowercase the first character of this word if found in the
+             * exempt words list. */
+            for (i=0; exempt[i]!=NULL; i++)
+            {
+                if (g_ascii_strncasecmp(exempt[i], word, strlen(exempt[i])) == 0)
+                {
+                    c = g_utf8_get_char(word);
+                    strncpy(word, utf8_character, g_unichar_to_utf8(g_unichar_tolower(c), utf8_character));
+                    break;
+                }
+            }
+        }
+
+increment:
+        temp = word;
+    }
+
+    // Uppercase letter placed after some characters like '(', '[', '{'
+    set_to_upper_case = FALSE;
+    for (temp = string; *temp; temp = g_utf8_next_char(temp))
+    {
+        c = g_utf8_get_char(temp);
+        set_to_upper_case_tmp = (  c == (gunichar)'('
+                                || c == (gunichar)'['
+                                || c == (gunichar)'{'
+                                || c == (gunichar)'"'
+                                || c == (gunichar)':'
+                                || c == (gunichar)'.'
+                                || c == (gunichar)'`'
+                                || c == (gunichar)'-'
+                                ) ? TRUE : FALSE;
+
+        if (set_to_upper_case && g_unichar_islower(c))
+            strncpy(temp, utf8_character, g_unichar_to_utf8(g_unichar_toupper(c), utf8_character));
+
+        set_to_upper_case = set_to_upper_case_tmp;
+    }
+}
diff --git a/src/scan.h b/src/scan.h
index 8c54686..4e6a479 100644
--- a/src/scan.h
+++ b/src/scan.h
@@ -21,6 +21,8 @@
 
 #include <glib.h>
 
+G_BEGIN_DECLS
+
 void Scan_Convert_Underscore_Into_Space (gchar *string);
 void Scan_Convert_P20_Into_Space (gchar *string);
 void Scan_Convert_Space_Into_Underscore (gchar *string);
@@ -31,5 +33,8 @@ void Scan_Remove_Spaces (gchar *string);
 gchar* Scan_Process_Fields_All_Uppercase (const gchar *string);
 gchar* Scan_Process_Fields_All_Downcase (const gchar *string);
 gchar* Scan_Process_Fields_Letter_Uppercase (const gchar *string);
+void Scan_Process_Fields_First_Letters_Uppercase (gchar **str, gboolean uppercase_preps, gboolean handle_roman);
+
+G_END_DECLS
 
 #endif /* !ET_SCAN_H_ */
diff --git a/src/scan_dialog.c b/src/scan_dialog.c
index fde5fd2..450d3d9 100644
--- a/src/scan_dialog.c
+++ b/src/scan_dialog.c
@@ -1,24 +1,25 @@
-/* scan.c - 2000/06/16 */
-/*
- *  EasyTAG - Tag editor for MP3 and Ogg Vorbis files
- *  Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
+/* EasyTAG - Tag editor for audio files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ * Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
  *
- *  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
- *  (at your option) any later version.
+ * 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
+ * (at your option) any later version.
  *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
  *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-#include <config.h>
+#include "config.h"
+
+#include "scan_dialog.h"
 
 #include <gtk/gtk.h>
 #include <string.h>
@@ -27,15 +28,13 @@
 #include <config.h>
 #include <glib/gi18n.h>
 
-#include "scan_dialog.h"
-
-#include "gtk2_compat.h"
-#include "scan.h"
+#include "application_window.h"
 #include "easytag.h"
-#include "prefs.h"
+#include "enums.h"
+#include "preferences_dialog.h"
+#include "scan.h"
 #include "setting.h"
 #include "id3_tag.h"
-#include "bar.h"
 #include "browser.h"
 #include "log.h"
 #include "misc.h"
@@ -43,71 +42,53 @@
 #include "crc32.h"
 #include "charset.h"
 
+/* TODO: Use G_DEFINE_TYPE_WITH_PRIVATE. */
+G_DEFINE_TYPE (EtScanDialog, et_scan_dialog, GTK_TYPE_DIALOG)
+
+#define et_scan_dialog_get_instance_private(dialog) (dialog->priv)
+
+struct _EtScanDialogPrivate
+{
+    GtkListStore *rename_masks_model;
+    GtkListStore *scan_tag_masks_model;
+
+    GtkWidget *mask_editor_entry;
+    GtkWidget *mask_editor_view;
+
+    GtkWidget *notebook;
+    GtkWidget *fill_grid;
+    GtkWidget *rename_grid;
+
+    GtkWidget *scan_tag_mask_combo;
+    GtkWidget *rename_file_mask_combo;
+
+    GtkWidget *legend_frame;
+    GtkWidget *mask_editor_frame;
+
+    GtkWidget *legend_toggle;
+    GtkWidget *mask_editor_toggle;
 
-#define step(a,b) (b-a)+1
-
-
-/****************
- * Declarations *
- ****************/
-static GtkWidget *ScanTagMaskCombo = NULL;
-static GtkWidget *RenameFileMaskCombo = NULL;
-static GtkWidget *ScannerOptionCombo = NULL;
-static GtkWidget *RenameFilePrefixPathButton = NULL;
-
-static GtkWidget *ScanTagFrame;
-static GtkWidget *RenameFileFrame;
-static GtkWidget *ProcessFieldsFrame;
-static GtkWidget *FillTagPreviewLabel = NULL;
-static GtkWidget *RenameFilePreviewLabel = NULL;
-
-static GtkListStore *RenameFileListModel;
-static GtkListStore *ScanTagListModel;
-
-static GtkWidget *ProcessFileNameField;
-static GtkWidget *ProcessTitleField;
-static GtkWidget *ProcessArtistField;
-static GtkWidget *ProcessAlbumArtistField;
-static GtkWidget *ProcessAlbumField;
-static GtkWidget *ProcessGenreField;
-static GtkWidget *ProcessCommentField;
-static GtkWidget *ProcessComposerField;
-static GtkWidget *ProcessOrigArtistField;
-static GtkWidget *ProcessCopyrightField;
-static GtkWidget *ProcessURLField;
-static GtkWidget *ProcessEncodedByField;
-static GtkWidget *ProcessFieldsConvertIntoSpace = NULL;
-static GtkWidget *ProcessFieldsConvertSpace = NULL;
-static GtkWidget *ProcessFieldsConvert = NULL;
-static GtkWidget *ProcessFieldsConvertLabelTo;
-static GtkWidget *ProcessFieldsConvertTo = NULL;
-static GtkWidget *ProcessFieldsConvertFrom = NULL;
-static GtkWidget *ProcessFieldsAllUppercase = NULL;
-static GtkWidget *ProcessFieldsAllDowncase = NULL;
-static GtkWidget *ProcessFieldsFirstLetterUppercase = NULL;
-static GtkWidget *ProcessFieldsFirstLettersUppercase = NULL;
-static GtkWidget *ProcessFieldsDetectRomanNumerals = NULL;
-static GtkWidget *ProcessFieldsRemoveSpace = NULL;
-static GtkWidget *ProcessFieldsInsertSpace = NULL;
-static GtkWidget *ProcessFieldsOnlyOneSpace = NULL;
-
-static GtkWidget *LegendFrame = NULL;
-static GtkWidget *LegendButton = NULL;
-
-static GtkWidget *MaskEditorButton = NULL;
-static GtkWidget *MaskEditorFrame  = NULL;
-static GtkWidget *MaskEditorVBox;
-static GtkWidget *MaskEditorHBox;
-static GtkWidget *MaskEditorScrollWindow;
-static GtkWidget *MaskEditorList;
-static GtkWidget *MaskEditorEntry;
-static GtkWidget *MaskEditorNewButton;
-static GtkWidget *MaskEditorCopyButton;
-static GtkWidget *MaskEditorAddButton;
-static GtkWidget *MaskEditorRemoveButton;
-static GtkWidget *MaskEditorUpButton;
-static GtkWidget *MaskEditorDownButton;
-static GtkWidget *MaskEditorSaveButton;
+    GtkWidget *process_convert_to_space_toggle;
+    GtkWidget *process_convert_to_underscores_toggle;
+    GtkWidget *process_convert_toggle;
+    GtkWidget *process_convert_label;
+
+    GtkWidget *process_all_uppercase_toggle;
+    GtkWidget *process_all_lowercase_toggle;
+    GtkWidget *process_first_uppercase_toggle;
+    GtkWidget *process_first_style_uppercase_toggle;
+    GtkWidget *process_roman_numerals_check;
+
+    GtkWidget *process_remove_space_toggle;
+    GtkWidget *process_insert_space_toggle;
+    GtkWidget *process_insert_one_space_toggle;
+
+    GtkWidget *process_convert_to_entry;
+    GtkWidget *process_convert_from_entry;
+
+    GtkWidget *fill_tag_preview_label;
+    GtkWidget *rename_file_preview_label;
+};
 
 static const guint BOX_SPACING = 6;
 
@@ -177,13 +158,6 @@ static const gchar *Rename_File_Masks [] =
 };**/
 
 
-static const gchar *Scanner_Option_Menu_Items [] =
-{
-    N_("Fill Tag"),
-    N_("Rename File and Directory"),
-    N_("Process Fields")
-};
-
 typedef enum
 {
     UNKNOWN = 0,           /* Default value when initialized */
@@ -196,6 +170,10 @@ typedef enum
 } Mask_Item_Type;
 
 
+enum {
+    MASK_EDITOR_TEXT,
+    MASK_EDITOR_COUNT
+};
 
 /*
  * Used into Rename File Scanner
@@ -222,52 +200,16 @@ struct _Scan_Mask_Item
 /**************
  * Prototypes *
  **************/
-static void Scan_Tag_With_Mask (ET_File *ETFile);
-static void ScannerWindow_Quit (void);
-static void Scan_Toggle_Legend_Button (void);
-static void Scan_Toggle_Mask_Editor_Button (void);
 static void Scan_Option_Button (void);
 static void entry_check_scan_tag_mask (GtkEntry *entry, gpointer user_data);
 
 static GList *Scan_Generate_New_Tag_From_Mask (ET_File *ETFile, gchar *mask);
-static void Scan_Rename_File_Prefix_Path (void);
 static void Scan_Free_File_Rename_List (GList *list);
 static void Scan_Free_File_Fill_Tag_List (GList *list);
 
 static gchar **Scan_Return_File_Tag_Field_From_Mask_Code (File_Tag *FileTag,
                                                           gchar code);
-static void Scan_Process_Fields_Functions (gchar **string);
-
-static gint Scan_Word_Is_Roman_Numeral (const gchar *text);
-
-static void Process_Fields_Convert_Check_Button_Toggled (GtkWidget *object);
-static void Process_Fields_First_Letters_Check_Button_Toggled (GtkWidget *object);
-static void Select_Fields_Invert_Selection (void);
-static void Select_Fields_Select_Unselect_All (void);
-static void Select_Fields_Set_Sensitive (void);
-
-static void Mask_Editor_List_Row_Selected (GtkTreeSelection* selection,
-                                           gpointer data);
-static void Mask_Editor_List_Set_Row_Visible (GtkTreeModel *treeModel,
-                                              GtkTreeIter *rowIter);
-static void Mask_Editor_List_New (void);
-static void Mask_Editor_List_Duplicate (void);
-static void Mask_Editor_List_Add (void);
-static void Mask_Editor_List_Remove (void);
-static void Mask_Editor_List_Move_Up (void);
-static void Mask_Editor_List_Move_Down (void);
-static void Mask_Editor_List_Save_Button (void);
-static void Mask_Editor_Entry_Changed (void);
-static gboolean Mask_Editor_List_Key_Press (GtkWidget *widget,
-                                            GdkEvent *event);
-
-static void Mask_Editor_Clean_Up_Masks_List (void);
-
-static void Scanner_Option_Menu_Activate_Item (GtkWidget *widget, gpointer data);
-
-static void Scan_Convert_Character (gchar **string);
 static GList *Scan_Generate_New_Tag_From_Mask (ET_File *ETFile, gchar *mask);
-static void Scan_Set_Scanner_Window_Init_Position (void);
 
 static void et_scan_on_response (GtkDialog *dialog, gint response_id,
                                  gpointer user_data);
@@ -277,20 +219,14 @@ static void et_scan_on_response (GtkDialog *dialog, gint response_id,
  * Functions *
  *************/
 
-void Init_ScannerWindow (void)
-{
-    ScannerWindow     = NULL;
-    ScannerOptionCombo= NULL;
-}
-
-
 /*
  * Uses the filename and path to fill tag information
  * Note: mask and source are read from the right to the left
  */
 static void
-Scan_Tag_With_Mask (ET_File *ETFile)
+Scan_Tag_With_Mask (EtScanDialog *self, ET_File *ETFile)
 {
+    EtScanDialogPrivate *priv;
     GList *fill_tag_list = NULL;
     GList *l;
     gchar **dest = NULL;
@@ -298,10 +234,11 @@ Scan_Tag_With_Mask (ET_File *ETFile)
     gchar *filename_utf8;
     File_Tag *FileTag;
 
-    g_return_if_fail (ScannerWindow != NULL && ScanTagMaskCombo != NULL);
     g_return_if_fail (ETFile != NULL);
 
-    mask = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(ScanTagMaskCombo)))));
+    priv = et_scan_dialog_get_instance_private (self);
+
+    mask = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(priv->scan_tag_mask_combo)))));
     if (!mask) return;
 
     // Create a new File_Tag item
@@ -318,25 +255,39 @@ Scan_Tag_With_Mask (ET_File *ETFile)
         // Get the target entry for this code
         dest = Scan_Return_File_Tag_Field_From_Mask_Code(FileTag,mask_item->code);
 
-        // We display the text affected to the code
-        if ( dest && ( OVERWRITE_TAG_FIELD || *dest==NULL || strlen(*dest)==0 ) )
-            ET_Set_Field_File_Tag_Item(dest,mask_item->string);
+        /* We display the text affected to the code. */
+        if (dest && (g_settings_get_boolean (MainSettings,
+                                             "fill-overwrite-tag-fields")
+            || *dest == NULL || strlen (*dest) == 0))
+        {
+            ET_Set_Field_File_Tag_Item (dest, mask_item->string);
+        }
 
     }
 
     Scan_Free_File_Fill_Tag_List(fill_tag_list);
 
-    // Set the default text to comment
-    if (SET_DEFAULT_COMMENT && (OVERWRITE_TAG_FIELD || FileTag->comment==NULL || strlen(FileTag->comment)==0 ) )
-        ET_Set_Field_File_Tag_Item((void *)&FileTag->comment,DEFAULT_COMMENT);
+    /* Set the default text to comment. */
+    if (g_settings_get_boolean (MainSettings, "fill-set-default-comment")
+        && (g_settings_get_boolean (MainSettings, "fill-overwrite-tag-fields")
+            || FileTag->comment == NULL || strlen (FileTag->comment) == 0))
+    {
+        gchar *default_comment = g_settings_get_string (MainSettings,
+                                                        "fill-default-comment");
+        ET_Set_Field_File_Tag_Item ((void *)&FileTag->comment,
+                                    default_comment);
+        g_free (default_comment);
+    }
 
-    // Set CRC-32 value as default comment (for files with ID3 tag only ;-)
-    if (SET_CRC32_COMMENT && (OVERWRITE_TAG_FIELD || FileTag->comment==NULL || strlen(FileTag->comment)==0 ) )
+    /* Set CRC-32 value as default comment (for files with ID3 tag only). */
+    if (g_settings_get_boolean (MainSettings, "fill-crc32-comment")
+        && (g_settings_get_boolean (MainSettings, "fill-overwrite-tag-fields")
+            || FileTag->comment == NULL || strlen (FileTag->comment) == 0))
     {
         GError *error = NULL;
         guint32 crc32_value;
         gchar *buffer;
-        ET_File_Description *ETFileDescription;
+        const ET_File_Description *ETFileDescription;
 
         ETFileDescription = ETFile->ETFileDescription;
         switch (ETFileDescription->TagType)
@@ -353,7 +304,7 @@ Scan_Tag_With_Mask (ET_File *ETFile)
                 else
                 {
                     Log_Print (LOG_ERROR,
-                               _("Cannot calculate CRC value of file (%s)"),
+                               _("Cannot calculate CRC value of file ‘%s’"),
                                error->message);
                     g_error_free (error);
                 }
@@ -368,9 +319,11 @@ Scan_Tag_With_Mask (ET_File *ETFile)
     ET_Manage_Changes_Of_File_Data(ETFile,NULL,FileTag);
 
     g_free(mask);
-    Statusbar_Message(_("Tag successfully scanned"),TRUE);
+    et_application_window_status_bar_message (ET_APPLICATION_WINDOW (MainWindow),
+                                              _("Tag successfully scanned"),
+                                              TRUE);
     filename_utf8 = g_path_get_basename( ((File_Name *)ETFile->FileNameNew->data)->value_utf8 );
-    Log_Print(LOG_OK,_("Tag successfully scanned: %s"),filename_utf8);
+    Log_Print (LOG_OK, _("Tag successfully scanned ‘%s’"), filename_utf8);
     g_free(filename_utf8);
 }
 
@@ -391,6 +344,7 @@ Scan_Generate_New_Tag_From_Mask (ET_File *ETFile, gchar *mask)
     guint mask_splitted_index;
     guint file_splitted_index;
     Scan_Mask_Item *mask_item;
+    EtConvertSpaces convert_mode;
 
     g_return_val_if_fail (ETFile != NULL && mask != NULL, NULL);
 
@@ -411,25 +365,33 @@ Scan_Generate_New_Tag_From_Mask (ET_File *ETFile, gchar *mask)
     if (i==ET_FILE_DESCRIPTION_SIZE)
     {
         gchar *tmp1 = g_path_get_basename(filename_utf8);
-        Log_Print(LOG_ERROR,_("Tag scanner: strange… the extension '%s' was not found in filename '%s'"),tmp,tmp1);
+        Log_Print (LOG_ERROR,
+                   _("The extension ‘%s’ was not found in filename ‘%s’"), tmp,
+                   tmp1);
         g_free(tmp1);
     }
 
-    // Replace characters into mask and filename before parsing
-    if (FTS_CONVERT_UNDERSCORE_AND_P20_INTO_SPACE)
-    {
-        Scan_Convert_Underscore_Into_Space(mask);
-        Scan_Convert_Underscore_Into_Space(filename_utf8);
-        Scan_Convert_P20_Into_Space(mask);
-        Scan_Convert_P20_Into_Space(filename_utf8);
-    }
-    if (FTS_CONVERT_SPACE_INTO_UNDERSCORE)
+    /* Replace characters into mask and filename before parsing. */
+    convert_mode = g_settings_get_enum (MainSettings, "fill-convert-spaces");
+
+    switch (convert_mode)
     {
-        Scan_Convert_Space_Into_Underscore (mask);
-        Scan_Convert_Space_Into_Underscore (filename_utf8);
+        case ET_CONVERT_SPACES_SPACES:
+            Scan_Convert_Underscore_Into_Space (mask);
+            Scan_Convert_Underscore_Into_Space (filename_utf8);
+            Scan_Convert_P20_Into_Space (mask);
+            Scan_Convert_P20_Into_Space (filename_utf8);
+            break;
+        case ET_CONVERT_SPACES_UNDERSCORES:
+            Scan_Convert_Space_Into_Underscore (mask);
+            Scan_Convert_Space_Into_Underscore (filename_utf8);
+            break;
+        case ET_CONVERT_SPACES_NO_CHANGE:
+            break;
+        default:
+            g_assert_not_reached ();
     }
 
-
     // Split the Scanner mask
     mask_splitted = g_strsplit(mask,G_DIR_SEPARATOR_S,0);
     // Get number of arguments into 'mask_splitted'
@@ -493,7 +455,9 @@ Scan_Generate_New_Tag_From_Mask (ET_File *ETFile, gchar *mask)
                     file_seq = file_seq + len; // We remove it
                 }else
                 {
-                    Log_Print(LOG_ERROR,_("Scan Error: can't find separator '%s' within '%s'"),buf,file_seq_utf8);
+                    Log_Print (LOG_ERROR,
+                               _("Cannot find separator ‘%s’ within ‘%s’"),
+                               buf, file_seq_utf8);
                 }
                 g_free(buf);
             }
@@ -522,7 +486,9 @@ Scan_Generate_New_Tag_From_Mask (ET_File *ETFile, gchar *mask)
                 // Try to find the separator in 'file_seq'
                 if ( (tmp=strstr(file_seq,separator)) == NULL )
                 {
-                    Log_Print(LOG_ERROR,_("Scan Error: can't find separator '%s' within '%s'"),separator,file_seq_utf8);
+                    Log_Print (LOG_ERROR,
+                               _("Cannot find separator ‘%s’ within ‘%s’"),
+                               separator, file_seq_utf8);
                     separator[0] = 0; // Needed to avoid error when calculting 'len' below
                 }
 
@@ -562,19 +528,22 @@ Scan_Generate_New_Tag_From_Mask (ET_File *ETFile, gchar *mask)
     return fill_tag_list;
 }
 
-void Scan_Fill_Tag_Generate_Preview (void)
+static void
+Scan_Fill_Tag_Generate_Preview (EtScanDialog *self)
 {
+    EtScanDialogPrivate *priv;
     gchar *mask = NULL;
     gchar *preview_text = NULL;
     GList *fill_tag_list = NULL;
     GList *l;
 
+    priv = et_scan_dialog_get_instance_private (self);
+
     if (!ETCore->ETFileDisplayedList
-    ||  !ScannerWindow || !RenameFileMaskCombo || !FillTagPreviewLabel
-    ||  gtk_combo_box_get_active(GTK_COMBO_BOX(ScannerOptionCombo)) != SCANNER_FILL_TAG)
+        || gtk_notebook_get_current_page (GTK_NOTEBOOK (priv->notebook)) != ET_SCAN_MODE_FILL_TAG)
         return;
 
-    mask = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(ScanTagMaskCombo)))));
+    mask = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(priv->scan_tag_mask_combo)))));
     if (!mask)
         return;
 
@@ -600,25 +569,81 @@ void Scan_Fill_Tag_Generate_Preview (void)
 
     Scan_Free_File_Fill_Tag_List(fill_tag_list);
 
-    if (GTK_IS_LABEL(FillTagPreviewLabel))
+    if (GTK_IS_LABEL(priv->fill_tag_preview_label))
+    {
+        if (preview_text)
+        {
+            //gtk_label_set_text(GTK_LABEL(priv->fill_tag_preview_label),preview_text);
+            gtk_label_set_markup(GTK_LABEL(priv->fill_tag_preview_label),preview_text);
+        } else
+        {
+            gtk_label_set_text(GTK_LABEL(priv->fill_tag_preview_label),"");
+        }
+
+        /* Force the window to be redrawn. */
+        gtk_widget_queue_resize (GTK_WIDGET (self));
+    }
+
+    g_free(mask);
+    g_free(preview_text);
+}
+
+static void
+Scan_Rename_File_Generate_Preview (EtScanDialog *self)
+{
+    EtScanDialogPrivate *priv;
+    gchar *preview_text = NULL;
+    gchar *mask = NULL;
+
+    priv = et_scan_dialog_get_instance_private (self);
+
+    if (!ETCore->ETFileDisplayed
+    || !priv->rename_file_mask_combo || !priv->rename_file_preview_label)
+        return;
+
+    if (gtk_notebook_get_current_page (GTK_NOTEBOOK (priv->notebook)) != ET_SCAN_MODE_RENAME_FILE)
+        return;
+
+    mask = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(priv->rename_file_mask_combo)))));
+    if (!mask)
+        return;
+
+    preview_text = et_scan_generate_new_filename_from_mask (ETCore->ETFileDisplayed,
+                                                            mask, FALSE);
+
+    if (GTK_IS_LABEL(priv->rename_file_preview_label))
     {
         if (preview_text)
         {
-            //gtk_label_set_text(GTK_LABEL(FillTagPreviewLabel),preview_text);
-            gtk_label_set_markup(GTK_LABEL(FillTagPreviewLabel),preview_text);
+            //gtk_label_set_text(GTK_LABEL(priv->rename_file_preview_label),preview_text);
+            gchar *tmp_string = g_markup_printf_escaped("%s",preview_text); // To avoid problem with strings containing characters like '&'
+            gchar *str = g_strdup_printf("<i>%s</i>",tmp_string);
+            gtk_label_set_markup(GTK_LABEL(priv->rename_file_preview_label),str);
+            g_free(tmp_string);
+            g_free(str);
         } else
         {
-            gtk_label_set_text(GTK_LABEL(FillTagPreviewLabel),"");
+            gtk_label_set_text(GTK_LABEL(priv->rename_file_preview_label),"");
         }
 
-        // Force the window to be redrawed
-        gtk_widget_queue_resize(ScannerWindow);
+        /* Force the window to be redrawn. */
+        gtk_widget_queue_resize (GTK_WIDGET (self));
     }
 
     g_free(mask);
     g_free(preview_text);
 }
 
+
+void
+et_scan_dialog_update_previews (EtScanDialog *self)
+{
+    g_return_if_fail (ET_SCAN_DIALOG (self));
+
+    Scan_Fill_Tag_Generate_Preview (self);
+    Scan_Rename_File_Generate_Preview (self);
+}
+
 static void
 Scan_Free_File_Fill_Tag_List (GList *list)
 {
@@ -649,23 +674,27 @@ Scan_Free_File_Fill_Tag_List (GList *list)
  * Note1: a mask code may be used severals times...
  */
 static void
-Scan_Rename_File_With_Mask (ET_File *ETFile)
+Scan_Rename_File_With_Mask (EtScanDialog *self, ET_File *ETFile)
 {
+    EtScanDialogPrivate *priv;
     gchar *filename_generated_utf8 = NULL;
     gchar *filename_generated = NULL;
     gchar *filename_new_utf8 = NULL;
     gchar *mask = NULL;
     File_Name *FileName;
 
-    g_return_if_fail (ScannerWindow != NULL || RenameFileMaskCombo != NULL ||
-                      ETFile != NULL);
+    g_return_if_fail (ETFile != NULL);
+
+    priv = et_scan_dialog_get_instance_private (self);
 
-    mask = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(RenameFileMaskCombo)))));
+    mask = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(priv->rename_file_mask_combo)))));
     if (!mask) return;
 
     // Note : if the first character is '/', we have a path with the filename,
     // else we have only the filename. The both are in UTF-8.
-    filename_generated_utf8 = Scan_Generate_New_Filename_From_Mask(ETFile,mask,FALSE);
+    filename_generated_utf8 = et_scan_generate_new_filename_from_mask (ETFile,
+                                                                       mask,
+                                                                       FALSE);
     g_free(mask);
 
     if (!filename_generated_utf8)
@@ -681,11 +710,11 @@ Scan_Rename_File_With_Mask (ET_File *ETFile)
     if (!filename_generated)
     {
         GtkWidget *msgdialog;
-        msgdialog = gtk_message_dialog_new(GTK_WINDOW(ScannerWindow),
+        msgdialog = gtk_message_dialog_new (GTK_WINDOW (self),
                              GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
                              GTK_MESSAGE_ERROR,
                              GTK_BUTTONS_CLOSE,
-                             _("Could not convert filename '%s' into system filename encoding"),
+                             _("Could not convert filename ‘%s’ into system filename encoding"),
                              filename_generated_utf8);
         gtk_window_set_title(GTK_WINDOW(msgdialog),_("Filename translation"));
 
@@ -709,10 +738,12 @@ Scan_Rename_File_With_Mask (ET_File *ETFile)
     ET_Manage_Changes_Of_File_Data(ETFile,FileName,NULL);
     g_free(filename_new_utf8);
 
-    Statusbar_Message (_("New filename successfully scanned"),TRUE);
+    et_application_window_status_bar_message (ET_APPLICATION_WINDOW (MainWindow),
+                                              _("New filename successfully scanned"),
+                                              TRUE);
 
     filename_new_utf8 = g_path_get_basename(((File_Name *)ETFile->FileNameNew->data)->value_utf8);
-    Log_Print (LOG_OK, _("New filename successfully scanned: %s"),
+    Log_Print (LOG_OK, _("New filename successfully scanned ‘%s’"),
                filename_new_utf8);
     g_free(filename_new_utf8);
 
@@ -729,7 +760,10 @@ Scan_Rename_File_With_Mask (ET_File *ETFile)
  *      function "Write_Playlist" for the content of the playlist.
  * Returns filename in UTF-8
  */
-gchar *Scan_Generate_New_Filename_From_Mask (ET_File *ETFile, gchar *mask, gboolean no_dir_check_or_conversion)
+gchar *
+et_scan_generate_new_filename_from_mask (const ET_File *ETFile,
+                                         const gchar *mask,
+                                         gboolean no_dir_check_or_conversion)
 {
     gchar *tmp;
     gchar **source = NULL;
@@ -796,20 +830,26 @@ gchar *Scan_Generate_New_Filename_From_Mask (ET_File *ETFile, gchar *mask, gbool
             /* Do not replace characters in a playlist information field. */
             if (!no_dir_check_or_conversion)
             {
-                ET_File_Name_Convert_Character(mask_item->string);
+                EtConvertSpaces convert_mode;
 
-                if (RFS_CONVERT_UNDERSCORE_AND_P20_INTO_SPACE)
-                {
-                    Scan_Convert_Underscore_Into_Space(mask_item->string);
-                    Scan_Convert_P20_Into_Space(mask_item->string);
-                }
-                if (RFS_CONVERT_SPACE_INTO_UNDERSCORE)
-                {
-                    Scan_Convert_Space_Into_Underscore (mask_item->string);
-                }
-                if (RFS_REMOVE_SPACES)
+                ET_File_Name_Convert_Character (mask_item->string);
+                convert_mode = g_settings_get_enum (MainSettings,
+                                                    "rename-convert-spaces");
+
+                switch (convert_mode)
                 {
-                    Scan_Remove_Spaces(mask_item->string);
+                    case ET_CONVERT_SPACES_SPACES:
+                        Scan_Convert_Underscore_Into_Space (mask_item->string);
+                        Scan_Convert_P20_Into_Space (mask_item->string);
+                        break;
+                    case ET_CONVERT_SPACES_UNDERSCORES:
+                        Scan_Convert_Space_Into_Underscore (mask_item->string);
+                        break;
+                    case ET_CONVERT_SPACES_REMOVE:
+                        Scan_Remove_Spaces (mask_item->string);
+                        break;
+                    default:
+                        g_assert_not_reached ();
                 }
             }
         }else
@@ -937,48 +977,6 @@ gchar *Scan_Generate_New_Filename_From_Mask (ET_File *ETFile, gchar *mask, gbool
     return filename_new_utf8; // in UTF-8!
 }
 
-void Scan_Rename_File_Generate_Preview (void)
-{
-    gchar *preview_text = NULL;
-    gchar *mask = NULL;
-
-    if (!ETCore->ETFileDisplayed
-    ||  !ScannerWindow || !RenameFileMaskCombo || !RenameFilePreviewLabel)
-        return;
-
-    if (gtk_combo_box_get_active(GTK_COMBO_BOX(ScannerOptionCombo)) != SCANNER_RENAME_FILE)
-        return;
-
-    mask = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(RenameFileMaskCombo)))));
-    if (!mask)
-        return;
-
-    preview_text = Scan_Generate_New_Filename_From_Mask(ETCore->ETFileDisplayed,mask,FALSE);
-
-    if (GTK_IS_LABEL(RenameFilePreviewLabel))
-    {
-        if (preview_text)
-        {
-            //gtk_label_set_text(GTK_LABEL(RenameFilePreviewLabel),preview_text);
-            gchar *tmp_string = g_markup_printf_escaped("%s",preview_text); // To avoid problem with strings containing characters like '&'
-            gchar *str = g_strdup_printf("<i>%s</i>",tmp_string);
-            gtk_label_set_markup(GTK_LABEL(RenameFilePreviewLabel),str);
-            g_free(tmp_string);
-            g_free(str);
-        } else
-        {
-            gtk_label_set_text(GTK_LABEL(RenameFilePreviewLabel),"");
-        }
-
-        // Force the window to be redrawed
-        gtk_widget_queue_resize(ScannerWindow);
-    }
-
-    g_free(mask);
-    g_free(preview_text);
-}
-
-
 static void
 Scan_Free_File_Rename_List (GList *list)
 {
@@ -1000,8 +998,9 @@ Scan_Free_File_Rename_List (GList *list)
  * Adds the current path of the file to the mask on the "Rename File Scanner" entry
  */
 static void
-Scan_Rename_File_Prefix_Path (void)
+Scan_Rename_File_Prefix_Path (EtScanDialog *self)
 {
+    EtScanDialogPrivate *priv;
     gint pos;
     gchar *path_tmp;
     const gchar *combo_text = NULL;
@@ -1016,12 +1015,13 @@ Scan_Rename_File_Prefix_Path (void)
     }
 
     filename_utf8_cur = ((File_Name *)ETFile->FileNameCur->data)->value_utf8;
+    priv = et_scan_dialog_get_instance_private (self);
 
     // The path to prefix
     path_utf8_cur = g_path_get_dirname(filename_utf8_cur);
 
     // The current text in the combobox
-    combo_text = gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(RenameFileMaskCombo))));
+    combo_text = gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(priv->rename_file_mask_combo))));
     /*if (!g_utf8_validate(combo_text, -1, NULL))
     {
         combo_tmp = convert_to_utf8(combo_text);
@@ -1043,7 +1043,7 @@ Scan_Rename_File_Prefix_Path (void)
             path_tmp = g_strconcat(path_utf8_cur,G_DIR_SEPARATOR_S,NULL);
         }
 	pos = 0;
-        gtk_editable_insert_text(GTK_EDITABLE(gtk_bin_get_child(GTK_BIN(RenameFileMaskCombo))),path_tmp, -1, &pos);
+        gtk_editable_insert_text(GTK_EDITABLE(gtk_bin_get_child(GTK_BIN(priv->rename_file_mask_combo))),path_tmp, -1, &pos);
         g_free(path_tmp);
     }
 
@@ -1051,52 +1051,148 @@ Scan_Rename_File_Prefix_Path (void)
 }
 
 
-/*******************************
- * Scanner To Rename Directory *
- *******************************/
-void Scan_Rename_Directory_Generate_Preview (void)
+gchar *
+et_scan_generate_new_directory_name_from_mask (const ET_File *ETFile,
+                                               const gchar *mask,
+                                               gboolean no_dir_check_or_conversion)
 {
-    gchar *preview_text = NULL;
-    gchar *mask = NULL;
+    return et_scan_generate_new_filename_from_mask (ETFile, mask,
+                                                    no_dir_check_or_conversion);
+}
 
-    if (!ETCore->ETFileDisplayed
-    ||  !RenameDirectoryWindow || !RenameDirectoryMaskCombo || !RenameDirectoryPreviewLabel)
-        return;
 
-    mask = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(RenameDirectoryMaskCombo)))));
-    if (!mask)
-        return;
+/*
+ * Replace something with something else ;)
+ * Here use Regular Expression, to search and replace.
+ */
+static void
+Scan_Convert_Character (EtScanDialog *self, gchar **string)
+{
+    EtScanDialogPrivate *priv;
+    gchar *from;
+    gchar *to;
+    GRegex *regex;
+    GError *regex_error = NULL;
+    gchar *new_string;
+
+    priv = et_scan_dialog_get_instance_private (self);
 
-    preview_text = Scan_Generate_New_Filename_From_Mask(ETCore->ETFileDisplayed,mask,FALSE);
+    from = gtk_editable_get_chars (GTK_EDITABLE (priv->process_convert_from_entry), 0,
+                                 -1);
+    to = gtk_editable_get_chars (GTK_EDITABLE (priv->process_convert_to_entry), 0, -1);
 
-    if (GTK_IS_LABEL(RenameDirectoryPreviewLabel))
+    regex = g_regex_new (from, 0, 0, &regex_error);
+    if (regex_error != NULL)
     {
-        if (preview_text)
-        {
-            //gtk_label_set_text(GTK_LABEL(RenameFilePreviewLabel),preview_text);
-            gchar *tmp_string = g_markup_printf_escaped("%s",preview_text); // To avoid problem with strings containing characters like '&'
-            gchar *str = g_strdup_printf("<i>%s</i>",tmp_string);
-            gtk_label_set_markup(GTK_LABEL(RenameDirectoryPreviewLabel),str);
-            g_free(tmp_string);
-            g_free(str);
-        } else
-        {
-            gtk_label_set_text(GTK_LABEL(RenameDirectoryPreviewLabel),"");
-        }
+        goto handle_error;
+    }
 
-        // Force the window to be redrawed else the preview label may be not placed correctly
-        gtk_widget_queue_resize(RenameDirectoryWindow);
+    new_string = g_regex_replace (regex, *string, -1, 0, to, 0, &regex_error);
+    if (regex_error != NULL)
+    {
+        g_free (new_string);
+        g_regex_unref (regex);
+        goto handle_error;
     }
 
-    g_free(mask);
-    g_free(preview_text);
+    /* Success. */
+    g_regex_unref (regex);
+    g_free (*string);
+    *string = new_string;
+
+out:
+    g_free (from);
+    g_free (to);
+    return;
+
+handle_error:
+    Log_Print (LOG_ERROR, _("Error while processing fields ‘%s’"),
+               regex_error->message);
+
+    g_error_free (regex_error);
+
+    goto out;
 }
 
-gchar *Scan_Generate_New_Directory_Name_From_Mask (ET_File *ETFile, gchar *mask, gboolean no_dir_check_or_conversion)
+static void
+Scan_Process_Fields_Functions (EtScanDialog *self, gchar **string)
 {
-    return Scan_Generate_New_Filename_From_Mask(ETFile,mask,no_dir_check_or_conversion);
-}
+    EtScanDialogPrivate *priv;
+    EtProcessFieldsConvert process;
+
+    priv = et_scan_dialog_get_instance_private (self);
+
+    process = g_settings_get_enum (MainSettings, "process-convert");
+
+    switch (process)
+    {
+        case ET_PROCESS_FIELDS_CONVERT_SPACES:
+            Scan_Convert_Underscore_Into_Space (*string);
+            Scan_Convert_P20_Into_Space (*string);
+            break;
+        case ET_PROCESS_FIELDS_CONVERT_UNDERSCORES:
+            Scan_Convert_Space_Into_Underscore (*string);
+            break;
+        case ET_PROCESS_FIELDS_CONVERT_CHARACTERS:
+            Scan_Convert_Character (self, string);
+            break;
+        case ET_PROCESS_FIELDS_CONVERT_NO_CHANGE:
+            break;
+    }
+
+    /* FIXME: Use GSettings keys instead of toggle buton states. */
+    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_insert_space_toggle)))
+    {
+        gchar *res;
+        res = Scan_Process_Fields_Insert_Space (*string);
+        g_free (*string);
+        *string = res;
+    }
+
+    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_insert_one_space_toggle)))
+        Scan_Process_Fields_Keep_One_Space(*string);
+
+    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_all_uppercase_toggle)))
+    {
+        gchar *res;
+        res = Scan_Process_Fields_All_Uppercase (*string);
+        g_free (*string);
+        *string = res;
+    }
+
+    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_all_lowercase_toggle)))
+    {
+        gchar *res;
+        res = Scan_Process_Fields_All_Downcase (*string);
+        g_free (*string);
+        *string = res;
+    }
+
+    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_first_uppercase_toggle)))
+    {
+        gchar *res;
+        res = Scan_Process_Fields_Letter_Uppercase (*string);
+        g_free (*string);
+        *string = res;
+    }
+
+    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_first_style_uppercase_toggle)))
+    {
+        gboolean uppercase_preps;
+        gboolean handle_roman;
+
+        uppercase_preps = g_settings_get_boolean (MainSettings,
+                                                  "process-uppercase-prepositions");
+        handle_roman = g_settings_get_boolean (MainSettings,
+                                               "process-detect-roman-numerals");
+        Scan_Process_Fields_First_Letters_Uppercase (string, uppercase_preps,
+                                                     handle_roman);
+    }
+
+    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_remove_space_toggle)))
+        Scan_Process_Fields_Remove_Space(*string);
 
+}
 
 
 /*****************************
@@ -1104,24 +1200,27 @@ gchar *Scan_Generate_New_Directory_Name_From_Mask (ET_File *ETFile, gchar *mask,
  *****************************/
 /* See also functions : Convert_P20_And_Undescore_Into_Spaces, ... in easytag.c */
 static void
-Scan_Process_Fields (ET_File *ETFile)
+Scan_Process_Fields (EtScanDialog *self, ET_File *ETFile)
 {
     File_Name *FileName = NULL;
     File_Tag  *FileTag  = NULL;
     File_Name *st_filename;
     File_Tag  *st_filetag;
+    guint process_fields;
     gchar     *filename_utf8;
     gchar     *string;
 
-    g_return_if_fail (ScannerWindow != NULL || ETFile != NULL);
+    g_return_if_fail (ETFile != NULL);
 
     st_filename = (File_Name *)ETFile->FileNameNew->data;
     st_filetag  = (File_Tag  *)ETFile->FileTag->data;
+    process_fields = g_settings_get_flags (MainSettings, "process-fields");
 
     /* Process the filename */
     if (st_filename != NULL)
     {
-        if (st_filename->value_utf8 && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFileNameField)))
+        if (st_filename->value_utf8 
+            && (process_fields & ET_PROCESS_FIELD_FILENAME))
         {
             gchar *string_utf8;
             gchar *pos;
@@ -1135,7 +1234,7 @@ Scan_Process_Fields (ET_File *ETFile)
             // Remove the extension to set it to lower case (to avoid problem with undo)
             if ((pos=strrchr(string,'.'))!=NULL) *pos = 0;
 
-            Scan_Process_Fields_Functions(&string);
+            Scan_Process_Fields_Functions (self, &string);
 
             string_utf8 = ET_File_Name_Generate(ETFile,string);
             ET_Set_Filename_File_Name_Item(FileName,string_utf8,NULL);
@@ -1147,8 +1246,9 @@ Scan_Process_Fields (ET_File *ETFile)
     /* Process data of the tag */
     if (st_filetag != NULL)
     {
-        // Title field
-        if (st_filetag->title && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessTitleField)))
+        /* Title field. */
+        if (st_filetag->title
+            && (process_fields & ET_PROCESS_FIELD_TITLE))
         {
             if (!FileTag)
             {
@@ -1158,15 +1258,16 @@ Scan_Process_Fields (ET_File *ETFile)
 
             string = g_strdup(st_filetag->title);
 
-            Scan_Process_Fields_Functions(&string);
+            Scan_Process_Fields_Functions (self, &string);
 
             ET_Set_Field_File_Tag_Item(&FileTag->title,string);
 
             g_free(string);
         }
 
-        // Artist field
-        if (st_filetag->artist && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessArtistField)))
+        /* Artist field. */
+        if (st_filetag->artist
+            && (process_fields & ET_PROCESS_FIELD_ARTIST))
         {
             if (!FileTag)
             {
@@ -1176,15 +1277,16 @@ Scan_Process_Fields (ET_File *ETFile)
 
             string = g_strdup(st_filetag->artist);
 
-            Scan_Process_Fields_Functions(&string);
+            Scan_Process_Fields_Functions (self, &string);
 
             ET_Set_Field_File_Tag_Item(&FileTag->artist,string);
 
             g_free(string);
         }
 
-		// Album Artist field
-        if (st_filetag->album_artist && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessAlbumArtistField)))
+        /* Album Artist field. */
+        if (st_filetag->album_artist
+            && (process_fields & ET_PROCESS_FIELD_ALBUM_ARTIST))
         {
             if (!FileTag)
             {
@@ -1194,14 +1296,16 @@ Scan_Process_Fields (ET_File *ETFile)
 
             string = g_strdup(st_filetag->album_artist);
 
-            Scan_Process_Fields_Functions(&string);
+            Scan_Process_Fields_Functions (self, &string);
 
             ET_Set_Field_File_Tag_Item(&FileTag->album_artist,string);
 
             g_free(string);
         }
-        // Album field
-        if (st_filetag->album && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessAlbumField)))
+
+        /* Album field. */
+        if (st_filetag->album
+            && (process_fields & ET_PROCESS_FIELD_ALBUM))
         {
             if (!FileTag)
             {
@@ -1211,15 +1315,16 @@ Scan_Process_Fields (ET_File *ETFile)
 
             string = g_strdup(st_filetag->album);
 
-            Scan_Process_Fields_Functions(&string);
+            Scan_Process_Fields_Functions (self, &string);
 
             ET_Set_Field_File_Tag_Item(&FileTag->album,string);
 
             g_free(string);
         }
 
-        // Genre field
-        if (st_filetag->genre && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessGenreField)))
+        /* Genre field. */
+        if (st_filetag->genre
+            && (process_fields & ET_PROCESS_FIELD_GENRE))
         {
             if (!FileTag)
             {
@@ -1229,15 +1334,16 @@ Scan_Process_Fields (ET_File *ETFile)
 
             string = g_strdup(st_filetag->genre);
 
-            Scan_Process_Fields_Functions(&string);
+            Scan_Process_Fields_Functions (self, &string);
 
             ET_Set_Field_File_Tag_Item(&FileTag->genre,string);
 
             g_free(string);
         }
 
-        // Comment field
-        if (st_filetag->comment && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessCommentField)))
+        /* Comment field. */
+        if (st_filetag->comment
+            && (process_fields & ET_PROCESS_FIELD_COMMENT))
         {
             if (!FileTag)
             {
@@ -1247,15 +1353,16 @@ Scan_Process_Fields (ET_File *ETFile)
 
             string = g_strdup(st_filetag->comment);
 
-            Scan_Process_Fields_Functions(&string);
+            Scan_Process_Fields_Functions (self, &string);
 
             ET_Set_Field_File_Tag_Item(&FileTag->comment,string);
 
             g_free(string);
         }
 
-        // Composer field
-        if (st_filetag->composer && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessComposerField)))
+        /* Composer field. */
+        if (st_filetag->composer
+            && (process_fields & ET_PROCESS_FIELD_COMPOSER))
         {
             if (!FileTag)
             {
@@ -1265,15 +1372,16 @@ Scan_Process_Fields (ET_File *ETFile)
 
             string = g_strdup(st_filetag->composer);
 
-            Scan_Process_Fields_Functions(&string);
+            Scan_Process_Fields_Functions (self, &string);
 
             ET_Set_Field_File_Tag_Item(&FileTag->composer,string);
 
             g_free(string);
         }
 
-        // Original artist field
-        if (st_filetag->orig_artist && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessOrigArtistField)))
+        /* Original artist field. */
+        if (st_filetag->orig_artist
+            && (process_fields & ET_PROCESS_FIELD_ORIGINAL_ARTIST))
         {
             if (!FileTag)
             {
@@ -1283,15 +1391,16 @@ Scan_Process_Fields (ET_File *ETFile)
 
             string = g_strdup(st_filetag->orig_artist);
 
-            Scan_Process_Fields_Functions(&string);
+            Scan_Process_Fields_Functions (self, &string);
 
             ET_Set_Field_File_Tag_Item(&FileTag->orig_artist,string);
 
             g_free(string);
         }
 
-        // Copyright field
-        if (st_filetag->copyright && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessCopyrightField)))
+        /* Copyright field. */
+        if (st_filetag->copyright
+            && (process_fields & ET_PROCESS_FIELD_COPYRIGHT))
         {
             if (!FileTag)
             {
@@ -1301,15 +1410,16 @@ Scan_Process_Fields (ET_File *ETFile)
 
             string = g_strdup(st_filetag->copyright);
 
-            Scan_Process_Fields_Functions(&string);
+            Scan_Process_Fields_Functions (self, &string);
 
             ET_Set_Field_File_Tag_Item(&FileTag->copyright,string);
 
             g_free(string);
         }
 
-        // URL field
-        if (st_filetag->url && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessURLField)))
+        /* URL field. */
+        if (st_filetag->url
+            && (process_fields & ET_PROCESS_FIELD_URL))
         {
             if (!FileTag)
             {
@@ -1319,15 +1429,16 @@ Scan_Process_Fields (ET_File *ETFile)
 
             string = g_strdup(st_filetag->url);
 
-            Scan_Process_Fields_Functions(&string);
+            Scan_Process_Fields_Functions (self, &string);
 
             ET_Set_Field_File_Tag_Item(&FileTag->url,string);
 
             g_free(string);
         }
 
-        // 'Encoded by' field
-        if (st_filetag->encoded_by && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessEncodedByField)))
+        /* 'Encoded by' field. */
+        if (st_filetag->encoded_by
+            && (process_fields & ET_PROCESS_FIELD_ENCODED_BY))
         {
             if (!FileTag)
             {
@@ -1337,7 +1448,7 @@ Scan_Process_Fields (ET_File *ETFile)
 
             string = g_strdup(st_filetag->encoded_by);
 
-            Scan_Process_Fields_Functions(&string);
+            Scan_Process_Fields_Functions (self, &string);
 
             ET_Set_Field_File_Tag_Item(&FileTag->encoded_by,string);
 
@@ -1355,369 +1466,13 @@ Scan_Process_Fields (ET_File *ETFile)
 
 }
 
-
-static void
-Scan_Process_Fields_Functions (gchar **string)
+/*
+ * Return the field of a 'File_Tag' structure corresponding to the mask code
+ */
+static gchar
+**Scan_Return_File_Tag_Field_From_Mask_Code (File_Tag *FileTag, gchar code)
 {
-    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsConvertIntoSpace)))
-    {
-        Scan_Convert_Underscore_Into_Space(*string);
-        Scan_Convert_P20_Into_Space(*string);
-    }
-
-    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsConvertSpace)))
-        Scan_Convert_Space_Into_Underscore (*string);
-
-    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsInsertSpace)))
-    {
-        gchar *res;
-        res = Scan_Process_Fields_Insert_Space (*string);
-        g_free (*string);
-        *string = res;
-    }
-
-    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsOnlyOneSpace)))
-        Scan_Process_Fields_Keep_One_Space(*string);
-
-    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsConvert)))
-        Scan_Convert_Character(string);
-
-    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsAllUppercase)))
-    {
-        gchar *res;
-        res = Scan_Process_Fields_All_Uppercase (*string);
-        g_free (*string);
-        *string = res;
-    }
-
-    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsAllDowncase)))
-    {
-        gchar *res;
-        res = Scan_Process_Fields_All_Downcase (*string);
-        g_free (*string);
-        *string = res;
-    }
-
-    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsFirstLetterUppercase)))
-    {
-        gchar *res;
-        res = Scan_Process_Fields_Letter_Uppercase (*string);
-        g_free (*string);
-        *string = res;
-    }
-
-    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsFirstLettersUppercase)))
-    {
-        Scan_Process_Fields_First_Letters_Uppercase (string);
-    }
-
-    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsRemoveSpace)))
-        Scan_Process_Fields_Remove_Space(*string);
-
-}
-
-/*
- * Function to set the first letter of each word to uppercase, according the "Chicago Manual of Style" (http://www.docstyles.com/cmscrib.htm#Note2)
- * No needed to reallocate
- */
-void
-Scan_Process_Fields_First_Letters_Uppercase (gchar **str)
-{
-/**** DANIEL TEST *****
-    gchar *iter;
-    gchar utf8_character[6];
-    gboolean set_to_upper_case = TRUE;
-    gunichar c;
-
-    for (iter = text; *iter; iter = g_utf8_next_char(iter))
-    {
-        c = g_utf8_get_char(iter);
-        if (set_to_upper_case && g_unichar_islower(c))
-            strncpy(iter, utf8_character, g_unichar_to_utf8(g_unichar_toupper(c), utf8_character));
-        else if (!set_to_upper_case && g_unichar_isupper(c))
-            strncpy(iter, utf8_character, g_unichar_to_utf8(g_unichar_tolower(c), utf8_character));
-
-        set_to_upper_case = (g_unichar_isalpha(c)
-                            || c == (gunichar)'.'
-                            || c == (gunichar)'\''
-                            || c == (gunichar)'`') ? FALSE : TRUE;
-    }
-****/
-/**** Barış Çiçek version ****/
-    gchar *string = *str;
-    gchar *word, *word1, *word2, *temp;
-    gint i, len;
-    gchar utf8_character[6];
-    gunichar c;
-    gboolean set_to_upper_case, set_to_upper_case_tmp;
-    // There have to be space at the end of words to seperate them from prefix
-    // Chicago Manual of Style "Heading caps" Capitalization Rules (CMS 1993, 282) (http://www.docstyles.com/cmscrib.htm#Note2)
-    const gchar * exempt[] =
-    {
-        "a ",       "a_",
-        "against ", "against_",
-        "an ",      "an_",
-        "and ",     "and_",
-        "at ",      "at_",
-        "between ", "between_",
-        "but ",     "but_",
-        //"feat. ",   "feat._", // Removed by Slash Bunny
-        "for ",     "for_",
-        "in ",      "in_",
-        "nor ",     "nor_",
-        "of ",      "of_",
-        //"off ",     "off_",   // Removed by Slash Bunny
-        "on ",      "on_",
-        "or ",      "or_",
-        //"over ",    "over_",  // Removed by Slash Bunny
-        "so ",      "so_",
-        "the ",     "the_",
-        "to ",      "to_",
-        "with ",    "with_",
-        "yet ",     "yet_",
-        NULL
-    };
-
-    if (!PFS_DONT_UPPER_SOME_WORDS)
-    {
-        exempt[0] = NULL;
-    }
-
-    temp = Scan_Process_Fields_All_Downcase (string);
-    g_free (*str);
-    *str = string = temp;
-
-    if (!g_utf8_validate(string,-1,NULL))
-    {
-        Log_Print(LOG_ERROR,"Scan_Process_Fields_First_Letters_Uppercase: Not a valid utf8! quiting");
-        return;
-    }
-    // Removes trailing whitespace
-    string = g_strchomp(string);
-
-    temp = string;
-
-    // If the word is a roman numeral, capitalize all of it
-    if ((len = Scan_Word_Is_Roman_Numeral(temp)))
-    {
-        gchar *tmp = g_utf8_strup (temp, len);
-        strncpy (string, tmp, len);
-        g_free (tmp);
-    } else
-    {
-        // Set first character to uppercase
-        c = g_utf8_get_char(temp);
-        strncpy(string, utf8_character, g_unichar_to_utf8(g_unichar_toupper(c), utf8_character));
-    }
-
-    // Uppercase first character of each word, except for 'exempt[]' words lists
-    while ( temp )
-    {
-        word = temp; // Needed if there is only one word
-        word1 = g_utf8_strchr(temp,-1,' ');
-        word2 = g_utf8_strchr(temp,-1,'_');
-
-        // Take the first string found (near beginning of string)
-        if (word1 && word2)
-            word = MIN(word1,word2);
-        else if (word1)
-            word = word1;
-        else if (word2)
-            word = word2;
-        else
-        {
-            // Last word of the string: the first letter is always uppercase,
-            // even if it's in the exempt list. This is a Chicago Manual of Style rule.
-            // Last Word In String - Should Capitalize Regardless of Word (Chicago Manual of Style)
-            c = g_utf8_get_char(word);
-            strncpy(word, utf8_character, g_unichar_to_utf8(g_unichar_toupper(c), utf8_character));
-            break;
-        }
-
-        // Go to first character of the word (char. after ' ' or '_')
-        word = word+1;
-
-        // If the word is a roman numeral, capitalize all of it
-        if ((len = Scan_Word_Is_Roman_Numeral(word)))
-        {
-            gchar *tmp = g_utf8_strup (word, len);
-            strncpy (word, tmp, len);
-            g_free (tmp);
-        } else
-        {
-            // Set uppercase the first character of this word
-            c = g_utf8_get_char(word);
-            strncpy(word, utf8_character, g_unichar_to_utf8(g_unichar_toupper(c), utf8_character));
-
-            // Set lowercase the first character of this word if found in the exempt words list
-            for (i=0; exempt[i]!=NULL; i++)
-            {
-                if (g_ascii_strncasecmp(exempt[i], word, strlen(exempt[i])) == 0)
-                {
-                    c = g_utf8_get_char(word);
-                    strncpy(word, utf8_character, g_unichar_to_utf8(g_unichar_tolower(c), utf8_character));
-                    break;
-                }
-            }
-        }
-
-        temp = word;
-    }
-
-    // Uppercase letter placed after some characters like '(', '[', '{'
-    set_to_upper_case = FALSE;
-    for (temp = string; *temp; temp = g_utf8_next_char(temp))
-    {
-        c = g_utf8_get_char(temp);
-        set_to_upper_case_tmp = (  c == (gunichar)'('
-                                || c == (gunichar)'['
-                                || c == (gunichar)'{'
-                                || c == (gunichar)'"'
-                                || c == (gunichar)':'
-                                || c == (gunichar)'.'
-                                || c == (gunichar)'`'
-                                || c == (gunichar)'-'
-                                ) ? TRUE : FALSE;
-
-        if (set_to_upper_case && g_unichar_islower(c))
-            strncpy(temp, utf8_character, g_unichar_to_utf8(g_unichar_toupper(c), utf8_character));
-
-        set_to_upper_case = set_to_upper_case_tmp;
-    }
-
-}
-
-/*
- * Replace something with something else ;)
- * Here use Regular Expression, to search and replace.
- */
-static void
-Scan_Convert_Character (gchar **string)
-{
-    gchar *from;
-    gchar *to;
-    GRegex *regex;
-    GError *regex_error = NULL;
-    gchar *new_string;
-
-    from = gtk_editable_get_chars (GTK_EDITABLE (ProcessFieldsConvertFrom), 0,
-                                 -1);
-    to = gtk_editable_get_chars (GTK_EDITABLE (ProcessFieldsConvertTo), 0, -1);
-
-    regex = g_regex_new (from, 0, 0, &regex_error);
-    if (regex_error != NULL)
-    {
-        goto handle_error;
-    }
-
-    new_string = g_regex_replace (regex, *string, -1, 0, to, 0, &regex_error);
-    if (regex_error != NULL)
-    {
-        g_free (new_string);
-        g_regex_unref (regex);
-        goto handle_error;
-    }
-
-    /* Success. */
-    g_regex_unref (regex);
-    g_free (*string);
-    *string = new_string;
-
-out:
-    g_free (from);
-    g_free (to);
-    return;
-
-handle_error:
-    Log_Print (LOG_ERROR, _("Error while processing fields: %s"),
-               regex_error->message);
-
-    g_error_free (regex_error);
-
-    goto out;
-}
-
-static gint
-Scan_Word_Is_Roman_Numeral (const gchar *text)
-{
-    /* No need for caseless strchr. */
-    static const gchar romans[] = "MmDdCcLlXxVvIi";
-
-    gsize next_allowed = 0;
-    gsize prev = 0;
-    gsize count = 0;
-
-    const gchar *i;
-
-    if (!ScannerWindow || !ProcessFieldsDetectRomanNumerals
-        || !gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (ProcessFieldsDetectRomanNumerals)))
-    {
-        return 0;
-    }
-
-    for (i = text; *i; i++)
-    {
-        const char *s = strchr (romans, *i);
-
-        if (s)
-        {
-            gsize c = (s - romans) / 2;
-
-            if (c < next_allowed)
-            {
-                return 0;
-            }
-
-            if (c < prev)
-            {
-                /* After subtraction, no more subtracted chars allowed. */
-                next_allowed = prev + 1;
-            }
-            else if (c == prev)
-            {
-                /* Allow indefinite repetition for m; three for c, x and i; and
-                 * none for d, l and v. */
-                if ((c && ++count > 3) || (c & 1))
-                {
-                    return 0;
-                }
-
-                /* No more subtraction. */
-                next_allowed = c;
-            }
-            else if (c && !(c & 1))
-            {
-                /* For first occurrence of c, x and i, allow "subtraction" from
-                 * 10 and 5 times self, reset counting. */
-                next_allowed = c - 2;
-                count = 1;
-            }
-
-            prev = c;
-        }
-        else
-        {
-            if (g_unichar_isalnum (g_utf8_get_char (i)))
-            {
-                return 0;
-            }
-
-            break;
-        }
-    }
-
-    /* Return length of found Roman numeral. */
-    return i - text;
-}
-
-
-/*
- * Return the field of a 'File_Tag' structure corresponding to the mask code
- */
-static gchar
-**Scan_Return_File_Tag_Field_From_Mask_Code (File_Tag *FileTag, gchar code)
-{
-    switch (code)
+    switch (code)
     {
         case 't':    /* Title */
             return &FileTag->title;
@@ -1764,1312 +1519,650 @@ static gchar
 /******************
  * Scanner Window *
  ******************/
-void Open_ScannerWindow (gint scanner_type)
+/*
+ * Function when you select an item of the option menu
+ */
+static void
+on_scan_mode_changed (EtScanDialog *self, gchar *key, GSettings *settings)
 {
-    GtkWidget *scan_button;
-    GtkWidget *ScanVBox;
-    GtkWidget *HBox1, *HBox2, *HBox4, *VBox, *hbox, *vbox;
-    GtkWidget *Table;
-    GtkWidget *Label;
-    GtkWidget *Button;
-    GIcon *new_folder;
-    GtkWidget *Icon;
-    GtkWidget *group;
-    GtkWidget *process_fields_convert_none;
-    GtkWidget *process_fields_case_none;
-    GtkWidget *radio_space_none;
-    GtkTreeViewColumn * column;
-    GtkCellRenderer *renderer;
-    GtkToggleAction *toggle_action;
-
-    /* Check if already opened */
-    if (ScannerWindow)
-    {
-        //gdk_window_show(ScannerWindow->window);
-        gtk_window_present(GTK_WINDOW(ScannerWindow));
-        if (ScannerOptionCombo)
-        {
-            gtk_combo_box_set_active(GTK_COMBO_BOX(ScannerOptionCombo), scanner_type);
-        }
-        return;
-    }
+    EtScanDialogPrivate *priv;
+    EtScanMode mode;
 
-    if ( scanner_type < SCANNER_FILL_TAG
-    ||   scanner_type > SCANNER_PROCESS_FIELDS)
-        scanner_type = SCANNER_FILL_TAG;
+    priv = et_scan_dialog_get_instance_private (self);
 
-    /* The window */
-    ScannerWindow = gtk_dialog_new_with_buttons (_("Tag and Filename Scan"),
-                                                 GTK_WINDOW (MainWindow),
-                                                 GTK_DIALOG_DESTROY_WITH_PARENT,
-                                                 GTK_STOCK_CLOSE,
-                                                 GTK_RESPONSE_CLOSE, NULL);
+    mode = g_settings_get_enum (settings, key);
 
-    /* 'Scan selected files' button */
-    scan_button = gtk_button_new_from_stock (GTK_STOCK_APPLY);
-    /* TODO: Set related action to match AM_SCAN_FILES. */
-    gtk_button_set_label (GTK_BUTTON (scan_button), _("Scan Files"));
-    gtk_widget_set_can_default (scan_button, TRUE);
-    gtk_dialog_add_action_widget (GTK_DIALOG (ScannerWindow), scan_button,
-                                  GTK_RESPONSE_APPLY);
-    gtk_dialog_set_default_response (GTK_DIALOG (ScannerWindow),
-                                     GTK_RESPONSE_APPLY);
-    gtk_widget_show (scan_button);
-    gtk_widget_set_tooltip_text (scan_button, _("Scan selected files"));
+    switch (mode)
+    {
+        case ET_SCAN_MODE_FILL_TAG:
+            gtk_widget_show(priv->mask_editor_toggle);
+            gtk_widget_show(priv->legend_toggle);
+            gtk_tree_view_set_model(GTK_TREE_VIEW(priv->mask_editor_view), GTK_TREE_MODEL(priv->scan_tag_masks_model));
+            Scan_Fill_Tag_Generate_Preview (self);
+            g_signal_emit_by_name(G_OBJECT(priv->legend_toggle),"toggled");        /* To hide or show legend frame */
+            g_signal_emit_by_name(G_OBJECT(priv->mask_editor_toggle),"toggled");    /* To hide or show mask editor frame */
+            break;
 
-    /* The response signal handles close, scan and the delete event. */
-    g_signal_connect (G_OBJECT (ScannerWindow), "response",
-                      G_CALLBACK (et_scan_on_response), NULL);
+        case ET_SCAN_MODE_RENAME_FILE:
+            gtk_widget_show(priv->mask_editor_toggle);
+            gtk_widget_show(priv->legend_toggle);
+            gtk_tree_view_set_model(GTK_TREE_VIEW(priv->mask_editor_view), GTK_TREE_MODEL(priv->rename_masks_model));
+            Scan_Rename_File_Generate_Preview (self);
+            g_signal_emit_by_name(G_OBJECT(priv->legend_toggle),"toggled");        /* To hide or show legend frame */
+            g_signal_emit_by_name(G_OBJECT(priv->mask_editor_toggle),"toggled");    /* To hide or show mask editor frame */
+            break;
 
-    /* The init position is defined below, because the scanner window must be
-     * shown before it can be moved. */
+        case ET_SCAN_MODE_PROCESS_FIELDS:
+            gtk_widget_hide(priv->mask_editor_toggle);
+            gtk_widget_hide(priv->legend_toggle);
+            // Hide directly the frames to don't change state of the buttons!
+            gtk_widget_hide(priv->legend_frame);
+            gtk_widget_hide(priv->mask_editor_frame);
 
-    /* The main vbox */
-    ScanVBox = gtk_dialog_get_content_area (GTK_DIALOG (ScannerWindow));
-    gtk_container_set_border_width (GTK_CONTAINER (ScannerWindow), 6);
-    gtk_box_set_spacing (GTK_BOX (ScanVBox), 12);
+            gtk_tree_view_set_model(GTK_TREE_VIEW(priv->mask_editor_view), NULL);
+            break;
+        default:
+            g_assert_not_reached ();
+    }
 
-    /*
-     * The hbox for mode buttons + buttons + what to scan
+    /* TODO: Either duplicate the legend and mask editor, or split the dialog.
      */
-    HBox1 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0);
-    gtk_box_pack_start(GTK_BOX(ScanVBox),HBox1,FALSE,FALSE,0);
-
-    /* Option Menu */
-    Label = gtk_label_new(_("Scanner:"));
-    gtk_box_pack_start(GTK_BOX(HBox1),Label,FALSE,FALSE,0);
-
-    ScannerOptionCombo = gtk_combo_box_text_new();
-    gtk_box_pack_start(GTK_BOX (HBox1), ScannerOptionCombo, TRUE, TRUE, 2);
-    gtk_widget_set_size_request(ScannerOptionCombo, 160, -1);
-
-    /* Option for Tag */
-    gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(ScannerOptionCombo),
-                                   _(Scanner_Option_Menu_Items[SCANNER_FILL_TAG]));
-
-    /* Option for FileName */
-    gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(ScannerOptionCombo),
-                                   _(Scanner_Option_Menu_Items[SCANNER_RENAME_FILE]));
-
-    /* Option for ProcessFields */
-    gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(ScannerOptionCombo),
-                              _(Scanner_Option_Menu_Items[SCANNER_PROCESS_FIELDS]));
-
-    /* Selection of the item made at the end of the function. */
-    gtk_widget_set_tooltip_text (ScannerOptionCombo,
-                                 _("Select the type of scanner to use"));
-    g_signal_connect(G_OBJECT(ScannerOptionCombo), "changed", G_CALLBACK(Scanner_Option_Menu_Activate_Item), NULL);
+    if (mode == ET_SCAN_MODE_FILL_TAG || mode == ET_SCAN_MODE_RENAME_FILE)
+    {
+        GtkWidget *parent;
 
-    /* Options button */
-    Button = gtk_button_new();
-    Icon = gtk_image_new_from_stock(GTK_STOCK_PREFERENCES, GTK_ICON_SIZE_BUTTON);
-    gtk_container_add(GTK_CONTAINER(Button),Icon);
-    gtk_box_pack_start(GTK_BOX(HBox1),Button,FALSE,FALSE,0);
-    gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
-    gtk_widget_set_tooltip_text(Button,_("Scanner Preferences"));
-    g_signal_connect(G_OBJECT(Button),"clicked",G_CALLBACK(Scan_Option_Button),NULL);
+        parent = gtk_widget_get_parent (priv->mask_editor_frame);
 
-    /* Mask Editor button */
-    MaskEditorButton = gtk_toggle_button_new();
-    Icon = gtk_image_new_from_stock("easytag-mask", GTK_ICON_SIZE_BUTTON);
-    gtk_container_add(GTK_CONTAINER(MaskEditorButton),Icon);
-    gtk_box_pack_start(GTK_BOX(HBox1),MaskEditorButton,FALSE,FALSE,0);
-    gtk_button_set_relief(GTK_BUTTON(MaskEditorButton),GTK_RELIEF_NONE);
-    gtk_widget_set_tooltip_text(MaskEditorButton,_("Show / Hide Masks Editor"));
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(MaskEditorButton),SCAN_MASK_EDITOR_BUTTON);
-    g_signal_connect(G_OBJECT(MaskEditorButton),"toggled",G_CALLBACK(Scan_Toggle_Mask_Editor_Button),NULL);
+        if ((mode == ET_SCAN_MODE_RENAME_FILE && parent != priv->rename_grid)
+            || (mode == ET_SCAN_MODE_FILL_TAG && parent != priv->fill_grid))
+        {
+            g_object_ref (priv->mask_editor_frame);
+            g_object_ref (priv->legend_frame);
+            gtk_container_remove (GTK_CONTAINER (parent),
+                                  priv->mask_editor_frame);
+            gtk_container_remove (GTK_CONTAINER (parent), priv->legend_frame);
 
-    /* Legend button */
-    LegendButton = gtk_toggle_button_new();
-    Icon = gtk_image_new_from_stock(GTK_STOCK_HELP, GTK_ICON_SIZE_BUTTON);
-    gtk_container_add(GTK_CONTAINER(LegendButton),Icon);
-    gtk_box_pack_start(GTK_BOX(HBox1),LegendButton,FALSE,FALSE,0);
-    gtk_button_set_relief(GTK_BUTTON(LegendButton),GTK_RELIEF_NONE);
-    gtk_widget_set_tooltip_text(LegendButton,_("Show / Hide Legend"));
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LegendButton),SCAN_LEGEND_BUTTON);
-    g_signal_connect(G_OBJECT(LegendButton),"toggled",G_CALLBACK(Scan_Toggle_Legend_Button),NULL);
+            if (mode == ET_SCAN_MODE_RENAME_FILE)
+            {
+                gtk_container_add (GTK_CONTAINER (priv->rename_grid),
+                                   priv->mask_editor_frame);
+                gtk_container_add (GTK_CONTAINER (priv->rename_grid),
+                                   priv->legend_frame);
+            }
+            else
+            {
+                gtk_container_add (GTK_CONTAINER (priv->fill_grid),
+                                   priv->mask_editor_frame);
+                gtk_container_add (GTK_CONTAINER (priv->fill_grid),
+                                   priv->legend_frame);
+            }
 
-    /*
-     * Frame for Scan Tag
-     */
-    ScanTagFrame = gtk_frame_new (_(Scanner_Option_Menu_Items[0]));
-    gtk_box_pack_start(GTK_BOX(ScanVBox),ScanTagFrame,FALSE,FALSE,0);
-
-    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
-    gtk_container_add(GTK_CONTAINER(ScanTagFrame),vbox);
-    gtk_container_set_border_width(GTK_CONTAINER(vbox), 4);
-    gtk_widget_show(vbox);
-
-    /* The combo box + Status icon */
-    HBox2 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, BOX_SPACING);
-    gtk_box_pack_start(GTK_BOX(vbox),HBox2,TRUE,TRUE,0);
-
-    // Set up list model which is used both by the combobox and the editor
-    ScanTagListModel = gtk_list_store_new(MASK_EDITOR_COUNT, G_TYPE_STRING);
-
-    // The combo box to select the mask to apply
-    ScanTagMaskCombo = gtk_combo_box_new_with_entry();
-    gtk_combo_box_set_model(GTK_COMBO_BOX(ScanTagMaskCombo), GTK_TREE_MODEL(ScanTagListModel));
-    g_object_unref (ScanTagListModel);
-    gtk_combo_box_set_entry_text_column(GTK_COMBO_BOX(ScanTagMaskCombo), MASK_EDITOR_TEXT);
-
-    gtk_box_pack_start(GTK_BOX(HBox2),ScanTagMaskCombo,TRUE,TRUE,2);
-    gtk_widget_set_tooltip_text(GTK_WIDGET(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(ScanTagMaskCombo)))),
-        _("Select or type in a mask using codes (see Legend) to parse "
-        "filename and path. Used to fill in tag fields"));
-    // Signal to generate preview (preview of the new tag values)
-    g_signal_connect_swapped(G_OBJECT(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(ScanTagMaskCombo)))),"changed",
-        G_CALLBACK(Scan_Fill_Tag_Generate_Preview),NULL);
-
-    // Load masks into the combobox from a file
-    Load_Scan_Tag_Masks_List(ScanTagListModel, MASK_EDITOR_TEXT, Scan_Masks);
-    if (SCAN_TAG_DEFAULT_MASK)
-    {
-        Add_String_To_Combo_List(ScanTagListModel, SCAN_TAG_DEFAULT_MASK);
-        gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(ScanTagMaskCombo))), SCAN_TAG_DEFAULT_MASK);
-    }else
-    {
-        gtk_combo_box_set_active(GTK_COMBO_BOX(ScanTagMaskCombo), 0);
+            g_object_unref (priv->mask_editor_frame);
+            g_object_unref (priv->legend_frame);
+        }
     }
+}
 
-    // Mask status icon
-    // Signal connection to check if mask is correct into the mask entry
-    g_signal_connect (gtk_bin_get_child (GTK_BIN (ScanTagMaskCombo)),
-                      "changed", G_CALLBACK (entry_check_scan_tag_mask),
-                      NULL);
-
-    // Preview label
-    FillTagPreviewLabel = gtk_label_new (_("Fill tag preview"));
-    gtk_label_set_line_wrap(GTK_LABEL(FillTagPreviewLabel),TRUE);
-    gtk_widget_show(FillTagPreviewLabel);
-    gtk_box_pack_start(GTK_BOX(vbox),FillTagPreviewLabel,TRUE,TRUE,0);
+void
+et_scan_dialog_open (EtScanDialog *self, EtScanMode scanner_type)
+{
+    g_return_if_fail (ET_SCAN_DIALOG (self));
+    g_return_if_fail (scanner_type >= ET_SCAN_MODE_FILL_TAG
+                      && scanner_type <= ET_SCAN_MODE_PROCESS_FIELDS);
 
-    /*
-     * Frame for Rename File
-     */
-    RenameFileFrame = gtk_frame_new (_(Scanner_Option_Menu_Items[1]));
-    gtk_box_pack_start(GTK_BOX(ScanVBox),RenameFileFrame,FALSE,FALSE,0);
-
-    vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL,4);
-    gtk_container_add(GTK_CONTAINER(RenameFileFrame),vbox);
-    gtk_container_set_border_width(GTK_CONTAINER(vbox), 4);
-    gtk_widget_show(vbox);
-
-    /* The button to prefix path + combo box + Status icon */
-    HBox4 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,2);
-    gtk_box_pack_start(GTK_BOX(vbox),HBox4,TRUE,TRUE,0);
-
-    // Button to prefix path
-    RenameFilePrefixPathButton = gtk_button_new();
-    new_folder = g_themed_icon_new ("folder-new");
-    /* TODO: On Win32, GTK_ICON_SIZE_BUTTON enlarges the combobox. */
-    Icon = gtk_image_new_from_gicon (new_folder, GTK_ICON_SIZE_MENU);
-    g_object_unref (new_folder);
-    gtk_container_add(GTK_CONTAINER(RenameFilePrefixPathButton),Icon);
-    gtk_box_pack_start(GTK_BOX(HBox4),RenameFilePrefixPathButton,FALSE,FALSE,0);
-    gtk_button_set_relief(GTK_BUTTON(RenameFilePrefixPathButton),GTK_RELIEF_NONE);
-    g_signal_connect(G_OBJECT(RenameFilePrefixPathButton),"clicked",G_CALLBACK(Scan_Rename_File_Prefix_Path),NULL);
-    gtk_widget_set_tooltip_text(RenameFilePrefixPathButton,_("Prefix mask with current path"));
-
-    // Set up list model which is used both by the combobox and the editor
-    RenameFileListModel = gtk_list_store_new(MASK_EDITOR_COUNT, G_TYPE_STRING);
-
-    // The combo box to select the mask to apply
-    RenameFileMaskCombo = gtk_combo_box_new_with_entry();
-    gtk_combo_box_set_model(GTK_COMBO_BOX(RenameFileMaskCombo), GTK_TREE_MODEL(RenameFileListModel));
-    g_object_unref (RenameFileListModel);
-    gtk_combo_box_set_entry_text_column(GTK_COMBO_BOX(RenameFileMaskCombo), MASK_EDITOR_TEXT);
-
-    gtk_box_pack_start(GTK_BOX(HBox4),RenameFileMaskCombo,TRUE,TRUE,2);
-    gtk_container_set_border_width(GTK_CONTAINER(HBox4), 2);
-    gtk_widget_set_tooltip_text(GTK_WIDGET(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(RenameFileMaskCombo)))),
-        _("Select or type in a mask using codes (see Legend) to parse tag fields. "
-        "Used to rename the file.\nUse / to make directories. If the first character "
-        "is /, it's a absolute path, otherwise is relative to the old path."));
-    // Signal to generate preview (preview of the new filename)
-    g_signal_connect_swapped(G_OBJECT(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(RenameFileMaskCombo)))),"changed",
-        G_CALLBACK(Scan_Rename_File_Generate_Preview),NULL);
-
-    // Load masks into the combobox from a file
-    Load_Rename_File_Masks_List(RenameFileListModel, MASK_EDITOR_TEXT, Rename_File_Masks);
-    if (RENAME_FILE_DEFAULT_MASK)
-    {
-        Add_String_To_Combo_List(RenameFileListModel, RENAME_FILE_DEFAULT_MASK);
-        gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(RenameFileMaskCombo))), RENAME_FILE_DEFAULT_MASK);
-    }else
+    if (g_settings_get_enum (MainSettings, "scan-mode") != scanner_type)
     {
-        gtk_combo_box_set_active(GTK_COMBO_BOX(RenameFileMaskCombo), 0);
+        g_settings_set_enum (MainSettings, "scan-mode", scanner_type);
     }
+}
 
-    // Mask status icon
-    // Signal connection to check if mask is correct into the mask entry
-    g_signal_connect (gtk_bin_get_child (GTK_BIN (RenameFileMaskCombo)),
-                      "changed", G_CALLBACK (entry_check_rename_file_mask),
-                      NULL);
-
-    /* Preview label */
-    RenameFilePreviewLabel = gtk_label_new (_("Rename file preview"));
-    gtk_label_set_line_wrap(GTK_LABEL(RenameFilePreviewLabel),TRUE);
-    gtk_widget_show(RenameFilePreviewLabel);
-    gtk_box_pack_start(GTK_BOX(vbox),RenameFilePreviewLabel,TRUE,TRUE,0);
-
-    /*
-     * Frame for Processing Fields
-     */
-    ProcessFieldsFrame = gtk_frame_new (_(Scanner_Option_Menu_Items[2]));
-    gtk_box_pack_start(GTK_BOX(ScanVBox),ProcessFieldsFrame,FALSE,FALSE,0);
+static void
+Mask_Editor_List_Add (EtScanDialog *self)
+{
+    EtScanDialogPrivate *priv;
+    gint i = 0;
+    GtkTreeModel *treemodel;
+    gchar *temp;
 
-    VBox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
-    gtk_container_add(GTK_CONTAINER(ProcessFieldsFrame),VBox);
-    gtk_container_set_border_width(GTK_CONTAINER(VBox), 4);
-    gtk_widget_show(VBox);
+    priv = et_scan_dialog_get_instance_private (self);
 
-    /* Group: select entry fields to process */
-    hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0);
-    gtk_box_pack_start(GTK_BOX(VBox),hbox,FALSE,FALSE,2);
-    Label = gtk_label_new(_("Select fields:"));
-    gtk_box_pack_start (GTK_BOX (hbox), Label, FALSE, FALSE, 2);
-    gtk_widget_set_tooltip_text (Label,
-                                 _("The buttons on the right represent the "
-                                   "fields which can be processed. Select "
-                                   "those which interest you"));
-    // Advice for Translators: set the first letter of filename translated
-    ProcessFileNameField = gtk_toggle_button_new_with_label(   _("F"));
-    gtk_widget_set_tooltip_text (ProcessFileNameField,
-                                 _("Process filename field"));
-    // Advice for Translators: set the first letter of title translated
-    ProcessTitleField = gtk_toggle_button_new_with_label(      _("T"));
-    gtk_widget_set_tooltip_text(ProcessTitleField,             _("Process title field"));
-    // Advice for Translators: set the first letter of artist translated
-    ProcessArtistField = gtk_toggle_button_new_with_label(     _("Ar"));
-    gtk_widget_set_tooltip_text(ProcessArtistField,            _("Process file artist field"));
-    // Advice for Translators: set the first letter of album artist translated
-    ProcessAlbumArtistField = gtk_toggle_button_new_with_label(_("AA"));
-    gtk_widget_set_tooltip_text(ProcessAlbumArtistField,       _("Process album artist field"));
-    // Advice for Translators: set the first letter of album translated
-    ProcessAlbumField = gtk_toggle_button_new_with_label(      _("Al"));
-    gtk_widget_set_tooltip_text(ProcessAlbumField,             _("Process album field"));
-    // Advice for Translators: set the first letter of genre translated
-    ProcessGenreField = gtk_toggle_button_new_with_label(      _("G"));
-    gtk_widget_set_tooltip_text(ProcessGenreField,             _("Process genre field"));
-    // Advice for Translators: set the first letter of comment translated
-    ProcessCommentField = gtk_toggle_button_new_with_label(    _("Cm"));
-    gtk_widget_set_tooltip_text(ProcessCommentField,           _("Process comment field"));
-    // Advice for Translators: set the first letter of composer translated
-    ProcessComposerField = gtk_toggle_button_new_with_label(   _("Cp"));
-    gtk_widget_set_tooltip_text(ProcessComposerField,          _("Process composer field"));
-    // Advice for Translators: set the first letter of orig artist translated
-    ProcessOrigArtistField = gtk_toggle_button_new_with_label( _("O"));
-    gtk_widget_set_tooltip_text(ProcessOrigArtistField,        _("Process original artist field"));
-    // Advice for Translators: set the first letter of copyright translated
-    ProcessCopyrightField = gtk_toggle_button_new_with_label(  _("Cr"));
-    gtk_widget_set_tooltip_text(ProcessCopyrightField,         _("Process copyright field"));
-    // Advice for Translators: set the first letter of URL translated
-    ProcessURLField = gtk_toggle_button_new_with_label(        _("U"));
-    gtk_widget_set_tooltip_text(ProcessURLField,               _("Process URL field"));
-    // Advice for Translators: set the first letter of encoder name translated
-    ProcessEncodedByField = gtk_toggle_button_new_with_label(  _("E"));
-    gtk_widget_set_tooltip_text(ProcessEncodedByField,         _("Process encoder name field"));
-    gtk_box_pack_start(GTK_BOX(hbox),ProcessFileNameField,   TRUE,TRUE,2);
-    gtk_box_pack_start(GTK_BOX(hbox),ProcessTitleField,      TRUE,TRUE,2);
-    gtk_box_pack_start(GTK_BOX(hbox),ProcessArtistField,     TRUE,TRUE,2);
-    gtk_box_pack_start(GTK_BOX(hbox),ProcessAlbumArtistField,TRUE,TRUE,2);
-    gtk_box_pack_start(GTK_BOX(hbox),ProcessAlbumField,      TRUE,TRUE,2);
-    gtk_box_pack_start(GTK_BOX(hbox),ProcessGenreField,      TRUE,TRUE,2);
-    gtk_box_pack_start(GTK_BOX(hbox),ProcessCommentField,    TRUE,TRUE,2);
-    gtk_box_pack_start(GTK_BOX(hbox),ProcessComposerField,   TRUE,TRUE,2);
-    gtk_box_pack_start(GTK_BOX(hbox),ProcessOrigArtistField, TRUE,TRUE,2);
-    gtk_box_pack_start(GTK_BOX(hbox),ProcessCopyrightField,  TRUE,TRUE,2);
-    gtk_box_pack_start(GTK_BOX(hbox),ProcessURLField,        TRUE,TRUE,2);
-    gtk_box_pack_start(GTK_BOX(hbox),ProcessEncodedByField,  TRUE,TRUE,2);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessFileNameField),   PROCESS_FILENAME_FIELD);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessTitleField),      PROCESS_TITLE_FIELD);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessArtistField),     PROCESS_ARTIST_FIELD);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessAlbumArtistField),PROCESS_ALBUM_ARTIST_FIELD);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessAlbumField),      PROCESS_ALBUM_FIELD);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessGenreField),      PROCESS_GENRE_FIELD);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessCommentField),    PROCESS_COMMENT_FIELD);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessComposerField),   PROCESS_COMPOSER_FIELD);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessOrigArtistField), PROCESS_ORIG_ARTIST_FIELD);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessCopyrightField),  PROCESS_COPYRIGHT_FIELD);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessURLField),        PROCESS_URL_FIELD);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessEncodedByField),  PROCESS_ENCODED_BY_FIELD);
-    g_signal_connect(G_OBJECT(ProcessFileNameField),   "toggled",G_CALLBACK(Select_Fields_Set_Sensitive),NULL);
-    g_signal_connect(G_OBJECT(ProcessTitleField),      "toggled",G_CALLBACK(Select_Fields_Set_Sensitive),NULL);
-    g_signal_connect(G_OBJECT(ProcessArtistField),     "toggled",G_CALLBACK(Select_Fields_Set_Sensitive),NULL);
-    g_signal_connect(G_OBJECT(ProcessAlbumArtistField),"toggled",G_CALLBACK(Select_Fields_Set_Sensitive),NULL);
-    g_signal_connect(G_OBJECT(ProcessAlbumField),      "toggled",G_CALLBACK(Select_Fields_Set_Sensitive),NULL);
-    g_signal_connect(G_OBJECT(ProcessGenreField),      "toggled",G_CALLBACK(Select_Fields_Set_Sensitive),NULL);
-    g_signal_connect(G_OBJECT(ProcessCommentField),    "toggled",G_CALLBACK(Select_Fields_Set_Sensitive),NULL);
-    g_signal_connect(G_OBJECT(ProcessComposerField),   "toggled",G_CALLBACK(Select_Fields_Set_Sensitive),NULL);
-    g_signal_connect(G_OBJECT(ProcessOrigArtistField), "toggled",G_CALLBACK(Select_Fields_Set_Sensitive),NULL);
-    g_signal_connect(G_OBJECT(ProcessCopyrightField),  "toggled",G_CALLBACK(Select_Fields_Set_Sensitive),NULL);
-    g_signal_connect(G_OBJECT(ProcessURLField),        "toggled",G_CALLBACK(Select_Fields_Set_Sensitive),NULL);
-    g_signal_connect(G_OBJECT(ProcessEncodedByField),  "toggled",G_CALLBACK(Select_Fields_Set_Sensitive),NULL);
-    /* The small buttons */
-    Button = gtk_button_new();
-    g_signal_connect(G_OBJECT(Button),"clicked",G_CALLBACK(Select_Fields_Invert_Selection),NULL);
-    gtk_box_pack_end (GTK_BOX(hbox), Button, FALSE, FALSE, 0);
-    Icon = gtk_image_new_from_stock ("easytag-invert-selection",
-                                     GTK_ICON_SIZE_BUTTON);
-    gtk_container_add(GTK_CONTAINER(Button),Icon);
-    gtk_widget_set_tooltip_text (Button, _("Invert selection"));
-    Button = gtk_button_new();
-    g_signal_connect(G_OBJECT(Button),"clicked",G_CALLBACK(Select_Fields_Select_Unselect_All),NULL);
-    gtk_box_pack_end (GTK_BOX(hbox), Button, FALSE, FALSE, 0);
-    Icon = gtk_image_new_from_icon_name ("edit-select-all",
-                                         GTK_ICON_SIZE_BUTTON);
-    gtk_container_add(GTK_CONTAINER(Button),Icon);
-    gtk_widget_set_tooltip_text (Button, _("Select/Unselect all"));
+    treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(priv->mask_editor_view));
 
-    /* Group: character conversion */
-    group = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
-    gtk_box_pack_start (GTK_BOX (VBox), group, FALSE, FALSE, 0);
-    ProcessFieldsConvertIntoSpace = gtk_radio_button_new_with_label_from_widget (NULL, _("Convert '_' and '%20' to spaces"));
-    ProcessFieldsConvertSpace = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (ProcessFieldsConvertIntoSpace),
-                                                                             _("Convert ' ' to '_'"));
-    gtk_box_pack_start (GTK_BOX (group), ProcessFieldsConvertIntoSpace, FALSE,
-                        FALSE, 0);
-    gtk_box_pack_start (GTK_BOX (group), ProcessFieldsConvertSpace, FALSE,
-                        FALSE, 0);
-    hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,2);
-    gtk_box_pack_start (GTK_BOX (group), hbox, FALSE, FALSE, 0);
-    ProcessFieldsConvert = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (ProcessFieldsConvertIntoSpace),
-                                                                        _("Convert:"));
-    ProcessFieldsConvertTo        = gtk_entry_new();
-    ProcessFieldsConvertLabelTo   = gtk_label_new(_("to: ")); // A "space" at the end to allow another translation for "to :" (needed in French!)
-    ProcessFieldsConvertFrom      = gtk_entry_new();
-    //gtk_entry_set_max_length(GTK_ENTRY(ProcessFieldsConvertTo), 1); // Now, it isn't limited to one character
-    //gtk_entry_set_max_length(GTK_ENTRY(ProcessFieldsConvertFrom), 1);
-    gtk_widget_set_size_request(ProcessFieldsConvertTo,120,-1);
-    gtk_widget_set_size_request(ProcessFieldsConvertFrom,120,-1);
-    process_fields_convert_none = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (ProcessFieldsConvertIntoSpace),
-                                                                               _("Do not convert"));
-    gtk_box_pack_start(GTK_BOX(hbox),ProcessFieldsConvert,       FALSE,FALSE,0);
-    gtk_box_pack_start(GTK_BOX(hbox),ProcessFieldsConvertFrom,   FALSE,FALSE,0);
-    gtk_box_pack_start(GTK_BOX(hbox),ProcessFieldsConvertLabelTo,FALSE,FALSE,0);
-    gtk_box_pack_start(GTK_BOX(hbox),ProcessFieldsConvertTo,     FALSE,FALSE,0);
-    gtk_box_pack_start (GTK_BOX (group), process_fields_convert_none, FALSE,
-                        FALSE, 0);
-    if (PROCESS_FIELDS_CONVERT_FROM)
-        gtk_entry_set_text(GTK_ENTRY(ProcessFieldsConvertFrom),PROCESS_FIELDS_CONVERT_FROM);
-    if (PROCESS_FIELDS_CONVERT_TO)
-        gtk_entry_set_text(GTK_ENTRY(ProcessFieldsConvertTo),PROCESS_FIELDS_CONVERT_TO);
-    /* Toggled signals */
-    g_signal_connect(G_OBJECT(ProcessFieldsConvert),         "toggled",G_CALLBACK(Process_Fields_Convert_Check_Button_Toggled),NULL);
-    /* Set check buttons to init value */
-    if (PF_CONVERT_INTO_SPACE || PF_CONVERT_SPACE || PF_CONVERT)
-    {
-        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ProcessFieldsConvertIntoSpace),
-                                      PF_CONVERT_INTO_SPACE);
-        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ProcessFieldsConvertSpace),
-                                      PF_CONVERT_SPACE);
-        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ProcessFieldsConvert),
-                                      PF_CONVERT);
-    }
-    else
+    if (gtk_notebook_get_current_page (GTK_NOTEBOOK (priv->notebook)) != ET_SCAN_MODE_FILL_TAG)
     {
-        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (process_fields_convert_none),
-                                      TRUE);
-    }
-    /* Tooltips */
-    gtk_widget_set_tooltip_text(ProcessFieldsConvertIntoSpace,
-        _("The underscore character or the string '%20' are replaced by one space. "
-          "Example, before: 'Text%20In%20An_Entry', after: 'Text In An Entry'."));
-    gtk_widget_set_tooltip_text(ProcessFieldsConvertSpace,
-        _("The space character is replaced by one underscore character. "
-          "Example, before: 'Text In An Entry', after: 'Text_In_An_Entry'."));
-    gtk_widget_set_tooltip_text(ProcessFieldsConvert,
-        _("Replace a string by another one. Note that the search is case sensitive."));
-
-    hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0);
-    
-    /* Group: capitalize, ... */
-    group = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
-    gtk_box_pack_start (GTK_BOX (VBox), group, FALSE, FALSE, 0);
-    ProcessFieldsAllUppercase = gtk_radio_button_new_with_label_from_widget (NULL, _("Capitalize all"));
-    ProcessFieldsAllDowncase  = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (ProcessFieldsAllUppercase),
-                                                                             _("Lowercase all"));
-    ProcessFieldsFirstLetterUppercase  = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (ProcessFieldsAllUppercase),
-                                                                                      _("Capitalize first letter"));
-    ProcessFieldsFirstLettersUppercase = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (ProcessFieldsAllUppercase),
-                                                                                      _("Capitalize the first letter of each word"));
-    ProcessFieldsDetectRomanNumerals = gtk_check_button_new_with_label(_("Detect Roman numerals"));
-    process_fields_case_none = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (ProcessFieldsAllUppercase),
-                                                                            _("Do not change capitalization"));
-    gtk_box_pack_start (GTK_BOX (group), ProcessFieldsAllUppercase, FALSE,
-                        FALSE, 0);
-    gtk_box_pack_start (GTK_BOX (group),ProcessFieldsAllDowncase, FALSE, FALSE,
-                        0);
-    gtk_box_pack_start (GTK_BOX (group),ProcessFieldsFirstLetterUppercase,
-                        FALSE, FALSE, 0);
-    gtk_box_pack_start (GTK_BOX (group), hbox, FALSE, FALSE, 0);
-    gtk_box_pack_start(GTK_BOX(hbox),ProcessFieldsFirstLettersUppercase,FALSE,FALSE,0);
-    gtk_box_pack_start(GTK_BOX(hbox),ProcessFieldsDetectRomanNumerals,FALSE,FALSE,0);
-    gtk_box_pack_start (GTK_BOX (group), process_fields_case_none, FALSE,
-                        FALSE, 0);
-    /* Toggled signals */
-    g_signal_connect(G_OBJECT(ProcessFieldsFirstLettersUppercase),"toggled",G_CALLBACK(Process_Fields_First_Letters_Check_Button_Toggled),NULL);
-    /* Set check buttons to init value */
-    if (PF_CONVERT_ALL_UPPERCASE || PF_CONVERT_ALL_DOWNCASE
-        || PF_CONVERT_FIRST_LETTER_UPPERCASE
-        || PF_CONVERT_FIRST_LETTERS_UPPERCASE)
-    {
-        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ProcessFieldsAllUppercase),
-                                      PF_CONVERT_ALL_UPPERCASE);
-        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ProcessFieldsAllDowncase),
-                                      PF_CONVERT_ALL_DOWNCASE);
-        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ProcessFieldsFirstLetterUppercase),
-                                      PF_CONVERT_FIRST_LETTER_UPPERCASE);
-        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ProcessFieldsFirstLettersUppercase),
-                                      PF_CONVERT_FIRST_LETTERS_UPPERCASE);
-        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ProcessFieldsDetectRomanNumerals),
-                                      PF_DETECT_ROMAN_NUMERALS);
-    }
-    else
-    {
-        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (process_fields_case_none),
-                                      TRUE);
-    }
-    /* Tooltips */
-    gtk_widget_set_tooltip_text(ProcessFieldsAllUppercase,
-        _("Convert all words in all fields to upper case. "
-          "Example, before: 'Text IN AN entry', after: 'TEXT IN AN ENTRY'."));
-    gtk_widget_set_tooltip_text(ProcessFieldsAllDowncase,
-        _("Convert all words in all fields to lower case. "
-          "Example, before: 'TEXT IN an entry', after: 'text in an entry'."));
-    gtk_widget_set_tooltip_text(ProcessFieldsFirstLetterUppercase,
-        _("Convert the initial of the first word in all fields to upper case. "
-          "Example, before: 'text IN An ENTRY', after: 'Text in an entry'."));
-    gtk_widget_set_tooltip_text(ProcessFieldsFirstLettersUppercase,
-        _("Convert the initial of each word in all fields to upper case. "
-          "Example, before: 'Text in an ENTRY', after: 'Text In An Entry'."));
-    gtk_widget_set_tooltip_text(ProcessFieldsDetectRomanNumerals,
-        _("Force to convert to upper case the Roman numerals. "
-          "Example, before: 'ix. text in an entry', after: 'IX. Text In An Entry'."));
+        while(Scan_Masks[i])
+        {
+            /*if (!g_utf8_validate(Scan_Masks[i], -1, NULL))
+                temp = convert_to_utf8(Scan_Masks[i]);
+            else
+                temp = g_strdup(Scan_Masks[i]);*/
+            temp = Try_To_Validate_Utf8_String(Scan_Masks[i]);
 
-    /* Group: insert/remove spaces */
-    group = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
-    gtk_box_pack_start (GTK_BOX (VBox), group, FALSE, FALSE, 0);
-    ProcessFieldsRemoveSpace = gtk_radio_button_new_with_label_from_widget (NULL, _("Remove spaces"));
-    ProcessFieldsInsertSpace = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (ProcessFieldsRemoveSpace),
-                                                                            _("Insert a space before uppercase letters"));
-    ProcessFieldsOnlyOneSpace = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (ProcessFieldsRemoveSpace),
-                                                                             _("Remove duplicate spaces and underscores"));
-    radio_space_none = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (ProcessFieldsRemoveSpace),
-                                                                    _("Do not change word separators"));
-    gtk_box_pack_start (GTK_BOX (group), ProcessFieldsRemoveSpace, FALSE,
-                        FALSE, 0);
-    gtk_box_pack_start (GTK_BOX (group), ProcessFieldsInsertSpace, FALSE,
-                        FALSE, 0);
-    gtk_box_pack_start (GTK_BOX (group), ProcessFieldsOnlyOneSpace, FALSE,
-                        FALSE, 0);
-    gtk_box_pack_start (GTK_BOX (group), radio_space_none, FALSE, FALSE, 0);
-    /* Set check buttons to init value */
-    if (PF_REMOVE_SPACE || PF_INSERT_SPACE || PF_ONLY_ONE_SPACE)
-    {
-        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ProcessFieldsRemoveSpace),PF_REMOVE_SPACE);
-        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ProcessFieldsInsertSpace),PF_INSERT_SPACE);
-        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ProcessFieldsOnlyOneSpace),PF_ONLY_ONE_SPACE);
-    }
-    else
+            gtk_list_store_insert_with_values (GTK_LIST_STORE (treemodel),
+                                               NULL, G_MAXINT,
+                                               MASK_EDITOR_TEXT, temp, -1);
+            g_free(temp);
+            i++;
+        }
+    } else if (gtk_notebook_get_current_page (GTK_NOTEBOOK (priv->notebook)) == ET_SCAN_MODE_RENAME_FILE)
     {
-        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio_space_none),
-                                      TRUE);
-    }
-    /* Tooltips */
-    gtk_widget_set_tooltip_text(ProcessFieldsRemoveSpace,
-        _("All spaces between words are removed. "
-          "Example, before: 'Text In An Entry', after: 'TextInAnEntry'."));
-    gtk_widget_set_tooltip_text(ProcessFieldsInsertSpace,
-        _("A space is inserted before each upper case letter. "
-          "Example, before: 'TextInAnEntry', after: 'Text In An Entry'."));
-    gtk_widget_set_tooltip_text(ProcessFieldsOnlyOneSpace,
-        _("Duplicate spaces and underscores are removed. "
-          "Example, before: 'Text__In__An   Entry', after: 'Text_In_An Entry'."));
-    Select_Fields_Set_Sensitive();
+        while(Rename_File_Masks[i])
+        {
+            /*if (!g_utf8_validate(Rename_File_Masks[i], -1, NULL))
+                temp = convert_to_utf8(Rename_File_Masks[i]);
+            else
+                temp = g_strdup(Rename_File_Masks[i]);*/
+            temp = Try_To_Validate_Utf8_String(Rename_File_Masks[i]);
 
-    /*
-     * Frame to display codes legend
-     */
-    LegendFrame = gtk_frame_new (_("Legend"));
-    gtk_box_pack_start(GTK_BOX(ScanVBox),LegendFrame,FALSE,FALSE,0);
-    /* Legend labels */
-    Table = et_grid_new (3, 6);
-    gtk_container_add(GTK_CONTAINER(LegendFrame),Table);
-    gtk_container_set_border_width(GTK_CONTAINER(Table),4);
-    Label = gtk_label_new(_("%a: artist"));
-    et_grid_attach_margins (GTK_GRID (Table), Label, 0, 0, 1, 1, 6, 0);
-    gtk_misc_set_alignment(GTK_MISC(Label),0,0.5);
-    Label = gtk_label_new(_("%z: album artist"));
-    et_grid_attach_margins (GTK_GRID (Table), Label, 0, 1, 1, 1, 6, 0);
-    gtk_misc_set_alignment(GTK_MISC(Label),0,0.5);
-    Label = gtk_label_new(_("%b: album"));
-    et_grid_attach_margins (GTK_GRID (Table), Label, 0, 2, 1, 1, 6, 0);
-    gtk_misc_set_alignment(GTK_MISC(Label),0,0.5);
-    Label = gtk_label_new(_("%c: comment"));
-    et_grid_attach_margins (GTK_GRID (Table), Label, 0, 3, 1, 1, 6, 0);
-    gtk_misc_set_alignment(GTK_MISC(Label),0,0.5);
-    Label = gtk_label_new(_("%p: composer"));
-    et_grid_attach_margins (GTK_GRID (Table), Label, 0, 4, 1, 1, 6, 0);
-    gtk_misc_set_alignment(GTK_MISC(Label),0,0.5);
-    Label = gtk_label_new(_("%r: copyright"));
-    et_grid_attach_margins (GTK_GRID (Table), Label, 0, 5, 1, 1, 6, 0);
-    gtk_misc_set_alignment(GTK_MISC(Label),0,0.5);
-    Label = gtk_label_new(_("%d: disc number"));
-    et_grid_attach_margins (GTK_GRID (Table), Label, 1, 0, 1, 1, 6, 0);
-    gtk_misc_set_alignment(GTK_MISC(Label),0,0.5);
-    Label = gtk_label_new(_("%e: encoded by"));
-    et_grid_attach_margins (GTK_GRID (Table), Label, 1, 1, 1, 1, 6, 0);
-    gtk_misc_set_alignment(GTK_MISC(Label),0,0.5);
-    Label = gtk_label_new(_("%g: genre"));
-    et_grid_attach_margins (GTK_GRID (Table), Label, 1, 2, 1, 1, 6, 0);
-    gtk_misc_set_alignment(GTK_MISC(Label),0,0.5);
-    Label = gtk_label_new(_("%i: ignored"));
-    et_grid_attach_margins (GTK_GRID (Table), Label, 1, 3, 1, 1, 6, 0);
-    gtk_misc_set_alignment(GTK_MISC(Label),0,0.5);
-    Label = gtk_label_new(_("%l: number of tracks"));
-    et_grid_attach_margins (GTK_GRID (Table), Label, 1, 4, 1, 1, 6, 0);
-    gtk_misc_set_alignment(GTK_MISC(Label),0,0.5);
-    Label = gtk_label_new(_("%o: orig. artist"));
-    et_grid_attach_margins (GTK_GRID (Table), Label, 1, 5, 1, 1, 6, 0);
-    gtk_misc_set_alignment(GTK_MISC(Label),0,0.5);
-    Label = gtk_label_new(_("%n: track"));
-    et_grid_attach_margins (GTK_GRID (Table), Label, 2, 0, 1, 1, 6, 0);
-    gtk_misc_set_alignment(GTK_MISC(Label),0,0.5);
-    Label = gtk_label_new(_("%t: title"));
-    et_grid_attach_margins (GTK_GRID (Table), Label, 2, 1, 1, 1, 6, 0);
-    gtk_misc_set_alignment(GTK_MISC(Label),0,0.5);
-    Label = gtk_label_new(_("%u: URL"));
-    et_grid_attach_margins (GTK_GRID (Table), Label, 2, 2, 1, 1, 6, 0);
-    gtk_misc_set_alignment(GTK_MISC(Label),0,0.5);
-    Label = gtk_label_new (_("%x: number of discs"));
-    et_grid_attach_margins (GTK_GRID (Table), Label, 2, 3, 1, 1, 6, 0);
-    gtk_misc_set_alignment (GTK_MISC (Label), 0, 0.5);
-    Label = gtk_label_new(_("%y: year"));
-    et_grid_attach_margins (GTK_GRID (Table), Label, 2, 4, 1, 1, 6, 0);
-    gtk_misc_set_alignment(GTK_MISC(Label),0,0.5);
+            gtk_list_store_insert_with_values (GTK_LIST_STORE (treemodel),
+                                               NULL, G_MAXINT,
+                                               MASK_EDITOR_TEXT, temp, -1);
+            g_free(temp);
+            i++;
+        }
+    }
+}
 
-    /*
-     * Masks Editor
-     */
-    MaskEditorFrame = gtk_frame_new (_("Mask Editor"));
-    gtk_box_pack_start(GTK_BOX(ScanVBox),MaskEditorFrame,FALSE,FALSE,0);
-    MaskEditorHBox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,4);
-    gtk_container_add(GTK_CONTAINER(MaskEditorFrame),MaskEditorHBox);
-    gtk_container_set_border_width(GTK_CONTAINER(MaskEditorHBox), 4);
-
-    /* The editor part */
-    MaskEditorVBox = gtk_box_new(GTK_ORIENTATION_VERTICAL,2);
-    gtk_box_pack_start(GTK_BOX(MaskEditorHBox),MaskEditorVBox,TRUE,TRUE,0);
-    MaskEditorScrollWindow = gtk_scrolled_window_new(NULL,NULL);
-    gtk_box_pack_start(GTK_BOX(MaskEditorVBox),MaskEditorScrollWindow,TRUE,TRUE,0);
-    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(MaskEditorScrollWindow),
-                                   GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
-    gtk_widget_set_size_request(GTK_WIDGET(MaskEditorScrollWindow), -1, 101);
+/*
+ * Clean up the currently displayed masks lists, ready for saving
+ */
+static void
+Mask_Editor_Clean_Up_Masks_List (EtScanDialog *self)
+{
+    EtScanDialogPrivate *priv;
+    gchar *text = NULL;
+    gchar *text1 = NULL;
+    GtkTreeIter currentIter;
+    GtkTreeIter itercopy;
+    GtkTreeModel *treemodel;
 
-    /* The list */
-    MaskEditorList = gtk_tree_view_new();
-    gtk_tree_view_set_model(GTK_TREE_VIEW(MaskEditorList), GTK_TREE_MODEL(ScanTagListModel));
-
-    renderer = gtk_cell_renderer_text_new();
-    column = gtk_tree_view_column_new_with_attributes(NULL,
-            renderer, "text", MASK_EDITOR_TEXT, NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(MaskEditorList), column);
-    gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(MaskEditorList), FALSE);
-    gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(MaskEditorList)),
-                GTK_SELECTION_MULTIPLE);
-    gtk_tree_view_set_reorderable(GTK_TREE_VIEW(MaskEditorList), TRUE);
-    gtk_container_add(GTK_CONTAINER(MaskEditorScrollWindow), MaskEditorList);
-    g_signal_connect_after(G_OBJECT(gtk_tree_view_get_selection(GTK_TREE_VIEW(MaskEditorList))),
-            "changed", G_CALLBACK(Mask_Editor_List_Row_Selected), NULL);
-    g_signal_connect(G_OBJECT(MaskEditorList), "key-press-event",
-        G_CALLBACK(Mask_Editor_List_Key_Press), NULL);
-    /* The entry */
-    hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,2);
-    gtk_box_pack_start(GTK_BOX(MaskEditorVBox),hbox,FALSE,FALSE,0);
-    MaskEditorEntry = gtk_entry_new();
-    gtk_box_pack_start(GTK_BOX(hbox),MaskEditorEntry,TRUE,TRUE,2);
-    g_signal_connect(G_OBJECT(MaskEditorEntry),"changed",
-        G_CALLBACK(Mask_Editor_Entry_Changed),NULL);
-    // Mask status icon
-    // Signal connection to check if mask is correct into the mask entry
-    g_signal_connect (MaskEditorEntry,"changed",
-                      G_CALLBACK (entry_check_scan_tag_mask), NULL);
+    priv = et_scan_dialog_get_instance_private (self);
 
-    /* The buttons part */
-    MaskEditorVBox = gtk_box_new(GTK_ORIENTATION_VERTICAL,0);
-    gtk_box_pack_start(GTK_BOX(MaskEditorHBox),MaskEditorVBox,FALSE,FALSE,0);
+    treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(priv->mask_editor_view));
 
-    /* New mask button */
-    MaskEditorNewButton = gtk_button_new();
-    Icon = gtk_image_new_from_stock(GTK_STOCK_NEW, GTK_ICON_SIZE_SMALL_TOOLBAR);
-    gtk_container_add(GTK_CONTAINER(MaskEditorNewButton),Icon);
-    gtk_box_pack_start(GTK_BOX(MaskEditorVBox),MaskEditorNewButton,FALSE,FALSE,0);
-    gtk_button_set_relief(GTK_BUTTON(MaskEditorNewButton),GTK_RELIEF_NONE);
-    gtk_widget_set_tooltip_text(MaskEditorNewButton,_("Create New Mask"));
-    g_signal_connect(G_OBJECT(MaskEditorNewButton),"clicked",
-        G_CALLBACK(Mask_Editor_List_New),NULL);
+    /* Remove blank and duplicate items */
+    if (gtk_tree_model_get_iter_first(treemodel, &currentIter))
+    {
 
-    /* Move up mask button */
-    MaskEditorUpButton = gtk_button_new();
-    Icon = gtk_image_new_from_stock(GTK_STOCK_GO_UP, GTK_ICON_SIZE_SMALL_TOOLBAR);
-    gtk_container_add(GTK_CONTAINER(MaskEditorUpButton),Icon);
-    gtk_box_pack_start(GTK_BOX(MaskEditorVBox),MaskEditorUpButton,FALSE,FALSE,0);
-    gtk_button_set_relief(GTK_BUTTON(MaskEditorUpButton),GTK_RELIEF_NONE);
-    gtk_widget_set_tooltip_text(MaskEditorUpButton,_("Move Up this Mask"));
-    g_signal_connect(G_OBJECT(MaskEditorUpButton),"clicked",
-        G_CALLBACK(Mask_Editor_List_Move_Up),NULL);
+        while(TRUE)
+        {
+            gtk_tree_model_get(treemodel, &currentIter, MASK_EDITOR_TEXT, &text, -1);
 
-    /* Move down mask button */
-    MaskEditorDownButton = gtk_button_new();
-    Icon = gtk_image_new_from_stock(GTK_STOCK_GO_DOWN, GTK_ICON_SIZE_SMALL_TOOLBAR);
-    gtk_container_add(GTK_CONTAINER(MaskEditorDownButton),Icon);
-    gtk_box_pack_start(GTK_BOX(MaskEditorVBox),MaskEditorDownButton,FALSE,FALSE,0);
-    gtk_button_set_relief(GTK_BUTTON(MaskEditorDownButton),GTK_RELIEF_NONE);
-    gtk_widget_set_tooltip_text(MaskEditorDownButton,_("Move Down this Mask"));
-    g_signal_connect(G_OBJECT(MaskEditorDownButton),"clicked",
-        G_CALLBACK(Mask_Editor_List_Move_Down),NULL);
+            /* Check for blank entry */
+            if (text && g_utf8_strlen(text, -1) == 0)
+            {
+                g_free(text);
 
-    /* Copy mask button */
-    MaskEditorCopyButton = gtk_button_new();
-    Icon = gtk_image_new_from_stock(GTK_STOCK_COPY, GTK_ICON_SIZE_SMALL_TOOLBAR);
-    gtk_container_add(GTK_CONTAINER(MaskEditorCopyButton),Icon);
-    gtk_box_pack_start(GTK_BOX(MaskEditorVBox),MaskEditorCopyButton,FALSE,FALSE,0);
-    gtk_button_set_relief(GTK_BUTTON(MaskEditorCopyButton),GTK_RELIEF_NONE);
-    gtk_widget_set_tooltip_text(MaskEditorCopyButton,_("Duplicate Mask"));
-    g_signal_connect(G_OBJECT(MaskEditorCopyButton),"clicked",
-        G_CALLBACK(Mask_Editor_List_Duplicate),NULL);
+                if (!gtk_list_store_remove(GTK_LIST_STORE(treemodel), &currentIter))
+                    break; /* No following entries */
+                else
+                    continue; /* Go on to next entry, which the remove function already moved onto for us */
+            }
 
-    /* Add mask button */
-    MaskEditorAddButton = gtk_button_new();
-    Icon = gtk_image_new_from_stock(GTK_STOCK_ADD, GTK_ICON_SIZE_SMALL_TOOLBAR);
-    gtk_container_add(GTK_CONTAINER(MaskEditorAddButton),Icon);
-    gtk_box_pack_start(GTK_BOX(MaskEditorVBox),MaskEditorAddButton,FALSE,FALSE,0);
-    gtk_button_set_relief(GTK_BUTTON(MaskEditorAddButton),GTK_RELIEF_NONE);
-    gtk_widget_set_tooltip_text(MaskEditorAddButton,_("Add Default Masks"));
-    g_signal_connect(G_OBJECT(MaskEditorAddButton),"clicked",
-        G_CALLBACK(Mask_Editor_List_Add),NULL);
+            /* Check for duplicate entries */
+            itercopy = currentIter;
+            if (!gtk_tree_model_iter_next(treemodel, &itercopy))
+            {
+                g_free(text);
+                break;
+            }
 
-    /* Remove mask button */
-    MaskEditorRemoveButton = gtk_button_new();
-    Icon = gtk_image_new_from_stock(GTK_STOCK_REMOVE, GTK_ICON_SIZE_SMALL_TOOLBAR);
-    gtk_container_add(GTK_CONTAINER(MaskEditorRemoveButton),Icon);
-    gtk_box_pack_start(GTK_BOX(MaskEditorVBox),MaskEditorRemoveButton,FALSE,FALSE,0);
-    gtk_button_set_relief(GTK_BUTTON(MaskEditorRemoveButton),GTK_RELIEF_NONE);
-    gtk_widget_set_tooltip_text(MaskEditorRemoveButton,_("Remove Mask"));
-    g_signal_connect(G_OBJECT(MaskEditorRemoveButton),"clicked",
-        G_CALLBACK(Mask_Editor_List_Remove),NULL);
+            while(TRUE)
+            {
+                gtk_tree_model_get(treemodel, &itercopy, MASK_EDITOR_TEXT, &text1, -1);
+                if (text1 && g_utf8_collate(text,text1) == 0)
+                {
+                    g_free(text1);
 
-    /* Save mask button */
-    MaskEditorSaveButton = gtk_button_new();
-    Icon = gtk_image_new_from_stock(GTK_STOCK_SAVE, GTK_ICON_SIZE_SMALL_TOOLBAR);
-    gtk_container_add(GTK_CONTAINER(MaskEditorSaveButton),Icon);
-    gtk_box_pack_end(GTK_BOX(MaskEditorVBox),MaskEditorSaveButton,FALSE,FALSE,0);
-    gtk_button_set_relief(GTK_BUTTON(MaskEditorSaveButton),GTK_RELIEF_NONE);
-    gtk_widget_set_tooltip_text(MaskEditorSaveButton,_("Save Masks"));
-    g_signal_connect(G_OBJECT(MaskEditorSaveButton),"clicked",
-        G_CALLBACK(Mask_Editor_List_Save_Button),NULL);
-
-    gtk_widget_show(ScanVBox);
-    gtk_widget_show_all(HBox1);
-    gtk_widget_show_all(HBox2);
-    gtk_widget_show_all(HBox4);
-    gtk_widget_show(ScannerWindow);
-
-    /* Init position of the scanner window */
-    Scan_Set_Scanner_Window_Init_Position();
+                    if (!gtk_list_store_remove(GTK_LIST_STORE(treemodel), &itercopy))
+                        break; /* No following entries */
+                    else
+                        continue; /* Go on to next entry, which the remove function already set iter to for us */
 
-    /* To initialize the mask status icon and visibility */
-    g_signal_emit_by_name(G_OBJECT(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(ScanTagMaskCombo)))),"changed");
-    g_signal_emit_by_name(G_OBJECT(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(RenameFileMaskCombo)))),"changed");
-    g_signal_emit_by_name(G_OBJECT(MaskEditorEntry),"changed");
-    g_signal_emit_by_name(G_OBJECT(LegendButton),"toggled");        /* To hide legend frame */
-    g_signal_emit_by_name(G_OBJECT(MaskEditorButton),"toggled");    /* To hide mask editor frame */
-    g_signal_emit_by_name(G_OBJECT(ProcessFieldsConvert),"toggled");/* To enable / disable entries */
-    g_signal_emit_by_name(G_OBJECT(ProcessFieldsDetectRomanNumerals),"toggled");/* To enable / disable entries */
+                }
+                g_free(text1);
+                if (!gtk_tree_model_iter_next(treemodel, &itercopy))
+                    break;
+            }
 
-    // Activate the current menu in the option menu
-    gtk_combo_box_set_active(GTK_COMBO_BOX(ScannerOptionCombo), scanner_type);
+            g_free(text);
 
-    toggle_action = GTK_TOGGLE_ACTION (gtk_ui_manager_get_action (UIManager,
-                                                                  "/ToolBar/ShowScanner"));
-    if (!gtk_toggle_action_get_active (toggle_action))
-    {
-        gtk_toggle_action_set_active (toggle_action, TRUE);
+            if (!gtk_tree_model_iter_next(treemodel, &currentIter))
+                break;
+        }
     }
 }
 
 /*
- * Select the scanner to run for the current ETFile
+ * Save the currently displayed mask list in the mask editor
  */
-void Scan_Select_Mode_And_Run_Scanner (ET_File *ETFile)
+static void
+Mask_Editor_List_Save_Button (EtScanDialog *self)
 {
-    g_return_if_fail (ScannerWindow != NULL || ETFile != NULL);
+    EtScanDialogPrivate *priv;
 
-    if (gtk_combo_box_get_active(GTK_COMBO_BOX(ScannerOptionCombo)) == SCANNER_FILL_TAG)
-    {
-        /* Run Scanner Type: Scan Tag */
-        Scan_Tag_With_Mask(ETFile);
-    } else if (gtk_combo_box_get_active(GTK_COMBO_BOX(ScannerOptionCombo)) == SCANNER_RENAME_FILE)
+    priv = et_scan_dialog_get_instance_private (self);
+
+    Mask_Editor_Clean_Up_Masks_List (self);
+
+    if (gtk_notebook_get_current_page (GTK_NOTEBOOK (priv->notebook)) == ET_SCAN_MODE_FILL_TAG)
     {
-        /* Run Scanner Type: Rename File */
-        Scan_Rename_File_With_Mask(ETFile);
-    } else if (gtk_combo_box_get_active(GTK_COMBO_BOX(ScannerOptionCombo)) == SCANNER_PROCESS_FIELDS)
+        Save_Scan_Tag_Masks_List(priv->scan_tag_masks_model, MASK_EDITOR_TEXT);
+    }
+    else if (gtk_notebook_get_current_page (GTK_NOTEBOOK (priv->notebook)) == ET_SCAN_MODE_RENAME_FILE)
     {
-        /* Run Scanner Type: Process Fields */
-        Scan_Process_Fields(ETFile);
+        Save_Rename_File_Masks_List(priv->rename_masks_model, MASK_EDITOR_TEXT);
     }
 }
 
+static void
+Process_Fields_First_Letters_Check_Button_Toggled (EtScanDialog *self)
+{
+    EtScanDialogPrivate *priv;
+
+    priv = et_scan_dialog_get_instance_private (self);
+
+    gtk_widget_set_sensitive (GTK_WIDGET (priv->process_roman_numerals_check),
+                              gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->process_first_style_uppercase_toggle)));
+}
+
 /*
- * et_scan_show:
- * @action: the #GtkToggleAction that was activated
- * @user_data: user data set when the signal handler was connected
- *
- * Show the scanner window.
+ * Set sensitive state of the processing check boxes : if no one is selected => all disabled
  */
-void
-et_scan_show (GtkAction *action, gpointer user_data)
+static void
+Select_Fields_Set_Sensitive (EtScanDialog *self)
 {
-    gboolean active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
+    EtScanDialogPrivate *priv;
+
+    priv = et_scan_dialog_get_instance_private (self);
 
-    if (active)
+    if (g_settings_get_flags (MainSettings, "process-fields") != 0)
     {
-        if (!ScannerWindow)
-        {
-            Open_ScannerWindow (SCANNER_TYPE);
-        }
-        else
+        gtk_widget_set_sensitive(GTK_WIDGET(priv->process_convert_to_space_toggle),     TRUE);
+        gtk_widget_set_sensitive(GTK_WIDGET(priv->process_convert_to_underscores_toggle),         TRUE);
+        gtk_widget_set_sensitive(GTK_WIDGET(priv->process_convert_toggle),              TRUE);
+        gtk_widget_set_sensitive(GTK_WIDGET(priv->process_convert_label),       TRUE);
+        // Activate the two entries only if the check box is activated, else keep them disabled
+        if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_convert_toggle)))
         {
-            gtk_window_present (GTK_WINDOW (ScannerWindow));
+            gtk_widget_set_sensitive(GTK_WIDGET(priv->process_convert_to_entry),        TRUE);
+            gtk_widget_set_sensitive(GTK_WIDGET(priv->process_convert_from_entry),      TRUE);
         }
-    }
-    else
+        gtk_widget_set_sensitive(GTK_WIDGET(priv->process_all_uppercase_toggle),         TRUE);
+        gtk_widget_set_sensitive(GTK_WIDGET(priv->process_all_lowercase_toggle),          TRUE);
+        gtk_widget_set_sensitive(GTK_WIDGET(priv->process_first_uppercase_toggle), TRUE);
+        gtk_widget_set_sensitive(GTK_WIDGET(priv->process_first_style_uppercase_toggle),TRUE);
+        Process_Fields_First_Letters_Check_Button_Toggled (self);
+        gtk_widget_set_sensitive(GTK_WIDGET(priv->process_remove_space_toggle),          TRUE);
+        gtk_widget_set_sensitive(GTK_WIDGET(priv->process_insert_space_toggle),          TRUE);
+        gtk_widget_set_sensitive(GTK_WIDGET(priv->process_insert_one_space_toggle),         TRUE);
+    }else
     {
-        ScannerWindow_Quit ();
+        gtk_widget_set_sensitive(GTK_WIDGET(priv->process_convert_to_space_toggle),     FALSE);
+        gtk_widget_set_sensitive(GTK_WIDGET(priv->process_convert_to_underscores_toggle),         FALSE);
+        gtk_widget_set_sensitive(GTK_WIDGET(priv->process_convert_toggle),              FALSE);
+        gtk_widget_set_sensitive(GTK_WIDGET(priv->process_convert_to_entry),            FALSE);
+        gtk_widget_set_sensitive(GTK_WIDGET(priv->process_convert_label),       FALSE);
+        gtk_widget_set_sensitive(GTK_WIDGET(priv->process_convert_from_entry),          FALSE);
+        gtk_widget_set_sensitive(GTK_WIDGET(priv->process_all_uppercase_toggle),         FALSE);
+        gtk_widget_set_sensitive(GTK_WIDGET(priv->process_all_lowercase_toggle),          FALSE);
+        gtk_widget_set_sensitive(GTK_WIDGET(priv->process_first_uppercase_toggle), FALSE);
+        gtk_widget_set_sensitive(GTK_WIDGET(priv->process_first_style_uppercase_toggle),FALSE);
+        gtk_widget_set_sensitive(GTK_WIDGET(priv->process_roman_numerals_check),  FALSE);
+        gtk_widget_set_sensitive(GTK_WIDGET(priv->process_remove_space_toggle),          FALSE);
+        gtk_widget_set_sensitive(GTK_WIDGET(priv->process_insert_space_toggle),          FALSE);
+        gtk_widget_set_sensitive(GTK_WIDGET(priv->process_insert_one_space_toggle),         FALSE);
     }
 }
 
-
-/* Callback from Open_ScannerWindow */
 static void
-ScannerWindow_Quit (void)
+Scan_Toggle_Legend_Button (EtScanDialog *self)
 {
-    GtkToggleAction *toggle_action;
+    EtScanDialogPrivate *priv;
 
-    toggle_action = GTK_TOGGLE_ACTION (gtk_ui_manager_get_action (UIManager,
-                                                                  "/ToolBar/ShowScanner"));
+    priv = et_scan_dialog_get_instance_private (self);
 
-    if (gtk_toggle_action_get_active (toggle_action))
+    if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->legend_toggle)))
+    {
+        gtk_widget_show_all (priv->legend_frame);
+    }
+    else
     {
-        gtk_toggle_action_set_active (toggle_action, FALSE);
+        gtk_widget_hide (priv->legend_frame);
     }
+}
+
+static void
+Scan_Toggle_Mask_Editor_Button (EtScanDialog *self)
+{
+    EtScanDialogPrivate *priv;
+    GtkTreeModel *treemodel;
+    GtkTreeSelection *selection;
+    GtkTreeIter iter;
+
+    priv = et_scan_dialog_get_instance_private (self);
 
-    if (ScannerWindow)
+    if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->mask_editor_toggle)))
     {
-        ScannerWindow_Apply_Changes();
+        gtk_widget_show_all(priv->mask_editor_frame);
 
-        gtk_widget_destroy(ScannerWindow);
-        ScannerWindow     = NULL;
-        ScannerOptionCombo= NULL;
+        // Select first row in list
+        treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(priv->mask_editor_view));
+        if (gtk_tree_model_get_iter_first(treemodel, &iter))
+        {
+            selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->mask_editor_view));
+            gtk_tree_selection_unselect_all(selection);
+            gtk_tree_selection_select_iter(selection, &iter);
+        }
 
-        // To avoid crashs after tests
-        ScanTagMaskCombo              = NULL;
-        RenameFileMaskCombo           = NULL;
-        MaskEditorEntry               = NULL;
-        LegendFrame                   = NULL;
-        ProcessFieldsConvertIntoSpace = NULL;
-        ProcessFieldsConvertSpace     = NULL;
-        FillTagPreviewLabel           = NULL;
-        RenameFilePreviewLabel        = NULL;
+        // Update status of the icon box cause prev instruction show it for all cases
+        g_signal_emit_by_name(G_OBJECT(priv->mask_editor_entry),"changed");
+    }else
+    {
+        gtk_widget_hide(priv->mask_editor_frame);
     }
 }
 
-
 /*
- * For the configuration file...
+ * Update the Mask List with the new value of the entry box
  */
-void ScannerWindow_Apply_Changes (void)
+static void
+Mask_Editor_Entry_Changed (EtScanDialog *self)
 {
-    if (ScannerWindow)
-    {
-        gint x, y;//, width, height;
-        GdkWindow *window;
-
-        window = gtk_widget_get_window(ScannerWindow);
+    EtScanDialogPrivate *priv;
+    GtkTreeSelection *selection;
+    GtkTreePath *firstSelected;
+    GtkTreeModel *treemodel;
+    GList *selectedRows;
+    GtkTreeIter row;
+    const gchar* text;
 
-        if ( window && gdk_window_is_visible(window) && gdk_window_get_state(window)!=GDK_WINDOW_STATE_MAXIMIZED )
-        {
-            // Position and Origin of the scanner window
-            gdk_window_get_root_origin(window,&x,&y);
-            SCANNER_WINDOW_X = x;
-            SCANNER_WINDOW_Y = y;
-            //gdk_window_get_size(window,&width,&height);
-            //SCANNER_WINDOW_WIDTH  = width;
-            //SCANNER_WINDOW_HEIGHT = height;
-        }
+    priv = et_scan_dialog_get_instance_private (self);
 
-        // The scanner selected
-        SCANNER_TYPE = gtk_combo_box_get_active(GTK_COMBO_BOX(ScannerOptionCombo));
-
-        SCAN_MASK_EDITOR_BUTTON   = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(MaskEditorButton));
-        SCAN_LEGEND_BUTTON        = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(LegendButton));
-
-        /* Group: select entries to process */
-        PROCESS_FILENAME_FIELD    = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFileNameField));
-        PROCESS_TITLE_FIELD       = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessTitleField));
-        PROCESS_ARTIST_FIELD      = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessArtistField));
-        PROCESS_ALBUM_ARTIST_FIELD= gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessAlbumArtistField));
-        PROCESS_ALBUM_FIELD       = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessAlbumField));
-        PROCESS_GENRE_FIELD       = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessGenreField));
-        PROCESS_COMMENT_FIELD     = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessCommentField));
-        PROCESS_COMPOSER_FIELD    = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessComposerField));
-        PROCESS_ORIG_ARTIST_FIELD = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessOrigArtistField));
-        PROCESS_COPYRIGHT_FIELD   = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessCopyrightField));
-        PROCESS_URL_FIELD         = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessURLField));
-        PROCESS_ENCODED_BY_FIELD  = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessEncodedByField));
-
-        if (PROCESS_FIELDS_CONVERT_FROM) g_free(PROCESS_FIELDS_CONVERT_FROM);
-        PROCESS_FIELDS_CONVERT_FROM = g_strdup(gtk_entry_get_text(GTK_ENTRY(ProcessFieldsConvertFrom)));
-        if (PROCESS_FIELDS_CONVERT_TO) g_free(PROCESS_FIELDS_CONVERT_TO);
-        PROCESS_FIELDS_CONVERT_TO   = g_strdup(gtk_entry_get_text(GTK_ENTRY(ProcessFieldsConvertTo)));
-
-        /* Group: convert one character */
-        PF_CONVERT_INTO_SPACE     = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsConvertIntoSpace));
-        PF_CONVERT_SPACE          = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsConvertSpace));
-        PF_CONVERT                = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsConvert));
-
-        /* Group: capitalize */
-        PF_CONVERT_ALL_UPPERCASE           = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsAllUppercase));
-        PF_CONVERT_ALL_DOWNCASE            = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsAllDowncase));
-        PF_CONVERT_FIRST_LETTER_UPPERCASE  = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsFirstLetterUppercase));
-        PF_CONVERT_FIRST_LETTERS_UPPERCASE = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsFirstLettersUppercase));
-        PF_DETECT_ROMAN_NUMERALS           = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsDetectRomanNumerals));
-
-        /* Group: remove/insert space */
-        PF_REMOVE_SPACE   = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsRemoveSpace));
-        PF_INSERT_SPACE   = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsInsertSpace));
-        PF_ONLY_ONE_SPACE = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsOnlyOneSpace));
-
-        // Save default masks...
-        if (SCAN_TAG_DEFAULT_MASK) g_free(SCAN_TAG_DEFAULT_MASK);
-        SCAN_TAG_DEFAULT_MASK = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(ScanTagMaskCombo)))));
-        Add_String_To_Combo_List(ScanTagListModel, SCAN_TAG_DEFAULT_MASK);
-        Save_Rename_File_Masks_List(ScanTagListModel, MASK_EDITOR_TEXT);
-
-        if (RENAME_FILE_DEFAULT_MASK) g_free(RENAME_FILE_DEFAULT_MASK);
-        RENAME_FILE_DEFAULT_MASK = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(RenameFileMaskCombo)))));
-        Add_String_To_Combo_List(RenameFileListModel, RENAME_FILE_DEFAULT_MASK);
-        Save_Rename_File_Masks_List(RenameFileListModel, MASK_EDITOR_TEXT);
+    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->mask_editor_view));
+    treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(priv->mask_editor_view));
+    selectedRows = gtk_tree_selection_get_selected_rows(selection, NULL);
 
+    if (!selectedRows)
+    {
+        return;
     }
-}
 
+    firstSelected = (GtkTreePath *)g_list_first(selectedRows)->data;
+    text = gtk_entry_get_text(GTK_ENTRY(priv->mask_editor_entry));
 
-/* Callback from Option button */
-static void
-Scan_Option_Button (void)
-{
-    Open_OptionsWindow();
-    gtk_notebook_set_current_page(GTK_NOTEBOOK(OptionsNoteBook), OptionsNoteBook_Scanner_Page_Num);
-}
+    if (gtk_tree_model_get_iter (treemodel, &row, firstSelected))
+    {
+        gtk_list_store_set(GTK_LIST_STORE(treemodel), &row, MASK_EDITOR_TEXT, text, -1);
+    }
 
+    g_list_free_full (selectedRows, (GDestroyNotify)gtk_tree_path_free);
+}
 
 /*
- * entry_check_rename_file_mask:
- * @entry: the entry for which to check the mask
- * @user_data: user data set when the signal was connected
- *
- * Display an icon in the entry if the current text contains an invalid mask
- * for scanning tags.
+ * Callback from the mask edit list
+ * Previously known as Mask_Editor_List_Select_Row
  */
 static void
-entry_check_scan_tag_mask (GtkEntry *entry, gpointer user_data)
+Mask_Editor_List_Row_Selected (GtkTreeSelection* selection, EtScanDialog *self)
 {
-    gchar *tmp  = NULL;
-    gchar *mask = NULL;
-    gint loop = 0;
+    EtScanDialogPrivate *priv;
+    GList *selectedRows;
+    gchar *text = NULL;
+    GtkTreePath *lastSelected;
+    GtkTreeIter lastFile;
+    GtkTreeModel *treemodel;
+    gboolean valid;
 
-    g_return_if_fail (entry != NULL);
+    priv = et_scan_dialog_get_instance_private (self);
 
-    mask = g_strdup (gtk_entry_get_text (entry));
-    if (!mask || strlen(mask)<1)
-        goto Bad_Mask;
+    treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(priv->mask_editor_view));
 
-    while (mask)
+    /* We must block the function, else the previous selected row will be modified */
+    g_signal_handlers_block_by_func(G_OBJECT(priv->mask_editor_entry),
+                                    G_CALLBACK(Mask_Editor_Entry_Changed),NULL);
+
+    selectedRows = gtk_tree_selection_get_selected_rows(selection, NULL);
+
+    /*
+     * At some point, we might get called when no rows are selected?
+     */
+    if (!selectedRows)
     {
-        if ( (tmp=strrchr(mask,'%'))==NULL )
-        {
-            if (loop==0)
-                /* There is no code the first time => not accepted */
-                goto Bad_Mask;
-            else
-                /* There is no more code => accepted */
-                goto Good_Mask;
-        }
-        if ( strlen(tmp)>1
-        && (tmp[1]=='a' || tmp[1]=='b' || tmp[1]=='c' || tmp[1]=='d' || tmp[1]=='p' ||
-            tmp[1]=='r' || tmp[1]=='e' || tmp[1]=='g' || tmp[1]=='i' || tmp[1]=='l' ||
-            tmp[1]=='o' || tmp[1]=='n' || tmp[1]=='t' || tmp[1]=='u' || tmp[1]=='y' ) )
-        {
-            /* Code is correct */
-            *(mask+strlen(mask)-strlen(tmp)) = '\0';
-        }else
-        {
-            goto Bad_Mask;
-        }
+        g_signal_handlers_unblock_by_func(G_OBJECT(priv->mask_editor_entry),
+                                          G_CALLBACK(Mask_Editor_Entry_Changed),NULL);
+        return;
+    }
 
-        /* Check the following code and separator */
-        if ( (tmp=strrchr(mask,'%'))==NULL )
-            /* There is no more code => accepted */
-            goto Good_Mask;
+    /* Get the text of the last selected row */
+    lastSelected = (GtkTreePath *)g_list_last(selectedRows)->data;
 
-        if ( strlen(tmp)>2
-        && (tmp[1]=='a' || tmp[1]=='b' || tmp[1]=='c' || tmp[1]=='d' || tmp[1]=='p' ||
-            tmp[1]=='r' || tmp[1]=='e' || tmp[1]=='g' || tmp[1]=='i' || tmp[1]=='l' ||
-            tmp[1]=='o' || tmp[1]=='n' || tmp[1]=='t' || tmp[1]=='u' || tmp[1]=='y' ) )
-        {
-            /* There is a separator and code is correct */
-            *(mask+strlen(mask)-strlen(tmp)) = '\0';
-        }else
+    valid= gtk_tree_model_get_iter(treemodel, &lastFile, lastSelected);
+    if (valid)
+    {
+        gtk_tree_model_get(treemodel, &lastFile, MASK_EDITOR_TEXT, &text, -1);
+
+        if (text)
         {
-            goto Bad_Mask;
+            gtk_entry_set_text(GTK_ENTRY(priv->mask_editor_entry),text);
+            g_free(text);
         }
-        loop++;
     }
 
-    Bad_Mask:
-        g_free(mask);
-        gtk_entry_set_icon_from_icon_name (entry, GTK_ENTRY_ICON_SECONDARY,
-                                           "emblem-unreadable");
-        gtk_entry_set_icon_tooltip_text (entry, GTK_ENTRY_ICON_SECONDARY,
-                                         _("Invalid scanner mask"));
-        return;
+    g_signal_handlers_unblock_by_func(G_OBJECT(priv->mask_editor_entry),
+                                      G_CALLBACK(Mask_Editor_Entry_Changed),NULL);
 
-    Good_Mask:
-        g_free(mask);
-        gtk_entry_set_icon_from_icon_name (entry, GTK_ENTRY_ICON_SECONDARY,
-                                           NULL);
+    g_list_free_full (selectedRows, (GDestroyNotify)gtk_tree_path_free);
 }
 
 /*
- * entry_check_rename_file_mask:
- * @entry: the entry for which to check the mask
- * @user_data: user data set when the signal was connected
- *
- * Display an icon in the entry if the current text contains an invalid mask
- * for renaming files.
+ * Remove the selected rows from the mask editor list
  */
-void
-entry_check_rename_file_mask (GtkEntry *entry, gpointer user_data)
+static void
+Mask_Editor_List_Remove (EtScanDialog *self)
 {
-    gchar *tmp = NULL;
-    gchar *mask = NULL;
+    EtScanDialogPrivate *priv;
+    GtkTreeSelection *selection;
+    GtkTreeIter iter;
+    GtkTreeModel *treemodel;
 
-    g_return_if_fail (entry != NULL);
+    priv = et_scan_dialog_get_instance_private (self);
 
-    mask = g_strdup (gtk_entry_get_text (entry));
-    if (!mask || strlen(mask)<1)
-        goto Bad_Mask;
+    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->mask_editor_view));
+    treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(priv->mask_editor_view));
 
-    // Not a valid path....
-    if ( strstr(mask,"//") != NULL
-    ||   strstr(mask,"./") != NULL
-    ||   strstr(mask,"data/") != NULL)
-        goto Bad_Mask;
+    if (gtk_tree_selection_count_selected_rows(selection) == 0) {
+        g_critical ("%s", "Remove: No row selected");
+        return;
+    }
 
-    while (mask)
+    if (!gtk_tree_model_get_iter_first(treemodel, &iter))
+        return;
+
+    while (TRUE)
     {
-        if ( (tmp=strrchr(mask,'%'))==NULL )
-        {
-            /* There is no more code. */
-            /* No code in mask is accepted. */
-            goto Good_Mask;
-        }
-        if ( strlen(tmp)>1
-        && (tmp[1]=='a' || tmp[1]=='b' || tmp[1]=='c' || tmp[1]=='d' || tmp[1]=='p' ||
-            tmp[1]=='r' || tmp[1]=='e' || tmp[1]=='g' || tmp[1]=='i' || tmp[1]=='l' ||
-            tmp[1]=='o' || tmp[1]=='n' || tmp[1]=='t' || tmp[1]=='u' || tmp[1]=='y' ) )
+        if (gtk_tree_selection_iter_is_selected(selection, &iter))
         {
-            /* The code is valid. */
-            /* No separator is accepted. */
-            *(mask+strlen(mask)-strlen(tmp)) = '\0';
-        }else
+            if (!gtk_list_store_remove(GTK_LIST_STORE(treemodel), &iter))
+            {
+                break;
+            }
+        } else
         {
-            goto Bad_Mask;
+            if (!gtk_tree_model_iter_next(treemodel, &iter))
+            {
+                break;
+            }
         }
     }
-
-    Bad_Mask:
-        g_free(mask);
-        gtk_entry_set_icon_from_icon_name (entry, GTK_ENTRY_ICON_SECONDARY,
-                                           "emblem-unreadable");
-        gtk_entry_set_icon_tooltip_text (entry, GTK_ENTRY_ICON_SECONDARY,
-                                         _("Invalid scanner mask"));
-        return;
-
-    Good_Mask:
-        g_free(mask);
-        gtk_entry_set_icon_from_icon_name (entry, GTK_ENTRY_ICON_SECONDARY,
-                                           NULL);
-}
-
-
-static void
-Scan_Toggle_Legend_Button (void)
-{
-    g_return_if_fail (LegendButton != NULL || LegendFrame != NULL);
-
-    if ( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(LegendButton)) )
-        gtk_widget_show_all(LegendFrame);
-    else
-        gtk_widget_hide(LegendFrame);
 }
 
-
-static void
-Scan_Toggle_Mask_Editor_Button (void)
+/*
+ * Actions when the a key is pressed into the masks editor clist
+ */
+static gboolean
+Mask_Editor_List_Key_Press (GtkWidget *widget,
+                            GdkEvent *event,
+                            EtScanDialog *self)
 {
-    GtkTreeModel *treemodel;
-    GtkTreeSelection *selection;
-    GtkTreeIter iter;
-
-    g_return_if_fail (MaskEditorButton != NULL || MaskEditorFrame != NULL ||
-                      MaskEditorList != NULL);
-
-    if ( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(MaskEditorButton)) )
+    if (event && event->type == GDK_KEY_PRESS)
     {
-        gtk_widget_show_all(MaskEditorFrame);
+        GdkEventKey *kevent = (GdkEventKey *)event;
 
-        // Select first row in list
-        treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(MaskEditorList));
-        if (gtk_tree_model_get_iter_first(treemodel, &iter))
+        switch (kevent->keyval)
         {
-            selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(MaskEditorList));
-            gtk_tree_selection_unselect_all(selection);
-            gtk_tree_selection_select_iter(selection, &iter);
+            case GDK_KEY_Delete:
+                Mask_Editor_List_Remove (self);
+                return GDK_EVENT_STOP;
+                break;
         }
-
-        // Update status of the icon box cause prev instruction show it for all cases
-        g_signal_emit_by_name(G_OBJECT(MaskEditorEntry),"changed");
-    }else
-    {
-        gtk_widget_hide(MaskEditorFrame);
     }
-}
-
 
-
-static void
-Process_Fields_Convert_Check_Button_Toggled (GtkWidget *object)
-{
-    gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsConvertTo),gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(object)));
-    gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsConvertFrom),gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(object)));
-}
-
-static void
-Process_Fields_First_Letters_Check_Button_Toggled (GtkWidget *object)
-{
-    gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsDetectRomanNumerals),gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(object)));
+    return GDK_EVENT_PROPAGATE;
 }
 
-
 /*
- * Small buttons of Process Fields scanner
+ * Add a new mask to the list
  */
 static void
-Select_Fields_Invert_Selection (void)
+Mask_Editor_List_New (EtScanDialog *self)
 {
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessFileNameField),
-                                !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFileNameField)));
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessTitleField),
-                                !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessTitleField)));
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessArtistField),
-                                !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessArtistField)));
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessAlbumArtistField),
-                                !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessAlbumArtistField)));
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessAlbumField),
-                                !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessAlbumField)));
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessGenreField),
-                                !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessGenreField)));
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessCommentField),
-                                !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessCommentField)));
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessComposerField),
-                                !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessComposerField)));
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessOrigArtistField),
-                                !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessOrigArtistField)));
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessCopyrightField),
-                                !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessCopyrightField)));
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessURLField),
-                                !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessURLField)));
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessEncodedByField),
-                                !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessEncodedByField)));
-}
+    EtScanDialogPrivate *priv;
+    gchar *text;
+    GtkTreeIter iter;
+    GtkTreeSelection *selection;
+    GtkTreeModel *treemodel;
 
-static void
-Select_Fields_Select_Unselect_All (void)
-{
-    static gboolean state = TRUE;
-
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessFileNameField),   state);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessTitleField),      state);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessArtistField),     state);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessAlbumArtistField),state);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessAlbumField),      state);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessGenreField),      state);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessCommentField),    state);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessComposerField),   state);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessOrigArtistField), state);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessCopyrightField),  state);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessURLField),        state);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessEncodedByField),  state);
-    state = !state;
+    priv = et_scan_dialog_get_instance_private (self);
+
+    text = _("New_mask");
+    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->mask_editor_view));
+    treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(priv->mask_editor_view));
+
+    gtk_list_store_insert(GTK_LIST_STORE(treemodel), &iter, 0);
+    gtk_list_store_set(GTK_LIST_STORE(treemodel), &iter, MASK_EDITOR_TEXT, text, -1);
+
+    gtk_tree_selection_unselect_all(selection);
+    gtk_tree_selection_select_iter(selection, &iter);
 }
 
 /*
- * Set sensitive state of the processing check boxes : if no one is selected => all disabled
+ * Move all selected rows up one place in the mask list
  */
 static void
-Select_Fields_Set_Sensitive (void)
+Mask_Editor_List_Move_Up (EtScanDialog *self)
 {
-    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFileNameField))
-    ||  gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessTitleField))
-    ||  gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessArtistField))
-    ||  gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessAlbumArtistField))
-    ||  gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessAlbumField))
-    ||  gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessGenreField))
-    ||  gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessCommentField))
-    ||  gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessComposerField))
-    ||  gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessOrigArtistField))
-    ||  gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessCopyrightField))
-    ||  gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessURLField))
-    ||  gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessEncodedByField)))
-    {
-        gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsConvertIntoSpace),     TRUE);
-        gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsConvertSpace),         TRUE);
-        gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsConvert),              TRUE);
-        gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsConvertLabelTo),       TRUE);
-        // Activate the two entries only if the check box is activated, else keep them disabled
-        if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsConvert)))
+    EtScanDialogPrivate *priv;
+    GtkTreeSelection *selection;
+    GList *selectedRows;
+    GList *l;
+    GtkTreeIter currentFile;
+    GtkTreeIter nextFile;
+    GtkTreePath *currentPath;
+    GtkTreeModel *treemodel;
+
+    priv = et_scan_dialog_get_instance_private (self);
+
+    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->mask_editor_view));
+    treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(priv->mask_editor_view));
+    selectedRows = gtk_tree_selection_get_selected_rows(selection, NULL);
+
+    if (!selectedRows)
+    {
+        g_critical ("%s", "Move Up: No row selected");
+        return;
+    }
+
+    for (l = selectedRows; l != NULL; l = g_list_next (l))
+    {
+        currentPath = (GtkTreePath *)l->data;
+        if (gtk_tree_model_get_iter(treemodel, &currentFile, currentPath))
         {
-            gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsConvertTo),        TRUE);
-            gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsConvertFrom),      TRUE);
+            /* Find the entry above the node... */
+            if (gtk_tree_path_prev(currentPath))
+            {
+                /* ...and if it exists, swap the two rows by iter */
+                gtk_tree_model_get_iter(treemodel, &nextFile, currentPath);
+                gtk_list_store_swap(GTK_LIST_STORE(treemodel), &currentFile, &nextFile);
+            }
         }
-        gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsAllUppercase),         TRUE);
-        gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsAllDowncase),          TRUE);
-        gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsFirstLetterUppercase), TRUE);
-        gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsFirstLettersUppercase),TRUE);
-        Process_Fields_First_Letters_Check_Button_Toggled (ProcessFieldsFirstLettersUppercase);
-        gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsRemoveSpace),          TRUE);
-        gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsInsertSpace),          TRUE);
-        gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsOnlyOneSpace),         TRUE);
-    }else
-    {
-        gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsConvertIntoSpace),     FALSE);
-        gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsConvertSpace),         FALSE);
-        gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsConvert),              FALSE);
-        gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsConvertTo),            FALSE);
-        gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsConvertLabelTo),       FALSE);
-        gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsConvertFrom),          FALSE);
-        gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsAllUppercase),         FALSE);
-        gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsAllDowncase),          FALSE);
-        gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsFirstLetterUppercase), FALSE);
-        gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsFirstLettersUppercase),FALSE);
-        gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsDetectRomanNumerals),  FALSE);
-        gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsRemoveSpace),          FALSE);
-        gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsInsertSpace),          FALSE);
-        gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsOnlyOneSpace),         FALSE);
     }
-}
 
-/*
- * Callbacks from Mask Editor buttons
- */
+    g_list_free_full (selectedRows, (GDestroyNotify)gtk_tree_path_free);
+}
 
 /*
- * Callback from the mask edit list
- * Previously known as Mask_Editor_List_Select_Row
+ * Move all selected rows down one place in the mask list
  */
 static void
-Mask_Editor_List_Row_Selected (GtkTreeSelection* selection, gpointer data)
+Mask_Editor_List_Move_Down (EtScanDialog *self)
 {
+    EtScanDialogPrivate *priv;
+    GtkTreeSelection *selection;
     GList *selectedRows;
-    gchar *text = NULL;
-    GtkTreePath *lastSelected;
-    GtkTreeIter lastFile;
+    GList *l;
+    GtkTreeIter currentFile;
+    GtkTreeIter nextFile;
+    GtkTreePath *currentPath;
     GtkTreeModel *treemodel;
-    gboolean valid;
-
-    treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(MaskEditorList));
 
-    /* We must block the function, else the previous selected row will be modified */
-    g_signal_handlers_block_by_func(G_OBJECT(MaskEditorEntry),
-                                    G_CALLBACK(Mask_Editor_Entry_Changed),NULL);
+    priv = et_scan_dialog_get_instance_private (self);
 
+    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->mask_editor_view));
+    treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(priv->mask_editor_view));
     selectedRows = gtk_tree_selection_get_selected_rows(selection, NULL);
 
-    /*
-     * At some point, we might get called when no rows are selected?
-     */
     if (!selectedRows)
     {
-        g_signal_handlers_unblock_by_func(G_OBJECT(MaskEditorEntry),
-                                          G_CALLBACK(Mask_Editor_Entry_Changed),NULL);
+        g_critical ("%s", "Move Down: No row selected");
         return;
     }
 
-    /* Get the text of the last selected row */
-    lastSelected = (GtkTreePath *)g_list_last(selectedRows)->data;
-
-    valid= gtk_tree_model_get_iter(treemodel, &lastFile, lastSelected);
-    if (valid)
+    for (l = selectedRows; l != NULL; l = g_list_next (l))
     {
-        gtk_tree_model_get(treemodel, &lastFile, MASK_EDITOR_TEXT, &text, -1);
+        currentPath = (GtkTreePath *)l->data;
 
-        if (text)
+        if (gtk_tree_model_get_iter(treemodel, &currentFile, currentPath))
         {
-            gtk_entry_set_text(GTK_ENTRY(MaskEditorEntry),text);
-            g_free(text);
+            /* Find the entry below the node and swap the two nodes by iter */
+            gtk_tree_path_next(currentPath);
+            if (gtk_tree_model_get_iter(treemodel, &nextFile, currentPath))
+                gtk_list_store_swap(GTK_LIST_STORE(treemodel), &currentFile, &nextFile);
         }
     }
 
-    g_signal_handlers_unblock_by_func(G_OBJECT(MaskEditorEntry),
-                                      G_CALLBACK(Mask_Editor_Entry_Changed),NULL);
-
     g_list_free_full (selectedRows, (GDestroyNotify)gtk_tree_path_free);
 }
 
-
 /*
- * Add a new mask to the list
+ * Set a row visible in the mask editor list (by scrolling the list)
  */
 static void
-Mask_Editor_List_New (void)
+Mask_Editor_List_Set_Row_Visible (GtkTreeView *view,
+                                  GtkTreeModel *treeModel,
+                                  GtkTreeIter *rowIter)
 {
-    gchar *text = _("New_mask");
-    GtkTreeIter iter;
-    GtkTreeSelection *selection;
-    GtkTreeModel *treemodel;
-
-    g_return_if_fail (MaskEditorList != NULL);
-
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(MaskEditorList));
-    treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(MaskEditorList));
+    /*
+     * TODO: Make this only scroll to the row if it is not visible
+     * (like in easytag GTK1)
+     * See function gtk_tree_view_get_visible_rect() ??
+     */
+    GtkTreePath *rowPath;
 
-    gtk_list_store_insert(GTK_LIST_STORE(treemodel), &iter, 0);
-    gtk_list_store_set(GTK_LIST_STORE(treemodel), &iter, MASK_EDITOR_TEXT, text, -1);
+    g_return_if_fail (treeModel != NULL);
 
-    gtk_tree_selection_unselect_all(selection);
-    gtk_tree_selection_select_iter(selection, &iter);
+    rowPath = gtk_tree_model_get_path (treeModel, rowIter);
+    gtk_tree_view_scroll_to_cell (view, rowPath, NULL, FALSE, 0, 0);
+    gtk_tree_path_free (rowPath);
 }
 
 /*
  * Duplicate a mask on the list
  */
 static void
-Mask_Editor_List_Duplicate (void)
+Mask_Editor_List_Duplicate (EtScanDialog *self)
 {
+    EtScanDialogPrivate *priv;
     gchar *text = NULL;
     GList *selectedRows;
     GList *l;
@@ -3078,15 +2171,15 @@ Mask_Editor_List_Duplicate (void)
     GtkTreeIter rowIter;
     GtkTreeModel *treeModel;
 
-    g_return_if_fail (MaskEditorList != NULL);
+    priv = et_scan_dialog_get_instance_private (self);
 
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(MaskEditorList));
+    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->mask_editor_view));
     selectedRows = gtk_tree_selection_get_selected_rows(selection, NULL);
-    treeModel = gtk_tree_view_get_model(GTK_TREE_VIEW(MaskEditorList));
+    treeModel = gtk_tree_view_get_model(GTK_TREE_VIEW(priv->mask_editor_view));
 
     if (!selectedRows)
     {
-        Log_Print(LOG_ERROR,_("Copy: No row selected"));
+        g_critical ("%s", "Copy: No row selected");
         return;
     }
 
@@ -3110,9 +2203,12 @@ Mask_Editor_List_Duplicate (void)
                                            (gchar *)l->data, -1);
     }
 
-    // Set focus to the last inserted line
+    /* Set focus to the last inserted line. */
     if (toInsert)
-        Mask_Editor_List_Set_Row_Visible(treeModel,&rowIter);
+    {
+        Mask_Editor_List_Set_Row_Visible (GTK_TREE_VIEW (priv->mask_editor_view),
+                                          treeModel, &rowIter);
+    }
 
     /* Free data no longer needed */
     g_list_free_full (selectedRows, (GDestroyNotify)gtk_tree_path_free);
@@ -3120,405 +2216,694 @@ Mask_Editor_List_Duplicate (void)
 }
 
 static void
-Mask_Editor_List_Add (void)
+Process_Fields_Convert_Check_Button_Toggled (EtScanDialog *self, GtkWidget *object)
 {
-    gint i = 0;
-    GtkTreeModel *treemodel;
-    gchar *temp;
-
-    treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(MaskEditorList));
-
-    if (gtk_combo_box_get_active(GTK_COMBO_BOX(ScannerOptionCombo)) == SCANNER_FILL_TAG)
-    {
-        while(Scan_Masks[i])
-        {
-            /*if (!g_utf8_validate(Scan_Masks[i], -1, NULL))
-                temp = convert_to_utf8(Scan_Masks[i]);
-            else
-                temp = g_strdup(Scan_Masks[i]);*/
-            temp = Try_To_Validate_Utf8_String(Scan_Masks[i]);
+    EtScanDialogPrivate *priv;
 
-            gtk_list_store_insert_with_values (GTK_LIST_STORE (treemodel),
-                                               NULL, G_MAXINT,
-                                               MASK_EDITOR_TEXT, temp, -1);
-            g_free(temp);
-            i++;
-        }
-    } else if (gtk_combo_box_get_active(GTK_COMBO_BOX(ScannerOptionCombo)) == SCANNER_RENAME_FILE)
-    {
-        while(Rename_File_Masks[i])
-        {
-            /*if (!g_utf8_validate(Rename_File_Masks[i], -1, NULL))
-                temp = convert_to_utf8(Rename_File_Masks[i]);
-            else
-                temp = g_strdup(Rename_File_Masks[i]);*/
-            temp = Try_To_Validate_Utf8_String(Rename_File_Masks[i]);
+    priv = et_scan_dialog_get_instance_private (self);
 
-            gtk_list_store_insert_with_values (GTK_LIST_STORE (treemodel),
-                                               NULL, G_MAXINT,
-                                               MASK_EDITOR_TEXT, temp, -1);
-            g_free(temp);
-            i++;
-        }
-    }
+    gtk_widget_set_sensitive (priv->process_convert_to_entry,
+                              gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->process_convert_toggle)));
+    gtk_widget_set_sensitive (priv->process_convert_from_entry,
+                              gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->process_convert_toggle)));
 }
 
-/*
- * Remove the selected rows from the mask editor list
- */
+/* Make sure that the Show Scanner toggle action is updated. */
 static void
-Mask_Editor_List_Remove (void)
+et_scan_on_hide (GtkWidget *widget,
+                 gpointer user_data)
 {
-    GtkTreeSelection *selection;
-    GtkTreeIter iter;
-    GtkTreeModel *treemodel;
-
-    g_return_if_fail (MaskEditorList != NULL);
-
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(MaskEditorList));
-    treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(MaskEditorList));
+    g_action_group_activate_action (G_ACTION_GROUP (MainWindow), "scanner",
+                                    NULL);
+}
 
-    if (gtk_tree_selection_count_selected_rows(selection) == 0) {
-        Log_Print(LOG_ERROR,_("Remove: No row selected"));
-        return;
-    }
+static void
+create_scan_dialog (EtScanDialog *self)
+{
+    EtScanDialogPrivate *priv;
+    GtkWidget *scan_button;
+    GtkWidget *ScanVBox;
+    GtkWidget *button;
+    GtkWidget *icon;
+    GtkWidget *process_fields_convert_none;
+    GtkBuilder *builder;
+    GError *error = NULL;
 
-    if (!gtk_tree_model_get_iter_first(treemodel, &iter))
-        return;
+    priv = et_scan_dialog_get_instance_private (self);
 
-    while (TRUE)
-    {
-        if (gtk_tree_selection_iter_is_selected(selection, &iter))
-        {
-            if (!gtk_list_store_remove(GTK_LIST_STORE(treemodel), &iter))
-            {
-                break;
-            }
-        } else
-        {
-            if (!gtk_tree_model_iter_next(treemodel, &iter))
-            {
-                break;
-            }
-        }
-    }
-}
+    /* The window */
+    gtk_window_set_title (GTK_WINDOW (self), _("Tag and Filename Scan"));
+    gtk_window_set_destroy_with_parent (GTK_WINDOW (self), TRUE);
+    gtk_dialog_add_buttons (GTK_DIALOG (self), _("_Close"),
+                            GTK_RESPONSE_CLOSE, NULL);
 
-/*
- * Move all selected rows up one place in the mask list
- */
-static void
-Mask_Editor_List_Move_Up (void)
-{
-    GtkTreeSelection *selection;
-    GList *selectedRows;
-    GList *l;
-    GtkTreeIter currentFile;
-    GtkTreeIter nextFile;
-    GtkTreePath *currentPath;
-    GtkTreeModel *treemodel;
+    /* 'Scan selected files' button */
+    scan_button = gtk_button_new_with_label (_("Scan Files"));
+    gtk_widget_set_can_default (scan_button, TRUE);
+    gtk_dialog_add_action_widget (GTK_DIALOG (self), scan_button,
+                                  GTK_RESPONSE_APPLY);
+    gtk_dialog_set_default_response (GTK_DIALOG (self), GTK_RESPONSE_APPLY);
+    gtk_widget_show (scan_button);
+    gtk_widget_set_tooltip_text (scan_button, _("Scan selected files"));
 
-    g_return_if_fail (MaskEditorList != NULL);
+    /* The response signal handles close, scan and the delete event. */
+    g_signal_connect (self, "response", G_CALLBACK (et_scan_on_response),
+                      NULL);
+    g_signal_connect (self, "delete-event",
+                      G_CALLBACK (gtk_widget_hide_on_delete), NULL);
+    g_signal_connect (self, "hide", G_CALLBACK (et_scan_on_hide), NULL);
 
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(MaskEditorList));
-    treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(MaskEditorList));
-    selectedRows = gtk_tree_selection_get_selected_rows(selection, NULL);
+    /* The main vbox */
+    ScanVBox = gtk_dialog_get_content_area (GTK_DIALOG (self));
+    gtk_container_set_border_width (GTK_CONTAINER (self), 6);
+    gtk_box_set_spacing (GTK_BOX (ScanVBox), 12);
 
-    if (!selectedRows)
-    {
-        Log_Print(LOG_ERROR,_("Move Up: No row selected"));
-        return;
-    }
+    /*
+     * The hbox for mode buttons + buttons + what to scan
+     */
+    builder = gtk_builder_new ();
+    gtk_builder_add_from_resource (builder,
+                                   "/org/gnome/EasyTAG/scan_dialog.ui",
+                                   &error);
 
-    for (l = selectedRows; l != NULL; l = g_list_next (l))
+    if (error != NULL)
     {
-        currentPath = (GtkTreePath *)l->data;
-        if (gtk_tree_model_get_iter(treemodel, &currentFile, currentPath))
-        {
-            /* Find the entry above the node... */
-            if (gtk_tree_path_prev(currentPath))
-            {
-                /* ...and if it exists, swap the two rows by iter */
-                gtk_tree_model_get_iter(treemodel, &nextFile, currentPath);
-                gtk_list_store_swap(GTK_LIST_STORE(treemodel), &currentFile, &nextFile);
-            }
-        }
+        g_error ("Unable to get scanner dialog from resource: %s",
+                 error->message);
     }
 
-    g_list_free_full (selectedRows, (GDestroyNotify)gtk_tree_path_free);
-}
+    priv->notebook = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                         "scan_notebook"));
+    gtk_container_add (GTK_CONTAINER (ScanVBox), priv->notebook);
+    g_settings_bind_with_mapping (MainSettings, "scan-mode", priv->notebook,
+                                  "page", G_SETTINGS_BIND_DEFAULT,
+                                  et_settings_enum_get, et_settings_enum_set,
+                                  GSIZE_TO_POINTER (ET_TYPE_SCAN_MODE), NULL);
+    g_signal_connect_swapped (MainSettings, "changed::scan-mode",
+                              G_CALLBACK (on_scan_mode_changed),
+                              self);
 
-/*
- * Move all selected rows down one place in the mask list
- */
-static void
-Mask_Editor_List_Move_Down (void)
-{
-    GtkTreeSelection *selection;
-    GList *selectedRows;
-    GList *l;
-    GtkTreeIter currentFile;
-    GtkTreeIter nextFile;
-    GtkTreePath *currentPath;
-    GtkTreeModel *treemodel;
+    priv->fill_grid = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                          "fill_grid"));
+    priv->rename_grid = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                            "rename_grid"));
 
-    g_return_if_fail (MaskEditorList != NULL);
+    /* Options button */
+    button = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                 "scanner_preferences_button"));
+    g_signal_connect (button, "clicked", G_CALLBACK (Scan_Option_Button),
+                      NULL);
 
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(MaskEditorList));
-    treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(MaskEditorList));
-    selectedRows = gtk_tree_selection_get_selected_rows(selection, NULL);
+    /* Mask Editor button */
+    priv->mask_editor_toggle = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                   "scanner_mask_toggle"));
+    icon = gtk_image_new_from_resource ("/org/gnome/EasyTAG/images/mask.png");
+    gtk_button_set_image (GTK_BUTTON (priv->mask_editor_toggle), icon);
+    g_settings_bind (MainSettings, "scan-mask-editor-show",
+                     priv->mask_editor_toggle, "active",
+                     G_SETTINGS_BIND_DEFAULT);
+    g_signal_connect_swapped (priv->mask_editor_toggle, "toggled",
+                              G_CALLBACK (Scan_Toggle_Mask_Editor_Button),
+                              self);
 
-    if (!selectedRows)
-    {
-        Log_Print(LOG_ERROR,_("Move Down: No row selected"));
-        return;
-    }
+    /* Legend button */
+    priv->legend_toggle = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                              "scanner_legend_toggle"));
+    g_settings_bind (MainSettings, "scan-legend-show", priv->legend_toggle,
+                     "active", G_SETTINGS_BIND_DEFAULT);
+    g_signal_connect_swapped (priv->legend_toggle, "toggled",
+                              G_CALLBACK (Scan_Toggle_Legend_Button),
+                              self);
+
+    /* Frame for Scan Tag. */
+    /* Set up list model which is used both by the combobox and the editor. */
+    priv->scan_tag_masks_model = GTK_LIST_STORE (gtk_builder_get_object (builder,
+                                                                         "fill_masks_model"));
+
+    /* The combo box to select the mask to apply. */
+    priv->scan_tag_mask_combo = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                    "fill_combo"));
+
+    /* Signal to generate preview (preview of the new tag values). */
+    g_signal_connect_swapped (gtk_bin_get_child (GTK_BIN (priv->scan_tag_mask_combo)),
+                              "changed",
+                              G_CALLBACK (Scan_Fill_Tag_Generate_Preview),
+                              self);
+
+    /* Load masks into the combobox from a file. */
+    Load_Scan_Tag_Masks_List (priv->scan_tag_masks_model, MASK_EDITOR_TEXT,
+                              Scan_Masks);
+    g_settings_bind (MainSettings, "scan-tag-default-mask",
+                     gtk_bin_get_child (GTK_BIN (priv->scan_tag_mask_combo)),
+                     "text", G_SETTINGS_BIND_DEFAULT);
+    Add_String_To_Combo_List (priv->scan_tag_masks_model,
+                              gtk_entry_get_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->scan_tag_mask_combo)))));
+
+    /* Mask status icon. Signal connection to check if mask is correct in the
+     * mask entry. */
+    g_signal_connect (gtk_bin_get_child (GTK_BIN (priv->scan_tag_mask_combo)),
+                      "changed", G_CALLBACK (entry_check_scan_tag_mask),
+                      NULL);
 
-    for (l = selectedRows; l != NULL; l = g_list_next (l))
-    {
-        currentPath = (GtkTreePath *)l->data;
+    /* Preview label. */
+    priv->fill_tag_preview_label = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                       "fill_preview_label"));
+
+    /* Frame for Rename File. */
+    /* Button to prefix path. */
+    button = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                 "rename_prefix_button"));
+    g_signal_connect_swapped (button, "clicked",
+                              G_CALLBACK (Scan_Rename_File_Prefix_Path), self);
+
+    /* Set up list model which is used both by the combobox and the editor. */
+    priv->rename_masks_model = GTK_LIST_STORE (gtk_builder_get_object (builder,
+                                                                       "rename_masks_model"));
+
+    /* The combo box to select the mask to apply. */
+    priv->rename_file_mask_combo = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                       "rename_combo"));
+
+    /* Signal to generate preview (preview of the new filename). */
+    g_signal_connect_swapped (gtk_bin_get_child (GTK_BIN (priv->rename_file_mask_combo)),
+                              "changed",
+                              G_CALLBACK (Scan_Rename_File_Generate_Preview),
+                              self);
+
+    /* Load masks into the combobox from a file. */
+    Load_Rename_File_Masks_List (priv->rename_masks_model, MASK_EDITOR_TEXT,
+                                 Rename_File_Masks);
+    g_settings_bind (MainSettings, "rename-file-default-mask",
+                     gtk_bin_get_child (GTK_BIN (priv->rename_file_mask_combo)),
+                     "text", G_SETTINGS_BIND_DEFAULT);
+    Add_String_To_Combo_List (priv->rename_masks_model,
+                              gtk_entry_get_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->rename_file_mask_combo)))));
+
+    /* Mask status icon. Signal connection to check if mask is correct to the
+     * mask entry. */
+    g_signal_connect (gtk_bin_get_child (GTK_BIN (priv->rename_file_mask_combo)),
+                      "changed", G_CALLBACK (entry_check_rename_file_mask),
+                      NULL);
 
-        if (gtk_tree_model_get_iter(treemodel, &currentFile, currentPath))
+    /* Preview label */
+    priv->rename_file_preview_label = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                          "rename_preview_label"));
+
+    /* Frame for Processing Fields. */
+    /* Group: select entry fields to process */
+    {
+        gsize i;
+        static const struct
         {
-            /* Find the entry below the node and swap the two nodes by iter */
-            gtk_tree_path_next(currentPath);
-            if (gtk_tree_model_get_iter(treemodel, &nextFile, currentPath))
-                gtk_list_store_swap(GTK_LIST_STORE(treemodel), &currentFile, &nextFile);
+            const gchar *id;
+        } ids[] =
+        {
+            { "process_filename_check" },
+            { "process_title_check" },
+            { "process_artist_check" },
+            { "process_album_artist_check" },
+            { "process_album_check" },
+            { "process_genre_check" },
+            { "process_comment_check" },
+            { "process_composer_check" },
+            { "process_orig_artist_check" },
+            { "process_copyright_check" },
+            { "process_url_check" },
+            { "process_encoded_by_check" }
+        };
+
+        for (i = 0; i < G_N_ELEMENTS (ids); i++)
+        {
+            GtkWidget *widget;
+
+            widget = GTK_WIDGET (gtk_builder_get_object (builder, ids[i].id));
+            g_object_set_data (G_OBJECT (widget), "flags-type",
+                               GSIZE_TO_POINTER (ET_TYPE_PROCESS_FIELD));
+            g_settings_bind_with_mapping (MainSettings, "process-fields",
+                                          widget, "active",
+                                          G_SETTINGS_BIND_DEFAULT,
+                                          et_settings_flags_toggle_get,
+                                          et_settings_flags_toggle_set, widget,
+                                          NULL);
+            g_signal_connect_swapped (G_OBJECT (widget), "toggled",
+                                      G_CALLBACK (Select_Fields_Set_Sensitive),
+                                      self);
         }
     }
 
-    g_list_free_full (selectedRows, (GDestroyNotify)gtk_tree_path_free);
-}
+    /* Group: character conversion */
+    priv->process_convert_to_space_toggle = GTK_WIDGET (gtk_builder_get_object (builder, "convert_space_radio"));
+    priv->process_convert_to_underscores_toggle = GTK_WIDGET (gtk_builder_get_object (builder, "convert_underscores_radio"));
+    priv->process_convert_toggle = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                       "convert_string_radio"));
+    priv->process_convert_from_entry = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                           "convert_from_entry"));
+    priv->process_convert_to_entry = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                         "convert_to_entry"));
+    priv->process_convert_label = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                      "convert_to_label"));
+    process_fields_convert_none = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                      "convert_none_radio"));
+
+    /* Toggled signals */
+    g_signal_connect_swapped (priv->process_convert_toggle, "toggled",
+                              G_CALLBACK (Process_Fields_Convert_Check_Button_Toggled),
+                              self);
+    /* Set check buttons to init value */
+    g_settings_bind_with_mapping (MainSettings, "process-convert",
+                                  priv->process_convert_to_space_toggle,
+                                  "active", G_SETTINGS_BIND_DEFAULT,
+                                  et_settings_enum_radio_get,
+                                  et_settings_enum_radio_set,
+                                  priv->process_convert_to_space_toggle, NULL);
+    g_settings_bind_with_mapping (MainSettings, "process-convert",
+                                  priv->process_convert_to_underscores_toggle,
+                                  "active", G_SETTINGS_BIND_DEFAULT,
+                                  et_settings_enum_radio_get,
+                                  et_settings_enum_radio_set,
+                                  priv->process_convert_to_underscores_toggle,
+                                  NULL);
+    g_settings_bind_with_mapping (MainSettings, "process-convert",
+                                  priv->process_convert_toggle,
+                                  "active", G_SETTINGS_BIND_DEFAULT,
+                                  et_settings_enum_radio_get,
+                                  et_settings_enum_radio_set,
+                                  priv->process_convert_toggle, NULL);
+    g_settings_bind_with_mapping (MainSettings, "process-convert",
+                                  process_fields_convert_none,
+                                  "active", G_SETTINGS_BIND_DEFAULT,
+                                  et_settings_enum_radio_get,
+                                  et_settings_enum_radio_set,
+                                  process_fields_convert_none, NULL);
+    g_settings_bind (MainSettings, "process-convert-characters-from",
+                     priv->process_convert_from_entry, "text",
+                     G_SETTINGS_BIND_DEFAULT);
+    g_settings_bind (MainSettings, "process-convert-characters-to",
+                     priv->process_convert_to_entry, "text",
+                     G_SETTINGS_BIND_DEFAULT);
+
+    /* Group: capitalize, ... */
+    priv->process_all_uppercase_toggle = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                             "capitalize_all_radio"));
+    priv->process_all_lowercase_toggle  = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                              "capitalize_lower_radio"));
+    priv->process_first_uppercase_toggle  = GTK_WIDGET (gtk_builder_get_object (builder, "capitalize_first_radio"));
+    priv->process_first_style_uppercase_toggle = GTK_WIDGET (gtk_builder_get_object (builder, "capitalize_first_style_radio"));
+    priv->process_roman_numerals_check = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                             "capitalize_roman_check"));
+    /* Toggled signals */
+    g_signal_connect_swapped (priv->process_first_style_uppercase_toggle,
+                              "toggled",
+                              G_CALLBACK (Process_Fields_First_Letters_Check_Button_Toggled),
+                              self);
+    /* Set check buttons to init value */
+    g_settings_bind (MainSettings, "process-uppercase-all",
+                     priv->process_all_uppercase_toggle, "active",
+                     G_SETTINGS_BIND_DEFAULT);
+    g_settings_bind (MainSettings, "process-lowercase-all",
+                     priv->process_all_lowercase_toggle, "active",
+                     G_SETTINGS_BIND_DEFAULT);
+    g_settings_bind (MainSettings, "process-uppercase-first-letters",
+                     priv->process_first_uppercase_toggle, "active",
+                     G_SETTINGS_BIND_DEFAULT);
+    g_settings_bind (MainSettings, "process-detect-roman-numerals",
+                     priv->process_roman_numerals_check, "active",
+                     G_SETTINGS_BIND_DEFAULT);
+
+    /* Group: insert/remove spaces */
+    priv->process_remove_space_toggle = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                            "spaces_remove_radio"));
+    priv->process_insert_space_toggle = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                            "spaces_insert_radio"));
+    priv->process_insert_one_space_toggle = GTK_WIDGET (gtk_builder_get_object (builder, "spaces_insert_one_radio"));
+    /* Set check buttons to init value */
+    g_settings_bind (MainSettings, "process-remove-spaces",
+                     priv->process_remove_space_toggle, "active",
+                     G_SETTINGS_BIND_DEFAULT);
+    g_settings_bind (MainSettings, "process-insert-capital-spaces",
+                     priv->process_insert_space_toggle, "active",
+                     G_SETTINGS_BIND_DEFAULT);
+    g_settings_bind (MainSettings, "process-remove-duplicate-spaces",
+                     priv->process_insert_one_space_toggle, "active",
+                     G_SETTINGS_BIND_DEFAULT);
+    Select_Fields_Set_Sensitive (self);
 
-/*
- * Set a row visible in the mask editor list (by scrolling the list)
- */
-static void
-Mask_Editor_List_Set_Row_Visible (GtkTreeModel *treeModel, GtkTreeIter *rowIter)
-{
     /*
-     * TODO: Make this only scroll to the row if it is not visible
-     * (like in easytag GTK1)
-     * See function gtk_tree_view_get_visible_rect() ??
+     * Frame to display codes legend
      */
-    GtkTreePath *rowPath;
+    priv->legend_frame = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                             "legend_grid"));
 
-    g_return_if_fail (treeModel != NULL);
+    /* Masks Editor. */
+    priv->mask_editor_frame = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                  "editor_grid"));
+
+    /* The list */
+    priv->mask_editor_view = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                 "mask_view"));
+
+    gtk_tree_selection_set_mode (gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->mask_editor_view)),
+                                 GTK_SELECTION_MULTIPLE);
+    g_signal_connect_after (gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->mask_editor_view)),
+                            "changed",
+                            G_CALLBACK (Mask_Editor_List_Row_Selected), self);
+    g_signal_connect (priv->mask_editor_view, "key-press-event",
+                      G_CALLBACK (Mask_Editor_List_Key_Press), self);
+    /* The entry */
+    priv->mask_editor_entry = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                  "mask_entry"));
+    g_signal_connect_swapped (priv->mask_editor_entry, "changed",
+                              G_CALLBACK (Mask_Editor_Entry_Changed), self);
+    /* Mask status icon. */
+    /* Signal connection to check if mask is correct into the mask entry. */
+    g_signal_connect (priv->mask_editor_entry, "changed",
+                      G_CALLBACK (entry_check_scan_tag_mask), NULL);
+
+    /* The buttons part */
+    /* New mask button */
+    button = GTK_WIDGET (gtk_builder_get_object (builder, "mask_new_button"));
+    g_signal_connect_swapped (button, "clicked",
+                              G_CALLBACK (Mask_Editor_List_New), self);
+
+    /* Move up mask button */
+    button = GTK_WIDGET (gtk_builder_get_object (builder, "mask_up_button"));
+    g_signal_connect_swapped (button, "clicked",
+                              G_CALLBACK (Mask_Editor_List_Move_Up), self);
+
+    /* Move down mask button */
+    button = GTK_WIDGET (gtk_builder_get_object (builder, "mask_down_button"));
+    g_signal_connect_swapped (button, "clicked",
+                              G_CALLBACK (Mask_Editor_List_Move_Down), self);
+
+    /* Copy mask button */
+    button = GTK_WIDGET (gtk_builder_get_object (builder, "mask_copy_button"));
+    g_signal_connect_swapped (button, "clicked",
+                              G_CALLBACK (Mask_Editor_List_Duplicate), self);
+
+    /* Add mask button */
+    button = GTK_WIDGET (gtk_builder_get_object (builder, "mask_add_button"));
+    g_signal_connect_swapped (button, "clicked",
+                              G_CALLBACK (Mask_Editor_List_Add), self);
+
+    /* Remove mask button */
+    button = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                 "mask_remove_button"));
+    g_signal_connect_swapped (button, "clicked",
+                              G_CALLBACK (Mask_Editor_List_Remove), self);
 
-    rowPath = gtk_tree_model_get_path(treeModel, rowIter);
-    gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(MaskEditorList), rowPath, NULL, FALSE, 0, 0);
-    gtk_tree_path_free(rowPath);
+    /* Save mask button */
+    button = GTK_WIDGET (gtk_builder_get_object (builder, "mask_save_button"));
+    g_signal_connect_swapped (button, "clicked",
+                              G_CALLBACK (Mask_Editor_List_Save_Button), self);
+
+    /* To initialize the mask status icon and visibility */
+    g_signal_emit_by_name (gtk_bin_get_child (GTK_BIN (priv->scan_tag_mask_combo)),
+                           "changed");
+    g_signal_emit_by_name (gtk_bin_get_child (GTK_BIN (priv->rename_file_mask_combo)),
+                           "changed");
+    g_signal_emit_by_name (priv->mask_editor_entry, "changed");
+    g_signal_emit_by_name (priv->legend_toggle, "toggled"); /* To hide legend frame */
+    g_signal_emit_by_name (priv->mask_editor_toggle, "toggled"); /* To hide mask editor frame */
+    g_signal_emit_by_name (priv->process_convert_toggle, "toggled"); /* To enable / disable entries */
+    g_signal_emit_by_name (priv->process_roman_numerals_check, "toggled"); /* To enable / disable entries */
+
+    gtk_widget_show_all (ScanVBox);
+
+    /* Activate the current menu in the option menu. */
+    on_scan_mode_changed (self, "scan-mode", MainSettings);
+
+    g_object_unref (builder);
 }
 
 /*
- * Save the currently displayed mask list in the mask editor
+ * Select the scanner to run for the current ETFile
  */
-static void
-Mask_Editor_List_Save_Button (void)
+void
+Scan_Select_Mode_And_Run_Scanner (EtScanDialog *self, ET_File *ETFile)
 {
-    Mask_Editor_Clean_Up_Masks_List();
+    EtScanDialogPrivate *priv;
+    EtScanMode mode;
 
-    if (gtk_combo_box_get_active(GTK_COMBO_BOX(ScannerOptionCombo)) == SCANNER_FILL_TAG)
-    {
-        Save_Scan_Tag_Masks_List(ScanTagListModel, MASK_EDITOR_TEXT);
-    } else if (gtk_combo_box_get_active(GTK_COMBO_BOX(ScannerOptionCombo)) == SCANNER_RENAME_FILE)
+    g_return_if_fail (ET_SCAN_DIALOG (self));
+    g_return_if_fail (ETFile != NULL);
+
+    priv = et_scan_dialog_get_instance_private (self);
+    mode = gtk_notebook_get_current_page (GTK_NOTEBOOK (priv->notebook));
+
+    switch (mode)
     {
-        Save_Rename_File_Masks_List(RenameFileListModel, MASK_EDITOR_TEXT);
+        case ET_SCAN_MODE_FILL_TAG:
+            Scan_Tag_With_Mask (self, ETFile);
+            break;
+        case ET_SCAN_MODE_RENAME_FILE:
+            Scan_Rename_File_With_Mask (self, ETFile);
+            break;
+        case ET_SCAN_MODE_PROCESS_FIELDS:
+            Scan_Process_Fields (self, ETFile);
+            break;
+        default:
+            g_assert_not_reached ();
     }
 }
 
 /*
- * Clean up the currently displayed masks lists, ready for saving
+ * For the configuration file...
  */
-static void
-Mask_Editor_Clean_Up_Masks_List (void)
+void
+et_scan_dialog_apply_changes (EtScanDialog *self)
 {
-    gchar *text = NULL;
-    gchar *text1 = NULL;
-    GtkTreeIter currentIter;
-    GtkTreeIter itercopy;
-    GtkTreeModel *treemodel;
-
-    treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(MaskEditorList));
-
-    /* Remove blank and duplicate items */
-    if (gtk_tree_model_get_iter_first(treemodel, &currentIter))
-    {
-
-        while(TRUE)
-        {
-            gtk_tree_model_get(treemodel, &currentIter, MASK_EDITOR_TEXT, &text, -1);
-
-            /* Check for blank entry */
-            if (text && g_utf8_strlen(text, -1) == 0)
-            {
-                g_free(text);
-
-                if (!gtk_list_store_remove(GTK_LIST_STORE(treemodel), &currentIter))
-                    break; /* No following entries */
-                else
-                    continue; /* Go on to next entry, which the remove function already moved onto for us */
-            }
+    EtScanDialogPrivate *priv;
 
-            /* Check for duplicate entries */
-            itercopy = currentIter;
-            if (!gtk_tree_model_iter_next(treemodel, &itercopy))
-            {
-                g_free(text);
-                break;
-            }
+    g_return_if_fail (ET_SCAN_DIALOG (self));
 
-            while(TRUE)
-            {
-                gtk_tree_model_get(treemodel, &itercopy, MASK_EDITOR_TEXT, &text1, -1);
-                if (text1 && g_utf8_collate(text,text1) == 0)
-                {
-                    g_free(text1);
+    priv = et_scan_dialog_get_instance_private (self);
 
-                    if (!gtk_list_store_remove(GTK_LIST_STORE(treemodel), &itercopy))
-                        break; /* No following entries */
-                    else
-                        continue; /* Go on to next entry, which the remove function already set iter to for us */
+    /* Save default masks. */
+    Add_String_To_Combo_List (priv->scan_tag_masks_model,
+                              gtk_entry_get_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->scan_tag_mask_combo)))));
+    Save_Rename_File_Masks_List(priv->scan_tag_masks_model, MASK_EDITOR_TEXT);
 
-                }
-                g_free(text1);
-                if (!gtk_tree_model_iter_next(treemodel, &itercopy))
-                    break;
-            }
+    Add_String_To_Combo_List(priv->rename_masks_model,
+                             gtk_entry_get_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->rename_file_mask_combo)))));
+    Save_Rename_File_Masks_List(priv->rename_masks_model, MASK_EDITOR_TEXT);
+}
 
-            g_free(text);
 
-            if (!gtk_tree_model_iter_next(treemodel, &currentIter))
-                break;
-        }
-    }
+/* Callback from Option button */
+static void
+Scan_Option_Button (void)
+{
+    et_application_window_show_preferences_dialog_scanner (ET_APPLICATION_WINDOW (MainWindow));
 }
 
+
 /*
- * Update the Mask List with the new value of the entry box
+ * entry_check_rename_file_mask:
+ * @entry: the entry for which to check the mask
+ * @user_data: user data set when the signal was connected
+ *
+ * Display an icon in the entry if the current text contains an invalid mask
+ * for scanning tags.
  */
 static void
-Mask_Editor_Entry_Changed (void)
+entry_check_scan_tag_mask (GtkEntry *entry, gpointer user_data)
 {
-    GtkTreeSelection *selection;
-    GtkTreePath *firstSelected;
-    GtkTreeModel *treemodel;
-    GList *selectedRows;
-    GtkTreeIter row;
-    const gchar* text;
+    gchar *tmp  = NULL;
+    gchar *mask = NULL;
+    gint loop = 0;
 
-    g_return_if_fail (MaskEditorList != NULL);
+    g_return_if_fail (entry != NULL);
 
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(MaskEditorList));
-    treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(MaskEditorList));
-    selectedRows = gtk_tree_selection_get_selected_rows(selection, NULL);
+    mask = g_strdup (gtk_entry_get_text (entry));
+    if (!mask || strlen(mask)<1)
+        goto Bad_Mask;
 
-    if (!selectedRows)
+    while (mask)
     {
-        return;
-    }
+        if ( (tmp=strrchr(mask,'%'))==NULL )
+        {
+            if (loop==0)
+                /* There is no code the first time => not accepted */
+                goto Bad_Mask;
+            else
+                /* There is no more code => accepted */
+                goto Good_Mask;
+        }
+        if ( strlen(tmp)>1
+        && (tmp[1]=='a' || tmp[1]=='b' || tmp[1]=='c' || tmp[1]=='d' || tmp[1]=='p' ||
+            tmp[1]=='r' || tmp[1]=='e' || tmp[1]=='g' || tmp[1]=='i' || tmp[1]=='l' ||
+            tmp[1]=='o' || tmp[1]=='n' || tmp[1]=='t' || tmp[1]=='u' || tmp[1]=='y' ) )
+        {
+            /* Code is correct */
+            *(mask+strlen(mask)-strlen(tmp)) = '\0';
+        }else
+        {
+            goto Bad_Mask;
+        }
 
-    firstSelected = (GtkTreePath *)g_list_first(selectedRows)->data;
-    text = gtk_entry_get_text(GTK_ENTRY(MaskEditorEntry));
+        /* Check the following code and separator */
+        if ( (tmp=strrchr(mask,'%'))==NULL )
+            /* There is no more code => accepted */
+            goto Good_Mask;
 
-    if (gtk_tree_model_get_iter (treemodel, &row, firstSelected))
-    {
-        gtk_list_store_set(GTK_LIST_STORE(treemodel), &row, MASK_EDITOR_TEXT, text, -1);
+        if ( strlen(tmp)>2
+        && (tmp[1]=='a' || tmp[1]=='b' || tmp[1]=='c' || tmp[1]=='d' || tmp[1]=='p' ||
+            tmp[1]=='r' || tmp[1]=='e' || tmp[1]=='g' || tmp[1]=='i' || tmp[1]=='l' ||
+            tmp[1]=='o' || tmp[1]=='n' || tmp[1]=='t' || tmp[1]=='u' || tmp[1]=='y' ) )
+        {
+            /* There is a separator and code is correct */
+            *(mask+strlen(mask)-strlen(tmp)) = '\0';
+        }else
+        {
+            goto Bad_Mask;
+        }
+        loop++;
     }
 
-    g_list_free_full (selectedRows, (GDestroyNotify)gtk_tree_path_free);
+    Bad_Mask:
+        g_free(mask);
+        gtk_entry_set_icon_from_icon_name (entry, GTK_ENTRY_ICON_SECONDARY,
+                                           "emblem-unreadable");
+        gtk_entry_set_icon_tooltip_text (entry, GTK_ENTRY_ICON_SECONDARY,
+                                         _("Invalid scanner mask"));
+        return;
+
+    Good_Mask:
+        g_free(mask);
+        gtk_entry_set_icon_from_icon_name (entry, GTK_ENTRY_ICON_SECONDARY,
+                                           NULL);
 }
 
 /*
- * Actions when the a key is pressed into the masks editor clist
+ * entry_check_rename_file_mask:
+ * @entry: the entry for which to check the mask
+ * @user_data: user data set when the signal was connected
+ *
+ * Display an icon in the entry if the current text contains an invalid mask
+ * for renaming files.
  */
-static gboolean
-Mask_Editor_List_Key_Press (GtkWidget *widget, GdkEvent *event)
+void
+entry_check_rename_file_mask (GtkEntry *entry, gpointer user_data)
 {
-    if (event && event->type == GDK_KEY_PRESS) {
-        GdkEventKey *kevent = (GdkEventKey *)event;
+    gchar *tmp = NULL;
+    gchar *mask = NULL;
+
+    g_return_if_fail (entry != NULL);
+
+    mask = g_strdup (gtk_entry_get_text (entry));
+    if (!mask || strlen(mask)<1)
+        goto Bad_Mask;
+
+    // Not a valid path....
+    if ( strstr(mask,"//") != NULL
+    ||   strstr(mask,"./") != NULL
+    ||   strstr(mask,"data/") != NULL)
+        goto Bad_Mask;
 
-        switch(kevent->keyval)
+    while (mask)
+    {
+        if ( (tmp=strrchr(mask,'%'))==NULL )
         {
-            case GDK_KEY_Delete:
-                Mask_Editor_List_Remove();
-                break;
-/*          case GDK_KEY_Up:
-                Mask_Editor_Clist_Move_Up();
-                break;
-            case GDK_KEY_Down:
-                Mask_Editor_Clist_Move_Down();
-                break;
-*/      }
+            /* There is no more code. */
+            /* No code in mask is accepted. */
+            goto Good_Mask;
+        }
+        if ( strlen(tmp)>1
+        && (tmp[1]=='a' || tmp[1]=='b' || tmp[1]=='c' || tmp[1]=='d' || tmp[1]=='p' ||
+            tmp[1]=='r' || tmp[1]=='e' || tmp[1]=='g' || tmp[1]=='i' || tmp[1]=='l' ||
+            tmp[1]=='o' || tmp[1]=='n' || tmp[1]=='t' || tmp[1]=='u' || tmp[1]=='y' ) )
+        {
+            /* The code is valid. */
+            /* No separator is accepted. */
+            *(mask+strlen(mask)-strlen(tmp)) = '\0';
+        }else
+        {
+            goto Bad_Mask;
+        }
     }
-    return TRUE;
+
+    Bad_Mask:
+        g_free(mask);
+        gtk_entry_set_icon_from_icon_name (entry, GTK_ENTRY_ICON_SECONDARY,
+                                           "emblem-unreadable");
+        gtk_entry_set_icon_tooltip_text (entry, GTK_ENTRY_ICON_SECONDARY,
+                                         _("Invalid scanner mask"));
+        return;
+
+    Good_Mask:
+        g_free(mask);
+        gtk_entry_set_icon_from_icon_name (entry, GTK_ENTRY_ICON_SECONDARY,
+                                           NULL);
 }
 
-/*
- * Function when you select an item of the option menu
- */
-static void
-Scanner_Option_Menu_Activate_Item (GtkWidget *combo, gpointer data)
+void
+et_scan_dialog_scan_selected_files (EtScanDialog *self)
 {
-    GtkRadioAction *radio_action;
-
-    radio_action = GTK_RADIO_ACTION (gtk_ui_manager_get_action (UIManager,
-                                                                "/MenuBar/ViewMenu/ScannerMenu/FillTag"));
-    SCANNER_TYPE = gtk_combo_box_get_active (GTK_COMBO_BOX (combo));
-    gtk_radio_action_set_current_value (radio_action, SCANNER_TYPE);
-
-    switch (SCANNER_TYPE)
-    {
-        case SCANNER_FILL_TAG:
-            gtk_widget_show(MaskEditorButton);
-            gtk_widget_show(LegendButton);
-            gtk_widget_show(ScanTagFrame);
-            gtk_widget_hide(RenameFileFrame);
-            gtk_widget_hide(ProcessFieldsFrame);
-            gtk_tree_view_set_model(GTK_TREE_VIEW(MaskEditorList), GTK_TREE_MODEL(ScanTagListModel));
-            Scan_Fill_Tag_Generate_Preview();
-            g_signal_emit_by_name(G_OBJECT(LegendButton),"toggled");        /* To hide or show legend frame */
-            g_signal_emit_by_name(G_OBJECT(MaskEditorButton),"toggled");    /* To hide or show mask editor frame */
-            break;
+    gint progress_bar_index;
+    gint selectcount;
+    gchar progress_bar_text[30];
+    double fraction;
+    GList *selfilelist = NULL;
+    GList *l;
+    ET_File *etfile;
+    EtApplicationWindow *window;
+    GtkTreeSelection *selection;
 
-        case SCANNER_RENAME_FILE:
-            gtk_widget_show(MaskEditorButton);
-            gtk_widget_show(LegendButton);
-            gtk_widget_hide(ScanTagFrame);
-            gtk_widget_show(RenameFileFrame);
-            gtk_widget_hide(ProcessFieldsFrame);
-            gtk_tree_view_set_model(GTK_TREE_VIEW(MaskEditorList), GTK_TREE_MODEL(RenameFileListModel));
-            Scan_Rename_File_Generate_Preview();
-            g_signal_emit_by_name(G_OBJECT(LegendButton),"toggled");        /* To hide or show legend frame */
-            g_signal_emit_by_name(G_OBJECT(MaskEditorButton),"toggled");    /* To hide or show mask editor frame */
-            break;
+    g_return_if_fail (ETCore->ETFileDisplayedList != NULL);
 
-        case SCANNER_PROCESS_FIELDS:
-            gtk_widget_hide(MaskEditorButton);
-            gtk_widget_hide(LegendButton);
-            gtk_widget_hide(ScanTagFrame);
-            gtk_widget_hide(RenameFileFrame);
-            gtk_widget_show_all(ProcessFieldsFrame);
-            // Hide directly the frames to don't change state of the buttons!
-            gtk_widget_hide(LegendFrame);
-            gtk_widget_hide(MaskEditorFrame);
+    /* Save the current displayed data */
+    ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
 
-            gtk_tree_view_set_model(GTK_TREE_VIEW(MaskEditorList), NULL);
-            break;
-    }
-}
+    /* Initialize status bar */
+    window = ET_APPLICATION_WINDOW (MainWindow);
+    selection = et_application_window_browser_get_selection (window);
+    selectcount = gtk_tree_selection_count_selected_rows (selection);
+    et_application_window_progress_set_fraction (window, 0.0);
+    progress_bar_index = 0;
+    g_snprintf(progress_bar_text, 30, "%d/%d", progress_bar_index, selectcount);
+    et_application_window_progress_set_text (window, progress_bar_text);
 
-/*
- * Init the position of the scanner window
- */
-static void
-Scan_Set_Scanner_Window_Init_Position (void)
-{
-    if (ScannerWindow && SET_SCANNER_WINDOW_POSITION)
+    /* Set to unsensitive all command buttons (except Quit button) */
+    et_application_window_disable_command_actions (window);
+
+    progress_bar_index = 0;
+
+    selfilelist = gtk_tree_selection_get_selected_rows(selection, NULL);
+
+    for (l = selfilelist; l != NULL; l = g_list_next (l))
     {
-        gtk_widget_realize(ScannerWindow);
-        gtk_window_move(GTK_WINDOW(ScannerWindow),SCANNER_WINDOW_X,SCANNER_WINDOW_Y);
+        etfile = et_application_window_browser_get_et_file_from_path (window,
+                                                                      l->data);
+
+        /* Run the current scanner. */
+        Scan_Select_Mode_And_Run_Scanner (self, etfile);
+
+        fraction = (++progress_bar_index) / (double) selectcount;
+        et_application_window_progress_set_fraction (window, fraction);
+        g_snprintf(progress_bar_text, 30, "%d/%d", progress_bar_index, selectcount);
+        et_application_window_progress_set_text (window, progress_bar_text);
+
+        /* Needed to refresh status bar */
+        while (gtk_events_pending())
+            gtk_main_iteration();
     }
+
+    g_list_free_full (selfilelist, (GDestroyNotify)gtk_tree_path_free);
+
+    /* Refresh the whole list (faster than file by file) to show changes. */
+    et_application_window_browser_refresh_list (window);
+
+    /* Display the current file */
+    ET_Display_File_Data_To_UI(ETCore->ETFileDisplayed);
+
+    /* To update state of command buttons */
+    et_application_window_update_actions (window);
+
+    et_application_window_progress_set_text (window, "");
+    et_application_window_progress_set_fraction (window, 0.0);
+    et_application_window_status_bar_message (window,
+                                              _("All tags have been scanned"),
+                                              TRUE);
 }
 
 /*
@@ -3535,14 +2920,45 @@ et_scan_on_response (GtkDialog *dialog, gint response_id, gpointer user_data)
     switch (response_id)
     {
         case GTK_RESPONSE_APPLY:
-            Action_Scan_Selected_Files ();
+            et_scan_dialog_scan_selected_files (ET_SCAN_DIALOG (dialog));
             break;
-        case GTK_RESPONSE_DELETE_EVENT:
         case GTK_RESPONSE_CLOSE:
-            ScannerWindow_Quit ();
+            gtk_widget_hide (GTK_WIDGET (dialog));
+            break;
+        case GTK_RESPONSE_DELETE_EVENT:
             break;
         default:
             g_assert_not_reached ();
             break;
     }
 }
+
+static void
+et_scan_dialog_init (EtScanDialog *self)
+{
+    self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, ET_TYPE_SCAN_DIALOG,
+                                              EtScanDialogPrivate);
+
+    create_scan_dialog (self);
+}
+
+static void
+et_scan_dialog_class_init (EtScanDialogClass *klass)
+{
+    g_type_class_add_private (klass, sizeof (EtScanDialogPrivate));
+}
+
+/*
+ * et_scan_dialog_new:
+ *
+ * Create a new EtScanDialog instance.
+ *
+ * Returns: a new #EtScanDialog
+ */
+EtScanDialog *
+et_scan_dialog_new (GtkWindow *parent)
+{
+    g_return_val_if_fail (GTK_WINDOW (parent), NULL);
+
+    return g_object_new (ET_TYPE_SCAN_DIALOG, "transient-for", parent, NULL);
+}
diff --git a/src/scan_dialog.h b/src/scan_dialog.h
index 83ec928..4784ced 100644
--- a/src/scan_dialog.h
+++ b/src/scan_dialog.h
@@ -1,4 +1,3 @@
-/* scan.h - 2000/06/16 */
 /*
  *  EasyTAG - Tag editor for MP3 and Ogg Vorbis files
  *  Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
@@ -19,51 +18,48 @@
  */
 
 
-#ifndef __SCAN_H__
-#define __SCAN_H__
-
+#ifndef ET_SCAN_DIALOG_H_
+#define ET_SCAN_DIALOG_H_
 
 #include "et_core.h"
 
-/****************
- * Declarations *
- ****************/
-GtkWidget *ScannerWindow;
+#include <gtk/gtk.h>
 
+G_BEGIN_DECLS
 
-enum
-{
-    SCANNER_FILL_TAG = 0,
-    SCANNER_RENAME_FILE,
-    SCANNER_PROCESS_FIELDS
-}; // Add a new item : Min and Max values used in Open_ScannerWindow
-
-enum {
-    MASK_EDITOR_TEXT,
-    MASK_EDITOR_COUNT
-};
+#define ET_TYPE_SCAN_DIALOG (et_scan_dialog_get_type ())
+#define ET_SCAN_DIALOG(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), ET_TYPE_SCAN_DIALOG, EtScanDialog))
 
+typedef struct _EtScanDialog EtScanDialog;
+typedef struct _EtScanDialogClass EtScanDialogClass;
+typedef struct _EtScanDialogPrivate EtScanDialogPrivate;
 
+struct _EtScanDialog
+{
+    /*< private >*/
+    GtkDialog parent_instance;
+    EtScanDialogPrivate *priv;
+};
 
-/**************
- * Prototypes *
- **************/
+struct _EtScanDialogClass
+{
+    /*< private >*/
+    GtkDialogClass parent_class;
+};
 
-void   Scan_Select_Mode_And_Run_Scanner     (ET_File *ETFile);
-gchar *Scan_Generate_New_Filename_From_Mask       (ET_File *ETFile, gchar *mask, gboolean no_dir_check_or_conversion);
-gchar *Scan_Generate_New_Directory_Name_From_Mask (ET_File *ETFile, gchar *mask, gboolean no_dir_check_or_conversion);
-void   Scan_Rename_File_Generate_Preview      (void);
-void   Scan_Fill_Tag_Generate_Preview         (void);
-void   Scan_Rename_Directory_Generate_Preview (void);
+GType et_scan_dialog_get_type (void);
+EtScanDialog *et_scan_dialog_new (GtkWindow *parent);
+void et_scan_dialog_apply_changes (EtScanDialog *self);
+void et_scan_dialog_open (EtScanDialog *self, EtScanMode scanner_type);
+void et_scan_dialog_scan_selected_files (EtScanDialog *self);
+void et_scan_dialog_update_previews (EtScanDialog *self);
 
-void et_scan_show (GtkAction *action, gpointer user_data);
+void Scan_Select_Mode_And_Run_Scanner (EtScanDialog *self, ET_File *ETFile);
+gchar * et_scan_generate_new_filename_from_mask (const ET_File *ETFile, const gchar *mask, gboolean no_dir_check_or_conversion);
+gchar * et_scan_generate_new_directory_name_from_mask (const ET_File *ETFile, const gchar *mask, gboolean no_dir_check_or_conversion);
 
 void entry_check_rename_file_mask (GtkEntry *entry, gpointer user_data);
 
-void Scan_Process_Fields_First_Letters_Uppercase (gchar **str);
-
-void Init_ScannerWindow (void);
-void Open_ScannerWindow (gint scanner_type);
-void ScannerWindow_Apply_Changes (void);
+G_END_DECLS
 
-#endif /* __SCAN_H__ */
+#endif /* ET_SCAN_DIALOG_H_ */
diff --git a/src/search_dialog.c b/src/search_dialog.c
new file mode 100644
index 0000000..cede6e1
--- /dev/null
+++ b/src/search_dialog.c
@@ -0,0 +1,731 @@
+/* EasyTAG - tag editor for audio files
+ * Copyright (C) 2013-2014  David King <amigadave at amigadave.com>
+ *
+ * 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 (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+#include "config.h"
+
+#include "search_dialog.h"
+
+#include <glib/gi18n.h>
+
+#include "application_window.h"
+#include "browser.h"
+#include "charset.h"
+#include "easytag.h"
+#include "log.h"
+#include "misc.h"
+#include "picture.h"
+#include "scan_dialog.h"
+#include "setting.h"
+
+/* TODO: Use G_DEFINE_TYPE_WITH_PRIVATE. */
+G_DEFINE_TYPE (EtSearchDialog, et_search_dialog, GTK_TYPE_DIALOG)
+
+#define et_search_dialog_get_instance_private(dialog) (dialog->priv)
+
+static const guint BOX_SPACING = 6;
+
+enum
+{
+    // Columns for titles
+    SEARCH_RESULT_FILENAME = 0,
+    SEARCH_RESULT_TITLE,
+    SEARCH_RESULT_ARTIST,
+    SEARCH_RESULT_ALBUM_ARTIST,
+    SEARCH_RESULT_ALBUM,
+    SEARCH_RESULT_DISC_NUMBER,
+    SEARCH_RESULT_YEAR,
+    SEARCH_RESULT_TRACK,
+    SEARCH_RESULT_GENRE,
+    SEARCH_RESULT_COMMENT,
+    SEARCH_RESULT_COMPOSER,
+    SEARCH_RESULT_ORIG_ARTIST,
+    SEARCH_RESULT_COPYRIGHT,
+    SEARCH_RESULT_URL,
+    SEARCH_RESULT_ENCODED_BY,
+
+    // Columns for pango style (normal/bold)
+    SEARCH_RESULT_FILENAME_WEIGHT,
+    SEARCH_RESULT_TITLE_WEIGHT,
+    SEARCH_RESULT_ARTIST_WEIGHT,
+    SEARCH_RESULT_ALBUM_ARTIST_WEIGHT,
+    SEARCH_RESULT_ALBUM_WEIGHT,
+    SEARCH_RESULT_DISC_NUMBER_WEIGHT,
+    SEARCH_RESULT_YEAR_WEIGHT,
+    SEARCH_RESULT_TRACK_WEIGHT,
+    SEARCH_RESULT_GENRE_WEIGHT,
+    SEARCH_RESULT_COMMENT_WEIGHT,
+    SEARCH_RESULT_COMPOSER_WEIGHT,
+    SEARCH_RESULT_ORIG_ARTIST_WEIGHT,
+    SEARCH_RESULT_COPYRIGHT_WEIGHT,
+    SEARCH_RESULT_URL_WEIGHT,
+    SEARCH_RESULT_ENCODED_BY_WEIGHT,
+
+    // Columns for color (normal/red)
+    SEARCH_RESULT_FILENAME_FOREGROUND,
+    SEARCH_RESULT_TITLE_FOREGROUND,
+    SEARCH_RESULT_ARTIST_FOREGROUND,
+    SEARCH_RESULT_ALBUM_ARTIST_FOREGROUND,
+    SEARCH_RESULT_ALBUM_FOREGROUND,
+    SEARCH_RESULT_DISC_NUMBER_FOREGROUND,
+    SEARCH_RESULT_YEAR_FOREGROUND,
+    SEARCH_RESULT_TRACK_FOREGROUND,
+    SEARCH_RESULT_GENRE_FOREGROUND,
+    SEARCH_RESULT_COMMENT_FOREGROUND,
+    SEARCH_RESULT_COMPOSER_FOREGROUND,
+    SEARCH_RESULT_ORIG_ARTIST_FOREGROUND,
+    SEARCH_RESULT_COPYRIGHT_FOREGROUND,
+    SEARCH_RESULT_URL_FOREGROUND,
+    SEARCH_RESULT_ENCODED_BY_FOREGROUND,
+
+    SEARCH_RESULT_POINTER,
+    SEARCH_COLUMN_COUNT
+};
+
+struct _EtSearchDialogPrivate
+{
+    GtkWidget *search_string_combo;
+    GtkListStore *search_string_model;
+    GtkWidget *search_in_filename;
+    GtkWidget *search_in_tag;
+    GtkWidget *search_case_sensitive;
+    GtkWidget *search_results_view;
+    GtkListStore *search_results_model;
+    GtkWidget *status_bar;
+    guint status_bar_context;
+};
+
+/*
+ * Callback to select-row event
+ * Select all results that are selected in the search result list also in the browser list
+ */
+static void
+Search_Result_List_Row_Selected (GtkTreeSelection *selection,
+                                 gpointer user_data)
+{
+    EtSearchDialogPrivate *priv;
+    GList       *selectedRows;
+    GList *l;
+    ET_File     *ETFile;
+    GtkTreeIter  currentFile;
+
+    priv = et_search_dialog_get_instance_private (ET_SEARCH_DIALOG (user_data));
+
+    selectedRows = gtk_tree_selection_get_selected_rows(selection, NULL);
+
+    /* We might be called with no rows selected */
+    if (!selectedRows)
+    {
+        return;
+    }
+
+    /* Unselect files in the main list before re-selecting them... */
+    et_application_window_browser_unselect_all (ET_APPLICATION_WINDOW (MainWindow));
+
+    for (l = selectedRows; l != NULL; l = g_list_next (l))
+    {
+        if (gtk_tree_model_get_iter (GTK_TREE_MODEL (priv->search_results_model),
+                                     &currentFile, (GtkTreePath *)l->data))
+        {
+            gtk_tree_model_get(GTK_TREE_MODEL(priv->search_results_model), &currentFile, 
+                               SEARCH_RESULT_POINTER, &ETFile, -1);
+            /* Select the files (but don't display them to increase speed). */
+            et_application_window_browser_select_file_by_et_file (ET_APPLICATION_WINDOW (MainWindow),
+                                                                  ETFile,
+                                                                  TRUE);
+            /* Display only the last file (to increase speed). */
+            if (!selectedRows->next)
+                Action_Select_Nth_File_By_Etfile(ETFile);
+        }
+    }
+
+    g_list_free_full (selectedRows, (GDestroyNotify)gtk_tree_path_free);
+}
+
+static void
+Add_Row_To_Search_Result_List (EtSearchDialog *self,
+                               ET_File *ETFile, const gchar *string_to_search)
+{
+    EtSearchDialogPrivate *priv;
+    gchar *SearchResultList_Text[15]; // Because : 15 columns to display
+    gint SearchResultList_Weight[15] = {PANGO_WEIGHT_NORMAL, PANGO_WEIGHT_NORMAL,
+                                        PANGO_WEIGHT_NORMAL, PANGO_WEIGHT_NORMAL,
+                                        PANGO_WEIGHT_NORMAL, PANGO_WEIGHT_NORMAL,
+                                        PANGO_WEIGHT_NORMAL, PANGO_WEIGHT_NORMAL,
+                                        PANGO_WEIGHT_NORMAL, PANGO_WEIGHT_NORMAL,
+                                        PANGO_WEIGHT_NORMAL, PANGO_WEIGHT_NORMAL,
+                                        PANGO_WEIGHT_NORMAL, PANGO_WEIGHT_NORMAL,
+                                        PANGO_WEIGHT_NORMAL};
+    GdkRGBA *SearchResultList_Color[15] = {NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+                                            NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+                                            NULL};
+    gchar *track, *track_total;
+    gchar *disc_number, *disc_total;
+    gboolean case_sensitive;
+    gint column;
+
+    priv = et_search_dialog_get_instance_private (self);
+
+    if (!ETFile || !string_to_search)
+        return;
+
+    case_sensitive = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->search_case_sensitive));
+
+    // Filename
+    SearchResultList_Text[SEARCH_RESULT_FILENAME]    = g_path_get_basename( ((File_Name *)ETFile->FileNameNew->data)->value_utf8 );
+    // Title
+    SearchResultList_Text[SEARCH_RESULT_TITLE]       = g_strdup(((File_Tag *)ETFile->FileTag->data)->title);
+    // Artist
+    SearchResultList_Text[SEARCH_RESULT_ARTIST]      = g_strdup(((File_Tag *)ETFile->FileTag->data)->artist);
+    // Album Artist
+    SearchResultList_Text[SEARCH_RESULT_ALBUM_ARTIST]= g_strdup(((File_Tag *)ETFile->FileTag->data)->album_artist);
+    // Album
+    SearchResultList_Text[SEARCH_RESULT_ALBUM]       = g_strdup(((File_Tag *)ETFile->FileTag->data)->album);
+    // Year
+    SearchResultList_Text[SEARCH_RESULT_YEAR]        = g_strdup(((File_Tag *)ETFile->FileTag->data)->year);
+    //Genre
+    SearchResultList_Text[SEARCH_RESULT_GENRE]       = g_strdup(((File_Tag *)ETFile->FileTag->data)->genre);
+    // Comment
+    SearchResultList_Text[SEARCH_RESULT_COMMENT]     = g_strdup(((File_Tag *)ETFile->FileTag->data)->comment);
+    // Composer
+    SearchResultList_Text[SEARCH_RESULT_COMPOSER]    = g_strdup(((File_Tag *)ETFile->FileTag->data)->composer);
+    // Orig. Artist
+    SearchResultList_Text[SEARCH_RESULT_ORIG_ARTIST] = g_strdup(((File_Tag *)ETFile->FileTag->data)->orig_artist);
+    // Copyright
+    SearchResultList_Text[SEARCH_RESULT_COPYRIGHT]   = g_strdup(((File_Tag *)ETFile->FileTag->data)->copyright);
+    // URL
+    SearchResultList_Text[SEARCH_RESULT_URL]         = g_strdup(((File_Tag *)ETFile->FileTag->data)->url);
+    // Encoded by
+    SearchResultList_Text[SEARCH_RESULT_ENCODED_BY]  = g_strdup(((File_Tag *)ETFile->FileTag->data)->encoded_by);
+
+    /* Disc Number. */
+    disc_number = ((File_Tag *)ETFile->FileTag->data)->disc_number;
+    disc_total = ((File_Tag *)ETFile->FileTag->data)->disc_total;
+
+    if (disc_number)
+    {
+        if (disc_total)
+        {
+            SearchResultList_Text[SEARCH_RESULT_DISC_NUMBER] = g_strconcat (disc_number, "/", disc_total, NULL);
+        }
+        else
+        {
+            SearchResultList_Text[SEARCH_RESULT_DISC_NUMBER] = g_strdup (disc_number);
+        }
+    }
+    else
+    {
+        SearchResultList_Text[SEARCH_RESULT_DISC_NUMBER] = NULL;
+    }
+
+    // Track
+    track       = ((File_Tag *)ETFile->FileTag->data)->track;
+    track_total = ((File_Tag *)ETFile->FileTag->data)->track_total;
+    if (track)
+    {
+        if (track_total)
+            SearchResultList_Text[SEARCH_RESULT_TRACK] = g_strconcat(track,"/",track_total,NULL);
+        else
+            SearchResultList_Text[SEARCH_RESULT_TRACK] = g_strdup(track);
+    } else
+    {
+        SearchResultList_Text[SEARCH_RESULT_TRACK] = NULL;
+    }
+
+
+    // Highlight the keywords in the result list
+    // Don't display files to red if the searched string is '' (to display all files)
+    for (column=0;column<14;column++)
+    {
+        if (case_sensitive)
+        {
+            if ( SearchResultList_Text[column] && strlen(string_to_search) && strstr(SearchResultList_Text[column],string_to_search) )
+            {
+                if (g_settings_get_boolean (MainSettings, "file-changed-bold"))
+                {
+                    SearchResultList_Weight[column] = PANGO_WEIGHT_BOLD;
+                }
+                else
+                {
+                    SearchResultList_Color[column] = &RED;
+                }
+            }
+
+        } else
+        {
+            // Search wasn't case sensitive
+            gchar *list_text = NULL;
+            gchar *string_to_search2 = g_utf8_casefold(string_to_search, -1);
+
+            if (!SearchResultList_Text[column])
+            {
+                g_free(string_to_search2);
+                continue;
+            }
+
+            list_text = g_utf8_casefold(SearchResultList_Text[column], -1);
+
+            if ( list_text && strlen(string_to_search2) && strstr(list_text,string_to_search2) )
+            {
+                if (g_settings_get_boolean (MainSettings, "file-changed-bold"))
+                {
+                    SearchResultList_Weight[column] = PANGO_WEIGHT_BOLD;
+                }
+                else
+                {
+                    SearchResultList_Color[column] = &RED;
+                }
+            }
+
+            g_free(list_text);
+            g_free(string_to_search2);
+        }
+    }
+
+    // Load the row in the list
+    gtk_list_store_insert_with_values (priv->search_results_model, NULL, G_MAXINT,
+                       SEARCH_RESULT_FILENAME,    SearchResultList_Text[SEARCH_RESULT_FILENAME],
+                       SEARCH_RESULT_TITLE,       SearchResultList_Text[SEARCH_RESULT_TITLE],
+                       SEARCH_RESULT_ARTIST,      SearchResultList_Text[SEARCH_RESULT_ARTIST],
+                       SEARCH_RESULT_ALBUM_ARTIST,SearchResultList_Text[SEARCH_RESULT_ALBUM_ARTIST],
+                       SEARCH_RESULT_ALBUM,       SearchResultList_Text[SEARCH_RESULT_ALBUM],
+                       SEARCH_RESULT_DISC_NUMBER, SearchResultList_Text[SEARCH_RESULT_DISC_NUMBER],
+                       SEARCH_RESULT_YEAR,        SearchResultList_Text[SEARCH_RESULT_YEAR],
+                       SEARCH_RESULT_TRACK,       SearchResultList_Text[SEARCH_RESULT_TRACK],
+                       SEARCH_RESULT_GENRE,       SearchResultList_Text[SEARCH_RESULT_GENRE],
+                       SEARCH_RESULT_COMMENT,     SearchResultList_Text[SEARCH_RESULT_COMMENT],
+                       SEARCH_RESULT_COMPOSER,    SearchResultList_Text[SEARCH_RESULT_COMPOSER],
+                       SEARCH_RESULT_ORIG_ARTIST, SearchResultList_Text[SEARCH_RESULT_ORIG_ARTIST],
+                       SEARCH_RESULT_COPYRIGHT,   SearchResultList_Text[SEARCH_RESULT_COPYRIGHT],
+                       SEARCH_RESULT_URL,         SearchResultList_Text[SEARCH_RESULT_URL],
+                       SEARCH_RESULT_ENCODED_BY,  SearchResultList_Text[SEARCH_RESULT_ENCODED_BY],
+
+                       SEARCH_RESULT_FILENAME_WEIGHT,    SearchResultList_Weight[SEARCH_RESULT_FILENAME],
+                       SEARCH_RESULT_TITLE_WEIGHT,       SearchResultList_Weight[SEARCH_RESULT_TITLE],
+                       SEARCH_RESULT_ARTIST_WEIGHT,      SearchResultList_Weight[SEARCH_RESULT_ARTIST],
+                       SEARCH_RESULT_ALBUM_ARTIST_WEIGHT, SearchResultList_Weight[SEARCH_RESULT_ALBUM_ARTIST],
+		       SEARCH_RESULT_ALBUM_WEIGHT,       SearchResultList_Weight[SEARCH_RESULT_ALBUM],
+                       SEARCH_RESULT_DISC_NUMBER_WEIGHT, SearchResultList_Weight[SEARCH_RESULT_DISC_NUMBER],
+                       SEARCH_RESULT_YEAR_WEIGHT,        SearchResultList_Weight[SEARCH_RESULT_YEAR],
+                       SEARCH_RESULT_TRACK_WEIGHT,       SearchResultList_Weight[SEARCH_RESULT_TRACK],
+                       SEARCH_RESULT_GENRE_WEIGHT,       SearchResultList_Weight[SEARCH_RESULT_GENRE],
+                       SEARCH_RESULT_COMMENT_WEIGHT,     SearchResultList_Weight[SEARCH_RESULT_COMMENT],
+                       SEARCH_RESULT_COMPOSER_WEIGHT,    SearchResultList_Weight[SEARCH_RESULT_COMPOSER],
+                       SEARCH_RESULT_ORIG_ARTIST_WEIGHT, SearchResultList_Weight[SEARCH_RESULT_ORIG_ARTIST],
+                       SEARCH_RESULT_COPYRIGHT_WEIGHT,   SearchResultList_Weight[SEARCH_RESULT_COPYRIGHT],
+                       SEARCH_RESULT_URL_WEIGHT,         SearchResultList_Weight[SEARCH_RESULT_URL],
+                       SEARCH_RESULT_ENCODED_BY_WEIGHT,  SearchResultList_Weight[SEARCH_RESULT_ENCODED_BY],
+
+                       SEARCH_RESULT_FILENAME_FOREGROUND,    SearchResultList_Color[SEARCH_RESULT_FILENAME],
+                       SEARCH_RESULT_TITLE_FOREGROUND,       SearchResultList_Color[SEARCH_RESULT_TITLE],
+                       SEARCH_RESULT_ARTIST_FOREGROUND,      SearchResultList_Color[SEARCH_RESULT_ARTIST],
+                       SEARCH_RESULT_ALBUM_ARTIST_FOREGROUND,       SearchResultList_Color[SEARCH_RESULT_ALBUM_ARTIST],
+		       SEARCH_RESULT_ALBUM_FOREGROUND,       SearchResultList_Color[SEARCH_RESULT_ALBUM],
+                       SEARCH_RESULT_DISC_NUMBER_FOREGROUND, SearchResultList_Color[SEARCH_RESULT_DISC_NUMBER],
+                       SEARCH_RESULT_YEAR_FOREGROUND,        SearchResultList_Color[SEARCH_RESULT_YEAR],
+                       SEARCH_RESULT_TRACK_FOREGROUND,       SearchResultList_Color[SEARCH_RESULT_TRACK],
+                       SEARCH_RESULT_GENRE_FOREGROUND,       SearchResultList_Color[SEARCH_RESULT_GENRE],
+                       SEARCH_RESULT_COMMENT_FOREGROUND,     SearchResultList_Color[SEARCH_RESULT_COMMENT],
+                       SEARCH_RESULT_COMPOSER_FOREGROUND,    SearchResultList_Color[SEARCH_RESULT_COMPOSER],
+                       SEARCH_RESULT_ORIG_ARTIST_FOREGROUND, SearchResultList_Color[SEARCH_RESULT_ORIG_ARTIST],
+                       SEARCH_RESULT_COPYRIGHT_FOREGROUND,   SearchResultList_Color[SEARCH_RESULT_COPYRIGHT],
+                       SEARCH_RESULT_URL_FOREGROUND,         SearchResultList_Color[SEARCH_RESULT_URL],
+                       SEARCH_RESULT_ENCODED_BY_FOREGROUND,  SearchResultList_Color[SEARCH_RESULT_ENCODED_BY],
+
+                       SEARCH_RESULT_POINTER, ETFile,
+                       -1);
+
+    // Frees allocated data
+    g_free(SearchResultList_Text[SEARCH_RESULT_FILENAME]);
+    g_free(SearchResultList_Text[SEARCH_RESULT_TITLE]);
+    g_free(SearchResultList_Text[SEARCH_RESULT_ARTIST]);
+    g_free(SearchResultList_Text[SEARCH_RESULT_ALBUM_ARTIST]);
+    g_free(SearchResultList_Text[SEARCH_RESULT_ALBUM]);
+    g_free(SearchResultList_Text[SEARCH_RESULT_DISC_NUMBER]);
+    g_free(SearchResultList_Text[SEARCH_RESULT_YEAR]);
+    g_free(SearchResultList_Text[SEARCH_RESULT_TRACK]);
+    g_free(SearchResultList_Text[SEARCH_RESULT_GENRE]);
+    g_free(SearchResultList_Text[SEARCH_RESULT_COMMENT]);
+    g_free(SearchResultList_Text[SEARCH_RESULT_COMPOSER]);
+    g_free(SearchResultList_Text[SEARCH_RESULT_ORIG_ARTIST]);
+    g_free(SearchResultList_Text[SEARCH_RESULT_COPYRIGHT]);
+    g_free(SearchResultList_Text[SEARCH_RESULT_URL]);
+    g_free(SearchResultList_Text[SEARCH_RESULT_ENCODED_BY]);
+}
+
+/*
+ * This function and the one below could do with improving
+ * as we are looking up tag data twice (once when searching, once when adding to list)
+ */
+static void
+Search_File (GtkWidget *search_button, gpointer user_data)
+{
+    EtSearchDialog *self;
+    EtSearchDialogPrivate *priv;
+    const gchar *string_to_search = NULL;
+    GList *l;
+    ET_File *ETFile;
+    gchar *msg;
+    gchar *temp = NULL;
+    gchar *title2, *artist2, *album_artist2, *album2, *disc_number2,
+          *disc_total2, *year2, *track2, *track_total2, *genre2, *comment2,
+          *composer2, *orig_artist2, *copyright2, *url2, *encoded_by2,
+          *string_to_search2;
+    gint resultCount = 0;
+
+    self = ET_SEARCH_DIALOG (user_data);
+    priv = et_search_dialog_get_instance_private (self);
+
+    if (!priv->search_string_combo || !priv->search_in_filename || !priv->search_in_tag || !priv->search_results_view)
+        return;
+
+    string_to_search = gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(priv->search_string_combo))));
+    if (!string_to_search)
+        return;
+
+    Add_String_To_Combo_List (priv->search_string_model, string_to_search);
+
+    gtk_widget_set_sensitive(GTK_WIDGET(search_button),FALSE);
+    gtk_list_store_clear(priv->search_results_model);
+    gtk_statusbar_push(GTK_STATUSBAR(priv->status_bar),priv->status_bar_context,"");
+
+    for (l = g_list_first (ETCore->ETFileList); l != NULL; l = g_list_next (l))
+    {
+        ETFile = (ET_File *)l->data;
+
+        // Search in the filename
+        if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->search_in_filename)))
+        {
+            gchar *filename_utf8 = ((File_Name *)ETFile->FileNameNew->data)->value_utf8;
+            gchar *basename_utf8;
+
+            // To search without case sensivity
+            if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->search_case_sensitive)))
+            {
+                temp = g_path_get_basename(filename_utf8);
+                basename_utf8 = g_utf8_casefold(temp, -1);
+                g_free(temp);
+                string_to_search2 = g_utf8_casefold(string_to_search, -1);
+            } else
+            {
+                basename_utf8 = g_path_get_basename(filename_utf8);
+                string_to_search2 = g_strdup(string_to_search);
+            }
+
+            if ( basename_utf8 && strstr(basename_utf8,string_to_search2) )
+            {
+                Add_Row_To_Search_Result_List (self, ETFile,
+                                               string_to_search2);
+                g_free(basename_utf8);
+                g_free(string_to_search2);
+                continue;
+            }
+            g_free(basename_utf8);
+            g_free(string_to_search2);
+        }
+
+        // Search in the tag
+        if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->search_in_tag)))
+        {
+            File_Tag *FileTag   = (File_Tag *)ETFile->FileTag->data;
+
+            // To search with or without case sensivity
+            if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->search_case_sensitive)))
+            {
+                // To search without case sensivity...
+                // Duplicate and convert the strings into UTF-8 in loxer case
+                if (FileTag->title)       title2       = g_utf8_casefold(FileTag->title, -1);        else title2       = NULL;
+                if (FileTag->artist)      artist2      = g_utf8_casefold(FileTag->artist, -1);       else artist2      = NULL;
+                if (FileTag->album_artist) album_artist2 = g_utf8_casefold(FileTag->album_artist, -1); else album_artist2= NULL;
+                if (FileTag->album)       album2       = g_utf8_casefold(FileTag->album, -1);        else album2       = NULL;
+                if (FileTag->disc_number) disc_number2 = g_utf8_casefold(FileTag->disc_number, -1);  else disc_number2 = NULL;
+                if (FileTag->disc_total)
+                {
+                    disc_total2 = g_utf8_casefold (FileTag->disc_total, -1);
+                }
+                else
+                {
+                    disc_total2 = NULL;
+                }
+                if (FileTag->year)        year2        = g_utf8_casefold(FileTag->year, -1);         else year2        = NULL;
+                if (FileTag->track)       track2       = g_utf8_casefold(FileTag->track, -1);        else track2       = NULL;
+                if (FileTag->track_total) track_total2 = g_utf8_casefold(FileTag->track_total, -1);  else track_total2 = NULL;
+                if (FileTag->genre)       genre2       = g_utf8_casefold(FileTag->genre, -1);        else genre2       = NULL;
+                if (FileTag->comment)     comment2     = g_utf8_casefold(FileTag->comment, -1);      else comment2     = NULL;
+                if (FileTag->composer)    composer2    = g_utf8_casefold(FileTag->composer, -1);     else composer2    = NULL;
+                if (FileTag->orig_artist) orig_artist2 = g_utf8_casefold(FileTag->orig_artist, -1);  else orig_artist2 = NULL;
+                if (FileTag->copyright)   copyright2   = g_utf8_casefold(FileTag->copyright, -1);    else copyright2   = NULL;
+                if (FileTag->url)         url2         = g_utf8_casefold(FileTag->url, -1);          else url2         = NULL;
+                if (FileTag->encoded_by)  encoded_by2  = g_utf8_casefold(FileTag->encoded_by, -1);   else encoded_by2  = NULL;
+                string_to_search2 = g_utf8_strdown(string_to_search, -1);
+            }else
+            {
+                // To search with case sensivity...
+                // Duplicate and convert the strings into UTF-8
+                title2       = g_strdup(FileTag->title);
+                artist2      = g_strdup(FileTag->artist);
+                album_artist2= g_strdup(FileTag->album_artist);
+                album2       = g_strdup(FileTag->album);
+                disc_number2 = g_strdup(FileTag->disc_number);
+                disc_total2 = g_strdup (FileTag->disc_total);
+                year2        = g_strdup(FileTag->year);
+                track2       = g_strdup(FileTag->track);
+                track_total2 = g_strdup(FileTag->track_total);
+                genre2       = g_strdup(FileTag->genre);
+                comment2     = g_strdup(FileTag->comment);
+                composer2    = g_strdup(FileTag->composer);
+                orig_artist2 = g_strdup(FileTag->orig_artist);
+                copyright2   = g_strdup(FileTag->copyright);
+                url2         = g_strdup(FileTag->url);
+                encoded_by2  = g_strdup(FileTag->encoded_by);
+                string_to_search2 = g_strdup(string_to_search);
+            }
+
+            // FIX ME : should use UTF-8 functions?
+            if ( (title2       && strstr(title2,       string_to_search2) )
+             ||  (artist2      && strstr(artist2,      string_to_search2) )
+             ||  (album_artist2 && strstr(album_artist2,string_to_search2) )
+             ||  (album2       && strstr(album2,       string_to_search2) )
+             ||  (disc_number2 && strstr(disc_number2, string_to_search2) )
+             ||  (disc_total2 && strstr (disc_total2, string_to_search2))
+             ||  (year2        && strstr(year2,        string_to_search2) )
+             ||  (track2       && strstr(track2,       string_to_search2) )
+             ||  (track_total2 && strstr(track_total2, string_to_search2) )
+             ||  (genre2       && strstr(genre2,       string_to_search2) )
+             ||  (comment2     && strstr(comment2,     string_to_search2) )
+             ||  (composer2    && strstr(composer2,    string_to_search2) )
+             ||  (orig_artist2 && strstr(orig_artist2, string_to_search2) )
+             ||  (copyright2   && strstr(copyright2,   string_to_search2) )
+             ||  (url2         && strstr(url2,         string_to_search2) )
+             ||  (encoded_by2  && strstr(encoded_by2,  string_to_search2) ) )
+            {
+                Add_Row_To_Search_Result_List (self, ETFile, string_to_search);
+            }
+            g_free(title2);
+            g_free(artist2);
+            g_free(album_artist2);
+            g_free(album2);
+            g_free(disc_number2);
+            g_free (disc_total2);
+            g_free(year2);
+            g_free(track2);
+            g_free(track_total2);
+            g_free(genre2);
+            g_free(comment2);
+            g_free(composer2);
+            g_free(orig_artist2);
+            g_free(copyright2);
+            g_free(url2);
+            g_free(encoded_by2);
+            g_free(string_to_search2);
+        }
+    }
+
+    gtk_widget_set_sensitive(GTK_WIDGET(search_button),TRUE);
+
+    // Display the number of files in the statusbar
+    resultCount = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(priv->search_results_model), NULL);
+    msg = g_strdup_printf (ngettext ("Found one file", "Found %d files",
+                           resultCount), resultCount);
+    gtk_statusbar_push(GTK_STATUSBAR(priv->status_bar),priv->status_bar_context,msg);
+    g_free(msg);
+
+    // Disable result list if no row inserted
+    if (resultCount > 0 )
+    {
+        gtk_widget_set_sensitive(GTK_WIDGET(priv->search_results_view), TRUE);
+    } else
+    {
+        gtk_widget_set_sensitive(GTK_WIDGET(priv->search_results_view), FALSE);
+    }
+}
+
+static void
+on_close_clicked (GtkButton *button, gpointer user_data)
+{
+    EtSearchDialog *self;
+
+    self = ET_SEARCH_DIALOG (user_data);
+
+    et_search_dialog_apply_changes (self);
+    gtk_widget_hide (GTK_WIDGET (self));
+}
+
+static gboolean
+on_delete_event (GtkWidget *widget)
+{
+    et_search_dialog_apply_changes (ET_SEARCH_DIALOG (widget));
+
+    return TRUE;
+}
+
+/*
+ * The window to search keywords in the list of files.
+ */
+static void
+create_search_dialog (EtSearchDialog *self)
+{
+    EtSearchDialogPrivate *priv;
+    GtkWidget *content_area;
+    GtkBuilder *builder;
+    GError *error = NULL;
+    GtkWidget *grid;
+    GtkWidget *button;
+
+    priv = et_search_dialog_get_instance_private (self);
+
+    gtk_window_set_title (GTK_WINDOW (self), _("Find Files"));
+    g_signal_connect (self, "delete-event", G_CALLBACK (on_delete_event),
+                      NULL);
+
+    content_area = gtk_dialog_get_content_area (GTK_DIALOG (self));
+    gtk_box_set_spacing (GTK_BOX (content_area), BOX_SPACING);
+    gtk_container_set_border_width (GTK_CONTAINER (self),
+                                    BOX_SPACING);
+
+    builder = gtk_builder_new ();
+    gtk_builder_add_from_resource (builder,
+                                   "/org/gnome/EasyTAG/search_dialog.ui",
+                                   &error);
+
+    if (error != NULL)
+    {
+        g_error ("Unable to get search dialog from resource: %s",
+                 error->message);
+    }
+
+    grid = GTK_WIDGET (gtk_builder_get_object (builder, "search_grid"));
+    gtk_container_add (GTK_CONTAINER (content_area), grid);
+
+    /* Words to search. */
+    priv->search_string_model = gtk_list_store_new (MISC_COMBO_COUNT,
+                                                    G_TYPE_STRING);
+    priv->search_string_combo = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                    "search_combo"));
+    gtk_combo_box_set_model (GTK_COMBO_BOX (priv->search_string_combo),
+                             GTK_TREE_MODEL (priv->search_string_model));
+    g_object_unref (priv->search_string_model);
+    /* History List. */
+    Load_Search_File_List (priv->search_string_model, MISC_COMBO_TEXT);
+    gtk_entry_set_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->search_string_combo))),
+                        "");
+
+    /* Set content of the clipboard if available. */
+    gtk_editable_paste_clipboard (GTK_EDITABLE (gtk_bin_get_child (GTK_BIN (priv->search_string_combo))));
+
+    priv->search_in_filename = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                   "search_filename_check"));
+    priv->search_in_tag = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                              "search_tag_check"));
+    g_settings_bind (MainSettings, "search-filename", priv->search_in_filename,
+                     "active", G_SETTINGS_BIND_DEFAULT);
+    g_settings_bind (MainSettings, "search-tag", priv->search_in_tag,
+                     "active", G_SETTINGS_BIND_DEFAULT);
+
+    /* Property of the search. */
+    priv->search_case_sensitive = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                      "search_case_check"));
+    g_settings_bind (MainSettings, "search-case-sensitive",
+                     priv->search_case_sensitive, "active",
+                     G_SETTINGS_BIND_DEFAULT);
+
+    /* Results list. */
+    priv->search_results_model = GTK_LIST_STORE (gtk_builder_get_object (builder,
+                                                                         "search_model"));
+    priv->search_results_view = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                    "search_view"));
+
+    g_signal_connect (gtk_builder_get_object (builder, "search_selection"),
+                      "changed", G_CALLBACK (Search_Result_List_Row_Selected),
+                      self);
+
+    /* Button to run the search. */
+    button = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                 "search_find_button"));
+    gtk_widget_grab_default (button);
+    g_signal_connect (button, "clicked", G_CALLBACK (Search_File), self);
+    g_signal_connect (gtk_bin_get_child (GTK_BIN (priv->search_string_combo)),
+                      "activate", G_CALLBACK (Search_File), self);
+
+    /* Button to cancel. */
+    button = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                 "search_close_button"));
+    g_signal_connect (button, "clicked", G_CALLBACK (on_close_clicked), self);
+
+    /* Status bar. */
+    priv->status_bar = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                           "search_status"));
+    priv->status_bar_context = gtk_statusbar_get_context_id (GTK_STATUSBAR (priv->status_bar),
+                                                             "Messages");
+    gtk_statusbar_push (GTK_STATUSBAR (priv->status_bar),
+                        priv->status_bar_context, _("Ready to search…"));
+
+    g_object_unref (builder);
+}
+
+/*
+ * For the configuration file...
+ */
+void
+et_search_dialog_apply_changes (EtSearchDialog *self)
+{
+    EtSearchDialogPrivate *priv;
+
+    g_return_if_fail (ET_SEARCH_DIALOG (self));
+
+    priv = et_search_dialog_get_instance_private (self);
+
+    Save_Search_File_List (priv->search_string_model, MISC_COMBO_TEXT);
+}
+
+static void
+et_search_dialog_finalize (GObject *object)
+{
+    G_OBJECT_CLASS (et_search_dialog_parent_class)->finalize (object);
+}
+
+static void
+et_search_dialog_init (EtSearchDialog *self)
+{
+    self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, ET_TYPE_SEARCH_DIALOG,
+                                              EtSearchDialogPrivate);
+
+    create_search_dialog (self);
+}
+
+static void
+et_search_dialog_class_init (EtSearchDialogClass *klass)
+{
+    G_OBJECT_CLASS (klass)->finalize = et_search_dialog_finalize;
+
+    g_type_class_add_private (klass, sizeof (EtSearchDialogPrivate));
+}
+
+/*
+ * et_search_dialog_new:
+ *
+ * Create a new EtSearchDialog instance.
+ *
+ * Returns: a new #EtSearchDialog
+ */
+EtSearchDialog *
+et_search_dialog_new (GtkWindow *parent)
+{
+    g_return_val_if_fail (GTK_WINDOW (parent), NULL);
+
+    return g_object_new (ET_TYPE_SEARCH_DIALOG, "transient-for", parent, NULL);
+}
diff --git a/src/application.h b/src/search_dialog.h
similarity index 53%
copy from src/application.h
copy to src/search_dialog.h
index c3a1858..848c450 100644
--- a/src/application.h
+++ b/src/search_dialog.h
@@ -16,39 +16,39 @@
  * Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 
-#ifndef ET_APPLICATION_H_
-#define ET_APPLICATION_H_
+#ifndef ET_SEARCH_DIALOG_H_
+#define ET_SEARCH_DIALOG_H_
 
-#include <gio/gio.h>
 #include <gtk/gtk.h>
 
 G_BEGIN_DECLS
 
-#define ET_TYPE_APPLICATION (et_application_get_type ())
-#define ET_APPLICATION(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), ET_TYPE_APPLICATION, EtApplication))
+#include "et_core.h"
 
-typedef struct _EtApplication EtApplication;
-typedef struct _EtApplicationClass EtApplicationClass;
-typedef struct _EtApplicationPrivate EtApplicationPrivate;
+#define ET_TYPE_SEARCH_DIALOG (et_search_dialog_get_type ())
+#define ET_SEARCH_DIALOG(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), ET_TYPE_SEARCH_DIALOG, EtSearchDialog))
 
-struct _EtApplication
+typedef struct _EtSearchDialog EtSearchDialog;
+typedef struct _EtSearchDialogClass EtSearchDialogClass;
+typedef struct _EtSearchDialogPrivate EtSearchDialogPrivate;
+
+struct _EtSearchDialog
 {
     /*< private >*/
-    GApplication parent_instance;
-    EtApplicationPrivate *priv;
+    GtkDialog parent_instance;
+    EtSearchDialogPrivate *priv;
 };
 
-struct _EtApplicationClass
+struct _EtSearchDialogClass
 {
     /*< private >*/
-    GApplicationClass parent_class;
+    GtkDialogClass parent_class;
 };
 
-GType et_application_get_type (void);
-EtApplication *et_application_new (void);
-GtkWindow *et_application_get_window (EtApplication *application);
-void et_application_set_window (EtApplication *application, GtkWindow *window);
+GType et_search_dialog_get_type (void);
+EtSearchDialog *et_search_dialog_new (GtkWindow *parent);
+void et_search_dialog_apply_changes (EtSearchDialog *self);
 
 G_END_DECLS
 
-#endif /* !ET_APPLICATION_H_ */
+#endif /* !ET_SEARCH_DIALOG_H_ */
diff --git a/src/setting.c b/src/setting.c
index befcbc1..ebf98c7 100644
--- a/src/setting.c
+++ b/src/setting.c
@@ -1,24 +1,23 @@
-/* config.c - 2000/06/21 */
-/*
- *  EasyTAG - Tag editor for MP3 and Ogg Vorbis files
- *  Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
+/* EasyTAG - Tag editor for audio files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ * Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
  *
- *  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
- *  (at your option) any later version.
+ * 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
+ * (at your option) any later version.
  *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
  *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-#include <config.h>
+#include "config.h"
 
 #include <gtk/gtk.h>
 #include <glib/gi18n.h>
@@ -33,14 +32,17 @@
 #include <errno.h>
 
 #include "setting.h"
-#include "prefs.h"
-#include "bar.h"
+#include "application_window.h"
+#include "cddb_dialog.h"
+#include "load_files_dialog.h"
+#include "playlist_dialog.h"
+#include "preferences_dialog.h"
+#include "search_dialog.h"
 #include "easytag.h"
 #include "charset.h"
 #include "scan_dialog.h"
 #include "log.h"
 #include "misc.h"
-#include "cddb.h"
 #include "browser.h"
 #include "et_core.h"
 
@@ -57,40 +59,18 @@
  *    NetBSD's mkdir(2).
  */
 
-// File for configuration
-static const gchar CONFIG_FILE[] = "easytagrc";
 // File of masks for tag scanner
 static const gchar SCAN_TAG_MASKS_FILE[] = "scan_tag.mask";
 // File of masks for rename file scanner
 static const gchar RENAME_FILE_MASKS_FILE[] = "rename_file.mask";
-// File for history of RenameDirectoryMaskCombo combobox
-static const gchar RENAME_DIRECTORY_MASKS_FILE[] = "rename_directory.mask";
-// File for history of PlayListNameCombo combobox
-static const gchar PLAY_LIST_NAME_MASKS_FILE[] = "play_list_name.mask";
-// File for history of PlayListContentMaskEntry combobox
-static const gchar PLAYLIST_CONTENT_MASKS_FILE[] = "playlist_content.mask";
-// File for history of DefaultPathToMp3 combobox
-static const gchar DEFAULT_PATH_TO_MP3_HISTORY_FILE[] = "default_path_to_mp3.history";
-// File for history of DefaultComment combobox
-static const gchar DEFAULT_TAG_COMMENT_HISTORY_FILE[] = "default_tag_comment.history";
 // File for history of BrowserEntry combobox
 static const gchar PATH_ENTRY_HISTORY_FILE[] = "browser_path.history";
 // File for history of run program combobox for directories
 static const gchar RUN_PROGRAM_WITH_DIRECTORY_HISTORY_FILE[] = "run_program_with_directory.history";
 // File for history of run program combobox for files
 static const gchar RUN_PROGRAM_WITH_FILE_HISTORY_FILE[] = "run_program_with_file.history";
-// File for history of run player combobox
-static const gchar AUDIO_FILE_PLAYER_HISTORY_FILE[] = "audio_file_player.history";
 // File for history of search string combobox
 static const gchar SEARCH_FILE_HISTORY_FILE[] = "search_file.history";
-// File for history of FileToLoad combobox
-static const gchar FILE_TO_LOAD_HISTORY_FILE[] = "file_to_load.history";
-// File for history of CddbSearchStringEntry combobox
-static const gchar CDDB_SEARCH_STRING_HISTORY_FILE[] = "cddb_search_string.history";
-// File for history of CddbSearchStringInResultEntry combobox
-static const gchar CDDB_SEARCH_STRING_IN_RESULT_HISTORY_FILE[] = "cddb_search_string_in_result.history";
-// File for history of CddbLocalPath combobox
-static const gchar CDDB_LOCAL_PATH_HISTORY_FILE[] = "cddb_local_path.history";
 
 
 
@@ -98,1026 +78,45 @@ static const gchar CDDB_LOCAL_PATH_HISTORY_FILE[] = "cddb_local_path.history";
  * Prototypes *
  **************/
 
-static void Save_Config_To_File (void);
 static gboolean Create_Easytag_Directory (void);
-static void set_sorting_indicator_for_column_id (gint column_id,
-                                                 ET_Sorting_Type temp_sort,
-                                                 GtkTreeViewColumn *column);
-
-
-
-/********************
- * Config Variables *
- ********************/
-static const tConfigVariable Config_Variables[] =
-{
-    {"load_on_startup",                     CV_TYPE_BOOL,    &LOAD_ON_STARTUP                   },
-    {"default_path_to_mp3",                 CV_TYPE_STRING,  &DEFAULT_PATH_TO_MP3               },
-    {"browser_line_style",                  CV_TYPE_BOOL,    &BROWSER_LINE_STYLE                },
-    {"browser_expander_style",              CV_TYPE_BOOL,    &BROWSER_EXPANDER_STYLE            },
-    {"browse_subdir",                       CV_TYPE_BOOL,    &BROWSE_SUBDIR                     },
-    {"browse_hidden_dir",                   CV_TYPE_BOOL,    &BROWSE_HIDDEN_DIR                 },
-    {"open_selected_browser_node",          CV_TYPE_BOOL,    &OPEN_SELECTED_BROWSER_NODE        },
-
-    {"set_main_window_position",            CV_TYPE_BOOL,    &SET_MAIN_WINDOW_POSITION          },
-    {"main_window_x",                       CV_TYPE_INT,     &MAIN_WINDOW_X                     },
-    {"main_window_y",                       CV_TYPE_INT,     &MAIN_WINDOW_Y                     },
-    {"main_window_height",                  CV_TYPE_INT,     &MAIN_WINDOW_HEIGHT                },
-    {"main_window_width",                   CV_TYPE_INT,     &MAIN_WINDOW_WIDTH                 },
-    {"pane_handle_position1",               CV_TYPE_INT,     &PANE_HANDLE_POSITION1             },
-    {"pane_handle_position2",               CV_TYPE_INT,     &PANE_HANDLE_POSITION2             },
-    {"pane_handle_position3",               CV_TYPE_INT,     &PANE_HANDLE_POSITION3             },
-    {"pane_handle_position4",               CV_TYPE_INT,     &PANE_HANDLE_POSITION4             },
-    {"show_header_infos",                   CV_TYPE_BOOL,    &SHOW_HEADER_INFO                  },
-    {"changed_files_displayed_to_red",      CV_TYPE_BOOL,    &CHANGED_FILES_DISPLAYED_TO_RED    },
-    {"changed_files_displayed_to_bold",     CV_TYPE_BOOL,    &CHANGED_FILES_DISPLAYED_TO_BOLD   },
-
-    {"date_auto_completion",                 CV_TYPE_BOOL,    &DATE_AUTO_COMPLETION                     },
-    {"number_track_formated",                CV_TYPE_BOOL,    &NUMBER_TRACK_FORMATED                    },
-    {"number_track_formated_spin_button",    CV_TYPE_INT,     &NUMBER_TRACK_FORMATED_SPIN_BUTTON        },
-    {"pad_disc_number", CV_TYPE_BOOL, &PAD_DISC_NUMBER },
-    {"pad_disc_number_digits", CV_TYPE_INT, &PAD_DISC_NUMBER_DIGITS },
-    {"set_focus_to_same_tag_field",          CV_TYPE_BOOL,    &SET_FOCUS_TO_SAME_TAG_FIELD              },
-    {"set_focus_to_first_tag_field",         CV_TYPE_BOOL,    &SET_FOCUS_TO_FIRST_TAG_FIELD             },
-    {"sorting_file_mode",                    CV_TYPE_INT,     &SORTING_FILE_MODE                        },
-    {"sorting_file_case_sensitive",          CV_TYPE_BOOL,    &SORTING_FILE_CASE_SENSITIVE              },
-    {"log_max_lines",                        CV_TYPE_INT,     &LOG_MAX_LINES                            },
-    {"sho_log_view",                         CV_TYPE_BOOL,    &SHOW_LOG_VIEW                            },
-
-    {"replace_illegal_character_in_filename",          CV_TYPE_BOOL,    &REPLACE_ILLEGAL_CHARACTERS_IN_FILENAME   },
-    {"filename_extension_lower_case",                  CV_TYPE_BOOL,    &FILENAME_EXTENSION_LOWER_CASE            },
-    {"filename_extension_upper_case",                  CV_TYPE_BOOL,    &FILENAME_EXTENSION_UPPER_CASE            },
-    {"filename_extension_no_change",                   CV_TYPE_BOOL,    &FILENAME_EXTENSION_NO_CHANGE             },
-    {"preserve_modification_time",                     CV_TYPE_BOOL,    &PRESERVE_MODIFICATION_TIME               },
-    {"update_parent_directory_modification_time",      CV_TYPE_BOOL,    &UPDATE_PARENT_DIRECTORY_MODIFICATION_TIME},
-    {"filename_character_set_other",                   CV_TYPE_BOOL,    &FILENAME_CHARACTER_SET_OTHER             },
-    {"filename_character_set_approximate",             CV_TYPE_BOOL,    &FILENAME_CHARACTER_SET_APPROXIMATE       },
-    {"filename_character_set_discard",                 CV_TYPE_BOOL,    &FILENAME_CHARACTER_SET_DISCARD           },
-
-    {"strip_tag_when_empty_fields",                    CV_TYPE_BOOL,  &STRIP_TAG_WHEN_EMPTY_FIELDS                     },
-    {"convert_old_id3v2_tag_version",                  CV_TYPE_BOOL,  &CONVERT_OLD_ID3V2_TAG_VERSION                   },
-    {"use_non_standard_id3_reading_character_set",     CV_TYPE_BOOL,  &USE_NON_STANDARD_ID3_READING_CHARACTER_SET},
-    {"file_reading_id3v1v2_character_set",             CV_TYPE_STRING,&FILE_READING_ID3V1V2_CHARACTER_SET},
-    {"file_writing_id3v2_write_tag",                   CV_TYPE_BOOL,  &FILE_WRITING_ID3V2_WRITE_TAG    },
-    {"file_writing_id3v2_version_4",                   CV_TYPE_BOOL,  &FILE_WRITING_ID3V2_VERSION_4   },
-    {"file_writing_id3v2_use_crc32",                   CV_TYPE_BOOL,  &FILE_WRITING_ID3V2_USE_CRC32    },
-    {"file_writing_id3v2_use_compression",             CV_TYPE_BOOL,  &FILE_WRITING_ID3V2_USE_COMPRESSION    },
-    {"file_writing_id3v2_use_unicode_character_set",   CV_TYPE_BOOL,  &FILE_WRITING_ID3V2_USE_UNICODE_CHARACTER_SET},
-    {"file_writing_id3v2_unicode_character_set",       CV_TYPE_STRING,&FILE_WRITING_ID3V2_UNICODE_CHARACTER_SET},
-    {"file_writing_id3v2_no_unicode_character_set",    CV_TYPE_STRING,&FILE_WRITING_ID3V2_NO_UNICODE_CHARACTER_SET},
-    {"file_writing_id3v2_iconv_options_no",            CV_TYPE_BOOL,  &FILE_WRITING_ID3V2_ICONV_OPTIONS_NO},
-    {"file_writing_id3v2_iconv_options_translit",      CV_TYPE_BOOL,  &FILE_WRITING_ID3V2_ICONV_OPTIONS_TRANSLIT},
-    {"file_writing_id3v2_iconv_options_ignore",        CV_TYPE_BOOL,  &FILE_WRITING_ID3V2_ICONV_OPTIONS_IGNORE},
-    {"file_writing_id3v2_text_only_genre",             CV_TYPE_BOOL,  &FILE_WRITING_ID3V2_TEXT_ONLY_GENRE},
-    {"file_writing_id3v1_write_tag",                   CV_TYPE_BOOL,  &FILE_WRITING_ID3V1_WRITE_TAG   },
-    {"file_writing_id3v1_character_set",               CV_TYPE_STRING,&FILE_WRITING_ID3V1_CHARACTER_SET},
-    {"file_writing_id3v1_iconv_options_no",            CV_TYPE_BOOL,  &FILE_WRITING_ID3V1_ICONV_OPTIONS_NO},
-    {"file_writing_id3v1_iconv_options_translit",      CV_TYPE_BOOL,  &FILE_WRITING_ID3V1_ICONV_OPTIONS_TRANSLIT},
-    {"file_writing_id3v1_iconv_options_ignore",        CV_TYPE_BOOL,  &FILE_WRITING_ID3V1_ICONV_OPTIONS_IGNORE},
-    {"vorbis_split_field_title",                       CV_TYPE_BOOL,  &VORBIS_SPLIT_FIELD_TITLE},
-    {"vorbis_split_field_artist",                      CV_TYPE_BOOL,  &VORBIS_SPLIT_FIELD_ARTIST},
-    {"vorbis_split_field_album",                       CV_TYPE_BOOL,  &VORBIS_SPLIT_FIELD_ALBUM},
-    {"vorbis_split_field_genre",                       CV_TYPE_BOOL,  &VORBIS_SPLIT_FIELD_GENRE},
-    {"vorbis_split_field_comment",                     CV_TYPE_BOOL,  &VORBIS_SPLIT_FIELD_COMMENT},
-    {"vorbis_split_field_composer",                    CV_TYPE_BOOL,  &VORBIS_SPLIT_FIELD_COMPOSER},
-    {"vorbis_split_field_orig_artist",                 CV_TYPE_BOOL,  &VORBIS_SPLIT_FIELD_ORIG_ARTIST},
-
-    {"audio_file_player",                       CV_TYPE_STRING,&AUDIO_FILE_PLAYER                        },
-
-    {"scanner_type",                             CV_TYPE_INT, &SCANNER_TYPE                              },
-    {"scan_mask_editor_button",                  CV_TYPE_BOOL,&SCAN_MASK_EDITOR_BUTTON                   },
-    {"scan_legend_button",                       CV_TYPE_BOOL,&SCAN_LEGEND_BUTTON                        },
-    {"fts_convert_underscore_and_p20_into_space",CV_TYPE_BOOL,&FTS_CONVERT_UNDERSCORE_AND_P20_INTO_SPACE },
-    {"fts_convert_space_into_underscore",        CV_TYPE_BOOL,&FTS_CONVERT_SPACE_INTO_UNDERSCORE         },
-    {"rfs_convert_underscore_and_p20_into_space",CV_TYPE_BOOL,&RFS_CONVERT_UNDERSCORE_AND_P20_INTO_SPACE },
-    {"rfs_convert_space_into_underscore",        CV_TYPE_BOOL,&RFS_CONVERT_SPACE_INTO_UNDERSCORE         },
-    {"rfs_remove_spaces",                        CV_TYPE_BOOL,&RFS_REMOVE_SPACES                         },
-    {"pfs_dont_upper_some_words",                CV_TYPE_BOOL,&PFS_DONT_UPPER_SOME_WORDS                 },
-    {"overwrite_tag_field",                     CV_TYPE_BOOL,    &OVERWRITE_TAG_FIELD                    },
-    {"set_default_comment",                     CV_TYPE_BOOL,    &SET_DEFAULT_COMMENT                    },
-    {"default_comment",                         CV_TYPE_STRING,  &DEFAULT_COMMENT                        },
-    {"crc32_comment",                           CV_TYPE_BOOL,    &SET_CRC32_COMMENT                      },
-    {"open_scanner_window_on_startup",          CV_TYPE_BOOL,    &OPEN_SCANNER_WINDOW_ON_STARTUP         },
-    {"set_scanner_window_position",             CV_TYPE_BOOL,    &SET_SCANNER_WINDOW_POSITION            },
-    {"scanner_window_x",                        CV_TYPE_INT,     &SCANNER_WINDOW_X                       },
-    {"scanner_window_y",                        CV_TYPE_INT,     &SCANNER_WINDOW_Y                       },
-
-    {"confirm_before_exit",                     CV_TYPE_BOOL,    &CONFIRM_BEFORE_EXIT                    },
-    {"confirm_write_tag",                       CV_TYPE_BOOL,    &CONFIRM_WRITE_TAG                      },
-    {"confirm_rename_file",                     CV_TYPE_BOOL,    &CONFIRM_RENAME_FILE                    },
-    {"confirm_write_playlist",                  CV_TYPE_BOOL,    &CONFIRM_WRITE_PLAYLIST                 },
-    {"confirm_delete_file",                     CV_TYPE_BOOL,    &CONFIRM_DELETE_FILE                    },
-    {"confirm_when_unsaved_files",              CV_TYPE_BOOL,    &CONFIRM_WHEN_UNSAVED_FILES             },
-
-    {"process_filename_field",                  CV_TYPE_BOOL,    &PROCESS_FILENAME_FIELD                 },
-    {"process_title_field",                     CV_TYPE_BOOL,    &PROCESS_TITLE_FIELD                    },
-    {"process_artist_field",                    CV_TYPE_BOOL,    &PROCESS_ARTIST_FIELD                   },
-    {"process_album_artist_field",              CV_TYPE_BOOL,    &PROCESS_ALBUM_ARTIST_FIELD             },
-    {"process_album_field",                     CV_TYPE_BOOL,    &PROCESS_ALBUM_FIELD                    },
-    {"process_genre_field",                     CV_TYPE_BOOL,    &PROCESS_GENRE_FIELD                    },
-    {"process_comment_field",                   CV_TYPE_BOOL,    &PROCESS_COMMENT_FIELD                  },
-    {"process_composer_field",                  CV_TYPE_BOOL,    &PROCESS_COMPOSER_FIELD                 },
-    {"process_orig_artist_field",               CV_TYPE_BOOL,    &PROCESS_ORIG_ARTIST_FIELD              },
-    {"process_copyright_field",                 CV_TYPE_BOOL,    &PROCESS_COPYRIGHT_FIELD                },
-    {"process_url_field",                       CV_TYPE_BOOL,    &PROCESS_URL_FIELD                      },
-    {"process_encoded_by_field",                CV_TYPE_BOOL,    &PROCESS_ENCODED_BY_FIELD               },
-    {"process_fields_convert_from",             CV_TYPE_STRING,  &PROCESS_FIELDS_CONVERT_FROM            },
-    {"process_fields_convert_to",               CV_TYPE_STRING,  &PROCESS_FIELDS_CONVERT_TO              },
-
-    {"pf_convert_into_space",                   CV_TYPE_BOOL,    &PF_CONVERT_INTO_SPACE                  },
-    {"pf_convert_space",                        CV_TYPE_BOOL,    &PF_CONVERT_SPACE                       },
-    {"pf_convert",                              CV_TYPE_BOOL,    &PF_CONVERT                             },
-    {"pf_convert_all_uppercase",                CV_TYPE_BOOL,    &PF_CONVERT_ALL_UPPERCASE               },
-    {"pf_convert_all_downcase",                 CV_TYPE_BOOL,    &PF_CONVERT_ALL_DOWNCASE                },
-    {"pf_convert_first_letter_uppercase",       CV_TYPE_BOOL,    &PF_CONVERT_FIRST_LETTER_UPPERCASE      },
-    {"pf_convert_first_letters_uppercase",      CV_TYPE_BOOL,    &PF_CONVERT_FIRST_LETTERS_UPPERCASE     },
-    {"pf_detect_roman_numerals",                CV_TYPE_BOOL,    &PF_DETECT_ROMAN_NUMERALS               },
-    {"pf_remove_space",                         CV_TYPE_BOOL,    &PF_REMOVE_SPACE                        },
-    {"pf_insert_space",                         CV_TYPE_BOOL,    &PF_INSERT_SPACE                        },
-    {"pf_only_one_space",                       CV_TYPE_BOOL,    &PF_ONLY_ONE_SPACE                      },
-
-    {"playlist_name",                           CV_TYPE_STRING,  &PLAYLIST_NAME                          },
-    {"playlist_use_mask_name",                  CV_TYPE_BOOL,    &PLAYLIST_USE_MASK_NAME                 },
-    {"playlist_use_dir_name",                   CV_TYPE_BOOL,    &PLAYLIST_USE_DIR_NAME                  },
-    {"playlist_only_selected_files",            CV_TYPE_BOOL,    &PLAYLIST_ONLY_SELECTED_FILES           },
-    {"playlist_full_path",                      CV_TYPE_BOOL,    &PLAYLIST_FULL_PATH                     },
-    {"playlist_relative_path",                  CV_TYPE_BOOL,    &PLAYLIST_RELATIVE_PATH                 },
-    {"playlist_create_in_parent_dir",           CV_TYPE_BOOL,    &PLAYLIST_CREATE_IN_PARENT_DIR          },
-    {"playlist_use_dos_separator",              CV_TYPE_BOOL,    &PLAYLIST_USE_DOS_SEPARATOR             },
-    {"playlist_content_none",                   CV_TYPE_BOOL,    &PLAYLIST_CONTENT_NONE                  },
-    {"playlist_content_filename",               CV_TYPE_BOOL,    &PLAYLIST_CONTENT_FILENAME              },
-    {"playlist_content_mask",                   CV_TYPE_BOOL,    &PLAYLIST_CONTENT_MASK                  },
-    {"playlist_content_mask_value",             CV_TYPE_STRING,  &PLAYLIST_CONTENT_MASK_VALUE            },
-    {"playlist_window_x",                       CV_TYPE_INT,     &PLAYLIST_WINDOW_X                      },
-    {"playlist_window_y",                       CV_TYPE_INT,     &PLAYLIST_WINDOW_Y                      },
-
-    {"load_file_run_scanner",                   CV_TYPE_BOOL,    &LOAD_FILE_RUN_SCANNER                  },
-    {"load_file_window_x",                      CV_TYPE_INT,     &LOAD_FILE_WINDOW_X                     },
-    {"load_file_window_y",                      CV_TYPE_INT,     &LOAD_FILE_WINDOW_Y                     },
-    {"load_file_window_width",                  CV_TYPE_INT,     &LOAD_FILE_WINDOW_WIDTH                 },
-    {"load_file_window_height",                 CV_TYPE_INT,     &LOAD_FILE_WINDOW_HEIGHT                },
-
-    {"cddb_server_name_automatic_search",       CV_TYPE_STRING,  &CDDB_SERVER_NAME_AUTOMATIC_SEARCH      },
-    {"cddb_server_port_automatic_search",       CV_TYPE_INT,     &CDDB_SERVER_PORT_AUTOMATIC_SEARCH      },
-    {"cddb_server_cgi_path_automatic_search",   CV_TYPE_STRING,  &CDDB_SERVER_CGI_PATH_AUTOMATIC_SEARCH  },
-    {"cddb_server_name_automatic_search2",      CV_TYPE_STRING,  &CDDB_SERVER_NAME_AUTOMATIC_SEARCH2     },
-    {"cddb_server_port_automatic_search2",      CV_TYPE_INT,     &CDDB_SERVER_PORT_AUTOMATIC_SEARCH2     },
-    {"cddb_server_cgi_path_automatic_search2",  CV_TYPE_STRING,  &CDDB_SERVER_CGI_PATH_AUTOMATIC_SEARCH2 },
-    {"cddb_server_name_manual_search",          CV_TYPE_STRING,  &CDDB_SERVER_NAME_MANUAL_SEARCH         },
-    {"cddb_server_port_manual_search",          CV_TYPE_INT,     &CDDB_SERVER_PORT_MANUAL_SEARCH         },
-    {"cddb_server_cgi_path_manual_search",      CV_TYPE_STRING,  &CDDB_SERVER_CGI_PATH_MANUAL_SEARCH     },
-    {"cddb_local_path",                         CV_TYPE_STRING,  &CDDB_LOCAL_PATH                        },
-    {"cddb_use_proxy",                          CV_TYPE_INT,     &CDDB_USE_PROXY                         },
-    {"cddb_proxy_name",                         CV_TYPE_STRING,  &CDDB_PROXY_NAME                        },
-    {"cddb_proxy_port",                         CV_TYPE_INT,     &CDDB_PROXY_PORT                        },
-    {"cddb_proxy_user_name",                    CV_TYPE_STRING,  &CDDB_PROXY_USER_NAME                   },
-    {"cddb_proxy_user_password",                CV_TYPE_STRING,  &CDDB_PROXY_USER_PASSWORD               },
-    {"set_cddb_window_position",                CV_TYPE_BOOL,    &SET_CDDB_WINDOW_POSITION               },
-    {"cddb_window_x",                           CV_TYPE_INT,     &CDDB_WINDOW_X                          },
-    {"cddb_window_y",                           CV_TYPE_INT,     &CDDB_WINDOW_Y                          },
-    {"cddb_window_height",                      CV_TYPE_INT,     &CDDB_WINDOW_HEIGHT                     },
-    {"cddb_window_width",                       CV_TYPE_INT,     &CDDB_WINDOW_WIDTH                      },
-    {"cddb_pane_handle_position",               CV_TYPE_INT,     &CDDB_PANE_HANDLE_POSITION              },
-
-    {"cddb_follow_file",                        CV_TYPE_BOOL,    &CDDB_FOLLOW_FILE                       },
-    {"cddb_use_dlm",                            CV_TYPE_BOOL,    &CDDB_USE_DLM                           },
-    {"cddb_use_local_access",                   CV_TYPE_BOOL,    &CDDB_USE_LOCAL_ACCESS                  },
-
-    {"cddb_search_in_all_fields",               CV_TYPE_BOOL,    &CDDB_SEARCH_IN_ALL_FIELDS              },
-    {"cddb_search_in_artist_field",             CV_TYPE_BOOL,    &CDDB_SEARCH_IN_ARTIST_FIELD            },
-    {"cddb_search_in_title_field",              CV_TYPE_BOOL,    &CDDB_SEARCH_IN_TITLE_FIELD             },
-    {"cddb_search_in_track_name_field",         CV_TYPE_BOOL,    &CDDB_SEARCH_IN_TRACK_NAME_FIELD        },
-    {"cddb_search_in_other_field",              CV_TYPE_BOOL,    &CDDB_SEARCH_IN_OTHER_FIELD             },
-    {"cddb_show_categories",                    CV_TYPE_BOOL,    &CDDB_SHOW_CATEGORIES                   },
-
-    {"cddb_search_in_all_categories",           CV_TYPE_BOOL,    &CDDB_SEARCH_IN_ALL_CATEGORIES          },
-    {"cddb_search_in_blues_categories",         CV_TYPE_BOOL,    &CDDB_SEARCH_IN_BLUES_CATEGORY          },
-    {"cddb_search_in_classical_categories",     CV_TYPE_BOOL,    &CDDB_SEARCH_IN_CLASSICAL_CATEGORY      },
-    {"cddb_search_in_country_categories",       CV_TYPE_BOOL,    &CDDB_SEARCH_IN_COUNTRY_CATEGORY        },
-    {"cddb_search_in_folk_categories",          CV_TYPE_BOOL,    &CDDB_SEARCH_IN_FOLK_CATEGORY           },
-    {"cddb_search_in_jazz_categories",          CV_TYPE_BOOL,    &CDDB_SEARCH_IN_JAZZ_CATEGORY           },
-    {"cddb_search_in_misc_categories",          CV_TYPE_BOOL,    &CDDB_SEARCH_IN_MISC_CATEGORY           },
-    {"cddb_search_in_newage_categories",        CV_TYPE_BOOL,    &CDDB_SEARCH_IN_NEWAGE_CATEGORY         },
-    {"cddb_search_in_reggae_categories",        CV_TYPE_BOOL,    &CDDB_SEARCH_IN_REGGAE_CATEGORY         },
-    {"cddb_search_in_rock_categories",          CV_TYPE_BOOL,    &CDDB_SEARCH_IN_ROCK_CATEGORY           },
-    {"cddb_search_in_soundtrack_categories",    CV_TYPE_BOOL,    &CDDB_SEARCH_IN_SOUNDTRACK_CATEGORY     },
-
-    {"cddb_set_to_all_fields",                  CV_TYPE_BOOL,    &CDDB_SET_TO_ALL_FIELDS                 },
-    {"cddb_set_to_title",                       CV_TYPE_BOOL,    &CDDB_SET_TO_TITLE                      },
-    {"cddb_set_to_artist",                      CV_TYPE_BOOL,    &CDDB_SET_TO_ARTIST                     },
-    {"cddb_set_to_album",                       CV_TYPE_BOOL,    &CDDB_SET_TO_ALBUM                      },
-    {"cddb_set_to_year",                        CV_TYPE_BOOL,    &CDDB_SET_TO_YEAR                       },
-    {"cddb_set_to_track",                       CV_TYPE_BOOL,    &CDDB_SET_TO_TRACK                      },
-    {"cddb_set_to_track_total",                 CV_TYPE_BOOL,    &CDDB_SET_TO_TRACK_TOTAL                },
-    {"cddb_set_to_genre",                       CV_TYPE_BOOL,    &CDDB_SET_TO_GENRE                      },
-    {"cddb_set_to_file_name",                   CV_TYPE_BOOL,    &CDDB_SET_TO_FILE_NAME                  },
-
-    {"cddb_run_scanner",                        CV_TYPE_BOOL,    &CDDB_RUN_SCANNER                       },
-
-    {"set_search_window_position",              CV_TYPE_BOOL,    &SET_SEARCH_WINDOW_POSITION             },
-    {"search_window_x",                         CV_TYPE_INT,     &SEARCH_WINDOW_X                        },
-    {"search_window_y",                         CV_TYPE_INT,     &SEARCH_WINDOW_Y                        },
-    {"search_window_height",                    CV_TYPE_INT,     &SEARCH_WINDOW_HEIGHT                   },
-    {"search_window_width",                     CV_TYPE_INT,     &SEARCH_WINDOW_WIDTH                    },
-    {"search_in_filename",                      CV_TYPE_BOOL,    &SEARCH_IN_FILENAME                     },
-    {"search_in_tag",                           CV_TYPE_BOOL,    &SEARCH_IN_TAG                          },
-    {"search_case_sensitive",                   CV_TYPE_BOOL,    &SEARCH_CASE_SENSITIVE                  },
-
-    {"scan_tag_default_mask",                   CV_TYPE_STRING,  &SCAN_TAG_DEFAULT_MASK                  },
-    {"rename_file_default_mask",                CV_TYPE_STRING,  &RENAME_FILE_DEFAULT_MASK               },
-    {"rename_directory_default_mask",           CV_TYPE_STRING,  &RENAME_DIRECTORY_DEFAULT_MASK          },
-    {"rename_directory_with_mask",              CV_TYPE_BOOL,    &RENAME_DIRECTORY_WITH_MASK             },
-
-    { "options_notebook_page", CV_TYPE_INT, &OPTIONS_NOTEBOOK_PAGE }
-};
-
-
-
 
 /*************
  * Functions *
  *************/
 
-/*
- * Define and Load default values into config variables
- */
-void Init_Config_Variables (void)
-{
-    const gchar *music_dir;
-
-    /*
-     * Common
-     */
-    LOAD_ON_STARTUP               = 0;
-    BROWSE_SUBDIR                 = 1;
-#ifdef G_OS_WIN32
-    BROWSE_HIDDEN_DIR             = 1;
-#else /* !G_OS_WIN32 */
-    BROWSE_HIDDEN_DIR             = 0;
-#endif /* !G_OS_WIN32 */
-    OPEN_SELECTED_BROWSER_NODE    = 1;
-
-    music_dir = g_get_user_special_dir (G_USER_DIRECTORY_MUSIC);
-    DEFAULT_PATH_TO_MP3 = music_dir ? g_strdup (music_dir)
-                                    : g_strdup (g_get_home_dir ());
-
-    /*
-     * Misc
-     */
-    SET_MAIN_WINDOW_POSITION        = 1; // Set it to '0' if problem with some Windows Manager
-    MAIN_WINDOW_X                   = -1; // '-1' lets the Windows Manager to place the window
-    MAIN_WINDOW_Y                   = -1;
-    MAIN_WINDOW_WIDTH               = 1040;
-    MAIN_WINDOW_HEIGHT              = -1;
-    PANE_HANDLE_POSITION1           = 660;
-    PANE_HANDLE_POSITION2           = 360;
-    PANE_HANDLE_POSITION3           = 300;
-    PANE_HANDLE_POSITION4           = 300;
-    SHOW_HEADER_INFO                = 1;
-    CHANGED_FILES_DISPLAYED_TO_RED  = 0;
-    CHANGED_FILES_DISPLAYED_TO_BOLD = 1;
-
-    DATE_AUTO_COMPLETION                    = 1;
-    NUMBER_TRACK_FORMATED                   = 1;
-    NUMBER_TRACK_FORMATED_SPIN_BUTTON       = 2;
-    PAD_DISC_NUMBER = 1;
-    PAD_DISC_NUMBER_DIGITS = 1;
-    SET_FOCUS_TO_SAME_TAG_FIELD             = 1;
-    SET_FOCUS_TO_FIRST_TAG_FIELD            = 0;
-    SORTING_FILE_MODE                       = SORTING_BY_ASCENDING_FILENAME;
-#ifdef G_OS_WIN32
-    SORTING_FILE_CASE_SENSITIVE             = 1;
-#else /* !G_OS_WIN32 */
-    SORTING_FILE_CASE_SENSITIVE             = 0;
-#endif /* !G_OS_WIN32 */
-    LOG_MAX_LINES                           = 50;
-    SHOW_LOG_VIEW                           = 1;
-
-#ifdef G_OS_WIN32
-    AUDIO_FILE_PLAYER                       = ET_Win32_Get_Audio_File_Player();
-#else /* !G_OS_WIN32 */
-    AUDIO_FILE_PLAYER                       = g_strdup("xdg-open");
-#endif /* !G_OS_WIN32 */
-
-    /*
-     * File Settings
-     */
-    REPLACE_ILLEGAL_CHARACTERS_IN_FILENAME      = 1;
-    FILENAME_EXTENSION_LOWER_CASE               = 1;
-    FILENAME_EXTENSION_UPPER_CASE               = 0;
-    FILENAME_EXTENSION_NO_CHANGE                = 0;
-    PRESERVE_MODIFICATION_TIME                  = 0;
-    UPDATE_PARENT_DIRECTORY_MODIFICATION_TIME   = 1;
-
-    FILENAME_CHARACTER_SET_OTHER                = 1;
-    FILENAME_CHARACTER_SET_APPROXIMATE          = 0;
-    FILENAME_CHARACTER_SET_DISCARD              = 0;
-
-    /*
-     * Tag Settings
-     */
-    STRIP_TAG_WHEN_EMPTY_FIELDS                     = 1;
-    CONVERT_OLD_ID3V2_TAG_VERSION                   = 1;
-    USE_NON_STANDARD_ID3_READING_CHARACTER_SET      = 0;
-    FILE_READING_ID3V1V2_CHARACTER_SET              = g_strdup("UTF-8");
-    FILE_WRITING_ID3V2_WRITE_TAG                    = 1;
-#ifdef G_OS_WIN32
-    FILE_WRITING_ID3V2_VERSION_4                    = 0;
-#else /* !G_OS_WIN32 */
-    FILE_WRITING_ID3V2_VERSION_4                    = 1;
-#endif /* !G_OS_WIN32 */
-    FILE_WRITING_ID3V2_USE_CRC32                    = 0;
-    FILE_WRITING_ID3V2_USE_COMPRESSION              = 0;
-    FILE_WRITING_ID3V2_USE_UNICODE_CHARACTER_SET    = 1;
-#ifdef G_OS_WIN32
-    FILE_WRITING_ID3V2_UNICODE_CHARACTER_SET        = g_strdup("UTF-16");
-#else /* !G_OS_WIN32 */
-    FILE_WRITING_ID3V2_UNICODE_CHARACTER_SET        = g_strdup("UTF-8");
-#endif /* !G_OS_WIN32 */
-    FILE_WRITING_ID3V2_NO_UNICODE_CHARACTER_SET     = g_strdup("ISO-8859-1");
-    FILE_WRITING_ID3V2_ICONV_OPTIONS_NO             = 1;
-    FILE_WRITING_ID3V2_ICONV_OPTIONS_TRANSLIT       = 0;
-    FILE_WRITING_ID3V2_ICONV_OPTIONS_IGNORE         = 0;
-    FILE_WRITING_ID3V1_WRITE_TAG                    = 1;
-    FILE_WRITING_ID3V1_CHARACTER_SET                = g_strdup("ISO-8859-1");
-    FILE_WRITING_ID3V1_ICONV_OPTIONS_NO             = 0;
-    FILE_WRITING_ID3V1_ICONV_OPTIONS_TRANSLIT       = 1;
-    FILE_WRITING_ID3V1_ICONV_OPTIONS_IGNORE         = 0;
-
-    VORBIS_SPLIT_FIELD_TITLE                          = 0;
-    VORBIS_SPLIT_FIELD_ARTIST                         = 0;
-    VORBIS_SPLIT_FIELD_ALBUM                          = 0;
-    VORBIS_SPLIT_FIELD_GENRE                          = 0;
-    VORBIS_SPLIT_FIELD_COMMENT                        = 0;
-    VORBIS_SPLIT_FIELD_COMPOSER                       = 0;
-    VORBIS_SPLIT_FIELD_ORIG_ARTIST                    = 0;
-    /*
-     * Scanner
-     */
-    SCANNER_TYPE                              = SCANNER_FILL_TAG;
-    SCAN_MASK_EDITOR_BUTTON                   = 0;
-    SCAN_LEGEND_BUTTON                        = 0;
-    FTS_CONVERT_UNDERSCORE_AND_P20_INTO_SPACE = 1;
-    FTS_CONVERT_SPACE_INTO_UNDERSCORE         = 0;
-    RFS_CONVERT_UNDERSCORE_AND_P20_INTO_SPACE = 1;
-    RFS_CONVERT_SPACE_INTO_UNDERSCORE         = 0;
-    PFS_DONT_UPPER_SOME_WORDS                 = 0;
-    OVERWRITE_TAG_FIELD                       = 1;
-    SET_DEFAULT_COMMENT                       = 0;
-    DEFAULT_COMMENT                           = g_strdup("Tagged with EasyTAG");
-    SET_CRC32_COMMENT                         = 0;
-    OPEN_SCANNER_WINDOW_ON_STARTUP            = 0;
-    SET_SCANNER_WINDOW_POSITION               = 1; // Set it to '0' if problem with some Windows Manager
-    SCANNER_WINDOW_X                          = -1;
-    SCANNER_WINDOW_Y                          = -1;
-
-    /*
-     * Confirmation
-     */
-    CONFIRM_BEFORE_EXIT    = 1;
-    CONFIRM_WRITE_TAG      = 1;
-    CONFIRM_RENAME_FILE    = 1;
-    CONFIRM_DELETE_FILE    = 1;
-    CONFIRM_WRITE_PLAYLIST = 1;
-
-    /*
-     * Scanner window
-     */
-    PROCESS_FILENAME_FIELD             = 0;
-    PROCESS_TITLE_FIELD                = 1;
-    PROCESS_ARTIST_FIELD               = 1;
-    PROCESS_ALBUM_ARTIST_FIELD         = 1;
-    PROCESS_ALBUM_FIELD                = 1;
-    PROCESS_GENRE_FIELD                = 1;
-    PROCESS_COMMENT_FIELD              = 1;
-    PROCESS_COMPOSER_FIELD             = 1;
-    PROCESS_ORIG_ARTIST_FIELD          = 1;
-    PROCESS_COPYRIGHT_FIELD            = 1;
-    PROCESS_URL_FIELD                  = 1;
-    PROCESS_ENCODED_BY_FIELD           = 1;
-
-    PROCESS_FIELDS_CONVERT_FROM        = NULL;
-    PROCESS_FIELDS_CONVERT_TO          = NULL;
-
-    PF_CONVERT_INTO_SPACE              = 1;
-    PF_CONVERT_SPACE                   = 0;
-    PF_CONVERT                         = 0;
-    PF_CONVERT_ALL_UPPERCASE           = 0;
-    PF_CONVERT_ALL_DOWNCASE            = 0;
-    PF_CONVERT_FIRST_LETTER_UPPERCASE  = 0;
-    PF_CONVERT_FIRST_LETTERS_UPPERCASE = 1;
-    PF_DETECT_ROMAN_NUMERALS           = 1;
-    PF_REMOVE_SPACE                    = 0;
-    PF_INSERT_SPACE                    = 0;
-    PF_ONLY_ONE_SPACE                  = 1;
-
-    /*
-     * Playlist window
-     */
-    PLAYLIST_NAME                   = g_strdup("playlist_%a_-_%b");
-    PLAYLIST_USE_MASK_NAME          = 0;
-    PLAYLIST_USE_DIR_NAME           = 1;
-    PLAYLIST_ONLY_SELECTED_FILES    = 1;
-    PLAYLIST_FULL_PATH              = 0;
-    PLAYLIST_RELATIVE_PATH          = 1;
-    PLAYLIST_CREATE_IN_PARENT_DIR   = 0;
-    PLAYLIST_USE_DOS_SEPARATOR      = 0;
-    PLAYLIST_CONTENT_NONE           = 0;
-    PLAYLIST_CONTENT_FILENAME       = 1;
-    PLAYLIST_CONTENT_MASK           = 0;
-    PLAYLIST_CONTENT_MASK_VALUE     = g_strdup("%n/%l - %a - %b - %t");
-
-    PLAYLIST_WINDOW_X               = -1;
-    PLAYLIST_WINDOW_Y               = -1;
-
-    /*
-     * Load File window
-     */
-    LOAD_FILE_RUN_SCANNER     = 0;
-    LOAD_FILE_WINDOW_X        = -1;
-    LOAD_FILE_WINDOW_Y        = -1;
-    LOAD_FILE_WINDOW_WIDTH    = -1;
-    LOAD_FILE_WINDOW_HEIGHT   = -1;
-
-    /*
-     * CDDB window
-     */
-    CDDB_SERVER_NAME_AUTOMATIC_SEARCH       = g_strdup("freedb.freedb.org");
-    CDDB_SERVER_PORT_AUTOMATIC_SEARCH       = 80;
-    CDDB_SERVER_CGI_PATH_AUTOMATIC_SEARCH   = g_strdup("/~cddb/cddb.cgi");
-    CDDB_SERVER_NAME_AUTOMATIC_SEARCH2      = g_strdup("freedb.musicbrainz.org");
-    CDDB_SERVER_PORT_AUTOMATIC_SEARCH2      = 80;
-    CDDB_SERVER_CGI_PATH_AUTOMATIC_SEARCH2  = g_strdup("/~cddb/cddb.cgi");
-    CDDB_SERVER_NAME_MANUAL_SEARCH          = g_strdup("www.gnudb.org");
-    CDDB_SERVER_PORT_MANUAL_SEARCH          = 80;
-    CDDB_SERVER_CGI_PATH_MANUAL_SEARCH      = g_strdup("/~cddb/cddb.cgi");
-    CDDB_LOCAL_PATH                         = NULL;
-    CDDB_USE_PROXY                          = 0;
-    CDDB_PROXY_NAME                         = g_strdup("localhost");
-    CDDB_PROXY_PORT                         = 8080;
-    CDDB_PROXY_USER_NAME                    = NULL;
-    CDDB_PROXY_USER_PASSWORD                = NULL;
-
-    SET_CDDB_WINDOW_POSITION      = 1; // Set it to '0' if problem with some Windows Manager
-    CDDB_WINDOW_X                 = -1;
-    CDDB_WINDOW_Y                 = -1;
-    CDDB_WINDOW_WIDTH             = 660;
-    CDDB_WINDOW_HEIGHT            = 470;
-    CDDB_PANE_HANDLE_POSITION     = 350;
-
-    CDDB_FOLLOW_FILE              = 1;
-    CDDB_USE_DLM                  = 0;
-    CDDB_USE_LOCAL_ACCESS         = 0;
-
-    CDDB_SEARCH_IN_ALL_FIELDS           = 0;
-    CDDB_SEARCH_IN_ARTIST_FIELD         = 1;
-    CDDB_SEARCH_IN_TITLE_FIELD          = 1;
-    CDDB_SEARCH_IN_TRACK_NAME_FIELD     = 0;
-    CDDB_SEARCH_IN_OTHER_FIELD          = 0;
-    CDDB_SHOW_CATEGORIES                = 0;
-
-    CDDB_SEARCH_IN_ALL_CATEGORIES       = 1;
-    CDDB_SEARCH_IN_BLUES_CATEGORY       = 0;
-    CDDB_SEARCH_IN_CLASSICAL_CATEGORY   = 0;
-    CDDB_SEARCH_IN_COUNTRY_CATEGORY     = 0;
-    CDDB_SEARCH_IN_FOLK_CATEGORY        = 0;
-    CDDB_SEARCH_IN_JAZZ_CATEGORY        = 0;
-    CDDB_SEARCH_IN_MISC_CATEGORY        = 1;
-    CDDB_SEARCH_IN_NEWAGE_CATEGORY      = 1;
-    CDDB_SEARCH_IN_REGGAE_CATEGORY      = 0;
-    CDDB_SEARCH_IN_ROCK_CATEGORY        = 1;
-    CDDB_SEARCH_IN_SOUNDTRACK_CATEGORY  = 0;
-
-    CDDB_SET_TO_ALL_FIELDS  = 1;
-    CDDB_SET_TO_TITLE       = 1;
-    CDDB_SET_TO_ARTIST      = 0;
-    CDDB_SET_TO_ALBUM       = 0;
-    CDDB_SET_TO_YEAR        = 0;
-    CDDB_SET_TO_TRACK       = 1;
-    CDDB_SET_TO_TRACK_TOTAL = 1;
-    CDDB_SET_TO_GENRE       = 0;
-    CDDB_SET_TO_FILE_NAME   = 1;
-
-    CDDB_RUN_SCANNER        = 0;
-
-    /*
-     * Search window
-     */
-    SET_SEARCH_WINDOW_POSITION  = 1; // Set it to '0' if problem with some Windows Manager
-    SEARCH_WINDOW_X             = -1;
-    SEARCH_WINDOW_Y             = -1;
-    SEARCH_WINDOW_HEIGHT        = 350;
-    SEARCH_WINDOW_WIDTH         = 650;
-    SEARCH_IN_FILENAME          = 1;
-    SEARCH_IN_TAG               = 1;
-    SEARCH_CASE_SENSITIVE       = 0;
-
-    /*
-     * Masks
-     */
-    SCAN_TAG_DEFAULT_MASK           = NULL;
-    RENAME_FILE_DEFAULT_MASK        = NULL;
-    RENAME_DIRECTORY_DEFAULT_MASK   = NULL;
-    RENAME_DIRECTORY_WITH_MASK      = 0;
-
-    /*
-     * Other parameters
-     */
-    OPTIONS_NOTEBOOK_PAGE = 0;
-}
-
-
-
-/*
- * Function called when pressing the "Save" button of the preferences window.
- * Save into the config variables the settings of each tab of the Preferences window...
- * If settings needs to be "shown/applied" to the corresponding window, we do it
- */
 static void
-Apply_Changes_Of_Preferences_Window (void)
+check_default_path (void)
 {
-    gchar *temp;
-    int active;
-    ET_Sorting_Type temp_sort;
-    gint column_id;
-    GtkTreeViewColumn * column;
+    GVariant *default_path;
+    const gchar *path;
 
-    if (OptionsWindow)
-    {
-        /* Common */
-        LOAD_ON_STARTUP               = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(LoadOnStartup));
-        if (DEFAULT_PATH_TO_MP3) g_free(DEFAULT_PATH_TO_MP3);
-        DEFAULT_PATH_TO_MP3           = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(DefaultPathToMp3))))); // Saved in UTF-8
-#if 0
-#ifdef G_OS_WIN32
-        ET_Win32_Path_Replace_Backslashes(DEFAULT_PATH_TO_MP3);
-#endif /* G_OS_WIN32 */
-#endif
-        BROWSE_SUBDIR                 = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(BrowseSubdir));
-        BROWSE_HIDDEN_DIR             = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(BrowseHiddendir));
-        OPEN_SELECTED_BROWSER_NODE    = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(OpenSelectedBrowserNode));
-
-        /* User interface */
-        SHOW_HEADER_INFO              = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ShowHeaderInfos));
-        // We reload the list if the selected style have changed
-        if (CHANGED_FILES_DISPLAYED_TO_RED != gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ChangedFilesDisplayedToRed)))
-        {
-            CHANGED_FILES_DISPLAYED_TO_RED  = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ChangedFilesDisplayedToRed));
-            CHANGED_FILES_DISPLAYED_TO_BOLD = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ChangedFilesDisplayedToBold));
-            Browser_List_Refresh_Whole_List();
-        }
+    default_path = g_settings_get_value (MainSettings, "default-path");
+    path = g_variant_get_bytestring (default_path);
 
-        /* Misc */
-        DATE_AUTO_COMPLETION                   = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(DateAutoCompletion));
-        NUMBER_TRACK_FORMATED                  = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(NumberTrackFormated));
-        NUMBER_TRACK_FORMATED_SPIN_BUTTON      = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(NumberTrackFormatedSpinButton));
-        PAD_DISC_NUMBER = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (pad_disc_number));
-        PAD_DISC_NUMBER_DIGITS = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pad_disc_number_spinbutton));
-        SORTING_FILE_CASE_SENSITIVE            = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(SortingFileCaseSensitive));
-        SET_FOCUS_TO_SAME_TAG_FIELD            = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(SetFocusToSameTagField));
-        SET_FOCUS_TO_FIRST_TAG_FIELD           = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(SetFocusToFirstTagField));
-        LOG_MAX_LINES                          = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(LogMaxLinesSpinButton));
-        SHOW_LOG_VIEW                          = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ShowLogView));
-
-        temp_sort = gtk_combo_box_get_active (GTK_COMBO_BOX (SortingFileCombo));
-        column_id = temp_sort / 2;
-        if (SORTING_FILE_MODE < SORTING_BY_ASCENDING_CREATION_DATE)
-        {
-            gtk_tree_view_column_set_sort_indicator (get_column_for_column_id (SORTING_FILE_MODE / 2),
-                                                     FALSE);
-        }
-        if (temp_sort < SORTING_BY_ASCENDING_CREATION_DATE)
-        {
-            column = get_column_for_column_id (column_id);
-            set_sorting_indicator_for_column_id (column_id, temp_sort, column);
-        }
-        SORTING_FILE_MODE = temp_sort;
-        Browser_List_Refresh_Sort ();
-
-        if (AUDIO_FILE_PLAYER) g_free(AUDIO_FILE_PLAYER);
-        AUDIO_FILE_PLAYER                       = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(FilePlayerCombo)))));
-
-        /* File Settings */
-        REPLACE_ILLEGAL_CHARACTERS_IN_FILENAME    = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ReplaceIllegalCharactersInFilename));
-        FILENAME_EXTENSION_LOWER_CASE             = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(FilenameExtensionLowerCase));
-        FILENAME_EXTENSION_UPPER_CASE             = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(FilenameExtensionUpperCase));
-        FILENAME_EXTENSION_NO_CHANGE              = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(FilenameExtensionNoChange));
-        PRESERVE_MODIFICATION_TIME                = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(PreserveModificationTime));
-        UPDATE_PARENT_DIRECTORY_MODIFICATION_TIME = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(UpdateParentDirectoryModificationTime));
-
-        FILENAME_CHARACTER_SET_OTHER              = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(FilenameCharacterSetOther));
-        FILENAME_CHARACTER_SET_APPROXIMATE        = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(FilenameCharacterSetApproximate));
-        FILENAME_CHARACTER_SET_DISCARD            = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(FilenameCharacterSetDiscard));
-
-        /* Tag Settings */
-        STRIP_TAG_WHEN_EMPTY_FIELDS                = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(StripTagWhenEmptyFields));
-        CONVERT_OLD_ID3V2_TAG_VERSION              = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ConvertOldId3v2TagVersion));
-        USE_NON_STANDARD_ID3_READING_CHARACTER_SET = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(UseNonStandardId3ReadingCharacterSet));
-
-#ifdef ENABLE_ID3LIB
-        active = gtk_combo_box_get_active(GTK_COMBO_BOX(FileWritingId3v2VersionCombo));
-        FILE_WRITING_ID3V2_VERSION_4 = !active;
-#else
-        FILE_WRITING_ID3V2_VERSION_4 = 1;
-#endif
-        temp = Get_Active_Combo_Box_Item(GTK_COMBO_BOX(FileReadingId3v1v2CharacterSetCombo));
-        FILE_READING_ID3V1V2_CHARACTER_SET = Charset_Get_Name_From_Title(temp);
-        g_free(temp);
-
-        FILE_WRITING_ID3V2_WRITE_TAG                 = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(FileWritingId3v2WriteTag));
-        FILE_WRITING_ID3V2_USE_CRC32                 = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(FileWritingId3v2UseCrc32));
-        FILE_WRITING_ID3V2_USE_COMPRESSION           = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(FileWritingId3v2UseCompression));
-        FILE_WRITING_ID3V2_TEXT_ONLY_GENRE           = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(FileWritingId3v2TextOnlyGenre));
-        FILE_WRITING_ID3V2_USE_UNICODE_CHARACTER_SET = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(FileWritingId3v2UseUnicodeCharacterSet));
-
-        active = gtk_combo_box_get_active(GTK_COMBO_BOX(FileWritingId3v2UnicodeCharacterSetCombo));
-        FILE_WRITING_ID3V2_UNICODE_CHARACTER_SET     = (active == 1) ? "UTF-16" : "UTF-8";
-
-        temp = Get_Active_Combo_Box_Item(GTK_COMBO_BOX(FileWritingId3v2NoUnicodeCharacterSetCombo));
-        FILE_WRITING_ID3V2_NO_UNICODE_CHARACTER_SET  = Charset_Get_Name_From_Title(temp);
-        g_free(temp);
-
-        FILE_WRITING_ID3V2_ICONV_OPTIONS_NO          = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(FileWritingId3v2IconvOptionsNo));
-        FILE_WRITING_ID3V2_ICONV_OPTIONS_TRANSLIT    = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(FileWritingId3v2IconvOptionsTranslit));
-        FILE_WRITING_ID3V2_ICONV_OPTIONS_IGNORE      = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(FileWritingId3v2IconvOptionsIgnore));
-
-        FILE_WRITING_ID3V1_WRITE_TAG                 = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(FileWritingId3v1WriteTag));
-        temp = Get_Active_Combo_Box_Item(GTK_COMBO_BOX(FileWritingId3v1CharacterSetCombo));
-        FILE_WRITING_ID3V1_CHARACTER_SET             = Charset_Get_Name_From_Title(temp);
-        g_free(temp);
-
-        FILE_WRITING_ID3V1_ICONV_OPTIONS_NO          = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(FileWritingId3v1IconvOptionsNo));
-        FILE_WRITING_ID3V1_ICONV_OPTIONS_TRANSLIT    = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(FileWritingId3v1IconvOptionsTranslit));
-        FILE_WRITING_ID3V1_ICONV_OPTIONS_IGNORE      = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(FileWritingId3v1IconvOptionsIgnore));
-
-        VORBIS_SPLIT_FIELD_TITLE                       = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(VorbisSplitFieldTitle));
-        VORBIS_SPLIT_FIELD_ARTIST                      = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(VorbisSplitFieldArtist));
-        VORBIS_SPLIT_FIELD_ALBUM                       = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(VorbisSplitFieldAlbum));
-        VORBIS_SPLIT_FIELD_GENRE                       = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(VorbisSplitFieldGenre));
-        VORBIS_SPLIT_FIELD_COMMENT                     = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(VorbisSplitFieldComment));
-        VORBIS_SPLIT_FIELD_COMPOSER                    = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(VorbisSplitFieldComposer));
-        VORBIS_SPLIT_FIELD_ORIG_ARTIST                 = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(VorbisSplitFieldOrigArtist));
-
-        /* Scanner */
-        // Fill Tag Scanner
-        FTS_CONVERT_UNDERSCORE_AND_P20_INTO_SPACE = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(FTSConvertUnderscoreAndP20IntoSpace));
-        FTS_CONVERT_SPACE_INTO_UNDERSCORE         = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(FTSConvertSpaceIntoUnderscore));
-        // Rename File Scanner
-        RFS_CONVERT_UNDERSCORE_AND_P20_INTO_SPACE = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(RFSConvertUnderscoreAndP20IntoSpace));
-        RFS_CONVERT_SPACE_INTO_UNDERSCORE         = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(RFSConvertSpaceIntoUnderscore));
-				RFS_REMOVE_SPACES                         = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(RFSRemoveSpaces));
-        // Process File Scanner
-        PFS_DONT_UPPER_SOME_WORDS                 = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(PFSDontUpperSomeWords));
-
-        OVERWRITE_TAG_FIELD = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(OverwriteTagField));
-        SET_DEFAULT_COMMENT = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(SetDefaultComment));
-        if (DEFAULT_COMMENT) g_free(DEFAULT_COMMENT);
-        DEFAULT_COMMENT     = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(DefaultComment)))));
-        SET_CRC32_COMMENT   = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(Crc32Comment));
-
-        OPEN_SCANNER_WINDOW_ON_STARTUP = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(OpenScannerWindowOnStartup));
-
-        /* CDDB */
-        if (CDDB_SERVER_NAME_AUTOMATIC_SEARCH) g_free(CDDB_SERVER_NAME_AUTOMATIC_SEARCH);
-        CDDB_SERVER_NAME_AUTOMATIC_SEARCH     = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(CddbServerNameAutomaticSearch)))));
-        CDDB_SERVER_PORT_AUTOMATIC_SEARCH     = atoi(gtk_entry_get_text(GTK_ENTRY(CddbServerPortAutomaticSearch)));
-        if (CDDB_SERVER_CGI_PATH_AUTOMATIC_SEARCH) g_free(CDDB_SERVER_CGI_PATH_AUTOMATIC_SEARCH);
-        CDDB_SERVER_CGI_PATH_AUTOMATIC_SEARCH = g_strdup(gtk_entry_get_text(GTK_ENTRY(CddbServerCgiPathAutomaticSearch)));
-
-        if (CDDB_SERVER_NAME_AUTOMATIC_SEARCH2) g_free(CDDB_SERVER_NAME_AUTOMATIC_SEARCH2);
-        CDDB_SERVER_NAME_AUTOMATIC_SEARCH2     = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(CddbServerNameAutomaticSearch2)))));
-        CDDB_SERVER_PORT_AUTOMATIC_SEARCH2     = atoi(gtk_entry_get_text(GTK_ENTRY(CddbServerPortAutomaticSearch2)));
-        if (CDDB_SERVER_CGI_PATH_AUTOMATIC_SEARCH2) g_free(CDDB_SERVER_CGI_PATH_AUTOMATIC_SEARCH2);
-        CDDB_SERVER_CGI_PATH_AUTOMATIC_SEARCH2 = g_strdup(gtk_entry_get_text(GTK_ENTRY(CddbServerCgiPathAutomaticSearch2)));
-
-        if (CDDB_SERVER_NAME_MANUAL_SEARCH) g_free(CDDB_SERVER_NAME_MANUAL_SEARCH);
-        CDDB_SERVER_NAME_MANUAL_SEARCH     = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(CddbServerNameManualSearch)))));
-        CDDB_SERVER_PORT_MANUAL_SEARCH     = atoi(gtk_entry_get_text(GTK_ENTRY(CddbServerPortManualSearch)));
-        if (CDDB_SERVER_CGI_PATH_MANUAL_SEARCH) g_free(CDDB_SERVER_CGI_PATH_MANUAL_SEARCH);
-        CDDB_SERVER_CGI_PATH_MANUAL_SEARCH = g_strdup(gtk_entry_get_text(GTK_ENTRY(CddbServerCgiPathManualSearch)));
-
-        if (CDDB_LOCAL_PATH) g_free(CDDB_LOCAL_PATH);
-        CDDB_LOCAL_PATH = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(CddbLocalPath)))));
-
-        CDDB_USE_PROXY       = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbUseProxy));
-        if (CDDB_PROXY_NAME) g_free(CDDB_PROXY_NAME);
-        CDDB_PROXY_NAME      = g_strdup(gtk_entry_get_text(GTK_ENTRY(CddbProxyName)));
-        CDDB_PROXY_PORT      = atoi(gtk_entry_get_text(GTK_ENTRY(CddbProxyPort)));
-        if (CDDB_PROXY_USER_NAME) g_free(CDDB_PROXY_USER_NAME);
-        CDDB_PROXY_USER_NAME          = g_strdup(gtk_entry_get_text(GTK_ENTRY(CddbProxyUserName)));
-        if (CDDB_PROXY_USER_PASSWORD) g_free(CDDB_PROXY_USER_PASSWORD);
-        CDDB_PROXY_USER_PASSWORD      = g_strdup(gtk_entry_get_text(GTK_ENTRY(CddbProxyUserPassword)));
-
-        CDDB_FOLLOW_FILE      = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbFollowFile));
-        CDDB_USE_DLM          = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(CddbUseDLM));
-
-        /* Confirmation */
-        CONFIRM_BEFORE_EXIT    = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ConfirmBeforeExit));
-        CONFIRM_WRITE_TAG      = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ConfirmWriteTag));
-        CONFIRM_RENAME_FILE    = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ConfirmRenameFile));
-        CONFIRM_DELETE_FILE    = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ConfirmDeleteFile));
-        CONFIRM_WRITE_PLAYLIST = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ConfirmWritePlayList));
-        CONFIRM_WHEN_UNSAVED_FILES = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ConfirmWhenUnsavedFiles));
-
-        /* Parameters and variables of Scanner Window are in "scan.c" file */
-        /* Parameters and variables of Cddb Window are in "cddb.c" file */
-    }
-
-    /*
-     * Changes to apply to :
-     */
-    if (MainWindow)
+    if (!*path)
     {
-        if (SHOW_HEADER_INFO) gtk_widget_show_all(HeaderInfosTable);
-        else                  gtk_widget_hide(HeaderInfosTable);
-
-        if (SHOW_LOG_VIEW)  gtk_widget_show_all(LogArea);
-        else                gtk_widget_hide(LogArea);
-
-        /* Update state of check-menu-item into main/popup menu to browse subdirs */
-        Check_Menu_Item_Update_Browse_Subdir();
-
-        /* Update state of check-menu-item into main/popup menu to show hidden directories */
-        Check_Menu_Item_Update_Browse_Hidden_Dir();
-
-        /* Reload if number of character changed for track list */
-        //Load_Track_List_To_UI();
-
-        /* Reload directory, in case we have changed BROWSE_HIDDEN_DIR */
-        // FIX ME : commented as it reloads files...
-        //Browser_Tree_Rebuild(NULL);
+        path = g_get_user_special_dir (G_USER_DIRECTORY_MUSIC);
+        g_settings_set_value (MainSettings, "default-path",
+                              g_variant_new_bytestring (path ? path
+                                                             : g_get_home_dir ()));
     }
 
-    if (ScannerWindow)
-    {
-        gtk_window_set_transient_for (GTK_WINDOW (ScannerWindow),
-                                      GTK_WINDOW (MainWindow));
-    }
+    g_variant_unref (default_path);
 }
 
 /*
- * Save into the config variables the settings of each window
- *  - Position/size of the window
- *  - Specific options in the window
+ * Define and Load default values into config variables
  */
-static void
-Apply_Changes_Of_UI (void)
+void Init_Config_Variables (void)
 {
+    MainSettings = g_settings_new ("org.gnome.EasyTAG");
+
     /*
-     * Changes in user interface
+     * Common
      */
-
-    // Configuration of the main window (see easytag.c) - Function also called when destroying the window
-    MainWindow_Apply_Changes();
-
-    // Configuration of the preference window (see prefs.c) - Function also called when destroying the window
-    OptionsWindow_Apply_Changes();
-
-    // Configuration of the scanner window (see scan.c) - Function also called when destroying the window
-    ScannerWindow_Apply_Changes();
-
-    // Configuration of the cddb window (see cddb.c) - Function also called when destroying the window
-    Cddb_Window_Apply_Changes();
-
-    // Configuration of the playlist window (see misc.c) - Function also called when destroying the window
-    Write_Playlist_Window_Apply_Changes();
-
-    // Configuration of the search_file window (see misc.c) - Function also called when destroying the window
-    Search_File_Window_Apply_Changes();
-
-    // Configuration of the load_filename window (see misc.c) - Function also called when destroying the window
-    Load_Filename_Window_Apply_Changes();
-
-}
-
-void Save_Changes_Of_UI (void)
-{
-    Apply_Changes_Of_UI();
-    Save_Config_To_File();
-}
-
-void Save_Changes_Of_Preferences_Window (void)
-{
-    Apply_Changes_Of_Preferences_Window();
-    Save_Config_To_File();
-
-    Statusbar_Message(_("Configuration saved"),TRUE);
-}
-
-
-
-/*
- * Write the config file
- */
-static void
-Save_Config_To_File (void)
-{
-    gchar *file_path = NULL;
-    FILE *file;
-
-    file_path = g_build_filename (g_get_user_config_dir (), PACKAGE_TARNAME,
-                                  CONFIG_FILE, NULL);
-
-    if (!Create_Easytag_Directory () || (file = fopen (file_path, "w+")) == 0)
-    {
-        Log_Print (LOG_ERROR,
-                   _("Error: Cannot write configuration file: %s (%s)"),
-                   file_path, g_strerror(errno));
-    }
-    else
-    {
-        gint ConfigVarListLen = sizeof(Config_Variables)/sizeof(tConfigVariable);
-        gint i;
-        gchar *data = NULL;
-
-        for (i=0; i<ConfigVarListLen; i++)
-        {
-            switch (Config_Variables[i].type)
-            {
-                case CV_TYPE_INT:
-                {
-                    data = g_strdup_printf("%s=%i\n",Config_Variables[i].name,
-                                                     *(int *)Config_Variables[i].pointer);
-                    if (fwrite (data, strlen (data), 1, file) != 1)
-                    {
-                        Log_Print (LOG_ERROR,
-                                   _("Error while writing configuration file: %s"),
-                                   file_path);
-                        fclose (file);
-                        g_free (file_path);
-                        g_free (data);
-                        return;
-                    }
-                    g_free(data);
-                    break;
-                }
-                case CV_TYPE_BOOL:
-                {
-                    data = g_strdup_printf("%s=%i\n",Config_Variables[i].name,
-                                                     ( *(int *)Config_Variables[i].pointer ? 1 : 0 ));
-                    if (fwrite (data, strlen (data), 1, file) != 1)
-                    {
-                        Log_Print (LOG_ERROR,
-                                   _("Error while writing configuration file: %s"),
-                                   file_path);
-                        fclose (file);
-                        g_free (file_path);
-                        g_free (data);
-                        return;
-                    }
-                    g_free(data);
-                    break;
-                }
-                case CV_TYPE_STRING:
-                {
-                    /* Doesn't write datum if empty */
-                    if ( (*(char **)Config_Variables[i].pointer)==NULL ) break;
-
-                    data = g_strdup_printf("%s=%s\n",Config_Variables[i].name,
-                                                     *(char **)Config_Variables[i].pointer);
-                    if (fwrite (data, strlen (data), 1, file) != 1)
-                    {
-                        Log_Print (LOG_ERROR,
-                                   _("Error while writing configuration file: %s"),
-                                   file_path);
-                        fclose (file);
-                        g_free (file_path);
-                        g_free (data);
-                        return;
-                    }
-                    g_free(data);
-                    break;
-                }
-                default:
-                {
-                    Log_Print(LOG_ERROR,"ERROR: Can't save: type of config variable not supported "
-                              "for '%s'!",Config_Variables[i].name);
-                    break;
-                }
-            }
-        }
-        fclose(file);
-    }
-    g_free(file_path);
-}
-
-
-/*
- * Parse lines read (line as <var_description>=<value>) and load the values
- * into the corresponding config variables.
- */
-static void
-Set_Config (gchar *line)
-{
-    const gchar *var_descriptor;
-    const gchar *var_value;
-    gint ConfigVarListLen;
-    gint i;
-
-    g_return_if_fail (line != NULL);
-
-    if (*line=='\n' || *line=='#') return;
-
-    /* Cut string */
-    var_descriptor = strtok (line, "=");
-
-    if (!var_descriptor)
-    {
-        g_message ("Invalid configuration file line ‘%s’", line);
-        return;
-    }
-
-    var_value = strtok (NULL, "=");
-
-    if (!var_value)
-    {
-        g_message ("No value for configuration key ‘%s’", var_descriptor);
-        return;
-    }
-
-    ConfigVarListLen = sizeof(Config_Variables)/sizeof(tConfigVariable);
-    for (i=0; i<ConfigVarListLen; i++)
-    {
-        if (Config_Variables[i].name!=NULL && var_descriptor
-        && !strcmp(Config_Variables[i].name,var_descriptor))
-        {
-            switch (Config_Variables[i].type)
-            {
-                case CV_TYPE_INT:
-                {
-                    *(int *)Config_Variables[i].pointer = strtol(var_value, NULL, 10);
-                    break;
-                }
-
-                case CV_TYPE_BOOL:
-                {
-                    if (strtol(var_value, NULL, 10))
-                        *(int *)Config_Variables[i].pointer = 1;
-                    else
-                        *(int *)Config_Variables[i].pointer = 0;
-                    break;
-                }
-
-                case CV_TYPE_STRING:
-                {
-
-                    if (*(char **)Config_Variables[i].pointer != NULL)
-                    {
-                        g_free (*(char **)Config_Variables[i].pointer);
-                    }
-
-                    *(char **)Config_Variables[i].pointer = g_strdup (var_value);
-                    break;
-                }
-
-                default:
-                {
-                    Log_Print(LOG_ERROR,"ERROR: Can't read: type of config variable not supported "
-                              "for '%s'!",Config_Variables[i].name);
-                    break;
-                }
-            }
-        }
-    }
-}
-
-
-/*
- * Read config from config file
- */
-void Read_Config (void)
-{
-    gchar *file_path = NULL;
-    FILE *file;
-    gchar buffer[MAX_STRING_LEN];
-
-    /* The file to read */
-    file_path = g_build_filename (g_get_user_config_dir (), PACKAGE_TARNAME,
-                                  CONFIG_FILE, NULL);
-
-    if ((file = fopen (file_path,"r")) == 0)
-    {
-        Log_Print (LOG_ERROR, _("Cannot open configuration file '%s' (%s)"),
-                   file_path, g_strerror (errno));
-        Log_Print (LOG_OK, _("Loading default configuration"));
-    }else
-    {
-        while (fgets(buffer,sizeof(buffer),file))
-        {
-            if (buffer[strlen(buffer)-1]=='\n')
-                buffer[strlen(buffer)-1]='\0';
-            Set_Config(buffer);
-        }
-        fclose(file);
-
-        // Force this configuration! - Disabled as it is boring for russian people
-        //USE_ISO_8859_1_CHARACTER_SET_TRANSLATION = 1;
-        //USE_CHARACTER_SET_TRANSLATION            = 0;
-    }
-    g_free(file_path);
+    check_default_path ();
 }
 
-
 /*
  * check_or_create_file:
  * @filename: (type filename): the filename to create
@@ -1140,8 +139,8 @@ static void check_or_create_file (const gchar *filename)
     }
     else
     {
-        Log_Print (LOG_ERROR, _("Cannot create or open file '%s' (%s)"),
-                   CONFIG_FILE, g_strerror (errno));
+        Log_Print (LOG_ERROR, _("Cannot create or open file ‘%s’: %s"),
+                   filename, g_strerror (errno));
     }
 
     g_free (file_path);
@@ -1160,20 +159,10 @@ gboolean Setting_Create_Files (void)
 
     check_or_create_file (SCAN_TAG_MASKS_FILE);
     check_or_create_file (RENAME_FILE_MASKS_FILE);
-    check_or_create_file (RENAME_DIRECTORY_MASKS_FILE);
-    check_or_create_file (DEFAULT_PATH_TO_MP3_HISTORY_FILE);
-    check_or_create_file (DEFAULT_TAG_COMMENT_HISTORY_FILE);
     check_or_create_file (PATH_ENTRY_HISTORY_FILE);
-    check_or_create_file (PLAY_LIST_NAME_MASKS_FILE);
     check_or_create_file (RUN_PROGRAM_WITH_DIRECTORY_HISTORY_FILE);
     check_or_create_file (RUN_PROGRAM_WITH_FILE_HISTORY_FILE);
-    check_or_create_file (AUDIO_FILE_PLAYER_HISTORY_FILE);
     check_or_create_file (SEARCH_FILE_HISTORY_FILE);
-    check_or_create_file (FILE_TO_LOAD_HISTORY_FILE);
-    check_or_create_file (PLAYLIST_CONTENT_MASKS_FILE);
-    check_or_create_file (CDDB_SEARCH_STRING_HISTORY_FILE);
-    check_or_create_file (CDDB_SEARCH_STRING_IN_RESULT_HISTORY_FILE);
-    check_or_create_file (CDDB_LOCAL_PATH_HISTORY_FILE);
 
     return TRUE;
 }
@@ -1200,7 +189,7 @@ Save_List_Store_To_File (const gchar *filename, GtkListStore *liststore, gint co
 
     if (!Create_Easytag_Directory () || (file = fopen (file_path, "w+")) == NULL)
     {
-        Log_Print (LOG_ERROR, _("Error: Cannot write list to file: %s (%s)"),
+        Log_Print (LOG_ERROR, _("Cannot write list to file ‘%s’: %s"),
                    file_path, g_strerror (errno));
     }else
     {
@@ -1218,7 +207,7 @@ Save_List_Store_To_File (const gchar *filename, GtkListStore *liststore, gint co
             {
                 if (fwrite (data->str, data->len, 1, file) != 1)
                 {
-                    Log_Print (LOG_ERROR, _("Error while writing list file: %s"),
+                    Log_Print (LOG_ERROR, _("Error while writing list file ‘%s’"),
                                file_path);
                     fclose (file);
                     g_string_free (data, TRUE);
@@ -1253,7 +242,7 @@ Populate_List_Store_From_File (const gchar *filename, GtkListStore *liststore, g
 
     if ((file = fopen (file_path, "r")) == NULL)
     {
-        Log_Print (LOG_ERROR, _("Cannot open file '%s' (%s)"), file_path,
+        Log_Print (LOG_ERROR, _("Cannot open file ‘%s’: %s"), file_path,
                    g_strerror (errno));
     }else
     {
@@ -1297,8 +286,8 @@ Load_Scan_Tag_Masks_List (GtkListStore *liststore, gint colnum,
 
     if (!Populate_List_Store_From_File(SCAN_TAG_MASKS_FILE, liststore, colnum))
     {
-        // Fall back to defaults
-        Log_Print(LOG_OK,_("Loading default 'Fill Tag' masks…"));
+        /* Fall back to defaults. */
+        Log_Print (LOG_OK, _("Loading default ‘Fill Tag’ masks…"));
 
         while(fallback[i])
         {
@@ -1327,8 +316,8 @@ Load_Rename_File_Masks_List (GtkListStore *liststore, gint colnum,
 
     if (!Populate_List_Store_From_File(RENAME_FILE_MASKS_FILE, liststore, colnum))
     {
-        // Fall back to defaults
-        Log_Print(LOG_OK,_("Loading default 'Rename File' masks…"));
+        /* Fall back to defaults. */
+        Log_Print (LOG_OK, _("Loading default ‘Rename File’ masks…"));
 
         while(fallback[i])
         {
@@ -1345,59 +334,6 @@ void Save_Rename_File_Masks_List (GtkListStore *liststore, gint colnum)
 }
 
 /*
- * Functions for writing and reading list of 'Rename Directory' masks
- */
-void Load_Rename_Directory_Masks_List (GtkListStore *liststore, gint colnum, gchar **fallback)
-{
-    gint i = 0;
-
-    if (!Populate_List_Store_From_File(RENAME_DIRECTORY_MASKS_FILE, liststore, colnum))
-    {
-        // Fall back to defaults
-        Log_Print(LOG_OK,_("Loading default 'Rename Directory' masks…"));
-
-        while(fallback[i])
-        {
-            gtk_list_store_insert_with_values (liststore, NULL, G_MAXINT,
-                                               colnum, fallback[i], -1);
-            i++;
-        }
-    }
-}
-
-void Save_Rename_Directory_Masks_List (GtkListStore *liststore, gint colnum)
-{
-    Save_List_Store_To_File(RENAME_DIRECTORY_MASKS_FILE, liststore, colnum);
-}
-
-
-
-
-/*
- * Functions for writing and reading list of 'DefaultPathToMp3' combobox
- */
-void Load_Default_Path_To_MP3_List (GtkListStore *liststore, gint colnum)
-{
-    Populate_List_Store_From_File(DEFAULT_PATH_TO_MP3_HISTORY_FILE, liststore, colnum);
-}
-void Save_Default_Path_To_MP3_List (GtkListStore *liststore, gint colnum)
-{
-    Save_List_Store_To_File(DEFAULT_PATH_TO_MP3_HISTORY_FILE, liststore, colnum);
-}
-
-/*
- * Functions for writing and reading list of 'DefaultComment' combobox
- */
-void Load_Default_Tag_Comment_Text_List (GtkListStore *liststore, gint colnum)
-{
-    Populate_List_Store_From_File(DEFAULT_TAG_COMMENT_HISTORY_FILE, liststore, colnum);
-}
-void Save_Default_Tag_Comment_Text_List (GtkListStore *liststore, gint colnum)
-{
-    Save_List_Store_To_File(DEFAULT_TAG_COMMENT_HISTORY_FILE, liststore, colnum);
-}
-
-/*
  * Functions for writing and reading list of 'BrowserEntry' combobox
  */
 void Load_Path_Entry_List (GtkListStore *liststore, gint colnum)
@@ -1410,18 +346,6 @@ void Save_Path_Entry_List (GtkListStore *liststore, gint colnum)
 }
 
 /*
- * Functions for writing and reading list of 'PlayListNameCombo' combobox
- */
-void Load_Play_List_Name_List (GtkListStore *liststore, gint colnum)
-{
-    Populate_List_Store_From_File(PLAY_LIST_NAME_MASKS_FILE, liststore, colnum);
-}
-void Save_Play_List_Name_List (GtkListStore *liststore, gint colnum)
-{
-    Save_List_Store_To_File(PLAY_LIST_NAME_MASKS_FILE, liststore, colnum);
-}
-
-/*
  * Functions for writing and reading list of combobox to run program (tree browser)
  */
 void Load_Run_Program_With_Directory_List (GtkListStore *liststore, gint colnum)
@@ -1446,18 +370,6 @@ void Save_Run_Program_With_File_List (GtkListStore *liststore, gint colnum)
 }
 
 /*
- * Functions for writing and reading list of combobox to run file audio player
- */
-void Load_Audio_File_Player_List (GtkListStore *liststore, gint colnum)
-{
-    Populate_List_Store_From_File(AUDIO_FILE_PLAYER_HISTORY_FILE, liststore, colnum);
-}
-void Save_Audio_File_Player_List (GtkListStore *liststore, gint colnum)
-{
-    Save_List_Store_To_File(AUDIO_FILE_PLAYER_HISTORY_FILE, liststore, colnum);
-}
-
-/*
  * Functions for writing and reading list of combobox to search a string into file (tag or filename)
  */
 void Load_Search_File_List (GtkListStore *liststore, gint colnum)
@@ -1470,70 +382,6 @@ void Save_Search_File_List (GtkListStore *liststore, gint colnum)
 }
 
 /*
- * Functions for writing and reading list of combobox of path of file to load to rename files
- */
-void Load_File_To_Load_List (GtkListStore *liststore, gint colnum)
-{
-    Populate_List_Store_From_File(FILE_TO_LOAD_HISTORY_FILE, liststore, colnum);
-}
-void Save_File_To_Load_List (GtkListStore *liststore, gint colnum)
-{
-    Save_List_Store_To_File(FILE_TO_LOAD_HISTORY_FILE, liststore, colnum);
-}
-
-/*
- * Functions for writing and reading list of combobox of playlist content
- */
-void Load_Playlist_Content_Mask_List (GtkListStore *liststore, gint colnum)
-{
-    Populate_List_Store_From_File(PLAYLIST_CONTENT_MASKS_FILE, liststore, colnum);
-}
-void Save_Playlist_Content_Mask_List (GtkListStore *liststore, gint colnum)
-{
-    Save_List_Store_To_File(PLAYLIST_CONTENT_MASKS_FILE, liststore, colnum);
-}
-
-/*
- * Functions for writing and reading list of combobox of cddb search string
- */
-void Load_Cddb_Search_String_List (GtkListStore *liststore, gint colnum)
-{
-    Populate_List_Store_From_File(CDDB_SEARCH_STRING_HISTORY_FILE, liststore, colnum);
-}
-void Save_Cddb_Search_String_List (GtkListStore *liststore, gint colnum)
-{
-    Save_List_Store_To_File(CDDB_SEARCH_STRING_HISTORY_FILE, liststore, colnum);
-}
-
-/*
- * Functions for writing and reading list of combobox of cddb search string in result list
- */
-void Load_Cddb_Search_String_In_Result_List (GtkListStore *liststore, gint colnum)
-{
-    Populate_List_Store_From_File(CDDB_SEARCH_STRING_IN_RESULT_HISTORY_FILE, liststore, colnum);
-}
-void Save_Cddb_Search_String_In_Result_List (GtkListStore *liststore, gint colnum)
-{
-    Save_List_Store_To_File(CDDB_SEARCH_STRING_IN_RESULT_HISTORY_FILE, liststore, colnum);
-}
-
-/*
- * Functions for writing and reading list of 'CddbLocalPath3' combobox
- */
-void Load_Cddb_Local_Path_List (GtkListStore *liststore, gint colnum)
-{
-    Populate_List_Store_From_File(CDDB_LOCAL_PATH_HISTORY_FILE, liststore, colnum);
-}
-void Save_Cddb_Local_Path_List (GtkListStore *liststore, gint colnum)
-{
-    Save_List_Store_To_File(CDDB_LOCAL_PATH_HISTORY_FILE, liststore, colnum);
-}
-
-
-
-
-
-/*
  * migrate_config_to_xdg_dir:
  * @old_path: (type filename): the path to migrate from
  * @new_path: (type filename): the path to migrate to
@@ -1545,27 +393,17 @@ static void
 migrate_config_file_dir (const gchar *old_path, const gchar *new_path)
 {
     gsize i;
-    static const gchar *filenames[] = { CONFIG_FILE,
-                                        SCAN_TAG_MASKS_FILE,
+    static const gchar *filenames[] = { SCAN_TAG_MASKS_FILE,
                                         RENAME_FILE_MASKS_FILE,
-                                        RENAME_DIRECTORY_MASKS_FILE,
-                                        DEFAULT_PATH_TO_MP3_HISTORY_FILE,
-                                        DEFAULT_TAG_COMMENT_HISTORY_FILE,
                                         PATH_ENTRY_HISTORY_FILE,
-                                        PLAY_LIST_NAME_MASKS_FILE,
                                         RUN_PROGRAM_WITH_DIRECTORY_HISTORY_FILE,
                                         RUN_PROGRAM_WITH_FILE_HISTORY_FILE,
-                                        AUDIO_FILE_PLAYER_HISTORY_FILE,
                                         SEARCH_FILE_HISTORY_FILE,
-                                        FILE_TO_LOAD_HISTORY_FILE,
-                                        PLAYLIST_CONTENT_MASKS_FILE,
-                                        CDDB_SEARCH_STRING_HISTORY_FILE,
-                                        CDDB_SEARCH_STRING_IN_RESULT_HISTORY_FILE,
-                                        CDDB_LOCAL_PATH_HISTORY_FILE,
                                         NULL
     };
 
-    Log_Print (LOG_OK, _("Migrating configuration from directory '%s' to '%s'"),
+    Log_Print (LOG_OK,
+               _("Migrating configuration from directory ‘%s’ to ‘%s’"),
                old_path, new_path);
 
     for (i = 0; filenames[i]; i++)
@@ -1589,7 +427,7 @@ migrate_config_file_dir (const gchar *old_path, const gchar *new_path)
                           NULL, NULL))
         {
             Log_Print (LOG_ERROR,
-                       _("Failed to migrate configuration file '%s'"),
+                       _("Failed to migrate configuration file ‘%s’"),
                        filenames[i]);
         }
 
@@ -1626,7 +464,7 @@ Create_Easytag_Directory (void)
 
     if (result == -1)
     {
-        Log_Print (LOG_ERROR,_("Error: Cannot create directory '%s' (%s)"),
+        Log_Print (LOG_ERROR, _("Cannot create directory ‘%s’: %s"),
                   easytag_path, g_strerror (errno));
         g_free (easytag_path);
         return FALSE;
@@ -1648,22 +486,268 @@ Create_Easytag_Directory (void)
     }
 }
 
-static void
-set_sorting_indicator_for_column_id (gint column_id,
-                                     ET_Sorting_Type temp_sort,
-                                     GtkTreeViewColumn *column)
+/*
+ * et_settings_enum_get:
+ * @value: the property value to be set (active item on combo box)
+ * @variant: the variant to set the @value from
+ * @user_data: the #GType of the #GSettings enum
+ *
+ * Wrapper function to convert an enum-type GSettings key into an integer
+ * value.
+ *
+ * Returns: %TRUE if the mapping was successful, %FALSE otherwise
+ */
+gboolean
+et_settings_enum_get (GValue *value, GVariant *variant, gpointer user_data)
 {
-    GtkSortType current_sort;
-    GtkSortType sort_type;
+    GType enum_type;
+    GEnumClass *enum_class;
+    GEnumValue *enum_value;
+    const gchar *nick;
+
+    g_return_val_if_fail (user_data != NULL, FALSE);
+
+    enum_type = (GType)GPOINTER_TO_SIZE (user_data);
+    enum_class = g_type_class_ref (enum_type);
+    nick = g_variant_get_string (variant, NULL);
+    enum_value = g_enum_get_value_by_nick (enum_class, nick);
+    g_type_class_unref (enum_class);
+
+    if (!enum_value)
+    {
+        g_warning ("Unable to lookup %s enum nick '%s' from GType",
+                   g_type_name (enum_type),
+                   nick);
+        return FALSE;
+    }
+
+    g_value_set_int (value, enum_value->value);
+    return TRUE;
+}
 
-    gtk_tree_view_column_clicked (column);
+/*
+ * et_settings_enum_set:
+ * @value: the property value to set the @variant from
+ * @expected_type: the expected type of the returned variant
+ * @user_data: the #GType of the #GSettings enum
+ *
+ * Wrapper function to convert an integer value into a string suitable for
+ * storing into an enum-type GSettings key.
+ *
+ * Returns: a new GVariant containing the mapped value, or %NULL upon failure
+ */
+GVariant *
+et_settings_enum_set (const GValue *value, const GVariantType *expected_type,
+                      gpointer user_data)
+{
+    GType enum_type;
+    GEnumClass *enum_class;
+    GEnumValue *enum_value;
 
-    current_sort = get_sort_order_for_column_id (column_id);
+    g_return_val_if_fail (user_data != NULL, NULL);
 
-    sort_type = temp_sort % 2 == 0 ? GTK_SORT_ASCENDING : GTK_SORT_DESCENDING;
+    enum_type = (GType)GPOINTER_TO_SIZE (user_data);
+    enum_class = g_type_class_ref (enum_type);
+    enum_value = g_enum_get_value (enum_class, g_value_get_int (value));
+    g_type_class_unref (enum_class);
 
-    if (sort_type != current_sort)
+    if (!enum_value)
     {
-        gtk_tree_view_column_clicked (column);
+        g_warning ("Unable to lookup %s enum value '%d' from GType",
+                   g_type_name (enum_type), g_value_get_int (value));
+        return NULL;
     }
+
+    return g_variant_new (g_variant_type_peek_string (expected_type),
+                          enum_value->value_nick);
+}
+
+/*
+ * et_settings_enum_radio_get:
+ * @value: the property value to be set
+ * @variant: the variant to set the @value from
+ * @user_data: the widget on which the setting should be applied
+ *
+ * Wrapper function to convert an enum-type GSettings key state to the active
+ * radio button.
+ *
+ * Returns: %TRUE
+ */
+gboolean
+et_settings_enum_radio_get (GValue *value, GVariant *variant,
+                            gpointer user_data)
+{
+    const gchar *name;
+    const gchar *setting;
+
+    name = gtk_widget_get_name (GTK_WIDGET (user_data));
+    setting = g_variant_get_string (variant, NULL);
+
+    /* Only set the radio button which matches the setting to active. */
+    if (g_strcmp0 (name, setting) == 0)
+    {
+        g_value_set_boolean (value, TRUE);
+    }
+
+    return TRUE;
+}
+
+/*
+ * et_settings_enum_radio_set:
+ * @value: the property value to set the @variant from
+ * @expected_type: the expected type of the returned variant
+ * @user_data: the widget which the setting should be taken from
+ *
+ * Wrapper function to convert the active radiobutton to the value of an
+ * enum-type GSettings key.
+ *
+ * Returns: a new GVariant containing the mapped value, or %NULL upon failure
+ */
+GVariant *
+et_settings_enum_radio_set (const GValue *value,
+                            const GVariantType *expected_type,
+                            gpointer user_data)
+{
+    GVariant *variant = NULL;
+    const gchar *name;
+
+    /* Ignore buttons that are not active. */
+    if (!g_value_get_boolean (value))
+    {
+        return variant;
+    }
+
+    name = gtk_widget_get_name (GTK_WIDGET (user_data));
+    variant = g_variant_new_string (name);
+
+    return variant;
+}
+
+/*
+ * et_settings_flags_toggle_get:
+ * @value: the property value to be set (active item on combo box)
+ * @variant: the variant to set the @value from
+ * @user_data: the #GType of the #GSettings flags
+ *
+ * Wrapper function to convert a flags-type GSettings key state into the active
+ * toggle button.
+ *
+ * Returns: %TRUE if the mapping was successful, %FALSE otherwise
+ */
+gboolean
+et_settings_flags_toggle_get (GValue *value, GVariant *variant, gpointer user_data)
+{
+    const gchar *name;
+    GType flags_type;
+    GFlagsClass *flags_class;
+    GVariantIter iter;
+    GFlagsValue *flags_value;
+    const gchar *nick;
+    guint flags = 0;
+
+    g_return_val_if_fail (user_data != NULL, FALSE);
+
+    name = gtk_widget_get_name (GTK_WIDGET (user_data));
+    flags_type = (GType)GPOINTER_TO_SIZE (g_object_get_data (G_OBJECT (user_data),
+                                                                       "flags-type"));
+    flags_class = g_type_class_ref (flags_type);
+
+    g_variant_iter_init (&iter, variant);
+
+    while (g_variant_iter_next (&iter, "&s", &nick))
+    {
+        flags_value = g_flags_get_value_by_nick (flags_class, nick);
+
+        if (flags_value)
+        {
+            flags |= flags_value->value;
+        }
+        else
+        {
+            g_warning ("Unable to lookup %s flags nick '%s' from GType",
+                       g_type_name (flags_type), nick);
+            g_type_class_unref (flags_class);
+            return FALSE;
+        }
+    }
+
+    flags_value = g_flags_get_value_by_nick (flags_class, name);
+    g_type_class_unref (flags_class);
+
+    /* TRUE if settings flag is set for this widget, which will make the widget
+     * active. */
+    g_value_set_boolean (value, flags & flags_value->value);
+    return TRUE;
+}
+
+/*
+ * et_settings_flags_toggle_set:
+ * @value: the property value to set the @variant from
+ * @expected_type: the expected type of the returned variant
+ * @user_data: the widget associated with the changed setting
+ *
+ * Wrapper function to convert a boolean value into a string suitable for
+ * storing into a flags-type GSettings key.
+ *
+ * Returns: a new GVariant containing the mapped value, or %NULL upon failure
+ */
+GVariant *
+et_settings_flags_toggle_set (const GValue *value,
+                              const GVariantType *expected_type,
+                              gpointer user_data)
+{
+    const gchar *name;
+    GType flags_type;
+    GFlagsClass *flags_class;
+    GFlagsValue *flags_value;
+    guint mask;
+    GVariantBuilder builder;
+    guint flags = g_settings_get_flags (MainSettings, "process-fields");
+
+    g_return_val_if_fail (user_data != NULL, NULL);
+
+    name = gtk_widget_get_name (GTK_WIDGET (user_data));
+    flags_type = (GType)GPOINTER_TO_SIZE (g_object_get_data (G_OBJECT (user_data),
+                                                                       "flags-type"));
+    flags_class = g_type_class_ref (flags_type);
+    flags_value = g_flags_get_value_by_nick (flags_class, name);
+    mask = flags_class->mask;
+
+    if (!flags_value)
+    {
+        g_warning ("Unable to lookup %s flags value '%d' from GType",
+                   g_type_name (flags_type), g_value_get_boolean (value));
+        g_type_class_unref (flags_class);
+        return NULL;
+    }
+
+    if (g_value_get_boolean (value))
+    {
+        flags |= flags_value->value;
+    }
+    else
+    {
+        flags &= (flags_value->value ^ mask);
+    }
+
+    g_variant_builder_init (&builder, expected_type);
+
+    while (flags)
+    {
+        flags_value = g_flags_get_first_value (flags_class, flags);
+
+        if (flags_value == NULL)
+        {
+            g_variant_builder_clear (&builder);
+            g_type_class_unref (flags_class);
+            return NULL;
+        }
+
+        g_variant_builder_add (&builder, "s", flags_value->value_nick);
+        flags &= ~flags_value->value;
+    }
+
+    g_type_class_unref (flags_class);
+
+    return g_variant_builder_end (&builder);
 }
diff --git a/src/setting.h b/src/setting.h
index 3da0d8b..5e31153 100644
--- a/src/setting.h
+++ b/src/setting.h
@@ -1,310 +1,243 @@
-/* config.h - 2000/06/21 */
-/*
- *  EasyTAG - Tag editor for MP3 and Ogg Vorbis files
- *  Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
+/* EasyTAG - Tag editor for audio files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ * Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
  *
- *  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
- *  (at your option) any later version.
+ * 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
+ * (at your option) any later version.
  *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
  *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
 
-#ifndef __CONFIG_H__
-#define __CONFIG_H__
+#ifndef ET_SETTINGS_H_
+#define ET_SETTINGS_H_
 
 #include <gtk/gtk.h>
 
-/***************
- * Declaration *
- ***************/
-
+/* Categories to search in CDDB manual search. */
 typedef enum
 {
-    CV_TYPE_STRING=0,
-    CV_TYPE_INT,
-    CV_TYPE_BOOL
-} Config_Variable_Type;
-
-
-typedef struct _tConfigVariable tConfigVariable;
-struct _tConfigVariable
+    ET_CDDB_SEARCH_CATEGORY_BLUES = 1 << 0,
+    ET_CDDB_SEARCH_CATEGORY_CLASSICAL = 1 << 1,
+    ET_CDDB_SEARCH_CATEGORY_COUNTRY = 1 << 2,
+    ET_CDDB_SEARCH_CATEGORY_FOLK = 1 << 3,
+    ET_CDDB_SEARCH_CATEGORY_JAZZ = 1 << 4,
+    ET_CDDB_SEARCH_CATEGORY_MISC = 1 << 5,
+    ET_CDDB_SEARCH_CATEGORY_NEWAGE = 1 << 6,
+    ET_CDDB_SEARCH_CATEGORY_REGGAE = 1 << 7,
+    ET_CDDB_SEARCH_CATEGORY_ROCK = 1 << 8,
+    ET_CDDB_SEARCH_CATEGORY_SOUNDTRACK = 1 << 9
+} EtCddbSearchCategory;
+
+/* Fields to use in CDDB manual search. */
+typedef enum
 {
-    char *name;                 /* Variable name written in config file */
-    Config_Variable_Type type;  /* Variable type: Integer, Alphabetic, ... */
-    void *pointer;              /* Pointer to our variable */
-};
-
-
-/*
- * Config varariables
- */
-/* Common */
-gint    LOAD_ON_STARTUP;
-gchar  *DEFAULT_PATH_TO_MP3;
-gint    BROWSER_LINE_STYLE;
-gint    BROWSER_EXPANDER_STYLE;
-gint    BROWSE_SUBDIR;
-gint    BROWSE_HIDDEN_DIR;
-gint    OPEN_SELECTED_BROWSER_NODE;
-
-/* Misc */
-// User Interface
-gint    SET_MAIN_WINDOW_POSITION;
-gint    MAIN_WINDOW_X;
-gint    MAIN_WINDOW_Y;
-gint    MAIN_WINDOW_HEIGHT;
-gint    MAIN_WINDOW_WIDTH;
-gint    PANE_HANDLE_POSITION1;
-gint    PANE_HANDLE_POSITION2;
-gint    PANE_HANDLE_POSITION3;
-gint    PANE_HANDLE_POSITION4;
-gint    SHOW_HEADER_INFO;
-
-gint    CHANGED_FILES_DISPLAYED_TO_RED;
-gint    CHANGED_FILES_DISPLAYED_TO_BOLD;
-
-gint    SORTING_FILE_MODE;
-gint    SORTING_FILE_CASE_SENSITIVE;
-
-gchar  *AUDIO_FILE_PLAYER;
-
-/* File Settings */
-gint    REPLACE_ILLEGAL_CHARACTERS_IN_FILENAME;
-gint    FILENAME_EXTENSION_LOWER_CASE;
-gint    FILENAME_EXTENSION_UPPER_CASE;
-gint    FILENAME_EXTENSION_NO_CHANGE;
-gint    PRESERVE_MODIFICATION_TIME;
-gint    UPDATE_PARENT_DIRECTORY_MODIFICATION_TIME;
-
-gint    FILENAME_CHARACTER_SET_OTHER;
-gint    FILENAME_CHARACTER_SET_APPROXIMATE;
-gint    FILENAME_CHARACTER_SET_DISCARD;
-
-/* Tag Settings */
-gint    STRIP_TAG_WHEN_EMPTY_FIELDS;
-gint    CONVERT_OLD_ID3V2_TAG_VERSION;
-
-gint    FILE_WRITING_ID3V2_VERSION_4;
-gint    USE_NON_STANDARD_ID3_READING_CHARACTER_SET;
-gchar  *FILE_READING_ID3V1V2_CHARACTER_SET;
-
-gint    FILE_WRITING_ID3V2_WRITE_TAG;
-gint    FILE_WRITING_ID3V2_USE_CRC32;
-gint    FILE_WRITING_ID3V2_USE_COMPRESSION;
-gint    FILE_WRITING_ID3V2_TEXT_ONLY_GENRE;
-gint    FILE_WRITING_ID3V2_USE_UNICODE_CHARACTER_SET;
-gchar  *FILE_WRITING_ID3V2_UNICODE_CHARACTER_SET;
-gchar  *FILE_WRITING_ID3V2_NO_UNICODE_CHARACTER_SET;
-gint    FILE_WRITING_ID3V2_ICONV_OPTIONS_NO;
-gint    FILE_WRITING_ID3V2_ICONV_OPTIONS_TRANSLIT;
-gint    FILE_WRITING_ID3V2_ICONV_OPTIONS_IGNORE;
-
-gint    FILE_WRITING_ID3V1_WRITE_TAG;
-gchar  *FILE_WRITING_ID3V1_CHARACTER_SET;
-gint    FILE_WRITING_ID3V1_ICONV_OPTIONS_NO;
-gint    FILE_WRITING_ID3V1_ICONV_OPTIONS_TRANSLIT;
-gint    FILE_WRITING_ID3V1_ICONV_OPTIONS_IGNORE;
+    ET_CDDB_SEARCH_FIELD_ARTIST = 1 << 0,
+    ET_CDDB_SEARCH_FIELD_TITLE = 1 << 1,
+    ET_CDDB_SEARCH_FIELD_TRACK = 1 << 2,
+    ET_CDDB_SEARCH_FIELD_OTHER = 1 << 3
+} EtCddbSearchField;
 
-gint    VORBIS_SPLIT_FIELD_TITLE;
-gint    VORBIS_SPLIT_FIELD_ARTIST;
-gint    VORBIS_SPLIT_FIELD_ALBUM;
-gint    VORBIS_SPLIT_FIELD_GENRE;
-gint    VORBIS_SPLIT_FIELD_COMMENT;
-gint    VORBIS_SPLIT_FIELD_COMPOSER;
-gint    VORBIS_SPLIT_FIELD_ORIG_ARTIST;
-
-gint    DATE_AUTO_COMPLETION;
-gint    NUMBER_TRACK_FORMATED;
-gint    NUMBER_TRACK_FORMATED_SPIN_BUTTON;
-gint PAD_DISC_NUMBER;
-gint PAD_DISC_NUMBER_DIGITS;
-gint    SET_FOCUS_TO_SAME_TAG_FIELD;
-gint    SET_FOCUS_TO_FIRST_TAG_FIELD;
-gint    LOG_MAX_LINES;
-gint    SHOW_LOG_VIEW;
-
-
-/* Scanner */
-gint    SCANNER_TYPE;
-gint    SCAN_MASK_EDITOR_BUTTON;
-gint    SCAN_LEGEND_BUTTON;
-gint    FTS_CONVERT_UNDERSCORE_AND_P20_INTO_SPACE;
-gint    FTS_CONVERT_SPACE_INTO_UNDERSCORE;
-gint    RFS_CONVERT_UNDERSCORE_AND_P20_INTO_SPACE;
-gint    RFS_CONVERT_SPACE_INTO_UNDERSCORE;
-gint    RFS_REMOVE_SPACES;
-gint    PFS_DONT_UPPER_SOME_WORDS;
-gint    OVERWRITE_TAG_FIELD;
-gint    SET_DEFAULT_COMMENT;
-gchar  *DEFAULT_COMMENT;
-gint    SET_CRC32_COMMENT;
-gint    OPEN_SCANNER_WINDOW_ON_STARTUP;
-gint    SET_SCANNER_WINDOW_POSITION;
-gint    SCANNER_WINDOW_X;
-gint    SCANNER_WINDOW_Y;
-
-/* Confirmation */
-gint    CONFIRM_BEFORE_EXIT;
-gint    CONFIRM_WRITE_TAG;
-gint    CONFIRM_RENAME_FILE;
-gint    CONFIRM_WRITE_PLAYLIST;
-gint    CONFIRM_DELETE_FILE;
-gint    CONFIRM_WHEN_UNSAVED_FILES;
-
-/* Scanner window */
-gint    PROCESS_FILENAME_FIELD;
-gint    PROCESS_TITLE_FIELD;
-gint    PROCESS_ARTIST_FIELD;
-gint    PROCESS_ALBUM_ARTIST_FIELD;
-gint    PROCESS_ALBUM_FIELD;
-gint    PROCESS_GENRE_FIELD;
-gint    PROCESS_COMMENT_FIELD;
-gint    PROCESS_COMPOSER_FIELD;
-gint    PROCESS_ORIG_ARTIST_FIELD;
-gint    PROCESS_COPYRIGHT_FIELD;
-gint    PROCESS_URL_FIELD;
-gint    PROCESS_ENCODED_BY_FIELD;
-gchar  *PROCESS_FIELDS_CONVERT_FROM;
-gchar  *PROCESS_FIELDS_CONVERT_TO;
-gint    PF_CONVERT_INTO_SPACE;
-gint    PF_CONVERT_SPACE;
-gint    PF_CONVERT;
-gint    PF_CONVERT_ALL_UPPERCASE;
-gint    PF_CONVERT_ALL_DOWNCASE;
-gint    PF_CONVERT_FIRST_LETTER_UPPERCASE;
-gint    PF_CONVERT_FIRST_LETTERS_UPPERCASE;
-gint    PF_DETECT_ROMAN_NUMERALS;
-gint    PF_REMOVE_SPACE;
-gint    PF_INSERT_SPACE;
-gint    PF_ONLY_ONE_SPACE;
-
-/* Playlist window */
-gchar  *PLAYLIST_NAME;
-gint    PLAYLIST_USE_MASK_NAME;
-gint    PLAYLIST_USE_DIR_NAME;
-gint    PLAYLIST_ONLY_SELECTED_FILES;
-gint    PLAYLIST_FULL_PATH;
-gint    PLAYLIST_RELATIVE_PATH;
-gint    PLAYLIST_CREATE_IN_PARENT_DIR;
-gint    PLAYLIST_USE_DOS_SEPARATOR;
-gint    PLAYLIST_CONTENT_NONE;
-gint    PLAYLIST_CONTENT_FILENAME;
-gint    PLAYLIST_CONTENT_MASK;
-gchar  *PLAYLIST_CONTENT_MASK_VALUE;
-
-gint    PLAYLIST_WINDOW_X;
-gint    PLAYLIST_WINDOW_Y;
-
-/* "Load filenames from txt" window */
-gint    LOAD_FILE_RUN_SCANNER;
-
-gint    LOAD_FILE_WINDOW_X;
-gint    LOAD_FILE_WINDOW_Y;
-gint    LOAD_FILE_WINDOW_WIDTH;
-gint    LOAD_FILE_WINDOW_HEIGHT;
-
-/* CDDB in preferences window */
-gchar  *CDDB_SERVER_NAME_AUTOMATIC_SEARCH;
-gint    CDDB_SERVER_PORT_AUTOMATIC_SEARCH;
-gchar  *CDDB_SERVER_CGI_PATH_AUTOMATIC_SEARCH;
-gchar  *CDDB_SERVER_NAME_AUTOMATIC_SEARCH2;
-gint    CDDB_SERVER_PORT_AUTOMATIC_SEARCH2;
-gchar  *CDDB_SERVER_CGI_PATH_AUTOMATIC_SEARCH2;
-gchar  *CDDB_SERVER_NAME_MANUAL_SEARCH;
-gint    CDDB_SERVER_PORT_MANUAL_SEARCH;
-gchar  *CDDB_SERVER_CGI_PATH_MANUAL_SEARCH;
-gchar  *CDDB_LOCAL_PATH;
-gint    CDDB_USE_PROXY;
-gchar  *CDDB_PROXY_NAME;
-gint    CDDB_PROXY_PORT;
-gchar  *CDDB_PROXY_USER_NAME;
-gchar  *CDDB_PROXY_USER_PASSWORD;
-
-gint    SET_CDDB_WINDOW_POSITION;
-gint    CDDB_WINDOW_X;
-gint    CDDB_WINDOW_Y;
-gint    CDDB_WINDOW_HEIGHT;
-gint    CDDB_WINDOW_WIDTH;
-gint    CDDB_PANE_HANDLE_POSITION;
-
-gint    CDDB_FOLLOW_FILE;
-gint    CDDB_USE_DLM;
-gint    CDDB_USE_LOCAL_ACCESS;
-
-/* CDDB window */
-gint    CDDB_SEARCH_IN_ALL_FIELDS;
-gint    CDDB_SEARCH_IN_ARTIST_FIELD;
-gint    CDDB_SEARCH_IN_TITLE_FIELD;
-gint    CDDB_SEARCH_IN_TRACK_NAME_FIELD;
-gint    CDDB_SEARCH_IN_OTHER_FIELD;
-
-gint    CDDB_SHOW_CATEGORIES;
-
-gint    CDDB_SEARCH_IN_ALL_CATEGORIES;
-gint    CDDB_SEARCH_IN_BLUES_CATEGORY;
-gint    CDDB_SEARCH_IN_CLASSICAL_CATEGORY;
-gint    CDDB_SEARCH_IN_COUNTRY_CATEGORY;
-gint    CDDB_SEARCH_IN_FOLK_CATEGORY;
-gint    CDDB_SEARCH_IN_JAZZ_CATEGORY;
-gint    CDDB_SEARCH_IN_MISC_CATEGORY;
-gint    CDDB_SEARCH_IN_NEWAGE_CATEGORY;
-gint    CDDB_SEARCH_IN_REGGAE_CATEGORY;
-gint    CDDB_SEARCH_IN_ROCK_CATEGORY;
-gint    CDDB_SEARCH_IN_SOUNDTRACK_CATEGORY;
+/* Fields to set from CDDB search results. */
+typedef enum
+{
+    ET_CDDB_SET_FIELD_TITLE = 1 << 0,
+    ET_CDDB_SET_FIELD_ARTIST = 1 << 1,
+    ET_CDDB_SET_FIELD_ALBUM = 1 << 2,
+    ET_CDDB_SET_FIELD_YEAR = 1 << 3,
+    ET_CDDB_SET_FIELD_TRACK = 1 << 4,
+    ET_CDDB_SET_FIELD_TRACK_TOTAL = 1 << 5,
+    ET_CDDB_SET_FIELD_GENRE = 1 << 6,
+    ET_CDDB_SET_FIELD_FILENAME = 1 << 7
+} EtCddbSetField;
+
+/* Character set for passing to iconv. */
+typedef enum
+{
+    ET_CHARSET_IBM864,
+    ET_CHARSET_ISO_8859_6,
+    ET_CHARSET_WINDOWS_1256,
+    ET_CHARSET_ISO_8859_13,
+    ET_CHARSET_ISO_8859_4,
+    ET_CHARSET_WINDOWS_1257,
+    ET_CHARSET_ISO_8859_14,
+    ET_CHARSET_IBM852,
+    ET_CHARSET_ISO_8859_2,
+    ET_CHARSET_WINDOWS_1250,
+    ET_CHARSET_GB18030,
+    ET_CHARSET_GB2312,
+    ET_CHARSET_BIG5,
+    ET_CHARSET_BIG5_HKSCS,
+    ET_CHARSET_IBM855,
+    ET_CHARSET_ISO_8859_5,
+    ET_CHARSET_ISO_IR_111,
+    ET_CHARSET_ISO_KOI8_R,
+    ET_CHARSET_WINDOWS_1251,
+    ET_CHARSET_IBM866,
+    ET_CHARSET_KOI8_U,
+    ET_CHARSET_US_ASCII,
+    ET_CHARSET_ISO_8859_7,
+    ET_CHARSET_WINDOWS_1253,
+    ET_CHARSET_IBM862,
+    ET_CHARSET_WINDOWS_1255,
+    ET_CHARSET_EUC_JP,
+    ET_CHARSET_ISO_2022_JP,
+    ET_CHARSET_SHIFT_JIS,
+    ET_CHARSET_EUC_KR,
+    ET_CHARSET_ISO_8859_10,
+    ET_CHARSET_ISO_8859_3,
+    ET_CHARSET_TIS_620,
+    ET_CHARSET_IBM857,
+    ET_CHARSET_ISO_8859_9,
+    ET_CHARSET_WINDOWS_1254,
+    ET_CHARSET_UTF_8,
+    ET_CHARSET_VISCII,
+    ET_CHARSET_WINDOWS_1258,
+    ET_CHARSET_ISO_8859_8,
+    ET_CHARSET_IBM850,
+    ET_CHARSET_ISO_8859_1,
+    ET_CHARSET_ISO_8859_15,
+    ET_CHARSET_WINDOWS_1252
+} EtCharset;
+
+/* Method for processing spaces when updating tags. */
+typedef enum
+{
+    ET_CONVERT_SPACES_SPACES,
+    ET_CONVERT_SPACES_UNDERSCORES,
+    ET_CONVERT_SPACES_REMOVE,
+    ET_CONVERT_SPACES_NO_CHANGE
+} EtConvertSpaces;
 
-gint    CDDB_SET_TO_ALL_FIELDS;
-gint    CDDB_SET_TO_TITLE;
-gint    CDDB_SET_TO_ARTIST;
-gint    CDDB_SET_TO_ALBUM;
-gint    CDDB_SET_TO_YEAR;
-gint    CDDB_SET_TO_TRACK;
-gint    CDDB_SET_TO_TRACK_TOTAL;
-gint    CDDB_SET_TO_GENRE;
-gint    CDDB_SET_TO_FILE_NAME;
+typedef enum
+{
+    ET_FILENAME_EXTENSION_LOWER_CASE,
+    ET_FILENAME_EXTENSION_UPPER_CASE,
+    ET_FILENAME_EXTENSION_NO_CHANGE
+} EtFilenameExtensionMode;
 
-gint    CDDB_RUN_SCANNER;
+/* Tag fields to process in the scanner. */
+typedef enum
+{
+    ET_PROCESS_FIELD_FILENAME = 1 << 0,
+    ET_PROCESS_FIELD_TITLE = 1 << 1,
+    ET_PROCESS_FIELD_ARTIST = 1 << 2,
+    ET_PROCESS_FIELD_ALBUM_ARTIST = 1 << 3,
+    ET_PROCESS_FIELD_ALBUM = 1 << 4,
+    ET_PROCESS_FIELD_GENRE = 1 << 5,
+    ET_PROCESS_FIELD_COMMENT = 1 << 6,
+    ET_PROCESS_FIELD_COMPOSER = 1 << 7,
+    ET_PROCESS_FIELD_ORIGINAL_ARTIST = 1 << 8,
+    ET_PROCESS_FIELD_COPYRIGHT = 1 << 9,
+    ET_PROCESS_FIELD_URL = 1 << 10,
+    ET_PROCESS_FIELD_ENCODED_BY = 1 << 11
+} EtProcessField;
 
-/* Search Window */
-gint    SET_SEARCH_WINDOW_POSITION;
-gint    SEARCH_WINDOW_X;
-gint    SEARCH_WINDOW_Y;
-gint    SEARCH_WINDOW_HEIGHT;
-gint    SEARCH_WINDOW_WIDTH;
-gint    SEARCH_IN_FILENAME;
-gint    SEARCH_IN_TAG;
-gint    SEARCH_CASE_SENSITIVE;
+typedef enum
+{
+    ET_PROCESS_FIELDS_CONVERT_SPACES,
+    ET_PROCESS_FIELDS_CONVERT_UNDERSCORES,
+    ET_PROCESS_FIELDS_CONVERT_CHARACTERS,
+    ET_PROCESS_FIELDS_CONVERT_NO_CHANGE
+} EtProcessFieldsConvert;
 
-/* Default mask */
-gchar  *SCAN_TAG_DEFAULT_MASK;
-gchar  *RENAME_FILE_DEFAULT_MASK;
-gchar  *RENAME_DIRECTORY_DEFAULT_MASK;
-gint    RENAME_DIRECTORY_WITH_MASK;
+/* Content of generated playlists. */
+typedef enum
+{
+    ET_PLAYLIST_CONTENT_FILENAMES,
+    ET_PLAYLIST_CONTENT_EXTENDED,
+    ET_PLAYLIST_CONTENT_EXTENDED_MASK
+} EtPlaylistContent;
 
+/* Encoding options when renaming files. */
+typedef enum
+{
+    ET_RENAME_ENCODING_TRY_ALTERNATIVE,
+    ET_RENAME_ENCODING_TRANSLITERATE,
+    ET_RENAME_ENCODING_IGNORE
+} EtRenameEncoding;
 
-/* Other parameters */
-gint    OPTIONS_NOTEBOOK_PAGE;
+/*
+ * The mode for the scanner window.
+ */
+typedef enum
+{
+    ET_SCAN_MODE_FILL_TAG,
+    ET_SCAN_MODE_RENAME_FILE,
+    ET_SCAN_MODE_PROCESS_FIELDS
+} EtScanMode;
 
+/* Types of sorting. See the GSettings key "sort-mode". */
+typedef enum
+{
+    ET_SORT_MODE_ASCENDING_FILENAME,
+    ET_SORT_MODE_DESCENDING_FILENAME,
+    ET_SORT_MODE_ASCENDING_TITLE,
+    ET_SORT_MODE_DESCENDING_TITLE,
+    ET_SORT_MODE_ASCENDING_ARTIST,
+    ET_SORT_MODE_DESCENDING_ARTIST,
+    ET_SORT_MODE_ASCENDING_ALBUM_ARTIST,
+    ET_SORT_MODE_DESCENDING_ALBUM_ARTIST,
+    ET_SORT_MODE_ASCENDING_ALBUM,
+    ET_SORT_MODE_DESCENDING_ALBUM,
+    ET_SORT_MODE_ASCENDING_YEAR,
+    ET_SORT_MODE_DESCENDING_YEAR,
+    ET_SORT_MODE_ASCENDING_DISC_NUMBER,
+    ET_SORT_MODE_DESCENDING_DISC_NUMBER,
+    ET_SORT_MODE_ASCENDING_TRACK_NUMBER,
+    ET_SORT_MODE_DESCENDING_TRACK_NUMBER,
+    ET_SORT_MODE_ASCENDING_GENRE,
+    ET_SORT_MODE_DESCENDING_GENRE,
+    ET_SORT_MODE_ASCENDING_COMMENT,
+    ET_SORT_MODE_DESCENDING_COMMENT,
+    ET_SORT_MODE_ASCENDING_COMPOSER,
+    ET_SORT_MODE_DESCENDING_COMPOSER,
+    ET_SORT_MODE_ASCENDING_ORIG_ARTIST,
+    ET_SORT_MODE_DESCENDING_ORIG_ARTIST,
+    ET_SORT_MODE_ASCENDING_COPYRIGHT,
+    ET_SORT_MODE_DESCENDING_COPYRIGHT,
+    ET_SORT_MODE_ASCENDING_URL,
+    ET_SORT_MODE_DESCENDING_URL,
+    ET_SORT_MODE_ASCENDING_ENCODED_BY,
+    ET_SORT_MODE_DESCENDING_ENCODED_BY,
+    ET_SORT_MODE_ASCENDING_CREATION_DATE,
+    ET_SORT_MODE_DESCENDING_CREATION_DATE,
+    ET_SORT_MODE_ASCENDING_FILE_TYPE,
+    ET_SORT_MODE_DESCENDING_FILE_TYPE,
+    ET_SORT_MODE_ASCENDING_FILE_SIZE,
+    ET_SORT_MODE_DESCENDING_FILE_SIZE,
+    ET_SORT_MODE_ASCENDING_FILE_DURATION,
+    ET_SORT_MODE_DESCENDING_FILE_DURATION,
+    ET_SORT_MODE_ASCENDING_FILE_BITRATE,
+    ET_SORT_MODE_DESCENDING_FILE_BITRATE,
+    ET_SORT_MODE_ASCENDING_FILE_SAMPLERATE,
+    ET_SORT_MODE_DESCENDING_FILE_SAMPLERATE
+} EtSortMode;
+
+/* Additional options to be passed to iconv(). */
+typedef enum
+{
+    ET_TAG_ENCODING_NONE,
+    ET_TAG_ENCODING_TRANSLITERATE,
+    ET_TAG_ENCODING_IGNORE
+} EtTagEncoding;
 
+/*
+ * Config variables
+ */
 
-/**************
- * Prototypes *
- **************/
+GSettings *MainSettings;
 
 void Init_Config_Variables (void);
-void Read_Config           (void);
-
-void Save_Changes_Of_Preferences_Window  (void);
-void Save_Changes_Of_UI                  (void);
 
 gboolean Setting_Create_Files     (void);
 
@@ -319,26 +252,10 @@ void Load_Rename_File_Masks_List (GtkListStore *liststore, gint colnum,
                                   const gchar * const *fallback);
 void Save_Rename_File_Masks_List (GtkListStore *liststore, gint colnum);
 
-/* RenameDirectoryMasksList 'RenameDirectoryMaskCombo' combobox */
-void Load_Rename_Directory_Masks_List (GtkListStore *liststore, gint colnum, gchar **fallback);
-void Save_Rename_Directory_Masks_List (GtkListStore *liststore, gint colnum);
-
-/* 'DefaultPathToMp3' combobox */
-void Load_Default_Path_To_MP3_List (GtkListStore *liststore, gint colnum);
-void Save_Default_Path_To_MP3_List (GtkListStore *liststore, gint colnum);
-
-/* 'DefaultComment' combobox */
-void Load_Default_Tag_Comment_Text_List (GtkListStore *liststore, gint colnum);
-void Save_Default_Tag_Comment_Text_List (GtkListStore *liststore, gint colnum);
-
 /* 'BrowserEntry' combobox */
 void Load_Path_Entry_List (GtkListStore *liststore, gint colnum);
 void Save_Path_Entry_List (GtkListStore *liststore, gint colnum);
 
-/* 'PlayListNameEntry' combobox */
-void Load_Play_List_Name_List (GtkListStore *liststore, gint colnum);
-void Save_Play_List_Name_List (GtkListStore *liststore, gint colnum);
-
 /* Run Program combobox (tree browser) */
 void Load_Run_Program_With_Directory_List (GtkListStore *liststore, gint colnum);
 void Save_Run_Program_With_Directory_List (GtkListStore *liststore, gint colnum);
@@ -347,34 +264,25 @@ void Save_Run_Program_With_Directory_List (GtkListStore *liststore, gint colnum)
 void Load_Run_Program_With_File_List (GtkListStore *liststore, gint colnum);
 void Save_Run_Program_With_File_List (GtkListStore *liststore, gint colnum);
 
-/* 'FilePlayerEntry' combobox */
-void Load_Audio_File_Player_List (GtkListStore *liststore, gint colnum);
-void Save_Audio_File_Player_List (GtkListStore *liststore, gint colnum);
-
 /* 'SearchStringEntry' combobox */
 void Load_Search_File_List (GtkListStore *liststore, gint colnum);
 void Save_Search_File_List (GtkListStore *liststore, gint colnum);
 
-/* 'FileToLoad' combobox */
-void Load_File_To_Load_List (GtkListStore *liststore, gint colnum);
-void Save_File_To_Load_List (GtkListStore *liststore, gint colnum);
-
-/* 'PlayListContentMaskEntry' combobox */
-void Load_Playlist_Content_Mask_List (GtkListStore *liststore, gint colnum);
-void Save_Playlist_Content_Mask_List (GtkListStore *liststore, gint colnum);
-
-/* 'CddbSearchStringEntry' combobox */
-void Load_Cddb_Search_String_List (GtkListStore *liststore, gint colnum);
-void Save_Cddb_Search_String_List (GtkListStore *liststore, gint colnum);
-
-/* 'CddbSearchStringInResultEntry' combobox */
-void Load_Cddb_Search_String_In_Result_List (GtkListStore *liststore, gint colnum);
-void Save_Cddb_Search_String_In_Result_List (GtkListStore *liststore, gint colnum);
-
-/* 'CddbLocalPath' combobox */
-void Load_Cddb_Local_Path_List (GtkListStore *liststore, gint colnum);
-void Save_Cddb_Local_Path_List (GtkListStore *liststore, gint colnum);
-
-
-
-#endif /* __CONFIG_H__ */
+gboolean et_settings_enum_get (GValue *value, GVariant *variant,
+                               gpointer user_data);
+GVariant *et_settings_enum_set (const GValue *value,
+                                const GVariantType *expected_type,
+                                gpointer user_data);
+gboolean et_settings_enum_radio_get (GValue *value, GVariant *variant,
+                                     gpointer user_data);
+GVariant *et_settings_enum_radio_set (const GValue *value,
+                                      const GVariantType *expected_type,
+                                      gpointer user_data);
+gboolean et_settings_flags_toggle_get (GValue *value, GVariant *variant,
+                                       gpointer user_data);
+GVariant *et_settings_flags_toggle_set (const GValue *value,
+                                        const GVariantType *expected_type,
+                                        gpointer user_data);
+
+
+#endif /* ET_SETTINGS_H_ */
diff --git a/src/status_bar.c b/src/status_bar.c
new file mode 100644
index 0000000..3e7e4d0
--- /dev/null
+++ b/src/status_bar.c
@@ -0,0 +1,174 @@
+/* EasyTAG - Tag editor for audio files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ * Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
+ *
+ * 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
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+
+#include <glib/gi18n.h>
+
+#include "status_bar.h"
+#include "charset.h"
+
+/* TODO: Use G_DEFINE_TYPE_WITH_PRIVATE. */
+G_DEFINE_TYPE (EtStatusBar, et_status_bar, GTK_TYPE_STATUSBAR)
+
+#define et_status_bar_get_instance_private(bar) (bar->priv)
+
+struct _EtStatusBarPrivate
+{
+    guint message_context;
+    guint timer_context;
+    guint timer_id;
+};
+
+static void et_status_bar_remove_timer (EtStatusBar *self);
+
+static gboolean
+et_status_bar_stop_timer (EtStatusBar *self)
+{
+    EtStatusBarPrivate *priv;
+
+    priv = et_status_bar_get_instance_private (self);
+
+    gtk_statusbar_pop (GTK_STATUSBAR (self), priv->timer_context);
+
+    return G_SOURCE_REMOVE;
+}
+
+static void
+et_status_bar_reset_timer (EtStatusBar *self)
+{
+    EtStatusBarPrivate *priv;
+
+    priv = et_status_bar_get_instance_private (self);
+
+    priv->timer_id = 0;
+}
+
+static void
+et_status_bar_start_timer (EtStatusBar *self)
+{
+    EtStatusBarPrivate *priv;
+
+    priv = et_status_bar_get_instance_private (self);
+
+    et_status_bar_remove_timer (self);
+    priv->timer_id = g_timeout_add_seconds_full (G_PRIORITY_DEFAULT, 4,
+                                                 (GSourceFunc)et_status_bar_stop_timer,
+                                                 self,
+                                                 (GDestroyNotify)et_status_bar_reset_timer);
+    g_source_set_name_by_id (priv->timer_id, "Statusbar stop timer");
+}
+
+static void
+et_status_bar_remove_timer (EtStatusBar *self)
+{
+    EtStatusBarPrivate *priv;
+
+    priv = et_status_bar_get_instance_private (self);
+
+    if (priv->timer_id)
+    {
+        et_status_bar_stop_timer (self);
+        g_source_remove (priv->timer_id);
+        et_status_bar_reset_timer (self);
+    }
+}
+
+/*
+ * Send a message to the status bar
+ *  - with_timer: if TRUE, the message will be displayed during 4s
+ *                if FALSE, the message will be displayed up to the next posted message
+ */
+void
+et_status_bar_message (EtStatusBar *self,
+                       const gchar *message,
+                       gboolean with_timer)
+{
+    EtStatusBarPrivate *priv;
+    gchar *msg_temp;
+
+    g_return_if_fail (ET_STATUS_BAR (self));
+
+    priv = et_status_bar_get_instance_private (self);
+
+    msg_temp = Try_To_Validate_Utf8_String (message);
+    
+    /* Push the given message */
+    if (with_timer)
+    {
+        et_status_bar_start_timer (self);
+        gtk_statusbar_push (GTK_STATUSBAR (self), priv->timer_context,
+                            msg_temp);
+    }
+    else
+    {
+        gtk_statusbar_pop (GTK_STATUSBAR (self), priv->message_context);
+        gtk_statusbar_push (GTK_STATUSBAR (self), priv->message_context,
+                            msg_temp);
+    }
+
+    g_free (msg_temp);
+}
+
+static void
+create_status_bar (EtStatusBar *self)
+{
+    EtStatusBarPrivate *priv;
+
+    priv = et_status_bar_get_instance_private (self);
+
+    /* Specify a size to avoid statubar resizing if the message is too long */
+    gtk_widget_set_size_request (GTK_WIDGET (self), 200, -1);
+
+    /* Create serie */
+    priv->message_context = gtk_statusbar_get_context_id (GTK_STATUSBAR (self),
+                                                          "messages");
+    priv->timer_context = gtk_statusbar_get_context_id (GTK_STATUSBAR (self),
+                                                        "timer");
+
+    et_status_bar_message (self, _("Ready to start"), TRUE);
+}
+
+static void
+et_status_bar_init (EtStatusBar *self)
+{
+    self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, ET_TYPE_STATUS_BAR,
+                                              EtStatusBarPrivate);
+
+    create_status_bar (self);
+}
+
+static void
+et_status_bar_class_init (EtStatusBarClass *klass)
+{
+    g_type_class_add_private (klass, sizeof (EtStatusBarPrivate));
+}
+
+/*
+ * et_status_bar_new:
+ *
+ * Create a new EtStatusBar instance.
+ *
+ * Returns: a new #EtStatusBar
+ */
+GtkWidget *
+et_status_bar_new (void)
+{
+    return g_object_new (ET_TYPE_STATUS_BAR, NULL);
+}
diff --git a/src/status_bar.h b/src/status_bar.h
new file mode 100644
index 0000000..abd038f
--- /dev/null
+++ b/src/status_bar.h
@@ -0,0 +1,52 @@
+/* EasyTAG - Tag editor for audio files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ * Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
+ *
+ * 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
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef ET_STATUS_BAR_H_
+#define ET_STATUS_BAR_H_
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define ET_TYPE_STATUS_BAR (et_status_bar_get_type ())
+#define ET_STATUS_BAR(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), ET_TYPE_STATUS_BAR, EtStatusBar))
+
+typedef struct _EtStatusBar EtStatusBar;
+typedef struct _EtStatusBarClass EtStatusBarClass;
+typedef struct _EtStatusBarPrivate EtStatusBarPrivate;
+
+struct _EtStatusBar
+{
+    /*< private >*/
+    GtkStatusbar parent_instance;
+    EtStatusBarPrivate *priv;
+};
+
+struct _EtStatusBarClass
+{
+    /*< private >*/
+    GtkStatusbarClass parent_class;
+};
+
+GType et_status_bar_get_type (void);
+GtkWidget * et_status_bar_new (void);
+void et_status_bar_message (EtStatusBar *self, const gchar *message, gboolean with_timer);
+
+G_END_DECLS
+
+#endif /* ET_STATUS_BAR_H_ */
diff --git a/src/tag_area.c b/src/tag_area.c
new file mode 100644
index 0000000..079f9b6
--- /dev/null
+++ b/src/tag_area.c
@@ -0,0 +1,3333 @@
+/* EasyTAG - tag editor for audio files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ *
+ * 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 (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+#include "config.h"
+
+#include "tag_area.h"
+
+#include <ctype.h>
+#include <glib/gi18n.h>
+
+#include "application_window.h"
+#include "charset.h"
+#include "easytag.h"
+#include "et_core.h"
+#include "genres.h"
+#include "log.h"
+#include "misc.h"
+#include "picture.h"
+#include "scan.h"
+#include "scan_dialog.h"
+
+/* TODO: Use G_DEFINE_TYPE_WITH_PRIVATE. */
+G_DEFINE_TYPE (EtTagArea, et_tag_area, GTK_TYPE_BIN)
+
+#define et_tag_area_get_instance_private(area) (area->priv)
+
+struct _EtTagAreaPrivate
+{
+    GtkWidget *label;
+    GtkWidget *notebook;
+
+    GtkWidget *title_label;
+    GtkWidget *title_entry;
+    GtkWidget *artist_label;
+    GtkWidget *artist_entry;
+    GtkWidget *album_artist_label;
+    GtkWidget *album_artist_entry;
+    GtkWidget *album_label;
+    GtkWidget *album_entry;
+    GtkWidget *disc_number_label;
+    GtkWidget *disc_number_entry;
+    GtkWidget *year_label;
+    GtkWidget *year_entry;
+    GtkWidget *track_label;
+    GtkWidget *track_combo_entry;
+    GtkWidget *track_total_entry;
+    GtkWidget *genre_label;
+    GtkWidget *genre_combo_entry;
+    GtkWidget *comment_label;
+    GtkWidget *comment_entry;
+    GtkWidget *composer_label;
+    GtkWidget *composer_entry;
+    GtkWidget *orig_artist_label;
+    GtkWidget *orig_artist_entry;
+    GtkWidget *copyright_label;
+    GtkWidget *copyright_entry;
+    GtkWidget *url_label;
+    GtkWidget *url_entry;
+    GtkWidget *encoded_by_label;
+    GtkWidget *encoded_by_entry;
+
+    GtkListStore *genre_combo_model;
+    GtkListStore *track_combo_model;
+
+    GtkWidget *picture_entry_view;
+
+    /* Other for picture. */
+    GtkWidget *remove_image_toolitem;
+    GtkWidget *add_image_toolitem;
+    GtkWidget *save_image_toolitem;
+    GtkWidget *image_properties_toolitem;
+
+    /* Notebook tabs. */
+    GtkWidget *images_tab;
+
+    /* Image treeview model. */
+    GtkListStore *images_model;
+
+    /* Mini buttons. */
+    GtkWidget *track_sequence_button;
+    GtkWidget *track_number_button;
+    GtkWidget *apply_image_toolitem;
+};
+
+enum
+{
+    TRACK_COLUMN_TRACK_NUMBER,
+    TRACK_COLUMN_COUNT
+};
+
+enum
+{
+    GENRE_COLUMN_GENRE,
+    GENRE_COLUMN_COUNT
+};
+
+enum
+{
+    TARGET_URI_LIST
+};
+
+enum /* Columns for picture_entry_view. */
+{
+    PICTURE_COLUMN_PIC,
+    PICTURE_COLUMN_TEXT,
+    PICTURE_COLUMN_DATA,
+    PICTURE_COLUMN_COUNT
+};
+
+enum /* Columns for list in properties window. */
+{
+    PICTURE_TYPE_COLUMN_TEXT,
+    PICTURE_TYPE_COLUMN_TYPE_CODE,
+    PICTURE_TYPE_COLUMN_COUNT
+};
+
+static void
+on_apply_to_selection (GObject *object,
+                       EtTagArea *self)
+{
+    EtTagAreaPrivate *priv;
+    EtApplicationWindow *window;
+    GList *etfilelist = NULL;
+    GList *selection_filelist = NULL;
+    GList *l;
+    gchar *string_to_set = NULL;
+    gchar *string_to_set1 = NULL;
+    gchar *msg = NULL;
+    ET_File *etfile;
+    File_Tag *FileTag;
+    GtkTreeSelection *selection;
+
+    g_return_if_fail (ETCore->ETFileDisplayedList != NULL);
+
+    priv = et_tag_area_get_instance_private (self);
+
+    window = ET_APPLICATION_WINDOW (MainWindow);
+
+    // Save the current displayed data
+    ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
+
+    /* Warning : 'selection_filelist' is not a list of 'ETFile' items! */
+    selection = et_application_window_browser_get_selection (window);
+    selection_filelist = gtk_tree_selection_get_selected_rows (selection, NULL);
+
+    // Create an 'ETFile' list from 'selection_filelist'
+    for (l = selection_filelist; l != NULL; l = g_list_next (l))
+    {
+        etfile = et_application_window_browser_get_et_file_from_path (window,
+                                                                      l->data);
+        etfilelist = g_list_prepend (etfilelist, etfile);
+    }
+
+    etfilelist = g_list_reverse (etfilelist);
+    g_list_free_full (selection_filelist, (GDestroyNotify)gtk_tree_path_free);
+
+
+    if (object == G_OBJECT (priv->title_entry))
+    {
+        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(priv->title_entry),0,-1); // The string to apply to all other files
+
+        for (l = etfilelist; l != NULL; l = g_list_next (l))
+        {
+            etfile = (ET_File *)l->data;
+            FileTag = ET_File_Tag_Item_New();
+            ET_Copy_File_Tag_Item(etfile,FileTag);
+            ET_Set_Field_File_Tag_Item(&FileTag->title,string_to_set);
+            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
+        }
+        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
+        {
+            msg = g_strdup_printf (_("Selected files tagged with title ‘%s’"),
+                                   string_to_set);
+        }
+        else
+        {
+            msg = g_strdup (_("Removed title from selected files"));
+        }
+    }
+    else if (object == G_OBJECT (priv->artist_entry))
+    {
+        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(priv->artist_entry),0,-1);
+
+        for (l = etfilelist; l != NULL; l = g_list_next (l))
+        {
+            etfile = (ET_File *)l->data;
+            FileTag = ET_File_Tag_Item_New();
+            ET_Copy_File_Tag_Item(etfile,FileTag);
+            ET_Set_Field_File_Tag_Item(&FileTag->artist,string_to_set);
+            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
+        }
+        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
+        {
+            msg = g_strdup_printf (_("Selected files tagged with artist ‘%s’"),
+                                   string_to_set);
+        }
+        else
+        {
+            msg = g_strdup (_("Removed artist from selected files"));
+        }
+    }
+    else if (object == G_OBJECT (priv->album_artist_entry))
+    {
+        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(priv->album_artist_entry),0,-1);
+        for (l = etfilelist; l != NULL; l = g_list_next (l))
+        {
+            etfile = (ET_File *)l->data;
+            FileTag = ET_File_Tag_Item_New();
+            ET_Copy_File_Tag_Item(etfile,FileTag);
+            ET_Set_Field_File_Tag_Item(&FileTag->album_artist,string_to_set);
+            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
+        }
+        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
+        {
+            msg = g_strdup_printf (_("Selected files tagged with album artist ‘%s’"),
+                                   string_to_set);
+        }
+        else
+        {
+            msg = g_strdup (_("Removed album artist from selected files"));
+        }
+    }
+    else if (object == G_OBJECT (priv->album_entry))
+    {
+        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(priv->album_entry),0,-1);
+
+        for (l = etfilelist; l != NULL; l = g_list_next (l))
+        {
+            etfile = (ET_File *)l->data;
+            FileTag = ET_File_Tag_Item_New();
+            ET_Copy_File_Tag_Item(etfile,FileTag);
+            ET_Set_Field_File_Tag_Item(&FileTag->album,string_to_set);
+            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
+        }
+        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
+        {
+            msg = g_strdup_printf (_("Selected files tagged with album ‘%s’"),
+                                   string_to_set);
+        }
+        else
+        {
+            msg = g_strdup (_("Removed album name from selected files"));
+        }
+    }
+    else if (object == G_OBJECT (priv->disc_number_entry))
+    {
+        const gchar *entry_text;
+        gchar *separator;
+
+        entry_text = gtk_entry_get_text (GTK_ENTRY (priv->disc_number_entry));
+        separator = g_utf8_strchr (entry_text, -1, '/');
+
+        if (separator)
+        {
+            string_to_set1 = g_strdup (separator + 1);
+            string_to_set = g_strndup (entry_text,
+                                       separator - entry_text);
+        }
+        else
+        {
+            string_to_set = g_strdup (entry_text);
+            string_to_set1 = NULL;
+        }
+
+        for (l = etfilelist; l != NULL; l = g_list_next (l))
+        {
+            etfile = (ET_File *)l->data;
+            FileTag = ET_File_Tag_Item_New();
+            ET_Copy_File_Tag_Item(etfile,FileTag);
+            ET_Set_Field_File_Tag_Item (&FileTag->disc_number, string_to_set);
+            ET_Set_Field_File_Tag_Item (&FileTag->disc_total, string_to_set1);
+            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
+        }
+
+        if (string_to_set != NULL && g_utf8_strlen (string_to_set, -1) > 0)
+        {
+            if (string_to_set1 != NULL
+                && g_utf8_strlen (string_to_set1, -1) > 0)
+            {
+                msg = g_strdup_printf (_("Selected files tagged with disc number ‘%s/%s’"),
+                                       string_to_set, string_to_set1);
+            }
+            else
+            {
+                msg = g_strdup_printf (_("Selected files tagged with disc number like ‘xx’"));
+            }
+        }
+        else
+        {
+            msg = g_strdup (_("Removed disc number from selected files"));
+        }
+    }
+    else if (object == G_OBJECT (priv->year_entry))
+    {
+        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(priv->year_entry),0,-1);
+
+        for (l = etfilelist; l != NULL; l = g_list_next (l))
+        {
+            etfile = (ET_File *)l->data;
+            FileTag = ET_File_Tag_Item_New();
+            ET_Copy_File_Tag_Item(etfile,FileTag);
+            ET_Set_Field_File_Tag_Item(&FileTag->year,string_to_set);
+            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
+        }
+        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
+        {
+            msg = g_strdup_printf (_("Selected files tagged with year ‘%s’"),
+                                   string_to_set);
+        }
+        else
+        {
+            msg = g_strdup (_("Removed year from selected files"));
+        }
+    }
+    else if (object == G_OBJECT (priv->track_total_entry))
+    {
+        /* Used of Track and Total Track values */
+        string_to_set = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(priv->track_combo_entry)))));
+        string_to_set1 = gtk_editable_get_chars(GTK_EDITABLE(priv->track_total_entry),0,-1);
+
+        for (l = etfilelist; l != NULL; l = g_list_next (l))
+        {
+            etfile = (ET_File *)l->data;
+            FileTag = ET_File_Tag_Item_New();
+            ET_Copy_File_Tag_Item(etfile,FileTag);
+
+            // We apply the TrackEntry field to all others files only if it is to delete
+            // the field (string=""). Else we don't overwrite the track number
+            if (!string_to_set || g_utf8_strlen(string_to_set, -1) == 0)
+                ET_Set_Field_File_Tag_Item(&FileTag->track,string_to_set);
+            ET_Set_Field_File_Tag_Item(&FileTag->track_total,string_to_set1);
+            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
+        }
+
+        if ( string_to_set && g_utf8_strlen(string_to_set, -1) > 0 ) //&& atoi(string_to_set)>0 )
+        {
+            if ( string_to_set1 != NULL && g_utf8_strlen(string_to_set1, -1)>0 ) //&& atoi(string_to_set1)>0 )
+            {
+                msg = g_strdup_printf (_("Selected files tagged with track like ‘xx/%s’"),
+                                       string_to_set1);
+            }else
+            {
+                msg = g_strdup_printf (_("Selected files tagged with track like ‘xx’"));
+            }
+        }
+        else
+        {
+            msg = g_strdup (_("Removed track number from selected files"));
+        }
+    }
+    else if (object == G_OBJECT (priv->track_sequence_button))
+    {
+        /* This part doesn't set the same track number to all files, but sequence the tracks.
+         * So we must browse the whole 'etfilelistfull' to get position of each selected file.
+         * Note : 'etfilelistfull' and 'etfilelist' must be sorted in the same order */
+        GList *etfilelistfull = NULL;
+        gint sort_mode;
+        gchar *path = NULL;
+        gchar *path1 = NULL;
+        gint i = 0;
+
+        /* FIX ME!: see to fill also the Total Track (it's a good idea?) */
+        etfilelistfull = g_list_first(ETCore->ETFileList);
+
+        /* Sort 'etfilelistfull' and 'etfilelist' in the same order. */
+        sort_mode = g_settings_get_enum (MainSettings, "sort-mode");
+        etfilelist = ET_Sort_File_List (etfilelist, sort_mode);
+        etfilelistfull = ET_Sort_File_List (etfilelistfull, sort_mode);
+
+        while (etfilelist && etfilelistfull)
+        {
+            // To get the path of the file
+            File_Name *FileNameCur = (File_Name *)((ET_File *)etfilelistfull->data)->FileNameCur->data;
+            // The ETFile in the selected file list
+            etfile = etfilelist->data;
+
+            // Restart counter when entering a new directory
+            g_free(path1);
+            path1 = g_path_get_dirname(FileNameCur->value);
+            if ( path && path1 && strcmp(path,path1)!=0 )
+                i = 0;
+
+            string_to_set = et_track_number_to_string (++i);
+
+            // The file is in the selection?
+            if ( (ET_File *)etfilelistfull->data == etfile )
+            {
+                FileTag = ET_File_Tag_Item_New();
+                ET_Copy_File_Tag_Item(etfile,FileTag);
+                ET_Set_Field_File_Tag_Item(&FileTag->track,string_to_set);
+                ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
+
+                if (!etfilelist->next) break;
+                etfilelist = g_list_next(etfilelist);
+            }
+
+            g_free(string_to_set);
+            g_free(path);
+            path = g_strdup(path1);
+
+            etfilelistfull = g_list_next(etfilelistfull);
+        }
+        g_free(path);
+        g_free(path1);
+        //msg = g_strdup_printf(_("All %d tracks numbered sequentially."), ETCore->ETFileSelectionList_Length);
+        msg = g_strdup_printf (_("Selected tracks numbered sequentially"));
+    }
+    else if (object==G_OBJECT(priv->track_number_button))
+    {
+        /* Used of Track and Total Track values */
+        for (l = etfilelist; l != NULL; l = g_list_next (l))
+        {
+            gchar *path_utf8, *filename_utf8;
+
+            etfile        = (ET_File *)l->data;
+            filename_utf8 = ((File_Name *)etfile->FileNameNew->data)->value_utf8;
+            path_utf8     = g_path_get_dirname(filename_utf8);
+
+            string_to_set = et_track_number_to_string (ET_Get_Number_Of_Files_In_Directory (path_utf8));
+
+            g_free(path_utf8);
+            if (!string_to_set1)
+                string_to_set1 = g_strdup(string_to_set); // Just for the message below...
+
+            FileTag = ET_File_Tag_Item_New();
+            ET_Copy_File_Tag_Item(etfile,FileTag);
+            ET_Set_Field_File_Tag_Item(&FileTag->track_total,string_to_set);
+            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
+        }
+
+        if ( string_to_set1 != NULL && g_utf8_strlen(string_to_set1, -1)>0 ) //&& atoi(string_to_set1)>0 )
+        {
+            msg = g_strdup_printf (_("Selected files tagged with track like ‘xx/%s’"),
+                                   string_to_set1);
+        }
+        else
+        {
+            msg = g_strdup (_("Removed track number from selected files"));
+        }
+    }
+    else if (object == G_OBJECT (gtk_bin_get_child (GTK_BIN (priv->genre_combo_entry))))
+    {
+        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(gtk_bin_get_child(GTK_BIN(priv->genre_combo_entry))),0,-1);
+
+        for (l = etfilelist; l != NULL; l = g_list_next (l))
+        {
+            etfile = (ET_File *)l->data;
+            FileTag = ET_File_Tag_Item_New();
+            ET_Copy_File_Tag_Item(etfile,FileTag);
+            ET_Set_Field_File_Tag_Item(&FileTag->genre,string_to_set);
+            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
+        }
+        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
+        {
+            msg = g_strdup_printf (_("Selected files tagged with genre ‘%s’"),
+                                   string_to_set);
+        }
+        else
+        {
+            msg = g_strdup (_("Removed genre from selected files"));
+        }
+    }
+    else if (object == G_OBJECT (priv->comment_entry))
+    {
+        //GtkTextBuffer *textbuffer;
+        //GtkTextIter    start_iter;
+        //GtkTextIter    end_iter;
+        //textbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(CommentView));
+        //gtk_text_buffer_get_bounds(GTK_TEXT_BUFFER(textbuffer),&start_iter,&end_iter);
+        //string_to_set = gtk_text_buffer_get_text(GTK_TEXT_BUFFER(textbuffer),&start_iter,&end_iter,TRUE);
+
+        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(priv->comment_entry),0,-1);
+
+        for (l = etfilelist; l != NULL; l = g_list_next (l))
+        {
+            etfile = (ET_File *)l->data;
+            FileTag = ET_File_Tag_Item_New();
+            ET_Copy_File_Tag_Item(etfile,FileTag);
+            ET_Set_Field_File_Tag_Item(&FileTag->comment,string_to_set);
+            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
+        }
+        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
+        {
+            msg = g_strdup_printf (_("Selected files tagged with comment ‘%s’"),
+                                   string_to_set);
+        }
+        else
+        {
+            msg = g_strdup (_("Removed comment from selected files"));
+        }
+    }
+    else if (object == G_OBJECT (priv->composer_entry))
+    {
+        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(priv->composer_entry),0,-1);
+        for (l = etfilelist; l != NULL; l = g_list_next (l))
+        {
+            etfile = (ET_File *)l->data;
+            FileTag = ET_File_Tag_Item_New();
+            ET_Copy_File_Tag_Item(etfile,FileTag);
+            ET_Set_Field_File_Tag_Item(&FileTag->composer,string_to_set);
+            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
+        }
+        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
+        {
+            msg = g_strdup_printf (_("Selected files tagged with composer ‘%s’"),
+                                   string_to_set);
+        }
+        else
+        {
+            msg = g_strdup (_("Removed composer from selected files"));
+        }
+    }
+    else if (object == G_OBJECT (priv->orig_artist_entry))
+    {
+        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(priv->orig_artist_entry),0,-1);
+
+        for (l = etfilelist; l != NULL; l = g_list_next (l))
+        {
+            etfile = (ET_File *)l->data;
+            FileTag = ET_File_Tag_Item_New();
+            ET_Copy_File_Tag_Item(etfile,FileTag);
+            ET_Set_Field_File_Tag_Item(&FileTag->orig_artist,string_to_set);
+            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
+        }
+        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
+        {
+            msg = g_strdup_printf (_("Selected files tagged with original artist ‘%s’"),
+                                   string_to_set);
+        }
+        else
+        {
+            msg = g_strdup (_("Removed original artist from selected files"));
+        }
+    }
+    else if (object == G_OBJECT (priv->copyright_entry))
+    {
+        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(priv->copyright_entry),0,-1);
+
+        for (l = etfilelist; l != NULL; l = g_list_next (l))
+        {
+            etfile = (ET_File *)l->data;
+            FileTag = ET_File_Tag_Item_New();
+            ET_Copy_File_Tag_Item(etfile,FileTag);
+            ET_Set_Field_File_Tag_Item(&FileTag->copyright,string_to_set);
+            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
+        }
+        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
+        {
+            msg = g_strdup_printf (_("Selected files tagged with copyright ‘%s’"),
+                                   string_to_set);
+        }
+        else
+        {
+            msg = g_strdup (_("Removed copyright from selected files"));
+        }
+    }
+    else if (object == G_OBJECT (priv->url_entry))
+    {
+        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(priv->url_entry),0,-1);
+
+        for (l = etfilelist; l != NULL; l = g_list_next (l))
+        {
+            etfile = (ET_File *)l->data;
+            FileTag = ET_File_Tag_Item_New();
+            ET_Copy_File_Tag_Item(etfile,FileTag);
+            ET_Set_Field_File_Tag_Item(&FileTag->url,string_to_set);
+            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
+        }
+        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
+        {
+            msg = g_strdup_printf (_("Selected files tagged with URL ‘%s’"),
+                                   string_to_set);
+        }
+        else
+        {
+            msg = g_strdup (_("Removed URL from selected files"));
+        }
+    }
+    else if (object == G_OBJECT (priv->encoded_by_entry))
+    {
+        string_to_set = gtk_editable_get_chars(GTK_EDITABLE(priv->encoded_by_entry),0,-1);
+
+        for (l = etfilelist; l != NULL; l = g_list_next (l))
+        {
+            etfile = (ET_File *)l->data;
+            FileTag = ET_File_Tag_Item_New();
+            ET_Copy_File_Tag_Item(etfile,FileTag);
+            ET_Set_Field_File_Tag_Item(&FileTag->encoded_by,string_to_set);
+            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
+        }
+        if (string_to_set != NULL && g_utf8_strlen(string_to_set, -1)>0)
+        {
+            msg = g_strdup_printf (_("Selected files tagged with encoder name ‘%s’"),
+                                   string_to_set);
+        }
+        else
+        {
+            msg = g_strdup (_("Removed encoder name from selected files"));
+        }
+    }
+    else if (object == G_OBJECT (priv->apply_image_toolitem))
+    {
+        Picture *res = NULL, *pic, *prev_pic = NULL;
+        GtkTreeModel *model;
+        GtkTreeIter iter;
+
+        model = gtk_tree_view_get_model(GTK_TREE_VIEW(priv->picture_entry_view));
+        if (gtk_tree_model_get_iter_first(model, &iter))
+        {
+            do
+            {
+                gtk_tree_model_get(model, &iter, PICTURE_COLUMN_DATA, &pic, -1);
+                pic = Picture_Copy_One(pic);
+                if (!res)
+                    res = pic;
+                else
+                    prev_pic->next = pic;
+                prev_pic = pic;
+            } while (gtk_tree_model_iter_next(model, &iter));
+        }
+
+        for (l = etfilelist; l != NULL; l = g_list_next (l))
+        {
+            etfile = (ET_File *)l->data;
+            FileTag = ET_File_Tag_Item_New();
+            ET_Copy_File_Tag_Item(etfile,FileTag);
+            ET_Set_Field_File_Tag_Picture((Picture **)&FileTag->picture, res);
+            ET_Manage_Changes_Of_File_Data(etfile,NULL,FileTag);
+        }
+        if (res)
+        {
+            msg = g_strdup (_("Selected files tagged with images"));
+        }
+        else
+        {
+            msg = g_strdup (_("Removed images from selected files"));
+        }
+
+        Picture_Free (res);
+    }
+
+    g_list_free(etfilelist);
+
+    /* Refresh the whole list (faster than file by file) to show changes. */
+    et_application_window_browser_refresh_list (window);
+
+    /* Display the current file (Needed when sequencing tracks) */
+    ET_Display_File_Data_To_UI(ETCore->ETFileDisplayed);
+
+    if (msg)
+    {
+        Log_Print(LOG_OK,"%s",msg);
+        et_application_window_status_bar_message (window, msg,TRUE);
+        g_free(msg);
+    }
+    g_free(string_to_set);
+    g_free(string_to_set1);
+
+    /* To update state of Undo button */
+    et_application_window_update_actions (window);
+}
+
+static void
+on_entry_icon_release (GtkEntry *entry,
+                       GtkEntryIconPosition icon_pos,
+                       GdkEvent *event,
+                       EtTagArea *self)
+{
+    on_apply_to_selection (G_OBJECT (entry), self);
+}
+
+static void
+Convert_P20_And_Underscore_Into_Spaces (GtkWidget *entry)
+{
+    gchar *string = g_strdup (gtk_entry_get_text (GTK_ENTRY (entry)));
+
+    Scan_Convert_Underscore_Into_Space (string);
+    Scan_Convert_P20_Into_Space (string);
+    gtk_entry_set_text (GTK_ENTRY (entry), string);
+    g_free (string);
+}
+
+static void
+Convert_Space_Into_Underscore (GtkWidget *entry)
+{
+    gchar *string = g_strdup (gtk_entry_get_text (GTK_ENTRY (entry)));
+
+    Scan_Convert_Space_Into_Underscore (string);
+    gtk_entry_set_text (GTK_ENTRY (entry), string);
+    g_free (string);
+}
+
+static void
+Convert_All_Uppercase (GtkWidget *entry)
+{
+    gchar *res;
+    const gchar *string = gtk_entry_get_text (GTK_ENTRY (entry));
+
+    res = Scan_Process_Fields_All_Uppercase (string);
+    gtk_entry_set_text (GTK_ENTRY (entry), res);
+    g_free (res);
+}
+
+static void
+Convert_All_Lowercase (GtkWidget *entry)
+{
+    gchar *res;
+    const gchar *string = gtk_entry_get_text (GTK_ENTRY (entry));
+
+    res = Scan_Process_Fields_All_Downcase (string);
+    gtk_entry_set_text (GTK_ENTRY (entry), res);
+    g_free (res);
+}
+
+static void
+Convert_Letter_Uppercase (GtkWidget *entry)
+{
+    gchar *res;
+    const gchar *string = gtk_entry_get_text (GTK_ENTRY (entry));
+
+    res = Scan_Process_Fields_Letter_Uppercase (string);
+    gtk_entry_set_text (GTK_ENTRY (entry), res);
+    g_free (res);
+}
+
+static void
+Convert_First_Letters_Uppercase (GtkWidget *entry)
+{
+    gchar *string;
+    gboolean uppercase_preps;
+    gboolean handle_roman;
+
+    string = g_strdup (gtk_entry_get_text (GTK_ENTRY (entry)));
+    uppercase_preps = g_settings_get_boolean (MainSettings,
+                                              "process-uppercase-prepositions");
+    handle_roman = g_settings_get_boolean (MainSettings,
+                                           "process-detect-roman-numerals");
+
+    Scan_Process_Fields_First_Letters_Uppercase (&string, uppercase_preps,
+                                                 handle_roman);
+    gtk_entry_set_text (GTK_ENTRY (entry), string);
+    g_free (string);
+}
+
+static void
+Convert_Remove_Space (GtkWidget *entry)
+{
+    gchar *string = g_strdup (gtk_entry_get_text (GTK_ENTRY (entry)));
+
+    Scan_Process_Fields_Remove_Space (string);
+    gtk_entry_set_text (GTK_ENTRY (entry), string);
+    g_free (string);
+}
+
+static void
+Convert_Insert_Space (GtkWidget *entry)
+{
+    gchar *res;
+    const gchar *string = (gtk_entry_get_text (GTK_ENTRY (entry)));
+
+    res = Scan_Process_Fields_Insert_Space (string);
+    gtk_entry_set_text (GTK_ENTRY (entry), res);
+    g_free (res);
+}
+
+static void
+Convert_Only_One_Space (GtkWidget *entry)
+{
+    gchar *string = g_strdup (gtk_entry_get_text (GTK_ENTRY (entry)));
+
+    Scan_Process_Fields_Keep_One_Space (string);
+    gtk_entry_set_text (GTK_ENTRY (entry), string);
+    g_free (string);
+}
+
+static void
+Convert_Remove_All_Text (GtkWidget *entry)
+{
+    gtk_entry_set_text (GTK_ENTRY (entry), "");
+}
+
+static void
+on_apply_to_selection_menu_item (GObject *entry,
+                                 GtkMenuItem *menu_item)
+{
+    EtTagArea *self;
+
+    self = g_object_get_data (G_OBJECT (menu_item), "tag-area");
+
+    on_apply_to_selection (entry, self);
+}
+
+/* TODO: Support populate-all and do not assume the widget is a GtkMenu.
+ * Popup menu attached to all entries of tag + filename + rename combobox.
+ * Displayed when pressing the right mouse button and contains functions to process ths strings.
+ */
+void
+on_entry_populate_popup (GtkEntry *entry,
+                         GtkWidget *menu,
+                         EtTagArea *self)
+{
+    GtkWidget *menu_item;
+
+    /* Menu items */
+    menu_item = gtk_menu_item_new_with_label (_("Tag selected files with this field"));
+    g_object_set_data (G_OBJECT (menu_item), "tag-area", self);
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
+    g_signal_connect_swapped (menu_item, "activate",
+                              G_CALLBACK (on_apply_to_selection_menu_item),
+                              G_OBJECT (entry));
+
+    /* Separator */
+    menu_item = gtk_menu_item_new ();
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
+
+    menu_item = gtk_menu_item_new_with_label (_("Convert ‘_’ and ‘%20’ to spaces"));
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
+    g_signal_connect_swapped (menu_item, "activate",
+                              G_CALLBACK (Convert_P20_And_Underscore_Into_Spaces),
+                              G_OBJECT (entry));
+
+    menu_item = gtk_menu_item_new_with_label (_("Convert ‘ ’ to ‘_’"));
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
+    g_signal_connect_swapped (menu_item, "activate",
+                              G_CALLBACK (Convert_Space_Into_Underscore),
+                              G_OBJECT (entry));
+
+    /* Separator */
+    menu_item = gtk_menu_item_new ();
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
+
+    menu_item = gtk_menu_item_new_with_label (_("All uppercase"));
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
+    g_signal_connect_swapped (menu_item, "activate",
+                              G_CALLBACK (Convert_All_Uppercase),
+                              G_OBJECT (entry));
+
+    menu_item = gtk_menu_item_new_with_label (_("All lowercase"));
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
+    g_signal_connect_swapped (menu_item, "activate",
+                              G_CALLBACK (Convert_All_Lowercase),
+                              G_OBJECT (entry));
+
+    menu_item = gtk_menu_item_new_with_label (_("First letter uppercase"));
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
+    g_signal_connect_swapped (menu_item, "activate",
+                              G_CALLBACK (Convert_Letter_Uppercase),
+                              G_OBJECT (entry));
+
+    menu_item = gtk_menu_item_new_with_label (_("First letter uppercase of each word"));
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
+    g_signal_connect_swapped (menu_item, "activate",
+                              G_CALLBACK (Convert_First_Letters_Uppercase),
+                              G_OBJECT (entry));
+
+    /* Separator */
+    menu_item = gtk_menu_item_new ();
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
+
+    menu_item = gtk_menu_item_new_with_label (_("Remove spaces"));
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
+    g_signal_connect_swapped (menu_item, "activate",
+                              G_CALLBACK (Convert_Remove_Space),
+                              G_OBJECT (entry));
+
+    menu_item = gtk_menu_item_new_with_label (_("Insert space before uppercase letter"));
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
+    g_signal_connect_swapped (menu_item, "activate",
+                              G_CALLBACK (Convert_Insert_Space),
+                              G_OBJECT (entry));
+
+    menu_item = gtk_menu_item_new_with_label (_("Remove duplicate spaces or underscores"));
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
+    g_signal_connect_swapped (menu_item, "activate",
+                              G_CALLBACK (Convert_Only_One_Space),
+                              G_OBJECT (entry));
+
+    menu_item = gtk_menu_item_new_with_label (_("Remove all text"));
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
+    g_signal_connect_swapped (menu_item, "activate",
+                              G_CALLBACK (Convert_Remove_All_Text),
+                              G_OBJECT (entry));
+
+    gtk_widget_show_all (menu);
+}
+
+/*
+ * et_tag_field_on_key_press_event:
+ * @entry: the tag entry field on which the event was generated
+ * @event: the generated event
+ * @user_data: user data set when the signal was connected
+ *
+ * Handle the Ctrl+Return combination being pressed in the tag field GtkEntrys
+ * and apply the tag to selected files.
+ *
+ * Returns: %TRUE if the event was handled, %FALSE if the event should
+ * propagate further
+ */
+static gboolean
+et_tag_field_on_key_press_event (GtkEntry *entry, GdkEventKey *event,
+                                 gpointer user_data)
+{
+    GdkModifierType modifiers = gtk_accelerator_get_default_mod_mask ();
+
+    switch (event->keyval)
+    {
+        case GDK_KEY_Return:
+        case GDK_KEY_KP_Enter:
+        case GDK_KEY_ISO_Enter:
+            if ((event->state & modifiers) == GDK_CONTROL_MASK)
+            {
+                on_apply_to_selection (G_OBJECT (entry),
+                                       ET_TAG_AREA (user_data));
+            }
+            return TRUE;
+        default:
+            return FALSE;
+    }
+}
+
+/*
+ * et_tag_field_connect_signals:
+ * @entry: the entry for which to connect signals
+ *
+ * Connect the GtkWidget::key-press-event and GtkEntry::icon-release signals
+ * of @entry to appropriate handlers for tag entry fields.
+ */
+static void
+et_tag_field_connect_signals (GtkEntry *entry,
+                              EtTagArea *self)
+{
+    g_signal_connect_after (entry, "key-press-event",
+                            G_CALLBACK (et_tag_field_on_key_press_event),
+                            self);
+    g_signal_connect (entry, "icon-release",
+                      G_CALLBACK (on_entry_icon_release),
+                      self);
+    g_signal_connect (entry, "populate-popup",
+                      G_CALLBACK (on_entry_populate_popup), self);
+}
+
+/*
+ * Load the genres list to the combo, and sorts it
+ */
+static void
+populate_genre_combo (EtTagArea *self)
+{
+    EtTagAreaPrivate *priv;
+    gsize i;
+
+    priv = et_tag_area_get_instance_private (self);
+
+    gtk_list_store_insert_with_values (priv->genre_combo_model, NULL,
+                                       G_MAXINT, GENRE_COLUMN_GENRE, "", -1);
+    gtk_list_store_insert_with_values (priv->genre_combo_model, NULL,
+                                       G_MAXINT, GENRE_COLUMN_GENRE, "Unknown",
+                                       -1);
+
+    for (i = 0; i <= GENRE_MAX; i++)
+    {
+        gtk_list_store_insert_with_values (priv->genre_combo_model, NULL,
+                                           G_MAXINT, GENRE_COLUMN_GENRE,
+                                           id3_genres[i], -1);
+    }
+}
+
+/*
+ * Load the track numbers into the track combo list
+ * We limit the preloaded values to 30 to avoid lost of time with lot of files...
+ */
+static void
+populate_track_combo (EtTagArea *self)
+{
+    EtTagAreaPrivate *priv;
+    /* Length limited to 30 (instead to the number of files)! */
+    const gsize len = 30;
+    gsize i;
+    gchar *text;
+
+    priv = et_tag_area_get_instance_private (self);
+
+    /* Remove the entries in the list to avoid duplicates. */
+    gtk_list_store_clear (priv->track_combo_model);
+
+    /* Create list of tracks. */
+    for (i = 1; i <= len; i++)
+    {
+        text = et_track_number_to_string (i);
+
+        gtk_list_store_insert_with_values (priv->track_combo_model, NULL,
+                                           G_MAXINT, TRACK_COLUMN_TRACK_NUMBER,
+                                           text, -1);
+        g_free (text);
+    }
+}
+
+/*
+ * Iter compare func: Sort alphabetically
+ */
+static gint
+tree_iter_alphabetical_sort (GtkTreeModel *model,
+                             GtkTreeIter *a,
+                             GtkTreeIter *b,
+                             gpointer data)
+{
+    gchar *text1, *text1_folded;
+    gchar *text2, *text2_folded;
+    gint ret;
+
+    gtk_tree_model_get (model, a, GENRE_COLUMN_GENRE, &text1, -1);
+    gtk_tree_model_get (model, b, GENRE_COLUMN_GENRE, &text2, -1);
+
+    if (text1 == text2)
+    {
+        g_free (text1);
+        g_free (text2);
+        return 0;
+    }
+
+    if (text1 == NULL)
+    {
+        g_free (text2);
+        return -1;
+    }
+
+    if (text2 == NULL)
+    {
+        g_free (text1);
+        return 1;
+    }
+
+    text1_folded = g_utf8_casefold (text1, -1);
+    text2_folded = g_utf8_casefold (text2, -1);
+    ret = g_utf8_collate (text1_folded, text2_folded);
+
+    g_free (text1);
+    g_free (text2);
+    g_free (text1_folded);
+    g_free (text2_folded);
+
+    return ret;
+}
+
+/*
+ * To insert only digits in an entry. If the text contains only digits: returns it,
+ * else only first digits.
+ */
+static void
+Insert_Only_Digit (GtkEditable *editable,
+                   const gchar *inserted_text,
+                   gint length,
+                   gint *position,
+                   gpointer data)
+{
+    int i = 1; // Ignore first character
+    int j = 1;
+    gchar *result;
+
+    if (length<=0 || !inserted_text)
+        return;
+
+    if (!isdigit((guchar)inserted_text[0]) && inserted_text[0] != '-')
+    {
+        g_signal_stop_emission_by_name(G_OBJECT(editable),"insert_text");
+        return;
+    } else if (length == 1)
+    {
+        // We already checked the first digit...
+        return;
+    }
+
+    g_signal_stop_emission_by_name(G_OBJECT(editable),"insert_text");
+    result = g_malloc0(length+1);
+    result[0] = inserted_text[0];
+
+    // Check the rest, if any...
+    for (i = 1; i < length; i++)
+    {
+        if (isdigit((guchar)inserted_text[i]))
+        {
+            result[j++] = inserted_text[i];
+        }
+    }
+    // Null terminate for the benefit of glib/gtk
+    result[j] = '\0';
+
+    if (result[0] == '\0')
+    {
+        g_free(result);
+        return;
+    }
+
+    g_signal_handlers_block_by_func(G_OBJECT(editable),G_CALLBACK(Insert_Only_Digit),data);
+    gtk_editable_insert_text(editable, result, j, position);
+    g_signal_handlers_unblock_by_func(G_OBJECT(editable),G_CALLBACK(Insert_Only_Digit),data);
+    g_free(result);
+}
+
+/*
+ * Parse and auto complete date entry if you don't type the 4 digits.
+ */
+#include <stdlib.h>
+static void
+Parse_Date (EtTagArea *self)
+{
+    EtTagAreaPrivate *priv;
+    const gchar *year;
+    gchar *current_year;
+
+    priv = et_tag_area_get_instance_private (self);
+
+    /* Early return. */
+    if (!g_settings_get_boolean (MainSettings, "tag-date-autocomplete"))
+    {
+        return;
+    }
+
+    /* Get the info entered by user */
+    year = gtk_entry_get_text (GTK_ENTRY (priv->year_entry));
+
+    if (strcmp (year,"") != 0 && strlen (year) < 4)
+    {
+        GDateTime *dt;
+        gchar *tmp, *tmp1;
+
+        dt = g_date_time_new_now_local ();
+        current_year = g_date_time_format (dt, "%Y");
+        g_date_time_unref (dt);
+
+        tmp = &current_year[4-strlen(year)];
+
+        if (atoi (year) <= atoi (tmp))
+        {
+            sprintf (current_year, "%d", atoi (current_year) - atoi (tmp));
+            tmp1 = g_strdup_printf ("%d", atoi (current_year) + atoi (year));
+            gtk_entry_set_text (GTK_ENTRY (priv->year_entry), tmp1);
+            g_free (tmp1);
+        }
+        else
+        {
+            sprintf (current_year, "%d", atoi (current_year) - atoi (tmp)
+                     - (strlen (year) <= 0 ? 1 : strlen (year) <= 1 ? 10 :          // pow(10,strlen(year)) returns 99 instead of 100 under Win32...
+                     strlen (year) <= 2 ? 100 : strlen (year) <= 3 ? 1000 : 0));
+            tmp1 = g_strdup_printf ("%d", atoi (current_year) + atoi (year));
+            gtk_entry_set_text (GTK_ENTRY (priv->year_entry), tmp1);
+            g_free (tmp1);
+        }
+
+        g_free (current_year);
+    }
+}
+
+static gboolean
+on_year_entry_focus_out_event (GtkWidget *widget,
+                               GdkEvent *event,
+                               gpointer user_data)
+{
+    Parse_Date (ET_TAG_AREA (user_data));
+
+    return GDK_EVENT_PROPAGATE;
+}
+
+static void
+on_year_entry_activate (GtkEntry *entry,
+                        gpointer user_data)
+{
+    Parse_Date (ET_TAG_AREA (user_data));
+}
+
+static void
+on_picture_view_selection_changed (GtkTreeSelection *selection,
+                                   gpointer user_data)
+{
+    EtTagArea *self;
+    EtTagAreaPrivate *priv;
+
+    self = ET_TAG_AREA (user_data);
+    priv = et_tag_area_get_instance_private (self);
+
+    if (gtk_tree_selection_count_selected_rows (GTK_TREE_SELECTION (selection)) >= 1)
+    {
+        gtk_widget_set_sensitive (GTK_WIDGET (priv->remove_image_toolitem),
+                                  TRUE);
+        gtk_widget_set_sensitive (GTK_WIDGET (priv->save_image_toolitem),
+                                  TRUE);
+        gtk_widget_set_sensitive (GTK_WIDGET (priv->image_properties_toolitem),
+                                  TRUE);
+    }
+    else
+    {
+        gtk_widget_set_sensitive (GTK_WIDGET (priv->remove_image_toolitem),
+                                  FALSE);
+        gtk_widget_set_sensitive (GTK_WIDGET (priv->save_image_toolitem),
+                                  FALSE);
+        gtk_widget_set_sensitive (GTK_WIDGET (priv->image_properties_toolitem),
+                                  FALSE);
+    }
+}
+
+static void
+PictureEntry_Clear (EtTagArea *self)
+{
+    EtTagAreaPrivate *priv;
+    GtkTreeModel *model;
+    GtkTreeIter iter;
+    Picture *pic;
+
+    priv = et_tag_area_get_instance_private (self);
+
+    model = GTK_TREE_MODEL (priv->images_model);
+
+    if (gtk_tree_model_get_iter_first (model, &iter))
+    {
+        do
+        {
+            gtk_tree_model_get (model, &iter, PICTURE_COLUMN_DATA, &pic, -1);
+            Picture_Free (pic);
+        } while (gtk_tree_model_iter_next (model, &iter));
+    }
+
+    gtk_list_store_clear (priv->images_model);
+}
+
+static void
+PictureEntry_Update (EtTagArea *self,
+                     Picture *pic,
+                     gboolean select_it)
+{
+    EtTagAreaPrivate *priv;
+    GdkPixbufLoader *loader = 0;
+    GError *error = NULL;
+    
+    g_return_if_fail (pic != NULL);
+
+    priv = et_tag_area_get_instance_private (self);
+
+    if (!pic->data)
+    {
+        PictureEntry_Clear (self);
+        return;
+    }
+
+    loader = gdk_pixbuf_loader_new ();
+
+    if (loader)
+    {
+        if (gdk_pixbuf_loader_write(loader, pic->data, pic->size, &error))
+        {
+            GtkTreeSelection *selection;
+            GdkPixbuf *pixbuf;
+
+            if (!gdk_pixbuf_loader_close(loader, &error))
+            {
+                Log_Print (LOG_ERROR, _("Error parsing image data ‘%s’"),
+                           error->message);
+                g_error_free (error);
+            }
+
+            selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->picture_entry_view));
+
+            pixbuf = gdk_pixbuf_loader_get_pixbuf(loader);
+            if (pixbuf)
+            {
+                GtkTreeIter iter1;
+                GdkPixbuf *scaled_pixbuf;
+                gint scaled_pixbuf_width;
+                gint scaled_pixbuf_height;
+                gchar *pic_info;
+
+                g_object_ref(pixbuf);
+                g_object_unref(loader);
+                
+                // Keep aspect ratio of the picture
+                pic->width  = gdk_pixbuf_get_width(pixbuf);
+                pic->height = gdk_pixbuf_get_height(pixbuf);
+                if (pic->width > pic->height)
+                {
+                    scaled_pixbuf_width  = 96;
+                    scaled_pixbuf_height = 96 * pic->height / pic->width;
+                }else
+                {
+                    scaled_pixbuf_width = 96 * pic->width / pic->height;
+                    scaled_pixbuf_height = 96;
+                }
+
+                scaled_pixbuf = gdk_pixbuf_scale_simple(pixbuf,
+                                    scaled_pixbuf_width, scaled_pixbuf_height,
+                                    //GDK_INTERP_NEAREST); // Lower quality but better speed
+                                    GDK_INTERP_BILINEAR);
+                g_object_unref(pixbuf);
+
+                pic_info = Picture_Info (pic);
+                gtk_list_store_insert_with_values (priv->images_model, &iter1,
+                                                   G_MAXINT,
+                                                   PICTURE_COLUMN_PIC,
+                                                   scaled_pixbuf,
+                                                   PICTURE_COLUMN_TEXT,
+                                                   pic_info,
+                                                   PICTURE_COLUMN_DATA,
+                                                   Picture_Copy_One (pic), -1);
+                g_free(pic_info);
+
+                if (select_it)
+                    gtk_tree_selection_select_iter(selection, &iter1);
+                g_object_unref(scaled_pixbuf);
+            }else
+            {
+                GtkWidget *msgdialog;
+                
+                g_object_unref(loader);
+                
+                Log_Print (LOG_ERROR, "%s",
+                           _("Cannot display the image because not enough data has been read to determine how to create the image buffer"));
+
+                msgdialog = gtk_message_dialog_new(GTK_WINDOW(MainWindow),
+                                                   GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+                                                   GTK_MESSAGE_ERROR,
+                                                   GTK_BUTTONS_CLOSE,
+                                                   "%s",
+                                                   _("Cannot display the image"));
+                gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (msgdialog),
+                                                          _("Not enough data has been read to determine how to create the image buffer."));
+                gtk_window_set_title (GTK_WINDOW (msgdialog),
+                                      _("Load Image File"));
+                gtk_dialog_run(GTK_DIALOG(msgdialog));
+                gtk_widget_destroy(msgdialog);
+            }
+        }
+        else
+        {
+            Log_Print (LOG_ERROR, _("Error parsing image data ‘%s’"),
+                       error->message);
+            g_error_free (error);
+        }
+    }
+
+    /* Do also for next picture. */
+    if (pic->next)
+    {
+        PictureEntry_Update (self, pic->next, select_it);
+    }
+
+    return;
+}
+
+
+/*
+ * load_picture_from_file:
+ * @file: the image file to load
+ * @self: the #EtTagArea
+ *
+ * Load the image file @file and update the images tree model.
+ */
+static void
+load_picture_from_file (GFile *file,
+                        EtTagArea *self)
+{
+    Picture *pic;
+    const gchar *filename_utf8;
+    GFileInfo *info;
+    GError *error = NULL;
+
+    info = g_file_query_info (file, G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME,
+                              G_FILE_QUERY_INFO_NONE, NULL, &error);
+
+    if (!info)
+    {
+        Log_Print (LOG_ERROR, _("Image file not loaded ‘%s’"), error->message);
+        g_error_free (error);
+        return;
+    }
+
+    filename_utf8 = g_file_info_get_display_name (info);
+    pic = et_picture_load_file_data (file, &error);
+
+    if (!pic)
+    {
+        GtkWidget *msgdialog;
+
+        /* Picture file not opened */
+        msgdialog = gtk_message_dialog_new (GTK_WINDOW (MainWindow),
+                                            GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+                                            GTK_MESSAGE_ERROR,
+                                            GTK_BUTTONS_CLOSE,
+                                            _("Cannot open file ‘%s’"),
+                                            filename_utf8);
+        gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG(msgdialog),
+                                                  "%s", error->message);
+        gtk_window_set_title (GTK_WINDOW (msgdialog), _("Image File Error"));
+        gtk_dialog_run (GTK_DIALOG (msgdialog));
+        gtk_widget_destroy (msgdialog);
+
+        Log_Print (LOG_ERROR, _("Image file not loaded ‘%s’"),
+                   error->message);
+        g_error_free (error);
+        return;
+    }
+    else
+    {
+        Log_Print (LOG_OK, _("Image file loaded"));
+    }
+
+    if (filename_utf8)
+    {
+        // Behaviour following the tag type...
+        switch (ETCore->ETFileDisplayed->ETFileDescription->TagType)
+        {
+            // Only one picture supported for MP4
+            case MP4_TAG:
+                pic->type = ET_PICTURE_TYPE_FRONT_COVER;
+                break;
+
+            // Other tag types
+            case ID3_TAG:
+            case OGG_TAG:
+            case OPUS_TAG:
+            case APE_TAG:
+            case FLAC_TAG:
+            case WAVPACK_TAG:
+                pic->description = g_strdup (filename_utf8);
+
+                if (g_settings_get_boolean (MainSettings,
+                                            "tag-image-type-automatic"))
+                {
+                    pic->type = et_picture_type_from_filename (pic->description);
+                }
+                else
+                {
+                    pic->type = ET_PICTURE_TYPE_FRONT_COVER;
+                }
+                break;
+
+            default:
+                g_assert_not_reached ();
+        }
+
+        PictureEntry_Update (self, pic, TRUE);
+
+        Picture_Free (pic);
+    }
+
+    g_object_unref (info);
+}
+
+/*
+ * To add a picture in the list -> call a FileSelectionWindow
+ */
+static void
+on_picture_add_button_clicked (GObject *object,
+                               gpointer user_data)
+{
+    EtTagArea *self;
+    EtTagAreaPrivate *priv;
+    GtkWidget *FileSelectionWindow;
+    GtkFileFilter *filter;
+    GtkWindow *parent_window = NULL;
+    static gchar *init_dir = NULL;
+    gint response;
+
+    self = ET_TAG_AREA (user_data);
+    priv = et_tag_area_get_instance_private (self);
+
+    parent_window = GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(object)));
+    if (!gtk_widget_is_toplevel(GTK_WIDGET(parent_window)))
+    {
+        g_warning("Could not get parent window\n");
+        return;
+    }
+
+
+    FileSelectionWindow = gtk_file_chooser_dialog_new (_("Add Images"),
+                                                       parent_window,
+                                                       GTK_FILE_CHOOSER_ACTION_OPEN,
+                                                       _("_Cancel"),
+                                                       GTK_RESPONSE_CANCEL,
+                                                       _("_Open"),
+                                                       GTK_RESPONSE_OK, NULL);
+
+    // Add files filters
+    // "All files" filter
+    filter = gtk_file_filter_new ();
+    gtk_file_filter_set_name(GTK_FILE_FILTER(filter), _("All Files"));
+    gtk_file_filter_add_pattern(GTK_FILE_FILTER(filter), "*");
+    gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(FileSelectionWindow), GTK_FILE_FILTER(filter));
+
+    // "PNG and JPEG" filter
+    filter = gtk_file_filter_new ();
+    gtk_file_filter_set_name(GTK_FILE_FILTER(filter), _("PNG and JPEG"));
+    gtk_file_filter_add_mime_type(GTK_FILE_FILTER(filter), "image/jpeg"); // Using mime type avoid problem of case sensitive with extensions
+    gtk_file_filter_add_mime_type(GTK_FILE_FILTER(filter), "image/png");
+    //gtk_file_filter_add_pattern(GTK_FILE_FILTER(filter), "*.jpeg"); // Warning: *.JPEG or *.JpEg files will not be displayed
+    //gtk_file_filter_add_pattern(GTK_FILE_FILTER(filter), "*.jpg");
+    //gtk_file_filter_add_pattern(GTK_FILE_FILTER(filter), "*.png");
+    gtk_file_chooser_add_filter(GTK_FILE_CHOOSER (FileSelectionWindow), GTK_FILE_FILTER(filter));
+    // Make this filter the default
+    gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(FileSelectionWindow), GTK_FILE_FILTER(filter));
+
+    // Behaviour following the tag type...
+    switch (ETCore->ETFileDisplayed->ETFileDescription->TagType)
+    {
+        case MP4_TAG:
+        {
+            // Only one file can be selected
+            gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(FileSelectionWindow), FALSE);
+            break;
+        }
+
+        // Other tag types
+        default:
+        {
+            gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(FileSelectionWindow), TRUE);
+            break;
+        }
+    }
+
+    gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (FileSelectionWindow),
+                                     FALSE);
+
+    // Starting directory (the same of the current file)
+    if (ETCore->ETFileDisplayed)
+    {
+        gchar *cur_filename_utf8 = ((File_Name *)((GList *)ETCore->ETFileDisplayed->FileNameCur)->data)->value_utf8;
+        init_dir = g_path_get_dirname(cur_filename_utf8);
+        gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(FileSelectionWindow),init_dir);
+    }else
+    // Starting directory (the same than the previous one)
+    if (init_dir)
+        gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(FileSelectionWindow),init_dir);
+
+    response = gtk_dialog_run(GTK_DIALOG(FileSelectionWindow));
+
+    if (response == GTK_RESPONSE_OK)
+    {
+        GtkTreeSelection *selection;
+        GSList *list;
+
+        selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->picture_entry_view));
+        gtk_tree_selection_unselect_all (selection);
+
+        list = gtk_file_chooser_get_files (GTK_FILE_CHOOSER (FileSelectionWindow));
+        g_slist_foreach (list, (GFunc) load_picture_from_file, self);
+        g_slist_free_full (list, g_object_unref);
+
+        // Save the directory selected for initialize next time
+        g_free(init_dir);
+        init_dir = gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER(FileSelectionWindow));
+    }
+
+    if (ETCore->ETFileDisplayed)
+    {
+        ET_Save_File_Data_From_UI (ETCore->ETFileDisplayed);
+        ET_Display_File_Data_To_UI (ETCore->ETFileDisplayed);
+    }
+
+    gtk_widget_destroy(FileSelectionWindow);
+}
+
+
+/*
+ * Open the window to select and type the picture properties
+ */
+static void
+on_picture_properties_button_clicked (GObject *object,
+                                      gpointer user_data)
+{
+    EtTagArea *self;
+    EtTagAreaPrivate *priv;
+    GtkWidget *type, *desc;
+    GtkTreeSelection *selection;
+    GtkListStore *store;
+    GtkTreeIter type_iter_to_select, iter;
+    GtkTreeModel *model;
+    GtkWindow *parent_window = NULL;
+    GList *selection_list = NULL;
+    GList *l;
+    gint selection_nbr, selection_i = 1;
+    gint response;
+    EtPictureType pic_type;
+
+    self = ET_TAG_AREA (user_data);
+    priv = et_tag_area_get_instance_private (self);
+
+    parent_window = GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (object)));
+
+    if (!gtk_widget_is_toplevel (GTK_WIDGET (parent_window)))
+    {
+        g_warning ("Could not get parent window");
+        return;
+    }
+
+    model = GTK_TREE_MODEL (priv->images_model);
+    selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->picture_entry_view));
+    selection_list = gtk_tree_selection_get_selected_rows (selection, NULL);
+    selection_nbr = gtk_tree_selection_count_selected_rows (GTK_TREE_SELECTION (selection));
+
+    for (l = selection_list; l != NULL; l = g_list_next (l))
+    {
+        GtkWidget *PictureTypesWindow;
+        GtkTreePath *path = l->data;
+        Picture *pic = NULL;
+        GtkTreeSelection *selectiontype;
+        gchar *title;
+        GtkTreePath *rowPath;
+        gboolean valid;
+        GtkBuilder *builder;
+        GError *error = NULL;
+
+        /* Get corresponding picture. */
+        valid = gtk_tree_model_get_iter (model, &iter, path);
+
+        if (valid)
+        {
+            gtk_tree_model_get (model, &iter, PICTURE_COLUMN_DATA, &pic, -1);
+        }
+        else
+        {
+            g_warning ("Iter not found in picture model");
+            break;
+        }
+
+        builder = gtk_builder_new ();
+        gtk_builder_add_from_resource (builder,
+                                       "/org/gnome/EasyTAG/tag_area.ui",
+                                       &error);
+
+        if (error != NULL)
+        {
+            g_error ("Unable to get image properties dialog from resource: %s",
+                     error->message);
+        }
+
+        title = g_strdup_printf (_("Image Properties %d/%d"), selection_i++,
+                                 selection_nbr);
+        PictureTypesWindow = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                 "image_properties_dialog"));
+        gtk_window_set_title (GTK_WINDOW (PictureTypesWindow), title);
+        g_free (title);
+        gtk_window_set_transient_for (GTK_WINDOW (PictureTypesWindow),
+                                      parent_window);
+
+        gtk_dialog_set_default_response (GTK_DIALOG (PictureTypesWindow),
+                                         GTK_RESPONSE_ACCEPT);
+
+        store = gtk_list_store_new (PICTURE_TYPE_COLUMN_COUNT, G_TYPE_STRING,
+                                    G_TYPE_INT);
+        type = GTK_WIDGET (gtk_builder_get_object (builder, "types_view"));
+        gtk_tree_view_set_model (GTK_TREE_VIEW (type), GTK_TREE_MODEL (store));
+        g_object_unref (store);
+
+        /* Behaviour following the tag type. */
+        switch (ETCore->ETFileDisplayed->ETFileDescription->TagType)
+        {
+            case MP4_TAG:
+            {
+                /* Load picture type (only Front Cover!). */
+                GtkTreeIter itertype;
+
+                gtk_list_store_insert_with_values (store, &itertype, G_MAXINT,
+                                                   PICTURE_TYPE_COLUMN_TEXT,
+                                                   _(Picture_Type_String (ET_PICTURE_TYPE_FRONT_COVER)),
+                                                   PICTURE_TYPE_COLUMN_TYPE_CODE,
+                                                   ET_PICTURE_TYPE_FRONT_COVER,
+                                                   -1);
+                /* Line to select by default. */
+                type_iter_to_select = itertype;
+                break;
+            }
+
+            /* Other tag types. */
+            default:
+            {
+                /* Load pictures types. */
+                for (pic_type = ET_PICTURE_TYPE_OTHER; pic_type < ET_PICTURE_TYPE_UNDEFINED; pic_type++)
+                {
+                    GtkTreeIter itertype;
+
+                    gtk_list_store_insert_with_values (store, &itertype,
+                                                       G_MAXINT,
+                                                       PICTURE_TYPE_COLUMN_TEXT,
+                                                       _(Picture_Type_String (pic_type)),
+                                                       PICTURE_TYPE_COLUMN_TYPE_CODE,
+                                                       pic_type, -1);
+                    /* Line to select by default. */
+                    if (pic->type == pic_type)
+                    {
+                        type_iter_to_select = itertype;
+                    }
+                }
+                break;
+            }
+        }
+
+        /* Select the line by default. */
+        selectiontype = gtk_tree_view_get_selection (GTK_TREE_VIEW (type));
+        gtk_tree_selection_select_iter (selectiontype, &type_iter_to_select);
+
+        /* Set visible the current selected line. */
+        rowPath = gtk_tree_model_get_path (GTK_TREE_MODEL (store),
+                                           &type_iter_to_select);
+        gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (type), rowPath, NULL,
+                                      FALSE, 0, 0);
+        gtk_tree_path_free (rowPath);
+
+        /* Entry for the description. */
+        desc = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                   "description_entry"));
+
+        g_object_unref (builder);
+
+        if (pic->description)
+        {
+            gchar *tmp = Try_To_Validate_Utf8_String (pic->description);
+            gtk_entry_set_text (GTK_ENTRY (desc), tmp);
+            g_free (tmp);
+        }
+
+        // Behaviour following the tag type...
+        switch (ETCore->ETFileDisplayed->ETFileDescription->TagType)
+        {
+            case MP4_TAG:
+                gtk_widget_set_sensitive (GTK_WIDGET (desc), FALSE);
+                break;
+            /* Other tag types. */
+            default:
+                break;
+        }
+
+        gtk_widget_show_all (PictureTypesWindow);
+
+        response = gtk_dialog_run (GTK_DIALOG (PictureTypesWindow));
+
+        if (response == GTK_RESPONSE_ACCEPT)
+        {
+            GtkTreeModel *modeltype;
+            GtkTreeIter itertype;
+
+            modeltype = gtk_tree_view_get_model (GTK_TREE_VIEW (type));
+            selectiontype = gtk_tree_view_get_selection (GTK_TREE_VIEW (type));
+
+            if (gtk_tree_selection_get_selected (selectiontype, &modeltype,
+                                                 &itertype))
+            {
+                gchar *buffer, *pic_info;
+                gint t;
+
+                gtk_tree_model_get (modeltype, &itertype,
+                                   PICTURE_TYPE_COLUMN_TYPE_CODE, &t, -1);
+                pic->type = t;
+
+                buffer = g_strdup (gtk_entry_get_text (GTK_ENTRY (desc)));
+                g_strstrip (buffer);
+
+                g_free (pic->description);
+
+                /* If the entry was empty, buffer will be the empty string "".
+                 * This can be safely passed to the underlying
+                 * FLAC__metadata_object_picture_set_description(). See
+                 * https://bugs.launchpad.net/ubuntu/+source/easytag/+bug/558804
+                 * and https://bugzilla.redhat.com/show_bug.cgi?id=559828 for
+                 * downstream bugs when 0 was passed instead. */
+                pic->description = buffer;
+
+                /* Update value in the PictureEntryView. */
+                pic_info = Picture_Info (pic);
+                gtk_list_store_set (GTK_LIST_STORE (model), &iter,
+                                    PICTURE_COLUMN_TEXT, pic_info, -1);
+                g_free (pic_info);
+            }
+        }
+
+        gtk_widget_destroy (PictureTypesWindow);
+    }
+
+    g_list_free_full (selection_list, (GDestroyNotify)gtk_tree_path_free);
+}
+
+static void
+on_picture_save_button_clicked (GObject *object,
+                                gpointer user_data)
+{
+    EtTagArea *self;
+    EtTagAreaPrivate *priv;
+    GtkWidget *FileSelectionWindow;
+    GtkFileFilter *filter;
+    GtkWindow *parent_window = NULL;
+    static gchar *init_dir = NULL;
+
+    GtkTreeSelection *selection;
+    GList *selection_list = NULL;
+    GList *l;
+    GtkTreeModel *model;
+    gint selection_nbr, selection_i = 1;
+
+    self = ET_TAG_AREA (user_data);
+    priv = et_tag_area_get_instance_private (self);
+
+    parent_window = GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(object)));
+    if (!gtk_widget_is_toplevel(GTK_WIDGET(parent_window)))
+    {
+        g_warning("Could not get parent window\n");
+        return;
+    }
+
+    model = GTK_TREE_MODEL (priv->images_model);
+    selection      = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->picture_entry_view));
+    selection_list = gtk_tree_selection_get_selected_rows (selection, NULL);
+    selection_nbr = gtk_tree_selection_count_selected_rows (GTK_TREE_SELECTION (selection));
+
+    for (l = selection_list; l != NULL; l = g_list_next (l))
+    {
+        GtkTreePath *path = l->data;
+        GtkTreeIter iter;
+        Picture *pic;
+        gchar *title;
+        gboolean valid;
+        gint response;
+
+        // Get corresponding picture
+        valid = gtk_tree_model_get_iter (model, &iter, path);
+
+        if (valid)
+        {
+            gtk_tree_model_get (model, &iter, PICTURE_COLUMN_DATA, &pic, -1);
+        }
+        else
+        {
+            g_warning ("Iter not found in picture model");
+            break;
+        }
+
+        title = g_strdup_printf (_("Save Image %d/%d"), selection_i++,
+                                 selection_nbr);
+        FileSelectionWindow = gtk_file_chooser_dialog_new (title,
+                                                           parent_window,
+                                                           GTK_FILE_CHOOSER_ACTION_SAVE,
+                                                           _("_Cancel"),
+                                                           GTK_RESPONSE_CANCEL,
+                                                           _("_Save"),
+                                                           GTK_RESPONSE_OK,
+                                                           NULL);
+        g_free(title);
+
+        // Add files filters
+        // "All files" filter
+        filter = gtk_file_filter_new ();
+        gtk_file_filter_set_name(GTK_FILE_FILTER(filter), _("All Files"));
+        gtk_file_filter_add_pattern(GTK_FILE_FILTER(filter), "*");
+        gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(FileSelectionWindow), GTK_FILE_FILTER(filter));
+
+        // "PNG and JPEG" filter
+        filter = gtk_file_filter_new ();
+        gtk_file_filter_set_name(GTK_FILE_FILTER(filter), _("PNG and JPEG"));
+        gtk_file_filter_add_mime_type(GTK_FILE_FILTER(filter), "image/jpeg");
+        gtk_file_filter_add_mime_type(GTK_FILE_FILTER(filter), "image/png");
+        gtk_file_chooser_add_filter(GTK_FILE_CHOOSER (FileSelectionWindow), GTK_FILE_FILTER(filter));
+        // Make this filter the default
+        gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(FileSelectionWindow),  GTK_FILE_FILTER(filter));
+
+        // Set the default folder if defined
+        if (init_dir)
+            gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(FileSelectionWindow),init_dir);
+
+        // Suggest a filename to the user
+        if ( pic->description && strlen(pic->description) )
+        {
+            gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(FileSelectionWindow), pic->description); //filename in UTF8
+        }else
+        {
+            gchar *image_name = NULL;
+            switch (Picture_Format_From_Data (pic))
+            {
+                case PICTURE_FORMAT_JPEG :
+                    image_name = g_strdup("image_name.jpg");
+                    break;
+                case PICTURE_FORMAT_PNG :
+                    image_name = g_strdup("image_name.png");
+                    break;
+                case PICTURE_FORMAT_GIF:
+                    image_name = g_strdup ("image_name.gif");
+                    break;
+                case PICTURE_FORMAT_UNKNOWN :
+                    image_name = g_strdup("image_name.ext");
+                    break;
+            }
+            gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(FileSelectionWindow), image_name); //filename in UTF8
+            g_free(image_name);
+        }
+
+        gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (FileSelectionWindow),
+                                                        TRUE);
+        gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (FileSelectionWindow),
+                                         FALSE);
+
+        response = gtk_dialog_run(GTK_DIALOG(FileSelectionWindow));
+        if (response == GTK_RESPONSE_OK)
+        {
+            GFile *file;
+            GError *error = NULL;
+
+            // Save the directory selected for initialize next time
+            g_free(init_dir);
+            init_dir = gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER(FileSelectionWindow));
+
+            file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (FileSelectionWindow));
+
+            if (!et_picture_save_file_data (pic, file, &error))
+            {
+                 Log_Print (LOG_ERROR, _("Image file not saved ‘%s’"),
+                            error->message);
+                 g_error_free (error);
+            }
+
+            g_object_unref (file);
+        }
+        gtk_widget_destroy(FileSelectionWindow);
+    }
+
+    g_list_free_full (selection_list, (GDestroyNotify)gtk_tree_path_free);
+}
+
+
+/*
+ * If double clicking the PictureEntryView :
+ *  - over a selected row : opens properties window
+ *  - over an empty area : open the adding window
+ */
+static gboolean
+on_picture_view_button_pressed (GtkTreeView *treeview,
+                                GdkEventButton *event,
+                                gpointer user_data)
+{
+    EtTagArea *self;
+    EtTagAreaPrivate *priv;
+
+    self = ET_TAG_AREA (user_data);
+    priv = et_tag_area_get_instance_private (self);
+
+    if (event->type == GDK_BUTTON_PRESS && event->button == GDK_BUTTON_PRIMARY)
+    {
+        if (event->window == gtk_tree_view_get_bin_window (treeview))
+        {
+            if (!gtk_tree_view_get_path_at_pos (treeview, event->x, event->y,
+                                                NULL, NULL, NULL, NULL))
+            {
+                gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (treeview));
+            }
+        }
+    }
+
+    if (event->type == GDK_2BUTTON_PRESS
+        && event->button == GDK_BUTTON_PRIMARY)
+    {
+        GtkTreeSelection *selection;
+
+        selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->picture_entry_view));
+
+        if (gtk_tree_selection_count_selected_rows (selection) >= 1)
+        {
+            on_picture_properties_button_clicked (G_OBJECT (priv->image_properties_toolitem),
+                                                  self);
+        }
+        else
+        {
+            on_picture_add_button_clicked (G_OBJECT (priv->add_image_toolitem),
+                                           self);
+        }
+
+        return GDK_EVENT_STOP;
+    }
+
+    return GDK_EVENT_PROPAGATE;
+}
+
+static void
+on_picture_view_drag_data (GtkWidget *widget, GdkDragContext *dc,
+                           gint x, gint y, GtkSelectionData *selection_data,
+                           guint info, guint t, gpointer user_data)
+{
+    EtTagArea *self;
+    EtTagAreaPrivate *priv;
+    GtkTreeSelection *selection;
+    gchar **uri_list, **uri;
+
+    gtk_drag_finish(dc, TRUE, FALSE, t);
+
+    if (info != TARGET_URI_LIST || !selection_data)
+        return;
+
+    self = ET_TAG_AREA (user_data);
+    priv = et_tag_area_get_instance_private (self);
+
+    selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->picture_entry_view));
+    gtk_tree_selection_unselect_all(selection);
+
+    uri = uri_list = g_strsplit ((const gchar *)gtk_selection_data_get_data (selection_data),
+                                 "\r\n", 0);
+
+    while (*uri && strlen(*uri))
+    {
+        GFile *file = g_file_new_for_uri (*uri);
+
+        load_picture_from_file (file, self);
+
+        g_object_unref (file);
+        uri++;
+    }
+
+    g_strfreev (uri_list);
+}
+
+static void
+on_picture_clear_button_clicked (GObject *object,
+                                 gpointer user_data)
+{
+    EtTagArea *self;
+    EtTagAreaPrivate *priv;
+    GList *paths, *refs = NULL;
+    GList *l;
+    GtkTreeSelection *selection;
+    GtkTreeModel *model;
+    GtkTreeIter iter;
+
+    self = ET_TAG_AREA (user_data);
+    priv = et_tag_area_get_instance_private (self);
+
+    model = GTK_TREE_MODEL (priv->images_model);
+    selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->picture_entry_view));
+    paths = gtk_tree_selection_get_selected_rows (selection, NULL);
+
+    /* List of items to delete. */
+    for (l = paths; l != NULL; l = g_list_next (l))
+    {
+        refs = g_list_prepend (refs, gtk_tree_row_reference_new (model,
+                                                                 l->data));
+    }
+
+    g_list_free_full (paths, (GDestroyNotify)gtk_tree_path_free);
+
+    for (l = refs; l != NULL; l = g_list_next (l))
+    {
+        GtkTreePath *path = gtk_tree_row_reference_get_path (l->data);
+        Picture *pic;
+
+        if (gtk_tree_model_get_iter (model, &iter, path))
+        {
+            gtk_tree_model_get(model, &iter, PICTURE_COLUMN_DATA, &pic,-1);
+            Picture_Free(pic);
+
+            gtk_list_store_remove (priv->images_model, &iter);
+        }
+
+        gtk_tree_path_free(path);
+        gtk_tree_row_reference_free (l->data);
+    }
+
+    if (ETCore->ETFileDisplayed)
+    {
+        ET_Save_File_Data_From_UI (ETCore->ETFileDisplayed);
+        ET_Display_File_Data_To_UI (ETCore->ETFileDisplayed);
+    }
+
+    g_list_free (refs);
+}
+
+
+/*
+ * Key press into picture entry
+ *   - Delete = delete selected picture files
+ */
+static gboolean
+on_picture_view_key_pressed (GtkTreeView *treeview,
+                             GdkEvent *event,
+                             gpointer user_data)
+{
+    EtTagArea *self;
+    EtTagAreaPrivate *priv;
+    GdkEventKey *kevent;
+
+    self = ET_TAG_AREA (user_data);
+    priv = et_tag_area_get_instance_private (self);
+
+    kevent = (GdkEventKey *)event;
+
+    if (event && event->type == GDK_KEY_PRESS)
+    {
+        switch (kevent->keyval)
+        {
+            case GDK_KEY_Delete:
+                on_picture_clear_button_clicked (G_OBJECT (priv->remove_image_toolitem),
+                                                 self);
+                return GDK_EVENT_STOP;
+        }
+    }
+
+    return GDK_EVENT_PROPAGATE;
+}
+static void
+create_tag_area (EtTagArea *self)
+{
+    EtTagAreaPrivate *priv;
+    GtkWidget *image;
+    GList *focus_chain = NULL;
+    GtkWidget *grid;
+    GtkEntryCompletion *completion;
+    GtkBuilder *builder;
+    GError *error = NULL;
+
+    /* For Picture. */
+    static const GtkTargetEntry drops[] = { { "text/uri-list", 0,
+                                              TARGET_URI_LIST } };
+    GtkTreeSelection *selection;
+
+    priv = et_tag_area_get_instance_private (self);
+
+    /* Main Frame */
+    builder = gtk_builder_new ();
+    gtk_builder_add_from_resource (builder,
+                                   "/org/gnome/EasyTAG/tag_area.ui",
+                                   &error);
+
+    if (error != NULL)
+    {
+        g_error ("Unable to get tag area from resource: %s",
+                 error->message);
+    }
+
+    /* Note book. */
+    priv->notebook = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                         "tag_notebook"));
+    gtk_container_add (GTK_CONTAINER (self), priv->notebook);
+    priv->label = GTK_WIDGET (gtk_builder_get_object (builder, "tag_label"));
+
+    /* Page for common tag fields. */
+    /* Title */
+    priv->title_label = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                            "title_label"));
+    priv->title_entry = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                            "title_entry"));
+    et_tag_field_connect_signals (GTK_ENTRY (priv->title_entry), self);
+
+    /* Artist */
+    priv->artist_label = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                             "artist_label"));
+    priv->artist_entry = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                             "artist_entry"));
+    et_tag_field_connect_signals (GTK_ENTRY (priv->artist_entry), self);
+
+    /* Album Artist */
+    priv->album_artist_label = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                   "album_artist_label"));
+    priv->album_artist_entry = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                   "album_artist_entry"));
+    et_tag_field_connect_signals (GTK_ENTRY (priv->album_artist_entry), self);
+
+    /* Album */
+    priv->album_label = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                            "album_label"));
+    priv->album_entry = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                            "album_entry"));
+    et_tag_field_connect_signals (GTK_ENTRY (priv->album_entry), self);
+
+    /* Disc Number */
+    priv->disc_number_label = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                  "disc_label"));
+    priv->disc_number_entry = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                  "disc_entry"));
+    /* FIXME should allow to type only something like : 1/3. */
+    et_tag_field_connect_signals (GTK_ENTRY (priv->disc_number_entry), self);
+
+    /* Year */
+    priv->year_label = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                           "year_label"));
+    priv->year_entry = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                           "year_entry"));
+    g_signal_connect (priv->year_entry, "insert-text", G_CALLBACK (Insert_Only_Digit),
+                      NULL);
+    g_signal_connect (priv->year_entry, "activate",
+                      G_CALLBACK (on_year_entry_activate), self);
+    g_signal_connect (priv->year_entry, "focus-out-event",
+                      G_CALLBACK (on_year_entry_focus_out_event), self);
+    et_tag_field_connect_signals (GTK_ENTRY (priv->year_entry), self);
+
+    /* Track and Track total */
+    priv->track_sequence_button = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                      "track_sequence_button"));
+    g_signal_connect (priv->track_sequence_button, "clicked",
+                      G_CALLBACK (on_apply_to_selection), self);
+    /* Pixmap into priv->track_sequence_button button. */
+    image = gtk_image_new_from_resource ("/org/gnome/EasyTAG/images/sequence-track.png");
+    gtk_container_add (GTK_CONTAINER (priv->track_sequence_button), image);
+
+    priv->track_label = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                            "track_label"));
+
+    priv->track_combo_model = GTK_LIST_STORE (gtk_builder_get_object (builder,
+                                                                      "track_combo_model"));
+
+    populate_track_combo (self);
+
+    priv->track_combo_entry = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                  "track_combo"));
+
+    gtk_entry_set_width_chars (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->track_combo_entry))),
+                               2);
+    g_signal_connect (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->track_combo_entry))),
+                      "insert-text", G_CALLBACK (Insert_Only_Digit), NULL);
+
+    priv->track_number_button = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                    "track_number_button"));
+    g_signal_connect (priv->track_number_button, "clicked",
+                      G_CALLBACK (on_apply_to_selection), self);
+    /* Pixmap into priv->track_number_button button. */
+    image = gtk_image_new_from_resource ("/org/gnome/EasyTAG/images/sequence-track.png");
+    gtk_container_add (GTK_CONTAINER (priv->track_number_button), image);
+
+    priv->track_total_entry = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                  "track_total_entry"));
+    g_signal_connect (GTK_ENTRY (priv->track_total_entry), "insert-text",
+                      G_CALLBACK (Insert_Only_Digit), NULL);
+    et_tag_field_connect_signals (GTK_ENTRY (priv->track_total_entry), self);
+
+    /* Genre */
+    priv->genre_label = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                            "genre_label"));
+
+    priv->genre_combo_model = GTK_LIST_STORE (gtk_builder_get_object (builder,
+                                                                      "genre_combo_model"));
+
+    priv->genre_combo_entry = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                  "genre_combo"));
+    completion = gtk_entry_completion_new ();
+    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->genre_combo_entry))),
+                                       GTK_ENTRY_ICON_SECONDARY, "insert-text");
+    gtk_entry_set_completion (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->genre_combo_entry))),
+                              completion);
+    g_object_unref (completion);
+    gtk_entry_completion_set_model (completion,
+                                    GTK_TREE_MODEL (priv->genre_combo_model));
+    gtk_entry_completion_set_text_column (completion, 0);
+    gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (priv->genre_combo_model),
+                                     GENRE_COLUMN_GENRE,
+                                     tree_iter_alphabetical_sort, NULL, NULL);
+    gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (priv->genre_combo_model),
+                                          GENRE_COLUMN_GENRE,
+                                          GTK_SORT_ASCENDING);
+    populate_genre_combo (self);
+
+    et_tag_field_connect_signals (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->genre_combo_entry))), self);
+    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->genre_combo_entry))),
+                                     GTK_ENTRY_ICON_SECONDARY,
+                                     _("Tag selected files with this genre"));
+
+    /* Comment */
+    priv->comment_label = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                              "comment_label"));
+    priv->comment_entry = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                              "comment_entry"));
+    et_tag_field_connect_signals (GTK_ENTRY (priv->comment_entry), self);
+
+    /* Composer (name of the composers) */
+    priv->composer_label = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                               "composer_label"));
+    priv->composer_entry = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                               "composer_entry"));
+    et_tag_field_connect_signals (GTK_ENTRY (priv->composer_entry), self);
+
+    /* Translators: Original Artist / Performer. Please try to keep this string
+     * as short as possible, as it must fit into a narrow column. */
+    priv->orig_artist_label = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                  "orig_artist_label"));
+    priv->orig_artist_entry = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                  "orig_artist_entry"));
+    et_tag_field_connect_signals (GTK_ENTRY (priv->orig_artist_entry), self);
+
+    /* Copyright */
+    priv->copyright_label = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                "copyright_label"));
+    priv->copyright_entry = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                               "copyright_entry"));
+    et_tag_field_connect_signals (GTK_ENTRY (priv->copyright_entry), self);
+
+    /* URL */
+    priv->url_label = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                          "url_label"));
+    priv->url_entry = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                          "url_entry"));
+    et_tag_field_connect_signals (GTK_ENTRY (priv->url_entry), self);
+
+    /* Encoded by */
+    priv->encoded_by_label = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                "encoded_by_label"));
+    priv->encoded_by_entry = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                 "encoded_by_entry"));
+    et_tag_field_connect_signals (GTK_ENTRY (priv->encoded_by_entry), self);
+
+    /* Set focus chain. */
+    focus_chain = g_list_prepend (focus_chain, priv->title_entry);
+    focus_chain = g_list_prepend (focus_chain, priv->artist_entry);
+    focus_chain = g_list_prepend (focus_chain, priv->album_artist_entry);
+    focus_chain = g_list_prepend (focus_chain, priv->album_entry);
+    focus_chain = g_list_prepend (focus_chain, priv->disc_number_entry);
+    focus_chain = g_list_prepend (focus_chain, priv->year_entry);
+    focus_chain = g_list_prepend (focus_chain, priv->track_combo_entry);
+    focus_chain = g_list_prepend (focus_chain, priv->track_total_entry);
+    focus_chain = g_list_prepend (focus_chain, priv->genre_combo_entry);
+    focus_chain = g_list_prepend (focus_chain, priv->comment_entry);
+    focus_chain = g_list_prepend (focus_chain, priv->composer_entry);
+    focus_chain = g_list_prepend (focus_chain, priv->orig_artist_entry);
+    focus_chain = g_list_prepend (focus_chain, priv->copyright_entry);
+    focus_chain = g_list_prepend (focus_chain, priv->url_entry);
+    focus_chain = g_list_prepend (focus_chain, priv->encoded_by_entry);
+    /* More efficient than using g_list_append(), which must traverse the
+     * whole list. */
+    focus_chain = g_list_reverse (focus_chain);
+    grid = GTK_WIDGET (gtk_builder_get_object (builder, "common_grid"));
+    gtk_container_set_focus_chain (GTK_CONTAINER (grid), focus_chain);
+    g_list_free (focus_chain);
+
+    /* Page for extra tag fields. */
+    priv->images_tab = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                           "images_grid"));
+
+    /* Scroll window for priv->picture_entry_view. */
+    priv->images_model = GTK_LIST_STORE (gtk_builder_get_object (builder,
+                                                                 "images_model"));
+    priv->picture_entry_view = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                   "images_view"));
+
+    selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->picture_entry_view));
+    gtk_tree_selection_set_mode (selection, GTK_SELECTION_MULTIPLE);
+
+    /* Activate Drag'n'Drop for the priv->picture_entry_view. */
+    gtk_drag_dest_set(GTK_WIDGET(priv->picture_entry_view),
+                      GTK_DEST_DEFAULT_HIGHLIGHT | GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_DROP,
+                      drops, sizeof(drops) / sizeof(GtkTargetEntry),
+                      GDK_ACTION_COPY);
+    g_signal_connect (priv->picture_entry_view, "drag-data-received",
+                      G_CALLBACK (on_picture_view_drag_data), self);
+    g_signal_connect (selection, "changed",
+                      G_CALLBACK (on_picture_view_selection_changed), self);
+    g_signal_connect (priv->picture_entry_view, "button-press-event",
+                      G_CALLBACK (on_picture_view_button_pressed), self);
+    g_signal_connect (priv->picture_entry_view, "key-press-event",
+                      G_CALLBACK (on_picture_view_key_pressed), self);
+
+    /* Picture action toolbar. */
+    /* TODO: Make the icons use the symbolic variants. */
+    priv->add_image_toolitem = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                   "image_add_button"));
+    g_signal_connect (priv->add_image_toolitem, "clicked",
+                      G_CALLBACK (on_picture_add_button_clicked), self);
+
+    /* Activate Drag'n'Drop for the add_image_toolitem. */
+    gtk_drag_dest_set (GTK_WIDGET (priv->add_image_toolitem),
+                       GTK_DEST_DEFAULT_HIGHLIGHT | GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_DROP,
+                       drops, sizeof(drops) / sizeof(GtkTargetEntry),
+                       GDK_ACTION_COPY);
+    g_signal_connect (priv->add_image_toolitem, "drag-data-received",
+                      G_CALLBACK (on_picture_view_drag_data), self);
+
+    priv->remove_image_toolitem = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                      "image_remove_button"));
+    g_signal_connect (priv->remove_image_toolitem, "clicked",
+                      G_CALLBACK (on_picture_clear_button_clicked), self);
+
+    priv->save_image_toolitem = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                    "image_save_button"));
+    g_signal_connect (priv->save_image_toolitem, "clicked",
+                      G_CALLBACK (on_picture_save_button_clicked), self);
+
+    priv->image_properties_toolitem = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                          "image_properties_button"));
+    g_signal_connect (priv->image_properties_toolitem, "clicked",
+                      G_CALLBACK (on_picture_properties_button_clicked), self);
+
+    priv->apply_image_toolitem = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                     "image_apply_button"));
+    g_signal_connect (priv->apply_image_toolitem, "clicked",
+                      G_CALLBACK (on_apply_to_selection), self);
+
+    g_object_unref (builder);
+}
+
+static void
+et_tag_area_init (EtTagArea *self)
+{
+    self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, ET_TYPE_TAG_AREA,
+                                              EtTagAreaPrivate);
+    create_tag_area (self);
+
+    gtk_widget_show_all (GTK_WIDGET (self));
+}
+
+static void
+et_tag_area_class_init (EtTagAreaClass *klass)
+{
+    g_type_class_add_private (klass, sizeof (EtTagAreaPrivate));
+}
+
+/*
+ * et_tag_area_new:
+ *
+ * Create a new EtTagArea instance.
+ *
+ * Returns: a new #EtTagArea
+ */
+GtkWidget *
+et_tag_area_new (void)
+{
+    return g_object_new (ET_TYPE_TAG_AREA, NULL);
+}
+
+static void
+et_tag_area_hide_images_tab (EtTagArea *self)
+{
+    EtTagAreaPrivate *priv;
+
+    priv = et_tag_area_get_instance_private (self);
+
+    gtk_widget_hide (priv->images_tab);
+}
+
+static void
+et_tag_area_show_images_tab (EtTagArea *self)
+{
+    EtTagAreaPrivate *priv;
+
+    priv = et_tag_area_get_instance_private (self);
+
+    gtk_widget_show (priv->images_tab);
+}
+
+/*
+ * et_tag_area_update_controls:
+ *
+ * Update the visibility of entry fields depending on the type of file.
+ */
+void
+et_tag_area_update_controls (EtTagArea *self,
+                             const ET_File *ETFile)
+{
+    EtTagAreaPrivate *priv;
+
+    g_return_if_fail (ET_TAG_AREA (self));
+
+    priv = et_tag_area_get_instance_private (self);
+
+    /* Common controls for all tags. */
+    gtk_widget_show (priv->title_label);
+    gtk_widget_show (priv->title_entry);
+    gtk_widget_show (priv->artist_label);
+    gtk_widget_show (priv->artist_entry);
+    gtk_widget_show (priv->album_artist_label);
+    gtk_widget_show (priv->album_artist_entry);
+    gtk_widget_show (priv->album_label);
+    gtk_widget_show (priv->album_entry);
+    gtk_widget_show (priv->year_label);
+    gtk_widget_show (priv->year_entry);
+    gtk_widget_show (priv->track_label);
+    gtk_widget_show (priv->track_combo_entry);
+    gtk_widget_show (priv->track_total_entry);
+    gtk_widget_show (priv->track_sequence_button);
+    gtk_widget_show (priv->track_number_button);
+    gtk_widget_show (priv->genre_label);
+    gtk_widget_show (priv->genre_combo_entry);
+    gtk_widget_show (priv->comment_label);
+    gtk_widget_show (priv->comment_entry);
+
+    /* Special controls to display or not! */
+    switch (ETFile->ETFileDescription->TagType)
+    {
+        case ID3_TAG:
+            if (!g_settings_get_boolean (MainSettings, "id3v2-enabled"))
+            {
+                /* ID3v1 : Hide specifics ID3v2 fields if not activated! */
+                gtk_widget_hide (priv->disc_number_label);
+                gtk_widget_hide (priv->disc_number_entry);
+                gtk_widget_hide (priv->composer_label);
+                gtk_widget_hide (priv->composer_entry);
+                gtk_widget_hide (priv->orig_artist_label);
+                gtk_widget_hide (priv->orig_artist_entry);
+                gtk_widget_hide (priv->copyright_label);
+                gtk_widget_hide (priv->copyright_entry);
+                gtk_widget_hide (priv->url_label);
+                gtk_widget_hide (priv->url_entry);
+                gtk_widget_hide (priv->encoded_by_label);
+                gtk_widget_hide (priv->encoded_by_entry);
+                et_tag_area_hide_images_tab (self);
+            }
+            else
+            {
+                gtk_widget_show (priv->disc_number_label);
+                gtk_widget_show (priv->disc_number_entry);
+                gtk_widget_show (priv->composer_label);
+                gtk_widget_show (priv->composer_entry);
+                gtk_widget_show (priv->orig_artist_label);
+                gtk_widget_show (priv->orig_artist_entry);
+                gtk_widget_show (priv->copyright_label);
+                gtk_widget_show (priv->copyright_entry);
+                gtk_widget_show (priv->url_label);
+                gtk_widget_show (priv->url_entry);
+                gtk_widget_show (priv->encoded_by_label);
+                gtk_widget_show (priv->encoded_by_entry);
+                et_tag_area_show_images_tab (self);
+            }
+            break;
+
+#ifdef ENABLE_OGG
+        case OGG_TAG:
+            gtk_widget_show (priv->disc_number_label);
+            gtk_widget_show (priv->disc_number_entry);
+            gtk_widget_show (priv->composer_label);
+            gtk_widget_show (priv->composer_entry);
+            gtk_widget_show (priv->orig_artist_label);
+            gtk_widget_show (priv->orig_artist_entry);
+            gtk_widget_show (priv->copyright_label);
+            gtk_widget_show (priv->copyright_entry);
+            gtk_widget_show (priv->url_label);
+            gtk_widget_show (priv->url_entry);
+            gtk_widget_show (priv->encoded_by_label);
+            gtk_widget_show (priv->encoded_by_entry);
+            et_tag_area_show_images_tab (self);
+            break;
+#endif
+
+#ifdef ENABLE_OPUS
+        case OPUS_TAG:
+            gtk_widget_show (priv->disc_number_label);
+            gtk_widget_show (priv->disc_number_entry);
+            gtk_widget_show (priv->composer_label);
+            gtk_widget_show (priv->composer_entry);
+            gtk_widget_show (priv->orig_artist_label);
+            gtk_widget_show (priv->orig_artist_entry);
+            gtk_widget_show (priv->copyright_label);
+            gtk_widget_show (priv->copyright_entry);
+            gtk_widget_show (priv->url_label);
+            gtk_widget_show (priv->url_entry);
+            gtk_widget_show (priv->encoded_by_label);
+            gtk_widget_show (priv->encoded_by_entry);
+            et_tag_area_show_images_tab (self);
+            break;
+#endif
+
+#ifdef ENABLE_FLAC
+        case FLAC_TAG:
+            gtk_widget_show (priv->disc_number_label);
+            gtk_widget_show (priv->disc_number_entry);
+            gtk_widget_show (priv->composer_label);
+            gtk_widget_show (priv->composer_entry);
+            gtk_widget_show (priv->orig_artist_label);
+            gtk_widget_show (priv->orig_artist_entry);
+            gtk_widget_show (priv->copyright_label);
+            gtk_widget_show (priv->copyright_entry);
+            gtk_widget_show (priv->url_label);
+            gtk_widget_show (priv->url_entry);
+            gtk_widget_show (priv->encoded_by_label);
+            gtk_widget_show (priv->encoded_by_entry);
+            et_tag_area_show_images_tab (self);
+            break;
+#endif
+
+        case APE_TAG:
+            gtk_widget_show (priv->disc_number_label);
+            gtk_widget_show (priv->disc_number_entry);
+            gtk_widget_show (priv->composer_label);
+            gtk_widget_show (priv->composer_entry);
+            gtk_widget_show (priv->orig_artist_label);
+            gtk_widget_show (priv->orig_artist_entry);
+            gtk_widget_show (priv->copyright_label);
+            gtk_widget_show (priv->copyright_entry);
+            gtk_widget_show (priv->url_label);
+            gtk_widget_show (priv->url_entry);
+            gtk_widget_show (priv->encoded_by_label);
+            gtk_widget_show (priv->encoded_by_entry);
+            et_tag_area_show_images_tab (self);
+            break;
+
+#ifdef ENABLE_MP4
+        case MP4_TAG:
+            gtk_widget_show (priv->disc_number_label);
+            gtk_widget_show (priv->disc_number_entry);
+            gtk_widget_show (priv->composer_label);
+            gtk_widget_show (priv->composer_entry);
+            gtk_widget_hide (priv->orig_artist_label);
+            gtk_widget_hide (priv->orig_artist_entry);
+            gtk_widget_show (priv->copyright_label);
+            gtk_widget_show (priv->copyright_entry);
+            gtk_widget_hide (priv->url_label);
+            gtk_widget_hide (priv->url_entry);
+            gtk_widget_show (priv->encoded_by_label);
+            gtk_widget_show (priv->encoded_by_entry);
+            et_tag_area_show_images_tab (self);
+            break;
+#endif
+
+#ifdef ENABLE_WAVPACK
+        case WAVPACK_TAG:
+            gtk_widget_show (priv->disc_number_label);
+            gtk_widget_show (priv->disc_number_entry);
+            gtk_widget_show (priv->composer_label);
+            gtk_widget_show (priv->composer_entry);
+            gtk_widget_show (priv->orig_artist_label);
+            gtk_widget_show (priv->orig_artist_entry);
+            gtk_widget_show (priv->copyright_label);
+            gtk_widget_show (priv->copyright_entry);
+            gtk_widget_show (priv->url_label);
+            gtk_widget_show (priv->url_entry);
+            gtk_widget_show (priv->encoded_by_label);
+            gtk_widget_show (priv->encoded_by_entry);
+            et_tag_area_hide_images_tab (self);
+            break;
+#endif /* ENABLE_WAVPACK */
+
+        case UNKNOWN_TAG:
+        default:
+            gtk_widget_hide (priv->disc_number_label);
+            gtk_widget_hide (priv->disc_number_entry);
+            gtk_widget_hide (priv->composer_label);
+            gtk_widget_hide (priv->composer_entry);
+            gtk_widget_hide (priv->orig_artist_label);
+            gtk_widget_hide (priv->orig_artist_entry);
+            gtk_widget_hide (priv->copyright_label);
+            gtk_widget_hide (priv->copyright_entry);
+            gtk_widget_hide (priv->url_label);
+            gtk_widget_hide (priv->url_entry);
+            gtk_widget_hide (priv->encoded_by_label);
+            gtk_widget_hide (priv->encoded_by_entry);
+            et_tag_area_hide_images_tab (self);
+            break;
+    }
+}
+
+void
+et_tag_area_clear (EtTagArea *self)
+{
+    EtTagAreaPrivate *priv;
+
+    g_return_if_fail (ET_TAG_AREA (self));
+
+    priv = et_tag_area_get_instance_private (self);
+
+    gtk_entry_set_text (GTK_ENTRY (priv->title_entry), "");
+    gtk_entry_set_text (GTK_ENTRY (priv->artist_entry), "");
+    gtk_entry_set_text (GTK_ENTRY (priv->album_artist_entry), "");
+    gtk_entry_set_text (GTK_ENTRY (priv->album_entry), "");
+    gtk_entry_set_text (GTK_ENTRY (priv->disc_number_entry), "");
+    gtk_entry_set_text (GTK_ENTRY (priv->year_entry), "");
+    gtk_entry_set_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->track_combo_entry))),
+                        "");
+    gtk_entry_set_text (GTK_ENTRY (priv->track_total_entry), "");
+    gtk_entry_set_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->genre_combo_entry))),
+                        "");
+    gtk_entry_set_text (GTK_ENTRY (priv->comment_entry), "");
+    gtk_entry_set_text (GTK_ENTRY (priv->composer_entry), "");
+    gtk_entry_set_text (GTK_ENTRY (priv->orig_artist_entry), "");
+    gtk_entry_set_text (GTK_ENTRY (priv->copyright_entry), "");
+    gtk_entry_set_text (GTK_ENTRY (priv->url_entry), "");
+    gtk_entry_set_text (GTK_ENTRY (priv->encoded_by_entry), "");
+    PictureEntry_Clear (self);
+}
+
+void
+et_tag_area_title_grab_focus (EtTagArea *self)
+{
+    EtTagAreaPrivate *priv;
+
+    g_return_if_fail (ET_TAG_AREA (self));
+
+    priv = et_tag_area_get_instance_private (self);
+
+    gtk_widget_grab_focus (priv->title_entry);
+}
+
+/*
+ * et_tag_area_create_file_tag:
+ *
+ * Create a new File_Tag structure and poopulate it with values from the UI.
+ */
+File_Tag *
+et_tag_area_create_file_tag (EtTagArea *self)
+{
+    EtTagAreaPrivate *priv;
+    gchar *buffer;
+    File_Tag *FileTag;
+
+    g_return_val_if_fail (ET_TAG_AREA (self), NULL);
+
+    priv = et_tag_area_get_instance_private (self);
+
+    /* Save tag data and generate undo for tag. */
+    FileTag = ET_File_Tag_Item_New ();
+
+    /* Title */
+    buffer = g_strdup (gtk_entry_get_text (GTK_ENTRY (priv->title_entry)));
+    g_strstrip (buffer);
+
+    if (*buffer)
+    {
+        FileTag->title = buffer;
+    }
+    else
+    {
+        FileTag->title = NULL;
+        g_free (buffer);
+    }
+
+    /* Artist */
+    buffer = g_strdup (gtk_entry_get_text (GTK_ENTRY (priv->artist_entry)));
+    g_strstrip (buffer);
+
+    if (*buffer)
+    {
+        FileTag->artist = buffer;
+    }
+    else
+    {
+        FileTag->artist = NULL;
+        g_free (buffer);
+    }
+
+	/* Album Artist */
+    buffer = g_strdup (gtk_entry_get_text (GTK_ENTRY (priv->album_artist_entry)));
+    g_strstrip (buffer);
+
+    if (*buffer)
+    {
+        FileTag->album_artist = buffer;
+    }
+    else
+    {
+        FileTag->album_artist = NULL;
+        g_free (buffer);
+    }
+
+    /* Album */
+    buffer = g_strdup (gtk_entry_get_text (GTK_ENTRY (priv->album_entry)));
+    g_strstrip (buffer);
+
+    if (*buffer)
+    {
+        FileTag->album = buffer;
+    }
+    else
+    {
+        FileTag->album = NULL;
+        g_free (buffer);
+    }
+
+    /* Disc number and total number of discs. */
+    buffer = g_strdup (gtk_entry_get_text (GTK_ENTRY (priv->disc_number_entry)));
+    g_strstrip (buffer);
+
+    if (*buffer)
+    {
+        gchar *separator;
+
+        separator = g_utf8_strchr (buffer, -1, '/');
+
+        if (separator != NULL && g_utf8_strlen (separator + 1, -1) > 0)
+        {
+            /* Copy before the separator for the disc number, beyond the
+             * separator for the total number of discs. */
+            FileTag->disc_number = g_strndup (buffer, separator - buffer);
+            FileTag->disc_total = g_strdup (separator + 1);
+            g_free (buffer);
+        }
+        else
+        {
+            FileTag->disc_number = buffer;
+            FileTag->disc_total = NULL;
+        }
+    }
+    else
+    {
+        FileTag->disc_number = NULL;
+        FileTag->disc_total = NULL;
+        g_free (buffer);
+    }
+
+    /* Year */
+    buffer = g_strdup (gtk_entry_get_text (GTK_ENTRY (priv->year_entry)));
+    g_strstrip (buffer);
+
+    if (*buffer)
+    {
+        FileTag->year = buffer;
+    }
+    else
+    {
+        FileTag->year = NULL;
+        g_free (buffer);
+    }
+
+    /* Track */
+    buffer = g_strdup (gtk_entry_get_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->track_combo_entry)))));
+    g_strstrip (buffer);
+
+    if (*buffer)
+    {
+        FileTag->track = et_track_number_to_string (atoi (buffer));
+        g_free (buffer);
+    }
+    else
+    {
+        FileTag->track = NULL;
+        g_free (buffer);
+    }
+
+    /* Track Total */
+    buffer = g_strdup (gtk_entry_get_text (GTK_ENTRY (priv->track_total_entry)));
+    g_strstrip (buffer);
+
+    if (*buffer)
+    {
+        FileTag->track_total = et_track_number_to_string (atoi (buffer));
+        g_free (buffer);
+    }
+    else
+    {
+        FileTag->track_total = NULL;
+        g_free (buffer);
+    }
+
+    /* Genre */
+    buffer = g_strdup (gtk_entry_get_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->genre_combo_entry)))));
+    g_strstrip (buffer);
+
+    if (*buffer)
+    {
+        FileTag->genre = buffer;
+    }
+    else
+    {
+        FileTag->genre = NULL;
+        g_free (buffer);
+    }
+
+    /* Comment */
+    buffer = g_strdup (gtk_entry_get_text (GTK_ENTRY (priv->comment_entry)));
+    g_strstrip (buffer);
+
+    if (*buffer)
+    {
+        FileTag->comment = buffer;
+    }
+    else
+    {
+        FileTag->comment = NULL;
+        g_free (buffer);
+    }
+
+    /* Composer */
+    buffer = g_strdup (gtk_entry_get_text (GTK_ENTRY (priv->composer_entry)));
+    g_strstrip (buffer);
+
+    if (*buffer)
+    {
+        FileTag->composer = buffer;
+    }
+    else
+    {
+        FileTag->composer = NULL;
+        g_free (buffer);
+    }
+
+    /* Original Artist */
+    buffer = g_strdup (gtk_entry_get_text (GTK_ENTRY (priv->orig_artist_entry)));
+    g_strstrip (buffer);
+
+    if (*buffer)
+    {
+        FileTag->orig_artist = buffer;
+    }
+    else
+    {
+        FileTag->orig_artist = NULL;
+        g_free (buffer);
+    }
+
+    /* Copyright */
+    buffer = g_strdup (gtk_entry_get_text (GTK_ENTRY (priv->copyright_entry)));
+    g_strstrip (buffer);
+
+    if (*buffer)
+    {
+        FileTag->copyright = buffer;
+    }
+    else
+    {
+        FileTag->copyright = NULL;
+        g_free (buffer);
+    }
+
+    /* URL */
+    buffer = g_strdup (gtk_entry_get_text (GTK_ENTRY (priv->url_entry)));
+    g_strstrip (buffer);
+
+    if (*buffer)
+    {
+        FileTag->url = buffer;
+    }
+    else
+    {
+        FileTag->url = NULL;
+        g_free (buffer);
+    }
+
+    /* Encoded by */
+    buffer = g_strdup (gtk_entry_get_text (GTK_ENTRY (priv->encoded_by_entry)));
+    g_strstrip (buffer);
+
+    if (*buffer)
+    {
+        FileTag->encoded_by = buffer;
+    }
+    else
+    {
+        FileTag->encoded_by = NULL;
+        g_free (buffer);
+    }
+
+    /* Picture */
+    {
+        Picture *pic, *prev_pic = NULL;
+        GtkTreeModel *model;
+        GtkTreeIter iter;
+
+        if (FileTag->picture)
+        {
+            Picture_Free (FileTag->picture);
+            FileTag->picture = NULL;
+        }
+
+        model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->picture_entry_view));
+
+        if (gtk_tree_model_get_iter_first (model, &iter))
+        {
+            do
+            {
+                gtk_tree_model_get (model, &iter, PICTURE_COLUMN_DATA, &pic,-1);
+                pic = Picture_Copy_One (pic);
+                if (!FileTag->picture)
+                {
+                    FileTag->picture = pic;
+                }
+                else
+                {
+                    prev_pic->next = pic;
+                }
+
+                prev_pic = pic;
+            } while (gtk_tree_model_iter_next (model, &iter));
+        }
+    }
+
+    return FileTag;
+}
+
+gboolean
+et_tag_area_display_et_file (EtTagArea *self,
+                             const ET_File *ETFile)
+{
+    EtTagAreaPrivate *priv;
+    File_Tag *FileTag = NULL;
+
+    g_return_val_if_fail (ET_TAG_AREA (self), FALSE);
+
+    if (!ETFile || !ETFile->FileTag)
+    {
+        et_tag_area_clear (self);
+        //Tag_Area_Set_Sensitive(FALSE);
+        return FALSE;
+    }
+
+    priv = et_tag_area_get_instance_private (self);
+
+    switch (ETFile->ETFileDescription->TagType)
+    {
+#ifdef ENABLE_MP3
+        case ID3_TAG:
+            gtk_label_set_text (GTK_LABEL (priv->label), _("ID3 Tag"));
+            break;
+#endif
+#ifdef ENABLE_OGG
+        case OGG_TAG:
+            gtk_label_set_text (GTK_LABEL (priv->label), _("Ogg Vorbis Tag"));
+            break;
+#endif
+#ifdef ENABLE_FLAC
+        case FLAC_TAG:
+            gtk_label_set_text (GTK_LABEL (priv->label), _("FLAC Vorbis Tag"));
+            break;
+#endif
+        case APE_TAG:
+            gtk_label_set_text (GTK_LABEL (priv->label), _("APE Tag"));
+            break;
+#ifdef ENABLE_MP4
+        case MP4_TAG:
+            gtk_label_set_text (GTK_LABEL (priv->label), _("MP4/M4A/AAC Tag"));
+            break;
+#endif
+#ifdef ENABLE_WAVPACK
+        case WAVPACK_TAG:
+            gtk_label_set_text (GTK_LABEL (priv->label), _("Wavpack Tag"));
+            break;
+#endif
+#ifdef ENABLE_OPUS
+        case OPUS_TAG:
+            gtk_label_set_text (GTK_LABEL (priv->label), _("Opus Tag"));
+            break;
+#endif
+        case UNKNOWN_TAG:
+        default:
+            gtk_label_set_text (GTK_LABEL (priv->label), _("Tag"));
+            /* FIXME: Translatable string. */
+            Log_Print (LOG_ERROR,
+                       "FileTag: Undefined tag type %d for file %s.",
+                       ETFile->ETFileDescription->TagType,
+                       ((File_Name *)((GList *)ETFile->FileNameCur)->data)->value_utf8);
+            break;
+    }
+
+    //Tag_Area_Set_Sensitive(TRUE); // Causes displaying problem when saving files
+
+    FileTag = (File_Tag *)(ETFile->FileTag->data);
+
+    /* Show title */
+    if (FileTag && FileTag->title)
+    {
+        gchar *tmp = Try_To_Validate_Utf8_String (FileTag->title);
+        gtk_entry_set_text (GTK_ENTRY (priv->title_entry), tmp);
+        g_free (tmp);
+    }
+    else
+    {
+        gtk_entry_set_text (GTK_ENTRY (priv->title_entry), "");
+    }
+
+    /* Show artist */
+    if (FileTag && FileTag->artist)
+    {
+        gchar *tmp = Try_To_Validate_Utf8_String (FileTag->artist);
+        gtk_entry_set_text (GTK_ENTRY (priv->artist_entry), tmp);
+        g_free (tmp);
+    }
+    else
+    {
+        gtk_entry_set_text (GTK_ENTRY (priv->artist_entry), "");
+    }
+
+	/* Show album artist */
+    if (FileTag && FileTag->album_artist)
+    {
+        gchar *tmp = Try_To_Validate_Utf8_String (FileTag->album_artist);
+        gtk_entry_set_text (GTK_ENTRY (priv->album_artist_entry), tmp);
+        g_free (tmp);
+    }
+    else
+    {
+        gtk_entry_set_text (GTK_ENTRY (priv->album_artist_entry), "");
+    }
+
+    /* Show album */
+    if (FileTag && FileTag->album)
+    {
+        gchar *tmp = Try_To_Validate_Utf8_String (FileTag->album);
+        gtk_entry_set_text (GTK_ENTRY (priv->album_entry), tmp);
+        g_free (tmp);
+    }
+    else
+    {
+        gtk_entry_set_text (GTK_ENTRY (priv->album_entry),"");
+    }
+
+    /* Show disc number and number of discs. */
+    if (FileTag && FileTag->disc_number)
+    {
+        gchar *tmp;
+
+        if (FileTag->disc_total)
+        {
+            gchar *total;
+
+            total = g_strjoin ("/", FileTag->disc_number, FileTag->disc_total,
+                               NULL);
+            tmp = Try_To_Validate_Utf8_String (total);
+            g_free (total);
+        }
+        else
+        {
+            tmp = Try_To_Validate_Utf8_String (FileTag->disc_number);
+        }
+
+        gtk_entry_set_text (GTK_ENTRY (priv->disc_number_entry), tmp);
+        g_free (tmp);
+    }
+    else
+    {
+        gtk_entry_set_text (GTK_ENTRY (priv->disc_number_entry), "");
+    }
+
+    /* Show year */
+    if (FileTag && FileTag->year)
+    {
+        gchar *tmp = Try_To_Validate_Utf8_String (FileTag->year);
+        gtk_entry_set_text (GTK_ENTRY (priv->year_entry), tmp);
+        g_free (tmp);
+    }
+    else
+    {
+        gtk_entry_set_text (GTK_ENTRY (priv->year_entry), "");
+    }
+
+    /* Show track */
+    if (FileTag && FileTag->track)
+    {
+        gchar *tmp = Try_To_Validate_Utf8_String (FileTag->track);
+        gtk_entry_set_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->track_combo_entry))),
+                            tmp);
+        g_free (tmp);
+    }
+    else
+    {
+        gtk_entry_set_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->track_combo_entry))),
+                            "");
+    }
+
+    /* Show number of tracks on the album */
+    if (FileTag && FileTag->track_total)
+    {
+        gchar *tmp = Try_To_Validate_Utf8_String (FileTag->track_total);
+        gtk_entry_set_text (GTK_ENTRY (priv->track_total_entry), tmp);
+        g_free (tmp);
+    }
+    else
+    {
+        gtk_entry_set_text (GTK_ENTRY (priv->track_total_entry),
+                            "");
+    }
+
+    /* Show genre */
+    if (FileTag && FileTag->genre)
+    {
+        gchar *tmp = Try_To_Validate_Utf8_String (FileTag->genre);
+        gtk_entry_set_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->genre_combo_entry))),
+                            tmp);
+        g_free (tmp);
+    }
+    else
+    {
+        gtk_entry_set_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->genre_combo_entry))),
+                            "");
+    }
+
+    /* Show comment */
+    if (FileTag && FileTag->comment)
+    {
+        gchar *tmp = Try_To_Validate_Utf8_String (FileTag->comment);
+        gtk_entry_set_text (GTK_ENTRY (priv->comment_entry), tmp);
+        g_free (tmp);
+    }
+    else
+    {
+        gtk_entry_set_text (GTK_ENTRY (priv->comment_entry),
+                            "");
+    }
+
+    /* Show composer */
+    if (FileTag && FileTag->composer)
+    {
+        gchar *tmp = Try_To_Validate_Utf8_String (FileTag->composer);
+        gtk_entry_set_text (GTK_ENTRY (priv->composer_entry), tmp);
+        g_free (tmp);
+    }
+    else
+    {
+        gtk_entry_set_text (GTK_ENTRY (priv->composer_entry), "");
+    }
+
+    /* Show original artist */
+    if (FileTag && FileTag->orig_artist)
+    {
+        gchar *tmp = Try_To_Validate_Utf8_String (FileTag->orig_artist);
+        gtk_entry_set_text (GTK_ENTRY (priv->orig_artist_entry), tmp);
+        g_free (tmp);
+    }
+    else
+    {
+        gtk_entry_set_text (GTK_ENTRY (priv->orig_artist_entry),
+                            "");
+    }
+
+    /* Show copyright */
+    if (FileTag && FileTag->copyright)
+    {
+        gchar *tmp = Try_To_Validate_Utf8_String (FileTag->copyright);
+        gtk_entry_set_text (GTK_ENTRY (priv->copyright_entry), tmp);
+        g_free (tmp);
+    }
+    else
+    {
+        gtk_entry_set_text (GTK_ENTRY (priv->copyright_entry), "");
+    }
+
+    /* Show URL */
+    if (FileTag && FileTag->url)
+    {
+        gchar *tmp = Try_To_Validate_Utf8_String (FileTag->url);
+        gtk_entry_set_text (GTK_ENTRY (priv->url_entry), tmp);
+        g_free (tmp);
+    }
+    else
+    {
+        gtk_entry_set_text (GTK_ENTRY (priv->url_entry), "");
+    }
+
+    /* Show Encoded by */
+    if (FileTag && FileTag->encoded_by)
+    {
+        gchar *tmp = Try_To_Validate_Utf8_String (FileTag->encoded_by);
+        gtk_entry_set_text (GTK_ENTRY (priv->encoded_by_entry), tmp);
+        g_free (tmp);
+    }
+    else
+    {
+        gtk_entry_set_text (GTK_ENTRY (priv->encoded_by_entry), "");
+    }
+
+    /* Show picture */
+    PictureEntry_Clear (self);
+
+    if (FileTag && FileTag->picture)
+    {
+        Picture *pic;
+        guint    nbr_pic = 0;
+        GtkWidget *page;
+        gchar *string;
+
+        PictureEntry_Update (self, FileTag->picture, FALSE);
+
+        // Count the number of items
+        for (pic = FileTag->picture; pic != NULL; pic = pic->next)
+        {
+            nbr_pic++;
+        }
+
+        /* Get page "Images" of the notebook. */
+        page = gtk_notebook_get_nth_page (GTK_NOTEBOOK (priv->notebook), 1);
+        string = g_strdup_printf (_("Images (%d)"), nbr_pic);
+        /* Update the notebook tab. */
+        gtk_notebook_set_tab_label_text (GTK_NOTEBOOK (priv->notebook), page,
+                                         string);
+        /* Update the notebook menu. */
+        gtk_notebook_set_menu_label_text (GTK_NOTEBOOK (priv->notebook), page,
+                                          string);
+        g_free (string);
+
+    }
+    else
+    {
+        GtkWidget *page;
+
+        /* Get page "Images" of the notebook. */
+        page = gtk_notebook_get_nth_page (GTK_NOTEBOOK (priv->notebook), 1);
+        /* Update the notebook tab. */
+        gtk_notebook_set_tab_label_text (GTK_NOTEBOOK (priv->notebook), page,
+                                         _("Images"));
+        /* Update the notebook menu. */
+        gtk_notebook_set_menu_label_text (GTK_NOTEBOOK (priv->notebook), page,
+                                          _("Images"));
+    }
+
+    return TRUE;
+}
+
+gboolean
+et_tag_area_select_all_if_focused (EtTagArea *self,
+                                   GtkWidget *focused)
+{
+    EtTagAreaPrivate *priv;
+
+    g_return_val_if_fail (ET_TAG_AREA (self), FALSE);
+
+    priv = et_tag_area_get_instance_private (self);
+
+    if (focused == priv->picture_entry_view)
+    {
+        GtkTreeSelection *selection;
+
+        selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->picture_entry_view));
+        gtk_tree_selection_select_all (selection);
+        return TRUE;
+    }
+
+    return FALSE;
+}
+
+gboolean
+et_tag_area_unselect_all_if_focused (EtTagArea *self,
+                                     GtkWidget *focused)
+{
+    EtTagAreaPrivate *priv;
+
+    g_return_val_if_fail (ET_TAG_AREA (self), FALSE);
+
+    priv = et_tag_area_get_instance_private (self);
+
+    if (focused == priv->picture_entry_view)
+    {
+        GtkTreeSelection *selection;
+
+        selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->picture_entry_view));
+        gtk_tree_selection_unselect_all (selection);
+        return TRUE;
+    }
+
+    return FALSE;
+}
diff --git a/src/tag_area.h b/src/tag_area.h
new file mode 100644
index 0000000..249125d
--- /dev/null
+++ b/src/tag_area.h
@@ -0,0 +1,62 @@
+/* EasyTAG - tag editor for audio files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ *
+ * 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 (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+#ifndef ET_TAG_AREA_H_
+#define ET_TAG_AREA_H_
+
+#include <gtk/gtk.h>
+
+#include "et_core.h"
+
+G_BEGIN_DECLS
+
+#define ET_TYPE_TAG_AREA (et_tag_area_get_type ())
+#define ET_TAG_AREA(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), ET_TYPE_TAG_AREA, EtTagArea))
+
+typedef struct _EtTagArea EtTagArea;
+typedef struct _EtTagAreaClass EtTagAreaClass;
+typedef struct _EtTagAreaPrivate EtTagAreaPrivate;
+
+struct _EtTagArea
+{
+    /*< private >*/
+    GtkBin parent_instance;
+    EtTagAreaPrivate *priv;
+};
+
+struct _EtTagAreaClass
+{
+    /*< private >*/
+    GtkBinClass parent_class;
+};
+
+GType et_tag_area_get_type (void);
+GtkWidget * et_tag_area_new (void);
+void et_tag_area_update_controls (EtTagArea *self, const ET_File *ETFile);
+void et_tag_area_clear (EtTagArea *self);
+void et_tag_area_title_grab_focus (EtTagArea *self);
+File_Tag * et_tag_area_create_file_tag (EtTagArea *self);
+gboolean et_tag_area_display_et_file (EtTagArea *self, const ET_File *ETFile);
+gboolean et_tag_area_select_all_if_focused (EtTagArea *self, GtkWidget *focused);
+gboolean et_tag_area_unselect_all_if_focused (EtTagArea *self, GtkWidget *focused);
+
+void on_entry_populate_popup (GtkEntry *entry, GtkWidget *menu, EtTagArea *self);
+
+G_END_DECLS
+
+#endif /* ET_TAG_AREA_H_ */
diff --git a/src/ape_tag.c b/src/tags/ape_tag.c
similarity index 78%
rename from src/ape_tag.c
rename to src/tags/ape_tag.c
index f089165..6e9f46c 100644
--- a/src/ape_tag.c
+++ b/src/tags/ape_tag.c
@@ -1,22 +1,21 @@
-/* ape_tag.c */
-/*
- *  EasyTAG - Tag editor for MP3, Ogg Vorbis and MPC files
- *  Copyright (C) 2001-2003  Jerome Couderc <easytag at gmail.com>
- *  Copyright (C) 2002-2003  Artur Polaczyñski <artii at o2.pl>
+/* EasyTAG - Tag editor for audio files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ * Copyright (C) 2001-2003  Jerome Couderc <easytag at gmail.com>
+ * Copyright (C) 2002-2003  Artur Polaczyñski <artii at o2.pl>
  *
- *  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
- *  (at your option) any later version.
+ * 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
+ * (at your option) any later version.
  *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
  *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
 #include <config.h>
@@ -46,25 +45,35 @@
  * Note:
  *  - if field is found but contains no info (strlen(str)==0), we don't read it
  */
-gboolean Ape_Tag_Read_File_Tag (gchar *filename, File_Tag *FileTag)
+gboolean
+ape_tag_read_file_tag (GFile *file,
+                       File_Tag *FileTag,
+                       GError **error)
 {
-    FILE *file;
+    FILE *fp;
+    gchar *filename;
     gchar *string = NULL;
     gchar *string1 = NULL;
     apetag *ape_cnt;
 
-    g_return_val_if_fail (filename != NULL && FileTag != NULL, FALSE);
+    g_return_val_if_fail (file != NULL && FileTag != NULL, FALSE);
+    g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+    filename = g_file_get_path (file);
 
-    if ((file = fopen(filename, "rb")) == NULL)
+    if ((fp = fopen (filename, "rb")) == NULL)
     {
-        gchar *filename_utf8 = filename_to_display(filename);
-        Log_Print(LOG_ERROR,_("Error while opening file: '%s' (%s)."),filename_utf8, g_strerror(errno));
-        g_free(filename_utf8);
+        g_set_error (error, G_FILE_ERROR, g_file_error_from_errno (errno),
+                     _("Error while opening file: %s"),
+                     g_strerror (errno));
+        g_free (filename);
         return FALSE;
     }
 
     ape_cnt = apetag_init();
-    apetag_read_fp(ape_cnt, file, filename, 0); /* read all tags ape,id3v[12]*/
+    apetag_read_fp (ape_cnt, fp, filename, 0); /* read all tags ape,id3v[12]*/
+
+    g_free (filename);
 
     /*********
      * Title *
@@ -195,30 +204,37 @@ gboolean Ape_Tag_Read_File_Tag (gchar *filename, File_Tag *FileTag)
         FileTag->encoded_by = Try_To_Validate_Utf8_String(string);
 
     apetag_free(ape_cnt);
-    fclose(file);
+    fclose (fp);
 
     return TRUE;
 }
 
-
-
-gboolean Ape_Tag_Write_File_Tag (ET_File *ETFile)
+gboolean
+ape_tag_write_file_tag (const ET_File *ETFile,
+                        GError **error)
 {
-
-    File_Tag *FileTag;
-    gchar    *filename_in;
+    const File_Tag *FileTag;
+    const gchar *filename_in;
     //FILE     *file_in;
     gchar    *string;
     //GList    *list;
     apetag   *ape_mem;
 
-    if (!ETFile || !ETFile->FileTag)
     g_return_val_if_fail (ETFile != NULL && ETFile->FileTag != NULL, FALSE);
+    g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
     FileTag     = (File_Tag *)ETFile->FileTag->data;
     filename_in = ((File_Name *)ETFile->FileNameCur->data)->value;
 
-    ape_mem = apetag_init();
+    ape_mem = apetag_init ();
+
+    /* TODO: Pointless, as g_set_error() will try to malloc. */
+    if (!ape_mem)
+    {
+        g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_NOMEM, "%s",
+                     g_strerror (ENOMEM));
+        return FALSE;
+    }
 
     /*********
      * Title *
@@ -346,9 +362,16 @@ gboolean Ape_Tag_Write_File_Tag (ET_File *ETFile)
     else
         apefrm_remove(ape_mem,"Encoded By");
 
-
     /* reread all tag-type again  excl. changed frames by apefrm_remove() */
-    apetag_save(filename_in,ape_mem,APE_TAG_V2+SAVE_NEW_OLD_APE_TAG);
+    if (apetag_save (filename_in, ape_mem, APE_TAG_V2 + SAVE_NEW_OLD_APE_TAG)
+        != 0)
+    {
+        g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, "%s",
+                     _("Failed to write APE tag"));
+        apetag_free (ape_mem);
+        return FALSE;
+    }
+
     apetag_free(ape_mem);
 
     return TRUE;
diff --git a/src/tags/ape_tag.h b/src/tags/ape_tag.h
new file mode 100644
index 0000000..f16120e
--- /dev/null
+++ b/src/tags/ape_tag.h
@@ -0,0 +1,33 @@
+/* EasyTAG - Tag editor for audio files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ * Copyright (C) 2001-2003  Jerome Couderc <easytag at gmail.com>
+ * Copyright (C) 2002-2003  Artur Polaczyñski <artii at o2.pl>
+ *
+ * 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
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef ET_APE_TAG_H_
+#define ET_APE_TAG_H_
+
+#include "et_core.h"
+
+G_BEGIN_DECLS
+
+gboolean ape_tag_read_file_tag (GFile *file, File_Tag *FileTag, GError **error);
+gboolean ape_tag_write_file_tag (const ET_File *ETFile, GError **error);
+
+G_END_DECLS
+
+#endif /* ET_APE_TAG_H_ */
diff --git a/src/tags/flac_header.c b/src/tags/flac_header.c
new file mode 100644
index 0000000..f796c18
--- /dev/null
+++ b/src/tags/flac_header.c
@@ -0,0 +1,347 @@
+/* EasyTAG - Tag editor for audio files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ * Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
+ *
+ * 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
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h" /* For definition of ENABLE_FLAC. */
+
+#ifdef ENABLE_FLAC
+
+#include <gtk/gtk.h>
+#include <glib/gi18n.h>
+#include <FLAC/all.h>
+#include <errno.h>
+
+#include "et_core.h"
+#include "flac_header.h"
+#include "misc.h"
+
+typedef struct
+{
+    GFileInputStream *istream;
+    gboolean eof;
+    GError *error;
+} EtFlacState;
+
+/* FLAC__metadata_read_with_callbacks() IO callbacks. */
+static size_t
+et_flac_read_func (void *ptr,
+                   size_t size,
+                   size_t nmemb,
+                   FLAC__IOHandle handle)
+{
+    EtFlacState *state;
+    gssize bytes_read;
+
+    state = (EtFlacState *)handle;
+    state->eof = FALSE;
+
+    bytes_read = g_input_stream_read (G_INPUT_STREAM (state->istream), ptr,
+                                      size * nmemb, NULL, &state->error);
+
+    if (bytes_read == -1)
+    {
+        errno = EIO;
+        return 0;
+    }
+    else if (bytes_read == 0)
+    {
+        state->eof = TRUE;
+    }
+
+    return bytes_read;
+}
+
+static int
+et_flac_seek_func (FLAC__IOHandle handle,
+                   FLAC__int64 offset,
+                   int whence)
+{
+    EtFlacState *state;
+    GSeekable *seekable;
+    GSeekType seektype;
+
+    state = (EtFlacState *)handle;
+    seekable = G_SEEKABLE (state->istream);
+
+    if (!g_seekable_can_seek (seekable))
+    {
+        errno = EBADF;
+        return -1;
+    }
+    else
+    {
+        switch (whence)
+        {
+            case SEEK_SET:
+                seektype = G_SEEK_SET;
+                break;
+            case SEEK_CUR:
+                seektype = G_SEEK_CUR;
+                break;
+            case SEEK_END:
+                seektype = G_SEEK_END;
+                break;
+            default:
+                errno = EINVAL;
+                return -1;
+        }
+
+        if (!g_seekable_seek (seekable, offset, seektype, NULL, &state->error))
+        {
+            /* TODO: More suitable error. */
+            errno = EINVAL;
+            return -1;
+        }
+        else
+        {
+            return 0;
+        }
+    }
+}
+
+static FLAC__int64
+et_flac_tell_func (FLAC__IOHandle handle)
+{
+    EtFlacState *state;
+    GSeekable *seekable;
+
+    state = (EtFlacState *)handle;
+    seekable = G_SEEKABLE (state->istream);
+
+    if (!g_seekable_can_seek (seekable))
+    {
+        errno = EBADF;
+        return -1;
+    }
+    else
+    {
+        return g_seekable_tell (seekable);
+    }
+}
+
+static int
+et_flac_eof_func (FLAC__IOHandle handle)
+{
+    EtFlacState *state;
+
+    state = (EtFlacState *)handle;
+
+    /* EOF is not directly supported by GFileInputStream. */
+    return state->eof ? 1 : 0;
+}
+
+static int
+et_flac_close_func (FLAC__IOHandle handle)
+{
+    EtFlacState *state;
+
+    state = (EtFlacState *)handle;
+
+    g_clear_object (&state->istream);
+    g_clear_error (&state->error);
+
+    /* Always return success. */
+    return 0;
+}
+
+/* Header info of FLAC file */
+
+gboolean
+et_flac_header_read_file_info (GFile *file,
+                               ET_File_Info *ETFileInfo,
+                               GError **error)
+{
+    GFileInfo *info;
+    FLAC__Metadata_Chain *chain;
+    EtFlacState state;
+    GFileInputStream *istream;
+    FLAC__IOCallbacks callbacks = { et_flac_read_func, NULL, et_flac_seek_func,
+                                    et_flac_tell_func, et_flac_eof_func,
+                                    et_flac_close_func };
+    FLAC__Metadata_Iterator *iter;
+    gsize metadata_len;
+
+    g_return_val_if_fail (file != NULL && ETFileInfo != NULL, FALSE);
+    g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+    /* Decoding FLAC file */
+    chain = FLAC__metadata_chain_new ();
+
+    if (chain == NULL)
+    {
+        g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_NOMEM, "%s",
+                     g_strerror (ENOMEM));
+        return FALSE;
+    }
+
+    istream = g_file_read (file, NULL, &state.error);
+
+    if (istream == NULL)
+    {
+        FLAC__metadata_chain_delete (chain);
+        return FALSE;
+    }
+
+    state.eof = FALSE;
+    state.error = NULL;
+    state.istream = istream;
+
+    if (!FLAC__metadata_chain_read_with_callbacks (chain, &state, callbacks))
+    {
+        const FLAC__Metadata_ChainStatus status = FLAC__metadata_chain_status (chain);
+
+        g_debug ("Error reading FLAC metadata chain: %s:",
+                 FLAC__Metadata_ChainStatusString[status]);
+        FLAC__metadata_chain_delete (chain);
+        /* TODO: Provide a dedicated error enum corresponding to status. */
+        g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, "%s",
+                     _("Error opening FLAC file"));
+        et_flac_close_func (&state);
+        return FALSE;
+    }
+
+    iter = FLAC__metadata_iterator_new ();
+
+    if (iter == NULL)
+    {
+        et_flac_close_func (&state);
+        g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_NOMEM, "%s",
+                     g_strerror (ENOMEM));
+        return FALSE;
+    }
+
+    FLAC__metadata_iterator_init (iter, chain);
+    metadata_len = 0;
+
+    do
+    {
+        const FLAC__StreamMetadata *block;
+
+        block = FLAC__metadata_iterator_get_block (iter);
+
+        metadata_len += block->length;
+
+        switch (block->type)
+        {
+            case FLAC__METADATA_TYPE_STREAMINFO:
+                {
+                    const FLAC__StreamMetadata_StreamInfo *stream_info = &block->data.stream_info;
+                    ETFileInfo->duration = stream_info->total_samples
+                                           / stream_info->sample_rate;
+                    ETFileInfo->mode = stream_info->channels;
+                    ETFileInfo->samplerate = stream_info->sample_rate;
+                    ETFileInfo->version = 0; /* Not defined in FLAC file. */
+                }
+                break;
+            default:
+                /* Ignore all other metadata types. */
+                break;
+        }
+    }
+    while (FLAC__metadata_iterator_next (iter));
+
+    FLAC__metadata_iterator_delete (iter);
+    FLAC__metadata_chain_delete (chain);
+    et_flac_close_func (&state);
+    /* End of decoding FLAC file */
+
+    info = g_file_query_info (file, G_FILE_ATTRIBUTE_STANDARD_SIZE,
+                              G_FILE_QUERY_INFO_NONE, NULL, NULL);
+
+    if (info)
+    {
+        ETFileInfo->size = g_file_info_get_size (info);
+        g_object_unref (info);
+    }
+    else
+    {
+        ETFileInfo->size = 0;
+    }
+
+    if (ETFileInfo->duration > 0 && ETFileInfo->size > 0)
+    {
+        /* Ignore metadata blocks, and use the remainder to calculate the
+         * average bitrate (including format overhead). */
+        ETFileInfo->bitrate = (ETFileInfo->size - metadata_len) * 8 /
+                              ETFileInfo->duration / 1000;
+    }
+
+    return TRUE;
+}
+
+EtFileHeaderFields *
+et_flac_header_display_file_info_to_ui (const ET_File *ETFile)
+{
+    EtFileHeaderFields *fields;
+    ET_File_Info *info;
+    gchar *time = NULL;
+    gchar *time1 = NULL;
+    gchar *size = NULL;
+    gchar *size1 = NULL;
+
+    info = ETFile->ETFileInfo;
+    fields = g_slice_new (EtFileHeaderFields);
+
+    fields->description = _("FLAC File");
+
+    /* Nothing to display */
+    fields->version_label = _("Encoder:");
+    fields->version = g_strdup ("flac");
+
+    /* Bitrate */
+    fields->bitrate = g_strdup_printf (_("%d kb/s"), info->bitrate);
+
+    /* Samplerate */
+    fields->samplerate = g_strdup_printf (_("%d Hz"), info->samplerate);
+
+    /* Mode */
+    fields->mode_label = _("Channels:");
+    fields->mode = g_strdup_printf ("%d", info->mode);
+
+    /* Size */
+    size = g_format_size (info->size);
+    size1 = g_format_size (ETCore->ETFileDisplayedList_TotalSize);
+    fields->size = g_strdup_printf ("%s (%s)", size, size1);
+    g_free (size);
+    g_free (size1);
+
+    /* Duration */
+    time = Convert_Duration (info->duration);
+    time1 = Convert_Duration (ETCore->ETFileDisplayedList_TotalDuration);
+    fields->duration = g_strdup_printf ("%s (%s)", time, time1);
+    g_free (time);
+    g_free (time1);
+
+    return fields;
+}
+
+void
+et_flac_file_header_fields_free (EtFileHeaderFields *fields)
+{
+    g_return_if_fail (fields != NULL);
+
+    g_free (fields->version);
+    g_free (fields->bitrate);
+    g_free (fields->samplerate);
+    g_free (fields->mode);
+    g_free (fields->size);
+    g_free (fields->duration);
+    g_slice_free (EtFileHeaderFields, fields);
+}
+
+#endif /* ENABLE_FLAC */
diff --git a/src/tags/flac_header.h b/src/tags/flac_header.h
new file mode 100644
index 0000000..f962222
--- /dev/null
+++ b/src/tags/flac_header.h
@@ -0,0 +1,33 @@
+/* EasyTAG - Tag editor for audio files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ * Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
+ *
+ * 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
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef ET_FLAC_HEADER_H_
+#define ET_FLAC_HEADER_H_
+
+#include "et_core.h"
+
+G_BEGIN_DECLS
+
+gboolean et_flac_header_read_file_info (GFile *file, ET_File_Info *ETFileInfo, GError **error);
+EtFileHeaderFields * et_flac_header_display_file_info_to_ui (const ET_File *ETFile);
+void et_flac_file_header_fields_free (EtFileHeaderFields *fields);
+
+G_END_DECLS
+
+#endif /* ET_FLAC_HEADER_H_ */
diff --git a/src/flac_tag.c b/src/tags/flac_tag.c
similarity index 89%
rename from src/flac_tag.c
rename to src/tags/flac_tag.c
index 2bbfa4c..57c4303 100644
--- a/src/flac_tag.c
+++ b/src/tags/flac_tag.c
@@ -1,25 +1,24 @@
-/* flac_tag.c - 2003/12/27 */
-/*
- *  EasyTAG - Tag editor for MP3 and Ogg Vorbis files
- *  Copyright (C) 2001-2003  Jerome Couderc <easytag at gmail.com>
- *  Copyright (C) 2003       Pavel Minayev <thalion at front.ru>
+/* EasyTAG - Tag editor for audio files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ * Copyright (C) 2001-2003  Jerome Couderc <easytag at gmail.com>
+ * Copyright (C) 2003       Pavel Minayev <thalion at front.ru>
  *
- *  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
- *  (at your option) any later version.
+ * 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
+ * (at your option) any later version.
  *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
  *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-#include <config.h>
+#include "config.h"
 
 #ifdef ENABLE_FLAC
 
@@ -98,21 +97,27 @@ static gboolean Flac_Set_Tag (FLAC__StreamMetadata *vc_block, const gchar *tag_n
  * Note:
  *  - if field is found but contains no info (strlen(str)==0), we don't read it
  */
-gboolean Flac_Tag_Read_File_Tag (gchar *filename, File_Tag *FileTag)
+gboolean
+flac_tag_read_file_tag (GFile *file,
+                        File_Tag *FileTag,
+                        GError **error)
 {
     FLAC__Metadata_SimpleIterator *iter;
+    const gchar *flac_error_msg;
     gchar *string = NULL;
-    gchar *filename_utf8 = filename_to_display(filename);
+    gchar *filename;
+    gchar *filename_utf8;
     guint i;
     Picture *prev_pic = NULL;
     //gint j = 1;
 
-    g_return_val_if_fail (filename != NULL && FileTag != NULL, FALSE);
-
-    flac_error_msg = NULL;
+    g_return_val_if_fail (file != NULL && FileTag != NULL, FALSE);
+    g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
-    // Initialize the iterator for the blocks
+    /* Initialize the iterator for the blocks. */
+    filename = g_file_get_path (file);
     iter = FLAC__metadata_simple_iterator_new();
+
     if ( iter == NULL || !FLAC__metadata_simple_iterator_init(iter, filename, true, false) )
     {
         if ( iter == NULL )
@@ -128,11 +133,14 @@ gboolean Flac_Tag_Read_File_Tag (gchar *filename, File_Tag *FileTag)
             FLAC__metadata_simple_iterator_delete(iter);
         }
 
-        Log_Print(LOG_ERROR,_("Error while opening file: '%s' as FLAC (%s)."),filename_utf8,flac_error_msg);
-        g_free(filename_utf8);
+        g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
+                     _("Error while opening file: %s"), flac_error_msg);
+        g_free (filename);
         return FALSE;
     }
     
+    filename_utf8 = filename_to_display (filename);
+    g_free (filename);
 
     /* libFLAC is able to detect (and skip) ID3v2 tags by itself */
 
@@ -348,8 +356,12 @@ gboolean Flac_Tag_Read_File_Tag (gchar *filename, File_Tag *FileTag)
                             field_value = Try_To_Validate_Utf8_String(field_value_tmp);
                             g_free(field_value_tmp);
                             FileTag->year = field_value;
-                            if (g_utf8_strlen(FileTag->year, -1) > 4)
-                                Log_Print(LOG_WARNING,_("The year value '%s' seems to be invalid in file '%s'. The information will be lost while saving tag."),FileTag->year,filename_utf8);
+                            if (g_utf8_strlen (FileTag->year, -1) > 4)
+                            {
+                                Log_Print (LOG_WARNING,
+                                           _("The year value ‘%s’ seems to be invalid in file ‘%s’. The information will be lost when saving"),
+                                           FileTag->year, filename_utf8);
+                            }
                         }
                     }
                 }
@@ -727,7 +739,7 @@ gboolean Flac_Tag_Read_File_Tag (gchar *filename, File_Tag *FileTag)
       && FileTag->encoded_by  == NULL
       && FileTag->picture     == NULL)
     {
-        gint rc = Id3tag_Read_File_Tag(filename,FileTag);
+        gboolean rc = id3tag_read_file_tag (file, FileTag, NULL);
 
         // If an ID3 tag has been found (and no FLAC tag), we mark the file as
         // unsaved to rewrite a flac tag.
@@ -811,22 +823,25 @@ static gboolean Flac_Set_Tag (FLAC__StreamMetadata *vc_block, const gchar *tag_n
 /*
  * Write Flac tag, using the level 2 flac interface
  */
-gboolean Flac_Tag_Write_File_Tag (ET_File *ETFile)
+gboolean
+flac_tag_write_file_tag (const ET_File *ETFile,
+                         GError **error)
 {
-    File_Tag *FileTag;
-    gchar *filename_utf8, *filename;
-    gchar *basename_utf8;
+    const File_Tag *FileTag;
+    const gchar *filename;
+    const gchar *filename_utf8;
+    const gchar *flac_error_msg;
     FLAC__Metadata_Chain *chain;
     FLAC__Metadata_Iterator *iter;
     FLAC__StreamMetadata_VorbisComment_Entry vce_field_vendor_string; // To save vendor string
     gboolean vce_field_vendor_string_found = FALSE;
 
     g_return_val_if_fail (ETFile != NULL && ETFile->FileTag != NULL, FALSE);
+    g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
     FileTag       = (File_Tag *)ETFile->FileTag->data;
     filename      = ((File_Name *)ETFile->FileNameCur->data)->value;
     filename_utf8 = ((File_Name *)ETFile->FileNameCur->data)->value_utf8;
-    flac_error_msg = NULL;
 
     /* libFLAC is able to detect (and skip) ID3v2 tags by itself */
     
@@ -847,7 +862,9 @@ gboolean Flac_Tag_Write_File_Tag (ET_File *ETFile)
             FLAC__metadata_chain_delete(chain);
         }
         
-        Log_Print(LOG_ERROR,_("Error while opening file: '%s' as FLAC (%s)."),filename_utf8,flac_error_msg);
+        g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
+                     _("Error while opening file ‘%s’ as FLAC: %s"),
+                     filename_utf8, flac_error_msg);
         return FALSE;
     }
     
@@ -857,7 +874,9 @@ gboolean Flac_Tag_Write_File_Tag (ET_File *ETFile)
     {
         flac_error_msg = FLAC__Metadata_ChainStatusString[FLAC__METADATA_CHAIN_STATUS_MEMORY_ALLOCATION_ERROR];
 
-        Log_Print(LOG_ERROR,_("Error while opening file: '%s' as FLAC (%s)."),filename_utf8,flac_error_msg);
+        g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
+                     _("Error while opening file ‘%s’ as FLAC: %s"),
+                     filename_utf8, flac_error_msg);
         return FALSE;
     }
     
@@ -931,22 +950,30 @@ gboolean Flac_Tag_Write_File_Tag (ET_File *ETFile)
         /*********
          * Title *
          *********/
-        Flac_Set_Tag(vc_block,"TITLE=",FileTag->title, VORBIS_SPLIT_FIELD_TITLE);
+        Flac_Set_Tag (vc_block, "TITLE=", FileTag->title,
+                      g_settings_get_boolean (MainSettings,
+                                              "ogg-split-title"));
 
         /**********
          * Artist *
          **********/
-        Flac_Set_Tag(vc_block,"ARTIST=",FileTag->artist,VORBIS_SPLIT_FIELD_ARTIST);
+        Flac_Set_Tag (vc_block, "ARTIST=", FileTag->artist,
+                      g_settings_get_boolean (MainSettings,
+                                              "ogg-split-artist"));
 
         /****************
          * Album Artist *
          ****************/
-        Flac_Set_Tag(vc_block,"ALBUMARTIST=",FileTag->album_artist,VORBIS_SPLIT_FIELD_ARTIST);
+        Flac_Set_Tag (vc_block, "ALBUMARTIST=", FileTag->album_artist,
+                      g_settings_get_boolean (MainSettings,
+                                              "ogg-split-artist"));
 
         /*********
          * Album *
          *********/
-        Flac_Set_Tag(vc_block,"ALBUM=",FileTag->album,VORBIS_SPLIT_FIELD_ALBUM);
+        Flac_Set_Tag (vc_block, "ALBUM=", FileTag->album,
+                      g_settings_get_boolean (MainSettings,
+                                              "ogg-split-album"));
 
         /******************************
          * Disc Number and Disc Total *
@@ -968,22 +995,30 @@ gboolean Flac_Tag_Write_File_Tag (ET_File *ETFile)
         /*********
          * Genre *
          *********/
-        Flac_Set_Tag(vc_block,"GENRE=",FileTag->genre,VORBIS_SPLIT_FIELD_GENRE);
+        Flac_Set_Tag (vc_block, "GENRE=", FileTag->genre,
+                      g_settings_get_boolean (MainSettings,
+                                              "ogg-split-genre"));
 
         /***********
          * Comment *
          ***********/
-        Flac_Set_Tag(vc_block,"DESCRIPTION=",FileTag->comment,VORBIS_SPLIT_FIELD_COMMENT);
+        Flac_Set_Tag (vc_block, "DESCRIPTION=", FileTag->comment,
+                      g_settings_get_boolean (MainSettings,
+                                              "ogg-split-comment"));
 
         /************
          * Composer *
          ************/
-        Flac_Set_Tag(vc_block,"COMPOSER=",FileTag->composer,VORBIS_SPLIT_FIELD_COMPOSER);
+        Flac_Set_Tag (vc_block, "COMPOSER=", FileTag->composer,
+                      g_settings_get_boolean (MainSettings,
+                                              "ogg-split-comment"));
 
         /*******************
          * Original artist *
          *******************/
-        Flac_Set_Tag(vc_block,"PERFORMER=",FileTag->orig_artist,VORBIS_SPLIT_FIELD_ORIG_ARTIST);
+        Flac_Set_Tag (vc_block, "PERFORMER=", FileTag->orig_artist,
+                      g_settings_get_boolean (MainSettings,
+                                              "ogg-split-original-artist"));
 
         /*************
          * Copyright *
@@ -1040,6 +1075,8 @@ gboolean Flac_Tag_Write_File_Tag (ET_File *ETFile)
                 
                 // Mime type
                 format = Picture_Format_From_Data(pic);
+                /* Safe to pass a const string, according to the FLAC API
+                 * reference. */
                 FLAC__metadata_object_picture_set_mime_type(picture_block, (gchar *)Picture_Mime_Type_String(format), TRUE);
 
                 // Description
@@ -1058,7 +1095,8 @@ gboolean Flac_Tag_Write_File_Tag (ET_File *ETFile)
                 
                 if (!FLAC__metadata_object_picture_is_legal(picture_block, &violation))
                 {
-                    Log_Print(LOG_ERROR,_("Picture block isn't valid: '%s'"),violation);
+                    Log_Print (LOG_ERROR, _("Picture block is invalid ‘%s’"),
+                               violation);
                     FLAC__metadata_object_delete(picture_block);
                 }else
                 {
@@ -1082,8 +1120,10 @@ gboolean Flac_Tag_Write_File_Tag (ET_File *ETFile)
     // Move all PADDING blocks to the end on the metadata, and merge them into a single block.
     FLAC__metadata_chain_sort_padding(chain);
  
-    // Write tag
-    if ( !FLAC__metadata_chain_write(chain, /*padding*/TRUE, PRESERVE_MODIFICATION_TIME) )
+    /* Write tag. */
+    if (!FLAC__metadata_chain_write (chain, /*padding*/TRUE,
+                                     g_settings_get_boolean (MainSettings,
+                                                             "file-preserve-modification-time")))
     {
         // Error with "FLAC__metadata_chain_write"
         FLAC__Metadata_ChainStatus status = FLAC__metadata_chain_status(chain);
@@ -1091,13 +1131,10 @@ gboolean Flac_Tag_Write_File_Tag (ET_File *ETFile)
 
         FLAC__metadata_chain_delete(chain);
         
-        Log_Print(LOG_ERROR,_("Error: Failed to write comments to file '%s' (%s)."),filename_utf8,flac_error_msg);
+        g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
+                     _("Failed to write comments to file ‘%s’: %s"),
+                     filename_utf8, flac_error_msg);
         return FALSE;
-    }else
-    {
-        basename_utf8 = g_path_get_basename(filename_utf8);
-        Log_Print(LOG_OK,_("Written tag of '%s'"),basename_utf8);
-        g_free(basename_utf8);
     }
     
     FLAC__metadata_chain_delete(chain);
@@ -1117,7 +1154,7 @@ gboolean Flac_Tag_Write_File_Tag (ET_File *ETFile)
         // With empty tag...
         ETFile_tmp->FileTagList  = g_list_append(NULL,FileTag_tmp);
         ETFile_tmp->FileTag      = ETFile_tmp->FileTagList;
-        Id3tag_Write_File_Tag(ETFile_tmp);
+        id3tag_write_file_tag (ETFile_tmp, NULL);
         ET_Free_File_List_Item(ETFile_tmp);
     }
 #endif
diff --git a/src/tags/flac_tag.h b/src/tags/flac_tag.h
new file mode 100644
index 0000000..85da0c9
--- /dev/null
+++ b/src/tags/flac_tag.h
@@ -0,0 +1,34 @@
+/* EasyTAG - Tag editor for audo files
+ * Copyright (C) 2013  David King <amigadave at amigadave.com>
+ * Copyright (C) 2001-2003  Jerome Couderc <easytag at gmail.com>
+ * Copyright (C) 2003       Pavel Minayev <thalion at front.ru>
+ *
+ * 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
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef ET_FLAC_TAG_H_
+#define ET_FLAC_TAG_H_
+
+#include <glib.h>
+#include "et_core.h"
+
+G_BEGIN_DECLS
+
+gboolean flac_tag_read_file_tag (GFile *file, File_Tag *FileTag, GError **error);
+gboolean flac_tag_write_file_tag (const ET_File *ETFile, GError **error);
+
+G_END_DECLS
+
+#endif /* ET_FLAC_TAG_H_ */
diff --git a/src/gio_wrapper.cc b/src/tags/gio_wrapper.cc
similarity index 90%
rename from src/gio_wrapper.cc
rename to src/tags/gio_wrapper.cc
index e35b2f1..a560577 100644
--- a/src/gio_wrapper.cc
+++ b/src/tags/gio_wrapper.cc
@@ -186,8 +186,7 @@ GIO_IOStream::~GIO_IOStream ()
 
     if (stream)
     {
-        g_io_stream_close (G_IO_STREAM (stream), NULL, &error);
-        clear ();
+        g_object_unref (stream);
     }
 
     g_free (filename);
@@ -227,10 +226,15 @@ GIO_IOStream::writeBlock (TagLib::ByteVector const &data)
         return;
     }
 
+    gsize bytes_written;
     GOutputStream *ostream = g_io_stream_get_output_stream (G_IO_STREAM (stream));
 
-    g_output_stream_write_all (ostream, data.data (), data.size (), NULL,
-			       NULL, &error);
+    if (!g_output_stream_write_all (ostream, data.data (), data.size (),
+                                    &bytes_written, NULL, &error))
+    {
+        g_debug ("Only %" G_GSIZE_FORMAT " bytes out of %u bytes of data were "
+                 "written", bytes_written, data.size ());
+    }
 }
 
 void
@@ -311,16 +315,13 @@ GIO_IOStream::insert (TagLib::ByteVector const &data,
     while (g_input_stream_read_all (istream, buffer, sizeof (buffer), &r,
                                     NULL, &error) && r > 0)
     {
-        gsize w;
-        g_output_stream_write_all (ostream, buffer, r, &w, NULL, &error);
-
-        if (w != r)
-        {
-            g_warning ("%s", "Unable to write all bytes");
-        }
+        gsize bytes_written;
 
-        if (error)
+        if (!g_output_stream_write_all (ostream, buffer, r, &bytes_written,
+                                        NULL, &error))
         {
+            g_debug ("Only %" G_GSIZE_FORMAT " bytes out of %" G_GSIZE_FORMAT
+                     " bytes of data were written", bytes_written, r);
             g_object_unref (tstr);
             g_object_unref (tmp);
             return;
@@ -362,20 +363,18 @@ GIO_IOStream::removeBlock (TagLib::ulong start, TagLib::ulong len)
     while (g_input_stream_read_all (istream, buffer, sizeof (buffer), &r, NULL,
                                     NULL) && r > 0)
     {
-        gsize w;
+        gsize bytes_written;
+
         seek (start);
-        g_output_stream_write_all (ostream, buffer, r, &w, NULL, NULL);
 
-        if (w != r)
+        if (!g_output_stream_write_all (ostream, buffer, r, &bytes_written,
+                                        NULL, &error))
         {
-            g_warning ("%s", "Unable to write all bytes");
+            g_debug ("Only %" G_GSIZE_FORMAT " bytes out of %" G_GSIZE_FORMAT
+                     " bytes of data were written", bytes_written, r);
+            return;
         }
 
-	if (error)
-	{
-	    return;
-	}
-
         start += r;
         seek (start + len);
     }
diff --git a/src/gio_wrapper.h b/src/tags/gio_wrapper.h
similarity index 100%
rename from src/gio_wrapper.h
rename to src/tags/gio_wrapper.h
diff --git a/src/id3_tag.c b/src/tags/id3_tag.c
similarity index 80%
rename from src/id3_tag.c
rename to src/tags/id3_tag.c
index 5134228..ccbb4de 100644
--- a/src/id3_tag.c
+++ b/src/tags/id3_tag.c
@@ -76,7 +76,7 @@ ID3_C_EXPORT size_t ID3Field_GetUNICODE_1 (const ID3Field *field, unicode_t *buf
 static gboolean et_id3tag_check_if_file_is_corrupted (GFile *file,
                                                       GError **error);
 
-static gboolean Id3tag_Check_If_Id3lib_Is_Bugged (void);
+static gboolean id3tag_check_if_id3lib_is_buggy (GError **error);
 
 
 
@@ -92,7 +92,7 @@ static gboolean Id3tag_Check_If_Id3lib_Is_Bugged (void);
  * Returns: a newly allocated string, should be freed using g_free.
  */
 gchar *
-et_id3tag_get_tpos_from_file_tag (File_Tag *FileTag)
+et_id3tag_get_tpos_from_file_tag (const File_Tag *FileTag)
 {
     GString *gstring;
     gchar *p;
@@ -135,20 +135,20 @@ et_id3tag_get_tpos_from_file_tag (File_Tag *FileTag)
  * Write the ID3 tags to the file. Returns TRUE on success, else 0.
  */
 static gboolean
-Id3tag_Write_File_v23Tag (ET_File *ETFile)
+id3tag_write_file_v23tag (const ET_File *ETFile,
+                          GError **error)
 {
-    File_Tag *FileTag;
-    gchar    *filename;
-    gchar    *filename_utf8;
+    const File_Tag *FileTag;
+    const gchar *filename;
+    const gchar *filename_utf8;
     gchar    *basename_utf8;
     GFile *file;
-    GError *gerror = NULL;
     ID3Tag   *id3_tag = NULL;
     ID3_Err   error_strip_id3v1  = ID3E_NoError;
     ID3_Err   error_strip_id3v2  = ID3E_NoError;
     ID3_Err   error_update_id3v1 = ID3E_NoError;
     ID3_Err   error_update_id3v2 = ID3E_NoError;
-    gint error = 0;
+    gboolean success = TRUE;
     gint number_of_frames;
     gboolean has_title       = FALSE;
     gboolean has_artist      = FALSE;
@@ -176,14 +176,15 @@ Id3tag_Write_File_v23Tag (ET_File *ETFile)
     Picture *pic;
 
     g_return_val_if_fail (ETFile != NULL && ETFile->FileTag != NULL, FALSE);
+    g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
     // When writing the first MP3 file, we check if the version of id3lib of the
     // system doesn't contain a bug when writting Unicode tags
     if (flag_first_check
-    && (FILE_WRITING_ID3V2_USE_UNICODE_CHARACTER_SET) )
+        && g_settings_get_boolean (MainSettings, "id3v2-enable-unicode"))
     {
         flag_first_check = FALSE;
-        flag_id3lib_bugged = Id3tag_Check_If_Id3lib_Is_Bugged();
+        flag_id3lib_bugged = id3tag_check_if_id3lib_is_buggy (NULL);
     }
 
     FileTag  = (File_Tag *)ETFile->FileTag->data;
@@ -192,21 +193,15 @@ Id3tag_Write_File_v23Tag (ET_File *ETFile)
 
     file = g_file_new_for_path (filename);
 
+    /* FIXME: Handle this in the caller instead. */
     /* This is a protection against a bug in id3lib that enters an infinite
      * loop with corrupted MP3 files (files containing only zeroes) */
-    if (et_id3tag_check_if_file_is_corrupted (file, &gerror))
+    if (et_id3tag_check_if_file_is_corrupted (file, error))
     {
         GtkWidget *msgdialog;
         gchar *basename;
         gchar *basename_utf8;
 
-        if (gerror)
-        {
-            Log_Print (LOG_ERROR, _("Error while reading file: '%s' (%s)"),
-                       filename_utf8, gerror->message);
-            g_error_free (gerror);
-        }
-
         basename = g_file_get_basename (file);
         basename_utf8 = filename_to_display (basename);
 
@@ -214,7 +209,7 @@ Id3tag_Write_File_v23Tag (ET_File *ETFile)
                                             GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
                                             GTK_MESSAGE_ERROR,
                                             GTK_BUTTONS_CLOSE,
-                                            _("As the following corrupted file '%s' will cause an error in id3lib, it will not be processed"),
+                                            _("As the following corrupted file ‘%s’ will cause an error in id3lib, it will not be processed"),
                                             basename_utf8);
         gtk_window_set_title (GTK_WINDOW (msgdialog), _("Corrupted file"));
 
@@ -225,12 +220,16 @@ Id3tag_Write_File_v23Tag (ET_File *ETFile)
         g_object_unref (file);
         return FALSE;
     }
-    g_object_unref (file);
 
     /* We get again the tag from the file to keep also unused data (by EasyTAG), then
      * we replace the changed data */
-    if ( (id3_tag = ID3Tag_New()) == NULL )
+    if ((id3_tag = ID3Tag_New ()) == NULL)
+    {
+        g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_NOMEM, "%s",
+                     g_strerror (ENOMEM));
+        g_object_unref (file);
         return FALSE;
+    }
 
     basename_utf8 = g_path_get_basename(filename_utf8);
 
@@ -366,10 +365,15 @@ Id3tag_Write_File_v23Tag (ET_File *ETFile)
 
         genre_value = Id3tag_String_To_Genre(FileTag->genre);
         // If genre not defined don't write genre value between brackets! (priority problem noted with some tools)
-        if ((genre_value == ID3_INVALID_GENRE)||(FILE_WRITING_ID3V2_TEXT_ONLY_GENRE))
+        if ((genre_value == ID3_INVALID_GENRE)
+            || g_settings_get_boolean (MainSettings, "id3v2-text-only-genre"))
+        {
             genre_string_tmp = g_strdup_printf("%s",FileTag->genre);
+        }
         else
+        {
             genre_string_tmp = g_strdup_printf("(%d)",genre_value);
+        }
 
         Id3tag_Set_Field(id3_frame, ID3FN_TEXT, genre_string_tmp);
         g_free(genre_string_tmp);
@@ -564,7 +568,7 @@ Id3tag_Write_File_v23Tag (ET_File *ETFile)
         // With empty tag...
         ETFile_tmp->FileTagList  = g_list_append(NULL,FileTag_tmp);
         ETFile_tmp->FileTag      = ETFile_tmp->FileTagList;
-        Ape_Tag_Write_File_Tag(ETFile_tmp);
+        ape_tag_write_file_tag (ETFile_tmp, NULL);
         ET_Free_File_List_Item(ETFile_tmp);
     }
 
@@ -576,10 +580,10 @@ Id3tag_Write_File_v23Tag (ET_File *ETFile)
      * equal to 0, id3lib-3.7.12 doesn't update the tag */
     number_of_frames = ID3Tag_NumFrames(id3_tag);
 
-    /* If all fields (managed in the UI) are empty and option STRIP_TAG_WHEN_EMPTY_FIELDS
-     * is set to 1, we strip the ID3v1.x and ID3v2 tags. Else, write ID3v2 and/or ID3v1
-     */
-    if ( STRIP_TAG_WHEN_EMPTY_FIELDS
+    /* If all fields (managed in the UI) are empty and option id3-strip-empty
+     * is set to TRUE, we strip the ID3v1.x and ID3v2 tags. Else, write ID3v2
+     * and/or ID3v1. */
+    if (g_settings_get_boolean (MainSettings, "id3-strip-empty")
     && !has_title      && !has_artist   && !has_album_artist && !has_album       && !has_year      && !has_track
     && !has_genre      && !has_composer && !has_orig_artist && !has_copyright && !has_url
     && !has_encoded_by && !has_picture  && !has_comment     && !has_disc_number)//&& !has_song_len )
@@ -589,17 +593,32 @@ Id3tag_Write_File_v23Tag (ET_File *ETFile)
         /* Check error messages */
         if (error_strip_id3v1 == ID3E_NoError && error_strip_id3v2 == ID3E_NoError)
         {
-            Log_Print(LOG_OK,_("Removed tag of '%s'"),basename_utf8);
-        }else
+            g_debug (_("Removed tag of ‘%s’"), basename_utf8);
+        }
+        else
         {
             if (error_strip_id3v1 != ID3E_NoError)
-                Log_Print(LOG_ERROR,_("Error while removing ID3v1 tag of '%s' (%s)"),basename_utf8,Id3tag_Get_Error_Message(error_strip_id3v1));
+            {
+                g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
+                             _("Error while removing ID3v1 tag of ‘%s’: %s"),
+                             basename_utf8,
+                             Id3tag_Get_Error_Message (error_strip_id3v1));
+            }
+
             if (error_strip_id3v2 != ID3E_NoError)
-                Log_Print(LOG_ERROR,_("Error while removing ID3v2 tag of '%s' (%s)"),basename_utf8,Id3tag_Get_Error_Message(error_strip_id3v2));
-            error++;
+            {
+                g_clear_error (error);
+                g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
+                             _("Error while removing ID3v2 tag of ‘%s’: %s"),
+                             basename_utf8,
+                             Id3tag_Get_Error_Message (error_strip_id3v2));
+            }
+
+            success = FALSE;
         }
 
-    }else
+    }
+    else
     {
         /* It's better to remove the id3v1 tag before, to synchronize it with the
          * id3v2 tag (else id3lib doesn't do it correctly)
@@ -609,14 +628,19 @@ Id3tag_Write_File_v23Tag (ET_File *ETFile)
         /*
          * ID3v2 tag
          */
-        if (FILE_WRITING_ID3V2_WRITE_TAG && number_of_frames!=0)
+        if (g_settings_get_boolean (MainSettings, "id3v2-enabled")
+            && number_of_frames != 0)
         {
             error_update_id3v2 = ID3Tag_UpdateByTagType(id3_tag,ID3TT_ID3V2);
             if (error_update_id3v2 != ID3E_NoError)
             {
-                Log_Print(LOG_ERROR,_("Error while updating ID3v2 tag of '%s' (%s)"),basename_utf8,Id3tag_Get_Error_Message(error_update_id3v2));
-                error++;
-            }else
+                g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
+                             _("Error while updating ID3v2 tag of ‘%s’: %s"),
+                             basename_utf8,
+                             Id3tag_Get_Error_Message (error_update_id3v2));
+                success = FALSE;
+            }
+            else
             {
                 /* See known problem on the top : [ 1016290 ] Unicode16 writing bug.
                  * When we write the tag in Unicode, we try to check if it was correctly
@@ -624,19 +648,18 @@ Id3tag_Write_File_v23Tag (ET_File *ETFile)
                  * with the previous one. We check up to find an error (as only some
                  * characters are affected).
                  * If the patch to id3lib was applied to fix the problem (tested
-                 * by Id3tag_Check_If_Id3lib_Is_Bugged) we didn't make the following
+                 * by id3tag_check_if_id3lib_is_buggy) we didn't make the following
                  * test => OK */
                 if (flag_id3lib_bugged
-                && ( FILE_WRITING_ID3V2_USE_UNICODE_CHARACTER_SET ))
+                    && g_settings_get_boolean (MainSettings,
+                                               "id3v2-enable-unicode"))
                 {
                     File_Tag  *FileTag_tmp = ET_File_Tag_Item_New();
-                    if (Id3tag_Read_File_Tag(filename,FileTag_tmp) == TRUE
+                    if (id3tag_read_file_tag (file, FileTag_tmp, NULL) == TRUE
                     &&  ET_Detect_Changes_Of_File_Tag(FileTag,FileTag_tmp) == TRUE)
                     {
                         GtkWidget *msgdialog;
 
-                        //Log_Print(LOG_ERROR,msg);
-
                         msgdialog = gtk_message_dialog_new(GTK_WINDOW(MainWindow),
                                                            GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
                                                            GTK_MESSAGE_ERROR,
@@ -660,13 +683,17 @@ Id3tag_Write_File_v23Tag (ET_File *ETFile)
                 }
 
             }
-        }else
+        }
+        else
         {
             error_strip_id3v2 = ID3Tag_Strip(id3_tag,ID3TT_ID3V2);
             if (error_strip_id3v2 != ID3E_NoError)
             {
-                Log_Print(LOG_ERROR,_("Error while removing ID3v2 tag of '%s' (%s)"),basename_utf8,Id3tag_Get_Error_Message(error_strip_id3v2));
-                error++;
+                g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
+                             _("Error while removing ID3v2 tag of ‘%s’: %s"),
+                             basename_utf8,
+                             Id3tag_Get_Error_Message (error_strip_id3v2));
+                success = FALSE;
             }
         }
 
@@ -675,7 +702,8 @@ Id3tag_Write_File_v23Tag (ET_File *ETFile)
          * Must be set after ID3v2 or ID3Tag_UpdateByTagType cause damage to unicode strings
          */
         // id3lib writes incorrectly the ID3v2 tag if unicode used when writing ID3v1 tag
-        if (FILE_WRITING_ID3V1_WRITE_TAG && number_of_frames!=0)
+        if (g_settings_get_boolean (MainSettings, "id3v1-enabled")
+            && number_of_frames != 0)
         {
             // By default id3lib converts id3tag to ISO-8859-1 (single byte character set)
             // Note : converting UTF-16 string (two bytes character set) to ISO-8859-1
@@ -685,31 +713,34 @@ Id3tag_Write_File_v23Tag (ET_File *ETFile)
             error_update_id3v1 = ID3Tag_UpdateByTagType(id3_tag,ID3TT_ID3V1);
             if (error_update_id3v1 != ID3E_NoError)
             {
-                Log_Print(LOG_ERROR,_("Error while updating ID3v1 tag of '%s' (%s)"),basename_utf8,Id3tag_Get_Error_Message(error_update_id3v1));
-                error++;
+                g_clear_error (error);
+                g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
+                             _("Error while updating ID3v1 tag of ‘%s’: %s"),
+                             basename_utf8,
+                             Id3tag_Get_Error_Message (error_update_id3v1));
+                success = FALSE;
             }
         }else
         {
             error_strip_id3v1 = ID3Tag_Strip(id3_tag,ID3TT_ID3V1);
             if (error_strip_id3v1 != ID3E_NoError)
             {
-                Log_Print(LOG_ERROR,_("Error while removing ID3v1 tag of '%s' (%s)"),basename_utf8,Id3tag_Get_Error_Message(error_strip_id3v1));
-                error++;
+                g_clear_error (error);
+                g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
+                             _("Error while removing ID3v1 tag of ‘%s’: %s"),
+                             basename_utf8,
+                             Id3tag_Get_Error_Message (error_strip_id3v1));
+                success = FALSE;
             }
         }
-
-        if (error == 0)
-            Log_Print(LOG_OK,_("Updated tag of '%s'"),basename_utf8);
-
     }
 
     /* Free allocated data */
     ID3Tag_Delete(id3_tag);
+    g_object_unref (file);
     g_free(basename_utf8);
 
-    if (error) return FALSE;
-    else       return TRUE;
-
+    return success;
 }
 
 
@@ -905,7 +936,8 @@ gchar *Id3tag_Get_Field (const ID3Frame *id3_frame, ID3_FieldID id3_fieldid)
         // Data of the field must be a TEXT (ID3FTY_TEXTSTRING)
         if (ID3Field_GetType(id3_field) != ID3FTY_TEXTSTRING)
         {
-            Log_Print(LOG_ERROR,"Id3tag_Get_Field() must be used only for fields containing text.\n");
+            g_critical ("%s",
+                        "Id3tag_Get_Field() must be used only for fields containing text");
             return NULL;
         }
 
@@ -922,22 +954,44 @@ gchar *Id3tag_Get_Field (const ID3Frame *id3_frame, ID3_FieldID id3_fieldid)
 
         if (enc != ID3TE_UTF16 && enc != ID3TE_UTF8) // Encoding is ISO-8859-1?
         {
-            if (USE_NON_STANDARD_ID3_READING_CHARACTER_SET) // Override with another character set?
+            /* Override with another character set? */
+            if (g_settings_get_boolean (MainSettings,
+                                        "id3-override-read-encoding"))
             {
-                // Encoding set by user to ???.
-                if ( strcmp(FILE_READING_ID3V1V2_CHARACTER_SET,"ISO-8859-1") == 0 )
+                /* Encoding set by user to ???. */
+                gint id3v1v2_charset;
+                const gchar *charset;
+
+                id3v1v2_charset = g_settings_get_enum (MainSettings,
+                                                       "id3v1v2-charset");
+                charset = et_charset_get_name_from_index (id3v1v2_charset);
+                if (strcmp (charset, "ISO-8859-1") == 0)
                 {
                     enc = ID3TE_ISO8859_1;
-                }else if ( strcmp(FILE_READING_ID3V1V2_CHARACTER_SET,"UTF-16BE") == 0
-                      ||   strcmp(FILE_READING_ID3V1V2_CHARACTER_SET,"UTF-16LE") == 0 )
+                }
+                else if (strcmp (charset, "UTF-16BE") == 0
+                         || strcmp (charset, "UTF-16LE") == 0)
                 {
                     enc = ID3TE_UTF16;
-                }else if ( strcmp(FILE_READING_ID3V1V2_CHARACTER_SET,"UTF-8") == 0 )
+                }
+                else if (strcmp (charset, "UTF-8") == 0)
                 {
                     enc = ID3TE_UTF8;
-                }else
+                }
+                else if (ID3Field_IsEncodable (id3_field))
                 {
-                    enc = 9999;
+                    gint id3v1v2_charset;
+                    const gchar *charset;
+
+                    string = g_malloc0 (ID3V2_MAX_STRING_LEN + 1);
+                    num_chars = ID3Field_GetASCII_1 (id3_field, string,
+                                                     ID3V2_MAX_STRING_LEN, 0);
+                    id3v1v2_charset = g_settings_get_enum (MainSettings,
+                                                           "id3v1v2-charset");
+                    charset = et_charset_get_name_from_index (id3v1v2_charset);
+                    string1 = convert_string (string, charset, "UTF-8", FALSE);
+                    /* Override to a non-standard character encoding. */
+                    goto out;
                 }
             }
         }
@@ -958,7 +1012,6 @@ gchar *Id3tag_Get_Field (const ID3Frame *id3_frame, ID3_FieldID id3_fieldid)
                 break;
 
             case ID3TE_UTF8: // Shouldn't work with id3lib 3.8.3 (supports only ID3v2.3, not ID3v2.4)
-                // For UTF-8, this part do the same thing that enc=9999
                 string = g_malloc0(sizeof(char)*ID3V2_MAX_STRING_LEN+1);
                 num_chars = ID3Field_GetASCII_1(id3_field,string,ID3V2_MAX_STRING_LEN,0);
                 //string1 = convert_string(string,"UTF-8","UTF-8",FALSE); // Nothing to do
@@ -975,12 +1028,6 @@ gchar *Id3tag_Get_Field (const ID3Frame *id3_frame, ID3_FieldID id3_fieldid)
                 string1 = convert_string_1(string,num_chars,"UTF-16BE","UTF-8",FALSE);
                 break;
 
-            case 9999:
-                string = g_malloc0(sizeof(char)*ID3V2_MAX_STRING_LEN+1);
-                num_chars = ID3Field_GetASCII_1(id3_field,string,ID3V2_MAX_STRING_LEN,0);
-                string1 = convert_string(string,FILE_READING_ID3V1V2_CHARACTER_SET,"UTF-8",FALSE);
-                break;
-
             default:
                 string = g_malloc0(sizeof(char)*4*ID3V2_MAX_STRING_LEN+1);
                 num_chars = ID3Field_GetASCII_1(id3_field,string,ID3V2_MAX_STRING_LEN,0);
@@ -990,19 +1037,21 @@ gchar *Id3tag_Get_Field (const ID3Frame *id3_frame, ID3_FieldID id3_fieldid)
     }
     //g_print(">>ID:%d >'%s' (string1:'%s') (num_chars:%d)\n",ID3Field_GetINT(id3_field_encoding),string,string1,num_chars);
 
+out:
     // In case the conversion fails, try 'filename_to_display' character fix...
     if (num_chars && !string1)
     {
         gchar *escaped_str = g_strescape(string, NULL);
-        Log_Print(LOG_OK,"Id3tag_Get_Field: Trying to fix string '%s'…",escaped_str);
+        g_debug ("Id3tag_Get_Field: Trying to fix string '%s'…", escaped_str);
         g_free(escaped_str);
 
         string1 = filename_to_display(string);
 
-        if (string1)
-            Log_Print(LOG_OK,"OK");
-        else
-            Log_Print(LOG_ERROR,"KO");
+        /* TODO: Set a GError instead. */
+        if (!string1)
+        {
+            g_warning ("%s", "Error converting ID3 tag field encoding");
+        }
     }
     g_free(string);
 
@@ -1047,15 +1096,15 @@ Id3tag_Set_Field (const ID3Frame *id3_frame,
         // Data of the field must be a TEXT (ID3FTY_TEXTSTRING)
         if (ID3Field_GetType(id3_field) != ID3FTY_TEXTSTRING)
         {
-            Log_Print(LOG_ERROR,"Id3tag_Set_Field() must be used only for fields containing text.");
+            g_critical ("%s",
+                        "Id3tag_Set_Field() must be used only for fields containing text");
             return ID3TE_NONE;
         }
 
-        /*
-         * We prioritize the rule selected in options. If the encoding of the
+         /* We prioritize the rule selected in options. If the encoding of the
          * field is ISO-8859-1, we can write it to another single byte encoding.
          */
-        if (FILE_WRITING_ID3V2_USE_UNICODE_CHARACTER_SET)
+        if (g_settings_get_boolean (MainSettings, "id3v2-enable-unicode"))
         {
             // Check if we can write the tag using ISO-8859-1 instead of UTF-16...
             if ( (string_converted = g_convert(string, strlen(string), "ISO-8859-1",
@@ -1068,23 +1117,33 @@ Id3tag_Set_Field (const ID3Frame *id3_frame,
                 // Force to UTF-16 as UTF-8 isn't supported
                 enc = ID3TE_UTF16;
             }
-        } else
+        }
+        else
         {
-            // Other encoding selected
-            // Encoding set by user to ???.
-            if ( strcmp(FILE_WRITING_ID3V2_NO_UNICODE_CHARACTER_SET,"ISO-8859-1") == 0 )
+            gint id3v2_charset;
+            const gchar *charset;
+
+            id3v2_charset = g_settings_get_enum (MainSettings,
+                                                 "id3v2-no-unicode-charset");
+            charset = et_charset_get_name_from_index (id3v2_charset);
+
+            /* Other encoding selected. Encoding set by user to ???. */
+            if (strcmp (charset, "ISO-8859-1") == 0)
             {
                 enc = ID3TE_ISO8859_1;
-            }else if ( strcmp(FILE_WRITING_ID3V2_NO_UNICODE_CHARACTER_SET,"UTF-16BE") == 0
-                  ||   strcmp(FILE_WRITING_ID3V2_NO_UNICODE_CHARACTER_SET,"UTF-16LE") == 0 )
+            }
+            else if (strcmp (charset, "UTF-16BE") == 0
+                     || strcmp (charset, "UTF-16LE") == 0)
             {
                 enc = ID3TE_UTF16;
-            }else if ( strcmp(FILE_WRITING_ID3V2_NO_UNICODE_CHARACTER_SET,"UTF-8") == 0 )
+            }
+            else if (strcmp (charset, "UTF-8") == 0)
             {
                 enc = ID3TE_UTF8;
-            }else
+            }
+            else if (ID3Field_IsEncodable (id3_field))
             {
-                enc = 9999;
+                goto override;
             }
         }
 
@@ -1148,10 +1207,20 @@ Id3tag_Set_Field (const ID3Frame *id3_frame,
                 return ID3TE_UTF16;
                 break;
 
-            case 9999:
+override:
             default:
-                //string_converted = convert_string(string,"UTF-8",FILE_WRITING_ID3V2_NO_UNICODE_CHARACTER_SET,TRUE);
-                string_converted = Id3tag_Rules_For_ISO_Fields(string,"UTF-8",FILE_WRITING_ID3V2_NO_UNICODE_CHARACTER_SET);
+            {
+                //string_converted = convert_string(string,"UTF-8",charset,TRUE);
+                gint id3v2_charset;
+                const gchar *charset;
+
+                id3v2_charset = g_settings_get_enum (MainSettings,
+                                                     "id3v2-no-unicode-charset");
+                charset = et_charset_get_name_from_index (id3v2_charset);
+
+                string_converted = Id3tag_Rules_For_ISO_Fields (string,
+                                                                "UTF-8",
+                                                                charset);
                 ID3Field_SetEncoding(id3_field,ID3TE_ISO8859_1);
                 ID3Field_SetASCII(id3_field,string_converted);
                 g_free(string_converted);
@@ -1162,6 +1231,7 @@ Id3tag_Set_Field (const ID3Frame *id3_frame,
 
                 return ID3TE_NONE;
                 break;
+            }
         }
     }
 
@@ -1214,13 +1284,22 @@ void Id3tag_Prepare_ID3v1 (ID3Tag *id3_tag)
             if ( (id3_field_text != NULL)
             &&   (enc != ID3TE_ISO8859_1) )
             {
-                // Read UTF-16 frame
+                gint id3v1_charset;
+                const gchar *charset;
+
+                /* Read UTF-16 frame. */
                 string = g_malloc0(sizeof(unicode_t)*ID3V2_MAX_STRING_LEN+1);
                 num_chars = ID3Field_GetUNICODE_1(id3_field_text,(unicode_t *)string,ID3V2_MAX_STRING_LEN,0);
                 // "convert_string_1" as we need to pass length for UTF-16
                 string1 = convert_string_1(string,num_chars,"UTF-16BE","UTF-8",FALSE);
 
-                string_converted = Id3tag_Rules_For_ISO_Fields(string1,"UTF-8",FILE_WRITING_ID3V1_CHARACTER_SET);
+                id3v1_charset = g_settings_get_enum (MainSettings,
+                                                     "id3v1-charset");
+                charset = et_charset_get_name_from_index (id3v1_charset);
+
+                string_converted = Id3tag_Rules_For_ISO_Fields (string1,
+                                                                "UTF-8",
+                                                                charset);
 
                 if (string_converted)
                 {
@@ -1242,37 +1321,54 @@ void Id3tag_Prepare_ID3v1 (ID3Tag *id3_tag)
  * We use specials functionalities of iconv : //TRANSLIT and //IGNORE (the last
  * one doesn't work on my system) to force conversion to the target encoding.
  */
-gchar *Id3tag_Rules_For_ISO_Fields (const gchar *string, const gchar *from_codeset, const gchar *to_codeset)
+gchar *
+Id3tag_Rules_For_ISO_Fields (const gchar *string,
+                             const gchar *from_codeset,
+                             const gchar *to_codeset)
 {
     gchar *string_converted = NULL;
+    EtTagEncoding iconv_option;
 
     g_return_val_if_fail (string != NULL && from_codeset != NULL
                           && to_codeset != NULL, NULL);
 
-    if (FILE_WRITING_ID3V1_ICONV_OPTIONS_NO)
-    {
-        string_converted = convert_string(string,from_codeset,to_codeset,TRUE);
+    iconv_option = g_settings_get_enum (MainSettings, "id3v1-encoding-option");
 
-    }else if (FILE_WRITING_ID3V1_ICONV_OPTIONS_TRANSLIT)
-    {
-        // iconv_open (3):
-        // When the string "//TRANSLIT" is appended to tocode, transliteration
-        // is activated. This means that when a character cannot be represented
-        // in the target character set, it can be approximated through one or
-        // several similarly looking characters.
-        gchar *to_enc = g_strconcat(to_codeset, "//TRANSLIT", NULL);
-        string_converted = convert_string(string,from_codeset,to_enc,TRUE);
-        g_free(to_enc);
-
-    }else if (FILE_WRITING_ID3V1_ICONV_OPTIONS_IGNORE)
+    switch (iconv_option)
     {
-        // iconv_open (3):
-        // When the string "//IGNORE" is appended to tocode, characters that
-        // cannot be represented in the target character set will be silently
-        // discarded.
-        gchar *to_enc = g_strconcat(to_codeset, "//IGNORE", NULL);
-        string_converted = convert_string(string,from_codeset,to_enc,TRUE);
-        g_free(to_enc);
+        default:
+        case ET_TAG_ENCODING_NONE:
+            string_converted = convert_string (string, from_codeset,
+                                               to_codeset, TRUE);
+            break;
+        case ET_TAG_ENCODING_TRANSLITERATE:
+        {
+            /* iconv_open (3):
+             * When the string "//TRANSLIT" is appended to tocode,
+             * transliteration is activated. This means that when a character
+             * cannot be represented in the target character set, it can be
+             * approximated through one or several similarly looking
+             * characters.
+             */
+            gchar *to_enc = g_strconcat (to_codeset, "//TRANSLIT", NULL);
+            string_converted = convert_string (string, from_codeset, to_enc,
+                                               TRUE);
+            g_free (to_enc);
+            break;
+        }
+        case ET_TAG_ENCODING_IGNORE:
+        {
+            /* iconv_open (3):
+             * When the string "//IGNORE" is appended to tocode, characters
+             * that cannot be represented in the target character set will be
+             * silently discarded.
+             */
+            gchar *to_enc = g_strconcat (to_codeset, "//IGNORE", NULL);
+            string_converted = convert_string (string, from_codeset, to_enc,
+                                               TRUE);
+            g_free (to_enc);
+            break;
+        }
     }
 
     return string_converted;
@@ -1331,12 +1427,12 @@ et_id3tag_check_if_file_is_corrupted (GFile *file, GError **error)
  * Function to detect if id3lib isn't bugged when writting to Unicode
  * Returns TRUE if bugged, else FALSE
  */
-gboolean Id3tag_Check_If_Id3lib_Is_Bugged (void)
+static gboolean
+id3tag_check_if_id3lib_is_buggy (GError **error)
 {
     GFile *file;
     GFileIOStream *iostream = NULL;
     GOutputStream *ostream = NULL;
-    GError *error = NULL;
     guchar tmp[16] = {0xFF, 0xFB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
     ID3Tag *id3_tag = NULL;
@@ -1347,21 +1443,18 @@ gboolean Id3tag_Check_If_Id3lib_Is_Bugged (void)
     gsize bytes_written;
     const gchar test_str[] = "\xe5\x92\xbb";
 
+    g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
     /* Create a temporary file. */
-    file = g_file_new_tmp ("easytagXXXXXX.mp3", &iostream, &error);
+    file = g_file_new_tmp ("easytagXXXXXX.mp3", &iostream, error);
+
     if (!file)
     {
-        if (error)
-        {
-            Log_Print (LOG_ERROR,
-                       _("Error while creating temporary file: '%s'"),
-                       error->message);
-            g_clear_error (&error);
-        }
-        else
+        /* TODO: Investigate whether error can be unset in this case. */
+        if (!error)
         {
-            Log_Print (LOG_ERROR, "%s",
-                       _("Error while creating temporary file"));
+            g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_NOENT, "%s",
+                         _("Error while creating temporary file"));
         }
 
         return FALSE;
@@ -1369,36 +1462,29 @@ gboolean Id3tag_Check_If_Id3lib_Is_Bugged (void)
 
     /* Set data in the file. */
     ostream = g_io_stream_get_output_stream (G_IO_STREAM (iostream));
+
     if (!g_output_stream_write_all (G_OUTPUT_STREAM (ostream), tmp,
                                     sizeof (tmp), &bytes_written, NULL,
-                                    &error))
+                                    error))
     {
-        gchar *filename;
-        gchar *filename_utf8;
-
         g_debug ("Only %" G_GSIZE_FORMAT " bytes out of %" G_GSIZE_FORMAT
                  " bytes of data were written", bytes_written, sizeof (tmp));
 
-        filename = g_file_get_path (file);
-        filename_utf8 = filename_to_display (filename);
-        Log_Print (LOG_ERROR, _("Error while writing to file: '%s' (%s)"),
-                   filename_utf8, error->message);
-
-        g_free (filename);
-        g_free (filename_utf8);
-        g_clear_error (&error);
         g_object_unref (file);
-        g_output_stream_close (G_OUTPUT_STREAM (ostream), NULL, NULL);
+        g_object_unref (iostream);
 
         return FALSE;
     }
 
     g_output_stream_close (G_OUTPUT_STREAM (ostream), NULL, NULL);
-    g_object_unref (ostream);
+    g_object_unref (iostream);
 
-    // Save state of switches as we must force to Unicode before writting
-    use_unicode = FILE_WRITING_ID3V2_USE_UNICODE_CHARACTER_SET;
-    FILE_WRITING_ID3V2_USE_UNICODE_CHARACTER_SET = TRUE;
+    /* Save state of switches as we must force to Unicode before writing.
+     * FIXME! */
+    g_settings_delay (MainSettings);
+    use_unicode = g_settings_get_boolean (MainSettings,
+                                          "id3v2-enable-unicode");
+    g_settings_set_boolean (MainSettings, "id3v2-enable-unicode", TRUE);
 
     id3_tag = ID3Tag_New();
     path = g_file_get_path (file);
@@ -1415,8 +1501,8 @@ gboolean Id3tag_Check_If_Id3lib_Is_Bugged (void)
     ID3Tag_UpdateByTagType(id3_tag,ID3TT_ID3V2);
     ID3Tag_Delete(id3_tag);
 
-    FILE_WRITING_ID3V2_USE_UNICODE_CHARACTER_SET = use_unicode;
-
+    g_settings_set_boolean (MainSettings, "id3v2-enable-unicode", use_unicode);
+    g_settings_revert (MainSettings);
 
     id3_tag = ID3Tag_New();
     ID3Tag_Link_1 (id3_tag, path);
@@ -1440,6 +1526,8 @@ gboolean Id3tag_Check_If_Id3lib_Is_Bugged (void)
     }
 
     g_free (result);
+    g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, "%s",
+                 "Buggy id3lib detected");
     return FALSE;
 }
 
@@ -1449,15 +1537,21 @@ gboolean Id3tag_Check_If_Id3lib_Is_Bugged (void)
 /*
  * Write tag according the version selected by the user
  */
-gboolean Id3tag_Write_File_Tag (ET_File *ETFile)
+gboolean
+id3tag_write_file_tag (const ET_File *ETFile,
+                       GError **error)
 {
 #ifdef ENABLE_ID3LIB
-    if (FILE_WRITING_ID3V2_VERSION_4)
-        return Id3tag_Write_File_v24Tag(ETFile);
+    if (g_settings_get_boolean (MainSettings, "id3v2-version-4"))
+    {
+        return id3tag_write_file_v24tag (ETFile, error);
+    }
     else
-        return Id3tag_Write_File_v23Tag(ETFile);
+    {
+        return id3tag_write_file_v23tag (ETFile, error);
+    }
 #else
-    return Id3tag_Write_File_v24Tag(ETFile);
+    return id3tag_write_file_v24tag (ETFile, error);
 #endif /* !ENABLE_ID3LIB */
 }
 
@@ -1469,7 +1563,8 @@ gboolean Id3tag_Write_File_Tag (ET_File *ETFile)
  * Returns the corresponding genre value of the input string (for ID3v1.x),
  * else returns 0xFF (unknown genre, but not invalid).
  */
-guchar Id3tag_String_To_Genre (gchar *genre)
+guchar
+Id3tag_String_To_Genre (const gchar *genre)
 {
     guint i;
 
@@ -1490,7 +1585,8 @@ guchar Id3tag_String_To_Genre (gchar *genre)
  *    - undefined/unknown (GENRE_MAX+1 to ID3_INVALID_GENRE-1)
  *    - invalid (>ID3_INVALID_GENRE)
  */
-gchar *Id3tag_Genre_To_String (unsigned char genre_code)
+const gchar *
+Id3tag_Genre_To_String (unsigned char genre_code)
 {
     if (genre_code>=ID3_INVALID_GENRE)    /* empty */
         return "";
diff --git a/src/tags/id3_tag.h b/src/tags/id3_tag.h
new file mode 100644
index 0000000..fd72dcc
--- /dev/null
+++ b/src/tags/id3_tag.h
@@ -0,0 +1,41 @@
+/* EasyTAG - Tag editor for audio files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ * Copyright (C) 2001-2003  Jerome Couderc <easytag at gmail.com>
+ *
+ * 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
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef ET_ID3TAG_H_
+#define ET_ID3TAG_H_
+
+#include <glib.h>
+#include "et_core.h"
+
+G_BEGIN_DECLS
+
+#define ID3_INVALID_GENRE 255
+
+gboolean id3tag_read_file_tag (GFile *file, File_Tag *FileTag, GError **error);
+gboolean id3tag_write_file_v24tag (const ET_File *ETFile, GError **error);
+gboolean id3tag_write_file_tag (const ET_File *ETFile, GError **error);
+
+const gchar * Id3tag_Genre_To_String (unsigned char genre_code);
+guchar Id3tag_String_To_Genre (const gchar *genre);
+
+gchar *et_id3tag_get_tpos_from_file_tag (const File_Tag *file_tag);
+
+G_END_DECLS
+
+#endif /* ET_ID3TAG_H_ */
diff --git a/src/id3lib/c_wrapper.cpp b/src/tags/id3lib/c_wrapper.cpp
similarity index 100%
rename from src/id3lib/c_wrapper.cpp
rename to src/tags/id3lib/c_wrapper.cpp
diff --git a/src/id3lib/id3_bugfix.h b/src/tags/id3lib/id3_bugfix.h
similarity index 100%
rename from src/id3lib/id3_bugfix.h
rename to src/tags/id3lib/id3_bugfix.h
diff --git a/src/id3lib/patch_id3lib_3.8.3_UTF16_writing_bug.diff b/src/tags/id3lib/patch_id3lib_3.8.3_UTF16_writing_bug.diff
similarity index 100%
rename from src/id3lib/patch_id3lib_3.8.3_UTF16_writing_bug.diff
rename to src/tags/id3lib/patch_id3lib_3.8.3_UTF16_writing_bug.diff
diff --git a/src/id3v24_tag.c b/src/tags/id3v24_tag.c
similarity index 78%
rename from src/id3v24_tag.c
rename to src/tags/id3v24_tag.c
index a25167c..76ab6f2 100644
--- a/src/id3v24_tag.c
+++ b/src/tags/id3v24_tag.c
@@ -1,22 +1,21 @@
-/* id3v24_tag.c - 2007/05/25 */
-/*
- *  EasyTAG - Tag editor for MP3 and Ogg Vorbis files
- *  Copyright (C) 2001-2003  Jerome Couderc <easytag at gmail.com>
- *  Copyright (C) 2006-2007  Alexey Illarionov <littlesavage at rambler.ru>
+/* EasyTAG - Tag editor for audio files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ * Copyright (C) 2001-2003  Jerome Couderc <easytag at gmail.com>
+ * Copyright (C) 2006-2007  Alexey Illarionov <littlesavage at rambler.ru>
  *
- *  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
- *  (at your option) any later version.
+ * 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
+ * (at your option) any later version.
  *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
  *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
 #include <config.h>
@@ -79,8 +78,8 @@ static void   Id3tag_delete_txxframes   (struct id3_tag *tag, const gchar *param
 static struct id3_frame *Id3tag_find_and_create_frame    (struct id3_tag *tag, const gchar *name);
 static int    id3taglib_set_field       (struct id3_frame *frame, const gchar *str, enum id3_field_type type, int num, int clear, int id3v1);
 static int    etag_set_tags             (const gchar *str, const char *frame_name, enum id3_field_type field_type, struct id3_tag *v1tag, struct id3_tag *v2tag, gboolean *strip_tags);
-static int etag_write_tags (const gchar *filename, struct id3_tag const *v1tag,
-                            struct id3_tag const *v2tag, gboolean strip_tags);
+static gboolean etag_write_tags (const gchar *filename, struct id3_tag const *v1tag,
+                            struct id3_tag const *v2tag, gboolean strip_tags, GError **error);
 
 /*************
  * Functions *
@@ -91,9 +90,15 @@ static int etag_write_tags (const gchar *filename, struct id3_tag const *v1tag,
  * Returns TRUE on success, else FALSE.
  * If a tag entry exists (ex: title), we allocate memory, else value stays to NULL
  */
-gboolean Id3tag_Read_File_Tag (const gchar *filename, File_Tag *FileTag)
+gboolean
+id3tag_read_file_tag (GFile *gfile,
+                      File_Tag *FileTag,
+                      GError **error)
 {
-    int tmpfile;
+    GInputStream *istream;
+    gsize bytes_read;
+    GSeekable *seekable;
+    gchar *filename;
     struct id3_file *file;
     struct id3_tag *tag;
     struct id3_frame *frame;
@@ -104,58 +109,64 @@ gboolean Id3tag_Read_File_Tag (const gchar *filename, File_Tag *FileTag)
     unsigned tmpupdate, update = 0;
     long tagsize;
 
+    g_return_val_if_fail (gfile != NULL && FileTag != NULL, FALSE);
+    g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
-    g_return_val_if_fail (filename != NULL && FileTag != NULL, FALSE);
+    istream = G_INPUT_STREAM (g_file_read (gfile, NULL, error));
 
-    if ( (tmpfile=open(filename,O_RDONLY)) < 0 )
+    if (!istream)
     {
-        gchar *filename_utf8 = filename_to_display(filename);
-        Log_Print (LOG_ERROR, _("Error while opening file: '%s' (%s)."),
-                   filename_utf8, g_strerror (errno));
-        g_free(filename_utf8);
         return FALSE;
     }
 
-    string1 = g_try_malloc(ID3_TAG_QUERYSIZE);
-    if (string1==NULL)
+    string1 = g_malloc0 (ID3_TAG_QUERYSIZE);
+
+    /* Check if the file has an ID3v2 tag or/and an ID3v1 tags.
+     * 1) ID3v2 tag. */
+    if (!g_input_stream_read_all (istream, string1, ID3_TAG_QUERYSIZE,
+                                  &bytes_read, NULL, error))
     {
-        close(tmpfile);
+        g_object_unref (istream);
+        g_free (string1);
         return FALSE;
     }
-
-    // Check if the file has an ID3v2 tag or/and an ID3v1 tags
-    // 1) ID3v2 tag
-    if (read(tmpfile, string1, ID3_TAG_QUERYSIZE) != ID3_TAG_QUERYSIZE)
+    else if (bytes_read != ID3_TAG_QUERYSIZE)
     {
-        close(tmpfile);
+        g_object_unref (istream);
         g_free (string1);
+        g_set_error (error, G_IO_ERROR, G_IO_ERROR_PARTIAL_INPUT, "%s",
+                     _("Error reading tags from file"));
         return FALSE;
     }
 
     if ((tagsize = id3_tag_query((id3_byte_t const *)string1, ID3_TAG_QUERYSIZE)) <= ID3_TAG_QUERYSIZE)
     {
-        // ID3v2 tag not found!
-        update = FILE_WRITING_ID3V2_WRITE_TAG;
+        /* ID3v2 tag not found! */
+        update = g_settings_get_boolean (MainSettings, "id3v2-enabled");
     }else
     {
         /* ID3v2 tag found */
-        if (FILE_WRITING_ID3V2_WRITE_TAG == 0)
+        if (!g_settings_get_boolean (MainSettings, "id3v2-enabled"))
         {
-            // To delete the tag
+            /* To delete the tag. */
             update = 1;
         }else
         {
             /* Determine version if user want to upgrade old tags */
-            if (CONVERT_OLD_ID3V2_TAG_VERSION
+            if (g_settings_get_boolean (MainSettings, "id3v2-convert-old")
             && (string1 = g_realloc (string1, tagsize))
-            && (read(tmpfile, &string1[ID3_TAG_QUERYSIZE], tagsize - ID3_TAG_QUERYSIZE) == tagsize - ID3_TAG_QUERYSIZE)
+                && g_input_stream_read_all (istream,
+                                            &string1[ID3_TAG_QUERYSIZE],
+                                            tagsize - ID3_TAG_QUERYSIZE,
+                                            &bytes_read, NULL, error)
+                && bytes_read == tagsize - ID3_TAG_QUERYSIZE
             && (tag = id3_tag_parse((id3_byte_t const *)string1, tagsize))
                )
             {
                 unsigned version = id3_tag_version(tag);
 #ifdef ENABLE_ID3LIB
                 /* Besides upgrade old tags we will downgrade id3v2.4 to id3v2.3 */
-                if ( FILE_WRITING_ID3V2_VERSION_4 )
+                if (g_settings_get_boolean (MainSettings, "id3v2-version-4"))
                 {
                     update = (ID3_TAG_VERSION_MAJOR(version) < 4);
                 }else
@@ -171,34 +182,56 @@ gboolean Id3tag_Read_File_Tag (const gchar *filename, File_Tag *FileTag)
         }
     }
 
-    // 2) ID3v1 tag
-    if ( (lseek(tmpfile,-128, SEEK_END) >= 0) // Go to the beginning of ID3v1 tag
+    /* 2) ID3v1 tag. */
+    seekable = G_SEEKABLE (istream);
+
+    if (!g_seekable_can_seek (seekable))
+    {
+        g_object_unref (istream);
+        g_free (string1);
+        g_set_error (error, G_IO_ERROR, G_IO_ERROR_PARTIAL_INPUT, "%s",
+                     _("Error reading tags from file"));
+        return FALSE;
+    }
+
+    /* Go to the beginning of ID3v1 tag. */
+    if (g_seekable_seek (seekable, -128, G_SEEK_END, NULL, error)
     && (string1)
-    && (read(tmpfile, string1, 3) == 3)
+        && g_input_stream_read_all (istream, string1, 3, &bytes_read, NULL,
+                                    NULL /* Ignore errors. */)
+        && bytes_read == 3
     && (string1[0] == 'T')
     && (string1[1] == 'A')
     && (string1[2] == 'G')
        )
     {
-        // ID3v1 tag found!
-        if (!FILE_WRITING_ID3V1_WRITE_TAG)
+        /* ID3v1 tag found! */
+        if (!g_settings_get_boolean (MainSettings, "id3v1-enabled"))
+        {
             update = 1;
+        }
     }else
     {
-        // ID3v1 tag not found!
-        if (FILE_WRITING_ID3V1_WRITE_TAG)
+        /* ID3v1 tag not found! */
+        if (g_settings_get_boolean (MainSettings, "id3v1-enabled"))
+        {
             update = 1;
+        }
     }
 
-    g_free(string1);
+    g_free (string1);
+    g_object_unref (istream);
+
+    filename = g_file_get_path (gfile);
 
-    /* Takes ownership of the file descriptor on success. */
-    if ((file = id3_file_fdopen(tmpfile, ID3_FILE_MODE_READONLY)) == NULL)
+    if ((file = id3_file_open (filename, ID3_FILE_MODE_READONLY)) == NULL)
     {
-        close(tmpfile);
+        g_free (filename);
         return FALSE;
     }
 
+    g_free (filename);
+
     if ( ((tag = id3_file_tag(file)) == NULL)
     ||   (tag->nframes == 0))
     {
@@ -547,7 +580,7 @@ etag_guess_byteorder(const id3_ucs4_t *ustr, gchar **ret) /* XXX */
     unsigned i, len;
     gunichar *gstr;
     gchar *tmp, *str, *str2;
-    const gchar *charset;
+    gchar *charset;
 
     if (!ustr || !*ustr)
     {
@@ -556,14 +589,27 @@ etag_guess_byteorder(const id3_ucs4_t *ustr, gchar **ret) /* XXX */
         return 0;
     }
 
-    if (USE_NON_STANDARD_ID3_READING_CHARACTER_SET)
-        charset = FILE_READING_ID3V1V2_CHARACTER_SET;
-    else if (!FILE_WRITING_ID3V2_USE_UNICODE_CHARACTER_SET) /* XXX */
-        charset = FILE_WRITING_ID3V2_NO_UNICODE_CHARACTER_SET;
-    else g_get_charset(&charset);
+    if (g_settings_get_boolean (MainSettings, "id3-override-read-encoding"))
+    {
+        charset = g_settings_get_string (MainSettings,
+                                         "id3v1v2-charset");
+    }
+    else if (!g_settings_get_boolean (MainSettings, "id3v2-enable-unicode"))
+    {
+        charset = g_settings_get_string (MainSettings,
+                                         "id3v2-no-unicode-charset"); /* XXX */
+    }
+    else
+    {
+        const gchar *tmp;
+        g_get_charset (&tmp);
+        charset = g_strdup (tmp);
+    }
 
     if (!charset)
-        charset = "ISO-8859-1";
+    {
+        charset = g_strdup ("ISO-8859-1");
+    }
 
     tmp = (gchar *)id3_ucs4_utf8duplicate(ustr);
     str = g_convert(tmp, -1, charset, "UTF-8", NULL, NULL, NULL);
@@ -574,6 +620,7 @@ etag_guess_byteorder(const id3_ucs4_t *ustr, gchar **ret) /* XXX */
             *ret = tmp;
         else
             free (tmp);
+        g_free (charset);
         return 0; /* byteorder not changed */
     }
 
@@ -586,6 +633,7 @@ etag_guess_byteorder(const id3_ucs4_t *ustr, gchar **ret) /* XXX */
             *ret = tmp;
         else
             free(tmp);
+        g_free (charset);
         return 0;
     }
 
@@ -600,6 +648,7 @@ etag_guess_byteorder(const id3_ucs4_t *ustr, gchar **ret) /* XXX */
             *ret = tmp;
         else
             free(tmp);
+        g_free (charset);
         return 0;
     }
 
@@ -613,6 +662,7 @@ etag_guess_byteorder(const id3_ucs4_t *ustr, gchar **ret) /* XXX */
             *ret = str;
         else
             free(str);
+        g_free (charset);
         return 1;
     }
 
@@ -623,6 +673,7 @@ etag_guess_byteorder(const id3_ucs4_t *ustr, gchar **ret) /* XXX */
     else
         free(tmp);
 
+    g_free (charset);
     return 0;
 }
 
@@ -647,11 +698,18 @@ etag_ucs42gchar(const id3_ucs4_t *usrc, unsigned is_latin,
 
     retval = 0, retstr = NULL;
 
-    if (is_latin && USE_NON_STANDARD_ID3_READING_CHARACTER_SET)
+    if (is_latin && g_settings_get_boolean (MainSettings,
+                                            "id3-override-read-encoding"))
     {
         if ((latinstr = (gchar *)id3_ucs4_latin1duplicate(usrc)))
         {
-            retstr = convert_string(latinstr, FILE_READING_ID3V1V2_CHARACTER_SET, "UTF-8", FALSE);
+            gint id3v1v2_charset;
+            const gchar * charset;
+
+            id3v1v2_charset = g_settings_get_enum (MainSettings,
+                                                   "id3v1v2-charset");
+            charset = et_charset_get_name_from_index (id3v1v2_charset);
+            retstr = convert_string (latinstr, charset, "UTF-8", FALSE);
             free(latinstr);
         }
     }else
@@ -723,14 +781,19 @@ libid3tag_Get_Frame_Str (const struct id3_frame *frame,
                         continue;
                 }
 
-                latinstr = g_strdup (field_type == ID3_FIELD_TYPE_LATIN1 ? (gchar *)id3_field_getlatin1 (field)
-                                                                         : (gchar *)id3_field_getfulllatin1 (field));
+                latinstr = g_strdup (field_type == ID3_FIELD_TYPE_LATIN1 ? (const gchar *)id3_field_getlatin1 (field)
+                                                                         : (const gchar *)id3_field_getfulllatin1 (field));
 
-                if (USE_NON_STANDARD_ID3_READING_CHARACTER_SET)
+                if (g_settings_get_boolean (MainSettings,
+                                            "id3-override-read-encoding"))
                 {
-                    tmpstr = convert_string (latinstr,
-                                             FILE_READING_ID3V1V2_CHARACTER_SET,
-                                             "UTF-8", FALSE);
+                    gint id3v1v2_charset;
+                    const gchar * charset;
+
+                    id3v1v2_charset = g_settings_get_enum (MainSettings,
+                                                           "id3v1v2-charset");
+                    charset = et_charset_get_name_from_index (id3v1v2_charset);
+                    tmpstr = convert_string (latinstr, charset, "UTF-8", FALSE);
                     g_free (latinstr);
                 }
                 else
@@ -837,30 +900,31 @@ libid3tag_Get_Frame_Str (const struct id3_frame *frame,
 /*
  * Write the ID3 tags to the file. Returns TRUE on success, else 0.
  */
-gboolean Id3tag_Write_File_v24Tag (ET_File *ETFile)
+gboolean
+id3tag_write_file_v24tag (const ET_File *ETFile,
+                          GError **error)
 {
-    File_Tag         *FileTag;
-    gchar            *filename, *filename_utf8;
-    gchar            *basename_utf8;
+    const File_Tag *FileTag;
+    const gchar *filename;
     struct id3_tag   *v1tag, *v2tag;
     struct id3_frame *frame;
     union id3_field  *field;
     gchar            *string1;
     Picture          *pic;
-    gint error = 0;
     gboolean strip_tags = TRUE;
     guchar genre_value = ID3_INVALID_GENRE;
+    gboolean success;
 
     g_return_val_if_fail (ETFile != NULL && ETFile->FileTag != NULL, FALSE);
+    g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
     FileTag       = (File_Tag *)ETFile->FileTag->data;
     filename      = ((File_Name *)ETFile->FileNameCur->data)->value;
-    filename_utf8 = ((File_Name *)ETFile->FileNameCur->data)->value_utf8;
 
     v1tag = v2tag = NULL;
 
-    // Write ID3v2 tag
-    if (FILE_WRITING_ID3V2_WRITE_TAG)
+    /* Write ID3v2 tag. */
+    if (g_settings_get_boolean (MainSettings, "id3v2-enabled"))
     {
         struct id3_file *file;
         struct id3_tag *tmptag;
@@ -919,14 +983,18 @@ gboolean Id3tag_Write_File_v24Tag (ET_File *ETFile)
                         //ID3_TAG_OPTION_UNSYNCHRONISATION); // Taglib doesn't support frames with unsynchronisation (patch from Alexey Illarionov) http://bugs.kde.org/show_bug.cgi?id=138829
                         0);
         
-        if (FILE_WRITING_ID3V2_USE_CRC32)
-            id3_tag_options(v2tag, ID3_TAG_OPTION_CRC, ~0);
-        if (FILE_WRITING_ID3V2_USE_COMPRESSION)
-            id3_tag_options(v2tag, ID3_TAG_OPTION_COMPRESSION, ~0);
+        if (g_settings_get_boolean (MainSettings, "id3v2-crc32"))
+        {
+            id3_tag_options (v2tag, ID3_TAG_OPTION_CRC, ~0);
+        }
+        if (g_settings_get_boolean (MainSettings, "id3v2-compression"))
+        {
+            id3_tag_options (v2tag, ID3_TAG_OPTION_COMPRESSION, ~0);
+        }
     }
 
-    // Write ID3v1 tag
-    if (FILE_WRITING_ID3V1_WRITE_TAG)
+    /* Write ID3v1 tag. */
+    if (g_settings_get_boolean (MainSettings, "id3v1-enabled"))
     {
         v1tag = id3_tag_new();
         if (!v1tag)
@@ -996,10 +1064,15 @@ gboolean Id3tag_Write_File_v24Tag (ET_File *ETFile)
     if (FileTag->genre)
         genre_value = Id3tag_String_To_Genre(FileTag->genre);
 
-    if ((genre_value == ID3_INVALID_GENRE)||(FILE_WRITING_ID3V2_TEXT_ONLY_GENRE))
-        string1 = g_strdup(FileTag->genre);
+    if ((genre_value == ID3_INVALID_GENRE)
+        || g_settings_get_boolean (MainSettings, "id3v2-text-only-genre"))
+    {
+        string1 = g_strdup (FileTag->genre);
+    }
     else
-        string1 = g_strdup_printf("(%d)",genre_value);
+    {
+        string1 = g_strdup_printf ("(%d)",genre_value);
+    }
 
     etag_set_tags(string1, ID3_FRAME_GENRE, ID3_FIELD_TYPE_STRINGLIST, v1tag, v2tag, &strip_tags);
     g_free(string1);
@@ -1094,7 +1167,7 @@ gboolean Id3tag_Write_File_v24Tag (ET_File *ETFile)
     /*********************************
      * Update id3v1.x and id3v2 tags *
      *********************************/
-    error |= etag_write_tags(filename, v1tag, v2tag, strip_tags);
+    success = etag_write_tags (filename, v1tag, v2tag, strip_tags, error);
 
     // Free data
     if (v1tag)
@@ -1102,16 +1175,7 @@ gboolean Id3tag_Write_File_v24Tag (ET_File *ETFile)
     if (v2tag)
         id3_tag_delete(v2tag);
 
-    if (error == 0)
-    {
-        basename_utf8 = g_path_get_basename(filename_utf8);
-        Log_Print(LOG_OK,_("Updated tag of '%s'"),basename_utf8);
-        g_free(basename_utf8);
-    }
-
-    if (error) return FALSE;
-    else       return TRUE;
-
+    return success;
 }
 
 /* Dele all frames with 'name'
@@ -1208,51 +1272,86 @@ id3taglib_set_field(struct id3_frame *frame,
     if (str)
     {
         /* Prepare str for writing according to easytag charset coversion settings */
-        if ((FILE_WRITING_ID3V2_USE_UNICODE_CHARACTER_SET == 0)
-        || (type == ID3_FIELD_TYPE_LATIN1)
-        || (type == ID3_FIELD_TYPE_LATIN1FULL)
-        || id3v1)
+        if ((g_settings_get_boolean (MainSettings, "id3v2-enable-unicode"))
+            || (type == ID3_FIELD_TYPE_LATIN1)
+            || (type == ID3_FIELD_TYPE_LATIN1FULL)
+            || id3v1)
         {
             encname = NULL;
             /* id3v1 fields converted using its own character set and iconv options */
             if ( id3v1 )
             {
-                if ( !FILE_WRITING_ID3V1_ICONV_OPTIONS_NO )
-                    encname = g_strconcat(
-                        FILE_WRITING_ID3V1_CHARACTER_SET,
-                        FILE_WRITING_ID3V1_ICONV_OPTIONS_TRANSLIT ? "//TRANSLIT" : "//IGNORE",
-                        NULL);
+                gint id3v1_charset;
+                const gchar *charset;
+                EtTagEncoding iconv_option;
+
+                id3v1_charset = g_settings_get_enum (MainSettings,
+                                                     "id3v1-charset");
+                charset = et_charset_get_name_from_index (id3v1_charset);
+                iconv_option = g_settings_get_enum (MainSettings,
+                                                    "id3v1-encoding-option");
+
+                if (iconv_option != ET_TAG_ENCODING_NONE)
+                {
+                    encname = g_strconcat (charset,
+                                           iconv_option == ET_TAG_ENCODING_TRANSLITERATE ? "//TRANSLIT" : "//IGNORE",
+                                           NULL);
+                }
                 else
-                    encname = g_strdup(FILE_WRITING_ID3V1_CHARACTER_SET);
-            } else
+                {
+                    encname = g_strdup (charset);
+                }
+            }
+            else
             {
                 /* latin1 fields (such as URL) always converted with ISO-8859-1*/
                 if ((type != ID3_FIELD_TYPE_LATIN1) && (type != ID3_FIELD_TYPE_LATIN1FULL))
                 {
-                    if ( FILE_WRITING_ID3V2_ICONV_OPTIONS_NO == 0)
-                        encname = g_strconcat(
-                            FILE_WRITING_ID3V2_NO_UNICODE_CHARACTER_SET,
-                            FILE_WRITING_ID3V2_ICONV_OPTIONS_TRANSLIT ? "//TRANSLIT" : "//IGNORE",
-                            NULL);
+                    gint id3v2_charset;
+                    const gchar *charset;
+                    EtTagEncoding iconv_option;
+
+                    id3v2_charset = g_settings_get_enum (MainSettings,
+                                                         "id3v2-no-unicode-charset");
+                    charset = et_charset_get_name_from_index (id3v2_charset);
+                    iconv_option = g_settings_get_enum (MainSettings,
+                                                        "id3v2-encoding-option");
+                    if (iconv_option != ET_TAG_ENCODING_NONE)
+                    {
+                        encname = g_strconcat (charset,
+                                               iconv_option == ET_TAG_ENCODING_TRANSLITERATE ? "//TRANSLIT" : "//IGNORE",
+                                               NULL);
+                    }
                     else
-                        encname = g_strdup(FILE_WRITING_ID3V2_NO_UNICODE_CHARACTER_SET);
+                    {
+                        encname = g_strdup (charset);
+                    }
                 }
             }
 
             latinstr = convert_string(str, "UTF-8", encname ? encname : "ISO-8859-1//IGNORE", TRUE);
             g_free (encname);
             buf = id3_latin1_ucs4duplicate((id3_latin1_t const *)latinstr);
-        } else
+        }
+        else
         {
-            if (!strcmp(FILE_WRITING_ID3V2_UNICODE_CHARACTER_SET, "UTF-16"))
+            gchar *charset;
+
+            charset = g_settings_get_string (MainSettings,
+                                             "id3v2-unicode-charset");
+
+            if (!strcmp (charset, "UTF-16"))
             {
                 enc_field = ID3_FIELD_TEXTENCODING_UTF_16;
                 buf = id3_utf8_ucs4duplicate((id3_utf8_t const *)str);
-            }else
+            }
+            else
             {
                 enc_field = ID3_FIELD_TEXTENCODING_UTF_8;
                 buf = id3_utf8_ucs4duplicate((id3_utf8_t const *)str);
             }
+
+            g_free (charset);
         }
     }
 
@@ -1384,11 +1483,12 @@ etag_set_tags (const gchar *str,
     return 0;
 }
 
-static int
+static gboolean
 etag_write_tags (const gchar *filename, 
                  struct id3_tag const *v1tag,
                  struct id3_tag const *v2tag,
-                 gboolean strip_tags)
+                 gboolean strip_tags,
+                 GError **error)
 {
     id3_byte_t *v1buf, *v2buf;
     id3_length_t v1size = 0, v2size = 0;
@@ -1398,7 +1498,7 @@ etag_write_tags (const gchar *filename,
     long filev2size;
     gsize ctxsize;
     char *ctx = NULL;
-    int err = 0;
+    gboolean success = TRUE;
     gssize size_read = 0;
 
     v1buf = v2buf = NULL;
@@ -1442,20 +1542,21 @@ etag_write_tags (const gchar *filename,
     if (v2buf == NULL)
         v2size = 0;
 
-    if ((fd = open(filename, O_RDWR)) < 0)
+    if ((fd = open (filename, O_RDWR)) < 0)
     {
-        err = errno;
-        g_free(v1buf);
-        g_free(v2buf);
-        return (err);
+        g_set_error (error, G_FILE_ERROR, g_file_error_from_errno (errno),
+                     "%s", g_strerror (errno));
+        g_free (v1buf);
+        g_free (v2buf);
+        return FALSE;
     }
 
-    err = 1;
+    success = FALSE;
 
     /* Handle Id3v1 tag */
-    if ((curpos = lseek(fd, -128, SEEK_END)) < 0)
+    if ((curpos = lseek (fd, -128, SEEK_END)) < 0)
         goto out;
-    if ( (size_read = read(fd, tmp, ID3_TAG_QUERYSIZE)) != ID3_TAG_QUERYSIZE)
+    if ((size_read = read (fd, tmp, ID3_TAG_QUERYSIZE)) != ID3_TAG_QUERYSIZE)
     {
         goto out;
     }
@@ -1479,36 +1580,35 @@ etag_write_tags (const gchar *filename,
 
     /* Search id3v2 tags at the end of the file (before any ID3v1 tag) */
     /* XXX: Unsafe */
-    if ((curpos = lseek(fd, -ID3_TAG_QUERYSIZE, SEEK_CUR)) >= 0)
+    if ((curpos = lseek (fd, -ID3_TAG_QUERYSIZE, SEEK_CUR)) >= 0)
     {
-        if (read(fd, tmp, ID3_TAG_QUERYSIZE) != ID3_TAG_QUERYSIZE)
+        if (read (fd, tmp, ID3_TAG_QUERYSIZE) != ID3_TAG_QUERYSIZE)
             goto out;
         filev2size = id3_tag_query((id3_byte_t const *)tmp, ID3_TAG_QUERYSIZE);
-        if ( (filev2size > 10)
-        &&   (curpos = lseek(fd, -filev2size, SEEK_CUR)) )
+        if ((filev2size > 10) && (curpos = lseek (fd, -filev2size, SEEK_CUR)))
         {
-            if ( (size_read = read(fd, tmp, ID3_TAG_QUERYSIZE)) != ID3_TAG_QUERYSIZE)
+            if ((size_read = read (fd, tmp, ID3_TAG_QUERYSIZE)) != ID3_TAG_QUERYSIZE)
             {
                 goto out;
             }
             if (id3_tag_query((id3_byte_t const *)tmp, ID3_TAG_QUERYSIZE) != filev2size)
-                curpos = lseek(fd, -ID3_TAG_QUERYSIZE - filev2size, SEEK_CUR);
+                curpos = lseek (fd, -ID3_TAG_QUERYSIZE - filev2size, SEEK_CUR);
             else
-                curpos = lseek(fd, -ID3_TAG_QUERYSIZE, SEEK_CUR);
+                curpos = lseek (fd, -ID3_TAG_QUERYSIZE, SEEK_CUR);
         }
     }
 
     /* Write id3v1 tag */
     if (v1buf)
     {
-        if ( write(fd, v1buf, v1size) != v1size)
+        if (write (fd, v1buf, v1size) != v1size)
             goto out;
     }
 
     /* Truncate file (strip tags at the end of file) */
-    if ((curpos = lseek(fd, 0, SEEK_CUR)) <= 0 )
+    if ((curpos = lseek (fd, 0, SEEK_CUR)) <= 0)
         goto out;
-    if ((err = ftruncate(fd, curpos)))
+    if (ftruncate (fd, curpos) == -1)
         goto out;
 
     /* Handle Id3v2 tag */
@@ -1537,13 +1637,13 @@ etag_write_tags (const gchar *filename,
     {
         /* XXX */
         // Size of audio data (tags at the end were already removed)
-        ctxsize = lseek(fd, 0, SEEK_END) - filev2size;
+        ctxsize = lseek (fd, 0, SEEK_END) - filev2size;
 
         if ((ctx = g_try_malloc(ctxsize)) == NULL)
             goto out;
-        if ((curpos = lseek(fd, filev2size, SEEK_SET)) < 0)
+        if ((curpos = lseek (fd, filev2size, SEEK_SET)) < 0)
             goto out;
-        if ((size_read = /*err = */read(fd, ctx, ctxsize)) != ctxsize)
+        if ((size_read = read (fd, ctx, ctxsize)) != ctxsize)
         {
             gchar *filename_utf8 = filename_to_display(filename);
             gchar *basename_utf8 = g_path_get_basename(filename_utf8);
@@ -1554,24 +1654,24 @@ etag_write_tags (const gchar *filename,
              * support macros in extracted strings.
              * https://bugzilla.gnome.org/show_bug.cgi?id=705952
              */
-            Log_Print (LOG_ERROR,
-                       /* Translators: The first string is a filename, the
-                        * second string is the number of bytes that were
-                        * missing (not read for some reason) while reading from
-                        * the file.
-                        */
-                       ngettext ("Cannot write tag of file ‘%s’ (a byte was missing)",
-                                 "Cannot write tag of file ‘%s’ (%s bytes were missing)",
-                                 ctxsize - size_read),
-                       basename_utf8, bytes_missing);
-            g_free(filename_utf8);
-            g_free(basename_utf8);
+            g_set_error (error, G_FILE_ERROR, g_file_error_from_errno (errno),
+                         /* Translators: The first string is a filename, the
+                          * second string is the number of bytes that were
+                          * missing (not read for some reason) while reading
+                          * from the file.
+                          */
+                         ngettext ("Cannot write tag of file ‘%s’ (a byte was missing)",
+                                   "Cannot write tag of file ‘%s’ (%s bytes were missing)",
+                                   ctxsize - size_read),
+                         basename_utf8, bytes_missing);
+            g_free (filename_utf8);
+            g_free (basename_utf8);
             g_free (bytes_missing);
             goto out;
         }
         
         // Return to the beginning of the file
-        if (lseek(fd, 0, SEEK_SET) < 0)
+        if (lseek (fd, 0, SEEK_SET) < 0)
             goto out;
             
         // Write the ID3v2 tag
@@ -1581,8 +1681,9 @@ etag_write_tags (const gchar *filename,
             {
                 gchar *filename_utf8 = filename_to_display (filename);
                 gchar *basename_utf8 = g_path_get_basename (filename_utf8);
-                Log_Print (LOG_ERROR, _("Cannot save tag of file '%s'"),
-                           basename_utf8);
+                g_set_error (error, G_FILE_ERROR,
+                             g_file_error_from_errno (errno),
+                             _("Cannot save tag of file ‘%s’"), basename_utf8);
                 g_free (basename_utf8);
                 goto out;
             }
@@ -1592,27 +1693,30 @@ etag_write_tags (const gchar *filename,
         {
             gchar *filename_utf8 = filename_to_display(filename);
             gchar *basename_utf8 = g_path_get_basename(filename_utf8);
-            Log_Print(LOG_ERROR,_("Size error while saving tag of '%s'"),basename_utf8);
-            g_free(filename_utf8);
-            g_free(basename_utf8);
+            g_set_error (error, G_FILE_ERROR,
+                         g_file_error_from_errno (errno),
+                         _("Size error while saving tag of ‘%s’"),
+                         basename_utf8);
+            g_free (filename_utf8);
+            g_free (basename_utf8);
             goto out;
         }
 
-        if ((curpos = lseek(fd, 0, SEEK_CUR)) <= 0 )
+        if ((curpos = lseek (fd, 0, SEEK_CUR)) <= 0)
             goto out;
 
-        if ((err = ftruncate(fd, curpos)))
+        if (ftruncate (fd, curpos) < 0)
             goto out;
     }
 
-    err = 0;
+    success = TRUE;
 out:
     g_free(ctx);
     lseek(fd, 0, SEEK_SET);
     close(fd);
     g_free(v1buf);
     g_free(v2buf);
-    return err;
+    return success;
 }
 
 #endif /* ENABLE_MP3 */
diff --git a/src/libapetag/COPYING.LGPL b/src/tags/libapetag/COPYING.LGPL
similarity index 100%
rename from src/libapetag/COPYING.LGPL
rename to src/tags/libapetag/COPYING.LGPL
diff --git a/src/libapetag/README.apetag b/src/tags/libapetag/README.apetag
similarity index 100%
rename from src/libapetag/README.apetag
rename to src/tags/libapetag/README.apetag
diff --git a/src/libapetag/apetaglib.c b/src/tags/libapetag/apetaglib.c
similarity index 96%
rename from src/libapetag/apetaglib.c
rename to src/tags/libapetag/apetaglib.c
index a41bd5d..57533d8 100644
--- a/src/libapetag/apetaglib.c
+++ b/src/tags/libapetag/apetaglib.c
@@ -96,10 +96,10 @@ struct tag *
 libapetag_maloc_cont_int (apetag *mem_cnt, struct tag *mTag);
 int
 libapetag_maloc_cont_text (apetag *mem_cnt, unsigned long flags,
-             long sizeName, char *name, long sizeValue, char *value);
+             long sizeName, const char *name, long sizeValue, char *value);
 int
 libapetag_maloc_cont (apetag *mem_cnt, unsigned long flags,
-        long sizeName, char *name, long sizeValue, char *value);
+        long sizeName, const char *name, long sizeValue, const char *value);
 static int
 libapetag_qsort (struct tag **a, struct tag **b);
 int
@@ -186,7 +186,7 @@ libapetag_maloc_cont_int (apetag *mem_cnt, struct tag *mTag)
  */
 int
 libapetag_maloc_cont (apetag *mem_cnt, unsigned long flags,
-        long sizeName, char *name, long sizeValue, char *value)
+        long sizeName, const char *name, long sizeValue, const char *value)
 {
     struct tag *mTag;
         // TODO:: zadbac o to zeby tu czyscilo istniejace tagi jesli value=NULL
@@ -237,7 +237,7 @@ libapetag_maloc_cont (apetag *mem_cnt, unsigned long flags,
 */
 int
 libapetag_maloc_cont_text (apetag *mem_cnt, unsigned long flags,
-               long sizeName, char *name, long sizeValue,
+               long sizeName, const char *name, long sizeValue,
                char *value)
 {
     int n = sizeValue;
@@ -273,8 +273,8 @@ libapetag_maloc_cont_text (apetag *mem_cnt, unsigned long flags,
     \return 0 - OK else check #atl_return
 */
 int
-apefrm_add (apetag *mem_cnt, unsigned long flags, char *name,
-     char *value)
+apefrm_add (apetag *mem_cnt, unsigned long flags, const char *name,
+     const char *value)
 {
     apefrm_remove_real (mem_cnt, name);
     return libapetag_maloc_cont (mem_cnt, flags, strlen (name), name, strlen (value), value);
@@ -359,7 +359,7 @@ for ((framka = apefrm_get(ape, APE_TAG_LIB_FIRST)); framka!=NULL;) {
     \warning don't change anything in this struct make copy and work
 */
 struct tag *
-apefrm_get (apetag *mem_cnt, char *name)
+apefrm_get (apetag *mem_cnt, const char *name)
 {
     int n;
     struct tag **mTag;
@@ -406,7 +406,7 @@ apefrm_get (apetag *mem_cnt, char *name)
     \todo check if frame type isn't binary
 */
 char *
-apefrm_getstr (apetag *mem_cnt, char *name)
+apefrm_getstr (apetag *mem_cnt, const char *name)
 {
     struct tag *mTag;
     
@@ -433,7 +433,7 @@ apefrm_getstr (apetag *mem_cnt, char *name)
     \param name     frame name for search and remove
 */
 void
-apefrm_remove_real (apetag *mem_cnt, char *name)
+apefrm_remove_real (apetag *mem_cnt, const char *name)
 {
     int n;
     struct tag **mTag;
@@ -482,7 +482,7 @@ apefrm_remove_real (apetag *mem_cnt, char *name)
     \param name     frame name for search and remove
 */
 void
-apefrm_remove (apetag *mem_cnt, char *name)
+apefrm_remove (apetag *mem_cnt, const char *name)
 {
     int n;
     struct tag **mTag;
@@ -626,7 +626,10 @@ readtag_id3v1_fp (apetag *mem_cnt, FILE * fp)
     } else {
         libapetag_maloc_cont_text(mem_cnt, 0, 7, "Comment", 30, m.comment);
     }
-    libapetag_maloc_cont_text(mem_cnt, 0, 5, "Genre",
+    /* Special-case the genre. As the text never has a trailing space, which
+     * libapetag_maloc_cont_text() strips, simply call libapetag_maloc_cont()
+     * directly. */
+    libapetag_maloc_cont(mem_cnt, 0, 5, "Genre",
                 strlen(genre_no(m.genre)), genre_no(m.genre));
     
     return 0;
@@ -691,7 +694,7 @@ make_id3v1_tag(apetag *mem_cnt, struct _id3v1Tag *m)
     \return 0 - OK else check #atl_return
 */
 int
-apetag_read_fp(apetag *mem_cnt, FILE * fp, char *filename, int flag)
+apetag_read_fp(apetag *mem_cnt, FILE * fp, const char *filename, int flag)
 {
     int id3v1 = 0;
     int apeTag2 = 0;
@@ -807,7 +810,7 @@ apetag_read_fp(apetag *mem_cnt, FILE * fp, char *filename, int flag)
     \return 0 - OK else check #atl_return
 */
 int
-apetag_read (apetag *mem_cnt, char *filename,int flag)
+apetag_read (apetag *mem_cnt, const char *filename, int flag)
 {
     FILE *fp;
     
@@ -835,7 +838,7 @@ apetag_read (apetag *mem_cnt, char *filename,int flag)
 static int
 libapetag_qsort (struct tag **a, struct tag **b)
 {
-    char *sorting[] = { "Artist", "Year", "Album", "Track", "Title", "Genre", NULL, NULL };
+    const char * const sorting[] = { "Artist", "Year", "Album", "Track", "Title", "Genre", NULL, NULL };
     int n, m;
 
     if (!a || !b || !*a || !*b) {
@@ -881,7 +884,7 @@ libapetag_qsort (struct tag **a, struct tag **b)
 
 */
 int
-apetag_save (char *filename, apetag *mem_cnt, int flag)
+apetag_save (const char *filename, apetag *mem_cnt, int flag)
 {
     FILE *fp;
     struct _id3v1Tag id3v1_tag;
diff --git a/src/libapetag/apetaglib.h b/src/tags/libapetag/apetaglib.h
similarity index 94%
rename from src/libapetag/apetaglib.h
rename to src/tags/libapetag/apetaglib.h
index 2587f6d..41bc007 100644
--- a/src/libapetag/apetaglib.h
+++ b/src/tags/libapetag/apetaglib.h
@@ -191,11 +191,11 @@ typedef struct _ape_mem_cnt  apetag;
 
 /* read file and add frames */
 int
-apetag_read (apetag *mem_cnt, char *filename, int flag) ;
+apetag_read (apetag *mem_cnt, const char *filename, int flag) ;
 
 /* read file and add frames */
 int 
-apetag_read_fp (apetag *mem_cnt, FILE * fp, char *filename, int flag) ;
+apetag_read_fp (apetag *mem_cnt, FILE * fp, const char *filename, int flag) ;
 
 /* initialise new object #apetag and return */
 apetag * 
@@ -207,12 +207,12 @@ apetag_free (apetag *mem_cnt) ;
 
 /* save apetag to file */
 int
-apetag_save (char *filename, apetag *mem_cnt, int flag) ;
+apetag_save (const char *filename, apetag *mem_cnt, int flag) ;
 
 
 /* Add text frame */
 int
-apefrm_add (apetag *mem_cnt, unsigned long flags, char *name, char *value) ;
+apefrm_add (apetag *mem_cnt, unsigned long flags, const char *name, const char *value) ;
 
 /* add binary frame */
 int
@@ -225,15 +225,15 @@ apefrm_add_noreplace (apetag *mem_cnt, unsigned long flags, char *name, char *va
 
 /* search in apetag for name and return tag */
 struct tag * 
-apefrm_get (apetag *mem_cnt, char *name) ;
+apefrm_get (apetag *mem_cnt, const char *name) ;
 
 /* search in apetag for name and return string */
 char * 
-apefrm_getstr (apetag *mem_cnt, char *name) ;
+apefrm_getstr (apetag *mem_cnt, const char *name) ;
 
 /* remove frame from memory */
 void 
-apefrm_remove_real (apetag *mem_cnt, char *name) ;
+apefrm_remove_real (apetag *mem_cnt, const char *name) ;
 
 
 /**
@@ -245,7 +245,7 @@ apefrm_remove_real (apetag *mem_cnt, char *name) ;
 
 /* set frame to remove */
 void
-apefrm_remove (apetag *mem_cnt, char *name);
+apefrm_remove (apetag *mem_cnt, const char *name);
 
 /* read id3v1 and add frames */
 int 
diff --git a/src/libapetag/id3v2_read.c b/src/tags/libapetag/id3v2_read.c
similarity index 100%
rename from src/libapetag/id3v2_read.c
rename to src/tags/libapetag/id3v2_read.c
diff --git a/src/libapetag/id3v2_read.h b/src/tags/libapetag/id3v2_read.h
similarity index 100%
rename from src/libapetag/id3v2_read.h
rename to src/tags/libapetag/id3v2_read.h
diff --git a/src/libapetag/info_mac.c b/src/tags/libapetag/info_mac.c
similarity index 100%
rename from src/libapetag/info_mac.c
rename to src/tags/libapetag/info_mac.c
diff --git a/src/libapetag/info_mac.h b/src/tags/libapetag/info_mac.h
similarity index 100%
rename from src/libapetag/info_mac.h
rename to src/tags/libapetag/info_mac.h
diff --git a/src/libapetag/info_mpc.c b/src/tags/libapetag/info_mpc.c
similarity index 100%
rename from src/libapetag/info_mpc.c
rename to src/tags/libapetag/info_mpc.c
diff --git a/src/libapetag/info_mpc.h b/src/tags/libapetag/info_mpc.h
similarity index 100%
rename from src/libapetag/info_mpc.h
rename to src/tags/libapetag/info_mpc.h
diff --git a/src/libapetag/is_tag.c b/src/tags/libapetag/is_tag.c
similarity index 100%
rename from src/libapetag/is_tag.c
rename to src/tags/libapetag/is_tag.c
diff --git a/src/libapetag/is_tag.h b/src/tags/libapetag/is_tag.h
similarity index 100%
rename from src/libapetag/is_tag.h
rename to src/tags/libapetag/is_tag.h
diff --git a/src/tags/monkeyaudio_header.c b/src/tags/monkeyaudio_header.c
new file mode 100644
index 0000000..2a00820
--- /dev/null
+++ b/src/tags/monkeyaudio_header.c
@@ -0,0 +1,121 @@
+/* EasyTAG - Tag editor for audio files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ * Copyright (C) 2001-2003  Jerome Couderc <easytag at gmail.com>
+ * Copyright (C) 2002-2003  Artur Polaczyñski <artii at o2.pl>
+ *
+ * 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
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+
+#include <gtk/gtk.h>
+#include <glib/gi18n.h>
+
+#include "et_core.h"
+#include "misc.h"
+#include "monkeyaudio_header.h"
+#include "libapetag/info_mac.h"
+
+gboolean
+et_mac_header_read_file_info (GFile *file,
+                              ET_File_Info *ETFileInfo,
+                              GError **error)
+{
+    gchar *filename;
+    StreamInfoMac Info;
+
+    g_return_val_if_fail (file != NULL && ETFileInfo != NULL, FALSE);
+    g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+    filename = g_file_get_path (file);
+
+    if (info_mac_read (filename, &Info))
+    {
+        g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, "%s",
+                     _("Error opening Monkey’s Audio file"));
+        g_free (filename);
+        return FALSE;
+    }
+
+    g_free (filename);
+
+    ETFileInfo->mpc_profile   = g_strdup(Info.CompresionName);
+    ETFileInfo->version       = Info.Version;
+    ETFileInfo->bitrate       = Info.Bitrate/1000.0;
+    ETFileInfo->samplerate    = Info.SampleFreq;
+    ETFileInfo->mode          = Info.Channels;
+    ETFileInfo->size          = Info.FileSize;
+    ETFileInfo->duration      = Info.Duration/1000;
+
+    return TRUE;
+}
+
+EtFileHeaderFields *
+et_mac_header_display_file_info_to_ui (const ET_File *ETFile)
+{
+    EtFileHeaderFields *fields;
+    ET_File_Info *info;
+    gchar *time  = NULL;
+    gchar *time1 = NULL;
+    gchar *size  = NULL;
+    gchar *size1 = NULL;
+
+    info = ETFile->ETFileInfo;
+    fields = g_slice_new (EtFileHeaderFields);
+
+    /* Mode changed to profile name  */
+    fields->mode_label = _("Profile:");
+    fields->mode = info->mpc_profile;
+
+    /* Bitrate */
+    fields->bitrate = g_strdup_printf (_("%d kb/s"), info->bitrate);
+
+    /* Samplerate */
+    fields->samplerate = g_strdup_printf (_("%d Hz"), info->samplerate);
+
+    /* Version changed to encoder version */
+    fields->version_label = _("Encoder:");
+    fields->version = g_strdup_printf ("%i.%i", info->version / 1000,
+                                       info->version % 1000);
+
+    /* Size */
+    size = g_format_size (info->size);
+    size1 = g_format_size (ETCore->ETFileDisplayedList_TotalSize);
+    fields->size = g_strdup_printf ("%s (%s)", size, size1);
+    g_free (size);
+    g_free (size1);
+
+    /* Duration */
+    time = Convert_Duration (info->duration);
+    time1 = Convert_Duration (ETCore->ETFileDisplayedList_TotalDuration);
+    fields->duration = g_strdup_printf ("%s (%s)", time, time1);
+    g_free (time);
+    g_free (time1);
+
+    return fields;
+}
+
+void
+et_mac_file_header_fields_free (EtFileHeaderFields *fields)
+{
+    g_return_if_fail (fields != NULL);
+
+    g_free (fields->bitrate);
+    g_free (fields->samplerate);
+    g_free (fields->version);
+    g_free (fields->size);
+    g_free (fields->duration);
+    g_slice_free (EtFileHeaderFields, fields);
+}
diff --git a/src/tags/monkeyaudio_header.h b/src/tags/monkeyaudio_header.h
new file mode 100644
index 0000000..fc7ce64
--- /dev/null
+++ b/src/tags/monkeyaudio_header.h
@@ -0,0 +1,34 @@
+/* EasyTAG - Tag editor for audio files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ * Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
+ * Copyright (C) 2002-2003  Artur Polaczyñski <artii at o2.pl>
+ *
+ * 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
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef ET_MONKEYAUDIO_HEADER_H_
+#define ET_MONKEYAUDIO_HEADER_H_
+
+#include "et_core.h"
+
+G_BEGIN_DECLS
+
+gboolean et_mac_header_read_file_info (GFile *file, ET_File_Info *ETFileInfo, GError **error);
+EtFileHeaderFields * et_mac_header_display_file_info_to_ui (const ET_File *ETFile);
+void et_mac_file_header_fields_free (EtFileHeaderFields *fields);
+
+G_END_DECLS
+
+#endif /* ET_MONKAYAUDIO_HEADER_H_ */
diff --git a/src/mp4_header.cc b/src/tags/mp4_header.cc
similarity index 50%
rename from src/mp4_header.cc
rename to src/tags/mp4_header.cc
index ebb024c..23028ea 100644
--- a/src/mp4_header.cc
+++ b/src/tags/mp4_header.cc
@@ -22,52 +22,50 @@
 /* This file is intended to be included directly in mp4_tag.cc */
 
 /*
- * Mp4_Header_Read_File_Info:
+ * et_mp4_header_read_file_info:
  *
  * Get header info into the ETFileInfo structure
  */
-gboolean Mp4_Header_Read_File_Info (gchar *filename, ET_File_Info *ETFileInfo)
+gboolean
+et_mp4_header_read_file_info (GFile *file,
+                              ET_File_Info *ETFileInfo,
+                              GError **error)
 {
-    TagLib::MP4::Tag *tag;
+    GFileInfo *info;
     const TagLib::MP4::Properties *properties;
 
-    g_return_val_if_fail (filename != NULL && ETFileInfo != NULL, FALSE);
+    g_return_val_if_fail (file != NULL && ETFileInfo != NULL, FALSE);
 
     /* Get size of file */
-    ETFileInfo->size = et_get_file_size (filename);
+    info = g_file_query_info (file, G_FILE_ATTRIBUTE_STANDARD_SIZE,
+                              G_FILE_QUERY_INFO_NONE, NULL, error);
 
-    GFile *file = g_file_new_for_path (filename);
-    GIO_InputStream stream (file);
-
-    if (!stream.isOpen ())
+    if (!info)
     {
-        gchar *filename_utf8 = filename_to_display (filename);
-        const GError *error = stream.getError ();
-        Log_Print (LOG_ERROR, _("Error while opening file: '%s' (%s)."),
-                   filename_utf8, error->message);
-        g_free (filename_utf8);
         return FALSE;
     }
 
-    TagLib::MP4::File mp4file (&stream);
+    ETFileInfo->size = g_file_info_get_size (info);
+    g_object_unref (info);
 
-    g_object_unref (file);
+    GIO_InputStream stream (file);
 
-    if (!mp4file.isOpen ())
+    if (!stream.isOpen ())
     {
-        gchar *filename_utf8 = filename_to_display (filename);
-        Log_Print (LOG_ERROR, _("Error while opening file: '%s' (%s)."),
-                   filename_utf8,_("MP4 format invalid"));
-        g_free (filename_utf8);
+        const GError *tmp_error = stream.getError ();
+
+        g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
+                     _("Error while opening file: %s"), tmp_error->message);
         return FALSE;
     }
 
-    if (!(tag = mp4file.tag ()))
+    TagLib::MP4::File mp4file (&stream);
+
+    if (!mp4file.isOpen ())
     {
-        gchar *filename_utf8 = filename_to_display (filename);
-        Log_Print (LOG_ERROR, _("File contains no audio track: '%s'"),
-                   filename_utf8);
-        g_free (filename_utf8);
+        g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
+                     _("Error while opening file: %s"),
+                     _("MP4 format invalid"));
         return FALSE;
     }
 
@@ -75,10 +73,8 @@ gboolean Mp4_Header_Read_File_Info (gchar *filename, ET_File_Info *ETFileInfo)
 
     if (properties == NULL)
     {
-        gchar *filename_utf8 = filename_to_display (filename);
-        Log_Print (LOG_ERROR, _("Error reading properties from file: '%s'"),
-                   filename_utf8);
-        g_free (filename_utf8);
+        g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, "%s",
+                     _("Error reading properties from file"));
         return FALSE;
     }
 
@@ -114,67 +110,82 @@ gboolean Mp4_Header_Read_File_Info (gchar *filename, ET_File_Info *ETFileInfo)
     return TRUE;
 }
 
-
-
 /*
- * Mp4_Header_Display_File_Info_To_UI:
+ * et_mp4_header_display_file_info_to_ui:
  *
  * Display header info in the main window
  */
-gboolean Mp4_Header_Display_File_Info_To_UI(gchar *filename, ET_File_Info *ETFileInfo)
+EtFileHeaderFields *
+et_mp4_header_display_file_info_to_ui (const ET_File *ETFile)
 {
-    gchar *text;
+    EtFileHeaderFields *fields;
+    ET_File_Info *info;
     gchar *time = NULL;
     gchar *time1 = NULL;
     gchar *size = NULL;
     gchar *size1 = NULL;
 
+    info = ETFile->ETFileInfo;
+    fields = g_slice_new (EtFileHeaderFields);
+
+    fields->description = _("MP4/AAC File");
+
     /* MPEG, Layer versions */
-    gtk_label_set_text(GTK_LABEL(VersionLabel),ETFileInfo->mpc_version);
-    //text = g_strdup_printf("%d",ETFileInfo->version);
-    gtk_label_set_text(GTK_LABEL(VersionValueLabel),ETFileInfo->mpc_profile);
-    //g_free(text);
+    fields->version_label = info->mpc_version;
+    fields->version = info->mpc_profile;
 
     /* Bitrate */
-    if (ETFileInfo->variable_bitrate)
-        text = g_strdup_printf(_("~%d kb/s"),ETFileInfo->bitrate);
+    if (info->variable_bitrate)
+    {
+        fields->bitrate = g_strdup_printf (_("~%d kb/s"), info->bitrate);
+    }
     else
-        text = g_strdup_printf(_("%d kb/s"),ETFileInfo->bitrate);
-    gtk_label_set_text(GTK_LABEL(BitrateValueLabel),text);
-    g_free(text);
+    {
+        fields->bitrate = g_strdup_printf (_("%d kb/s"), info->bitrate);
+    }
 
     /* Samplerate */
-    text = g_strdup_printf(_("%d Hz"),ETFileInfo->samplerate);
-    gtk_label_set_text(GTK_LABEL(SampleRateValueLabel),text);
-    g_free(text);
+    fields->samplerate = g_strdup_printf (_("%d Hz"), info->samplerate);
 
     /* Mode */
     /* mpeg4ip library seems to always return -1 */
-    gtk_label_set_text(GTK_LABEL(ModeLabel),_("Channels:"));
-    if( ETFileInfo->mode == -1 )
-        text = g_strdup_printf("Unknown");
+    fields->mode_label = _("Channels:");
+
+    if (info->mode == -1)
+    {
+        fields->mode = g_strdup ("Unknown");
+    }
     else
-        text = g_strdup_printf("%d",ETFileInfo->mode);
-    gtk_label_set_text(GTK_LABEL(ModeValueLabel),text);
-    g_free(text);
+    {
+        fields->mode = g_strdup_printf ("%d", info->mode);
+    }
 
     /* Size */
-    size  = g_format_size (ETFileInfo->size);
+    size = g_format_size (info->size);
     size1 = g_format_size (ETCore->ETFileDisplayedList_TotalSize);
-    text  = g_strdup_printf("%s (%s)",size,size1);
-    gtk_label_set_text(GTK_LABEL(SizeValueLabel),text);
-    if (size)  g_free(size);
-    if (size1) g_free(size1);
-    g_free(text);
+    fields->size = g_strdup_printf ("%s (%s)", size, size1);
+    g_free (size);
+    g_free (size1);
 
     /* Duration */
-    time  = Convert_Duration(ETFileInfo->duration);
-    time1 = Convert_Duration(ETCore->ETFileDisplayedList_TotalDuration);
-    text  = g_strdup_printf("%s (%s)",time,time1);
-    gtk_label_set_text(GTK_LABEL(DurationValueLabel),text);
-    if (time)  g_free(time);
-    if (time1) g_free(time1);
-    g_free(text);
+    time = Convert_Duration (info->duration);
+    time1 = Convert_Duration (ETCore->ETFileDisplayedList_TotalDuration);
+    fields->duration = g_strdup_printf ("%s (%s)", time, time1);
+    g_free (time);
+    g_free (time1);
 
-    return TRUE;
+    return fields;
+}
+
+void
+et_mp4_file_header_fields_free (EtFileHeaderFields *fields)
+{
+    g_return_if_fail (fields != NULL);
+
+    g_free (fields->bitrate);
+    g_free (fields->samplerate);
+    g_free (fields->mode);
+    g_free (fields->size);
+    g_free (fields->duration);
+    g_slice_free (EtFileHeaderFields, fields);
 }
diff --git a/src/tags/mp4_header.h b/src/tags/mp4_header.h
new file mode 100644
index 0000000..6395d99
--- /dev/null
+++ b/src/tags/mp4_header.h
@@ -0,0 +1,34 @@
+/* EasyTAG - Tag editor for audio files
+ * Copyright (C) 2012-2014  David King <amigadave at amigadave.com>
+ * Copyright (C) 2000-2005  Jerome Couderc <easytag at gmail.com>
+ * Copyright (C) 2005  Stewart Whitman <swhitman at cox.net>
+ *
+ * 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
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef ET_MP4_HEADER_H_
+#define ET_MP4_HEADER_H_
+
+#include "et_core.h"
+
+G_BEGIN_DECLS
+
+gboolean et_mp4_header_read_file_info (GFile *file, ET_File_Info *ETFileInfo, GError **error);
+EtFileHeaderFields * et_mp4_header_display_file_info_to_ui (const ET_File *ETFile);
+void et_mp4_file_header_fields_free (EtFileHeaderFields *fields);
+
+G_END_DECLS
+
+#endif /* ET_MP4_HEADER_H_ */
diff --git a/src/mp4_tag.cc b/src/tags/mp4_tag.cc
similarity index 76%
rename from src/mp4_tag.cc
rename to src/tags/mp4_tag.cc
index efeaebd..068cf9f 100644
--- a/src/mp4_tag.cc
+++ b/src/tags/mp4_tag.cc
@@ -1,23 +1,22 @@
-/*
- *  EasyTAG - Tag editor for MP3 and Ogg Vorbis files
- *  Copyright (C) 2012-1014  David King <amigadave at amigadave.com>
- *  Copyright (C) 2001-2005  Jerome Couderc <easytag at gmail.com>
- *  Copyright (C) 2005  Michael Ihde <mike.ihde at randomwalking.com>
- *  Copyright (C) 2005  Stewart Whitman <swhitman at cox.net>
+/* EasyTAG - Tag editor for MP3 and Ogg Vorbis files
+ * Copyright (C) 2012-1014  David King <amigadave at amigadave.com>
+ * Copyright (C) 2001-2005  Jerome Couderc <easytag at gmail.com>
+ * Copyright (C) 2005  Michael Ihde <mike.ihde at randomwalking.com>
+ * Copyright (C) 2005  Stewart Whitman <swhitman at cox.net>
  *
- *  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
- *  (at your option) any later version.
+ * 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
+ * (at your option) any later version.
  *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
  *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
 #include "config.h" // For definition of ENABLE_MP4
@@ -26,13 +25,10 @@
 
 #include <gtk/gtk.h>
 #include <glib/gi18n.h>
-#include <stdlib.h>
 
 #include "mp4_header.h"
 #include "mp4_tag.h"
 #include "picture.h"
-#include "easytag.h"
-#include "setting.h"
 #include "log.h"
 #include "misc.h"
 #include "et_core.h"
@@ -51,56 +47,53 @@
  *
  * Read tag data into an Mp4 file.
  */
-gboolean Mp4tag_Read_File_Tag (gchar *filename, File_Tag *FileTag)
+gboolean
+mp4tag_read_file_tag (GFile *file,
+                      File_Tag *FileTag,
+                      GError **error)
 {
     TagLib::MP4::Tag *tag;
     guint year;
 
-    g_return_val_if_fail (filename != NULL && FileTag != NULL, FALSE);
+    g_return_val_if_fail (file != NULL && FileTag != NULL, FALSE);
 
     /* Get data from tag. */
-    GFile *file = g_file_new_for_path (filename);
     GIO_InputStream stream (file);
 
     if (!stream.isOpen ())
     {
-        gchar *filename_utf8 = filename_to_display (filename);
-        const GError *error = stream.getError ();
-        Log_Print (LOG_ERROR, _("Error while opening file: '%s' (%s)."),
-                   filename_utf8, error->message);
-        g_free (filename_utf8);
+        const GError *tmp_error = stream.getError ();
+        g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
+                     _("Error while opening file: %s"), tmp_error->message);
         return FALSE;
     }
 
     TagLib::MP4::File mp4file (&stream);
-    g_object_unref (file);
 
     if (!mp4file.isOpen ())
     {
-        gchar *filename_utf8 = filename_to_display (filename);
-        const GError *error = stream.getError ();
+        const GError *tmp_error = stream.getError ();
 
-        if (error)
+        if (tmp_error)
         {
-            Log_Print (LOG_ERROR, _("Error while opening file: '%s' (%s)."),
-                       filename_utf8, error->message);
+            g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
+                         _("Error while opening file: %s"),
+                         tmp_error->message);
         }
         else
         {
-            Log_Print (LOG_ERROR, _("Error while opening file: '%s' (%s)."),
-                       filename_utf8, _("MP4 format invalid"));
+            g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
+                         _("Error while opening file: %s"),
+                         _("MP4 format invalid"));
         }
 
-        g_free (filename_utf8);
         return FALSE;
     }
 
     if (!(tag = mp4file.tag ()))
     {
-        gchar *filename_utf8 = filename_to_display (filename);
-        Log_Print (LOG_ERROR, _("Error reading tags from file: '%s'"),
-                   filename_utf8);
-        g_free (filename_utf8);
+        g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, "%s",
+                     _("Error reading tags from file"));
         return FALSE;
     }
 
@@ -215,7 +208,8 @@ gboolean Mp4tag_Read_File_Tag (gchar *filename, File_Tag *FileTag)
     if (extra_items.contains ("covr"))
     {
         const TagLib::MP4::Item cover = extra_items["covr"];
-        const TagLib::MP4::CoverArt &art = cover.toCoverArtList ().front ();
+        const TagLib::MP4::CoverArtList covers = cover.toCoverArtList ();
+        const TagLib::MP4::CoverArt &art = covers.front ();
 
         FileTag->picture = Picture_Allocate ();
 
@@ -237,11 +231,13 @@ gboolean Mp4tag_Read_File_Tag (gchar *filename, File_Tag *FileTag)
  *
  * Write tag data into an Mp4 file.
  */
-gboolean Mp4tag_Write_File_Tag (ET_File *ETFile)
+gboolean
+mp4tag_write_file_tag (const ET_File *ETFile,
+                       GError **error)
 {
-    File_Tag *FileTag;
-    gchar    *filename;
-    gchar    *filename_utf8;
+    const File_Tag *FileTag;
+    const gchar *filename;
+    const gchar *filename_utf8;
     TagLib::MP4::Tag *tag;
     gboolean success;
 
@@ -258,9 +254,10 @@ gboolean Mp4tag_Write_File_Tag (ET_File *ETFile)
     if (!stream.isOpen ())
     {
         gchar *filename_utf8 = filename_to_display (filename);
-        const GError *error = stream.getError ();
-        Log_Print (LOG_ERROR, _("Error while opening file: '%s' (%s)."),
-                   filename_utf8, error->message);
+        const GError *tmp_error = stream.getError ();
+        g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
+                     _("Error while opening file ‘%s’: %s"), filename_utf8,
+                     tmp_error->message);
         g_free (filename_utf8);
         return FALSE;
     }
@@ -271,27 +268,30 @@ gboolean Mp4tag_Write_File_Tag (ET_File *ETFile)
 
     if (!mp4file.isOpen ())
     {
-        const GError *error = stream.getError ();
+        const GError *tmp_error = stream.getError ();
 
-        if (error)
+        if (tmp_error)
         {
-            Log_Print (LOG_ERROR, _("Error while opening file: '%s' (%s)."),
-                       filename_utf8, error->message);
+            g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
+                         _("Error while opening file ‘%s’: %s"), filename_utf8,
+                         tmp_error->message);
         }
         else
         {
-            Log_Print (LOG_ERROR, _("Error while opening file: '%s' (%s)."),
-                       filename_utf8, _("MP4 format invalid"));
+            g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
+                         _("Error while opening file ‘%s’: %s"), filename_utf8,
+                         _("MP4 format invalid"));
         }
 
+
         return FALSE;
     }
 
     if (!(tag = mp4file.tag ()))
     {
         gchar *filename_utf8 = filename_to_display (filename);
-        Log_Print (LOG_ERROR, _("Error reading tags from file: '%s'"),
-                   filename_utf8);
+        g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
+                     _("Error reading tags from file ‘%s’"), filename_utf8);
         g_free (filename_utf8);
         return FALSE;
     }
@@ -428,6 +428,10 @@ gboolean Mp4tag_Write_File_Tag (ET_File *ETFile)
         TagLib::String string (FileTag->album_artist, TagLib::String::UTF8);
         extra_items.insert ("aART", TagLib::MP4::Item (string));
     }
+    else
+    {
+        extra_items.erase ("aART");
+    }
 
     /***********
      * Picture *
@@ -462,6 +466,10 @@ gboolean Mp4tag_Write_File_Tag (ET_File *ETFile)
         extra_items.insert ("covr",
                             TagLib::MP4::Item (TagLib::MP4::CoverArtList ().append (art)));
     }
+    else
+    {
+        extra_items.erase ("covr");
+    }
 
     tag->setProperties (fields);
     success = mp4file.save () ? TRUE : FALSE;
diff --git a/src/tags/mp4_tag.h b/src/tags/mp4_tag.h
new file mode 100644
index 0000000..8061bcd
--- /dev/null
+++ b/src/tags/mp4_tag.h
@@ -0,0 +1,33 @@
+/* EasyTAG - Tag editor for audio files
+ * Copyright (C) 2012-1014  David King <amigadave at amigadave.com>
+ * Copyright (C) 2001-2005  Jerome Couderc <easytag at gmail.com>
+ * Copyright (C) 2005  Michael Ihde <mike.ihde at randomwalking.com>
+ *
+ * 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
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef ET_MP4_TAG_H_
+#define ET_MP4_TAG_H_
+
+#include "et_core.h"
+
+G_BEGIN_DECLS
+
+gboolean mp4tag_read_file_tag (GFile *file, File_Tag *FileTag, GError **error);
+gboolean mp4tag_write_file_tag (const ET_File *ETFile, GError **error);
+
+G_END_DECLS
+
+#endif /* ET_MP4_TAG_H_ */
diff --git a/src/tags/mpeg_header.c b/src/tags/mpeg_header.c
new file mode 100644
index 0000000..2913b53
--- /dev/null
+++ b/src/tags/mpeg_header.c
@@ -0,0 +1,281 @@
+/* EasyTAG - Tag editor for MP3 and Ogg Vorbis files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ * Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
+ *
+ * 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
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+
+#if defined ENABLE_MP3 && defined ENABLE_ID3LIB
+
+#include <gtk/gtk.h>
+#include <glib/gi18n.h>
+#include <errno.h>
+
+#include "mpeg_header.h"
+#include "misc.h"
+
+#include <id3.h>
+#include "id3lib/id3_bugfix.h"
+
+
+
+/****************
+ * Declarations *
+ ****************/
+static const gchar *layer_names[3] =
+{
+    "I",    /* Layer 1 */
+    "II",   /* Layer 2 */
+    "III"   /* Layer 3 */
+};
+
+static const gchar *
+channel_mode_name (int mode)
+{
+    static const gchar * const channel_mode[] =
+    {
+        N_("Stereo"),
+        N_("Joint stereo"),
+        N_("Dual channel"),
+        N_("Single channel")
+    };
+
+    if (mode < 0 || mode > 3)
+    {
+        return "";
+    }
+
+    return _(channel_mode[mode]);
+}
+
+/*
+ * Read infos into header of first frame
+ */
+gboolean
+et_mpeg_header_read_file_info (GFile *file,
+                               ET_File_Info *ETFileInfo,
+                               GError **error)
+{
+    GFileInfo *info;
+    gchar *filename;
+    /*
+     * With id3lib, the header frame couldn't be read if the file contains an ID3v2 tag with an APIC frame
+     */
+    ID3Tag *id3_tag = NULL;    /* Tag defined by the id3lib */
+    const Mp3_Headerinfo* headerInfo = NULL;
+
+    g_return_val_if_fail (file != NULL || ETFileInfo != NULL, FALSE);
+    g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+    /* Get size of file */
+    info = g_file_query_info (file, G_FILE_ATTRIBUTE_STANDARD_SIZE,
+                              G_FILE_QUERY_INFO_NONE, NULL, error);
+
+    if (!info)
+    {
+        return FALSE;
+    }
+
+    ETFileInfo->size = g_file_info_get_size (info);
+    g_object_unref (info);
+
+    /* Get data from tag */
+    if ((id3_tag = ID3Tag_New()) == NULL)
+    {
+        g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_NOMEM, "%s",
+                     g_strerror (ENOMEM));
+        g_object_unref (info);
+        return FALSE;
+    }
+
+    /* Link the file to the tag (uses ID3TT_ID3V2 to get header if APIC is present in Tag) */
+    filename = g_file_get_path (file);
+    ID3Tag_LinkWithFlags(id3_tag,filename,ID3TT_ID3V2);
+    g_free (filename);
+
+    if ( (headerInfo = ID3Tag_GetMp3HeaderInfo(id3_tag)) )
+    {
+        switch (headerInfo->version)
+        {
+            case MPEGVERSION_1:
+                ETFileInfo->version = 1;
+                ETFileInfo->mpeg25 = FALSE;
+                break;
+            case MPEGVERSION_2:
+                ETFileInfo->version = 2;
+                ETFileInfo->mpeg25 = FALSE;
+                break;
+            case MPEGVERSION_2_5:
+                ETFileInfo->version = 2;
+                ETFileInfo->mpeg25 = TRUE;
+                break;
+            default:
+                break;
+        }
+
+        switch (headerInfo->layer)
+        {
+            case MPEGLAYER_I:
+                ETFileInfo->layer = 1;
+                break;
+            case MPEGLAYER_II:
+                ETFileInfo->layer = 2;
+                break;
+            case MPEGLAYER_III:
+                ETFileInfo->layer = 3;
+                break;
+            default:
+                break;
+        }
+
+        // Samplerate
+        ETFileInfo->samplerate = headerInfo->frequency;
+
+        // Mode -> Seems to be detected but incorrect?!
+        switch (headerInfo->modeext)
+        {
+            case MP3CHANNELMODE_STEREO:
+                ETFileInfo->mode = 0;
+                break;
+            case MP3CHANNELMODE_JOINT_STEREO:
+                ETFileInfo->mode = 1;
+                break;
+            case MP3CHANNELMODE_DUAL_CHANNEL:
+                ETFileInfo->mode = 2;
+                break;
+            case MP3CHANNELMODE_SINGLE_CHANNEL:
+                ETFileInfo->mode = 3;
+                break;
+            default:
+                break;
+        }
+
+        // Bitrate
+        if (headerInfo->vbr_bitrate <= 0)
+        {
+            ETFileInfo->variable_bitrate = FALSE;
+            ETFileInfo->bitrate = headerInfo->bitrate/1000;
+        }else
+        {
+            ETFileInfo->variable_bitrate = TRUE;
+            ETFileInfo->bitrate = headerInfo->vbr_bitrate/1000;
+        }
+
+        // Duration
+        ETFileInfo->duration = headerInfo->time;
+    }
+
+    /* Free allocated data */
+    ID3Tag_Delete(id3_tag);
+
+    return TRUE;
+}
+
+/* For displaying header information in the main window. */
+EtFileHeaderFields *
+et_mpeg_header_display_file_info_to_ui (const ET_File *ETFile)
+{
+    EtFileHeaderFields *fields;
+    ET_File_Info *info;
+    gchar *time = NULL;
+    gchar *time1 = NULL;
+    gchar *size = NULL;
+    gchar *size1 = NULL;
+    gsize ln_num = G_N_ELEMENTS (layer_names);
+
+    info = ETFile->ETFileInfo;
+    fields = g_slice_new (EtFileHeaderFields);
+
+    switch (ETFile->ETFileDescription->FileType)
+    {
+        case MP3_FILE:
+            fields->description = _("MP3 File");
+            break;
+        case MP2_FILE:
+            fields->description = _("MP2 File");
+            break;
+        default:
+            g_assert_not_reached ();
+    }
+
+    /* MPEG, Layer versions */
+    fields->version_label = _("MPEG");
+
+    if (info->mpeg25)
+    {
+        fields->version = g_strdup_printf ("2.5, Layer %s",
+                                           (info->layer >= 1
+                                            && info->layer <= ln_num)
+                                           ? layer_names[info->layer - 1] : "?");
+    }
+    else
+    {
+        fields->version = g_strdup_printf ("%d, Layer %s", info->version,
+                                           (info->layer >= 1
+                                            && info->layer <= ln_num)
+                                           ? layer_names[info->layer - 1] : "?");
+    }
+
+    /* Bitrate */
+    if (info->variable_bitrate)
+    {
+        fields->bitrate = g_strdup_printf (_("~%d kb/s"), info->bitrate);
+    }
+    else
+    {
+        fields->bitrate = g_strdup_printf (_("%d kb/s"), info->bitrate);
+    }
+
+
+    /* Samplerate */
+    fields->samplerate = g_strdup_printf (_("%d Hz"), info->samplerate);
+
+    /* Mode */
+    fields->mode_label = _("Mode:");
+    fields->mode = _(channel_mode_name (info->mode));
+
+    /* Size */
+    size = g_format_size (info->size);
+    size1 = g_format_size (ETCore->ETFileDisplayedList_TotalSize);
+    fields->size = g_strdup_printf ("%s (%s)", size, size1);
+    g_free (size);
+    g_free (size1);
+
+    /* Duration */
+    time = Convert_Duration (info->duration);
+    time1 = Convert_Duration (ETCore->ETFileDisplayedList_TotalDuration);
+    fields->duration = g_strdup_printf ("%s (%s)", time, time1);
+    g_free (time);
+    g_free (time1);
+
+    return fields;
+}
+
+void
+et_mpeg_file_header_fields_free (EtFileHeaderFields *fields)
+{
+    g_return_if_fail (fields != NULL);
+
+    g_free (fields->version);
+    g_free (fields->bitrate);
+    g_free (fields->samplerate);
+    g_free (fields->size);
+    g_free (fields->duration);
+    g_slice_free (EtFileHeaderFields, fields);
+}
+
+#endif /* defined ENABLE_MP3 && defined ENABLE_ID3LIB */
diff --git a/src/tags/mpeg_header.h b/src/tags/mpeg_header.h
new file mode 100644
index 0000000..f80d411
--- /dev/null
+++ b/src/tags/mpeg_header.h
@@ -0,0 +1,33 @@
+/* EasyTAG - Tag editor for audio files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ * Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
+ *
+ * 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
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef ET_MPEG_HEADER_H_
+#define ET_MPEG_HEADER_H_
+
+#include "et_core.h"
+
+G_BEGIN_DECLS
+
+gboolean et_mpeg_header_read_file_info (GFile *file, ET_File_Info *ETFileInfo, GError **error);
+EtFileHeaderFields * et_mpeg_header_display_file_info_to_ui (const ET_File *ETFile);
+void et_mpeg_file_header_fields_free (EtFileHeaderFields *fields);
+
+G_END_DECLS
+
+#endif /* ET_MPEG_HEADER_H_ */
diff --git a/src/tags/musepack_header.c b/src/tags/musepack_header.c
new file mode 100644
index 0000000..a696eda
--- /dev/null
+++ b/src/tags/musepack_header.c
@@ -0,0 +1,124 @@
+/* EasyTAG - Tag editor for audio files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ * Copyright (C) 2001-2003  Jerome Couderc <easytag at gmail.com>
+ * Copyright (C) 2002-2003  Artur Polaczyñski <artii at o2.pl>
+ *
+ * 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
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+
+#include <gtk/gtk.h>
+#include <glib/gi18n.h>
+
+#include "et_core.h"
+#include "misc.h"
+#include "musepack_header.h"
+#include "libapetag/info_mpc.h"
+
+gboolean
+et_mpc_header_read_file_info (GFile *file,
+                              ET_File_Info *ETFileInfo,
+                              GError **error)
+{
+    gchar *filename;
+    StreamInfoMpc Info;
+
+    g_return_val_if_fail (file != NULL && ETFileInfo != NULL, FALSE);
+    g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+    filename = g_file_get_path (file);
+
+    if (info_mpc_read (filename, &Info))
+    {
+        g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, "%s",
+                     _("Error opening Musepack file"));
+        g_free (filename);
+        return FALSE;
+    }
+
+    g_free (filename);
+
+    ETFileInfo->mpc_profile = g_strdup(Info.ProfileName);
+    ETFileInfo->version     = Info.StreamVersion;
+    ETFileInfo->bitrate     = Info.Bitrate/1000.0;
+    ETFileInfo->samplerate  = Info.SampleFreq;
+    ETFileInfo->mode        = Info.Channels;
+    ETFileInfo->size        = Info.FileSize;
+    ETFileInfo->duration    = Info.Duration/1000;
+    ETFileInfo->mpc_version = g_strdup_printf("%s",Info.Encoder);
+
+    return TRUE;
+}
+
+EtFileHeaderFields *
+et_mpc_header_display_file_info_to_ui (const ET_File *ETFile)
+{
+    EtFileHeaderFields *fields;
+    ET_File_Info *info;
+    gchar *time  = NULL;
+    gchar *time1 = NULL;
+    gchar *size  = NULL;
+    gchar *size1 = NULL;
+
+    info = ETFile->ETFileInfo;
+    fields = g_slice_new (EtFileHeaderFields);
+
+    fields->description = _("MusePack File");
+
+    /* Mode changed to profile name  */
+    fields->mode_label = _("Profile:");
+    fields->mode = g_strdup_printf ("%s (SV%d)", info->mpc_profile,
+                                    info->version);
+
+    /* Bitrate */
+    fields->bitrate = g_strdup_printf (_("%d kb/s"), info->bitrate);
+
+    /* Samplerate */
+    fields->samplerate = g_strdup_printf (_("%d Hz"), info->samplerate);
+
+    /* Version changed to encoder version */
+    fields->version_label = _("Encoder:");
+    fields->version = info->mpc_version;
+
+    /* Size */
+    size = g_format_size (info->size);
+    size1 = g_format_size (ETCore->ETFileDisplayedList_TotalSize);
+    fields->size = g_strdup_printf ("%s (%s)", size, size1);
+    g_free (size);
+    g_free (size1);
+
+    /* Duration */
+    time = Convert_Duration (info->duration);
+    time1 = Convert_Duration (ETCore->ETFileDisplayedList_TotalDuration);
+    fields->duration = g_strdup_printf ("%s (%s)", time, time1);
+    g_free (time);
+    g_free (time1);
+
+    return fields;
+}
+
+void
+et_mpc_file_header_fields_free (EtFileHeaderFields *fields)
+{
+    g_return_if_fail (fields != NULL);
+
+    g_free (fields->mode);
+    g_free (fields->bitrate);
+    g_free (fields->samplerate);
+    g_free (fields->size);
+    g_free (fields->duration);
+    g_slice_free (EtFileHeaderFields, fields);
+}
diff --git a/src/tags/musepack_header.h b/src/tags/musepack_header.h
new file mode 100644
index 0000000..33ab473
--- /dev/null
+++ b/src/tags/musepack_header.h
@@ -0,0 +1,34 @@
+/* EasyTAG - Tag editor for audio files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ * Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
+ * Copyright (C) 2002-2003  Artur Polaczyñski <artii at o2.pl>
+ *
+ * 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
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef ET_MUSEPACK_HEADER_H_
+#define ET_MUSEPACK_HEADER_H_
+
+#include "et_core.h"
+
+G_BEGIN_DECLS
+
+gboolean et_mpc_header_read_file_info (GFile *file, ET_File_Info *ETFileInfo, GError **error);
+EtFileHeaderFields * et_mpc_header_display_file_info_to_ui (const ET_File *ETFile);
+void et_mpc_file_header_fields_free (EtFileHeaderFields *fields);
+
+G_END_DECLS
+
+#endif /* ET_MUSEPACK_HEADER_H_ */
diff --git a/src/ogg_header.c b/src/tags/ogg_header.c
similarity index 55%
rename from src/ogg_header.c
rename to src/tags/ogg_header.c
index 915cb3d..9cca686 100644
--- a/src/ogg_header.c
+++ b/src/tags/ogg_header.c
@@ -1,21 +1,20 @@
-/* ogg_header.c - 2003/12/29 */
-/*
- *  EasyTAG - Tag editor for MP3 and Ogg Vorbis files
- *  Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
+/* EasyTAG - Tag editor for audio files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ * Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
  *
- *  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
- *  (at your option) any later version.
+ * 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
+ * (at your option) any later version.
  *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
  *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
 #include "config.h" /* For definition of ENABLE_OGG. */
@@ -33,18 +32,10 @@
 #include "vcedit.h"
 #endif
 
-#include "easytag.h"
 #include "ogg_header.h"
 #include "et_core.h"
-#include "charset.h"
-#include "log.h"
 #include "misc.h"
 
-
-/*************
- * Functions *
- *************/
-
 /*
  * et_ogg_error_quark:
  *
@@ -172,7 +163,6 @@ et_ogg_close_func (void *datasource)
 {
     EtOggState *state = (EtOggState *)datasource;
 
-    g_clear_object (&state->file);
     g_clear_object (&state->istream);
     g_clear_error (&state->error);
 
@@ -196,7 +186,9 @@ et_ogg_tell_func (void *datasource)
 }
 
 gboolean
-Ogg_Header_Read_File_Info (const gchar *filename, ET_File_Info *ETFileInfo)
+et_ogg_header_read_file_info (GFile *file,
+                              ET_File_Info *ETFileInfo,
+                              GError **error)
 {
     OggVorbis_File vf;
     vorbis_info *vi;
@@ -205,28 +197,35 @@ Ogg_Header_Read_File_Info (const gchar *filename, ET_File_Info *ETFileInfo)
     glong rate = 0;
     glong bitrate_nominal = 0;
     gdouble duration = 0;
-    gulong filesize;
     gint res;
     ov_callbacks callbacks = { et_ogg_read_func, et_ogg_seek_func,
                                et_ogg_close_func, et_ogg_tell_func };
     EtOggState state;
-    gchar *filename_utf8;
+    GFileInfo *info;
+
+    g_return_val_if_fail (file != NULL && ETFileInfo != NULL, FALSE);
+    g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
-    g_return_val_if_fail (filename != NULL && ETFileInfo != NULL, FALSE);
+    info = g_file_query_info (file, G_FILE_ATTRIBUTE_STANDARD_SIZE,
+                              G_FILE_QUERY_INFO_NONE, NULL, error);
 
-    state.file = g_file_new_for_path (filename);
+    if (!info)
+    {
+        return FALSE;
+    }
+
+    ETFileInfo->size = g_file_info_get_size (info);
+    g_object_unref (info);
+
+    state.file = file;
     state.error = NULL;
     state.istream = G_INPUT_STREAM (g_file_read (state.file, NULL,
                                                  &state.error));
 
-    filename_utf8 = filename_to_display (filename);
-
     if (!state.istream)
     {
-        /* FIXME: Pass error back to calling function. */
-        Log_Print (LOG_ERROR, _("Error while opening file: '%s' (%s)"),
-                   filename_utf8, state.error->message);
-        g_free (filename_utf8);
+        g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
+                     _("Error while opening file: %s"), state.error->message);
         return FALSE;
     }
 
@@ -238,80 +237,73 @@ Ogg_Header_Read_File_Info (const gchar *filename, ET_File_Info *ETFileInfo)
             channels        = vi->channels;        // Number of channels in bitstream.
             rate            = vi->rate;            // (Hz) Sampling rate of the bitstream.
             bitrate_nominal = vi->bitrate_nominal; // (b/s) Specifies the average bitrate for a VBR bitstream.
-        }else
+        }
+        else
         {
-            Log_Print(LOG_ERROR,_("Ogg Vorbis: The specified bitstream does not exist or the "
-                        "file has been initialized improperly (file: '%s')."),filename_utf8);
+            g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, "%s",
+                         _("The specified bitstream does not exist or the "
+                         "file has been initialized improperly"));
+            et_ogg_close_func (&state);
+            return FALSE;
         }
 
         duration        = ov_time_total(&vf,-1); // (s) Total time.
-        //g_print("play time: %ld s\n",(long)ov_time_total(&vf,-1));
-        //g_print("serialnumber: %ld\n",(long)ov_serialnumber(&vf,-1));
-        //g_print("compressed length: %ld bytes\n",(long)(ov_raw_total(&vf,-1)));
 
-        /***{
-            // Test for displaying comments
-            vorbis_comment *vc = ov_comment(&vf,-1);
-            Log_Print(LOG_OK,">>> %s",filename_utf8);
-            Log_Print(LOG_OK,"Nbr comments : %d",vc->comments);
-            Log_Print(LOG_OK,"Vendor : %s",vc->vendor);
-            char **ptr = vc->user_comments;
-            while(*ptr){
-              Log_Print(LOG_OK,"> %s",*ptr);
-              ++ptr;
-            }
-        }***/
         ov_clear(&vf); // This close also the file
     }else
     {
         /* On error. */
         if (state.error)
         {
-            g_debug ("Ogg Vorbis: error reading header information (%s)",
-                     state.error->message);
+            gchar *message;
+
+            switch (res)
+            {
+                case OV_EREAD:
+                    message = _("Read from media returned an error");
+                    break;
+                case OV_ENOTVORBIS:
+                    message = _("Bitstream is not Vorbis data");
+                    break;
+                case OV_EVERSION:
+                    message = _("Vorbis version mismatch");
+                    break;
+                case OV_EBADHEADER:
+                    message = _("Invalid Vorbis bitstream header");
+                    break;
+                case OV_EFAULT:
+                    message = _("Internal logic fault, indicates a bug or heap/stack corruption");
+                    break;
+                default:
+                    message = "";
+                    break;
+            }
+
+            g_set_error (error, state.error->domain, state.error->code,
+                         "%s", message);
+            et_ogg_close_func (&state);
+            return FALSE;
         }
 
         et_ogg_close_func (&state);
-
-        switch (res)
-        {
-            case OV_EREAD:
-                Log_Print(LOG_ERROR,_("Ogg Vorbis: Read from media returned an error (file: '%s')."),filename_utf8);
-                break;
-            case OV_ENOTVORBIS:
-                Log_Print(LOG_ERROR,_("Ogg Vorbis: Bitstream is not Vorbis data (file: '%s')."),filename_utf8);
-                break;
-            case OV_EVERSION:
-                Log_Print(LOG_ERROR,_("Ogg Vorbis: Vorbis version mismatch (file: '%s')."),filename_utf8);
-                break;
-            case OV_EBADHEADER:
-                Log_Print(LOG_ERROR,_("Ogg Vorbis: Invalid Vorbis bitstream header (file: '%s')."),filename_utf8);
-                break;
-            case OV_EFAULT:
-                Log_Print(LOG_ERROR,_("Ogg Vorbis: Internal logic fault, indicates a bug or heap/stack corruption (file: '%s')."),filename_utf8);
-                break;
-            default:
-                break;
-        }
     }
 
-    filesize = et_get_file_size (filename);
-
     ETFileInfo->version    = encoder_version;
     ETFileInfo->bitrate    = bitrate_nominal/1000;
     ETFileInfo->samplerate = rate;
     ETFileInfo->mode       = channels;
-    ETFileInfo->size       = filesize;
     ETFileInfo->duration   = duration;
 
-    g_free(filename_utf8);
     return TRUE;
 }
 
 
 #ifdef ENABLE_SPEEX
 
-gboolean Speex_Header_Read_File_Info (gchar *filename, ET_File_Info *ETFileInfo)
+gboolean
+et_speex_header_read_file_info (GFile *file,
+                                ET_File_Info *ETFileInfo,
+                                GError **error)
 {
     vcedit_state *state;
     SpeexHeader  *si;
@@ -320,29 +312,35 @@ gboolean Speex_Header_Read_File_Info (gchar *filename, ET_File_Info *ETFileInfo)
     glong rate = 0;
     glong bitrate = 0;
     gdouble duration = 0;
-    gulong filesize;
-    gchar *filename_utf8;
-    GFile *gfile;
-    GError *error = NULL;
+    GFileInfo *info;
+    GError *tmp_error = NULL;
 
-    g_return_val_if_fail (filename != NULL && ETFileInfo != NULL, FALSE);
-
-    filename_utf8 = filename_to_display(filename);
+    g_return_val_if_fail (file != NULL && ETFileInfo != NULL, FALSE);
+    g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
     state = vcedit_new_state();    // Allocate memory for 'state'
-    gfile = g_file_new_for_path (filename);
-    if (!vcedit_open (state, gfile, &error))
+
+    if (!vcedit_open (state, file, &tmp_error))
     {
-        Log_Print (LOG_ERROR,
-                   _("Error: Failed to open file: '%s' as Vorbis (%s)."),
-                   filename_utf8, error->message);
-        g_error_free (error);
-        g_object_unref (gfile);
-        g_free(filename_utf8);
-        vcedit_clear(state);
+        g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
+                     _("Failed to open file as Vorbis: %s"),
+                     tmp_error->message);
+        g_error_free (tmp_error);
+        vcedit_clear (state);
         return FALSE;
     }
 
+    info = g_file_query_info (file, G_FILE_ATTRIBUTE_STANDARD_SIZE,
+                              G_FILE_QUERY_INFO_NONE, NULL, error);
+
+    if (!info)
+    {
+        return FALSE;
+    }
+
+    ETFileInfo->size = g_file_info_get_size (info);
+    g_object_unref (info);
+
     // Get Speex information
     if ( (si=state->si) != NULL )
     {
@@ -358,80 +356,96 @@ gboolean Speex_Header_Read_File_Info (gchar *filename, ET_File_Info *ETFileInfo)
         //g_print("compressed length: %ld bytes\n",(long)(ov_raw_total(&vf,-1)));
     }
 
-    filesize = et_get_file_size (filename);
-
     ETFileInfo->mpc_version = g_strdup(encoder_version);
     ETFileInfo->bitrate     = bitrate/1000;
     ETFileInfo->samplerate  = rate;
     ETFileInfo->mode        = channels;
-    ETFileInfo->size        = filesize;
     //if (bitrate > 0)
     //    ETFileInfo->duration = filesize*8/bitrate/1000; // FIXME : Approximation!! Needs to remove tag size!
     //else
         ETFileInfo->duration   = duration;
 
     vcedit_clear(state);
-    g_object_unref (gfile);
-    g_free(filename_utf8);
     return TRUE;
 }
 #endif
 
-gboolean Ogg_Header_Display_File_Info_To_UI (gchar *filename, ET_File_Info *ETFileInfo)
+EtFileHeaderFields *
+et_ogg_header_display_file_info_to_ui (const ET_File *ETFile)
 {
-    gchar *text;
+    EtFileHeaderFields *fields;
+    ET_File_Info *info;
     gchar *time = NULL;
     gchar *time1 = NULL;
     gchar *size = NULL;
     gchar *size1 = NULL;
 
+    info = ETFile->ETFileInfo;
+    fields = g_slice_new (EtFileHeaderFields);
+
+    switch (ETFile->ETFileDescription->FileType)
+    {
+        case OGG_FILE:
+            fields->description = _("Ogg Vorbis File");
+            break;
+        case SPEEX_FILE:
+            fields->description = _("Speex File");
+            break;
+        default:
+            g_assert_not_reached ();
+    }
+
     /* Encoder version */
-    gtk_label_set_text(GTK_LABEL(VersionLabel),_("Encoder:"));
-    if (!ETFileInfo->mpc_version)
+    fields->version_label = _("Encoder:");
+
+    if (!info->mpc_version)
     {
-        text = g_strdup_printf("%d",ETFileInfo->version);
-        gtk_label_set_text(GTK_LABEL(VersionValueLabel),text);
-        g_free(text);
-    }else
+        fields->version = g_strdup_printf ("%d", info->version);
+    }
+    else
     {
-        gtk_label_set_text(GTK_LABEL(VersionValueLabel),ETFileInfo->mpc_version);
+        fields->version = g_strdup (info->mpc_version);
     }
 
     /* Bitrate */
-    text = g_strdup_printf(_("%d kb/s"),ETFileInfo->bitrate);
-    gtk_label_set_text(GTK_LABEL(BitrateValueLabel),text);
-    g_free(text);
+    fields->bitrate = g_strdup_printf (_("%d kb/s"), info->bitrate);
 
     /* Samplerate */
-    text = g_strdup_printf(_("%d Hz"),ETFileInfo->samplerate);
-    gtk_label_set_text(GTK_LABEL(SampleRateValueLabel),text);
-    g_free(text);
+    fields->samplerate = g_strdup_printf (_("%d Hz"), info->samplerate);
 
     /* Mode */
-    gtk_label_set_text(GTK_LABEL(ModeLabel),_("Channels:"));
-    text = g_strdup_printf("%d",ETFileInfo->mode);
-    gtk_label_set_text(GTK_LABEL(ModeValueLabel),text);
-    g_free(text);
+    fields->mode_label = _("Channels:");
+    fields->mode = g_strdup_printf ("%d", info->mode);
 
     /* Size */
-    size  = g_format_size (ETFileInfo->size);
+    size = g_format_size (info->size);
     size1 = g_format_size (ETCore->ETFileDisplayedList_TotalSize);
-    text  = g_strdup_printf("%s (%s)",size,size1);
-    gtk_label_set_text(GTK_LABEL(SizeValueLabel),text);
-    g_free(size);
-    g_free(size1);
-    g_free(text);
+    fields->size = g_strdup_printf ("%s (%s)", size, size1);
+    g_free (size);
+    g_free (size1);
 
     /* Duration */
-    time  = Convert_Duration(ETFileInfo->duration);
-    time1 = Convert_Duration(ETCore->ETFileDisplayedList_TotalDuration);
-    text  = g_strdup_printf("%s (%s)",time,time1);
-    gtk_label_set_text(GTK_LABEL(DurationValueLabel),text);
-    g_free(time);
-    g_free(time1);
-    g_free(text);
+    time = Convert_Duration (info->duration);
+    time1 = Convert_Duration (ETCore->ETFileDisplayedList_TotalDuration);
+    fields->duration = g_strdup_printf ("%s (%s)", time, time1);
+    g_free (time);
+    g_free (time1);
 
-    return TRUE;
+    return fields;
+}
+
+void
+et_ogg_file_header_fields_free (EtFileHeaderFields *fields)
+{
+    g_return_if_fail (fields != NULL);
+
+    g_free (fields->version);
+    g_free (fields->bitrate);
+    g_free (fields->samplerate);
+    g_free (fields->mode);
+    g_free (fields->size);
+    g_free (fields->duration);
+    g_slice_free (EtFileHeaderFields, fields);
 }
 
 #endif /* ENABLE_OGG */
diff --git a/src/ogg_header.h b/src/tags/ogg_header.h
similarity index 50%
rename from src/ogg_header.h
rename to src/tags/ogg_header.h
index 0817a31..533eea7 100644
--- a/src/ogg_header.h
+++ b/src/tags/ogg_header.h
@@ -1,34 +1,31 @@
-/* ogg_header.h - 2003/12/29 */
-/*
- *  EasyTAG - Tag editor for MP3 and Ogg Vorbis files
- *  Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
+/* EasyTAG - Tag editor for audio files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ * Copyright (C) 2000-2003  Jerome Couderc <easytag at gmail.com>
  *
- *  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
- *  (at your option) any later version.
+ * 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
+ * (at your option) any later version.
  *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
  *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
 
-#ifndef __OGG_HEADER_H__
-#define __OGG_HEADER_H__
+#ifndef ET_OGG_HEADER_H_
+#define ET_OGG_HEADER_H_
 
 
 #include <glib.h>
 #include "et_core.h"
 
-/****************
- * Declarations *
- ****************/
+G_BEGIN_DECLS
 
 /*
  * Error domain and codes for errors while reading/writing OGG files
@@ -72,15 +69,12 @@ typedef enum
     ET_OGG_ERROR_OUTPUT
 } EtOGGError;
 
-/**************
- * Prototypes *
- **************/
-
-gboolean Ogg_Header_Read_File_Info (const gchar *filename,
-                                    ET_File_Info *ETFileInfo);
-gboolean Ogg_Header_Display_File_Info_To_UI (gchar *filename, ET_File_Info *ETFileInfo);
+gboolean et_ogg_header_read_file_info (GFile *file, ET_File_Info *ETFileInfo, GError **error);
+EtFileHeaderFields * et_ogg_header_display_file_info_to_ui (const ET_File *ETFile);
+void et_ogg_file_header_fields_free (EtFileHeaderFields *fields);
 
-gboolean Speex_Header_Read_File_Info        (gchar *filename, ET_File_Info *ETFileInfo);
+gboolean et_speex_header_read_file_info (GFile *file, ET_File_Info *ETFileInfo, GError **error);
 
+G_END_DECLS
 
-#endif /* __OGG_HEADER_H__ */
+#endif /* ET_OGG_HEADER_H_ */
diff --git a/src/ogg_tag.c b/src/tags/ogg_tag.c
similarity index 87%
rename from src/ogg_tag.c
rename to src/tags/ogg_tag.c
index c373584..64eaa17 100644
--- a/src/ogg_tag.c
+++ b/src/tags/ogg_tag.c
@@ -1,21 +1,20 @@
-/* ogg_tag.c - 2001/11/08 */
-/*
- *  EasyTAG - Tag editor for MP3 and Ogg Vorbis files
- *  Copyright (C) 2001-2003  Jerome Couderc <easytag at gmail.com>
+/* EasyTAG - Tag editor for audio files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ * Copyright (C) 2001-2003  Jerome Couderc <easytag at gmail.com>
  *
- *  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
- *  (at your option) any later version.
+ * 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
+ * (at your option) any later version.
  *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
  *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
 #include "config.h" // For definition of ENABLE_OGG
@@ -100,20 +99,6 @@
  * COMMENT     : additional comments of any nature.
  */
 
-
-
-/**************
- * Prototypes *
- **************/
-
-static gboolean Ogg_Write_Delimetered_Tag (vorbis_comment *vc, const gchar *tag_name, gchar *values);
-static gboolean Ogg_Write_Tag (vorbis_comment *vc, const gchar *tag_name, gchar *value);
-static void Ogg_Set_Tag (vorbis_comment *vc, const gchar *tag_name, gchar *value, gboolean split);
-
-/*************
- * Functions *
- *************/
-
 /*
  * convert_to_byte_array:
  * @n: Integer to convert
@@ -300,8 +285,13 @@ et_add_file_tags_from_vorbis_comments (vorbis_comment *vc, File_Tag *FileTag,
     if ( (string = vorbis_comment_query(vc,"DATE",0)) != NULL && g_utf8_strlen(string, -1) > 0 )
     {
         FileTag->year = g_strdup(string);
-        if (g_utf8_strlen(FileTag->year, -1) > 4)
-            Log_Print(LOG_WARNING,_("The year value '%s' seems to be invalid in file '%s'. The information will be lost while saving tag."),FileTag->year,filename_utf8);
+
+        if (g_utf8_strlen (FileTag->year, -1) > 4)
+        {
+            Log_Print (LOG_WARNING,
+                       _("The year value ‘%s’ seems to be invalid in file ‘%s’. The information will be lost when saving"),
+                       FileTag->year, filename_utf8);
+        }
     }
 
     /*************************
@@ -644,27 +634,29 @@ et_add_file_tags_from_vorbis_comments (vorbis_comment *vc, File_Tag *FileTag,
  *  - if field is found but contains no info (strlen(str)==0), we don't read it
  */
 gboolean
-ogg_tag_read_file_tag (gchar *filename, File_Tag *FileTag, GError **error)
+ogg_tag_read_file_tag (GFile *file,
+                       File_Tag *FileTag,
+                       GError **error)
 {
-    GFile *file;
     GFileInputStream *istream;
     vcedit_state   *state;
+    gchar *filename;
     gchar *filename_utf8;
 
-    g_return_val_if_fail (filename != NULL && FileTag != NULL, FALSE);
+    g_return_val_if_fail (file != NULL && FileTag != NULL, FALSE);
     g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
-    file = g_file_new_for_path (filename);
     istream = g_file_read (file, NULL, error);
 
     if (!istream)
     {
-        g_object_unref (file);
         g_assert (error == NULL || *error != NULL);
         return FALSE;
     }
 
+    filename = g_file_get_path (file);
     filename_utf8 = filename_to_display (filename);
+    g_free (filename);
 
     {
     // Skip the id3v2 tag
@@ -703,7 +695,9 @@ ogg_tag_read_file_tag (gchar *filename, File_Tag *FileTag, GError **error)
                     goto err;
                 }
 
-                Log_Print(LOG_ERROR,_("Warning: The Ogg Vorbis file '%s' contains an ID3v2 tag."),filename_utf8);
+                Log_Print (LOG_ERROR,
+                           _("The Ogg Vorbis file ‘%s’ contains an ID3v2 tag"),
+                           filename_utf8);
             }
             else if (!g_seekable_seek (G_SEEKABLE (istream), 0L, G_SEEK_SET,
                                        NULL, error))
@@ -736,7 +730,6 @@ ogg_tag_read_file_tag (gchar *filename, File_Tag *FileTag, GError **error)
     if (!vcedit_open (state, file, error))
     {
         g_assert (error == NULL || *error != NULL);
-        g_object_unref (file);
         vcedit_clear(state);
         g_free (filename_utf8);
         return FALSE;
@@ -754,8 +747,7 @@ ogg_tag_read_file_tag (gchar *filename, File_Tag *FileTag, GError **error)
     et_add_file_tags_from_vorbis_comments (vcedit_comments(state), FileTag,
                                            filename_utf8);
     vcedit_clear(state);
-    g_object_unref (file);
-    g_free(filename_utf8);
+    g_free (filename_utf8);
 
     return TRUE;
 
@@ -763,59 +755,74 @@ err:
     g_assert (error == NULL || *error != NULL);
     g_object_unref (istream);
     g_object_unref (istream);
-    g_object_unref (file);
-    g_free(filename_utf8);
+    g_free (filename_utf8);
     return FALSE;
 }
 
+/*
+ * Save field value in a single tag
+ */
+static void
+et_ogg_write_tag (vorbis_comment *vc,
+                  const gchar *tag_name,
+                  const gchar *value)
+{
+    char *string = g_strconcat (tag_name, value, NULL);
+
+    vorbis_comment_add (vc, string);
+    g_free (string);
+}
 
 /*
  * Save field value in separated tags if it contains multifields
  */
-static gboolean Ogg_Write_Delimetered_Tag (vorbis_comment *vc, const gchar *tag_name, gchar *values)
+static void
+et_ogg_write_delimited_tag (vorbis_comment *vc,
+                            const gchar *tag_name,
+                            const gchar *values)
 {
-    gchar **strings = g_strsplit(values,MULTIFIELD_SEPARATOR,255);
-    unsigned int i=0;
+    gchar **strings;
+    gsize i;
+
+    strings = g_strsplit (values, MULTIFIELD_SEPARATOR, 255);
     
-    for (i=0;i<g_strv_length(strings);i++)
+    for (i = 0; strings[i] != NULL; i++)
     {
-        if (strlen(strings[i])>0)
+        if (*strings[i])
         {
-            Ogg_Write_Tag(vc,tag_name,strings[i]);
+            et_ogg_write_tag (vc, tag_name, strings[i]);
         }
     }
-    g_strfreev(strings);
-    return TRUE;
-}
 
-/*
- * Save field value in a single tag
- */
-static gboolean Ogg_Write_Tag (vorbis_comment *vc, const gchar *tag_name, gchar *value)
-{
-    char *string = g_strconcat(tag_name,value,NULL);
-
-    vorbis_comment_add(vc,string);
-    g_free(string);
-    return TRUE;
+    g_strfreev (strings);
 }
 
-static void Ogg_Set_Tag (vorbis_comment *vc, const gchar *tag_name, gchar *value, gboolean split)
+static void
+et_ogg_set_tag (vorbis_comment *vc,
+                const gchar *tag_name,
+                const gchar *value,
+                gboolean split)
 {
-    if ( value && split ) {
-        Ogg_Write_Delimetered_Tag(vc,tag_name,value);
-    } else if ( value ) {
-        Ogg_Write_Tag(vc,tag_name,value);
+    if (value)
+    {
+        if (split)
+        {
+            et_ogg_write_delimited_tag (vc, tag_name, value);
+        }
+        else
+        {
+            et_ogg_write_tag (vc, tag_name, value);
+        }
     }
 }
 
 gboolean
-ogg_tag_write_file_tag (ET_File *ETFile, GError **error)
+ogg_tag_write_file_tag (const ET_File *ETFile,
+                        GError **error)
 {
-    File_Tag       *FileTag;
-    gchar          *filename;
-    gchar          *filename_utf8;
-    gchar          *basename_utf8;
+    const File_Tag *FileTag;
+    const gchar *filename;
+    const gchar *filename_utf8;
     GFile           *file;
     GFileInputStream *istream;
     vcedit_state   *state;
@@ -878,7 +885,9 @@ ogg_tag_write_file_tag (ET_File *ETFile, GError **error)
                     goto err;
                 }
 
-                Log_Print(LOG_ERROR,_("Warning: The Ogg Vorbis file '%s' contains an ID3v2 tag."),filename_utf8);
+                Log_Print (LOG_ERROR,
+                           _("The Ogg Vorbis file ‘%s’ contains an ID3v2 tag"),
+                           filename_utf8);
             }
             else
             {
@@ -928,76 +937,86 @@ ogg_tag_write_file_tag (ET_File *ETFile, GError **error)
     /*********
      * Title *
      *********/
-    Ogg_Set_Tag(vc,"TITLE=",FileTag->title,VORBIS_SPLIT_FIELD_TITLE);
+    et_ogg_set_tag (vc, "TITLE=", FileTag->title,
+                    g_settings_get_boolean (MainSettings, "ogg-split-title"));
 
     /**********
      * Artist *
      **********/
-    Ogg_Set_Tag(vc,"ARTIST=",FileTag->artist, VORBIS_SPLIT_FIELD_ARTIST);
+    et_ogg_set_tag (vc, "ARTIST=", FileTag->artist,
+                    g_settings_get_boolean (MainSettings, "ogg-split-artist"));
 
     /****************
      * Album Artist *
      ****************/
-    Ogg_Set_Tag(vc,"ALBUMARTIST=",FileTag->album_artist, VORBIS_SPLIT_FIELD_ARTIST);
+    et_ogg_set_tag (vc, "ALBUMARTIST=", FileTag->album_artist,
+                    g_settings_get_boolean (MainSettings, "ogg-split-artist"));
 
     /*********
      * Album *
      *********/
-    Ogg_Set_Tag(vc,"ALBUM=",FileTag->album, VORBIS_SPLIT_FIELD_ALBUM);
+    et_ogg_set_tag (vc, "ALBUM=", FileTag->album,
+                    g_settings_get_boolean (MainSettings, "ogg-split-album"));
 
     /***************
      * Disc Number *
      ***************/
-    Ogg_Set_Tag(vc,"DISCNUMBER=",FileTag->disc_number,FALSE);
-    Ogg_Set_Tag (vc, "DISCTOTAL=", FileTag->disc_total, FALSE);
+    et_ogg_set_tag (vc, "DISCNUMBER=", FileTag->disc_number, FALSE);
+    et_ogg_set_tag (vc, "DISCTOTAL=", FileTag->disc_total, FALSE);
 
     /********
      * Year *
      ********/
-    Ogg_Set_Tag(vc,"DATE=",FileTag->year,FALSE);
+    et_ogg_set_tag (vc, "DATE=", FileTag->year, FALSE);
 
     /*************************
      * Track and Total Track *
      *************************/
-    Ogg_Set_Tag(vc,"TRACKNUMBER=",FileTag->track,FALSE);
-
-    Ogg_Set_Tag(vc,"TRACKTOTAL=",FileTag->track_total,FALSE);
+    et_ogg_set_tag (vc, "TRACKNUMBER=", FileTag->track, FALSE);
+    et_ogg_set_tag (vc, "TRACKTOTAL=", FileTag->track_total, FALSE);
 
     /*********
      * Genre *
      *********/
-    Ogg_Set_Tag(vc,"GENRE=",FileTag->genre,VORBIS_SPLIT_FIELD_GENRE);
+    et_ogg_set_tag (vc, "GENRE=", FileTag->genre,
+                    g_settings_get_boolean (MainSettings, "ogg-split-genre"));
 
     /***********
      * Comment *
      ***********/
     /* Format of new specification. */
-    Ogg_Set_Tag(vc,"DESCRIPTION=",FileTag->comment,VORBIS_SPLIT_FIELD_COMMENT);
+    et_ogg_set_tag (vc, "DESCRIPTION=", FileTag->comment,
+                    g_settings_get_boolean (MainSettings,
+                                            "ogg-split-comment"));
 
     /************
      * Composer *
      ************/
-    Ogg_Set_Tag(vc,"COMPOSER=",FileTag->composer,VORBIS_SPLIT_FIELD_COMPOSER);
+    et_ogg_set_tag (vc ,"COMPOSER=", FileTag->composer,
+                    g_settings_get_boolean (MainSettings,
+                                            "ogg-split-composer"));
 
     /*******************
      * Original artist *
      *******************/
-    Ogg_Set_Tag(vc,"PERFORMER=",FileTag->orig_artist,VORBIS_SPLIT_FIELD_ORIG_ARTIST);
+    et_ogg_set_tag (vc, "PERFORMER=", FileTag->orig_artist,
+                    g_settings_get_boolean (MainSettings,
+                                            "ogg-split-original-artist"));
 
     /*************
      * Copyright *
      *************/
-    Ogg_Set_Tag(vc,"COPYRIGHT=",FileTag->copyright,FALSE);
+    et_ogg_set_tag (vc, "COPYRIGHT=", FileTag->copyright, FALSE);
 
     /*******
      * URL *
      *******/
-    Ogg_Set_Tag (vc, "CONTACT=", FileTag->url, FALSE);
+    et_ogg_set_tag (vc, "CONTACT=", FileTag->url, FALSE);
 
     /**************
      * Encoded by *
      **************/
-    Ogg_Set_Tag(vc,"ENCODED-BY=",FileTag->encoded_by,FALSE);
+    et_ogg_set_tag (vc, "ENCODED-BY=", FileTag->encoded_by, FALSE);
     
     
     /***********
@@ -1027,7 +1046,7 @@ ogg_tag_write_file_tag (ET_File *ETFile, GError **error)
                 if (!gdk_pixbuf_loader_write (loader, pic->data, pic->size,
                                               &error))
                 {
-                    Log_Print (LOG_ERROR, _("Error with 'loader_write': %s"),
+                    Log_Print (LOG_ERROR, _("Error parsing image data ‘%s’"),
                                error->message);
                     g_error_free (error);
                     g_object_unref (loader);
@@ -1042,7 +1061,7 @@ ogg_tag_write_file_tag (ET_File *ETFile, GError **error)
                     if (!gdk_pixbuf_loader_close (loader, &error))
                     {
                         Log_Print (LOG_ERROR,
-                                   _("Error with 'loader_close': %s"),
+                                   _("Error parsing image data ‘%s’"),
                                    error->message);
                         g_error_free (error);
                         g_object_unref (loader);
@@ -1157,11 +1176,7 @@ ogg_tag_write_file_tag (ET_File *ETFile, GError **error)
     }
     else
     {
-        basename_utf8 = g_path_get_basename(filename_utf8);
-        Log_Print(LOG_OK,_("Written tag of '%s'"),basename_utf8);
-        g_free (basename_utf8);
-
-        vcedit_clear(state);
+        vcedit_clear (state);
     }
 
     g_assert (error == NULL || *error == NULL);
diff --git a/src/tags/ogg_tag.h b/src/tags/ogg_tag.h
new file mode 100644
index 0000000..7c9e4dd
--- /dev/null
+++ b/src/tags/ogg_tag.h
@@ -0,0 +1,44 @@
+/* EasyTAG - Tag editor for MP3 and Ogg Vorbis files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ * Copyright (C) 2001-2003  Jerome Couderc <easytag at gmail.com>
+ *
+ * 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
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef ET_OGG_TAG_H_
+#define ET_OGG_TAG_H_
+
+#include "config.h"
+
+#include <glib.h>
+
+#ifdef ENABLE_OGG
+
+#include "vcedit.h"
+#include "et_core.h"
+
+G_BEGIN_DECLS
+
+gboolean ogg_tag_read_file_tag (GFile *file, File_Tag *FileTag, GError **error);
+gboolean ogg_tag_write_file_tag (const ET_File *ETFile, GError **error);
+
+void et_add_file_tags_from_vorbis_comments (vorbis_comment *vc, File_Tag *FileTag, const gchar *filename_utf8);
+void et_add_vorbis_comments_from_file_tags (vorbis_comment *vc, File_Tag *FileTag);
+
+G_END_DECLS
+
+#endif /* ENABLE_OGG */
+
+#endif /* ET_OGG_TAG_H_ */
diff --git a/src/opus_header.c b/src/tags/opus_header.c
similarity index 82%
rename from src/opus_header.c
rename to src/tags/opus_header.c
index a623893..6a8b282 100644
--- a/src/opus_header.c
+++ b/src/tags/opus_header.c
@@ -200,64 +200,71 @@ et_opus_read_file_info (GFile *gfile, ET_File_Info *ETFileInfo,
 
 /*
  * et_opus_header_display_file_info_to_ui:
- * @filename: file to display info of
- * @ETFileInfo: ET_File_Info to display information
+ * @ETFile: ET_File to display information
  *
- * Display header info from ET_File_Info.
+ * Display header info from ET_File.
  *
- * Returns: %TRUE if successful, otherwise %FALSE
+ * Returns: a new #EtFileHeaderFields, free with
+ * et_opus_file_header_fields_free()
  */
-gboolean
-et_opus_header_display_file_info_to_ui (GFile *file,
-                                        ET_File_Info *ETFileInfo)
+EtFileHeaderFields *
+et_opus_header_display_file_info_to_ui (const ET_File *ETFile)
 {
-    gchar *text;
+    EtFileHeaderFields *fields;
+    ET_File_Info *info;
     gchar *time = NULL;
     gchar *time1 = NULL;
     gchar *size = NULL;
     gchar *size1 = NULL;
 
+    info = ETFile->ETFileInfo;
+    fields = g_slice_new (EtFileHeaderFields);
+
+    fields->description = _("Opus File");
+
     /* Encoder version */
-    gtk_label_set_text (GTK_LABEL (VersionLabel), _("Encoder:"));
-    text = g_strdup_printf ("%d", ETFileInfo->version);
-    gtk_label_set_text (GTK_LABEL (VersionValueLabel), text);
-    g_free (text);
+    fields->version_label = _("Encoder:");
+    fields->version = g_strdup_printf ("%d", info->version);
 
     /* Bitrate */
-    text = g_strdup_printf (_("%d kb/s"), ETFileInfo->bitrate);
-    gtk_label_set_text (GTK_LABEL (BitrateValueLabel), text);
-    g_free (text);
+    fields->bitrate = g_strdup_printf (_("%d kb/s"), info->bitrate);
 
     /* Samplerate */
-    text = g_strdup_printf (_("%d Hz"), ETFileInfo->samplerate);
-    gtk_label_set_text (GTK_LABEL (SampleRateValueLabel), text);
-    g_free (text);
+    fields->samplerate = g_strdup_printf (_("%d Hz"), info->samplerate);
 
     /* Mode */
-    gtk_label_set_text (GTK_LABEL (ModeLabel), _("Channels:"));
-    text = g_strdup_printf ("%d", ETFileInfo->mode);
-    gtk_label_set_text (GTK_LABEL (ModeValueLabel), text);
-    g_free (text);
+    fields->mode_label = _("Channels:");
+    fields->mode = g_strdup_printf ("%d", info->mode);
 
     /* Size */
-    size  = g_format_size (ETFileInfo->size);
+    size = g_format_size (info->size);
     size1 = g_format_size (ETCore->ETFileDisplayedList_TotalSize);
-    text  = g_strdup_printf ("%s (%s)", size, size1);
-    gtk_label_set_text (GTK_LABEL (SizeValueLabel), text);
+    fields->size = g_strdup_printf ("%s (%s)", size, size1);
     g_free (size);
     g_free (size1);
-    g_free (text);
 
     /* Duration */
-    time  = Convert_Duration (ETFileInfo->duration);
+    time = Convert_Duration (info->duration);
     time1 = Convert_Duration (ETCore->ETFileDisplayedList_TotalDuration);
-    text  = g_strdup_printf ("%s (%s)", time, time1);
-    gtk_label_set_text (GTK_LABEL (DurationValueLabel), text);
+    fields->duration = g_strdup_printf ("%s (%s)", time, time1);
     g_free (time);
     g_free (time1);
-    g_free (text);
 
-    return TRUE;
+    return fields;
+}
+
+void
+et_opus_file_header_fields_free (EtFileHeaderFields *fields)
+{
+    g_return_if_fail (fields != NULL);
+
+    g_free (fields->version);
+    g_free (fields->bitrate);
+    g_free (fields->samplerate);
+    g_free (fields->mode);
+    g_free (fields->size);
+    g_free (fields->duration);
+    g_slice_free (EtFileHeaderFields, fields);
 }
 
 #endif /* ENABLE_OPUS */
diff --git a/src/opus_header.h b/src/tags/opus_header.h
similarity index 93%
rename from src/opus_header.h
rename to src/tags/opus_header.h
index 8feb0f6..7d45956 100644
--- a/src/opus_header.h
+++ b/src/tags/opus_header.h
@@ -60,6 +60,7 @@ typedef enum
 
 gboolean et_opus_read_file_info (GFile *gfile, ET_File_Info *ETFileInfo, GError **error);
 OggOpusFile * et_opus_open_file (GFile *gfile, GError **error);
-gboolean et_opus_header_display_file_info_to_ui (GFile *gfile, ET_File_Info *ETFileInfo);
+EtFileHeaderFields * et_opus_header_display_file_info_to_ui (const ET_File *ETFile);
+void et_opus_file_header_fields_free (EtFileHeaderFields *fields);
 
 #endif /* ET_OPUS_HEADER_H_ */
diff --git a/src/opus_tag.c b/src/tags/opus_tag.c
similarity index 100%
rename from src/opus_tag.c
rename to src/tags/opus_tag.c
diff --git a/src/opus_tag.h b/src/tags/opus_tag.h
similarity index 100%
rename from src/opus_tag.h
rename to src/tags/opus_tag.h
diff --git a/src/vcedit.c b/src/tags/vcedit.c
similarity index 99%
rename from src/vcedit.c
rename to src/tags/vcedit.c
index 06e7caa..eb0a062 100644
--- a/src/vcedit.c
+++ b/src/tags/vcedit.c
@@ -89,7 +89,7 @@ void vcedit_clear(vcedit_state *state)
 /* Next two functions pulled straight from libvorbis, apart from one change
  * - we don't want to overwrite the vendor string.
  */
-static void _v_writestring(oggpack_buffer *o,char *s, int len)
+static void _v_writestring(oggpack_buffer *o, const char *s, int len)
 {
     while(len--)
     {
diff --git a/src/vcedit.h b/src/tags/vcedit.h
similarity index 100%
rename from src/vcedit.h
rename to src/tags/vcedit.h
diff --git a/src/tags/wavpack_header.c b/src/tags/wavpack_header.c
new file mode 100644
index 0000000..e90102a
--- /dev/null
+++ b/src/tags/wavpack_header.c
@@ -0,0 +1,131 @@
+/* EasyTAG - Tag editor for audio files.
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ * Copyright (C) 2007 Maarten Maathuis (madman2003 at gmail.com)
+ *
+ * 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
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+
+#ifdef ENABLE_WAVPACK
+
+#include <gtk/gtk.h>
+#include <glib/gi18n.h>
+#include <wavpack/wavpack.h>
+
+#include "easytag.h"
+#include "et_core.h"
+#include "misc.h"
+#include "wavpack_header.h"
+
+
+gboolean
+et_wavpack_header_read_file_info (GFile *file,
+                                  ET_File_Info *ETFileInfo,
+                                  GError **error)
+{
+    gchar *filename;
+    WavpackContext *wpc;
+    gchar message[80];
+
+    g_return_val_if_fail (file != NULL && ETFileInfo != NULL, FALSE);
+    g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+    /* TODO: Use WavpackOpenFileInputEx() instead. */
+    filename = g_file_get_path (file);
+    wpc = WavpackOpenFileInput (filename, message, 0, 0);
+    g_free (filename);
+
+    if (wpc == NULL)
+    {
+        g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, "%s", message);
+        return FALSE;
+    }
+
+    ETFileInfo->version     = WavpackGetVersion(wpc);
+    /* .wvc correction file not counted */
+    ETFileInfo->bitrate     = WavpackGetAverageBitrate(wpc, 0)/1000;
+    ETFileInfo->samplerate  = WavpackGetSampleRate(wpc);
+    ETFileInfo->mode        = WavpackGetNumChannels(wpc);
+    ETFileInfo->size        = WavpackGetFileSize(wpc);
+    ETFileInfo->duration    = WavpackGetNumSamples(wpc)/ETFileInfo->samplerate;
+
+    WavpackCloseFile(wpc);
+
+    return TRUE;
+}
+
+EtFileHeaderFields *
+et_wavpack_header_display_file_info_to_ui (const ET_File *ETFile)
+{
+    EtFileHeaderFields *fields;
+    ET_File_Info *info;
+    gchar *time = NULL;
+    gchar *time1 = NULL;
+    gchar *size = NULL;
+    gchar *size1 = NULL;
+
+    info = ETFile->ETFileInfo;
+    fields = g_slice_new (EtFileHeaderFields);
+
+    fields->description = _("Wavpack File");
+
+    /* Encoder version */
+    fields->version_label = _("Encoder:");
+    fields->version = g_strdup_printf ("%d", info->version);
+
+    /* Bitrate */
+    fields->bitrate = g_strdup_printf (_("%d kb/s"), info->bitrate);
+
+    /* Samplerate */
+    fields->samplerate = g_strdup_printf (_("%d Hz"), info->samplerate);
+
+    /* Mode */
+    fields->mode_label = _("Channels:");
+    fields->mode = g_strdup_printf ("%d", info->mode);
+    g_free (fields->mode);
+
+    /* Size */
+    size = g_format_size (info->size);
+    size1 = g_format_size (ETCore->ETFileDisplayedList_TotalSize);
+    fields->size = g_strdup_printf ("%s (%s)", size, size1);
+    g_free (size);
+    g_free (size1);
+
+    /* Duration */
+    time = Convert_Duration (info->duration);
+    time1 = Convert_Duration (ETCore->ETFileDisplayedList_TotalDuration);
+    fields->duration = g_strdup_printf ("%s (%s)", time, time1);
+    g_free (time);
+    g_free (time1);
+
+    return fields;
+}
+
+void
+et_wavpack_file_header_fields_free (EtFileHeaderFields *fields)
+{
+    g_return_if_fail (fields != NULL);
+
+    g_free (fields->version);
+    g_free (fields->bitrate);
+    g_free (fields->samplerate);
+    g_free (fields->mode);
+    g_free (fields->size);
+    g_free (fields->duration);
+    g_slice_free (EtFileHeaderFields, fields);
+}
+
+#endif /* ENABLE_WAVPACK */
diff --git a/src/tags/wavpack_header.h b/src/tags/wavpack_header.h
new file mode 100644
index 0000000..c65330b
--- /dev/null
+++ b/src/tags/wavpack_header.h
@@ -0,0 +1,33 @@
+/* EasyTAG - Tag editor for audio files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ * Copyright (C) 2007 Maarten Maathuis (madman2003 at gmail.com)
+ *
+ * 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
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef ET_WAVPACK_HEADER_H_
+#define ET_WAVPACK_HEADER_H_
+
+#include "et_core.h"
+
+G_BEGIN_DECLS
+
+gboolean et_wavpack_header_read_file_info (GFile *file, ET_File_Info *ETFileInfo, GError **error);
+EtFileHeaderFields * et_wavpack_header_display_file_info_to_ui (const ET_File *ETFile);
+void et_wavpack_file_header_fields_free (EtFileHeaderFields *fields);
+
+G_END_DECLS
+
+#endif /* ET_WAVPACK_HEADER_H_ */
diff --git a/src/wavpack_tag.c b/src/tags/wavpack_tag.c
similarity index 84%
rename from src/wavpack_tag.c
rename to src/tags/wavpack_tag.c
index cc2a4c2..f9a81aa 100644
--- a/src/wavpack_tag.c
+++ b/src/tags/wavpack_tag.c
@@ -38,6 +38,7 @@
 #include "misc.h"
 #include "wavpack_tag.h"
 
+#define MAXLEN 1024
 
 /*
  * For the APEv2 tags, the following field names are officially supported and
@@ -63,19 +64,30 @@
 /*
  * Read tag data from a Wavpack file.
  */
-gboolean Wavpack_Tag_Read_File_Tag (gchar *filename, File_Tag *FileTag)
+gboolean
+wavpack_tag_read_file_tag (GFile *file,
+                           File_Tag *FileTag,
+                           GError **error)
 {
+    gchar *filename;
     WavpackContext *wpc;
+    gchar message[80];
     gchar *field, *field2;
     guint length;
 
     int open_flags = OPEN_TAGS;
 
-    g_return_val_if_fail (filename != NULL && FileTag != NULL, FALSE);
+    g_return_val_if_fail (file != NULL && FileTag != NULL, FALSE);
+    g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
-    wpc = WavpackOpenFileInput(filename, NULL, open_flags, 0);
+    /* TODO: Use WavpackOpenFileInputEx() instead. */
+    filename = g_file_get_path (file);
+    wpc = WavpackOpenFileInput (filename, message, open_flags, 0);
+    g_free (filename);
 
-    if ( wpc == NULL ) {
+    if (wpc == NULL)
+    {
+        g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, "%s", message);
         return FALSE;
     }
 
@@ -265,22 +277,28 @@ gboolean Wavpack_Tag_Read_File_Tag (gchar *filename, File_Tag *FileTag)
     return TRUE;
 }
 
-
-gboolean Wavpack_Tag_Write_File_Tag (ET_File *ETFile)
+gboolean
+wavpack_tag_write_file_tag (const ET_File *ETFile,
+                            GError **error)
 {
+    const gchar *filename;
+    const File_Tag *FileTag;
     WavpackContext *wpc;
-
-    gchar    *filename = ((File_Name *)((GList *)ETFile->FileNameCur)->data)->value;
-    File_Tag *FileTag  = (File_Tag *)ETFile->FileTag->data;
-    gchar    *buffer;
-
-    int open_flags = OPEN_EDIT_TAGS;
+    gchar message[80];
+    gchar *buffer;
 
     g_return_val_if_fail (ETFile != NULL && ETFile->FileTag != NULL, FALSE);
+    g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+    filename = ((File_Name *)((GList *)ETFile->FileNameCur)->data)->value;
+    FileTag = (File_Tag *)ETFile->FileTag->data;
 
-    wpc = WavpackOpenFileInput(filename, NULL, open_flags, 0);
+    /* TODO: Use WavpackOpenFileInputEx() instead. */
+    wpc = WavpackOpenFileInput (filename, message, OPEN_EDIT_TAGS, 0);
 
-    if ( wpc == NULL ) {
+    if (wpc == NULL)
+    {
+        g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, "%s", message);
         return FALSE;
     }
 
@@ -288,21 +306,21 @@ gboolean Wavpack_Tag_Write_File_Tag (ET_File *ETFile)
      * Title
      */
     if (FileTag->title && WavpackAppendTagItem(wpc, "title", FileTag->title, strlen(FileTag->title)) == 0) {
-        return FALSE;
+        goto err;
     }
 
     /*
      * Artist
      */
     if (FileTag->artist && WavpackAppendTagItem(wpc, "artist", FileTag->artist, strlen(FileTag->artist)) == 0) {
-        return FALSE;
+        goto err;
     }
 
     /*
      * Album
      */
     if (FileTag->album && WavpackAppendTagItem(wpc, "album", FileTag->album, strlen(FileTag->album)) == 0) {
-        return FALSE;
+        goto err;
     }
 
     /*
@@ -316,7 +334,7 @@ gboolean Wavpack_Tag_Write_File_Tag (ET_File *ETFile)
         if (WavpackAppendTagItem (wpc, "part", buffer, strlen (buffer)) == 0)
         {
             g_free (buffer);
-            return FALSE;
+            goto err;
         }
         else
         {
@@ -329,7 +347,7 @@ gboolean Wavpack_Tag_Write_File_Tag (ET_File *ETFile)
                                                           FileTag->disc_number,
                                                           strlen (FileTag->disc_number)) == 0)
         {
-            return FALSE;
+            goto err;
         }
     }
 
@@ -337,7 +355,7 @@ gboolean Wavpack_Tag_Write_File_Tag (ET_File *ETFile)
      * Year
      */
     if (FileTag->year && WavpackAppendTagItem(wpc, "year", FileTag->year, strlen(FileTag->year)) == 0) {
-        return FALSE;
+        goto err;
     }
 
     /*
@@ -347,13 +365,13 @@ gboolean Wavpack_Tag_Write_File_Tag (ET_File *ETFile)
         buffer = g_strdup_printf("%s/%s", FileTag->track, FileTag->track_total);
         if (FileTag->track && WavpackAppendTagItem(wpc, "track", buffer, strlen(buffer)) == 0) {
             g_free(buffer);
-            return FALSE;
+            goto err;
         } else {
             g_free(buffer);
         }
     } else {
         if (FileTag->track && WavpackAppendTagItem(wpc, "track", FileTag->track, strlen(FileTag->track)) == 0) {
-            return FALSE;
+            goto err;
         }
     }
 
@@ -361,57 +379,65 @@ gboolean Wavpack_Tag_Write_File_Tag (ET_File *ETFile)
      * Genre
      */
     if (FileTag->genre && WavpackAppendTagItem(wpc, "genre", FileTag->genre, strlen(FileTag->genre)) == 0) {
-        return FALSE;
+        goto err;
     }
 
     /*
      * Comment
      */
     if (FileTag->comment && WavpackAppendTagItem(wpc, "comment", FileTag->comment, strlen(FileTag->comment)) == 0) {
-        return FALSE;
+        goto err;
     }
 
     /*
      * Composer
      */
     if (FileTag->composer && WavpackAppendTagItem(wpc, "composer", FileTag->composer, strlen(FileTag->composer)) == 0) {
-        return FALSE;
+        goto err;
     }
 
     /*
      * Original artist
      */
     if (FileTag->orig_artist && WavpackAppendTagItem(wpc, "original artist", FileTag->orig_artist, strlen(FileTag->orig_artist)) == 0) {
-        return FALSE;
+        goto err;
     }
 
     /*
      * Copyright
      */
     if (FileTag->copyright && WavpackAppendTagItem(wpc, "copyright", FileTag->copyright, strlen(FileTag->copyright)) == 0) {
-        return FALSE;
+        goto err;
     }
 
     /*
      * URL
      */
     if (FileTag->url && WavpackAppendTagItem(wpc, "copyright url", FileTag->url, strlen(FileTag->url)) == 0) {
-        return FALSE;
+        goto err;
     }
 
     /*
      * Encoded by
      */
     if (FileTag->encoded_by && WavpackAppendTagItem(wpc, "encoded by", FileTag->encoded_by, strlen(FileTag->encoded_by)) == 0) {
-        return FALSE;
+        goto err;
     }
 
-    WavpackWriteTag(wpc);
+    if (WavpackWriteTag (wpc) != 0)
+    {
+        goto err;
+    }
 
-    WavpackCloseFile(wpc);
+    WavpackCloseFile (wpc);
 
     return TRUE;
-}
 
+err:
+    g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, "%s",
+                 WavpackGetErrorMessage (wpc));
+    WavpackCloseFile (wpc);
+    return FALSE;
+}
 
 #endif /* ENABLE_WAVPACK */
diff --git a/src/tags/wavpack_tag.h b/src/tags/wavpack_tag.h
new file mode 100644
index 0000000..0a316c0
--- /dev/null
+++ b/src/tags/wavpack_tag.h
@@ -0,0 +1,33 @@
+/* EasyTAG - Tag editor for audio files
+ * Copyright (C) 2014  David King <amigadave at amigadave.com>
+ * Copyright (C) 2007 Maarten Maathuis (madman2003 at gmail.com)
+ *
+ * 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
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef ET_WAVPACK_TAG_H_
+#define ET_WAVPACK_TAG_H_
+
+#include <glib.h>
+#include "et_core.h"
+
+G_BEGIN_DECLS
+
+gboolean wavpack_tag_read_file_tag (GFile *file, File_Tag *FileTag, GError **error);
+gboolean wavpack_tag_write_file_tag (const ET_File *ETFile, GError **error);
+
+G_END_DECLS
+
+#endif /* ET_WAVPACK_TAG_H_ */
diff --git a/src/ui_manager.h b/src/ui_manager.h
deleted file mode 100644
index c3d5454..0000000
--- a/src/ui_manager.h
+++ /dev/null
@@ -1,352 +0,0 @@
-/*
- * - bar.h : defines constant associated to the action "<menuitem action="
- * - bar.c : Create_UI() does the actions
- */
-
-static const gchar *ui_xml =
-"<ui>"
-
-/*
- * Menu bar
- */
-"  <menubar name='MenuBar'>"
-"    <menu action='FileMenu'>"
-
-"      <menuitem action='OpenFile' />"
-"      <menuitem action='RunAudio' />"
-"      <separator />"
-
-"      <menuitem action='SelInv' />"
-"      <separator />"
-
-"      <menuitem action='DeleteFile' />"
-"      <separator />"
-
-"      <menuitem action='UndoFile' />"
-"      <menuitem action='RedoFile' />"
-"      <menuitem action='SaveFile' />"
-"      <menuitem action='SaveFileForced' />"
-"      <separator />"
-
-"      <menuitem action='Quit' />"
-"    </menu>"
-
-
-"    <menu action='EditMenu'>"
-"      <menuitem action='SearchFile' />"
-"      <menuitem action='SelAll' />"
-"      <menuitem action='UnselAll' />"
-"      <separator />"
-
-"      <menuitem action='Undo' />"
-"      <menuitem action='Redo' />"
-"      <separator />"
-
-"      <menuitem action='RemoveTag' />"
-"      <separator />"
-
-"      <menuitem action='Preferences' />"
-"    </menu>"
-
-"    <menu action='ViewMenu'>"
-"      <menuitem action='ShowScanner' />"
-"      <menu action='ScannerMenu'>"
-"        <menuitem action='FillTag' />"
-"        <menuitem action='RenameFile' />"
-"        <menuitem action='ProcessFields' />"
-"      </menu>"
-"      <separator />"
-
-"      <menuitem action='TreeViewMode'/>"
-"      <menuitem action='ArtistViewMode'/>"
-"      <separator />"
-
-"      <menu action='SortTagMenu'>"
-"        <menuitem action='SortTrackNumAsc' />"
-"        <menuitem action='SortTrackNumDesc' />"
-"        <separator />"
-"        <menuitem action='SortTitleAsc' />"
-"        <menuitem action='SortTitleDesc' />"
-"        <separator />"
-"        <menuitem action='SortArtistAsc' />"
-"        <menuitem action='SortArtistDesc' />"
-"        <separator />"
-"        <menuitem action='SortAlbumArtistAsc' />"
-"        <menuitem action='SortAlbumArtistDesc' />"
-"        <separator />"
-"        <menuitem action='SortAlbumAsc' />"
-"        <menuitem action='SortAlbumDesc' />"
-"        <separator />"
-"        <menuitem action='SortYearAsc' />"
-"        <menuitem action='SortYearDesc' />"
-"        <separator />"
-"        <menuitem action='SortYearAsc' />"
-"        <menuitem action='SortYearDesc' />"
-"        <separator />"
-"        <menuitem action='SortGenreAsc' />"
-"        <menuitem action='SortGenreDesc' />"
-"        <separator />"
-"        <menuitem action='SortCommentAsc' />"
-"        <menuitem action='SortCommentDesc' />"
-"        <separator />"
-"        <menuitem action='SortComposerAsc' />"
-"        <menuitem action='SortComposerDesc' />"
-"        <separator />"
-"        <menuitem action='SortOrigArtistAsc' />"
-"        <menuitem action='SortOrigArtistDesc' />"
-"        <separator />"
-"        <menuitem action='SortCopyrightAsc' />"
-"        <menuitem action='SortCopyrightDesc' />"
-"        <separator />"
-"        <menuitem action='SortUrlAsc' />"
-"        <menuitem action='SortUrlDesc' />"
-"        <separator />"
-"        <menuitem action='SortEncodedByAsc' />"
-"        <menuitem action='SortEncodedByDesc' />"
-"      </menu>"
-
-"      <menu action='SortPropMenu'>"
-"        <menuitem action='SortFilenameAsc' />"
-"        <menuitem action='SortFilenameDesc' />"
-"        <separator />"
-"        <menuitem action='SortDateAsc' />"
-"        <menuitem action='SortDateDesc' />"
-"        <separator />"
-"        <menuitem action='SortTypeAsc' />"
-"        <menuitem action='SortTypeDesc' />"
-"        <separator />"
-"        <menuitem action='SortSizeAsc' />"
-"        <menuitem action='SortSizeDesc' />"
-"        <separator />"
-"        <menuitem action='SortDurationAsc' />"
-"        <menuitem action='SortDurationDesc' />"
-"        <separator />"
-"        <menuitem action='SortBitrateAsc' />"
-"        <menuitem action='SortBitrateDesc' />"
-"        <separator />"
-"        <menuitem action='SortSamplerateAsc' />"
-"        <menuitem action='SortSamplerateDesc' />"
-"      </menu>"
-"      <separator />"
-
-"      <menuitem action='CollapseTree' />"
-"      <menuitem action='RefreshTree' />"
-"      <separator />"
-
-"      <menuitem action='ReloadDir' />"
-"      <separator />"
-
-#ifndef G_OS_WIN32
-"      <menuitem action='BrowseHiddenDir' />"
-#endif /* !G_OS_WIN32 */
-"    </menu>"
-
-"    <menu action='BrowserMenu'>"
-"      <menuitem action='SetDefaultPath' />"
-"      <separator />"
-
-"      <menuitem action='RenameDir' />"
-"      <menuitem action='BrowseDir' />"
-"      <separator />"
-
-"      <menuitem action='BrowseSubdir' />"
-"    </menu>"
-
-"    <menu action='MiscMenu'>"
-"      <menuitem action='CDDBSearch' />"
-"      <separator />"
-
-"      <menuitem action='LoadFilenames' />"
-"      <menuitem action='WritePlaylist' />"
-"    </menu>"
-
-"    <menu action='GoMenu'>"
-"      <menuitem action='GoToHome' />"
-"      <menuitem action='GoToDesktop' />"
-"      <menuitem action='GoToDocument' />"
-"      <menuitem action='GoToDownload' />"
-"      <menuitem action='GoToMusic' />"
-"      <menuitem action='GoToParent' />"
-"      <menuitem action='GoToDefaultPath' />"
-"      <separator />"
-
-"      <menuitem action='FirstFile' />"
-"      <menuitem action='PreviousFile' />"
-"      <menuitem action='NextFile' />"
-"      <menuitem action='LastFile' />"
-"    </menu>"
-
-"    <menu action='HelpMenu'>"
-#ifndef G_OS_WIN32
-"      <menuitem action='HelpContents' />"
-#endif /* !G_OS_WIN32 */
-"      <menuitem action='About' />"
-"    </menu>"
-
-"  </menubar>"
-
-
-/*
- * Tool bar
- */
-"  <toolbar name='ToolBar'>"
-"    <toolitem action='FirstFile'/>"
-"    <toolitem action='PreviousFile'/>"
-"    <toolitem action='NextFile'/>"
-"    <toolitem action='LastFile'/>"
-"    <separator />"
-
-"    <toolitem action='ShowScanner'/>"
-"    <toolitem action='RemoveTag'/>"
-"    <toolitem action='UndoFile'/>"
-"    <toolitem action='RedoFile'/>"
-"    <toolitem action='SaveFile'/>"
-"    <separator />"
-
-"    <toolitem action='TreeViewMode'/>"
-"    <toolitem action='ArtistViewMode'/>"
-"    <separator />"
-
-"    <toolitem action='SelInv'/>"
-"    <separator />"
-
-"    <toolitem action='SearchFile' />"
-"    <toolitem action='CDDBSearch' />"
-"    <toolitem action='WritePlaylist' />"
-"    <separator />"
-
-"    <toolitem action='Stop'/>"
-"  </toolbar>"
-
-
-/*
- * Popup menus
- */
-// Popup in file list
-"  <popup name='FilePopup'>"
-"    <menuitem action='SelAll' />"
-"    <menuitem action='UnselAll' />"
-"    <menuitem action='SelInv' />"
-"    <separator />"
-"    <menuitem action='RunAudio' />"
-"    <separator />"
-"    <menu action='ScannerSubpopup'>"
-"      <menuitem action='ShowScanner' />"
-"    </menu>"
-"    <menuitem action='CDDBSearchFile' />"
-"    <menuitem action='SearchFile' />"
-"    <menuitem action='DeleteFile' />"
-"    <menuitem action='ReloadDir' />"
-"    <menuitem action='OpenFile' />"
-"    <separator />"
-
-"    <menu action='SortTagMenu'>"
-"      <menuitem action='SortTrackNumAsc' />"
-"      <menuitem action='SortTrackNumDesc' />"
-"      <separator />"
-"      <menuitem action='SortTitleAsc' />"
-"      <menuitem action='SortTitleDesc' />"
-"      <separator />"
-"      <menuitem action='SortArtistAsc' />"
-"      <menuitem action='SortArtistDesc' />"
-"      <separator />"
-"      <menuitem action='SortAlbumArtistAsc' />"
-"      <menuitem action='SortAlbumArtistDesc' />"
-"      <separator />"
-"      <menuitem action='SortAlbumAsc' />"
-"      <menuitem action='SortAlbumDesc' />"
-"      <separator />"
-"      <menuitem action='SortYearAsc' />"
-"      <menuitem action='SortYearDesc' />"
-"      <separator />"
-"      <menuitem action='SortYearAsc' />"
-"      <menuitem action='SortYearDesc' />"
-"      <separator />"
-"      <menuitem action='SortGenreAsc' />"
-"      <menuitem action='SortGenreDesc' />"
-"      <separator />"
-"      <menuitem action='SortCommentAsc' />"
-"      <menuitem action='SortCommentDesc' />"
-"      <separator />"
-"      <menuitem action='SortComposerAsc' />"
-"      <menuitem action='SortComposerDesc' />"
-"      <separator />"
-"      <menuitem action='SortOrigArtistAsc' />"
-"      <menuitem action='SortOrigArtistDesc' />"
-"      <separator />"
-"      <menuitem action='SortCopyrightAsc' />"
-"      <menuitem action='SortCopyrightDesc' />"
-"      <separator />"
-"      <menuitem action='SortUrlAsc' />"
-"      <menuitem action='SortUrlDesc' />"
-"      <separator />"
-"      <menuitem action='SortEncodedByAsc' />"
-"      <menuitem action='SortEncodedByDesc' />"
-"      <separator />"
-"    </menu>"
-
-"    <menu action='SortPropMenu'>"
-"      <menuitem action='SortFilenameAsc' />"
-"      <menuitem action='SortFilenameDesc' />"
-"      <separator />"
-"      <menuitem action='SortDateAsc' />"
-"      <menuitem action='SortDateDesc' />"
-"      <separator />"
-"      <menuitem action='SortTypeAsc' />"
-"      <menuitem action='SortTypeDesc' />"
-"      <separator />"
-"      <menuitem action='SortSizeAsc' />"
-"      <menuitem action='SortSizeDesc' />"
-"      <separator />"
-"      <menuitem action='SortDurationAsc' />"
-"      <menuitem action='SortDurationDesc' />"
-"      <separator />"
-"      <menuitem action='SortBitrateAsc' />"
-"      <menuitem action='SortBitrateDesc' />"
-"      <separator />"
-"      <menuitem action='SortSamplerateAsc' />"
-"      <menuitem action='SortSamplerateDesc' />"
-"    </menu>"
-"  </popup>"
-
-// Popup in browser tree
-"  <popup name='DirPopup'>"
-"    <menuitem action='DirPopupRunAudio' />"
-"    <separator />"
-"    <menuitem action='GoToHome' />"
-"    <menuitem action='GoToDefaultPath' />"
-"    <menuitem action='SetDefaultPath' />"
-"    <separator />"
-"    <menuitem action='RenameDir' />"
-"    <menuitem action='ReloadDir' />"
-"    <menuitem action='BrowseDir' />"
-"    <separator />"
-"    <menuitem action='BrowseSubdir' />"
-#ifndef G_OS_WIN32
-"    <menuitem action='BrowseHiddenDir' />"
-#endif /* !G_OS_WIN32 */
-"    <separator />"
-"    <menuitem action='CollapseTree' />"
-"    <menuitem action='RefreshTree' />"
-"  </popup>"
-
-// Popup in browser artist list
-"  <popup name='DirArtistPopup'>"
-"    <menuitem action='ArtistRunAudio' />"
-//"    <separator />"
-//"    <menuitem action='ArtistOpenFile' />"
-"  </popup>"
-
-// Popup in browser album list
-"  <popup name='DirAlbumPopup'>"
-"    <menuitem action='AlbumRunAudio' />"
-//"    <separator />"
-//"    <menuitem action='AlbumOpenFile' />"
-"  </popup>"
-
-// Popup in Log list
-"  <popup name='LogPopup'>"
-"    <menuitem action='CleanLog' />"
-"  </popup>"
-
-"</ui>";
diff --git a/src/wavpack_header.c b/src/wavpack_header.c
deleted file mode 100644
index 3a0fb3a..0000000
--- a/src/wavpack_header.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/* wavpack_header.c - 2007/02/15 */
-/*
- *  EasyTAG - Tag editor for many file types
- *  Copyright (C) 2007 Maarten Maathuis (madman2003 at gmail.com)
- *
- *  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
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include <config.h>
-
-#ifdef ENABLE_WAVPACK
-
-#include <gtk/gtk.h>
-#include <glib/gi18n.h>
-#include <stdio.h>
-#include <errno.h>
-#include <string.h>
-#include <wavpack/wavpack.h>
-
-#include "easytag.h"
-#include "et_core.h"
-#include "misc.h"
-#include "charset.h"
-#include "wavpack_header.h"
-
-
-gboolean Wavpack_Header_Read_File_Info(gchar *filename, ET_File_Info *ETFileInfo)
-{
-    WavpackContext *wpc;
-
-    wpc = WavpackOpenFileInput(filename, NULL, 0, 0);
-
-    if ( wpc == NULL ) {
-        return FALSE;
-    }
-
-    ETFileInfo->version     = WavpackGetVersion(wpc);
-    /* .wvc correction file not counted */
-    ETFileInfo->bitrate     = WavpackGetAverageBitrate(wpc, 0)/1000;
-    ETFileInfo->samplerate  = WavpackGetSampleRate(wpc);
-    ETFileInfo->mode        = WavpackGetNumChannels(wpc);
-    ETFileInfo->size        = WavpackGetFileSize(wpc);
-    ETFileInfo->duration    = WavpackGetNumSamples(wpc)/ETFileInfo->samplerate;
-
-    WavpackCloseFile(wpc);
-
-    return TRUE;
-}
-
-
-gboolean Wavpack_Header_Display_File_Info_To_UI(gchar *filename_utf8, ET_File_Info *ETFileInfo)
-{
-    gchar *text;
-    gchar *time = NULL;
-    gchar *time1 = NULL;
-    gchar *size = NULL;
-    gchar *size1 = NULL;
-
-    /* Encoder version */
-    gtk_label_set_text(GTK_LABEL(VersionLabel),_("Encoder:"));
-    text = g_strdup_printf("%d",ETFileInfo->version);
-    gtk_label_set_text(GTK_LABEL(VersionValueLabel),text);
-    g_free(text);
-
-    /* Bitrate */
-    text = g_strdup_printf(_("%d kb/s"),ETFileInfo->bitrate);
-    gtk_label_set_text(GTK_LABEL(BitrateValueLabel),text);
-    g_free(text);
-
-    /* Samplerate */
-    text = g_strdup_printf(_("%d Hz"),ETFileInfo->samplerate);
-    gtk_label_set_text(GTK_LABEL(SampleRateValueLabel),text);
-    g_free(text);
-
-    /* Mode */
-    gtk_label_set_text(GTK_LABEL(ModeLabel),_("Channels:"));
-    text = g_strdup_printf("%d",ETFileInfo->mode);
-    gtk_label_set_text(GTK_LABEL(ModeValueLabel),text);
-    g_free(text);
-
-    /* Size */
-    size  = g_format_size (ETFileInfo->size);
-    size1 = g_format_size (ETCore->ETFileDisplayedList_TotalSize);
-    text  = g_strdup_printf("%s (%s)",size,size1);
-    gtk_label_set_text(GTK_LABEL(SizeValueLabel),text);
-    g_free(size);
-    g_free(size1);
-    g_free(text);
-
-    /* Duration */
-    time  = Convert_Duration(ETFileInfo->duration);
-    time1 = Convert_Duration(ETCore->ETFileDisplayedList_TotalDuration);
-    text  = g_strdup_printf("%s (%s)",time,time1);
-    gtk_label_set_text(GTK_LABEL(DurationValueLabel),text);
-    g_free(time);
-    g_free(time1);
-    g_free(text);
-
-    return TRUE;
-}
-
-#endif /* ENABLE_WAVPACK */
diff --git a/src/wavpack_header.h b/src/wavpack_header.h
deleted file mode 100644
index 0ef31c5..0000000
--- a/src/wavpack_header.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* wavpack_tag.c - 2007/02/15 */
-/*
- *  EasyTAG - Tag editor for many file types
- *  Copyright (C) 2007 Maarten Maathuis (madman2003 at gmail.com)
- *
- *  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
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-
-#ifndef __WAVPACK_HEADER_H__
-#define __WAVPACK_HEADER_H__
-
-
-#include "et_core.h"
-
-/****************
- * Declarations *
- ****************/
-
-
-/**************
- * Prototypes *
- **************/
-
-gboolean Wavpack_Header_Read_File_Info          (gchar *filename, ET_File_Info *ETFileInfo);
-gboolean Wavpack_Header_Display_File_Info_To_UI (gchar *filename_utf8, ET_File_Info *ETFileInfo);
-
-
-#endif /* __WAVPACK_HEADER_H__ */
diff --git a/src/wavpack_tag.h b/src/wavpack_tag.h
deleted file mode 100644
index 70d3aec..0000000
--- a/src/wavpack_tag.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* wavpack_tag.c - 2007/02/15 */
-/*
- *  EasyTAG - Tag editor for many file types
- *  Copyright (C) 2007 Maarten Maathuis (madman2003 at gmail.com)
- *
- *  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
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-
-#ifndef __WAVPACK_TAG_H__
-#define __WAVPACK_TAG_H__
-
-
-#include <glib.h>
-#include "et_core.h"
-
-/***************
- * Declaration *
- ***************/
-
-#define MAXLEN 1024
-
-/**************
- * Prototypes *
- **************/
-gboolean Wavpack_Tag_Read_File_Tag  (gchar *filename, File_Tag *FileTag);
-gboolean Wavpack_Tag_Write_File_Tag (ET_File *ETFile);
-
-
-#endif /* __WAVPACK_TAG_H__ */
diff --git a/tests/test-scan.c b/tests/test-scan.c
index 408537b..3c2e06b 100644
--- a/tests/test-scan.c
+++ b/tests/test-scan.c
@@ -1,4 +1,5 @@
 /* EasyTAG - tag editor for audio files
+ * Copyright (C) 2014 David King <amigadave at amigadave.com>
  * Copyright (C) 2014 Abhinav Jangda <abhijangda at hotmail.com>
  *
  * This program is free software; you can redistribute it and/or modify it
@@ -23,7 +24,7 @@
 static const gsize PERF_ITERATIONS = 500000;
 
 static void
-check_string (gchar *cases, gchar *result)
+check_string (const gchar *cases, const gchar *result)
 {
     gchar *string1, *string2;
 
@@ -40,8 +41,8 @@ static void
 scan_underscore_to_space (void)
 {
     gsize i;
-    gchar *cases[] = {" ်0STRING ်0_A_B"};
-    gchar *results[] = {" ်0STRING ်0 A B"};
+    const gchar * const cases[] = { " ်0STRING ်0_A_B" };
+    const gchar * const results[] = { " ်0STRING ်0 A B" };
 
     for (i = 0; i < G_N_ELEMENTS (cases); i++)
     {
@@ -59,8 +60,8 @@ static void
 scan_remove_space (void)
 {
     gsize i;
-    gchar *cases[] = { " STR ING A   B " };
-    gchar *results[] = { "STRINGAB" };
+    const gchar * const cases[] = { " STR ING A   B " };
+    const gchar * const results[] = { "STRINGAB" };
 
     for (i = 0; i < G_N_ELEMENTS (cases); i++)
     {
@@ -78,8 +79,9 @@ static void
 scan_p20_to_space (void)
 {
     gsize i;
-    gchar *cases[] = { "S%20T%20R%20", "%20ă b  %20c", "STЂR%20ING%20A%20B" };
-    gchar *results[] = { "S T R ", " ă b   c", "STЂR ING A B" };
+    const gchar * const cases[] = { "S%20T%20R%20", "%20ă b  %20c",
+                                    "STЂR%20ING%20A%20B" };
+    const gchar * const results[] = { "S T R ", " ă b   c", "STЂR ING A B" };
 
     for (i = 0; i < G_N_ELEMENTS (cases); i++)
     {
@@ -97,21 +99,20 @@ static void
 scan_insert_space (void)
 {
     gsize i;
-    gchar *cases[] = { "STRINGAB", "StRiNgAb", "tRßiNgAb", "AՄՆ", "bՄԵ", "cՄԻ",
-                       "dՎՆ", "eՄԽ", "fꜲ"};
-    gchar *results[] = { "S T R I N G A B", "St Ri Ng Ab", "t Rßi Ng Ab",
-                         "A Մ Ն", "b Մ Ե", "c Մ Ի", "d Վ Ն", "e Մ Խ", "f Ꜳ" };
+    const gchar * const cases[] = { "STRINGAB", "StRiNgAb", "tRßiNgAb", "AՄՆ",
+                                    "bՄԵ", "cՄԻ", "dՎՆ", "eՄԽ", "fꜲ" };
+    const gchar * const results[] = { "S T R I N G A B", "St Ri Ng Ab",
+                                      "t Rßi Ng Ab", "A Մ Ն", "b Մ Ե", "c Մ Ի",
+                                      "d Վ Ն", "e Մ Խ", "f Ꜳ" };
 
     for (i = 0; i < G_N_ELEMENTS (cases); i++)
     {
-        gchar *string, *res;
+        gchar *string;
 
-        string = g_strdup (cases[i]);
-        res = Scan_Process_Fields_Insert_Space (string);
-        check_string (res, results[i]);
+        string = Scan_Process_Fields_Insert_Space (cases[i]);
+        check_string (string, results[i]);
 
         g_free (string);
-        g_free (res);
     }
 }
 
@@ -119,21 +120,21 @@ static void
 scan_all_uppercase (void)
 {
     gsize i;
-    gchar *cases[] = { "stringab", "tRßiNgAb", "aʼnbcd", "lowΐer", "uppΰer",
-                       "sTRINGև", "ᾖᾀ", "pᾖp", "sAfflAs" };
-    gchar *results[] = { "STRINGAB", "TRSSINGAB", "AʼNBCD", "LOWΪ́ER", "UPPΫ́ER",
-                         "STRINGԵՒ", "ἮΙἈΙ", "PἮΙP", "SAFFLAS" };
+    const gchar * const cases[] = { "stringab", "tRßiNgAb", "aʼnbcd", "lowΐer",
+                                    "uppΰer", "sTRINGև", "ᾖᾀ", "pᾖp",
+                                    "sAfflAs" };
+    const gchar * const results[] = { "STRINGAB", "TRSSINGAB", "AʼNBCD",
+                                      "LOWΪ́ER", "UPPΫ́ER", "STRINGԵՒ", "ἮΙἈΙ",
+                                      "PἮΙP", "SAFFLAS" };
 
     for (i = 0; i < G_N_ELEMENTS (cases); i++)
     {
-        gchar *string, *res;
+        gchar *string;
 
-        string = g_strdup (cases[i]);
-        res = Scan_Process_Fields_All_Uppercase (string);
-        check_string (res, results[i]);
+        string = Scan_Process_Fields_All_Uppercase (cases[i]);
+        check_string (string, results[i]);
 
         g_free (string);
-        g_free (res);
     }
 }
 
@@ -141,21 +142,19 @@ static void
 scan_all_lowercase (void)
 {
     gsize i;
-    gchar *cases[] = { "STRINGAB", "tRßiNgAb", "SMALLß", "AAAԵՒBB", "ʼN",
-                       "PΪ́E", "ἮΙ", "Ϋ́E" };
-    gchar *results[] = { "stringab", "trßingab", "smallß", "aaaեւbb", "ʼn",
-                         "pΐe", "ἦι", "ΰe" };
+    const gchar * const cases[] = { "STRINGAB", "tRßiNgAb", "SMALLß",
+                                    "AAAԵՒBB", "ʼN", "PΪ́E", "ἮΙ", "Ϋ́E" };
+    const gchar * const results[] = { "stringab", "trßingab", "smallß",
+                                      "aaaեւbb", "ʼn", "pΐe", "ἦι", "ΰe" };
 
     for (i = 0; i < G_N_ELEMENTS (cases); i++)
     {
-        gchar *string, *res;
+        gchar *string;
 
-        string = g_strdup (cases[i]);
-        res = Scan_Process_Fields_All_Downcase (string);
-        check_string (res, results[i]);
+        string = Scan_Process_Fields_All_Downcase (cases[i]);
+        check_string (string, results[i]);
 
         g_free (string);
-        g_free (res);
     }
 }
 
@@ -163,23 +162,84 @@ static void
 scan_letter_uppercase (void)
 {
     gsize i;
-    gchar *cases[] = { "st ri ng in ab", "tr ßi ng ab", "ßr ßi ng ab",
-                       "ßr i ng ab", "ßr mi ng ab", "I I ng ab", "ß I ng ab",
-                       "ßi ng ab" };
-    gchar *results[] = { "St ri ng in ab", "Tr ßi ng ab", "SSr ßi ng ab",
-                         "SSr I ng ab", "SSr mi ng ab", "I I ng ab",
-                         "SS I ng ab", "SSi ng ab" };
+    const gchar * const cases[] = { "st ri ng in ab", "tr ßi ng ab",
+                                    "ßr ßi ng ab", "ßr i ng ab", "ßr mi ng ab",
+                                    "I I ng ab", "ß I ng ab", "ßi ng ab" };
+    const gchar * const results[] = { "St ri ng in ab", "Tr ßi ng ab",
+                                      "SSr ßi ng ab", "SSr I ng ab",
+                                      "SSr mi ng ab", "I I ng ab",
+                                      "SS I ng ab", "SSi ng ab" };
+
+    for (i = 0; i < G_N_ELEMENTS (cases); i++)
+    {
+        gchar *string;
+
+        string = Scan_Process_Fields_Letter_Uppercase (cases[i]);
+        check_string (string, results[i]);
+
+        g_free (string);
+    }
+}
+
+static void
+scan_letters_uppercase (void)
+{
+    gsize i;
+    const gchar * const cases[] = { "Foo Bar The Baz", "The", "The The",
+                             "The The The", "Vibrate (single version)",
+                             "MCMXC", "Foo Bar The III (single version)",
+                             "01 02 Caps" };
+    const gchar * const results[] = { "Foo Bar the Baz", "The", "The The",
+                                      "The the The",
+                                      "Vibrate (Single Version)", "Mcmxc",
+                                      "Foo Bar the Iii (Single Version)",
+                                      "01 02 Caps" };
+    const gchar * const results_roman[] = { "Foo Bar the Baz", "The",
+                                            "The The", "The the The",
+                                            "Vibrate (Single Version)",
+                                            "MCMXC",
+                                            "Foo Bar the III (Single Version)",
+                                            "01 02 Caps" };
+    const gchar * const results_preps[] = { "Foo Bar The Baz", "The",
+                                            "The The", "The The The",
+                                            "Vibrate (Single Version)",
+                                            "Mcmxc",
+                                            "Foo Bar The Iii (Single Version)",
+                                            "01 02 Caps" };
+    const gchar * const results_preps_roman[] = { "Foo Bar The Baz", "The",
+                                                  "The The", "The The The",
+                                                  "Vibrate (Single Version)",
+                                                  "MCMXC",
+                                                  "Foo Bar The III (Single Version)",
+                                                  "01 02 Caps" };
 
     for (i = 0; i < G_N_ELEMENTS (cases); i++)
     {
-        gchar *string, *res;
+        gchar *string;
 
-        string = g_strdup (cases [i]);
-        res = Scan_Process_Fields_Letter_Uppercase (string);
-        check_string (res, results [i]);
+        /* Lower-case exempted words, do not handle Roman numerals. */
+        string = g_strdup (cases[i]);
+        Scan_Process_Fields_First_Letters_Uppercase (&string, FALSE, FALSE);
+        check_string (string, results[i]);
+        g_free (string);
+
+        /* Lower-case exempted words, handle Roman numerals. */
+        string = g_strdup (cases[i]);
+        Scan_Process_Fields_First_Letters_Uppercase (&string, FALSE, TRUE);
+        check_string (string, results_roman[i]);
+        g_free (string);
 
+        /* Upper-case all words, do not handle Roman numerals. */
+        string = g_strdup (cases[i]);
+        Scan_Process_Fields_First_Letters_Uppercase (&string, TRUE, FALSE);
+        check_string (string, results_preps[i]);
+        g_free (string);
+
+        /* Upper-case all words, handle Roman numerals. */
+        string = g_strdup (cases[i]);
+        Scan_Process_Fields_First_Letters_Uppercase (&string, TRUE, TRUE);
+        check_string (string, results_preps_roman[i]);
         g_free (string);
-        g_free (res);
     }
 }
 
@@ -213,6 +273,7 @@ main (int argc, char** argv)
     g_test_add_func ("/scan/all-uppercase", scan_all_uppercase);
     g_test_add_func ("/scan/all-lowercase", scan_all_lowercase);
     g_test_add_func ("/scan/letter-uppercase", scan_letter_uppercase);
+    g_test_add_func ("/scan/letters-uppercase", scan_letters_uppercase);
 
     if (g_test_perf ())
     {
@@ -230,6 +291,8 @@ main (int argc, char** argv)
                               scan_perf);
         g_test_add_data_func ("/scan/perf/letter-uppercase",
                               scan_letter_uppercase, scan_perf);
+        g_test_add_data_func ("/scan/perf/letters-uppercase",
+                              scan_letters_uppercase, scan_perf);
     }
 
     return g_test_run ();

-- 
easytag packaging



More information about the pkg-multimedia-commits mailing list