Greenhouse Terms of Use

   1. playgreenhouse.com ("The Greenhouse") is an online service that markets and sells Interactive Entertainment products ("Games"). The Greenhouse is owned and operated by Greenhouse Interactive Inc.
   2. The Greenhouse assumes that by using this website you are entering into an agreement and agree to abide by its terms outlined in this Terms of Use!
   3. The Greenhouse reserves the right to change and modify the Terms from time to time. The revision date at the bottom will be updated to facilitate easy reference.
   4. You may not use The Greenhouse for commercial or unlawful purposes. You may not financially exploit the material, content or product within The Greenhouse without the official approval from us. The content published in The Greenhouse remains the property of Greenhouse Interactive Inc.
   5. The use of Games downloaded is governed by the end user license agreement ("EULA") accompanying such Games. If a EULA is not present in the Games, Greenhouse grants you a limited license to download and use on a single computer for personal and non-commercial purpose. You may not resell or violate any Canadian or foreign law, rule or regulation.
   6. Games you download may contain a Digital Rights Management (DRM) System managed by The Greenhouse. The DRM system may communicate over the Internet with the Games in order to prevent illegal or unauthorized use. Please refer to the Privacy Policy for the types of information and details on how we manage the communication of information between the Games and the DRM system.
   7. The Greenhouse is not liable for your dissatisfaction or any damage from the use of the website or the Games purchased from the website. However, despite that legal mumbo jumbo, we are committed to customer service, so please send an email to support@playgreenhouse.com and we'll do our best to get you taken care of.
   8. The Greenhouse has the right to terminate this agreement, cease operation of the website, or suspend your access to the website at any time, with or without cause or notice in advance.
   9. Any dispute arising out of this agreement should first be addressed by sending an email to support@playgreenhouse.com. Any further claims or dispute arising that cannot be resolved will be adjudicated under the laws of the Province of British Columbia, Canada.
  10. As a policy, sales of Games at The Greenhouse aren't refundable, and exchanges or credits will not be issued. However, if you encounter any issue in your purchase, you should definitely submit your issue to support@playgreenhouse.com and we'll do our best to get you taken care of.
  11. The Greenhouse website may contain links to third party sites. These sites are not under The Greenhouse's control and we are not responsible for any content on any of the linked sites.
  12. The Greenhouse website may contain advertisements. These advertisements are not under The Greenhouse's control and we are not responsible for any of their content or any of their promotions.
  13. Last Updated: 31 Mar 2008 (see http://www.playgreenhouse.com/terms for the latest version)
