
Good afternoon . There 's a medical revolution happening all around us , and it 's one that 's going to help us conquer some of society 's most dreaded conditions , including cancer . And the revolution is called angiogenesis , and it 's based on the process that our bodies use to grow blood vessels . So why should we care about blood vessels ? Well , the human body is literally packed with them , 60,000 miles worth in a typical adult . End to end , that would form a line that would circle the earth twice . The smallest blood vessels are called capillaries . We 've got 19 billion of them in our bodies . And these are the vessels of life , and , as I 'll show you , they can also be the vessels of death . Now the remarkable thing about blood vessels is that they have this ability to adapt to whatever environment they 're growing in . For example , in the liver they form channels to detoxify the blood . In the lung , they line air sacs for gas exchange . In muscle , they corkscrew so that muscles can contract without cutting off circulation . And in nerves , they course along like power lines , keeping those nerves alive . And we get most of these blood vessels when we 're actually still in the womb . And what that means is that , as adults , blood vessels do n't normally grow , except in a few special circumstances . In women , blood vessels grow every month to build the lining of the uterus . During pregnancy , they form the placenta , which connects mom and baby . And after injury , blood vessels actually have to grow under the scab in order to heal a wound . And this is actually what it looks like . Hundreds of blood vessels all growing to the center of the wound . So the body has the ability to regulate the amount of blood vessels that are present at any given time . And it does this through an elaborate and elegant system of checks and balances , stimulators and inhibitors of angiogenesis , such that , when we need a brief burst of blood vessels , the body can do this by releasing stimulators , proteins called angiogenic factors that act as natural fertilizer and stimulate new blood vessels to sprout . And when those excess vessels are no longer needed , the body prunes them back to baseline using naturally occurring inhibitors of angiogenesis . Now there are other situations where we start beneath the baseline , and we need to grow more blood vessels just to get back to normal levels . For example , after an injury . And a body can do that too , but only to that normal level , that set point . But what we now know is , for a number of diseases , there are defects in the system , where the body ca n't prune back extra blood vessels or ca n't grow enough new ones in the right place at the right time . And in these situations , angiogenesis is out of balance . And when angiogenesis is out of balance , a myriad of diseases result . For example , insufficient angiogenesis , not enough blood vessels , leads to wounds that do n't heal , heart attacks , legs without circulation , death from stroke , nerve damage . And on the other end , excessive angiogenesis , too many blood vessels , drives disease . And we see this in cancer , blindness , arthritis , obesity , Alzheimer 's disease . In total , there are more than 70 major diseases , affecting more than a billion people worldwide , that all look on the surface to be different from one another , but all actually share abnormal angiogenesis as their common denominator . And this realization is allowing us to reconceptualize the way that we actually approach these diseases by controlling angiogenesis . Now I 'm going to focus on cancer because angiogenesis is a hallmark of cancer , every type of cancer . So here we go . This is a tumor , dark , gray , ominous mass growing inside a brain . And under the microscope , you can see hundreds of these brown staining blood vessels , capillaries that are feeding cancer cells , bringing oxygen and nutrients . But cancers do n't start out like this . And , in fact , cancers do n't start out with a blood supply . They start out as small , microscopic nests of cells That can only grow to one half a cubic millimeter in size . That 's the tip of a ballpoint pen . Then they ca n't get any larger because they do n't have a blood supply , so they do n't have enough oxygen or nutrients . And in fact , we 're probably forming these microscopic cancers all the time in our body . Autopsy studies from people who died in car accidents have shown that about 40 percent of women between the ages of 40 and 50 actually have microscopic cancers in their breasts . About 50 percent of men in their 50s and 60s have microscopic prostate cancers . And virtually 100 percent of us , by the time we reach our 70s , will have microscopic cancers growing in our thyroid . Yet , without a blood supply , most of these cancers will never become dangerous . Dr. Judah Folkman , who was my mentor , and who was the pioneer of the angiogenesis field , once called this " cancer without disease . " So the body 's ability to balance angiogenesis , when it 's working properly , prevents blood vessels from feeding cancers . And this turns out to be one of our most important defense mechanisms against cancer . In fact , if you actually block angiogenesis and prevent blood vessels from ever reaching cancer cells , tumors simply ca n't grow up . But once angiogenesis occurs , cancers can grow exponentially . And this is actually how a cancer goes from being harmless to deadly . Cancer cells mutate and they gain the ability to release lots of those angiogenic factors , natural fertilizer , that tip the balance in favor of blood vessels invading the cancer . And once those vessels invade the cancer , it can expand , it can invade local tissues . And the same vessels that are feeding tumors , allow cancer cells to exit into the circulation as metastases . And , unfortunately , this late stage of cancer is the one at which it 's most likely to be diagnosed , when angiogenesis is already turned on , and cancer cells are growing like wild . So , if angiogenesis is a tipping point between a harmless cancer and a harmful one , then one major part of the angiogenesis revolution is a new approach to treating cancer by cutting off the blood supply . We call this antiangiogenic therapy , and it 's completely different from chemotherapy because it selectively aims at the blood vessels that are feeding the cancers . And we can do this because tumor blood vessels are unlike normal , healthy vessels we see in other places of the body . They 're abnormal ; they 're very poorly constructed ; and , because of that , they 're highly vulnerable to treatments that target them . In effect , when we give cancer patients antiangiogenic therapy -- here , an experimental drug for a glioma , which is a type of brain tumor -- you can see that there are dramatic changes that occur when the tumor is being starved . Here 's a woman with a breast cancer being treated with the antiangiogenic drug called Avastin , which is FDA approved . And you can see that the halo of blood flow disappears after treatment . Well , I 've just shown you two very different types of cancer that both responded to antiangiogenic therapy . So , a few years ago , I asked myself , " Can we take this one step further , and treat other cancers , even in other species ? " So here is a nine year-old boxer named Milo who had a very agressive tumor called a malignant neurofibroma growing on his shoulder . It invaded into his lungs . His veterinarian only gave him three months to live . So we created a cocktail of antiangiogenic drugs that could be mixed into his dog food as well as an antiangiogenic cream that could be applied on the surface of the tumor . And within a few weeks of treatment , we were able to slow down that cancer 's growth such that we were ultimately able to extend milo 's survival to six times what the veterinarian had initially predicted , all with a very good quality of life . And we subsequently treated more than 600 dogs . We have about a 60 percent response rate and improved survival for these pets that were about to be euthanized . So let me show you a couple of even more interesting examples . This is 20 year old dolphin living in Florida , and she had these lesions in her mouth that , over the course of three years , developed into invasive squamous cell cancers . So we created an antiangiogenic paste . We had it painted on top of the cancer three times a week . And over the course of seven months , the cancers completely disappeared , and the biopsies came back as normal . Here 's a cancer growing on the lip of a quarter horse named Guiness . It 's a very , very deadly type of cancer called an angiosarcoma . It had already spread to his lymph nodes , so we used an antiangiogenic skin cream for the lip and an oral cocktail , so we could treat from the inside as well as the outside . And over the course of six months , he experienced a complete remission . And here he is six years later , Guiness , with his very happy owner . ( Applause ) Now , obviously , antiangiogenic therapy could be used for a wide range of cancers . And , in fact , the first pioneering treatments , for people , as well as dogs , are already becoming available . There 's 12 different drugs , 11 different cancer types , but the real question is : How well do these work in practice ? So here 's actually the patient survival data from eight different types of cancer . And the bars represent survival time taken from the era in which there was only chemotherapy , or surgery , or radiation available . But starting in 2004 , when antiangiogenic therapies first became available , well you can see that there has been a 70 to 100 percent improvement in survival for people with kidney cancer , multiple myeloma , colorectal cancer , and gastrointestinal stromal tumors . That 's impressive . But for other tumors and cancer types , the improvements have only been modest . So I started asking myself , " Why have n't we been able to do better ? " And the answer , to me , is obvious ; we 're treating cancer too late in the game , when it 's already established , and , oftentimes , it 's already spread or metastasized . And as a doctor , I know that , once a disease progresses to an advanced stage , achieving a cure can be difficult , if not impossible . So I went back to the biology of angiogenesis and started thinking : Could the answer to cancer be preventing angiogenesis , beating cancer at its own game so the cancers could never become dangerous ? This could help healthy people as well as people who 've already beaten cancer once or twice and want to find a way to keep it from coming back . So to look for a way to prevent angiogenesis in cancer , I went back to look at cancer 's causes . And what really intrigued me was when I saw that diet accounts for 30 to 35 percent of environmentally caused cancers . Now , the obvious thing is to think about what we could remove from our diet , what what to strip out , take away . But I actually took a completely opposite approach and began asking : What could we be adding to our diet that 's naturally antiangiogenic , that could boost the body 's defense system and beat back those blood vessels that are feeding cancers ? In other words , can we eat to starve cancer ? Well , the answer 's yes . And I 'm going to show you how . And our search for this has taken us to the market , the farm and to the spice cabinet because what we 've discovered is that mother nature has laced a large number of foods and beverages and herbs with naturally occurring inhibitors of angiogenesis . So here 's a test system we developed . At the center is a ring from which hundreds of blood vessels are growing out in a star burst fashion . And we can use this system to test dietary factors at concentrations that are obtainable by eating . So let me show you what happens when we put in an extract from red grapes . The active ingredient 's resveratrol . It 's also found in red wine . This inhibits abnormal angiogenesis by 60 percent . Here 's what happens when we add an extract from strawberries . It potently inhibits angiogenesis . And extract from soy beans . And here is a growing list of our antiangiogenic foods and beverages that we 're interested in studying . And for each food type , we believe there is different potencies within different strains and varietals . And we want to measure this because , well , while you 're eating a strawberry or drinking tea , why not select the one that 's most potent for preventing cancer . So here are four different teas that we 've tested . They 're all common ones , Chinese jasmine , Japanese sencha , Earl Grey and a special blend that we prepared . And you can see clearly that the teas vary in their potency from less potent to more potent . But what 's very cool is when we actually combined the two less potent teas together , the combination , the blend , is more potent than either one alone . This means there 's food synergy . Here 's some more data from our testing . Now , in the lab , we can simulate tumor angiogenesis represented here in a black bar . And using this system , we can test the potency of cancer drugs . So the shorter the bar , less angiogenesis , that 's good . And here are some common drugs that have been associated with reducing the risk of cancer in people . Statins , nonsteroidal anti-inflammatory drugs and a few others , they inhibit angiogenesis too . And here are the dietary factors going head to head against these drugs . You can see , they clearly hold their own and , in some cases , they 're more potent than the actual drugs . Soy , parsley , garlic , grapes , berries , I could go home and cook a tasty meal using these ingredients . So imagine if we could create the world 's first rating system in which we could score foods according to their antiangiogenic cancer-preventative properties . And that 's what we 're doing right now . Now , I 've shown you a bunch of lab data , and so the real question is : What is the evidence in people that eating certain foods can reduce angiogenesis in cancer ? Well , the best example I know is a study of 79,000 men , followed over 20 years , in which it was found that men whom consumed cooked tomatoes two to three times a week had up to a 50 percent reduction in their risk of developing prostate cancer . Now , we know that tomatoes are a good source of lycopene , and lycopene is antiangiogenic . But what 's even more interesting from this study is that those men who did develop prostate cancer , those who ate more servings of tomato sauce actually had fewer blood vessels feeding their cancer . So this human study is a prime example of how antiangiogenic substances present in food and consumed at practical levels can impact on cancer . And we 're now studying the role of a healthy diet with Dean Ornish at UCSF and Tufts University on the role of this healthy diet on markers of angiogenesis that we can find in the bloodstream . Now , obviously , what I 've shared with you has some far-ranging implications even beyond cancer research . Because if we 're right , it could impact on consumer education , food services , public health and even the insurance industry . And , in fact , some insurance companies are already beginning to think along these lines . Check out this ad from Blue Cross Blue Shield of Minnesota . And for many people around the world , dietary cancer prevention may be the only practical solution because not everybody can afford expensive end-stage cancer treatments , but everybody could benefit from a healthy diet based on local , sustainable , antiangiogenic crops . Now , finally , I 've talked to you about food , and I 've talked to you about cancer , so there 's just one more disease that I have to tell you about and that 's obesity . Because it turns out that adipose tissue , fat , is highly angiogenesis dependent . And , like a tumor , fat grows when blood vessels grow . So the question is : Can we shrink fat by cutting off its blood supply ? So the top curve shows the body weight of a genetically obese mouse that eats nonstop , until it turns fat like this furry tennis ball . And the bottom curve is the weight of a normal mouse . If you take the obese mouse and give it an angiogenesis inhibitor , it loses weight . Stop the treatment , gains the weight back . Restart the treatment , loses the weight again . Stop the treatment , it gains the weight back . And , in fact , you can cycle the weight up and down simply by inhibiting angiogenesis . So this approach that we 're taking for cancer prevention may also have an application for obesity . The really , truly interesting thing about this is that we ca n't take these obese mice and make them lose more weight than what the normal mouse 's weight is supposed to be . In other words , we ca n't create supermodel mice . ( Laughter ) And this speaks to the role of angiogenesis in regulating healthy set points . Albert Szent-Gyorgi once said that , " Discovery consists of seeing what everyone has seen , and thinking what no one has thought . " I hope I 've convinced you that , for diseases like cancer , obesity and other conditions , that there may be a great power in attacking their common denominator , angiogenesis . And that 's what I think the world needs now . Thank you . ( Applause ) June Cohen : So these drugs are n't exactly -- they 're not exactly in mainstream cancer treatments right now . For anyone out here who has cancer , what would you recommend ? Do you recommend pursuing these treatments now , for most cancer patients ? William Li : So there are antiangiogenic treatments that are FDA approved . And if you 're a cancer patient or working for one or advocating for one , you should ask about them . And there are many clinical trials . The Angiogenesis Foundation is following almost 300 companies , and there 's about 100 more drugs in that pipeline . So consider the approved ones , look for clinical trials , but then between what the doctor can do for you , we need to start asking what can we do for ourselves . And this is one of the themes that I 'm talking about is we can empower ourselves to do the things that doctors ca n't do for us , which is to use knowledge and take action . And if mother nature has given us some clues , we think that there might be a new future in the value of how we eat . And what we eat is really our chemotherapy three times a day . JC : Right . And along those lines , for people who might have risk factors for cancer , would you recommend pursuing any treatments sort of prophylactically or simply pursuing the right diet with lots of tomato sauce ? WL : Well , you know , there 's an abundant epidemiological evidence . And I think in the information age , it does n't take long to go to a credible source like Pubmed , the National Library of Medicine , to look for epidemiological studies for cancer risk reduction based on diet and based on common medications . And that 's certainly something that anybody can look into . JC : Okay . Well , thank you so much . ( Applause ) 