diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000000000000000000000000000000000000..81f8fc26427bb3576f929d8ec42bed76425d2ac6
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1 @@
+Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..d556777a6d3f93abce4dc6a2f74794721c6bc017
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,698 @@
+/*
+ *  engine
+ *
+ *  Playout Daemon for autoradio project
+ *
+ *
+ *  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
+ *
+ *  This file is part of engine.
+ *
+ *  engine 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
+ *  any later version.
+ *
+ *  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+                    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/README.md b/README.md
index 7fb7e20177ecf32ea2c2aafeefeb16d7955b6892..4beba556b72fa319d4b06fd21724571b87f7faa8 100644
--- a/README.md
+++ b/README.md
@@ -6,6 +6,8 @@ AURA Engine does:
  * requesting the programme from an external Source
  * switches the soundserver at the correct time to a given source for a specific show 
  * records what is broadcasted
+ * streams to an icecast server
+ * plays to lineout
 
 ## Installation
 
@@ -13,7 +15,7 @@ AURA Engine does:
 
 #### Operating System
 
-Any sound supporting linux system should work. It is tested and coded on a **debian stretch**
+Any linux system with ALSA, pulseaudio or Jack2 support should work. It is tested and coded on a **debian stretch**
 
 #### Packages
 
@@ -41,10 +43,14 @@ sudo pip3 install \
 
 #### Grab the code
 
+```bash
 git clone https://gitlab.servus.at/autoradio/engine
+```
 
 #### Set up a database
 
+##### Command line way 
+
 ```bash
 mysql -u root -p
 
@@ -53,9 +59,13 @@ CREATE USER 'aura'@'localhost' IDENTIFIED BY 'secure-password';
 GRANT ALL PRIVILEGES ON aura_engine.* TO 'aura'@'localhost';  
 ```
 
+##### phpmyadmin / adminer way
+
+Log into your phpmyadmin or adminer with correct privileges and create a database and a user for the aura engine.
+
 #### Files and Folders
 
-Create the audio folder defined in your aura.ini
+* Create the audio folder defined in your aura.ini
 
 ```bash
 mkdir /var/audio
@@ -64,25 +74,30 @@ cp {where you cloned the repo}/configuration/engine.ini /etc/aura/engine.ini
 edit engine.ini to your needs
 ```
 
-edit installation dir and database settings in aura.ini
+* Edit settings in aura.ini. Take your time for that.
 
 #### aura.py
 
-It is the server which is connected to the external programme source, to liquidsoap and is listening for redis pubsub messages.
+It is the server which is connected to the external programme source (e.g. aura steering and tank), to liquidsoap and is listening for redis pubsub messages. This precious little server is telling liquidsoap what to play and when.
 
 #### Guru
 
-The commandline tool for interacting with the server.
+The commandline tool for interacting with the server. Also provides the communication from Liquidsoap to the python (Command-)Server.
 
 #### Liquidsoap
 
-The heart of AURA Engine. It uses the built in mixer, to switch between different sources. A source can be a stream, the filesystem or linein 
+The heart of AURA Engine. It uses the built in mixer, to switch between different sources.
+
+#### Find Help
+
+LiquidSoap Reference: http://savonet.sourceforge.net/doc-svn/reference.html
+Python3.5 Reference: https://docs.python.org/3.5/ 
 
 ### Hardware
 
 #### Soundcard
 
-AURA Engine ist tested with an ASUS Xonar DGX. It should work with every by ALSA supported soundcard. PulseAudio support is planned.
+AURA Engine ist tested with a ASUS Xonar DGX and a Roland Duo-Capture Ex. Both work well with jack and pulseaudio. For good experience with ALSA, you may need better hardware.
 
 #### Hard/Soft
 
@@ -90,18 +105,18 @@ When you use ALSA, you will have to play around with ALSA settings. In the folde
 
 ### Recordings
 
-You can configure up to five recorders. You find the settings in the main config file engine.ini. You can choose between wav, flac, ogg or mp3 output
+You can configure up to five recorders. You find the settings in the main config file engine.ini. You can choose between different output formats.
 
 ### Streams
 
-You can configure up to five streams. You find the settings in the engine.ini. You can choose between aac, aacplus, fdkaac, flac, mp3, ogg, opus stream
+You can configure up to five streams. You find the settings in the engine.ini. You can choose between different streaming formats.
 
 If you experience 'hangs' on the stream
  * reduce the quality or
- * invest in better hardware or
- * install the realtime kernel
+ * install the realtime kernel with
    ```bash
    apt install linux-image-rt-amd64
    reboot
    ```
-   Should be sufficient.
\ No newline at end of file
+   or
+ * invest in better hardware
\ No newline at end of file
diff --git a/aura.py b/aura.py
index 5fa1c60bb4e8ef6ea2acc070972c59926c210251..ef5efc1de45d151f4848fdb013fd733fdb11c3cb 100755
--- a/aura.py
+++ b/aura.py
@@ -1,5 +1,29 @@
 #!/usr/bin/python3.5
 
+#
+#  engine
+#
+#  Playout Daemon for autoradio project
+#
+#
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
+#
+#  This file is part of engine.
+#
+#  engine 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
+#  any later version.
+#
+#  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
+#
+
 import os
 import sys
 import signal
diff --git a/configuration/engine.ini b/configuration/engine.ini
index 9259ad9c9d400c67d743428660377fc367be49cd..982481b0d7f4513b52dfb6215656fd14cb7a59d6 100644
--- a/configuration/engine.ini
+++ b/configuration/engine.ini
@@ -1,5 +1,6 @@
-[configfile]
-scheduler_config_file="/etc/aura/scheduler.xml"
+###################
+# engine Settings #
+###################
 
 [database]
 db_user="engine"
@@ -8,23 +9,24 @@ db_pass="engine"
 db_host="localhost"
 
 [monitoring]
-# how often should i check the diskspace
-diskspace_check_interval=10
+# how often should i check the diskspace. defaults to 600s = 10m
+diskspace_check_interval=20
 # under which value should i start sending admin mails. possible values k, M, G, T or no metric prefix. defaults to 2G
 diskspace_warning_value=1G
 # under which value should i stop recording. defaults to 200M
-diskspace_critical_value=10g0M
+diskspace_critical_value=100M
 
 [mail]
 mail_server=""
 mail_server_port=""
 mail_user=""
 mail_pass=""
-# multiple adminmails => space separated
+# if you want to send multiple adminmails, make them space separated
 admin_mail="gogo@servus.at gottfried@servus.at"
+#
 from_mail="monitor@aura.py"
-# The beginning of the subject
-mail_prefix="[AURA]"
+# The beginning of the subject. With that you can easily apply filter rules
+mailsubject_prefix="[AURA]"
 
 [dataurls]
 calendarurl="http://localhost:8000/api/v1/playout"
@@ -136,7 +138,7 @@ rec_2="y"
 rec_2_folder="/var/audio/rec/mp3"
 rec_2_duration="30"
 rec_2_encoding="mp3"
-rec_2_bitrate="128"
+rec_2_bitrate="32"
 rec_2_channels="2"
 
 # ogg example
diff --git a/guru.py b/guru.py
index ca33e7de0103ee3b7f2bfec9aa87b6de1f04d7fe..3e7560bf684ec7f34d8ce0c3ee047c429669ee07 100755
--- a/guru.py
+++ b/guru.py
@@ -1,5 +1,29 @@
 #!/usr/bin/python3.5
 
+#
+#  engine
+#
+#  Playout Daemon for autoradio project
+#
+#
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
+#
+#  This file is part of engine.
+#
+#  engine 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
+#  any later version.
+#
+#  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
+#
+
 import time
 import sys
 import redis
diff --git a/libraries/base/config.py b/libraries/base/config.py
index b4641dd1937f44a90ddc17ba1026f69b3f88879d..8e7cd6fe20104ca99220e659353c324ab76f496e 100644
--- a/libraries/base/config.py
+++ b/libraries/base/config.py
@@ -1,6 +1,26 @@
-"""
-Common aura functions
-"""
+#
+#  engine
+#
+#  Playout Daemon for autoradio project
+#
+#
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
+#
+#  This file is part of engine.
+#
+#  engine 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
+#  any later version.
+#
+#  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
+#
 
 from modules.base.config import ConfigReader
 
diff --git a/libraries/base/logger.py b/libraries/base/logger.py
index 9852755b571fc8363b201fa1778b408dc67ab75f..fd28ae107ca46aa59a60a58004a0e9073df11196 100644
--- a/libraries/base/logger.py
+++ b/libraries/base/logger.py
@@ -1,6 +1,26 @@
-"""
-Aura logger functions
-"""
+#
+#  engine
+#
+#  Playout Daemon for autoradio project
+#
+#
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
+#
+#  This file is part of engine.
+#
+#  engine 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
+#  any later version.
+#
+#  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
+#
 
 import logging
 
diff --git a/libraries/database/broadcasts.py b/libraries/database/broadcasts.py
index 482c4680b90b632912110de42c583ca9af1b0896..54ca121c76258de88235fac81fe5a3a8cd9af303 100644
--- a/libraries/database/broadcasts.py
+++ b/libraries/database/broadcasts.py
@@ -1,5 +1,26 @@
-__author__ = 'gg'
-# -*- coding: utf-8 -*-
+#
+#  engine
+#
+#  Playout Daemon for autoradio project
+#
+#
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
+#
+#  This file is part of engine.
+#
+#  engine 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
+#  any later version.
+#
+#  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
+#
 
 import sys
 import time
@@ -10,7 +31,7 @@ from sqlalchemy import orm, func, Boolean, Column, DateTime, Integer, String, Fo
 from sqlalchemy.orm import relationship
 from sqlalchemy.sql.expression import false, true
 from libraries.database.database import DB
-from libraries.enum.scheduleentrytype import ScheduleEntryType
+from libraries.enum.auraenumerations import ScheduleEntryType
 
 
 class AuraDatabaseModel:
@@ -123,6 +144,7 @@ class ScheduleEntry(DB.Model, AuraDatabaseModel):
     volume = Column(Integer, default=100)
     fallback_type = Column(Integer, default=0)
     cleansource = ""
+    cleanprotocol = ""
     entry_start_unix = 0
     programme_index = -1
     type = None
@@ -133,6 +155,7 @@ class ScheduleEntry(DB.Model, AuraDatabaseModel):
     def __init__(self, **kwargs):
         super(ScheduleEntry, self).__init__(**kwargs)
         self.calc_unix_times()
+        self.define_clean_source()
 
     # constructor like - called from sqlalchemy
     @orm.reconstructor
@@ -141,13 +164,25 @@ class ScheduleEntry(DB.Model, AuraDatabaseModel):
         self.set_entry_type()
 
     def define_clean_source(self):
-        if self.source.startswith("http") or self.source.startswith("live") or self.source.startswith("linein"):
+        if self.source.startswith("http"):
+            self.cleanprotocol = self.source[:7]
             self.cleansource = self.source
-        if self.source.startswith("pool") or self.source.startswith("file"):
+
+        elif self.source.startswith("linein"):
+            self.cleanprotocol = self.source[:9]
+            self.cleansource = self.source[9:]
+
+        elif self.source.startswith("pool") or self.source.startswith("file") or self.source.startswith("live"):
+            self.cleanprotocol = self.source[:7]
             self.cleansource = self.source[7:]
-        if self.source.startswith("playlist"):
+
+        elif self.source.startswith("playlist"):
+            self.cleanprotocol = self.source[:11]
             self.cleansource = self.source[11:]
 
+        else:
+            self.logger.error("Unknown source protocol")
+
     def calc_unix_times(self):
         if self.entry_start is not None:
             self.entry_start_unix = time.mktime(self.entry_start.timetuple())
@@ -173,6 +208,21 @@ class ScheduleEntry(DB.Model, AuraDatabaseModel):
 
         return all_entries
 
+    @staticmethod
+    def select_act_programme(include_act_playing = True):
+        # fetching all from today to ..
+        today = datetime.date.today()
+        all_entries = DB.session.query(ScheduleEntry).filter(ScheduleEntry.entry_start >= today, ScheduleEntry.fallback_type == 0).order_by(ScheduleEntry.entry_start).all()
+
+        cnt = 0
+        for entry in all_entries:
+            entry.programme_index = cnt
+            cnt = cnt + 1
+
+
+
+        return all_entries
+
     # ------------------------------------------------------------------------------------------ #
     @staticmethod
     def truncate():
@@ -209,6 +259,17 @@ class ScheduleEntry(DB.Model, AuraDatabaseModel):
     def select_playlist(playlist_id):
         return DB.session.query(ScheduleEntry).filter(ScheduleEntry.playlist_id == playlist_id).all()
 
+    def getChannel(self):
+        if self.type == self.type.FILESYSTEM:
+            return "fs"
+
+        if self.type == self.type.LIVE:
+            return "aura_linein_"+self.cleansource # .cleanprotocol[8]
+
+        if self.type == self.type.STREAM:
+            return "http"
+
+
     # ------------------------------------------------------------------------------------------ #
     def __str__(self):
         return "ScheduleID: #" + str(self.schedule_id) + " Showname: " + self.schedule.show_name + " starts @ " + str(self.entry_start) + " and plays " + self.source
diff --git a/libraries/database/database.py b/libraries/database/database.py
index 02da3a2274ad5eb3e09a9e815c3cc66491d9e50e..56c93b19404029c9a06f1c2c6b5eed41279fa58b 100644
--- a/libraries/database/database.py
+++ b/libraries/database/database.py
@@ -1,6 +1,26 @@
-"""
-Database conn
-"""
+#
+#  engine
+#
+#  Playout Daemon for autoradio project
+#
+#
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
+#
+#  This file is part of engine.
+#
+#  engine 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
+#  any later version.
+#
+#  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
+#
 
 from sqlalchemy.ext.declarative import declarative_base
 from flask_sqlalchemy import SQLAlchemy
diff --git a/libraries/database/statestore.py b/libraries/database/statestore.py
index 1d194e1b4656a341a54440f5e68d58210afe0fdb..3ee45f34d229420bf4b4f850a935eb510009e091 100644
--- a/libraries/database/statestore.py
+++ b/libraries/database/statestore.py
@@ -1,4 +1,26 @@
-# -*- coding: utf-8 -*-
+#
+#  engine
+#
+#  Playout Daemon for autoradio project
+#
+#
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
+#
+#  This file is part of engine.
+#
+#  engine 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
+#  any later version.
+#
+#  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
+#
 
 import redis
 import time
diff --git a/libraries/enum/auraenumerations.py b/libraries/enum/auraenumerations.py
new file mode 100644
index 0000000000000000000000000000000000000000..575d371bc02fb5bce5f5dfa7d1b1fbbf385e48aa
--- /dev/null
+++ b/libraries/enum/auraenumerations.py
@@ -0,0 +1,65 @@
+#
+#  engine
+#
+#  Playout Daemon for autoradio project
+#
+#
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
+#
+#  This file is part of engine.
+#
+#  engine 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
+#  any later version.
+#
+#  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
+#
+
+from enum import Enum
+
+
+class TerminalColors(Enum):
+    HEADER = "\033[95m"
+
+    RED = "\033[31m"
+    GREEN = "\033[32m"
+    ORANGE = "\033[33m"
+    BLUE = "\033[34m"
+    PINK = "\033[35m"
+    CYAN = "\033[36m"
+
+    WARNING = "\033[31m"
+    FAIL = "\033[41m"
+
+    BOLD = "\033[1m"
+    UNDERLINE = "\033[4m"
+
+    ENDC = "\033[0m"
+
+
+class RedisChannel(Enum):
+    STANDARD = "aura"
+
+    DPE_REPLY = "delete_playlist_entry_reply"
+    FNP_REPLY = "fetch_new_programme_reply"
+    GAP_REPLY = "get_act_programme_reply"
+    GCS_REPLY = "get_connection_status_reply"
+    IPE_REPLY = "insert_playlist_entry_reply"
+    IP_REPLY  = "init_player_reply"
+    MPE_REPLY = "move_playlist_entry_reply"
+    PMQ_REPLY = "print_message_queue_reply"
+    RDB_REPLY = "recreate_database_reply"
+    SNF_REPLY = "get_next_file_reply"
+
+
+class ScheduleEntryType(Enum):
+    FILESYSTEM = "fs"
+    STREAM  = "http"
+    LIVE = "live"
\ No newline at end of file
diff --git a/libraries/enum/consolecolor.py b/libraries/enum/consolecolor.py
deleted file mode 100644
index fabdbf80e47a38b5406259eb1fcaf50950c88615..0000000000000000000000000000000000000000
--- a/libraries/enum/consolecolor.py
+++ /dev/null
@@ -1,20 +0,0 @@
-from enum import Enum
-
-
-class TerminalColors(Enum):
-    HEADER = "\033[95m"
-
-    RED = "\033[31m"
-    GREEN = "\033[32m"
-    ORANGE = "\033[33m"
-    BLUE = "\033[34m"
-    PINK = "\033[35m"
-    CYAN = "\033[36m"
-
-    WARNING = "\033[31m"
-    FAIL = "\033[41m"
-
-    BOLD = "\033[1m"
-    UNDERLINE = "\033[4m"
-
-    ENDC = "\033[0m"
\ No newline at end of file
diff --git a/libraries/enum/redischannel.py b/libraries/enum/redischannel.py
deleted file mode 100644
index 9d48d4dde25ddb3d5d02c42e6b712752e76143d4..0000000000000000000000000000000000000000
--- a/libraries/enum/redischannel.py
+++ /dev/null
@@ -1,20 +0,0 @@
-from enum import Enum
-
-
-class RedisChannel(Enum):
-    STANDARD = "aura"
-
-    DPE_REPLY = "delete_playlist_entry_reply"
-    FNP_REPLY = "fetch_new_programme_reply"
-    GAP_REPLY = "get_act_programme_reply"
-    GCS_REPLY = "get_connection_status_reply"
-    IPE_REPLY = "insert_playlist_entry_reply"
-    IP_REPLY  = "init_player_reply"
-    MPE_REPLY = "move_playlist_entry_reply"
-    PMQ_REPLY = "print_message_queue_reply"
-    RDB_REPLY = "recreate_database_reply"
-    SNF_REPLY = "get_next_file_reply"
-
-
-
-
diff --git a/libraries/enum/scheduleentrytype.py b/libraries/enum/scheduleentrytype.py
deleted file mode 100644
index f69f100df77a97fdc338f12237eabd064023dd75..0000000000000000000000000000000000000000
--- a/libraries/enum/scheduleentrytype.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from enum import Enum
-
-
-class ScheduleEntryType(Enum):
-    FILESYSTEM = "fs"
-    STREAM  = "http"
-    LIVE = "live"
diff --git a/libraries/exceptions/auraexceptions.py b/libraries/exceptions/auraexceptions.py
index 04c0a938ee12a52abcaa313f496c10355cb12ced..94b8d74ac7f98dbde41f19c0bf5091f679ce027a 100644
--- a/libraries/exceptions/auraexceptions.py
+++ b/libraries/exceptions/auraexceptions.py
@@ -1,3 +1,26 @@
+#
+#  engine
+#
+#  Playout Daemon for autoradio project
+#
+#
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
+#
+#  This file is part of engine.
+#
+#  engine 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
+#  any later version.
+#
+#  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
+#
 
 class NoProgrammeLoadedException(Exception):
     pass
diff --git a/libraries/exceptions/exception_logger.py b/libraries/exceptions/exception_logger.py
index fbef53354bf939adbacf90ef9e448ce7920518a6..c80fe18d1efe6cf81cc7ec8174da2e0cfd72daf1 100644
--- a/libraries/exceptions/exception_logger.py
+++ b/libraries/exceptions/exception_logger.py
@@ -1,3 +1,27 @@
+#
+#  engine
+#
+#  Playout Daemon for autoradio project
+#
+#
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
+#
+#  This file is part of engine.
+#
+#  engine 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
+#  any later version.
+#
+#  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
+#
+
 import simplejson
 import logging
 
diff --git a/libraries/security/user.py b/libraries/security/user.py
deleted file mode 100644
index 3747f9ad4113687ae594c039e1faadcaef1387c9..0000000000000000000000000000000000000000
--- a/libraries/security/user.py
+++ /dev/null
@@ -1,199 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-#
-#       user.py
-#
-"""
-Aura User Class - Benutzerverwaltung
-"""
-import os
-import sys
-import redis
-import random
-import string
-
-## current directory
-scriptdir = os.path.dirname(os.path.abspath(__file__))
-# Hier stecken unsere eigenen Python libraries
-package_dir = os.path.join(scriptdir, 'python')
-path = list(sys.path)
-# Das package_dir zu den Systempfaden hinzufügen, damit wir Importe durchführen können
-sys.path.insert(0, package_dir)
-"""
-User verwalten
-"""
-
-
-class AuraUser(object):
-
-    def __init__(self):
-        self.db = redis.Redis()
-        self.dbname = 'aurausers'
-        self.userprefix = 'aurauser:'
-        pass
-
-    # ------------------------------------------------------------------------------------------ #
-    def delete(self, username):
-        """
-        Delete an user
-        :param username:
-        :return: boolean
-        """
-        userid = self.db.hget(self.dbname, username).decode("utf-8")
-        if not userid:
-            return False
-        else:
-            self.db.delete(self.userprefix + userid)
-            self.db.hdel(self.dbname, username)
-            return True
-
-    # ------------------------------------------------------------------------------------------ #
-    def setPassword(self, username, password):
-        """
-        Set users password
-        :param username: string
-        :param password: string
-        :return: boolean
-        """
-        userid = self.db.hget(self.dbname, username).decode("utf-8")
-        if not userid:
-            return False
-        self.db.hset(self.userprefix + userid, 'password', password)
-        return True
-
-    # ------------------------------------------------------------------------------------------ #
-    def hasRole(self, username, role):
-        """
-        Compare users role
-        :param username: string
-        :param role: string
-        :return:boolean
-        """
-        userid = self.db.hget(self.dbname, username).decode("utf-8")
-        dbrole = self.db.hget(self.userprefix + str(userid), 'role').decode("utf-8")
-
-        if (dbrole == "admin"):
-            return True
-
-        print("username: " + username + " - userid: " + userid + " - role: " + role + " - dbrole: " + dbrole)
-
-        return (dbrole == role)
-
-    # ------------------------------------------------------------------------------------------ #
-    def hasPassword(self, username, password):
-        """
-        Compare users password with the given one
-        :param username: string
-        :param password: string
-        :return:
-        """
-
-        userid = self.db.hget(self.dbname, username).decode("utf-8")
-        dbpassword = self.db.hget(self.userprefix + userid, 'password').decode("utf-8")
-
-        print(
-            "username: " + username + " - userid: " + userid + " - password: " + password + " - dbpassword: " + dbpassword)
-        print(dbpassword == password)
-
-        return (dbpassword == password)
-
-    # ------------------------------------------------------------------------------------------ #
-    def hasAdminRights(self, username, password):
-        """
-        Check admin rights
-        :param username: username
-        :param password: password
-        :return:
-        """
-        return (self.hasPassword(username, password) and self.hasRole(username, 'admin'))
-
-    # ------------------------------------------------------------------------------------------ #
-    def insertUser(self, username, password, role="user"):
-        """
-        Insert or update user
-        :param username: string
-        :param password: string
-        :param role: string
-        :return: string - the password
-        """
-
-        userid = self.db.hget(self.dbname, username)
-
-        if not userid:
-            # insert
-            userid = str(self.db.incr("next_aurauser_id"))
-            self.db.hset(self.dbname, username, userid)
-        else:
-            # update
-            userid = userid.decode("utf-8")
-
-        id = self.userprefix + userid
-        user = {"username": username, "password": password, "role": role}
-        self.db.hmset(id, user)
-
-        # return inserted user id
-        return id
-
-    # ------------------------------------------------------------------------------------------ #
-    def getUser(self, username):
-        """
-        Get users data
-        :param username: string
-        :return: dict - userdata
-        """
-        userid = self.db.hget(self.dbname, username)
-        if userid is None:
-            return None
-
-        return self.getUserByKey(self.userprefix + userid.decode("utf-8"))
-
-    # ------------------------------------------------------------------------------------------ #
-    def getUserByKey(self, key):
-        """
-        Get users data
-        :param id: string
-        :return: dict - userdata
-        """
-
-        data = self.db.hgetall(key)
-        user = {key.decode('utf-8'): value.decode('utf-8') for (key, value) in data.items()}
-        return user
-
-    # ------------------------------------------------------------------------------------------ #
-    def getUserlist(self):
-        """
-        get all users
-        :return: list - the userlist
-        """
-        accounts = []
-        keys = self.db.keys(self.userprefix + "*")
-        for key in keys:
-            accounts.append(self.db.hgetall(key))
-        return accounts
-
-    # ------------------------------------------------------------------------------------------ #
-    def getLogins(self):
-        """
-        get usernames passwords as dict in format  {username1:password1, username2;password2, ...}
-        :return:
-        """
-        accounts = {}
-        keys = self.db.keys(self.userprefix + "*")
-
-        for key in keys:
-            account = self.db.hgetall(key)
-            try:
-                accounts[account[b'username']] = account[b'password']
-            except:
-                import traceback
-                traceback.print_exc()
-        return accounts
-
-    # ------------------------------------------------------------------------------------------ #
-    def createPassword(self):
-        """
-        create a new passoword
-        :return: string - the password
-        """
-        password = ''.join(random.sample(string.lowercase + string.uppercase + string.digits, 14))
-        return password
diff --git a/libraries/security/whitelist.py b/libraries/security/whitelist.py
deleted file mode 100644
index 1483317956d2f6090af2e529f345b0221039d927..0000000000000000000000000000000000000000
--- a/libraries/security/whitelist.py
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-#
-#       aurawhitelist
-#
-"""
-Aura Whitelist  - IP-Adressen oder Domains aus der Whitelist holen
-"""
-import os
-import sys
-import redis
-
-
-"""
-Whitelisting ips or hostnames
-"""
-class AuraWhitelist(object):
-    def __init__(self):
-        self.db = redis.Redis()
-        self.dbname = 'aurawhitelist'
-        pass
-    # ------------------------------------------------------------------------------------------ #
-    def getList(self):
-        """
-        get the whitelist
-        :return: list - list of whitelisted ip's
-        """
-        return self.db.lrange(self.dbname, 0, -1)
-
-    # ------------------------------------------------------------------------------------------ #
-    def add(self,address):
-        """
-        Add ip/host to whitelist
-        :param address: string - ip or hostname
-        :return: boolean
-        """
-        list = self.getList()
-        for item in list:
-            if item == address:
-                return False
-        self.db.lpush(self.dbname, address)
-        return True
-
-    # ------------------------------------------------------------------------------------------ #
-    def remove(self,address):
-        """
-        Remove an ip or host from whitelist
-        :param address: string - ip or hostname
-        :return: boolean
-        """
-        if not address:
-            return False
-        self.db.lrem(self.dbname, address, 1)
-        return True
-
diff --git a/modules/base/config.py b/modules/base/config.py
index 4c8200cefd68093b775eec6b9a483a4830dc5548..34ccf677f002965947a4496fde0d894ca5f95ad9 100644
--- a/modules/base/config.py
+++ b/modules/base/config.py
@@ -1,23 +1,24 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
 #
-#       combabase.py
+#  engine
 #
-#       Copyright 2014 BFR <info@freie-radios.de>
+#  Playout Daemon for autoradio project
 #
-#       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; Version 3 of the License
+#  Copyright 2014 BFR <info@freie-radios.de>
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
 #
-#       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 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; Version 3 of the License
 #
-#       You should have received a copy of the GNU General Public License
-#       along with this program; if not, the license can be downloaded here:
+#  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.
 #
-#       http://www.gnu.org/licenses/gpl.html
+#  You should have received a copy of the GNU General Public License
+#  along with this program; if not, the license can be downloaded here:
+#
+#  http://www.gnu.org/licenses/gpl.html
 
 # Meta
 __version__ = '0.1.1'
@@ -47,27 +48,27 @@ class ConfigReader(object):
 
     def set(self, key, value):
         """
-        Eine property setzen
+        Set a property
         @type    key: string
-        @param   key: Der Key
+        @param   key: The Key
         @type    value: mixed
         @param   value: Beliebiger Wert
         """
-        if key == "securitylevel":
+        try:
             self.__dict__[key] = int(value)
-        else:
-            self.__dict__[key] = value
+        except:
+            self.__dict__[key] = str(value)
 
     # ------------------------------------------------------------------------------------------ #
     def get(self, key, default=None):
         """
-        Eine property holen
+        get a loaded property
         @type    key: string
         @param   key: Der Key
         @type    default: mixed
         @param   default: Beliebiger Wert
-
         """
+
         if key not in self.__dict__:
             if default:
                 self.set(key, default)
@@ -108,7 +109,6 @@ class ConfigReader(object):
 
         # INI einlesen
         f = open(self.ini_path, 'r')
-        #ini_str = '[root]\n' + f.read()
         ini_str = f.read()
         f.close()
 
diff --git a/modules/base/parsexml.py b/modules/base/parsexml.py
deleted file mode 100644
index 9cb3fe99de2725491c58050d142b36a732bbeb32..0000000000000000000000000000000000000000
--- a/modules/base/parsexml.py
+++ /dev/null
@@ -1,355 +0,0 @@
-#!/usr/bin/env python
-"Makes working with XML feel like you are working with JSON"
-
-from xml.parsers import expat
-from xml.sax.saxutils import XMLGenerator
-from xml.sax.xmlreader import AttributesImpl
-try:  # pragma no cover
-    from cStringIO import StringIO
-except ImportError:  # pragma no cover
-    try:
-        from StringIO import StringIO
-    except ImportError:
-        from io import StringIO
-try:  # pragma no cover
-    from collections import OrderedDict
-except ImportError:  # pragma no cover
-    try:
-        from ordereddict import OrderedDict
-    except ImportError:
-        OrderedDict = dict
-
-try:  # pragma no cover
-    _basestring = str #basestring
-except NameError:  # pragma no cover
-    _basestring = bytes #str
-try:  # pragma no cover
-    _unicode = str #unicode
-except NameError:  # pragma no cover
-    _unicode = bytes #str
-
-__author__ = 'Martin Blech'
-__version__ = '0.9.0'
-__license__ = 'MIT'
-
-
-class ParsingInterrupted(Exception):
-    pass
-
-
-class _DictSAXHandler(object):
-    def __init__(self,
-                 item_depth=0,
-                 item_callback=lambda *args: True,
-                 xml_attribs=True,
-                 attr_prefix='@',
-                 cdata_key='#text',
-                 force_cdata=False,
-                 cdata_separator='',
-                 postprocessor=None,
-                 dict_constructor=OrderedDict,
-                 strip_whitespace=True,
-                 namespace_separator=':',
-                 namespaces=None):
-        self.path = []
-        self.stack = []
-        self.data = None
-        self.item = None
-        self.item_depth = item_depth
-        self.xml_attribs = xml_attribs
-        self.item_callback = item_callback
-        self.attr_prefix = attr_prefix
-        self.cdata_key = cdata_key
-        self.force_cdata = force_cdata
-        self.cdata_separator = cdata_separator
-        self.postprocessor = postprocessor
-        self.dict_constructor = dict_constructor
-        self.strip_whitespace = strip_whitespace
-        self.namespace_separator = namespace_separator
-        self.namespaces = namespaces
-
-    def _build_name(self, full_name):
-        if not self.namespaces:
-            return full_name
-        i = full_name.rfind(self.namespace_separator)
-        if i == -1:
-            return full_name
-        namespace, name = full_name[:i], full_name[i+1:]
-        short_namespace = self.namespaces.get(namespace, namespace)
-        if not short_namespace:
-            return name
-        else:
-            return self.namespace_separator.join((short_namespace, name))
-
-    def _attrs_to_dict(self, attrs):
-        if isinstance(attrs, dict):
-            return attrs
-        return self.dict_constructor(zip(attrs[0::2], attrs[1::2]))
-
-    def startElement(self, full_name, attrs):
-        name = self._build_name(full_name)
-        attrs = self._attrs_to_dict(attrs)
-        self.path.append((name, attrs or None))
-        if len(self.path) > self.item_depth:
-            self.stack.append((self.item, self.data))
-            if self.xml_attribs:
-                attrs = self.dict_constructor(
-                    (self.attr_prefix+key, value)
-                    for (key, value) in attrs.items())
-            else:
-                attrs = None
-            self.item = attrs or None
-            self.data = None
-
-    def endElement(self, full_name):
-        name = self._build_name(full_name)
-        if len(self.path) == self.item_depth:
-            item = self.item
-            if item is None:
-                item = self.data
-            should_continue = self.item_callback(self.path, item)
-            if not should_continue:
-                raise ParsingInterrupted()
-        if len(self.stack):
-            item, data = self.item, self.data
-            self.item, self.data = self.stack.pop()
-            if self.strip_whitespace and data is not None:
-                data = data.strip() or None
-            if data and self.force_cdata and item is None:
-                item = self.dict_constructor()
-            if item is not None:
-                if data:
-                    self.push_data(item, self.cdata_key, data)
-                self.item = self.push_data(self.item, name, item)
-            else:
-                self.item = self.push_data(self.item, name, data)
-        else:
-            self.item = self.data = None
-        self.path.pop()
-
-    def characters(self, data):
-        if not self.data:
-            self.data = data
-        else:
-            self.data += self.cdata_separator + data
-
-    def push_data(self, item, key, data):
-        if self.postprocessor is not None:
-            result = self.postprocessor(self.path, key, data)
-            if result is None:
-                return item
-            key, data = result
-        if item is None:
-            item = self.dict_constructor()
-        try:
-            value = item[key]
-            if isinstance(value, list):
-                value.append(data)
-            else:
-                item[key] = [value, data]
-        except KeyError:
-            item[key] = data
-        return item
-
-
-def parsexml(xml_input, encoding=None, expat=expat, process_namespaces=False,
-          namespace_separator=':', **kwargs):
-    """Parse the given XML input and convert it into a dictionary.
-
-    `xml_input` can either be a `string` or a file-like object.
-
-    If `xml_attribs` is `True`, element attributes are put in the dictionary
-    among regular child elements, using `@` as a prefix to avoid collisions. If
-    set to `False`, they are just ignored.
-
-    Simple example::
-
-        >>> import xmltodict
-        >>> doc = xmltodict.parse(\"\"\"
-        ... <a prop="x">
-        ...   <b>1</b>
-        ...   <b>2</b>
-        ... </a>
-        ... \"\"\")
-        >>> doc['a']['@prop']
-        u'x'
-        >>> doc['a']['b']
-        [u'1', u'2']
-
-    If `item_depth` is `0`, the function returns a dictionary for the root
-    element (default behavior). Otherwise, it calls `item_callback` every time
-    an item at the specified depth is found and returns `None` in the end
-    (streaming mode).
-
-    The callback function receives two parameters: the `path` from the document
-    root to the item (name-attribs pairs), and the `item` (dict). If the
-    callback's return value is false-ish, parsing will be stopped with the
-    :class:`ParsingInterrupted` exception.
-
-    Streaming example::
-
-        >>> def handle(path, item):
-        ...     print 'path:%s item:%s' % (path, item)
-        ...     return True
-        ...
-        >>> xmltodict.parse(\"\"\"
-        ... <a prop="x">
-        ...   <b>1</b>
-        ...   <b>2</b>
-        ... </a>\"\"\", item_depth=2, item_callback=handle)
-        path:[(u'a', {u'prop': u'x'}), (u'b', None)] item:1
-        path:[(u'a', {u'prop': u'x'}), (u'b', None)] item:2
-
-    The optional argument `postprocessor` is a function that takes `path`,
-    `key` and `value` as positional arguments and returns a new `(key, value)`
-    pair where both `key` and `value` may have changed. Usage example::
-
-        >>> def postprocessor(path, key, value):
-        ...     try:
-        ...         return key + ':int', int(value)
-        ...     except (ValueError, TypeError):
-        ...         return key, value
-        >>> xmltodict.parse('<a><b>1</b><b>2</b><b>x</b></a>',
-        ...                 postprocessor=postprocessor)
-        OrderedDict([(u'a', OrderedDict([(u'b:int', [1, 2]), (u'b', u'x')]))])
-
-    You can pass an alternate version of `expat` (such as `defusedexpat`) by
-    using the `expat` parameter. E.g:
-
-        >>> import defusedexpat
-        >>> xmltodict.parse('<a>hello</a>', expat=defusedexpat.pyexpat)
-        OrderedDict([(u'a', u'hello')])
-
-    """
-    handler = _DictSAXHandler(namespace_separator=namespace_separator,
-                              **kwargs)
-    if isinstance(xml_input, _unicode):
-        if not encoding:
-            encoding = 'utf-8'
-        xml_input = xml_input.encode(encoding)
-    if not process_namespaces:
-        namespace_separator = None
-    parser = expat.ParserCreate(
-        encoding,
-        namespace_separator
-    )
-    try:
-        parser.ordered_attributes = True
-    except AttributeError:
-        # Jython's expat does not support ordered_attributes
-        pass
-    parser.StartElementHandler = handler.startElement
-    parser.EndElementHandler = handler.endElement
-    parser.CharacterDataHandler = handler.characters
-    parser.buffer_text = True
-    try:
-        parser.ParseFile(xml_input)
-    except (TypeError, AttributeError):
-        parser.Parse(xml_input, True)
-    return handler.item
-
-
-def _emit(key, value, content_handler,
-          attr_prefix='@',
-          cdata_key='#text',
-          depth=0,
-          preprocessor=None,
-          pretty=False,
-          newl='\n',
-          indent='\t'):
-    if preprocessor is not None:
-        result = preprocessor(key, value)
-        if result is None:
-            return
-        key, value = result
-    if not isinstance(value, (list, tuple)):
-        value = [value]
-    if depth == 0 and len(value) > 1:
-        raise ValueError('document with multiple roots')
-    for v in value:
-        if v is None:
-            v = OrderedDict()
-        elif not isinstance(v, dict):
-            v = _unicode(v)
-        if isinstance(v, _basestring):
-            v = OrderedDict(((cdata_key, v),))
-        cdata = None
-        attrs = OrderedDict()
-        children = []
-        for ik, iv in v.items():
-            if ik == cdata_key:
-                cdata = iv
-                continue
-            if ik.startswith(attr_prefix):
-                attrs[ik[len(attr_prefix):]] = iv
-                continue
-            children.append((ik, iv))
-        if pretty:
-            content_handler.ignorableWhitespace(depth * indent)
-        content_handler.startElement(key, AttributesImpl(attrs))
-        if pretty and children:
-            content_handler.ignorableWhitespace(newl)
-        for child_key, child_value in children:
-            _emit(child_key, child_value, content_handler,
-                  attr_prefix, cdata_key, depth+1, preprocessor,
-                  pretty, newl, indent)
-        if cdata is not None:
-            content_handler.characters(cdata)
-        if pretty and children:
-            content_handler.ignorableWhitespace(depth * indent)
-        content_handler.endElement(key)
-        if pretty and depth:
-            content_handler.ignorableWhitespace(newl)
-
-
-def unparse(input_dict, output=None, encoding='utf-8', full_document=True, **kwargs):
-
-    """Emit an XML document for the given `input_dict` (reverse of `parse`).
-    The resulting XML document is returned as a string, but if `output`
-    (afile-like object) is specified, it is written there instead.
-    Dictionary keys prefixed with `attr_prefix` (default=`'@'`) are interpreted
-    as XML node attributes, whereas keys equal to `cdata_key`
-    (default=`'#text'`) are treated as character data.
-    The `pretty` parameter (default=`False`) enables pretty-printing. In this
-    mode, lines are terminated with `'\n'` and indented with `'\t'`, but this
-    can be customized with the `newl` and `indent` parameters.
-    """
-    ((key, value),) = input_dict.items()
-    must_return = False
-    if output is None:
-        output = StringIO()
-        must_return = True
-    content_handler = XMLGenerator(output, encoding)
-    if full_document:
-        content_handler.startDocument()
-    _emit(key, value, content_handler, **kwargs)
-    if full_document:
-        content_handler.endDocument()
-    if must_return:
-        value = output.getvalue()
-        try:  # pragma no cover
-            value = value.decode(encoding)
-        except AttributeError:  # pragma no cover
-            pass
-        return value
-
-if __name__ == '__main__':  # pragma: no cover
-    import sys
-    import marshal
-
-    (item_depth,) = sys.argv[1:]
-    item_depth = int(item_depth)
-
-    def handle_item(path, item):
-        marshal.dump((path, item), sys.stdout)
-        return True
-
-    try:
-        root = parsexml(sys.stdin,
-                     item_depth=item_depth,
-                     item_callback=handle_item,
-                     dict_constructor=dict)
-        if item_depth == 0:
-            handle_item([], root)
-    except KeyboardInterrupt:
-        pass
diff --git a/modules/cli_tool/padavan.py b/modules/cli_tool/padavan.py
index 647877c6885a62b834ec295f57f84f9e8b53a9cf..cc7232474f346215fed76c5c998f4932dc0347ee 100644
--- a/modules/cli_tool/padavan.py
+++ b/modules/cli_tool/padavan.py
@@ -1,6 +1,30 @@
+#
+#  engine
+#
+#  Playout Daemon for autoradio project
+#
+#
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
+#
+#  This file is part of engine.
+#
+#  engine 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
+#  any later version.
+#
+#  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
+#
+
 import simplejson
 
-from libraries.enum.redischannel import RedisChannel
+from libraries.enum.auraenumerations import RedisChannel, TerminalColors
 from modules.communication.redis.adapter import ClientRedisAdapter, ServerRedisAdapter
 from modules.communication.redis.messenger import RedisMessenger
 from libraries.database.broadcasts import AuraDatabaseModel
@@ -142,7 +166,6 @@ class Padavan:
                 " - plays " + str(entry["source"]) + "\n"
 
     def print_connection_status(self, connection_status):
-        from libraries.enum.consolecolor import TerminalColors
 
         if connection_status["pv"]:
             self.stringreply = "Connection to pv:    " + TerminalColors.GREEN.value + " " + str(connection_status["pv"]) + TerminalColors.ENDC.value
diff --git a/modules/communication/connection_tester.py b/modules/communication/connection_tester.py
index 0b5a26347fb464fd9785c761777a386604041b95..264304a1ab691d1eef08a8a31622d49bb844054c 100644
--- a/modules/communication/connection_tester.py
+++ b/modules/communication/connection_tester.py
@@ -1,3 +1,27 @@
+#
+#  engine
+#
+#  Playout Daemon for autoradio project
+#
+#
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
+#
+#  This file is part of engine.
+#
+#  engine 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
+#  any later version.
+#
+#  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
+#
+
 import urllib
 import logging
 import simplejson
diff --git a/modules/communication/liquidsoap/client.py b/modules/communication/liquidsoap/client.py
index 2f3d46e2caa519a87b9faf6eef32a26e73cae0bd..b17e5bf40347bc63846df610101a564c0993d9f4 100644
--- a/modules/communication/liquidsoap/client.py
+++ b/modules/communication/liquidsoap/client.py
@@ -1,5 +1,27 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
+#
+#  engine
+#
+#  Playout Daemon for autoradio project
+#
+#
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
+#
+#  This file is part of engine.
+#
+#  engine 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
+#  any later version.
+#
+#  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
+#
+
 import socket
 import urllib.parse
 import configparser
@@ -10,8 +32,9 @@ from multiprocessing import Lock
 from libraries.exceptions.auraexceptions import LQConnectionError
 
 
-""" LiquidSoapClient Class 
-    Repräsentiert alle Kommandos, die Soundserver und Recorder kennen
+""" 
+    LiquidSoapClient Class 
+    Connects to a LiquidSoap instance over a socket and sends commands to it
 """
 
 
@@ -183,6 +206,11 @@ class LiquidSoapClient:
                 self.read()
 
                 self.logger.info("LiquidSoapClient got reply: " + self.message)
+            except BrokenPipeError as e:
+                self.logger.error("Detected a problem with liquidsoap connection while sending: " + message + ". Reason: " + str(e) + "! Trying to reconnect.")
+                self.connect()
+                raise
+
             except Exception as e:
                 self.logger.error("Unexpected error: " + str(e))
                 raise
diff --git a/modules/communication/liquidsoap/communicator.py b/modules/communication/liquidsoap/communicator.py
index ef353c5b30bafc3c3c57c5c58a3a48c30b29b4ca..7bf92a2e347f69f23425f7b3fdf03152f5aa2a6d 100644
--- a/modules/communication/liquidsoap/communicator.py
+++ b/modules/communication/liquidsoap/communicator.py
@@ -1,3 +1,27 @@
+#
+#  engine
+#
+#  Playout Daemon for autoradio project
+#
+#
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
+#
+#  This file is part of engine.
+#
+#  engine 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
+#  any later version.
+#
+#  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
+#
+
 import os
 import time
 import codecs
@@ -6,18 +30,20 @@ import logging
 import tempfile
 import simplejson
 
-from modules.base.parsexml import parsexml
 from modules.communication.liquidsoap.playerclient import LiquidSoapPlayerClient
 from modules.communication.liquidsoap.recorderclient import LiquidSoapRecorderClient
 from modules.communication.liquidsoap.initthread import LiquidSoapInitThread
 from modules.communication.mail.mail import AuraMailer
 
-from libraries.enum.consolecolor import TerminalColors
+from libraries.enum.auraenumerations import TerminalColors, ScheduleEntryType
 from libraries.exceptions.auraexceptions import LQConnectionError
 from libraries.database.broadcasts import TrackService
 from libraries.exceptions.exception_logger import ExceptionLogger
-from libraries.enum.scheduleentrytype import ScheduleEntryType
 
+""" 
+    LiquidSoapCommunicator Class 
+    Uses LiquidSoapClient, but introduces more complex commands, transactions and error handling
+"""
 
 class LiquidSoapCommunicator(ExceptionLogger):
     client = None
@@ -151,18 +177,19 @@ class LiquidSoapCommunicator(ExceptionLogger):
 
     # ------------------------------------------------------------------------------------------ #
     def recorder_start_all(self):
+        self.enable_transaction()
         for i in range(5):
             self.recorder_start_one(i)
+        self.disable_transaction()
 
     # ------------------------------------------------------------------------------------------ #
     def recorder_start_one(self, num):
-        self.enable_transaction()
+
         if self.config.get("rec_" + str(num)) == "y":
             returnvalue = self.__send_lqc_command__(self.client, "recorder", str(num), "status")
 
             if returnvalue == "off":
                 self.__send_lqc_command__(self.client, "recorder", str(num), "start")
-        self.disable_transaction()
 
     # ------------------------------------------------------------------------------------------ #
     def activate(self, entry):
@@ -208,7 +235,7 @@ class LiquidSoapCommunicator(ExceptionLogger):
         self.activate_same_channel(entry, True)
 
         # set others to zero volume
-        others = self.all_inputs_but(entry.type.value)
+        others = self.all_inputs_but(entry.getChannel())
         for o in others:
             self.channel_volume(o, 0)
         # set active channel to wanted volume
@@ -228,8 +255,8 @@ class LiquidSoapCommunicator(ExceptionLogger):
         try:
             activemixer_copy = self.get_all_channels().copy()
             activemixer_copy.remove(input_type)
-        except ValueError:
-            self.logger.error("Requested channel not in channellist ")
+        except ValueError as e:
+            self.logger.error("Requested channel (" + input_type + ") not in channellist. Reason: " + str(e))
         except AttributeError:
             self.logger.critical("Channellist is None")
 
@@ -790,7 +817,9 @@ class LiquidSoapCommunicator(ExceptionLogger):
         with codecs.open(filename, "w", encoding="utf8") as text_file:
             text_file.write(xml)
 
-        playlist = parsexml(xml)
+        # playlist = parsexml(xml)
+        self.logger.critical("playlist commented out, due to removal of parsexml")
+        playlist = dict()
 
         if not isinstance(playlist, dict):
             self.error("02")
@@ -981,25 +1010,6 @@ class LiquidSoapCommunicator(ExceptionLogger):
         self.success("00", data)
         self.notifyClient()
 
-        # ------------------------------------------------------------------------------------------ #
-        def http_start_stop(self, start):
-            if start:
-                cmd = "start"
-            else:
-                cmd = "stop"
-
-            try:
-                self.enable_transaction()
-                self.__send_lqc_command__(self.lqc, "http", cmd)
-                self.disable_transaction()
-            except LQConnectionError as e:
-                # we already caught and handled this error in __send_lqc_command__, but we do not want to execute this function further
-                pass
-
-
-
-
-
     # ------------------------------------------------------------------------------------------ #
     def recorder_data(self):
         """
@@ -1039,8 +1049,10 @@ class LiquidSoapCommunicator(ExceptionLogger):
         @return:             Response from LiquidSoap
         """
         try:
-
-            self.logger.info("LiquidSoapCommunicator is calling " + str(namespace) + "." + str(command) + str(args))
+            if namespace == "recorder":
+                self.logger.info("LiquidSoapCommunicator is calling " + str(namespace) + "_" + str(command) + "." + str(args))
+            else:
+                self.logger.info("LiquidSoapCommunicator is calling " + str(namespace) + "." + str(command) + str(args))
 
             # call wanted function ...
             func = getattr(lqs_instance, namespace)
diff --git a/modules/communication/liquidsoap/initthread.py b/modules/communication/liquidsoap/initthread.py
index f31f42d25f577214e18291cca2263ef97714091a..5d6fbbd59338aea9fd1e82f400b178ffbb16cbd3 100644
--- a/modules/communication/liquidsoap/initthread.py
+++ b/modules/communication/liquidsoap/initthread.py
@@ -1,8 +1,32 @@
+#
+#  engine
+#
+#  Playout Daemon for autoradio project
+#
+#
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
+#
+#  This file is part of engine.
+#
+#  engine 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
+#  any later version.
+#
+#  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
+#
+
 import time
 import logging
 import threading
 
-from libraries.enum.scheduleentrytype import ScheduleEntryType
+from libraries.enum.auraenumerations import ScheduleEntryType
 
 
 class LiquidSoapInitThread(threading.Thread):
diff --git a/modules/communication/liquidsoap/playerclient.py b/modules/communication/liquidsoap/playerclient.py
index cfe0e765768b1dcc84a82423558069f49c7dc489..0a1e01a9fc21f61f718e16bc52c6ae1d2188feab 100644
--- a/modules/communication/liquidsoap/playerclient.py
+++ b/modules/communication/liquidsoap/playerclient.py
@@ -1,3 +1,27 @@
+#
+#  engine
+#
+#  Playout Daemon for autoradio project
+#
+#
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
+#
+#  This file is part of engine.
+#
+#  engine 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
+#  any later version.
+#
+#  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
+#
+
 from modules.communication.liquidsoap.client import LiquidSoapClient
 
 
diff --git a/modules/communication/liquidsoap/recorderclient.py b/modules/communication/liquidsoap/recorderclient.py
index 2b9827a02b3dd605ef2aff88c4075ac008f3a6a0..862941d33c550f491ddc2f82d64f59ddd251a69e 100644
--- a/modules/communication/liquidsoap/recorderclient.py
+++ b/modules/communication/liquidsoap/recorderclient.py
@@ -1,3 +1,27 @@
+#
+#  engine
+#
+#  Playout Daemon for autoradio project
+#
+#
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
+#
+#  This file is part of engine.
+#
+#  engine 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
+#  any later version.
+#
+#  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
+#
+
 from modules.communication.liquidsoap.client import LiquidSoapClient
 
 class LiquidSoapRecorderClient(LiquidSoapClient):
diff --git a/modules/communication/mail/mail.py b/modules/communication/mail/mail.py
index ab640a6c56c04924b37dfc8aca2997b3ee8b8a7d..53b4d139948ededd765c5664029624ec4977a32f 100644
--- a/modules/communication/mail/mail.py
+++ b/modules/communication/mail/mail.py
@@ -1,4 +1,26 @@
-__author__ = 'gg'
+#
+#  engine
+#
+#  Playout Daemon for autoradio project
+#
+#
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
+#
+#  This file is part of engine.
+#
+#  engine 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
+#  any later version.
+#
+#  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
+#
 
 import os
 import smtplib
@@ -40,11 +62,11 @@ class AuraMailer():
 
         msg = EmailMessage()
         msg.set_content(body)
-        mail_prefix = self.config.get("mail_prefix")
-        if mail_prefix == "":
+        mailsubject_prefix = self.config.get("mailsubject_prefix")
+        if mailsubject_prefix == "":
             msg["Subject"] = subject
         else:
-            msg["Subject"] = mail_prefix + " " + subject
+            msg["Subject"] = mailsubject_prefix + " " + subject
         msg["From"] = from_mail
         msg["To"] = mail_to
 
diff --git a/modules/communication/redis/adapter.py b/modules/communication/redis/adapter.py
index 2927e5bdf3cec702f5a657d2557d5e5345ef078b..d0f70bb6776d7b4a82a8c0629a76c27955bc30f3 100644
--- a/modules/communication/redis/adapter.py
+++ b/modules/communication/redis/adapter.py
@@ -1,3 +1,27 @@
+#
+#  engine
+#
+#  Playout Daemon for autoradio project
+#
+#
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
+#
+#  This file is part of engine.
+#
+#  engine 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
+#  any later version.
+#
+#  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
+#
+
 import sys
 import time
 import redis
@@ -11,8 +35,7 @@ from modules.communication.redis.messenger import RedisMessenger
 from modules.communication.connection_tester import ConnectionTester
 from libraries.database.statestore import RedisStateStore
 from libraries.exceptions.auraexceptions import RedisConnectionException
-from libraries.enum.consolecolor import TerminalColors
-from libraries.enum.redischannel import RedisChannel
+from libraries.enum.auraenumerations import RedisChannel, TerminalColors
 
 
 class ServerRedisAdapter(threading.Thread, RedisMessenger):
diff --git a/modules/communication/redis/messenger.py b/modules/communication/redis/messenger.py
index 5b2c4d885a0eb27051a273d136a25cab0e7874b0..00f119acd8e113112180b72a9eb04c1897b574a5 100644
--- a/modules/communication/redis/messenger.py
+++ b/modules/communication/redis/messenger.py
@@ -1,4 +1,27 @@
-# -*- coding: utf-8 -*-
+#
+#  engine
+#
+#  Playout Daemon for autoradio project
+#
+#
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
+#
+#  This file is part of engine.
+#
+#  engine 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
+#  any later version.
+#
+#  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
+#
+
 import time
 import logging
 import datetime
@@ -6,7 +29,7 @@ import datetime
 from libraries.database.statestore import RedisStateStore
 from modules.communication.mail.mail import AuraMailer
 from libraries.exceptions.auraexceptions import PlaylistException
-from libraries.enum.redischannel import RedisChannel
+from libraries.enum.auraenumerations import RedisChannel
 from libraries.base.logger import AuraLogger
 
 """
diff --git a/modules/liquidsoap/alsa_settings_tester.liq b/modules/liquidsoap/alsa_settings_tester.liq
index addd66e3cfaf4e0dca926f9b3fc8e833a8218724..a3a4ee239c69826dc9c95374dede202afc3b6c40 100644
--- a/modules/liquidsoap/alsa_settings_tester.liq
+++ b/modules/liquidsoap/alsa_settings_tester.liq
@@ -1,3 +1,27 @@
+#
+#  engine
+#
+#  Playout Daemon for autoradio project
+#
+#
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
+#
+#  This file is part of engine.
+#
+#  engine 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
+#  any later version.
+#
+#  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
+#
+
 set("log.file.path", "./<script>.log")
 
 set("server.telnet", true)
diff --git a/modules/liquidsoap/engine.liq b/modules/liquidsoap/engine.liq
index 13b70dcdda2f74d903d7b883b5697a744b5d0c74..877d861b8f35d2531700d9c8a17842ed74ec4896 100644
--- a/modules/liquidsoap/engine.liq
+++ b/modules/liquidsoap/engine.liq
@@ -1,5 +1,29 @@
 #!/usr/bin/liquidsoap
 
+#
+#  engine
+#
+#  Playout Daemon for autoradio project
+#
+#
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
+#
+#  This file is part of engine.
+#
+#  engine 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
+#  any later version.
+#
+#  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
+#
+
 icecast_vorbis_metadata = false
 inputs = ref []
 
diff --git a/modules/liquidsoap/fallback.liq b/modules/liquidsoap/fallback.liq
index a77a3f9bd0a15d83e1c706849df78a3d80af3330..2644c3f96f71c952d42d8f51cb1462c61b529847 100644
--- a/modules/liquidsoap/fallback.liq
+++ b/modules/liquidsoap/fallback.liq
@@ -1,3 +1,27 @@
+#
+#  engine
+#
+#  Playout Daemon for autoradio project
+#
+#
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
+#
+#  This file is part of engine.
+#
+#  engine 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
+#  any later version.
+#
+#  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
+#
+
 # Custom crossfade to deal with jingles.
 def smart_crossfade (~start_next=5.,~fade_in=3.,~fade_out=3.,
                      ~default=(fun (a,b) -> sequence([a, b])),
diff --git a/modules/liquidsoap/in_filesystem.liq b/modules/liquidsoap/in_filesystem.liq
index 2e451b89e11fad2205e6aa0e87c01bf6ac896da8..e1c57f91c32bf7479c1bd867932fa50db8f5b989 100644
--- a/modules/liquidsoap/in_filesystem.liq
+++ b/modules/liquidsoap/in_filesystem.liq
@@ -1,2 +1,26 @@
+#
+#  engine
+#
+#  Playout Daemon for autoradio project
+#
+#
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
+#
+#  This file is part of engine.
+#
+#  engine 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
+#  any later version.
+#
+#  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
+#
+
 # a hard one
 input_fs = request.queue(id="fs")
\ No newline at end of file
diff --git a/modules/liquidsoap/in_soundcard.liq b/modules/liquidsoap/in_soundcard.liq
index 63926f34f4b8d42a79a985ffd7df6d48a8d29b71..0289a3b0c016fe10ddc096204a3f1fffe9f3de31 100644
--- a/modules/liquidsoap/in_soundcard.liq
+++ b/modules/liquidsoap/in_soundcard.liq
@@ -1,3 +1,26 @@
+#
+#  engine
+#
+#  Playout Daemon for autoradio project
+#
+#
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
+#
+#  This file is part of engine.
+#
+#  engine 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
+#  any later version.
+#
+#  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
+#
 
 if a0_in != "" then
     # we can ignore the result, since it is stored in the list 'inputs'
diff --git a/modules/liquidsoap/in_stream.liq b/modules/liquidsoap/in_stream.liq
index 9aff76d1db0fe624b79df8a846934d738d8d4528..0a723b8827f226982f0bb1eaa151bbf500fceb97 100644
--- a/modules/liquidsoap/in_stream.liq
+++ b/modules/liquidsoap/in_stream.liq
@@ -1,3 +1,27 @@
+#
+#  engine
+#
+#  Playout Daemon for autoradio project
+#
+#
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
+#
+#  This file is part of engine.
+#
+#  engine 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
+#  any later version.
+#
+#  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
+#
+
 # this is overwritten as soon as a streamovertake is programmed, but liquidsoap needs it to initialize this input
 #starturl = "http://stream.fro.at/fro-128.ogg"
 starturl = "http://chill.out.airtime.pro:8000/chill_a"
diff --git a/modules/liquidsoap/library.liq b/modules/liquidsoap/library.liq
index b4db9d413e355953adc8a1ac4b13e09b9d50130c..87d5f725378ae1dc0814a82c30881580459d1112 100644
--- a/modules/liquidsoap/library.liq
+++ b/modules/liquidsoap/library.liq
@@ -1,3 +1,27 @@
+#
+#  engine
+#
+#  Playout Daemon for autoradio project
+#
+#
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
+#
+#  This file is part of engine.
+#
+#  engine 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
+#  any later version.
+#
+#  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
+#
+
 #####################
 # stream to icecast #
 #####################
diff --git a/modules/liquidsoap/out_filesystem.liq b/modules/liquidsoap/out_filesystem.liq
index eb5800a76d27460eb6c93f9957efead3083e0e50..ba9e1d12b82c0ac2af5c791ea508128ebe5781be 100644
--- a/modules/liquidsoap/out_filesystem.liq
+++ b/modules/liquidsoap/out_filesystem.liq
@@ -1,3 +1,27 @@
+#
+#  engine
+#
+#  Playout Daemon for autoradio project
+#
+#
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
+#
+#  This file is part of engine.
+#
+#  engine 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
+#  any later version.
+#
+#  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
+#
+
 r0_enable = list.assoc("rec_0", ini) == "y"
 r1_enable = list.assoc("rec_1", ini) == "y"
 r2_enable = list.assoc("rec_2", ini) == "y"
diff --git a/modules/liquidsoap/out_soundcard.liq b/modules/liquidsoap/out_soundcard.liq
index 8065e3ae2bd51d4319ac473a9b787e202ec6df2d..1f9d85d3a264d38fe8708bb4a6a2409acc7fcd4a 100644
--- a/modules/liquidsoap/out_soundcard.liq
+++ b/modules/liquidsoap/out_soundcard.liq
@@ -1,3 +1,26 @@
+#
+#  engine
+#
+#  Playout Daemon for autoradio project
+#
+#
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
+#
+#  This file is part of engine.
+#
+#  engine 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
+#  any later version.
+#
+#  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
+#
 
 if a0_out != "" then
     ignore(get_output(output_source, a0_out, "aura_lineout_0"))
diff --git a/modules/liquidsoap/out_stream.liq b/modules/liquidsoap/out_stream.liq
index b7f010f9772efa54c8772061ea48fcd6cf5dda25..4de2b7bc1e60df1d12c78918955c0a6dacfa646d 100644
--- a/modules/liquidsoap/out_stream.liq
+++ b/modules/liquidsoap/out_stream.liq
@@ -1,3 +1,26 @@
+#
+#  engine
+#
+#  Playout Daemon for autoradio project
+#
+#
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
+#
+#  This file is part of engine.
+#
+#  engine 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
+#  any later version.
+#
+#  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
+#
 
 # Output streaming settings
 # What a mess...
diff --git a/modules/liquidsoap/readini.liq b/modules/liquidsoap/readini.liq
index dc4096863d0eed8e1cb500eff12385349ab986ae..5967576404013f4a32a504472074766358b34953 100644
--- a/modules/liquidsoap/readini.liq
+++ b/modules/liquidsoap/readini.liq
@@ -1,3 +1,27 @@
+#
+#  engine
+#
+#  Playout Daemon for autoradio project
+#
+#
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
+#
+#  This file is part of engine.
+#
+#  engine 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
+#  any later version.
+#
+#  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
+#
+
 #################
 # Read INI File #
 #################
diff --git a/modules/liquidsoap/serverfunctions.liq b/modules/liquidsoap/serverfunctions.liq
index 2f4a81582222132770282965c7eaac47db1318bc..e179a8880e93f2ed2a76e70af4ae8a55710d933a 100644
--- a/modules/liquidsoap/serverfunctions.liq
+++ b/modules/liquidsoap/serverfunctions.liq
@@ -1,3 +1,27 @@
+#
+#  engine
+#
+#  Playout Daemon for autoradio project
+#
+#
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
+#
+#  This file is part of engine.
+#
+#  engine 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
+#  any later version.
+#
+#  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
+#
+
 # shutdown server function
 #server.register(namespace='server',
 #    description="shutdown server",
diff --git a/modules/liquidsoap/settings.liq b/modules/liquidsoap/settings.liq
index 6d064af7ae639d0c4a1a268bb32e35e1ad47b887..923a857f49f30d9e1bb18558211d0ec2ce234d1b 100644
--- a/modules/liquidsoap/settings.liq
+++ b/modules/liquidsoap/settings.liq
@@ -1,3 +1,27 @@
+#
+#  engine
+#
+#  Playout Daemon for autoradio project
+#
+#
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
+#
+#  This file is part of engine.
+#
+#  engine 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
+#  any later version.
+#
+#  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
+#
+
 # READ INI FILE
 %include "readini.liq"
 ini = read_ini("/etc/aura/engine.ini")
diff --git a/modules/monitoring/diskspace_watcher.py b/modules/monitoring/diskspace_watcher.py
index 09a124bb6e535fbcc1adc8a5aaa7acaaf2bd64fa..10b53d8400fbc98498128ff45d4b0a7c20275651 100644
--- a/modules/monitoring/diskspace_watcher.py
+++ b/modules/monitoring/diskspace_watcher.py
@@ -1,3 +1,27 @@
+#
+#  engine
+#
+#  Playout Daemon for autoradio project
+#
+#
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
+#
+#  This file is part of engine.
+#
+#  engine 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
+#  any later version.
+#
+#  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
+#
+
 import os
 import datetime
 import threading
@@ -27,7 +51,10 @@ class DiskSpaceWatcher(threading.Thread):
 
     def run(self):
         # set seconds to wait
-        seconds_to_wait = int(self.config.get("diskspace_check_interval"))
+        try:
+            seconds_to_wait = int(self.config.get("diskspace_check_interval"))
+        except:
+            seconds_to_wait = 600
 
         # while True:
         while not self.exit_event.is_set():
@@ -41,8 +68,7 @@ class DiskSpaceWatcher(threading.Thread):
             self.check_disk_space()
 
             # and wait
-            #self.exit_event.wait(seconds_to_wait)
-            self.stop()
+            self.exit_event.wait(seconds_to_wait)
 
     def stop(self):
         self.exit_event.set()
@@ -53,7 +79,7 @@ class DiskSpaceWatcher(threading.Thread):
         self.check_logging_disk_space()
 
         if self.is_critical:
-            self.logger.critical("Recorder STOPPED due to diskspace! FIX THIS!!!")
+            self.logger.critical("Recorder STOPPED due to LOW diskspace! FIX THIS!!!")
 
         if self.sent_a_mail:
             self.logger.warning("Recorder is going stop soon because of not enough diskspace! FIX THIS!")
diff --git a/modules/scheduling/calendar.py b/modules/scheduling/calendar.py
index 608d27c5ac6edf4f7415842c773377cf1384a62e..767eac9f88ffcf8d3c192a565f49f6c9eb17c01a 100644
--- a/modules/scheduling/calendar.py
+++ b/modules/scheduling/calendar.py
@@ -1,3 +1,26 @@
+#
+#  engine
+#
+#  Playout Daemon for autoradio project
+#
+#
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
+#
+#  This file is part of engine.
+#
+#  engine 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
+#  any later version.
+#
+#  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
+#
 
 import os
 import sys
@@ -12,7 +35,7 @@ from mutagen.flac import FLAC
 from datetime import datetime, timedelta
 
 from libraries.database.broadcasts import Schedule, ScheduleEntry
-from libraries.enum.scheduleentrytype import ScheduleEntryType
+from libraries.enum.auraenumerations import ScheduleEntryType
 from modules.communication.redis.messenger import RedisMessenger
 
 
diff --git a/modules/scheduling/scheduler.py b/modules/scheduling/scheduler.py
index 47971519c2be5f86a5f3d9f15d8cf958e234d3c6..dbd56eee2ebe4ff6cf195e8061e5a70e6c1fd759 100644
--- a/modules/scheduling/scheduler.py
+++ b/modules/scheduling/scheduler.py
@@ -1,22 +1,26 @@
-# -*- coding: utf-8 -*-
 #
-# scheduler.py
+#  engine
 #
-#       Copyright 2018 Radio FRO <https://fro.at>, Radio Helsinki <https://helsinki.at>, Radio Orange <https://o94.at>
+#  Playout Daemon for autoradio project
 #
-#       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; Version 3 of the License
 #
-#       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.
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
 #
-#       You should have received a copy of the GNU General Public License
-#       along with this program; if not, the license can be downloaded here:
+#  This file is part of engine.
+#
+#  engine 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
+#  any later version.
+#
+#  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
 #
-#       http://www.gnu.org/licenses/gpl.html
 
 # Meta
 __version__ = '0.0.1'
@@ -43,7 +47,7 @@ from modules.communication.redis.messenger import RedisMessenger
 from modules.scheduling.calendar import AuraCalendarService
 from libraries.database.broadcasts import Schedule, ScheduleEntry, AuraDatabaseModel
 from libraries.exceptions.exception_logger import ExceptionLogger
-from libraries.enum.scheduleentrytype import ScheduleEntryType
+from libraries.enum.auraenumerations import ScheduleEntryType
 
 
 def alchemyencoder(obj):
@@ -134,7 +138,7 @@ class AuraScheduler(ExceptionLogger, threading.Thread):
 
     def run(self):
         # set seconds to wait
-        seconds_to_wait = self.config.get("fetching_frequency")
+        seconds_to_wait = int(self.config.get("fetching_frequency"))
 
         #while True:
         while not self.exit_event.is_set():
@@ -145,8 +149,8 @@ class AuraScheduler(ExceptionLogger, threading.Thread):
             self.logger.info("Fetch new programmes every " + str(seconds_to_wait) + "s started. Going to start next time " + str(next_time))
 
             # empty database
-            self.logger.info("emptying database")
-            ScheduleEntry.truncate()
+#            self.logger.info("emptying database")
+#            ScheduleEntry.truncate()
 
             # fetch new programme
             self.fetch_new_programme()
@@ -182,7 +186,8 @@ class AuraScheduler(ExceptionLogger, threading.Thread):
 
     # ------------------------------------------------------------------------------------------ #
     def load_programme_from_db(self, silent=False):
-        self.programme = ScheduleEntry.select_all()
+        #self.programme = ScheduleEntry.select_all()
+        self.programme = ScheduleEntry.select_act_programme()
 
         # now in unixtime
         now_unix = time.mktime(datetime.datetime.now().timetuple())
diff --git a/modules/web/routes.py b/modules/web/routes.py
index 3cfa6aa7446d969f7355d0a6f724255c6374b203..e602056ffed1cc82a1f958b6fd0945e3665058ec 100644
--- a/modules/web/routes.py
+++ b/modules/web/routes.py
@@ -1,3 +1,26 @@
+#
+#  engine
+#
+#  Playout Daemon for autoradio project
+#
+#
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
+#
+#  This file is part of engine.
+#
+#  engine 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
+#  any later version.
+#
+#  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
+#
 
 import simplejson
 import decimal
diff --git a/test.py b/test.py
index 1e2ea9ed16e2ce195a8be16437b3471926d05bb6..c88146923b51fa2c0cadae95bebb59b5b4513261 100755
--- a/test.py
+++ b/test.py
@@ -1,5 +1,29 @@
 #!/usr/bin/python3
 
+#
+#  engine
+#
+#  Playout Daemon for autoradio project
+#
+#
+#  Copyright (C) 2017-2018 Gottfried Gaisbauer <gottfried.gaisbauer@servus.at>
+#
+#  This file is part of engine.
+#
+#  engine 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
+#  any later version.
+#
+#  engine 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 engine. If not, see <http://www.gnu.org/licenses/>.
+#
+
 from libraries.database.broadcasts import *
 import simplejson
 import logging
@@ -36,12 +60,18 @@ def start_diskspace_watcher():
     diskspace_watcher = DiskSpaceWatcher(config.config, logging.getLogger("AuraEngine"), LiquidSoapCommunicator(config.config))
     diskspace_watcher.run()
 
+def select_act_programme():
+    programme = ScheduleEntry.select_act_programme()
+    for p in programme:
+        print(p)
+
 # # ## ## ## ## ## # #
 # # ENTRY FUNCTION # #
 # # ## ## ## ## ## # #
 def main():
     #select_with_relationship()
-    start_diskspace_watcher()
+    #start_diskspace_watcher()
+    select_act_programme()
 # # ## ## ## ## ## ## # #
 # # End ENTRY FUNCTION # #
 # # ## ## ## ## ## ## # #
diff --git a/testing/test.py b/testing/test.py
index 5a9ef6a380d94c9021e04aed605b7d6914ba1d2e..17a47ec57fe8c955bcf40e55a7a09d252e5918e4 100644
--- a/testing/test.py
+++ b/testing/test.py
@@ -10,7 +10,7 @@ from libraries.base.config import AuraConfig
 # libraries.database
 from libraries.database.broadcasts import Schedule, ScheduleEntry, TrackService
 # libraries.security
-from libraries.security.user import AuraUser
+# from libraries.security.user import AuraUser
 
 # modules
 from modules.communication.liquidsoap.communicator import LiquidSoapCommunicator