
The past financial year has been an important one in the development of Evolutec as the company moves towards its objective of becoming a diversified biopharmaceutical company capable of the discovery , development and commercialisation of important therapeutic products . Evolutec made progress an all fronts as it obtained positive clinical results with its lead product candidate , rEV131 , positive trial results in cattle with its lead vaccine candidate in collaboration with Merial and exciting preclinical results with rEV576 in a myasthenia gravis model . The Company is in a position to make significant progress in the coming year . Evolutec now has the funds to conduct at least three definitive Phase II clinical studies on rEV131 during 2006 in a range of respiratory and ophthalmic indications . Furthermore it can also conduct the work to bring additional molecules into clinical development . This is due to the strong support that we received from our investors during two placings that took place in 2005 . Evolutec has recruited a team of experienced individuals to carry out our plans . The team brings to Evolutec a broad range of expertise in the key areas of discovery , drug development and business development . This is coupled with an experienced executive team to provide the leadership skills that Evolutec requires . The Company has also built up very good relations with a range of contract organisations both in the US and Europe to use in sub-contracting the development work . I would like to thank all the individuals both within Evolutec and our supplier companies who have worked on our projects for their dedicated efforts in the past year . In addition to the progress in products and people , Evolutec continues to evolve rapidly into a significant biotechnology company . The Company has moved its location to a business park in Reading which we believe is an attractive location to grow and commercialise our business . The Company has made significant strides in complying with the regulatory requirements placed on the Company both as a consequence of its public listing on the AIM Market as well as those imposed by international regulatory agencies in the drug development process . Our objective is to meet the highest regulatory standards wherever possible . In particular , we will be looking to strengthen the Board by the appointment of an additional Non-Executive Director in the coming year . Looking forward we expect the Company to deliver significant value to its shareholders . In addition to the scientific and clinical progress we will be looking to establish commercial relations with partners in both the biotechnology and pharmaceutical sectors . 