diff --git a/openerp/addons/base/ir/ir_ui_view.py b/openerp/addons/base/ir/ir_ui_view.py
index 219cc991d2acd47a7d2361077affd52705430183..dd5da97729dc0948661da1f36890776ea174563b 100644
--- a/openerp/addons/base/ir/ir_ui_view.py
+++ b/openerp/addons/base/ir/ir_ui_view.py
@@ -86,6 +86,16 @@ class view_custom(osv.osv):
         if not cr.fetchone():
             cr.execute('CREATE INDEX ir_ui_view_custom_user_id_ref_id ON ir_ui_view_custom (user_id, ref_id)')
 
+def _hasclass(context, *cls):
+    """ Checks if the context node has all the classes passed as arguments
+    """
+    node_classes = set(context.context_node.attrib.get('class', '').split())
+
+    return node_classes.issuperset(cls)
+
+xpath_utils = etree.FunctionNamespace(None)
+xpath_utils['hasclass'] = _hasclass
+
 class view(osv.osv):
     _name = 'ir.ui.view'
 
diff --git a/openerp/addons/base/tests/test_views.py b/openerp/addons/base/tests/test_views.py
index f09678367269267c40f6ad7389cb1e823a97eb02..feb22eb2be9a17226704b3d0a13fd32618404450 100644
--- a/openerp/addons/base/tests/test_views.py
+++ b/openerp/addons/base/tests/test_views.py
@@ -804,3 +804,26 @@ class test_views(ViewCase):
                     E.button(name="action_next", type="object", string="New button")),
                 string="Replacement title", version="7.0"
             ))
+
+class TestXPathExtentions(common.BaseCase):
+    def test_hasclass(self):
+        tree = E.node(
+            E.node({'class': 'foo bar baz'}),
+            E.node({'class': 'foo bar'}),
+            {'class': "foo"})
+
+        self.assertEqual(
+            len(tree.xpath('//node[hasclass("foo")]')),
+            3)
+        self.assertEqual(
+            len(tree.xpath('//node[hasclass("bar")]')),
+            2)
+        self.assertEqual(
+            len(tree.xpath('//node[hasclass("baz")]')),
+            1)
+        self.assertEqual(
+            len(tree.xpath('//node[hasclass("foo")][not(hasclass("bar"))]')),
+            1)
+        self.assertEqual(
+            len(tree.xpath('//node[hasclass("foo", "baz")]')),
+            1)