
' The scene was about a young man in a club who makes a call to his girlfriend , ' explains Jon . ' I gave John the music and the whole idea inspired him to think of a time when he 'd been in the garage , the phone had gone and a woman had asked him for help , but he was on his way to work and could n't do anything . The resulting track is a melancholic folk song about how the wire enables you to say no to human suffering . I like the way that idea randomly flowed and came out of another project ; that 's pretty much the history of Coldcut . ' One path Coldcut have consistently followed is that of dissent . Eloquent and well read , Matt and Jon have always made their opinions heard . Back in 2001 they released ' Re : V olution ' to coincide with the General Election and drove a double decker bus around Westminster ; a commentary on politicians promoting themselves like pop stars . This album 's no different . Topics range from Roots Manuva 's criticism of ' plastic Gods ' to Annette Peacock 's musings on CCTV surveillance and 21st Century paranoia . Even their new website features a downloadable set of politically satirical Top Trumps cards . Rather than being driven by a revolutionary zeal , though , the pair are happy simply to comment . In fact , Matt is keen to point out that ' hate ' does n't even enter his vocabulary . ' I 'm not anti anything . If I do n't like something I just say I ca n't love it . We 're pro people . ' ' Turning negative into positive sounds like a hippy thing , ' adds Jon , ' but it 's about engagement and being part of the village community . Communication is important . ' Thankfully that message is evident in the music . Eschewing lofty ideals for damn good tunes , Coldcut have made an album that seeks pleasure rather than conversion . While tracks such as Saul Williams ' touching reflections on the diminishing role of manhood are overflowing with sentiment ( ' I ca n't play that track without blubbing , ' admits Matt ) , at their core is an energy certain to detonate any dancefloor . ' Activism means taking action and being personally responsible , it does n't necessarily mean going around and telling people what they should do , ' comments Matt on Coldcut 's reluctance to release a series of didactic polemics . ' I get very frustrated . But I do believe you can cure a lot of these problems with some pragmatic sensibility , ' continues Jon . ' We 're all lazy fuckers , but we 're equally clever and we could design things to sort our shit out if we thought about it beforehand . ' Now fully in theorist swing Matt is on a roll . ' Fela Kuti said music is the weapon of the future , but I would say art is the weapon of now . It is the future . New types of weapons are available if we 're prepared to find new ways of effectively doing battle without reaching for the sub-machine gun . When I hear the word gun I reach for my culture , ' he then adds , cleverly twisting a famous quote by Goering . Green living Like many eco-sensitive artists trying to operate within the record industry , Matt and Jon are constantly called upon to compromise their ethics . From taxi rides necessitated by urgent photo shoots to long haul flights for live shows in Japan , they struggle with a series of daily dilemmas . 