IMPORTANT PLEASE READ CAREFULLY LIVESTATION SOFTWARE LICENCE

This Software Licence (the "Agreement") is a legal agreement between you and
Livestation Limited,  a company incorporated  in England and  Wales (Company
No: 6872775)  having its registered office  at 32 St James's  Street, London
SW1A 1HD  (referred to  in this Agreement  as Livestation, We  or Us  as the
context  permits)  granting you  limited  rights  to  download and  use  our
software, subject to the terms of this Agreement.

ALL  PERSONAL  INFORMATION  OBTAINED  FROM   YOU  BY  US  RELATING  TO  THIS
AGREEMENT AND  THE SOFTWARE  IS SUBJECT  TO OUR  PRIVACY POLICY,  LOCATED AT
WWW.LIVESTATION.COM/PRIVACY. IF YOU DO NOT AGREE TO ANY OF THE TERMS OF THIS
AGREEMENT, YOU SHOULD NOT DOWNLOAD OR USE THE SOFTWARE:

THE PARTIES AGREE AS FOLLOWS:

1. Software Licence

We  grant you  a  personal,  non-exclusive, royalty-free,  non-transferable,
revocable licence during the Term to download and use the Livestation Player
(the "Software") without the right to sub-licence such rights, solely on the
terms and subject to the conditions  of this Agreement. The "Term" means the
period from the date that you download  the Software until the date you stop
using the Software.

2. Registered and Licensed Users

2.1 In order for you use the Software, you must register with us and provide
us  with  an email  address  and  obtain  a  unique password  for  accessing
and  using the  Software  (the  "Password"). It  is  your responsibility  to
ensure that  you keep  your Password  and other  account details  secure and
confidential. They must not be disclosed to or used by any other person. You
are responsible and wholly liable for all acts or omissions committed by any
other person who accesses and / or  uses the Software through or by means of
your account or Password.

2.2  Livestation  delivers live  television  and  radio broadcast  programme
services.  Reception of  these services  may require  a television  or radio
licence in some countries. You should ensure that your use of Livestation is
covered by such a licence where required.

2.3 Livestation also delivers desktop alerts  and messages from time to time
to your desktop by receipt of messages through your internet connection. You
will need to  keep your computer connected to the  Internet to receive these
messages.

3. The User's Obligations

3.1 You shall:

(a) only  use the Software  in the manner,  and for the  purposes, expressly
specified in this Agreement;

(b)  except as  expressly provided  in this  Agreement, not  use, reproduce,
dispose of, deal  with, rent, lease, loan, modify,  adapt, reverse engineer,
decompile or disassemble the whole or any part of the Software;

(c) except  as expressly  provided in this  Agreement, not  copy, reproduce,
republish,  upload,  post, transmit,  or  distribute  the Software,  or  any
portion thereof, or facilitate or permit any third party to do so;

(d) not  incorporate or allow the  Software to be incorporated  in any other
software;

(e) not attempt to access any systems, programs or data of ours that are not
licensed under this Agreement;

(f) not use any device or software to interfere or attempt to interfere with
the proper operation of the Software;

(g) keep confidential and not disclose (or make available any information on
or  relating to)  the  existence, features,  functionality, capabilities  or
contents of  the Software or  your conclusions, opinions, findings  or other
information regarding  the Software or  your evaluation of the  Software, or
the  contents of  this  Agreement (such  confidentiality and  non-disclosure
obligations to  survive the  termination of  this Agreement),  provided that
this Clause  shall not extend  to information  which was rightfully  in your
possession prior  to the negotiations  leading to this Agreement,  which was
already public  knowledge at the Acceptance  Date or becomes so  at a future
date (otherwise than  as a result of  a breach of this Clause)  or which you
are legally required by applicable law,  rule, regulation or lawful order or
ruling of any court, government agency or regulatory commission to disclose,
in which case you agree that you  will provide us with prompt notice of such
requirement to enable us to seek  an appropriate protective order or to take
steps to protect the confidentiality of our confidential information, and in
the event  such protection is not  obtained or we waive  compliance with the
provisions  of this  Clause,  you agree  that you  will  disclose only  that
portion of  the confidential information  which you are legally  required to
disclose. For  the avoidance of  doubt, this Clause  shall not apply  to any
information  that  we  have  expressly  directed you  to  disclose  or  make
available to us or any third party;

(h) safeguard the Software from access by anyone other than yourself; and

(i) not  delete or in any  manner alter any notices,  disclaimers, insignia,
lettering or  other legends contained  in the  Software or appearing  on any
screens, documents, reports, numeric results  or other materials obtained by
you through use of the Software.

3.2  Notwithstanding  Clause  3.1(b)  and  provided  that  the  EU  Software
Directive or other applicable law confers or  may confer on you any right to
decompile or disassemble  any portion of the Software or  its components you
shall not attempt or commence  any such disassembly or decompilation unless:
(1) prior to such actual or attempted disassembly or decompilation, you have
notified us in writing that you  require such information as is necessary to
permit you to  create an independent program which can  be operated with any
portion of  the Software  or its  components and we  have not  provided such
information  within one  (1)  month of  your written  request,  and (2)  the
information so obtained is not used for any other purpose.

3.3 You  shall not copy  or reproduce the  Software other than  as expressly
permitted elsewhere in this Agreement, except that you may make one copy for
backup  and  security  purposes.  You hereby  acknowledge  that  all  copies
(whether complete  copies or partial  copies) made  of the Software  are our
property.

4. User Representations and Warranties

4.1 You represent and  warrant to us that you have  authority to enter into 
this Agreement.                                                             

4.2 Livestation  allows users  to create links  to third-party  streams. The
streams' content, business practices and  privacy policies are not under our
control, and  we are not responsible  for the content of  any linked stream,
website or any  link contained in a linked stream  or website. The inclusion
of a link  by Livestation you add  does not imply any endorsement  by or any
affiliation with Livestation. In accessing the streams or links or following
links to third-party websites or streams  you may be exposed to content that
you consider offensive  or inappropriate. You agree that  your only recourse
is to stop  using Livestation or the  streams or links. You  may remove your
link to a stream at any time.

4.3 Livestation  reserves the  right to remove  or modify  any information, 
streams, links or  user's account at any time without  notice. In the event 
of  complaint from  any  third  party Livestation  may  contact you  before 
removing or blocking access to any  information but shall not be obliged to 
do so.  Before viewing  streams or  adding links  or other  information you 
agree to confirm  that doing so will not  be in breach of any  law or third 
party rights.                                                               

4.4  You  agree  that  we  may  copy, share,  store,  amend  or  delete  any
information  we  deem   appropriate  in  the  provision   and  operation  of
the  Livestation  service. This  ability  shall  not  reduce or  amend  your
responsibility for ensuring that use of any information (including links and
streams) you provide is legal. You recognise and agree that Livestation does
not  check  the content  of  each  link and  you  represent  and warrant  to
Livestation that  you have the right  to grant, to Livestation  a perpetual,
non-exclusive, transferable,  fully paid, worldwide license  (with the right
to sublicense) to  use, copy, publicly perform,  publicly display, reformat,
translate, excerpt (in  whole or in part) and distribute  the material which
you  are linking  to for  any purpose  connected with  Livestation including
commercial, advertising, or otherwise. You can remove a link at any time, if
you choose to remove your link, the license granted above will automatically
expire. You agree  to hold harmless and indemnify Livestation  in respect of
any claim by any third party arising from  your use of or creation of a link
to a stream in Livestation.

4.5  Livestation  makes  no  warranties  whatsoever  regarding  the  license
agreements required for accessing, and the information provided through, any
stream or link,  and disclaims all liability for  damages, including without
limitation,  any  general,  special, incidental  or  consequential  damages,
resulting from  their use.  Livestation also reserves  the right  to collect
information about creation and viewing  of user added streams, including but
not limited to anonymous usage information for statistical purposes.

5. Liability

5.1 Except as otherwise expressly provided in this Agreement:

(a) the Software is provided "as-is" and, to the maximum extent permitted by
applicable  law, we  disclaim all  conditions  and warranties  of any  kind,
express  (unless  set out  in  this  Agreement)  or implied,  regarding  the
Software or otherwise relating to this Agreement, including conditions and /
or warranties  of fitness  for a  particular purpose,  satisfactory quality,
merchantability, non-infringement and accuracy;

(b) we do not warrant or represent that the Software is or will be accurate,
free from defects, complete, without error, or free of viruses, worms, other
harmful components, or  other program limitations, or that  it will function
correctly or at all;

(c)  you assume  the  entire cost  of all  necessary  servicing, repair,  or
correction of problems caused by viruses or other harmful components, or the
failure of the Software to operate or operate correctly;

(d) we  make no warranties or  representations as to the  accuracy, quality,
reliability,   suitability,  completeness,   truthfulness,  usefulness,   or
effectiveness of the Software; and

(e) use of  the Software is entirely at  your own risk and we  shall have no
liability or responsibility to you under or in relation to this Agreement.

5.2 You shall use the Software at your  own risk and in no event shall we be
liable to you for any loss or  damage of any kind (except personal injury or
death  resulting from  our  negligence)  arising from  the  your  use of  or
inability to  use the  Software or  from faults or  defects in  the Software
whether caused by negligence or otherwise.

5.3  The express  terms of  this Agreement  are in  lieu of  all warranties,
conditions, undertakings,  terms and obligations implied  by statute, common
law, trade  usage, course of  dealing or otherwise  all of which  are hereby
excluded to the fullest extent permitted by law.

5.4 You  agree to defend,  indemnify and hold  us harmless from  any losses,
liabilities, damages, actions, claims or  expenses (including legal fees and
court  costs) arising  or resulting  from your  breach of  any term  of this
Agreement or caused  by your acts or  omissions or the acts  or omissions of
any other person using your Password or other account details.

5.5  Nothing  in this  Agreement  shall  operate  to  avoid or  exclude  the
liability  of either  party  for  death or  personal  injury  caused by  its
negligence or for fraud.

5.6  Subject to  Clause  5.5, without  prejudice to  any  provision of  this
Agreement, our  maximum aggregate liability to  you under or in  relation to
this Agreement or any matter arising out of it shall be 500 GBP.

6. Term and termination

6.1 This  Agreement and your  right to use  the software shall  be effective
from  the Acceptance  Date  and shall  continue in  force  unless and  until
terminated in accordance with the provisions set out in this Clause 6.

6.2 We may terminate this Agreement immediately without liability on written
notice to you for any reason whatsoever.

6.3  Without prejudice  to  Clause 6.2  above, this  Agreement  may also  be
terminated immediately  by either party on  giving notice in writing  to the
other if:

(a) the other shall have a  receiver or administrative receiver appointed or
shall pass a resolution for winding-up  (otherwise than for the purpose of a
bona fide scheme of solvent amalgamation or reconstruction);

(b) a court of competent jurisdiction shall make an order to that effect;

(c) the other party shall become subject to an administration order;

(d) the  other party  shall enter  into any  voluntary arrangement  with its
creditors;

(e) the other party  shall cease or threaten to cease  to carry on business;
or

(f) the other party shall commit any breach of this Agreement.

6.4 Any termination of this Agreement shall not affect any accrued rights or
liabilities of either party nor shall it affect the coming into force or the
continuance in force  of any provision of this Agreement  which is expressly
or by  implication intended to  come into or continue  in force on  or after
such termination.

6.5 On termination  of this Agreement, you must immediately  cease using the
Software and, unless we otherwise agree  in writing, you may not directly or
indirectly download, access or use the  Software (or any other software made
available by us).  You must also destroy  and / or delete all  copies of the
Software (and any  materials provided in connection with it  by us). Without
prejudice to the foregoing, we shall also be entitled on termination of this
Agreement to disable the Software if you have not destroyed / deleted it.

6.6 Sections 3(g), 3(h), 5, 6.4, 6.5, 7, 8, 9, 13, and 14 shall survive this
Agreement on termination.

7. Reservation of rights

7.1 We reserve the right to:

(a) suspend  access to the Software  and replace it with  another version at
any time during the term of this Agreement;

(b) disable the Software or require you to cease using it at any time; and

(c) charge you for access to and use of the Software, by giving no less than
7 days' notice in writing. If we have notified you of our decision to charge
for use  of the  Software and you  do not wish  to pay  for your use  of the
Software, you  must notify us and  cease absolutely to use  the Software. On
the sending of any such notice, this Agreement will automatically terminate.

8. Intellectual Property Rights

8.1 We or our licensors own all  rights, title and interests in the Software
including trade  secrets, patents, copyrights  and database rights,  and the
Software  shall  remain  the  sole  and exclusive  property  of  us  or  our
licensors. Except as provided in Clause  1.1 of this Agreement, you have no,
and are not granted, any right, title, interest or licence in the Software.

8.2  You  grant  us  a  non-exclusive,  perpetual,  irrevocable,  worldwide,
royalty-free  licence with  the right  to sublicense,  use, copy,  transmit,
distribute,  create  derivative  works  of, display  and  perform  the  same
in  respect  of  any  materials or  other  information  (including,  without
limitation, ideas, concepts  or techniques for new or  improved services and
products)  submitted  by you  in  connection  with the  Evaluation  Process,
whether as feedback, data, questions, comments, or suggestions.

8.3  Livestation viewers  using  any of  Livestation's interactive  features
agree that any statement, comment or other contributions made by Livestation
users  may  be  republished  by  Livestation  and/or  Livestation's  partner
broadcasters including, but not limited to, being broadcast live on-air.

8.4 You agree and understand that any website logs, site statistics or other
data collected  by us (the "Site  Statistics") shall be and  remain our sole
and exclusive property.

8.5 This  Agreement does not  grant you  a licence to  use any of  our trade
marks, trade names, or logos, and  you recognise that our trade marks, trade
names and logos are valuable assets of ours and that substantial recognition
and goodwill are associated  with them. You agree that you  shall not use or
permit any third party to use, at any time, our trade marks, trade names, or
logos.

9. Hardware and Service Requirements

9.1 You  are solely responsible  for acquiring, servicing,  maintaining, and
updating all equipment, computers,  software and communications services not
owned or operated by  or on behalf of us, to enable  you to download, access
and  use the  Software,  and for  all expenses  relating  thereto (plus  any
applicable taxes).  You agree to  download, access  and use the  Software in
accordance with any and all operating instructions or procedures that may be
issued  by us,  as  amended by  us  from  time to  time.  You must  promptly
implement  all  updates,  patches  and  upgrades to  the  Software  and,  if
instructed,  uninstall and  replace the  Software with  any new  versions or
releases that we provide to you.

10. Performance

10.1 You  understand and agree  that the  operation and availability  of the
systems used to  transmit information or for accessing  and interacting with
the  Software including,  the public  telephone, computer  networks and  the
internet, whether  or not supplied or  made available by us,  you or others,
can be unpredictable  and may, from time to time,  interfere with or prevent
the access to and/or the use or operation of the Software. We are not in any
way responsible for any such interference  with or prevention of your access
and/or use of the Software.

11. Training and Support

11.1 Unless we otherwise agree, we  will not provide any training or support
to you relating to the Software.

12. Notices

12.1 Notices

All questions or comments concerning this Agreement shall be submitted to us
by you via  email at support@livestation.com. All Notices to  be given under
this Agreement  by you shall  be sent  to the same  address, with a  copy to
notices@livestation.com.

All Notices to be given under this Agreement to you by us shall be submitted
via email to the  address notified to us by you as  part of the registration
process, or such  other email address as  you may confirm to  us by updating
your registration details. It is your responsibility to ensure that you have
provided us with  current and correct email details. All  Notices sent by us
to  the  email address  last  provided  by you  shall  be  deemed valid  and
effective and we shall  not be liable or responsible if  any Notice fails to
reach you because you have not provided  us with the correct details or have
failed to keep them up to date.

12.2 Acceptance

(a) By  accepting below and providing  us with your email  address you agree
and consent to: (i) contract electronically  with us in accordance with this
Agreement;  and (ii)  receipt  of electronic  legal  notices regarding  this
Agreement to the email address you have provided to us.

12.3 Agreement  Please print a copy  of this Agreement for  your records and
keep it securely.

13. General Provisions

13.1 Severability and Waiver

If  any  provision  of this  Agreement  is  held  by  a court  of  competent
jurisdiction  or  other  competent  authority to  be  invalid,  unlawful  or
unenforceable  for any  reason  then  such part  will  be  severed from  the
remainder of this Agreement, which will continue to be valid and enforceable
to the  fullest extent permitted  by law. The  parties agree to  replace any
invalid provision with a valid provision which most closely approximates the
intent  and economic  effect of  the invalid  provision. In  the event  of a
holding of invalidity so fundamental as to prevent the accomplishment of the
purpose of  the Agreement,  the parties shall  promptly commence  good faith
negotiations to remedy such invalidity. No delay on the part of either party
in exercising  any right or remedy  under this Agreement shall  operate as a
waiver thereof  nor shall  any single  or partial exercise  of any  right or
remedy under this  Agreement preclude any other or further  exercise of such
right or remedy.

13.2 Definitions and Headings

References to:

(a)  The  "Software"  include  references  to  all  modifications,  patches,
updates, upgrades, new versions and releases  of the Software provided by us
to  you, unless  provided to  you under  the terms  of any  separate licence
agreement entered into between us.

(b) "You" and "your"  are to you, the individual who  has accepted the terms
and conditions of this Agreement;

(c) "We", "us" and "our" are to Skinkers Limited, as defined above, and its.
permitted successors and assignees Headings  used in this Agreement are for.
reference purposes only and  do not define or limit the  scope or extent of.
the clauses to which they relate or in any way affect this Agreement       .

13.3 Assignment and Sub-contracting

This  Agreement  and  your  rights, duties  and  obligations  hereunder  are
personal to you and you may not  assign your rights, delegate your duties or
subcontract  your rights  without our  prior written  consent, which  we may
provide or  withhold at our entire  discretion. We may assign,  transfer, or
delegate this Agreement  and / or all  or any of our  rights and obligations
under it or grant or sub-contract all  or any of such rights and obligations
to any person  or entity. The parties' rights and  obligations will bind and
inure to the benefit of their respective successors and permitted assigns.

13.4 Independent Contractors

The parties  to this Agreement  are independent contractors, and  no agency,
partnership, joint venture or  employee-employer relationship is intended or
created by this Agreement. Neither party shall have the power to obligate or
bind the other party.

13.5 Data Protection

Both parties warrant that they will duly observe all their obligations under
the Data  Protection Act 1998  (as amended)  which arise in  connection with
this Agreement.

13.6 Amendments

We reserve the  right, at any time,  to change the terms  of this Agreement,
including our privacy policy, by providing  you with notice of such changes.
Any use of the  Software by you after such notification  of any such changes
shall  constitute  your  acceptance  of  the  Agreement  as  modified.  This
Agreement may not  otherwise be amended except as agreed  by both parties in
writing.

13.7 Entire Agreement

(a) Each party  acknowledges that, in entering into this  Agreement, it does
not  do so  on the  basis  of, and  does  not rely  on, any  representation,
warranty or  other provision except  as expressly provided in  the Agreement
and all conditions,  warranties or other terms implied by  statute or common
law are hereby excluded to the fullest extent permitted by law.

(b) This document is the entire Agreement between the parties and supersedes
all other  agreements or arrangements,  whether written or oral,  express or
implied.

(c)  You and  we  acknowledge and  agree  that the  allocation  of risk  and
liability contained in this Agreement is reasonable in all the circumstances
having  regard  to all  relevant  factors  including the  functionality  and
capabilities of the Software and the testing and evaluation purposes of this
licence.

13.8 Injunctive Relief

Each party acknowledges that  a violation of Clauses 1, 3, 8,  9 and 10.1 of
this Agreement would cause irreparable harm  to the other party for which no
adequate  remedy at  law exists  and each  party therefore  agrees that,  in
addition  to any  other remedies  available,  the aggrieved  party shall  be
entitled to seek injunctive relief to enforce the terms of Sections 1, 3, 8,
9 and 10.1. The prevailing party shall  be entitled to recover all costs and
expenses, including reasonable legal fees incurred because of any such legal
action.

13.9 Force Majeure

We will not be  responsible for any failure to perform  due to causes beyond
our  reasonable control,  including, acts  of God,  acts of  terrorism, war,
riot, embargoes, acts of civil  or military authorities, national disasters,
strikes and the like.

13.10 Contracts (Rights of Third Parties) Act 1999

This  Agreement is  enforceable  only by  you  and us  and  nothing in  this
Agreement confers or is  to be deemed to confer a benefit on  a person not a
party to  this Agreement. It is  hereby agreed between the  parties that the
Contracts  (Rights  of  Third  Party)  Act 1999  shall  not  apply  to  this
Agreement.

13.11 Law

This Agreement shall be governed by and construed in accordance with English
law and  the parties  submit to  the exclusive  jurisdiction of  the English
Courts.

