Safaris to the Heart: The Songs Of Joni Mitchell" is being released today. Recorded, in part, at the SoCal JoniFest 2009, this CD features San Diego's finest. Place your order here. Partial proceeds go to support JoniMitchell.com. 

Vocalist Robin Adler and her husband, multi-instrumentalist and music producer Dave Blackburn, have been lifelong fans of the music of Joni Mitchell and, in early 2006, embarked on the ambitious project of learning her music in all its complexity and through all its epochs. To realize this goal, they formed a band dedicated solely to this music, named Mutts of the Planet, after a lyric from one of Mitchell's songs. The band features several of San Diego's finest musicians, many with long pedigrees in the jazz world, including Adler herself. 

Mutts of the Planet explore Joni Mitchell's music from both a jazz improvisatory angle and as a traditional homage. The band has evolved many original jazz inflected arrangements of iconic Mitchell standards such as "Woodstock", "River" and "Both Sides Now" and tackles some of the most challenging material from the later periods in Mitchell's career. The early years are also represented in an acoustic duo setting for part of the show. 

The result has been a hugely successful series of sold out concerts over a four-year period. The music is presented along with backstory and biographical details of Mitchell's life and work, and this has been a favorite aspect for many listeners. Mutts of the Planet celebrate the release of their new CD "Safaris to the Heart: The Songs of Joni Mitchell" It is the culmination of several months of work, from both the musicians themselves and members of the international Joni Mitchell web community, known as the JMDL. 

As of 2010 it appears that Joni Mitchell herself has retired from the performing stage and this project endeavors to keep her music alive in all its beauty, as a live show and now as an album of lush reinterpretations. The February 2010 edition of the San DiegoTroubadour features Adler & Blackburn and this project as their feature story in which the author writes: "I can honestly say that I wasn't in the least prepared for the 'world class-ness' of Robin's voice" 

Audience testimonials from the RobinAdler.com guestbook:
"Robin's vocals were dead on. I thought Joni was actually in the room!"
"Robin was incarnating the soul and spirit of our beloved Joni"
"Was it worth the 2,281 miles I traveled to hear it? Oh, heck yeah!"
