diff --git a/.hgtags b/.hgtags
index ef6df810dca529bd48fb15e30d830e81278463ae_LmhndGFncw==..028c5ab4718d675506455d1dc7d02e09488cee1d_LmhndGFncw== 100644
--- a/.hgtags
+++ b/.hgtags
@@ -8,4 +8,6 @@
 7c33ac838b62efcbd12168b0448147c75080e623 cubicweb-comment-debian-version-1_4_1-1
 da0c37089f663ecbc267d4b209830e7f001a8049 cubicweb-comment-version-1.5.0
 0e01981cc5698cb482026488041968104e8cea7b cubicweb-comment-debian-version-1.5.0-1
+5dcf4eca8238c65353bd3b47ee174d43715682d2 cubicweb-comment-version-1.6.0
+1e74587f201a84f8c77bf10116a4179b1743588d cubicweb-comment-debian-version-1.6.0-1
 4add56175ecca553de4cac1b9da370cfde011024 oldstable
diff --git a/__pkginfo__.py b/__pkginfo__.py
index ef6df810dca529bd48fb15e30d830e81278463ae_X19wa2dpbmZvX18ucHk=..028c5ab4718d675506455d1dc7d02e09488cee1d_X19wa2dpbmZvX18ucHk= 100644
--- a/__pkginfo__.py
+++ b/__pkginfo__.py
@@ -4,7 +4,7 @@
 modname = 'comment'
 distname = "cubicweb-%s" % modname
 
-numversion = (1, 5, 0)
+numversion = (1, 6, 0)
 version = '.'.join(str(num) for num in numversion)
 
 license = 'LGPL'
@@ -8,7 +8,7 @@
 version = '.'.join(str(num) for num in numversion)
 
 license = 'LGPL'
-copyright = '''Copyright (c) 2003-2009 LOGILAB S.A. (Paris, FRANCE).
+copyright = '''Copyright (c) 2003-2010 LOGILAB S.A. (Paris, FRANCE).
 http://www.logilab.fr/ -- mailto:contact@logilab.fr'''
 
 author = "Logilab"
@@ -16,5 +16,17 @@
 web = 'http://www.cubicweb.org/project/%s' % distname
 
 short_desc = "comment component for the CubicWeb framework"
-long_desc = """This CubicWeb component provides threadable comments.
+long_desc = """\
+Summary
+-------
+
+The `comment` cube provides threadable comments feature.
+
+Usage
+-----
+
+This cube creates a new entity type called `Comment` which could basically be
+read by every body but only added by application's users.
+It also defines a relation `comments` which provides the ability to add a
+`Comment` which `comments` a `Comment`.
 
@@ -20,5 +32,19 @@
 
-CubicWeb is a semantic web framework, see http://www.cubicweb.org
+To use this cube, you want to add the relation `comments` on the entity type
+you want to be able to comment. For instance, let's say your cube defines a
+schema for a blog. You want all the blog entries to be commentable.
+Here is how to define it in your schema:
+
+.. sourcecode:: python
+
+    from yams.buildobjs import RelationDefinition
+    class comments(RelationDefinition):
+        subject = 'Comment'
+        object = 'BlogEntry'
+        cardinality = '1*'
+
+Once this relation is defined, you can post comments and view threadable
+comments automatically on blog entry's primary view.
 """
 
 from os import listdir
@@ -46,7 +72,7 @@
 cube_eid = 20316
 # used packages
 __depends_cubes__ = {}
-__depends__ = {'cubicweb': '>= 3.2.0'}
+__depends__ = {'cubicweb': '>= 3.6.0'}
 __use__ = tuple(__depends_cubes__)
 classifiers = [
            'Environment :: Web Environment',
diff --git a/data/cubes.comment.js b/data/cubes.comment.js
index ef6df810dca529bd48fb15e30d830e81278463ae_ZGF0YS9jdWJlcy5jb21tZW50Lmpz..028c5ab4718d675506455d1dc7d02e09488cee1d_ZGF0YS9jdWJlcy5jb21tZW50Lmpz 100644
--- a/data/cubes.comment.js
+++ b/data/cubes.comment.js
@@ -8,7 +8,6 @@
 CubicWeb.require('htmlhelpers.js');
 CubicWeb.require('ajax.js');
 
-
 function _getText(textarea) {
     if (typeof(FCKeditor) != 'undefined') {
 	var fck = FCKeditorAPI.GetInstance(textarea.id);
@@ -47,4 +46,13 @@
     }
 }
 
+$(document).ready(function() {
+    function scroll_top(event){
+        toggleVisibility('popupLoginBox');
+        $('html, body').animate({scrollTop:0}, 'fast');
+        return false;
+    }
+    $('a.loadPopupLogin').click(scroll_top);
+});
+
 CubicWeb.provide('ecomment.js');
@@ -50,1 +58,2 @@
 CubicWeb.provide('ecomment.js');
+
diff --git a/debian/changelog b/debian/changelog
index ef6df810dca529bd48fb15e30d830e81278463ae_ZGViaWFuL2NoYW5nZWxvZw==..028c5ab4718d675506455d1dc7d02e09488cee1d_ZGViaWFuL2NoYW5nZWxvZw== 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+cubicweb-comment (1.6.0-1) unstable; urgency=low
+
+  * new upstream release
+
+ -- Sylvain Thénault <sylvain.thenault@logilab.fr>  Mon, 08 Feb 2010 16:56:53 +0100
+
 cubicweb-comment (1.5.0-1) unstable; urgency=low
 
   * new upstream release
diff --git a/debian/control b/debian/control
index ef6df810dca529bd48fb15e30d830e81278463ae_ZGViaWFuL2NvbnRyb2w=..028c5ab4718d675506455d1dc7d02e09488cee1d_ZGViaWFuL2NvbnRyb2w= 100644
--- a/debian/control
+++ b/debian/control
@@ -10,7 +10,7 @@
 
 Package: cubicweb-comment
 Architecture: all
-Depends: cubicweb-common (>= 3.2.0)
+Depends: cubicweb-common (>= 3.6.0)
 Description: comment component for the CubicWeb framework
  This CubicWeb component provides threadable comments.
  .
diff --git a/doc/screenshot_comment_section.png b/doc/screenshot_comment_section.png
new file mode 100644
index 0000000000000000000000000000000000000000..43efe685da81d76bf29f136a9214b5de8d54c0e2
GIT binary patch
literal 47298
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
O=8=Mi{1-XXkpBg?QX~fe

diff --git a/entities.py b/entities.py
index ef6df810dca529bd48fb15e30d830e81278463ae_ZW50aXRpZXMucHk=..028c5ab4718d675506455d1dc7d02e09488cee1d_ZW50aXRpZXMucHk= 100644
--- a/entities.py
+++ b/entities.py
@@ -10,9 +10,9 @@
 
 from cubicweb.view import EntityView
 from cubicweb.interfaces import ITree
-from cubicweb.common.mixins import TreeMixIn
+from cubicweb.mixins import TreeMixIn
 from cubicweb.selectors import implements
 from cubicweb.entities import AnyEntity
 
 class Comment(TreeMixIn, AnyEntity):
     """customized class for Comment entities"""
@@ -14,9 +14,9 @@
 from cubicweb.selectors import implements
 from cubicweb.entities import AnyEntity
 
 class Comment(TreeMixIn, AnyEntity):
     """customized class for Comment entities"""
-    id = 'Comment'
+    __regid__ = 'Comment'
     tree_attribute = 'comments'
     __implements__ = AnyEntity.__implements__ + (ITree,)
 
@@ -38,7 +38,7 @@
 
 
 class CommentFullTextView(EntityView):
-    id = 'fulltext'
+    __regid__ = 'fulltext'
     __select__ = implements('Comment')
 
     def cell_call(self, row, col, indentlevel=0, withauthor=True):
@@ -42,9 +42,9 @@
     __select__ = implements('Comment')
 
     def cell_call(self, row, col, indentlevel=0, withauthor=True):
-        e = self.entity(row, col)
+        e = self.cw_rset.get_entity(row,col)
         if indentlevel:
             indentstr = '>'*indentlevel + ' '
         else:
             indentstr = ''
         if withauthor:
@@ -46,8 +46,8 @@
         if indentlevel:
             indentstr = '>'*indentlevel + ' '
         else:
             indentstr = ''
         if withauthor:
-            _ = self.req._
+            _ = self._cw._
             author = e.created_by and e.created_by[0].login or _("Unknown author")
             head = u'%s%s - %s :' % (indentstr,
@@ -52,6 +52,6 @@
             author = e.created_by and e.created_by[0].login or _("Unknown author")
             head = u'%s%s - %s :' % (indentstr,
-                                     _('On %s') % self.format_date(e.creation_date, time=True),
+                                     _('On %s') %  self._cw.format_date(e.creation_date, time=True),
                                      _('%s wrote') % author)
             lines = [head]
         else:
@@ -65,6 +65,6 @@
 
 class CommentFullThreadText(CommentFullTextView):
     """display a comment and its parents"""
-    id = 'fullthreadtext'
+    __regid__ = 'fullthreadtext'
 
     def cell_call(self, row, col):
@@ -69,7 +69,7 @@
 
     def cell_call(self, row, col):
-        e = self.entity(row, col)
+        e = self.cw_rset.get_entity(row,col)
         strings = []
         cpath = e.path()[1:]
         indentlevel = len(cpath) - 1
         for i, ceid in enumerate(cpath):
@@ -72,8 +72,8 @@
         strings = []
         cpath = e.path()[1:]
         indentlevel = len(cpath) - 1
         for i, ceid in enumerate(cpath):
-            comment = self.req.execute('Any C,T,D WHERE C creation_date D, C content T, C eid %(x)s',
+            comment = self._cw.execute('Any C,T,D WHERE C creation_date D, C content T, C eid %(x)s',
                                        {'x': ceid}, 'x', build_descr=True).get_entity(0, 0)
             strings.append(comment.view('fulltext', indentlevel=indentlevel-i,
                                         withauthor=i!=indentlevel).strip() + '\n')
@@ -77,7 +77,7 @@
                                        {'x': ceid}, 'x', build_descr=True).get_entity(0, 0)
             strings.append(comment.view('fulltext', indentlevel=indentlevel-i,
                                         withauthor=i!=indentlevel).strip() + '\n')
-        strings.append(u'\n%s: %s' % (self.req._('i18n_by_author_field'),
+        strings.append(u'\n%s: %s' % (self._cw._('i18n_by_author_field'),
                                       e.dc_creator() or _('unknown author')))
         strings.append(u'url: %s' % e.root().absolute_url())
         self.w(u'\n'.join(strings))
@@ -86,6 +86,6 @@
 class CommentFullThreadDescText(CommentFullTextView):
     """same as fullthreadtext, but going from top level object to leaf comments
     """
-    id = 'fullthreadtext_descending'
+    __regid__ = 'fullthreadtext_descending'
 
     def cell_call(self, row, col, indentlevel=0):
@@ -90,6 +90,6 @@
 
     def cell_call(self, row, col, indentlevel=0):
-        e = self.entity(row, col)
+        e = self.cw_rset.get_entity(row,col)
         self.w(e.view('fulltext', indentlevel=indentlevel).strip() + '\n')
         subcommentsrset = e.related('comments', 'object')
         if subcommentsrset:
diff --git a/hooks.py b/hooks.py
index ef6df810dca529bd48fb15e30d830e81278463ae_aG9va3MucHk=..028c5ab4718d675506455d1dc7d02e09488cee1d_aG9va3MucHk= 100644
--- a/hooks.py
+++ b/hooks.py
@@ -13,8 +13,8 @@
 
 class CommentAddedView(notification.NotificationView):
     """get notified from new comments"""
-    id = 'notif_after_add_relation_comments'
+    __regid__ = 'notif_after_add_relation_comments'
     __select__ = implements('Comment',)
     msgid_timestamp = False
 
     def subject(self):
@@ -17,10 +17,10 @@
     __select__ = implements('Comment',)
     msgid_timestamp = False
 
     def subject(self):
-        root = self.entity(self.row, self.col).root()
-        return '%s %s %s' % (self.req._('new comment for'),
+        root = self.cw_rset.get_entity(self.cw_row, self.cw_col).root()
+        return '%s %s %s' % (self._cw._('new comment for'),
                              root.dc_type(),
                              root.dc_title())
 
     def cell_call(self, row, col=0, **kwargs):
@@ -23,6 +23,6 @@
                              root.dc_type(),
                              root.dc_title())
 
     def cell_call(self, row, col=0, **kwargs):
-        self.row, self.col = row, col
+        self.cw_row, self.cw_col = row, col
         try:
@@ -28,6 +28,6 @@
         try:
-            view = self.vreg['views'].select('fullthreadtext', self.req,
-                                             rset=self.rset, row=row, col=col)
+            view = self._cw.vreg['views'].select('fullthreadtext', self._cw,
+                                             rset=self.cw_rset, row=row, col=col)
         except RegistryException:
             return
         return view.render(row=row, col=col, w=self.w, **kwargs)
diff --git a/schema.py b/schema.py
index ef6df810dca529bd48fb15e30d830e81278463ae_c2NoZW1hLnB5..028c5ab4718d675506455d1dc7d02e09488cee1d_c2NoZW1hLnB5 100644
--- a/schema.py
+++ b/schema.py
@@ -12,7 +12,7 @@
 
 class Comment(EntityType):
     """a comment is a reply about another entity"""
-    permissions = {
+    __permissions__x = {
         'read':   ('managers', 'users', 'guests',),
         'add':    ('managers', 'users',),
         'delete': ('managers', 'owners',),
@@ -22,7 +22,8 @@
     comments = SubjectRelation('Comment', cardinality='1*', composite='object')
 
 class comments(RelationType):
-    permissions = {
+
+    __permissions__ = {
         'read':   ('managers', 'users', 'guests'),
         'add':    ('managers', 'users',),
         'delete': ('managers', RRQLExpression('S owned_by U'),),
diff --git a/test/unittest_comment.py b/test/unittest_comment.py
index ef6df810dca529bd48fb15e30d830e81278463ae_dGVzdC91bml0dGVzdF9jb21tZW50LnB5..028c5ab4718d675506455d1dc7d02e09488cee1d_dGVzdC91bml0dGVzdF9jb21tZW50LnB5 100644
--- a/test/unittest_comment.py
+++ b/test/unittest_comment.py
@@ -1,4 +1,2 @@
-from __future__ import with_statement
-
 import re
 
@@ -3,8 +1,7 @@
 import re
 
-from cubicweb.devtools.testlib import EnvBasedTC
-from cubicweb.selectors import traced_selection
+from cubicweb.devtools.testlib import CubicWebTC
 from cubicweb.web.views import actions
 
 from cubes.comment import views
 
@@ -7,7 +4,7 @@
 from cubicweb.web.views import actions
 
 from cubes.comment import views
 
-class CommentTC(EnvBasedTC):
+class CommentTC(CubicWebTC):
     """Comment"""
     def test_schema(self):
@@ -12,6 +9,6 @@
     """Comment"""
     def test_schema(self):
-        self.assertEquals(self.schema['comments'].rproperty('Comment', 'BlogEntry', 'composite'),
+        self.assertEquals(self.schema['comments'].rdef('Comment', 'BlogEntry').composite,
                           'object')
 
     def setup_database(self):
@@ -22,10 +19,11 @@
 
     def test_possible_views(self):
         # comment primary view priority
-        rset, req = self.rset_and_req('Comment X')
+        req = self.request()
+        rset = req.execute('Comment X')
         self.assertIsInstance(self.vreg['views'].select('primary', req, rset=rset),
                              views.CommentPrimaryView)
         self.assertIsInstance(self.vreg['views'].select('tree', req, rset=rset),
                              views.CommentThreadView)
 
     def test_possible_actions(self):
@@ -26,25 +24,16 @@
         self.assertIsInstance(self.vreg['views'].select('primary', req, rset=rset),
                              views.CommentPrimaryView)
         self.assertIsInstance(self.vreg['views'].select('tree', req, rset=rset),
                              views.CommentThreadView)
 
     def test_possible_actions(self):
-        rset, req = self.rset_and_req('Any X WHERE X is BlogEntry')
-        self.failUnlessEqual(self.pactions(req, rset),
-                             [('edit', actions.ModifyAction),
-                              ('managepermission', actions.ManagePermissionsAction),
-                              ('addrelated', actions.AddRelatedActions),
-                              ('delete', actions.DeleteAction),
-                              ('copy', actions.CopyAction),
-                              ('reply_comment', views.AddCommentAction)])
-        rset, req = self.rset_and_req('Any X WHERE X is Comment')
-        self.failUnlessEqual(self.pactions(req, rset),
-                             [('edit', actions.ModifyAction),
-                              ('managepermission', actions.ManagePermissionsAction),
-                              ('addrelated', actions.AddRelatedActions),
-                              ('delete', actions.DeleteAction),
-                              ('copy', actions.CopyAction),
-                              ('delete_comment', views.DeleteCommentAction),
-                              ('edit_comment', views.EditCommentAction),
-                              ('reply_comment', views.ReplyCommentAction)])
+        req = self.request()
+        rset = req.execute('Any X WHERE X is BlogEntry')
+        actions = self.pactions(req, rset)
+        self.failUnless(('reply_comment', views.AddCommentAction) in actions)
+        self.failIf(('edit_comment', views.EditCommentAction) in actions)
+        rset = req.execute('Any X WHERE X is Comment')
+        actions = self.pactions(req, rset)
+        self.failUnless(('reply_comment', views.ReplyCommentAction) in actions)
+        self.failUnless(('edit_comment', views.EditCommentAction) in actions)
         cnx = self.login('user')
@@ -50,8 +39,8 @@
         cnx = self.login('user')
-        rset, req = self.rset_and_req('Any X WHERE X is Comment')
-        self.failUnlessEqual(self.pactions(req, rset),
-                             [('addrelated', actions.AddRelatedActions),
-                              ('copy', actions.CopyAction),
-                              ('reply_comment', views.ReplyCommentAction)])
+        req = self.request()
+        rset = req.execute('Any X WHERE X is Comment')
+        actions = self.pactions(req, rset)
+        self.failUnless(('reply_comment', views.ReplyCommentAction) in actions)
+        self.failIf(('edit_comment', views.EditCommentAction) in actions)
         rset = self.execute('INSERT Comment X: X content "ho bah non!", X comments B WHERE B is Comment')
         cnx.commit()
@@ -56,12 +45,7 @@
         rset = self.execute('INSERT Comment X: X content "ho bah non!", X comments B WHERE B is Comment')
         cnx.commit()
-        self.failUnlessEqual(self.pactions(rset.req, rset),
-                             [('edit', actions.ModifyAction),
-                              ('addrelated', actions.AddRelatedActions),
-                              ('delete', actions.DeleteAction),
-                              ('copy', actions.CopyAction),
-                              ('delete_comment', views.DeleteCommentAction),
-                              ('edit_comment', views.EditCommentAction),
-                              ('reply_comment', views.ReplyCommentAction)])
+        actions = self.pactions(req, rset)
+        self.failUnless(('reply_comment', views.ReplyCommentAction) in actions)
+        self.failUnless(('edit_comment', views.EditCommentAction) in actions)
         cnx.rollback()
         cnx = self.login('anon')
@@ -66,7 +50,8 @@
         cnx.rollback()
         cnx = self.login('anon')
-        rset, req = self.rset_and_req('Any X WHERE X is Comment')
+        req = self.request()
+        rset = req.execute('Any X WHERE X is Comment')
         self.failUnlessEqual(self.pactions(req, rset), [])
         cnx.rollback()
 
     def test_nonregr_possible_actions(self):
@@ -69,8 +54,9 @@
         self.failUnlessEqual(self.pactions(req, rset), [])
         cnx.rollback()
 
     def test_nonregr_possible_actions(self):
-        rset, req = self.rset_and_req('Any B WHERE B is BlogEntry')
+        req = self.request()
+        rset = req.execute('Any B WHERE B is BlogEntry')
         beid = rset[0][0]
         self.execute('INSERT Comment X: X content "Yooo !", X comments B WHERE B eid %s' % beid)
         # now two comments are commenting this blog
@@ -74,9 +60,9 @@
         beid = rset[0][0]
         self.execute('INSERT Comment X: X content "Yooo !", X comments B WHERE B eid %s' % beid)
         # now two comments are commenting this blog
-        rset, req = self.rset_and_req('Any C WHERE C comments X, X eid %s' % beid)
+        rset = req.execute('Any C WHERE C comments X, X eid %s' % beid)
         self.assertEquals(len(rset), 2)
         self.failUnless(self.vreg['actions'].select('reply_comment', req, rset=rset, row=0))
         self.failUnless(self.vreg['actions'].select('reply_comment', req, rset=rset, row=1))
 
     def test_add_related_actions(self):
@@ -78,8 +64,9 @@
         self.assertEquals(len(rset), 2)
         self.failUnless(self.vreg['actions'].select('reply_comment', req, rset=rset, row=0))
         self.failUnless(self.vreg['actions'].select('reply_comment', req, rset=rset, row=1))
 
     def test_add_related_actions(self):
-        rset, req = self.rset_and_req('Any X WHERE X is Comment')
+        req = self.request()
+        rset = req.execute('Any X WHERE X is Comment')
         self.failUnlessEqual(self.pactions_by_cats(req, rset), [])
         cnx = self.login('user')
@@ -84,6 +71,6 @@
         self.failUnlessEqual(self.pactions_by_cats(req, rset), [])
         cnx = self.login('user')
-        rset, req = self.rset_and_req('Any X WHERE X is Comment')
+        rset = req.execute('Any X WHERE X is Comment')
         self.failUnlessEqual(self.pactions_by_cats(req, rset), [])
         cnx.rollback()
         cnx = self.login('anon')
@@ -87,7 +74,7 @@
         self.failUnlessEqual(self.pactions_by_cats(req, rset), [])
         cnx.rollback()
         cnx = self.login('anon')
-        rset, req = self.rset_and_req('Any X WHERE X is Comment')
+        rset = req.execute('Any X WHERE X is Comment')
         self.failUnlessEqual(self.pactions_by_cats(req, rset), [])
         cnx.rollback()
 
@@ -137,7 +124,7 @@
 
 ''')
 
-class CommentJsonControllerExtensionsTC(EnvBasedTC):
+class CommentJsonControllerExtensionsTC(CubicWebTC):
 
     def setup_database(self):
         self.john = self.create_user(u'John')
diff --git a/test/unittest_hooks.py b/test/unittest_hooks.py
index ef6df810dca529bd48fb15e30d830e81278463ae_dGVzdC91bml0dGVzdF9ob29rcy5weQ==..028c5ab4718d675506455d1dc7d02e09488cee1d_dGVzdC91bml0dGVzdF9ob29rcy5weQ== 100644
--- a/test/unittest_hooks.py
+++ b/test/unittest_hooks.py
@@ -1,2 +1,2 @@
-from cubicweb.devtools.apptest import EnvBasedTC
+from cubicweb.devtools.testlib import CubicWebTC
 
@@ -2,4 +2,4 @@
 
-class CommentViewsTC(EnvBasedTC):
+class CommentViewsTC(CubicWebTC):
 
     def setup_database(self):
@@ -4,7 +4,7 @@
 
     def setup_database(self):
-        self.blog = self.add_entity('BlogEntry', title=u"une news !", content=u"cubicweb c'est beau")
-        self.add_entity('Comment', content=u"Yo !")
+        self.blog = self.request().create_entity('BlogEntry', title=u"une news !", content=u"cubicweb c'est beau")
+        self.request().create_entity('Comment', content=u"Yo !")
         self.execute('SET C comments B WHERE B title "une news !", C content "Yo !"')
 
     def test_notif_after_add_relation_comments(self):
@@ -8,7 +8,7 @@
         self.execute('SET C comments B WHERE B title "une news !", C content "Yo !"')
 
     def test_notif_after_add_relation_comments(self):
-        req = self.session()
+        req = self.session
         c = self.entity('Comment X', req=req)
         req.set_pool()
         v = self.vreg['views'].select('notif_after_add_relation_comments', req,
@@ -12,7 +12,7 @@
         c = self.entity('Comment X', req=req)
         req.set_pool()
         v = self.vreg['views'].select('notif_after_add_relation_comments', req,
-                                      rset=c.rset, row=0)
+                                      rset=c.cw_rset, row=0)
         content = v.render(row=0)
         self.assertTextEquals(content,
                           '''Yo !
diff --git a/views.py b/views.py
index ef6df810dca529bd48fb15e30d830e81278463ae_dmlld3MucHk=..028c5ab4718d675506455d1dc7d02e09488cee1d_dmlld3MucHk= 100644
--- a/views.py
+++ b/views.py
@@ -14,5 +14,5 @@
 
 from simplejson import dumps
 
-from cubicweb.selectors import (one_line_rset, but_etype, implements,
+from cubicweb.selectors import (one_line_rset, implements,
                                 has_permission, relation_possible, yes,
@@ -18,3 +18,4 @@
                                 has_permission, relation_possible, yes,
-                                match_kwargs, score_entity)
+                                match_kwargs, score_entity,
+                                authenticated_user)
 from cubicweb.view import EntityView
@@ -20,6 +21,6 @@
 from cubicweb.view import EntityView
-from cubicweb.common.uilib import rql_for_eid, cut, safe_cut
-from cubicweb.common.mixins import TreeViewMixIn
+from cubicweb.uilib import rql_for_eid, cut, safe_cut
+from cubicweb.mixins import TreeViewMixIn
 from cubicweb.web import stdmsgs, uicfg
 from cubicweb.web.action import LinkToEntityAction, Action
 from cubicweb.web.form import FormViewMixIn
@@ -29,8 +30,8 @@
 from cubicweb.web.views.basecontrollers import JSonController
 
 
-uicfg.autoform_section.tag_subject_of(('*', 'comments', '*'),  'generated')
-uicfg.autoform_section.tag_object_of(('*', 'comments', '*'), 'generated')
+uicfg.autoform_section.tag_subject_of(('*', 'comments', '*'), formtype='main', section='hidden')
+uicfg.autoform_section.tag_object_of(('*', 'comments', '*'), formtype='main', section='hidden')
 uicfg.actionbox_appearsin_addmenu.tag_subject_of(('*', 'comments', '*'),  False)
 uicfg.actionbox_appearsin_addmenu.tag_object_of(('*', 'comments', '*'), False)
 uicfg.primaryview_section.tag_subject_of(('*', 'comments', '*'),  'hidden')
@@ -48,8 +49,7 @@
                                              req._(u'register'))
     else:
         link = u''
-    link += u'<a href="%s">%s</a>' % (req.build_url('login'),
-                                      req._(u'login'))
+    link += u'<a class="loadPopupLogin">%s</a>' % req._(u'login')
     return link
 
 # comment views ###############################################################
@@ -58,11 +58,11 @@
     __select__ = implements('Comment')
 
     def cell_call(self, row, col):
-        self.req.add_css('cubes.comment.css')
-        entity = self.complete_entity(row, col)
+        self._cw.add_css('cubes.comment.css')
+        entity = self.cw_rset.complete_entity(row, col)
         # display text, author and creation date
         self.w(u'<div class="comment">')
         self.w(u'<div class="commentInfo">')
         # do not try to display creator when you're not allowed to see CWUsers
         if entity.creator:
             authorlink = entity.creator.view('oneline')
@@ -63,10 +63,10 @@
         # display text, author and creation date
         self.w(u'<div class="comment">')
         self.w(u'<div class="commentInfo">')
         # do not try to display creator when you're not allowed to see CWUsers
         if entity.creator:
             authorlink = entity.creator.view('oneline')
-            self.w(u'%s %s\n' % (self.req._('written by'), authorlink))
-        self.w(self.format_date(entity.creation_date))
+            self.w(u'%s %s\n' % (self._cw._('written by'), authorlink))
+        self.w(self._cw.format_date(entity.creation_date))
         # commented object
         if entity.comments:
@@ -71,6 +71,6 @@
         # commented object
         if entity.comments:
-            self.w(u",  %s " % self.req._('comments'))
+            self.w(u",  %s " % self._cw._('comments'))
             entity.comments[0].view('oneline', w=self.w)
             self.w(u"\n")
         # don't include responses in this view, since the comment section
@@ -83,7 +83,7 @@
             gen = self.generated_by[0]
             link = '<a href="%s">%s</a>' % (gen.absolute_url(),
                                             gen.dc_type().lower())
-            txt = self.req._('this comment has been generated from this %s') % link
+            txt = self._cw._('this comment has been generated from this %s') % link
             self.w(u'<div class="commentBottom">%s</div>\n' % txt)
         self.w(u'</div>\n')
 
@@ -93,7 +93,7 @@
     __select__ = implements('Comment')
 
     def cell_call(self, row, col, **kwargs):
-        entity = self.entity(row, col)
+        entity = self.cw_rset.get_entity(row, col)
         root = entity.root()
         self.w(u'[<a href="%s">#%s</a>] '
                % (xml_escape(root.absolute_url()), root.eid))
@@ -97,7 +97,7 @@
         root = entity.root()
         self.w(u'[<a href="%s">#%s</a>] '
                % (xml_escape(root.absolute_url()), root.eid))
-        maxsize = self.req.property_value('navigation.short-line-size')
+        maxsize = self._cw.property_value('navigation.short-line-size')
         maxsize = maxsize - len(str(root.eid))
         content = entity.printable_value('content', format='text/plain')
         content = xml_escape(cut(content, maxsize))
@@ -106,7 +106,7 @@
 
 
 class CommentTreeItemView(baseviews.ListItemView):
-    id = 'treeitem'
+    __regid__ = 'treeitem'
     __select__ = implements('Comment')
 
     def cell_call(self, row, col, **kwargs):
@@ -110,8 +110,8 @@
     __select__ = implements('Comment')
 
     def cell_call(self, row, col, **kwargs):
-        self.req.add_js('cubicweb.ajax.js')
-        self.req.add_css('cubes.comment.css')
-        entity = self.entity(row, col)
-        actions = self.vreg['actions']
+        self._cw.add_js('cubicweb.ajax.js')
+        self._cw.add_css('cubes.comment.css')
+        entity = self.cw_rset.get_entity(row, col)
+        actions = self._cw.vreg['actions']
         self.w(u'<div class="commentInfo">')
@@ -117,6 +117,6 @@
         self.w(u'<div class="commentInfo">')
-        self.w(self.format_date(entity.creation_date))
-        self.w(u' %s' % self.format_time(entity.creation_date))
+        self.w(self._cw.format_date(entity.creation_date))
+        self.w(u' %s' % self._cw.format_time(entity.creation_date))
         if entity.creator:
             authorlink = entity.creator.view('oneline')
             self.w(u', %s <span class="author">%s</span> \n'
@@ -120,7 +120,7 @@
         if entity.creator:
             authorlink = entity.creator.view('oneline')
             self.w(u', %s <span class="author">%s</span> \n'
-                   % (self.req._('written by'), authorlink,))
-        replyaction = actions.select_object('reply_comment', self.req,
-                                       rset=self.rset, row=row)
+                   % (self._cw._('written by'), authorlink,))
+        replyaction = actions.select_or_none('reply_comment', self._cw,
+                                       rset=self.cw_rset, row=row)
         if replyaction is not None:
@@ -126,4 +126,4 @@
         if replyaction is not None:
-            url = self.req.build_ajax_replace_url(
+            url = self._cw.build_ajax_replace_url(
                 'comment%sHolder' % entity.eid, rql_for_eid(entity.eid),
                 'inlinecomment')
@@ -128,4 +128,4 @@
                 'comment%sHolder' % entity.eid, rql_for_eid(entity.eid),
                 'inlinecomment')
-            if self.req.cnx.anonymous_connection:
+            if self._cw.cnx.anonymous_connection:
                 self.w(u' | <span class="replyto">%s <a href="%s">%s</a></span>'
@@ -131,5 +131,5 @@
                 self.w(u' | <span class="replyto">%s <a href="%s">%s</a></span>'
-                       % (_login_register_link(self.req),
-                          xml_escape(url), self.req._(replyaction.title)))
+                       % (_login_register_link(self._cw),
+                          xml_escape(url), self._cw._(replyaction.title)))
             else:
                 self.w(u' | <span class="replyto"><a href="%s">%s</a></span>'
@@ -134,6 +134,6 @@
             else:
                 self.w(u' | <span class="replyto"><a href="%s">%s</a></span>'
-                       % (xml_escape(url), self.req._(replyaction.title)))
-        editaction = actions.select_object('edit_comment', self.req,
-                                           rset=self.rset, row=row)
+                       % (xml_escape(url), self._cw._(replyaction.title)))
+        editaction = actions.select_or_none('edit_comment', self._cw,
+                                            rset=self.cw_rset, row=row)
         if editaction is not None:
@@ -139,5 +139,5 @@
         if editaction is not None:
-            url = self.req.build_ajax_replace_url(
+            url = self._cw.build_ajax_replace_url(
                 'comment%s' % entity.eid, rql_for_eid(entity.eid),
                 'editcomment')
             self.w(u' | <span class="replyto"><a href="%s">%s</a></span>'
@@ -141,5 +141,5 @@
                 'comment%s' % entity.eid, rql_for_eid(entity.eid),
                 'editcomment')
             self.w(u' | <span class="replyto"><a href="%s">%s</a></span>'
-                   % (xml_escape(url), self.req._(editaction.title)))
+                   % (xml_escape(url), self._cw._(editaction.title)))
 
@@ -145,4 +145,4 @@
 
-        deleteaction = actions.select_object('delete_comment', self.req,
-                                             rset=self.rset, row=row)
+        deleteaction = actions.select_or_none('delete_comment', self._cw,
+                                             rset=self.cw_rset, row=row)
         if deleteaction is not None:
@@ -148,5 +148,5 @@
         if deleteaction is not None:
-            url = self.req.build_ajax_replace_url(
+            url = self._cw.build_ajax_replace_url(
                 'comment%s' % entity.eid, rql_for_eid(entity.eid),
                 'deleteconf')
             self.w(u' | <span class="replyto"><a href="%s">%s</a></span>'
@@ -150,8 +150,8 @@
                 'comment%s' % entity.eid, rql_for_eid(entity.eid),
                 'deleteconf')
             self.w(u' | <span class="replyto"><a href="%s">%s</a></span>'
-                   % (xml_escape(url), self.req._(deleteaction.title)))
+                   % (xml_escape(url), self._cw._(deleteaction.title)))
 
         self.w(u'</div>\n')
         text = entity.printable_value('content')
         if not kwargs.get('full'):
@@ -154,8 +154,8 @@
 
         self.w(u'</div>\n')
         text = entity.printable_value('content')
         if not kwargs.get('full'):
-            maxsize = self.req.property_value('navigation.short-line-size')
+            maxsize = self._cw.property_value('navigation.short-line-size')
             text = safe_cut(text, maxsize)
         self.w(u'<div class="commentBody">%s</div>\n' % text)
         self.w(u'<div id="comment%sHolder"></div>' % entity.eid)
@@ -173,7 +173,7 @@
 # comment edition views #######################################################
 
 class InlineCommentView(EntityView):
-    id = 'inlinecomment'
+    __regid__ = 'inlinecomment'
     __select__ = yes() # explicit call when it makes sense
 
     def cell_call(self, row, col):
@@ -177,8 +177,8 @@
     __select__ = yes() # explicit call when it makes sense
 
     def cell_call(self, row, col):
-        entity = self.entity(row, col)
+        entity = self.cw_rset.get_entity(row, col)
         self.wview('inlinecommentform', None, commented=entity)
 
 
 class InlineEditCommentForm(FormViewMixIn, EntityView):
@@ -181,11 +181,11 @@
         self.wview('inlinecommentform', None, commented=entity)
 
 
 class InlineEditCommentForm(FormViewMixIn, EntityView):
-    id = 'editcomment'
+    __regid__ = 'editcomment'
     __select__ = implements('Comment')
 
     jsfunc = "processComment(%s, '%s')"
     jsonmeth = 'edit_comment'
 
     def cell_call(self, row, col):
@@ -186,9 +186,9 @@
     __select__ = implements('Comment')
 
     jsfunc = "processComment(%s, '%s')"
     jsonmeth = 'edit_comment'
 
     def cell_call(self, row, col):
-        self.comment_form(self.entity(row, col))
+        self.comment_form(self.cw_rset.get_entity(row, col))
 
     def comment_form(self, commented, newcomment=None):
@@ -193,6 +193,6 @@
 
     def comment_form(self, commented, newcomment=None):
-        self.req.add_js('cubes.comment.js')
+        self._cw.add_js('cubes.comment.js')
         if newcomment is None:
             newcomment = commented
         # hack to avoid tabindex conflicts caused by Ajax requests
@@ -196,8 +196,8 @@
         if newcomment is None:
             newcomment = commented
         # hack to avoid tabindex conflicts caused by Ajax requests
-        self.req.next_tabindex = count(20).next
+        self._cw.next_tabindex = count(20).next
         jseid = dumps(commented.eid)
         buttons = [Button(onclick=self.jsfunc % (jseid, self.jsonmeth)),
                    Button(stdmsgs.BUTTON_CANCEL,
                           onclick=self.jsfunc % (jseid, ''))]
@@ -200,8 +200,8 @@
         jseid = dumps(commented.eid)
         buttons = [Button(onclick=self.jsfunc % (jseid, self.jsonmeth)),
                    Button(stdmsgs.BUTTON_CANCEL,
                           onclick=self.jsfunc % (jseid, ''))]
-        form = self.vreg['forms'].select('edition', self.req,
-                                         entity=newcomment,
-                                         form_buttons=buttons)
+        form = self._cw.vreg['forms'].select('edition', self._cw,
+                                             entity=newcomment,
+                                             form_buttons=buttons)
         self.w(u'<div id="comment%sSlot">%s</div>' % (
@@ -207,7 +207,7 @@
         self.w(u'<div id="comment%sSlot">%s</div>' % (
-            commented.eid, form.form_render(main_form_title=u'',
-                                            display_label=False,
-                                            display_relations_form=False)))
+            commented.eid, form.render(main_form_title=u'',
+                                       display_label=False,
+                                       display_relations_form=False)))
 
 
 class InlineCommentForm(InlineEditCommentForm):
@@ -211,9 +211,9 @@
 
 
 class InlineCommentForm(InlineEditCommentForm):
-    id = 'inlinecommentform'
+    __regid__ = 'inlinecommentform'
     __select__ = match_kwargs('commented') # explicit call when it makes sense
 
     jsonmeth = 'add_comment'
 
     def call(self, commented):
@@ -215,11 +215,10 @@
     __select__ = match_kwargs('commented') # explicit call when it makes sense
 
     jsonmeth = 'add_comment'
 
     def call(self, commented):
-        self.initialize_varmaker()
-        newcomment = self.vreg['etypes'].etype_class('Comment')(self.req)
-        newcomment.eid = self.varmaker.next()
+        newcomment = self._cw.vreg['etypes'].etype_class('Comment')(self._cw)
+        newcomment.eid = self._cw.varmaker.next()
         self.comment_form(commented, newcomment)
 
 
@@ -229,10 +228,10 @@
     """a component to display a <div> html section including comments
     related to an object
     """
-    id = 'commentsection'
+    __regid__ = 'commentsection'
     __select__ = (EntityVComponent.__select__
                   & relation_possible('comments', 'object', 'Comment'))
 
     context = 'navcontentbottom'
 
     def cell_call(self, row, col, view=None):
@@ -233,8 +232,8 @@
     __select__ = (EntityVComponent.__select__
                   & relation_possible('comments', 'object', 'Comment'))
 
     context = 'navcontentbottom'
 
     def cell_call(self, row, col, view=None):
-        req = self.req
+        req = self._cw
         req.add_js( ('cubicweb.ajax.js', 'cubes.comment.js') )
@@ -240,5 +239,5 @@
         req.add_js( ('cubicweb.ajax.js', 'cubes.comment.js') )
-        eid = self.rset[row][col]
+        eid = self.cw_rset[row][col]
         self.w(u'<div id="%s" class="%s" cubicweb:rooteid="%s">' % (
             self.div_id(), self.div_class(), eid))
         rql = u'Any C,CD,CC,CCF,U,UL,US,UF ORDERBY CD WHERE C is Comment, '\
@@ -247,9 +246,9 @@
         rset = req.execute(rql, {'x': eid}, 'x')
         if rset.rowcount:
             self.w(u'<h4>%s</h4>' % (req._('Comment_plural')))
-        addcomment = self.vreg['actions'].select_object('reply_comment', req,
-                                                        rset=self.rset,
+        addcomment = self._cw.vreg['actions'].select_or_none('reply_comment', req,
+                                                        rset=self.cw_rset,
                                                         row=row, col=col)
         if addcomment is not None:
             url = req.build_ajax_replace_url(
                 'comment%sHolder' % eid, rql_for_eid(eid), 'inlinecomment')
@@ -252,9 +251,9 @@
                                                         row=row, col=col)
         if addcomment is not None:
             url = req.build_ajax_replace_url(
                 'comment%sHolder' % eid, rql_for_eid(eid), 'inlinecomment')
-            self.w(u' (<a href="%s">%s</a>)' % (url, req._(addcomment.title)))
+            self.w(u' (<a href="%s" onclick="javascript:toggleVisibility(\'addCommentLinks\');">%s</a>)' % (url, req._(addcomment.title)))
             # XXX still necessary?
             #if req.use_fckeditor() and req.property_value('ui.default-text-format') == 'text/html':
             #    req.fckeditor_config()
         if req.cnx.anonymous_connection:
@@ -257,8 +256,9 @@
             # XXX still necessary?
             #if req.use_fckeditor() and req.property_value('ui.default-text-format') == 'text/html':
             #    req.fckeditor_config()
         if req.cnx.anonymous_connection:
-            self.w(u'%s %s' % (_login_register_link(req), req._(u'to comment')))
+            self.w(u'<div id="addCommentLinks" class="hidden">%s %s</div>' % \
+                   (_login_register_link(req), req._(u'to comment')))
         self.w(u'<div id="comment%sHolder"></div>' % eid)
         if rset.rowcount:
             self.w(u'<ul class="comment">')
@@ -271,6 +271,6 @@
 # comment actions #############################################################
 
 class ReplyCommentAction(LinkToEntityAction):
-    id = 'reply_comment'
+    __regid__ = 'reply_comment'
     __select__ = LinkToEntityAction.__select__ & implements('Comment')
 
@@ -275,4 +275,3 @@
     __select__ = LinkToEntityAction.__select__ & implements('Comment')
 
-    etype = 'Comment'
     rtype = 'comments'
@@ -278,8 +277,9 @@
     rtype = 'comments'
-    target = 'subject'
+    role = 'object'
+    target_etype = 'Comment'
 
     title = _('reply to this comment')
     category = 'hidden'
     order = 111
 
     def url(self):
@@ -280,16 +280,16 @@
 
     title = _('reply to this comment')
     category = 'hidden'
     order = 111
 
     def url(self):
-        comment = self.rset.get_entity(self.row or 0, self.col or 0)
-        linkto = '%s:%s:%s' % (self.rtype, comment.eid, self.target)
-        return self.build_url(vid='creation', etype=self.etype,
-                              __linkto=linkto,
-                              __redirectpath=comment.root().rest_path(),
-                              __redirectvid=self.req.form.get('vid', ''))
+        comment = self.cw_rset.get_entity(self.cw_row or 0, self.cw_col or 0)
+        linkto = '%s:%s:subject' % (self.rtype, comment.eid)
+        return self._cw.build_url(vid='creation', etype=self.target_etype,
+                                  __linkto=linkto,
+                                  __redirectpath=comment.root().rest_path(),
+                                  __redirectvid=self._cw.form.get('vid', ''))
 
 
 class AddCommentAction(LinkToEntityAction):
     """add comment is like reply for everything but Comment"""
@@ -292,7 +292,7 @@
 
 
 class AddCommentAction(LinkToEntityAction):
     """add comment is like reply for everything but Comment"""
-    id = 'reply_comment'
-    __select__ = LinkToEntityAction.__select__ & but_etype('Comment')
+    __regid__ = 'reply_comment'
+    __select__ = LinkToEntityAction.__select__ & ~implements('Comment')
 
@@ -298,4 +298,3 @@
 
-    etype = 'Comment'
     rtype = 'comments'
     role = 'object'
@@ -300,5 +299,6 @@
     rtype = 'comments'
     role = 'object'
+    target_etype = 'Comment'
 
     title = _('add comment')
     category = 'hidden'
@@ -306,7 +306,7 @@
 
 
 class EditCommentAction(Action):
-    id = 'edit_comment'
+    __regid__ = 'edit_comment'
     __select__ = one_line_rset() & implements('Comment') & has_permission('update')
 
     title = _('edit comment')
@@ -314,6 +314,6 @@
     order = 110
 
     def url(self):
-        return self.build_url(rql=self.rset.printable_rql(), vid='edition')
+        return self._cw.build_url(rql=self.cw_rset.printable_rql(), vid='edition')
 
 class DeleteCommentAction(Action):
@@ -318,4 +318,4 @@
 
 class DeleteCommentAction(Action):
-    id = 'delete_comment'
+    __regid__ = 'delete_comment'
     __select__ = implements('Comment') & \
@@ -321,4 +321,5 @@
     __select__ = implements('Comment') & \
+                 authenticated_user() & \
                  score_entity(lambda x: not x.reverse_comments and x.has_perm('delete'))
 
     title = _('delete comment')
@@ -326,9 +327,9 @@
     order = 110
 
     def url(self):
-        return self.build_url(rql=self.rset.printable_rql(), vid='deleteconf')
+        return self._cw.build_url(rql=self.cw_rset.printable_rql(), vid='deleteconf')
 
 # add some comments related methods to the Jsoncontroller #####################
 
 @monkeypatch(JSonController)
 def js_add_comment(self, commented, text, format):
@@ -330,11 +331,11 @@
 
 # add some comments related methods to the Jsoncontroller #####################
 
 @monkeypatch(JSonController)
 def js_add_comment(self, commented, text, format):
-    self.req.execute('INSERT Comment C: C comments X, C content %(text)s, '
+    self._cw.execute('INSERT Comment C: C comments X, C content %(text)s, '
                      'C content_format %(format)s  WHERE X eid %(x)s',
                      {'format' : format, 'text' : text, 'x' : commented}, 'x')
 
 @monkeypatch(JSonController)
 def js_edit_comment(self, comment, text, format):
@@ -336,9 +337,9 @@
                      'C content_format %(format)s  WHERE X eid %(x)s',
                      {'format' : format, 'text' : text, 'x' : commented}, 'x')
 
 @monkeypatch(JSonController)
 def js_edit_comment(self, comment, text, format):
-    self.req.execute('SET C content %(text)s, C content_format %(format)s '
+    self._cw.execute('SET C content %(text)s, C content_format %(format)s '
                      'WHERE C eid %(x)s',
                      {'format' : format, 'text' : text, 'x' : comment}, 'x')
 
@@ -349,9 +350,9 @@
     __select__ = implements('Comment')
 
     def cell_call(self, row, col):
-        entity = self.complete_entity(row, col)
+        entity = self.cw_rset.complete_entity(row, col)
         self.w(u'<item>\n')
         self.w(u'<guid isPermaLink="true">%s</guid>\n'
                % xml_escape(entity.absolute_url()))
         self.render_title_link(entity)
         description = entity.dc_description(format='text/html') + \
@@ -353,12 +354,12 @@
         self.w(u'<item>\n')
         self.w(u'<guid isPermaLink="true">%s</guid>\n'
                % xml_escape(entity.absolute_url()))
         self.render_title_link(entity)
         description = entity.dc_description(format='text/html') + \
-                      self.req._(u'about') + \
+                      self._cw._(u'about') + \
                       u' <a href=%s>%s</a>' % (entity.root().absolute_url(),
                                                entity.root().dc_title())
         self._marker('description', description)
         self._marker('dc:date', entity.dc_date(self.date_format))
         self.render_entity_creator(entity)
         self.w(u'</item>\n')
@@ -359,7 +360,7 @@
                       u' <a href=%s>%s</a>' % (entity.root().absolute_url(),
                                                entity.root().dc_title())
         self._marker('description', description)
         self._marker('dc:date', entity.dc_date(self.date_format))
         self.render_entity_creator(entity)
         self.w(u'</item>\n')
-
+        self.wview('rssitem', entity.related('comments', 'object'), 'null')