changeset 3700:3563bb7b4b82

merge with rc1
author Marcin Kuzminski <marcin@python-works.com>
date Sun, 07 Apr 2013 18:37:22 +0200
parents 0cef54d34605 (current diff) 49b34e3c0812 (diff)
children 45177757b322
files CONTRIBUTORS README.rst development.ini docs/api/api.rst docs/changelog.rst docs/contributing.rst docs/index.rst docs/installation.rst docs/installation_win.rst docs/setup.rst docs/theme/nature/layout.html docs/upgrade.rst docs/usage/general.rst docs/usage/git_support.rst docs/usage/troubleshooting.rst production.ini requires.txt rhodecode/__init__.py rhodecode/config/deployment.ini_tmpl rhodecode/config/environment.py rhodecode/config/middleware.py rhodecode/config/rcextensions/make_rcextensions.py rhodecode/config/routing.py rhodecode/config/setup_rhodecode.py rhodecode/controllers/admin/admin.py rhodecode/controllers/admin/ldap_settings.py rhodecode/controllers/admin/permissions.py rhodecode/controllers/admin/repos.py rhodecode/controllers/admin/settings.py rhodecode/controllers/admin/users.py rhodecode/controllers/api/api.py rhodecode/controllers/changelog.py rhodecode/controllers/changeset.py rhodecode/controllers/error.py rhodecode/controllers/feed.py rhodecode/controllers/files.py rhodecode/controllers/home.py rhodecode/controllers/journal.py rhodecode/controllers/login.py rhodecode/controllers/search.py rhodecode/controllers/settings.py rhodecode/controllers/summary.py rhodecode/i18n/rhodecode.pot rhodecode/lib/__init__.py rhodecode/lib/auth.py rhodecode/lib/auth_ldap.py rhodecode/lib/base.py rhodecode/lib/celerylib/__init__.py rhodecode/lib/celerylib/tasks.py rhodecode/lib/cleanup.py rhodecode/lib/db_manage.py rhodecode/lib/dbmigrate/__init__.py rhodecode/lib/dbmigrate/versions/003_version_1_2_0.py rhodecode/lib/exceptions.py rhodecode/lib/helpers.py rhodecode/lib/hooks.py rhodecode/lib/indexers/__init__.py rhodecode/lib/middleware/https_fixup.py rhodecode/lib/middleware/simplegit.py rhodecode/lib/middleware/simplehg.py rhodecode/lib/paster_commands/cleanup.py rhodecode/lib/update_repoinfo.py rhodecode/lib/utils.py rhodecode/lib/utils2.py rhodecode/model/db.py rhodecode/model/forms.py rhodecode/model/permission.py rhodecode/model/repo.py rhodecode/model/repo_permission.py rhodecode/model/repos_group.py rhodecode/model/scm.py rhodecode/model/user.py rhodecode/model/validators.py rhodecode/public/css/style.css rhodecode/templates/admin/permissions/permissions.html rhodecode/templates/admin/repos/repo_add_create_repository.html rhodecode/templates/admin/repos/repos.html rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html rhodecode/templates/admin/settings/settings.html rhodecode/templates/admin/users/user_edit.html rhodecode/templates/admin/users/user_edit_my_account.html rhodecode/templates/base/base.html rhodecode/templates/changelog/changelog.html rhodecode/templates/changeset/changeset.html rhodecode/templates/errors/error_document.html rhodecode/templates/files/files_browser.html rhodecode/templates/files/files_source.html rhodecode/templates/index.html rhodecode/templates/journal/journal.html rhodecode/templates/login.html rhodecode/templates/password_reset.html rhodecode/templates/register.html rhodecode/templates/settings/repo_settings.html rhodecode/templates/summary/summary.html rhodecode/tests/__init__.py rhodecode/tests/functional/test_changelog.py rhodecode/tests/functional/test_settings.py rhodecode/tests/functional/test_summary.py rhodecode/tests/models/test_repos_groups.py rhodecode/websetup.py setup.py test.ini
diffstat 269 files changed, 32355 insertions(+), 25734 deletions(-) [+]
line wrap: on
line diff
--- a/CONTRIBUTORS	Mon Mar 11 17:59:38 2013 +0100
+++ b/CONTRIBUTORS	Sun Apr 07 18:37:22 2013 +0200
@@ -33,3 +33,4 @@
     Philip Jameson <philip.j@hostdime.com>
     Mads Kiilerich <madski@unity3d.com>
     Dan Sheridan <djs@adelard.com>
+    Dennis Brakhane <brakhane@googlemail.com>
--- a/README.rst	Mon Mar 11 17:59:38 2013 +0100
+++ b/README.rst	Sun Apr 07 18:37:22 2013 +0200
@@ -75,7 +75,7 @@
 - Supports http/https, LDAP, AD, proxy-pass authentication.
 - Full permissions (private/read/write/admin) together with IP restrictions for each repository,
   additional explicit forking and repository creation permissions.
-- Users groups for easier permission management
+- User groups for easier permission management
 - Repository groups let you group repos and manage them easier.
 - Users can fork other users repos, and compare them at any time.
 - Integrates easily with other systems, with custom created mappers you can connect it to almost
--- a/development.ini	Mon Mar 11 17:59:38 2013 +0100
+++ b/development.ini	Sun Apr 07 18:37:22 2013 +0200
@@ -25,59 +25,92 @@
 #smtp_port = 
 #smtp_use_tls = false
 #smtp_use_ssl = true
-# Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.)
+## Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.)
 #smtp_auth = 
 
 [server:main]
 ## PASTE
-##nr of threads to spawn
+## nr of threads to spawn
 #threadpool_workers = 5
 
-##max request before thread respawn
+## max request before thread respawn
 #threadpool_max_requests = 10
 
-##option to use threads of process
+## option to use threads of process
 #use_threadpool = true
 
 #use = egg:Paste#http
 
-#WAITRESS
+## WAITRESS
 threads = 5
+## 100GB
+max_request_body_size = 107374182400
 use = egg:waitress#main
 
 host = 0.0.0.0
 port = 5000
 
-[filter:proxy-prefix]
-# prefix middleware for rc
-use = egg:PasteDeploy#prefix
-prefix = /<your-prefix>
+## prefix middleware for rc
+#[filter:proxy-prefix]
+#use = egg:PasteDeploy#prefix
+#prefix = /<your-prefix>
 
 [app:main]
 use = egg:rhodecode
+## enable proxy prefix middleware
 #filter-with = proxy-prefix
+
 full_stack = true
 static_files = true
-# Optional Languages
-# en, fr, ja, pt_BR, zh_CN, zh_TW, pl
+## Optional Languages
+## en, fr, ja, pt_BR, zh_CN, zh_TW, pl
 lang = en
 cache_dir = %(here)s/data
 index_dir = %(here)s/data/index
-app_instance_uuid = rc-develop
+
+## uncomment and set this path to use archive download cache
+#archive_cache_dir = /tmp/tarballcache
+
+## change this to unique ID for security
+app_instance_uuid = rc-production
+
+## cut off limit for large diffs (size in bytes)
 cut_off_limit = 256000
-vcs_full_cache = True
+
+## use cache version of scm repo everywhere
+vcs_full_cache = true
+
+## force https in RhodeCode, fixes https redirects, assumes it's always https
 force_https = false
+
+## use Strict-Transport-Security headers
+use_htsts = false
+
+## number of commits stats will parse on each iteration
 commit_parse_limit = 25
-# number of items displayed in lightweight dashboard before paginating
+
+## number of items displayed in lightweight dashboard before paginating is shown
 dashboard_items = 100
+
+## use gravatar service to display avatars
 use_gravatar = true
 
+## path to git executable
+git_path = git
+
+## git rev filter option, --all is the default filter, if you need to
+## hide all refs in changelog switch this to --branches --tags
+git_rev_filter=--all
+
 ## RSS feed options
-
 rss_cut_off_limit = 256000
 rss_items_per_page = 10
 rss_include_diff = false
 
+## options for showing and identifying changesets
+show_sha_length = 12
+show_revision_number = true
+
 
 ## alternative_gravatar_url allows you to use your own avatar server application
 ## the following parts of the URL will be replaced
@@ -89,8 +122,11 @@
 #alternative_gravatar_url = http://myavatarserver.com/getbyemail/{email}/{size}
 #alternative_gravatar_url = http://myavatarserver.com/getbymd5/{md5email}?s={size}
 
+
+## container auth options
 container_auth_enabled = false
 proxypass_auth_enabled = false
+
 ## default encoding used to convert from and to unicode
 ## can be also a comma seperated list of encoding in case of mixed encodings
 default_encoding = utf8
@@ -146,6 +182,11 @@
 ## handling that. Set this variable to 403 to return HTTPForbidden
 auth_ret_code =
 
+## locking return code. When repository is locked return this HTTP code. 2XX
+## codes don't break the transactions while 4XX codes do
+lock_ret_code = 423
+
+
 ####################################
 ###        CELERY CONFIG        ####
 ####################################
@@ -170,7 +211,7 @@
 celeryd.log.level = debug
 celeryd.max.tasks.per.child = 1
 
-#tasks will never be sent to the queue, but executed locally instead.
+## tasks will never be sent to the queue, but executed locally instead.
 celery.always.eager = false
 
 ####################################
@@ -226,18 +267,19 @@
 
 
 beaker.session.key = rhodecode
-## secure cookie requires AES python libraries ##
-#beaker.session.encrypt_key = g654dcno0-9873jhgfreyu
-#beaker.session.validate_key = 9712sds2212c--zxc123
+## secure cookie requires AES python libraries
+#beaker.session.encrypt_key = <key_for_encryption>
+#beaker.session.validate_key = <validation_key>
+
 ## sets session as invalid if it haven't been accessed for given amount of time
 beaker.session.timeout = 2592000
 beaker.session.httponly = true
 #beaker.session.cookie_path = /<your-prefix>
 
-## uncomment for https secure cookie ##
+## uncomment for https secure cookie
 beaker.session.secure = false
 
-## auto save the session to not to use .save() ##
+## auto save the session to not to use .save()
 beaker.session.auto = False
 
 ## default cookie expiration time in seconds `true` expire at browser close ##
@@ -252,57 +294,57 @@
 ### [errormator] ###
 ####################
 
-# Errormator is tailored to work with RhodeCode, see 
-# http://errormator.com for details how to obtain an account
-# you must install python package `errormator_client` to make it work
+## Errormator is tailored to work with RhodeCode, see 
+## http://errormator.com for details how to obtain an account
+## you must install python package `errormator_client` to make it work
 
-# errormator enabled
-errormator = true
+## errormator enabled
+errormator = false
 
 errormator.server_url = https://api.errormator.com
 errormator.api_key = YOUR_API_KEY
 
-# TWEAK AMOUNT OF INFO SENT HERE
+## TWEAK AMOUNT OF INFO SENT HERE
 
-# enables 404 error logging (default False)
+## enables 404 error logging (default False)
 errormator.report_404 = false
 
-# time in seconds after request is considered being slow (default 1)
+## time in seconds after request is considered being slow (default 1)
 errormator.slow_request_time = 1
 
-# record slow requests in application
-# (needs to be enabled for slow datastore recording and time tracking)
+## record slow requests in application
+## (needs to be enabled for slow datastore recording and time tracking)
 errormator.slow_requests = true
 
-# enable hooking to application loggers
+## enable hooking to application loggers
 # errormator.logging = true
 
-# minimum log level for log capture
+## minimum log level for log capture
 # errormator.logging.level = WARNING
 
-# send logs only from erroneous/slow requests
-# (saves API quota for intensive logging)
+## send logs only from erroneous/slow requests
+## (saves API quota for intensive logging)
 errormator.logging_on_error = false
 
-# list of additonal keywords that should be grabbed from environ object 
-# can be string with comma separated list of words in lowercase
-# (by default client will always send following info:
-# 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that 
-# start with HTTP* this list be extended with additional keywords here
+## list of additonal keywords that should be grabbed from environ object 
+## can be string with comma separated list of words in lowercase
+## (by default client will always send following info:
+## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that 
+## start with HTTP* this list be extended with additional keywords here
 errormator.environ_keys_whitelist = 
 
 
-# list of keywords that should be blanked from request object 
-# can be string with comma separated list of words in lowercase
-# (by default client will always blank keys that contain following words 
-# 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
-# this list be extended with additional keywords set here
+## list of keywords that should be blanked from request object 
+## can be string with comma separated list of words in lowercase
+## (by default client will always blank keys that contain following words 
+## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
+## this list be extended with additional keywords set here
 errormator.request_keys_blacklist =
 
 
-# list of namespaces that should be ignores when gathering log entries
-# can be string with comma separated list of namespaces
-# (by default the client ignores own entries: errormator_client.client)
+## list of namespaces that should be ignores when gathering log entries
+## can be string with comma separated list of namespaces
+## (by default the client ignores own entries: errormator_client.client)
 errormator.log_namespace_blacklist =  
 
 
@@ -310,8 +352,8 @@
 ### [sentry] ###
 ################
 
-# sentry is a alternative open source error aggregator
-# you must install python packages `sentry` and `raven` to enable 
+## sentry is a alternative open source error aggregator
+## you must install python packages `sentry` and `raven` to enable 
 
 sentry.dsn = YOUR_DNS
 sentry.servers =
@@ -371,7 +413,7 @@
 level = DEBUG
 handlers = 
 qualname = routes.middleware
-# "level = DEBUG" logs the route matched and routing variables.
+## "level = DEBUG" logs the route matched and routing variables.
 propagate = 1
 
 [logger_beaker]
--- a/docs/api/api.rst	Mon Mar 11 17:59:38 2013 +0100
+++ b/docs/api/api.rst	Sun Apr 07 18:37:22 2013 +0200
@@ -13,10 +13,10 @@
 API ACCESS FOR WEB VIEWS
 ++++++++++++++++++++++++
 
-API access can also be turned on for each web view in RhodeCode that is 
-decorated with `@LoginRequired` decorator. To enable API access simple change 
-the standard login decorator to `@LoginRequired(api_access=True)`. 
-After this change, a rhodecode view can be accessed without login by adding a 
+API access can also be turned on for each web view in RhodeCode that is
+decorated with `@LoginRequired` decorator. To enable API access simple change
+the standard login decorator to `@LoginRequired(api_access=True)`.
+After this change, a rhodecode view can be accessed without login by adding a
 GET parameter `?api_key=<api_key>` to url. By default this is only
 enabled on RSS/ATOM feed views.
 
@@ -26,7 +26,7 @@
 
 All clients are required to send JSON-RPC spec JSON data::
 
-    {   
+    {
         "id:"<id>",
         "api_key":"<api_key>",
         "method":"<method_name>",
@@ -49,7 +49,7 @@
 
 RhodeCode API will return always a JSON-RPC response::
 
-    {   
+    {
         "id":<id>, # matching id sent by request
         "result": "<result>"|null, # JSON formatted result, null if any errors
         "error": "null"|<error_message> # JSON formatted error (if any)
@@ -70,14 +70,14 @@
 To get started quickly simply run::
 
   rhodecode-api _create_config --apikey=<youapikey> --apihost=<rhodecode host>
- 
+
 This will create a file named .config in the directory you executed it storing
 json config file with credentials. You can skip this step and always provide
 both of the arguments to be able to communicate with server
 
 
 after that simply run any api command for example get_repo::
- 
+
  rhodecode-api get_repo
 
  calling {"api_key": "<apikey>", "id": 75, "args": {}, "method": "get_repo"} to http://127.0.0.1:5000
@@ -90,8 +90,8 @@
 
 Let's try again now giving the repoid as parameters::
 
-    rhodecode-api get_repo repoid:rhodecode   
- 
+    rhodecode-api get_repo repoid:rhodecode
+
     calling {"api_key": "<apikey>", "id": 39, "args": {"repoid": "rhodecode"}, "method": "get_repo"} to http://127.0.0.1:5000
     rhodecode said:
     {'error': None,
@@ -132,7 +132,7 @@
 
 Dispatch rescan repositories action. If remove_obsolete is set
 RhodeCode will delete repos that are in database but not in the filesystem.
-This command can be executed only using api_key belonging to user with admin 
+This command can be executed only using api_key belonging to user with admin
 rights.
 
 INPUT::
@@ -147,17 +147,40 @@
 OUTPUT::
 
     id : <id_given_in_input>
-    result : "{'added': [<list of names of added repos>], 
+    result : "{'added': [<list of names of added repos>],
                'removed': [<list of names of removed repos>]}"
     error :  null
 
 
+invalidate_cache
+----------------
+
+Invalidate cache for repository.
+This command can be executed only using api_key belonging to user with admin
+rights or regular user that have write or admin or write access to repository.
+
+INPUT::
+
+    id : <id_for_response>
+    api_key : "<api_key>"
+    method :  "invalidate_cache"
+    args :    {
+                "repoid" : "<reponame or repo_id>"
+              }
+
+OUTPUT::
+
+    id : <id_given_in_input>
+    result : "Cache for repository `<reponame>` was invalidated: invalidated cache keys: <list_of_cache_keys>"
+    error :  null
+
 lock
 ----
 
 Set locking state on given repository by given user. If userid param is skipped
-, then it is set to id of user whos calling this method.
-This command can be executed only using api_key belonging to user with admin 
+, then it is set to id of user whos calling this method. If locked param is skipped
+then function shows current lock state of given repo.
+This command can be executed only using api_key belonging to user with admin
 rights or regular user that have admin or write access to repository.
 
 INPUT::
@@ -168,7 +191,7 @@
     args :    {
                 "repoid" : "<reponame or repo_id>"
                 "userid" : "<user_id or username = Optional(=apiuser)>",
-                "locked" : "<bool true|false>"
+                "locked" : "<bool true|false = Optional(=None)>"
               }
 
 OUTPUT::
@@ -183,7 +206,7 @@
 
 Shows IP address as seen from RhodeCode server, together with all
 defined IP addresses for given user.
-This command can be executed only using api_key belonging to user with admin 
+This command can be executed only using api_key belonging to user with admin
 rights.
 
 INPUT::
@@ -208,7 +231,7 @@
                                 ...
                              ]
              }
-    
+
     error :  null
 
 
@@ -217,7 +240,7 @@
 
 Get's an user by username or user_id, Returns empty result if user is not found.
 If userid param is skipped it is set to id of user who is calling this method.
-This command can be executed only using api_key belonging to user with admin 
+This command can be executed only using api_key belonging to user with admin
 rights, or regular users that cannot specify different userid than theirs
 
 
@@ -226,16 +249,17 @@
     id : <id_for_response>
     api_key : "<api_key>"
     method :  "get_user"
-    args :    { 
+    args :    {
                 "userid" : "<username or user_id Optional(=apiuser)>"
               }
 
 OUTPUT::
 
     id : <id_given_in_input>
-    result: None if user does not exist or 
+    result: None if user does not exist or
             {
                 "user_id" :     "<user_id>",
+                "api_key" :     "<api_key>",
                 "username" :    "<username>",
                 "firstname":    "<firstname>",
                 "lastname" :    "<lastname>",
@@ -289,7 +313,7 @@
                 "ldap_dn" :     "<ldap_dn>",
                 "last_login":   "<last_login>",
               },
-    	      …
+              …
             ]
     error:  null
 
@@ -297,7 +321,7 @@
 create_user
 -----------
 
-Creates new user. This command can 
+Creates new user. This command can
 be executed only using api_key belonging to user with admin rights.
 
 
@@ -341,7 +365,7 @@
 update_user
 -----------
 
-updates given user if such user exists. This command can 
+updates given user if such user exists. This command can
 be executed only using api_key belonging to user with admin rights.
 
 
@@ -378,7 +402,7 @@
                 "admin" :    "<bool>",
                 "ldap_dn" :  "<ldap_dn>",
                 "last_login": "<last_login>",
-              },              
+              },
             }
     error:  null
 
@@ -387,7 +411,7 @@
 -----------
 
 
-deletes givenuser if such user exists. This command can 
+deletes givenuser if such user exists. This command can
 be executed only using api_key belonging to user with admin rights.
 
 
@@ -413,7 +437,7 @@
 get_users_group
 ---------------
 
-Gets an existing users group. This command can be executed only using api_key
+Gets an existing user group. This command can be executed only using api_key
 belonging to user with admin rights.
 
 
@@ -423,7 +447,7 @@
     api_key : "<api_key>"
     method :  "get_users_group"
     args :    {
-                "usersgroupid" : "<users group id or name>"
+                "usersgroupid" : "<user group id or name>"
               }
 
 OUTPUT::
@@ -435,7 +459,7 @@
                "group_name" :     "<groupname>",
                "active":          "<bool>",
                "members" :  [
-                              { 
+                              {
                                 "user_id" :  "<user_id>",
                                 "username" : "<username>",
                                 "firstname": "<firstname>",
@@ -456,7 +480,7 @@
 get_users_groups
 ----------------
 
-Lists all existing users groups. This command can be executed only using 
+Lists all existing user groups. This command can be executed only using
 api_key belonging to user with admin rights.
 
 
@@ -484,7 +508,7 @@
 create_users_group
 ------------------
 
-Creates new users group. This command can be executed only using api_key
+Creates new user group. This command can be executed only using api_key
 belonging to user with admin rights
 
 
@@ -502,7 +526,7 @@
 
     id : <id_given_in_input>
     result: {
-              "msg": "created new users group `<groupname>`",
+              "msg": "created new user group `<groupname>`",
               "users_group": {
                      "users_group_id" : "<id>",
                      "group_name" :     "<groupname>",
@@ -515,7 +539,7 @@
 add_user_to_users_group
 -----------------------
 
-Adds a user to a users group. If user exists in that group success will be 
+Adds a user to a user group. If user exists in that group success will be
 `false`. This command can be executed only using api_key
 belonging to user with admin rights
 
@@ -526,7 +550,7 @@
     api_key : "<api_key>"
     method :  "add_user_users_group"
     args:     {
-                "usersgroupid" : "<users group id or name>",
+                "usersgroupid" : "<user group id or name>",
                 "userid" : "<user_id or username>",
               }
 
@@ -535,7 +559,7 @@
     id : <id_given_in_input>
     result: {
               "success": True|False # depends on if member is in group
-              "msg": "added member `<username>` to users group `<groupname>` | 
+              "msg": "added member `<username>` to user group `<groupname>` |
                       User is already in that group"
             }
     error:  null
@@ -544,8 +568,8 @@
 remove_user_from_users_group
 ----------------------------
 
-Removes a user from a users group. If user is not in given group success will
-be `false`. This command can be executed only 
+Removes a user from a user group. If user is not in given group success will
+be `false`. This command can be executed only
 using api_key belonging to user with admin rights
 
 
@@ -555,7 +579,7 @@
     api_key : "<api_key>"
     method :  "remove_user_from_users_group"
     args:     {
-                "usersgroupid" : "<users group id or name>",
+                "usersgroupid" : "<user group id or name>",
                 "userid" : "<user_id or username>",
               }
 
@@ -564,7 +588,7 @@
     id : <id_given_in_input>
     result: {
               "success":  True|False,  # depends on if member is in group
-              "msg": "removed member <username> from users group <groupname> | 
+              "msg": "removed member <username> from user group <groupname> |
                       User wasn't in group"
             }
     error:  null
@@ -574,8 +598,8 @@
 --------
 
 Gets an existing repository by it's name or repository_id. Members will return
-either users_group or user associated to that repository. This command can be 
-executed only using api_key belonging to user with admin 
+either users_group or user associated to that repository. This command can be
+executed only using api_key belonging to user with admin
 rights or regular user that have at least read access to repository.
 
 
@@ -599,9 +623,9 @@
                 "clone_uri" :        "<clone_uri>",
                 "enable_downloads":  "<bool>",
                 "enable_locking":    "<bool>",
-                "enable_statistics": "<bool>",                
+                "enable_statistics": "<bool>",
                 "private":           "<bool>",
-                "created_on" :       "<date_time_created>",                
+                "created_on" :       "<date_time_created>",
                 "description" :      "<description>",
                 "landing_rev":       "<landing_rev>",
                 "last_changeset":    {
@@ -615,8 +639,8 @@
                 "owner":             "<repo_owner>",
                 "fork_of":           "<name_of_fork_parent>",
                 "members" :     [
-                                  { 
-                                    "type": "user",
+                                  {
+                                    "type":        "user",
                                     "user_id" :    "<user_id>",
                                     "username" :   "<username>",
                                     "firstname":   "<firstname>",
@@ -630,8 +654,8 @@
                                     "permission" : "repository.(read|write|admin)"
                                   },

-                                  { 
-                                    "type": "users_group",
+                                  {
+                                    "type":      "users_group",
                                     "id" :       "<usersgroupid>",
                                     "name" :     "<usersgroupname>",
                                     "active":    "<bool>",
@@ -639,6 +663,22 @@
                                   },

                                 ]
+                 "followers":   [
+                                  {
+                                    "user_id" :     "<user_id>",
+                                    "username" :    "<username>",
+                                    "firstname":    "<firstname>",
+                                    "lastname" :    "<lastname>",
+                                    "email" :       "<email>",
+                                    "emails":       "<list_of_all_additional_emails>",
+                                    "ip_addresses": "<list_of_ip_addresses_for_user>",
+                                    "active" :      "<bool>",
+                                    "admin" :       "<bool>",
+                                    "ldap_dn" :     "<ldap_dn>",
+                                    "last_login":   "<last_login>",
+                                  },
+                                  …
+                 ]
             }
     error:  null
 
@@ -646,8 +686,8 @@
 get_repos
 ---------
 
-Lists all existing repositories. This command can be executed only using 
-api_key belonging to user with admin rights or regular user that have 
+Lists all existing repositories. This command can be executed only using
+api_key belonging to user with admin rights or regular user that have
 admin, write or read access to repository.
 
 
@@ -668,14 +708,14 @@
                 "repo_type" :        "<repo_type>",
                 "clone_uri" :        "<clone_uri>",
                 "private": :         "<bool>",
-                "created_on" :       "<datetimecreated>",                
+                "created_on" :       "<datetimecreated>",
                 "description" :      "<description>",
                 "landing_rev":       "<landing_rev>",
                 "owner":             "<repo_owner>",
                 "fork_of":           "<name_of_fork_parent>",
                 "enable_downloads":  "<bool>",
                 "enable_locking":    "<bool>",
-                "enable_statistics": "<bool>",                   
+                "enable_statistics": "<bool>",
               },

             ]
@@ -685,9 +725,9 @@
 get_repo_nodes
 --------------
 
-returns a list of nodes and it's children in a flat list for a given path 
-at given revision. It's possible to specify ret_type to show only `files` or 
-`dirs`. This command can be executed only using api_key belonging to user 
+returns a list of nodes and it's children in a flat list for a given path
+at given revision. It's possible to specify ret_type to show only `files` or
+`dirs`. This command can be executed only using api_key belonging to user
 with admin rights
 
 
@@ -720,9 +760,9 @@
 -----------
 
 Creates a repository. If repository name contains "/", all needed repository
-groups will be created. For example "foo/bar/baz" will create groups 
-"foo", "bar" (with "foo" as parent), and create "baz" repository with 
-"bar" as group. This command can be executed only using api_key belonging to user with admin 
+groups will be created. For example "foo/bar/baz" will create groups
+"foo", "bar" (with "foo" as parent), and create "baz" repository with
+"bar" as group. This command can be executed only using api_key belonging to user with admin
 rights or regular user that have create repository permission. Regular users
 cannot specify owner parameter
 
@@ -756,14 +796,14 @@
                 "repo_type" :        "<repo_type>",
                 "clone_uri" :        "<clone_uri>",
                 "private": :         "<bool>",
-                "created_on" :       "<datetimecreated>",                
+                "created_on" :       "<datetimecreated>",
                 "description" :      "<description>",
                 "landing_rev":       "<landing_rev>",
                 "owner":             "<username or user_id>",
                 "fork_of":           "<name_of_fork_parent>",
                 "enable_downloads":  "<bool>",
                 "enable_locking":    "<bool>",
-                "enable_statistics": "<bool>",                     
+                "enable_statistics": "<bool>",
               },
             }
     error:  null
@@ -792,7 +832,7 @@
                 "copy_permissions": "<bool>",
                 "private":          "<bool>",
                 "landing_rev":      "<landing_rev>"
-                                
+
               }
 
 OUTPUT::
@@ -808,8 +848,10 @@
 delete_repo
 -----------
 
-Deletes a repository. This command can be executed only using api_key belonging to user with admin 
-rights or regular user that have admin access to repository.
+Deletes a repository. This command can be executed only using api_key belonging
+to user with admin rights or regular user that have admin access to repository.
+When `forks` param is set it's possible to detach or delete forks of deleting
+repository
 
 
 INPUT::
@@ -818,7 +860,8 @@
     api_key : "<api_key>"
     method :  "delete_repo"
     args:     {
-                "repoid" : "<reponame or repo_id>"
+                "repoid" : "<reponame or repo_id>",
+                "forks"  : "`delete` or `detach` = Optional(None)"
               }
 
 OUTPUT::
@@ -835,7 +878,7 @@
 ---------------------
 
 Grant permission for user on given repository, or update existing one
-if found. This command can be executed only using api_key belonging to user 
+if found. This command can be executed only using api_key belonging to user
 with admin rights.
 
 
@@ -863,7 +906,7 @@
 revoke_user_permission
 ----------------------
 
-Revoke permission for user on given repository. This command can be executed 
+Revoke permission for user on given repository. This command can be executed
 only using api_key belonging to user with admin rights.
 
 
@@ -890,8 +933,8 @@
 grant_users_group_permission
 ----------------------------
 
-Grant permission for users group on given repository, or update
-existing one if found. This command can be executed only using 
+Grant permission for user group on given repository, or update
+existing one if found. This command can be executed only using
 api_key belonging to user with admin rights.
 
 
@@ -902,7 +945,7 @@
     method :  "grant_users_group_permission"
     args:     {
                 "repoid" : "<reponame or repo_id>"
-                "usersgroupid" : "<users group id or name>"
+                "usersgroupid" : "<user group id or name>"
                 "perm" : "(repository.(none|read|write|admin))",
               }
 
@@ -914,12 +957,12 @@
               "success": true
             }
     error:  null
-    
-    
+
+
 revoke_users_group_permission
 -----------------------------
 
-Revoke permission for users group on given repository.This command can be 
+Revoke permission for user group on given repository.This command can be
 executed only using api_key belonging to user with admin rights.
 
 INPUT::
@@ -929,7 +972,7 @@
     method  : "revoke_users_group_permission"
     args:     {
                 "repoid" : "<reponame or repo_id>"
-                "usersgroupid" : "<users group id or name>"
+                "usersgroupid" : "<user group id or name>"
               }
 
 OUTPUT::
@@ -939,4 +982,4 @@
               "msg" : "Revoked perm for group: `<usersgroupname>` in repo: `<reponame>`",
               "success": true
             }
-    error:  null
\ No newline at end of file
+    error:  null
--- a/docs/api/models.rst	Mon Mar 11 17:59:38 2013 +0100
+++ b/docs/api/models.rst	Sun Apr 07 18:37:22 2013 +0200
@@ -6,30 +6,30 @@
 
 .. automodule:: rhodecode.model
    :members:
-   
+
 .. automodule:: rhodecode.model.comment
    :members:
-  
+
 .. automodule:: rhodecode.model.notification
-   :members:   
+   :members:
 
 .. automodule:: rhodecode.model.permission
    :members:
 
 .. automodule:: rhodecode.model.repo_permission
-   :members:      
+   :members:
 
 .. automodule:: rhodecode.model.repo
-   :members:   
+   :members:
 
 .. automodule:: rhodecode.model.repos_group
    :members:
-   
+
 .. automodule:: rhodecode.model.scm
    :members:
-   
+
 .. automodule:: rhodecode.model.user
-   :members:      
-   
+   :members:
+
 .. automodule:: rhodecode.model.users_group
-   :members:   
\ No newline at end of file
+   :members:
--- a/docs/changelog.rst	Mon Mar 11 17:59:38 2013 +0100
+++ b/docs/changelog.rst	Sun Apr 07 18:37:22 2013 +0200
@@ -4,6 +4,82 @@
 Changelog
 =========
 
+1.6.0rc1 (**2013-04-07**)
+-------------------------
+
+news
+++++
+ 
+ - Redesign UI, with lots of small improvements.
+ - Group management delegation. Group admin can manage a group, and repos
+   under it, admin can create child groups inside group he manages.
+ - Repository extra fields. Optional unlimited extra fields can be defined for
+   each repository to store custom data.
+ - API get_repo call includes repo followers now.
+ - Large amounts of improvements in pull requests.
+ - #734 repo switcher is available in all pages.
+ - #733 API invalidate_cache function.
+ - Added option to turn on HSTS headers when using SSL.
+ - #83 show repo size on summary page.
+ - #745 added show full diff link into to big diff message.
+ - Deprecated RSS links - ATOM is the present and the future.
+ - Add option to define custom lexers for custom extensions for code highlight
+   in rcextension module.
+ - Git executable is now configurable via .ini files.
+ - #689 repositories now has optional detach/delete option for connected forks.
+ - Obfuscate password when cloning a remote repo with credentials.
+ - #788 tarball cache. zip or compressed tarballs can be optionally cached for
+   faster serving.
+ - Speed up of last_changeset extraction in VCS.
+ - API get_locks function.
+ - Configurable HTTP codes for repository locking.
+ - Possible to use closed branches in ?branch= in changelog.
+ - Linaro's ldap sync scripts.
+ - #797 git refs filter is now configurable via .ini file.
+ - New ishell paster command for easier administrative tasks.
+ 
+fixes
++++++
+
+ - #654 switch to handles `/` in branch/tag/bookmark names.
+ - #572 moved out password reset tasks from celery.
+ - #730 filter out repo groups choices to only ones that you have write+ access.
+ - #462 disable file editing when not on branch head.
+ - #731 update-repoinfo sometimes failed to update data when changesets were
+   initial commits.
+ - #749,#805 and #516 Removed duplication of repo settings for rhodecode admins
+   and repo admins. 
+ - Global permission update with "overwrite existing settings" shouldn't 
+   override private repositories.
+ - #642 added recursion limit for stats gathering.
+ - #739 Delete/Edit repositories should only point to admin links if the user
+   is an super admin.
+ - Fixed escaping of html in "patch" view for GIT repos.
+ - #747 load changeset cache after forking to refresh lightweight dashboard caches.
+ - Quick repo list: public/private icon control should only control icons,
+   not repo visibility.
+ - #746 UnicodeDedode errors on feed controllers.
+ - #756 cleanup repos didn't properly compose paths of repos to be cleaned up.
+ - #763 gravatar helper function should fallback into default image if somehow
+   email provided is empty.
+ - Fixes #762, LDAP and container created users are now activated based on
+   the registration settings in permissions.
+ - Cleanup would recurse into every leaf and could thus not be used on lots of
+   large repositories.
+ - Better detection of deleting groups with subgroups inside.
+ - Fixed issue with renaming repos group together with changing parents with
+   multiple nested trees.
+ - #594 web interface file committing executes push hooks.
+ - Disallow cloning from different URI's that http[s]/svn/git/hg.
+ - Handling of RhodeCode extra params in consistent way.
+ - Don't normalize path if it's empty on adding a file through web interface.
+ - #808 missing changesets and files should return 404 not redirect
+ - #809 added url quote in clone url.
+ - Fixed issues with importing non-ascii repo names.
+ - Automatically assign instance_id for host and process if it has been set to *
+ - Fixed multiple IP addresses in each of extracted IP.
+ - Lot of other small bug fixes and improvements.
+  
 1.5.4 (**2013-03-13**)
 ----------------------
 
@@ -20,8 +96,8 @@
   if email is empty
 - fixes #762 user global activation flag is also respected for LDAP created
   accounts
-- use password obfuscate when clonning a remote repo with credentials inside	
-- fixed issue with renaming repos group together with changing parents
+- use password obfuscate when clonning a remote repo with credentials inside
+- fixed issue with renaming repository group together with changing parents
 - disallow cloning from file:/// URIs
 - handle all cases with multiple IP addresses in proxy headers
 
@@ -84,7 +160,7 @@
 news
 ++++
 
-- implements #677: Don't allow to close pull requests when they are 
+- implements #677: Don't allow to close pull requests when they are
   under-review status
 - implemented #670 Implementation of Roles in Pull Request
 
@@ -95,6 +171,7 @@
 - fixed changeset status labels, they now select radio buttons
 - #682 translation difficult for multi-line text
 - #683 fixed difference between messages about not mapped repositories
+- email: fail nicely when no SMTP server has been configured
 
 1.5.0 (**2012-12-12**)
 ----------------------
@@ -120,7 +197,7 @@
 - implemented #638 permissions overview to groups
 - implements #636, lazy loading of history and authors to speed up source
   pages rendering
-- implemented #647, option to pass list of default encoding used to 
+- implemented #647, option to pass list of default encoding used to
   encode to/decode from unicode
 - added caching layer into RSS/ATOM feeds.
 - basic implementation of cherry picking changesets for pull request, ref #575
@@ -143,17 +220,17 @@
 - fixes #612 Double quotes to Single quotes result in bad html in diff
 - fixes #630 git statistics do too much work making them slow.
 - fixes #625 Git-Tags are not displayed in Shortlog
-- fix for issue #602, enforce str when setting mercurial UI object. 
+- fix for issue #602, enforce str when setting mercurial UI object.
   When this is used together with mercurial internal translation system
   it can lead to UnicodeDecodeErrors
 - fixes #645 Fix git handler when doing delete remote branch
-- implements #649 added two seperate method for author and commiter to VCS
-  changeset class switch author for git backed to be the real author not commiter
+- implements #649 added two seperate method for author and committer to VCS
+  changeset class switch author for git backed to be the real author not committer
 - fix issue #504 RhodeCode is showing different versions of README on
   different summary page loads
 - implemented #658 Changing username in LDAP-Mode should not be allowed.
 - fixes #652 switch to generator approach when doing file annotation to prevent
-  huge memory consumption 
+  huge memory consumption
 - fixes #666 move lockkey path location to cache_dir to ensure this path is
   always writable for rhodecode server
 - many more small fixes and improvements
@@ -204,9 +281,9 @@
 fixes
 +++++
 
-- fixed #570 explicit users group permissions can overwrite owner permissions
+- fixed #570 explicit user group permissions can overwrite owner permissions
 - fixed #578 set proper PATH with current Python for Git
-  hooks to execute within same Python as RhodeCode 
+  hooks to execute within same Python as RhodeCode
 - fixed issue with Git bare repos that ends with .git in name
 
 1.4.2 (**2012-09-12**)
@@ -221,12 +298,12 @@
   groups. Now only write access to group allows to create a repostiory
   within that group
 - #565 Add support for {netloc} and {scheme} to alternative_gravatar_url
-- updated translation for zh_CN 
+- updated translation for zh_CN
 
 fixes
 +++++
 
-- fixed visual permissions check on repos groups inside groups
+- fixed visual permissions check on repository groups inside groups
 - fixed issues with non-ascii search terms in search, and indexers
 - fixed parsing of page number in GET parameters
 - fixed issues with generating pull-request overview for repos with
@@ -240,7 +317,7 @@
 ++++
 
 - always put a comment about code-review status change even if user send
-  empty data 
+  empty data
 - modified_on column saves repository update and it's going to be used
   later for light version of main page ref #500
 - pull request notifications send much nicer emails with details about pull
@@ -251,10 +328,10 @@
 +++++
 
 - fixed migrations of permissions that can lead to inconsistency.
-  Some users sent feedback that after upgrading from older versions issues 
+  Some users sent feedback that after upgrading from older versions issues
   with updating default permissions occurred. RhodeCode detects that now and
   resets default user permission to initial state if there is a need for that.
-  Also forces users to set the default value for new forking permission. 
+  Also forces users to set the default value for new forking permission.
 - #535 improved apache wsgi example configuration in docs
 - fixes #550 mercurial repositories comparision failed when origin repo had
   additional not-common changesets
@@ -273,7 +350,7 @@
 
 news
 ++++
- 
+
 - new codereview system
 - email map, allowing users to have multiple email addresses mapped into
   their accounts
@@ -284,11 +361,11 @@
 - #464 added links to groups in permission box
 - #465 mentions autocomplete inside comments boxes
 - #469 added --update-only option to whoosh to re-index only given list
-  of repos in index 
+  of repos in index
 - rhodecode-api CLI client
 - new git http protocol replaced buggy dulwich implementation.
   Now based on pygrack & gitweb
-- Improved RSS/ATOM feeds. Discoverable by browsers using proper headers, and 
+- Improved RSS/ATOM feeds. Discoverable by browsers using proper headers, and
   reformated based on user suggestions. Additional rss/atom feeds for user
   journal
 - various i18n improvements
@@ -296,21 +373,21 @@
 - File view now displays small gravatars off all authors of given file
 - Implemented landing revisions. Each repository will get landing_rev attribute
   that defines 'default' revision/branch for generating readme files
-- Implemented #509, RhodeCode enforces SSL for push/pulling if requested at 
+- Implemented #509, RhodeCode enforces SSL for push/pulling if requested at
   earliest possible call.
 - Import remote svn repositories to mercurial using hgsubversion.
 - Fixed #508 RhodeCode now has a option to explicitly set forking permissions
 - RhodeCode can use alternative server for generating avatar icons
 - implemented repositories locking. Pull locks, push unlocks. Also can be done
   via API calls
-- #538 form for permissions can handle multiple users at once 
+- #538 form for permissions can handle multiple users at once
 
 fixes
 +++++
 
 - improved translations
 - fixes issue #455 Creating an archive generates an exception on Windows
-- fixes #448 Download ZIP archive keeps file in /tmp open and results 
+- fixes #448 Download ZIP archive keeps file in /tmp open and results
   in out of disk space
 - fixes issue #454 Search results under Windows include proceeding
   backslash
@@ -322,9 +399,9 @@
 - fixed issue #459. Changed the way of obtaining logger in reindex task.
 - fixed #453 added ID field in whoosh SCHEMA that solves the issue of
   reindexing modified files
-- fixed #481 rhodecode emails are sent without Date header 
+- fixed #481 rhodecode emails are sent without Date header
 - fixed #458 wrong count when no repos are present
-- fixed issue #492 missing `\ No newline at end of file` test at the end of 
+- fixed issue #492 missing `\ No newline at end of file` test at the end of
   new chunk in html diff
 - full text search now works also for commit messages
 
@@ -335,8 +412,8 @@
 ++++
 
 - chinese traditional translation
-- changed setup-app into setup-rhodecode and added arguments for auto-setup 
-  mode that doesn't need user interaction 
+- changed setup-app into setup-rhodecode and added arguments for auto-setup
+  mode that doesn't need user interaction
 
 fixes
 +++++
@@ -356,11 +433,11 @@
 - use ext_json for json module
 - unified annotation view with file source view
 - notification improvements, better inbox + css
-- #419 don't strip passwords for login forms, make rhodecode 
+- #419 don't strip passwords for login forms, make rhodecode
   more compatible with LDAP servers
-- Added HTTP_X_FORWARDED_FOR as another method of extracting 
-  IP for pull/push logs. - moved all to base controller  
-- #415: Adding comment to changeset causes reload. 
+- Added HTTP_X_FORWARDED_FOR as another method of extracting
+  IP for pull/push logs. - moved all to base controller
+- #415: Adding comment to changeset causes reload.
   Comments are now added via ajax and doesn't reload the page
 - #374 LDAP config is discarded when LDAP can't be activated
 - limited push/pull operations are now logged for git in the journal
@@ -376,7 +453,7 @@
 - #418 cast to unicode fixes in notification objects
 - #426 fixed mention extracting regex
 - fixed remote-pulling for git remotes remopositories
-- fixed #434: Error when accessing files or changesets of a git repository 
+- fixed #434: Error when accessing files or changesets of a git repository
   with submodules
 - fixed issue with empty APIKEYS for users after registration ref. #438
 - fixed issue with getting README files from git repositories
@@ -393,15 +470,15 @@
 - created rcextensions module with additional mappings (ref #322) and
   post push/pull/create repo hooks callbacks
 - implemented #377 Users view for his own permissions on account page
-- #399 added inheritance of permissions for users group on repos groups
-- #401 repository group is automatically pre-selected when adding repos 
+- #399 added inheritance of permissions for user group on repository groups
+- #401 repository group is automatically pre-selected when adding repos
   inside a repository group
-- added alternative HTTP 403 response when client failed to authenticate. Helps 
+- added alternative HTTP 403 response when client failed to authenticate. Helps
   solving issues with Mercurial and LDAP
-- #402 removed group prefix from repository name when listing repositories 
+- #402 removed group prefix from repository name when listing repositories
   inside a group
 - added gravatars into permission view and permissions autocomplete
-- #347 when running multiple RhodeCode instances, properly invalidates cache 
+- #347 when running multiple RhodeCode instances, properly invalidates cache
   for all registered servers
 
 fixes
@@ -411,15 +488,15 @@
 - fixed #385 clone by ID url was loosing proxy prefix in URL
 - fixed some unicode problems with waitress
 - fixed issue with escaping < and > in changeset commits
-- fixed error occurring during recursive group creation in API 
+- fixed error occurring during recursive group creation in API
   create_repo function
 - fixed #393 py2.5 fixes for routes url generator
 - fixed #397 Private repository groups shows up before login
 - fixed #396 fixed problems with revoking users in nested groups
-- fixed mysql unicode issues + specified InnoDB as default engine with 
+- fixed mysql unicode issues + specified InnoDB as default engine with
   utf8 charset
 - #406 trim long branch/tag names in changelog to not break UI
-  
+
 1.3.3 (**2012-03-02**)
 ----------------------
 
@@ -430,11 +507,11 @@
 fixes
 +++++
 
-- fixed some python2.5 compatibility issues 
+- fixed some python2.5 compatibility issues
 - fixed issues with removed repos was accidentally added as groups, after
   full rescan of paths
 - fixes #376 Cannot edit user (using container auth)
-- fixes #378 Invalid image urls on changeset screen with proxy-prefix 
+- fixes #378 Invalid image urls on changeset screen with proxy-prefix
   configuration
 - fixed initial sorting of repos inside repo group
 - fixes issue when user tried to resubmit same permission into user/user_groups
@@ -442,7 +519,7 @@
 - fixed raw_changeset for git. It was generated with hg patch headers
 - fixed vcs issue with last_changeset for filenodes
 - fixed missing commit after hook delete
-- fixed #372 issues with git operation detection that caused a security issue 
+- fixed #372 issues with git operation detection that caused a security issue
   for git repos
 
 1.3.2 (**2012-02-28**)
@@ -459,9 +536,9 @@
 - fixed git remote repos validator that prevented from cloning remote git repos
 - fixes #370 ending slashes fixes for repo and groups
 - fixes #368 improved git-protocol detection to handle other clients
-- fixes #366 When Setting Repository Group To Blank Repo Group Wont Be 
+- fixes #366 When Setting Repository Group To Blank Repo Group Wont Be
   Moved To Root
-- fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys 
+- fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys
 - fixed #373 missing cascade drop on user_group_to_perm table
 
 1.3.1 (**2012-02-27**)
@@ -475,7 +552,7 @@
 +++++
 
 - redirection loop occurs when remember-me wasn't checked during login
-- fixes issues with git blob history generation 
+- fixes issues with git blob history generation
 - don't fetch branch for git in file history dropdown. Causes unneeded slowness
 
 1.3.0 (**2012-02-26**)
@@ -484,19 +561,19 @@
 news
 ++++
 
-- code review, inspired by github code-comments 
+- code review, inspired by github code-comments
 - #215 rst and markdown README files support
 - #252 Container-based and proxy pass-through authentication support
 - #44 branch browser. Filtering of changelog by branches
 - mercurial bookmarks support
 - new hover top menu, optimized to add maximum size for important views
-- configurable clone url template with possibility to specify  protocol like 
+- configurable clone url template with possibility to specify  protocol like
   ssh:// or http:// and also manually alter other parts of clone_url.
 - enabled largefiles extension by default
 - optimized summary file pages and saved a lot of unused space in them
 - #239 option to manually mark repository as fork
 - #320 mapping of commit authors to RhodeCode users
-- #304 hashes are displayed using monospace font    
+- #304 hashes are displayed using monospace font
 - diff configuration, toggle white lines and context lines
 - #307 configurable diffs, whitespace toggle, increasing context lines
 - sorting on branches, tags and bookmarks using YUI datatable
@@ -504,17 +581,17 @@
 - implements #330 api method for listing nodes ar particular revision
 - #73 added linking issues in commit messages to chosen issue tracker url
   based on user defined regular expression
-- added linking of changesets in commit messages  
+- added linking of changesets in commit messages
 - new compact changelog with expandable commit messages
 - firstname and lastname are optional in user creation
 - #348 added post-create repository hook
-- #212 global encoding settings is now configurable from .ini files 
+- #212 global encoding settings is now configurable from .ini files
 - #227 added repository groups permissions
 - markdown gets codehilite extensions
-- new API methods, delete_repositories, grante/revoke permissions for groups 
+- new API methods, delete_repositories, grante/revoke permissions for groups
   and repos
-  
-    
+
+
 fixes
 +++++
 
@@ -522,15 +599,15 @@
 - fixed sorting of repo tables
 - #326 escape of special html entities in diffs
 - normalized user_name => username in api attributes
-- fixes #298 ldap created users with mixed case emails created conflicts 
+- fixes #298 ldap created users with mixed case emails created conflicts
   on saving a form
-- fixes issue when owner of a repo couldn't revoke permissions for users 
+- fixes issue when owner of a repo couldn't revoke permissions for users
   and groups
 - fixes #271 rare JSON serialization problem with statistics
 - fixes #337 missing validation check for conflicting names of a group with a
-  repositories group
+  repository group
 - #340 fixed session problem for mysql and celery tasks
-- fixed #331 RhodeCode mangles repository names if the a repository group 
+- fixed #331 RhodeCode mangles repository names if the a repository group
   contains the "full path" to the repositories
 - #355 RhodeCode doesn't store encrypted LDAP passwords
 
@@ -551,7 +628,7 @@
   operation leading to crash.
 - fixed missing email in account page.
 - Reverted Mercurial to 2.0.1 for windows due to bug in Mercurial that makes
-  forking on windows impossible 
+  forking on windows impossible
 
 1.2.4 (**2012-01-19**)
 ----------------------
@@ -563,23 +640,23 @@
   full support to largefiles extension. Enabled by default in new installations
 - #329 Ability to Add/Remove Groups to/from a Repository via AP
 - added requires.txt file with requirements
-     
+
 fixes
 +++++
 
 - fixes db session issues with celery when emailing admins
-- #331 RhodeCode mangles repository names if the a repository group 
+- #331 RhodeCode mangles repository names if the a repository group
   contains the "full path" to the repositories
 - #298 Conflicting e-mail addresses for LDAP and RhodeCode users
 - DB session cleanup after hg protocol operations, fixes issues with
   `mysql has gone away` errors
 - #333 doc fixes for get_repo api function
 - #271 rare JSON serialization problem with statistics enabled
-- #337 Fixes issues with validation of repository name conflicting with 
+- #337 Fixes issues with validation of repository name conflicting with
   a group name. A proper message is now displayed.
 - #292 made ldap_dn in user edit readonly, to get rid of confusion that field
-  doesn't work   
-- #316 fixes issues with web description in hgrc files 
+  doesn't work
+- #316 fixes issues with web description in hgrc files
 
 1.2.3 (**2011-11-02**)
 ----------------------
@@ -587,21 +664,21 @@
 news
 ++++
 
-- added option to manage repos group for non admin users
-- added following API methods for get_users, create_user, get_users_groups, 
-  get_users_group, create_users_group, add_user_to_users_groups, get_repos, 
+- added option to manage repository group for non admin users
+- added following API methods for get_users, create_user, get_users_groups,
+  get_users_group, create_users_group, add_user_to_users_groups, get_repos,
   get_repo, create_repo, add_user_to_repo
-- implements #237 added password confirmation for my account 
+- implements #237 added password confirmation for my account
   and admin edit user.
 - implements #291 email notification for global events are now sent to all
   administrator users, and global config email.
-     
+
 fixes
 +++++
 
 - added option for passing auth method for smtp mailer
 - #276 issue with adding a single user with id>10 to usergroups
-- #277 fixes windows LDAP settings in which missing values breaks the ldap auth 
+- #277 fixes windows LDAP settings in which missing values breaks the ldap auth
 - #288 fixes managing of repos in a group for non admin user
 
 1.2.2 (**2011-10-17**)
@@ -611,17 +688,17 @@
 ++++
 
 - #226 repo groups are available by path instead of numerical id
- 
+
 fixes
 +++++
 
 - #259 Groups with the same name but with different parent group
 - #260 Put repo in group, then move group to another group -> repo becomes unavailable
 - #258 RhodeCode 1.2 assumes egg folder is writable (lockfiles problems)
-- #265 ldap save fails sometimes on converting attributes to booleans, 
+- #265 ldap save fails sometimes on converting attributes to booleans,
   added getter and setter into model that will prevent from this on db model level
 - fixed problems with timestamps issues #251 and #213
-- fixes #266 RhodeCode allows to create repo with the same name and in 
+- fixes #266 RhodeCode allows to create repo with the same name and in
   the same parent as group
 - fixes #245 Rescan of the repositories on Windows
 - fixes #248 cannot edit repos inside a group on windows
@@ -637,7 +714,7 @@
 fixes
 +++++
 
-- fixed problems with basic auth and push problems 
+- fixed problems with basic auth and push problems
 - gui fixes
 - fixed logger
 
@@ -655,30 +732,30 @@
 - implemented #84 downloads can be enabled/disabled for each repository
 - anonymous repository can be cloned without having to pass default:default
   into clone url
-- fixed #90 whoosh indexer can index chooses repositories passed in command 
+- fixed #90 whoosh indexer can index chooses repositories passed in command
   line
 - extended journal with day aggregates and paging
 - implemented #107 source code lines highlight ranges
-- implemented #93 customizable changelog on combined revision ranges - 
-  equivalent of githubs compare view 
+- implemented #93 customizable changelog on combined revision ranges -
+  equivalent of githubs compare view
 - implemented #108 extended and more powerful LDAP configuration
-- implemented #56 users groups
+- implemented #56 user groups
 - major code rewrites optimized codes for speed and memory usage
 - raw and diff downloads are now in git format
 - setup command checks for write access to given path
 - fixed many issues with international characters and unicode. It uses utf8
   decode with replace to provide less errors even with non utf8 encoded strings
 - #125 added API KEY access to feeds
-- #109 Repository can be created from external Mercurial link (aka. remote 
+- #109 Repository can be created from external Mercurial link (aka. remote
   repository, and manually updated (via pull) from admin panel
 - beta git support - push/pull server + basic view for git repos
 - added followers page and forks page
-- server side file creation (with binary file upload interface) 
-  and edition with commits powered by codemirror 
-- #111 file browser file finder, quick lookup files on whole file tree 
+- server side file creation (with binary file upload interface)
+  and edition with commits powered by codemirror
+- #111 file browser file finder, quick lookup files on whole file tree
 - added quick login sliding menu into main page
-- changelog uses lazy loading of affected files details, in some scenarios 
-  this can improve speed of changelog page dramatically especially for 
+- changelog uses lazy loading of affected files details, in some scenarios
+  this can improve speed of changelog page dramatically especially for
   larger repositories.
 - implements #214 added support for downloading subrepos in download menu.
 - Added basic API for direct operations on rhodecode via JSON
@@ -687,7 +764,7 @@
 fixes
 +++++
 
-- fixed file browser bug, when switching into given form revision the url was 
+- fixed file browser bug, when switching into given form revision the url was
   not changing
 - fixed propagation to error controller on simplehg and simplegit middlewares
 - fixed error when trying to make a download on empty repository
@@ -696,8 +773,8 @@
 - journal fork fixes
 - removed issue with space inside renamed repository after deletion
 - fixed strange issue on formencode imports
-- fixed #126 Deleting repository on Windows, rename used incompatible chars. 
-- #150 fixes for errors on repositories mapped in db but corrupted in 
+- fixed #126 Deleting repository on Windows, rename used incompatible chars.
+- #150 fixes for errors on repositories mapped in db but corrupted in
   filesystem
 - fixed problem with ascendant characters in realm #181
 - fixed problem with sqlite file based database connection pool
@@ -707,12 +784,12 @@
 - fixes issue #197 Relative paths for pidlocks
 - fixes issue #198 password will require only 3 chars now for login form
 - fixes issue #199 wrong redirection for non admin users after creating a repository
-- fixes issues #202, bad db constraint made impossible to attach same group 
+- fixes issues #202, bad db constraint made impossible to attach same group
   more than one time. Affects only mysql/postgres
 - fixes #218 os.kill patch for windows was missing sig param
-- improved rendering of dag (they are not trimmed anymore when number of 
+- improved rendering of dag (they are not trimmed anymore when number of
   heads exceeds 5)
-    
+
 1.1.8 (**2011-04-12**)
 ----------------------
 
@@ -739,7 +816,7 @@
 - fixed problems with displaying binary files, thanks to Thomas Waldmann
 - removed name from archive files since it's breaking ui for long repo names
 - fixed issue with archive headers sent to browser, thanks to Thomas Waldmann
-- fixed compatibility for 1024px displays, and larger dpi settings, thanks to 
+- fixed compatibility for 1024px displays, and larger dpi settings, thanks to
   Thomas Waldmann
 - fixed issue #166 summary pager was skipping 10 revisions on second page
 
@@ -783,8 +860,8 @@
 - fixed sorting by author in main page
 - fixed crashes with diffs on binary files
 - fixed #131 problem with boolean values for LDAP
-- fixed #122 mysql problems thanks to striker69 
-- fixed problem with errors on calling raw/raw_files/annotate functions 
+- fixed #122 mysql problems thanks to striker69
+- fixed problem with errors on calling raw/raw_files/annotate functions
   with unknown revisions
 - fixed returned rawfiles attachment names with international character
 - cleaned out docs, big thanks to Jason Harris
@@ -801,7 +878,7 @@
 - fixed formencode import problem on settings page, that caused server crash
   when that page was accessed as first after server start
 - journal fixes
-- fixed option to access repository just by entering http://server/<repo_name> 
+- fixed option to access repository just by entering http://server/<repo_name>
 
 1.1.3 (**2011-02-16**)
 ----------------------
@@ -816,11 +893,11 @@
 fixes
 +++++
 
-- fixed ehlo command and non auth mail servers on smtp_lib. Thanks to 
+- fixed ehlo command and non auth mail servers on smtp_lib. Thanks to
   apollo13 and Johan Walles
 - small fixes in journal
 - fixed problems with getting setting for celery from .ini files
-- registration, password reset and login boxes share the same title as main 
+- registration, password reset and login boxes share the same title as main
   application now
 - fixed #113: to high permissions to fork repository
 - fixed problem with '[' chars in commit messages in journal
@@ -841,11 +918,11 @@
 
 - fixes #98 protection against float division of percentage stats
 - fixed graph bug
-- forced webhelpers version since it was making troubles during installation 
+- forced webhelpers version since it was making troubles during installation
 
 1.1.1 (**2011-01-06**)
 ----------------------
- 
+
 news
 ++++
 
@@ -869,10 +946,10 @@
 ++++
 
 - rewrite of internals for vcs >=0.1.10
-- uses mercurial 1.7 with dotencode disabled for maintaining compatibility 
+- uses mercurial 1.7 with dotencode disabled for maintaining compatibility
   with older clients
 - anonymous access, authentication via ldap
-- performance upgrade for cached repos list - each repository has its own 
+- performance upgrade for cached repos list - each repository has its own
   cache that's invalidated when needed.
 - performance upgrades on repositories with large amount of commits (20K+)
 - main page quick filter for filtering repositories
@@ -882,7 +959,7 @@
 - more detailed action logger (based on hooks) with pushed changesets lists
   and options to disable those hooks from admin panel
 - introduced new enhanced changelog for merges that shows more accurate results
-- new improved and faster code stats (based on pygments lexers mapping tables, 
+- new improved and faster code stats (based on pygments lexers mapping tables,
   showing up to 10 trending sources for each repository. Additionally stats
   can be disabled in repository settings.
 - gui optimizations, fixed application width to 1024px
@@ -903,10 +980,10 @@
 - a lot of fixes and tweaks for file browser
 - fixed detached session issues
 - fixed when user had no repos he would see all repos listed in my account
-- fixed ui() instance bug when global hgrc settings was loaded for server 
+- fixed ui() instance bug when global hgrc settings was loaded for server
   instance and all hgrc options were merged with our db ui() object
 - numerous small bugfixes
- 
+
 (special thanks for TkSoh for detailed feedback)
 
 
@@ -971,6 +1048,6 @@
 1.0.0rc2 (**2010-10-11**)
 -------------------------
 
-- Disabled dirsize in file browser, it's causing nasty bug when dir renames 
+- Disabled dirsize in file browser, it's causing nasty bug when dir renames
   occure. After vcs is fixed it'll be put back again.
 - templating/css rewrites, optimized css.
--- a/docs/contributing.rst	Mon Mar 11 17:59:38 2013 +0100
+++ b/docs/contributing.rst	Sun Apr 07 18:37:22 2013 +0200
@@ -10,9 +10,9 @@
 Could I request that you make your source contributions by first forking the
 RhodeCode repository on bitbucket_
 https://bitbucket.org/marcinkuzminski/rhodecode and then make your changes to
-your forked repository. Please post all fixes into **BETA** branch since your 
+your forked repository. Please post all fixes into **BETA** branch since your
 fix might be already fixed there and i try to merge all fixes from beta into
-stable, and not the other way. Finally, when you are finished making a change, 
+stable, and not the other way. Finally, when you are finished making a change,
 please send me a pull request.
 
 To run RhodeCode in a development version you always need to install the latest
@@ -22,7 +22,7 @@
 
     python setup.py develop
 
-command to install/verify all required packages, and prepare development 
+command to install/verify all required packages, and prepare development
 enviroment.
 
 
--- a/docs/index.rst	Mon Mar 11 17:59:38 2013 +0100
+++ b/docs/index.rst	Sun Apr 07 18:37:22 2013 +0200
@@ -13,7 +13,7 @@
    installation
    setup
    upgrade
-   
+
 **Usage**
 
 .. toctree::
@@ -33,7 +33,7 @@
 
 .. toctree::
    :maxdepth: 1
-   
+
    contributing
    changelog
 
@@ -44,7 +44,7 @@
 
    api/api
    api/models
-   
+
 
 Other topics
 ------------
@@ -61,4 +61,4 @@
 .. _git: http://git-scm.com/
 .. _celery: http://celeryproject.org/
 .. _Sphinx: http://sphinx.pocoo.org/
-.. _vcs: http://pypi.python.org/pypi/vcs
\ No newline at end of file
+.. _vcs: http://pypi.python.org/pypi/vcs
--- a/docs/installation.rst	Mon Mar 11 17:59:38 2013 +0100
+++ b/docs/installation.rst	Sun Apr 07 18:37:22 2013 +0200
@@ -4,8 +4,8 @@
 Installation
 ============
 
-``RhodeCode`` is written entirely in Python. Before posting any issues make 
-sure, your not missing any system libraries and using right version of 
+``RhodeCode`` is written entirely in Python. Before posting any issues make
+sure, your not missing any system libraries and using right version of
 libraries required by RhodeCode. There's also restriction in terms of mercurial
 clients. Minimal version of hg client known working fine with RhodeCode is
 **1.6**. If you're using older client, please upgrade.
@@ -41,14 +41,14 @@
 
 For installing RhodeCode i highly recommend using separate virtualenv_. This
 way many required by RhodeCode libraries will remain sandboxed from your main
-python and making things less problematic when doing system python updates. 
+python and making things less problematic when doing system python updates.
 
 Alternative very detailed installation instructions for Ubuntu Server with
 celery, indexer and daemon scripts: https://gist.github.com/4546398
 
 
-- Assuming you have installed virtualenv_ create a new virtual environment 
-  using virtualenv command:: 
+- Assuming you have installed virtualenv_ create a new virtual environment
+  using virtualenv command::
 
     virtualenv --no-site-packages /opt/rhodecode-venv
 
@@ -63,7 +63,7 @@
    Python's "main" site-packages dir.
 
 
-- this will install new virtualenv_ into `/opt/rhodecode-venv`. 
+- this will install new virtualenv_ into `/opt/rhodecode-venv`.
 - Activate the virtualenv_ by running::
 
     source /opt/rhodecode-venv/bin/activate
@@ -71,52 +71,52 @@
 .. note:: If you're using UNIX, *do not* use ``sudo`` to run the
    ``virtualenv`` script.  It's perfectly acceptable (and desirable)
    to create a virtualenv as a normal user.
-     
-- Make a folder for rhodecode data files, and configuration somewhere on the 
+
+- Make a folder for rhodecode data files, and configuration somewhere on the
   filesystem. For example::
 
     mkdir /opt/rhodecode
-  
-    
+
+
 - Go into the created directory run this command to install rhodecode::
 
     easy_install rhodecode
-  
+
   or::
- 
-    pip install rhodecode 
 
-- This will install rhodecode together with pylons and all other required 
+    pip install rhodecode
+
+- This will install rhodecode together with pylons and all other required
   python libraries into activated virtualenv
 
 Requirements for Celery (optional)
 ----------------------------------
 
 In order to gain maximum performance
-there are some third-party you must install. When RhodeCode is used 
+there are some third-party you must install. When RhodeCode is used
 together with celery you have to install some kind of message broker,
 recommended one is rabbitmq_ to make the async tasks work.
 
 Of course RhodeCode works in sync mode also and then you do not have to install
-any third party applications. However, using Celery_ will give you a large 
-speed improvement when using many big repositories. If you plan to use 
-RhodeCode for say 7 to 10 repositories, RhodeCode will perform perfectly well 
+any third party applications. However, using Celery_ will give you a large
+speed improvement when using many big repositories. If you plan to use
+RhodeCode for say 7 to 10 repositories, RhodeCode will perform perfectly well
 without celery running.
-   
-If you make the decision to run RhodeCode with celery make sure you run 
-celeryd using paster and message broker together with the application. 
+
+If you make the decision to run RhodeCode with celery make sure you run
+celeryd using paster and message broker together with the application.
 
 .. note::
    Installing message broker and using celery is optional, RhodeCode will
    work perfectly fine without them.
 
 
-**Message Broker** 
+**Message Broker**
 
 - preferred is `RabbitMq <http://www.rabbitmq.com/>`_
 - A possible alternative is `Redis <http://code.google.com/p/redis/>`_
 
-For installation instructions you can visit: 
+For installation instructions you can visit:
 http://ask.github.com/celery/getting-started/index.html.
 This is a very nice tutorial on how to start using celery_ with rabbitmq_
 
@@ -126,7 +126,7 @@
 
 
 
-.. _virtualenv: http://pypi.python.org/pypi/virtualenv  
+.. _virtualenv: http://pypi.python.org/pypi/virtualenv
 .. _python: http://www.python.org/
 .. _mercurial: http://mercurial.selenic.com/
 .. _celery: http://celeryproject.org/
--- a/docs/installation_win.rst	Mon Mar 11 17:59:38 2013 +0100
+++ b/docs/installation_win.rst	Sun Apr 07 18:37:22 2013 +0200
@@ -47,7 +47,7 @@
    required, you can uncheck them
 
 .. note::
-   
+
    64bit: You also need to install the Microsoft Windows SDK for .NET 3.5 SP1 (.NET 4.0 won't work).
    Download from: http://www.microsoft.com/en-us/download/details.aspx?id=3138
 
@@ -90,7 +90,7 @@
   .. note::
 
      64bit: Download and install the 64bit version.
-     At the time of writing you can find this at: 
+     At the time of writing you can find this at:
      http://sourceforge.net/projects/pywin32/files/pywin32/Build%20218/pywin32-218.win-amd64-py2.7.exe/download
 
 Step4 - Python BIN
--- a/docs/setup.rst	Mon Mar 11 17:59:38 2013 +0100
+++ b/docs/setup.rst	Sun Apr 07 18:37:22 2013 +0200
@@ -478,7 +478,7 @@
 
 By default RhodeCode uses utf8 encoding, starting from 1.3 series this
 can be changed, simply edit default_encoding in .ini file to desired one.
-This affects many parts in rhodecode including commiters names, filenames,
+This affects many parts in rhodecode including committers names, filenames,
 encoding of commit messages. In addition RhodeCode can detect if `chardet`
 library is installed. If `chardet` is detected RhodeCode will fallback to it
 when there are encode/decode errors.
@@ -652,7 +652,7 @@
     prefix = /<someprefix>
 
 
-then change <someprefix> into your choosen prefix
+then change <someprefix> into your chosen prefix
 
 Apache's WSGI config
 --------------------
--- a/docs/theme/nature/layout.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/docs/theme/nature/layout.html	Sun Apr 07 18:37:22 2013 +0200
@@ -3,16 +3,16 @@
 {% block sidebarlogo %}
 <h3>Support RhodeCode development.</h3>
 <div style="text-align:center">
-	<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
-	<input type="hidden" name="cmd" value="_s-xclick">
-	<input type="hidden" name="hosted_button_id" value="8U2LLRPLBKWDU">
-	<input style="border:0px !important" type="image" src="https://www.paypal.com/en_US/i/btn/btn_donate_SM.gif"
-	border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
-	<img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1">
-	</form>
+    <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
+        <input type="hidden" name="cmd" value="_s-xclick">
+        <input type="hidden" name="hosted_button_id" value="8U2LLRPLBKWDU">
+        <input style="border:0px !important" type="image" src="https://www.paypal.com/en_US/i/btn/btn_donate_SM.gif"
+        border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
+        <img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1">
+    </form>
     <div style="padding:5px">
      <a href="http://flattr.com/thing/167489/RhodeCode" target="_blank">
      <img src="http://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" border="0" /></a>
-   </div>
+    </div>
 </div>
 {% endblock %}}
--- a/docs/theme/nature/static/pygments.css	Mon Mar 11 17:59:38 2013 +0100
+++ b/docs/theme/nature/static/pygments.css	Sun Apr 07 18:37:22 2013 +0200
@@ -51,4 +51,4 @@
 .vc { color: #ff99ff } /* Name.Variable.Class */
 .vg { color: #ff99ff } /* Name.Variable.Global */
 .vi { color: #ff99ff } /* Name.Variable.Instance */
-.il { color: #009999 } /* Literal.Number.Integer.Long */
\ No newline at end of file
+.il { color: #009999 } /* Literal.Number.Integer.Long */
--- a/docs/usage/backup.rst	Mon Mar 11 17:59:38 2013 +0100
+++ b/docs/usage/backup.rst	Sun Apr 07 18:37:22 2013 +0200
@@ -23,4 +23,4 @@
 When using sqlite just copy rhodecode.db.
 Any other database engine requires a manual backup operation.
 
-Database backup will contain all gathered statistics
\ No newline at end of file
+Database backup will contain all gathered statistics
--- a/docs/usage/debugging.rst	Mon Mar 11 17:59:38 2013 +0100
+++ b/docs/usage/debugging.rst	Sun Apr 07 18:37:22 2013 +0200
@@ -14,7 +14,7 @@
 
 RhodeCode uses standard python logging modules to log it's output.
 By default only loggers with INFO level are displayed. To enable full output
-change `level = DEBUG` for all logging handlers in currently used .ini file. 
+change `level = DEBUG` for all logging handlers in currently used .ini file.
 This change will allow to see much more detailed output in the logfile or
 console. This generally helps a lot to track issues.
 
--- a/docs/usage/general.rst	Mon Mar 11 17:59:38 2013 +0100
+++ b/docs/usage/general.rst	Sun Apr 07 18:37:22 2013 +0200
@@ -38,7 +38,7 @@
 Checkboxes in compare view allow users to view combined compare view. You can
 only show the range between the first and last checkbox (no cherry pick).
 Clicking more than one checkbox will activate a link in top saying
-`Show selected changes <from-rev> -> <to-rev>` clicking this will bring
+`Show selected changesets <from-rev> -> <to-rev>` clicking this will bring
 compare view. In this view also it's possible to switch to combined compare.
 
 Compare view is also available from the journal on pushes having more than
@@ -105,7 +105,7 @@
 
 .. note::
 
-    * `svn -> hg` cloning requires `hgsubversion` library to be installed.*
+    - *`svn -> hg` cloning requires `hgsubversion` library to be installed.*
 
 If you need to clone repositories that are protected via basic auth, you
 might pass the url with stored credentials inside eg.
--- a/docs/usage/git_support.rst	Mon Mar 11 17:59:38 2013 +0100
+++ b/docs/usage/git_support.rst	Sun Apr 07 18:37:22 2013 +0200
@@ -11,10 +11,10 @@
 Although There is one limitation on git usage.
 
 - large pushes requires a http server with chunked encoding support.
- 
+
 if you plan to use git you need to run RhodeCode with some
-http server that supports chunked encoding which git http protocol uses, 
-i recommend using waitress_ or gunicorn_ (linux only) for `paste` wsgi app 
+http server that supports chunked encoding which git http protocol uses,
+i recommend using waitress_ or gunicorn_ (linux only) for `paste` wsgi app
 replacement. Starting from version 1.4 waitress_ is the default wsgi server
 used in RhodeCode.
 
@@ -23,33 +23,33 @@
     use = egg:Paste#http
 
 to::
-    
+
     use = egg:waitress#main
 
 or::
 
     use = egg:gunicorn#main
-    
-    
+
+
 And comment out bellow options::
 
-    threadpool_workers = 
-    threadpool_max_requests = 
-    use_threadpool = 
-    
+    threadpool_workers =
+    threadpool_max_requests =
+    use_threadpool =
+
 
 You can simply run `paster serve` as usual.
 
-  
-You can always disable git/hg support by editing a 
+
+You can always disable git/hg support by editing a
 file **rhodecode/__init__.py** and commenting out backends
 
 .. code-block:: python
- 
+
    BACKENDS = {
        'hg': 'Mercurial repository',
        #'git': 'Git repository',
    }
 
 .. _waitress: http://pypi.python.org/pypi/waitress
-.. _gunicorn: http://pypi.python.org/pypi/gunicorn
\ No newline at end of file
+.. _gunicorn: http://pypi.python.org/pypi/gunicorn
--- a/docs/usage/locking.rst	Mon Mar 11 17:59:38 2013 +0100
+++ b/docs/usage/locking.rst	Sun Apr 07 18:37:22 2013 +0200
@@ -5,37 +5,37 @@
 ===================================
 
 
-| Repos with **locking function=disabled** is the default, that's how repos work 
+| Repos with **locking function=disabled** is the default, that's how repos work
   today.
 | Repos with **locking function=enabled** behaves like follows:
 
 Repos have a state called `locked` that can be true or false.
-The hg/git commands `hg/git clone`, `hg/git pull`, and `hg/git push` 
+The hg/git commands `hg/git clone`, `hg/git pull`, and `hg/git push`
 influence this state:
 
-- The command `hg/git pull <repo>` will lock that repo (locked=true) 
+- The command `hg/git pull <repo>` will lock that repo (locked=true)
   if the user has write/admin permissions on this repo
 
-- The command `hg/git clone <repo>` will lock that repo (locked=true) if the 
+- The command `hg/git clone <repo>` will lock that repo (locked=true) if the
   user has write/admin permissions on this repo
 
 
 RhodeCode will remember the user id who locked the repo
-only this specific user can unlock the repo (locked=false) by calling 
+only this specific user can unlock the repo (locked=false) by calling
 
-- `hg/git push <repo>` 
+- `hg/git push <repo>`
 
-every other command on that repo from this user and 
+every other command on that repo from this user and
 every command from any other user will result in http return code 423 (locked)
 
 
-additionally the http error includes the <user> that locked the repo 
+additionally the http error includes the <user> that locked the repo
 (e.g. “repository <repo> locked by user <user>”)
 
 
-So the scenario of use for repos with `locking function` enabled is that 
+So the scenario of use for repos with `locking function` enabled is that
 every initial clone and every pull gives users (with write permission)
 the exclusive right to do a push.
 
 
-Each repo can be manually unlocked by admin from the repo settings menu.
\ No newline at end of file
+Each repo can be manually unlocked by admin from the repo settings menu.
--- a/docs/usage/performance.rst	Mon Mar 11 17:59:38 2013 +0100
+++ b/docs/usage/performance.rst	Sun Apr 07 18:37:22 2013 +0200
@@ -13,7 +13,8 @@
   more important to have faster disk than faster CPU.
 
 * Slowness on initial page can be easily fixed by grouping repositories, and/or
-  increasing cache size (see below)
+  increasing cache size (see below), that includes using lightweight dashboard
+  option and vcs_full_cache setting in .ini file
 
 
 Follow these few steps to improve performance of RhodeCode system.
@@ -22,7 +23,7 @@
 1. Increase cache
 
     in the .ini file::
-       
+
      beaker.cache.sql_cache_long.expire=3600 <-- set this to higher number
 
     This option affects the cache expiration time for main page. Having
@@ -33,18 +34,29 @@
     system and it will expire cache for repositories that had been changed.
 
 2. Switch from sqlite to postgres or mysql
-    
+
     sqlite is a good option when having small load on the system. But due to
     locking issues with sqlite, it's not recommended to use it for larger
     setup. Switching to mysql or postgres will result in a immediate
     performance increase.
-    
+
 3. Scale RhodeCode horizontally
 
-    - running two or more instances on the same server can speed up things a lot
-    - load balance using round robin or ip hash
-    - you need to handle consistent user session storage by switching to 
-      db sessions, client side sessions or sharing session data folder across 
-      instances. See http://beaker.readthedocs.org/ docs for details.
-    - remember that each instance needs it's own .ini file and unique
-      `instance_id` set in them
\ No newline at end of file
+    Scaling horizontally can give huge performance increase when dealing with
+    large traffic (large amount of users, CI servers etc). RhodeCode can be
+    scaled horizontally on one (recommended) or multiple machines. In order
+    to scale horizontally you need to do the following:
+
+    - each instance needs it's own .ini file and unique `instance_id` set in them
+    - each instance `data` storage needs to be configured to be stored on a
+      shared disk storage, preferably together with repositories. This `data`
+      dir contains template caches, sessions, whoosh index and it's used for
+      tasks locking (so it's safe across multiple instances). Set the
+      `cache_dir`, `index_dir`, `beaker.cache.data_dir`, `beaker.cache.lock_dir`
+      variables in each .ini file to shared location across RhodeCode instances
+    - if celery is used each instance should run separate celery instance, but
+      the message broken should be common to all of them (ex one rabbitmq
+      shared server)
+    - load balance using round robin or ip hash, recommended is writing LB rules
+      that will separate regular user traffic from automated processes like CI
+      servers or build bots.
--- a/docs/usage/subrepos.rst	Mon Mar 11 17:59:38 2013 +0100
+++ b/docs/usage/subrepos.rst	Sun Apr 07 18:37:22 2013 +0200
@@ -5,14 +5,14 @@
 =============================================
 
 example usage of Subrepos with RhodeCode::
-    
+
     ## init a simple repo
-    hg init repo1                                                                                                                                                                                         
+    hg init repo1
     cd repo1
     echo "file1" > file1
-    hg add file1 
+    hg add file1
     hg ci --message "initial file 1"
-        
+
     #clone subrepo we want to add
     hg clone http://rc.local/subrepo
 
@@ -22,7 +22,7 @@
     hg add .hgsub
     hg ci --message "added remote subrepo"
 
-    
+
 
 In file list of repo1 you will see a connected subrepo at revision it was
 during cloning.
@@ -34,4 +34,4 @@
 both of repositories.
 
 see http://mercurial.aragost.com/kick-start/en/subrepositories/ for more
-information about subrepositories   
\ No newline at end of file
+information about subrepositories
--- a/init.d/rhodecode-daemon2	Mon Mar 11 17:59:38 2013 +0100
+++ b/init.d/rhodecode-daemon2	Sun Apr 07 18:37:22 2013 +0200
@@ -2,7 +2,7 @@
 ########################################
 #### THIS IS A DEBIAN INIT.D SCRIPT ####
 ########################################
-
+ 
 ### BEGIN INIT INFO
 # Provides:          rhodecode          
 # Required-Start:    $all
@@ -12,29 +12,29 @@
 # Short-Description: starts instance of rhodecode
 # Description:       starts instance of rhodecode using start-stop-daemon
 ### END INIT INFO
-
+ 
 APP_NAME="rhodecode"
-APP_HOMEDIR="marcink/python_workspace"
-APP_PATH="/home/$APP_HOMEDIR/$APP_NAME"
-
+APP_HOMEDIR="opt"
+APP_PATH="/$APP_HOMEDIR/$APP_NAME"
+ 
 CONF_NAME="production.ini"
-
+ 
 PID_PATH="$APP_PATH/$APP_NAME.pid"
 LOG_PATH="$APP_PATH/$APP_NAME.log"
-
-PYTHON_PATH="/home/$APP_HOMEDIR/v-env"
-
-RUN_AS="marcink"
-
+ 
+PYTHON_PATH="/$APP_HOMEDIR/$APP_NAME-venv"
+ 
+RUN_AS="root"
+ 
 DAEMON="$PYTHON_PATH/bin/paster"
-
+ 
 DAEMON_OPTS="serve --daemon \
-  --user=$RUN_AS \
-  --group=$RUN_AS \
-  --pid-file=$PID_PATH \
-  --log-file=$LOG_PATH  $APP_PATH/$CONF_NAME"
-
-
+ --user=$RUN_AS \
+ --group=$RUN_AS \
+ --pid-file=$PID_PATH \
+ --log-file=$LOG_PATH  $APP_PATH/$CONF_NAME"
+ 
+ 
 start() {
   echo "Starting $APP_NAME"
   PYTHON_EGG_CACHE="/tmp" start-stop-daemon -d $APP_PATH \
@@ -43,19 +43,33 @@
       --user $RUN_AS \
       --exec $DAEMON -- $DAEMON_OPTS
 }
-
+ 
 stop() {
   echo "Stopping $APP_NAME"
   start-stop-daemon -d $APP_PATH \
       --stop --quiet \
       --pidfile $PID_PATH || echo "$APP_NAME - Not running!"
-  
+ 
   if [ -f $PID_PATH ]; then
     rm $PID_PATH
   fi
 }
-
+ 
+status() {
+  echo -n "Checking status of $APP_NAME ... "
+  pid=`cat $PID_PATH`
+  status=`ps ax | grep $pid | grep -ve grep`
+  if [ "$?" -eq 0 ]; then
+    echo "running"
+  else
+    echo "NOT running"
+  fi
+}
+ 
 case "$1" in
+  status)
+   status
+    ;;
   start)
     start
     ;;
@@ -73,4 +87,4 @@
   *)
     echo "Usage: $0 {start|stop|restart}"
     exit 1
-esac
+esac
\ No newline at end of file
--- a/production.ini	Mon Mar 11 17:59:38 2013 +0100
+++ b/production.ini	Sun Apr 07 18:37:22 2013 +0200
@@ -25,59 +25,92 @@
 #smtp_port = 
 #smtp_use_tls = false
 #smtp_use_ssl = true
-# Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.)
+## Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.)
 #smtp_auth = 
 
 [server:main]
 ## PASTE
-##nr of threads to spawn
+## nr of threads to spawn
 #threadpool_workers = 5
 
-##max request before thread respawn
+## max request before thread respawn
 #threadpool_max_requests = 10
 
-##option to use threads of process
+## option to use threads of process
 #use_threadpool = true
 
 #use = egg:Paste#http
 
-#WAITRESS
+## WAITRESS
 threads = 5
+## 100GB
+max_request_body_size = 107374182400
 use = egg:waitress#main
 
 host = 127.0.0.1
 port = 8001
 
-[filter:proxy-prefix]
-# prefix middleware for rc
-use = egg:PasteDeploy#prefix
-prefix = /<your-prefix>
+## prefix middleware for rc
+#[filter:proxy-prefix]
+#use = egg:PasteDeploy#prefix
+#prefix = /<your-prefix>
 
 [app:main]
 use = egg:rhodecode
+## enable proxy prefix middleware
 #filter-with = proxy-prefix
+
 full_stack = true
 static_files = true
-# Optional Languages
-# en, fr, ja, pt_BR, zh_CN, zh_TW, pl
+## Optional Languages
+## en, fr, ja, pt_BR, zh_CN, zh_TW, pl
 lang = en
 cache_dir = %(here)s/data
 index_dir = %(here)s/data/index
+
+## uncomment and set this path to use archive download cache
+#archive_cache_dir = /tmp/tarballcache
+
+## change this to unique ID for security
 app_instance_uuid = rc-production
+
+## cut off limit for large diffs (size in bytes)
 cut_off_limit = 256000
-vcs_full_cache = True
+
+## use cache version of scm repo everywhere
+vcs_full_cache = true
+
+## force https in RhodeCode, fixes https redirects, assumes it's always https
 force_https = false
-commit_parse_limit = 50
-# number of items displayed in lightweight dashboard before paginating
+
+## use Strict-Transport-Security headers
+use_htsts = false
+
+## number of commits stats will parse on each iteration
+commit_parse_limit = 25
+
+## number of items displayed in lightweight dashboard before paginating is shown
 dashboard_items = 100
+
+## use gravatar service to display avatars
 use_gravatar = true
 
+## path to git executable
+git_path = git
+
+## git rev filter option, --all is the default filter, if you need to
+## hide all refs in changelog switch this to --branches --tags
+git_rev_filter=--all
+
 ## RSS feed options
-
 rss_cut_off_limit = 256000
 rss_items_per_page = 10
 rss_include_diff = false
 
+## options for showing and identifying changesets
+show_sha_length = 12
+show_revision_number = true
+
 
 ## alternative_gravatar_url allows you to use your own avatar server application
 ## the following parts of the URL will be replaced
@@ -89,8 +122,11 @@
 #alternative_gravatar_url = http://myavatarserver.com/getbyemail/{email}/{size}
 #alternative_gravatar_url = http://myavatarserver.com/getbymd5/{md5email}?s={size}
 
+
+## container auth options
 container_auth_enabled = false
 proxypass_auth_enabled = false
+
 ## default encoding used to convert from and to unicode
 ## can be also a comma seperated list of encoding in case of mixed encodings
 default_encoding = utf8
@@ -146,6 +182,11 @@
 ## handling that. Set this variable to 403 to return HTTPForbidden
 auth_ret_code =
 
+## locking return code. When repository is locked return this HTTP code. 2XX
+## codes don't break the transactions while 4XX codes do
+lock_ret_code = 423
+
+
 ####################################
 ###        CELERY CONFIG        ####
 ####################################
@@ -170,7 +211,7 @@
 celeryd.log.level = debug
 celeryd.max.tasks.per.child = 1
 
-#tasks will never be sent to the queue, but executed locally instead.
+## tasks will never be sent to the queue, but executed locally instead.
 celery.always.eager = false
 
 ####################################
@@ -226,18 +267,19 @@
 
 
 beaker.session.key = rhodecode
-## secure cookie requires AES python libraries ##
-#beaker.session.encrypt_key = g654dcno0-9873jhgfreyu
-#beaker.session.validate_key = 9712sds2212c--zxc123
+## secure cookie requires AES python libraries
+#beaker.session.encrypt_key = <key_for_encryption>
+#beaker.session.validate_key = <validation_key>
+
 ## sets session as invalid if it haven't been accessed for given amount of time
 beaker.session.timeout = 2592000
 beaker.session.httponly = true
 #beaker.session.cookie_path = /<your-prefix>
 
-## uncomment for https secure cookie ##
+## uncomment for https secure cookie
 beaker.session.secure = false
 
-## auto save the session to not to use .save() ##
+## auto save the session to not to use .save()
 beaker.session.auto = False
 
 ## default cookie expiration time in seconds `true` expire at browser close ##
@@ -252,57 +294,57 @@
 ### [errormator] ###
 ####################
 
-# Errormator is tailored to work with RhodeCode, see 
-# http://errormator.com for details how to obtain an account
-# you must install python package `errormator_client` to make it work
+## Errormator is tailored to work with RhodeCode, see 
+## http://errormator.com for details how to obtain an account
+## you must install python package `errormator_client` to make it work
 
-# errormator enabled
-errormator = true
+## errormator enabled
+errormator = false
 
 errormator.server_url = https://api.errormator.com
 errormator.api_key = YOUR_API_KEY
 
-# TWEAK AMOUNT OF INFO SENT HERE
+## TWEAK AMOUNT OF INFO SENT HERE
 
-# enables 404 error logging (default False)
+## enables 404 error logging (default False)
 errormator.report_404 = false
 
-# time in seconds after request is considered being slow (default 1)
+## time in seconds after request is considered being slow (default 1)
 errormator.slow_request_time = 1
 
-# record slow requests in application
-# (needs to be enabled for slow datastore recording and time tracking)
+## record slow requests in application
+## (needs to be enabled for slow datastore recording and time tracking)
 errormator.slow_requests = true
 
-# enable hooking to application loggers
+## enable hooking to application loggers
 # errormator.logging = true
 
-# minimum log level for log capture
+## minimum log level for log capture
 # errormator.logging.level = WARNING
 
-# send logs only from erroneous/slow requests
-# (saves API quota for intensive logging)
+## send logs only from erroneous/slow requests
+## (saves API quota for intensive logging)
 errormator.logging_on_error = false
 
-# list of additonal keywords that should be grabbed from environ object 
-# can be string with comma separated list of words in lowercase
-# (by default client will always send following info:
-# 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that 
-# start with HTTP* this list be extended with additional keywords here
+## list of additonal keywords that should be grabbed from environ object 
+## can be string with comma separated list of words in lowercase
+## (by default client will always send following info:
+## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that 
+## start with HTTP* this list be extended with additional keywords here
 errormator.environ_keys_whitelist = 
 
 
-# list of keywords that should be blanked from request object 
-# can be string with comma separated list of words in lowercase
-# (by default client will always blank keys that contain following words 
-# 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
-# this list be extended with additional keywords set here
+## list of keywords that should be blanked from request object 
+## can be string with comma separated list of words in lowercase
+## (by default client will always blank keys that contain following words 
+## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
+## this list be extended with additional keywords set here
 errormator.request_keys_blacklist =
 
 
-# list of namespaces that should be ignores when gathering log entries
-# can be string with comma separated list of namespaces
-# (by default the client ignores own entries: errormator_client.client)
+## list of namespaces that should be ignores when gathering log entries
+## can be string with comma separated list of namespaces
+## (by default the client ignores own entries: errormator_client.client)
 errormator.log_namespace_blacklist =  
 
 
@@ -310,8 +352,8 @@
 ### [sentry] ###
 ################
 
-# sentry is a alternative open source error aggregator
-# you must install python packages `sentry` and `raven` to enable 
+## sentry is a alternative open source error aggregator
+## you must install python packages `sentry` and `raven` to enable 
 
 sentry.dsn = YOUR_DNS
 sentry.servers =
@@ -371,7 +413,7 @@
 level = DEBUG
 handlers = 
 qualname = routes.middleware
-# "level = DEBUG" logs the route matched and routing variables.
+## "level = DEBUG" logs the route matched and routing variables.
 propagate = 1
 
 [logger_beaker]
--- a/requires.txt	Mon Mar 11 17:59:38 2013 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-waitress==0.8.1
-webob==1.0.8
-Pylons==1.0.0
-Beaker==1.6.4
-WebHelpers==1.3
-formencode==1.2.4
-SQLAlchemy==0.7.8
-Mako==0.7.2
-pygments>=1.5
-whoosh>=2.4.0,<2.5
-celery>=2.2.5,<2.3
-babel
-python-dateutil>=1.5.0,<2.0.0
-dulwich>=0.8.5,<0.9.0
-markdown==2.1.1
-docutils==0.8.1
-simplejson==2.5.2
-mock
-py-bcrypt
-mercurial==2.3.0
\ No newline at end of file
--- a/rhodecode/__init__.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/__init__.py	Sun Apr 07 18:37:22 2013 +0200
@@ -26,7 +26,7 @@
 import sys
 import platform
 
-VERSION = (1, 5, 4)
+VERSION = (1, 6, 0, 'rc1')
 
 try:
     from rhodecode.lib import get_current_revision
@@ -38,7 +38,7 @@
 
 __version__ = ('.'.join((str(each) for each in VERSION[:3])) +
                '.'.join(VERSION[3:]))
-__dbversion__ = 10  # defines current db version for migrations
+__dbversion__ = 11  # defines current db version for migrations
 __platform__ = platform.system()
 __license__ = 'GPLv3'
 __py_version__ = sys.version_info
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rhodecode/bin/ldap_sync.conf	Sun Apr 07 18:37:22 2013 +0200
@@ -0,0 +1,11 @@
+[default]
+api_url = http://your.rhodecode.server:5000/_admin/api
+api_user = admin
+api_key = XXXXXXXXXXXX
+
+ldap_uri = ldap://your.ldap.server:389
+ldap_user = cn=rhodecode,ou=binders,dc=linaro,dc=org
+ldap_key = XXXXXXXXX
+base_dn = dc=linaro,dc=org
+
+sync_users = True
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rhodecode/bin/ldap_sync.py	Sun Apr 07 18:37:22 2013 +0200
@@ -0,0 +1,237 @@
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+import ldap
+import urllib2
+import uuid
+import json
+
+from ConfigParser import ConfigParser
+
+config = ConfigParser()
+config.read('ldap_sync.conf')
+
+
+class InvalidResponseIDError(Exception):
+    """ Request and response don't have the same UUID. """
+
+
+class RhodecodeResponseError(Exception):
+    """ Response has an error, something went wrong with request execution. """
+
+
+class UserAlreadyInGroupError(Exception):
+    """ User is already a member of the target group. """
+
+
+class UserNotInGroupError(Exception):
+    """ User is not a member of the target group. """
+
+
+class RhodecodeAPI():
+
+    def __init__(self, url, key):
+        self.url = url
+        self.key = key
+
+    def get_api_data(self, uid, method, args):
+        """Prepare dict for API post."""
+        return {
+            "id": uid,
+            "api_key": self.key,
+            "method": method,
+            "args": args
+        }
+
+    def rhodecode_api_post(self, method, args):
+        """Send a generic API post to Rhodecode.
+
+        This will generate the UUID for validation check after the
+        response is returned. Handle errors and get the result back.
+        """
+        uid = str(uuid.uuid1())
+        data = self.get_api_data(uid, method, args)
+
+        data = json.dumps(data)
+        headers = {'content-type': 'text/plain'}
+        req = urllib2.Request(self.url, data, headers)
+
+        response = urllib2.urlopen(req)
+        response = json.load(response)
+
+        if uid != response["id"]:
+            raise InvalidResponseIDError("UUID does not match.")
+
+        if response["error"] != None:
+            raise RhodecodeResponseError(response["error"])
+
+        return response["result"]
+
+    def create_group(self, name, active=True):
+        """Create the Rhodecode user group."""
+        args = {
+            "group_name": name,
+            "active": str(active)
+        }
+        self.rhodecode_api_post("create_users_group", args)
+
+    def add_membership(self, group, username):
+        """Add specific user to a group."""
+        args = {
+            "usersgroupid": group,
+            "userid": username
+        }
+        result = self.rhodecode_api_post("add_user_to_users_group", args)
+        if not result["success"]:
+            raise UserAlreadyInGroupError("User %s already in group %s." %
+                                          (username, group))
+
+    def remove_membership(self, group, username):
+        """Remove specific user from a group."""
+        args = {
+            "usersgroupid": group,
+            "userid": username
+        }
+        result = self.rhodecode_api_post("remove_user_from_users_group", args)
+        if not result["success"]:
+            raise UserNotInGroupError("User %s not in group %s." %
+                                      (username, group))
+
+    def get_group_members(self, name):
+        """Get the list of member usernames from a user group."""
+        args = {"usersgroupid": name}
+        members = self.rhodecode_api_post("get_users_group", args)['members']
+        member_list = []
+        for member in members:
+            member_list.append(member["username"])
+        return member_list
+
+    def get_group(self, name):
+        """Return group info."""
+        args = {"usersgroupid": name}
+        return self.rhodecode_api_post("get_users_group", args)
+
+    def get_user(self, username):
+        """Return user info."""
+        args = {"userid": username}
+        return self.rhodecode_api_post("get_user", args)
+
+
+class LdapClient():
+
+    def __init__(self, uri, user, key, base_dn):
+        self.client = ldap.initialize(uri, trace_level=0)
+        self.client.set_option(ldap.OPT_REFERRALS, 0)
+        self.client.simple_bind(user, key)
+        self.base_dn = base_dn
+
+    def __del__(self):
+        self.client.unbind()
+
+    def get_groups(self):
+        """Get all the groups in form of dict {group_name: group_info,...}."""
+        searchFilter = "objectClass=groupOfUniqueNames"
+        result = self.client.search_s(self.base_dn, ldap.SCOPE_SUBTREE,
+                                      searchFilter)
+
+        groups = {}
+        for group in result:
+            groups[group[1]['cn'][0]] = group[1]
+
+        return groups
+
+    def get_group_users(self, groups, group):
+        """Returns all the users belonging to a single group.
+
+        Based on the list of groups and memberships, returns all the
+        users belonging to a single group, searching recursively.
+        """
+        users = []
+        for member in groups[group]["uniqueMember"]:
+            member = self.parse_member_string(member)
+            if member[0] == "uid":
+                users.append(member[1])
+            elif member[0] == "cn":
+                users += self.get_group_users(groups, member[1])
+
+        return users
+
+    def parse_member_string(self, member):
+        """Parses the member string and returns a touple of type and name.
+
+        Unique member can be either user or group. Users will have 'uid' as
+        prefix while groups will have 'cn'.
+        """
+        member = member.split(",")[0]
+        return member.split('=')
+
+
+class LdapSync(object):
+
+    def __init__(self):
+        self.ldap_client = LdapClient(config.get("default", "ldap_uri"),
+                                      config.get("default", "ldap_user"),
+                                      config.get("default", "ldap_key"),
+                                      config.get("default", "base_dn"))
+        self.rhodocode_api = RhodecodeAPI(config.get("default", "api_url"),
+                                          config.get("default", "api_key"))
+
+    def update_groups_from_ldap(self):
+        """Add all the groups from LDAP to Rhodecode."""
+        added = existing = 0
+        groups = self.ldap_client.get_groups()
+        for group in groups:
+            try:
+                self.rhodecode_api.create_group(group)
+                added += 1
+            except Exception:
+                existing += 1
+
+        return added, existing
+
+    def update_memberships_from_ldap(self, group):
+        """Update memberships in rhodecode based on the LDAP groups."""
+        groups = self.ldap_client.get_groups()
+        group_users = self.ldap_client.get_group_users(groups, group)
+
+        # Delete memberships first from each group which are not part
+        # of the group any more.
+        rhodecode_members = self.rhodecode_api.get_group_members(group)
+        for rhodecode_member in rhodecode_members:
+            if rhodecode_member not in group_users:
+                try:
+                    self.rhodocode_api.remove_membership(group,
+                                                         rhodecode_member)
+                except UserNotInGroupError:
+                    pass
+
+        # Add memberships.
+        for member in group_users:
+            try:
+                self.rhodecode_api.add_membership(group, member)
+            except UserAlreadyInGroupError:
+                # TODO: handle somehow maybe..
+                pass
+
+
+if __name__ == '__main__':
+    sync = LdapSync()
+    print sync.update_groups_from_ldap()
+
+    for gr in sync.ldap_client.get_groups():
+        # TODO: exception when user does not exist during add membership...
+        # How should we handle this.. Either sync users as well at this step,
+        # or just ignore those who don't exist. If we want the second case,
+        # we need to find a way to recognize the right exception (we always get
+        # RhodecodeResponseError with no error code so maybe by return msg (?)
+        sync.update_memberships_from_ldap(gr)
--- a/rhodecode/bin/rhodecode_api.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/bin/rhodecode_api.py	Sun Apr 07 18:37:22 2013 +0200
@@ -238,7 +238,7 @@
 
     try:
         margs = dict(map(lambda s: s.split(':', 1), other))
-    except:
+    except Exception:
         sys.stderr.write('Error parsing arguments \n')
         sys.exit()
 
--- a/rhodecode/config/deployment.ini_tmpl	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/config/deployment.ini_tmpl	Sun Apr 07 18:37:22 2013 +0200
@@ -25,59 +25,92 @@
 #smtp_port = 
 #smtp_use_tls = false
 #smtp_use_ssl = true
-# Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.)
+## Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.)
 #smtp_auth = 
 
 [server:main]
 ## PASTE
-##nr of threads to spawn
+## nr of threads to spawn
 #threadpool_workers = 5
 
-##max request before thread respawn
+## max request before thread respawn
 #threadpool_max_requests = 10
 
-##option to use threads of process
+## option to use threads of process
 #use_threadpool = true
 
 #use = egg:Paste#http
 
-#WAITRESS
+## WAITRESS
 threads = 5
+## 100GB
+max_request_body_size = 107374182400
 use = egg:waitress#main
 
 host = 127.0.0.1
 port = 5000
 
-[filter:proxy-prefix]
-# prefix middleware for rc
-use = egg:PasteDeploy#prefix
-prefix = /<your-prefix>
+## prefix middleware for rc
+#[filter:proxy-prefix]
+#use = egg:PasteDeploy#prefix
+#prefix = /<your-prefix>
 
 [app:main]
 use = egg:rhodecode
+## enable proxy prefix middleware
 #filter-with = proxy-prefix
+
 full_stack = true
 static_files = true
-# Optional Languages
-# en, fr, ja, pt_BR, zh_CN, zh_TW, pl
+## Optional Languages
+## en, fr, ja, pt_BR, zh_CN, zh_TW, pl
 lang = en
 cache_dir = %(here)s/data
 index_dir = %(here)s/data/index
+
+## uncomment and set this path to use archive download cache
+#archive_cache_dir = /tmp/tarballcache
+
+## change this to unique ID for security
 app_instance_uuid = ${app_instance_uuid}
+
+## cut off limit for large diffs (size in bytes)
 cut_off_limit = 256000
-vcs_full_cache = True
+
+## use cache version of scm repo everywhere
+vcs_full_cache = true
+
+## force https in RhodeCode, fixes https redirects, assumes it's always https
 force_https = false
-commit_parse_limit = 50
-# number of items displayed in lightweight dashboard before paginating
+
+## use Strict-Transport-Security headers
+use_htsts = false
+
+## number of commits stats will parse on each iteration
+commit_parse_limit = 25
+
+## number of items displayed in lightweight dashboard before paginating is shown
 dashboard_items = 100
+
+## use gravatar service to display avatars
 use_gravatar = true
 
+## path to git executable
+git_path = git
+
+## git rev filter option, --all is the default filter, if you need to
+## hide all refs in changelog switch this to --branches --tags
+git_rev_filter=--all
+
 ## RSS feed options
-
 rss_cut_off_limit = 256000
 rss_items_per_page = 10
 rss_include_diff = false
 
+## options for showing and identifying changesets
+show_sha_length = 12
+show_revision_number = true
+
 
 ## alternative_gravatar_url allows you to use your own avatar server application
 ## the following parts of the URL will be replaced
@@ -89,8 +122,11 @@
 #alternative_gravatar_url = http://myavatarserver.com/getbyemail/{email}/{size}
 #alternative_gravatar_url = http://myavatarserver.com/getbymd5/{md5email}?s={size}
 
+
+## container auth options
 container_auth_enabled = false
 proxypass_auth_enabled = false
+
 ## default encoding used to convert from and to unicode
 ## can be also a comma seperated list of encoding in case of mixed encodings
 default_encoding = utf8
@@ -146,6 +182,11 @@
 ## handling that. Set this variable to 403 to return HTTPForbidden
 auth_ret_code =
 
+## locking return code. When repository is locked return this HTTP code. 2XX
+## codes don't break the transactions while 4XX codes do
+lock_ret_code = 423
+
+
 ####################################
 ###        CELERY CONFIG        ####
 ####################################
@@ -170,7 +211,7 @@
 celeryd.log.level = debug
 celeryd.max.tasks.per.child = 1
 
-#tasks will never be sent to the queue, but executed locally instead.
+## tasks will never be sent to the queue, but executed locally instead.
 celery.always.eager = false
 
 ####################################
@@ -226,18 +267,19 @@
 
 
 beaker.session.key = rhodecode
-## secure cookie requires AES python libraries ##
-#beaker.session.encrypt_key = g654dcno0-9873jhgfreyu
-#beaker.session.validate_key = 9712sds2212c--zxc123
+## secure cookie requires AES python libraries
+#beaker.session.encrypt_key = <key_for_encryption>
+#beaker.session.validate_key = <validation_key>
+
 ## sets session as invalid if it haven't been accessed for given amount of time
 beaker.session.timeout = 2592000
 beaker.session.httponly = true
 #beaker.session.cookie_path = /<your-prefix>
 
-## uncomment for https secure cookie ##
+## uncomment for https secure cookie
 beaker.session.secure = false
 
-## auto save the session to not to use .save() ##
+## auto save the session to not to use .save()
 beaker.session.auto = False
 
 ## default cookie expiration time in seconds `true` expire at browser close ##
@@ -252,57 +294,57 @@
 ### [errormator] ###
 ####################
 
-# Errormator is tailored to work with RhodeCode, see 
-# http://errormator.com for details how to obtain an account
-# you must install python package `errormator_client` to make it work
+## Errormator is tailored to work with RhodeCode, see 
+## http://errormator.com for details how to obtain an account
+## you must install python package `errormator_client` to make it work
 
-# errormator enabled
-errormator = true
+## errormator enabled
+errormator = false
 
 errormator.server_url = https://api.errormator.com
 errormator.api_key = YOUR_API_KEY
 
-# TWEAK AMOUNT OF INFO SENT HERE
+## TWEAK AMOUNT OF INFO SENT HERE
 
-# enables 404 error logging (default False)
+## enables 404 error logging (default False)
 errormator.report_404 = false
 
-# time in seconds after request is considered being slow (default 1)
+## time in seconds after request is considered being slow (default 1)
 errormator.slow_request_time = 1
 
-# record slow requests in application
-# (needs to be enabled for slow datastore recording and time tracking)
+## record slow requests in application
+## (needs to be enabled for slow datastore recording and time tracking)
 errormator.slow_requests = true
 
-# enable hooking to application loggers
+## enable hooking to application loggers
 # errormator.logging = true
 
-# minimum log level for log capture
+## minimum log level for log capture
 # errormator.logging.level = WARNING
 
-# send logs only from erroneous/slow requests
-# (saves API quota for intensive logging)
+## send logs only from erroneous/slow requests
+## (saves API quota for intensive logging)
 errormator.logging_on_error = false
 
-# list of additonal keywords that should be grabbed from environ object 
-# can be string with comma separated list of words in lowercase
-# (by default client will always send following info:
-# 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that 
-# start with HTTP* this list be extended with additional keywords here
+## list of additonal keywords that should be grabbed from environ object 
+## can be string with comma separated list of words in lowercase
+## (by default client will always send following info:
+## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that 
+## start with HTTP* this list be extended with additional keywords here
 errormator.environ_keys_whitelist = 
 
 
-# list of keywords that should be blanked from request object 
-# can be string with comma separated list of words in lowercase
-# (by default client will always blank keys that contain following words 
-# 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
-# this list be extended with additional keywords set here
+## list of keywords that should be blanked from request object 
+## can be string with comma separated list of words in lowercase
+## (by default client will always blank keys that contain following words 
+## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
+## this list be extended with additional keywords set here
 errormator.request_keys_blacklist =
 
 
-# list of namespaces that should be ignores when gathering log entries
-# can be string with comma separated list of namespaces
-# (by default the client ignores own entries: errormator_client.client)
+## list of namespaces that should be ignores when gathering log entries
+## can be string with comma separated list of namespaces
+## (by default the client ignores own entries: errormator_client.client)
 errormator.log_namespace_blacklist =  
 
 
@@ -310,8 +352,8 @@
 ### [sentry] ###
 ################
 
-# sentry is a alternative open source error aggregator
-# you must install python packages `sentry` and `raven` to enable 
+## sentry is a alternative open source error aggregator
+## you must install python packages `sentry` and `raven` to enable 
 
 sentry.dsn = YOUR_DNS
 sentry.servers =
@@ -381,7 +423,7 @@
 level = DEBUG
 handlers = 
 qualname = routes.middleware
-# "level = DEBUG" logs the route matched and routing variables.
+## "level = DEBUG" logs the route matched and routing variables.
 propagate = 1
 
 [logger_beaker]
--- a/rhodecode/config/environment.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/config/environment.py	Sun Apr 07 18:37:22 2013 +0200
@@ -20,6 +20,7 @@
 from rhodecode.lib.utils import repo2db_mapper, make_ui, set_rhodecode_config,\
     load_rcextensions, check_git_version
 from rhodecode.lib.utils2 import engine_from_config, str2bool
+from rhodecode.lib.db_manage import DbManage
 from rhodecode.model import init_model
 from rhodecode.model.scm import ScmModel
 
@@ -88,7 +89,7 @@
 
     #check git version
     check_git_version()
-
+    DbManage.check_waitress()
     # MULTIPLE DB configs
     # Setup the SQLAlchemy database engine
     sa_engine_db1 = engine_from_config(config, 'sqlalchemy.db1.')
@@ -100,6 +101,12 @@
     set_available_permissions(config)
     config['base_path'] = repos_path
     set_rhodecode_config(config)
+
+    instance_id = rhodecode.CONFIG.get('instance_id')
+    if instance_id == '*':
+        instance_id = '%s-%s' % (os.uname()[1], os.getpid())
+        rhodecode.CONFIG['instance_id'] = instance_id
+
     # CONFIGURATION OPTIONS HERE (note: all config options will override
     # any Pylons config options)
 
--- a/rhodecode/config/middleware.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/config/middleware.py	Sun Apr 07 18:37:22 2013 +0200
@@ -15,6 +15,7 @@
 from rhodecode.lib.middleware.simplegit import SimpleGit
 from rhodecode.lib.middleware.https_fixup import HttpsFixup
 from rhodecode.config.environment import load_environment
+from rhodecode.lib.middleware.wrapper import RequestWrapper
 
 
 def make_app(global_conf, full_stack=True, static_files=True, **app_conf):
@@ -55,7 +56,7 @@
 
         from rhodecode.lib.middleware.sentry import Sentry
         from rhodecode.lib.middleware.errormator import Errormator
-        if Errormator:
+        if Errormator and asbool(config['app_conf'].get('errormator')):
             app = Errormator(app, config)
         elif Sentry:
             app = Sentry(app, config)
@@ -67,7 +68,7 @@
         # need any pylons stack middleware in them
         app = SimpleHg(app, config)
         app = SimpleGit(app, config)
-
+        app = RequestWrapper(app, config)
         # Display error documents for 401, 403, 404 status codes (and
         # 500 when debug is disabled)
         if asbool(config['debug']):
--- a/rhodecode/config/rcextensions/__init__.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/config/rcextensions/__init__.py	Sun Apr 07 18:37:22 2013 +0200
@@ -6,6 +6,14 @@
 # build by pygments
 EXTRA_MAPPINGS = {}
 
+# additional lexer definitions for custom files
+# it's overrides pygments lexers, and uses defined name of lexer to colorize the
+# files. Format is {'ext': 'lexer_name'}
+# List of lexers can be printed running:
+# python -c "import pprint;from pygments import lexers;pprint.pprint([(x[0], x[1]) for x in lexers.get_all_lexers()]);"
+
+EXTRA_LEXERS = {}
+
 #==============================================================================
 # WHOOSH INDEX EXTENSIONS
 #==============================================================================
--- a/rhodecode/config/rcextensions/make_rcextensions.py	Mon Mar 11 17:59:38 2013 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-    rhodecode.config.rcextensions.make_rcextensions
-    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-    Whoosh indexing module for RhodeCode
-
-    :created_on: Mar 6, 2012
-    :author: marcink
-    :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
-    :license: GPLv3, see COPYING for more details.
-"""
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-from __future__ import with_statement
-
-import os
-import sys
-import pkg_resources
-import traceback
-import logging
-from os.path import dirname as dn, join as jn
-
-#to get the rhodecode import
-sys.path.append(dn(dn(dn(os.path.realpath(__file__)))))
-
-from rhodecode.lib.utils import BasePasterCommand, Command, ask_ok
-
-log = logging.getLogger(__name__)
-
-
-class MakeRcExt(BasePasterCommand):
-
-    max_args = 1
-    min_args = 1
-
-    usage = "CONFIG_FILE"
-    summary = "Creates additional extensions for rhodecode"
-    group_name = "RhodeCode"
-    takes_config_file = -1
-    parser = Command.standard_parser(verbose=True)
-
-    def command(self):
-        logging.config.fileConfig(self.path_to_ini_file)
-        from pylons import config
-
-        def _make_file(ext_file, tmpl):
-            bdir = os.path.split(ext_file)[0]
-            if not os.path.isdir(bdir):
-                os.makedirs(bdir)
-            with open(ext_file, 'wb') as f:
-                f.write(tmpl)
-                log.info('Writen new extensions file to %s' % ext_file)
-
-        here = config['here']
-        tmpl = pkg_resources.resource_string(
-            'rhodecode', jn('config', 'rcextensions', '__init__.py')
-        )
-        ext_file = jn(here, 'rcextensions', '__init__.py')
-        if os.path.exists(ext_file):
-            msg = ('Extension file already exists, do you want '
-                   'to overwrite it ? [y/n]')
-            if ask_ok(msg):
-                _make_file(ext_file, tmpl)
-            else:
-                log.info('nothing done...')
-        else:
-            _make_file(ext_file, tmpl)
-
-    def update_parser(self):
-        pass
--- a/rhodecode/config/routing.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/config/routing.py	Sun Apr 07 18:37:22 2013 +0200
@@ -41,21 +41,32 @@
             if len(by_id) == 2 and by_id[1].isdigit() and by_id[0] == '':
                 repo_name = Repository.get(by_id[1]).repo_name
                 match_dict['repo_name'] = repo_name
-        except:
+        except Exception:
             pass
 
         return is_valid_repo(repo_name, config['base_path'])
 
     def check_group(environ, match_dict):
         """
-        check for valid repositories group for proper 404 handling
+        check for valid repository group for proper 404 handling
 
         :param environ:
         :param match_dict:
         """
         repos_group_name = match_dict.get('group_name')
+        return is_valid_repos_group(repos_group_name, config['base_path'])
 
-        return is_valid_repos_group(repos_group_name, config['base_path'])
+    def check_group_skip_path(environ, match_dict):
+        """
+        check for valid repository group for proper 404 handling, but skips
+        verification of existing path
+
+        :param environ:
+        :param match_dict:
+        """
+        repos_group_name = match_dict.get('group_name')
+        return is_valid_repos_group(repos_group_name, config['base_path'],
+                                    skip_path_check=True)
 
     def check_int(environ, match_dict):
         return match_dict.get('id').isdigit()
@@ -93,19 +104,14 @@
         m.connect("formatted_repos", "/repos.{format}",
              action="index",
             conditions=dict(method=["GET"]))
-        m.connect("new_repo", "/repos/new",
-             action="new", conditions=dict(method=["GET"]))
-        m.connect("formatted_new_repo", "/repos/new.{format}",
-             action="new", conditions=dict(method=["GET"]))
+        m.connect("new_repo", "/create_repository",
+                  action="create_repository", conditions=dict(method=["GET"]))
         m.connect("/repos/{repo_name:.*?}",
              action="update", conditions=dict(method=["PUT"],
                                               function=check_repo))
         m.connect("/repos/{repo_name:.*?}",
              action="delete", conditions=dict(method=["DELETE"],
                                               function=check_repo))
-        m.connect("edit_repo", "/repos/{repo_name:.*?}/edit",
-             action="edit", conditions=dict(method=["GET"],
-                                            function=check_repo))
         m.connect("formatted_edit_repo", "/repos/{repo_name:.*?}.{format}/edit",
              action="edit", conditions=dict(method=["GET"],
                                             function=check_repo))
@@ -115,6 +121,11 @@
         m.connect("formatted_repo", "/repos/{repo_name:.*?}.{format}",
              action="show", conditions=dict(method=["GET"],
                                             function=check_repo))
+        #add repo perm member
+        m.connect('set_repo_perm_member', "/set_repo_perm_member/{repo_name:.*?}",
+             action="set_repo_perm_member",
+             conditions=dict(method=["POST"], function=check_repo))
+
         #ajax delete repo perm user
         m.connect('delete_repo_user', "/repos_delete_user/{repo_name:.*?}",
              action="delete_perm_user",
@@ -145,6 +156,18 @@
         m.connect('repo_locking', "/repo_locking/{repo_name:.*?}",
                   action="repo_locking", conditions=dict(method=["PUT"],
                                                       function=check_repo))
+        m.connect('toggle_locking', "/locking_toggle/{repo_name:.*?}",
+                  action="toggle_locking", conditions=dict(method=["GET"],
+                                                      function=check_repo))
+
+        #repo fields
+        m.connect('create_repo_fields', "/repo_fields/{repo_name:.*?}/new",
+                  action="create_repo_field", conditions=dict(method=["PUT"],
+                                                      function=check_repo))
+
+        m.connect('delete_repo_fields', "/repo_fields/{repo_name:.*?}/{field_id}",
+                  action="delete_repo_field", conditions=dict(method=["DELETE"],
+                                                      function=check_repo))
 
     with rmap.submapper(path_prefix=ADMIN_PREFIX,
                         controller='admin/repos_groups') as m:
@@ -158,33 +181,34 @@
                   action="new", conditions=dict(method=["GET"]))
         m.connect("formatted_new_repos_group", "/repos_groups/new.{format}",
                   action="new", conditions=dict(method=["GET"]))
-        m.connect("update_repos_group", "/repos_groups/{id}",
+        m.connect("update_repos_group", "/repos_groups/{group_name:.*?}",
                   action="update", conditions=dict(method=["PUT"],
-                                                   function=check_int))
-        m.connect("delete_repos_group", "/repos_groups/{id}",
+                                                   function=check_group))
+        m.connect("delete_repos_group", "/repos_groups/{group_name:.*?}",
                   action="delete", conditions=dict(method=["DELETE"],
-                                                   function=check_int))
-        m.connect("edit_repos_group", "/repos_groups/{id:.*?}/edit",
-                  action="edit", conditions=dict(method=["GET"],))
-        m.connect("formatted_edit_repos_group",
-                  "/repos_groups/{id}.{format}/edit",
+                                                   function=check_group_skip_path))
+        m.connect("edit_repos_group", "/repos_groups/{group_name:.*?}/edit",
                   action="edit", conditions=dict(method=["GET"],
-                                                 function=check_int))
-        m.connect("repos_group", "/repos_groups/{id}",
+                                                 function=check_group))
+        m.connect("formatted_edit_repos_group",
+                  "/repos_groups/{group_name:.*?}.{format}/edit",
+                  action="edit", conditions=dict(method=["GET"],
+                                                 function=check_group))
+        m.connect("repos_group", "/repos_groups/{group_name:.*?}",
                   action="show", conditions=dict(method=["GET"],
-                                                 function=check_int))
-        m.connect("formatted_repos_group", "/repos_groups/{id}.{format}",
+                                                 function=check_group))
+        m.connect("formatted_repos_group", "/repos_groups/{group_name:.*?}.{format}",
                   action="show", conditions=dict(method=["GET"],
-                                                 function=check_int))
-        # ajax delete repos group perm user
+                                                 function=check_group))
+        # ajax delete repository group perm user
         m.connect('delete_repos_group_user_perm',
-                  "/delete_repos_group_user_perm/{group_name:.*}",
+                  "/delete_repos_group_user_perm/{group_name:.*?}",
              action="delete_repos_group_user_perm",
              conditions=dict(method=["DELETE"], function=check_group))
 
-        # ajax delete repos group perm users_group
+        # ajax delete repository group perm users_group
         m.connect('delete_repos_group_users_group_perm',
-                  "/delete_repos_group_users_group_perm/{group_name:.*}",
+                  "/delete_repos_group_users_group_perm/{group_name:.*?}",
                   action="delete_repos_group_users_group_perm",
                   conditions=dict(method=["DELETE"], function=check_group))
 
@@ -227,7 +251,7 @@
         m.connect("user_ips_delete", "/users_ips/{id}",
                   action="delete_ip", conditions=dict(method=["DELETE"]))
 
-    #ADMIN USERS GROUPS REST ROUTES
+    #ADMIN USER GROUPS REST ROUTES
     with rmap.submapper(path_prefix=ADMIN_PREFIX,
                         controller='admin/users_groups') as m:
         m.connect("users_groups", "/users_groups",
@@ -308,8 +332,6 @@
                   action="my_account", conditions=dict(method=["GET"]))
         m.connect("admin_settings_my_account_update", "/my_account_update",
                   action="my_account_update", conditions=dict(method=["PUT"]))
-        m.connect("admin_settings_create_repository", "/create_repository",
-                  action="create_repository", conditions=dict(method=["GET"]))
         m.connect("admin_settings_my_repos", "/my_account/repos",
                   action="my_account_my_repos", conditions=dict(method=["GET"]))
         m.connect("admin_settings_my_pullrequests", "/my_account/pull_requests",
@@ -389,8 +411,13 @@
 
     #SEARCH
     rmap.connect('search', '%s/search' % ADMIN_PREFIX, controller='search',)
-    rmap.connect('search_repo', '%s/search/{search_repo:.*}' % ADMIN_PREFIX,
-                  controller='search')
+    rmap.connect('search_repo_admin', '%s/search/{repo_name:.*}' % ADMIN_PREFIX,
+                 controller='search',
+                 conditions=dict(function=check_repo))
+    rmap.connect('search_repo', '/{repo_name:.*?}/search',
+                 controller='search',
+                 conditions=dict(function=check_repo),
+                 )
 
     #LOGIN/LOGOUT/REGISTER/SIGN IN
     rmap.connect('login_home', '%s/login' % ADMIN_PREFIX, controller='login')
@@ -423,6 +450,10 @@
                 controller='summary',
                 conditions=dict(function=check_repo))
 
+    rmap.connect('repo_size', '/{repo_name:.*?}/repo_size',
+                controller='summary', action='repo_size',
+                conditions=dict(function=check_repo))
+
     rmap.connect('repos_group_home', '/{group_name:.*}',
                 controller='admin/repos_groups', action="show_by_name",
                 conditions=dict(function=check_group))
@@ -431,6 +462,17 @@
                 controller='changeset', revision='tip',
                 conditions=dict(function=check_repo))
 
+    # no longer user, but kept for routes to work
+    rmap.connect("_edit_repo", "/{repo_name:.*?}/edit",
+                 controller='admin/repos', action="edit",
+                 conditions=dict(method=["GET"], function=check_repo)
+                 )
+
+    rmap.connect("edit_repo", "/{repo_name:.*?}/settings",
+                 controller='admin/repos', action="edit",
+                 conditions=dict(method=["GET"], function=check_repo)
+                 )
+
     #still working url for backward compat.
     rmap.connect('raw_changeset_home_depraced',
                  '/{repo_name:.*?}/raw-changeset/{revision}',
@@ -471,8 +513,8 @@
                  controller='compare', action='index',
                  conditions=dict(function=check_repo),
                  requirements=dict(
-                            org_ref_type='(branch|book|tag|rev|org_ref_type)',
-                            other_ref_type='(branch|book|tag|rev|other_ref_type)')
+                            org_ref_type='(branch|book|tag|rev|__other_ref_type__)',
+                            other_ref_type='(branch|book|tag|rev|__org_ref_type__)')
                  )
 
     rmap.connect('pullrequest_home',
@@ -518,7 +560,7 @@
                 controller='pullrequests', action='delete_comment',
                 conditions=dict(function=check_repo, method=["DELETE"]))
 
-    rmap.connect('summary_home', '/{repo_name:.*?}/summary',
+    rmap.connect('summary_home_summary', '/{repo_name:.*?}/summary',
                 controller='summary', conditions=dict(function=check_repo))
 
     rmap.connect('shortlog_home', '/{repo_name:.*?}/shortlog',
@@ -548,6 +590,10 @@
                 controller='files', revision='tip', f_path='',
                 conditions=dict(function=check_repo))
 
+    rmap.connect('files_home_nopath', '/{repo_name:.*?}/files/{revision}',
+                controller='files', revision='tip', f_path='',
+                conditions=dict(function=check_repo))
+
     rmap.connect('files_history_home',
                  '/{repo_name:.*?}/history/{revision}/{f_path:.*}',
                  controller='files', action='history', revision='tip', f_path='',
@@ -591,22 +637,6 @@
                 controller='files', action='nodelist',
                 conditions=dict(function=check_repo))
 
-    rmap.connect('repo_settings_delete', '/{repo_name:.*?}/settings',
-                controller='settings', action="delete",
-                conditions=dict(method=["DELETE"], function=check_repo))
-
-    rmap.connect('repo_settings_update', '/{repo_name:.*?}/settings',
-                controller='settings', action="update",
-                conditions=dict(method=["PUT"], function=check_repo))
-
-    rmap.connect('repo_settings_home', '/{repo_name:.*?}/settings',
-                controller='settings', action='index',
-                conditions=dict(function=check_repo))
-
-    rmap.connect('toggle_locking', "/{repo_name:.*?}/locking_toggle",
-                 controller='settings', action="toggle_locking",
-                 conditions=dict(method=["GET"], function=check_repo))
-
     rmap.connect('repo_fork_create_home', '/{repo_name:.*?}/fork',
                 controller='forks', action='fork_create',
                 conditions=dict(function=check_repo, method=["POST"]))
--- a/rhodecode/config/setup_rhodecode.py	Mon Mar 11 17:59:38 2013 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,97 +0,0 @@
-import os
-from paste.script.appinstall import AbstractInstallCommand
-from paste.script.command import BadCommand
-from paste.deploy import appconfig
-
-
-class SetupCommand(AbstractInstallCommand):
-
-    default_verbosity = 1
-    max_args = 1
-    min_args = 1
-    summary = "Setup an application, given a config file"
-    usage = "CONFIG_FILE"
-
-    description = """\
-    Note: this is an experimental command, and it will probably change
-    in several ways by the next release.
-
-    Setup an application according to its configuration file.  This is
-    the second part of a two-phase web application installation
-    process (the first phase is prepare-app).  The setup process may
-    consist of things like creating directories and setting up
-    databases.
-    """
-
-    parser = AbstractInstallCommand.standard_parser(
-        simulate=True, quiet=True, interactive=True)
-    parser.add_option('--user',
-                      action='store',
-                      dest='username',
-                      default=None,
-                      help='Admin Username')
-    parser.add_option('--email',
-                      action='store',
-                      dest='email',
-                      default=None,
-                      help='Admin Email')
-    parser.add_option('--password',
-                      action='store',
-                      dest='password',
-                      default=None,
-                      help='Admin password min 6 chars')
-    parser.add_option('--repos',
-                      action='store',
-                      dest='repos_location',
-                      default=None,
-                      help='Absolute path to repositories location')
-    parser.add_option('--name',
-                      action='store',
-                      dest='section_name',
-                      default=None,
-                      help='The name of the section to set up (default: app:main)')
-    parser.add_option('--force-yes',
-                       action='store_true',
-                       dest='force_ask',
-                       default=None,
-                       help='Force yes to every question')
-    parser.add_option('--force-no',
-                       action='store_false',
-                       dest='force_ask',
-                       default=None,
-                       help='Force no to every question')
-
-    def command(self):
-        config_spec = self.args[0]
-        section = self.options.section_name
-        if section is None:
-            if '#' in config_spec:
-                config_spec, section = config_spec.split('#', 1)
-            else:
-                section = 'main'
-        if not ':' in section:
-            plain_section = section
-            section = 'app:' + section
-        else:
-            plain_section = section.split(':', 1)[0]
-        if not config_spec.startswith('config:'):
-            config_spec = 'config:' + config_spec
-        if plain_section != 'main':
-            config_spec += '#' + plain_section
-        config_file = config_spec[len('config:'):].split('#', 1)[0]
-        config_file = os.path.join(os.getcwd(), config_file)
-        self.logging_file_config(config_file)
-        conf = appconfig(config_spec, relative_to=os.getcwd())
-        ep_name = conf.context.entry_point_name
-        ep_group = conf.context.protocol
-        dist = conf.context.distribution
-        if dist is None:
-            raise BadCommand(
-                "The section %r is not the application (probably a filter).  "
-                "You should add #section_name, where section_name is the "
-                "section that configures your application" % plain_section)
-        installer = self.get_installer(dist, ep_group, ep_name)
-        installer.setup_config(
-            self, config_file, section, self.sysconfig_install_vars(installer))
-        self.call_sysconfig_functions(
-            'post_setup_hook', installer, config_file)
--- a/rhodecode/controllers/admin/admin.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/controllers/admin/admin.py	Sun Apr 07 18:37:22 2013 +0200
@@ -130,7 +130,7 @@
         c.search_term = request.GET.get('filter')
         try:
             users_log = _journal_filter(users_log, c.search_term)
-        except:
+        except Exception:
             # we want this to crash for now
             raise
 
--- a/rhodecode/controllers/admin/defaults.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/controllers/admin/defaults.py	Sun Apr 07 18:37:22 2013 +0200
@@ -107,7 +107,7 @@
                 encoding="UTF-8")
         except Exception:
             log.error(traceback.format_exc())
-            h.flash(_('error occurred during update of defaults'),
+            h.flash(_('Error occurred during update of defaults'),
                     category='error')
 
         return redirect(url('defaults'))
--- a/rhodecode/controllers/admin/ldap_settings.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/controllers/admin/ldap_settings.py	Sun Apr 07 18:37:22 2013 +0200
@@ -123,7 +123,7 @@
                         Session().add(setting)
 
                 Session().commit()
-                h.flash(_('Ldap settings updated successfully'),
+                h.flash(_('LDAP settings updated successfully'),
                         category='success')
                 if not ldap_active:
                     #if ldap is missing send an info to user
@@ -144,7 +144,7 @@
                 encoding="UTF-8")
         except Exception:
             log.error(traceback.format_exc())
-            h.flash(_('error occurred during update of ldap settings'),
+            h.flash(_('Error occurred during update of ldap settings'),
                     category='error')
 
         return redirect(url('ldap_home'))
--- a/rhodecode/controllers/admin/notifications.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/controllers/admin/notifications.py	Sun Apr 07 18:37:22 2013 +0200
@@ -28,7 +28,7 @@
 
 from pylons import request
 from pylons import tmpl_context as c, url
-from pylons.controllers.util import redirect
+from pylons.controllers.util import redirect, abort
 
 from webhelpers.paginate import Page
 
@@ -117,7 +117,7 @@
                     Session().commit()
                     return 'ok'
         except Exception:
-            Session.rollback()
+            Session().rollback()
             log.error(traceback.format_exc())
         return 'fail'
 
@@ -139,7 +139,7 @@
                     Session().commit()
                     return 'ok'
         except Exception:
-            Session.rollback()
+            Session().rollback()
             log.error(traceback.format_exc())
         return 'fail'
 
@@ -149,8 +149,9 @@
         c.user = self.rhodecode_user
         no = Notification.get(notification_id)
 
-        owner = all(un.user.user_id == c.rhodecode_user.user_id
+        owner = any(un.user.user_id == c.rhodecode_user.user_id
                     for un in no.notifications_to_users)
+
         if no and (h.HasPermissionAny('hg.admin', 'repository.admin')() or owner):
             unotification = NotificationModel()\
                             .get_user_notification(c.user.user_id, no)
@@ -158,14 +159,14 @@
             # if this association to user is not valid, we don't want to show
             # this message
             if unotification:
-                if unotification.read is False:
+                if not unotification.read:
                     unotification.mark_as_read()
                     Session().commit()
                 c.notification = no
 
                 return render('admin/notifications/show_notification.html')
 
-        return redirect(url('notifications'))
+        return abort(403)
 
     def edit(self, notification_id, format='html'):
         """GET /_admin/notifications/id/edit: Form to edit an existing item"""
--- a/rhodecode/controllers/admin/permissions.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/controllers/admin/permissions.py	Sun Apr 07 18:37:22 2013 +0200
@@ -67,11 +67,11 @@
                                     ('group.admin', _('Admin'),)]
         self.register_choices = [
             ('hg.register.none',
-                _('disabled')),
+                _('Disabled')),
             ('hg.register.manual_activate',
-                _('allowed with manual account activation')),
+                _('Allowed with manual account activation')),
             ('hg.register.auto_activate',
-                _('allowed with automatic account activation')), ]
+                _('Allowed with automatic account activation')), ]
 
         self.create_choices = [('hg.create.none', _('Disabled')),
                                ('hg.create.repository', _('Enabled'))]
@@ -139,7 +139,7 @@
                     encoding="UTF-8")
             except Exception:
                 log.error(traceback.format_exc())
-                h.flash(_('error occurred during update of permissions'),
+                h.flash(_('Error occurred during update of permissions'),
                         category='error')
 
         return redirect(url('edit_permission', id=id))
--- a/rhodecode/controllers/admin/repos.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/controllers/admin/repos.py	Sun Apr 07 18:37:22 2013 +0200
@@ -28,7 +28,7 @@
 import formencode
 from formencode import htmlfill
 
-from webob.exc import HTTPInternalServerError
+from webob.exc import HTTPInternalServerError, HTTPForbidden
 from pylons import request, session, tmpl_context as c, url
 from pylons.controllers.util import redirect
 from pylons.i18n.translation import _
@@ -37,23 +37,25 @@
 import rhodecode
 from rhodecode.lib import helpers as h
 from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator, \
-    HasPermissionAnyDecorator, HasRepoPermissionAllDecorator
-from rhodecode.lib.base import BaseController, render
+    HasPermissionAnyDecorator, HasRepoPermissionAllDecorator, NotAnonymous,\
+    HasPermissionAny, HasReposGroupPermissionAny, HasRepoPermissionAnyDecorator
+from rhodecode.lib.base import BaseRepoController, render
 from rhodecode.lib.utils import invalidate_cache, action_logger, repo_name_slug
 from rhodecode.lib.helpers import get_token
 from rhodecode.model.meta import Session
 from rhodecode.model.db import User, Repository, UserFollowing, RepoGroup,\
-    RhodeCodeSetting
-from rhodecode.model.forms import RepoForm
-from rhodecode.model.scm import ScmModel
+    RhodeCodeSetting, RepositoryField
+from rhodecode.model.forms import RepoForm, RepoFieldForm, RepoPermsForm
+from rhodecode.model.scm import ScmModel, GroupList
 from rhodecode.model.repo import RepoModel
 from rhodecode.lib.compat import json
 from sqlalchemy.sql.expression import func
+from rhodecode.lib.exceptions import AttachedForksError
 
 log = logging.getLogger(__name__)
 
 
-class ReposController(BaseController):
+class ReposController(BaseRepoController):
     """
     REST Controller styled on the Atom Publishing Protocol"""
     # To properly map this controller, ensure your config/routing.py
@@ -61,14 +63,15 @@
     #     map.resource('repo', 'repos')
 
     @LoginRequired()
-    @HasPermissionAnyDecorator('hg.admin', 'hg.create.repository')
     def __before__(self):
         c.admin_user = session.get('admin_user')
         c.admin_username = session.get('admin_username')
         super(ReposController, self).__before__()
 
     def __load_defaults(self):
-        c.repo_groups = RepoGroup.groups_choices(check_perms=True)
+        acl_groups = GroupList(RepoGroup.query().all(),
+                               perm_set=['group.write', 'group.admin'])
+        c.repo_groups = RepoGroup.groups_choices(groups=acl_groups)
         c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups)
 
         repo_model = RepoModel()
@@ -116,6 +119,9 @@
             c.stats_percentage = '%.2f' % ((float((last_rev)) /
                                             c.repo_last_rev) * 100)
 
+        c.repo_fields = RepositoryField.query()\
+            .filter(RepositoryField.repository == db_repo).all()
+
         defaults = RepoModel()._get_defaults(repo_name)
 
         c.repos_list = [('', _('--REMOVE FORK--'))]
@@ -136,13 +142,14 @@
                         .all()
 
         repos_data = RepoModel().get_repos_as_dict(repos_list=c.repos_list,
-                                                   admin=True)
+                                                   admin=True,
+                                                   super_user_actions=True)
         #json used to render the grid
         c.data = json.dumps(repos_data)
 
         return render('admin/repos/repos.html')
 
-    @HasPermissionAnyDecorator('hg.admin', 'hg.create.repository')
+    @NotAnonymous()
     def create(self):
         """
         POST /repos: Create a new item"""
@@ -154,15 +161,18 @@
             form_result = RepoForm(repo_groups=c.repo_groups_choices,
                                    landing_revs=c.landing_revs_choices)()\
                             .to_python(dict(request.POST))
+
             new_repo = RepoModel().create(form_result,
                                           self.rhodecode_user.user_id)
             if form_result['clone_uri']:
-                h.flash(_('created repository %s from %s') \
+                h.flash(_('Created repository %s from %s') \
                     % (form_result['repo_name'], form_result['clone_uri']),
                     category='success')
             else:
-                h.flash(_('created repository %s') % form_result['repo_name'],
-                    category='success')
+                repo_url = h.link_to(form_result['repo_name'],
+                    h.url('summary_home', repo_name=form_result['repo_name_full']))
+                h.flash(h.literal(_('Created repository %s') % repo_url),
+                        category='success')
 
             if request.POST.get('user_created'):
                 # created by regular non admin user
@@ -175,16 +185,8 @@
                               self.sa)
             Session().commit()
         except formencode.Invalid, errors:
-
-            c.new_repo = errors.value['repo_name']
-
-            if request.POST.get('user_created'):
-                r = render('admin/repos/repo_add_create_repository.html')
-            else:
-                r = render('admin/repos/repo_add.html')
-
             return htmlfill.render(
-                r,
+                render('admin/repos/repo_add.html'),
                 defaults=errors.value,
                 errors=errors.error_dict or {},
                 prefix_error=False,
@@ -192,21 +194,41 @@
 
         except Exception:
             log.error(traceback.format_exc())
-            msg = _('error occurred during creation of repository %s') \
+            msg = _('Error creating repository %s') \
                     % form_result.get('repo_name')
             h.flash(msg, category='error')
-            return redirect(url('repos'))
+            if c.rhodecode_user.is_admin:
+                return redirect(url('repos'))
+            return redirect(url('home'))
         #redirect to our new repo !
         return redirect(url('summary_home', repo_name=new_repo.repo_name))
 
-    @HasPermissionAllDecorator('hg.admin')
-    def new(self, format='html'):
-        """GET /repos/new: Form to create a new item"""
+    @NotAnonymous()
+    def create_repository(self):
+        """GET /_admin/create_repository: Form to create a new item"""
         new_repo = request.GET.get('repo', '')
+        parent_group = request.GET.get('parent_group')
+        if not HasPermissionAny('hg.admin', 'hg.create.repository')():
+            #you're not super admin nor have global create permissions,
+            #but maybe you have at least write permission to a parent group ?
+            _gr = RepoGroup.get(parent_group)
+            gr_name = _gr.group_name if _gr else None
+            if not HasReposGroupPermissionAny('group.admin', 'group.write')(group_name=gr_name):
+                raise HTTPForbidden
+
+        acl_groups = GroupList(RepoGroup.query().all(),
+                               perm_set=['group.write', 'group.admin'])
+        c.repo_groups = RepoGroup.groups_choices(groups=acl_groups)
+        c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups)
+        choices, c.landing_revs = ScmModel().get_repo_landing_revs()
+
         c.new_repo = repo_name_slug(new_repo)
-        self.__load_defaults()
+
         ## apply the defaults from defaults page
         defaults = RhodeCodeSetting.get_default_repo_settings(strip_prefix=True)
+        if parent_group:
+            defaults.update({'repo_group': parent_group})
+
         return htmlfill.render(
             render('admin/repos/repo_add.html'),
             defaults=defaults,
@@ -215,7 +237,7 @@
             encoding="UTF-8"
         )
 
-    @HasPermissionAllDecorator('hg.admin')
+    @HasRepoPermissionAllDecorator('repository.admin')
     def update(self, repo_name):
         """
         PUT /repos/repo_name: Update an existing item"""
@@ -259,11 +281,11 @@
 
         except Exception:
             log.error(traceback.format_exc())
-            h.flash(_('error occurred during update of repository %s') \
+            h.flash(_('Error occurred during update of repository %s') \
                     % repo_name, category='error')
         return redirect(url('edit_repo', repo_name=changed_name))
 
-    @HasPermissionAllDecorator('hg.admin')
+    @HasRepoPermissionAllDecorator('repository.admin')
     def delete(self, repo_name):
         """
         DELETE /repos/repo_name: Delete an existing item"""
@@ -280,25 +302,27 @@
             h.not_mapped_error(repo_name)
             return redirect(url('repos'))
         try:
+            _forks = repo.forks.count()
+            handle_forks = None
+            if _forks and request.POST.get('forks'):
+                do = request.POST['forks']
+                if do == 'detach_forks':
+                    handle_forks = 'detach'
+                    h.flash(_('Detached %s forks') % _forks, category='success')
+                elif do == 'delete_forks':
+                    handle_forks = 'delete'
+                    h.flash(_('Deleted %s forks') % _forks, category='success')
+            repo_model.delete(repo, forks=handle_forks)
             action_logger(self.rhodecode_user, 'admin_deleted_repo',
-                              repo_name, self.ip_addr, self.sa)
-            repo_model.delete(repo)
+                  repo_name, self.ip_addr, self.sa)
             invalidate_cache('get_repo_cached_%s' % repo_name)
-            h.flash(_('deleted repository %s') % repo_name, category='success')
+            h.flash(_('Deleted repository %s') % repo_name, category='success')
             Session().commit()
-        except IntegrityError, e:
-            if e.message.find('repositories_fork_id_fkey') != -1:
-                log.error(traceback.format_exc())
-                h.flash(_('Cannot delete %s it still contains attached '
-                          'forks') % repo_name,
-                        category='warning')
-            else:
-                log.error(traceback.format_exc())
-                h.flash(_('An error occurred during '
-                          'deletion of %s') % repo_name,
-                        category='error')
+        except AttachedForksError:
+            h.flash(_('Cannot delete %s it still contains attached forks')
+                        % repo_name, category='warning')
 
-        except Exception, e:
+        except Exception:
             log.error(traceback.format_exc())
             h.flash(_('An error occurred during deletion of %s') % repo_name,
                     category='error')
@@ -306,6 +330,42 @@
         return redirect(url('repos'))
 
     @HasRepoPermissionAllDecorator('repository.admin')
+    def set_repo_perm_member(self, repo_name):
+        form = RepoPermsForm()().to_python(request.POST)
+
+        perms_new = form['perms_new']
+        perms_updates = form['perms_updates']
+        cur_repo = repo_name
+
+        # update permissions
+        for member, perm, member_type in perms_updates:
+            if member_type == 'user':
+                # this updates existing one
+                RepoModel().grant_user_permission(
+                    repo=cur_repo, user=member, perm=perm
+                )
+            else:
+                RepoModel().grant_users_group_permission(
+                    repo=cur_repo, group_name=member, perm=perm
+                )
+        # set new permissions
+        for member, perm, member_type in perms_new:
+            if member_type == 'user':
+                RepoModel().grant_user_permission(
+                    repo=cur_repo, user=member, perm=perm
+                )
+            else:
+                RepoModel().grant_users_group_permission(
+                    repo=cur_repo, group_name=member, perm=perm
+                )
+        #TODO: implement this
+        #action_logger(self.rhodecode_user, 'admin_changed_repo_permissions',
+        #              repo_name, self.ip_addr, self.sa)
+        Session().commit()
+        h.flash(_('Repository permissions updated'), category='success')
+        return redirect(url('edit_repo', repo_name=repo_name))
+
+    @HasRepoPermissionAllDecorator('repository.admin')
     def delete_perm_user(self, repo_name):
         """
         DELETE an existing repository permission user
@@ -315,6 +375,9 @@
         try:
             RepoModel().revoke_user_permission(repo=repo_name,
                                                user=request.POST['user_id'])
+            #TODO: implement this
+            #action_logger(self.rhodecode_user, 'admin_revoked_repo_permissions',
+            #              repo_name, self.ip_addr, self.sa)
             Session().commit()
         except Exception:
             log.error(traceback.format_exc())
@@ -325,7 +388,7 @@
     @HasRepoPermissionAllDecorator('repository.admin')
     def delete_perm_users_group(self, repo_name):
         """
-        DELETE an existing repository permission users group
+        DELETE an existing repository permission user group
 
         :param repo_name:
         """
@@ -338,11 +401,11 @@
         except Exception:
             log.error(traceback.format_exc())
             h.flash(_('An error occurred during deletion of repository'
-                      ' users groups'),
+                      ' user groups'),
                     category='error')
             raise HTTPInternalServerError()
 
-    @HasPermissionAllDecorator('hg.admin')
+    @HasRepoPermissionAllDecorator('repository.admin')
     def repo_stats(self, repo_name):
         """
         DELETE an existing repository statistics
@@ -359,7 +422,7 @@
                     category='error')
         return redirect(url('edit_repo', repo_name=repo_name))
 
-    @HasPermissionAllDecorator('hg.admin')
+    @HasRepoPermissionAllDecorator('repository.admin')
     def repo_cache(self, repo_name):
         """
         INVALIDATE existing repository cache
@@ -376,7 +439,7 @@
                     category='error')
         return redirect(url('edit_repo', repo_name=repo_name))
 
-    @HasPermissionAllDecorator('hg.admin')
+    @HasRepoPermissionAllDecorator('repository.admin')
     def repo_locking(self, repo_name):
         """
         Unlock repository when it is locked !
@@ -396,7 +459,34 @@
                     category='error')
         return redirect(url('edit_repo', repo_name=repo_name))
 
-    @HasPermissionAllDecorator('hg.admin')
+    @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
+    def toggle_locking(self, repo_name):
+        """
+        Toggle locking of repository by simple GET call to url
+
+        :param repo_name:
+        """
+
+        try:
+            repo = Repository.get_by_repo_name(repo_name)
+
+            if repo.enable_locking:
+                if repo.locked[0]:
+                    Repository.unlock(repo)
+                    action = _('Unlocked')
+                else:
+                    Repository.lock(repo, c.rhodecode_user.user_id)
+                    action = _('Locked')
+
+                h.flash(_('Repository has been %s') % action,
+                        category='success')
+        except Exception, e:
+            log.error(traceback.format_exc())
+            h.flash(_('An error occurred during unlocking'),
+                    category='error')
+        return redirect(url('summary_home', repo_name=repo_name))
+
+    @HasRepoPermissionAllDecorator('repository.admin')
     def repo_public_journal(self, repo_name):
         """
         Set's this repository to be visible in public journal,
@@ -415,7 +505,7 @@
                 h.flash(_('Updated repository visibility in public journal'),
                         category='success')
                 Session().commit()
-            except:
+            except Exception:
                 h.flash(_('An error occurred during setting this'
                           ' repository in public journal'),
                         category='error')
@@ -424,7 +514,7 @@
             h.flash(_('Token mismatch'), category='error')
         return redirect(url('edit_repo', repo_name=repo_name))
 
-    @HasPermissionAllDecorator('hg.admin')
+    @HasRepoPermissionAllDecorator('repository.admin')
     def repo_pull(self, repo_name):
         """
         Runs task to update given repository with remote changes,
@@ -441,7 +531,7 @@
 
         return redirect(url('edit_repo', repo_name=repo_name))
 
-    @HasPermissionAllDecorator('hg.admin')
+    @HasRepoPermissionAllDecorator('repository.admin')
     def repo_as_fork(self, repo_name):
         """
         Mark given repository as a fork of another
@@ -468,7 +558,7 @@
         """GET /repos/repo_name: Show a specific item"""
         # url('repo', repo_name=ID)
 
-    @HasPermissionAllDecorator('hg.admin')
+    @HasRepoPermissionAllDecorator('repository.admin')
     def edit(self, repo_name, format='html'):
         """GET /repos/repo_name/edit: Form to edit an existing item"""
         # url('edit_repo', repo_name=ID)
@@ -480,3 +570,37 @@
             encoding="UTF-8",
             force_defaults=False
         )
+
+    @HasPermissionAllDecorator('hg.admin')
+    def create_repo_field(self, repo_name):
+        try:
+            form_result = RepoFieldForm()().to_python(dict(request.POST))
+            new_field = RepositoryField()
+            new_field.repository = Repository.get_by_repo_name(repo_name)
+            new_field.field_key = form_result['new_field_key']
+            new_field.field_type = form_result['new_field_type']  # python type
+            new_field.field_value = form_result['new_field_value']  # set initial blank value
+            new_field.field_desc = form_result['new_field_desc']
+            new_field.field_label = form_result['new_field_label']
+            Session().add(new_field)
+            Session().commit()
+
+        except Exception, e:
+            log.error(traceback.format_exc())
+            msg = _('An error occurred during creation of field')
+            if isinstance(e, formencode.Invalid):
+                msg += ". " + e.msg
+            h.flash(msg, category='error')
+        return redirect(url('edit_repo', repo_name=repo_name))
+
+    @HasPermissionAllDecorator('hg.admin')
+    def delete_repo_field(self, repo_name, field_id):
+        field = RepositoryField.get_or_404(field_id)
+        try:
+            Session().delete(field)
+            Session().commit()
+        except Exception, e:
+            log.error(traceback.format_exc())
+            msg = _('An error occurred during removal of field')
+            h.flash(msg, category='error')
+        return redirect(url('edit_repo', repo_name=repo_name))
--- a/rhodecode/controllers/admin/repos_groups.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/controllers/admin/repos_groups.py	Sun Apr 07 18:37:22 2013 +0200
@@ -3,7 +3,7 @@
     rhodecode.controllers.admin.repos_groups
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-    Repositories groups controller for RhodeCode
+    Repository groups controller for RhodeCode
 
     :created_on: Mar 23, 2010
     :author: marcink
@@ -30,7 +30,7 @@
 from formencode import htmlfill
 
 from pylons import request, tmpl_context as c, url
-from pylons.controllers.util import redirect
+from pylons.controllers.util import abort, redirect
 from pylons.i18n.translation import _
 
 from sqlalchemy.exc import IntegrityError
@@ -39,7 +39,8 @@
 from rhodecode.lib import helpers as h
 from rhodecode.lib.ext_json import json
 from rhodecode.lib.auth import LoginRequired, HasPermissionAnyDecorator,\
-    HasReposGroupPermissionAnyDecorator
+    HasReposGroupPermissionAnyDecorator, HasReposGroupPermissionAll,\
+    HasPermissionAll
 from rhodecode.lib.base import BaseController, render
 from rhodecode.model.db import RepoGroup, Repository
 from rhodecode.model.repos_group import ReposGroupModel
@@ -47,8 +48,9 @@
 from rhodecode.model.meta import Session
 from rhodecode.model.repo import RepoModel
 from webob.exc import HTTPInternalServerError, HTTPNotFound
-from rhodecode.lib.utils2 import str2bool
+from rhodecode.lib.utils2 import str2bool, safe_int
 from sqlalchemy.sql.expression import func
+from rhodecode.model.scm import GroupList
 
 log = logging.getLogger(__name__)
 
@@ -63,10 +65,21 @@
     def __before__(self):
         super(ReposGroupsController, self).__before__()
 
-    def __load_defaults(self):
-        c.repo_groups = RepoGroup.groups_choices()
+    def __load_defaults(self, allow_empty_group=False, exclude_group_ids=[]):
+        if HasPermissionAll('hg.admin')('group edit'):
+            #we're global admin, we're ok and we can create TOP level groups
+            allow_empty_group = True
+
+        #override the choices for this form, we need to filter choices
+        #and display only those we have ADMIN right
+        groups_with_admin_rights = GroupList(RepoGroup.query().all(),
+                                             perm_set=['group.admin'])
+        c.repo_groups = RepoGroup.groups_choices(groups=groups_with_admin_rights,
+                                                 show_empty_group=allow_empty_group)
+        # exclude filtered ids
+        c.repo_groups = filter(lambda x: x[0] not in exclude_group_ids,
+                               c.repo_groups)
         c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups)
-
         repo_model = RepoModel()
         c.users_array = repo_model.get_users_js()
         c.users_groups_array = repo_model.get_users_groups_js()
@@ -77,7 +90,6 @@
 
         :param group_id:
         """
-        self.__load_defaults()
         repo_group = RepoGroup.get_or_404(group_id)
         data = repo_group.get_dict()
         data['group_name'] = repo_group.name
@@ -94,34 +106,46 @@
 
         return data
 
-    @HasPermissionAnyDecorator('hg.admin')
+    def _revoke_perms_on_yourself(self, form_result):
+        _up = filter(lambda u: c.rhodecode_user.username == u[0],
+                     form_result['perms_updates'])
+        _new = filter(lambda u: c.rhodecode_user.username == u[0],
+                      form_result['perms_new'])
+        if _new and _new[0][1] != 'group.admin' or _up and _up[0][1] != 'group.admin':
+            return True
+        return False
+
     def index(self, format='html'):
         """GET /repos_groups: All items in the collection"""
         # url('repos_groups')
+        group_iter = GroupList(RepoGroup.query().all(), perm_set=['group.admin'])
         sk = lambda g: g.parents[0].group_name if g.parents else g.group_name
-        c.groups = sorted(RepoGroup.query().all(), key=sk)
+        c.groups = sorted(group_iter, key=sk)
         return render('admin/repos_groups/repos_groups_show.html')
 
-    @HasPermissionAnyDecorator('hg.admin')
     def create(self):
         """POST /repos_groups: Create a new item"""
         # url('repos_groups')
+
         self.__load_defaults()
-        repos_group_form = ReposGroupForm(available_groups =
-                                          c.repo_groups_choices)()
+
+        # permissions for can create group based on parent_id are checked
+        # here in the Form
+        repos_group_form = ReposGroupForm(available_groups=
+                                map(lambda k: unicode(k[0]), c.repo_groups))()
         try:
             form_result = repos_group_form.to_python(dict(request.POST))
             ReposGroupModel().create(
                     group_name=form_result['group_name'],
                     group_description=form_result['group_description'],
-                    parent=form_result['group_parent_id']
+                    parent=form_result['group_parent_id'],
+                    owner=self.rhodecode_user.user_id
             )
             Session().commit()
-            h.flash(_('created repos group %s') \
+            h.flash(_('Created repository group %s') \
                     % form_result['group_name'], category='success')
             #TODO: in futureaction_logger(, '', '', '', self.sa)
         except formencode.Invalid, errors:
-
             return htmlfill.render(
                 render('admin/repos_groups/repos_groups_add.html'),
                 defaults=errors.value,
@@ -130,42 +154,73 @@
                 encoding="UTF-8")
         except Exception:
             log.error(traceback.format_exc())
-            h.flash(_('error occurred during creation of repos group %s') \
+            h.flash(_('Error occurred during creation of repository group %s') \
                     % request.POST.get('group_name'), category='error')
+        parent_group_id = form_result['group_parent_id']
+        #TODO: maybe we should get back to the main view, not the admin one
+        return redirect(url('repos_groups', parent_group=parent_group_id))
 
-        return redirect(url('repos_groups'))
-
-    @HasPermissionAnyDecorator('hg.admin')
     def new(self, format='html'):
         """GET /repos_groups/new: Form to create a new item"""
         # url('new_repos_group')
+        if HasPermissionAll('hg.admin')('group create'):
+            #we're global admin, we're ok and we can create TOP level groups
+            pass
+        else:
+            # we pass in parent group into creation form, thus we know
+            # what would be the group, we can check perms here !
+            group_id = safe_int(request.GET.get('parent_group'))
+            group = RepoGroup.get(group_id) if group_id else None
+            group_name = group.group_name if group else None
+            if HasReposGroupPermissionAll('group.admin')(group_name, 'group create'):
+                pass
+            else:
+                return abort(403)
+
         self.__load_defaults()
         return render('admin/repos_groups/repos_groups_add.html')
 
-    @HasPermissionAnyDecorator('hg.admin')
-    def update(self, id):
-        """PUT /repos_groups/id: Update an existing item"""
+    @HasReposGroupPermissionAnyDecorator('group.admin')
+    def update(self, group_name):
+        """PUT /repos_groups/group_name: Update an existing item"""
         # Forms posted to this method should contain a hidden field:
         #    <input type="hidden" name="_method" value="PUT" />
         # Or using helpers:
-        #    h.form(url('repos_group', id=ID),
+        #    h.form(url('repos_group', group_name=GROUP_NAME),
         #           method='put')
-        # url('repos_group', id=ID)
+        # url('repos_group', group_name=GROUP_NAME)
 
-        self.__load_defaults()
-        c.repos_group = RepoGroup.get(id)
+        c.repos_group = ReposGroupModel()._get_repos_group(group_name)
+        if HasPermissionAll('hg.admin')('group edit'):
+            #we're global admin, we're ok and we can create TOP level groups
+            allow_empty_group = True
+        elif not c.repos_group.parent_group:
+            allow_empty_group = True
+        else:
+            allow_empty_group = False
+        self.__load_defaults(allow_empty_group=allow_empty_group,
+                             exclude_group_ids=[c.repos_group.group_id])
 
         repos_group_form = ReposGroupForm(
             edit=True,
             old_data=c.repos_group.get_dict(),
-            available_groups=c.repo_groups_choices
+            available_groups=c.repo_groups_choices,
+            can_create_in_root=allow_empty_group,
         )()
         try:
             form_result = repos_group_form.to_python(dict(request.POST))
-            ReposGroupModel().update(id, form_result)
+            if not c.rhodecode_user.is_admin:
+                if self._revoke_perms_on_yourself(form_result):
+                    msg = _('Cannot revoke permission for yourself as admin')
+                    h.flash(msg, category='warning')
+                    raise Exception('revoke admin permission on self')
+
+            new_gr = ReposGroupModel().update(group_name, form_result)
             Session().commit()
-            h.flash(_('updated repos group %s') \
+            h.flash(_('Updated repository group %s') \
                     % form_result['group_name'], category='success')
+            # we now have new name !
+            group_name = new_gr.group_name
             #TODO: in future action_logger(, '', '', '', self.sa)
         except formencode.Invalid, errors:
 
@@ -177,61 +232,60 @@
                 encoding="UTF-8")
         except Exception:
             log.error(traceback.format_exc())
-            h.flash(_('error occurred during update of repos group %s') \
+            h.flash(_('Error occurred during update of repository group %s') \
                     % request.POST.get('group_name'), category='error')
 
-        return redirect(url('edit_repos_group', id=id))
+        return redirect(url('edit_repos_group', group_name=group_name))
 
-    @HasPermissionAnyDecorator('hg.admin')
-    def delete(self, id):
-        """DELETE /repos_groups/id: Delete an existing item"""
+    @HasReposGroupPermissionAnyDecorator('group.admin')
+    def delete(self, group_name):
+        """DELETE /repos_groups/group_name: Delete an existing item"""
         # Forms posted to this method should contain a hidden field:
         #    <input type="hidden" name="_method" value="DELETE" />
         # Or using helpers:
-        #    h.form(url('repos_group', id=ID),
+        #    h.form(url('repos_group', group_name=GROUP_NAME),
         #           method='delete')
-        # url('repos_group', id=ID)
+        # url('repos_group', group_name=GROUP_NAME)
 
-        gr = RepoGroup.get(id)
+        gr = c.repos_group = ReposGroupModel()._get_repos_group(group_name)
         repos = gr.repositories.all()
         if repos:
             h.flash(_('This group contains %s repositores and cannot be '
-                      'deleted') % len(repos),
-                    category='error')
+                      'deleted') % len(repos), category='warning')
+            return redirect(url('repos_groups'))
+
+        children = gr.children.all()
+        if children:
+            h.flash(_('This group contains %s subgroups and cannot be deleted'
+                      % (len(children))), category='warning')
             return redirect(url('repos_groups'))
 
         try:
-            ReposGroupModel().delete(id)
+            ReposGroupModel().delete(group_name)
             Session().commit()
-            h.flash(_('removed repos group %s') % gr.group_name,
+            h.flash(_('Removed repository group %s') % group_name,
                     category='success')
             #TODO: in future action_logger(, '', '', '', self.sa)
-        except IntegrityError, e:
-            if str(e.message).find('groups_group_parent_id_fkey') != -1:
-                log.error(traceback.format_exc())
-                h.flash(_('Cannot delete this group it still contains '
-                          'subgroups'),
-                        category='warning')
-            else:
-                log.error(traceback.format_exc())
-                h.flash(_('error occurred during deletion of repos '
-                          'group %s') % gr.group_name, category='error')
-
         except Exception:
             log.error(traceback.format_exc())
-            h.flash(_('error occurred during deletion of repos '
-                      'group %s') % gr.group_name, category='error')
+            h.flash(_('Error occurred during deletion of repos '
+                      'group %s') % group_name, category='error')
 
         return redirect(url('repos_groups'))
 
     @HasReposGroupPermissionAnyDecorator('group.admin')
     def delete_repos_group_user_perm(self, group_name):
         """
-        DELETE an existing repositories group permission user
+        DELETE an existing repository group permission user
 
         :param group_name:
         """
         try:
+            if not c.rhodecode_user.is_admin:
+                if c.rhodecode_user.user_id == safe_int(request.POST['user_id']):
+                    msg = _('Cannot revoke permission for yourself as admin')
+                    h.flash(msg, category='warning')
+                    raise Exception('revoke admin permission on self')
             recursive = str2bool(request.POST.get('recursive', False))
             ReposGroupModel().delete_permission(
                 repos_group=group_name, obj=request.POST['user_id'],
@@ -247,7 +301,7 @@
     @HasReposGroupPermissionAnyDecorator('group.admin')
     def delete_repos_group_users_group_perm(self, group_name):
         """
-        DELETE an existing repositories group permission users group
+        DELETE an existing repository group permission user group
 
         :param group_name:
         """
@@ -262,7 +316,7 @@
         except Exception:
             log.error(traceback.format_exc())
             h.flash(_('An error occurred during deletion of group'
-                      ' users groups'),
+                      ' user groups'),
                     category='error')
             raise HTTPInternalServerError()
 
@@ -279,11 +333,11 @@
 
     @HasReposGroupPermissionAnyDecorator('group.read', 'group.write',
                                          'group.admin')
-    def show(self, id, format='html'):
-        """GET /repos_groups/id: Show a specific item"""
-        # url('repos_group', id=ID)
+    def show(self, group_name, format='html'):
+        """GET /repos_groups/group_name: Show a specific item"""
+        # url('repos_group', group_name=GROUP_NAME)
 
-        c.group = RepoGroup.get_or_404(id)
+        c.group = c.repos_group = ReposGroupModel()._get_repos_group(group_name)
         c.group_repos = c.group.repositories.all()
 
         #overwrite our cached list with current filter
@@ -291,15 +345,15 @@
         c.repo_cnt = 0
 
         groups = RepoGroup.query().order_by(RepoGroup.group_name)\
-            .filter(RepoGroup.group_parent_id == id).all()
+            .filter(RepoGroup.group_parent_id == c.group.group_id).all()
         c.groups = self.scm_model.get_repos_groups(groups)
 
-        if c.visual.lightweight_dashboard is False:
+        if not c.visual.lightweight_dashboard:
             c.repos_list = self.scm_model.get_repos(all_repos=gr_filter)
         ## lightweight version of dashboard
         else:
             c.repos_list = Repository.query()\
-                            .filter(Repository.group_id == id)\
+                            .filter(Repository.group_id == c.group.group_id)\
                             .order_by(func.lower(Repository.repo_name))\
                             .all()
 
@@ -310,17 +364,25 @@
 
         return render('admin/repos_groups/repos_groups.html')
 
-    @HasPermissionAnyDecorator('hg.admin')
-    def edit(self, id, format='html'):
-        """GET /repos_groups/id/edit: Form to edit an existing item"""
-        # url('edit_repos_group', id=ID)
+    @HasReposGroupPermissionAnyDecorator('group.admin')
+    def edit(self, group_name, format='html'):
+        """GET /repos_groups/group_name/edit: Form to edit an existing item"""
+        # url('edit_repos_group', group_name=GROUP_NAME)
 
-        c.repos_group = ReposGroupModel()._get_repos_group(id)
-        defaults = self.__load_data(c.repos_group.group_id)
+        c.repos_group = ReposGroupModel()._get_repos_group(group_name)
+        #we can only allow moving empty group if it's already a top-level
+        #group, ie has no parents, or we're admin
+        if HasPermissionAll('hg.admin')('group edit'):
+            #we're global admin, we're ok and we can create TOP level groups
+            allow_empty_group = True
+        elif not c.repos_group.parent_group:
+            allow_empty_group = True
+        else:
+            allow_empty_group = False
 
-        # we need to exclude this group from the group list for editing
-        c.repo_groups = filter(lambda x: x[0] != c.repos_group.group_id,
-                               c.repo_groups)
+        self.__load_defaults(allow_empty_group=allow_empty_group,
+                             exclude_group_ids=[c.repos_group.group_id])
+        defaults = self.__load_data(c.repos_group.group_id)
 
         return htmlfill.render(
             render('admin/repos_groups/repos_groups_edit.html'),
--- a/rhodecode/controllers/admin/settings.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/controllers/admin/settings.py	Sun Apr 07 18:37:22 2013 +0200
@@ -37,7 +37,8 @@
 
 from rhodecode.lib import helpers as h
 from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator, \
-    HasPermissionAnyDecorator, NotAnonymous
+    HasPermissionAnyDecorator, NotAnonymous, HasPermissionAny,\
+    HasReposGroupPermissionAll, HasReposGroupPermissionAny, AuthUser
 from rhodecode.lib.base import BaseController, render
 from rhodecode.lib.celerylib import tasks, run_task
 from rhodecode.lib.utils import repo2db_mapper, invalidate_cache, \
@@ -46,7 +47,7 @@
     RhodeCodeSetting, PullRequest, PullRequestReviewers
 from rhodecode.model.forms import UserForm, ApplicationSettingsForm, \
     ApplicationUiSettingsForm, ApplicationVisualisationForm
-from rhodecode.model.scm import ScmModel
+from rhodecode.model.scm import ScmModel, GroupList
 from rhodecode.model.user import UserModel
 from rhodecode.model.repo import RepoModel
 from rhodecode.model.db import User
@@ -54,6 +55,7 @@
 from rhodecode.model.meta import Session
 from rhodecode.lib.utils2 import str2bool, safe_unicode
 from rhodecode.lib.compat import json
+from webob.exc import HTTPForbidden
 log = logging.getLogger(__name__)
 
 
@@ -165,7 +167,7 @@
 
             except Exception:
                 log.error(traceback.format_exc())
-                h.flash(_('error occurred during updating '
+                h.flash(_('Error occurred during updating '
                           'application settings'),
                           category='error')
 
@@ -204,6 +206,11 @@
                     form_result['rhodecode_lightweight_dashboard']
                 Session().add(sett4)
 
+                sett4 = RhodeCodeSetting.get_by_name_or_create('repository_fields')
+                sett4.app_settings_value = \
+                    form_result['rhodecode_repository_fields']
+                Session().add(sett4)
+
                 Session().commit()
                 set_rhodecode_config(config)
                 h.flash(_('Updated visualisation settings'),
@@ -211,7 +218,7 @@
 
             except Exception:
                 log.error(traceback.format_exc())
-                h.flash(_('error occurred during updating '
+                h.flash(_('Error occurred during updating '
                           'visualisation settings'),
                         category='error')
 
@@ -229,9 +236,6 @@
                 )
 
             try:
-                # fix namespaces for hooks and extensions
-                _f = lambda s: s.replace('.', '_')
-
                 sett = RhodeCodeUi.get_by_key('push_ssl')
                 sett.ui_value = form_result['web_push_ssl']
                 Session().add(sett)
@@ -242,23 +246,19 @@
 
                 #HOOKS
                 sett = RhodeCodeUi.get_by_key(RhodeCodeUi.HOOK_UPDATE)
-                sett.ui_active = form_result[_f('hooks_%s' %
-                                                RhodeCodeUi.HOOK_UPDATE)]
+                sett.ui_active = form_result['hooks_changegroup_update']
                 Session().add(sett)
 
                 sett = RhodeCodeUi.get_by_key(RhodeCodeUi.HOOK_REPO_SIZE)
-                sett.ui_active = form_result[_f('hooks_%s' %
-                                                RhodeCodeUi.HOOK_REPO_SIZE)]
+                sett.ui_active = form_result['hooks_changegroup_repo_size']
                 Session().add(sett)
 
                 sett = RhodeCodeUi.get_by_key(RhodeCodeUi.HOOK_PUSH)
-                sett.ui_active = form_result[_f('hooks_%s' %
-                                                RhodeCodeUi.HOOK_PUSH)]
+                sett.ui_active = form_result['hooks_changegroup_push_logger']
                 Session().add(sett)
 
                 sett = RhodeCodeUi.get_by_key(RhodeCodeUi.HOOK_PULL)
-                sett.ui_active = form_result[_f('hooks_%s' %
-                                                 RhodeCodeUi.HOOK_PULL)]
+                sett.ui_active = form_result['hooks_outgoing_pull_logger']
 
                 Session().add(sett)
 
@@ -269,7 +269,7 @@
                     sett = RhodeCodeUi()
                     sett.ui_key = 'largefiles'
                     sett.ui_section = 'extensions'
-                sett.ui_active = form_result[_f('extensions_largefiles')]
+                sett.ui_active = form_result['extensions_largefiles']
                 Session().add(sett)
 
                 sett = RhodeCodeUi.get_by_key('hgsubversion')
@@ -279,7 +279,7 @@
                     sett.ui_key = 'hgsubversion'
                     sett.ui_section = 'extensions'
 
-                sett.ui_active = form_result[_f('extensions_hgsubversion')]
+                sett.ui_active = form_result['extensions_hgsubversion']
                 Session().add(sett)
 
 #                sett = RhodeCodeUi.get_by_key('hggit')
@@ -289,7 +289,7 @@
 #                    sett.ui_key = 'hggit'
 #                    sett.ui_section = 'extensions'
 #
-#                sett.ui_active = form_result[_f('extensions_hggit')]
+#                sett.ui_active = form_result['extensions_hggit']
 #                Session().add(sett)
 
                 Session().commit()
@@ -298,7 +298,7 @@
 
             except Exception:
                 log.error(traceback.format_exc())
-                h.flash(_('error occurred during updating '
+                h.flash(_('Error occurred during updating '
                           'application settings'), category='error')
 
         if setting_id == 'hooks':
@@ -324,7 +324,7 @@
                 Session().commit()
             except Exception:
                 log.error(traceback.format_exc())
-                h.flash(_('error occurred during hook creation'),
+                h.flash(_('Error occurred during hook creation'),
                         category='error')
 
             return redirect(url('admin_edit_setting', setting_id='hooks'))
@@ -402,6 +402,8 @@
         # url('admin_settings_my_account')
 
         c.user = User.get(self.rhodecode_user.user_id)
+        c.perm_user = AuthUser(user_id=self.rhodecode_user.user_id,
+                               ip_addr=self.ip_addr)
         c.ldap_dn = c.user.ldap_dn
 
         if c.user.username == 'default':
@@ -433,6 +435,8 @@
         # url('admin_settings_my_account_update', id=ID)
         uid = self.rhodecode_user.user_id
         c.user = User.get(self.rhodecode_user.user_id)
+        c.perm_user = AuthUser(user_id=self.rhodecode_user.user_id,
+                               ip_addr=self.ip_addr)
         c.ldap_dn = c.user.ldap_dn
         email = self.rhodecode_user.email
         _form = UserForm(edit=True,
@@ -460,45 +464,32 @@
             return render('admin/users/user_edit_my_account.html')
         except Exception:
             log.error(traceback.format_exc())
-            h.flash(_('error occurred during update of user %s') \
+            h.flash(_('Error occurred during update of user %s') \
                     % form_result.get('username'), category='error')
 
         return redirect(url('my_account'))
 
     @NotAnonymous()
     def my_account_my_pullrequests(self):
-        c.my_pull_requests = PullRequest.query()\
+        c.show_closed = request.GET.get('pr_show_closed')
+
+        def _filter(pr):
+            s = sorted(pr, key=lambda o: o.created_on, reverse=True)
+            if not c.show_closed:
+                s = filter(lambda p: p.status != PullRequest.STATUS_CLOSED, s)
+            return s
+
+        c.my_pull_requests = _filter(PullRequest.query()\
                                 .filter(PullRequest.user_id ==
                                         self.rhodecode_user.user_id)\
-                                .all()
-        c.participate_in_pull_requests = \
-            [x.pull_request for x in PullRequestReviewers.query()\
-                                    .filter(PullRequestReviewers.user_id ==
-                                            self.rhodecode_user.user_id)\
-                                    .all()]
-        return render('admin/users/user_edit_my_account_pullrequests.html')
-
-    @NotAnonymous()
-    @HasPermissionAnyDecorator('hg.admin', 'hg.create.repository')
-    def create_repository(self):
-        """GET /_admin/create_repository: Form to create a new item"""
+                                .all())
 
-        c.repo_groups = RepoGroup.groups_choices(check_perms=True)
-        c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups)
-        choices, c.landing_revs = ScmModel().get_repo_landing_revs()
-
-        new_repo = request.GET.get('repo', '')
-        c.new_repo = repo_name_slug(new_repo)
+        c.participate_in_pull_requests = _filter([
+                    x.pull_request for x in PullRequestReviewers.query()\
+                    .filter(PullRequestReviewers.user_id ==
+                            self.rhodecode_user.user_id).all()])
 
-        ## apply the defaults from defaults page
-        defaults = RhodeCodeSetting.get_default_repo_settings(strip_prefix=True)
-        return htmlfill.render(
-            render('admin/repos/repo_add_create_repository.html'),
-            defaults=defaults,
-            errors={},
-            prefix_error=False,
-            encoding="UTF-8"
-        )
+        return render('admin/users/user_edit_my_account_pullrequests.html')
 
     def _get_hg_ui_settings(self):
         ret = RhodeCodeUi.query().all()
--- a/rhodecode/controllers/admin/users.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/controllers/admin/users.py	Sun Apr 07 18:37:22 2013 +0200
@@ -99,9 +99,9 @@
                 "lastname": user.lastname,
                 "last_login": h.fmt_date(user.last_login),
                 "last_login_raw": datetime_to_time(user.last_login),
-                "active": h.bool2icon(user.active),
-                "admin": h.bool2icon(user.admin),
-                "ldap": h.bool2icon(bool(user.ldap_dn)),
+                "active": h.boolicon(user.active),
+                "admin": h.boolicon(user.admin),
+                "ldap": h.boolicon(bool(user.ldap_dn)),
                 "action": user_actions(user.user_id, user.username),
             })
 
@@ -127,7 +127,7 @@
             usr = form_result['username']
             action_logger(self.rhodecode_user, 'admin_created_user:%s' % usr,
                           None, self.ip_addr, self.sa)
-            h.flash(_('created user %s') % usr,
+            h.flash(_('Created user %s') % usr,
                     category='success')
             Session().commit()
         except formencode.Invalid, errors:
@@ -139,7 +139,7 @@
                 encoding="UTF-8")
         except Exception:
             log.error(traceback.format_exc())
-            h.flash(_('error occurred during creation of user %s') \
+            h.flash(_('Error occurred during creation of user %s') \
                     % request.POST.get('username'), category='error')
         return redirect(url('users'))
 
@@ -195,7 +195,7 @@
                 encoding="UTF-8")
         except Exception:
             log.error(traceback.format_exc())
-            h.flash(_('error occurred during update of user %s') \
+            h.flash(_('Error occurred during update of user %s') \
                     % form_result.get('username'), category='error')
         return redirect(url('edit_user', id=id))
 
@@ -211,7 +211,7 @@
         try:
             UserModel().delete(usr)
             Session().commit()
-            h.flash(_('successfully deleted user'), category='success')
+            h.flash(_('Successfully deleted user'), category='success')
         except (UserOwnsReposException, DefaultUserException), e:
             h.flash(e, category='warning')
         except Exception:
--- a/rhodecode/controllers/admin/users_groups.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/controllers/admin/users_groups.py	Sun Apr 07 18:37:22 2013 +0200
@@ -3,7 +3,7 @@
     rhodecode.controllers.admin.users_groups
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-    Users Groups crud controller for pylons
+    User Groups crud controller for pylons
 
     :created_on: Jan 25, 2011
     :author: marcink
@@ -33,16 +33,16 @@
 from pylons.i18n.translation import _
 
 from rhodecode.lib import helpers as h
-from rhodecode.lib.exceptions import UsersGroupsAssignedException
+from rhodecode.lib.exceptions import UserGroupsAssignedException
 from rhodecode.lib.utils2 import safe_unicode, str2bool
 from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator
 from rhodecode.lib.base import BaseController, render
 
-from rhodecode.model.users_group import UsersGroupModel
+from rhodecode.model.users_group import UserGroupModel
 
-from rhodecode.model.db import User, UsersGroup, UsersGroupToPerm,\
-    UsersGroupRepoToPerm, UsersGroupRepoGroupToPerm
-from rhodecode.model.forms import UsersGroupForm
+from rhodecode.model.db import User, UserGroup, UserGroupToPerm,\
+    UserGroupRepoToPerm, UserGroupRepoGroupToPerm
+from rhodecode.model.forms import UserGroupForm
 from rhodecode.model.meta import Session
 from rhodecode.lib.utils import action_logger
 from sqlalchemy.orm import joinedload
@@ -67,23 +67,23 @@
     def index(self, format='html'):
         """GET /users_groups: All items in the collection"""
         # url('users_groups')
-        c.users_groups_list = UsersGroup().query().all()
+        c.users_groups_list = UserGroup().query().all()
         return render('admin/users_groups/users_groups.html')
 
     def create(self):
         """POST /users_groups: Create a new item"""
         # url('users_groups')
 
-        users_group_form = UsersGroupForm()()
+        users_group_form = UserGroupForm()()
         try:
             form_result = users_group_form.to_python(dict(request.POST))
-            UsersGroupModel().create(name=form_result['users_group_name'],
+            UserGroupModel().create(name=form_result['users_group_name'],
                                      active=form_result['users_group_active'])
             gr = form_result['users_group_name']
             action_logger(self.rhodecode_user,
                           'admin_created_users_group:%s' % gr,
                           None, self.ip_addr, self.sa)
-            h.flash(_('created users group %s') % gr, category='success')
+            h.flash(_('Created user group %s') % gr, category='success')
             Session().commit()
         except formencode.Invalid, errors:
             return htmlfill.render(
@@ -94,7 +94,7 @@
                 encoding="UTF-8")
         except Exception:
             log.error(traceback.format_exc())
-            h.flash(_('error occurred during creation of users group %s') \
+            h.flash(_('Error occurred during creation of user group %s') \
                     % request.POST.get('users_group_name'), category='error')
 
         return redirect(url('users_groups'))
@@ -110,31 +110,33 @@
             'repositories_groups': {}
         }
 
-        ugroup_repo_perms = UsersGroupRepoToPerm.query()\
-            .options(joinedload(UsersGroupRepoToPerm.permission))\
-            .options(joinedload(UsersGroupRepoToPerm.repository))\
-            .filter(UsersGroupRepoToPerm.users_group_id == id)\
+        ugroup_repo_perms = UserGroupRepoToPerm.query()\
+            .options(joinedload(UserGroupRepoToPerm.permission))\
+            .options(joinedload(UserGroupRepoToPerm.repository))\
+            .filter(UserGroupRepoToPerm.users_group_id == id)\
             .all()
 
         for gr in ugroup_repo_perms:
             c.users_group.permissions['repositories'][gr.repository.repo_name]  \
                 = gr.permission.permission_name
 
-        ugroup_group_perms = UsersGroupRepoGroupToPerm.query()\
-            .options(joinedload(UsersGroupRepoGroupToPerm.permission))\
-            .options(joinedload(UsersGroupRepoGroupToPerm.group))\
-            .filter(UsersGroupRepoGroupToPerm.users_group_id == id)\
+        ugroup_group_perms = UserGroupRepoGroupToPerm.query()\
+            .options(joinedload(UserGroupRepoGroupToPerm.permission))\
+            .options(joinedload(UserGroupRepoGroupToPerm.group))\
+            .filter(UserGroupRepoGroupToPerm.users_group_id == id)\
             .all()
 
         for gr in ugroup_group_perms:
             c.users_group.permissions['repositories_groups'][gr.group.group_name] \
                 = gr.permission.permission_name
 
-        c.group_members_obj = [x.user for x in c.users_group.members]
+        c.group_members_obj = sorted((x.user for x in c.users_group.members),
+                                     key=lambda u: u.username.lower())
         c.group_members = [(x.user_id, x.username) for x in
                            c.group_members_obj]
-        c.available_members = [(x.user_id, x.username) for x in
-                               User.query().all()]
+        c.available_members = sorted(((x.user_id, x.username) for x in
+                                      User.query().all()),
+                                     key=lambda u: u[1].lower())
 
     def update(self, id):
         """PUT /users_groups/id: Update an existing item"""
@@ -145,26 +147,26 @@
         #           method='put')
         # url('users_group', id=ID)
 
-        c.users_group = UsersGroup.get_or_404(id)
+        c.users_group = UserGroup.get_or_404(id)
         self._load_data(id)
 
         available_members = [safe_unicode(x[0]) for x in c.available_members]
 
-        users_group_form = UsersGroupForm(edit=True,
+        users_group_form = UserGroupForm(edit=True,
                                           old_data=c.users_group.get_dict(),
                                           available_members=available_members)()
 
         try:
             form_result = users_group_form.to_python(request.POST)
-            UsersGroupModel().update(c.users_group, form_result)
+            UserGroupModel().update(c.users_group, form_result)
             gr = form_result['users_group_name']
             action_logger(self.rhodecode_user,
                           'admin_updated_users_group:%s' % gr,
                           None, self.ip_addr, self.sa)
-            h.flash(_('updated users group %s') % gr, category='success')
+            h.flash(_('Updated user group %s') % gr, category='success')
             Session().commit()
         except formencode.Invalid, errors:
-            ug_model = UsersGroupModel()
+            ug_model = UserGroupModel()
             defaults = errors.value
             e = errors.error_dict or {}
             defaults.update({
@@ -183,7 +185,7 @@
                 encoding="UTF-8")
         except Exception:
             log.error(traceback.format_exc())
-            h.flash(_('error occurred during update of users group %s') \
+            h.flash(_('Error occurred during update of user group %s') \
                     % request.POST.get('users_group_name'), category='error')
 
         return redirect(url('edit_users_group', id=id))
@@ -196,16 +198,16 @@
         #    h.form(url('users_group', id=ID),
         #           method='delete')
         # url('users_group', id=ID)
-        usr_gr = UsersGroup.get_or_404(id)
+        usr_gr = UserGroup.get_or_404(id)
         try:
-            UsersGroupModel().delete(usr_gr)
+            UserGroupModel().delete(usr_gr)
             Session().commit()
-            h.flash(_('successfully deleted users group'), category='success')
-        except UsersGroupsAssignedException, e:
+            h.flash(_('Successfully deleted user group'), category='success')
+        except UserGroupsAssignedException, e:
             h.flash(e, category='error')
         except Exception:
             log.error(traceback.format_exc())
-            h.flash(_('An error occurred during deletion of users group'),
+            h.flash(_('An error occurred during deletion of user group'),
                     category='error')
         return redirect(url('users_groups'))
 
@@ -217,10 +219,10 @@
         """GET /users_groups/id/edit: Form to edit an existing item"""
         # url('edit_users_group', id=ID)
 
-        c.users_group = UsersGroup.get_or_404(id)
+        c.users_group = UserGroup.get_or_404(id)
         self._load_data(id)
 
-        ug_model = UsersGroupModel()
+        ug_model = UserGroupModel()
         defaults = c.users_group.get_dict()
         defaults.update({
             'create_repo_perm': ug_model.has_perm(c.users_group,
@@ -240,37 +242,37 @@
         """PUT /users_perm/id: Update an existing item"""
         # url('users_group_perm', id=ID, method='put')
 
-        users_group = UsersGroup.get_or_404(id)
+        users_group = UserGroup.get_or_404(id)
         grant_create_perm = str2bool(request.POST.get('create_repo_perm'))
         grant_fork_perm = str2bool(request.POST.get('fork_repo_perm'))
         inherit_perms = str2bool(request.POST.get('inherit_default_permissions'))
 
-        usersgroup_model = UsersGroupModel()
+        usergroup_model = UserGroupModel()
 
         try:
             users_group.inherit_default_permissions = inherit_perms
             Session().add(users_group)
 
             if grant_create_perm:
-                usersgroup_model.revoke_perm(id, 'hg.create.none')
-                usersgroup_model.grant_perm(id, 'hg.create.repository')
-                h.flash(_("Granted 'repository create' permission to users group"),
+                usergroup_model.revoke_perm(id, 'hg.create.none')
+                usergroup_model.grant_perm(id, 'hg.create.repository')
+                h.flash(_("Granted 'repository create' permission to user group"),
                         category='success')
             else:
-                usersgroup_model.revoke_perm(id, 'hg.create.repository')
-                usersgroup_model.grant_perm(id, 'hg.create.none')
-                h.flash(_("Revoked 'repository create' permission to users group"),
+                usergroup_model.revoke_perm(id, 'hg.create.repository')
+                usergroup_model.grant_perm(id, 'hg.create.none')
+                h.flash(_("Revoked 'repository create' permission to user group"),
                         category='success')
 
             if grant_fork_perm:
-                usersgroup_model.revoke_perm(id, 'hg.fork.none')
-                usersgroup_model.grant_perm(id, 'hg.fork.repository')
-                h.flash(_("Granted 'repository fork' permission to users group"),
+                usergroup_model.revoke_perm(id, 'hg.fork.none')
+                usergroup_model.grant_perm(id, 'hg.fork.repository')
+                h.flash(_("Granted 'repository fork' permission to user group"),
                         category='success')
             else:
-                usersgroup_model.revoke_perm(id, 'hg.fork.repository')
-                usersgroup_model.grant_perm(id, 'hg.fork.none')
-                h.flash(_("Revoked 'repository fork' permission to users group"),
+                usergroup_model.revoke_perm(id, 'hg.fork.repository')
+                usergroup_model.grant_perm(id, 'hg.fork.none')
+                h.flash(_("Revoked 'repository fork' permission to user group"),
                         category='success')
 
             Session().commit()
--- a/rhodecode/controllers/api/api.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/controllers/api/api.py	Sun Apr 07 18:37:22 2013 +0200
@@ -27,20 +27,22 @@
 
 import traceback
 import logging
-from pylons.controllers.util import abort
 
 from rhodecode.controllers.api import JSONRPCController, JSONRPCError
 from rhodecode.lib.auth import PasswordGenerator, AuthUser, \
     HasPermissionAllDecorator, HasPermissionAnyDecorator, \
     HasPermissionAnyApi, HasRepoPermissionAnyApi
 from rhodecode.lib.utils import map_groups, repo2db_mapper
+from rhodecode.lib.utils2 import str2bool, time_to_datetime, safe_int
+from rhodecode.lib import helpers as h
 from rhodecode.model.meta import Session
 from rhodecode.model.scm import ScmModel
 from rhodecode.model.repo import RepoModel
 from rhodecode.model.user import UserModel
-from rhodecode.model.users_group import UsersGroupModel
+from rhodecode.model.users_group import UserGroupModel
 from rhodecode.model.permission import PermissionModel
 from rhodecode.model.db import Repository, RhodeCodeSetting, UserIpMap
+from rhodecode.lib.compat import json
 
 log = logging.getLogger(__name__)
 
@@ -121,13 +123,13 @@
 
 def get_users_group_or_error(usersgroupid):
     """
-    Get users group by id or name or return JsonRPCError if not found
+    Get user group by id or name or return JsonRPCError if not found
 
     :param userid:
     """
-    users_group = UsersGroupModel().get_group(usersgroupid)
+    users_group = UserGroupModel().get_group(usersgroupid)
     if users_group is None:
-        raise JSONRPCError('users group `%s` does not exist' % usersgroupid)
+        raise JSONRPCError('user group `%s` does not exist' % usersgroupid)
     return users_group
 
 
@@ -202,7 +204,34 @@
                 'Error occurred during rescan repositories action'
             )
 
-    def lock(self, apiuser, repoid, locked, userid=Optional(OAttr('apiuser'))):
+    def invalidate_cache(self, apiuser, repoid):
+        """
+        Dispatch cache invalidation action on given repo
+
+        :param apiuser:
+        :param repoid:
+        """
+        repo = get_repo_or_error(repoid)
+        if HasPermissionAnyApi('hg.admin')(user=apiuser) is False:
+            # check if we have admin permission for this repo !
+            if HasRepoPermissionAnyApi('repository.admin',
+                                       'repository.write')(user=apiuser,
+                                            repo_name=repo.repo_name) is False:
+                raise JSONRPCError('repository `%s` does not exist' % (repoid))
+
+        try:
+            invalidated_keys = ScmModel().mark_for_invalidation(repo.repo_name)
+            Session().commit()
+            return ('Cache for repository `%s` was invalidated: '
+                    'invalidated cache keys: %s' % (repoid, invalidated_keys))
+        except Exception:
+            log.error(traceback.format_exc())
+            raise JSONRPCError(
+                'Error occurred during cache invalidation action'
+            )
+
+    def lock(self, apiuser, repoid, locked=Optional(None),
+             userid=Optional(OAttr('apiuser'))):
         """
         Set locking state on particular repository by given user, if
         this command is runned by non-admin account userid is set to user
@@ -230,21 +259,77 @@
 
         if isinstance(userid, Optional):
             userid = apiuser.user_id
+
         user = get_user_or_error(userid)
-        locked = bool(locked)
-        try:
-            if locked:
-                Repository.lock(repo, user.user_id)
+
+        if isinstance(locked, Optional):
+            lockobj = Repository.getlock(repo)
+
+            if lockobj[0] is None:
+                return ('Repo `%s` not locked. Locked=`False`.'
+                        % (repo.repo_name))
             else:
-                Repository.unlock(repo)
+                userid, time_ = lockobj
+                user = get_user_or_error(userid)
+
+                return ('Repo `%s` locked by `%s`. Locked=`True`. '
+                        'Locked since: `%s`'
+                    % (repo.repo_name, user.username,
+                       json.dumps(time_to_datetime(time_))))
+
+        else:
+            locked = str2bool(locked)
+            try:
+                if locked:
+                    Repository.lock(repo, user.user_id)
+                else:
+                    Repository.unlock(repo)
+
+                return ('User `%s` set lock state for repo `%s` to `%s`'
+                        % (user.username, repo.repo_name, locked))
+            except Exception:
+                log.error(traceback.format_exc())
+                raise JSONRPCError(
+                    'Error occurred locking repository `%s`' % repo.repo_name
+                )
 
-            return ('User `%s` set lock state for repo `%s` to `%s`'
-                    % (user.username, repo.repo_name, locked))
-        except Exception:
-            log.error(traceback.format_exc())
-            raise JSONRPCError(
-                'Error occurred locking repository `%s`' % repo.repo_name
-            )
+    def get_locks(self, apiuser, userid=Optional(OAttr('apiuser'))):
+        """
+        Get all locks for given userid, if
+        this command is runned by non-admin account userid is set to user
+        who is calling this method, thus returning locks for himself
+
+        :param apiuser:
+        :param userid:
+        """
+        if HasPermissionAnyApi('hg.admin')(user=apiuser):
+            pass
+        else:
+            #make sure normal user does not pass someone else userid,
+            #he is not allowed to do that
+            if not isinstance(userid, Optional) and userid != apiuser.user_id:
+                raise JSONRPCError(
+                    'userid is not the same as your user'
+                )
+        ret = []
+        if isinstance(userid, Optional):
+            user = None
+        else:
+            user = get_user_or_error(userid)
+
+        #show all locks
+        for r in Repository.getAll():
+            userid, time_ = r.locked
+            if time_:
+                _api_data = r.get_api_data()
+                # if we use userfilter just show the locks for this user
+                if user:
+                    if safe_int(userid) == user.user_id:
+                        ret.append(_api_data)
+                else:
+                    ret.append(_api_data)
+
+        return ret
 
     @HasPermissionAllDecorator('hg.admin')
     def show_ip(self, apiuser, userid):
@@ -423,7 +508,7 @@
     @HasPermissionAllDecorator('hg.admin')
     def get_users_group(self, apiuser, usersgroupid):
         """"
-        Get users group by name or id
+        Get user group by name or id
 
         :param apiuser:
         :param usersgroupid:
@@ -442,13 +527,13 @@
     @HasPermissionAllDecorator('hg.admin')
     def get_users_groups(self, apiuser):
         """"
-        Get all users groups
+        Get all user groups
 
         :param apiuser:
         """
 
         result = []
-        for users_group in UsersGroupModel().get_all():
+        for users_group in UserGroupModel().get_all():
             result.append(users_group.get_api_data())
         return result
 
@@ -462,15 +547,15 @@
         :param active:
         """
 
-        if UsersGroupModel().get_by_name(group_name):
-            raise JSONRPCError("users group `%s` already exist" % group_name)
+        if UserGroupModel().get_by_name(group_name):
+            raise JSONRPCError("user group `%s` already exist" % group_name)
 
         try:
             active = Optional.extract(active)
-            ug = UsersGroupModel().create(name=group_name, active=active)
+            ug = UserGroupModel().create(name=group_name, active=active)
             Session().commit()
             return dict(
-                msg='created new users group `%s`' % group_name,
+                msg='created new user group `%s`' % group_name,
                 users_group=ug.get_api_data()
             )
         except Exception:
@@ -480,7 +565,7 @@
     @HasPermissionAllDecorator('hg.admin')
     def add_user_to_users_group(self, apiuser, usersgroupid, userid):
         """"
-        Add a user to a users group
+        Add a user to a user group
 
         :param apiuser:
         :param usersgroupid:
@@ -490,9 +575,9 @@
         users_group = get_users_group_or_error(usersgroupid)
 
         try:
-            ugm = UsersGroupModel().add_user_to_group(users_group, user)
+            ugm = UserGroupModel().add_user_to_group(users_group, user)
             success = True if ugm != True else False
-            msg = 'added member `%s` to users group `%s`' % (
+            msg = 'added member `%s` to user group `%s`' % (
                         user.username, users_group.users_group_name
                     )
             msg = msg if success else 'User is already in that group'
@@ -505,7 +590,7 @@
         except Exception:
             log.error(traceback.format_exc())
             raise JSONRPCError(
-                'failed to add member to users group `%s`' % (
+                'failed to add member to user group `%s`' % (
                     users_group.users_group_name
                 )
             )
@@ -523,9 +608,9 @@
         users_group = get_users_group_or_error(usersgroupid)
 
         try:
-            success = UsersGroupModel().remove_user_from_group(users_group,
+            success = UserGroupModel().remove_user_from_group(users_group,
                                                                user)
-            msg = 'removed member `%s` from users group `%s`' % (
+            msg = 'removed member `%s` from user group `%s`' % (
                         user.username, users_group.users_group_name
                     )
             msg = msg if success else "User wasn't in group"
@@ -534,7 +619,7 @@
         except Exception:
             log.error(traceback.format_exc())
             raise JSONRPCError(
-                'failed to remove member from users group `%s`' % (
+                'failed to remove member from user group `%s`' % (
                         users_group.users_group_name
                     )
             )
@@ -555,6 +640,7 @@
                 raise JSONRPCError('repository `%s` does not exist' % (repoid))
 
         members = []
+        followers = []
         for user in repo.repo_to_perm:
             perm = user.permission.permission_name
             user = user.user
@@ -571,8 +657,12 @@
             users_group_data['permission'] = perm
             members.append(users_group_data)
 
+        for user in repo.followers:
+            followers.append(user.user.get_api_data())
+
         data = repo.get_api_data()
         data['members'] = members
+        data['followers'] = followers
         return data
 
     def get_repos(self, apiuser):
@@ -763,12 +853,13 @@
                                                             fork_name)
             )
 
-    def delete_repo(self, apiuser, repoid):
+    def delete_repo(self, apiuser, repoid, forks=Optional(None)):
         """
         Deletes a given repository
 
         :param apiuser:
         :param repoid:
+        :param forks: detach or delete, what do do with attached forks for repo
         """
         repo = get_repo_or_error(repoid)
 
@@ -776,13 +867,26 @@
             # check if we have admin permission for this repo !
             if HasRepoPermissionAnyApi('repository.admin')(user=apiuser,
                                             repo_name=repo.repo_name) is False:
-                 raise JSONRPCError('repository `%s` does not exist' % (repoid))
+                raise JSONRPCError('repository `%s` does not exist' % (repoid))
 
         try:
-            RepoModel().delete(repo)
+            handle_forks = Optional.extract(forks)
+            _forks_msg = ''
+            _forks = [f for f in repo.forks]
+            if handle_forks == 'detach':
+                _forks_msg = ' ' + _('Detached %s forks') % len(_forks)
+            elif handle_forks == 'delete':
+                _forks_msg = ' ' + _('Deleted %s forks') % len(_forks)
+            elif _forks:
+                raise JSONRPCError(
+                    'Cannot delete `%s` it still contains attached forks'
+                    % repo.repo_name
+                )
+
+            RepoModel().delete(repo, forks=forks)
             Session().commit()
             return dict(
-                msg='Deleted repository `%s`' % repo.repo_name,
+                msg='Deleted repository `%s`%s' % (repo.repo_name, _forks_msg),
                 success=True
             )
         except Exception:
@@ -859,7 +963,7 @@
     def grant_users_group_permission(self, apiuser, repoid, usersgroupid,
                                      perm):
         """
-        Grant permission for users group on given repository, or update
+        Grant permission for user group on given repository, or update
         existing one if found
 
         :param apiuser:
@@ -878,7 +982,7 @@
 
             Session().commit()
             return dict(
-                msg='Granted perm: `%s` for users group: `%s` in '
+                msg='Granted perm: `%s` for user group: `%s` in '
                     'repo: `%s`' % (
                     perm.permission_name, users_group.users_group_name,
                     repo.repo_name
@@ -888,7 +992,7 @@
         except Exception:
             log.error(traceback.format_exc())
             raise JSONRPCError(
-                'failed to edit permission for users group: `%s` in '
+                'failed to edit permission for user group: `%s` in '
                 'repo: `%s`' % (
                     usersgroupid, repo.repo_name
                 )
@@ -897,7 +1001,7 @@
     @HasPermissionAllDecorator('hg.admin')
     def revoke_users_group_permission(self, apiuser, repoid, usersgroupid):
         """
-        Revoke permission for users group on given repository
+        Revoke permission for user group on given repository
 
         :param apiuser:
         :param repoid:
@@ -912,7 +1016,7 @@
 
             Session().commit()
             return dict(
-                msg='Revoked perm for users group: `%s` in repo: `%s`' % (
+                msg='Revoked perm for user group: `%s` in repo: `%s`' % (
                     users_group.users_group_name, repo.repo_name
                 ),
                 success=True
@@ -920,7 +1024,7 @@
         except Exception:
             log.error(traceback.format_exc())
             raise JSONRPCError(
-                'failed to edit permission for users group: `%s` in '
+                'failed to edit permission for user group: `%s` in '
                 'repo: `%s`' % (
                     users_group.users_group_name, repo.repo_name
                 )
--- a/rhodecode/controllers/changelog.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/controllers/changelog.py	Sun Apr 07 18:37:22 2013 +0200
@@ -86,8 +86,8 @@
             c.statuses = c.rhodecode_db_repo.statuses(page_revisions)
         except (RepositoryError, ChangesetDoesNotExistError, Exception), e:
             log.error(traceback.format_exc())
-            h.flash(str(e), category='warning')
-            return redirect(url('home'))
+            h.flash(str(e), category='error')
+            return redirect(url('changelog_home', repo_name=c.repo_name))
 
         self._graph(c.rhodecode_repo, collection, c.total_cs, c.size, p)
 
--- a/rhodecode/controllers/changeset.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/controllers/changeset.py	Sun Apr 07 18:37:22 2013 +0200
@@ -26,7 +26,7 @@
 import logging
 import traceback
 from collections import defaultdict
-from webob.exc import HTTPForbidden, HTTPBadRequest
+from webob.exc import HTTPForbidden, HTTPBadRequest, HTTPNotFound
 
 from pylons import tmpl_context as c, url, request, response
 from pylons.i18n.translation import _
@@ -71,7 +71,7 @@
     if ig_ws:
         try:
             return int(ig_ws[0].split(':')[-1])
-        except:
+        except Exception:
             pass
     return ig_ws_global
 
@@ -80,21 +80,21 @@
     fileid = str(fileid) if fileid else None
     params = defaultdict(list)
     _update_with_GET(params, GET)
-    lbl = _('show white space')
+    lbl = _('Show white space')
     ig_ws = get_ignore_ws(fileid, GET)
     ln_ctx = get_line_ctx(fileid, GET)
     # global option
     if fileid is None:
         if ig_ws is None:
             params['ignorews'] += [1]
-            lbl = _('ignore white space')
+            lbl = _('Ignore white space')
         ctx_key = 'context'
         ctx_val = ln_ctx
     # per file options
     else:
         if ig_ws is None:
             params[fileid] += ['WS:1']
-            lbl = _('ignore white space')
+            lbl = _('Ignore white space')
 
         ctx_key = fileid
         ctx_val = 'C:%s' % ln_ctx
@@ -124,7 +124,7 @@
 
     try:
         return int(retval)
-    except:
+    except Exception:
         return 3
 
 
@@ -203,8 +203,8 @@
 
         except (RepositoryError, ChangesetDoesNotExistError, Exception), e:
             log.error(traceback.format_exc())
-            h.flash(str(e), category='warning')
-            return redirect(url('home'))
+            h.flash(str(e), category='error')
+            raise HTTPNotFound()
 
         c.changes = OrderedDict()
 
@@ -329,7 +329,7 @@
             text = text or (_('Status change -> %s')
                             % ChangesetStatus.get_status_lbl(status))
 
-        comm = ChangesetCommentsModel().create(
+        c.co = comm = ChangesetCommentsModel().create(
             text=text,
             repo=c.rhodecode_db_repo.repo_id,
             user=c.rhodecode_user.user_id,
@@ -371,12 +371,11 @@
         if not request.environ.get('HTTP_X_PARTIAL_XHR'):
             return redirect(h.url('changeset_home', repo_name=repo_name,
                                   revision=revision))
-
+        #only ajax below
         data = {
            'target_id': h.safeid(h.safe_unicode(request.POST.get('f_path'))),
         }
         if comm:
-            c.co = comm
             data.update(comm.get_dict())
             data.update({'rendered_text':
                          render('changeset/changeset_comment_block.html')})
--- a/rhodecode/controllers/compare.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/controllers/compare.py	Sun Apr 07 18:37:22 2013 +0200
@@ -3,7 +3,7 @@
     rhodecode.controllers.compare
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-    compare controller for pylons showoing differences between two
+    compare controller for pylons showing differences between two
     repos, branches, bookmarks or tips
 
     :created_on: May 6, 2012
@@ -40,7 +40,6 @@
 from rhodecode.model.db import Repository
 from rhodecode.model.pull_request import PullRequestModel
 from webob.exc import HTTPBadRequest
-from rhodecode.lib.utils2 import str2bool
 from rhodecode.lib.diffs import LimitedDiffContainer
 from rhodecode.lib.vcs.backends.base import EmptyChangeset
 
@@ -84,80 +83,85 @@
             raise HTTPBadRequest()
 
     def index(self, org_ref_type, org_ref, other_ref_type, other_ref):
-
+        # org_ref will be evaluated in org_repo
         org_repo = c.rhodecode_db_repo.repo_name
         org_ref = (org_ref_type, org_ref)
+        # other_ref will be evaluated in other_repo
         other_ref = (other_ref_type, other_ref)
-        other_repo = request.GET.get('repo', org_repo)
-        incoming_changesets = str2bool(request.GET.get('bundle', False))
-        c.fulldiff = fulldiff = request.GET.get('fulldiff')
-        rev_start = request.GET.get('rev_start')
-        rev_end = request.GET.get('rev_end')
+        other_repo = request.GET.get('other_repo', org_repo)
+        # If merge is True:
+        #   Show what org would get if merged with other:
+        #   List changesets that are ancestors of other but not of org.
+        #   New changesets in org is thus ignored.
+        #   Diff will be from common ancestor, and merges of org to other will thus be ignored.
+        # If merge is False:
+        #   Make a raw diff from org to other, no matter if related or not.
+        #   Changesets in one and not in the other will be ignored
+        merge = bool(request.GET.get('merge'))
+        # fulldiff disables cut_off_limit
+        c.fulldiff = request.GET.get('fulldiff')
+        # partial uses compare_cs.html template directly
+        partial = request.environ.get('HTTP_X_PARTIAL_XHR')
+        # as_form puts hidden input field with changeset revisions
+        c.as_form = partial and request.GET.get('as_form')
+        # swap url for compare_diff page - never partial and never as_form
+        c.swap_url = h.url('compare_url',
+            repo_name=other_repo,
+            org_ref_type=other_ref[0], org_ref=other_ref[1],
+            other_repo=org_repo,
+            other_ref_type=org_ref[0], other_ref=org_ref[1],
+            merge=merge or '')
 
-        c.swap_url = h.url('compare_url', repo_name=other_repo,
-              org_ref_type=other_ref[0], org_ref=other_ref[1],
-              other_ref_type=org_ref[0], other_ref=org_ref[1],
-              repo=org_repo, as_form=request.GET.get('as_form'),
-              bundle=incoming_changesets)
+        org_repo = Repository.get_by_repo_name(org_repo)
+        other_repo = Repository.get_by_repo_name(other_repo)
 
-        c.org_repo = org_repo = Repository.get_by_repo_name(org_repo)
-        c.other_repo = other_repo = Repository.get_by_repo_name(other_repo)
-
-        if c.org_repo is None:
+        if org_repo is None:
             log.error('Could not find org repo %s' % org_repo)
             raise HTTPNotFound
-        if c.other_repo is None:
+        if other_repo is None:
             log.error('Could not find other repo %s' % other_repo)
             raise HTTPNotFound
 
-        if c.org_repo != c.other_repo and h.is_git(c.rhodecode_repo):
+        if org_repo != other_repo and h.is_git(org_repo):
             log.error('compare of two remote repos not available for GIT REPOS')
             raise HTTPNotFound
 
-        if c.org_repo.scm_instance.alias != c.other_repo.scm_instance.alias:
+        if org_repo.scm_instance.alias != other_repo.scm_instance.alias:
             log.error('compare of two different kind of remote repos not available')
             raise HTTPNotFound
 
-        partial = request.environ.get('HTTP_X_PARTIAL_XHR')
         self.__get_cs_or_redirect(rev=org_ref, repo=org_repo, partial=partial)
         self.__get_cs_or_redirect(rev=other_ref, repo=other_repo, partial=partial)
 
-        if rev_start and rev_end:
-            #replace our org_ref with given CS
-            org_ref = ('rev', rev_start)
-            other_ref = ('rev', rev_end)
+        c.org_repo = org_repo
+        c.other_repo = other_repo
+        c.org_ref = org_ref[1]
+        c.other_ref = other_ref[1]
+        c.org_ref_type = org_ref[0]
+        c.other_ref_type = other_ref[0]
 
-        c.cs_ranges, discovery_data = PullRequestModel().get_compare_data(
-                                    org_repo, org_ref, other_repo, other_ref,
-                                    )
+        c.cs_ranges, c.ancestor = PullRequestModel().get_compare_data(
+            org_repo, org_ref, other_repo, other_ref, merge)
 
         c.statuses = c.rhodecode_db_repo.statuses([x.raw_id for x in
                                                    c.cs_ranges])
-        c.target_repo = c.repo_name
-        # defines that we need hidden inputs with changesets
-        c.as_form = request.GET.get('as_form', False)
         if partial:
+            assert c.ancestor
             return render('compare/compare_cs.html')
 
-        c.org_ref = org_ref[1]
-        c.other_ref = other_ref[1]
+        if c.ancestor:
+            assert merge
+            # case we want a simple diff without incoming changesets,
+            # previewing what will be merged.
+            # Make the diff on the other repo (which is known to have other_ref)
+            log.debug('Using ancestor %s as org_ref instead of %s'
+                      % (c.ancestor, org_ref))
+            org_ref = ('rev', c.ancestor)
+            org_repo = other_repo
 
-        if not incoming_changesets and c.cs_ranges and c.org_repo != c.other_repo:
-            # case we want a simple diff without incoming changesets, just
-            # for review purposes. Make the diff on the forked repo, with
-            # revision that is common ancestor
-            _org_ref = org_ref
-            org_ref = ('rev', getattr(c.cs_ranges[0].parents[0]
-                                      if c.cs_ranges[0].parents
-                                      else EmptyChangeset(), 'raw_id'))
-            log.debug('Changed org_ref from %s to %s' % (_org_ref, org_ref))
-            other_repo = org_repo
+        diff_limit = self.cut_off_limit if not c.fulldiff else None
 
-        diff_limit = self.cut_off_limit if not fulldiff else None
-
-        _diff = diffs.differ(org_repo, org_ref, other_repo, other_ref,
-                             discovery_data,
-                             remote_compare=incoming_changesets)
+        _diff = diffs.differ(org_repo, org_ref, other_repo, other_ref)
 
         diff_processor = diffs.DiffProcessor(_diff or '', format='gitdiff',
                                              diff_limit=diff_limit)
--- a/rhodecode/controllers/error.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/controllers/error.py	Sun Apr 07 18:37:22 2013 +0200
@@ -91,7 +91,7 @@
             [400, 401, 403, 404, 500]'''
         try:
             code = int(code)
-        except:
+        except Exception:
             code = 500
 
         if code == 400:
--- a/rhodecode/controllers/feed.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/controllers/feed.py	Sun Apr 07 18:37:22 2013 +0200
@@ -88,9 +88,8 @@
 
     def __get_desc(self, cs):
         desc_msg = []
-        desc_msg.append('%s %s %s<br/>' % (h.person(cs.author),
-                                           _('commited on'),
-                                           h.fmt_date(cs.date)))
+        desc_msg.append((_('%s committed on %s')
+                         % (h.person(cs.author), h.fmt_date(cs.date))) + '<br/>')
         #branches, tags, bookmarks
         if cs.branch:
             desc_msg.append('branch: %s<br/>' % cs.branch)
@@ -103,7 +102,7 @@
         # rev link
         _url = url('changeset_home', repo_name=cs.repository.name,
                    revision=cs.raw_id, qualified=True)
-        desc_msg.append('changesest: <a href="%s">%s</a>' % (_url, cs.raw_id[:8]))
+        desc_msg.append('changeset: <a href="%s">%s</a>' % (_url, cs.raw_id[:8]))
 
         desc_msg.append('<pre>')
         desc_msg.append(cs.message)
--- a/rhodecode/controllers/files.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/controllers/files.py	Sun Apr 07 18:37:22 2013 +0200
@@ -27,6 +27,7 @@
 import logging
 import traceback
 import tempfile
+import shutil
 
 from pylons import request, response, tmpl_context as c, url
 from pylons.i18n.translation import _
@@ -55,6 +56,7 @@
 
 from rhodecode.controllers.changeset import anchor_url, _ignorews_url,\
     _context_url, get_line_ctx, get_ignore_ws
+from webob.exc import HTTPNotFound
 
 
 log = logging.getLogger(__name__)
@@ -83,14 +85,14 @@
             url_ = url('files_add_home',
                        repo_name=c.repo_name,
                        revision=0, f_path='')
-            add_new = '<a href="%s">[%s]</a>' % (url_, _('click here to add new file'))
+            add_new = h.link_to(_('Click here to add new file'), url_)
             h.flash(h.literal(_('There are no files yet %s') % add_new),
                     category='warning')
             redirect(h.url('summary_home', repo_name=repo_name))
 
-        except RepositoryError, e:
-            h.flash(str(e), category='warning')
-            redirect(h.url('files_home', repo_name=repo_name, revision='tip'))
+        except RepositoryError, e:  # including ChangesetDoesNotExistError
+            h.flash(str(e), category='error')
+            raise HTTPNotFound()
 
     def __get_filenode_or_redirect(self, repo_name, cs, path):
         """
@@ -107,9 +109,8 @@
             if file_node.is_dir():
                 raise RepositoryError('given path is a directory')
         except RepositoryError, e:
-            h.flash(str(e), category='warning')
-            redirect(h.url('files_home', repo_name=repo_name,
-                           revision=cs.raw_id))
+            h.flash(str(e), category='error')
+            raise HTTPNotFound()
 
         return file_node
 
@@ -121,13 +122,12 @@
         post_revision = request.POST.get('at_rev', None)
         if post_revision:
             cs = self.__get_cs_or_redirect(post_revision, repo_name)
-            redirect(url('files_home', repo_name=c.repo_name,
-                         revision=cs.raw_id, f_path=f_path))
 
         c.changeset = self.__get_cs_or_redirect(revision, repo_name)
         c.branch = request.GET.get('branch', None)
         c.f_path = f_path
         c.annotate = annotate
+        c.changeset = self.__get_cs_or_redirect(revision, repo_name)
         cur_rev = c.changeset.revision
 
         # prev link
@@ -160,6 +160,9 @@
                 c.file_changeset = (c.changeset
                                     if c.changeset.revision < file_last_cs.revision
                                     else file_last_cs)
+                #determine if we're on branch head
+                _branches = c.rhodecode_repo.branches
+                c.on_branch_head = revision in _branches.keys() + _branches.values()
                 _hist = []
                 c.file_history = []
                 if c.load_full_history:
@@ -171,9 +174,8 @@
             else:
                 c.authors = c.file_history = []
         except RepositoryError, e:
-            h.flash(str(e), category='warning')
-            redirect(h.url('files_home', repo_name=repo_name,
-                           revision='tip'))
+            h.flash(str(e), category='error')
+            raise HTTPNotFound()
 
         if request.environ.get('HTTP_X_PARTIAL_XHR'):
             return render('files/files_ypjax.html')
@@ -260,7 +262,7 @@
     @LoginRequired()
     @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
     def edit(self, repo_name, revision, f_path):
-        repo = Repository.get_by_repo_name(repo_name)
+        repo = c.rhodecode_db_repo
         if repo.enable_locking and repo.locked[0]:
             h.flash(_('This repository is has been locked by %s on %s')
                 % (h.person_by_id(repo.locked[0]),
@@ -269,6 +271,17 @@
             return redirect(h.url('files_home',
                                   repo_name=repo_name, revision='tip'))
 
+        # check if revision is a branch identifier- basically we cannot
+        # create multiple heads via file editing
+        _branches = repo.scm_instance.branches
+        # check if revision is a branch name or branch hash
+        if revision not in _branches.keys() + _branches.values():
+            h.flash(_('You can only edit files with revision '
+                      'being a valid branch '), category='warning')
+            return redirect(h.url('files_home',
+                                  repo_name=repo_name, revision='tip',
+                                  f_path=f_path))
+
         r_post = request.POST
 
         c.cs = self.__get_cs_or_redirect(revision, repo_name)
@@ -277,7 +290,7 @@
         if c.file.is_binary:
             return redirect(url('files_home', repo_name=c.repo_name,
                          revision=c.cs.raw_id, f_path=f_path))
-
+        c.default_message = _('Edited file %s via RhodeCode') % (f_path)
         c.f_path = f_path
 
         if r_post:
@@ -289,20 +302,17 @@
             mode = detect_mode(first_line, 0)
             content = convert_line_endings(r_post.get('content'), mode)
 
-            message = r_post.get('message') or (_('Edited %s via RhodeCode')
-                                                % (f_path))
+            message = r_post.get('message') or c.default_message
             author = self.rhodecode_user.full_contact
 
             if content == old_content:
-                h.flash(_('No changes'),
-                    category='warning')
+                h.flash(_('No changes'), category='warning')
                 return redirect(url('changeset_home', repo_name=c.repo_name,
                                     revision='tip'))
-
             try:
                 self.scm_model.commit_change(repo=c.rhodecode_repo,
                                              repo_name=repo_name, cs=c.cs,
-                                             user=self.rhodecode_user,
+                                             user=self.rhodecode_user.user_id,
                                              author=author, message=message,
                                              content=content, f_path=f_path)
                 h.flash(_('Successfully committed to %s') % f_path,
@@ -334,26 +344,22 @@
                                          redirect_after=False)
         if c.cs is None:
             c.cs = EmptyChangeset(alias=c.rhodecode_repo.alias)
-
+        c.default_message = (_('Added file via RhodeCode'))
         c.f_path = f_path
 
         if r_post:
             unix_mode = 0
             content = convert_line_endings(r_post.get('content'), unix_mode)
 
-            message = r_post.get('message') or (_('Added %s via RhodeCode')
-                                                % (f_path))
+            message = r_post.get('message') or c.default_message
+            filename = r_post.get('filename')
             location = r_post.get('location')
-            filename = r_post.get('filename')
             file_obj = r_post.get('upload_file', None)
 
             if file_obj is not None and hasattr(file_obj, 'filename'):
                 filename = file_obj.filename
                 content = file_obj.file
 
-            node_path = os.path.join(location, filename)
-            author = self.rhodecode_user.full_contact
-
             if not content:
                 h.flash(_('No content'), category='warning')
                 return redirect(url('changeset_home', repo_name=c.repo_name,
@@ -362,16 +368,26 @@
                 h.flash(_('No filename'), category='warning')
                 return redirect(url('changeset_home', repo_name=c.repo_name,
                                     revision='tip'))
+            if location.startswith('/') or location.startswith('.') or '../' in location:
+                h.flash(_('Location must be relative path and must not '
+                          'contain .. in path'), category='warning')
+                return redirect(url('changeset_home', repo_name=c.repo_name,
+                                    revision='tip'))
+            if location:
+                location = os.path.normpath(location)
+            filename = os.path.basename(filename)
+            node_path = os.path.join(location, filename)
+            author = self.rhodecode_user.full_contact
 
             try:
                 self.scm_model.create_node(repo=c.rhodecode_repo,
                                            repo_name=repo_name, cs=c.cs,
-                                           user=self.rhodecode_user,
+                                           user=self.rhodecode_user.user_id,
                                            author=author, message=message,
                                            content=content, f_path=node_path)
                 h.flash(_('Successfully committed to %s') % node_path,
                         category='success')
-            except NodeAlreadyExistsError, e:
+            except (NodeError, NodeAlreadyExistsError), e:
                 h.flash(_(e), category='error')
             except Exception:
                 log.error(traceback.format_exc())
@@ -400,8 +416,8 @@
 
         try:
             dbrepo = RepoModel().get_by_repo_name(repo_name)
-            if dbrepo.enable_downloads is False:
-                return _('downloads disabled')
+            if not dbrepo.enable_downloads:
+                return _('Downloads disabled')
 
             if c.rhodecode_repo.alias == 'hg':
                 # patch and reset hooks section of UI config to not run any
@@ -417,11 +433,40 @@
             return _('Empty repository')
         except (ImproperArchiveTypeError, KeyError):
             return _('Unknown archive type')
+        # archive cache
+        from rhodecode import CONFIG
+        rev_name = cs.raw_id[:12]
+        archive_name = '%s-%s%s' % (safe_str(repo_name.replace('/', '_')),
+                                    safe_str(rev_name), ext)
 
-        fd, archive = tempfile.mkstemp()
-        t = open(archive, 'wb')
-        cs.fill_archive(stream=t, kind=fileformat, subrepos=subrepos)
-        t.close()
+        use_cached_archive = False  # defines if we use cached version of archive
+        archive_cache_enabled = CONFIG.get('archive_cache_dir')
+        if not subrepos and archive_cache_enabled:
+            #check if we it's ok to write
+            if not os.path.isdir(CONFIG['archive_cache_dir']):
+                os.makedirs(CONFIG['archive_cache_dir'])
+            cached_archive_path = os.path.join(CONFIG['archive_cache_dir'], archive_name)
+            if os.path.isfile(cached_archive_path):
+                log.debug('Found cached archive in %s' % cached_archive_path)
+                fd, archive = None, cached_archive_path
+                use_cached_archive = True
+            else:
+                log.debug('Archive %s is not yet cached' % (archive_name))
+
+        if not use_cached_archive:
+            #generate new archive
+            try:
+                fd, archive = tempfile.mkstemp()
+                t = open(archive, 'wb')
+                log.debug('Creating new temp archive in %s' % archive)
+                cs.fill_archive(stream=t, kind=fileformat, subrepos=subrepos)
+                if archive_cache_enabled:
+                    #if we generated the archive and use cache rename that
+                    log.debug('Storing new archive in %s' % cached_archive_path)
+                    shutil.move(archive, cached_archive_path)
+                    archive = cached_archive_path
+            finally:
+                t.close()
 
         def get_chunked_archive(archive):
             stream = open(archive, 'rb')
@@ -429,13 +474,15 @@
                 data = stream.read(16 * 1024)
                 if not data:
                     stream.close()
-                    os.close(fd)
-                    os.remove(archive)
+                    if fd:  # fd means we used temporary file
+                        os.close(fd)
+                    if not archive_cache_enabled:
+                        log.debug('Destroing temp archive %s' % archive)
+                        os.remove(archive)
                     break
                 yield data
 
-        response.content_disposition = str('attachment; filename=%s-%s%s' \
-                                           % (repo_name, revision[:12], ext))
+        response.content_disposition = str('attachment; filename=%s' % (archive_name))
         response.content_type = str(content_type)
         return get_chunked_archive(archive)
 
@@ -474,6 +521,9 @@
                 c.changeset_1 = c.rhodecode_repo.get_changeset(diff1)
                 try:
                     node1 = c.changeset_1.get_node(f_path)
+                    if node1.is_dir():
+                        raise NodeError('%s path is a %s not a file'
+                                        % (node1, type(node1)))
                 except NodeDoesNotExistError:
                     c.changeset_1 = EmptyChangeset(cs=diff1,
                                                    revision=c.changeset_1.revision,
@@ -487,6 +537,9 @@
                 c.changeset_2 = c.rhodecode_repo.get_changeset(diff2)
                 try:
                     node2 = c.changeset_2.get_node(f_path)
+                    if node2.is_dir():
+                        raise NodeError('%s path is a %s not a file'
+                                        % (node2, type(node2)))
                 except NodeDoesNotExistError:
                     c.changeset_2 = EmptyChangeset(cs=diff2,
                                                    revision=c.changeset_2.revision,
--- a/rhodecode/controllers/forks.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/controllers/forks.py	Sun Apr 07 18:37:22 2013 +0200
@@ -38,10 +38,11 @@
     NotAnonymous, HasRepoPermissionAny, HasPermissionAllDecorator,\
     HasPermissionAnyDecorator
 from rhodecode.lib.base import BaseRepoController, render
-from rhodecode.model.db import Repository, RepoGroup, UserFollowing, User
+from rhodecode.model.db import Repository, RepoGroup, UserFollowing, User,\
+    RhodeCodeUi
 from rhodecode.model.repo import RepoModel
 from rhodecode.model.forms import RepoForkForm
-from rhodecode.model.scm import ScmModel
+from rhodecode.model.scm import ScmModel, GroupList
 from rhodecode.lib.utils2 import safe_int
 
 log = logging.getLogger(__name__)
@@ -54,7 +55,9 @@
         super(ForksController, self).__before__()
 
     def __load_defaults(self):
-        c.repo_groups = RepoGroup.groups_choices(check_perms=True)
+        acl_groups = GroupList(RepoGroup.query().all(),
+                               perm_set=['group.write', 'group.admin'])
+        c.repo_groups = RepoGroup.groups_choices(groups=acl_groups)
         c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups)
         choices, c.landing_revs = ScmModel().get_repo_landing_revs()
         c.landing_revs_choices = choices
@@ -93,9 +96,16 @@
             c.stats_percentage = '%.2f' % ((float((last_rev)) /
                                             c.repo_last_rev) * 100)
 
+        c.can_update = RhodeCodeUi.get_by_key(RhodeCodeUi.HOOK_UPDATE).ui_active
+
         defaults = RepoModel()._get_defaults(repo_name)
+        # alter the description to indicate a fork
+        defaults['description'] = ('fork of repository: %s \n%s'
+                                   % (defaults['repo_name'],
+                                      defaults['description']))
         # add suffix to fork
         defaults['repo_name'] = '%s-fork' % defaults['repo_name']
+
         return defaults
 
     @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
@@ -152,11 +162,18 @@
         try:
             form_result = _form.to_python(dict(request.POST))
 
+            # an approximation that is better than nothing
+            if not RhodeCodeUi.get_by_key(RhodeCodeUi.HOOK_UPDATE).ui_active:
+                form_result['update_after_clone'] = False
+
             # create fork is done sometimes async on celery, db transaction
             # management is handled there.
             RepoModel().create_fork(form_result, self.rhodecode_user.user_id)
-            h.flash(_('forked %s repository as %s') \
-                      % (repo_name, form_result['repo_name']),
+            fork_url = h.link_to(form_result['repo_name_full'],
+                    h.url('summary_home', repo_name=form_result['repo_name_full']))
+
+            h.flash(h.literal(_('Forked repository %s as %s') \
+                      % (repo_name, fork_url)),
                     category='success')
         except formencode.Invalid, errors:
             c.new_repo = errors.value['repo_name']
@@ -172,4 +189,4 @@
             h.flash(_('An error occurred during repository forking %s') %
                     repo_name, category='error')
 
-        return redirect(url('home'))
+        return redirect(h.url('summary_home', repo_name=repo_name))
--- a/rhodecode/controllers/home.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/controllers/home.py	Sun Apr 07 18:37:22 2013 +0200
@@ -52,7 +52,7 @@
         c.groups = self.scm_model.get_repos_groups()
         c.group = None
 
-        if c.visual.lightweight_dashboard is False:
+        if not c.visual.lightweight_dashboard:
             c.repos_list = self.scm_model.get_repos()
         ## lightweight version of dashboard
         else:
@@ -81,7 +81,7 @@
     def branch_tag_switcher(self, repo_name):
         if request.is_xhr:
             c.rhodecode_db_repo = Repository.get_by_repo_name(c.repo_name)
-            c.rhodecode_repo = c.rhodecode_db_repo.scm_instance
-            return render('/switch_to_list.html')
-        else:
-            raise HTTPBadRequest()
+            if c.rhodecode_db_repo:
+                c.rhodecode_repo = c.rhodecode_db_repo.scm_instance
+                return render('/switch_to_list.html')
+        raise HTTPBadRequest()
--- a/rhodecode/controllers/journal.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/controllers/journal.py	Sun Apr 07 18:37:22 2013 +0200
@@ -207,7 +207,7 @@
             #filter
             try:
                 journal = _journal_filter(journal, c.search_term)
-            except:
+            except Exception:
                 # we want this to crash for now
                 raise
             journal = journal.filter(filtering_criterion)\
@@ -231,7 +231,7 @@
                                                 self.rhodecode_user.user_id)
                     Session.commit()
                     return 'ok'
-                except:
+                except Exception:
                     raise HTTPBadRequest()
 
             repo_id = request.POST.get('follows_repo_id')
@@ -241,7 +241,7 @@
                                                 self.rhodecode_user.user_id)
                     Session.commit()
                     return 'ok'
-                except:
+                except Exception:
                     raise HTTPBadRequest()
 
         log.debug('token mismatch %s vs %s' % (cur_token, token))
--- a/rhodecode/controllers/login.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/controllers/login.py	Sun Apr 07 18:37:22 2013 +0200
@@ -76,7 +76,7 @@
                 Session().commit()
 
                 # If they want to be remembered, update the cookie
-                if c.form_result['remember'] is not False:
+                if c.form_result['remember']:
                     _year = (datetime.datetime.now() +
                              datetime.timedelta(seconds=60 * 60 * 24 * 365))
                     session._set_cookie_expires(_year)
--- a/rhodecode/controllers/pullrequests.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/controllers/pullrequests.py	Sun Apr 07 18:37:22 2013 +0200
@@ -38,6 +38,7 @@
 from rhodecode.lib.base import BaseRepoController, render
 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator,\
     NotAnonymous
+from rhodecode.lib.helpers import Page
 from rhodecode.lib import helpers as h
 from rhodecode.lib import diffs
 from rhodecode.lib.utils import action_logger, jsonify
@@ -52,6 +53,8 @@
 from rhodecode.model.comment import ChangesetCommentsModel
 from rhodecode.model.changeset_status import ChangesetStatusModel
 from rhodecode.model.forms import PullRequestForm
+from mercurial import scmutil
+from rhodecode.lib.utils2 import safe_int
 
 log = logging.getLogger(__name__)
 
@@ -67,34 +70,68 @@
         c.users_array = repo_model.get_users_js()
         c.users_groups_array = repo_model.get_users_groups_js()
 
-    def _get_repo_refs(self, repo):
-        hist_l = []
+    def _get_repo_refs(self, repo, rev=None, branch_rev=None):
+        """return a structure with repo's interesting changesets, suitable for
+        the selectors in pullrequest.html"""
 
-        branches_group = ([('branch:%s:%s' % (k, v), k) for
-                         k, v in repo.branches.iteritems()], _("Branches"))
-        bookmarks_group = ([('book:%s:%s' % (k, v), k) for
-                         k, v in repo.bookmarks.iteritems()], _("Bookmarks"))
-        tags_group = ([('tag:%s:%s' % (k, v), k) for
-                         k, v in repo.tags.iteritems()], _("Tags"))
-
-        hist_l.append(bookmarks_group)
-        hist_l.append(branches_group)
-        hist_l.append(tags_group)
+        # list named branches that has been merged to this named branch - it should probably merge back
+        peers = []
+        if branch_rev:
+            # not restricting to merge() would also get branch point and be better
+            # (especially because it would get the branch point) ... but is currently too expensive
+            revs = ["sort(parents(branch(id('%s')) and merge()) - branch(id('%s')))" %
+                    (branch_rev, branch_rev)]
+            otherbranches = {}
+            for i in scmutil.revrange(repo._repo, revs):
+                cs = repo.get_changeset(i)
+                otherbranches[cs.branch] = cs.raw_id
+            for branch, node in otherbranches.iteritems():
+                selected = 'branch:%s:%s' % (branch, node)
+                peers.append((selected, branch))
 
-        return hist_l
+        selected = None
+        branches = []
+        for branch, branchrev in repo.branches.iteritems():
+            n = 'branch:%s:%s' % (branch, branchrev)
+            branches.append((n, branch))
+            if rev == branchrev:
+                selected = n
+        bookmarks = []
+        for bookmark, bookmarkrev in repo.bookmarks.iteritems():
+            n = 'book:%s:%s' % (bookmark, bookmarkrev)
+            bookmarks.append((n, bookmark))
+            if rev == bookmarkrev:
+                selected = n
+        tags = []
+        for tag, tagrev in repo.tags.iteritems():
+            n = 'tag:%s:%s' % (tag, tagrev)
+            tags.append((n, tag))
+            if rev == tagrev and tag != 'tip': # tip is not a real tag - and its branch is better
+                selected = n
 
-    def _get_default_rev(self, repo):
-        """
-        Get's default revision to do compare on pull request
+        # prio 1: rev was selected as existing entry above
 
-        :param repo:
-        """
-        repo = repo.scm_instance
-        if 'default' in repo.branches:
-            return 'default'
-        else:
-            #if repo doesn't have default branch return first found
-            return repo.branches.keys()[0]
+        # prio 2: create special entry for rev; rev _must_ be used
+        specials = []
+        if rev and selected is None:
+            selected = 'rev:%s:%s' % (rev, rev)
+            specials = [(selected, '%s: %s' % (_("Changeset"), rev[:12]))]
+
+        # prio 3: most recent peer branch
+        if peers and not selected:
+            selected = peers[0][0][0]
+
+        # prio 4: tip revision
+        if not selected:
+            selected = 'tag:tip:%s' % repo.tags['tip']
+
+        groups = [(specials, _("Special")),
+                  (peers, _("Peer branches")),
+                  (bookmarks, _("Bookmarks")),
+                  (branches, _("Branches")),
+                  (tags, _("Tags")),
+                  ]
+        return [g for g in groups if g[0]], selected
 
     def _get_is_allowed_change_status(self, pull_request):
         owner = self.rhodecode_user.user_id == pull_request.user_id
@@ -105,6 +142,15 @@
     def show_all(self, repo_name):
         c.pull_requests = PullRequestModel().get_all(repo_name)
         c.repo_name = repo_name
+        p = safe_int(request.params.get('page', 1), 1)
+
+        c.pullrequests_pager = Page(c.pull_requests, page=p, items_per_page=10)
+
+        c.pullrequest_data = render('/pullrequests/pullrequest_data.html')
+
+        if request.environ.get('HTTP_X_PARTIAL_XHR'):
+            return c.pullrequest_data
+
         return render('/pullrequests/pullrequest_show_all.html')
 
     @NotAnonymous()
@@ -122,59 +168,51 @@
                     category='warning')
             redirect(url('summary_home', repo_name=org_repo.repo_name))
 
+        org_rev = request.GET.get('rev_end')
+        # rev_start is not directly useful - its parent could however be used
+        # as default for other and thus give a simple compare view
+        #other_rev = request.POST.get('rev_start')
+
+        c.org_repos = []
+        c.org_repos.append((org_repo.repo_name, org_repo.repo_name))
+        c.default_org_repo = org_repo.repo_name
+        c.org_refs, c.default_org_ref = self._get_repo_refs(org_repo.scm_instance, org_rev)
+
+        c.other_repos = []
         other_repos_info = {}
 
-        c.org_refs = self._get_repo_refs(c.rhodecode_repo)
-        c.org_repos = []
-        c.other_repos = []
-        c.org_repos.append((org_repo.repo_name, '%s/%s' % (
-                                org_repo.user.username, c.repo_name))
-                           )
-
-        # add org repo to other so we can open pull request agains itself
-        c.other_repos.extend(c.org_repos)
-
-        c.default_pull_request = org_repo.repo_name  # repo name pre-selected
-        c.default_pull_request_rev = self._get_default_rev(org_repo)  # revision pre-selected
-        c.default_revs = self._get_repo_refs(org_repo.scm_instance)
-        #add orginal repo
-        other_repos_info[org_repo.repo_name] = {
-            'gravatar': h.gravatar_url(org_repo.user.email, 24),
-            'description': org_repo.description,
-            'revs': h.select('other_ref', '', c.default_revs, class_='refs')
-        }
-
-        #gather forks and add to this list
-        for fork in org_repo.forks:
-            c.other_repos.append((fork.repo_name, '%s/%s' % (
-                                    fork.user.username, fork.repo_name))
-                                 )
-            other_repos_info[fork.repo_name] = {
-                'gravatar': h.gravatar_url(fork.user.email, 24),
-                'description': fork.description,
-                'revs': h.select('other_ref', '',
-                                 self._get_repo_refs(fork.scm_instance),
-                                 class_='refs')
-            }
-        #add parents of this fork also, but only if it's not empty
-        if org_repo.parent and org_repo.parent.scm_instance.revisions:
-            c.default_pull_request = org_repo.parent.repo_name
-            c.default_pull_request_rev = self._get_default_rev(org_repo.parent)
-            c.default_revs = self._get_repo_refs(org_repo.parent.scm_instance)
-            c.other_repos.append((org_repo.parent.repo_name, '%s/%s' % (
-                                        org_repo.parent.user.username,
-                                        org_repo.parent.repo_name))
-                                     )
-            other_repos_info[org_repo.parent.repo_name] = {
-                'gravatar': h.gravatar_url(org_repo.parent.user.email, 24),
-                'description': org_repo.parent.description,
-                'revs': h.select('other_ref', '',
-                                 self._get_repo_refs(org_repo.parent.scm_instance),
-                                 class_='refs')
+        def add_other_repo(repo, branch_rev=None):
+            if repo.repo_name in other_repos_info: # shouldn't happen
+                return
+            c.other_repos.append((repo.repo_name, repo.repo_name))
+            other_refs, selected_other_ref = self._get_repo_refs(repo.scm_instance, branch_rev=branch_rev)
+            other_repos_info[repo.repo_name] = {
+                'user': dict(user_id=repo.user.user_id,
+                             username=repo.user.username,
+                             firstname=repo.user.firstname,
+                             lastname=repo.user.lastname,
+                             gravatar_link=h.gravatar_url(repo.user.email, 14)),
+                'description': repo.description.split('\n', 1)[0],
+                'revs': h.select('other_ref', selected_other_ref, other_refs, class_='refs')
             }
 
+        # add org repo to other so we can open pull request against peer branches on itself
+        add_other_repo(org_repo, branch_rev=org_rev)
+        c.default_other_repo = org_repo.repo_name
+
+        # gather forks and add to this list ... even though it is rare to
+        # request forks to pull from their parent
+        for fork in org_repo.forks:
+            add_other_repo(fork)
+
+        # add parents of this fork also, but only if it's not empty
+        if org_repo.parent and org_repo.parent.scm_instance.revisions:
+            add_other_repo(org_repo.parent)
+            c.default_other_repo = org_repo.parent.repo_name
+
+        c.default_other_repo_info = other_repos_info[c.default_other_repo]
         c.other_repos_info = json.dumps(other_repos_info)
-        c.review_members = [org_repo.user]
+
         return render('/pullrequests/pullrequest.html')
 
     @NotAnonymous()
@@ -189,29 +227,18 @@
             elif errors.error_dict.get('pullrequest_title'):
                 msg = _('Pull request requires a title with min. 3 chars')
             else:
-                msg = _('error during creation of pull request')
+                msg = _('Error creating pull request')
 
             h.flash(msg, 'error')
             return redirect(url('pullrequest_home', repo_name=repo_name))
 
         org_repo = _form['org_repo']
-        org_ref = _form['org_ref']
+        org_ref = 'rev:merge:%s' % _form['merge_rev']
         other_repo = _form['other_repo']
-        other_ref = _form['other_ref']
+        other_ref = 'rev:ancestor:%s' % _form['ancestor_rev']
         revisions = _form['revisions']
         reviewers = _form['review_members']
 
-        # if we have cherry picked pull request we don't care what is in
-        # org_ref/other_ref
-        rev_start = request.POST.get('rev_start')
-        rev_end = request.POST.get('rev_end')
-
-        if rev_start and rev_end:
-            # this is swapped to simulate that rev_end is a revision from
-            # parent of the fork
-            org_ref = 'rev:%s:%s' % (rev_end, rev_end)
-            other_ref = 'rev:%s:%s' % (rev_start, rev_start)
-
         title = _form['pullrequest_title']
         description = _form['pullrequest_desc']
 
@@ -269,9 +296,6 @@
         :param pull_request:
         :type pull_request:
         """
-        rev_start = request.GET.get('rev_start')
-        rev_end = request.GET.get('rev_end')
-
         org_repo = pull_request.org_repo
         (org_ref_type,
          org_ref_name,
@@ -283,7 +307,7 @@
          other_ref_rev) = pull_request.other_ref.split(':')
 
         # despite opening revisions for bookmarks/branches/tags, we always
-        # convert this to rev to prevent changes after book or branch change
+        # convert this to rev to prevent changes after bookmark or branch change
         org_ref = ('rev', org_ref_rev)
         other_ref = ('rev', other_ref_rev)
 
@@ -294,17 +318,12 @@
 
         c.cs_ranges = [org_repo.get_changeset(x) for x in pull_request.revisions]
 
-        other_ref = ('rev', getattr(c.cs_ranges[0].parents[0]
-                                  if c.cs_ranges[0].parents
-                                  else EmptyChangeset(), 'raw_id'))
-
         c.statuses = org_repo.statuses([x.raw_id for x in c.cs_ranges])
-        c.target_repo = other_repo.repo_name
-        # defines that we need hidden inputs with changesets
-        c.as_form = request.GET.get('as_form', False)
 
         c.org_ref = org_ref[1]
+        c.org_ref_type = org_ref[0]
         c.other_ref = other_ref[1]
+        c.other_ref_type = other_ref[0]
 
         diff_limit = self.cut_off_limit if not fulldiff else None
 
@@ -386,7 +405,7 @@
 
         try:
             cur_status = c.statuses[c.pull_request.revisions[0]][0]
-        except:
+        except Exception:
             log.error(traceback.format_exc())
             cur_status = 'undefined'
         if c.pull_request.is_closed() and 0:
@@ -398,6 +417,8 @@
                                          )
         c.changeset_statuses = ChangesetStatus.STATUSES
 
+        c.as_form = False
+        c.ancestor = None # there is one - but right here we don't know which
         return render('/pullrequests/pullrequest_show.html')
 
     @NotAnonymous()
@@ -410,11 +431,15 @@
         status = request.POST.get('changeset_status')
         change_status = request.POST.get('change_changeset_status')
         text = request.POST.get('text')
+        close_pr = request.POST.get('save_close')
 
         allowed_to_change_status = self._get_is_allowed_change_status(pull_request)
         if status and change_status and allowed_to_change_status:
-            text = text or (_('Status change -> %s')
+            _def = (_('Status change -> %s')
                             % ChangesetStatus.get_status_lbl(status))
+            if close_pr:
+                _def = _('Closing with') + ' ' + _def
+            text = text or _def
         comm = ChangesetCommentsModel().create(
             text=text,
             repo=c.rhodecode_db_repo.repo_id,
@@ -423,7 +448,9 @@
             f_path=request.POST.get('f_path'),
             line_no=request.POST.get('line'),
             status_change=(ChangesetStatus.get_status_lbl(status)
-            if status and change_status and allowed_to_change_status else None)
+                           if status and change_status
+                           and allowed_to_change_status else None),
+            closing_pr=close_pr
         )
 
         action_logger(self.rhodecode_user,
@@ -441,7 +468,7 @@
                     pull_request=pull_request_id
                 )
 
-            if request.POST.get('save_close'):
+            if close_pr:
                 if status in ['rejected', 'approved']:
                     PullRequestModel().close_pull_request(pull_request_id)
                     action_logger(self.rhodecode_user,
--- a/rhodecode/controllers/search.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/controllers/search.py	Sun Apr 07 18:37:22 2013 +0200
@@ -29,7 +29,7 @@
 from pylons import request, config, tmpl_context as c
 
 from rhodecode.lib.auth import LoginRequired
-from rhodecode.lib.base import BaseController, render
+from rhodecode.lib.base import BaseRepoController, render
 from rhodecode.lib.indexers import CHGSETS_SCHEMA, SCHEMA, CHGSET_IDX_NAME, \
     IDX_NAME, WhooshResultWrapper
 
@@ -46,14 +46,14 @@
 log = logging.getLogger(__name__)
 
 
-class SearchController(BaseController):
+class SearchController(BaseRepoController):
 
     @LoginRequired()
     def __before__(self):
         super(SearchController, self).__before__()
 
-    def index(self, search_repo=None):
-        c.repo_name = search_repo
+    def index(self, repo_name=None):
+        c.repo_name = repo_name
         c.formated_results = []
         c.runtime = ''
         c.cur_query = request.GET.get('q', None)
--- a/rhodecode/controllers/settings.py	Mon Mar 11 17:59:38 2013 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,198 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-    rhodecode.controllers.settings
-    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-    Settings controller for rhodecode
-
-    :created_on: Jun 30, 2010
-    :author: marcink
-    :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
-    :license: GPLv3, see COPYING for more details.
-"""
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-import logging
-import traceback
-import formencode
-
-from formencode import htmlfill
-
-from pylons import tmpl_context as c, request, url
-from pylons.controllers.util import redirect
-from pylons.i18n.translation import _
-
-import rhodecode.lib.helpers as h
-
-from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAllDecorator,\
-    HasRepoPermissionAnyDecorator
-from rhodecode.lib.base import BaseRepoController, render
-from rhodecode.lib.utils import invalidate_cache, action_logger
-
-from rhodecode.model.forms import RepoSettingsForm
-from rhodecode.model.repo import RepoModel
-from rhodecode.model.db import RepoGroup, Repository
-from rhodecode.model.meta import Session
-from rhodecode.model.scm import ScmModel
-
-log = logging.getLogger(__name__)
-
-
-class SettingsController(BaseRepoController):
-
-    @LoginRequired()
-    def __before__(self):
-        super(SettingsController, self).__before__()
-
-    def __load_defaults(self):
-        c.repo_groups = RepoGroup.groups_choices(check_perms=True)
-        c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups)
-
-        repo_model = RepoModel()
-        c.users_array = repo_model.get_users_js()
-        c.users_groups_array = repo_model.get_users_groups_js()
-        choices, c.landing_revs = ScmModel().get_repo_landing_revs()
-        c.landing_revs_choices = choices
-
-    def __load_data(self, repo_name=None):
-        """
-        Load defaults settings for edit, and update
-
-        :param repo_name:
-        """
-        self.__load_defaults()
-
-        c.repo_info = db_repo = Repository.get_by_repo_name(repo_name)
-        repo = db_repo.scm_instance
-
-        if c.repo_info is None:
-            h.not_mapped_error(repo_name)
-            return redirect(url('home'))
-
-        ##override defaults for exact repo info here git/hg etc
-        choices, c.landing_revs = ScmModel().get_repo_landing_revs(c.repo_info)
-        c.landing_revs_choices = choices
-
-        defaults = RepoModel()._get_defaults(repo_name)
-
-        return defaults
-
-    @HasRepoPermissionAllDecorator('repository.admin')
-    def index(self, repo_name):
-        defaults = self.__load_data(repo_name)
-
-        return htmlfill.render(
-            render('settings/repo_settings.html'),
-            defaults=defaults,
-            encoding="UTF-8",
-            force_defaults=False
-        )
-
-    @HasRepoPermissionAllDecorator('repository.admin')
-    def update(self, repo_name):
-        self.__load_defaults()
-        repo_model = RepoModel()
-        changed_name = repo_name
-        #override the choices with extracted revisions !
-        choices, c.landing_revs = ScmModel().get_repo_landing_revs(repo_name)
-        c.landing_revs_choices = choices
-        repo = Repository.get_by_repo_name(repo_name)
-        _form = RepoSettingsForm(edit=True,
-                                old_data={'repo_name': repo_name,
-                                          'repo_group': repo.group.get_dict() \
-                                              if repo.group else {}},
-                                 repo_groups=c.repo_groups_choices,
-                                 landing_revs=c.landing_revs_choices)()
-        try:
-            form_result = _form.to_python(dict(request.POST))
-            repo_model.update(repo_name, **form_result)
-            invalidate_cache('get_repo_cached_%s' % repo_name)
-            h.flash(_('Repository %s updated successfully') % repo_name,
-                    category='success')
-            changed_name = form_result['repo_name_full']
-            action_logger(self.rhodecode_user, 'user_updated_repo',
-                          changed_name, self.ip_addr, self.sa)
-            Session().commit()
-        except formencode.Invalid, errors:
-            defaults = self.__load_data(repo_name)
-            defaults.update(errors.value)
-            return htmlfill.render(
-                render('settings/repo_settings.html'),
-                defaults=errors.value,
-                errors=errors.error_dict or {},
-                prefix_error=False,
-                encoding="UTF-8")
-
-        except Exception:
-            log.error(traceback.format_exc())
-            h.flash(_('error occurred during update of repository %s') \
-                    % repo_name, category='error')
-
-        return redirect(url('repo_settings_home', repo_name=changed_name))
-
-    @HasRepoPermissionAllDecorator('repository.admin')
-    def delete(self, repo_name):
-        """DELETE /repos/repo_name: Delete an existing item"""
-        # Forms posted to this method should contain a hidden field:
-        #    <input type="hidden" name="_method" value="DELETE" />
-        # Or using helpers:
-        #    h.form(url('repo_settings_delete', repo_name=ID),
-        #           method='delete')
-        # url('repo_settings_delete', repo_name=ID)
-
-        repo_model = RepoModel()
-        repo = repo_model.get_by_repo_name(repo_name)
-        if not repo:
-            h.not_mapped_error(repo_name)
-            return redirect(url('home'))
-        try:
-            action_logger(self.rhodecode_user, 'user_deleted_repo',
-                              repo_name, self.ip_addr, self.sa)
-            repo_model.delete(repo)
-            invalidate_cache('get_repo_cached_%s' % repo_name)
-            h.flash(_('deleted repository %s') % repo_name, category='success')
-            Session().commit()
-        except Exception:
-            log.error(traceback.format_exc())
-            h.flash(_('An error occurred during deletion of %s') % repo_name,
-                    category='error')
-
-        return redirect(url('admin_settings_my_account', anchor='my'))
-
-    @HasRepoPermissionAnyDecorator('repository.write', 'repository.admin')
-    def toggle_locking(self, repo_name):
-        """
-        Toggle locking of repository by simple GET call to url
-
-        :param repo_name:
-        """
-
-        try:
-            repo = Repository.get_by_repo_name(repo_name)
-
-            if repo.enable_locking:
-                if repo.locked[0]:
-                    Repository.unlock(repo)
-                    action = _('unlocked')
-                else:
-                    Repository.lock(repo, c.rhodecode_user.user_id)
-                    action = _('locked')
-
-                h.flash(_('Repository has been %s') % action,
-                        category='success')
-        except Exception, e:
-            log.error(traceback.format_exc())
-            h.flash(_('An error occurred during unlocking'),
-                    category='error')
-        return redirect(url('summary_home', repo_name=repo_name))
--- a/rhodecode/controllers/summary.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/controllers/summary.py	Sun Apr 07 18:37:22 2013 +0200
@@ -30,20 +30,23 @@
 from time import mktime
 from datetime import timedelta, date
 from urlparse import urlparse
-from rhodecode.lib.compat import product
-
-from rhodecode.lib.vcs.exceptions import ChangesetError, EmptyRepositoryError, \
-    NodeDoesNotExistError
 
 from pylons import tmpl_context as c, request, url, config
 from pylons.i18n.translation import _
+from webob.exc import HTTPBadRequest
 
 from beaker.cache import cache_region, region_invalidate
 
+from rhodecode.lib import helpers as h
+from rhodecode.lib.compat import product
+from rhodecode.lib.vcs.exceptions import ChangesetError, EmptyRepositoryError, \
+    NodeDoesNotExistError
 from rhodecode.config.conf import ALL_READMES, ALL_EXTS, LANGUAGES_EXTENSIONS_MAP
 from rhodecode.model.db import Statistics, CacheInvalidation
-from rhodecode.lib.utils2 import safe_unicode
-from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
+from rhodecode.lib.utils import jsonify
+from rhodecode.lib.utils2 import safe_unicode, safe_str
+from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator,\
+    NotAnonymous
 from rhodecode.lib.base import BaseRepoController, render
 from rhodecode.lib.vcs.backends.base import EmptyChangeset
 from rhodecode.lib.markup_renderer import MarkupRenderer
@@ -70,8 +73,6 @@
 
     def index(self, repo_name):
         c.dbrepo = dbrepo = c.rhodecode_db_repo
-        c.following = self.scm_model.is_following_repo(repo_name,
-                                                self.rhodecode_user.user_id)
 
         def url_generator(**kw):
             return url('shortlog_home', repo_name=repo_name, size=10, **kw)
@@ -101,10 +102,10 @@
            'pass': password,
            'scheme': parsed_url.scheme,
            'netloc': parsed_url.netloc,
-           'path': decoded_path
+           'path': urllib.quote(safe_str(decoded_path))
         }
 
-        uri = uri_tmpl % uri_dict
+        uri = (uri_tmpl % uri_dict)
         # generate another clone url by id
         uri_dict.update(
          {'path': decoded_path.replace(repo_name, '_%s' % c.dbrepo.repo_id)}
@@ -138,7 +139,9 @@
         if dbrepo.enable_statistics:
             c.show_stats = True
             c.no_data_msg = _('No data loaded yet')
-            run_task(get_commits_stats, c.dbrepo.repo_name, ts_min_y, ts_max_y)
+            recurse_limit = 500  # don't recurse more than 500 times when parsing
+            run_task(get_commits_stats, c.dbrepo.repo_name, ts_min_y,
+                     ts_max_y, recurse_limit)
         else:
             c.show_stats = False
             c.no_data_msg = _('Statistics are disabled for this repository')
@@ -186,6 +189,14 @@
             self.__get_readme_data(c.rhodecode_db_repo)
         return render('summary/summary.html')
 
+    @NotAnonymous()
+    @jsonify
+    def repo_size(self, repo_name):
+        if request.is_xhr:
+            return c.rhodecode_db_repo._repo_size()
+        else:
+            raise HTTPBadRequest()
+
     def __get_readme_data(self, db_repo):
         repo_name = db_repo.repo_name
 
Binary file rhodecode/i18n/en/LC_MESSAGES/rhodecode.mo has changed
--- a/rhodecode/i18n/en/LC_MESSAGES/rhodecode.po	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/i18n/en/LC_MESSAGES/rhodecode.po	Sun Apr 07 18:37:22 2013 +0200
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: rhodecode 0.1\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2012-12-14 04:19+0100\n"
+"POT-Creation-Date: 2013-04-05 10:19-0700\n"
 "PO-Revision-Date: 2011-02-25 19:13+0100\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: en <LL@li.org>\n"
@@ -22,11 +22,11 @@
 msgstr ""
 
 #: rhodecode/controllers/changeset.py:83
-msgid "show white space"
+msgid "Show white space"
 msgstr ""
 
 #: rhodecode/controllers/changeset.py:90 rhodecode/controllers/changeset.py:97
-msgid "ignore white space"
+msgid "Ignore white space"
 msgstr ""
 
 #: rhodecode/controllers/changeset.py:163
@@ -34,20 +34,20 @@
 msgid "%s line context"
 msgstr ""
 
-#: rhodecode/controllers/changeset.py:314
-#: rhodecode/controllers/pullrequests.py:417
+#: rhodecode/controllers/changeset.py:329
+#: rhodecode/controllers/pullrequests.py:438
 #, python-format
 msgid "Status change -> %s"
 msgstr ""
 
-#: rhodecode/controllers/changeset.py:345
+#: rhodecode/controllers/changeset.py:360
 msgid ""
-"Changing status on a changeset associated witha closed pull request is "
+"Changing status on a changeset associated with a closed pull request is "
 "not allowed"
 msgstr ""
 
-#: rhodecode/controllers/compare.py:75
-#: rhodecode/controllers/pullrequests.py:121
+#: rhodecode/controllers/compare.py:74
+#: rhodecode/controllers/pullrequests.py:167
 #: rhodecode/controllers/shortlog.py:100
 msgid "There are no changesets yet"
 msgstr ""
@@ -89,156 +89,187 @@
 msgstr ""
 
 #: rhodecode/controllers/feed.py:86
-#: rhodecode/templates/changeset/changeset.html:137
-#: rhodecode/templates/changeset/changeset.html:149
-#: rhodecode/templates/compare/compare_diff.html:62
-#: rhodecode/templates/compare/compare_diff.html:73
-#: rhodecode/templates/pullrequests/pullrequest_show.html:94
-#: rhodecode/templates/pullrequests/pullrequest_show.html:153
+#: rhodecode/templates/changeset/changeset.html:134
+#: rhodecode/templates/changeset/changeset.html:146
+#: rhodecode/templates/compare/compare_diff.html:58
+#: rhodecode/templates/compare/compare_diff.html:69
+#: rhodecode/templates/pullrequests/pullrequest_show.html:131
+#: rhodecode/templates/pullrequests/pullrequest_show.html:195
 msgid "Changeset was too big and was cut off..."
 msgstr ""
 
-#: rhodecode/controllers/feed.py:92
-msgid "commited on"
-msgstr ""
-
-#: rhodecode/controllers/files.py:86
-msgid "click here to add new file"
-msgstr ""
-
-#: rhodecode/controllers/files.py:87
+#: rhodecode/controllers/feed.py:91
+#, python-format
+msgid "%s committed on %s"
+msgstr ""
+
+#: rhodecode/controllers/files.py:88
+msgid "Click here to add new file"
+msgstr ""
+
+#: rhodecode/controllers/files.py:89
 #, python-format
 msgid "There are no files yet %s"
 msgstr ""
 
-#: rhodecode/controllers/files.py:265 rhodecode/controllers/files.py:325
+#: rhodecode/controllers/files.py:267 rhodecode/controllers/files.py:335
 #, python-format
 msgid "This repository is has been locked by %s on %s"
 msgstr ""
 
-#: rhodecode/controllers/files.py:292
+#: rhodecode/controllers/files.py:279
+msgid "You can only edit files with revision being a valid branch "
+msgstr ""
+
+#: rhodecode/controllers/files.py:293
 #, python-format
-msgid "Edited %s via RhodeCode"
-msgstr ""
-
-#: rhodecode/controllers/files.py:297
+msgid "Edited file %s via RhodeCode"
+msgstr ""
+
+#: rhodecode/controllers/files.py:309
 msgid "No changes"
 msgstr ""
 
-#: rhodecode/controllers/files.py:308 rhodecode/controllers/files.py:372
+#: rhodecode/controllers/files.py:318 rhodecode/controllers/files.py:388
 #, python-format
 msgid "Successfully committed to %s"
 msgstr ""
 
-#: rhodecode/controllers/files.py:313 rhodecode/controllers/files.py:378
+#: rhodecode/controllers/files.py:323 rhodecode/controllers/files.py:394
 msgid "Error occurred during commit"
 msgstr ""
 
-#: rhodecode/controllers/files.py:344
-#, python-format
-msgid "Added %s via RhodeCode"
-msgstr ""
-
-#: rhodecode/controllers/files.py:358
+#: rhodecode/controllers/files.py:347
+msgid "Added file via RhodeCode"
+msgstr ""
+
+#: rhodecode/controllers/files.py:364
 msgid "No content"
 msgstr ""
 
-#: rhodecode/controllers/files.py:362
+#: rhodecode/controllers/files.py:368
 msgid "No filename"
 msgstr ""
 
-#: rhodecode/controllers/files.py:404
-msgid "downloads disabled"
-msgstr ""
-
-#: rhodecode/controllers/files.py:415
+#: rhodecode/controllers/files.py:372
+msgid "Location must be relative path and must not contain .. in path"
+msgstr ""
+
+#: rhodecode/controllers/files.py:420
+msgid "Downloads disabled"
+msgstr ""
+
+#: rhodecode/controllers/files.py:431
 #, python-format
 msgid "Unknown revision %s"
 msgstr ""
 
-#: rhodecode/controllers/files.py:417
+#: rhodecode/controllers/files.py:433
 msgid "Empty repository"
 msgstr ""
 
-#: rhodecode/controllers/files.py:419
+#: rhodecode/controllers/files.py:435
 msgid "Unknown archive type"
 msgstr ""
 
-#: rhodecode/controllers/files.py:564
-#: rhodecode/templates/changeset/changeset_range.html:13
-#: rhodecode/templates/changeset/changeset_range.html:31
+#: rhodecode/controllers/files.py:617
+#: rhodecode/templates/changeset/changeset_range.html:9
 msgid "Changesets"
 msgstr ""
 
-#: rhodecode/controllers/files.py:565 rhodecode/controllers/pullrequests.py:74
-#: rhodecode/controllers/summary.py:236 rhodecode/model/scm.py:550
+#: rhodecode/controllers/files.py:618 rhodecode/controllers/pullrequests.py:131
+#: rhodecode/controllers/summary.py:247 rhodecode/model/scm.py:606
+#: rhodecode/templates/switch_to_list.html:3
+#: rhodecode/templates/branches/branches.html:10
 msgid "Branches"
 msgstr ""
 
-#: rhodecode/controllers/files.py:566 rhodecode/controllers/pullrequests.py:78
-#: rhodecode/controllers/summary.py:237 rhodecode/model/scm.py:561
+#: rhodecode/controllers/files.py:619 rhodecode/controllers/pullrequests.py:132
+#: rhodecode/controllers/summary.py:248 rhodecode/model/scm.py:617
+#: rhodecode/templates/switch_to_list.html:15
+#: rhodecode/templates/shortlog/shortlog_data.html:10
+#: rhodecode/templates/tags/tags.html:10
 msgid "Tags"
 msgstr ""
 
-#: rhodecode/controllers/forks.py:158
+#: rhodecode/controllers/forks.py:175
 #, python-format
-msgid "forked %s repository as %s"
-msgstr ""
-
-#: rhodecode/controllers/forks.py:172
+msgid "Forked repository %s as %s"
+msgstr ""
+
+#: rhodecode/controllers/forks.py:189
 #, python-format
 msgid "An error occurred during repository forking %s"
 msgstr ""
 
-#: rhodecode/controllers/journal.py:218 rhodecode/controllers/journal.py:261
+#: rhodecode/controllers/journal.py:275 rhodecode/controllers/journal.py:318
 msgid "public journal"
 msgstr ""
 
-#: rhodecode/controllers/journal.py:222 rhodecode/controllers/journal.py:265
-#: rhodecode/templates/base/base.html:232
+#: rhodecode/controllers/journal.py:279 rhodecode/controllers/journal.py:322
 #: rhodecode/templates/journal/journal.html:12
 msgid "journal"
 msgstr ""
 
-#: rhodecode/controllers/login.py:143
-msgid "You have successfully registered into rhodecode"
-msgstr ""
-
-#: rhodecode/controllers/login.py:164
+#: rhodecode/controllers/login.py:138
+msgid "You have successfully registered into RhodeCode"
+msgstr ""
+
+#: rhodecode/controllers/login.py:159
 msgid "Your password reset link was sent"
 msgstr ""
 
-#: rhodecode/controllers/login.py:184
+#: rhodecode/controllers/login.py:179
 msgid ""
 "Your password reset was successful, new password has been sent to your "
 "email"
 msgstr ""
 
-#: rhodecode/controllers/pullrequests.py:76 rhodecode/model/scm.py:556
+#: rhodecode/controllers/pullrequests.py:118
+#: rhodecode/templates/changeset/changeset.html:10
+#: rhodecode/templates/email_templates/changeset_comment.html:15
+msgid "Changeset"
+msgstr ""
+
+#: rhodecode/controllers/pullrequests.py:128
+msgid "Special"
+msgstr ""
+
+#: rhodecode/controllers/pullrequests.py:129
+msgid "Peer branches"
+msgstr ""
+
+#: rhodecode/controllers/pullrequests.py:130 rhodecode/model/scm.py:612
+#: rhodecode/templates/switch_to_list.html:28
+#: rhodecode/templates/bookmarks/bookmarks.html:10
 msgid "Bookmarks"
 msgstr ""
 
-#: rhodecode/controllers/pullrequests.py:190
+#: rhodecode/controllers/pullrequests.py:228
 msgid "Pull request requires a title with min. 3 chars"
 msgstr ""
 
-#: rhodecode/controllers/pullrequests.py:192
-msgid "error during creation of pull request"
-msgstr ""
-
-#: rhodecode/controllers/pullrequests.py:224
+#: rhodecode/controllers/pullrequests.py:230
+msgid "Error creating pull request"
+msgstr ""
+
+#: rhodecode/controllers/pullrequests.py:251
 msgid "Successfully opened new pull request"
 msgstr ""
 
-#: rhodecode/controllers/pullrequests.py:227
+#: rhodecode/controllers/pullrequests.py:254
 msgid "Error occurred during sending pull request"
 msgstr ""
 
-#: rhodecode/controllers/pullrequests.py:260
+#: rhodecode/controllers/pullrequests.py:287
 msgid "Successfully deleted pull request"
 msgstr ""
 
-#: rhodecode/controllers/pullrequests.py:452
+#: rhodecode/controllers/pullrequests.py:441
+msgid "Closing with"
+msgstr ""
+
+#: rhodecode/controllers/pullrequests.py:478
 msgid "Closing pull request on other statuses than rejected or approved forbidden"
 msgstr ""
 
@@ -254,55 +285,12 @@
 msgid "An error occurred during this search operation"
 msgstr ""
 
-#: rhodecode/controllers/settings.py:119
-#: rhodecode/controllers/admin/repos.py:272
-#, python-format
-msgid "Repository %s updated successfully"
-msgstr ""
-
-#: rhodecode/controllers/settings.py:137
-#: rhodecode/controllers/admin/repos.py:290
-#, python-format
-msgid "error occurred during update of repository %s"
-msgstr ""
-
-#: rhodecode/controllers/settings.py:162
-#: rhodecode/controllers/admin/repos.py:315
-#, python-format
-msgid "deleted repository %s"
-msgstr ""
-
-#: rhodecode/controllers/settings.py:166
-#: rhodecode/controllers/admin/repos.py:325
-#: rhodecode/controllers/admin/repos.py:331
-#, python-format
-msgid "An error occurred during deletion of %s"
-msgstr ""
-
-#: rhodecode/controllers/settings.py:185
-msgid "unlocked"
-msgstr ""
-
-#: rhodecode/controllers/settings.py:188
-msgid "locked"
-msgstr ""
-
-#: rhodecode/controllers/settings.py:190
-#, python-format
-msgid "Repository has been %s"
-msgstr ""
-
-#: rhodecode/controllers/settings.py:194
-#: rhodecode/controllers/admin/repos.py:423
-msgid "An error occurred during unlocking"
-msgstr ""
-
-#: rhodecode/controllers/summary.py:140
+#: rhodecode/controllers/summary.py:141
 msgid "No data loaded yet"
 msgstr ""
 
-#: rhodecode/controllers/summary.py:144
-#: rhodecode/templates/summary/summary.html:157
+#: rhodecode/controllers/summary.py:147
+#: rhodecode/templates/summary/summary.html:149
 msgid "Statistics are disabled for this repository"
 msgstr ""
 
@@ -311,7 +299,7 @@
 msgstr ""
 
 #: rhodecode/controllers/admin/defaults.py:110
-msgid "error occurred during update of defaults"
+msgid "Error occurred during update of defaults"
 msgstr ""
 
 #: rhodecode/controllers/admin/ldap_settings.py:50
@@ -359,7 +347,7 @@
 msgstr ""
 
 #: rhodecode/controllers/admin/ldap_settings.py:126
-msgid "Ldap settings updated successfully"
+msgid "LDAP settings updated successfully"
 msgstr ""
 
 #: rhodecode/controllers/admin/ldap_settings.py:130
@@ -367,533 +355,616 @@
 msgstr ""
 
 #: rhodecode/controllers/admin/ldap_settings.py:147
-msgid "error occurred during update of ldap settings"
-msgstr ""
-
-#: rhodecode/controllers/admin/permissions.py:59
-#: rhodecode/controllers/admin/permissions.py:63
-msgid "None"
+msgid "Error occurred during update of ldap settings"
 msgstr ""
 
 #: rhodecode/controllers/admin/permissions.py:60
 #: rhodecode/controllers/admin/permissions.py:64
-msgid "Read"
+msgid "None"
 msgstr ""
 
 #: rhodecode/controllers/admin/permissions.py:61
 #: rhodecode/controllers/admin/permissions.py:65
-msgid "Write"
+msgid "Read"
 msgstr ""
 
 #: rhodecode/controllers/admin/permissions.py:62
 #: rhodecode/controllers/admin/permissions.py:66
+msgid "Write"
+msgstr ""
+
+#: rhodecode/controllers/admin/permissions.py:63
+#: rhodecode/controllers/admin/permissions.py:67
 #: rhodecode/templates/admin/defaults/defaults.html:9
 #: rhodecode/templates/admin/ldap/ldap.html:9
 #: rhodecode/templates/admin/permissions/permissions.html:9
-#: rhodecode/templates/admin/repos/repo_add.html:9
-#: rhodecode/templates/admin/repos/repo_edit.html:9
+#: rhodecode/templates/admin/repos/repo_add.html:10
+#: rhodecode/templates/admin/repos/repo_add.html:14
 #: rhodecode/templates/admin/repos/repos.html:9
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:8
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:8
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:10
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:9
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:9
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:11
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:13
 #: rhodecode/templates/admin/settings/hooks.html:9
 #: rhodecode/templates/admin/settings/settings.html:9
 #: rhodecode/templates/admin/users/user_add.html:8
 #: rhodecode/templates/admin/users/user_edit.html:9
-#: rhodecode/templates/admin/users/user_edit.html:126
+#: rhodecode/templates/admin/users/user_edit.html:133
 #: rhodecode/templates/admin/users/users.html:9
+#: rhodecode/templates/admin/users/users.html:85
 #: rhodecode/templates/admin/users_groups/users_group_add.html:8
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:9
 #: rhodecode/templates/admin/users_groups/users_groups.html:9
-#: rhodecode/templates/base/base.html:197
-#: rhodecode/templates/base/base.html:350
-#: rhodecode/templates/base/base.html:352
-#: rhodecode/templates/base/base.html:354
+#: rhodecode/templates/base/base.html:292
+#: rhodecode/templates/base/base.html:293
+#: rhodecode/templates/base/base.html:299
+#: rhodecode/templates/base/base.html:300
 msgid "Admin"
 msgstr ""
 
-#: rhodecode/controllers/admin/permissions.py:69
-msgid "disabled"
-msgstr ""
-
-#: rhodecode/controllers/admin/permissions.py:71
-msgid "allowed with manual account activation"
-msgstr ""
-
-#: rhodecode/controllers/admin/permissions.py:73
-msgid "allowed with automatic account activation"
-msgstr ""
-
-#: rhodecode/controllers/admin/permissions.py:75
-#: rhodecode/controllers/admin/permissions.py:78
-msgid "Disabled"
-msgstr ""
-
+#: rhodecode/controllers/admin/permissions.py:70
 #: rhodecode/controllers/admin/permissions.py:76
 #: rhodecode/controllers/admin/permissions.py:79
+msgid "Disabled"
+msgstr ""
+
+#: rhodecode/controllers/admin/permissions.py:72
+msgid "Allowed with manual account activation"
+msgstr ""
+
+#: rhodecode/controllers/admin/permissions.py:74
+msgid "Allowed with automatic account activation"
+msgstr ""
+
+#: rhodecode/controllers/admin/permissions.py:77
+#: rhodecode/controllers/admin/permissions.py:80
 msgid "Enabled"
 msgstr ""
 
-#: rhodecode/controllers/admin/permissions.py:122
+#: rhodecode/controllers/admin/permissions.py:128
 msgid "Default permissions updated successfully"
 msgstr ""
 
-#: rhodecode/controllers/admin/permissions.py:136
-msgid "error occurred during update of permissions"
-msgstr ""
-
-#: rhodecode/controllers/admin/repos.py:121
+#: rhodecode/controllers/admin/permissions.py:142
+msgid "Error occurred during update of permissions"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:127
 msgid "--REMOVE FORK--"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos.py:190
+#: rhodecode/controllers/admin/repos.py:168
+#, python-format
+msgid "Created repository %s from %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:174
 #, python-format
-msgid "created repository %s from %s"
-msgstr ""
-
-#: rhodecode/controllers/admin/repos.py:194
+msgid "Created repository %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:197
+#, python-format
+msgid "Error creating repository %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:266
+#, python-format
+msgid "Repository %s updated successfully"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:284
 #, python-format
-msgid "created repository %s"
-msgstr ""
-
-#: rhodecode/controllers/admin/repos.py:225
+msgid "Error occurred during update of repository %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:311
+#: rhodecode/controllers/api/api.py:877
 #, python-format
-msgid "error occurred during creation of repository %s"
-msgstr ""
-
-#: rhodecode/controllers/admin/repos.py:320
+msgid "Detached %s forks"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:314
+#: rhodecode/controllers/api/api.py:879
+#, python-format
+msgid "Deleted %s forks"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:319
+#, python-format
+msgid "Deleted repository %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:322
 #, python-format
 msgid "Cannot delete %s it still contains attached forks"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos.py:349
+#: rhodecode/controllers/admin/repos.py:327
+#, python-format
+msgid "An error occurred during deletion of %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:365
+msgid "Repository permissions updated"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:384
 msgid "An error occurred during deletion of repository user"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos.py:368
-msgid "An error occurred during deletion of repository users groups"
-msgstr ""
-
-#: rhodecode/controllers/admin/repos.py:386
-msgid "An error occurred during deletion of repository stats"
-msgstr ""
-
 #: rhodecode/controllers/admin/repos.py:403
+msgid "An error occurred during deletion of repository user groups"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:421
+msgid "An error occurred during deletion of repository stats"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:438
 msgid "An error occurred during cache invalidation"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos.py:443
+#: rhodecode/controllers/admin/repos.py:458
+#: rhodecode/controllers/admin/repos.py:485
+msgid "An error occurred during unlocking"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:476
+msgid "Unlocked"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:479
+msgid "Locked"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:481
+#, python-format
+msgid "Repository has been %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:505
 msgid "Updated repository visibility in public journal"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos.py:447
+#: rhodecode/controllers/admin/repos.py:509
 msgid "An error occurred during setting this repository in public journal"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos.py:452 rhodecode/model/validators.py:300
+#: rhodecode/controllers/admin/repos.py:514 rhodecode/model/validators.py:302
 msgid "Token mismatch"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos.py:465
+#: rhodecode/controllers/admin/repos.py:527
 msgid "Pulled from remote location"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos.py:467
+#: rhodecode/controllers/admin/repos.py:529
 msgid "An error occurred during pull from remote location"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos.py:483
+#: rhodecode/controllers/admin/repos.py:545
 msgid "Nothing"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos.py:485
+#: rhodecode/controllers/admin/repos.py:547
 #, python-format
 msgid "Marked repo %s as fork of %s"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos.py:489
+#: rhodecode/controllers/admin/repos.py:551
 msgid "An error occurred during this operation"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos_groups.py:120
+#: rhodecode/controllers/admin/repos.py:590
+msgid "An error occurred during creation of field"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:604
+msgid "An error occurred during removal of field"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos_groups.py:145
 #, python-format
-msgid "created repos group %s"
-msgstr ""
-
-#: rhodecode/controllers/admin/repos_groups.py:133
+msgid "Created repository group %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos_groups.py:157
 #, python-format
-msgid "error occurred during creation of repos group %s"
-msgstr ""
-
-#: rhodecode/controllers/admin/repos_groups.py:167
+msgid "Error occurred during creation of repository group %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos_groups.py:214
+#: rhodecode/controllers/admin/repos_groups.py:286
+msgid "Cannot revoke permission for yourself as admin"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos_groups.py:220
 #, python-format
-msgid "updated repos group %s"
-msgstr ""
-
-#: rhodecode/controllers/admin/repos_groups.py:180
+msgid "Updated repository group %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos_groups.py:235
 #, python-format
-msgid "error occurred during update of repos group %s"
-msgstr ""
-
-#: rhodecode/controllers/admin/repos_groups.py:198
+msgid "Error occurred during update of repository group %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos_groups.py:253
 #, python-format
 msgid "This group contains %s repositores and cannot be deleted"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos_groups.py:206
+#: rhodecode/controllers/admin/repos_groups.py:260
+#, python-format
+msgid "This group contains %s subgroups and cannot be deleted"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos_groups.py:266
 #, python-format
-msgid "removed repos group %s"
-msgstr ""
-
-#: rhodecode/controllers/admin/repos_groups.py:212
-msgid "Cannot delete this group it still contains subgroups"
-msgstr ""
-
-#: rhodecode/controllers/admin/repos_groups.py:217
-#: rhodecode/controllers/admin/repos_groups.py:222
+msgid "Removed repository group %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos_groups.py:271
 #, python-format
-msgid "error occurred during deletion of repos group %s"
-msgstr ""
-
-#: rhodecode/controllers/admin/repos_groups.py:243
+msgid "Error occurred during deletion of repos group %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos_groups.py:297
 msgid "An error occurred during deletion of group user"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos_groups.py:264
-msgid "An error occurred during deletion of group users groups"
-msgstr ""
-
-#: rhodecode/controllers/admin/settings.py:123
+#: rhodecode/controllers/admin/repos_groups.py:318
+msgid "An error occurred during deletion of group user groups"
+msgstr ""
+
+#: rhodecode/controllers/admin/settings.py:126
 #, python-format
-msgid "Repositories successfully rescanned added: %s,removed: %s"
-msgstr ""
-
-#: rhodecode/controllers/admin/settings.py:131
+msgid "Repositories successfully rescanned added: %s ; removed: %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/settings.py:135
 msgid "Whoosh reindex task scheduled"
 msgstr ""
 
-#: rhodecode/controllers/admin/settings.py:162
-msgid "Updated application settings"
-msgstr ""
-
 #: rhodecode/controllers/admin/settings.py:166
-#: rhodecode/controllers/admin/settings.py:299
-msgid "error occurred during updating application settings"
-msgstr ""
-
-#: rhodecode/controllers/admin/settings.py:207
+msgid "Updated application settings"
+msgstr ""
+
+#: rhodecode/controllers/admin/settings.py:170
+#: rhodecode/controllers/admin/settings.py:301
+msgid "Error occurred during updating application settings"
+msgstr ""
+
+#: rhodecode/controllers/admin/settings.py:216
 msgid "Updated visualisation settings"
 msgstr ""
 
-#: rhodecode/controllers/admin/settings.py:212
-msgid "error occurred during updating visualisation settings"
-msgstr ""
-
-#: rhodecode/controllers/admin/settings.py:295
+#: rhodecode/controllers/admin/settings.py:221
+msgid "Error occurred during updating visualisation settings"
+msgstr ""
+
+#: rhodecode/controllers/admin/settings.py:297
 msgid "Updated VCS settings"
 msgstr ""
 
-#: rhodecode/controllers/admin/settings.py:309
+#: rhodecode/controllers/admin/settings.py:311
 msgid "Added new hook"
 msgstr ""
 
-#: rhodecode/controllers/admin/settings.py:321
+#: rhodecode/controllers/admin/settings.py:323
 msgid "Updated hooks"
 msgstr ""
 
-#: rhodecode/controllers/admin/settings.py:325
-msgid "error occurred during hook creation"
-msgstr ""
-
-#: rhodecode/controllers/admin/settings.py:344
+#: rhodecode/controllers/admin/settings.py:327
+msgid "Error occurred during hook creation"
+msgstr ""
+
+#: rhodecode/controllers/admin/settings.py:346
 msgid "Email task created"
 msgstr ""
 
-#: rhodecode/controllers/admin/settings.py:399
+#: rhodecode/controllers/admin/settings.py:410
 msgid "You can't edit this user since it's crucial for entire application"
 msgstr ""
 
-#: rhodecode/controllers/admin/settings.py:430
+#: rhodecode/controllers/admin/settings.py:452
 msgid "Your account was updated successfully"
 msgstr ""
 
-#: rhodecode/controllers/admin/settings.py:445
-#: rhodecode/controllers/admin/users.py:196
+#: rhodecode/controllers/admin/settings.py:467
+#: rhodecode/controllers/admin/users.py:198
 #, python-format
-msgid "error occurred during update of user %s"
+msgid "Error occurred during update of user %s"
 msgstr ""
 
 #: rhodecode/controllers/admin/users.py:130
 #, python-format
-msgid "created user %s"
+msgid "Created user %s"
 msgstr ""
 
 #: rhodecode/controllers/admin/users.py:142
 #, python-format
-msgid "error occurred during creation of user %s"
+msgid "Error occurred during creation of user %s"
 msgstr ""
 
 #: rhodecode/controllers/admin/users.py:176
 msgid "User updated successfully"
 msgstr ""
 
-#: rhodecode/controllers/admin/users.py:212
-msgid "successfully deleted user"
-msgstr ""
-
-#: rhodecode/controllers/admin/users.py:217
+#: rhodecode/controllers/admin/users.py:214
+msgid "Successfully deleted user"
+msgstr ""
+
+#: rhodecode/controllers/admin/users.py:219
 msgid "An error occurred during deletion of user"
 msgstr ""
 
-#: rhodecode/controllers/admin/users.py:231
+#: rhodecode/controllers/admin/users.py:233
 msgid "You can't edit this user"
 msgstr ""
 
-#: rhodecode/controllers/admin/users.py:272
+#: rhodecode/controllers/admin/users.py:276
 msgid "Granted 'repository create' permission to user"
 msgstr ""
 
-#: rhodecode/controllers/admin/users.py:277
+#: rhodecode/controllers/admin/users.py:281
 msgid "Revoked 'repository create' permission to user"
 msgstr ""
 
-#: rhodecode/controllers/admin/users.py:283
+#: rhodecode/controllers/admin/users.py:287
 msgid "Granted 'repository fork' permission to user"
 msgstr ""
 
-#: rhodecode/controllers/admin/users.py:288
+#: rhodecode/controllers/admin/users.py:292
 msgid "Revoked 'repository fork' permission to user"
 msgstr ""
 
-#: rhodecode/controllers/admin/users.py:294
-#: rhodecode/controllers/admin/users_groups.py:279
+#: rhodecode/controllers/admin/users.py:298
+#: rhodecode/controllers/admin/users_groups.py:281
 msgid "An error occurred during permissions saving"
 msgstr ""
 
-#: rhodecode/controllers/admin/users.py:309
+#: rhodecode/controllers/admin/users.py:312
 #, python-format
 msgid "Added email %s to user"
 msgstr ""
 
-#: rhodecode/controllers/admin/users.py:315
+#: rhodecode/controllers/admin/users.py:318
 msgid "An error occurred during email saving"
 msgstr ""
 
-#: rhodecode/controllers/admin/users.py:325
+#: rhodecode/controllers/admin/users.py:328
 msgid "Removed email from user"
 msgstr ""
 
+#: rhodecode/controllers/admin/users.py:341
+#, python-format
+msgid "Added ip %s to user"
+msgstr ""
+
+#: rhodecode/controllers/admin/users.py:347
+msgid "An error occurred during ip saving"
+msgstr ""
+
+#: rhodecode/controllers/admin/users.py:359
+msgid "Removed ip from user"
+msgstr ""
+
 #: rhodecode/controllers/admin/users_groups.py:86
 #, python-format
-msgid "created users group %s"
+msgid "Created user group %s"
 msgstr ""
 
 #: rhodecode/controllers/admin/users_groups.py:97
 #, python-format
-msgid "error occurred during creation of users group %s"
-msgstr ""
-
-#: rhodecode/controllers/admin/users_groups.py:164
+msgid "Error occurred during creation of user group %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/users_groups.py:166
 #, python-format
-msgid "updated users group %s"
-msgstr ""
-
-#: rhodecode/controllers/admin/users_groups.py:186
+msgid "Updated user group %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/users_groups.py:188
 #, python-format
-msgid "error occurred during update of users group %s"
-msgstr ""
-
-#: rhodecode/controllers/admin/users_groups.py:203
-msgid "successfully deleted users group"
-msgstr ""
-
-#: rhodecode/controllers/admin/users_groups.py:208
-msgid "An error occurred during deletion of users group"
-msgstr ""
-
-#: rhodecode/controllers/admin/users_groups.py:257
-msgid "Granted 'repository create' permission to users group"
-msgstr ""
-
-#: rhodecode/controllers/admin/users_groups.py:262
-msgid "Revoked 'repository create' permission to users group"
-msgstr ""
-
-#: rhodecode/controllers/admin/users_groups.py:268
-msgid "Granted 'repository fork' permission to users group"
-msgstr ""
-
-#: rhodecode/controllers/admin/users_groups.py:273
-msgid "Revoked 'repository fork' permission to users group"
-msgstr ""
-
-#: rhodecode/lib/auth.py:499
+msgid "Error occurred during update of user group %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/users_groups.py:205
+msgid "Successfully deleted user group"
+msgstr ""
+
+#: rhodecode/controllers/admin/users_groups.py:210
+msgid "An error occurred during deletion of user group"
+msgstr ""
+
+#: rhodecode/controllers/admin/users_groups.py:259
+msgid "Granted 'repository create' permission to user group"
+msgstr ""
+
+#: rhodecode/controllers/admin/users_groups.py:264
+msgid "Revoked 'repository create' permission to user group"
+msgstr ""
+
+#: rhodecode/controllers/admin/users_groups.py:270
+msgid "Granted 'repository fork' permission to user group"
+msgstr ""
+
+#: rhodecode/controllers/admin/users_groups.py:275
+msgid "Revoked 'repository fork' permission to user group"
+msgstr ""
+
+#: rhodecode/lib/auth.py:530
+#, python-format
+msgid "IP %s not allowed"
+msgstr ""
+
+#: rhodecode/lib/auth.py:579
 msgid "You need to be a registered user to perform this action"
 msgstr ""
 
-#: rhodecode/lib/auth.py:540
+#: rhodecode/lib/auth.py:620
 msgid "You need to be a signed in to view this page"
 msgstr ""
 
-#: rhodecode/lib/diffs.py:74
-msgid "binary file"
-msgstr ""
-
-#: rhodecode/lib/diffs.py:90
+#: rhodecode/lib/diffs.py:66
+msgid "Binary file"
+msgstr ""
+
+#: rhodecode/lib/diffs.py:82
 msgid "Changeset was too big and was cut off, use diff menu to display this diff"
 msgstr ""
 
-#: rhodecode/lib/diffs.py:100
+#: rhodecode/lib/diffs.py:92
 msgid "No changes detected"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:374
+#: rhodecode/lib/helpers.py:394
 #, python-format
 msgid "%a, %d %b %Y %H:%M:%S"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:486
+#: rhodecode/lib/helpers.py:506
 msgid "True"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:490
+#: rhodecode/lib/helpers.py:509
 msgid "False"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:530
+#: rhodecode/lib/helpers.py:547
 #, python-format
 msgid "Deleted branch: %s"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:533
+#: rhodecode/lib/helpers.py:550
 #, python-format
 msgid "Created tag: %s"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:546
+#: rhodecode/lib/helpers.py:563
 msgid "Changeset not found"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:589
-#, python-format
-msgid "Show all combined changesets %s->%s"
-msgstr ""
-
-#: rhodecode/lib/helpers.py:595
-msgid "compare view"
-msgstr ""
-
 #: rhodecode/lib/helpers.py:615
-msgid "and"
-msgstr ""
-
-#: rhodecode/lib/helpers.py:616
 #, python-format
-msgid "%s more"
-msgstr ""
-
-#: rhodecode/lib/helpers.py:617 rhodecode/templates/changelog/changelog.html:51
-msgid "revisions"
+msgid "Show all combined changesets %s->%s"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:621
+msgid "compare view"
 msgstr ""
 
 #: rhodecode/lib/helpers.py:641
+msgid "and"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:642
+#, python-format
+msgid "%s more"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:643 rhodecode/templates/changelog/changelog.html:44
+msgid "revisions"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:667
 #, python-format
 msgid "fork name %s"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:658
-#: rhodecode/templates/pullrequests/pullrequest_show.html:4
-#: rhodecode/templates/pullrequests/pullrequest_show.html:12
-#, python-format
-msgid "Pull request #%s"
-msgstr ""
-
-#: rhodecode/lib/helpers.py:664
-msgid "[deleted] repository"
-msgstr ""
-
-#: rhodecode/lib/helpers.py:666 rhodecode/lib/helpers.py:676
-msgid "[created] repository"
-msgstr ""
-
-#: rhodecode/lib/helpers.py:668
-msgid "[created] repository as fork"
-msgstr ""
-
-#: rhodecode/lib/helpers.py:670 rhodecode/lib/helpers.py:678
-msgid "[forked] repository"
-msgstr ""
-
-#: rhodecode/lib/helpers.py:672 rhodecode/lib/helpers.py:680
-msgid "[updated] repository"
-msgstr ""
-
-#: rhodecode/lib/helpers.py:674
-msgid "[delete] repository"
-msgstr ""
-
-#: rhodecode/lib/helpers.py:682
-msgid "[created] user"
-msgstr ""
-
 #: rhodecode/lib/helpers.py:684
-msgid "[updated] user"
-msgstr ""
-
-#: rhodecode/lib/helpers.py:686
-msgid "[created] users group"
-msgstr ""
-
-#: rhodecode/lib/helpers.py:688
-msgid "[updated] users group"
+#: rhodecode/templates/pullrequests/pullrequest_show.html:8
+#, python-format
+msgid "Pull request #%s"
 msgstr ""
 
 #: rhodecode/lib/helpers.py:690
-msgid "[commented] on revision in repository"
-msgstr ""
-
-#: rhodecode/lib/helpers.py:692
-msgid "[commented] on pull request for"
+msgid "[deleted] repository"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:692 rhodecode/lib/helpers.py:702
+msgid "[created] repository"
 msgstr ""
 
 #: rhodecode/lib/helpers.py:694
-msgid "[closed] pull request for"
-msgstr ""
-
-#: rhodecode/lib/helpers.py:696
-msgid "[pushed] into"
-msgstr ""
-
-#: rhodecode/lib/helpers.py:698
-msgid "[committed via RhodeCode] into repository"
+msgid "[created] repository as fork"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:696 rhodecode/lib/helpers.py:704
+msgid "[forked] repository"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:698 rhodecode/lib/helpers.py:706
+msgid "[updated] repository"
 msgstr ""
 
 #: rhodecode/lib/helpers.py:700
+msgid "[delete] repository"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:708
+msgid "[created] user"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:710
+msgid "[updated] user"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:712
+msgid "[created] user group"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:714
+msgid "[updated] user group"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:716
+msgid "[commented] on revision in repository"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:718
+msgid "[commented] on pull request for"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:720
+msgid "[closed] pull request for"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:722
+msgid "[pushed] into"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:724
+msgid "[committed via RhodeCode] into repository"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:726
 msgid "[pulled from remote] into repository"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:702
+#: rhodecode/lib/helpers.py:728
 msgid "[pulled] from"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:704
+#: rhodecode/lib/helpers.py:730
 msgid "[started following] repository"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:706
+#: rhodecode/lib/helpers.py:732
 msgid "[stopped following] repository"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:883
+#: rhodecode/lib/helpers.py:910
 #, python-format
 msgid " and %s more"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:887
+#: rhodecode/lib/helpers.py:914
 msgid "No Files"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:1163
+#: rhodecode/lib/helpers.py:1198
 #, python-format
 msgid ""
 "%s repository is not mapped to db perhaps it was created or renamed from "
@@ -901,165 +972,225 @@
 "repositories"
 msgstr ""
 
-#: rhodecode/lib/utils2.py:403
+#: rhodecode/lib/unionrepo.py:193
+msgid "cannot create new union repository"
+msgstr ""
+
+#: rhodecode/lib/utils2.py:411
 #, python-format
 msgid "%d year"
 msgid_plural "%d years"
 msgstr[0] ""
 msgstr[1] ""
 
-#: rhodecode/lib/utils2.py:404
+#: rhodecode/lib/utils2.py:412
 #, python-format
 msgid "%d month"
 msgid_plural "%d months"
 msgstr[0] ""
 msgstr[1] ""
 
-#: rhodecode/lib/utils2.py:405
+#: rhodecode/lib/utils2.py:413
 #, python-format
 msgid "%d day"
 msgid_plural "%d days"
 msgstr[0] ""
 msgstr[1] ""
 
-#: rhodecode/lib/utils2.py:406
+#: rhodecode/lib/utils2.py:414
 #, python-format
 msgid "%d hour"
 msgid_plural "%d hours"
 msgstr[0] ""
 msgstr[1] ""
 
-#: rhodecode/lib/utils2.py:407
+#: rhodecode/lib/utils2.py:415
 #, python-format
 msgid "%d minute"
 msgid_plural "%d minutes"
 msgstr[0] ""
 msgstr[1] ""
 
-#: rhodecode/lib/utils2.py:408
+#: rhodecode/lib/utils2.py:416
 #, python-format
 msgid "%d second"
 msgid_plural "%d seconds"
 msgstr[0] ""
 msgstr[1] ""
 
-#: rhodecode/lib/utils2.py:424
+#: rhodecode/lib/utils2.py:432
 #, python-format
 msgid "in %s"
 msgstr ""
 
-#: rhodecode/lib/utils2.py:426
-#, python-format
-msgid "%s ago"
-msgstr ""
-
-#: rhodecode/lib/utils2.py:428
-#, python-format
-msgid "in %s and %s"
-msgstr ""
-
-#: rhodecode/lib/utils2.py:431
-#, python-format
-msgid "%s and %s ago"
-msgstr ""
-
 #: rhodecode/lib/utils2.py:434
+#, python-format
+msgid "%s ago"
+msgstr ""
+
+#: rhodecode/lib/utils2.py:436
+#, python-format
+msgid "in %s and %s"
+msgstr ""
+
+#: rhodecode/lib/utils2.py:439
+#, python-format
+msgid "%s and %s ago"
+msgstr ""
+
+#: rhodecode/lib/utils2.py:442
 msgid "just now"
 msgstr ""
 
-#: rhodecode/lib/celerylib/tasks.py:270
-msgid "password reset link"
-msgstr ""
-
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163 rhodecode/model/db.py:1183
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1183
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1289 rhodecode/model/db.py:1388
 msgid "Repository no access"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164 rhodecode/model/db.py:1184
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1184
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1290 rhodecode/model/db.py:1389
 msgid "Repository read access"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165 rhodecode/model/db.py:1185
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1185
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1291 rhodecode/model/db.py:1390
 msgid "Repository write access"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166 rhodecode/model/db.py:1186
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1186
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1292 rhodecode/model/db.py:1391
 msgid "Repository admin access"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168 rhodecode/model/db.py:1188
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1188
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1294
 msgid "Repositories Group no access"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169 rhodecode/model/db.py:1189
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1189
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1295
 msgid "Repositories Group read access"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170 rhodecode/model/db.py:1190
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1190
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1296
 msgid "Repositories Group write access"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171 rhodecode/model/db.py:1191
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1191
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1297
 msgid "Repositories Group admin access"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173 rhodecode/model/db.py:1193
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1193
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1299 rhodecode/model/db.py:1398
 msgid "RhodeCode Administrator"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174 rhodecode/model/db.py:1194
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1194
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1300 rhodecode/model/db.py:1399
 msgid "Repository creation disabled"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175 rhodecode/model/db.py:1195
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1195
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1301 rhodecode/model/db.py:1400
 msgid "Repository creation enabled"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176 rhodecode/model/db.py:1196
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1196
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1302 rhodecode/model/db.py:1401
 msgid "Repository forking disabled"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177 rhodecode/model/db.py:1197
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1197
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1303 rhodecode/model/db.py:1402
 msgid "Repository forking enabled"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178 rhodecode/model/db.py:1198
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1198
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1304 rhodecode/model/db.py:1403
 msgid "Register disabled"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179 rhodecode/model/db.py:1199
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1199
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1305 rhodecode/model/db.py:1404
 msgid "Register new user with RhodeCode with manual activation"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182 rhodecode/model/db.py:1202
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1202
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1308 rhodecode/model/db.py:1407
 msgid "Register new user with RhodeCode with auto activation"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623 rhodecode/model/db.py:1643
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1643
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1749 rhodecode/model/db.py:1838
 msgid "Not Reviewed"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624 rhodecode/model/db.py:1644
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1644
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1750 rhodecode/model/db.py:1839
 msgid "Approved"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625 rhodecode/model/db.py:1645
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1645
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1751 rhodecode/model/db.py:1840
 msgid "Rejected"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626 rhodecode/model/db.py:1646
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1646
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1752 rhodecode/model/db.py:1841
 msgid "Under Review"
 msgstr ""
 
-#: rhodecode/model/comment.py:110
+#: rhodecode/model/comment.py:75
 #, python-format
 msgid "on line %s"
 msgstr ""
 
-#: rhodecode/model/comment.py:173
+#: rhodecode/model/comment.py:219
 msgid "[Mention]"
 msgstr ""
 
+#: rhodecode/model/db.py:1252
+msgid "top level"
+msgstr ""
+
+#: rhodecode/model/db.py:1393
+msgid "Repository group no access"
+msgstr ""
+
+#: rhodecode/model/db.py:1394
+msgid "Repository group read access"
+msgstr ""
+
+#: rhodecode/model/db.py:1395
+msgid "Repository group write access"
+msgstr ""
+
+#: rhodecode/model/db.py:1396
+msgid "Repository group admin access"
+msgstr ""
+
 #: rhodecode/model/forms.py:43
 msgid "Please enter a login"
 msgstr ""
@@ -1078,204 +1209,237 @@
 msgid "Enter %(min)i characters or more"
 msgstr ""
 
-#: rhodecode/model/notification.py:220
-#, python-format
-msgid "commented on commit at %(when)s"
-msgstr ""
-
-#: rhodecode/model/notification.py:221
-#, python-format
-msgid "sent message at %(when)s"
-msgstr ""
-
-#: rhodecode/model/notification.py:222
-#, python-format
-msgid "mentioned you at %(when)s"
-msgstr ""
-
-#: rhodecode/model/notification.py:223
-#, python-format
-msgid "registered in RhodeCode at %(when)s"
-msgstr ""
-
 #: rhodecode/model/notification.py:224
 #, python-format
-msgid "opened new pull request at %(when)s"
+msgid "%(user)s commented on changeset at %(when)s"
 msgstr ""
 
 #: rhodecode/model/notification.py:225
 #, python-format
-msgid "commented on pull request at %(when)s"
-msgstr ""
-
-#: rhodecode/model/pull_request.py:90
+msgid "%(user)s sent message at %(when)s"
+msgstr ""
+
+#: rhodecode/model/notification.py:226
+#, python-format
+msgid "%(user)s mentioned you at %(when)s"
+msgstr ""
+
+#: rhodecode/model/notification.py:227
+#, python-format
+msgid "%(user)s registered in RhodeCode at %(when)s"
+msgstr ""
+
+#: rhodecode/model/notification.py:228
 #, python-format
-msgid "%(user)s wants you to review pull request #%(pr_id)s"
-msgstr ""
-
-#: rhodecode/model/scm.py:542
+msgid "%(user)s opened new pull request at %(when)s"
+msgstr ""
+
+#: rhodecode/model/notification.py:229
+#, python-format
+msgid "%(user)s commented on pull request at %(when)s"
+msgstr ""
+
+#: rhodecode/model/pull_request.py:104
+#, python-format
+msgid "%(user)s wants you to review pull request #%(pr_id)s: %(pr_title)s"
+msgstr ""
+
+#: rhodecode/model/scm.py:598
 msgid "latest tip"
 msgstr ""
 
 #: rhodecode/model/user.py:232
-msgid "new user registration"
+msgid "New user registration"
 msgstr ""
 
 #: rhodecode/model/user.py:257 rhodecode/model/user.py:281
+msgid "You can't Edit this user since it's crucial for entire application"
+msgstr ""
+
 #: rhodecode/model/user.py:303
-msgid "You can't Edit this user since it's crucial for entire application"
-msgstr ""
-
-#: rhodecode/model/user.py:327
 msgid "You can't remove this user since it's crucial for entire application"
 msgstr ""
 
-#: rhodecode/model/user.py:333
+#: rhodecode/model/user.py:309
 #, python-format
 msgid ""
 "user \"%s\" still owns %s repositories and cannot be removed. Switch "
 "owners or remove those repositories. %s"
 msgstr ""
 
-#: rhodecode/model/validators.py:36 rhodecode/model/validators.py:37
+#: rhodecode/model/user.py:334
+msgid "Password reset link"
+msgstr ""
+
+#: rhodecode/model/user.py:366
+msgid "Your new password"
+msgstr ""
+
+#: rhodecode/model/user.py:367
+#, python-format
+msgid "Your new RhodeCode password:%s"
+msgstr ""
+
+#: rhodecode/model/validators.py:38 rhodecode/model/validators.py:39
 msgid "Value cannot be an empty list"
 msgstr ""
 
-#: rhodecode/model/validators.py:83
-#, python-format
-msgid "Username \"%(username)s\" already exists"
-msgstr ""
-
 #: rhodecode/model/validators.py:85
 #, python-format
-msgid "Username \"%(username)s\" is forbidden"
+msgid "Username \"%(username)s\" already exists"
 msgstr ""
 
 #: rhodecode/model/validators.py:87
+#, python-format
+msgid "Username \"%(username)s\" is forbidden"
+msgstr ""
+
+#: rhodecode/model/validators.py:89
 msgid ""
 "Username may only contain alphanumeric characters underscores, periods or"
 " dashes and must begin with alphanumeric character"
 msgstr ""
 
-#: rhodecode/model/validators.py:115
+#: rhodecode/model/validators.py:117
 #, python-format
 msgid "Username %(username)s is not valid"
 msgstr ""
 
-#: rhodecode/model/validators.py:134
-msgid "Invalid users group name"
-msgstr ""
-
-#: rhodecode/model/validators.py:135
-#, python-format
-msgid "Users group \"%(usersgroup)s\" already exists"
+#: rhodecode/model/validators.py:136
+msgid "Invalid user group name"
 msgstr ""
 
 #: rhodecode/model/validators.py:137
+#, python-format
+msgid "User group \"%(usergroup)s\" already exists"
+msgstr ""
+
+#: rhodecode/model/validators.py:139
 msgid ""
-"users group name may only contain  alphanumeric characters underscores, "
+"user group name may only contain alphanumeric characters underscores, "
 "periods or dashes and must begin with alphanumeric character"
 msgstr ""
 
-#: rhodecode/model/validators.py:175
+#: rhodecode/model/validators.py:177
 msgid "Cannot assign this group as parent"
 msgstr ""
 
-#: rhodecode/model/validators.py:176
-#, python-format
-msgid "Group \"%(group_name)s\" already exists"
-msgstr ""
-
 #: rhodecode/model/validators.py:178
 #, python-format
+msgid "Group \"%(group_name)s\" already exists"
+msgstr ""
+
+#: rhodecode/model/validators.py:180
+#, python-format
 msgid "Repository with name \"%(group_name)s\" already exists"
 msgstr ""
 
-#: rhodecode/model/validators.py:236
+#: rhodecode/model/validators.py:238
 msgid "Invalid characters (non-ascii) in password"
 msgstr ""
 
-#: rhodecode/model/validators.py:251
+#: rhodecode/model/validators.py:253
 msgid "Passwords do not match"
 msgstr ""
 
-#: rhodecode/model/validators.py:268
-msgid "invalid password"
-msgstr ""
-
-#: rhodecode/model/validators.py:269
-msgid "invalid user name"
-msgstr ""
-
 #: rhodecode/model/validators.py:270
+msgid "invalid password"
+msgstr ""
+
+#: rhodecode/model/validators.py:271
+msgid "invalid user name"
+msgstr ""
+
+#: rhodecode/model/validators.py:272
 msgid "Your account is disabled"
 msgstr ""
 
-#: rhodecode/model/validators.py:314
-#, python-format
-msgid "Repository name %(repo)s is disallowed"
-msgstr ""
-
 #: rhodecode/model/validators.py:316
 #, python-format
+msgid "Repository name %(repo)s is disallowed"
+msgstr ""
+
+#: rhodecode/model/validators.py:318
+#, python-format
 msgid "Repository named %(repo)s already exists"
 msgstr ""
 
-#: rhodecode/model/validators.py:317
-#, python-format
-msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\""
-msgstr ""
-
 #: rhodecode/model/validators.py:319
 #, python-format
-msgid "Repositories group with name \"%(repo)s\" already exists"
-msgstr ""
-
-#: rhodecode/model/validators.py:432
+msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\""
+msgstr ""
+
+#: rhodecode/model/validators.py:321
+#, python-format
+msgid "Repository group with name \"%(repo)s\" already exists"
+msgstr ""
+
+#: rhodecode/model/validators.py:438
 msgid "invalid clone url"
 msgstr ""
 
-#: rhodecode/model/validators.py:433
+#: rhodecode/model/validators.py:439
 msgid "Invalid clone url, provide a valid clone http(s)/svn+http(s) url"
 msgstr ""
 
-#: rhodecode/model/validators.py:458
+#: rhodecode/model/validators.py:464
 msgid "Fork have to be the same type as parent"
 msgstr ""
 
-#: rhodecode/model/validators.py:473
+#: rhodecode/model/validators.py:479
 msgid "You don't have permissions to create repository in this group"
 msgstr ""
 
-#: rhodecode/model/validators.py:498
-msgid "This username or users group name is not valid"
-msgstr ""
-
-#: rhodecode/model/validators.py:591
+#: rhodecode/model/validators.py:481
+msgid "no permission to create repository in root location"
+msgstr ""
+
+#: rhodecode/model/validators.py:518
+msgid "You don't have permissions to create a group in this location"
+msgstr ""
+
+#: rhodecode/model/validators.py:557
+msgid "This username or user group name is not valid"
+msgstr ""
+
+#: rhodecode/model/validators.py:650
 msgid "This is not a valid path"
 msgstr ""
 
-#: rhodecode/model/validators.py:606
+#: rhodecode/model/validators.py:665
 msgid "This e-mail address is already taken"
 msgstr ""
 
-#: rhodecode/model/validators.py:626
+#: rhodecode/model/validators.py:685
 #, python-format
 msgid "e-mail \"%(email)s\" does not exist."
 msgstr ""
 
-#: rhodecode/model/validators.py:663
+#: rhodecode/model/validators.py:722
 msgid ""
 "The LDAP Login attribute of the CN must be specified - this is the name "
 "of the attribute that is equivalent to \"username\""
 msgstr ""
 
-#: rhodecode/model/validators.py:682
+#: rhodecode/model/validators.py:735
 #, python-format
 msgid "Revisions %(revs)s are already part of pull request or have set status"
 msgstr ""
 
-#: rhodecode/templates/index.html:3
+#: rhodecode/model/validators.py:767
+msgid "Please enter a valid IPv4 or IpV6 address"
+msgstr ""
+
+#: rhodecode/model/validators.py:768
+#, python-format
+msgid "The network size (bits) must be within the range of 0-32 (not %(bits)r)"
+msgstr ""
+
+#: rhodecode/model/validators.py:800
+msgid "Key name can only consist of letters, underscore, dash or numbers"
+msgstr ""
+
+#: rhodecode/templates/index.html:5
 msgid "Dashboard"
 msgstr ""
 
@@ -1284,205 +1448,226 @@
 #: rhodecode/templates/admin/repos/repos.html:9
 #: rhodecode/templates/admin/users/user_edit_my_account.html:31
 #: rhodecode/templates/admin/users/users.html:9
-#: rhodecode/templates/bookmarks/bookmarks.html:10
+#: rhodecode/templates/bookmarks/bookmarks.html:9
 #: rhodecode/templates/branches/branches.html:9
 #: rhodecode/templates/journal/journal.html:9
-#: rhodecode/templates/journal/journal.html:48
-#: rhodecode/templates/tags/tags.html:10
+#: rhodecode/templates/journal/journal.html:46
+#: rhodecode/templates/journal/journal.html:47
+#: rhodecode/templates/tags/tags.html:9
 msgid "quick filter..."
 msgstr ""
 
 #: rhodecode/templates/index_base.html:6
 #: rhodecode/templates/admin/repos/repos.html:9
-#: rhodecode/templates/base/base.html:233
 msgid "repositories"
 msgstr ""
 
 #: rhodecode/templates/index_base.html:13
-#: rhodecode/templates/index_base.html:15
+#: rhodecode/templates/index_base.html:18
+#: rhodecode/templates/admin/repos/repo_add.html:5
 #: rhodecode/templates/admin/repos/repos.html:21
-msgid "ADD REPOSITORY"
-msgstr ""
-
-#: rhodecode/templates/index_base.html:29
-#: rhodecode/templates/index_base.html:136
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:32
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:32
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:33
-#: rhodecode/templates/admin/users_groups/users_group_add.html:32
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:33
-msgid "Group name"
-msgstr ""
-
-#: rhodecode/templates/index_base.html:30
-#: rhodecode/templates/index_base.html:72
-#: rhodecode/templates/index_base.html:138
-#: rhodecode/templates/index_base.html:176
-#: rhodecode/templates/index_base.html:266
-#: rhodecode/templates/admin/repos/repo_add_base.html:56
-#: rhodecode/templates/admin/repos/repo_edit.html:75
-#: rhodecode/templates/admin/repos/repos.html:72
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:41
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:41
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:34
-#: rhodecode/templates/forks/fork.html:59
-#: rhodecode/templates/settings/repo_settings.html:66
-#: rhodecode/templates/summary/summary.html:114
-msgid "Description"
+msgid "Add repository"
+msgstr ""
+
+#: rhodecode/templates/index_base.html:15
+#: rhodecode/templates/index_base.html:20
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:31
+msgid "Add group"
+msgstr ""
+
+#: rhodecode/templates/index_base.html:27
+msgid "Edit group"
+msgstr ""
+
+#: rhodecode/templates/index_base.html:27
+msgid "You have admin right to this group, and can edit it"
 msgstr ""
 
 #: rhodecode/templates/index_base.html:40
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:47
-msgid "Repositories group"
-msgstr ""
-
-#: rhodecode/templates/index_base.html:71
-#: rhodecode/templates/index_base.html:174
-#: rhodecode/templates/index_base.html:264
+#: rhodecode/templates/index_base.html:140
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:33
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:38
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:43
+#: rhodecode/templates/admin/users_groups/users_group_add.html:32
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:33
+#: rhodecode/templates/admin/users_groups/users_groups.html:34
+msgid "Group name"
+msgstr ""
+
+#: rhodecode/templates/index_base.html:41
+#: rhodecode/templates/index_base.html:83
+#: rhodecode/templates/index_base.html:142
+#: rhodecode/templates/index_base.html:180
+#: rhodecode/templates/index_base.html:270
+#: rhodecode/templates/admin/repos/repo_add_base.html:56
+#: rhodecode/templates/admin/repos/repo_edit.html:75
+#: rhodecode/templates/admin/repos/repos.html:73
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:42
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:47
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:44
+#: rhodecode/templates/forks/fork.html:56
+#: rhodecode/templates/pullrequests/pullrequest.html:101
+#: rhodecode/templates/summary/summary.html:106
+msgid "Description"
+msgstr ""
+
+#: rhodecode/templates/index_base.html:51
+#: rhodecode/templates/admin/permissions/permissions.html:55
+#: rhodecode/templates/admin/repos/repo_add_base.html:29
+#: rhodecode/templates/admin/repos/repo_edit.html:49
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:57
+#: rhodecode/templates/forks/fork.html:47
+msgid "Repository group"
+msgstr ""
+
+#: rhodecode/templates/index_base.html:82
+#: rhodecode/templates/index_base.html:178
+#: rhodecode/templates/index_base.html:268
 #: rhodecode/templates/admin/repos/repo_add_base.html:9
 #: rhodecode/templates/admin/repos/repo_edit.html:32
-#: rhodecode/templates/admin/repos/repos.html:70
-#: rhodecode/templates/admin/users/user_edit.html:196
-#: rhodecode/templates/admin/users/user_edit_my_account.html:59
-#: rhodecode/templates/admin/users/user_edit_my_account.html:180
-#: rhodecode/templates/admin/users/user_edit_my_account.html:216
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:6
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:184
-#: rhodecode/templates/bookmarks/bookmarks.html:36
+#: rhodecode/templates/admin/repos/repos.html:71
+#: rhodecode/templates/admin/users/user_edit_my_account.html:172
+#: rhodecode/templates/base/perms_summary.html:14
+#: rhodecode/templates/bookmarks/bookmarks.html:34
 #: rhodecode/templates/bookmarks/bookmarks_data.html:6
-#: rhodecode/templates/branches/branches.html:50
+#: rhodecode/templates/branches/branches.html:47
 #: rhodecode/templates/branches/branches_data.html:6
 #: rhodecode/templates/files/files_browser.html:47
-#: rhodecode/templates/journal/journal.html:70
-#: rhodecode/templates/journal/journal.html:196
-#: rhodecode/templates/journal/journal_page_repos.html:7
-#: rhodecode/templates/settings/repo_settings.html:31
-#: rhodecode/templates/summary/summary.html:43
-#: rhodecode/templates/summary/summary.html:132
-#: rhodecode/templates/tags/tags.html:51
+#: rhodecode/templates/journal/journal.html:193
+#: rhodecode/templates/journal/journal.html:296
+#: rhodecode/templates/summary/summary.html:55
+#: rhodecode/templates/summary/summary.html:124
+#: rhodecode/templates/tags/tags.html:48
 #: rhodecode/templates/tags/tags_data.html:6
 msgid "Name"
 msgstr ""
 
-#: rhodecode/templates/index_base.html:73
+#: rhodecode/templates/index_base.html:84
 msgid "Last change"
 msgstr ""
 
-#: rhodecode/templates/index_base.html:74
-#: rhodecode/templates/index_base.html:179
-#: rhodecode/templates/admin/users/user_edit_my_account.html:182
-#: rhodecode/templates/journal/journal.html:198
+#: rhodecode/templates/index_base.html:85
+#: rhodecode/templates/index_base.html:183
+#: rhodecode/templates/index_base.html:273
+#: rhodecode/templates/admin/repos/repos.html:74
+#: rhodecode/templates/admin/users/user_edit_my_account.html:174
+#: rhodecode/templates/journal/journal.html:195
+#: rhodecode/templates/journal/journal.html:298
 msgid "Tip"
 msgstr ""
 
-#: rhodecode/templates/index_base.html:75
-#: rhodecode/templates/index_base.html:181
-#: rhodecode/templates/index_base.html:269
+#: rhodecode/templates/index_base.html:86
+#: rhodecode/templates/index_base.html:185
+#: rhodecode/templates/index_base.html:275
 #: rhodecode/templates/admin/repos/repo_edit.html:121
-#: rhodecode/templates/admin/repos/repos.html:73
+#: rhodecode/templates/admin/repos/repos.html:76
 msgid "Owner"
 msgstr ""
 
-#: rhodecode/templates/index_base.html:76
-#: rhodecode/templates/summary/summary.html:48
-#: rhodecode/templates/summary/summary.html:51
-msgid "RSS"
-msgstr ""
-
-#: rhodecode/templates/index_base.html:77
+#: rhodecode/templates/index_base.html:87
 msgid "Atom"
 msgstr ""
 
-#: rhodecode/templates/index_base.html:167
-#: rhodecode/templates/index_base.html:207
-#: rhodecode/templates/index_base.html:291
-#: rhodecode/templates/admin/repos/repos.html:94
-#: rhodecode/templates/admin/users/user_edit_my_account.html:202
+#: rhodecode/templates/index_base.html:171
+#: rhodecode/templates/index_base.html:209
+#: rhodecode/templates/index_base.html:296
+#: rhodecode/templates/admin/repos/repos.html:97
+#: rhodecode/templates/admin/users/user_edit_my_account.html:196
 #: rhodecode/templates/admin/users/users.html:107
-#: rhodecode/templates/bookmarks/bookmarks.html:60
-#: rhodecode/templates/branches/branches.html:76
-#: rhodecode/templates/journal/journal.html:221
-#: rhodecode/templates/tags/tags.html:77
+#: rhodecode/templates/bookmarks/bookmarks.html:58
+#: rhodecode/templates/branches/branches.html:73
+#: rhodecode/templates/journal/journal.html:217
+#: rhodecode/templates/journal/journal.html:320
+#: rhodecode/templates/tags/tags.html:74
 msgid "Click to sort ascending"
 msgstr ""
 
-#: rhodecode/templates/index_base.html:168
-#: rhodecode/templates/index_base.html:208
-#: rhodecode/templates/index_base.html:292
-#: rhodecode/templates/admin/repos/repos.html:95
-#: rhodecode/templates/admin/users/user_edit_my_account.html:203
+#: rhodecode/templates/index_base.html:172
+#: rhodecode/templates/index_base.html:210
+#: rhodecode/templates/index_base.html:297
+#: rhodecode/templates/admin/repos/repos.html:98
+#: rhodecode/templates/admin/users/user_edit_my_account.html:197
 #: rhodecode/templates/admin/users/users.html:108
-#: rhodecode/templates/bookmarks/bookmarks.html:61
-#: rhodecode/templates/branches/branches.html:77
-#: rhodecode/templates/journal/journal.html:222
-#: rhodecode/templates/tags/tags.html:78
+#: rhodecode/templates/bookmarks/bookmarks.html:59
+#: rhodecode/templates/branches/branches.html:74
+#: rhodecode/templates/journal/journal.html:218
+#: rhodecode/templates/journal/journal.html:321
+#: rhodecode/templates/tags/tags.html:75
 msgid "Click to sort descending"
 msgstr ""
 
-#: rhodecode/templates/index_base.html:177
-#: rhodecode/templates/index_base.html:267
+#: rhodecode/templates/index_base.html:181
+#: rhodecode/templates/index_base.html:271
 msgid "Last Change"
 msgstr ""
 
-#: rhodecode/templates/index_base.html:209
-#: rhodecode/templates/index_base.html:293
-#: rhodecode/templates/admin/repos/repos.html:96
-#: rhodecode/templates/admin/users/user_edit_my_account.html:204
-#: rhodecode/templates/admin/users/users.html:109
-#: rhodecode/templates/bookmarks/bookmarks.html:62
-#: rhodecode/templates/branches/branches.html:78
-#: rhodecode/templates/journal/journal.html:223
-#: rhodecode/templates/tags/tags.html:79
-msgid "No records found."
-msgstr ""
-
-#: rhodecode/templates/index_base.html:210
-#: rhodecode/templates/index_base.html:294
-#: rhodecode/templates/admin/repos/repos.html:97
-#: rhodecode/templates/admin/users/user_edit_my_account.html:205
-#: rhodecode/templates/admin/users/users.html:110
-#: rhodecode/templates/bookmarks/bookmarks.html:63
-#: rhodecode/templates/branches/branches.html:79
-#: rhodecode/templates/journal/journal.html:224
-#: rhodecode/templates/tags/tags.html:80
-msgid "Data error."
-msgstr ""
-
 #: rhodecode/templates/index_base.html:211
-#: rhodecode/templates/index_base.html:295
-#: rhodecode/templates/admin/repos/repos.html:98
-#: rhodecode/templates/admin/users/user_edit_my_account.html:206
+#: rhodecode/templates/admin/repos/repos.html:99
+#: rhodecode/templates/admin/users/user_edit_my_account.html:198
+#: rhodecode/templates/admin/users/users.html:109
+#: rhodecode/templates/bookmarks/bookmarks.html:60
+#: rhodecode/templates/branches/branches.html:75
+#: rhodecode/templates/journal/journal.html:219
+#: rhodecode/templates/journal/journal.html:322
+#: rhodecode/templates/tags/tags.html:76
+msgid "No records found."
+msgstr ""
+
+#: rhodecode/templates/index_base.html:212
+#: rhodecode/templates/index_base.html:299
+#: rhodecode/templates/admin/repos/repos.html:100
+#: rhodecode/templates/admin/users/user_edit_my_account.html:199
+#: rhodecode/templates/admin/users/users.html:110
+#: rhodecode/templates/bookmarks/bookmarks.html:61
+#: rhodecode/templates/branches/branches.html:76
+#: rhodecode/templates/journal/journal.html:220
+#: rhodecode/templates/journal/journal.html:323
+#: rhodecode/templates/tags/tags.html:77
+msgid "Data error."
+msgstr ""
+
+#: rhodecode/templates/index_base.html:213
+#: rhodecode/templates/index_base.html:300
+#: rhodecode/templates/admin/repos/repos.html:101
+#: rhodecode/templates/admin/users/user_edit_my_account.html:58
+#: rhodecode/templates/admin/users/user_edit_my_account.html:200
 #: rhodecode/templates/admin/users/users.html:111
-#: rhodecode/templates/bookmarks/bookmarks.html:64
-#: rhodecode/templates/branches/branches.html:80
-#: rhodecode/templates/journal/journal.html:62
-#: rhodecode/templates/journal/journal.html:225
-#: rhodecode/templates/tags/tags.html:81
+#: rhodecode/templates/bookmarks/bookmarks.html:62
+#: rhodecode/templates/branches/branches.html:77
+#: rhodecode/templates/journal/journal.html:221
+#: rhodecode/templates/journal/journal.html:324
+#: rhodecode/templates/tags/tags.html:78
 msgid "Loading..."
 msgstr ""
 
-#: rhodecode/templates/login.html:5 rhodecode/templates/login.html:54
-msgid "Sign In"
+#: rhodecode/templates/index_base.html:298
+msgid "No repositories found."
+msgstr ""
+
+#: rhodecode/templates/login.html:5 rhodecode/templates/base/base.html:227
+msgid "Log In"
 msgstr ""
 
 #: rhodecode/templates/login.html:21
-msgid "Sign In to"
+#, python-format
+msgid "Log In to %s"
 msgstr ""
 
 #: rhodecode/templates/login.html:31 rhodecode/templates/register.html:20
 #: rhodecode/templates/admin/admin_log.html:5
 #: rhodecode/templates/admin/users/user_add.html:32
-#: rhodecode/templates/admin/users/user_edit.html:50
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:26
-#: rhodecode/templates/base/base.html:83
-#: rhodecode/templates/summary/summary.html:131
+#: rhodecode/templates/admin/users/user_edit.html:57
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:31
+#: rhodecode/templates/admin/users/users.html:77
+#: rhodecode/templates/base/base.html:203
+#: rhodecode/templates/summary/summary.html:123
 msgid "Username"
 msgstr ""
 
 #: rhodecode/templates/login.html:40 rhodecode/templates/register.html:29
 #: rhodecode/templates/admin/ldap/ldap.html:46
 #: rhodecode/templates/admin/users/user_add.html:41
-#: rhodecode/templates/base/base.html:92
+#: rhodecode/templates/base/base.html:212
 msgid "Password"
 msgstr ""
 
@@ -1490,16 +1675,20 @@
 msgid "Remember me"
 msgstr ""
 
+#: rhodecode/templates/login.html:54
+msgid "Sign In"
+msgstr ""
+
 #: rhodecode/templates/login.html:60
 msgid "Forgot your password ?"
 msgstr ""
 
-#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:103
+#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:223
 msgid "Don't have an account ?"
 msgstr ""
 
 #: rhodecode/templates/password_reset.html:5
-msgid "Reset your password"
+msgid "Password Reset"
 msgstr ""
 
 #: rhodecode/templates/password_reset.html:11
@@ -1532,23 +1721,23 @@
 
 #: rhodecode/templates/register.html:47
 #: rhodecode/templates/admin/users/user_add.html:59
-#: rhodecode/templates/admin/users/user_edit.html:90
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:53
+#: rhodecode/templates/admin/users/user_edit.html:97
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:62
 msgid "First Name"
 msgstr ""
 
 #: rhodecode/templates/register.html:56
 #: rhodecode/templates/admin/users/user_add.html:68
-#: rhodecode/templates/admin/users/user_edit.html:99
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:62
+#: rhodecode/templates/admin/users/user_edit.html:106
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:71
 msgid "Last Name"
 msgstr ""
 
 #: rhodecode/templates/register.html:65
 #: rhodecode/templates/admin/users/user_add.html:77
-#: rhodecode/templates/admin/users/user_edit.html:108
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:71
-#: rhodecode/templates/summary/summary.html:133
+#: rhodecode/templates/admin/users/user_edit.html:115
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:80
+#: rhodecode/templates/summary/summary.html:125
 msgid "Email"
 msgstr ""
 
@@ -1560,44 +1749,31 @@
 msgid "Your account must wait for activation by administrator"
 msgstr ""
 
-#: rhodecode/templates/repo_switcher_list.html:11
+#: rhodecode/templates/repo_switcher_list.html:10
 #: rhodecode/templates/admin/defaults/defaults.html:44
 #: rhodecode/templates/admin/repos/repo_add_base.html:65
 #: rhodecode/templates/admin/repos/repo_edit.html:85
-#: rhodecode/templates/settings/repo_settings.html:76
+#: rhodecode/templates/data_table/_dt_elements.html:61
+#: rhodecode/templates/summary/summary.html:77
 msgid "Private repository"
 msgstr ""
 
-#: rhodecode/templates/repo_switcher_list.html:16
+#: rhodecode/templates/repo_switcher_list.html:12
+#: rhodecode/templates/data_table/_dt_elements.html:63
+#: rhodecode/templates/summary/summary.html:79
 msgid "Public repository"
 msgstr ""
 
-#: rhodecode/templates/switch_to_list.html:3
-#: rhodecode/templates/branches/branches.html:14
-msgid "branches"
-msgstr ""
-
 #: rhodecode/templates/switch_to_list.html:10
 #: rhodecode/templates/branches/branches_data.html:57
 msgid "There are no branches yet"
 msgstr ""
 
-#: rhodecode/templates/switch_to_list.html:15
-#: rhodecode/templates/shortlog/shortlog_data.html:10
-#: rhodecode/templates/tags/tags.html:15
-msgid "tags"
-msgstr ""
-
 #: rhodecode/templates/switch_to_list.html:22
 #: rhodecode/templates/tags/tags_data.html:38
 msgid "There are no tags yet"
 msgstr ""
 
-#: rhodecode/templates/switch_to_list.html:28
-#: rhodecode/templates/bookmarks/bookmarks.html:15
-msgid "bookmarks"
-msgstr ""
-
 #: rhodecode/templates/switch_to_list.html:35
 #: rhodecode/templates/bookmarks/bookmarks_data.html:32
 msgid "There are no bookmarks yet"
@@ -1605,6 +1781,7 @@
 
 #: rhodecode/templates/admin/admin.html:5
 #: rhodecode/templates/admin/admin.html:13
+#: rhodecode/templates/base/base.html:68
 msgid "Admin journal"
 msgstr ""
 
@@ -1626,11 +1803,13 @@
 msgstr[1] ""
 
 #: rhodecode/templates/admin/admin_log.html:6
-#: rhodecode/templates/admin/repos/repos.html:74
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:8
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:9
-#: rhodecode/templates/journal/journal_page_repos.html:9
-#: rhodecode/templates/journal/journal_page_repos.html:10
+#: rhodecode/templates/admin/repos/repos.html:77
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46
+#: rhodecode/templates/admin/users/user_edit_my_account.html:176
+#: rhodecode/templates/admin/users/users.html:87
+#: rhodecode/templates/admin/users_groups/users_groups.html:37
+#: rhodecode/templates/journal/journal.html:197
+#: rhodecode/templates/journal/journal.html:300
 msgid "Action"
 msgstr ""
 
@@ -1640,11 +1819,11 @@
 msgstr ""
 
 #: rhodecode/templates/admin/admin_log.html:8
-#: rhodecode/templates/bookmarks/bookmarks.html:37
+#: rhodecode/templates/bookmarks/bookmarks.html:35
 #: rhodecode/templates/bookmarks/bookmarks_data.html:7
-#: rhodecode/templates/branches/branches.html:51
+#: rhodecode/templates/branches/branches.html:48
 #: rhodecode/templates/branches/branches_data.html:7
-#: rhodecode/templates/tags/tags.html:52
+#: rhodecode/templates/tags/tags.html:49
 #: rhodecode/templates/tags/tags_data.html:7
 msgid "Date"
 msgstr ""
@@ -1663,6 +1842,7 @@
 msgstr ""
 
 #: rhodecode/templates/admin/defaults/defaults.html:11
+#: rhodecode/templates/base/base.html:75
 msgid "Defaults"
 msgstr ""
 
@@ -1675,8 +1855,7 @@
 #: rhodecode/templates/admin/defaults/defaults.html:48
 #: rhodecode/templates/admin/repos/repo_add_base.html:69
 #: rhodecode/templates/admin/repos/repo_edit.html:89
-#: rhodecode/templates/forks/fork.html:72
-#: rhodecode/templates/settings/repo_settings.html:80
+#: rhodecode/templates/forks/fork.html:69
 msgid ""
 "Private repositories are only visible to people explicitly added as "
 "collaborators."
@@ -1704,7 +1883,7 @@
 
 #: rhodecode/templates/admin/defaults/defaults.html:75
 #: rhodecode/templates/admin/repos/repo_edit.html:112
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:66
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:72
 msgid "Enable locking"
 msgstr ""
 
@@ -1715,14 +1894,18 @@
 
 #: rhodecode/templates/admin/defaults/defaults.html:84
 #: rhodecode/templates/admin/ldap/ldap.html:89
-#: rhodecode/templates/admin/repos/repo_edit.html:141
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:74
+#: rhodecode/templates/admin/permissions/permissions.html:92
+#: rhodecode/templates/admin/repos/repo_edit.html:148
+#: rhodecode/templates/admin/repos/repo_edit.html:173
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:80
 #: rhodecode/templates/admin/settings/hooks.html:73
-#: rhodecode/templates/admin/users/user_edit.html:133
-#: rhodecode/templates/admin/users/user_edit.html:178
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:79
+#: rhodecode/templates/admin/users/user_add.html:94
+#: rhodecode/templates/admin/users/user_edit.html:140
+#: rhodecode/templates/admin/users/user_edit.html:185
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:88
+#: rhodecode/templates/admin/users_groups/users_group_add.html:49
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:90
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:135
-#: rhodecode/templates/settings/repo_settings.html:94
 msgid "Save"
 msgstr ""
 
@@ -1731,7 +1914,9 @@
 msgstr ""
 
 #: rhodecode/templates/admin/ldap/ldap.html:11
-msgid "Ldap"
+#: rhodecode/templates/admin/users/users.html:86
+#: rhodecode/templates/base/base.html:74
+msgid "LDAP"
 msgstr ""
 
 #: rhodecode/templates/admin/ldap/ldap.html:28
@@ -1813,8 +1998,7 @@
 msgstr ""
 
 #: rhodecode/templates/admin/notifications/notifications.html:31
-#: rhodecode/templates/base/base.html:267
-#: rhodecode/templates/base/base.html:269
+#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8
 msgid "Pull requests"
 msgstr ""
 
@@ -1832,6 +2016,7 @@
 msgstr ""
 
 #: rhodecode/templates/admin/notifications/show_notification.html:9
+#: rhodecode/templates/base/base.html:241
 msgid "Notifications"
 msgstr ""
 
@@ -1840,11 +2025,12 @@
 msgstr ""
 
 #: rhodecode/templates/admin/permissions/permissions.html:11
-#: rhodecode/templates/admin/repos/repo_edit.html:134
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:58
-#: rhodecode/templates/admin/users/user_edit.html:143
+#: rhodecode/templates/admin/repos/repo_edit.html:158
+#: rhodecode/templates/admin/repos/repo_edit.html:165
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:64
+#: rhodecode/templates/admin/users/user_edit.html:150
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:100
-#: rhodecode/templates/settings/repo_settings.html:86
+#: rhodecode/templates/base/base.html:73
 msgid "Permissions"
 msgstr ""
 
@@ -1858,30 +2044,21 @@
 
 #: rhodecode/templates/admin/permissions/permissions.html:49
 msgid ""
-"All default permissions on each repository will be reset to choosen "
+"All default permissions on each repository will be reset to chosen "
 "permission, note that all custom default permission on repositories will "
 "be lost"
 msgstr ""
 
 #: rhodecode/templates/admin/permissions/permissions.html:50
 #: rhodecode/templates/admin/permissions/permissions.html:63
-msgid "overwrite existing settings"
-msgstr ""
-
-#: rhodecode/templates/admin/permissions/permissions.html:55
-#: rhodecode/templates/admin/repos/repo_add_base.html:29
-#: rhodecode/templates/admin/repos/repo_edit.html:49
-#: rhodecode/templates/admin/repos_groups/repos_groups.html:4
-#: rhodecode/templates/forks/fork.html:50
-#: rhodecode/templates/settings/repo_settings.html:48
-msgid "Repository group"
+msgid "Overwrite existing settings"
 msgstr ""
 
 #: rhodecode/templates/admin/permissions/permissions.html:62
 msgid ""
-"All default permissions on each repository group will be reset to choosen"
-" permission, note that all custom default permission on repositories "
-"group will be lost"
+"All default permissions on each repository group will be reset to chosen "
+"permission, note that all custom default permission on repository groups "
+"will be lost"
 msgstr ""
 
 #: rhodecode/templates/admin/permissions/permissions.html:69
@@ -1896,40 +2073,95 @@
 msgid "Repository forking"
 msgstr ""
 
-#: rhodecode/templates/admin/permissions/permissions.html:92
-#: rhodecode/templates/admin/repos/repo_edit.html:264
-msgid "set"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_add.html:5
-#: rhodecode/templates/admin/repos/repo_add_create_repository.html:5
-msgid "Add repository"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_add.html:11
-#: rhodecode/templates/admin/repos/repo_edit.html:11
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:10
+#: rhodecode/templates/admin/permissions/permissions.html:93
+#: rhodecode/templates/admin/permissions/permissions.html:154
+#: rhodecode/templates/admin/repos/repo_edit.html:149
+#: rhodecode/templates/admin/repos/repo_edit.html:174
+#: rhodecode/templates/admin/repos/repo_edit.html:388
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:81
+#: rhodecode/templates/admin/settings/settings.html:115
+#: rhodecode/templates/admin/settings/settings.html:187
+#: rhodecode/templates/admin/settings/settings.html:278
+#: rhodecode/templates/admin/users/user_edit.html:141
+#: rhodecode/templates/admin/users/user_edit.html:186
+#: rhodecode/templates/admin/users/user_edit.html:235
+#: rhodecode/templates/admin/users/user_edit.html:283
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:89
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:136
+#: rhodecode/templates/files/files_add.html:80
+#: rhodecode/templates/files/files_edit.html:66
+#: rhodecode/templates/pullrequests/pullrequest.html:110
+msgid "Reset"
+msgstr ""
+
+#: rhodecode/templates/admin/permissions/permissions.html:103
+msgid "Default User Permissions"
+msgstr ""
+
+#: rhodecode/templates/admin/permissions/permissions.html:113
+#: rhodecode/templates/admin/users/user_edit.html:244
+msgid "Allowed IP addresses"
+msgstr ""
+
+#: rhodecode/templates/admin/permissions/permissions.html:127
+#: rhodecode/templates/admin/repos/repo_edit.html:347
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:70
+#: rhodecode/templates/admin/users/user_edit.html:212
+#: rhodecode/templates/admin/users/user_edit.html:257
+#: rhodecode/templates/admin/users_groups/users_groups.html:46
+#: rhodecode/templates/data_table/_dt_elements.html:122
+#: rhodecode/templates/data_table/_dt_elements.html:130
+msgid "delete"
+msgstr ""
+
+#: rhodecode/templates/admin/permissions/permissions.html:128
+#: rhodecode/templates/admin/users/user_edit.html:258
+#, fuzzy, python-format
+msgid "Confirm to delete this ip: %s"
+msgstr ""
+
+#: rhodecode/templates/admin/permissions/permissions.html:134
+#: rhodecode/templates/admin/users/user_edit.html:264
+msgid "All IP addresses are allowed"
+msgstr ""
+
+#: rhodecode/templates/admin/permissions/permissions.html:145
+#: rhodecode/templates/admin/users/user_edit.html:275
+msgid "New ip address"
+msgstr ""
+
+#: rhodecode/templates/admin/permissions/permissions.html:153
+#: rhodecode/templates/admin/repos/repo_add_base.html:73
+#: rhodecode/templates/admin/repos/repo_edit.html:387
+#: rhodecode/templates/admin/users/user_edit.html:234
+#: rhodecode/templates/admin/users/user_edit.html:282
+msgid "Add"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_add.html:12
+#: rhodecode/templates/admin/repos/repo_add.html:16
+#: rhodecode/templates/base/base.html:69 rhodecode/templates/base/base.html:103
+#: rhodecode/templates/base/base.html:263
 msgid "Repositories"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_add.html:13
-msgid "add new"
+#: rhodecode/templates/admin/repos/repo_add.html:19
+msgid "Add new"
 msgstr ""
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:20
-#: rhodecode/templates/summary/summary.html:104
-#: rhodecode/templates/summary/summary.html:105
+#: rhodecode/templates/summary/summary.html:96
+#: rhodecode/templates/summary/summary.html:97
 msgid "Clone from"
 msgstr ""
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:24
 #: rhodecode/templates/admin/repos/repo_edit.html:44
-#: rhodecode/templates/settings/repo_settings.html:43
 msgid "Optional http[s] url from which repository should be cloned."
 msgstr ""
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:33
-#: rhodecode/templates/forks/fork.html:54
+#: rhodecode/templates/forks/fork.html:51
 msgid "Optionaly select a group to put this repository into."
 msgstr ""
 
@@ -1939,57 +2171,39 @@
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:47
 #: rhodecode/templates/admin/repos/repo_edit.html:66
-#: rhodecode/templates/forks/fork.html:41
-#: rhodecode/templates/settings/repo_settings.html:57
+#: rhodecode/templates/forks/fork.html:38
 msgid "Landing revision"
 msgstr ""
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:51
 #: rhodecode/templates/admin/repos/repo_edit.html:70
-#: rhodecode/templates/forks/fork.html:45
-#: rhodecode/templates/settings/repo_settings.html:61
+#: rhodecode/templates/forks/fork.html:42
 msgid "Default revision for files page, downloads, whoosh and readme"
 msgstr ""
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:60
 #: rhodecode/templates/admin/repos/repo_edit.html:79
-#: rhodecode/templates/forks/fork.html:63
-#: rhodecode/templates/settings/repo_settings.html:70
+#: rhodecode/templates/forks/fork.html:60
 msgid "Keep it short and to the point. Use a README file for longer descriptions."
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_add_base.html:73
-msgid "add"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_add_create_repository.html:9
-msgid "add new repository"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:5
+#: rhodecode/templates/admin/repos/repo_edit.html:8
 msgid "Edit repository"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:13
-#: rhodecode/templates/admin/users/user_edit.html:13
-#: rhodecode/templates/admin/users/user_edit.html:228
-#: rhodecode/templates/admin/users/user_edit.html:230
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:28
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:13
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:207
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:209
-#: rhodecode/templates/files/files_source.html:29
-#: rhodecode/templates/journal/journal_page_repos.html:29
-msgid "edit"
+#: rhodecode/templates/admin/repos/repo_edit.html:12
+#: rhodecode/templates/admin/settings/hooks.html:9
+#: rhodecode/templates/admin/settings/settings.html:11
+#: rhodecode/templates/base/base.html:76 rhodecode/templates/base/base.html:121
+#: rhodecode/templates/summary/summary.html:212
+msgid "Settings"
 msgstr ""
 
 #: rhodecode/templates/admin/repos/repo_edit.html:40
-#: rhodecode/templates/settings/repo_settings.html:39
 msgid "Clone uri"
 msgstr ""
 
 #: rhodecode/templates/admin/repos/repo_edit.html:53
-#: rhodecode/templates/settings/repo_settings.html:52
 msgid "Optional select a group to put this repository into."
 msgstr ""
 
@@ -1997,175 +2211,204 @@
 msgid "Change owner of this repository."
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:142
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:75
-#: rhodecode/templates/admin/settings/settings.html:113
-#: rhodecode/templates/admin/settings/settings.html:179
-#: rhodecode/templates/admin/settings/settings.html:269
-#: rhodecode/templates/admin/users/user_edit.html:134
-#: rhodecode/templates/admin/users/user_edit.html:179
-#: rhodecode/templates/admin/users/user_edit.html:282
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:80
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:136
-#: rhodecode/templates/files/files_add.html:82
-#: rhodecode/templates/files/files_edit.html:68
-#: rhodecode/templates/pullrequests/pullrequest.html:124
-#: rhodecode/templates/settings/repo_settings.html:95
-msgid "Reset"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:152
-msgid "Administration"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:155
+#: rhodecode/templates/admin/repos/repo_edit.html:184
+msgid "Advanced settings"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:187
 msgid "Statistics"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:159
+#: rhodecode/templates/admin/repos/repo_edit.html:191
 msgid "Reset current statistics"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:159
+#: rhodecode/templates/admin/repos/repo_edit.html:191
 msgid "Confirm to remove current statistics"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:162
+#: rhodecode/templates/admin/repos/repo_edit.html:194
 msgid "Fetched to rev"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:163
+#: rhodecode/templates/admin/repos/repo_edit.html:195
 msgid "Stats gathered"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:171
-msgid "Remote"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:175
-msgid "Pull changes from remote location"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:175
-msgid "Confirm to pull changes from remote side"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:186
-msgid "Cache"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:190
-msgid "Invalidate repository cache"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:190
-msgid "Confirm to invalidate repository cache"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:193
-msgid ""
-"Manually invalidate cache for this repository. On first access repository"
-" will be cached again"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:198
-msgid "List of cached values"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:201
-msgid "Prefix"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:202
-msgid "Key"
-msgstr ""
-
 #: rhodecode/templates/admin/repos/repo_edit.html:203
-#: rhodecode/templates/admin/users/user_add.html:86
-#: rhodecode/templates/admin/users/user_edit.html:117
-#: rhodecode/templates/admin/users_groups/users_group_add.html:41
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:42
-msgid "Active"
+msgid "Remote"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:207
+msgid "Pull changes from remote location"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:207
+msgid "Confirm to pull changes from remote side"
 msgstr ""
 
 #: rhodecode/templates/admin/repos/repo_edit.html:218
-#: rhodecode/templates/base/base.html:331
-#: rhodecode/templates/base/base.html:333
-#: rhodecode/templates/base/base.html:335
+msgid "Cache"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:222
+msgid "Invalidate repository cache"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:222
+msgid "Confirm to invalidate repository cache"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:225
+msgid ""
+"Manually invalidate cache for this repository. On first access repository"
+" will be cached again"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:230
+msgid "List of cached values"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:233
+msgid "Prefix"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:234
+msgid "Key"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:235
+#: rhodecode/templates/admin/users/user_add.html:86
+#: rhodecode/templates/admin/users/user_edit.html:124
+#: rhodecode/templates/admin/users/users.html:84
+#: rhodecode/templates/admin/users_groups/users_group_add.html:41
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:42
+#: rhodecode/templates/admin/users_groups/users_groups.html:36
+msgid "Active"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:250
+#: rhodecode/templates/base/base.html:280
+#: rhodecode/templates/base/base.html:281
 msgid "Public journal"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:224
+#: rhodecode/templates/admin/repos/repo_edit.html:256
 msgid "Remove from public journal"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:226
+#: rhodecode/templates/admin/repos/repo_edit.html:258
 msgid "Add to public journal"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:231
+#: rhodecode/templates/admin/repos/repo_edit.html:263
 msgid ""
 "All actions made on this repository will be accessible to everyone in "
 "public journal"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:238
+#: rhodecode/templates/admin/repos/repo_edit.html:270
 msgid "Locking"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:243
+#: rhodecode/templates/admin/repos/repo_edit.html:275
 msgid "Unlock locked repo"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:243
+#: rhodecode/templates/admin/repos/repo_edit.html:275
 msgid "Confirm to unlock repository"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:246
+#: rhodecode/templates/admin/repos/repo_edit.html:278
 msgid "lock repo"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:246
-msgid "Confirm to lock repository"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:247
-msgid "Repository is not locked"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:252
-msgid "Force locking on repository. Works only when anonymous access is disabled"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:259
-msgid "Set as fork of"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:268
-msgid "Manually set this repository as a fork of another from the list"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:274
-#: rhodecode/templates/changeset/changeset_file_comment.html:26
-msgid "Delete"
-msgstr ""
-
 #: rhodecode/templates/admin/repos/repo_edit.html:278
-#: rhodecode/templates/settings/repo_settings.html:115
+msgid "Confirm to lock repository"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:279
+msgid "Repository is not locked"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:284
+msgid "Force locking on repository. Works only when anonymous access is disabled"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:291
+msgid "Set as fork of"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:296
+msgid "set"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:300
+msgid "Manually set this repository as a fork of another from the list"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:306
+#: rhodecode/templates/changeset/changeset_file_comment.html:41
+msgid "Delete"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:315
 msgid "Remove this repository"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:278
-#: rhodecode/templates/settings/repo_settings.html:115
+#: rhodecode/templates/admin/repos/repo_edit.html:315
 msgid "Confirm to delete this repository"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:282
-#: rhodecode/templates/settings/repo_settings.html:119
+#: rhodecode/templates/admin/repos/repo_edit.html:317
+#, python-format
+msgid "this repository has %s fork"
+msgid_plural "this repository has %s forks"
+msgstr[0] ""
+msgstr[1] ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:318
+msgid "Detach forks"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:319
+msgid "Delete forks"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:322
 msgid ""
 "This repository will be renamed in a special way in order to be "
-"unaccesible for RhodeCode and VCS systems. If you need fully delete it "
-"from file system please do it manually"
+"unaccesible for RhodeCode and VCS systems. If you need to fully delete it"
+" from file system please do it manually"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:336
+msgid "Extra fields"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:348
+#, fuzzy, python-format
+msgid "Confirm to delete this field: %s"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:362
+msgid "New field key"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:370
+msgid "New field label"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:373
+msgid "Enter short label"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:379
+msgid "New field description"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:382
+msgid "Enter description of a field"
 msgstr ""
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:3
@@ -2185,8 +2428,6 @@
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:6
 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:6
-#: rhodecode/templates/admin/users/users.html:85
-#: rhodecode/templates/base/base.html:229
 msgid "admin"
 msgstr ""
 
@@ -2196,78 +2437,58 @@
 msgstr ""
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:16
-#: rhodecode/templates/data_table/_dt_elements.html:67
-#: rhodecode/templates/journal/journal.html:95
-#: rhodecode/templates/summary/summary.html:85
 msgid "private repository"
 msgstr ""
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:19
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:28
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:18
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:20
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:35
 msgid "default"
 msgstr ""
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:33
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:58
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:23
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:42
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:25
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:55
 msgid "revoke"
 msgstr ""
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:83
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:67
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:80
 msgid "Add another member"
 msgstr ""
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:97
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:100
 msgid "Failed to remove user"
 msgstr ""
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:112
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:103
-msgid "Failed to remove users group"
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:116
+msgid "Failed to remove user group"
 msgstr ""
 
 #: rhodecode/templates/admin/repos/repos.html:5
 msgid "Repositories administration"
 msgstr ""
 
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:73
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:86
 msgid "apply to children"
 msgstr ""
 
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:74
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87
 msgid ""
-"Set or revoke permission to all children of that group, including "
-"repositories and other groups"
+"Set or revoke permission to all children of that group, including non-"
+"private repositories and other groups"
+msgstr ""
+
+#: rhodecode/templates/admin/repos_groups/repos_groups.html:4
+#, python-format
+msgid "%s Group Dashboard"
 msgstr ""
 
 #: rhodecode/templates/admin/repos_groups/repos_groups.html:9
-#: rhodecode/templates/base/base.html:122
-#: rhodecode/templates/base/base.html:313
-#: rhodecode/templates/base/base.html:315
-#: rhodecode/templates/base/base.html:317
-#: rhodecode/templates/bookmarks/bookmarks.html:11
-#: rhodecode/templates/branches/branches.html:10
-#: rhodecode/templates/changelog/changelog.html:10
-#: rhodecode/templates/changeset/changeset.html:10
-#: rhodecode/templates/changeset/changeset_range.html:9
-#: rhodecode/templates/compare/compare_diff.html:9
-#: rhodecode/templates/files/file_diff.html:8
-#: rhodecode/templates/files/files.html:8
-#: rhodecode/templates/files/files_add.html:15
-#: rhodecode/templates/files/files_edit.html:15
-#: rhodecode/templates/followers/followers.html:9
-#: rhodecode/templates/forks/fork.html:9 rhodecode/templates/forks/forks.html:9
-#: rhodecode/templates/pullrequests/pullrequest.html:8
-#: rhodecode/templates/pullrequests/pullrequest_show.html:8
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8
-#: rhodecode/templates/settings/repo_settings.html:9
-#: rhodecode/templates/shortlog/shortlog.html:10
-#: rhodecode/templates/summary/summary.html:8
-#: rhodecode/templates/tags/tags.html:11
 msgid "Home"
 msgstr ""
 
@@ -2276,80 +2497,78 @@
 msgstr ""
 
 #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:5
-msgid "Add repos group"
-msgstr ""
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:10
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:10
-msgid "Repos groups"
-msgstr ""
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:12
-msgid "add new repos group"
-msgstr ""
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:50
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:50
+msgid "Add repository group"
+msgstr ""
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:11
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:11
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:16
+#: rhodecode/templates/base/base.html:70 rhodecode/templates/base/base.html:82
+msgid "Repository groups"
+msgstr ""
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:13
+msgid "Add new repository group"
+msgstr ""
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:51
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:56
 msgid "Group parent"
 msgstr ""
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:58
-#: rhodecode/templates/admin/users/user_add.html:94
-#: rhodecode/templates/admin/users_groups/users_group_add.html:49
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:90
-#: rhodecode/templates/pullrequests/pullrequest_show.html:131
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:59
 msgid "save"
 msgstr ""
 
 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:5
-msgid "Edit repos group"
-msgstr ""
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:12
-msgid "edit repos group"
-msgstr ""
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:70
+msgid "Edit repository group"
+msgstr ""
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:13
+#, python-format
+msgid "Edit repository group %s"
+msgstr ""
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:27
+msgid "Add child group"
+msgstr ""
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:76
 msgid ""
 "Enable lock-by-pulling on group. This option will be applied to all other"
 " groups and repositories inside"
 msgstr ""
 
 #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:5
-msgid "Repositories groups administration"
-msgstr ""
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:22
-msgid "ADD NEW GROUP"
-msgstr ""
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:35
+msgid "Repository groups administration"
+msgstr ""
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:45
 msgid "Number of toplevel repositories"
 msgstr ""
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:36
-#: rhodecode/templates/admin/users/users.html:87
-#: rhodecode/templates/admin/users_groups/users_groups.html:35
-msgid "action"
-msgstr ""
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55
-#: rhodecode/templates/admin/users/user_edit.html:259
-#: rhodecode/templates/admin/users_groups/users_groups.html:44
-#: rhodecode/templates/data_table/_dt_elements.html:7
-#: rhodecode/templates/data_table/_dt_elements.html:121
-msgid "delete"
-msgstr ""
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:64
+msgid "Edit"
+msgstr ""
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:65
+#: rhodecode/templates/base/perms_summary.html:29
+#: rhodecode/templates/base/perms_summary.html:48
+#: rhodecode/templates/base/perms_summary.html:50
+#: rhodecode/templates/data_table/_dt_elements.html:116
+#: rhodecode/templates/data_table/_dt_elements.html:117
+msgid "edit"
+msgstr ""
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:70
 #, python-format
 msgid "Confirm to delete this group: %s with %s repository"
 msgid_plural "Confirm to delete this group: %s with %s repositories"
 msgstr[0] ""
 msgstr[1] ""
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:63
-msgid "There are no repositories groups yet"
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:78
+msgid "There are no repository groups yet"
 msgstr ""
 
 #: rhodecode/templates/admin/settings/hooks.html:5
@@ -2357,12 +2576,6 @@
 msgid "Settings administration"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/hooks.html:9
-#: rhodecode/templates/admin/settings/settings.html:9
-#: rhodecode/templates/settings/repo_settings.html:13
-msgid "Settings"
-msgstr ""
-
 #: rhodecode/templates/admin/settings/hooks.html:24
 msgid "Built in hooks - read only"
 msgstr ""
@@ -2379,205 +2592,210 @@
 msgid "Failed to remove hook"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:24
+#: rhodecode/templates/admin/settings/settings.html:26
 msgid "Remap and rescan repositories"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:32
-msgid "rescan option"
-msgstr ""
-
-#: rhodecode/templates/admin/settings/settings.html:38
+#: rhodecode/templates/admin/settings/settings.html:34
+msgid "Rescan option"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:40
 msgid ""
 "In case a repository was deleted from filesystem and there are leftovers "
 "in the database check this option to scan obsolete data in database and "
 "remove it."
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:39
-msgid "destroy old data"
-msgstr ""
-
 #: rhodecode/templates/admin/settings/settings.html:41
+msgid "Destroy old data"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:43
 msgid ""
 "Rescan repositories location for new repositories. Also deletes obsolete "
 "if `destroy` flag is checked "
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:46
+#: rhodecode/templates/admin/settings/settings.html:48
 msgid "Rescan repositories"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:52
+#: rhodecode/templates/admin/settings/settings.html:54
 msgid "Whoosh indexing"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:60
-msgid "index build option"
-msgstr ""
-
-#: rhodecode/templates/admin/settings/settings.html:65
-msgid "build from scratch"
-msgstr ""
-
-#: rhodecode/templates/admin/settings/settings.html:71
+#: rhodecode/templates/admin/settings/settings.html:62
+msgid "Index build option"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:67
+msgid "Build from scratch"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:73
 msgid "Reindex"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:77
+#: rhodecode/templates/admin/settings/settings.html:79
 msgid "Global application settings"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:86
-msgid "Application name"
-msgstr ""
-
-#: rhodecode/templates/admin/settings/settings.html:95
-msgid "Realm text"
-msgstr ""
-
-#: rhodecode/templates/admin/settings/settings.html:104
-msgid "GA code"
-msgstr ""
-
-#: rhodecode/templates/admin/settings/settings.html:112
-#: rhodecode/templates/admin/settings/settings.html:178
-#: rhodecode/templates/admin/settings/settings.html:268
+#: rhodecode/templates/admin/settings/settings.html:88
+msgid "Site branding"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:97
+msgid "HTTP authentication realm"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:106
+msgid "Google Analytics code"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:114
+#: rhodecode/templates/admin/settings/settings.html:186
+#: rhodecode/templates/admin/settings/settings.html:277
 msgid "Save settings"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:119
+#: rhodecode/templates/admin/settings/settings.html:121
 msgid "Visualisation settings"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:127
+#: rhodecode/templates/admin/settings/settings.html:129
 msgid "General"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:132
+#: rhodecode/templates/admin/settings/settings.html:134
 msgid "Use lightweight dashboard"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:139
+#: rhodecode/templates/admin/settings/settings.html:140
+msgid "Use repository extra fields"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:147
 msgid "Icons"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:144
+#: rhodecode/templates/admin/settings/settings.html:152
 msgid "Show public repo icon on repositories"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:148
+#: rhodecode/templates/admin/settings/settings.html:156
 msgid "Show private repo icon on repositories"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:155
+#: rhodecode/templates/admin/settings/settings.html:163
 msgid "Meta-Tagging"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:160
+#: rhodecode/templates/admin/settings/settings.html:168
 msgid "Stylify recognised metatags:"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:187
+#: rhodecode/templates/admin/settings/settings.html:195
 msgid "VCS settings"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:196
+#: rhodecode/templates/admin/settings/settings.html:204
 msgid "Web"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:201
-msgid "require ssl for vcs operations"
-msgstr ""
-
-#: rhodecode/templates/admin/settings/settings.html:203
+#: rhodecode/templates/admin/settings/settings.html:209
+msgid "Require SSL for vcs operations"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:211
 msgid ""
 "RhodeCode will require SSL for pushing or pulling. If SSL is missing it "
 "will return HTTP Error 406: Not Acceptable"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:209
+#: rhodecode/templates/admin/settings/settings.html:217
 msgid "Hooks"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:214
-msgid "Update repository after push (hg update)"
-msgstr ""
-
-#: rhodecode/templates/admin/settings/settings.html:218
-msgid "Show repository size after push"
-msgstr ""
-
 #: rhodecode/templates/admin/settings/settings.html:222
-msgid "Log user push commands"
+msgid "Update repository after push (hg update)"
 msgstr ""
 
 #: rhodecode/templates/admin/settings/settings.html:226
-msgid "Log user pull commands"
+msgid "Show repository size after push"
 msgstr ""
 
 #: rhodecode/templates/admin/settings/settings.html:230
-msgid "advanced setup"
-msgstr ""
-
-#: rhodecode/templates/admin/settings/settings.html:235
+msgid "Log user push commands"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:234
+msgid "Log user pull commands"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:238
+msgid "Advanced setup"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:243
 msgid "Mercurial Extensions"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:240
-msgid "largefiles extensions"
-msgstr ""
-
-#: rhodecode/templates/admin/settings/settings.html:244
-msgid "hgsubversion extensions"
-msgstr ""
-
-#: rhodecode/templates/admin/settings/settings.html:246
+#: rhodecode/templates/admin/settings/settings.html:248
+msgid "Enable largefiles extension"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:252
+msgid "Enable hgsubversion extension"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:254
 msgid ""
-"Requires hgsubversion library installed. Allows clonning from svn remote "
+"Requires hgsubversion library installed. Allows cloning from svn remote "
 "locations"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:256
+#: rhodecode/templates/admin/settings/settings.html:264
 msgid "Repositories location"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:261
+#: rhodecode/templates/admin/settings/settings.html:269
 msgid ""
 "This a crucial application setting. If you are really sure you need to "
 "change this, you must restart application in order to make this setting "
 "take effect. Click this label to unlock."
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:262
-#: rhodecode/templates/base/base.html:221
-msgid "unlock"
-msgstr ""
-
-#: rhodecode/templates/admin/settings/settings.html:263
+#: rhodecode/templates/admin/settings/settings.html:270
+#: rhodecode/templates/base/base.html:131
+msgid "Unlock"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:272
 msgid ""
 "Location where repositories are stored. After changing this value a "
 "restart, and rescan is required"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:283
+#: rhodecode/templates/admin/settings/settings.html:292
 msgid "Test Email"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:291
+#: rhodecode/templates/admin/settings/settings.html:300
 msgid "Email to"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:299
-msgid "Send"
-msgstr ""
-
-#: rhodecode/templates/admin/settings/settings.html:305
-msgid "System Info and Packages"
-msgstr ""
-
 #: rhodecode/templates/admin/settings/settings.html:308
-msgid "show"
+msgid "Send"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:314
+msgid "System Info and Packages"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:317
+#: rhodecode/templates/changelog/changelog.html:42
+msgid "Show"
 msgstr ""
 
 #: rhodecode/templates/admin/users/user_add.html:5
@@ -2586,11 +2804,13 @@
 
 #: rhodecode/templates/admin/users/user_add.html:10
 #: rhodecode/templates/admin/users/user_edit.html:11
+#: rhodecode/templates/base/base.html:71
 msgid "Users"
 msgstr ""
 
 #: rhodecode/templates/admin/users/user_add.html:12
-msgid "add new user"
+#: rhodecode/templates/admin/users/users.html:23
+msgid "Add new user"
 msgstr ""
 
 #: rhodecode/templates/admin/users/user_add.html:50
@@ -2601,6 +2821,12 @@
 msgid "Edit user"
 msgstr ""
 
+#: rhodecode/templates/admin/users/user_edit.html:13
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:13
+#, python-format
+msgid "Edit %s"
+msgstr ""
+
 #: rhodecode/templates/admin/users/user_edit.html:34
 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:10
 msgid "Change your avatar at"
@@ -2616,26 +2842,31 @@
 msgid "API key"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit.html:63
+#: rhodecode/templates/admin/users/user_edit.html:50
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:25
+msgid "Current IP"
+msgstr ""
+
+#: rhodecode/templates/admin/users/user_edit.html:70
 msgid "LDAP DN"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit.html:72
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:35
+#: rhodecode/templates/admin/users/user_edit.html:79
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44
 msgid "New password"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit.html:81
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44
+#: rhodecode/templates/admin/users/user_edit.html:88
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:53
 msgid "New password confirmation"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit.html:151
+#: rhodecode/templates/admin/users/user_edit.html:158
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:108
 msgid "Inherit default permissions"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit.html:156
+#: rhodecode/templates/admin/users/user_edit.html:163
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:113
 #, python-format
 msgid ""
@@ -2643,53 +2874,31 @@
 "options does not have any action"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit.html:162
+#: rhodecode/templates/admin/users/user_edit.html:169
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:119
 msgid "Create repositories"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit.html:170
+#: rhodecode/templates/admin/users/user_edit.html:177
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:127
 msgid "Fork repositories"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit.html:190
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:22
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:39
-msgid "Nothing here yet"
-msgstr ""
-
-#: rhodecode/templates/admin/users/user_edit.html:197
-#: rhodecode/templates/admin/users/user_edit_my_account.html:60
-#: rhodecode/templates/admin/users/user_edit_my_account.html:217
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:185
-msgid "Permission"
-msgstr ""
-
-#: rhodecode/templates/admin/users/user_edit.html:198
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:186
-msgid "Edit Permission"
-msgstr ""
-
-#: rhodecode/templates/admin/users/user_edit.html:247
+#: rhodecode/templates/admin/users/user_edit.html:200
 msgid "Email addresses"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit.html:260
+#: rhodecode/templates/admin/users/user_edit.html:213
 #, python-format
 msgid "Confirm to delete this email: %s"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit.html:274
+#: rhodecode/templates/admin/users/user_edit.html:227
 msgid "New email address"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit.html:281
-msgid "Add"
-msgstr ""
-
 #: rhodecode/templates/admin/users/user_edit_my_account.html:5
-#: rhodecode/templates/base/base.html:124
+#: rhodecode/templates/base/base.html:242
 msgid "My account"
 msgstr ""
 
@@ -2702,7 +2911,7 @@
 msgstr ""
 
 #: rhodecode/templates/admin/users/user_edit_my_account.html:38
-#: rhodecode/templates/journal/journal.html:49
+#: rhodecode/templates/journal/journal.html:54
 msgid "My repos"
 msgstr ""
 
@@ -2710,132 +2919,97 @@
 msgid "My pull requests"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit_my_account.html:45
-msgid "Add repo"
-msgstr ""
-
 #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:2
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:4
+msgid "Show closed pull requests"
+msgstr ""
+
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:6
 msgid "Opened by me"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:10
-#, python-format
-msgid "Pull request #%s opened on %s"
-msgstr ""
-
 #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:15
+#, python-format
+msgid "Pull request #%s opened on %s"
+msgstr ""
+
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:17
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:45
+#: rhodecode/templates/pullrequests/pullrequest_data.html:7
+#: rhodecode/templates/pullrequests/pullrequest_show.html:27
+#: rhodecode/templates/pullrequests/pullrequest_show.html:42
+msgid "Closed"
+msgstr ""
+
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:23
 msgid "Confirm to delete this pull request"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:26
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:30
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:51
+msgid "Nothing here yet"
+msgstr ""
+
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:34
 msgid "I participate in"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:33
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:30
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:42
+#: rhodecode/templates/pullrequests/pullrequest_data.html:11
 #, python-format
 msgid "Pull request #%s opened by %s on %s"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:7
-#: rhodecode/templates/bookmarks/bookmarks.html:40
-#: rhodecode/templates/bookmarks/bookmarks_data.html:9
-#: rhodecode/templates/branches/branches.html:54
-#: rhodecode/templates/branches/branches_data.html:9
-#: rhodecode/templates/journal/journal_page_repos.html:8
-#: rhodecode/templates/tags/tags.html:55
-#: rhodecode/templates/tags/tags_data.html:9
-msgid "Revision"
-msgstr ""
-
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:28
-#: rhodecode/templates/journal/journal_page_repos.html:29
-msgid "private"
-msgstr ""
-
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:31
-#: rhodecode/templates/data_table/_dt_elements.html:7
-#: rhodecode/templates/journal/journal_page_repos.html:32
-#, python-format
-msgid "Confirm to delete this repository: %s"
-msgstr ""
-
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:38
-#: rhodecode/templates/journal/journal_page_repos.html:42
-msgid "No repositories yet"
-msgstr ""
-
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:40
-#: rhodecode/templates/journal/journal_page_repos.html:44
-msgid "create one now"
-msgstr ""
-
 #: rhodecode/templates/admin/users/users.html:5
 msgid "Users administration"
 msgstr ""
 
 #: rhodecode/templates/admin/users/users.html:9
-#: rhodecode/templates/base/base.html:235
 msgid "users"
 msgstr ""
 
-#: rhodecode/templates/admin/users/users.html:23
-msgid "ADD NEW USER"
-msgstr ""
-
-#: rhodecode/templates/admin/users/users.html:77
-msgid "username"
-msgstr ""
-
 #: rhodecode/templates/admin/users/users.html:80
-msgid "firstname"
+msgid "Firstname"
 msgstr ""
 
 #: rhodecode/templates/admin/users/users.html:81
-msgid "lastname"
+msgid "Lastname"
 msgstr ""
 
 #: rhodecode/templates/admin/users/users.html:82
-msgid "last login"
-msgstr ""
-
-#: rhodecode/templates/admin/users/users.html:84
-#: rhodecode/templates/admin/users_groups/users_groups.html:34
-msgid "active"
-msgstr ""
-
-#: rhodecode/templates/admin/users/users.html:86
-#: rhodecode/templates/base/base.html:238
-msgid "ldap"
+msgid "Last login"
 msgstr ""
 
 #: rhodecode/templates/admin/users_groups/users_group_add.html:5
-msgid "Add users group"
+msgid "Add user group"
 msgstr ""
 
 #: rhodecode/templates/admin/users_groups/users_group_add.html:10
-#: rhodecode/templates/admin/users_groups/users_groups.html:9
-msgid "Users groups"
+#: rhodecode/templates/admin/users_groups/users_groups.html:11
+#: rhodecode/templates/base/base.html:72
+msgid "User groups"
 msgstr ""
 
 #: rhodecode/templates/admin/users_groups/users_group_add.html:12
-msgid "add new users group"
+#: rhodecode/templates/admin/users_groups/users_groups.html:25
+msgid "Add new user group"
 msgstr ""
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:5
-msgid "Edit users group"
+msgid "Edit user group"
 msgstr ""
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:11
-msgid "UsersGroups"
+msgid "UserGroups"
 msgstr ""
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:50
+#: rhodecode/templates/admin/users_groups/users_groups.html:35
 msgid "Members"
 msgstr ""
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:58
-msgid "Choosen group members"
+msgid "Chosen group members"
 msgstr ""
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:61
@@ -2850,262 +3024,261 @@
 msgid "Add all elements"
 msgstr ""
 
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:146
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:150
 msgid "Group members"
 msgstr ""
 
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:163
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:167
 msgid "No members yet"
 msgstr ""
 
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:171
-msgid "Permissions defined for this group"
-msgstr ""
-
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:178
-msgid "No permissions set yet"
-msgstr ""
-
 #: rhodecode/templates/admin/users_groups/users_groups.html:5
-msgid "Users groups administration"
-msgstr ""
-
-#: rhodecode/templates/admin/users_groups/users_groups.html:23
-msgid "ADD NEW USER GROUP"
-msgstr ""
-
-#: rhodecode/templates/admin/users_groups/users_groups.html:32
-msgid "group name"
-msgstr ""
-
-#: rhodecode/templates/admin/users_groups/users_groups.html:33
-#: rhodecode/templates/base/root.html:46
-msgid "members"
-msgstr ""
-
-#: rhodecode/templates/admin/users_groups/users_groups.html:45
-#, python-format
-msgid "Confirm to delete this users group: %s"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:41
+msgid "User groups administration"
+msgstr ""
+
+#: rhodecode/templates/admin/users_groups/users_groups.html:47
+#, fuzzy, python-format
+msgid "Confirm to delete this user group: %s"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:42
 msgid "Submit a bug"
 msgstr ""
 
-#: rhodecode/templates/base/base.html:77
-msgid "Login to your account"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:100
-msgid "Forgot password ?"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:107
-msgid "Log In"
+#: rhodecode/templates/base/base.html:108
+#: rhodecode/templates/data_table/_dt_elements.html:9
+#: rhodecode/templates/data_table/_dt_elements.html:11
+#: rhodecode/templates/data_table/_dt_elements.html:13
+#: rhodecode/templates/pullrequests/pullrequest_show.html:81
+#: rhodecode/templates/summary/summary.html:8
+msgid "Summary"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:109
+#: rhodecode/templates/changelog/changelog.html:11
+#: rhodecode/templates/data_table/_dt_elements.html:17
+#: rhodecode/templates/data_table/_dt_elements.html:19
+#: rhodecode/templates/data_table/_dt_elements.html:21
+msgid "Changelog"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:110
+#: rhodecode/templates/data_table/_dt_elements.html:25
+#: rhodecode/templates/data_table/_dt_elements.html:27
+#: rhodecode/templates/data_table/_dt_elements.html:29
+#: rhodecode/templates/files/files.html:12
+msgid "Files"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:112
+msgid "Switch To"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:114
+#: rhodecode/templates/base/base.html:267
+msgid "loading..."
 msgstr ""
 
 #: rhodecode/templates/base/base.html:118
-msgid "Inbox"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:123
-#: rhodecode/templates/base/base.html:322
-#: rhodecode/templates/base/base.html:324
-#: rhodecode/templates/base/base.html:326
-#: rhodecode/templates/journal/journal.html:4
-#: rhodecode/templates/journal/public_journal.html:4
-msgid "Journal"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:125
-msgid "Log Out"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:144
-msgid "Switch repository"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:146
-msgid "Products"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:152
-#: rhodecode/templates/base/base.html:182 rhodecode/templates/base/root.html:47
-msgid "loading..."
-msgstr ""
-
-#: rhodecode/templates/base/base.html:158
-#: rhodecode/templates/base/base.html:160
-#: rhodecode/templates/base/base.html:162
-#: rhodecode/templates/data_table/_dt_elements.html:15
-#: rhodecode/templates/data_table/_dt_elements.html:17
-#: rhodecode/templates/data_table/_dt_elements.html:19
-msgid "Summary"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:166
-#: rhodecode/templates/base/base.html:168
-#: rhodecode/templates/base/base.html:170
-#: rhodecode/templates/changelog/changelog.html:15
-#: rhodecode/templates/data_table/_dt_elements.html:23
-#: rhodecode/templates/data_table/_dt_elements.html:25
-#: rhodecode/templates/data_table/_dt_elements.html:27
-msgid "Changelog"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:175
-#: rhodecode/templates/base/base.html:177
-#: rhodecode/templates/base/base.html:179
-msgid "Switch to"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:186
-#: rhodecode/templates/base/base.html:188
-#: rhodecode/templates/base/base.html:190
-#: rhodecode/templates/data_table/_dt_elements.html:31
+msgid "Options"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:124
+#: rhodecode/templates/forks/forks_data.html:21
+msgid "Compare fork"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:126
+msgid "Lightweight changelog"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:127
+#: rhodecode/templates/base/base.html:287
+#: rhodecode/templates/search/search.html:14
+#: rhodecode/templates/search/search.html:54
+msgid "Search"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:133
+msgid "Lock"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:141
+msgid "Follow"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:142
+msgid "Unfollow"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:145
 #: rhodecode/templates/data_table/_dt_elements.html:33
 #: rhodecode/templates/data_table/_dt_elements.html:35
-msgid "Files"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:195
-#: rhodecode/templates/base/base.html:199
-msgid "Options"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:204
-#: rhodecode/templates/base/base.html:206
-msgid "repository settings"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:210
-#: rhodecode/templates/data_table/_dt_elements.html:80
-#: rhodecode/templates/forks/fork.html:13
-msgid "fork"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:212 rhodecode/templates/base/root.html:50
-#: rhodecode/templates/changelog/changelog.html:43
-msgid "Open new pull request"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:215
-#: rhodecode/templates/forks/forks_data.html:21
-msgid "Compare fork"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:217
-msgid "search"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:223
-msgid "lock"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:234
-msgid "repositories groups"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:236
-msgid "users groups"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:237
-msgid "permissions"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:239
-msgid "defaults"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:240
-msgid "settings"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:251
-#: rhodecode/templates/base/base.html:253
-msgid "Followers"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:259
-#: rhodecode/templates/base/base.html:261
-msgid "Forks"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:340
-#: rhodecode/templates/base/base.html:342
-#: rhodecode/templates/base/base.html:344
-#: rhodecode/templates/search/search.html:52
-msgid "Search"
-msgstr ""
-
-#: rhodecode/templates/base/root.html:42
-msgid "add another comment"
+#: rhodecode/templates/data_table/_dt_elements.html:37
+#: rhodecode/templates/data_table/_dt_elements.html:74
+#: rhodecode/templates/forks/fork.html:9
+msgid "Fork"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:147
+msgid "Create Pull Request"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:153
+msgid "Show Pull Requests"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:153
+msgid "Pull Requests"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:190
+msgid "Not logged in"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:197
+msgid "Login to your account"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:220
+msgid "Forgot password ?"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:243
+msgid "Log Out"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:262
+msgid "Switch repository"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:274
+msgid "Show recent activity"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:275
+#: rhodecode/templates/journal/journal.html:4
+msgid "Journal"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:286
+msgid "Search in repositories"
+msgstr ""
+
+#: rhodecode/templates/base/perms_summary.html:8
+msgid "No permissions defined yet"
+msgstr ""
+
+#: rhodecode/templates/base/perms_summary.html:15
+msgid "Permission"
+msgstr ""
+
+#: rhodecode/templates/base/perms_summary.html:16
+msgid "Edit Permission"
 msgstr ""
 
 #: rhodecode/templates/base/root.html:43
-#: rhodecode/templates/journal/journal.html:83
-#: rhodecode/templates/summary/summary.html:57
-msgid "Stop following this repository"
+#, fuzzy
+msgid "Add another comment"
 msgstr ""
 
 #: rhodecode/templates/base/root.html:44
-#: rhodecode/templates/summary/summary.html:61
-msgid "Start following this repository"
+#: rhodecode/templates/data_table/_dt_elements.html:140
+msgid "Stop following this repository"
 msgstr ""
 
 #: rhodecode/templates/base/root.html:45
+msgid "Start following this repository"
+msgstr ""
+
+#: rhodecode/templates/base/root.html:46
 msgid "Group"
 msgstr ""
 
+#: rhodecode/templates/base/root.html:47
+msgid "members"
+msgstr ""
+
 #: rhodecode/templates/base/root.html:48
-msgid "search truncated"
+#: rhodecode/templates/pullrequests/pullrequest.html:181
+msgid "Loading ..."
 msgstr ""
 
 #: rhodecode/templates/base/root.html:49
-msgid "no matching files"
+msgid "Search truncated"
+msgstr ""
+
+#: rhodecode/templates/base/root.html:50
+msgid "No matching files"
 msgstr ""
 
 #: rhodecode/templates/base/root.html:51
-msgid "Open new pull request for selected changesets"
+#: rhodecode/templates/changelog/changelog.html:36
+msgid "Open new pull request"
 msgstr ""
 
 #: rhodecode/templates/base/root.html:52
-msgid "Show selected changes __S -> __E"
+msgid "Open new pull request for selected changesets"
 msgstr ""
 
 #: rhodecode/templates/base/root.html:53
+msgid "Show selected changesets __S -> __E"
+msgstr ""
+
+#: rhodecode/templates/base/root.html:54
+msgid "Show selected changeset __S"
+msgstr ""
+
+#: rhodecode/templates/base/root.html:55
 msgid "Selection link"
 msgstr ""
 
+#: rhodecode/templates/base/root.html:56
+#: rhodecode/templates/changeset/diff_block.html:8
+msgid "Collapse diff"
+msgstr ""
+
+#: rhodecode/templates/base/root.html:57
+msgid "Expand diff"
+msgstr ""
+
 #: rhodecode/templates/bookmarks/bookmarks.html:5
 #, python-format
 msgid "%s Bookmarks"
 msgstr ""
 
-#: rhodecode/templates/bookmarks/bookmarks.html:39
+#: rhodecode/templates/bookmarks/bookmarks.html:37
 #: rhodecode/templates/bookmarks/bookmarks_data.html:8
-#: rhodecode/templates/branches/branches.html:53
+#: rhodecode/templates/branches/branches.html:50
 #: rhodecode/templates/branches/branches_data.html:8
-#: rhodecode/templates/tags/tags.html:54
+#: rhodecode/templates/shortlog/shortlog_data.html:8
+#: rhodecode/templates/tags/tags.html:51
 #: rhodecode/templates/tags/tags_data.html:8
 msgid "Author"
 msgstr ""
 
+#: rhodecode/templates/bookmarks/bookmarks.html:38
+#: rhodecode/templates/bookmarks/bookmarks_data.html:9
+#: rhodecode/templates/branches/branches.html:51
+#: rhodecode/templates/branches/branches_data.html:9
+#: rhodecode/templates/shortlog/shortlog_data.html:5
+#: rhodecode/templates/tags/tags.html:52
+#: rhodecode/templates/tags/tags_data.html:9
+msgid "Revision"
+msgstr ""
+
 #: rhodecode/templates/branches/branches.html:5
 #, python-format
 msgid "%s Branches"
 msgstr ""
 
-#: rhodecode/templates/branches/branches.html:29
+#: rhodecode/templates/branches/branches.html:26
 msgid "Compare branches"
 msgstr ""
 
-#: rhodecode/templates/branches/branches.html:56
+#: rhodecode/templates/branches/branches.html:53
 #: rhodecode/templates/branches/branches_data.html:10
-#: rhodecode/templates/compare/compare_diff.html:5
-#: rhodecode/templates/compare/compare_diff.html:13
-#: rhodecode/templates/tags/tags.html:57
+#: rhodecode/templates/tags/tags.html:54
 #: rhodecode/templates/tags/tags_data.html:10
 msgid "Compare"
 msgstr ""
@@ -3115,115 +3288,80 @@
 msgid "%s Changelog"
 msgstr ""
 
-#: rhodecode/templates/changelog/changelog.html:15
+#: rhodecode/templates/changelog/changelog.html:11
 #, python-format
 msgid "showing %d out of %d revision"
 msgid_plural "showing %d out of %d revisions"
 msgstr[0] ""
 msgstr[1] ""
 
-#: rhodecode/templates/changelog/changelog.html:37
+#: rhodecode/templates/changelog/changelog.html:30
 msgid "Clear selection"
 msgstr ""
 
-#: rhodecode/templates/changelog/changelog.html:40
+#: rhodecode/templates/changelog/changelog.html:33
 #: rhodecode/templates/forks/forks_data.html:19
 #, python-format
-msgid "compare fork with %s"
-msgstr ""
-
-#: rhodecode/templates/changelog/changelog.html:40
+msgid "Compare fork with %s"
+msgstr ""
+
+#: rhodecode/templates/changelog/changelog.html:33
 msgid "Compare fork with parent"
 msgstr ""
 
-#: rhodecode/templates/changelog/changelog.html:49
-msgid "Show"
-msgstr ""
-
-#: rhodecode/templates/changelog/changelog.html:74
-#: rhodecode/templates/summary/summary.html:375
-msgid "show more"
-msgstr ""
-
-#: rhodecode/templates/changelog/changelog.html:78
-msgid "Affected number of files, click to show more details"
-msgstr ""
-
-#: rhodecode/templates/changelog/changelog.html:91
-#: rhodecode/templates/changeset/changeset.html:65
-#: rhodecode/templates/changeset/changeset_file_comment.html:20
-#: rhodecode/templates/changeset/changeset_range.html:46
-msgid "Changeset status"
-msgstr ""
-
-#: rhodecode/templates/changelog/changelog.html:94
-#: rhodecode/templates/shortlog/shortlog_data.html:20
-msgid "Click to open associated pull request"
-msgstr ""
-
-#: rhodecode/templates/changelog/changelog.html:104
-msgid "Parent"
-msgstr ""
-
-#: rhodecode/templates/changelog/changelog.html:110
-#: rhodecode/templates/changeset/changeset.html:42
-msgid "No parents"
-msgstr ""
-
-#: rhodecode/templates/changelog/changelog.html:115
+#: rhodecode/templates/changelog/changelog.html:76
+#: rhodecode/templates/summary/summary.html:404
+msgid "Show more"
+msgstr ""
+
+#: rhodecode/templates/changelog/changelog.html:89
+#: rhodecode/templates/changeset/changeset_range.html:86
+#, python-format
+msgid "Bookmark %s"
+msgstr ""
+
+#: rhodecode/templates/changelog/changelog.html:95
+#: rhodecode/templates/changeset/changeset.html:111
+#: rhodecode/templates/changeset/changeset_range.html:92
+#, python-format
+msgid "Tag %s"
+msgstr ""
+
+#: rhodecode/templates/changelog/changelog.html:100
 #: rhodecode/templates/changeset/changeset.html:106
-#: rhodecode/templates/changeset/changeset_range.html:79
-msgid "merge"
-msgstr ""
-
-#: rhodecode/templates/changelog/changelog.html:118
-#: rhodecode/templates/changeset/changeset.html:109
-#: rhodecode/templates/changeset/changeset_range.html:82
-#: rhodecode/templates/files/files.html:29
-#: rhodecode/templates/files/files_add.html:33
-#: rhodecode/templates/files/files_edit.html:33
-#: rhodecode/templates/shortlog/shortlog_data.html:9
-msgid "branch"
-msgstr ""
-
-#: rhodecode/templates/changelog/changelog.html:124
-#: rhodecode/templates/changeset/changeset_range.html:88
-msgid "bookmark"
-msgstr ""
-
-#: rhodecode/templates/changelog/changelog.html:130
-#: rhodecode/templates/changeset/changeset.html:114
-#: rhodecode/templates/changeset/changeset_range.html:94
-msgid "tag"
-msgstr ""
-
-#: rhodecode/templates/changelog/changelog.html:301
+#: rhodecode/templates/changeset/changeset_range.html:80
+#, python-format
+msgid "Branch %s"
+msgstr ""
+
+#: rhodecode/templates/changelog/changelog.html:258
 msgid "There are no changes yet"
 msgstr ""
 
 #: rhodecode/templates/changelog/changelog_details.html:4
-#: rhodecode/templates/changeset/changeset.html:94
-msgid "removed"
+#: rhodecode/templates/changeset/changeset.html:91
+msgid "Removed"
 msgstr ""
 
 #: rhodecode/templates/changelog/changelog_details.html:5
-#: rhodecode/templates/changeset/changeset.html:95
-msgid "changed"
+#: rhodecode/templates/changeset/changeset.html:92
+#, fuzzy
+msgid "Changed"
 msgstr ""
 
 #: rhodecode/templates/changelog/changelog_details.html:6
-#: rhodecode/templates/changeset/changeset.html:96
-msgid "added"
+#: rhodecode/templates/changeset/changeset.html:93
+msgid "Added"
 msgstr ""
 
 #: rhodecode/templates/changelog/changelog_details.html:8
 #: rhodecode/templates/changelog/changelog_details.html:9
 #: rhodecode/templates/changelog/changelog_details.html:10
-#: rhodecode/templates/changeset/changeset.html:98
-#: rhodecode/templates/changeset/changeset.html:99
-#: rhodecode/templates/changeset/changeset.html:100
+#: rhodecode/templates/changeset/changeset.html:95
+#: rhodecode/templates/changeset/changeset.html:96
+#: rhodecode/templates/changeset/changeset.html:97
 #, python-format
-msgid "affected %s files"
+msgid "Affected %s files"
 msgstr ""
 
 #: rhodecode/templates/changeset/changeset.html:6
@@ -3231,112 +3369,144 @@
 msgid "%s Changeset"
 msgstr ""
 
-#: rhodecode/templates/changeset/changeset.html:14
-msgid "Changeset"
-msgstr ""
-
-#: rhodecode/templates/changeset/changeset.html:52
+#: rhodecode/templates/changeset/changeset.html:39
+msgid "No parents"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset.html:49
 msgid "No children"
 msgstr ""
 
-#: rhodecode/templates/changeset/changeset.html:70
-#: rhodecode/templates/changeset/diff_block.html:20
-msgid "raw diff"
-msgstr ""
-
-#: rhodecode/templates/changeset/changeset.html:71
-msgid "patch diff"
-msgstr ""
-
-#: rhodecode/templates/changeset/changeset.html:72
-#: rhodecode/templates/changeset/diff_block.html:21
-msgid "download diff"
-msgstr ""
-
-#: rhodecode/templates/changeset/changeset.html:76
-#: rhodecode/templates/changeset/changeset_file_comment.html:82
+#: rhodecode/templates/changeset/changeset.html:62
+#: rhodecode/templates/changeset/changeset_file_comment.html:20
+#: rhodecode/templates/changeset/changeset_range.html:44
+msgid "Changeset status"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset.html:67
+#: rhodecode/templates/changeset/diff_block.html:23
+msgid "Raw diff"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset.html:68
+msgid "Patch diff"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset.html:69
+#: rhodecode/templates/changeset/diff_block.html:24
+msgid "Download diff"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset.html:73
+#: rhodecode/templates/changeset/changeset_file_comment.html:97
 #, python-format
 msgid "%d comment"
 msgid_plural "%d comments"
 msgstr[0] ""
 msgstr[1] ""
 
-#: rhodecode/templates/changeset/changeset.html:76
-#: rhodecode/templates/changeset/changeset_file_comment.html:82
+#: rhodecode/templates/changeset/changeset.html:73
+#: rhodecode/templates/changeset/changeset_file_comment.html:97
 #, python-format
 msgid "(%d inline)"
 msgid_plural "(%d inline)"
 msgstr[0] ""
 msgstr[1] ""
 
-#: rhodecode/templates/changeset/changeset.html:122
-#: rhodecode/templates/compare/compare_diff.html:44
-#: rhodecode/templates/pullrequests/pullrequest_show.html:76
+#: rhodecode/templates/changeset/changeset.html:103
+#: rhodecode/templates/changeset/changeset_range.html:77
+msgid "merge"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset.html:119
+#: rhodecode/templates/compare/compare_diff.html:40
+#: rhodecode/templates/pullrequests/pullrequest_show.html:113
 #, python-format
 msgid "%s file changed"
 msgid_plural "%s files changed"
 msgstr[0] ""
 msgstr[1] ""
 
-#: rhodecode/templates/changeset/changeset.html:124
-#: rhodecode/templates/compare/compare_diff.html:46
-#: rhodecode/templates/pullrequests/pullrequest_show.html:78
+#: rhodecode/templates/changeset/changeset.html:121
+#: rhodecode/templates/compare/compare_diff.html:42
+#: rhodecode/templates/pullrequests/pullrequest_show.html:115
 #, python-format
 msgid "%s file changed with %s insertions and %s deletions"
 msgid_plural "%s files changed with %s insertions and %s deletions"
 msgstr[0] ""
 msgstr[1] ""
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:42
-msgid "Submitting..."
-msgstr ""
-
-#: rhodecode/templates/changeset/changeset_file_comment.html:45
-msgid "Commenting on line {1}."
-msgstr ""
-
-#: rhodecode/templates/changeset/changeset_file_comment.html:46
-#: rhodecode/templates/changeset/changeset_file_comment.html:121
+#: rhodecode/templates/changeset/changeset.html:134
+#: rhodecode/templates/changeset/changeset.html:146
+#: rhodecode/templates/pullrequests/pullrequest_show.html:131
+#: rhodecode/templates/pullrequests/pullrequest_show.html:195
+msgid "Showing a huge diff might take some time and resources"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset.html:134
+#: rhodecode/templates/changeset/changeset.html:146
+#: rhodecode/templates/compare/compare_diff.html:58
+#: rhodecode/templates/compare/compare_diff.html:69
+#: rhodecode/templates/pullrequests/pullrequest_show.html:131
+#: rhodecode/templates/pullrequests/pullrequest_show.html:195
+msgid "Show full diff"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:30
 #, python-format
-msgid "Comments parsed using %s syntax with %s support."
-msgstr ""
-
-#: rhodecode/templates/changeset/changeset_file_comment.html:48
-#: rhodecode/templates/changeset/changeset_file_comment.html:123
-msgid "Use @username inside this text to send notification to this RhodeCode user"
-msgstr ""
-
-#: rhodecode/templates/changeset/changeset_file_comment.html:59
-#: rhodecode/templates/changeset/changeset_file_comment.html:143
-msgid "Comment"
+msgid "Status change on pull request #%s"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:32
+#, python-format
+msgid "Comment on pull request #%s"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:57
+msgid "Submitting..."
 msgstr ""
 
 #: rhodecode/templates/changeset/changeset_file_comment.html:60
-#: rhodecode/templates/changeset/changeset_file_comment.html:71
-msgid "Hide"
-msgstr ""
-
-#: rhodecode/templates/changeset/changeset_file_comment.html:67
+msgid "Commenting on line {1}."
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:61
+#: rhodecode/templates/changeset/changeset_file_comment.html:139
+#, python-format
+msgid "Comments parsed using %s syntax with %s support."
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:63
+#: rhodecode/templates/changeset/changeset_file_comment.html:141
+msgid "Use @username inside this text to send notification to this RhodeCode user"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:74
+#: rhodecode/templates/changeset/changeset_file_comment.html:161
+msgid "Comment"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:75
+msgid "Cancel"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:82
 msgid "You need to be logged in to comment."
 msgstr ""
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:67
+#: rhodecode/templates/changeset/changeset_file_comment.html:82
 msgid "Login now"
 msgstr ""
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:118
-msgid "Leave a comment"
-msgstr ""
-
-#: rhodecode/templates/changeset/changeset_file_comment.html:125
-msgid "Check this to change current status of code-review for this changeset"
-msgstr ""
-
-#: rhodecode/templates/changeset/changeset_file_comment.html:125
-msgid "change status"
-msgstr ""
-
-#: rhodecode/templates/changeset/changeset_file_comment.html:145
+#: rhodecode/templates/changeset/changeset_file_comment.html:86
+msgid "Hide"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:143
+msgid "Change status"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:163
 msgid "Comment and close"
 msgstr ""
 
@@ -3345,97 +3515,118 @@
 msgid "%s Changesets"
 msgstr ""
 
-#: rhodecode/templates/changeset/changeset_range.html:29
-#: rhodecode/templates/compare/compare_diff.html:29
-msgid "Compare View"
-msgstr ""
-
-#: rhodecode/templates/changeset/changeset_range.html:29
-msgid "Show combined compare"
-msgstr ""
-
-#: rhodecode/templates/changeset/changeset_range.html:54
+#: rhodecode/templates/changeset/changeset_range.html:52
 msgid "Files affected"
 msgstr ""
 
-#: rhodecode/templates/changeset/diff_block.html:19
-msgid "show full diff for this file"
-msgstr ""
-
-#: rhodecode/templates/changeset/diff_block.html:27
-msgid "show inline comments"
-msgstr ""
-
-#: rhodecode/templates/compare/compare_cs.html:5
+#: rhodecode/templates/changeset/diff_block.html:22
+msgid "Show full diff for this file"
+msgstr ""
+
+#: rhodecode/templates/changeset/diff_block.html:30
+msgid "Show inline comments"
+msgstr ""
+
+#: rhodecode/templates/changeset/diff_block.html:55
+msgid "Show file at latest version in this repo"
+msgstr ""
+
+#: rhodecode/templates/changeset/diff_block.html:56
+msgid "Show file at initial version in this repo"
+msgstr ""
+
+#: rhodecode/templates/compare/compare_cs.html:4
 msgid "No changesets"
 msgstr ""
 
-#: rhodecode/templates/compare/compare_diff.html:37
-#: rhodecode/templates/pullrequests/pullrequest_show.html:69
+#: rhodecode/templates/compare/compare_cs.html:32
+msgid "Ancestor"
+msgstr ""
+
+#: rhodecode/templates/compare/compare_diff.html:5
+#, fuzzy, python-format
+msgid "%s Compare"
+msgstr ""
+
+#: rhodecode/templates/compare/compare_diff.html:9
+msgid "Compare revisions"
+msgstr ""
+
+#: rhodecode/templates/compare/compare_diff.html:33
+#: rhodecode/templates/pullrequests/pullrequest_show.html:106
 #, python-format
 msgid "Showing %s commit"
 msgid_plural "Showing %s commits"
 msgstr[0] ""
 msgstr[1] ""
 
-#: rhodecode/templates/compare/compare_diff.html:52
-#: rhodecode/templates/pullrequests/pullrequest_show.html:84
+#: rhodecode/templates/compare/compare_diff.html:48
+#: rhodecode/templates/pullrequests/pullrequest_show.html:121
 msgid "No files"
 msgstr ""
 
-#: rhodecode/templates/data_table/_dt_elements.html:39
-#: rhodecode/templates/data_table/_dt_elements.html:41
-#: rhodecode/templates/data_table/_dt_elements.html:43
-msgid "Fork"
-msgstr ""
-
-#: rhodecode/templates/data_table/_dt_elements.html:60
-#: rhodecode/templates/journal/journal.html:89
-#: rhodecode/templates/summary/summary.html:77
+#: rhodecode/templates/compare/compare_diff.html:58
+#: rhodecode/templates/compare/compare_diff.html:69
+msgid "confirm to show potentially huge diff"
+msgstr ""
+
+#: rhodecode/templates/data_table/_dt_elements.html:54
+#: rhodecode/templates/summary/summary.html:69
 msgid "Mercurial repository"
 msgstr ""
 
-#: rhodecode/templates/data_table/_dt_elements.html:62
-#: rhodecode/templates/journal/journal.html:91
-#: rhodecode/templates/summary/summary.html:80
+#: rhodecode/templates/data_table/_dt_elements.html:56
+#: rhodecode/templates/summary/summary.html:72
 msgid "Git repository"
 msgstr ""
 
-#: rhodecode/templates/data_table/_dt_elements.html:69
-#: rhodecode/templates/journal/journal.html:97
-#: rhodecode/templates/summary/summary.html:87
-msgid "public repository"
-msgstr ""
-
-#: rhodecode/templates/data_table/_dt_elements.html:80
-#: rhodecode/templates/summary/summary.html:96
-#: rhodecode/templates/summary/summary.html:97
-msgid "Fork of"
-msgstr ""
-
-#: rhodecode/templates/data_table/_dt_elements.html:94
+#: rhodecode/templates/data_table/_dt_elements.html:74
+#, python-format
+msgid "Fork of %s"
+msgstr ""
+
+#: rhodecode/templates/data_table/_dt_elements.html:88
 msgid "No changesets yet"
 msgstr ""
 
-#: rhodecode/templates/data_table/_dt_elements.html:101
-#: rhodecode/templates/data_table/_dt_elements.html:103
+#: rhodecode/templates/data_table/_dt_elements.html:95
+#: rhodecode/templates/data_table/_dt_elements.html:97
 #, python-format
 msgid "Subscribe to %s rss feed"
 msgstr ""
 
-#: rhodecode/templates/data_table/_dt_elements.html:109
-#: rhodecode/templates/data_table/_dt_elements.html:111
+#: rhodecode/templates/data_table/_dt_elements.html:103
+#: rhodecode/templates/data_table/_dt_elements.html:105
 #, python-format
 msgid "Subscribe to %s atom feed"
 msgstr ""
 
 #: rhodecode/templates/data_table/_dt_elements.html:122
 #, python-format
+msgid "Confirm to delete this repository: %s"
+msgstr ""
+
+#: rhodecode/templates/data_table/_dt_elements.html:131
+#, python-format
 msgid "Confirm to delete this user: %s"
 msgstr ""
 
-#: rhodecode/templates/email_templates/changeset_comment.html:10
-msgid "New status$"
+#: rhodecode/templates/email_templates/changeset_comment.html:9
+#: rhodecode/templates/email_templates/pull_request_comment.html:15
+msgid "New status"
+msgstr ""
+
+#: rhodecode/templates/email_templates/changeset_comment.html:11
+#: rhodecode/templates/email_templates/pull_request_comment.html:9
+msgid "View this comment here"
+msgstr ""
+
+#: rhodecode/templates/email_templates/changeset_comment.html:14
+msgid "Repo"
+msgstr ""
+
+#: rhodecode/templates/email_templates/changeset_comment.html:16
+msgid "desc"
 msgstr ""
 
 #: rhodecode/templates/email_templates/main.html:8
@@ -3443,19 +3634,20 @@
 msgstr ""
 
 #: rhodecode/templates/email_templates/password_reset.html:4
-msgid "Hello"
+#, python-format
+msgid "Hello %s"
+msgstr ""
+
+#: rhodecode/templates/email_templates/password_reset.html:5
+msgid "We received a request to create a new password for your account."
 msgstr ""
 
 #: rhodecode/templates/email_templates/password_reset.html:6
-msgid "We received a request to create a new password for your account."
-msgstr ""
-
-#: rhodecode/templates/email_templates/password_reset.html:8
 msgid "You can generate it by clicking following URL"
 msgstr ""
 
-#: rhodecode/templates/email_templates/password_reset.html:12
-msgid "If you didn't request new password please ignore this email."
+#: rhodecode/templates/email_templates/password_reset.html:11
+msgid "If you did not request new password please ignore this email."
 msgstr ""
 
 #: rhodecode/templates/email_templates/pull_request.html:4
@@ -3466,33 +3658,28 @@
 msgstr ""
 
 #: rhodecode/templates/email_templates/pull_request.html:5
-msgid "title"
+msgid "View this pull request here"
 msgstr ""
 
 #: rhodecode/templates/email_templates/pull_request.html:6
-#: rhodecode/templates/pullrequests/pullrequest.html:115
+msgid "title"
+msgstr ""
+
+#: rhodecode/templates/email_templates/pull_request.html:7
 msgid "description"
 msgstr ""
 
-#: rhodecode/templates/email_templates/pull_request.html:11
+#: rhodecode/templates/email_templates/pull_request.html:12
 msgid "revisions for reviewing"
 msgstr ""
 
-#: rhodecode/templates/email_templates/pull_request.html:18
-msgid "View this pull request here"
-msgstr ""
-
-#: rhodecode/templates/email_templates/pull_request_comment.html:4
+#: rhodecode/templates/email_templates/pull_request_comment.html:3
 #, python-format
-msgid "User %s commented on pull request #%s for repository %s"
-msgstr ""
-
-#: rhodecode/templates/email_templates/pull_request_comment.html:10
-msgid "New status"
-msgstr ""
-
-#: rhodecode/templates/email_templates/pull_request_comment.html:14
-msgid "View this comment here"
+msgid "Pull request #%s for repository %s"
+msgstr ""
+
+#: rhodecode/templates/email_templates/pull_request_comment.html:13
+msgid "Closing pull request with status"
 msgstr ""
 
 #: rhodecode/templates/email_templates/registration.html:4
@@ -3503,107 +3690,105 @@
 msgid "View this user here"
 msgstr ""
 
-#: rhodecode/templates/errors/error_document.html:46
+#: rhodecode/templates/errors/error_document.html:55
 #, python-format
 msgid "You will be redirected to %s in %s seconds"
 msgstr ""
 
 #: rhodecode/templates/files/file_diff.html:4
-#, python-format
-msgid "%s File diff"
-msgstr ""
-
-#: rhodecode/templates/files/file_diff.html:12
+#, fuzzy, python-format
+msgid "%s File Diff"
+msgstr ""
+
+#: rhodecode/templates/files/file_diff.html:8
 msgid "File diff"
 msgstr ""
 
 #: rhodecode/templates/files/files.html:4
-#: rhodecode/templates/files/files.html:74
-#, python-format
-msgid "%s files"
-msgstr ""
-
-#: rhodecode/templates/files/files.html:12
-#: rhodecode/templates/summary/summary.html:351
-msgid "files"
+#: rhodecode/templates/files/files.html:76
+#, fuzzy, python-format
+msgid "%s Files"
+msgstr ""
+
+#: rhodecode/templates/files/files.html:30
+#: rhodecode/templates/files/files_add.html:31
+#: rhodecode/templates/files/files_edit.html:31
+#: rhodecode/templates/shortlog/shortlog_data.html:9
+msgid "Branch"
 msgstr ""
 
 #: rhodecode/templates/files/files_add.html:4
-#: rhodecode/templates/files/files_edit.html:4
-#, python-format
-msgid "%s Edit file"
+#, fuzzy, python-format
+msgid "%s Files Add"
 msgstr ""
 
 #: rhodecode/templates/files/files_add.html:19
-msgid "add file"
-msgstr ""
-
-#: rhodecode/templates/files/files_add.html:40
+msgid "Add file"
+msgstr ""
+
+#: rhodecode/templates/files/files_add.html:38
+#: rhodecode/templates/files/files_browser.html:31
+#: rhodecode/templates/shortlog/shortlog_data.html:78
 msgid "Add new file"
 msgstr ""
 
-#: rhodecode/templates/files/files_add.html:45
+#: rhodecode/templates/files/files_add.html:43
 msgid "File Name"
 msgstr ""
 
-#: rhodecode/templates/files/files_add.html:49
-#: rhodecode/templates/files/files_add.html:58
+#: rhodecode/templates/files/files_add.html:47
+#: rhodecode/templates/files/files_add.html:56
 msgid "or"
 msgstr ""
 
-#: rhodecode/templates/files/files_add.html:49
-#: rhodecode/templates/files/files_add.html:54
+#: rhodecode/templates/files/files_add.html:47
+#: rhodecode/templates/files/files_add.html:52
 msgid "Upload file"
 msgstr ""
 
-#: rhodecode/templates/files/files_add.html:58
+#: rhodecode/templates/files/files_add.html:56
 msgid "Create new file"
 msgstr ""
 
-#: rhodecode/templates/files/files_add.html:63
-#: rhodecode/templates/files/files_edit.html:39
+#: rhodecode/templates/files/files_add.html:61
+#: rhodecode/templates/files/files_edit.html:37
 #: rhodecode/templates/files/files_ypjax.html:3
 msgid "Location"
 msgstr ""
 
-#: rhodecode/templates/files/files_add.html:67
+#: rhodecode/templates/files/files_add.html:65
 msgid "use / to separate directories"
 msgstr ""
 
-#: rhodecode/templates/files/files_add.html:77
-#: rhodecode/templates/files/files_edit.html:63
+#: rhodecode/templates/files/files_add.html:75
+#: rhodecode/templates/files/files_edit.html:61
 #: rhodecode/templates/shortlog/shortlog_data.html:6
-msgid "commit message"
-msgstr ""
-
-#: rhodecode/templates/files/files_add.html:81
-#: rhodecode/templates/files/files_edit.html:67
+msgid "Commit message"
+msgstr ""
+
+#: rhodecode/templates/files/files_add.html:79
+#: rhodecode/templates/files/files_edit.html:65
 msgid "Commit changes"
 msgstr ""
 
 #: rhodecode/templates/files/files_browser.html:13
-msgid "view"
+msgid "View"
 msgstr ""
 
 #: rhodecode/templates/files/files_browser.html:14
-msgid "previous revision"
+msgid "Previous revision"
 msgstr ""
 
 #: rhodecode/templates/files/files_browser.html:16
-msgid "next revision"
+msgid "Next revision"
 msgstr ""
 
 #: rhodecode/templates/files/files_browser.html:23
-msgid "follow current branch"
+msgid "Follow current branch"
 msgstr ""
 
 #: rhodecode/templates/files/files_browser.html:27
-msgid "search file list"
-msgstr ""
-
-#: rhodecode/templates/files/files_browser.html:31
-#: rhodecode/templates/shortlog/shortlog_data.html:78
-msgid "add new file"
+msgid "Search file list"
 msgstr ""
 
 #: rhodecode/templates/files/files_browser.html:35
@@ -3627,34 +3812,39 @@
 msgstr ""
 
 #: rhodecode/templates/files/files_browser.html:52
-msgid "Last commiter"
+msgid "Last committer"
+msgstr ""
+
+#: rhodecode/templates/files/files_edit.html:4
+#, fuzzy, python-format
+msgid "%s Files Edit"
 msgstr ""
 
 #: rhodecode/templates/files/files_edit.html:19
-msgid "edit file"
+msgid "Edit file"
+msgstr ""
+
+#: rhodecode/templates/files/files_edit.html:47
+#: rhodecode/templates/files/files_source.html:23
+msgid "Show annotation"
+msgstr ""
+
+#: rhodecode/templates/files/files_edit.html:48
+#: rhodecode/templates/files/files_source.html:25
+#: rhodecode/templates/files/files_source.html:55
+msgid "Show as raw"
 msgstr ""
 
 #: rhodecode/templates/files/files_edit.html:49
-#: rhodecode/templates/files/files_source.html:23
-msgid "show annotation"
-msgstr ""
-
-#: rhodecode/templates/files/files_edit.html:50
-#: rhodecode/templates/files/files_source.html:25
-#: rhodecode/templates/files/files_source.html:53
-msgid "show as raw"
-msgstr ""
-
-#: rhodecode/templates/files/files_edit.html:51
 #: rhodecode/templates/files/files_source.html:26
-msgid "download as raw"
-msgstr ""
-
-#: rhodecode/templates/files/files_edit.html:54
-msgid "source"
-msgstr ""
-
-#: rhodecode/templates/files/files_edit.html:59
+msgid "Download as raw"
+msgstr ""
+
+#: rhodecode/templates/files/files_edit.html:52
+msgid "Source"
+msgstr ""
+
+#: rhodecode/templates/files/files_edit.html:57
 msgid "Editing file"
 msgstr ""
 
@@ -3663,16 +3853,16 @@
 msgstr ""
 
 #: rhodecode/templates/files/files_history_box.html:9
-msgid "diff to revision"
+msgid "Diff to revision"
 msgstr ""
 
 #: rhodecode/templates/files/files_history_box.html:10
 #, fuzzy
-msgid "show at revision"
+msgid "Show at revision"
 msgstr ""
 
 #: rhodecode/templates/files/files_history_box.html:11
-msgid "show full history"
+msgid "Show full history"
 msgstr ""
 
 #: rhodecode/templates/files/files_history_box.html:16
@@ -3687,15 +3877,28 @@
 msgstr ""
 
 #: rhodecode/templates/files/files_source.html:21
-msgid "show source"
-msgstr ""
-
-#: rhodecode/templates/files/files_source.html:44
+msgid "Show source"
+msgstr ""
+
+#: rhodecode/templates/files/files_source.html:29
+#, python-format
+msgid "Edit on branch:%s"
+msgstr ""
+
+#: rhodecode/templates/files/files_source.html:31
+msgid "Edit on branch:?"
+msgstr ""
+
+#: rhodecode/templates/files/files_source.html:31
+msgid "Editing files allowed only when on branch head revision"
+msgstr ""
+
+#: rhodecode/templates/files/files_source.html:46
 #, python-format
 msgid "Binary file (%s)"
 msgstr ""
 
-#: rhodecode/templates/files/files_source.html:53
+#: rhodecode/templates/files/files_source.html:55
 msgid "File is too big to display"
 msgstr ""
 
@@ -3716,8 +3919,10 @@
 msgid "%s Followers"
 msgstr ""
 
-#: rhodecode/templates/followers/followers.html:13
-msgid "followers"
+#: rhodecode/templates/followers/followers.html:9
+#: rhodecode/templates/summary/summary.html:183
+#: rhodecode/templates/summary/summary.html:184
+msgid "Followers"
 msgstr ""
 
 #: rhodecode/templates/followers/followers_data.html:12
@@ -3729,32 +3934,32 @@
 msgid "%s Fork"
 msgstr ""
 
-#: rhodecode/templates/forks/fork.html:31
+#: rhodecode/templates/forks/fork.html:28
 msgid "Fork name"
 msgstr ""
 
-#: rhodecode/templates/forks/fork.html:68
+#: rhodecode/templates/forks/fork.html:65
 msgid "Private"
 msgstr ""
 
-#: rhodecode/templates/forks/fork.html:77
+#: rhodecode/templates/forks/fork.html:74
 msgid "Copy permissions"
 msgstr ""
 
-#: rhodecode/templates/forks/fork.html:81
+#: rhodecode/templates/forks/fork.html:78
 msgid "Copy permissions from forked repository"
 msgstr ""
 
-#: rhodecode/templates/forks/fork.html:86
+#: rhodecode/templates/forks/fork.html:84
 msgid "Update after clone"
 msgstr ""
 
-#: rhodecode/templates/forks/fork.html:90
+#: rhodecode/templates/forks/fork.html:88
 msgid "Checkout source after making a clone"
 msgstr ""
 
-#: rhodecode/templates/forks/fork.html:94
-msgid "fork this repository"
+#: rhodecode/templates/forks/fork.html:93
+msgid "Fork this repository"
 msgstr ""
 
 #: rhodecode/templates/forks/forks.html:5
@@ -3762,12 +3967,14 @@
 msgid "%s Forks"
 msgstr ""
 
-#: rhodecode/templates/forks/forks.html:13
-msgid "forks"
+#: rhodecode/templates/forks/forks.html:9
+#: rhodecode/templates/summary/summary.html:189
+#: rhodecode/templates/summary/summary.html:190
+msgid "Forks"
 msgstr ""
 
 #: rhodecode/templates/forks/forks_data.html:17
-msgid "forked"
+msgid "Forked"
 msgstr ""
 
 #: rhodecode/templates/forks/forks_data.html:42
@@ -3783,44 +3990,27 @@
 msgstr ""
 
 #: rhodecode/templates/journal/journal.html:32
-#: rhodecode/templates/pullrequests/pullrequest.html:55
 msgid "Refresh"
 msgstr ""
 
 #: rhodecode/templates/journal/journal.html:35
 #: rhodecode/templates/journal/public_journal.html:24
-msgid "RSS feed"
-msgstr ""
-
-#: rhodecode/templates/journal/journal.html:38
-#: rhodecode/templates/journal/public_journal.html:27
 msgid "ATOM feed"
 msgstr ""
 
-#: rhodecode/templates/journal/journal.html:49
+#: rhodecode/templates/journal/journal.html:51
 msgid "Watched"
 msgstr ""
 
-#: rhodecode/templates/journal/journal.html:54
-msgid "ADD"
-msgstr ""
-
-#: rhodecode/templates/journal/journal.html:77
-msgid "following user"
-msgstr ""
-
-#: rhodecode/templates/journal/journal.html:77
-msgid "user"
-msgstr ""
-
-#: rhodecode/templates/journal/journal.html:110
-msgid "You are not following any users or repositories"
-msgstr ""
-
 #: rhodecode/templates/journal/journal_data.html:55
 msgid "No entries yet"
 msgstr ""
 
+#: rhodecode/templates/journal/public_journal.html:4
+#: rhodecode/templates/journal/public_journal.html:21
+msgid "Public Journal"
+msgstr ""
+
 #: rhodecode/templates/journal/public_journal.html:13
 msgid "ATOM public journal feed"
 msgstr ""
@@ -3829,148 +4019,128 @@
 msgid "RSS public journal feed"
 msgstr ""
 
-#: rhodecode/templates/journal/public_journal.html:21
-msgid "Public Journal"
-msgstr ""
-
 #: rhodecode/templates/pullrequests/pullrequest.html:4
-#: rhodecode/templates/pullrequests/pullrequest.html:12
+#: rhodecode/templates/pullrequests/pullrequest.html:8
 msgid "New pull request"
 msgstr ""
 
-#: rhodecode/templates/pullrequests/pullrequest.html:54
-msgid "refresh overview"
-msgstr ""
-
-#: rhodecode/templates/pullrequests/pullrequest.html:66
+#: rhodecode/templates/pullrequests/pullrequest.html:52
 msgid "Detailed compare view"
 msgstr ""
 
-#: rhodecode/templates/pullrequests/pullrequest.html:70
-#: rhodecode/templates/pullrequests/pullrequest_show.html:100
+#: rhodecode/templates/pullrequests/pullrequest.html:56
+#: rhodecode/templates/pullrequests/pullrequest_show.html:137
 msgid "Pull request reviewers"
 msgstr ""
 
-#: rhodecode/templates/pullrequests/pullrequest.html:79
-#: rhodecode/templates/pullrequests/pullrequest_show.html:112
+#: rhodecode/templates/pullrequests/pullrequest.html:65
+#: rhodecode/templates/pullrequests/pullrequest_show.html:149
 msgid "owner"
 msgstr ""
 
-#: rhodecode/templates/pullrequests/pullrequest.html:91
-#: rhodecode/templates/pullrequests/pullrequest_show.html:127
+#: rhodecode/templates/pullrequests/pullrequest.html:77
 msgid "Add reviewer to this pull request."
 msgstr ""
 
-#: rhodecode/templates/pullrequests/pullrequest.html:97
+#: rhodecode/templates/pullrequests/pullrequest.html:83
 msgid "Create new pull request"
 msgstr ""
 
-#: rhodecode/templates/pullrequests/pullrequest.html:106
+#: rhodecode/templates/pullrequests/pullrequest.html:92
+#: rhodecode/templates/pullrequests/pullrequest_data.html:14
 #: rhodecode/templates/pullrequests/pullrequest_show.html:25
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:33
 msgid "Title"
 msgstr ""
 
-#: rhodecode/templates/pullrequests/pullrequest.html:123
+#: rhodecode/templates/pullrequests/pullrequest.html:109
 msgid "Send pull request"
 msgstr ""
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:23
-#, python-format
-msgid "Closed %s"
-msgstr ""
-
-#: rhodecode/templates/pullrequests/pullrequest_show.html:23
+#: rhodecode/templates/pullrequests/pullrequest_show.html:4
 #, python-format
-msgid "with status %s"
-msgstr ""
-
-#: rhodecode/templates/pullrequests/pullrequest_show.html:31
-msgid "Status"
-msgstr ""
-
-#: rhodecode/templates/pullrequests/pullrequest_show.html:36
+msgid "%s Pull Request #%s"
+msgstr ""
+
+#: rhodecode/templates/pullrequests/pullrequest_show.html:35
+msgid "Review status"
+msgstr ""
+
+#: rhodecode/templates/pullrequests/pullrequest_show.html:40
 msgid "Pull request status"
 msgstr ""
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:44
+#: rhodecode/templates/pullrequests/pullrequest_show.html:53
 msgid "Still not reviewed by"
 msgstr ""
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:48
+#: rhodecode/templates/pullrequests/pullrequest_show.html:57
 #, python-format
 msgid "%d reviewer"
 msgid_plural "%d reviewers"
 msgstr[0] ""
 msgstr[1] ""
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:50
-msgid "pull request was reviewed by all reviewers"
-msgstr ""
-
-#: rhodecode/templates/pullrequests/pullrequest_show.html:58
-msgid "Created on"
+#: rhodecode/templates/pullrequests/pullrequest_show.html:59
+msgid "Pull request was reviewed by all reviewers"
 msgstr ""
 
 #: rhodecode/templates/pullrequests/pullrequest_show.html:65
+msgid "Origin repository"
+msgstr ""
+
+#: rhodecode/templates/pullrequests/pullrequest_show.html:89
+msgid "Created on"
+msgstr ""
+
+#: rhodecode/templates/pullrequests/pullrequest_show.html:102
 msgid "Compare view"
 msgstr ""
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:112
+#: rhodecode/templates/pullrequests/pullrequest_show.html:149
 #, fuzzy
 msgid "reviewer"
 msgstr ""
 
+#: rhodecode/templates/pullrequests/pullrequest_show.html:164
+msgid "Add or remove reviewer to this pull request."
+msgstr ""
+
+#: rhodecode/templates/pullrequests/pullrequest_show.html:168
+#, fuzzy
+msgid "Save changes"
+msgstr ""
+
 #: rhodecode/templates/pullrequests/pullrequest_show_all.html:4
-msgid "all pull requests"
-msgstr ""
-
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:12
-msgid "All pull requests"
-msgstr ""
-
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:27
-msgid "Closed"
+#, python-format
+msgid "%s Pull Requests"
 msgstr ""
 
 #: rhodecode/templates/search/search.html:6
-#, python-format
-msgid "Search \"%s\" in repository: %s"
+msgid "Search repository"
 msgstr ""
 
 #: rhodecode/templates/search/search.html:8
-#, python-format
-msgid "Search \"%s\" in all repositories"
-msgstr ""
-
-#: rhodecode/templates/search/search.html:12
-#: rhodecode/templates/search/search.html:32
-#, python-format
-msgid "Search in repository: %s"
-msgstr ""
-
-#: rhodecode/templates/search/search.html:14
-#: rhodecode/templates/search/search.html:34
+#: rhodecode/templates/search/search.html:16
 msgid "Search in all repositories"
 msgstr ""
 
-#: rhodecode/templates/search/search.html:48
+#: rhodecode/templates/search/search.html:50
 msgid "Search term"
 msgstr ""
 
-#: rhodecode/templates/search/search.html:60
+#: rhodecode/templates/search/search.html:62
 msgid "Search in"
 msgstr ""
 
-#: rhodecode/templates/search/search.html:63
-msgid "File contents"
-msgstr ""
-
-#: rhodecode/templates/search/search.html:64
-msgid "Commit messages"
-msgstr ""
-
 #: rhodecode/templates/search/search.html:65
+msgid "File contents"
+msgstr ""
+
+#: rhodecode/templates/search/search.html:66
+msgid "Commit messages"
+msgstr ""
+
+#: rhodecode/templates/search/search.html:67
 msgid "File names"
 msgstr ""
 
@@ -3980,39 +4150,23 @@
 msgid "Permission denied"
 msgstr ""
 
-#: rhodecode/templates/settings/repo_settings.html:5
-#, python-format
-msgid "%s Settings"
-msgstr ""
-
-#: rhodecode/templates/settings/repo_settings.html:102
-msgid "Delete repository"
-msgstr ""
-
-#: rhodecode/templates/settings/repo_settings.html:109
-msgid "Remove repo"
-msgstr ""
-
 #: rhodecode/templates/shortlog/shortlog.html:5
-#, python-format
-msgid "%s Shortlog"
-msgstr ""
-
+#, fuzzy, python-format
+msgid "%s Lightweight Changelog"
+msgstr ""
+
+#: rhodecode/templates/shortlog/shortlog.html:11
 #: rhodecode/templates/shortlog/shortlog.html:15
-#: rhodecode/templates/shortlog/shortlog.html:19
-msgid "shortlog"
-msgstr ""
-
-#: rhodecode/templates/shortlog/shortlog_data.html:5
-msgid "revision"
+msgid "Lightweight Changelog"
 msgstr ""
 
 #: rhodecode/templates/shortlog/shortlog_data.html:7
-msgid "age"
-msgstr ""
-
-#: rhodecode/templates/shortlog/shortlog_data.html:8
-msgid "author"
+msgid "Age"
+msgstr ""
+
+#: rhodecode/templates/shortlog/shortlog_data.html:20
+#, python-format
+msgid "Click to open associated pull request #%s"
 msgstr ""
 
 #: rhodecode/templates/shortlog/shortlog_data.html:75
@@ -4032,156 +4186,165 @@
 msgid "%s Summary"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:12
-msgid "summary"
-msgstr ""
-
-#: rhodecode/templates/summary/summary.html:20
+#: rhodecode/templates/summary/summary.html:16
 #, python-format
-msgid "repo %s ATOM feed"
-msgstr ""
-
-#: rhodecode/templates/summary/summary.html:21
+msgid "%s ATOM feed"
+msgstr ""
+
+#: rhodecode/templates/summary/summary.html:17
 #, python-format
-msgid "repo %s RSS feed"
-msgstr ""
-
-#: rhodecode/templates/summary/summary.html:49
-#: rhodecode/templates/summary/summary.html:52
-msgid "ATOM"
-msgstr ""
-
-#: rhodecode/templates/summary/summary.html:70
+msgid "%s RSS feed"
+msgstr ""
+
+#: rhodecode/templates/summary/summary.html:62
 #, python-format
 msgid "Repository locked by %s"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:72
+#: rhodecode/templates/summary/summary.html:64
 msgid "Repository unlocked"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:91
+#: rhodecode/templates/summary/summary.html:83
 #, python-format
 msgid "Non changable ID %s"
 msgstr ""
 
+#: rhodecode/templates/summary/summary.html:88
+msgid "Public"
+msgstr ""
+
+#: rhodecode/templates/summary/summary.html:88
+#: rhodecode/templates/summary/summary.html:89
+msgid "Fork of"
+msgstr ""
+
 #: rhodecode/templates/summary/summary.html:96
-msgid "public"
-msgstr ""
-
-#: rhodecode/templates/summary/summary.html:104
-msgid "remote clone"
-msgstr ""
-
-#: rhodecode/templates/summary/summary.html:125
+msgid "Remote clone"
+msgstr ""
+
+#: rhodecode/templates/summary/summary.html:117
 msgid "Contact"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:139
+#: rhodecode/templates/summary/summary.html:131
 msgid "Clone url"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:142
+#: rhodecode/templates/summary/summary.html:136
 msgid "Show by Name"
 msgstr ""
 
+#: rhodecode/templates/summary/summary.html:137
+msgid "Show by ID"
+msgstr ""
+
 #: rhodecode/templates/summary/summary.html:143
-msgid "Show by ID"
+msgid "Trending files"
 msgstr ""
 
 #: rhodecode/templates/summary/summary.html:151
-msgid "Trending files"
+#: rhodecode/templates/summary/summary.html:167
+#: rhodecode/templates/summary/summary.html:232
+msgid "enable"
 msgstr ""
 
 #: rhodecode/templates/summary/summary.html:159
-#: rhodecode/templates/summary/summary.html:175
-#: rhodecode/templates/summary/summary.html:203
-msgid "enable"
-msgstr ""
-
-#: rhodecode/templates/summary/summary.html:167
 msgid "Download"
 msgstr ""
 
+#: rhodecode/templates/summary/summary.html:163
+msgid "There are no downloads yet"
+msgstr ""
+
+#: rhodecode/templates/summary/summary.html:165
+msgid "Downloads are disabled for this repository"
+msgstr ""
+
 #: rhodecode/templates/summary/summary.html:171
-msgid "There are no downloads yet"
-msgstr ""
-
-#: rhodecode/templates/summary/summary.html:173
-msgid "Downloads are disabled for this repository"
-msgstr ""
-
-#: rhodecode/templates/summary/summary.html:179
 msgid "Download as zip"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:182
+#: rhodecode/templates/summary/summary.html:174
 msgid "Check this to download archive with subrepos"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:182
+#: rhodecode/templates/summary/summary.html:174
 msgid "with subrepos"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:195
+#: rhodecode/templates/summary/summary.html:197
+msgid "Repository Size"
+msgstr ""
+
+#: rhodecode/templates/summary/summary.html:204
+#: rhodecode/templates/summary/summary.html:206
+msgid "Feed"
+msgstr ""
+
+#: rhodecode/templates/summary/summary.html:224
 msgid "Commit activity by day / author"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:206
+#: rhodecode/templates/summary/summary.html:235
 msgid "Stats gathered: "
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:227
-msgid "Shortlog"
-msgstr ""
-
-#: rhodecode/templates/summary/summary.html:229
+#: rhodecode/templates/summary/summary.html:256
+msgid "Latest changes"
+msgstr ""
+
+#: rhodecode/templates/summary/summary.html:258
 msgid "Quick start"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:243
+#: rhodecode/templates/summary/summary.html:272
 #, python-format
 msgid "Readme file at revision '%s'"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:246
+#: rhodecode/templates/summary/summary.html:275
 msgid "Permalink to this readme"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:304
+#: rhodecode/templates/summary/summary.html:333
 #, python-format
 msgid "Download %s as %s"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:661
+#: rhodecode/templates/summary/summary.html:380
+msgid "files"
+msgstr ""
+
+#: rhodecode/templates/summary/summary.html:690
 msgid "commits"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:662
+#: rhodecode/templates/summary/summary.html:691
 msgid "files added"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:663
+#: rhodecode/templates/summary/summary.html:692
 msgid "files changed"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:664
+#: rhodecode/templates/summary/summary.html:693
 msgid "files removed"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:667
+#: rhodecode/templates/summary/summary.html:695
 msgid "commit"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:668
+#: rhodecode/templates/summary/summary.html:696
 msgid "file added"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:669
+#: rhodecode/templates/summary/summary.html:697
 msgid "file changed"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:670
+#: rhodecode/templates/summary/summary.html:698
 msgid "file removed"
 msgstr ""
 
@@ -4190,23 +4353,7 @@
 msgid "%s Tags"
 msgstr ""
 
-#: rhodecode/templates/tags/tags.html:29
+#: rhodecode/templates/tags/tags.html:26
 msgid "Compare tags"
 msgstr ""
 
-#~ msgid ""
-#~ "%s repository is not mapped to db"
-#~ " perhaps it was created or renamed"
-#~ " from the file system please run "
-#~ "the application again in order to "
-#~ "rescan repositories"
-#~ msgstr ""
-
-#~ msgid ""
-#~ "%s repository is not mapped to db"
-#~ " perhaps it was moved or renamed  "
-#~ "from the filesystem please run the "
-#~ "application again in order to rescan "
-#~ "repositories"
-#~ msgstr ""
-
Binary file rhodecode/i18n/fr/LC_MESSAGES/rhodecode.mo has changed
--- a/rhodecode/i18n/fr/LC_MESSAGES/rhodecode.po	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/i18n/fr/LC_MESSAGES/rhodecode.po	Sun Apr 07 18:37:22 2013 +0200
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: RhodeCode 1.1.5\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2012-12-14 04:19+0100\n"
+"POT-Creation-Date: 2013-04-05 10:19-0700\n"
 "PO-Revision-Date: 2012-10-02 11:32+0100\n"
 "Last-Translator: Vincent Duvert <vincent@duvert.net>\n"
 "Language-Team: fr <LL@li.org>\n"
@@ -22,11 +22,13 @@
 msgstr "Toutes les branches"
 
 #: rhodecode/controllers/changeset.py:83
-msgid "show white space"
+#, fuzzy
+msgid "Show white space"
 msgstr "Afficher les espaces et tabulations"
 
 #: rhodecode/controllers/changeset.py:90 rhodecode/controllers/changeset.py:97
-msgid "ignore white space"
+#, fuzzy
+msgid "Ignore white space"
 msgstr "Ignorer les espaces et tabulations"
 
 #: rhodecode/controllers/changeset.py:163
@@ -34,22 +36,23 @@
 msgid "%s line context"
 msgstr "Afficher %s lignes de contexte"
 
-#: rhodecode/controllers/changeset.py:314
-#: rhodecode/controllers/pullrequests.py:417
+#: rhodecode/controllers/changeset.py:329
+#: rhodecode/controllers/pullrequests.py:438
 #, python-format
 msgid "Status change -> %s"
 msgstr "Changement de statut -> %s"
 
-#: rhodecode/controllers/changeset.py:345
+#: rhodecode/controllers/changeset.py:360
+#, fuzzy
 msgid ""
-"Changing status on a changeset associated witha closed pull request is "
+"Changing status on a changeset associated with a closed pull request is "
 "not allowed"
 msgstr ""
 "Le changement de statut d’un changeset associé à une pull request fermée "
 "n’est pas autorisé."
 
-#: rhodecode/controllers/compare.py:75
-#: rhodecode/controllers/pullrequests.py:121
+#: rhodecode/controllers/compare.py:74
+#: rhodecode/controllers/pullrequests.py:167
 #: rhodecode/controllers/shortlog.py:100
 msgid "There are no changesets yet"
 msgstr "Il n’y a aucun changement pour le moment"
@@ -95,126 +98,141 @@
 msgstr "Flux %s de %s"
 
 #: rhodecode/controllers/feed.py:86
-#: rhodecode/templates/changeset/changeset.html:137
-#: rhodecode/templates/changeset/changeset.html:149
-#: rhodecode/templates/compare/compare_diff.html:62
-#: rhodecode/templates/compare/compare_diff.html:73
-#: rhodecode/templates/pullrequests/pullrequest_show.html:94
-#: rhodecode/templates/pullrequests/pullrequest_show.html:153
+#: rhodecode/templates/changeset/changeset.html:134
+#: rhodecode/templates/changeset/changeset.html:146
+#: rhodecode/templates/compare/compare_diff.html:58
+#: rhodecode/templates/compare/compare_diff.html:69
+#: rhodecode/templates/pullrequests/pullrequest_show.html:131
+#: rhodecode/templates/pullrequests/pullrequest_show.html:195
 msgid "Changeset was too big and was cut off..."
 msgstr "Cet ensemble de changements était trop important et a été découpé…"
 
-#: rhodecode/controllers/feed.py:92
-msgid "commited on"
-msgstr "a commité, le"
-
-#: rhodecode/controllers/files.py:86
-msgid "click here to add new file"
+#: rhodecode/controllers/feed.py:91
+#, fuzzy, python-format
+msgid "%s committed on %s"
+msgstr "%s a commité, le %s"
+
+#: rhodecode/controllers/files.py:88
+#, fuzzy
+msgid "Click here to add new file"
 msgstr "Ajouter un nouveau fichier"
 
-#: rhodecode/controllers/files.py:87
+#: rhodecode/controllers/files.py:89
 #, python-format
 msgid "There are no files yet %s"
 msgstr "Il n’y a pas encore de fichiers %s"
 
-#: rhodecode/controllers/files.py:265 rhodecode/controllers/files.py:325
+#: rhodecode/controllers/files.py:267 rhodecode/controllers/files.py:335
 #, python-format
 msgid "This repository is has been locked by %s on %s"
 msgstr "Ce dépôt a été verrouillé par %s sur %s."
 
-#: rhodecode/controllers/files.py:292
-#, python-format
-msgid "Edited %s via RhodeCode"
+#: rhodecode/controllers/files.py:279
+msgid "You can only edit files with revision being a valid branch "
+msgstr ""
+
+#: rhodecode/controllers/files.py:293
+#, fuzzy, python-format
+msgid "Edited file %s via RhodeCode"
 msgstr "%s édité via RhodeCode"
 
-#: rhodecode/controllers/files.py:297
+#: rhodecode/controllers/files.py:309
 msgid "No changes"
 msgstr "Aucun changement"
 
-#: rhodecode/controllers/files.py:308 rhodecode/controllers/files.py:372
+#: rhodecode/controllers/files.py:318 rhodecode/controllers/files.py:388
 #, python-format
 msgid "Successfully committed to %s"
 msgstr "Commit réalisé avec succès sur %s"
 
-#: rhodecode/controllers/files.py:313 rhodecode/controllers/files.py:378
+#: rhodecode/controllers/files.py:323 rhodecode/controllers/files.py:394
 msgid "Error occurred during commit"
 msgstr "Une erreur est survenue durant le commit"
 
-#: rhodecode/controllers/files.py:344
-#, python-format
-msgid "Added %s via RhodeCode"
+#: rhodecode/controllers/files.py:347
+#, fuzzy
+msgid "Added file via RhodeCode"
 msgstr "%s ajouté par RhodeCode"
 
-#: rhodecode/controllers/files.py:358
+#: rhodecode/controllers/files.py:364
 msgid "No content"
 msgstr "Aucun contenu"
 
-#: rhodecode/controllers/files.py:362
+#: rhodecode/controllers/files.py:368
 msgid "No filename"
 msgstr "Aucun nom de fichier"
 
-#: rhodecode/controllers/files.py:404
-msgid "downloads disabled"
+#: rhodecode/controllers/files.py:372
+msgid "Location must be relative path and must not contain .. in path"
+msgstr ""
+
+#: rhodecode/controllers/files.py:420
+#, fuzzy
+msgid "Downloads disabled"
 msgstr "Les téléchargements sont désactivés"
 
-#: rhodecode/controllers/files.py:415
+#: rhodecode/controllers/files.py:431
 #, python-format
 msgid "Unknown revision %s"
 msgstr "Révision %s inconnue."
 
-#: rhodecode/controllers/files.py:417
+#: rhodecode/controllers/files.py:433
 msgid "Empty repository"
 msgstr "Dépôt vide."
 
-#: rhodecode/controllers/files.py:419
+#: rhodecode/controllers/files.py:435
 msgid "Unknown archive type"
 msgstr "Type d’archive inconnu"
 
-#: rhodecode/controllers/files.py:564
-#: rhodecode/templates/changeset/changeset_range.html:13
-#: rhodecode/templates/changeset/changeset_range.html:31
+#: rhodecode/controllers/files.py:617
+#: rhodecode/templates/changeset/changeset_range.html:9
 msgid "Changesets"
 msgstr "Changesets"
 
-#: rhodecode/controllers/files.py:565 rhodecode/controllers/pullrequests.py:74
-#: rhodecode/controllers/summary.py:236 rhodecode/model/scm.py:550
+#: rhodecode/controllers/files.py:618 rhodecode/controllers/pullrequests.py:131
+#: rhodecode/controllers/summary.py:247 rhodecode/model/scm.py:606
+#: rhodecode/templates/switch_to_list.html:3
+#: rhodecode/templates/branches/branches.html:10
 msgid "Branches"
 msgstr "Branches"
 
-#: rhodecode/controllers/files.py:566 rhodecode/controllers/pullrequests.py:78
-#: rhodecode/controllers/summary.py:237 rhodecode/model/scm.py:561
+#: rhodecode/controllers/files.py:619 rhodecode/controllers/pullrequests.py:132
+#: rhodecode/controllers/summary.py:248 rhodecode/model/scm.py:617
+#: rhodecode/templates/switch_to_list.html:15
+#: rhodecode/templates/shortlog/shortlog_data.html:10
+#: rhodecode/templates/tags/tags.html:10
 msgid "Tags"
 msgstr "Tags"
 
-#: rhodecode/controllers/forks.py:158
-#, python-format
-msgid "forked %s repository as %s"
+#: rhodecode/controllers/forks.py:175
+#, fuzzy, python-format
+msgid "Forked repository %s as %s"
 msgstr "dépôt %s forké en tant que %s"
 
-#: rhodecode/controllers/forks.py:172
+#: rhodecode/controllers/forks.py:189
 #, python-format
 msgid "An error occurred during repository forking %s"
 msgstr "Une erreur est survenue durant le fork du dépôt %s."
 
-#: rhodecode/controllers/journal.py:218 rhodecode/controllers/journal.py:261
+#: rhodecode/controllers/journal.py:275 rhodecode/controllers/journal.py:318
 msgid "public journal"
 msgstr "Journal public"
 
-#: rhodecode/controllers/journal.py:222 rhodecode/controllers/journal.py:265
-#: rhodecode/templates/base/base.html:232
+#: rhodecode/controllers/journal.py:279 rhodecode/controllers/journal.py:322
 #: rhodecode/templates/journal/journal.html:12
 msgid "journal"
 msgstr "Journal"
 
-#: rhodecode/controllers/login.py:143
-msgid "You have successfully registered into rhodecode"
+#: rhodecode/controllers/login.py:138
+#, fuzzy
+msgid "You have successfully registered into RhodeCode"
 msgstr "Vous vous êtes inscrits avec succès à RhodeCode"
 
-#: rhodecode/controllers/login.py:164
+#: rhodecode/controllers/login.py:159
 msgid "Your password reset link was sent"
 msgstr "Un lien de rénitialisation de votre mot de passe vous a été envoyé."
 
-#: rhodecode/controllers/login.py:184
+#: rhodecode/controllers/login.py:179
 msgid ""
 "Your password reset was successful, new password has been sent to your "
 "email"
@@ -222,31 +240,53 @@
 "Votre mot de passe a été réinitialisé. Votre nouveau mot de passe vous a "
 "été envoyé par e-mail."
 
-#: rhodecode/controllers/pullrequests.py:76 rhodecode/model/scm.py:556
+#: rhodecode/controllers/pullrequests.py:118
+#: rhodecode/templates/changeset/changeset.html:10
+#: rhodecode/templates/email_templates/changeset_comment.html:15
+msgid "Changeset"
+msgstr "Changements"
+
+#: rhodecode/controllers/pullrequests.py:128
+msgid "Special"
+msgstr ""
+
+#: rhodecode/controllers/pullrequests.py:129
+#, fuzzy
+msgid "Peer branches"
+msgstr "Branches"
+
+#: rhodecode/controllers/pullrequests.py:130 rhodecode/model/scm.py:612
+#: rhodecode/templates/switch_to_list.html:28
+#: rhodecode/templates/bookmarks/bookmarks.html:10
 msgid "Bookmarks"
 msgstr "Signets"
 
-#: rhodecode/controllers/pullrequests.py:190
+#: rhodecode/controllers/pullrequests.py:228
 msgid "Pull request requires a title with min. 3 chars"
 msgstr "Les requêtes de pull nécessitent un titre d’au moins 3 caractères."
 
-#: rhodecode/controllers/pullrequests.py:192
-msgid "error during creation of pull request"
+#: rhodecode/controllers/pullrequests.py:230
+#, fuzzy
+msgid "Error creating pull request"
 msgstr "Une erreur est survenue lors de la création de la requête de pull."
 
-#: rhodecode/controllers/pullrequests.py:224
+#: rhodecode/controllers/pullrequests.py:251
 msgid "Successfully opened new pull request"
 msgstr "La requête de pull a été ouverte avec succès."
 
-#: rhodecode/controllers/pullrequests.py:227
+#: rhodecode/controllers/pullrequests.py:254
 msgid "Error occurred during sending pull request"
 msgstr "Une erreur est survenue durant l’envoi de la requête de pull."
 
-#: rhodecode/controllers/pullrequests.py:260
+#: rhodecode/controllers/pullrequests.py:287
 msgid "Successfully deleted pull request"
 msgstr "La requête de pull a été supprimée avec succès."
 
-#: rhodecode/controllers/pullrequests.py:452
+#: rhodecode/controllers/pullrequests.py:441
+msgid "Closing with"
+msgstr ""
+
+#: rhodecode/controllers/pullrequests.py:478
 msgid "Closing pull request on other statuses than rejected or approved forbidden"
 msgstr ""
 
@@ -264,55 +304,12 @@
 msgid "An error occurred during this search operation"
 msgstr "Une erreur est survenue durant l’opération de recherche."
 
-#: rhodecode/controllers/settings.py:119
-#: rhodecode/controllers/admin/repos.py:272
-#, python-format
-msgid "Repository %s updated successfully"
-msgstr "Dépôt %s mis à jour avec succès."
-
-#: rhodecode/controllers/settings.py:137
-#: rhodecode/controllers/admin/repos.py:290
-#, python-format
-msgid "error occurred during update of repository %s"
-msgstr "Une erreur est survenue lors de la mise à jour du dépôt %s."
-
-#: rhodecode/controllers/settings.py:162
-#: rhodecode/controllers/admin/repos.py:315
-#, python-format
-msgid "deleted repository %s"
-msgstr "Dépôt %s supprimé"
-
-#: rhodecode/controllers/settings.py:166
-#: rhodecode/controllers/admin/repos.py:325
-#: rhodecode/controllers/admin/repos.py:331
-#, python-format
-msgid "An error occurred during deletion of %s"
-msgstr "Erreur pendant la suppression de %s"
-
-#: rhodecode/controllers/settings.py:185
-msgid "unlocked"
-msgstr "déverrouillé"
-
-#: rhodecode/controllers/settings.py:188
-msgid "locked"
-msgstr "verrouillé"
-
-#: rhodecode/controllers/settings.py:190
-#, python-format
-msgid "Repository has been %s"
-msgstr "Le dépôt a été %s."
-
-#: rhodecode/controllers/settings.py:194
-#: rhodecode/controllers/admin/repos.py:423
-msgid "An error occurred during unlocking"
-msgstr "Une erreur est survenue durant le déverrouillage."
-
-#: rhodecode/controllers/summary.py:140
+#: rhodecode/controllers/summary.py:141
 msgid "No data loaded yet"
 msgstr "Aucune donnée actuellement disponible."
 
-#: rhodecode/controllers/summary.py:144
-#: rhodecode/templates/summary/summary.html:157
+#: rhodecode/controllers/summary.py:147
+#: rhodecode/templates/summary/summary.html:149
 msgid "Statistics are disabled for this repository"
 msgstr "La mise à jour des statistiques est désactivée pour ce dépôt."
 
@@ -323,7 +320,7 @@
 
 #: rhodecode/controllers/admin/defaults.py:110
 #, fuzzy
-msgid "error occurred during update of defaults"
+msgid "Error occurred during update of defaults"
 msgstr "Une erreur est survenue durant la mise à jour de l’utilisateur %s."
 
 #: rhodecode/controllers/admin/ldap_settings.py:50
@@ -371,7 +368,7 @@
 msgstr "START_TLS à la connexion"
 
 #: rhodecode/controllers/admin/ldap_settings.py:126
-msgid "Ldap settings updated successfully"
+msgid "LDAP settings updated successfully"
 msgstr "Mise à jour réussie des réglages LDAP"
 
 #: rhodecode/controllers/admin/ldap_settings.py:130
@@ -379,549 +376,658 @@
 msgstr "Impossible d’activer LDAP. La bibliothèque « python-ldap » est manquante."
 
 #: rhodecode/controllers/admin/ldap_settings.py:147
-msgid "error occurred during update of ldap settings"
+#, fuzzy
+msgid "Error occurred during update of ldap settings"
 msgstr "Une erreur est survenue durant la mise à jour des réglages du LDAP."
 
-#: rhodecode/controllers/admin/permissions.py:59
-#: rhodecode/controllers/admin/permissions.py:63
-msgid "None"
-msgstr "Aucun"
-
 #: rhodecode/controllers/admin/permissions.py:60
 #: rhodecode/controllers/admin/permissions.py:64
-msgid "Read"
-msgstr "Lire"
+msgid "None"
+msgstr "Aucun"
 
 #: rhodecode/controllers/admin/permissions.py:61
 #: rhodecode/controllers/admin/permissions.py:65
-msgid "Write"
-msgstr "Écrire"
+msgid "Read"
+msgstr "Lire"
 
 #: rhodecode/controllers/admin/permissions.py:62
 #: rhodecode/controllers/admin/permissions.py:66
+msgid "Write"
+msgstr "Écrire"
+
+#: rhodecode/controllers/admin/permissions.py:63
+#: rhodecode/controllers/admin/permissions.py:67
 #: rhodecode/templates/admin/defaults/defaults.html:9
 #: rhodecode/templates/admin/ldap/ldap.html:9
 #: rhodecode/templates/admin/permissions/permissions.html:9
-#: rhodecode/templates/admin/repos/repo_add.html:9
-#: rhodecode/templates/admin/repos/repo_edit.html:9
+#: rhodecode/templates/admin/repos/repo_add.html:10
+#: rhodecode/templates/admin/repos/repo_add.html:14
 #: rhodecode/templates/admin/repos/repos.html:9
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:8
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:8
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:10
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:9
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:9
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:11
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:13
 #: rhodecode/templates/admin/settings/hooks.html:9
 #: rhodecode/templates/admin/settings/settings.html:9
 #: rhodecode/templates/admin/users/user_add.html:8
 #: rhodecode/templates/admin/users/user_edit.html:9
-#: rhodecode/templates/admin/users/user_edit.html:126
+#: rhodecode/templates/admin/users/user_edit.html:133
 #: rhodecode/templates/admin/users/users.html:9
+#: rhodecode/templates/admin/users/users.html:85
 #: rhodecode/templates/admin/users_groups/users_group_add.html:8
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:9
 #: rhodecode/templates/admin/users_groups/users_groups.html:9
-#: rhodecode/templates/base/base.html:197
-#: rhodecode/templates/base/base.html:350
-#: rhodecode/templates/base/base.html:352
-#: rhodecode/templates/base/base.html:354
+#: rhodecode/templates/base/base.html:292
+#: rhodecode/templates/base/base.html:293
+#: rhodecode/templates/base/base.html:299
+#: rhodecode/templates/base/base.html:300
 msgid "Admin"
 msgstr "Administration"
 
-#: rhodecode/controllers/admin/permissions.py:69
-msgid "disabled"
-msgstr "Désactivé"
-
-#: rhodecode/controllers/admin/permissions.py:71
-msgid "allowed with manual account activation"
-msgstr "Autorisé avec activation manuelle du compte"
-
-#: rhodecode/controllers/admin/permissions.py:73
-msgid "allowed with automatic account activation"
-msgstr "Autorisé avec activation automatique du compte"
-
-#: rhodecode/controllers/admin/permissions.py:75
-#: rhodecode/controllers/admin/permissions.py:78
+#: rhodecode/controllers/admin/permissions.py:70
+#: rhodecode/controllers/admin/permissions.py:76
+#: rhodecode/controllers/admin/permissions.py:79
 msgid "Disabled"
 msgstr "Interdite"
 
-#: rhodecode/controllers/admin/permissions.py:76
-#: rhodecode/controllers/admin/permissions.py:79
+#: rhodecode/controllers/admin/permissions.py:72
+#, fuzzy
+msgid "Allowed with manual account activation"
+msgstr "Autorisé avec activation manuelle du compte"
+
+#: rhodecode/controllers/admin/permissions.py:74
+#, fuzzy
+msgid "Allowed with automatic account activation"
+msgstr "Autorisé avec activation automatique du compte"
+
+#: rhodecode/controllers/admin/permissions.py:77
+#: rhodecode/controllers/admin/permissions.py:80
 msgid "Enabled"
 msgstr "Autorisée"
 
-#: rhodecode/controllers/admin/permissions.py:122
+#: rhodecode/controllers/admin/permissions.py:128
 msgid "Default permissions updated successfully"
 msgstr "Permissions par défaut mises à jour avec succès"
 
-#: rhodecode/controllers/admin/permissions.py:136
-msgid "error occurred during update of permissions"
+#: rhodecode/controllers/admin/permissions.py:142
+#, fuzzy
+msgid "Error occurred during update of permissions"
 msgstr "erreur pendant la mise à jour des permissions"
 
-#: rhodecode/controllers/admin/repos.py:121
+#: rhodecode/controllers/admin/repos.py:127
 msgid "--REMOVE FORK--"
 msgstr "[Pas un fork]"
 
-#: rhodecode/controllers/admin/repos.py:190
-#, python-format
-msgid "created repository %s from %s"
+#: rhodecode/controllers/admin/repos.py:168
+#, fuzzy, python-format
+msgid "Created repository %s from %s"
 msgstr "Le dépôt %s a été créé depuis %s."
 
-#: rhodecode/controllers/admin/repos.py:194
+#: rhodecode/controllers/admin/repos.py:174
+#, fuzzy, python-format
+msgid "Created repository %s"
+msgstr "Le dépôt %s a été créé."
+
+#: rhodecode/controllers/admin/repos.py:197
+#, fuzzy, python-format
+msgid "Error creating repository %s"
+msgstr "Le dépôt %s a été créé."
+
+#: rhodecode/controllers/admin/repos.py:266
 #, python-format
-msgid "created repository %s"
-msgstr "Le dépôt %s a été créé."
-
-#: rhodecode/controllers/admin/repos.py:225
+msgid "Repository %s updated successfully"
+msgstr "Dépôt %s mis à jour avec succès."
+
+#: rhodecode/controllers/admin/repos.py:284
+#, fuzzy, python-format
+msgid "Error occurred during update of repository %s"
+msgstr "Une erreur est survenue lors de la mise à jour du dépôt %s."
+
+#: rhodecode/controllers/admin/repos.py:311
+#: rhodecode/controllers/api/api.py:877
 #, python-format
-msgid "error occurred during creation of repository %s"
-msgstr "Une erreur est survenue durant la création du dépôt %s."
-
-#: rhodecode/controllers/admin/repos.py:320
+msgid "Detached %s forks"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:314
+#: rhodecode/controllers/api/api.py:879
+#, fuzzy, python-format
+msgid "Deleted %s forks"
+msgstr "Dépôt %s supprimé"
+
+#: rhodecode/controllers/admin/repos.py:319
+#, fuzzy, python-format
+msgid "Deleted repository %s"
+msgstr "Dépôt %s supprimé"
+
+#: rhodecode/controllers/admin/repos.py:322
 #, python-format
 msgid "Cannot delete %s it still contains attached forks"
 msgstr "Impossible de supprimer le dépôt %s : Des forks y sont attachés."
 
-#: rhodecode/controllers/admin/repos.py:349
+#: rhodecode/controllers/admin/repos.py:327
+#, python-format
+msgid "An error occurred during deletion of %s"
+msgstr "Erreur pendant la suppression de %s"
+
+#: rhodecode/controllers/admin/repos.py:365
+#, fuzzy
+msgid "Repository permissions updated"
+msgstr "Création de dépôt désactivée"
+
+#: rhodecode/controllers/admin/repos.py:384
 msgid "An error occurred during deletion of repository user"
 msgstr "Une erreur est survenue durant la suppression de l’utilisateur du dépôt."
 
-#: rhodecode/controllers/admin/repos.py:368
-msgid "An error occurred during deletion of repository users groups"
+#: rhodecode/controllers/admin/repos.py:403
+#, fuzzy
+msgid "An error occurred during deletion of repository user groups"
 msgstr ""
 "Une erreur est survenue durant la suppression du groupe d’utilisateurs de"
 " ce dépôt."
 
-#: rhodecode/controllers/admin/repos.py:386
+#: rhodecode/controllers/admin/repos.py:421
 msgid "An error occurred during deletion of repository stats"
 msgstr "Une erreur est survenue durant la suppression des statistiques du dépôt."
 
-#: rhodecode/controllers/admin/repos.py:403
+#: rhodecode/controllers/admin/repos.py:438
 msgid "An error occurred during cache invalidation"
 msgstr "Une erreur est survenue durant l’invalidation du cache."
 
-#: rhodecode/controllers/admin/repos.py:443
+#: rhodecode/controllers/admin/repos.py:458
+#: rhodecode/controllers/admin/repos.py:485
+msgid "An error occurred during unlocking"
+msgstr "Une erreur est survenue durant le déverrouillage."
+
+#: rhodecode/controllers/admin/repos.py:476
+#, fuzzy
+msgid "Unlocked"
+msgstr "déverrouillé"
+
+#: rhodecode/controllers/admin/repos.py:479
+#, fuzzy
+msgid "Locked"
+msgstr "verrouillé"
+
+#: rhodecode/controllers/admin/repos.py:481
+#, python-format
+msgid "Repository has been %s"
+msgstr "Le dépôt a été %s."
+
+#: rhodecode/controllers/admin/repos.py:505
 msgid "Updated repository visibility in public journal"
 msgstr "La visibilité du dépôt dans le journal public a été mise à jour."
 
-#: rhodecode/controllers/admin/repos.py:447
+#: rhodecode/controllers/admin/repos.py:509
 msgid "An error occurred during setting this repository in public journal"
 msgstr ""
 "Une erreur est survenue durant la configuration du journal public pour ce"
 " dépôt."
 
-#: rhodecode/controllers/admin/repos.py:452 rhodecode/model/validators.py:300
+#: rhodecode/controllers/admin/repos.py:514 rhodecode/model/validators.py:302
 msgid "Token mismatch"
 msgstr "Jeton d’authentification incorrect."
 
-#: rhodecode/controllers/admin/repos.py:465
+#: rhodecode/controllers/admin/repos.py:527
 msgid "Pulled from remote location"
 msgstr "Les changements distants ont été récupérés."
 
-#: rhodecode/controllers/admin/repos.py:467
+#: rhodecode/controllers/admin/repos.py:529
 msgid "An error occurred during pull from remote location"
 msgstr "Une erreur est survenue durant le pull depuis la source distante."
 
-#: rhodecode/controllers/admin/repos.py:483
+#: rhodecode/controllers/admin/repos.py:545
 msgid "Nothing"
 msgstr "[Aucun dépôt]"
 
-#: rhodecode/controllers/admin/repos.py:485
+#: rhodecode/controllers/admin/repos.py:547
 #, python-format
 msgid "Marked repo %s as fork of %s"
 msgstr "Le dépôt %s a été marké comme fork de %s"
 
-#: rhodecode/controllers/admin/repos.py:489
+#: rhodecode/controllers/admin/repos.py:551
 msgid "An error occurred during this operation"
 msgstr "Une erreur est survenue durant cette opération."
 
-#: rhodecode/controllers/admin/repos_groups.py:120
-#, python-format
-msgid "created repos group %s"
+#: rhodecode/controllers/admin/repos.py:590
+#, fuzzy
+msgid "An error occurred during creation of field"
+msgstr "Une erreur est survenue durant la création de l’utilisateur %s."
+
+#: rhodecode/controllers/admin/repos.py:604
+#, fuzzy
+msgid "An error occurred during removal of field"
+msgstr "Une erreur est survenue durant l’enregistrement de l’e-mail."
+
+#: rhodecode/controllers/admin/repos_groups.py:145
+#, fuzzy, python-format
+msgid "Created repository group %s"
 msgstr "Le groupe de dépôts %s a été créé."
 
-#: rhodecode/controllers/admin/repos_groups.py:133
-#, python-format
-msgid "error occurred during creation of repos group %s"
+#: rhodecode/controllers/admin/repos_groups.py:157
+#, fuzzy, python-format
+msgid "Error occurred during creation of repository group %s"
 msgstr "Une erreur est survenue durant la création du groupe de dépôts %s."
 
-#: rhodecode/controllers/admin/repos_groups.py:167
-#, python-format
-msgid "updated repos group %s"
+#: rhodecode/controllers/admin/repos_groups.py:214
+#: rhodecode/controllers/admin/repos_groups.py:286
+msgid "Cannot revoke permission for yourself as admin"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos_groups.py:220
+#, fuzzy, python-format
+msgid "Updated repository group %s"
 msgstr "Le groupe de dépôts %s a été mis à jour."
 
-#: rhodecode/controllers/admin/repos_groups.py:180
-#, python-format
-msgid "error occurred during update of repos group %s"
+#: rhodecode/controllers/admin/repos_groups.py:235
+#, fuzzy, python-format
+msgid "Error occurred during update of repository group %s"
 msgstr "Une erreur est survenue durant la mise à jour du groupe de dépôts %s."
 
-#: rhodecode/controllers/admin/repos_groups.py:198
+#: rhodecode/controllers/admin/repos_groups.py:253
 #, python-format
 msgid "This group contains %s repositores and cannot be deleted"
 msgstr "Ce groupe contient %s dépôts et ne peut être supprimé."
 
-#: rhodecode/controllers/admin/repos_groups.py:206
-#, python-format
-msgid "removed repos group %s"
+#: rhodecode/controllers/admin/repos_groups.py:260
+#, fuzzy, python-format
+msgid "This group contains %s subgroups and cannot be deleted"
+msgstr "Ce groupe contient %s dépôts et ne peut être supprimé."
+
+#: rhodecode/controllers/admin/repos_groups.py:266
+#, fuzzy, python-format
+msgid "Removed repository group %s"
 msgstr "Le groupe de dépôts %s a été supprimé."
 
-#: rhodecode/controllers/admin/repos_groups.py:212
-msgid "Cannot delete this group it still contains subgroups"
-msgstr "Impossible de supprimer ce groupe : Il contient des sous-groupes."
-
-#: rhodecode/controllers/admin/repos_groups.py:217
-#: rhodecode/controllers/admin/repos_groups.py:222
-#, python-format
-msgid "error occurred during deletion of repos group %s"
+#: rhodecode/controllers/admin/repos_groups.py:271
+#, fuzzy, python-format
+msgid "Error occurred during deletion of repos group %s"
 msgstr "Une erreur est survenue durant la suppression du groupe de dépôts %s."
 
-#: rhodecode/controllers/admin/repos_groups.py:243
+#: rhodecode/controllers/admin/repos_groups.py:297
 msgid "An error occurred during deletion of group user"
 msgstr ""
 "Une erreur est survenue durant la suppression de l’utilisateur du groupe "
 "de dépôts."
 
-#: rhodecode/controllers/admin/repos_groups.py:264
-msgid "An error occurred during deletion of group users groups"
+#: rhodecode/controllers/admin/repos_groups.py:318
+#, fuzzy
+msgid "An error occurred during deletion of group user groups"
 msgstr ""
 "Une erreur est survenue durant la suppression du groupe d’utilisateurs du"
 " groupe de dépôts."
 
-#: rhodecode/controllers/admin/settings.py:123
-#, python-format
-msgid "Repositories successfully rescanned added: %s,removed: %s"
+#: rhodecode/controllers/admin/settings.py:126
+#, fuzzy, python-format
+msgid "Repositories successfully rescanned added: %s ; removed: %s"
 msgstr "Après re-scan : %s ajouté(s), %s enlevé(s)"
 
-#: rhodecode/controllers/admin/settings.py:131
+#: rhodecode/controllers/admin/settings.py:135
 msgid "Whoosh reindex task scheduled"
 msgstr "La tâche de réindexation Whoosh a été planifiée."
 
-#: rhodecode/controllers/admin/settings.py:162
+#: rhodecode/controllers/admin/settings.py:166
 msgid "Updated application settings"
 msgstr "Réglages mis à jour"
 
-#: rhodecode/controllers/admin/settings.py:166
-#: rhodecode/controllers/admin/settings.py:299
-msgid "error occurred during updating application settings"
+#: rhodecode/controllers/admin/settings.py:170
+#: rhodecode/controllers/admin/settings.py:301
+#, fuzzy
+msgid "Error occurred during updating application settings"
 msgstr "Une erreur est survenue durant la mise à jour des options."
 
-#: rhodecode/controllers/admin/settings.py:207
+#: rhodecode/controllers/admin/settings.py:216
 msgid "Updated visualisation settings"
 msgstr "Réglages d’affichage mis à jour."
 
-#: rhodecode/controllers/admin/settings.py:212
-msgid "error occurred during updating visualisation settings"
+#: rhodecode/controllers/admin/settings.py:221
+#, fuzzy
+msgid "Error occurred during updating visualisation settings"
 msgstr "Une erreur est survenue durant la mise à jour des réglages d’affichages."
 
-#: rhodecode/controllers/admin/settings.py:295
+#: rhodecode/controllers/admin/settings.py:297
 msgid "Updated VCS settings"
 msgstr "Réglages des gestionnaires de versions mis à jour."
 
-#: rhodecode/controllers/admin/settings.py:309
+#: rhodecode/controllers/admin/settings.py:311
 msgid "Added new hook"
 msgstr "Le nouveau hook a été ajouté."
 
-#: rhodecode/controllers/admin/settings.py:321
+#: rhodecode/controllers/admin/settings.py:323
 msgid "Updated hooks"
 msgstr "Hooks mis à jour"
 
-#: rhodecode/controllers/admin/settings.py:325
-msgid "error occurred during hook creation"
+#: rhodecode/controllers/admin/settings.py:327
+#, fuzzy
+msgid "Error occurred during hook creation"
 msgstr "Une erreur est survenue durant la création du hook."
 
-#: rhodecode/controllers/admin/settings.py:344
+#: rhodecode/controllers/admin/settings.py:346
 msgid "Email task created"
 msgstr "La tâche d’e-mail a été créée."
 
-#: rhodecode/controllers/admin/settings.py:399
+#: rhodecode/controllers/admin/settings.py:410
 msgid "You can't edit this user since it's crucial for entire application"
 msgstr ""
 "Vous ne pouvez pas éditer cet utilisateur ; il est nécessaire pour le bon"
 " fonctionnement de l’application."
 
-#: rhodecode/controllers/admin/settings.py:430
+#: rhodecode/controllers/admin/settings.py:452
 msgid "Your account was updated successfully"
 msgstr "Votre compte a été mis à jour avec succès"
 
-#: rhodecode/controllers/admin/settings.py:445
-#: rhodecode/controllers/admin/users.py:196
-#, python-format
-msgid "error occurred during update of user %s"
+#: rhodecode/controllers/admin/settings.py:467
+#: rhodecode/controllers/admin/users.py:198
+#, fuzzy, python-format
+msgid "Error occurred during update of user %s"
 msgstr "Une erreur est survenue durant la mise à jour de l’utilisateur %s."
 
 #: rhodecode/controllers/admin/users.py:130
-#, python-format
-msgid "created user %s"
+#, fuzzy, python-format
+msgid "Created user %s"
 msgstr "utilisateur %s créé"
 
 #: rhodecode/controllers/admin/users.py:142
-#, python-format
-msgid "error occurred during creation of user %s"
+#, fuzzy, python-format
+msgid "Error occurred during creation of user %s"
 msgstr "Une erreur est survenue durant la création de l’utilisateur %s."
 
 #: rhodecode/controllers/admin/users.py:176
 msgid "User updated successfully"
 msgstr "L’utilisateur a été mis à jour avec succès."
 
-#: rhodecode/controllers/admin/users.py:212
-msgid "successfully deleted user"
+#: rhodecode/controllers/admin/users.py:214
+#, fuzzy
+msgid "Successfully deleted user"
 msgstr "L’utilisateur a été supprimé avec succès."
 
-#: rhodecode/controllers/admin/users.py:217
+#: rhodecode/controllers/admin/users.py:219
 msgid "An error occurred during deletion of user"
 msgstr "Une erreur est survenue durant la suppression de l’utilisateur."
 
-#: rhodecode/controllers/admin/users.py:231
+#: rhodecode/controllers/admin/users.py:233
 msgid "You can't edit this user"
 msgstr "Vous ne pouvez pas éditer cet utilisateur"
 
-#: rhodecode/controllers/admin/users.py:272
+#: rhodecode/controllers/admin/users.py:276
 msgid "Granted 'repository create' permission to user"
 msgstr "La permission de création de dépôts a été accordée à l’utilisateur."
 
-#: rhodecode/controllers/admin/users.py:277
+#: rhodecode/controllers/admin/users.py:281
 msgid "Revoked 'repository create' permission to user"
 msgstr "La permission de création de dépôts a été révoquée à l’utilisateur."
 
-#: rhodecode/controllers/admin/users.py:283
+#: rhodecode/controllers/admin/users.py:287
 msgid "Granted 'repository fork' permission to user"
 msgstr "La permission de fork de dépôts a été accordée à l’utilisateur."
 
-#: rhodecode/controllers/admin/users.py:288
+#: rhodecode/controllers/admin/users.py:292
 msgid "Revoked 'repository fork' permission to user"
 msgstr "La permission de fork de dépôts a été révoquée à l’utilisateur."
 
-#: rhodecode/controllers/admin/users.py:294
-#: rhodecode/controllers/admin/users_groups.py:279
+#: rhodecode/controllers/admin/users.py:298
+#: rhodecode/controllers/admin/users_groups.py:281
 msgid "An error occurred during permissions saving"
 msgstr "Une erreur est survenue durant l’enregistrement des permissions."
 
-#: rhodecode/controllers/admin/users.py:309
+#: rhodecode/controllers/admin/users.py:312
 #, python-format
 msgid "Added email %s to user"
 msgstr "L’e-mail « %s » a été ajouté à l’utilisateur."
 
-#: rhodecode/controllers/admin/users.py:315
+#: rhodecode/controllers/admin/users.py:318
 msgid "An error occurred during email saving"
 msgstr "Une erreur est survenue durant l’enregistrement de l’e-mail."
 
-#: rhodecode/controllers/admin/users.py:325
+#: rhodecode/controllers/admin/users.py:328
 msgid "Removed email from user"
 msgstr "L’e-mail a été enlevé de l’utilisateur."
 
+#: rhodecode/controllers/admin/users.py:341
+#, fuzzy, python-format
+msgid "Added ip %s to user"
+msgstr "L’e-mail « %s » a été ajouté à l’utilisateur."
+
+#: rhodecode/controllers/admin/users.py:347
+#, fuzzy
+msgid "An error occurred during ip saving"
+msgstr "Une erreur est survenue durant l’enregistrement de l’e-mail."
+
+#: rhodecode/controllers/admin/users.py:359
+#, fuzzy
+msgid "Removed ip from user"
+msgstr "L’e-mail a été enlevé de l’utilisateur."
+
 #: rhodecode/controllers/admin/users_groups.py:86
-#, python-format
-msgid "created users group %s"
+#, fuzzy, python-format
+msgid "Created user group %s"
 msgstr "Le groupe d’utilisateurs %s a été créé."
 
 #: rhodecode/controllers/admin/users_groups.py:97
-#, python-format
-msgid "error occurred during creation of users group %s"
+#, fuzzy, python-format
+msgid "Error occurred during creation of user group %s"
 msgstr "Une erreur est survenue durant la création du groupe d’utilisateurs %s."
 
-#: rhodecode/controllers/admin/users_groups.py:164
-#, python-format
-msgid "updated users group %s"
+#: rhodecode/controllers/admin/users_groups.py:166
+#, fuzzy, python-format
+msgid "Updated user group %s"
 msgstr "Le groupe d’utilisateurs %s a été mis à jour."
 
-#: rhodecode/controllers/admin/users_groups.py:186
-#, python-format
-msgid "error occurred during update of users group %s"
+#: rhodecode/controllers/admin/users_groups.py:188
+#, fuzzy, python-format
+msgid "Error occurred during update of user group %s"
 msgstr "Une erreur est survenue durant la mise à jour du groupe d’utilisateurs %s."
 
-#: rhodecode/controllers/admin/users_groups.py:203
-msgid "successfully deleted users group"
+#: rhodecode/controllers/admin/users_groups.py:205
+#, fuzzy
+msgid "Successfully deleted user group"
 msgstr "Le groupe d’utilisateurs a été supprimé avec succès."
 
-#: rhodecode/controllers/admin/users_groups.py:208
-msgid "An error occurred during deletion of users group"
+#: rhodecode/controllers/admin/users_groups.py:210
+#, fuzzy
+msgid "An error occurred during deletion of user group"
 msgstr "Une erreur est survenue lors de la suppression du groupe d’utilisateurs."
 
-#: rhodecode/controllers/admin/users_groups.py:257
-msgid "Granted 'repository create' permission to users group"
+#: rhodecode/controllers/admin/users_groups.py:259
+#, fuzzy
+msgid "Granted 'repository create' permission to user group"
 msgstr ""
 "La permission de création de dépôts a été accordée au groupe "
 "d’utilisateurs."
 
-#: rhodecode/controllers/admin/users_groups.py:262
-msgid "Revoked 'repository create' permission to users group"
+#: rhodecode/controllers/admin/users_groups.py:264
+#, fuzzy
+msgid "Revoked 'repository create' permission to user group"
 msgstr ""
 "La permission de création de dépôts a été révoquée au groupe "
 "d’utilisateurs."
 
-#: rhodecode/controllers/admin/users_groups.py:268
-msgid "Granted 'repository fork' permission to users group"
+#: rhodecode/controllers/admin/users_groups.py:270
+#, fuzzy
+msgid "Granted 'repository fork' permission to user group"
 msgstr "La permission de fork de dépôts a été accordée au groupe d’utilisateur."
 
-#: rhodecode/controllers/admin/users_groups.py:273
-msgid "Revoked 'repository fork' permission to users group"
+#: rhodecode/controllers/admin/users_groups.py:275
+#, fuzzy
+msgid "Revoked 'repository fork' permission to user group"
 msgstr "La permission de fork de dépôts a été révoquée au groupe d’utilisateurs."
 
-#: rhodecode/lib/auth.py:499
+#: rhodecode/lib/auth.py:530
+#, fuzzy, python-format
+msgid "IP %s not allowed"
+msgstr "Followers de %s"
+
+#: rhodecode/lib/auth.py:579
 msgid "You need to be a registered user to perform this action"
 msgstr "Vous devez être un utilisateur enregistré pour effectuer cette action."
 
-#: rhodecode/lib/auth.py:540
+#: rhodecode/lib/auth.py:620
 msgid "You need to be a signed in to view this page"
 msgstr "Vous devez être connecté pour visualiser cette page."
 
-#: rhodecode/lib/diffs.py:74
-msgid "binary file"
+#: rhodecode/lib/diffs.py:66
+#, fuzzy
+msgid "Binary file"
 msgstr "Fichier binaire"
 
-#: rhodecode/lib/diffs.py:90
+#: rhodecode/lib/diffs.py:82
 msgid "Changeset was too big and was cut off, use diff menu to display this diff"
 msgstr ""
 "Cet ensemble de changements était trop gros pour être affiché et a été "
 "découpé, utilisez le menu « Diff » pour afficher les différences."
 
-#: rhodecode/lib/diffs.py:100
+#: rhodecode/lib/diffs.py:92
 msgid "No changes detected"
 msgstr "Aucun changement détecté."
 
-#: rhodecode/lib/helpers.py:374
+#: rhodecode/lib/helpers.py:394
 #, python-format
 msgid "%a, %d %b %Y %H:%M:%S"
 msgstr "%d/%m/%Y à %H:%M:%S"
 
-#: rhodecode/lib/helpers.py:486
+#: rhodecode/lib/helpers.py:506
 msgid "True"
 msgstr "Vrai"
 
-#: rhodecode/lib/helpers.py:490
+#: rhodecode/lib/helpers.py:509
 msgid "False"
 msgstr "Faux"
 
-#: rhodecode/lib/helpers.py:530
+#: rhodecode/lib/helpers.py:547
 #, fuzzy, python-format
 msgid "Deleted branch: %s"
 msgstr "Dépôt %s supprimé"
 
-#: rhodecode/lib/helpers.py:533
+#: rhodecode/lib/helpers.py:550
 #, fuzzy, python-format
 msgid "Created tag: %s"
 msgstr "utilisateur %s créé"
 
-#: rhodecode/lib/helpers.py:546
+#: rhodecode/lib/helpers.py:563
 msgid "Changeset not found"
 msgstr "Ensemble de changements non trouvé"
 
-#: rhodecode/lib/helpers.py:589
+#: rhodecode/lib/helpers.py:615
 #, python-format
 msgid "Show all combined changesets %s->%s"
 msgstr "Afficher les changements combinés %s->%s"
 
-#: rhodecode/lib/helpers.py:595
+#: rhodecode/lib/helpers.py:621
 msgid "compare view"
 msgstr "vue de comparaison"
 
-#: rhodecode/lib/helpers.py:615
+#: rhodecode/lib/helpers.py:641
 msgid "and"
 msgstr "et"
 
-#: rhodecode/lib/helpers.py:616
+#: rhodecode/lib/helpers.py:642
 #, python-format
 msgid "%s more"
 msgstr "%s de plus"
 
-#: rhodecode/lib/helpers.py:617 rhodecode/templates/changelog/changelog.html:51
+#: rhodecode/lib/helpers.py:643 rhodecode/templates/changelog/changelog.html:44
 msgid "revisions"
 msgstr "révisions"
 
-#: rhodecode/lib/helpers.py:641
+#: rhodecode/lib/helpers.py:667
 #, fuzzy, python-format
 msgid "fork name %s"
 msgstr "Nom du fork %s"
 
-#: rhodecode/lib/helpers.py:658
-#: rhodecode/templates/pullrequests/pullrequest_show.html:4
-#: rhodecode/templates/pullrequests/pullrequest_show.html:12
+#: rhodecode/lib/helpers.py:684
+#: rhodecode/templates/pullrequests/pullrequest_show.html:8
 #, python-format
 msgid "Pull request #%s"
 msgstr "Requête de pull #%s"
 
-#: rhodecode/lib/helpers.py:664
+#: rhodecode/lib/helpers.py:690
 msgid "[deleted] repository"
 msgstr "[a supprimé] le dépôt"
 
-#: rhodecode/lib/helpers.py:666 rhodecode/lib/helpers.py:676
+#: rhodecode/lib/helpers.py:692 rhodecode/lib/helpers.py:702
 msgid "[created] repository"
 msgstr "[a créé] le dépôt"
 
-#: rhodecode/lib/helpers.py:668
+#: rhodecode/lib/helpers.py:694
 msgid "[created] repository as fork"
 msgstr "[a créé] le dépôt en tant que fork"
 
-#: rhodecode/lib/helpers.py:670 rhodecode/lib/helpers.py:678
+#: rhodecode/lib/helpers.py:696 rhodecode/lib/helpers.py:704
 msgid "[forked] repository"
 msgstr "[a forké] le dépôt"
 
-#: rhodecode/lib/helpers.py:672 rhodecode/lib/helpers.py:680
+#: rhodecode/lib/helpers.py:698 rhodecode/lib/helpers.py:706
 msgid "[updated] repository"
 msgstr "[a mis à jour] le dépôt"
 
-#: rhodecode/lib/helpers.py:674
+#: rhodecode/lib/helpers.py:700
 msgid "[delete] repository"
 msgstr "[a supprimé] le dépôt"
 
-#: rhodecode/lib/helpers.py:682
+#: rhodecode/lib/helpers.py:708
 msgid "[created] user"
 msgstr "[a créé] l’utilisateur"
 
-#: rhodecode/lib/helpers.py:684
+#: rhodecode/lib/helpers.py:710
 msgid "[updated] user"
 msgstr "[a mis à jour] l’utilisateur"
 
-#: rhodecode/lib/helpers.py:686
-msgid "[created] users group"
+#: rhodecode/lib/helpers.py:712
+#, fuzzy
+msgid "[created] user group"
 msgstr "[a créé] le groupe d’utilisateurs"
 
-#: rhodecode/lib/helpers.py:688
-msgid "[updated] users group"
+#: rhodecode/lib/helpers.py:714
+#, fuzzy
+msgid "[updated] user group"
 msgstr "[a mis à jour] le groupe d’utilisateurs"
 
-#: rhodecode/lib/helpers.py:690
+#: rhodecode/lib/helpers.py:716
 msgid "[commented] on revision in repository"
 msgstr "[a commenté] une révision du dépôt"
 
-#: rhodecode/lib/helpers.py:692
+#: rhodecode/lib/helpers.py:718
 msgid "[commented] on pull request for"
 msgstr "[a commenté] la requête de pull pour"
 
-#: rhodecode/lib/helpers.py:694
+#: rhodecode/lib/helpers.py:720
 msgid "[closed] pull request for"
 msgstr "[a fermé] la requête de pull de"
 
-#: rhodecode/lib/helpers.py:696
+#: rhodecode/lib/helpers.py:722
 msgid "[pushed] into"
 msgstr "[a pushé] dans"
 
-#: rhodecode/lib/helpers.py:698
+#: rhodecode/lib/helpers.py:724
 msgid "[committed via RhodeCode] into repository"
 msgstr "[a commité via RhodeCode] dans le dépôt"
 
-#: rhodecode/lib/helpers.py:700
+#: rhodecode/lib/helpers.py:726
 msgid "[pulled from remote] into repository"
 msgstr "[a pullé depuis un site distant] dans le dépôt"
 
-#: rhodecode/lib/helpers.py:702
+#: rhodecode/lib/helpers.py:728
 msgid "[pulled] from"
 msgstr "[a pullé] depuis"
 
-#: rhodecode/lib/helpers.py:704
+#: rhodecode/lib/helpers.py:730
 msgid "[started following] repository"
 msgstr "[suit maintenant] le dépôt"
 
-#: rhodecode/lib/helpers.py:706
+#: rhodecode/lib/helpers.py:732
 msgid "[stopped following] repository"
 msgstr "[ne suit plus] le dépôt"
 
-#: rhodecode/lib/helpers.py:883
+#: rhodecode/lib/helpers.py:910
 #, python-format
 msgid " and %s more"
 msgstr "et %s de plus"
 
-#: rhodecode/lib/helpers.py:887
+#: rhodecode/lib/helpers.py:914
 msgid "No Files"
 msgstr "Aucun fichier"
 
-#: rhodecode/lib/helpers.py:1163
+#: rhodecode/lib/helpers.py:1198
 #, python-format
 msgid ""
 "%s repository is not mapped to db perhaps it was created or renamed from "
@@ -932,165 +1038,230 @@
 "probablement été créé ou renommé manuellement. Veuillez relancer "
 "l’application pour rescanner les dépôts."
 
-#: rhodecode/lib/utils2.py:403
+#: rhodecode/lib/unionrepo.py:193
+#, fuzzy
+msgid "cannot create new union repository"
+msgstr "[a créé] le dépôt"
+
+#: rhodecode/lib/utils2.py:411
 #, python-format
 msgid "%d year"
 msgid_plural "%d years"
 msgstr[0] "%d an"
 msgstr[1] "%d ans"
 
-#: rhodecode/lib/utils2.py:404
+#: rhodecode/lib/utils2.py:412
 #, python-format
 msgid "%d month"
 msgid_plural "%d months"
 msgstr[0] "%d mois"
 msgstr[1] "%d mois"
 
-#: rhodecode/lib/utils2.py:405
+#: rhodecode/lib/utils2.py:413
 #, python-format
 msgid "%d day"
 msgid_plural "%d days"
 msgstr[0] "%d jour"
 msgstr[1] "%d jours"
 
-#: rhodecode/lib/utils2.py:406
+#: rhodecode/lib/utils2.py:414
 #, python-format
 msgid "%d hour"
 msgid_plural "%d hours"
 msgstr[0] "%d heure"
 msgstr[1] "%d heures"
 
-#: rhodecode/lib/utils2.py:407
+#: rhodecode/lib/utils2.py:415
 #, python-format
 msgid "%d minute"
 msgid_plural "%d minutes"
 msgstr[0] "%d minute"
 msgstr[1] "%d minutes"
 
-#: rhodecode/lib/utils2.py:408
+#: rhodecode/lib/utils2.py:416
 #, python-format
 msgid "%d second"
 msgid_plural "%d seconds"
 msgstr[0] "%d seconde"
 msgstr[1] "%d secondes"
 
-#: rhodecode/lib/utils2.py:424
+#: rhodecode/lib/utils2.py:432
 #, fuzzy, python-format
 msgid "in %s"
 msgstr "à la ligne %s"
 
-#: rhodecode/lib/utils2.py:426
+#: rhodecode/lib/utils2.py:434
 #, python-format
 msgid "%s ago"
 msgstr "Il y a %s"
 
-#: rhodecode/lib/utils2.py:428
+#: rhodecode/lib/utils2.py:436
 #, fuzzy, python-format
 msgid "in %s and %s"
 msgstr "Il y a %s et %s"
 
-#: rhodecode/lib/utils2.py:431
+#: rhodecode/lib/utils2.py:439
 #, python-format
 msgid "%s and %s ago"
 msgstr "Il y a %s et %s"
 
-#: rhodecode/lib/utils2.py:434
+#: rhodecode/lib/utils2.py:442
 msgid "just now"
 msgstr "à l’instant"
 
-#: rhodecode/lib/celerylib/tasks.py:270
-msgid "password reset link"
-msgstr "Réinitialisation du mot de passe"
-
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163 rhodecode/model/db.py:1183
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1183
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1289 rhodecode/model/db.py:1388
 msgid "Repository no access"
 msgstr "Aucun accès au dépôt"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164 rhodecode/model/db.py:1184
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1184
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1290 rhodecode/model/db.py:1389
 msgid "Repository read access"
 msgstr "Accès en lecture au dépôt"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165 rhodecode/model/db.py:1185
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1185
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1291 rhodecode/model/db.py:1390
 msgid "Repository write access"
 msgstr "Accès en écriture au dépôt"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166 rhodecode/model/db.py:1186
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1186
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1292 rhodecode/model/db.py:1391
 msgid "Repository admin access"
 msgstr "Accès administrateur au dépôt"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168 rhodecode/model/db.py:1188
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1188
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1294
 msgid "Repositories Group no access"
 msgstr "Aucun accès au groupe de dépôts"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169 rhodecode/model/db.py:1189
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1189
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1295
 msgid "Repositories Group read access"
 msgstr "Accès en lecture au groupe de dépôts"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170 rhodecode/model/db.py:1190
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1190
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1296
 msgid "Repositories Group write access"
 msgstr "Accès en écriture au groupe de dépôts"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171 rhodecode/model/db.py:1191
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1191
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1297
 msgid "Repositories Group admin access"
 msgstr "Accès administrateur au groupe de dépôts"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173 rhodecode/model/db.py:1193
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1193
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1299 rhodecode/model/db.py:1398
 msgid "RhodeCode Administrator"
 msgstr "Administrateur RhodeCode"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174 rhodecode/model/db.py:1194
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1194
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1300 rhodecode/model/db.py:1399
 msgid "Repository creation disabled"
 msgstr "Création de dépôt désactivée"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175 rhodecode/model/db.py:1195
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1195
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1301 rhodecode/model/db.py:1400
 msgid "Repository creation enabled"
 msgstr "Création de dépôt activée"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176 rhodecode/model/db.py:1196
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1196
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1302 rhodecode/model/db.py:1401
 msgid "Repository forking disabled"
 msgstr "Fork de dépôt désactivé"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177 rhodecode/model/db.py:1197
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1197
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1303 rhodecode/model/db.py:1402
 msgid "Repository forking enabled"
 msgstr "Fork de dépôt activé"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178 rhodecode/model/db.py:1198
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1198
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1304 rhodecode/model/db.py:1403
 msgid "Register disabled"
 msgstr "Enregistrement désactivé"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179 rhodecode/model/db.py:1199
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1199
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1305 rhodecode/model/db.py:1404
 msgid "Register new user with RhodeCode with manual activation"
 msgstr "Enregistrer un nouvel utilisateur Rhodecode manuellement activé"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182 rhodecode/model/db.py:1202
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1202
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1308 rhodecode/model/db.py:1407
 msgid "Register new user with RhodeCode with auto activation"
 msgstr "Enregistrer un nouvel utilisateur Rhodecode auto-activé"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623 rhodecode/model/db.py:1643
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1643
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1749 rhodecode/model/db.py:1838
 msgid "Not Reviewed"
 msgstr "Pas encore relue"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624 rhodecode/model/db.py:1644
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1644
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1750 rhodecode/model/db.py:1839
 msgid "Approved"
 msgstr "Approuvée "
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625 rhodecode/model/db.py:1645
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1645
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1751 rhodecode/model/db.py:1840
 msgid "Rejected"
 msgstr "Rejetée"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626 rhodecode/model/db.py:1646
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1646
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1752 rhodecode/model/db.py:1841
 msgid "Under Review"
 msgstr "En cours de relecture"
 
-#: rhodecode/model/comment.py:110
+#: rhodecode/model/comment.py:75
 #, python-format
 msgid "on line %s"
 msgstr "à la ligne %s"
 
-#: rhodecode/model/comment.py:173
+#: rhodecode/model/comment.py:219
 msgid "[Mention]"
 msgstr "[Mention]"
 
+#: rhodecode/model/db.py:1252
+msgid "top level"
+msgstr ""
+
+#: rhodecode/model/db.py:1393
+#, fuzzy
+msgid "Repository group no access"
+msgstr "Aucun accès au groupe de dépôts"
+
+#: rhodecode/model/db.py:1394
+#, fuzzy
+msgid "Repository group read access"
+msgstr "Accès en lecture au groupe de dépôts"
+
+#: rhodecode/model/db.py:1395
+#, fuzzy
+msgid "Repository group write access"
+msgstr "Accès en écriture au groupe de dépôts"
+
+#: rhodecode/model/db.py:1396
+#, fuzzy
+msgid "Repository group admin access"
+msgstr "Accès administrateur au groupe de dépôts"
+
 #: rhodecode/model/forms.py:43
 msgid "Please enter a login"
 msgstr "Veuillez entrer un identifiant"
@@ -1109,63 +1280,65 @@
 msgid "Enter %(min)i characters or more"
 msgstr "Entrez au moins %(min)i caractères"
 
-#: rhodecode/model/notification.py:220
-#, fuzzy, python-format
-msgid "commented on commit at %(when)s"
-msgstr "a posté un commentaire sur le commit %(when)s"
-
-#: rhodecode/model/notification.py:221
-#, fuzzy, python-format
-msgid "sent message at %(when)s"
-msgstr "a envoyé un message  %(when)s"
-
-#: rhodecode/model/notification.py:222
-#, fuzzy, python-format
-msgid "mentioned you at %(when)s"
-msgstr "vous a mentioné %(when)s"
-
-#: rhodecode/model/notification.py:223
-#, fuzzy, python-format
-msgid "registered in RhodeCode at %(when)s"
-msgstr "s’est enregistré sur RhodeCode %(when)s"
-
 #: rhodecode/model/notification.py:224
 #, fuzzy, python-format
-msgid "opened new pull request at %(when)s"
-msgstr "a ouvert une nouvelle requête de pull %(when)s"
+msgid "%(user)s commented on changeset at %(when)s"
+msgstr "%(user)s a posté un commentaire sur le commit %(when)s"
 
 #: rhodecode/model/notification.py:225
 #, fuzzy, python-format
-msgid "commented on pull request at %(when)s"
-msgstr "a commenté sur la requête de pull %(when)s"
-
-#: rhodecode/model/pull_request.py:90
-#, python-format
-msgid "%(user)s wants you to review pull request #%(pr_id)s"
-msgstr "%(user)s voudrait que vous examiniez sa requête de pull nº%(pr_id)s"
-
-#: rhodecode/model/scm.py:542
+msgid "%(user)s sent message at %(when)s"
+msgstr "%(user)s a envoyé un message  %(when)s"
+
+#: rhodecode/model/notification.py:226
+#, fuzzy, python-format
+msgid "%(user)s mentioned you at %(when)s"
+msgstr "%(user)s vous a mentioné %(when)s"
+
+#: rhodecode/model/notification.py:227
+#, fuzzy, python-format
+msgid "%(user)s registered in RhodeCode at %(when)s"
+msgstr "%(user)s s’est enregistré sur RhodeCode %(when)s"
+
+#: rhodecode/model/notification.py:228
+#, fuzzy, python-format
+msgid "%(user)s opened new pull request at %(when)s"
+msgstr "%(user)s a ouvert une nouvelle requête de pull %(when)s"
+
+#: rhodecode/model/notification.py:229
+#, fuzzy, python-format
+msgid "%(user)s commented on pull request at %(when)s"
+msgstr "%(user)s a commenté sur la requête de pull %(when)s"
+
+#: rhodecode/model/pull_request.py:104
+#, fuzzy, python-format
+msgid "%(user)s wants you to review pull request #%(pr_id)s: %(pr_title)s"
+msgstr ""
+"%(user)s voudrait que vous examiniez sa requête de pull nº%(pr_id)s: "
+"%(pr_title)s"
+
+#: rhodecode/model/scm.py:598
 msgid "latest tip"
 msgstr "Dernier sommet"
 
 #: rhodecode/model/user.py:232
-msgid "new user registration"
+#, fuzzy
+msgid "New user registration"
 msgstr "Nouveau compte utilisateur enregistré"
 
 #: rhodecode/model/user.py:257 rhodecode/model/user.py:281
-#: rhodecode/model/user.py:303
 msgid "You can't Edit this user since it's crucial for entire application"
 msgstr ""
 "Vous ne pouvez pas éditer cet utilisateur ; il est nécessaire pour le bon"
 " fonctionnement de l’application."
 
-#: rhodecode/model/user.py:327
+#: rhodecode/model/user.py:303
 msgid "You can't remove this user since it's crucial for entire application"
 msgstr ""
 "Vous ne pouvez pas supprimer cet utilisateur ; il est nécessaire pour le "
 "bon fonctionnement de l’application."
 
-#: rhodecode/model/user.py:333
+#: rhodecode/model/user.py:309
 #, python-format
 msgid ""
 "user \"%s\" still owns %s repositories and cannot be removed. Switch "
@@ -1174,21 +1347,36 @@
 "L’utilisateur « %s » possède %s dépôts et ne peut être supprimé. Changez "
 "les propriétaires de ces dépôts. %s"
 
-#: rhodecode/model/validators.py:36 rhodecode/model/validators.py:37
+#: rhodecode/model/user.py:334
+#, fuzzy
+msgid "Password reset link"
+msgstr "Réinitialisation du mot de passe"
+
+#: rhodecode/model/user.py:366
+#, fuzzy
+msgid "Your new password"
+msgstr "Nouveau mot de passe"
+
+#: rhodecode/model/user.py:367
+#, python-format
+msgid "Your new RhodeCode password:%s"
+msgstr ""
+
+#: rhodecode/model/validators.py:38 rhodecode/model/validators.py:39
 msgid "Value cannot be an empty list"
 msgstr "Cette valeur ne peut être une liste vide."
 
-#: rhodecode/model/validators.py:83
+#: rhodecode/model/validators.py:85
 #, python-format
 msgid "Username \"%(username)s\" already exists"
 msgstr "Le nom d’utilisateur « %(username)s » existe déjà."
 
-#: rhodecode/model/validators.py:85
+#: rhodecode/model/validators.py:87
 #, python-format
 msgid "Username \"%(username)s\" is forbidden"
 msgstr "Le nom d’utilisateur « %(username)s » n’est pas autorisé"
 
-#: rhodecode/model/validators.py:87
+#: rhodecode/model/validators.py:89
 msgid ""
 "Username may only contain alphanumeric characters underscores, periods or"
 " dashes and must begin with alphanumeric character"
@@ -1197,119 +1385,132 @@
 "numériques ainsi que les caractères suivants : « _ . - ». Il doit "
 "commencer par un caractère alpha-numérique."
 
-#: rhodecode/model/validators.py:115
+#: rhodecode/model/validators.py:117
 #, python-format
 msgid "Username %(username)s is not valid"
 msgstr "Le nom d’utilisateur « %(username)s » n’est pas valide."
 
-#: rhodecode/model/validators.py:134
-msgid "Invalid users group name"
+#: rhodecode/model/validators.py:136
+#, fuzzy
+msgid "Invalid user group name"
 msgstr "Nom de groupe d’utilisateurs invalide."
 
-#: rhodecode/model/validators.py:135
-#, python-format
-msgid "Users group \"%(usersgroup)s\" already exists"
-msgstr "Le groupe d’utilisateurs « %(usersgroup)s » existe déjà."
-
 #: rhodecode/model/validators.py:137
+#, fuzzy, python-format
+msgid "User group \"%(usergroup)s\" already exists"
+msgstr "Le groupe d’utilisateurs « %(usergroup)s » existe déjà."
+
+#: rhodecode/model/validators.py:139
+#, fuzzy
 msgid ""
-"users group name may only contain  alphanumeric characters underscores, "
+"user group name may only contain alphanumeric characters underscores, "
 "periods or dashes and must begin with alphanumeric character"
 msgstr ""
 "Le nom de groupe d’utilisateurs peut contenir uniquement des caractères "
 "alpha-numériques ainsi que les caractères suivants : « _ . - ». Il doit "
 "commencer par un caractère alpha-numérique."
 
-#: rhodecode/model/validators.py:175
+#: rhodecode/model/validators.py:177
 msgid "Cannot assign this group as parent"
 msgstr "Impossible d’assigner ce groupe en tant que parent."
 
-#: rhodecode/model/validators.py:176
+#: rhodecode/model/validators.py:178
 #, python-format
 msgid "Group \"%(group_name)s\" already exists"
 msgstr "Le groupe « %(group_name)s » existe déjà."
 
-#: rhodecode/model/validators.py:178
+#: rhodecode/model/validators.py:180
 #, python-format
 msgid "Repository with name \"%(group_name)s\" already exists"
 msgstr "Un dépôt portant le nom « %(group_name)s » existe déjà."
 
-#: rhodecode/model/validators.py:236
+#: rhodecode/model/validators.py:238
 msgid "Invalid characters (non-ascii) in password"
 msgstr "Caractères incorrects (non-ASCII) dans le mot de passe."
 
-#: rhodecode/model/validators.py:251
+#: rhodecode/model/validators.py:253
 msgid "Passwords do not match"
 msgstr "Les mots de passe ne correspondent pas."
 
-#: rhodecode/model/validators.py:268
+#: rhodecode/model/validators.py:270
 msgid "invalid password"
 msgstr "mot de passe invalide"
 
-#: rhodecode/model/validators.py:269
+#: rhodecode/model/validators.py:271
 msgid "invalid user name"
 msgstr "nom d’utilisateur invalide"
 
-#: rhodecode/model/validators.py:270
+#: rhodecode/model/validators.py:272
 msgid "Your account is disabled"
 msgstr "Votre compte est désactivé"
 
-#: rhodecode/model/validators.py:314
+#: rhodecode/model/validators.py:316
 #, python-format
 msgid "Repository name %(repo)s is disallowed"
 msgstr "Le nom de dépôt « %(repo)s » n’est pas autorisé."
 
-#: rhodecode/model/validators.py:316
+#: rhodecode/model/validators.py:318
 #, python-format
 msgid "Repository named %(repo)s already exists"
 msgstr "Un dépôt portant le nom « %(repo)s » existe déjà."
 
-#: rhodecode/model/validators.py:317
+#: rhodecode/model/validators.py:319
 #, python-format
 msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\""
 msgstr "Le dépôt « %(repo)s » existe déjà dans le groupe « %(group)s »."
 
-#: rhodecode/model/validators.py:319
-#, python-format
-msgid "Repositories group with name \"%(repo)s\" already exists"
+#: rhodecode/model/validators.py:321
+#, fuzzy, python-format
+msgid "Repository group with name \"%(repo)s\" already exists"
 msgstr "Un groupe de dépôts portant le nom « %(repo)s » existe déjà."
 
-#: rhodecode/model/validators.py:432
+#: rhodecode/model/validators.py:438
 msgid "invalid clone url"
 msgstr "URL de clonage invalide."
 
-#: rhodecode/model/validators.py:433
+#: rhodecode/model/validators.py:439
 msgid "Invalid clone url, provide a valid clone http(s)/svn+http(s) url"
 msgstr ""
 "URL à cloner invalide. Veuillez fournir une URL valide en http(s) ou "
 "svn+http(s)."
 
-#: rhodecode/model/validators.py:458
+#: rhodecode/model/validators.py:464
 msgid "Fork have to be the same type as parent"
 msgstr "Le fork doit être du même type que le parent."
 
-#: rhodecode/model/validators.py:473
+#: rhodecode/model/validators.py:479
 msgid "You don't have permissions to create repository in this group"
 msgstr "Vous n’avez pas la permission de créer un dépôt dans ce groupe."
 
-#: rhodecode/model/validators.py:498
-msgid "This username or users group name is not valid"
+#: rhodecode/model/validators.py:481
+#, fuzzy
+msgid "no permission to create repository in root location"
+msgstr "Vous n’avez pas la permission de créer un dépôt dans ce groupe."
+
+#: rhodecode/model/validators.py:518
+#, fuzzy
+msgid "You don't have permissions to create a group in this location"
+msgstr "Vous n’avez pas la permission de créer un dépôt dans ce groupe."
+
+#: rhodecode/model/validators.py:557
+#, fuzzy
+msgid "This username or user group name is not valid"
 msgstr "Ce nom d’utilisateur ou de groupe n’est pas valide."
 
-#: rhodecode/model/validators.py:591
+#: rhodecode/model/validators.py:650
 msgid "This is not a valid path"
 msgstr "Ceci n’est pas un chemin valide"
 
-#: rhodecode/model/validators.py:606
+#: rhodecode/model/validators.py:665
 msgid "This e-mail address is already taken"
 msgstr "Cette adresse e-mail est déjà enregistrée"
 
-#: rhodecode/model/validators.py:626
+#: rhodecode/model/validators.py:685
 #, python-format
 msgid "e-mail \"%(email)s\" does not exist."
 msgstr "L’adresse e-mail « %(email)s » n’existe pas"
 
-#: rhodecode/model/validators.py:663
+#: rhodecode/model/validators.py:722
 msgid ""
 "The LDAP Login attribute of the CN must be specified - this is the name "
 "of the attribute that is equivalent to \"username\""
@@ -1317,14 +1518,27 @@
 "L’attribut Login du CN doit être spécifié. Cet attribut correspond au nom"
 " d’utilisateur."
 
-#: rhodecode/model/validators.py:682
+#: rhodecode/model/validators.py:735
 #, python-format
 msgid "Revisions %(revs)s are already part of pull request or have set status"
 msgstr ""
 "Les révisions %(revs)s font déjà partie de la requête de pull ou on des "
 "statuts définis."
 
-#: rhodecode/templates/index.html:3
+#: rhodecode/model/validators.py:767
+msgid "Please enter a valid IPv4 or IpV6 address"
+msgstr ""
+
+#: rhodecode/model/validators.py:768
+#, python-format
+msgid "The network size (bits) must be within the range of 0-32 (not %(bits)r)"
+msgstr ""
+
+#: rhodecode/model/validators.py:800
+msgid "Key name can only consist of letters, underscore, dash or numbers"
+msgstr ""
+
+#: rhodecode/templates/index.html:5
 msgid "Dashboard"
 msgstr "Tableau de bord"
 
@@ -1333,205 +1547,229 @@
 #: rhodecode/templates/admin/repos/repos.html:9
 #: rhodecode/templates/admin/users/user_edit_my_account.html:31
 #: rhodecode/templates/admin/users/users.html:9
-#: rhodecode/templates/bookmarks/bookmarks.html:10
+#: rhodecode/templates/bookmarks/bookmarks.html:9
 #: rhodecode/templates/branches/branches.html:9
 #: rhodecode/templates/journal/journal.html:9
-#: rhodecode/templates/journal/journal.html:48
-#: rhodecode/templates/tags/tags.html:10
+#: rhodecode/templates/journal/journal.html:46
+#: rhodecode/templates/journal/journal.html:47
+#: rhodecode/templates/tags/tags.html:9
 msgid "quick filter..."
 msgstr "Filtre rapide…"
 
 #: rhodecode/templates/index_base.html:6
 #: rhodecode/templates/admin/repos/repos.html:9
-#: rhodecode/templates/base/base.html:233
 msgid "repositories"
 msgstr "Dépôts"
 
 #: rhodecode/templates/index_base.html:13
-#: rhodecode/templates/index_base.html:15
+#: rhodecode/templates/index_base.html:18
+#: rhodecode/templates/admin/repos/repo_add.html:5
 #: rhodecode/templates/admin/repos/repos.html:21
-msgid "ADD REPOSITORY"
-msgstr "AJOUTER UN DÉPÔT"
-
-#: rhodecode/templates/index_base.html:29
-#: rhodecode/templates/index_base.html:136
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:32
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:32
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:33
+msgid "Add repository"
+msgstr "Ajouter un dépôt"
+
+#: rhodecode/templates/index_base.html:15
+#: rhodecode/templates/index_base.html:20
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:31
+#, fuzzy
+msgid "Add group"
+msgstr "Édition du groupe de dépôt"
+
+#: rhodecode/templates/index_base.html:27
+#, fuzzy
+msgid "Edit group"
+msgstr "Édition du groupe de dépôt"
+
+#: rhodecode/templates/index_base.html:27
+msgid "You have admin right to this group, and can edit it"
+msgstr ""
+
+#: rhodecode/templates/index_base.html:40
+#: rhodecode/templates/index_base.html:140
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:33
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:38
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:43
 #: rhodecode/templates/admin/users_groups/users_group_add.html:32
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:33
+#: rhodecode/templates/admin/users_groups/users_groups.html:34
 msgid "Group name"
 msgstr "Nom de groupe"
 
-#: rhodecode/templates/index_base.html:30
-#: rhodecode/templates/index_base.html:72
-#: rhodecode/templates/index_base.html:138
-#: rhodecode/templates/index_base.html:176
-#: rhodecode/templates/index_base.html:266
+#: rhodecode/templates/index_base.html:41
+#: rhodecode/templates/index_base.html:83
+#: rhodecode/templates/index_base.html:142
+#: rhodecode/templates/index_base.html:180
+#: rhodecode/templates/index_base.html:270
 #: rhodecode/templates/admin/repos/repo_add_base.html:56
 #: rhodecode/templates/admin/repos/repo_edit.html:75
-#: rhodecode/templates/admin/repos/repos.html:72
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:41
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:41
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:34
-#: rhodecode/templates/forks/fork.html:59
-#: rhodecode/templates/settings/repo_settings.html:66
-#: rhodecode/templates/summary/summary.html:114
+#: rhodecode/templates/admin/repos/repos.html:73
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:42
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:47
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:44
+#: rhodecode/templates/forks/fork.html:56
+#: rhodecode/templates/pullrequests/pullrequest.html:101
+#: rhodecode/templates/summary/summary.html:106
 msgid "Description"
 msgstr "Description"
 
-#: rhodecode/templates/index_base.html:40
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:47
-msgid "Repositories group"
-msgstr "Groupe de dépôts"
-
-#: rhodecode/templates/index_base.html:71
-#: rhodecode/templates/index_base.html:174
-#: rhodecode/templates/index_base.html:264
+#: rhodecode/templates/index_base.html:51
+#: rhodecode/templates/admin/permissions/permissions.html:55
+#: rhodecode/templates/admin/repos/repo_add_base.html:29
+#: rhodecode/templates/admin/repos/repo_edit.html:49
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:57
+#: rhodecode/templates/forks/fork.html:47
+msgid "Repository group"
+msgstr "Groupe de dépôt"
+
+#: rhodecode/templates/index_base.html:82
+#: rhodecode/templates/index_base.html:178
+#: rhodecode/templates/index_base.html:268
 #: rhodecode/templates/admin/repos/repo_add_base.html:9
 #: rhodecode/templates/admin/repos/repo_edit.html:32
-#: rhodecode/templates/admin/repos/repos.html:70
-#: rhodecode/templates/admin/users/user_edit.html:196
-#: rhodecode/templates/admin/users/user_edit_my_account.html:59
-#: rhodecode/templates/admin/users/user_edit_my_account.html:180
-#: rhodecode/templates/admin/users/user_edit_my_account.html:216
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:6
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:184
-#: rhodecode/templates/bookmarks/bookmarks.html:36
+#: rhodecode/templates/admin/repos/repos.html:71
+#: rhodecode/templates/admin/users/user_edit_my_account.html:172
+#: rhodecode/templates/base/perms_summary.html:14
+#: rhodecode/templates/bookmarks/bookmarks.html:34
 #: rhodecode/templates/bookmarks/bookmarks_data.html:6
-#: rhodecode/templates/branches/branches.html:50
+#: rhodecode/templates/branches/branches.html:47
 #: rhodecode/templates/branches/branches_data.html:6
 #: rhodecode/templates/files/files_browser.html:47
-#: rhodecode/templates/journal/journal.html:70
-#: rhodecode/templates/journal/journal.html:196
-#: rhodecode/templates/journal/journal_page_repos.html:7
-#: rhodecode/templates/settings/repo_settings.html:31
-#: rhodecode/templates/summary/summary.html:43
-#: rhodecode/templates/summary/summary.html:132
-#: rhodecode/templates/tags/tags.html:51
+#: rhodecode/templates/journal/journal.html:193
+#: rhodecode/templates/journal/journal.html:296
+#: rhodecode/templates/summary/summary.html:55
+#: rhodecode/templates/summary/summary.html:124
+#: rhodecode/templates/tags/tags.html:48
 #: rhodecode/templates/tags/tags_data.html:6
 msgid "Name"
 msgstr "Nom"
 
-#: rhodecode/templates/index_base.html:73
+#: rhodecode/templates/index_base.html:84
 msgid "Last change"
 msgstr "Dernière modification"
 
-#: rhodecode/templates/index_base.html:74
-#: rhodecode/templates/index_base.html:179
-#: rhodecode/templates/admin/users/user_edit_my_account.html:182
-#: rhodecode/templates/journal/journal.html:198
+#: rhodecode/templates/index_base.html:85
+#: rhodecode/templates/index_base.html:183
+#: rhodecode/templates/index_base.html:273
+#: rhodecode/templates/admin/repos/repos.html:74
+#: rhodecode/templates/admin/users/user_edit_my_account.html:174
+#: rhodecode/templates/journal/journal.html:195
+#: rhodecode/templates/journal/journal.html:298
 msgid "Tip"
 msgstr "Sommet"
 
-#: rhodecode/templates/index_base.html:75
-#: rhodecode/templates/index_base.html:181
-#: rhodecode/templates/index_base.html:269
+#: rhodecode/templates/index_base.html:86
+#: rhodecode/templates/index_base.html:185
+#: rhodecode/templates/index_base.html:275
 #: rhodecode/templates/admin/repos/repo_edit.html:121
-#: rhodecode/templates/admin/repos/repos.html:73
+#: rhodecode/templates/admin/repos/repos.html:76
 msgid "Owner"
 msgstr "Propriétaire"
 
-#: rhodecode/templates/index_base.html:76
-#: rhodecode/templates/summary/summary.html:48
-#: rhodecode/templates/summary/summary.html:51
-msgid "RSS"
-msgstr "RSS"
-
-#: rhodecode/templates/index_base.html:77
+#: rhodecode/templates/index_base.html:87
 msgid "Atom"
 msgstr "Atom"
 
-#: rhodecode/templates/index_base.html:167
-#: rhodecode/templates/index_base.html:207
-#: rhodecode/templates/index_base.html:291
-#: rhodecode/templates/admin/repos/repos.html:94
-#: rhodecode/templates/admin/users/user_edit_my_account.html:202
+#: rhodecode/templates/index_base.html:171
+#: rhodecode/templates/index_base.html:209
+#: rhodecode/templates/index_base.html:296
+#: rhodecode/templates/admin/repos/repos.html:97
+#: rhodecode/templates/admin/users/user_edit_my_account.html:196
 #: rhodecode/templates/admin/users/users.html:107
-#: rhodecode/templates/bookmarks/bookmarks.html:60
-#: rhodecode/templates/branches/branches.html:76
-#: rhodecode/templates/journal/journal.html:221
-#: rhodecode/templates/tags/tags.html:77
+#: rhodecode/templates/bookmarks/bookmarks.html:58
+#: rhodecode/templates/branches/branches.html:73
+#: rhodecode/templates/journal/journal.html:217
+#: rhodecode/templates/journal/journal.html:320
+#: rhodecode/templates/tags/tags.html:74
 msgid "Click to sort ascending"
 msgstr "Tri ascendant"
 
-#: rhodecode/templates/index_base.html:168
-#: rhodecode/templates/index_base.html:208
-#: rhodecode/templates/index_base.html:292
-#: rhodecode/templates/admin/repos/repos.html:95
-#: rhodecode/templates/admin/users/user_edit_my_account.html:203
+#: rhodecode/templates/index_base.html:172
+#: rhodecode/templates/index_base.html:210
+#: rhodecode/templates/index_base.html:297
+#: rhodecode/templates/admin/repos/repos.html:98
+#: rhodecode/templates/admin/users/user_edit_my_account.html:197
 #: rhodecode/templates/admin/users/users.html:108
-#: rhodecode/templates/bookmarks/bookmarks.html:61
-#: rhodecode/templates/branches/branches.html:77
-#: rhodecode/templates/journal/journal.html:222
-#: rhodecode/templates/tags/tags.html:78
+#: rhodecode/templates/bookmarks/bookmarks.html:59
+#: rhodecode/templates/branches/branches.html:74
+#: rhodecode/templates/journal/journal.html:218
+#: rhodecode/templates/journal/journal.html:321
+#: rhodecode/templates/tags/tags.html:75
 msgid "Click to sort descending"
 msgstr "Tri descendant"
 
-#: rhodecode/templates/index_base.html:177
-#: rhodecode/templates/index_base.html:267
+#: rhodecode/templates/index_base.html:181
+#: rhodecode/templates/index_base.html:271
 msgid "Last Change"
 msgstr "Dernière modification"
 
-#: rhodecode/templates/index_base.html:209
-#: rhodecode/templates/index_base.html:293
-#: rhodecode/templates/admin/repos/repos.html:96
-#: rhodecode/templates/admin/users/user_edit_my_account.html:204
+#: rhodecode/templates/index_base.html:211
+#: rhodecode/templates/admin/repos/repos.html:99
+#: rhodecode/templates/admin/users/user_edit_my_account.html:198
 #: rhodecode/templates/admin/users/users.html:109
-#: rhodecode/templates/bookmarks/bookmarks.html:62
-#: rhodecode/templates/branches/branches.html:78
-#: rhodecode/templates/journal/journal.html:223
-#: rhodecode/templates/tags/tags.html:79
+#: rhodecode/templates/bookmarks/bookmarks.html:60
+#: rhodecode/templates/branches/branches.html:75
+#: rhodecode/templates/journal/journal.html:219
+#: rhodecode/templates/journal/journal.html:322
+#: rhodecode/templates/tags/tags.html:76
 msgid "No records found."
 msgstr "Aucun élément n’a été trouvé."
 
-#: rhodecode/templates/index_base.html:210
-#: rhodecode/templates/index_base.html:294
-#: rhodecode/templates/admin/repos/repos.html:97
-#: rhodecode/templates/admin/users/user_edit_my_account.html:205
+#: rhodecode/templates/index_base.html:212
+#: rhodecode/templates/index_base.html:299
+#: rhodecode/templates/admin/repos/repos.html:100
+#: rhodecode/templates/admin/users/user_edit_my_account.html:199
 #: rhodecode/templates/admin/users/users.html:110
-#: rhodecode/templates/bookmarks/bookmarks.html:63
-#: rhodecode/templates/branches/branches.html:79
-#: rhodecode/templates/journal/journal.html:224
-#: rhodecode/templates/tags/tags.html:80
+#: rhodecode/templates/bookmarks/bookmarks.html:61
+#: rhodecode/templates/branches/branches.html:76
+#: rhodecode/templates/journal/journal.html:220
+#: rhodecode/templates/journal/journal.html:323
+#: rhodecode/templates/tags/tags.html:77
 msgid "Data error."
 msgstr "Erreur d’intégrité des données."
 
-#: rhodecode/templates/index_base.html:211
-#: rhodecode/templates/index_base.html:295
-#: rhodecode/templates/admin/repos/repos.html:98
-#: rhodecode/templates/admin/users/user_edit_my_account.html:206
+#: rhodecode/templates/index_base.html:213
+#: rhodecode/templates/index_base.html:300
+#: rhodecode/templates/admin/repos/repos.html:101
+#: rhodecode/templates/admin/users/user_edit_my_account.html:58
+#: rhodecode/templates/admin/users/user_edit_my_account.html:200
 #: rhodecode/templates/admin/users/users.html:111
-#: rhodecode/templates/bookmarks/bookmarks.html:64
-#: rhodecode/templates/branches/branches.html:80
-#: rhodecode/templates/journal/journal.html:62
-#: rhodecode/templates/journal/journal.html:225
-#: rhodecode/templates/tags/tags.html:81
+#: rhodecode/templates/bookmarks/bookmarks.html:62
+#: rhodecode/templates/branches/branches.html:77
+#: rhodecode/templates/journal/journal.html:221
+#: rhodecode/templates/journal/journal.html:324
+#: rhodecode/templates/tags/tags.html:78
 msgid "Loading..."
 msgstr "Chargement…"
 
-#: rhodecode/templates/login.html:5 rhodecode/templates/login.html:54
-msgid "Sign In"
+#: rhodecode/templates/index_base.html:298
+#, fuzzy
+msgid "No repositories found."
+msgstr "Groupes de dépôts"
+
+#: rhodecode/templates/login.html:5 rhodecode/templates/base/base.html:227
+msgid "Log In"
 msgstr "Connexion"
 
 #: rhodecode/templates/login.html:21
-msgid "Sign In to"
-msgstr "Connexion à"
+#, python-format
+msgid "Log In to %s"
+msgstr ""
 
 #: rhodecode/templates/login.html:31 rhodecode/templates/register.html:20
 #: rhodecode/templates/admin/admin_log.html:5
 #: rhodecode/templates/admin/users/user_add.html:32
-#: rhodecode/templates/admin/users/user_edit.html:50
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:26
-#: rhodecode/templates/base/base.html:83
-#: rhodecode/templates/summary/summary.html:131
+#: rhodecode/templates/admin/users/user_edit.html:57
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:31
+#: rhodecode/templates/admin/users/users.html:77
+#: rhodecode/templates/base/base.html:203
+#: rhodecode/templates/summary/summary.html:123
 msgid "Username"
 msgstr "Nom d’utilisateur"
 
 #: rhodecode/templates/login.html:40 rhodecode/templates/register.html:29
 #: rhodecode/templates/admin/ldap/ldap.html:46
 #: rhodecode/templates/admin/users/user_add.html:41
-#: rhodecode/templates/base/base.html:92
+#: rhodecode/templates/base/base.html:212
 msgid "Password"
 msgstr "Mot de passe"
 
@@ -1539,17 +1777,22 @@
 msgid "Remember me"
 msgstr "Se souvenir de moi"
 
+#: rhodecode/templates/login.html:54
+msgid "Sign In"
+msgstr "Connexion"
+
 #: rhodecode/templates/login.html:60
 msgid "Forgot your password ?"
 msgstr "Mot de passe oublié ?"
 
-#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:103
+#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:223
 msgid "Don't have an account ?"
 msgstr "Vous n’avez pas de compte ?"
 
 #: rhodecode/templates/password_reset.html:5
-msgid "Reset your password"
-msgstr "Mot de passe oublié ?"
+#, fuzzy
+msgid "Password Reset"
+msgstr "Réinitialisation du mot de passe"
 
 #: rhodecode/templates/password_reset.html:11
 msgid "Reset your password to"
@@ -1581,23 +1824,23 @@
 
 #: rhodecode/templates/register.html:47
 #: rhodecode/templates/admin/users/user_add.html:59
-#: rhodecode/templates/admin/users/user_edit.html:90
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:53
+#: rhodecode/templates/admin/users/user_edit.html:97
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:62
 msgid "First Name"
 msgstr "Prénom"
 
 #: rhodecode/templates/register.html:56
 #: rhodecode/templates/admin/users/user_add.html:68
-#: rhodecode/templates/admin/users/user_edit.html:99
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:62
+#: rhodecode/templates/admin/users/user_edit.html:106
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:71
 msgid "Last Name"
 msgstr "Nom"
 
 #: rhodecode/templates/register.html:65
 #: rhodecode/templates/admin/users/user_add.html:77
-#: rhodecode/templates/admin/users/user_edit.html:108
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:71
-#: rhodecode/templates/summary/summary.html:133
+#: rhodecode/templates/admin/users/user_edit.html:115
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:80
+#: rhodecode/templates/summary/summary.html:125
 msgid "Email"
 msgstr "E-mail"
 
@@ -1609,44 +1852,31 @@
 msgid "Your account must wait for activation by administrator"
 msgstr "Votre compte utilisateur devra être activé par un administrateur."
 
-#: rhodecode/templates/repo_switcher_list.html:11
+#: rhodecode/templates/repo_switcher_list.html:10
 #: rhodecode/templates/admin/defaults/defaults.html:44
 #: rhodecode/templates/admin/repos/repo_add_base.html:65
 #: rhodecode/templates/admin/repos/repo_edit.html:85
-#: rhodecode/templates/settings/repo_settings.html:76
+#: rhodecode/templates/data_table/_dt_elements.html:61
+#: rhodecode/templates/summary/summary.html:77
 msgid "Private repository"
 msgstr "Dépôt privé"
 
-#: rhodecode/templates/repo_switcher_list.html:16
+#: rhodecode/templates/repo_switcher_list.html:12
+#: rhodecode/templates/data_table/_dt_elements.html:63
+#: rhodecode/templates/summary/summary.html:79
 msgid "Public repository"
 msgstr "Dépôt public"
 
-#: rhodecode/templates/switch_to_list.html:3
-#: rhodecode/templates/branches/branches.html:14
-msgid "branches"
-msgstr "Branches"
-
 #: rhodecode/templates/switch_to_list.html:10
 #: rhodecode/templates/branches/branches_data.html:57
 msgid "There are no branches yet"
 msgstr "Aucune branche n’a été créée pour le moment."
 
-#: rhodecode/templates/switch_to_list.html:15
-#: rhodecode/templates/shortlog/shortlog_data.html:10
-#: rhodecode/templates/tags/tags.html:15
-msgid "tags"
-msgstr "Tags"
-
 #: rhodecode/templates/switch_to_list.html:22
 #: rhodecode/templates/tags/tags_data.html:38
 msgid "There are no tags yet"
 msgstr "Aucun tag n’a été créé pour le moment."
 
-#: rhodecode/templates/switch_to_list.html:28
-#: rhodecode/templates/bookmarks/bookmarks.html:15
-msgid "bookmarks"
-msgstr "Signets"
-
 #: rhodecode/templates/switch_to_list.html:35
 #: rhodecode/templates/bookmarks/bookmarks_data.html:32
 msgid "There are no bookmarks yet"
@@ -1654,6 +1884,7 @@
 
 #: rhodecode/templates/admin/admin.html:5
 #: rhodecode/templates/admin/admin.html:13
+#: rhodecode/templates/base/base.html:68
 msgid "Admin journal"
 msgstr "Historique d’administration"
 
@@ -1677,11 +1908,13 @@
 msgstr[1] ""
 
 #: rhodecode/templates/admin/admin_log.html:6
-#: rhodecode/templates/admin/repos/repos.html:74
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:8
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:9
-#: rhodecode/templates/journal/journal_page_repos.html:9
-#: rhodecode/templates/journal/journal_page_repos.html:10
+#: rhodecode/templates/admin/repos/repos.html:77
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46
+#: rhodecode/templates/admin/users/user_edit_my_account.html:176
+#: rhodecode/templates/admin/users/users.html:87
+#: rhodecode/templates/admin/users_groups/users_groups.html:37
+#: rhodecode/templates/journal/journal.html:197
+#: rhodecode/templates/journal/journal.html:300
 msgid "Action"
 msgstr "Action"
 
@@ -1691,11 +1924,11 @@
 msgstr "Dépôt"
 
 #: rhodecode/templates/admin/admin_log.html:8
-#: rhodecode/templates/bookmarks/bookmarks.html:37
+#: rhodecode/templates/bookmarks/bookmarks.html:35
 #: rhodecode/templates/bookmarks/bookmarks_data.html:7
-#: rhodecode/templates/branches/branches.html:51
+#: rhodecode/templates/branches/branches.html:48
 #: rhodecode/templates/branches/branches_data.html:7
-#: rhodecode/templates/tags/tags.html:52
+#: rhodecode/templates/tags/tags.html:49
 #: rhodecode/templates/tags/tags_data.html:7
 msgid "Date"
 msgstr "Date"
@@ -1715,6 +1948,7 @@
 msgstr "Groupes de dépôts"
 
 #: rhodecode/templates/admin/defaults/defaults.html:11
+#: rhodecode/templates/base/base.html:75
 #, fuzzy
 msgid "Defaults"
 msgstr "[Par défaut]"
@@ -1728,8 +1962,7 @@
 #: rhodecode/templates/admin/defaults/defaults.html:48
 #: rhodecode/templates/admin/repos/repo_add_base.html:69
 #: rhodecode/templates/admin/repos/repo_edit.html:89
-#: rhodecode/templates/forks/fork.html:72
-#: rhodecode/templates/settings/repo_settings.html:80
+#: rhodecode/templates/forks/fork.html:69
 msgid ""
 "Private repositories are only visible to people explicitly added as "
 "collaborators."
@@ -1759,7 +1992,7 @@
 
 #: rhodecode/templates/admin/defaults/defaults.html:75
 #: rhodecode/templates/admin/repos/repo_edit.html:112
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:66
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:72
 msgid "Enable locking"
 msgstr "Activer le verrouillage"
 
@@ -1770,14 +2003,18 @@
 
 #: rhodecode/templates/admin/defaults/defaults.html:84
 #: rhodecode/templates/admin/ldap/ldap.html:89
-#: rhodecode/templates/admin/repos/repo_edit.html:141
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:74
+#: rhodecode/templates/admin/permissions/permissions.html:92
+#: rhodecode/templates/admin/repos/repo_edit.html:148
+#: rhodecode/templates/admin/repos/repo_edit.html:173
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:80
 #: rhodecode/templates/admin/settings/hooks.html:73
-#: rhodecode/templates/admin/users/user_edit.html:133
-#: rhodecode/templates/admin/users/user_edit.html:178
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:79
+#: rhodecode/templates/admin/users/user_add.html:94
+#: rhodecode/templates/admin/users/user_edit.html:140
+#: rhodecode/templates/admin/users/user_edit.html:185
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:88
+#: rhodecode/templates/admin/users_groups/users_group_add.html:49
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:90
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:135
-#: rhodecode/templates/settings/repo_settings.html:94
 msgid "Save"
 msgstr "Enregistrer"
 
@@ -1786,7 +2023,10 @@
 msgstr "Administration LDAP"
 
 #: rhodecode/templates/admin/ldap/ldap.html:11
-msgid "Ldap"
+#: rhodecode/templates/admin/users/users.html:86
+#: rhodecode/templates/base/base.html:74
+#, fuzzy
+msgid "LDAP"
 msgstr "LDAP"
 
 #: rhodecode/templates/admin/ldap/ldap.html:28
@@ -1867,8 +2107,7 @@
 msgstr "Commentaires"
 
 #: rhodecode/templates/admin/notifications/notifications.html:31
-#: rhodecode/templates/base/base.html:267
-#: rhodecode/templates/base/base.html:269
+#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8
 msgid "Pull requests"
 msgstr "Requêtes de pull"
 
@@ -1886,6 +2125,7 @@
 msgstr "Notification"
 
 #: rhodecode/templates/admin/notifications/show_notification.html:9
+#: rhodecode/templates/base/base.html:241
 msgid "Notifications"
 msgstr "Notifications"
 
@@ -1894,11 +2134,12 @@
 msgstr "Gestion des permissions"
 
 #: rhodecode/templates/admin/permissions/permissions.html:11
-#: rhodecode/templates/admin/repos/repo_edit.html:134
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:58
-#: rhodecode/templates/admin/users/user_edit.html:143
+#: rhodecode/templates/admin/repos/repo_edit.html:158
+#: rhodecode/templates/admin/repos/repo_edit.html:165
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:64
+#: rhodecode/templates/admin/users/user_edit.html:150
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:100
-#: rhodecode/templates/settings/repo_settings.html:86
+#: rhodecode/templates/base/base.html:73
 msgid "Permissions"
 msgstr "Permissions"
 
@@ -1911,8 +2152,9 @@
 msgstr "Accès anonyme"
 
 #: rhodecode/templates/admin/permissions/permissions.html:49
+#, fuzzy
 msgid ""
-"All default permissions on each repository will be reset to choosen "
+"All default permissions on each repository will be reset to chosen "
 "permission, note that all custom default permission on repositories will "
 "be lost"
 msgstr ""
@@ -1922,24 +2164,16 @@
 
 #: rhodecode/templates/admin/permissions/permissions.html:50
 #: rhodecode/templates/admin/permissions/permissions.html:63
-msgid "overwrite existing settings"
+#, fuzzy
+msgid "Overwrite existing settings"
 msgstr "Écraser les permissions existantes"
 
-#: rhodecode/templates/admin/permissions/permissions.html:55
-#: rhodecode/templates/admin/repos/repo_add_base.html:29
-#: rhodecode/templates/admin/repos/repo_edit.html:49
-#: rhodecode/templates/admin/repos_groups/repos_groups.html:4
-#: rhodecode/templates/forks/fork.html:50
-#: rhodecode/templates/settings/repo_settings.html:48
-msgid "Repository group"
-msgstr "Groupe de dépôt"
-
 #: rhodecode/templates/admin/permissions/permissions.html:62
 #, fuzzy
 msgid ""
-"All default permissions on each repository group will be reset to choosen"
-" permission, note that all custom default permission on repositories "
-"group will be lost"
+"All default permissions on each repository group will be reset to chosen "
+"permission, note that all custom default permission on repository groups "
+"will be lost"
 msgstr ""
 "Les permissions par défaut de chaque dépôt vont être remplacées par la "
 "permission choisie. Toutes les permissions par défaut des dépôts seront "
@@ -1957,40 +2191,99 @@
 msgid "Repository forking"
 msgstr "Fork de dépôt"
 
-#: rhodecode/templates/admin/permissions/permissions.html:92
-#: rhodecode/templates/admin/repos/repo_edit.html:264
-msgid "set"
-msgstr "Définir"
-
-#: rhodecode/templates/admin/repos/repo_add.html:5
-#: rhodecode/templates/admin/repos/repo_add_create_repository.html:5
-msgid "Add repository"
-msgstr "Ajouter un dépôt"
-
-#: rhodecode/templates/admin/repos/repo_add.html:11
-#: rhodecode/templates/admin/repos/repo_edit.html:11
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:10
+#: rhodecode/templates/admin/permissions/permissions.html:93
+#: rhodecode/templates/admin/permissions/permissions.html:154
+#: rhodecode/templates/admin/repos/repo_edit.html:149
+#: rhodecode/templates/admin/repos/repo_edit.html:174
+#: rhodecode/templates/admin/repos/repo_edit.html:388
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:81
+#: rhodecode/templates/admin/settings/settings.html:115
+#: rhodecode/templates/admin/settings/settings.html:187
+#: rhodecode/templates/admin/settings/settings.html:278
+#: rhodecode/templates/admin/users/user_edit.html:141
+#: rhodecode/templates/admin/users/user_edit.html:186
+#: rhodecode/templates/admin/users/user_edit.html:235
+#: rhodecode/templates/admin/users/user_edit.html:283
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:89
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:136
+#: rhodecode/templates/files/files_add.html:80
+#: rhodecode/templates/files/files_edit.html:66
+#: rhodecode/templates/pullrequests/pullrequest.html:110
+msgid "Reset"
+msgstr "Réinitialiser"
+
+#: rhodecode/templates/admin/permissions/permissions.html:103
+#, fuzzy
+msgid "Default User Permissions"
+msgstr "Permissions par défaut"
+
+#: rhodecode/templates/admin/permissions/permissions.html:113
+#: rhodecode/templates/admin/users/user_edit.html:244
+#, fuzzy
+msgid "Allowed IP addresses"
+msgstr "Adresses e-mail"
+
+#: rhodecode/templates/admin/permissions/permissions.html:127
+#: rhodecode/templates/admin/repos/repo_edit.html:347
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:70
+#: rhodecode/templates/admin/users/user_edit.html:212
+#: rhodecode/templates/admin/users/user_edit.html:257
+#: rhodecode/templates/admin/users_groups/users_groups.html:46
+#: rhodecode/templates/data_table/_dt_elements.html:122
+#: rhodecode/templates/data_table/_dt_elements.html:130
+msgid "delete"
+msgstr "Supprimer"
+
+#: rhodecode/templates/admin/permissions/permissions.html:128
+#: rhodecode/templates/admin/users/user_edit.html:258
+#, fuzzy, python-format
+msgid "Confirm to delete this ip: %s"
+msgstr "Veuillez confirmer la suppression de l’e-mail : %s"
+
+#: rhodecode/templates/admin/permissions/permissions.html:134
+#: rhodecode/templates/admin/users/user_edit.html:264
+msgid "All IP addresses are allowed"
+msgstr ""
+
+#: rhodecode/templates/admin/permissions/permissions.html:145
+#: rhodecode/templates/admin/users/user_edit.html:275
+#, fuzzy
+msgid "New ip address"
+msgstr "Nouvelle adrese"
+
+#: rhodecode/templates/admin/permissions/permissions.html:153
+#: rhodecode/templates/admin/repos/repo_add_base.html:73
+#: rhodecode/templates/admin/repos/repo_edit.html:387
+#: rhodecode/templates/admin/users/user_edit.html:234
+#: rhodecode/templates/admin/users/user_edit.html:282
+msgid "Add"
+msgstr "Ajouter"
+
+#: rhodecode/templates/admin/repos/repo_add.html:12
+#: rhodecode/templates/admin/repos/repo_add.html:16
+#: rhodecode/templates/base/base.html:69 rhodecode/templates/base/base.html:103
+#: rhodecode/templates/base/base.html:263
 msgid "Repositories"
 msgstr "Dépôts"
 
-#: rhodecode/templates/admin/repos/repo_add.html:13
-msgid "add new"
+#: rhodecode/templates/admin/repos/repo_add.html:19
+#, fuzzy
+msgid "Add new"
 msgstr "ajouter un nouveau"
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:20
-#: rhodecode/templates/summary/summary.html:104
-#: rhodecode/templates/summary/summary.html:105
+#: rhodecode/templates/summary/summary.html:96
+#: rhodecode/templates/summary/summary.html:97
 msgid "Clone from"
 msgstr "Cloner depuis"
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:24
 #: rhodecode/templates/admin/repos/repo_edit.html:44
-#: rhodecode/templates/settings/repo_settings.html:43
 msgid "Optional http[s] url from which repository should be cloned."
 msgstr "URL http(s) depuis laquelle le dépôt doit être cloné."
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:33
-#: rhodecode/templates/forks/fork.html:54
+#: rhodecode/templates/forks/fork.html:51
 msgid "Optionaly select a group to put this repository into."
 msgstr "Sélectionnez un groupe (optionel) dans lequel sera placé le dépôt."
 
@@ -2000,15 +2293,13 @@
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:47
 #: rhodecode/templates/admin/repos/repo_edit.html:66
-#: rhodecode/templates/forks/fork.html:41
-#: rhodecode/templates/settings/repo_settings.html:57
+#: rhodecode/templates/forks/fork.html:38
 msgid "Landing revision"
 msgstr "Révision d’arrivée"
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:51
 #: rhodecode/templates/admin/repos/repo_edit.html:70
-#: rhodecode/templates/forks/fork.html:45
-#: rhodecode/templates/settings/repo_settings.html:61
+#: rhodecode/templates/forks/fork.html:42
 msgid "Default revision for files page, downloads, whoosh and readme"
 msgstr ""
 "Révision par défaut pour les pages de fichiers, de téléchargements, de "
@@ -2016,45 +2307,29 @@
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:60
 #: rhodecode/templates/admin/repos/repo_edit.html:79
-#: rhodecode/templates/forks/fork.html:63
-#: rhodecode/templates/settings/repo_settings.html:70
+#: rhodecode/templates/forks/fork.html:60
 msgid "Keep it short and to the point. Use a README file for longer descriptions."
 msgstr ""
 "Gardez cette description précise et concise. Utilisez un fichier README "
 "pour des descriptions plus détaillées."
 
-#: rhodecode/templates/admin/repos/repo_add_base.html:73
-msgid "add"
-msgstr "Ajouter"
-
-#: rhodecode/templates/admin/repos/repo_add_create_repository.html:9
-msgid "add new repository"
-msgstr "ajouter un nouveau dépôt"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:5
+#: rhodecode/templates/admin/repos/repo_edit.html:8
 msgid "Edit repository"
 msgstr "Éditer le dépôt"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:13
-#: rhodecode/templates/admin/users/user_edit.html:13
-#: rhodecode/templates/admin/users/user_edit.html:228
-#: rhodecode/templates/admin/users/user_edit.html:230
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:28
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:13
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:207
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:209
-#: rhodecode/templates/files/files_source.html:29
-#: rhodecode/templates/journal/journal_page_repos.html:29
-msgid "edit"
-msgstr "éditer"
+#: rhodecode/templates/admin/repos/repo_edit.html:12
+#: rhodecode/templates/admin/settings/hooks.html:9
+#: rhodecode/templates/admin/settings/settings.html:11
+#: rhodecode/templates/base/base.html:76 rhodecode/templates/base/base.html:121
+#: rhodecode/templates/summary/summary.html:212
+msgid "Settings"
+msgstr "Options"
 
 #: rhodecode/templates/admin/repos/repo_edit.html:40
-#: rhodecode/templates/settings/repo_settings.html:39
 msgid "Clone uri"
 msgstr "URL de clone"
 
 #: rhodecode/templates/admin/repos/repo_edit.html:53
-#: rhodecode/templates/settings/repo_settings.html:52
 msgid "Optional select a group to put this repository into."
 msgstr "Sélectionnez un groupe (optionel) dans lequel sera placé le dépôt."
 
@@ -2062,72 +2337,56 @@
 msgid "Change owner of this repository."
 msgstr "Changer le propriétaire de ce dépôt."
 
-#: rhodecode/templates/admin/repos/repo_edit.html:142
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:75
-#: rhodecode/templates/admin/settings/settings.html:113
-#: rhodecode/templates/admin/settings/settings.html:179
-#: rhodecode/templates/admin/settings/settings.html:269
-#: rhodecode/templates/admin/users/user_edit.html:134
-#: rhodecode/templates/admin/users/user_edit.html:179
-#: rhodecode/templates/admin/users/user_edit.html:282
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:80
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:136
-#: rhodecode/templates/files/files_add.html:82
-#: rhodecode/templates/files/files_edit.html:68
-#: rhodecode/templates/pullrequests/pullrequest.html:124
-#: rhodecode/templates/settings/repo_settings.html:95
-msgid "Reset"
-msgstr "Réinitialiser"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:152
-msgid "Administration"
-msgstr "Administration"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:155
+#: rhodecode/templates/admin/repos/repo_edit.html:184
+#, fuzzy
+msgid "Advanced settings"
+msgstr "Enregister les options"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:187
 msgid "Statistics"
 msgstr "Statistiques"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:159
+#: rhodecode/templates/admin/repos/repo_edit.html:191
 msgid "Reset current statistics"
 msgstr "Réinitialiser les statistiques"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:159
+#: rhodecode/templates/admin/repos/repo_edit.html:191
 msgid "Confirm to remove current statistics"
 msgstr "Souhaitez-vous vraiment réinitialiser les statistiques de ce dépôt ?"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:162
+#: rhodecode/templates/admin/repos/repo_edit.html:194
 msgid "Fetched to rev"
 msgstr "Parcouru jusqu’à la révision"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:163
+#: rhodecode/templates/admin/repos/repo_edit.html:195
 msgid "Stats gathered"
 msgstr "Statistiques obtenues"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:171
+#: rhodecode/templates/admin/repos/repo_edit.html:203
 msgid "Remote"
 msgstr "Dépôt distant"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:175
+#: rhodecode/templates/admin/repos/repo_edit.html:207
 msgid "Pull changes from remote location"
 msgstr "Récupérer les changements depuis le site distant"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:175
+#: rhodecode/templates/admin/repos/repo_edit.html:207
 msgid "Confirm to pull changes from remote side"
 msgstr "Voulez-vous vraiment récupérer les changements depuis le site distant ?"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:186
+#: rhodecode/templates/admin/repos/repo_edit.html:218
 msgid "Cache"
 msgstr "Cache"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:190
+#: rhodecode/templates/admin/repos/repo_edit.html:222
 msgid "Invalidate repository cache"
 msgstr "Invalider le cache du dépôt"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:190
+#: rhodecode/templates/admin/repos/repo_edit.html:222
 msgid "Confirm to invalidate repository cache"
 msgstr "Voulez-vous vraiment invalider le cache du dépôt ?"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:193
+#: rhodecode/templates/admin/repos/repo_edit.html:225
 msgid ""
 "Manually invalidate cache for this repository. On first access repository"
 " will be cached again"
@@ -2135,43 +2394,44 @@
 "Invalide manuellement le cache de ce dépôt. Au prochain accès sur ce "
 "dépôt, il sera à nouveau mis en cache."
 
-#: rhodecode/templates/admin/repos/repo_edit.html:198
+#: rhodecode/templates/admin/repos/repo_edit.html:230
 msgid "List of cached values"
 msgstr "Liste des valeurs en cache"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:201
+#: rhodecode/templates/admin/repos/repo_edit.html:233
 msgid "Prefix"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:202
+#: rhodecode/templates/admin/repos/repo_edit.html:234
 #, fuzzy
 msgid "Key"
 msgstr "Clé d’API"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:203
+#: rhodecode/templates/admin/repos/repo_edit.html:235
 #: rhodecode/templates/admin/users/user_add.html:86
-#: rhodecode/templates/admin/users/user_edit.html:117
+#: rhodecode/templates/admin/users/user_edit.html:124
+#: rhodecode/templates/admin/users/users.html:84
 #: rhodecode/templates/admin/users_groups/users_group_add.html:41
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:42
+#: rhodecode/templates/admin/users_groups/users_groups.html:36
 msgid "Active"
 msgstr "Actif"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:218
-#: rhodecode/templates/base/base.html:331
-#: rhodecode/templates/base/base.html:333
-#: rhodecode/templates/base/base.html:335
+#: rhodecode/templates/admin/repos/repo_edit.html:250
+#: rhodecode/templates/base/base.html:280
+#: rhodecode/templates/base/base.html:281
 msgid "Public journal"
 msgstr "Journal public"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:224
+#: rhodecode/templates/admin/repos/repo_edit.html:256
 msgid "Remove from public journal"
 msgstr "Supprimer du journal public"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:226
+#: rhodecode/templates/admin/repos/repo_edit.html:258
 msgid "Add to public journal"
 msgstr "Ajouter le dépôt au journal public"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:231
+#: rhodecode/templates/admin/repos/repo_edit.html:263
 msgid ""
 "All actions made on this repository will be accessible to everyone in "
 "public journal"
@@ -2179,66 +2439,84 @@
 "Le descriptif des actions réalisées sur ce dépôt sera visible à tous "
 "depuis le journal public."
 
-#: rhodecode/templates/admin/repos/repo_edit.html:238
+#: rhodecode/templates/admin/repos/repo_edit.html:270
 msgid "Locking"
 msgstr "Verrouillage"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:243
+#: rhodecode/templates/admin/repos/repo_edit.html:275
 msgid "Unlock locked repo"
 msgstr "Déverrouiller le dépôt"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:243
+#: rhodecode/templates/admin/repos/repo_edit.html:275
 msgid "Confirm to unlock repository"
 msgstr "Veuillez confirmer le déverrouillage de ce dépôt."
 
-#: rhodecode/templates/admin/repos/repo_edit.html:246
+#: rhodecode/templates/admin/repos/repo_edit.html:278
 msgid "lock repo"
 msgstr "Verrouiller le dépôt"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:246
+#: rhodecode/templates/admin/repos/repo_edit.html:278
 msgid "Confirm to lock repository"
 msgstr "Veuillez confirmer le verrouillage de ce dépôt."
 
-#: rhodecode/templates/admin/repos/repo_edit.html:247
+#: rhodecode/templates/admin/repos/repo_edit.html:279
 msgid "Repository is not locked"
 msgstr "Ce dépôt n’est pas verrouillé."
 
-#: rhodecode/templates/admin/repos/repo_edit.html:252
+#: rhodecode/templates/admin/repos/repo_edit.html:284
 msgid "Force locking on repository. Works only when anonymous access is disabled"
 msgstr ""
 "Forcer le verrouillage du dépôt. Ce réglage fonctionne uniquement quand "
 "l‘accès anonyme est désactivé."
 
-#: rhodecode/templates/admin/repos/repo_edit.html:259
+#: rhodecode/templates/admin/repos/repo_edit.html:291
 msgid "Set as fork of"
 msgstr "Indiquer comme fork"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:268
+#: rhodecode/templates/admin/repos/repo_edit.html:296
+msgid "set"
+msgstr "Définir"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:300
 msgid "Manually set this repository as a fork of another from the list"
 msgstr "Marquer ce dépôt comme fork d’un autre dépôt de la liste."
 
-#: rhodecode/templates/admin/repos/repo_edit.html:274
-#: rhodecode/templates/changeset/changeset_file_comment.html:26
+#: rhodecode/templates/admin/repos/repo_edit.html:306
+#: rhodecode/templates/changeset/changeset_file_comment.html:41
 msgid "Delete"
 msgstr "Supprimer"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:278
-#: rhodecode/templates/settings/repo_settings.html:115
+#: rhodecode/templates/admin/repos/repo_edit.html:315
 msgid "Remove this repository"
 msgstr "Supprimer ce dépôt"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:278
-#: rhodecode/templates/settings/repo_settings.html:115
+#: rhodecode/templates/admin/repos/repo_edit.html:315
 msgid "Confirm to delete this repository"
 msgstr "Voulez-vous vraiment supprimer ce dépôt ?"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:282
-#: rhodecode/templates/settings/repo_settings.html:119
+#: rhodecode/templates/admin/repos/repo_edit.html:317
+#, fuzzy, python-format
+msgid "this repository has %s fork"
+msgid_plural "this repository has %s forks"
+msgstr[0] "[a créé] le dépôt en tant que %s fork"
+msgstr[1] "[a créé] le dépôt en tant que %s fork"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:318
+#, fuzzy
+msgid "Detach forks"
+msgstr "Indiquer comme fork"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:319
+#, fuzzy
+msgid "Delete forks"
+msgstr "Supprimer"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:322
 #, fuzzy
 msgid ""
 "This repository will be renamed in a special way in order to be "
-"unaccesible for RhodeCode and VCS systems. If you need fully delete it "
-"from file system please do it manually"
+"unaccesible for RhodeCode and VCS systems. If you need to fully delete it"
+" from file system please do it manually"
 msgstr ""
 "Ce dépôt sera renommé de manière à le rendre inaccessible à RhodeCode et "
 "au système de gestion de versions.\n"
@@ -2248,6 +2526,37 @@
 "Si vous voulez le supprimer complètement, effectuez la suppression "
 "manuellement."
 
+#: rhodecode/templates/admin/repos/repo_edit.html:336
+msgid "Extra fields"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:348
+#, fuzzy, python-format
+msgid "Confirm to delete this field: %s"
+msgstr "Veuillez confirmer la suppression de l’e-mail : %s"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:362
+#, fuzzy
+msgid "New field key"
+msgstr "Ajouter un fichier"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:370
+msgid "New field label"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:373
+msgid "Enter short label"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:379
+#, fuzzy
+msgid "New field description"
+msgstr "Description"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:382
+msgid "Enter description of a field"
+msgstr ""
+
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:3
 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:3
 msgid "none"
@@ -2265,8 +2574,6 @@
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:6
 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:6
-#: rhodecode/templates/admin/users/users.html:85
-#: rhodecode/templates/base/base.html:229
 msgid "admin"
 msgstr "Administration"
 
@@ -2276,80 +2583,62 @@
 msgstr "Membre"
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:16
-#: rhodecode/templates/data_table/_dt_elements.html:67
-#: rhodecode/templates/journal/journal.html:95
-#: rhodecode/templates/summary/summary.html:85
 msgid "private repository"
 msgstr "Dépôt privé"
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:19
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:28
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:18
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:20
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:35
 msgid "default"
 msgstr "[Par défaut]"
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:33
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:58
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:23
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:42
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:25
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:55
 msgid "revoke"
 msgstr "Révoquer"
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:83
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:67
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:80
 msgid "Add another member"
 msgstr "Ajouter un utilisateur"
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:97
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:100
 msgid "Failed to remove user"
 msgstr "Échec de suppression de l’utilisateur"
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:112
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:103
-msgid "Failed to remove users group"
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:116
+#, fuzzy
+msgid "Failed to remove user group"
 msgstr "Erreur lors de la suppression du groupe d’utilisateurs."
 
 #: rhodecode/templates/admin/repos/repos.html:5
 msgid "Repositories administration"
 msgstr "Administration des dépôts"
 
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:73
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:86
 msgid "apply to children"
 msgstr "Appliquer aux enfants"
 
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:74
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87
+#, fuzzy
 msgid ""
-"Set or revoke permission to all children of that group, including "
-"repositories and other groups"
+"Set or revoke permission to all children of that group, including non-"
+"private repositories and other groups"
 msgstr ""
 "Applique ou révoque les permissions sur tous les éléments de ce groupe, "
 "notamment les dépôts et sous-groupes."
 
+#: rhodecode/templates/admin/repos_groups/repos_groups.html:4
+#, python-format
+msgid "%s Group Dashboard"
+msgstr ""
+
 #: rhodecode/templates/admin/repos_groups/repos_groups.html:9
-#: rhodecode/templates/base/base.html:122
-#: rhodecode/templates/base/base.html:313
-#: rhodecode/templates/base/base.html:315
-#: rhodecode/templates/base/base.html:317
-#: rhodecode/templates/bookmarks/bookmarks.html:11
-#: rhodecode/templates/branches/branches.html:10
-#: rhodecode/templates/changelog/changelog.html:10
-#: rhodecode/templates/changeset/changeset.html:10
-#: rhodecode/templates/changeset/changeset_range.html:9
-#: rhodecode/templates/compare/compare_diff.html:9
-#: rhodecode/templates/files/file_diff.html:8
-#: rhodecode/templates/files/files.html:8
-#: rhodecode/templates/files/files_add.html:15
-#: rhodecode/templates/files/files_edit.html:15
-#: rhodecode/templates/followers/followers.html:9
-#: rhodecode/templates/forks/fork.html:9 rhodecode/templates/forks/forks.html:9
-#: rhodecode/templates/pullrequests/pullrequest.html:8
-#: rhodecode/templates/pullrequests/pullrequest_show.html:8
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8
-#: rhodecode/templates/settings/repo_settings.html:9
-#: rhodecode/templates/shortlog/shortlog.html:10
-#: rhodecode/templates/summary/summary.html:8
-#: rhodecode/templates/tags/tags.html:11
 msgid "Home"
 msgstr "Accueil"
 
@@ -2358,40 +2647,48 @@
 msgstr "comprenant"
 
 #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:5
-msgid "Add repos group"
-msgstr "Créer un groupe de dépôt"
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:10
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:10
-msgid "Repos groups"
-msgstr "Groupes de dépôts"
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:12
-msgid "add new repos group"
+#, fuzzy
+msgid "Add repository group"
+msgstr "Groupe de dépôt"
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:11
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:11
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:16
+#: rhodecode/templates/base/base.html:70 rhodecode/templates/base/base.html:82
+#, fuzzy
+msgid "Repository groups"
+msgstr "Groupe de dépôt"
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:13
+#, fuzzy
+msgid "Add new repository group"
 msgstr "Nouveau groupe de dépôt"
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:50
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:50
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:51
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:56
 msgid "Group parent"
 msgstr "Parent du groupe"
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:58
-#: rhodecode/templates/admin/users/user_add.html:94
-#: rhodecode/templates/admin/users_groups/users_group_add.html:49
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:90
-#: rhodecode/templates/pullrequests/pullrequest_show.html:131
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:59
 msgid "save"
 msgstr "Enregistrer"
 
 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:5
-msgid "Edit repos group"
-msgstr "Éditer le groupe de dépôt"
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:12
-msgid "edit repos group"
+#, fuzzy
+msgid "Edit repository group"
 msgstr "Édition du groupe de dépôt"
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:70
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:13
+#, fuzzy, python-format
+msgid "Edit repository group %s"
+msgstr "Édition du groupe de dépôt %s"
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:27
+#, fuzzy
+msgid "Add child group"
+msgstr "Ajouter un nouveau groupe"
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:76
 msgid ""
 "Enable lock-by-pulling on group. This option will be applied to all other"
 " groups and repositories inside"
@@ -2400,40 +2697,38 @@
 "appliquée à tous les sous-groupes et dépôts de ce groupe."
 
 #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:5
-msgid "Repositories groups administration"
+#, fuzzy
+msgid "Repository groups administration"
 msgstr "Administration des groupes de dépôts"
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:22
-msgid "ADD NEW GROUP"
-msgstr "AJOUTER UN NOUVEAU GROUPE"
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:35
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:45
 msgid "Number of toplevel repositories"
 msgstr "Nombre de sous-dépôts"
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:36
-#: rhodecode/templates/admin/users/users.html:87
-#: rhodecode/templates/admin/users_groups/users_groups.html:35
-msgid "action"
-msgstr "Action"
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55
-#: rhodecode/templates/admin/users/user_edit.html:259
-#: rhodecode/templates/admin/users_groups/users_groups.html:44
-#: rhodecode/templates/data_table/_dt_elements.html:7
-#: rhodecode/templates/data_table/_dt_elements.html:121
-msgid "delete"
-msgstr "Supprimer"
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:64
+#, fuzzy
+msgid "Edit"
+msgstr "éditer"
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:65
+#: rhodecode/templates/base/perms_summary.html:29
+#: rhodecode/templates/base/perms_summary.html:48
+#: rhodecode/templates/base/perms_summary.html:50
+#: rhodecode/templates/data_table/_dt_elements.html:116
+#: rhodecode/templates/data_table/_dt_elements.html:117
+msgid "edit"
+msgstr "éditer"
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:70
 #, fuzzy, python-format
 msgid "Confirm to delete this group: %s with %s repository"
 msgid_plural "Confirm to delete this group: %s with %s repositories"
 msgstr[0] ""
 msgstr[1] ""
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:63
-msgid "There are no repositories groups yet"
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:78
+#, fuzzy
+msgid "There are no repository groups yet"
 msgstr "Aucun groupe de dépôts n’a été créé pour le moment."
 
 #: rhodecode/templates/admin/settings/hooks.html:5
@@ -2441,12 +2736,6 @@
 msgid "Settings administration"
 msgstr "Administration générale"
 
-#: rhodecode/templates/admin/settings/hooks.html:9
-#: rhodecode/templates/admin/settings/settings.html:9
-#: rhodecode/templates/settings/repo_settings.html:13
-msgid "Settings"
-msgstr "Options"
-
 #: rhodecode/templates/admin/settings/hooks.html:24
 msgid "Built in hooks - read only"
 msgstr "Hooks prédéfinis (lecture seule)"
@@ -2463,15 +2752,16 @@
 msgid "Failed to remove hook"
 msgstr "Erreur lors de la suppression du hook."
 
-#: rhodecode/templates/admin/settings/settings.html:24
+#: rhodecode/templates/admin/settings/settings.html:26
 msgid "Remap and rescan repositories"
 msgstr "Ré-associer et re-scanner les dépôts"
 
-#: rhodecode/templates/admin/settings/settings.html:32
-msgid "rescan option"
+#: rhodecode/templates/admin/settings/settings.html:34
+#, fuzzy
+msgid "Rescan option"
 msgstr "Option de re-scan"
 
-#: rhodecode/templates/admin/settings/settings.html:38
+#: rhodecode/templates/admin/settings/settings.html:40
 msgid ""
 "In case a repository was deleted from filesystem and there are leftovers "
 "in the database check this option to scan obsolete data in database and "
@@ -2480,11 +2770,12 @@
 "Cochez cette option pour supprimer d’éventuelles données obsolètes "
 "(concernant des dépôts manuellement supprimés) de la base de données."
 
-#: rhodecode/templates/admin/settings/settings.html:39
-msgid "destroy old data"
+#: rhodecode/templates/admin/settings/settings.html:41
+#, fuzzy
+msgid "Destroy old data"
 msgstr "Supprimer les données obsolètes"
 
-#: rhodecode/templates/admin/settings/settings.html:41
+#: rhodecode/templates/admin/settings/settings.html:43
 msgid ""
 "Rescan repositories location for new repositories. Also deletes obsolete "
 "if `destroy` flag is checked "
@@ -2493,94 +2784,102 @@
 "Supprime égalements les entrées de dépôts obsolètes si « Supprimer les "
 "données obsolètes » est coché."
 
-#: rhodecode/templates/admin/settings/settings.html:46
+#: rhodecode/templates/admin/settings/settings.html:48
 msgid "Rescan repositories"
 msgstr "Re-scanner les dépôts"
 
-#: rhodecode/templates/admin/settings/settings.html:52
+#: rhodecode/templates/admin/settings/settings.html:54
 msgid "Whoosh indexing"
 msgstr "Indexation Whoosh"
 
-#: rhodecode/templates/admin/settings/settings.html:60
-msgid "index build option"
+#: rhodecode/templates/admin/settings/settings.html:62
+#, fuzzy
+msgid "Index build option"
 msgstr "Option d’indexation"
 
-#: rhodecode/templates/admin/settings/settings.html:65
-msgid "build from scratch"
+#: rhodecode/templates/admin/settings/settings.html:67
+#, fuzzy
+msgid "Build from scratch"
 msgstr "Purger et reconstruire l’index"
 
-#: rhodecode/templates/admin/settings/settings.html:71
+#: rhodecode/templates/admin/settings/settings.html:73
 msgid "Reindex"
 msgstr "Mettre à jour l’index"
 
-#: rhodecode/templates/admin/settings/settings.html:77
+#: rhodecode/templates/admin/settings/settings.html:79
 msgid "Global application settings"
 msgstr "Réglages d’application globaux"
 
-#: rhodecode/templates/admin/settings/settings.html:86
-msgid "Application name"
-msgstr "Nom de l’application"
-
-#: rhodecode/templates/admin/settings/settings.html:95
-msgid "Realm text"
-msgstr "Texte du royaume"
-
-#: rhodecode/templates/admin/settings/settings.html:104
-msgid "GA code"
-msgstr "Code GA"
-
-#: rhodecode/templates/admin/settings/settings.html:112
-#: rhodecode/templates/admin/settings/settings.html:178
-#: rhodecode/templates/admin/settings/settings.html:268
+#: rhodecode/templates/admin/settings/settings.html:88
+msgid "Site branding"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:97
+msgid "HTTP authentication realm"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:106
+msgid "Google Analytics code"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:114
+#: rhodecode/templates/admin/settings/settings.html:186
+#: rhodecode/templates/admin/settings/settings.html:277
 msgid "Save settings"
 msgstr "Enregister les options"
 
-#: rhodecode/templates/admin/settings/settings.html:119
+#: rhodecode/templates/admin/settings/settings.html:121
 msgid "Visualisation settings"
 msgstr "Réglages d’affichage"
 
-#: rhodecode/templates/admin/settings/settings.html:127
+#: rhodecode/templates/admin/settings/settings.html:129
 #, fuzzy
 msgid "General"
 msgstr "Activer"
 
-#: rhodecode/templates/admin/settings/settings.html:132
+#: rhodecode/templates/admin/settings/settings.html:134
 msgid "Use lightweight dashboard"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:139
+#: rhodecode/templates/admin/settings/settings.html:140
+#, fuzzy
+msgid "Use repository extra fields"
+msgstr "Dépôts"
+
+#: rhodecode/templates/admin/settings/settings.html:147
 msgid "Icons"
 msgstr "Icônes"
 
-#: rhodecode/templates/admin/settings/settings.html:144
+#: rhodecode/templates/admin/settings/settings.html:152
 msgid "Show public repo icon on repositories"
 msgstr "Afficher l’icône de dépôt public sur les dépôts"
 
-#: rhodecode/templates/admin/settings/settings.html:148
+#: rhodecode/templates/admin/settings/settings.html:156
 msgid "Show private repo icon on repositories"
 msgstr "Afficher l’icône de dépôt privé sur les dépôts"
 
-#: rhodecode/templates/admin/settings/settings.html:155
+#: rhodecode/templates/admin/settings/settings.html:163
 msgid "Meta-Tagging"
 msgstr "Meta-Tagging"
 
-#: rhodecode/templates/admin/settings/settings.html:160
+#: rhodecode/templates/admin/settings/settings.html:168
 msgid "Stylify recognised metatags:"
 msgstr "Styliser les méta-tags reconnus :"
 
-#: rhodecode/templates/admin/settings/settings.html:187
+#: rhodecode/templates/admin/settings/settings.html:195
 msgid "VCS settings"
 msgstr "Réglages de gestionnaire de version"
 
-#: rhodecode/templates/admin/settings/settings.html:196
+#: rhodecode/templates/admin/settings/settings.html:204
 msgid "Web"
 msgstr "Web"
 
-#: rhodecode/templates/admin/settings/settings.html:201
-msgid "require ssl for vcs operations"
+#: rhodecode/templates/admin/settings/settings.html:209
+#, fuzzy
+msgid "Require SSL for vcs operations"
 msgstr "SSL requis pour les opérations de push/pull"
 
-#: rhodecode/templates/admin/settings/settings.html:203
+#: rhodecode/templates/admin/settings/settings.html:211
 msgid ""
 "RhodeCode will require SSL for pushing or pulling. If SSL is missing it "
 "will return HTTP Error 406: Not Acceptable"
@@ -2588,55 +2887,59 @@
 "RhodeCode requièrera SSL pour les pushs et pulls. Si le SSL n’est pas "
 "utilisé l’erreur HTTP 406 (Non Acceptable) sera renvoyée."
 
-#: rhodecode/templates/admin/settings/settings.html:209
+#: rhodecode/templates/admin/settings/settings.html:217
 msgid "Hooks"
 msgstr "Hooks"
 
-#: rhodecode/templates/admin/settings/settings.html:214
+#: rhodecode/templates/admin/settings/settings.html:222
 msgid "Update repository after push (hg update)"
 msgstr "Mettre à jour les dépôts après un push (hg update)"
 
-#: rhodecode/templates/admin/settings/settings.html:218
+#: rhodecode/templates/admin/settings/settings.html:226
 msgid "Show repository size after push"
 msgstr "Afficher la taille du dépôt après un push"
 
-#: rhodecode/templates/admin/settings/settings.html:222
+#: rhodecode/templates/admin/settings/settings.html:230
 msgid "Log user push commands"
 msgstr "Journaliser les commandes de push"
 
-#: rhodecode/templates/admin/settings/settings.html:226
+#: rhodecode/templates/admin/settings/settings.html:234
 msgid "Log user pull commands"
 msgstr "Journaliser les commandes de pull"
 
-#: rhodecode/templates/admin/settings/settings.html:230
-msgid "advanced setup"
+#: rhodecode/templates/admin/settings/settings.html:238
+#, fuzzy
+msgid "Advanced setup"
 msgstr "Avancé"
 
-#: rhodecode/templates/admin/settings/settings.html:235
+#: rhodecode/templates/admin/settings/settings.html:243
 msgid "Mercurial Extensions"
 msgstr "Extensions Mercurial"
 
-#: rhodecode/templates/admin/settings/settings.html:240
-msgid "largefiles extensions"
+#: rhodecode/templates/admin/settings/settings.html:248
+#, fuzzy
+msgid "Enable largefiles extension"
 msgstr "Extensions largefiles"
 
-#: rhodecode/templates/admin/settings/settings.html:244
-msgid "hgsubversion extensions"
+#: rhodecode/templates/admin/settings/settings.html:252
+#, fuzzy
+msgid "Enable hgsubversion extension"
 msgstr "Extensions hgsubversion"
 
-#: rhodecode/templates/admin/settings/settings.html:246
+#: rhodecode/templates/admin/settings/settings.html:254
+#, fuzzy
 msgid ""
-"Requires hgsubversion library installed. Allows clonning from svn remote "
+"Requires hgsubversion library installed. Allows cloning from svn remote "
 "locations"
 msgstr ""
 "Ceci nécessite l’installation de la bibliothèque hgsubversion. Permet de "
 "clôner à partir de dépôts Suversion."
 
-#: rhodecode/templates/admin/settings/settings.html:256
+#: rhodecode/templates/admin/settings/settings.html:264
 msgid "Repositories location"
 msgstr "Emplacement des dépôts"
 
-#: rhodecode/templates/admin/settings/settings.html:261
+#: rhodecode/templates/admin/settings/settings.html:269
 msgid ""
 "This a crucial application setting. If you are really sure you need to "
 "change this, you must restart application in order to make this setting "
@@ -2646,12 +2949,13 @@
 "vraiment le faire, redémarrer l’application une fois le changement "
 "effectué. Cliquez sur ce texte pour déverrouiller."
 
-#: rhodecode/templates/admin/settings/settings.html:262
-#: rhodecode/templates/base/base.html:221
-msgid "unlock"
+#: rhodecode/templates/admin/settings/settings.html:270
+#: rhodecode/templates/base/base.html:131
+#, fuzzy
+msgid "Unlock"
 msgstr "Déverrouiller"
 
-#: rhodecode/templates/admin/settings/settings.html:263
+#: rhodecode/templates/admin/settings/settings.html:272
 msgid ""
 "Location where repositories are stored. After changing this value a "
 "restart, and rescan is required"
@@ -2659,25 +2963,26 @@
 "Emplacement de stockage des dépôts. Si cette valeur est changée, "
 "Rhodecode devra être redémarré les les dépôts rescannés."
 
-#: rhodecode/templates/admin/settings/settings.html:283
+#: rhodecode/templates/admin/settings/settings.html:292
 msgid "Test Email"
 msgstr "E-mail de test"
 
-#: rhodecode/templates/admin/settings/settings.html:291
+#: rhodecode/templates/admin/settings/settings.html:300
 msgid "Email to"
 msgstr "Envoyer l’e-mail à"
 
-#: rhodecode/templates/admin/settings/settings.html:299
+#: rhodecode/templates/admin/settings/settings.html:308
 msgid "Send"
 msgstr "Envoyer"
 
-#: rhodecode/templates/admin/settings/settings.html:305
+#: rhodecode/templates/admin/settings/settings.html:314
 msgid "System Info and Packages"
 msgstr "Information système et paquets"
 
-#: rhodecode/templates/admin/settings/settings.html:308
-msgid "show"
-msgstr "Montrer"
+#: rhodecode/templates/admin/settings/settings.html:317
+#: rhodecode/templates/changelog/changelog.html:42
+msgid "Show"
+msgstr "Afficher"
 
 #: rhodecode/templates/admin/users/user_add.html:5
 msgid "Add user"
@@ -2685,11 +2990,14 @@
 
 #: rhodecode/templates/admin/users/user_add.html:10
 #: rhodecode/templates/admin/users/user_edit.html:11
+#: rhodecode/templates/base/base.html:71
 msgid "Users"
 msgstr "Utilisateurs"
 
 #: rhodecode/templates/admin/users/user_add.html:12
-msgid "add new user"
+#: rhodecode/templates/admin/users/users.html:23
+#, fuzzy
+msgid "Add new user"
 msgstr "nouvel utilisateur"
 
 #: rhodecode/templates/admin/users/user_add.html:50
@@ -2700,6 +3008,12 @@
 msgid "Edit user"
 msgstr "Éditer l'utilisateur"
 
+#: rhodecode/templates/admin/users/user_edit.html:13
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:13
+#, fuzzy, python-format
+msgid "Edit %s"
+msgstr "éditer %s"
+
 #: rhodecode/templates/admin/users/user_edit.html:34
 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:10
 msgid "Change your avatar at"
@@ -2715,26 +3029,31 @@
 msgid "API key"
 msgstr "Clé d’API"
 
-#: rhodecode/templates/admin/users/user_edit.html:63
+#: rhodecode/templates/admin/users/user_edit.html:50
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:25
+msgid "Current IP"
+msgstr ""
+
+#: rhodecode/templates/admin/users/user_edit.html:70
 msgid "LDAP DN"
 msgstr "DN LDAP"
 
-#: rhodecode/templates/admin/users/user_edit.html:72
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:35
+#: rhodecode/templates/admin/users/user_edit.html:79
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44
 msgid "New password"
 msgstr "Nouveau mot de passe"
 
-#: rhodecode/templates/admin/users/user_edit.html:81
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44
+#: rhodecode/templates/admin/users/user_edit.html:88
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:53
 msgid "New password confirmation"
 msgstr "Confirmation du nouveau mot de passe"
 
-#: rhodecode/templates/admin/users/user_edit.html:151
+#: rhodecode/templates/admin/users/user_edit.html:158
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:108
 msgid "Inherit default permissions"
 msgstr "Utiliser les permissions par défaut"
 
-#: rhodecode/templates/admin/users/user_edit.html:156
+#: rhodecode/templates/admin/users/user_edit.html:163
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:113
 #, python-format
 msgid ""
@@ -2744,53 +3063,31 @@
 "Cochez pour utiliser les permissions des les réglages %s. Si cette option"
 " est activée, les réglages ci-dessous n’auront pas d’effet."
 
-#: rhodecode/templates/admin/users/user_edit.html:162
+#: rhodecode/templates/admin/users/user_edit.html:169
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:119
 msgid "Create repositories"
 msgstr "Création de dépôts"
 
-#: rhodecode/templates/admin/users/user_edit.html:170
+#: rhodecode/templates/admin/users/user_edit.html:177
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:127
 msgid "Fork repositories"
 msgstr "Forker les dépôts"
 
-#: rhodecode/templates/admin/users/user_edit.html:190
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:22
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:39
-msgid "Nothing here yet"
-msgstr "Rien ici pour le moment"
-
-#: rhodecode/templates/admin/users/user_edit.html:197
-#: rhodecode/templates/admin/users/user_edit_my_account.html:60
-#: rhodecode/templates/admin/users/user_edit_my_account.html:217
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:185
-msgid "Permission"
-msgstr "Permission"
-
-#: rhodecode/templates/admin/users/user_edit.html:198
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:186
-msgid "Edit Permission"
-msgstr "Éditer"
-
-#: rhodecode/templates/admin/users/user_edit.html:247
+#: rhodecode/templates/admin/users/user_edit.html:200
 msgid "Email addresses"
 msgstr "Adresses e-mail"
 
-#: rhodecode/templates/admin/users/user_edit.html:260
+#: rhodecode/templates/admin/users/user_edit.html:213
 #, python-format
 msgid "Confirm to delete this email: %s"
 msgstr "Veuillez confirmer la suppression de l’e-mail : %s"
 
-#: rhodecode/templates/admin/users/user_edit.html:274
+#: rhodecode/templates/admin/users/user_edit.html:227
 msgid "New email address"
 msgstr "Nouvelle adrese"
 
-#: rhodecode/templates/admin/users/user_edit.html:281
-msgid "Add"
-msgstr "Ajouter"
-
 #: rhodecode/templates/admin/users/user_edit_my_account.html:5
-#: rhodecode/templates/base/base.html:124
+#: rhodecode/templates/base/base.html:242
 msgid "My account"
 msgstr "Mon compte"
 
@@ -2803,7 +3100,7 @@
 msgstr "Mes permissions"
 
 #: rhodecode/templates/admin/users/user_edit_my_account.html:38
-#: rhodecode/templates/journal/journal.html:49
+#: rhodecode/templates/journal/journal.html:54
 msgid "My repos"
 msgstr "Mes dépôts"
 
@@ -2811,132 +3108,107 @@
 msgid "My pull requests"
 msgstr "Mes requêtes de pull"
 
-#: rhodecode/templates/admin/users/user_edit_my_account.html:45
-msgid "Add repo"
-msgstr "Ajouter un dépôt"
-
 #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:2
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:4
+#, fuzzy
+msgid "Show closed pull requests"
+msgstr "[a fermé] la requête de pull de"
+
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:6
 msgid "Opened by me"
 msgstr "Ouvertes par moi"
 
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:10
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:15
 #, python-format
 msgid "Pull request #%s opened on %s"
 msgstr "Requête de pull nº%s ouverte le %s"
 
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:15
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:17
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:45
+#: rhodecode/templates/pullrequests/pullrequest_data.html:7
+#: rhodecode/templates/pullrequests/pullrequest_show.html:27
+#: rhodecode/templates/pullrequests/pullrequest_show.html:42
+msgid "Closed"
+msgstr "Fermée"
+
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:23
 msgid "Confirm to delete this pull request"
 msgstr "Veuillez confirmer la suppression de cette requête de pull."
 
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:26
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:30
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:51
+msgid "Nothing here yet"
+msgstr "Rien ici pour le moment"
+
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:34
 msgid "I participate in"
 msgstr "Je participe à"
 
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:33
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:30
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:42
+#: rhodecode/templates/pullrequests/pullrequest_data.html:11
 #, python-format
 msgid "Pull request #%s opened by %s on %s"
 msgstr "Requête de pull nº%s ouverte par %s le %s"
 
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:7
-#: rhodecode/templates/bookmarks/bookmarks.html:40
-#: rhodecode/templates/bookmarks/bookmarks_data.html:9
-#: rhodecode/templates/branches/branches.html:54
-#: rhodecode/templates/branches/branches_data.html:9
-#: rhodecode/templates/journal/journal_page_repos.html:8
-#: rhodecode/templates/tags/tags.html:55
-#: rhodecode/templates/tags/tags_data.html:9
-msgid "Revision"
-msgstr "Révision"
-
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:28
-#: rhodecode/templates/journal/journal_page_repos.html:29
-msgid "private"
-msgstr "privé"
-
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:31
-#: rhodecode/templates/data_table/_dt_elements.html:7
-#: rhodecode/templates/journal/journal_page_repos.html:32
-#, python-format
-msgid "Confirm to delete this repository: %s"
-msgstr "Voulez-vous vraiment supprimer le dépôt %s ?"
-
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:38
-#: rhodecode/templates/journal/journal_page_repos.html:42
-msgid "No repositories yet"
-msgstr "Aucun dépôt pour le moment"
-
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:40
-#: rhodecode/templates/journal/journal_page_repos.html:44
-msgid "create one now"
-msgstr "En créer un maintenant"
-
 #: rhodecode/templates/admin/users/users.html:5
 msgid "Users administration"
 msgstr "Administration des utilisateurs"
 
 #: rhodecode/templates/admin/users/users.html:9
-#: rhodecode/templates/base/base.html:235
 msgid "users"
 msgstr "Utilisateurs"
 
-#: rhodecode/templates/admin/users/users.html:23
-msgid "ADD NEW USER"
-msgstr "NOUVEL UTILISATEUR"
-
-#: rhodecode/templates/admin/users/users.html:77
-msgid "username"
-msgstr "Nom d’utilisateur"
-
 #: rhodecode/templates/admin/users/users.html:80
-msgid "firstname"
+#, fuzzy
+msgid "Firstname"
 msgstr "Prénom"
 
 #: rhodecode/templates/admin/users/users.html:81
-msgid "lastname"
+#, fuzzy
+msgid "Lastname"
 msgstr "Nom de famille"
 
 #: rhodecode/templates/admin/users/users.html:82
-msgid "last login"
+#, fuzzy
+msgid "Last login"
 msgstr "Dernière connexion"
 
-#: rhodecode/templates/admin/users/users.html:84
-#: rhodecode/templates/admin/users_groups/users_groups.html:34
-msgid "active"
-msgstr "Actif"
-
-#: rhodecode/templates/admin/users/users.html:86
-#: rhodecode/templates/base/base.html:238
-msgid "ldap"
-msgstr "LDAP"
-
 #: rhodecode/templates/admin/users_groups/users_group_add.html:5
-msgid "Add users group"
+#, fuzzy
+msgid "Add user group"
 msgstr "Ajouter un groupe d’utilisateur"
 
 #: rhodecode/templates/admin/users_groups/users_group_add.html:10
-#: rhodecode/templates/admin/users_groups/users_groups.html:9
-msgid "Users groups"
+#: rhodecode/templates/admin/users_groups/users_groups.html:11
+#: rhodecode/templates/base/base.html:72
+#, fuzzy
+msgid "User groups"
 msgstr "Groupes d’utilisateurs"
 
 #: rhodecode/templates/admin/users_groups/users_group_add.html:12
-msgid "add new users group"
+#: rhodecode/templates/admin/users_groups/users_groups.html:25
+#, fuzzy
+msgid "Add new user group"
 msgstr "Ajouter un nouveau groupe"
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:5
-msgid "Edit users group"
+#, fuzzy
+msgid "Edit user group"
 msgstr "Éditer le groupe d’utilisateurs"
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:11
-msgid "UsersGroups"
-msgstr "UsersGroups"
+#, fuzzy
+msgid "UserGroups"
+msgstr "Groupes d’utilisateurs"
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:50
+#: rhodecode/templates/admin/users_groups/users_groups.html:35
 msgid "Members"
 msgstr "Membres"
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:58
-msgid "Choosen group members"
+#, fuzzy
+msgid "Chosen group members"
 msgstr "Membres du groupe"
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:61
@@ -2951,267 +3223,281 @@
 msgid "Add all elements"
 msgstr "Tout ajouter"
 
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:146
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:150
 msgid "Group members"
 msgstr "Membres du groupe"
 
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:163
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:167
 #, fuzzy
 msgid "No members yet"
 msgstr "Membres"
 
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:171
+#: rhodecode/templates/admin/users_groups/users_groups.html:5
 #, fuzzy
-msgid "Permissions defined for this group"
-msgstr "Gestion des permissions"
-
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:178
-#, fuzzy
-msgid "No permissions set yet"
-msgstr "Copier les permissions"
-
-#: rhodecode/templates/admin/users_groups/users_groups.html:5
-msgid "Users groups administration"
+msgid "User groups administration"
 msgstr "Gestion des groupes d’utilisateurs"
 
-#: rhodecode/templates/admin/users_groups/users_groups.html:23
-msgid "ADD NEW USER GROUP"
-msgstr "AJOUTER UN NOUVEAU GROUPE"
-
-#: rhodecode/templates/admin/users_groups/users_groups.html:32
-msgid "group name"
-msgstr "Nom du groupe"
-
-#: rhodecode/templates/admin/users_groups/users_groups.html:33
-#: rhodecode/templates/base/root.html:46
-msgid "members"
-msgstr "Membres"
-
-#: rhodecode/templates/admin/users_groups/users_groups.html:45
-#, python-format
-msgid "Confirm to delete this users group: %s"
+#: rhodecode/templates/admin/users_groups/users_groups.html:47
+#, fuzzy, python-format
+msgid "Confirm to delete this user group: %s"
 msgstr "Voulez-vous vraiment supprimer le groupe d‘utilisateurs « %s » ?"
 
-#: rhodecode/templates/base/base.html:41
+#: rhodecode/templates/base/base.html:42
 msgid "Submit a bug"
 msgstr "Signaler un bogue"
 
-#: rhodecode/templates/base/base.html:77
-msgid "Login to your account"
-msgstr "Connexion à votre compte"
-
-#: rhodecode/templates/base/base.html:100
-msgid "Forgot password ?"
-msgstr "Mot de passe oublié ?"
-
-#: rhodecode/templates/base/base.html:107
-msgid "Log In"
-msgstr "Connexion"
+#: rhodecode/templates/base/base.html:108
+#: rhodecode/templates/data_table/_dt_elements.html:9
+#: rhodecode/templates/data_table/_dt_elements.html:11
+#: rhodecode/templates/data_table/_dt_elements.html:13
+#: rhodecode/templates/pullrequests/pullrequest_show.html:81
+#: rhodecode/templates/summary/summary.html:8
+msgid "Summary"
+msgstr "Résumé"
+
+#: rhodecode/templates/base/base.html:109
+#: rhodecode/templates/changelog/changelog.html:11
+#: rhodecode/templates/data_table/_dt_elements.html:17
+#: rhodecode/templates/data_table/_dt_elements.html:19
+#: rhodecode/templates/data_table/_dt_elements.html:21
+msgid "Changelog"
+msgstr "Historique"
+
+#: rhodecode/templates/base/base.html:110
+#: rhodecode/templates/data_table/_dt_elements.html:25
+#: rhodecode/templates/data_table/_dt_elements.html:27
+#: rhodecode/templates/data_table/_dt_elements.html:29
+#: rhodecode/templates/files/files.html:12
+msgid "Files"
+msgstr "Fichiers"
+
+#: rhodecode/templates/base/base.html:112
+#, fuzzy
+msgid "Switch To"
+msgstr "Aller"
+
+#: rhodecode/templates/base/base.html:114
+#: rhodecode/templates/base/base.html:267
+msgid "loading..."
+msgstr "Chargement…"
 
 #: rhodecode/templates/base/base.html:118
-msgid "Inbox"
-msgstr "Boîte de réception"
-
-#: rhodecode/templates/base/base.html:123
-#: rhodecode/templates/base/base.html:322
-#: rhodecode/templates/base/base.html:324
-#: rhodecode/templates/base/base.html:326
-#: rhodecode/templates/journal/journal.html:4
-#: rhodecode/templates/journal/public_journal.html:4
-msgid "Journal"
-msgstr "Historique"
-
-#: rhodecode/templates/base/base.html:125
-msgid "Log Out"
-msgstr "Se déconnecter"
-
-#: rhodecode/templates/base/base.html:144
-msgid "Switch repository"
-msgstr "Aller au dépôt"
-
-#: rhodecode/templates/base/base.html:146
-msgid "Products"
-msgstr "Produits"
-
-#: rhodecode/templates/base/base.html:152
-#: rhodecode/templates/base/base.html:182 rhodecode/templates/base/root.html:47
-msgid "loading..."
-msgstr "Chargement…"
-
-#: rhodecode/templates/base/base.html:158
-#: rhodecode/templates/base/base.html:160
-#: rhodecode/templates/base/base.html:162
-#: rhodecode/templates/data_table/_dt_elements.html:15
-#: rhodecode/templates/data_table/_dt_elements.html:17
-#: rhodecode/templates/data_table/_dt_elements.html:19
-msgid "Summary"
-msgstr "Résumé"
-
-#: rhodecode/templates/base/base.html:166
-#: rhodecode/templates/base/base.html:168
-#: rhodecode/templates/base/base.html:170
-#: rhodecode/templates/changelog/changelog.html:15
-#: rhodecode/templates/data_table/_dt_elements.html:23
-#: rhodecode/templates/data_table/_dt_elements.html:25
-#: rhodecode/templates/data_table/_dt_elements.html:27
-msgid "Changelog"
-msgstr "Historique"
-
-#: rhodecode/templates/base/base.html:175
-#: rhodecode/templates/base/base.html:177
-#: rhodecode/templates/base/base.html:179
-msgid "Switch to"
-msgstr "Aller"
-
-#: rhodecode/templates/base/base.html:186
-#: rhodecode/templates/base/base.html:188
-#: rhodecode/templates/base/base.html:190
-#: rhodecode/templates/data_table/_dt_elements.html:31
-#: rhodecode/templates/data_table/_dt_elements.html:33
-#: rhodecode/templates/data_table/_dt_elements.html:35
-msgid "Files"
-msgstr "Fichiers"
-
-#: rhodecode/templates/base/base.html:195
-#: rhodecode/templates/base/base.html:199
 msgid "Options"
 msgstr "Options"
 
-#: rhodecode/templates/base/base.html:204
-#: rhodecode/templates/base/base.html:206
-msgid "repository settings"
-msgstr "Réglages de dépôt"
-
-#: rhodecode/templates/base/base.html:210
-#: rhodecode/templates/data_table/_dt_elements.html:80
-#: rhodecode/templates/forks/fork.html:13
-msgid "fork"
-msgstr "Fork"
-
-#: rhodecode/templates/base/base.html:212 rhodecode/templates/base/root.html:50
-#: rhodecode/templates/changelog/changelog.html:43
-msgid "Open new pull request"
-msgstr "Nouvelle requête de pull"
-
-#: rhodecode/templates/base/base.html:215
+#: rhodecode/templates/base/base.html:124
 #: rhodecode/templates/forks/forks_data.html:21
 msgid "Compare fork"
 msgstr "Comparer le fork"
 
-#: rhodecode/templates/base/base.html:217
-msgid "search"
-msgstr "Rechercher"
-
-#: rhodecode/templates/base/base.html:223
-msgid "lock"
-msgstr "Verrouiller"
-
-#: rhodecode/templates/base/base.html:234
-msgid "repositories groups"
-msgstr "Groupes de dépôts"
-
-#: rhodecode/templates/base/base.html:236
-msgid "users groups"
-msgstr "Groupes d’utilisateurs"
-
-#: rhodecode/templates/base/base.html:237
-msgid "permissions"
-msgstr "Permissions"
-
-#: rhodecode/templates/base/base.html:239
-#, fuzzy
-msgid "defaults"
-msgstr "[Par défaut]"
-
-#: rhodecode/templates/base/base.html:240
-msgid "settings"
-msgstr "Réglages"
-
-#: rhodecode/templates/base/base.html:251
-#: rhodecode/templates/base/base.html:253
-msgid "Followers"
-msgstr "Followers"
-
-#: rhodecode/templates/base/base.html:259
-#: rhodecode/templates/base/base.html:261
-msgid "Forks"
-msgstr "Forks"
-
-#: rhodecode/templates/base/base.html:340
-#: rhodecode/templates/base/base.html:342
-#: rhodecode/templates/base/base.html:344
-#: rhodecode/templates/search/search.html:52
+#: rhodecode/templates/base/base.html:126
+msgid "Lightweight changelog"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:127
+#: rhodecode/templates/base/base.html:287
+#: rhodecode/templates/search/search.html:14
+#: rhodecode/templates/search/search.html:54
 msgid "Search"
 msgstr "Rechercher"
 
-#: rhodecode/templates/base/root.html:42
-msgid "add another comment"
-msgstr "Nouveau commentaire"
+#: rhodecode/templates/base/base.html:133
+#, fuzzy
+msgid "Lock"
+msgstr "Verrouiller"
+
+#: rhodecode/templates/base/base.html:141
+#, fuzzy
+msgid "Follow"
+msgstr "followers"
+
+#: rhodecode/templates/base/base.html:142
+#, fuzzy
+msgid "Unfollow"
+msgstr "followers"
+
+#: rhodecode/templates/base/base.html:145
+#: rhodecode/templates/data_table/_dt_elements.html:33
+#: rhodecode/templates/data_table/_dt_elements.html:35
+#: rhodecode/templates/data_table/_dt_elements.html:37
+#: rhodecode/templates/data_table/_dt_elements.html:74
+#: rhodecode/templates/forks/fork.html:9
+msgid "Fork"
+msgstr "Fork"
+
+#: rhodecode/templates/base/base.html:147
+#, fuzzy
+msgid "Create Pull Request"
+msgstr "Nouvelle requête de pull"
+
+#: rhodecode/templates/base/base.html:153
+#, fuzzy
+msgid "Show Pull Requests"
+msgstr "Nouvelle requête de pull"
+
+#: rhodecode/templates/base/base.html:153
+#, fuzzy
+msgid "Pull Requests"
+msgstr "Requêtes de pull"
+
+#: rhodecode/templates/base/base.html:190
+#, fuzzy
+msgid "Not logged in"
+msgstr "Dernière connexion"
+
+#: rhodecode/templates/base/base.html:197
+msgid "Login to your account"
+msgstr "Connexion à votre compte"
+
+#: rhodecode/templates/base/base.html:220
+msgid "Forgot password ?"
+msgstr "Mot de passe oublié ?"
+
+#: rhodecode/templates/base/base.html:243
+msgid "Log Out"
+msgstr "Se déconnecter"
+
+#: rhodecode/templates/base/base.html:262
+msgid "Switch repository"
+msgstr "Aller au dépôt"
+
+#: rhodecode/templates/base/base.html:274
+msgid "Show recent activity"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:275
+#: rhodecode/templates/journal/journal.html:4
+msgid "Journal"
+msgstr "Historique"
+
+#: rhodecode/templates/base/base.html:286
+#, fuzzy
+msgid "Search in repositories"
+msgstr "Rechercher dans tous les dépôts"
+
+#: rhodecode/templates/base/perms_summary.html:8
+#, fuzzy
+msgid "No permissions defined yet"
+msgstr "Copier les permissions"
+
+#: rhodecode/templates/base/perms_summary.html:15
+msgid "Permission"
+msgstr "Permission"
+
+#: rhodecode/templates/base/perms_summary.html:16
+msgid "Edit Permission"
+msgstr "Éditer"
 
 #: rhodecode/templates/base/root.html:43
-#: rhodecode/templates/journal/journal.html:83
-#: rhodecode/templates/summary/summary.html:57
-msgid "Stop following this repository"
-msgstr "Arrêter de suivre ce dépôt"
+#, fuzzy
+msgid "Add another comment"
+msgstr "Nouveau commentaire"
 
 #: rhodecode/templates/base/root.html:44
-#: rhodecode/templates/summary/summary.html:61
+#: rhodecode/templates/data_table/_dt_elements.html:140
+msgid "Stop following this repository"
+msgstr "Arrêter de suivre ce dépôt"
+
+#: rhodecode/templates/base/root.html:45
 msgid "Start following this repository"
 msgstr "Suivre ce dépôt"
 
-#: rhodecode/templates/base/root.html:45
+#: rhodecode/templates/base/root.html:46
 msgid "Group"
 msgstr "Groupe"
 
+#: rhodecode/templates/base/root.html:47
+msgid "members"
+msgstr "Membres"
+
 #: rhodecode/templates/base/root.html:48
-msgid "search truncated"
-msgstr "Résultats tronqués"
+#: rhodecode/templates/pullrequests/pullrequest.html:181
+#, fuzzy
+msgid "Loading ..."
+msgstr "Chargement…"
 
 #: rhodecode/templates/base/root.html:49
-msgid "no matching files"
+#, fuzzy
+msgid "Search truncated"
+msgstr "Résultats tronqués"
+
+#: rhodecode/templates/base/root.html:50
+#, fuzzy
+msgid "No matching files"
 msgstr "Aucun fichier ne correspond"
 
 #: rhodecode/templates/base/root.html:51
+#: rhodecode/templates/changelog/changelog.html:36
+msgid "Open new pull request"
+msgstr "Nouvelle requête de pull"
+
+#: rhodecode/templates/base/root.html:52
 #, fuzzy
 msgid "Open new pull request for selected changesets"
 msgstr "a ouvert une nouvelle requête de pull"
 
-#: rhodecode/templates/base/root.html:52
-msgid "Show selected changes __S -> __E"
+#: rhodecode/templates/base/root.html:53
+#, fuzzy
+msgid "Show selected changesets __S -> __E"
 msgstr "Afficher les changements sélections de __S à __E"
 
-#: rhodecode/templates/base/root.html:53
+#: rhodecode/templates/base/root.html:54
+#, fuzzy
+msgid "Show selected changeset __S"
+msgstr "Afficher les changements sélections de __S à __E"
+
+#: rhodecode/templates/base/root.html:55
 msgid "Selection link"
 msgstr "Lien vers la sélection"
 
+#: rhodecode/templates/base/root.html:56
+#: rhodecode/templates/changeset/diff_block.html:8
+#, fuzzy
+msgid "Collapse diff"
+msgstr "Diff de fichier"
+
+#: rhodecode/templates/base/root.html:57
+#, fuzzy
+msgid "Expand diff"
+msgstr "Diff brut"
+
 #: rhodecode/templates/bookmarks/bookmarks.html:5
 #, python-format
 msgid "%s Bookmarks"
 msgstr "Signets de %s"
 
-#: rhodecode/templates/bookmarks/bookmarks.html:39
+#: rhodecode/templates/bookmarks/bookmarks.html:37
 #: rhodecode/templates/bookmarks/bookmarks_data.html:8
-#: rhodecode/templates/branches/branches.html:53
+#: rhodecode/templates/branches/branches.html:50
 #: rhodecode/templates/branches/branches_data.html:8
-#: rhodecode/templates/tags/tags.html:54
+#: rhodecode/templates/shortlog/shortlog_data.html:8
+#: rhodecode/templates/tags/tags.html:51
 #: rhodecode/templates/tags/tags_data.html:8
 msgid "Author"
 msgstr "Auteur"
 
+#: rhodecode/templates/bookmarks/bookmarks.html:38
+#: rhodecode/templates/bookmarks/bookmarks_data.html:9
+#: rhodecode/templates/branches/branches.html:51
+#: rhodecode/templates/branches/branches_data.html:9
+#: rhodecode/templates/shortlog/shortlog_data.html:5
+#: rhodecode/templates/tags/tags.html:52
+#: rhodecode/templates/tags/tags_data.html:9
+msgid "Revision"
+msgstr "Révision"
+
 #: rhodecode/templates/branches/branches.html:5
 #, python-format
 msgid "%s Branches"
 msgstr "Branches de %s"
 
-#: rhodecode/templates/branches/branches.html:29
+#: rhodecode/templates/branches/branches.html:26
 msgid "Compare branches"
 msgstr "Comparer les branches"
 
-#: rhodecode/templates/branches/branches.html:56
+#: rhodecode/templates/branches/branches.html:53
 #: rhodecode/templates/branches/branches_data.html:10
-#: rhodecode/templates/compare/compare_diff.html:5
-#: rhodecode/templates/compare/compare_diff.html:13
-#: rhodecode/templates/tags/tags.html:57
+#: rhodecode/templates/tags/tags.html:54
 #: rhodecode/templates/tags/tags_data.html:10
 msgid "Compare"
 msgstr "Comparer"
@@ -3221,117 +3507,85 @@
 msgid "%s Changelog"
 msgstr "Historique de %s"
 
-#: rhodecode/templates/changelog/changelog.html:15
+#: rhodecode/templates/changelog/changelog.html:11
 #, python-format
 msgid "showing %d out of %d revision"
 msgid_plural "showing %d out of %d revisions"
 msgstr[0] "Affichage de %d révision sur %d"
 msgstr[1] "Affichage de %d révisions sur %d"
 
-#: rhodecode/templates/changelog/changelog.html:37
+#: rhodecode/templates/changelog/changelog.html:30
 #, fuzzy
 msgid "Clear selection"
 msgstr "Réglages de recherche"
 
-#: rhodecode/templates/changelog/changelog.html:40
+#: rhodecode/templates/changelog/changelog.html:33
 #: rhodecode/templates/forks/forks_data.html:19
-#, python-format
-msgid "compare fork with %s"
+#, fuzzy, python-format
+msgid "Compare fork with %s"
 msgstr "Comparer le fork avec %s"
 
-#: rhodecode/templates/changelog/changelog.html:40
+#: rhodecode/templates/changelog/changelog.html:33
 #, fuzzy
 msgid "Compare fork with parent"
 msgstr "Comparer le fork avec %s"
 
-#: rhodecode/templates/changelog/changelog.html:49
-msgid "Show"
-msgstr "Afficher"
-
-#: rhodecode/templates/changelog/changelog.html:74
-#: rhodecode/templates/summary/summary.html:375
-msgid "show more"
+#: rhodecode/templates/changelog/changelog.html:76
+#: rhodecode/templates/summary/summary.html:404
+#, fuzzy
+msgid "Show more"
 msgstr "montrer plus"
 
-#: rhodecode/templates/changelog/changelog.html:78
-msgid "Affected number of files, click to show more details"
-msgstr "Nombre de fichiers modifiés, cliquez pour plus de détails"
-
-#: rhodecode/templates/changelog/changelog.html:91
-#: rhodecode/templates/changeset/changeset.html:65
-#: rhodecode/templates/changeset/changeset_file_comment.html:20
-#: rhodecode/templates/changeset/changeset_range.html:46
-msgid "Changeset status"
-msgstr "Statut du changeset"
-
-#: rhodecode/templates/changelog/changelog.html:94
-#: rhodecode/templates/shortlog/shortlog_data.html:20
-msgid "Click to open associated pull request"
-msgstr "Cliquez ici pour ouvrir la requête de pull associée."
-
-#: rhodecode/templates/changelog/changelog.html:104
-msgid "Parent"
-msgstr "Parent"
-
-#: rhodecode/templates/changelog/changelog.html:110
-#: rhodecode/templates/changeset/changeset.html:42
-msgid "No parents"
-msgstr "Aucun parent"
-
-#: rhodecode/templates/changelog/changelog.html:115
+#: rhodecode/templates/changelog/changelog.html:89
+#: rhodecode/templates/changeset/changeset_range.html:86
+#, fuzzy, python-format
+msgid "Bookmark %s"
+msgstr "Signets %s"
+
+#: rhodecode/templates/changelog/changelog.html:95
+#: rhodecode/templates/changeset/changeset.html:111
+#: rhodecode/templates/changeset/changeset_range.html:92
+#, fuzzy, python-format
+msgid "Tag %s"
+msgstr "Tags %s"
+
+#: rhodecode/templates/changelog/changelog.html:100
 #: rhodecode/templates/changeset/changeset.html:106
-#: rhodecode/templates/changeset/changeset_range.html:79
-msgid "merge"
-msgstr "Fusion"
-
-#: rhodecode/templates/changelog/changelog.html:118
-#: rhodecode/templates/changeset/changeset.html:109
-#: rhodecode/templates/changeset/changeset_range.html:82
-#: rhodecode/templates/files/files.html:29
-#: rhodecode/templates/files/files_add.html:33
-#: rhodecode/templates/files/files_edit.html:33
-#: rhodecode/templates/shortlog/shortlog_data.html:9
-msgid "branch"
-msgstr "Branche"
-
-#: rhodecode/templates/changelog/changelog.html:124
-#: rhodecode/templates/changeset/changeset_range.html:88
-msgid "bookmark"
-msgstr "Signet"
-
-#: rhodecode/templates/changelog/changelog.html:130
-#: rhodecode/templates/changeset/changeset.html:114
-#: rhodecode/templates/changeset/changeset_range.html:94
-msgid "tag"
-msgstr "Tag"
-
-#: rhodecode/templates/changelog/changelog.html:301
+#: rhodecode/templates/changeset/changeset_range.html:80
+#, fuzzy, python-format
+msgid "Branch %s"
+msgstr "Branches %s"
+
+#: rhodecode/templates/changelog/changelog.html:258
 msgid "There are no changes yet"
 msgstr "Il n’y a aucun changement pour le moment"
 
 #: rhodecode/templates/changelog/changelog_details.html:4
-#: rhodecode/templates/changeset/changeset.html:94
-msgid "removed"
+#: rhodecode/templates/changeset/changeset.html:91
+#, fuzzy
+msgid "Removed"
 msgstr "Supprimés"
 
 #: rhodecode/templates/changelog/changelog_details.html:5
-#: rhodecode/templates/changeset/changeset.html:95
-msgid "changed"
+#: rhodecode/templates/changeset/changeset.html:92
+#, fuzzy
+msgid "Changed"
 msgstr "Modifiés"
 
 #: rhodecode/templates/changelog/changelog_details.html:6
-#: rhodecode/templates/changeset/changeset.html:96
-msgid "added"
+#: rhodecode/templates/changeset/changeset.html:93
+#, fuzzy
+msgid "Added"
 msgstr "Ajoutés"
 
 #: rhodecode/templates/changelog/changelog_details.html:8
 #: rhodecode/templates/changelog/changelog_details.html:9
 #: rhodecode/templates/changelog/changelog_details.html:10
-#: rhodecode/templates/changeset/changeset.html:98
-#: rhodecode/templates/changeset/changeset.html:99
-#: rhodecode/templates/changeset/changeset.html:100
-#, python-format
-msgid "affected %s files"
+#: rhodecode/templates/changeset/changeset.html:95
+#: rhodecode/templates/changeset/changeset.html:96
+#: rhodecode/templates/changeset/changeset.html:97
+#, fuzzy, python-format
+msgid "Affected %s files"
 msgstr "%s fichiers affectés"
 
 #: rhodecode/templates/changeset/changeset.html:6
@@ -3339,118 +3593,155 @@
 msgid "%s Changeset"
 msgstr "Changeset de %s"
 
-#: rhodecode/templates/changeset/changeset.html:14
-msgid "Changeset"
-msgstr "Changements"
-
-#: rhodecode/templates/changeset/changeset.html:52
+#: rhodecode/templates/changeset/changeset.html:39
+msgid "No parents"
+msgstr "Aucun parent"
+
+#: rhodecode/templates/changeset/changeset.html:49
 #, fuzzy
 msgid "No children"
 msgstr "Appliquer aux enfants"
 
-#: rhodecode/templates/changeset/changeset.html:70
-#: rhodecode/templates/changeset/diff_block.html:20
-msgid "raw diff"
-msgstr "Diff brut"
-
-#: rhodecode/templates/changeset/changeset.html:71
+#: rhodecode/templates/changeset/changeset.html:62
+#: rhodecode/templates/changeset/changeset_file_comment.html:20
+#: rhodecode/templates/changeset/changeset_range.html:44
+msgid "Changeset status"
+msgstr "Statut du changeset"
+
+#: rhodecode/templates/changeset/changeset.html:67
+#: rhodecode/templates/changeset/diff_block.html:23
 #, fuzzy
-msgid "patch diff"
+msgid "Raw diff"
 msgstr "Diff brut"
 
-#: rhodecode/templates/changeset/changeset.html:72
-#: rhodecode/templates/changeset/diff_block.html:21
-msgid "download diff"
+#: rhodecode/templates/changeset/changeset.html:68
+#, fuzzy
+msgid "Patch diff"
+msgstr "Diff brut"
+
+#: rhodecode/templates/changeset/changeset.html:69
+#: rhodecode/templates/changeset/diff_block.html:24
+#, fuzzy
+msgid "Download diff"
 msgstr "Télécharger le diff"
 
-#: rhodecode/templates/changeset/changeset.html:76
-#: rhodecode/templates/changeset/changeset_file_comment.html:82
+#: rhodecode/templates/changeset/changeset.html:73
+#: rhodecode/templates/changeset/changeset_file_comment.html:97
 #, python-format
 msgid "%d comment"
 msgid_plural "%d comments"
 msgstr[0] "%d commentaire"
 msgstr[1] "%d commentaires"
 
-#: rhodecode/templates/changeset/changeset.html:76
-#: rhodecode/templates/changeset/changeset_file_comment.html:82
+#: rhodecode/templates/changeset/changeset.html:73
+#: rhodecode/templates/changeset/changeset_file_comment.html:97
 #, python-format
 msgid "(%d inline)"
 msgid_plural "(%d inline)"
 msgstr[0] "(et %d en ligne)"
 msgstr[1] "(et %d en ligne)"
 
-#: rhodecode/templates/changeset/changeset.html:122
-#: rhodecode/templates/compare/compare_diff.html:44
-#: rhodecode/templates/pullrequests/pullrequest_show.html:76
+#: rhodecode/templates/changeset/changeset.html:103
+#: rhodecode/templates/changeset/changeset_range.html:77
+msgid "merge"
+msgstr "Fusion"
+
+#: rhodecode/templates/changeset/changeset.html:119
+#: rhodecode/templates/compare/compare_diff.html:40
+#: rhodecode/templates/pullrequests/pullrequest_show.html:113
 #, fuzzy, python-format
 msgid "%s file changed"
 msgid_plural "%s files changed"
 msgstr[0] "%s fichié modifié"
 msgstr[1] "%s fichié modifié"
 
-#: rhodecode/templates/changeset/changeset.html:124
-#: rhodecode/templates/compare/compare_diff.html:46
-#: rhodecode/templates/pullrequests/pullrequest_show.html:78
+#: rhodecode/templates/changeset/changeset.html:121
+#: rhodecode/templates/compare/compare_diff.html:42
+#: rhodecode/templates/pullrequests/pullrequest_show.html:115
 #, fuzzy, python-format
 msgid "%s file changed with %s insertions and %s deletions"
 msgid_plural "%s files changed with %s insertions and %s deletions"
 msgstr[0] "%s fichiers affectés avec %s insertions et %s suppressions"
 msgstr[1] "%s fichiers affectés avec %s insertions et %s suppressions"
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:42
+#: rhodecode/templates/changeset/changeset.html:134
+#: rhodecode/templates/changeset/changeset.html:146
+#: rhodecode/templates/pullrequests/pullrequest_show.html:131
+#: rhodecode/templates/pullrequests/pullrequest_show.html:195
+msgid "Showing a huge diff might take some time and resources"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset.html:134
+#: rhodecode/templates/changeset/changeset.html:146
+#: rhodecode/templates/compare/compare_diff.html:58
+#: rhodecode/templates/compare/compare_diff.html:69
+#: rhodecode/templates/pullrequests/pullrequest_show.html:131
+#: rhodecode/templates/pullrequests/pullrequest_show.html:195
+#, fuzzy
+msgid "Show full diff"
+msgstr "Chargement de la liste des fichiers…"
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:30
+#, fuzzy, python-format
+msgid "Status change on pull request #%s"
+msgstr "Requêtes de pull %s"
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:32
+#, fuzzy, python-format
+msgid "Comment on pull request #%s"
+msgstr "[a commenté] la requête de pull pour %s"
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:57
 msgid "Submitting..."
 msgstr "Envoi…"
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:45
+#: rhodecode/templates/changeset/changeset_file_comment.html:60
 msgid "Commenting on line {1}."
 msgstr "Commentaire sur la ligne {1}."
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:46
-#: rhodecode/templates/changeset/changeset_file_comment.html:121
+#: rhodecode/templates/changeset/changeset_file_comment.html:61
+#: rhodecode/templates/changeset/changeset_file_comment.html:139
 #, python-format
 msgid "Comments parsed using %s syntax with %s support."
 msgstr ""
 "Les commentaires sont analysés avec la syntaxe %s, avec le support de la "
 "commande %s."
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:48
-#: rhodecode/templates/changeset/changeset_file_comment.html:123
+#: rhodecode/templates/changeset/changeset_file_comment.html:63
+#: rhodecode/templates/changeset/changeset_file_comment.html:141
 msgid "Use @username inside this text to send notification to this RhodeCode user"
 msgstr ""
 "Utilisez @nomutilisateur dans ce texte pour envoyer une notification à "
 "l’utilisateur RhodeCode en question."
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:59
-#: rhodecode/templates/changeset/changeset_file_comment.html:143
+#: rhodecode/templates/changeset/changeset_file_comment.html:74
+#: rhodecode/templates/changeset/changeset_file_comment.html:161
 msgid "Comment"
 msgstr "Commentaire"
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:60
-#: rhodecode/templates/changeset/changeset_file_comment.html:71
-msgid "Hide"
-msgstr "Masquer"
-
-#: rhodecode/templates/changeset/changeset_file_comment.html:67
+#: rhodecode/templates/changeset/changeset_file_comment.html:75
+#, fuzzy
+msgid "Cancel"
+msgstr "Modifiés"
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:82
 msgid "You need to be logged in to comment."
 msgstr "Vous devez être connecté pour poster des commentaires."
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:67
+#: rhodecode/templates/changeset/changeset_file_comment.html:82
 msgid "Login now"
 msgstr "Se connecter maintenant"
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:118
-msgid "Leave a comment"
-msgstr "Laisser un commentaire"
-
-#: rhodecode/templates/changeset/changeset_file_comment.html:125
-msgid "Check this to change current status of code-review for this changeset"
-msgstr "Cochez pour changer le statut de la relecture de code pour ce changeset"
-
-#: rhodecode/templates/changeset/changeset_file_comment.html:125
-msgid "change status"
+#: rhodecode/templates/changeset/changeset_file_comment.html:86
+msgid "Hide"
+msgstr "Masquer"
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:143
+#, fuzzy
+msgid "Change status"
 msgstr "Modifier le statut"
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:145
+#: rhodecode/templates/changeset/changeset_file_comment.html:163
 msgid "Comment and close"
 msgstr "Commenter et fermer"
 
@@ -3459,121 +3750,146 @@
 msgid "%s Changesets"
 msgstr "Changesets de %s"
 
-#: rhodecode/templates/changeset/changeset_range.html:29
-#: rhodecode/templates/compare/compare_diff.html:29
-msgid "Compare View"
-msgstr "Comparaison"
-
-#: rhodecode/templates/changeset/changeset_range.html:29
-#, fuzzy
-msgid "Show combined compare"
-msgstr "Afficher les commentaires"
-
-#: rhodecode/templates/changeset/changeset_range.html:54
+#: rhodecode/templates/changeset/changeset_range.html:52
 msgid "Files affected"
 msgstr "Fichiers affectés"
 
-#: rhodecode/templates/changeset/diff_block.html:19
-msgid "show full diff for this file"
+#: rhodecode/templates/changeset/diff_block.html:22
+msgid "Show full diff for this file"
 msgstr ""
 
-#: rhodecode/templates/changeset/diff_block.html:27
-msgid "show inline comments"
+#: rhodecode/templates/changeset/diff_block.html:30
+#, fuzzy
+msgid "Show inline comments"
 msgstr "Afficher les commentaires"
 
-#: rhodecode/templates/compare/compare_cs.html:5
+#: rhodecode/templates/changeset/diff_block.html:55
+msgid "Show file at latest version in this repo"
+msgstr ""
+
+#: rhodecode/templates/changeset/diff_block.html:56
+msgid "Show file at initial version in this repo"
+msgstr ""
+
+#: rhodecode/templates/compare/compare_cs.html:4
 msgid "No changesets"
 msgstr "Aucun changeset"
 
-#: rhodecode/templates/compare/compare_diff.html:37
-#: rhodecode/templates/pullrequests/pullrequest_show.html:69
+#: rhodecode/templates/compare/compare_cs.html:32
+#, fuzzy
+msgid "Ancestor"
+msgstr "Branches"
+
+#: rhodecode/templates/compare/compare_diff.html:5
+#, fuzzy, python-format
+msgid "%s Compare"
+msgstr "%s Comparer"
+
+#: rhodecode/templates/compare/compare_diff.html:9
+#, fuzzy
+msgid "Compare revisions"
+msgstr "révision précédente"
+
+#: rhodecode/templates/compare/compare_diff.html:33
+#: rhodecode/templates/pullrequests/pullrequest_show.html:106
 #, fuzzy, python-format
 msgid "Showing %s commit"
 msgid_plural "Showing %s commits"
 msgstr[0] "Afficher %s les commentaires"
 msgstr[1] "Afficher %s les commentaires"
 
-#: rhodecode/templates/compare/compare_diff.html:52
-#: rhodecode/templates/pullrequests/pullrequest_show.html:84
+#: rhodecode/templates/compare/compare_diff.html:48
+#: rhodecode/templates/pullrequests/pullrequest_show.html:121
 #, fuzzy
 msgid "No files"
 msgstr "Fichiers"
 
-#: rhodecode/templates/data_table/_dt_elements.html:39
-#: rhodecode/templates/data_table/_dt_elements.html:41
-#: rhodecode/templates/data_table/_dt_elements.html:43
-msgid "Fork"
-msgstr "Fork"
-
-#: rhodecode/templates/data_table/_dt_elements.html:60
-#: rhodecode/templates/journal/journal.html:89
-#: rhodecode/templates/summary/summary.html:77
+#: rhodecode/templates/compare/compare_diff.html:58
+#: rhodecode/templates/compare/compare_diff.html:69
+msgid "confirm to show potentially huge diff"
+msgstr ""
+
+#: rhodecode/templates/data_table/_dt_elements.html:54
+#: rhodecode/templates/summary/summary.html:69
 msgid "Mercurial repository"
 msgstr "Dépôt Mercurial"
 
-#: rhodecode/templates/data_table/_dt_elements.html:62
-#: rhodecode/templates/journal/journal.html:91
-#: rhodecode/templates/summary/summary.html:80
+#: rhodecode/templates/data_table/_dt_elements.html:56
+#: rhodecode/templates/summary/summary.html:72
 msgid "Git repository"
 msgstr "Dépôt Git"
 
-#: rhodecode/templates/data_table/_dt_elements.html:69
-#: rhodecode/templates/journal/journal.html:97
-#: rhodecode/templates/summary/summary.html:87
-msgid "public repository"
-msgstr "Dépôt public"
-
-#: rhodecode/templates/data_table/_dt_elements.html:80
-#: rhodecode/templates/summary/summary.html:96
-#: rhodecode/templates/summary/summary.html:97
-msgid "Fork of"
-msgstr "Fork de"
-
-#: rhodecode/templates/data_table/_dt_elements.html:94
+#: rhodecode/templates/data_table/_dt_elements.html:74
+#, fuzzy, python-format
+msgid "Fork of %s"
+msgstr "Nom du fork %s"
+
+#: rhodecode/templates/data_table/_dt_elements.html:88
 msgid "No changesets yet"
 msgstr "Dépôt vide"
 
-#: rhodecode/templates/data_table/_dt_elements.html:101
-#: rhodecode/templates/data_table/_dt_elements.html:103
+#: rhodecode/templates/data_table/_dt_elements.html:95
+#: rhodecode/templates/data_table/_dt_elements.html:97
 #, python-format
 msgid "Subscribe to %s rss feed"
 msgstr "S’abonner au flux RSS de %s"
 
-#: rhodecode/templates/data_table/_dt_elements.html:109
-#: rhodecode/templates/data_table/_dt_elements.html:111
+#: rhodecode/templates/data_table/_dt_elements.html:103
+#: rhodecode/templates/data_table/_dt_elements.html:105
 #, python-format
 msgid "Subscribe to %s atom feed"
 msgstr "S’abonner au flux ATOM de %s"
 
 #: rhodecode/templates/data_table/_dt_elements.html:122
 #, python-format
+msgid "Confirm to delete this repository: %s"
+msgstr "Voulez-vous vraiment supprimer le dépôt %s ?"
+
+#: rhodecode/templates/data_table/_dt_elements.html:131
+#, python-format
 msgid "Confirm to delete this user: %s"
 msgstr "Voulez-vous vraiment supprimer l’utilisateur « %s » ?"
 
-#: rhodecode/templates/email_templates/changeset_comment.html:10
+#: rhodecode/templates/email_templates/changeset_comment.html:9
+#: rhodecode/templates/email_templates/pull_request_comment.html:15
 #, fuzzy
-msgid "New status$"
+msgid "New status"
 msgstr "Modifier le statut"
 
+#: rhodecode/templates/email_templates/changeset_comment.html:11
+#: rhodecode/templates/email_templates/pull_request_comment.html:9
+msgid "View this comment here"
+msgstr ""
+
+#: rhodecode/templates/email_templates/changeset_comment.html:14
+#, fuzzy
+msgid "Repo"
+msgstr "Mes dépôts"
+
+#: rhodecode/templates/email_templates/changeset_comment.html:16
+msgid "desc"
+msgstr ""
+
 #: rhodecode/templates/email_templates/main.html:8
 #, fuzzy
 msgid "This is a notification from RhodeCode."
 msgstr "Ceci est une notification de RhodeCode."
 
 #: rhodecode/templates/email_templates/password_reset.html:4
-msgid "Hello"
+#, python-format
+msgid "Hello %s"
+msgstr ""
+
+#: rhodecode/templates/email_templates/password_reset.html:5
+msgid "We received a request to create a new password for your account."
 msgstr ""
 
 #: rhodecode/templates/email_templates/password_reset.html:6
-msgid "We received a request to create a new password for your account."
-msgstr ""
-
-#: rhodecode/templates/email_templates/password_reset.html:8
 msgid "You can generate it by clicking following URL"
 msgstr ""
 
-#: rhodecode/templates/email_templates/password_reset.html:12
-msgid "If you didn't request new password please ignore this email."
+#: rhodecode/templates/email_templates/password_reset.html:11
+msgid "If you did not request new password please ignore this email."
 msgstr ""
 
 #: rhodecode/templates/email_templates/pull_request.html:4
@@ -3585,36 +3901,31 @@
 
 #: rhodecode/templates/email_templates/pull_request.html:5
 #, fuzzy
-msgid "title"
-msgstr "Titre"
+msgid "View this pull request here"
+msgstr "Ajouter un relecteur à cette requête de pull."
 
 #: rhodecode/templates/email_templates/pull_request.html:6
-#: rhodecode/templates/pullrequests/pullrequest.html:115
+#, fuzzy
+msgid "title"
+msgstr "Titre"
+
+#: rhodecode/templates/email_templates/pull_request.html:7
 msgid "description"
 msgstr "Description"
 
-#: rhodecode/templates/email_templates/pull_request.html:11
+#: rhodecode/templates/email_templates/pull_request.html:12
 msgid "revisions for reviewing"
 msgstr ""
 
-#: rhodecode/templates/email_templates/pull_request.html:18
-#, fuzzy
-msgid "View this pull request here"
-msgstr "Ajouter un relecteur à cette requête de pull."
-
-#: rhodecode/templates/email_templates/pull_request_comment.html:4
+#: rhodecode/templates/email_templates/pull_request_comment.html:3
 #, fuzzy, python-format
-msgid "User %s commented on pull request #%s for repository %s"
-msgstr ""
-
-#: rhodecode/templates/email_templates/pull_request_comment.html:10
+msgid "Pull request #%s for repository %s"
+msgstr "Requête de pull nº%s ouverte le %s"
+
+#: rhodecode/templates/email_templates/pull_request_comment.html:13
 #, fuzzy
-msgid "New status"
-msgstr "Modifier le statut"
-
-#: rhodecode/templates/email_templates/pull_request_comment.html:14
-msgid "View this comment here"
-msgstr ""
+msgid "Closing pull request with status"
+msgstr "Statut de la requête de pull"
 
 #: rhodecode/templates/email_templates/registration.html:4
 #, fuzzy
@@ -3625,109 +3936,115 @@
 msgid "View this user here"
 msgstr ""
 
-#: rhodecode/templates/errors/error_document.html:46
+#: rhodecode/templates/errors/error_document.html:55
 #, python-format
 msgid "You will be redirected to %s in %s seconds"
 msgstr "Vous serez redirigé vers %s dans %s secondes."
 
 #: rhodecode/templates/files/file_diff.html:4
-#, python-format
-msgid "%s File diff"
+#, fuzzy, python-format
+msgid "%s File Diff"
 msgstr "Diff de fichier de %s"
 
-#: rhodecode/templates/files/file_diff.html:12
+#: rhodecode/templates/files/file_diff.html:8
 msgid "File diff"
 msgstr "Diff de fichier"
 
 #: rhodecode/templates/files/files.html:4
-#: rhodecode/templates/files/files.html:74
-#, python-format
-msgid "%s files"
+#: rhodecode/templates/files/files.html:76
+#, fuzzy, python-format
+msgid "%s Files"
 msgstr "Fichiers de %s"
 
-#: rhodecode/templates/files/files.html:12
-#: rhodecode/templates/summary/summary.html:351
-msgid "files"
-msgstr "Fichiers"
+#: rhodecode/templates/files/files.html:30
+#: rhodecode/templates/files/files_add.html:31
+#: rhodecode/templates/files/files_edit.html:31
+#: rhodecode/templates/shortlog/shortlog_data.html:9
+#, fuzzy
+msgid "Branch"
+msgstr "Branche"
 
 #: rhodecode/templates/files/files_add.html:4
-#: rhodecode/templates/files/files_edit.html:4
-#, python-format
-msgid "%s Edit file"
-msgstr "Edition de fichier de %s"
+#, fuzzy, python-format
+msgid "%s Files Add"
+msgstr "Fichiers de %s"
 
 #: rhodecode/templates/files/files_add.html:19
-msgid "add file"
+#, fuzzy
+msgid "Add file"
 msgstr "Ajouter un fichier"
 
-#: rhodecode/templates/files/files_add.html:40
+#: rhodecode/templates/files/files_add.html:38
+#: rhodecode/templates/files/files_browser.html:31
+#: rhodecode/templates/shortlog/shortlog_data.html:78
 msgid "Add new file"
 msgstr "Ajouter un nouveau fichier"
 
-#: rhodecode/templates/files/files_add.html:45
+#: rhodecode/templates/files/files_add.html:43
 msgid "File Name"
 msgstr "Nom de fichier"
 
-#: rhodecode/templates/files/files_add.html:49
-#: rhodecode/templates/files/files_add.html:58
+#: rhodecode/templates/files/files_add.html:47
+#: rhodecode/templates/files/files_add.html:56
 msgid "or"
 msgstr "ou"
 
-#: rhodecode/templates/files/files_add.html:49
-#: rhodecode/templates/files/files_add.html:54
+#: rhodecode/templates/files/files_add.html:47
+#: rhodecode/templates/files/files_add.html:52
 msgid "Upload file"
 msgstr "Téléverser un fichier"
 
-#: rhodecode/templates/files/files_add.html:58
+#: rhodecode/templates/files/files_add.html:56
 msgid "Create new file"
 msgstr "Créer un nouveau fichier"
 
-#: rhodecode/templates/files/files_add.html:63
-#: rhodecode/templates/files/files_edit.html:39
+#: rhodecode/templates/files/files_add.html:61
+#: rhodecode/templates/files/files_edit.html:37
 #: rhodecode/templates/files/files_ypjax.html:3
 msgid "Location"
 msgstr "Emplacement"
 
-#: rhodecode/templates/files/files_add.html:67
+#: rhodecode/templates/files/files_add.html:65
 msgid "use / to separate directories"
 msgstr "Utilisez / pour séparer les répertoires"
 
-#: rhodecode/templates/files/files_add.html:77
-#: rhodecode/templates/files/files_edit.html:63
+#: rhodecode/templates/files/files_add.html:75
+#: rhodecode/templates/files/files_edit.html:61
 #: rhodecode/templates/shortlog/shortlog_data.html:6
-msgid "commit message"
+#, fuzzy
+msgid "Commit message"
 msgstr "Message de commit"
 
-#: rhodecode/templates/files/files_add.html:81
-#: rhodecode/templates/files/files_edit.html:67
+#: rhodecode/templates/files/files_add.html:79
+#: rhodecode/templates/files/files_edit.html:65
 msgid "Commit changes"
 msgstr "Commiter les changements"
 
 #: rhodecode/templates/files/files_browser.html:13
-msgid "view"
+#, fuzzy
+msgid "View"
 msgstr "voir"
 
 #: rhodecode/templates/files/files_browser.html:14
-msgid "previous revision"
+#, fuzzy
+msgid "Previous revision"
 msgstr "révision précédente"
 
 #: rhodecode/templates/files/files_browser.html:16
-msgid "next revision"
+#, fuzzy
+msgid "Next revision"
 msgstr "révision suivante"
 
 #: rhodecode/templates/files/files_browser.html:23
-msgid "follow current branch"
+#, fuzzy
+msgid "Follow current branch"
 msgstr "Suivre la branche actuelle"
 
 #: rhodecode/templates/files/files_browser.html:27
-msgid "search file list"
+#, fuzzy
+msgid "Search file list"
 msgstr "Rechercher un fichier"
 
-#: rhodecode/templates/files/files_browser.html:31
-#: rhodecode/templates/shortlog/shortlog_data.html:78
-msgid "add new file"
-msgstr "Ajouter un fichier"
-
 #: rhodecode/templates/files/files_browser.html:35
 msgid "Loading file list..."
 msgstr "Chargement de la liste des fichiers…"
@@ -3749,34 +4066,44 @@
 msgstr "Dernière modification"
 
 #: rhodecode/templates/files/files_browser.html:52
-msgid "Last commiter"
+msgid "Last committer"
 msgstr "Dernier commiteur"
 
+#: rhodecode/templates/files/files_edit.html:4
+#, fuzzy, python-format
+msgid "%s Files Edit"
+msgstr "Fichiers de %s"
+
 #: rhodecode/templates/files/files_edit.html:19
-msgid "edit file"
+#, fuzzy
+msgid "Edit file"
 msgstr "Éditer le fichier"
 
+#: rhodecode/templates/files/files_edit.html:47
+#: rhodecode/templates/files/files_source.html:23
+#, fuzzy
+msgid "Show annotation"
+msgstr "Afficher les annotations"
+
+#: rhodecode/templates/files/files_edit.html:48
+#: rhodecode/templates/files/files_source.html:25
+#: rhodecode/templates/files/files_source.html:55
+#, fuzzy
+msgid "Show as raw"
+msgstr "montrer le fichier brut"
+
 #: rhodecode/templates/files/files_edit.html:49
-#: rhodecode/templates/files/files_source.html:23
-msgid "show annotation"
-msgstr "Afficher les annotations"
-
-#: rhodecode/templates/files/files_edit.html:50
-#: rhodecode/templates/files/files_source.html:25
-#: rhodecode/templates/files/files_source.html:53
-msgid "show as raw"
-msgstr "montrer le fichier brut"
-
-#: rhodecode/templates/files/files_edit.html:51
 #: rhodecode/templates/files/files_source.html:26
-msgid "download as raw"
+#, fuzzy
+msgid "Download as raw"
 msgstr "télécharger le fichier brut"
 
-#: rhodecode/templates/files/files_edit.html:54
-msgid "source"
+#: rhodecode/templates/files/files_edit.html:52
+#, fuzzy
+msgid "Source"
 msgstr "Source"
 
-#: rhodecode/templates/files/files_edit.html:59
+#: rhodecode/templates/files/files_edit.html:57
 msgid "Editing file"
 msgstr "Édition du fichier"
 
@@ -3785,16 +4112,18 @@
 msgstr "Historique"
 
 #: rhodecode/templates/files/files_history_box.html:9
-msgid "diff to revision"
+#, fuzzy
+msgid "Diff to revision"
 msgstr "Diff avec la révision"
 
 #: rhodecode/templates/files/files_history_box.html:10
-msgid "show at revision"
+#, fuzzy
+msgid "Show at revision"
 msgstr "Afficher à la révision"
 
 #: rhodecode/templates/files/files_history_box.html:11
 #, fuzzy
-msgid "show full history"
+msgid "Show full history"
 msgstr "Chargement de la liste des fichiers…"
 
 #: rhodecode/templates/files/files_history_box.html:16
@@ -3810,15 +4139,30 @@
 msgstr "Chargement de la liste des fichiers…"
 
 #: rhodecode/templates/files/files_source.html:21
-msgid "show source"
+#, fuzzy
+msgid "Show source"
 msgstr "montrer les sources"
 
-#: rhodecode/templates/files/files_source.html:44
+#: rhodecode/templates/files/files_source.html:29
+#, fuzzy, python-format
+msgid "Edit on branch:%s"
+msgstr "Dépôt %s supprimé"
+
+#: rhodecode/templates/files/files_source.html:31
+#, fuzzy
+msgid "Edit on branch:?"
+msgstr "Dépôt %s supprimé"
+
+#: rhodecode/templates/files/files_source.html:31
+msgid "Editing files allowed only when on branch head revision"
+msgstr ""
+
+#: rhodecode/templates/files/files_source.html:46
 #, python-format
 msgid "Binary file (%s)"
 msgstr "Fichier binaire (%s)"
 
-#: rhodecode/templates/files/files_source.html:53
+#: rhodecode/templates/files/files_source.html:55
 msgid "File is too big to display"
 msgstr "Ce fichier est trop gros pour être affiché."
 
@@ -3839,9 +4183,11 @@
 msgid "%s Followers"
 msgstr "Followers de %s"
 
-#: rhodecode/templates/followers/followers.html:13
-msgid "followers"
-msgstr "followers"
+#: rhodecode/templates/followers/followers.html:9
+#: rhodecode/templates/summary/summary.html:183
+#: rhodecode/templates/summary/summary.html:184
+msgid "Followers"
+msgstr "Followers"
 
 #: rhodecode/templates/followers/followers_data.html:12
 msgid "Started following -"
@@ -3852,32 +4198,33 @@
 msgid "%s Fork"
 msgstr "Fork de %s"
 
-#: rhodecode/templates/forks/fork.html:31
+#: rhodecode/templates/forks/fork.html:28
 msgid "Fork name"
 msgstr "Nom du fork"
 
-#: rhodecode/templates/forks/fork.html:68
+#: rhodecode/templates/forks/fork.html:65
 msgid "Private"
 msgstr "Privé"
 
-#: rhodecode/templates/forks/fork.html:77
+#: rhodecode/templates/forks/fork.html:74
 msgid "Copy permissions"
 msgstr "Copier les permissions"
 
-#: rhodecode/templates/forks/fork.html:81
+#: rhodecode/templates/forks/fork.html:78
 msgid "Copy permissions from forked repository"
 msgstr "Copier les permissions depuis le dépôt forké"
 
-#: rhodecode/templates/forks/fork.html:86
+#: rhodecode/templates/forks/fork.html:84
 msgid "Update after clone"
 msgstr "MÀJ après le clonage"
 
-#: rhodecode/templates/forks/fork.html:90
+#: rhodecode/templates/forks/fork.html:88
 msgid "Checkout source after making a clone"
 msgstr "Mettre à jour depuis la source après clonage"
 
-#: rhodecode/templates/forks/fork.html:94
-msgid "fork this repository"
+#: rhodecode/templates/forks/fork.html:93
+#, fuzzy
+msgid "Fork this repository"
 msgstr "Forker ce dépôt"
 
 #: rhodecode/templates/forks/forks.html:5
@@ -3885,12 +4232,15 @@
 msgid "%s Forks"
 msgstr "Forks de %s"
 
-#: rhodecode/templates/forks/forks.html:13
-msgid "forks"
-msgstr "forks"
+#: rhodecode/templates/forks/forks.html:9
+#: rhodecode/templates/summary/summary.html:189
+#: rhodecode/templates/summary/summary.html:190
+msgid "Forks"
+msgstr "Forks"
 
 #: rhodecode/templates/forks/forks_data.html:17
-msgid "forked"
+#, fuzzy
+msgid "Forked"
 msgstr "forké"
 
 #: rhodecode/templates/forks/forks_data.html:42
@@ -3906,44 +4256,27 @@
 msgstr "Flux RSS du journal"
 
 #: rhodecode/templates/journal/journal.html:32
-#: rhodecode/templates/pullrequests/pullrequest.html:55
 msgid "Refresh"
 msgstr "Rafraîchir"
 
 #: rhodecode/templates/journal/journal.html:35
 #: rhodecode/templates/journal/public_journal.html:24
-msgid "RSS feed"
-msgstr "Flux RSS"
-
-#: rhodecode/templates/journal/journal.html:38
-#: rhodecode/templates/journal/public_journal.html:27
 msgid "ATOM feed"
 msgstr "Flux ATOM"
 
-#: rhodecode/templates/journal/journal.html:49
+#: rhodecode/templates/journal/journal.html:51
 msgid "Watched"
 msgstr "Surveillé"
 
-#: rhodecode/templates/journal/journal.html:54
-msgid "ADD"
-msgstr "AJOUTER"
-
-#: rhodecode/templates/journal/journal.html:77
-msgid "following user"
-msgstr "utilisateur suivant"
-
-#: rhodecode/templates/journal/journal.html:77
-msgid "user"
-msgstr "utilisateur"
-
-#: rhodecode/templates/journal/journal.html:110
-msgid "You are not following any users or repositories"
-msgstr "Vous ne suivez aucun utilisateur ou dépôt"
-
 #: rhodecode/templates/journal/journal_data.html:55
 msgid "No entries yet"
 msgstr "Aucune entrée pour le moment"
 
+#: rhodecode/templates/journal/public_journal.html:4
+#: rhodecode/templates/journal/public_journal.html:21
+msgid "Public Journal"
+msgstr "Journal public"
+
 #: rhodecode/templates/journal/public_journal.html:13
 msgid "ATOM public journal feed"
 msgstr "Flux ATOM du journal public"
@@ -3952,148 +4285,133 @@
 msgid "RSS public journal feed"
 msgstr "Flux RSS du journal public"
 
-#: rhodecode/templates/journal/public_journal.html:21
-msgid "Public Journal"
-msgstr "Journal public"
-
 #: rhodecode/templates/pullrequests/pullrequest.html:4
-#: rhodecode/templates/pullrequests/pullrequest.html:12
+#: rhodecode/templates/pullrequests/pullrequest.html:8
 msgid "New pull request"
 msgstr "Nouvelle requête de pull"
 
-#: rhodecode/templates/pullrequests/pullrequest.html:54
-msgid "refresh overview"
-msgstr "Rafraîchir les informations"
-
-#: rhodecode/templates/pullrequests/pullrequest.html:66
+#: rhodecode/templates/pullrequests/pullrequest.html:52
 msgid "Detailed compare view"
 msgstr "Comparaison détaillée"
 
-#: rhodecode/templates/pullrequests/pullrequest.html:70
-#: rhodecode/templates/pullrequests/pullrequest_show.html:100
+#: rhodecode/templates/pullrequests/pullrequest.html:56
+#: rhodecode/templates/pullrequests/pullrequest_show.html:137
 msgid "Pull request reviewers"
 msgstr "Relecteurs de la requête de pull"
 
-#: rhodecode/templates/pullrequests/pullrequest.html:79
-#: rhodecode/templates/pullrequests/pullrequest_show.html:112
+#: rhodecode/templates/pullrequests/pullrequest.html:65
+#: rhodecode/templates/pullrequests/pullrequest_show.html:149
 msgid "owner"
 msgstr "Propriétaire"
 
-#: rhodecode/templates/pullrequests/pullrequest.html:91
-#: rhodecode/templates/pullrequests/pullrequest_show.html:127
+#: rhodecode/templates/pullrequests/pullrequest.html:77
 msgid "Add reviewer to this pull request."
 msgstr "Ajouter un relecteur à cette requête de pull."
 
-#: rhodecode/templates/pullrequests/pullrequest.html:97
+#: rhodecode/templates/pullrequests/pullrequest.html:83
 msgid "Create new pull request"
 msgstr "Nouvelle requête de pull"
 
-#: rhodecode/templates/pullrequests/pullrequest.html:106
+#: rhodecode/templates/pullrequests/pullrequest.html:92
+#: rhodecode/templates/pullrequests/pullrequest_data.html:14
 #: rhodecode/templates/pullrequests/pullrequest_show.html:25
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:33
 msgid "Title"
 msgstr "Titre"
 
-#: rhodecode/templates/pullrequests/pullrequest.html:123
+#: rhodecode/templates/pullrequests/pullrequest.html:109
 msgid "Send pull request"
 msgstr "Envoyer la requête de pull"
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:23
-#, python-format
-msgid "Closed %s"
-msgstr "Fermée %s"
-
-#: rhodecode/templates/pullrequests/pullrequest_show.html:23
-#, python-format
-msgid "with status %s"
-msgstr "avec %s comme statut."
-
-#: rhodecode/templates/pullrequests/pullrequest_show.html:31
-msgid "Status"
-msgstr "Statut"
-
-#: rhodecode/templates/pullrequests/pullrequest_show.html:36
+#: rhodecode/templates/pullrequests/pullrequest_show.html:4
+#, fuzzy, python-format
+msgid "%s Pull Request #%s"
+msgstr "%s Requête de pull #%s"
+
+#: rhodecode/templates/pullrequests/pullrequest_show.html:35
+#, fuzzy
+msgid "Review status"
+msgstr "Modifier le statut"
+
+#: rhodecode/templates/pullrequests/pullrequest_show.html:40
 msgid "Pull request status"
 msgstr "Statut de la requête de pull"
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:44
+#: rhodecode/templates/pullrequests/pullrequest_show.html:53
 msgid "Still not reviewed by"
 msgstr "Pas encore relue par"
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:48
+#: rhodecode/templates/pullrequests/pullrequest_show.html:57
 #, python-format
 msgid "%d reviewer"
 msgid_plural "%d reviewers"
 msgstr[0] "%d relecteur"
 msgstr[1] "%d relecteurs"
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:50
-msgid "pull request was reviewed by all reviewers"
+#: rhodecode/templates/pullrequests/pullrequest_show.html:59
+#, fuzzy
+msgid "Pull request was reviewed by all reviewers"
 msgstr "La requête de pull a été relue par tous les relecteurs."
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:58
+#: rhodecode/templates/pullrequests/pullrequest_show.html:65
+#, fuzzy
+msgid "Origin repository"
+msgstr "Dépôt Git"
+
+#: rhodecode/templates/pullrequests/pullrequest_show.html:89
 msgid "Created on"
 msgstr "Créé le"
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:65
+#: rhodecode/templates/pullrequests/pullrequest_show.html:102
 msgid "Compare view"
 msgstr "Vue de comparaison"
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:112
+#: rhodecode/templates/pullrequests/pullrequest_show.html:149
 #, fuzzy
 msgid "reviewer"
 msgstr "%d relecteur"
 
+#: rhodecode/templates/pullrequests/pullrequest_show.html:164
+#, fuzzy
+msgid "Add or remove reviewer to this pull request."
+msgstr "Ajouter un relecteur à cette requête de pull."
+
+#: rhodecode/templates/pullrequests/pullrequest_show.html:168
+#, fuzzy
+msgid "Save changes"
+msgstr "Aucun changement"
+
 #: rhodecode/templates/pullrequests/pullrequest_show_all.html:4
-msgid "all pull requests"
-msgstr "Requêtes de pull"
-
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:12
-msgid "All pull requests"
-msgstr "Toutes les requêtes de pull"
-
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:27
-msgid "Closed"
-msgstr "Fermée"
+#, fuzzy, python-format
+msgid "%s Pull Requests"
+msgstr "%s Mes requêtes de pull"
 
 #: rhodecode/templates/search/search.html:6
-#, python-format
-msgid "Search \"%s\" in repository: %s"
-msgstr "Rechercher « %s » dans le dépôt : %s"
+#, fuzzy
+msgid "Search repository"
+msgstr "Rechercher dans le dépôt : %s"
 
 #: rhodecode/templates/search/search.html:8
-#, python-format
-msgid "Search \"%s\" in all repositories"
-msgstr "Rechercher « %s » dans tous les dépôts"
-
-#: rhodecode/templates/search/search.html:12
-#: rhodecode/templates/search/search.html:32
-#, python-format
-msgid "Search in repository: %s"
-msgstr "Rechercher dans le dépôt : %s"
-
-#: rhodecode/templates/search/search.html:14
-#: rhodecode/templates/search/search.html:34
+#: rhodecode/templates/search/search.html:16
 msgid "Search in all repositories"
 msgstr "Rechercher dans tous les dépôts"
 
-#: rhodecode/templates/search/search.html:48
+#: rhodecode/templates/search/search.html:50
 msgid "Search term"
 msgstr "Termes de la recherches"
 
-#: rhodecode/templates/search/search.html:60
+#: rhodecode/templates/search/search.html:62
 msgid "Search in"
 msgstr "Rechercher dans"
 
-#: rhodecode/templates/search/search.html:63
+#: rhodecode/templates/search/search.html:65
 msgid "File contents"
 msgstr "Le contenu des fichiers"
 
-#: rhodecode/templates/search/search.html:64
+#: rhodecode/templates/search/search.html:66
 msgid "Commit messages"
 msgstr "Les messages de commit"
 
-#: rhodecode/templates/search/search.html:65
+#: rhodecode/templates/search/search.html:67
 msgid "File names"
 msgstr "Les noms de fichiers"
 
@@ -4103,42 +4421,25 @@
 msgid "Permission denied"
 msgstr "Permission refusée"
 
-#: rhodecode/templates/settings/repo_settings.html:5
-#, python-format
-msgid "%s Settings"
-msgstr "Réglages de %s"
-
-#: rhodecode/templates/settings/repo_settings.html:102
-#, fuzzy
-msgid "Delete repository"
-msgstr "[a supprimé] le dépôt"
-
-#: rhodecode/templates/settings/repo_settings.html:109
-#, fuzzy
-msgid "Remove repo"
-msgstr "Enlever"
-
 #: rhodecode/templates/shortlog/shortlog.html:5
-#, python-format
-msgid "%s Shortlog"
-msgstr "Résumé de %s"
-
+#, fuzzy, python-format
+msgid "%s Lightweight Changelog"
+msgstr "%s fichié modifié"
+
+#: rhodecode/templates/shortlog/shortlog.html:11
 #: rhodecode/templates/shortlog/shortlog.html:15
-#: rhodecode/templates/shortlog/shortlog.html:19
-msgid "shortlog"
-msgstr "Résumé"
-
-#: rhodecode/templates/shortlog/shortlog_data.html:5
-msgid "revision"
-msgstr "Révision"
+msgid "Lightweight Changelog"
+msgstr ""
 
 #: rhodecode/templates/shortlog/shortlog_data.html:7
-msgid "age"
+#, fuzzy
+msgid "Age"
 msgstr "Âge"
 
-#: rhodecode/templates/shortlog/shortlog_data.html:8
-msgid "author"
-msgstr "Auteur"
+#: rhodecode/templates/shortlog/shortlog_data.html:20
+#, python-format
+msgid "Click to open associated pull request #%s"
+msgstr "Cliquez ici pour ouvrir la requête de pull associée #%s."
 
 #: rhodecode/templates/shortlog/shortlog_data.html:75
 msgid "Add or upload files directly via RhodeCode"
@@ -4157,157 +4458,171 @@
 msgid "%s Summary"
 msgstr "Résumé de %s"
 
-#: rhodecode/templates/summary/summary.html:12
-msgid "summary"
-msgstr "résumé"
-
-#: rhodecode/templates/summary/summary.html:20
-#, python-format
-msgid "repo %s ATOM feed"
-msgstr "Flux ATOM du dépôt %s"
-
-#: rhodecode/templates/summary/summary.html:21
-#, python-format
-msgid "repo %s RSS feed"
-msgstr "Flux RSS du dépôt %s"
-
-#: rhodecode/templates/summary/summary.html:49
-#: rhodecode/templates/summary/summary.html:52
-msgid "ATOM"
-msgstr "ATOM"
-
-#: rhodecode/templates/summary/summary.html:70
+#: rhodecode/templates/summary/summary.html:16
+#, fuzzy, python-format
+msgid "%s ATOM feed"
+msgstr "Flux %s de"
+
+#: rhodecode/templates/summary/summary.html:17
+#, fuzzy, python-format
+msgid "%s RSS feed"
+msgstr "Flux %s de"
+
+#: rhodecode/templates/summary/summary.html:62
 #, fuzzy, python-format
 msgid "Repository locked by %s"
 msgstr "Ce dépôt n’est pas verrouillé %s."
 
-#: rhodecode/templates/summary/summary.html:72
+#: rhodecode/templates/summary/summary.html:64
 #, fuzzy
 msgid "Repository unlocked"
 msgstr "Ce dépôt n’est pas verrouillé."
 
-#: rhodecode/templates/summary/summary.html:91
+#: rhodecode/templates/summary/summary.html:83
 #, python-format
 msgid "Non changable ID %s"
 msgstr "Identifiant permanent : %s"
 
-#: rhodecode/templates/summary/summary.html:96
-msgid "public"
+#: rhodecode/templates/summary/summary.html:88
+#, fuzzy
+msgid "Public"
 msgstr "publique"
 
-#: rhodecode/templates/summary/summary.html:104
-msgid "remote clone"
+#: rhodecode/templates/summary/summary.html:88
+#: rhodecode/templates/summary/summary.html:89
+msgid "Fork of"
+msgstr "Fork de"
+
+#: rhodecode/templates/summary/summary.html:96
+#, fuzzy
+msgid "Remote clone"
 msgstr "Clone distant"
 
-#: rhodecode/templates/summary/summary.html:125
+#: rhodecode/templates/summary/summary.html:117
 msgid "Contact"
 msgstr "Contact"
 
-#: rhodecode/templates/summary/summary.html:139
+#: rhodecode/templates/summary/summary.html:131
 msgid "Clone url"
 msgstr "URL de clone"
 
-#: rhodecode/templates/summary/summary.html:142
+#: rhodecode/templates/summary/summary.html:136
 msgid "Show by Name"
 msgstr "Afficher par nom"
 
-#: rhodecode/templates/summary/summary.html:143
+#: rhodecode/templates/summary/summary.html:137
 msgid "Show by ID"
 msgstr "Afficher par ID"
 
+#: rhodecode/templates/summary/summary.html:143
+msgid "Trending files"
+msgstr "Populaires"
+
 #: rhodecode/templates/summary/summary.html:151
-msgid "Trending files"
-msgstr "Populaires"
+#: rhodecode/templates/summary/summary.html:167
+#: rhodecode/templates/summary/summary.html:232
+msgid "enable"
+msgstr "Activer"
 
 #: rhodecode/templates/summary/summary.html:159
-#: rhodecode/templates/summary/summary.html:175
-#: rhodecode/templates/summary/summary.html:203
-msgid "enable"
-msgstr "Activer"
-
-#: rhodecode/templates/summary/summary.html:167
 msgid "Download"
 msgstr "Téléchargements"
 
-#: rhodecode/templates/summary/summary.html:171
+#: rhodecode/templates/summary/summary.html:163
 msgid "There are no downloads yet"
 msgstr "Il n’y a pas encore de téléchargements proposés."
 
-#: rhodecode/templates/summary/summary.html:173
+#: rhodecode/templates/summary/summary.html:165
 msgid "Downloads are disabled for this repository"
 msgstr "Les téléchargements sont désactivés pour ce dépôt."
 
-#: rhodecode/templates/summary/summary.html:179
+#: rhodecode/templates/summary/summary.html:171
 msgid "Download as zip"
 msgstr "Télécharger en ZIP"
 
-#: rhodecode/templates/summary/summary.html:182
+#: rhodecode/templates/summary/summary.html:174
 msgid "Check this to download archive with subrepos"
 msgstr "Télécharger une archive contenant également les sous-dépôts éventuels"
 
-#: rhodecode/templates/summary/summary.html:182
+#: rhodecode/templates/summary/summary.html:174
 msgid "with subrepos"
 msgstr "avec les sous-dépôts"
 
-#: rhodecode/templates/summary/summary.html:195
+#: rhodecode/templates/summary/summary.html:197
+#, fuzzy
+msgid "Repository Size"
+msgstr "Dépôts"
+
+#: rhodecode/templates/summary/summary.html:204
+#: rhodecode/templates/summary/summary.html:206
+#, fuzzy
+msgid "Feed"
+msgstr "Flux RSS"
+
+#: rhodecode/templates/summary/summary.html:224
 msgid "Commit activity by day / author"
 msgstr "Activité de commit par jour et par auteur"
 
-#: rhodecode/templates/summary/summary.html:206
+#: rhodecode/templates/summary/summary.html:235
 msgid "Stats gathered: "
 msgstr "Statistiques obtenues :"
 
-#: rhodecode/templates/summary/summary.html:227
-msgid "Shortlog"
-msgstr "Résumé des changements"
-
-#: rhodecode/templates/summary/summary.html:229
+#: rhodecode/templates/summary/summary.html:256
+#, fuzzy
+msgid "Latest changes"
+msgstr "Dernière modification"
+
+#: rhodecode/templates/summary/summary.html:258
 msgid "Quick start"
 msgstr "Démarrage rapide"
 
-#: rhodecode/templates/summary/summary.html:243
+#: rhodecode/templates/summary/summary.html:272
 #, python-format
 msgid "Readme file at revision '%s'"
 msgstr "Fichier « Lisez-moi » à la révision « %s »"
 
-#: rhodecode/templates/summary/summary.html:246
+#: rhodecode/templates/summary/summary.html:275
 msgid "Permalink to this readme"
 msgstr "Lien permanent vers ce fichier « Lisez-moi »"
 
-#: rhodecode/templates/summary/summary.html:304
+#: rhodecode/templates/summary/summary.html:333
 #, python-format
 msgid "Download %s as %s"
 msgstr "Télécharger %s comme archive %s"
 
-#: rhodecode/templates/summary/summary.html:661
+#: rhodecode/templates/summary/summary.html:380
+msgid "files"
+msgstr "Fichiers"
+
+#: rhodecode/templates/summary/summary.html:690
 msgid "commits"
 msgstr "commits"
 
-#: rhodecode/templates/summary/summary.html:662
+#: rhodecode/templates/summary/summary.html:691
 msgid "files added"
 msgstr "fichiers ajoutés"
 
-#: rhodecode/templates/summary/summary.html:663
+#: rhodecode/templates/summary/summary.html:692
 msgid "files changed"
 msgstr "fichiers modifiés"
 
-#: rhodecode/templates/summary/summary.html:664
+#: rhodecode/templates/summary/summary.html:693
 msgid "files removed"
 msgstr "fichiers supprimés"
 
-#: rhodecode/templates/summary/summary.html:667
+#: rhodecode/templates/summary/summary.html:695
 msgid "commit"
 msgstr "commit"
 
-#: rhodecode/templates/summary/summary.html:668
+#: rhodecode/templates/summary/summary.html:696
 msgid "file added"
 msgstr "fichier ajouté"
 
-#: rhodecode/templates/summary/summary.html:669
+#: rhodecode/templates/summary/summary.html:697
 msgid "file changed"
 msgstr "fichié modifié"
 
-#: rhodecode/templates/summary/summary.html:670
+#: rhodecode/templates/summary/summary.html:698
 msgid "file removed"
 msgstr "fichier supprimé"
 
@@ -4316,34 +4631,8 @@
 msgid "%s Tags"
 msgstr "Tags de %s"
 
-#: rhodecode/templates/tags/tags.html:29
+#: rhodecode/templates/tags/tags.html:26
 #, fuzzy
 msgid "Compare tags"
 msgstr "Comparer"
 
-#~ msgid ""
-#~ "%s repository is not mapped to db"
-#~ " perhaps it was created or renamed"
-#~ " from the file system please run "
-#~ "the application again in order to "
-#~ "rescan repositories"
-#~ msgstr ""
-#~ "Le dépôt %s n’est pas représenté "
-#~ "dans la base de données. Il a "
-#~ "probablement été créé ou renommé "
-#~ "manuellement. Veuillez relancer l’application "
-#~ "pour rescanner les dépôts."
-
-#~ msgid ""
-#~ "%s repository is not mapped to db"
-#~ " perhaps it was moved or renamed  "
-#~ "from the filesystem please run the "
-#~ "application again in order to rescan "
-#~ "repositories"
-#~ msgstr ""
-#~ "Le dépôt %s n’est pas représenté "
-#~ "dans la base de données. Il a "
-#~ "probablement été déplacé ou renommé "
-#~ "manuellement. Veuillez relancer l’application "
-#~ "pour rescanner les dépôts."
-
--- a/rhodecode/i18n/how_to	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/i18n/how_to	Sun Apr 07 18:37:22 2013 +0200
@@ -8,17 +8,17 @@
 python setup.py init_catalog -l pl <- create a language directory for <pl> lang
 #edit the new po file with poedit or any other editor
 msgfmt -f -c <updated_file.po> <- check format and errors
-python setup.py compile_catalog <- create translation files
+python setup.py compile_catalog -l pl <- create translation files
 
 ############# 
 # to update #
 #############
 
 python setup.py extract_messages <- get messages from project
-python setup.py update_catalog <- to update the translations
+python setup.py update_catalog -l pl<- to update the translations
 #edit the new updated po file with poedit
 msgfmt -f -c <updated_file.po> <- check format and errors
-python setup.py compile_catalog <- create translation files
+python setup.py compile_catalog -l pl <- create translation files
 
 
 ###################
Binary file rhodecode/i18n/ja/LC_MESSAGES/rhodecode.mo has changed
--- a/rhodecode/i18n/ja/LC_MESSAGES/rhodecode.po	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/i18n/ja/LC_MESSAGES/rhodecode.po	Sun Apr 07 18:37:22 2013 +0200
@@ -12,8 +12,8 @@
 msgstr ""
 "Project-Id-Version: RhodeCode 1.2.0\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2012-12-14 04:19+0100\n"
-"PO-Revision-Date: 2013-01-02 01:39+0900\n"
+"POT-Creation-Date: 2013-04-05 10:19-0700\n"
+"PO-Revision-Date: 2013-04-06 21:38+0900\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: ja <LL@li.org>\n"
 "Plural-Forms: nplurals=1; plural=0\n"
@@ -27,11 +27,11 @@
 msgstr "すべてのブランチ"
 
 #: rhodecode/controllers/changeset.py:83
-msgid "show white space"
+msgid "Show white space"
 msgstr "空白を表示"
 
 #: rhodecode/controllers/changeset.py:90 rhodecode/controllers/changeset.py:97
-msgid "ignore white space"
+msgid "Ignore white space"
 msgstr "空白を無視"
 
 #: rhodecode/controllers/changeset.py:163
@@ -39,20 +39,20 @@
 msgid "%s line context"
 msgstr ""
 
-#: rhodecode/controllers/changeset.py:314
-#: rhodecode/controllers/pullrequests.py:417
+#: rhodecode/controllers/changeset.py:329
+#: rhodecode/controllers/pullrequests.py:438
 #, python-format
 msgid "Status change -> %s"
 msgstr "ステータス変更 -> %s"
 
-#: rhodecode/controllers/changeset.py:345
+#: rhodecode/controllers/changeset.py:360
 msgid ""
-"Changing status on a changeset associated witha closed pull request is "
+"Changing status on a changeset associated with a closed pull request is "
 "not allowed"
-msgstr ""
-
-#: rhodecode/controllers/compare.py:75
-#: rhodecode/controllers/pullrequests.py:121
+msgstr "クローズしたプルリクエストに関連するチェンジセットのステータスを変更することは許可されていません"
+
+#: rhodecode/controllers/compare.py:74
+#: rhodecode/controllers/pullrequests.py:167
 #: rhodecode/controllers/shortlog.py:100
 msgid "There are no changesets yet"
 msgstr "まだ変更がありません"
@@ -94,156 +94,187 @@
 msgstr "%s %s フィード"
 
 #: rhodecode/controllers/feed.py:86
-#: rhodecode/templates/changeset/changeset.html:137
-#: rhodecode/templates/changeset/changeset.html:149
-#: rhodecode/templates/compare/compare_diff.html:62
-#: rhodecode/templates/compare/compare_diff.html:73
-#: rhodecode/templates/pullrequests/pullrequest_show.html:94
-#: rhodecode/templates/pullrequests/pullrequest_show.html:153
+#: rhodecode/templates/changeset/changeset.html:134
+#: rhodecode/templates/changeset/changeset.html:146
+#: rhodecode/templates/compare/compare_diff.html:58
+#: rhodecode/templates/compare/compare_diff.html:69
+#: rhodecode/templates/pullrequests/pullrequest_show.html:131
+#: rhodecode/templates/pullrequests/pullrequest_show.html:195
 msgid "Changeset was too big and was cut off..."
 msgstr "チェンジセットが大きすぎるため、省略しました"
 
-#: rhodecode/controllers/feed.py:92
-msgid "commited on"
-msgstr "コミット"
-
-#: rhodecode/controllers/files.py:86
-msgid "click here to add new file"
+#: rhodecode/controllers/feed.py:91
+#, python-format
+msgid "%s committed on %s"
+msgstr "%s コミット %s"
+
+#: rhodecode/controllers/files.py:88
+msgid "Click here to add new file"
 msgstr "新しいファイルを追加"
 
-#: rhodecode/controllers/files.py:87
+#: rhodecode/controllers/files.py:89
 #, python-format
 msgid "There are no files yet %s"
 msgstr "まだファイルがありません %s"
 
-#: rhodecode/controllers/files.py:265 rhodecode/controllers/files.py:325
+#: rhodecode/controllers/files.py:267 rhodecode/controllers/files.py:335
 #, python-format
 msgid "This repository is has been locked by %s on %s"
 msgstr "このリポジトリは %s によって %s にロックされました"
 
-#: rhodecode/controllers/files.py:292
+#: rhodecode/controllers/files.py:279
+msgid "You can only edit files with revision being a valid branch "
+msgstr ""
+
+#: rhodecode/controllers/files.py:293
 #, python-format
-msgid "Edited %s via RhodeCode"
+msgid "Edited file %s via RhodeCode"
 msgstr "RhodeCode経由で %s を変更"
 
-#: rhodecode/controllers/files.py:297
+#: rhodecode/controllers/files.py:309
 msgid "No changes"
 msgstr "変更点なし"
 
-#: rhodecode/controllers/files.py:308 rhodecode/controllers/files.py:372
+#: rhodecode/controllers/files.py:318 rhodecode/controllers/files.py:388
 #, python-format
 msgid "Successfully committed to %s"
 msgstr "%s へのコミットが成功しました"
 
-#: rhodecode/controllers/files.py:313 rhodecode/controllers/files.py:378
+#: rhodecode/controllers/files.py:323 rhodecode/controllers/files.py:394
 msgid "Error occurred during commit"
 msgstr "コミット中にエラーが発生しました"
 
-#: rhodecode/controllers/files.py:344
-#, python-format
-msgid "Added %s via RhodeCode"
-msgstr "RhodeCode経由で %s を追加"
-
-#: rhodecode/controllers/files.py:358
+#: rhodecode/controllers/files.py:347
+msgid "Added file via RhodeCode"
+msgstr "RhodeCode経由でファイルを追加"
+
+#: rhodecode/controllers/files.py:364
 msgid "No content"
 msgstr "内容がありません"
 
-#: rhodecode/controllers/files.py:362
+#: rhodecode/controllers/files.py:368
 msgid "No filename"
 msgstr "ファイル名がありません"
 
-#: rhodecode/controllers/files.py:404
-msgid "downloads disabled"
+#: rhodecode/controllers/files.py:372
+msgid "Location must be relative path and must not contain .. in path"
+msgstr "場所には相対パスかつ .. を含まないパスを入力してください"
+
+#: rhodecode/controllers/files.py:420
+msgid "Downloads disabled"
 msgstr "ダウンロードは無効化されています"
 
-#: rhodecode/controllers/files.py:415
+#: rhodecode/controllers/files.py:431
 #, python-format
 msgid "Unknown revision %s"
 msgstr "%s は未知のリビジョンです"
 
-#: rhodecode/controllers/files.py:417
+#: rhodecode/controllers/files.py:433
 msgid "Empty repository"
 msgstr "空のリポジトリ"
 
-#: rhodecode/controllers/files.py:419
+#: rhodecode/controllers/files.py:435
 msgid "Unknown archive type"
 msgstr "未知のアーカイブ種別です"
 
-#: rhodecode/controllers/files.py:564
-#: rhodecode/templates/changeset/changeset_range.html:13
-#: rhodecode/templates/changeset/changeset_range.html:31
+#: rhodecode/controllers/files.py:617
+#: rhodecode/templates/changeset/changeset_range.html:9
 msgid "Changesets"
 msgstr "チェンジセット"
 
-#: rhodecode/controllers/files.py:565 rhodecode/controllers/pullrequests.py:74
-#: rhodecode/controllers/summary.py:236 rhodecode/model/scm.py:550
+#: rhodecode/controllers/files.py:618 rhodecode/controllers/pullrequests.py:131
+#: rhodecode/controllers/summary.py:247 rhodecode/model/scm.py:606
+#: rhodecode/templates/switch_to_list.html:3
+#: rhodecode/templates/branches/branches.html:10
 msgid "Branches"
 msgstr "ブランチ"
 
-#: rhodecode/controllers/files.py:566 rhodecode/controllers/pullrequests.py:78
-#: rhodecode/controllers/summary.py:237 rhodecode/model/scm.py:561
+#: rhodecode/controllers/files.py:619 rhodecode/controllers/pullrequests.py:132
+#: rhodecode/controllers/summary.py:248 rhodecode/model/scm.py:617
+#: rhodecode/templates/switch_to_list.html:15
+#: rhodecode/templates/shortlog/shortlog_data.html:10
+#: rhodecode/templates/tags/tags.html:10
 msgid "Tags"
 msgstr "タグ"
 
-#: rhodecode/controllers/forks.py:158
+#: rhodecode/controllers/forks.py:175
 #, python-format
-msgid "forked %s repository as %s"
-msgstr "リポジトリ %s を %s としてフォーク"
-
-#: rhodecode/controllers/forks.py:172
+msgid "Forked repository %s as %s"
+msgstr "リポジトリ %s を %s としてフォークしました"
+
+#: rhodecode/controllers/forks.py:189
 #, python-format
 msgid "An error occurred during repository forking %s"
 msgstr "リポジトリ %s のフォーク中にエラーが発生しました"
 
-#: rhodecode/controllers/journal.py:218 rhodecode/controllers/journal.py:261
+#: rhodecode/controllers/journal.py:275 rhodecode/controllers/journal.py:318
 msgid "public journal"
 msgstr "公開ジャーナル"
 
-#: rhodecode/controllers/journal.py:222 rhodecode/controllers/journal.py:265
-#: rhodecode/templates/base/base.html:232
+#: rhodecode/controllers/journal.py:279 rhodecode/controllers/journal.py:322
 #: rhodecode/templates/journal/journal.html:12
 msgid "journal"
 msgstr "ジャーナル"
 
-#: rhodecode/controllers/login.py:143
-msgid "You have successfully registered into rhodecode"
-msgstr "rhodecodeへの登録を受け付けました"
-
-#: rhodecode/controllers/login.py:164
+#: rhodecode/controllers/login.py:138
+msgid "You have successfully registered into RhodeCode"
+msgstr "RhodeCodeへの登録を受け付けました"
+
+#: rhodecode/controllers/login.py:159
 msgid "Your password reset link was sent"
 msgstr "パスワードリセットのリンクを送信しました"
 
-#: rhodecode/controllers/login.py:184
+#: rhodecode/controllers/login.py:179
 msgid ""
 "Your password reset was successful, new password has been sent to your "
 "email"
 msgstr "パスワードをリセットしました。新しいパスワードをあなたのメールアドレスに送りました"
 
-#: rhodecode/controllers/pullrequests.py:76 rhodecode/model/scm.py:556
+#: rhodecode/controllers/pullrequests.py:118
+#: rhodecode/templates/changeset/changeset.html:10
+#: rhodecode/templates/email_templates/changeset_comment.html:15
+msgid "Changeset"
+msgstr "チェンジセット"
+
+#: rhodecode/controllers/pullrequests.py:128
+msgid "Special"
+msgstr ""
+
+#: rhodecode/controllers/pullrequests.py:129
+msgid "Peer branches"
+msgstr "相手のブランチ"
+
+#: rhodecode/controllers/pullrequests.py:130 rhodecode/model/scm.py:612
+#: rhodecode/templates/switch_to_list.html:28
+#: rhodecode/templates/bookmarks/bookmarks.html:10
 msgid "Bookmarks"
 msgstr "ブックマーク"
 
-#: rhodecode/controllers/pullrequests.py:190
+#: rhodecode/controllers/pullrequests.py:228
 msgid "Pull request requires a title with min. 3 chars"
 msgstr "プルリクエストには3文字以上のタイトルが必要です"
 
-#: rhodecode/controllers/pullrequests.py:192
-msgid "error during creation of pull request"
+#: rhodecode/controllers/pullrequests.py:230
+msgid "Error creating pull request"
 msgstr "プルリクエストの作成中にエラーが発生しました"
 
-#: rhodecode/controllers/pullrequests.py:224
+#: rhodecode/controllers/pullrequests.py:251
 msgid "Successfully opened new pull request"
 msgstr "新しいプルリクエストを作成しました"
 
-#: rhodecode/controllers/pullrequests.py:227
+#: rhodecode/controllers/pullrequests.py:254
 msgid "Error occurred during sending pull request"
 msgstr "プルリクエストの作成中にエラーが発生しました"
 
-#: rhodecode/controllers/pullrequests.py:260
+#: rhodecode/controllers/pullrequests.py:287
 msgid "Successfully deleted pull request"
 msgstr "プルリクエストを削除しました"
 
-#: rhodecode/controllers/pullrequests.py:452
+#: rhodecode/controllers/pullrequests.py:441
+msgid "Closing with"
+msgstr ""
+
+#: rhodecode/controllers/pullrequests.py:478
 msgid "Closing pull request on other statuses than rejected or approved forbidden"
 msgstr ""
 
@@ -259,55 +290,12 @@
 msgid "An error occurred during this search operation"
 msgstr "検索を実行する際にエラーがおきました"
 
-#: rhodecode/controllers/settings.py:119
-#: rhodecode/controllers/admin/repos.py:272
-#, python-format
-msgid "Repository %s updated successfully"
-msgstr "リポジトリ %s の更新に成功しました"
-
-#: rhodecode/controllers/settings.py:137
-#: rhodecode/controllers/admin/repos.py:290
-#, python-format
-msgid "error occurred during update of repository %s"
-msgstr "リポジトリ %s の更新中にエラーが発生しました"
-
-#: rhodecode/controllers/settings.py:162
-#: rhodecode/controllers/admin/repos.py:315
-#, python-format
-msgid "deleted repository %s"
-msgstr "リポジトリ %s を削除しました"
-
-#: rhodecode/controllers/settings.py:166
-#: rhodecode/controllers/admin/repos.py:325
-#: rhodecode/controllers/admin/repos.py:331
-#, python-format
-msgid "An error occurred during deletion of %s"
-msgstr "リポジトリ %s の削除中にエラーが発生しました"
-
-#: rhodecode/controllers/settings.py:185
-msgid "unlocked"
-msgstr "アンロック"
-
-#: rhodecode/controllers/settings.py:188
-msgid "locked"
-msgstr "ロック"
-
-#: rhodecode/controllers/settings.py:190
-#, python-format
-msgid "Repository has been %s"
-msgstr "リポジトリは %s されています"
-
-#: rhodecode/controllers/settings.py:194
-#: rhodecode/controllers/admin/repos.py:423
-msgid "An error occurred during unlocking"
-msgstr "アンロック時にエラーが発生しました"
-
-#: rhodecode/controllers/summary.py:140
+#: rhodecode/controllers/summary.py:141
 msgid "No data loaded yet"
 msgstr "まだデータが読み込まれていません"
 
-#: rhodecode/controllers/summary.py:144
-#: rhodecode/templates/summary/summary.html:157
+#: rhodecode/controllers/summary.py:147
+#: rhodecode/templates/summary/summary.html:149
 msgid "Statistics are disabled for this repository"
 msgstr "このリポジトリの統計は無効化されています"
 
@@ -316,7 +304,7 @@
 msgstr "デフォルト設定を更新しました"
 
 #: rhodecode/controllers/admin/defaults.py:110
-msgid "error occurred during update of defaults"
+msgid "Error occurred during update of defaults"
 msgstr "デフォルト設定の更新中にエラーが発生しました"
 
 #: rhodecode/controllers/admin/ldap_settings.py:50
@@ -364,7 +352,7 @@
 msgstr "LDAP接続でSTART_TLSを使用"
 
 #: rhodecode/controllers/admin/ldap_settings.py:126
-msgid "Ldap settings updated successfully"
+msgid "LDAP settings updated successfully"
 msgstr "LDAP設定を更新しました"
 
 #: rhodecode/controllers/admin/ldap_settings.py:130
@@ -372,533 +360,616 @@
 msgstr "LDAPを有効にできませんでした。\"python-ldap\"ライブラリがありません。"
 
 #: rhodecode/controllers/admin/ldap_settings.py:147
-msgid "error occurred during update of ldap settings"
+msgid "Error occurred during update of ldap settings"
 msgstr "LDAP設定の更新中にエラーが発生しました"
 
-#: rhodecode/controllers/admin/permissions.py:59
-#: rhodecode/controllers/admin/permissions.py:63
-msgid "None"
-msgstr "なし"
-
 #: rhodecode/controllers/admin/permissions.py:60
 #: rhodecode/controllers/admin/permissions.py:64
-msgid "Read"
-msgstr "読込"
+msgid "None"
+msgstr "なし"
 
 #: rhodecode/controllers/admin/permissions.py:61
 #: rhodecode/controllers/admin/permissions.py:65
-msgid "Write"
-msgstr "書込"
+msgid "Read"
+msgstr "読込"
 
 #: rhodecode/controllers/admin/permissions.py:62
 #: rhodecode/controllers/admin/permissions.py:66
+msgid "Write"
+msgstr "書込"
+
+#: rhodecode/controllers/admin/permissions.py:63
+#: rhodecode/controllers/admin/permissions.py:67
 #: rhodecode/templates/admin/defaults/defaults.html:9
 #: rhodecode/templates/admin/ldap/ldap.html:9
 #: rhodecode/templates/admin/permissions/permissions.html:9
-#: rhodecode/templates/admin/repos/repo_add.html:9
-#: rhodecode/templates/admin/repos/repo_edit.html:9
+#: rhodecode/templates/admin/repos/repo_add.html:10
+#: rhodecode/templates/admin/repos/repo_add.html:14
 #: rhodecode/templates/admin/repos/repos.html:9
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:8
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:8
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:10
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:9
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:9
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:11
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:13
 #: rhodecode/templates/admin/settings/hooks.html:9
 #: rhodecode/templates/admin/settings/settings.html:9
 #: rhodecode/templates/admin/users/user_add.html:8
 #: rhodecode/templates/admin/users/user_edit.html:9
-#: rhodecode/templates/admin/users/user_edit.html:126
+#: rhodecode/templates/admin/users/user_edit.html:133
 #: rhodecode/templates/admin/users/users.html:9
+#: rhodecode/templates/admin/users/users.html:85
 #: rhodecode/templates/admin/users_groups/users_group_add.html:8
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:9
 #: rhodecode/templates/admin/users_groups/users_groups.html:9
-#: rhodecode/templates/base/base.html:197
-#: rhodecode/templates/base/base.html:350
-#: rhodecode/templates/base/base.html:352
-#: rhodecode/templates/base/base.html:354
+#: rhodecode/templates/base/base.html:292
+#: rhodecode/templates/base/base.html:293
+#: rhodecode/templates/base/base.html:299
+#: rhodecode/templates/base/base.html:300
 msgid "Admin"
 msgstr "管理"
 
-#: rhodecode/controllers/admin/permissions.py:69
-msgid "disabled"
-msgstr "無効にする"
-
-#: rhodecode/controllers/admin/permissions.py:71
-msgid "allowed with manual account activation"
-msgstr "手動でアカウントを有効にする"
-
-#: rhodecode/controllers/admin/permissions.py:73
-msgid "allowed with automatic account activation"
-msgstr "自動でアカウントを有効にする"
-
-#: rhodecode/controllers/admin/permissions.py:75
-#: rhodecode/controllers/admin/permissions.py:78
+#: rhodecode/controllers/admin/permissions.py:70
+#: rhodecode/controllers/admin/permissions.py:76
+#: rhodecode/controllers/admin/permissions.py:79
 msgid "Disabled"
 msgstr "無効"
 
-#: rhodecode/controllers/admin/permissions.py:76
-#: rhodecode/controllers/admin/permissions.py:79
+#: rhodecode/controllers/admin/permissions.py:72
+msgid "Allowed with manual account activation"
+msgstr "手動でアカウントを有効にする"
+
+#: rhodecode/controllers/admin/permissions.py:74
+msgid "Allowed with automatic account activation"
+msgstr "自動でアカウントを有効にする"
+
+#: rhodecode/controllers/admin/permissions.py:77
+#: rhodecode/controllers/admin/permissions.py:80
 msgid "Enabled"
 msgstr "有効"
 
-#: rhodecode/controllers/admin/permissions.py:122
+#: rhodecode/controllers/admin/permissions.py:128
 msgid "Default permissions updated successfully"
 msgstr "デフォルトの権限を更新しました"
 
-#: rhodecode/controllers/admin/permissions.py:136
-msgid "error occurred during update of permissions"
+#: rhodecode/controllers/admin/permissions.py:142
+msgid "Error occurred during update of permissions"
 msgstr "権限の更新中にエラーが発生しました"
 
-#: rhodecode/controllers/admin/repos.py:121
+#: rhodecode/controllers/admin/repos.py:127
 msgid "--REMOVE FORK--"
 msgstr "--フォーク元を削除--"
 
-#: rhodecode/controllers/admin/repos.py:190
+#: rhodecode/controllers/admin/repos.py:168
+#, python-format
+msgid "Created repository %s from %s"
+msgstr "リポジトリ %s を %s から作成しました"
+
+#: rhodecode/controllers/admin/repos.py:174
 #, python-format
-msgid "created repository %s from %s"
-msgstr "リポジトリ %s を %s から作成"
-
-#: rhodecode/controllers/admin/repos.py:194
+msgid "Created repository %s"
+msgstr "リポジトリ %s を作成しました"
+
+#: rhodecode/controllers/admin/repos.py:197
+#, python-format
+msgid "Error creating repository %s"
+msgstr "リポジトリ %s の作成中にエラーが発生しました"
+
+#: rhodecode/controllers/admin/repos.py:266
+#, python-format
+msgid "Repository %s updated successfully"
+msgstr "リポジトリ %s の更新に成功しました"
+
+#: rhodecode/controllers/admin/repos.py:284
 #, python-format
-msgid "created repository %s"
-msgstr "リポジトリ %s を作成しました"
-
-#: rhodecode/controllers/admin/repos.py:225
+msgid "Error occurred during update of repository %s"
+msgstr "リポジトリ %s の更新中にエラーが発生しました"
+
+#: rhodecode/controllers/admin/repos.py:311
+#: rhodecode/controllers/api/api.py:877
 #, python-format
-msgid "error occurred during creation of repository %s"
-msgstr "リポジトリ %s を作成中にエラーが発生しました"
-
-#: rhodecode/controllers/admin/repos.py:320
+msgid "Detached %s forks"
+msgstr "%s 個のフォークを切り離しました"
+
+#: rhodecode/controllers/admin/repos.py:314
+#: rhodecode/controllers/api/api.py:879
+#, python-format
+msgid "Deleted %s forks"
+msgstr "%s 個のフォークを削除しました"
+
+#: rhodecode/controllers/admin/repos.py:319
+#, python-format
+msgid "Deleted repository %s"
+msgstr "リポジトリ %s を削除しました"
+
+#: rhodecode/controllers/admin/repos.py:322
 #, python-format
 msgid "Cannot delete %s it still contains attached forks"
 msgstr "フォークしたリポジトリが存在するため、 %s は削除できません"
 
-#: rhodecode/controllers/admin/repos.py:349
+#: rhodecode/controllers/admin/repos.py:327
+#, python-format
+msgid "An error occurred during deletion of %s"
+msgstr "リポジトリ %s の削除中にエラーが発生しました"
+
+#: rhodecode/controllers/admin/repos.py:365
+msgid "Repository permissions updated"
+msgstr "リポジトリ権限を更新しました"
+
+#: rhodecode/controllers/admin/repos.py:384
 msgid "An error occurred during deletion of repository user"
 msgstr "リポジトリユーザーの削除中にエラーが発生しました"
 
-#: rhodecode/controllers/admin/repos.py:368
-msgid "An error occurred during deletion of repository users groups"
+#: rhodecode/controllers/admin/repos.py:403
+msgid "An error occurred during deletion of repository user groups"
 msgstr "リポジトリユーザーグループの削除中にエラーが発生しました"
 
-#: rhodecode/controllers/admin/repos.py:386
+#: rhodecode/controllers/admin/repos.py:421
 msgid "An error occurred during deletion of repository stats"
 msgstr "リポジトリステートの削除中にエラーが発生しました"
 
-#: rhodecode/controllers/admin/repos.py:403
+#: rhodecode/controllers/admin/repos.py:438
 msgid "An error occurred during cache invalidation"
-msgstr "キャッシュの無効化時にエラーが発生しました"
-
-#: rhodecode/controllers/admin/repos.py:443
+msgstr "キャッシュの無効化中にエラーが発生しました"
+
+#: rhodecode/controllers/admin/repos.py:458
+#: rhodecode/controllers/admin/repos.py:485
+msgid "An error occurred during unlocking"
+msgstr "アンロック中にエラーが発生しました"
+
+#: rhodecode/controllers/admin/repos.py:476
+msgid "Unlocked"
+msgstr "アンロック"
+
+#: rhodecode/controllers/admin/repos.py:479
+msgid "Locked"
+msgstr "ロック"
+
+#: rhodecode/controllers/admin/repos.py:481
+#, python-format
+msgid "Repository has been %s"
+msgstr "リポジトリは %s されています"
+
+#: rhodecode/controllers/admin/repos.py:505
 msgid "Updated repository visibility in public journal"
 msgstr "公開ジャーナルでのリポジトリの可視性を更新しました"
 
-#: rhodecode/controllers/admin/repos.py:447
+#: rhodecode/controllers/admin/repos.py:509
 msgid "An error occurred during setting this repository in public journal"
 msgstr "このリポジトリの公開ジャーナルの設定中にエラーが発生しました"
 
-#: rhodecode/controllers/admin/repos.py:452 rhodecode/model/validators.py:300
+#: rhodecode/controllers/admin/repos.py:514 rhodecode/model/validators.py:302
 msgid "Token mismatch"
 msgstr "トークンが合いません"
 
-#: rhodecode/controllers/admin/repos.py:465
+#: rhodecode/controllers/admin/repos.py:527
 msgid "Pulled from remote location"
 msgstr "リモートから取得"
 
-#: rhodecode/controllers/admin/repos.py:467
+#: rhodecode/controllers/admin/repos.py:529
 msgid "An error occurred during pull from remote location"
 msgstr "リモートから取得中にエラーが発生しました"
 
-#: rhodecode/controllers/admin/repos.py:483
+#: rhodecode/controllers/admin/repos.py:545
 msgid "Nothing"
 msgstr "ありません"
 
-#: rhodecode/controllers/admin/repos.py:485
+#: rhodecode/controllers/admin/repos.py:547
 #, python-format
 msgid "Marked repo %s as fork of %s"
 msgstr "%s リポジトリを %s のフォークとして印をつける"
 
-#: rhodecode/controllers/admin/repos.py:489
+#: rhodecode/controllers/admin/repos.py:551
 msgid "An error occurred during this operation"
 msgstr "操作中にエラーが発生しました"
 
-#: rhodecode/controllers/admin/repos_groups.py:120
+#: rhodecode/controllers/admin/repos.py:590
+msgid "An error occurred during creation of field"
+msgstr "フィールドの作成中にエラーが発生しました"
+
+#: rhodecode/controllers/admin/repos.py:604
+msgid "An error occurred during removal of field"
+msgstr "フィールドの削除中にエラーが発生しました"
+
+#: rhodecode/controllers/admin/repos_groups.py:145
 #, python-format
-msgid "created repos group %s"
+msgid "Created repository group %s"
 msgstr "リポジトリグループ %s を作成しました"
 
-#: rhodecode/controllers/admin/repos_groups.py:133
+#: rhodecode/controllers/admin/repos_groups.py:157
 #, python-format
-msgid "error occurred during creation of repos group %s"
-msgstr "リポジトリグループ %s を作成中にエラーが発生しました"
-
-#: rhodecode/controllers/admin/repos_groups.py:167
+msgid "Error occurred during creation of repository group %s"
+msgstr "リポジトリグループ %s の作成中にエラーが発生しました"
+
+#: rhodecode/controllers/admin/repos_groups.py:214
+#: rhodecode/controllers/admin/repos_groups.py:286
+msgid "Cannot revoke permission for yourself as admin"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos_groups.py:220
 #, python-format
-msgid "updated repos group %s"
+msgid "Updated repository group %s"
 msgstr "リポジトリグループ %s を更新しました"
 
-#: rhodecode/controllers/admin/repos_groups.py:180
+#: rhodecode/controllers/admin/repos_groups.py:235
 #, python-format
-msgid "error occurred during update of repos group %s"
-msgstr "リポジトリグループ %s を更新中にエラーが発生しました"
-
-#: rhodecode/controllers/admin/repos_groups.py:198
+msgid "Error occurred during update of repository group %s"
+msgstr "リポジトリグループ %s の更新中にエラーが発生しました"
+
+#: rhodecode/controllers/admin/repos_groups.py:253
 #, python-format
 msgid "This group contains %s repositores and cannot be deleted"
 msgstr "このグループは %s リポジトリを含んでいるため削除出来ません"
 
-#: rhodecode/controllers/admin/repos_groups.py:206
+#: rhodecode/controllers/admin/repos_groups.py:260
 #, python-format
-msgid "removed repos group %s"
+msgid "This group contains %s subgroups and cannot be deleted"
+msgstr "このグループは %s サブグループを含んでいるため削除出来ません"
+
+#: rhodecode/controllers/admin/repos_groups.py:266
+#, python-format
+msgid "Removed repository group %s"
 msgstr "リポジトリグループ %s を削除しました"
 
-#: rhodecode/controllers/admin/repos_groups.py:212
-msgid "Cannot delete this group it still contains subgroups"
-msgstr "サブグループを含んでいるため、このグループを削除できません"
-
-#: rhodecode/controllers/admin/repos_groups.py:217
-#: rhodecode/controllers/admin/repos_groups.py:222
+#: rhodecode/controllers/admin/repos_groups.py:271
 #, python-format
-msgid "error occurred during deletion of repos group %s"
+msgid "Error occurred during deletion of repos group %s"
 msgstr "リポジトリグループ %s の削除中にエラーが発生しました"
 
-#: rhodecode/controllers/admin/repos_groups.py:243
+#: rhodecode/controllers/admin/repos_groups.py:297
 msgid "An error occurred during deletion of group user"
 msgstr "グループユーザーを削除中にエラーが発生しました"
 
-#: rhodecode/controllers/admin/repos_groups.py:264
-msgid "An error occurred during deletion of group users groups"
-msgstr "グループユーザーのグループを削除中にエラーが発生しました"
-
-#: rhodecode/controllers/admin/settings.py:123
+#: rhodecode/controllers/admin/repos_groups.py:318
+msgid "An error occurred during deletion of group user groups"
+msgstr "グループユーザーのグループの削除中にエラーが発生しました"
+
+#: rhodecode/controllers/admin/settings.py:126
 #, python-format
-msgid "Repositories successfully rescanned added: %s,removed: %s"
-msgstr "リポジトリを再度スキャンしました。 追加: %s 削除: %s"
-
-#: rhodecode/controllers/admin/settings.py:131
+msgid "Repositories successfully rescanned added: %s ; removed: %s"
+msgstr "リポジトリの再スキャンに成功しました。 追加: %s 削除: %s"
+
+#: rhodecode/controllers/admin/settings.py:135
 msgid "Whoosh reindex task scheduled"
 msgstr "Whooshの再インデックスタスクを予定に入れました"
 
-#: rhodecode/controllers/admin/settings.py:162
-msgid "Updated application settings"
-msgstr "アプリケーション設定を更新しました"
-
 #: rhodecode/controllers/admin/settings.py:166
-#: rhodecode/controllers/admin/settings.py:299
-msgid "error occurred during updating application settings"
-msgstr "アプリケーション設定を更新中にエラーが発生しました"
-
-#: rhodecode/controllers/admin/settings.py:207
+msgid "Updated application settings"
+msgstr "アプリケーション設定を更新しました"
+
+#: rhodecode/controllers/admin/settings.py:170
+#: rhodecode/controllers/admin/settings.py:301
+msgid "Error occurred during updating application settings"
+msgstr "アプリケーション設定の更新中にエラーが発生しました"
+
+#: rhodecode/controllers/admin/settings.py:216
 msgid "Updated visualisation settings"
-msgstr "表示の設定を更新しました"
-
-#: rhodecode/controllers/admin/settings.py:212
-msgid "error occurred during updating visualisation settings"
-msgstr "表示の設定を更新中にエラーが発生しました"
-
-#: rhodecode/controllers/admin/settings.py:295
+msgstr "表示設定を更新しました"
+
+#: rhodecode/controllers/admin/settings.py:221
+msgid "Error occurred during updating visualisation settings"
+msgstr "表示設定の更新中にエラーが発生しました"
+
+#: rhodecode/controllers/admin/settings.py:297
 msgid "Updated VCS settings"
-msgstr "VCSの設定を更新しました"
-
-#: rhodecode/controllers/admin/settings.py:309
+msgstr "VCS設定を更新しました"
+
+#: rhodecode/controllers/admin/settings.py:311
 msgid "Added new hook"
 msgstr "新しいフックを追加しました"
 
-#: rhodecode/controllers/admin/settings.py:321
+#: rhodecode/controllers/admin/settings.py:323
 msgid "Updated hooks"
 msgstr "フックを更新しました"
 
-#: rhodecode/controllers/admin/settings.py:325
-msgid "error occurred during hook creation"
-msgstr "フックの作成時にエラーが発生しました"
-
-#: rhodecode/controllers/admin/settings.py:344
+#: rhodecode/controllers/admin/settings.py:327
+msgid "Error occurred during hook creation"
+msgstr "フックの作成中にエラーが発生しました"
+
+#: rhodecode/controllers/admin/settings.py:346
 msgid "Email task created"
 msgstr "メールのタスクを作成しました"
 
-#: rhodecode/controllers/admin/settings.py:399
+#: rhodecode/controllers/admin/settings.py:410
 msgid "You can't edit this user since it's crucial for entire application"
 msgstr "このユーザーを編集出来ません。このユーザーはアプリケーションにとって必要不可欠です。"
 
-#: rhodecode/controllers/admin/settings.py:430
+#: rhodecode/controllers/admin/settings.py:452
 msgid "Your account was updated successfully"
 msgstr "アカウントを更新しました"
 
-#: rhodecode/controllers/admin/settings.py:445
-#: rhodecode/controllers/admin/users.py:196
+#: rhodecode/controllers/admin/settings.py:467
+#: rhodecode/controllers/admin/users.py:198
 #, python-format
-msgid "error occurred during update of user %s"
+msgid "Error occurred during update of user %s"
 msgstr "ユーザー %s の更新中にエラーが発生しました"
 
 #: rhodecode/controllers/admin/users.py:130
 #, python-format
-msgid "created user %s"
+msgid "Created user %s"
 msgstr "ユーザー %s を作成しました"
 
 #: rhodecode/controllers/admin/users.py:142
 #, python-format
-msgid "error occurred during creation of user %s"
+msgid "Error occurred during creation of user %s"
 msgstr "ユーザー %s の作成中にエラーが発生しました"
 
 #: rhodecode/controllers/admin/users.py:176
 msgid "User updated successfully"
 msgstr "ユーザーの更新に成功しました"
 
-#: rhodecode/controllers/admin/users.py:212
-msgid "successfully deleted user"
+#: rhodecode/controllers/admin/users.py:214
+msgid "Successfully deleted user"
 msgstr "ユーザーの削除に成功しました"
 
-#: rhodecode/controllers/admin/users.py:217
+#: rhodecode/controllers/admin/users.py:219
 msgid "An error occurred during deletion of user"
 msgstr "ユーザーの削除中にエラーが発生しました"
 
-#: rhodecode/controllers/admin/users.py:231
+#: rhodecode/controllers/admin/users.py:233
 msgid "You can't edit this user"
 msgstr "このユーザーは編集できません"
 
-#: rhodecode/controllers/admin/users.py:272
+#: rhodecode/controllers/admin/users.py:276
 msgid "Granted 'repository create' permission to user"
 msgstr "ユーザーに 'リポジトリ作成' 権限を与えました"
 
-#: rhodecode/controllers/admin/users.py:277
+#: rhodecode/controllers/admin/users.py:281
 msgid "Revoked 'repository create' permission to user"
 msgstr "ユーザーの 'リポジトリ作成' 権限を取り消しました"
 
-#: rhodecode/controllers/admin/users.py:283
+#: rhodecode/controllers/admin/users.py:287
 msgid "Granted 'repository fork' permission to user"
 msgstr "ユーザーに 'リポジトリフォーク' 権限を与えました"
 
-#: rhodecode/controllers/admin/users.py:288
+#: rhodecode/controllers/admin/users.py:292
 msgid "Revoked 'repository fork' permission to user"
 msgstr "ユーザーの 'リポジトリフォーク' 権限を取り消しました"
 
-#: rhodecode/controllers/admin/users.py:294
-#: rhodecode/controllers/admin/users_groups.py:279
+#: rhodecode/controllers/admin/users.py:298
+#: rhodecode/controllers/admin/users_groups.py:281
 msgid "An error occurred during permissions saving"
 msgstr "権限の保存時にエラーが発生しました"
 
-#: rhodecode/controllers/admin/users.py:309
+#: rhodecode/controllers/admin/users.py:312
 #, python-format
 msgid "Added email %s to user"
 msgstr "ユーザーにメール %s を追加しました"
 
-#: rhodecode/controllers/admin/users.py:315
+#: rhodecode/controllers/admin/users.py:318
 msgid "An error occurred during email saving"
 msgstr "メールの保存時にエラーが発生しました"
 
-#: rhodecode/controllers/admin/users.py:325
+#: rhodecode/controllers/admin/users.py:328
 msgid "Removed email from user"
 msgstr "ユーザーからメールを削除しました"
 
+#: rhodecode/controllers/admin/users.py:341
+#, python-format
+msgid "Added ip %s to user"
+msgstr "ユーザーにIPアドレス %s を追加しました"
+
+#: rhodecode/controllers/admin/users.py:347
+msgid "An error occurred during ip saving"
+msgstr "IPアドレスの保存中にエラーが発生しました"
+
+#: rhodecode/controllers/admin/users.py:359
+msgid "Removed ip from user"
+msgstr "ユーザーからIPアドレスを削除しました"
+
 #: rhodecode/controllers/admin/users_groups.py:86
 #, python-format
-msgid "created users group %s"
+msgid "Created user group %s"
 msgstr "ユーザーグループ %s を作成しました"
 
 #: rhodecode/controllers/admin/users_groups.py:97
 #, python-format
-msgid "error occurred during creation of users group %s"
+msgid "Error occurred during creation of user group %s"
 msgstr "ユーザーグループ %s の作成中にエラーが発生しました"
 
-#: rhodecode/controllers/admin/users_groups.py:164
+#: rhodecode/controllers/admin/users_groups.py:166
 #, python-format
-msgid "updated users group %s"
+msgid "Updated user group %s"
 msgstr "ユーザーグループ %s を更新しました"
 
-#: rhodecode/controllers/admin/users_groups.py:186
+#: rhodecode/controllers/admin/users_groups.py:188
 #, python-format
-msgid "error occurred during update of users group %s"
+msgid "Error occurred during update of user group %s"
 msgstr "ユーザーグループ %s の更新中にエラーが発生しました"
 
-#: rhodecode/controllers/admin/users_groups.py:203
-msgid "successfully deleted users group"
-msgstr "ユーザーグループ"
-
-#: rhodecode/controllers/admin/users_groups.py:208
-msgid "An error occurred during deletion of users group"
+#: rhodecode/controllers/admin/users_groups.py:205
+msgid "Successfully deleted user group"
+msgstr "ユーザーグループの削除に成功しました"
+
+#: rhodecode/controllers/admin/users_groups.py:210
+msgid "An error occurred during deletion of user group"
 msgstr "ユーザーグループの削除中にエラーが発生しました"
 
-#: rhodecode/controllers/admin/users_groups.py:257
-msgid "Granted 'repository create' permission to users group"
+#: rhodecode/controllers/admin/users_groups.py:259
+msgid "Granted 'repository create' permission to user group"
 msgstr "ユーザーグループに 'リポジトリ作成' 権限を与えました"
 
-#: rhodecode/controllers/admin/users_groups.py:262
-msgid "Revoked 'repository create' permission to users group"
+#: rhodecode/controllers/admin/users_groups.py:264
+msgid "Revoked 'repository create' permission to user group"
 msgstr "ユーザーグループの 'リポジトリ作成' 権限を取り消しました"
 
-#: rhodecode/controllers/admin/users_groups.py:268
-msgid "Granted 'repository fork' permission to users group"
+#: rhodecode/controllers/admin/users_groups.py:270
+msgid "Granted 'repository fork' permission to user group"
 msgstr "ユーザーグループに 'リポジトリフォーク' 権限を与えました"
 
-#: rhodecode/controllers/admin/users_groups.py:273
-msgid "Revoked 'repository fork' permission to users group"
+#: rhodecode/controllers/admin/users_groups.py:275
+msgid "Revoked 'repository fork' permission to user group"
 msgstr "ユーザーグループの 'リポジトリフォーク' 権限を取り消しました"
 
-#: rhodecode/lib/auth.py:499
+#: rhodecode/lib/auth.py:530
+#, python-format
+msgid "IP %s not allowed"
+msgstr "IPアドレス %s は許可されません"
+
+#: rhodecode/lib/auth.py:579
 msgid "You need to be a registered user to perform this action"
 msgstr "このアクションを実行するためには登録ユーザーである必要があります"
 
-#: rhodecode/lib/auth.py:540
+#: rhodecode/lib/auth.py:620
 msgid "You need to be a signed in to view this page"
 msgstr "このページを閲覧するためにはサインインが必要です"
 
-#: rhodecode/lib/diffs.py:74
-msgid "binary file"
+#: rhodecode/lib/diffs.py:66
+msgid "Binary file"
 msgstr "バイナリファイル"
 
-#: rhodecode/lib/diffs.py:90
+#: rhodecode/lib/diffs.py:82
 msgid "Changeset was too big and was cut off, use diff menu to display this diff"
 msgstr "チェンジセットが大きすぎるため省略しました。差分を表示する場合は差分メニューを使用してください"
 
-#: rhodecode/lib/diffs.py:100
+#: rhodecode/lib/diffs.py:92
 msgid "No changes detected"
 msgstr "検出された変更はありません"
 
-#: rhodecode/lib/helpers.py:374
+#: rhodecode/lib/helpers.py:394
 #, python-format
 msgid "%a, %d %b %Y %H:%M:%S"
 msgstr "%a, %d %b %Y %H:%M:%S"
 
-#: rhodecode/lib/helpers.py:486
+#: rhodecode/lib/helpers.py:506
 msgid "True"
 msgstr "True"
 
-#: rhodecode/lib/helpers.py:490
+#: rhodecode/lib/helpers.py:509
 msgid "False"
 msgstr "False"
 
-#: rhodecode/lib/helpers.py:530
+#: rhodecode/lib/helpers.py:547
 #, python-format
 msgid "Deleted branch: %s"
 msgstr "削除されたブランチ: %s"
 
-#: rhodecode/lib/helpers.py:533
+#: rhodecode/lib/helpers.py:550
 #, python-format
 msgid "Created tag: %s"
 msgstr "作成したタグ: %s"
 
-#: rhodecode/lib/helpers.py:546
+#: rhodecode/lib/helpers.py:563
 msgid "Changeset not found"
 msgstr "リビジョンが見つかりません"
 
-#: rhodecode/lib/helpers.py:589
+#: rhodecode/lib/helpers.py:615
 #, python-format
 msgid "Show all combined changesets %s->%s"
 msgstr "%s から %s までのすべてのチェンジセットを表示"
 
-#: rhodecode/lib/helpers.py:595
+#: rhodecode/lib/helpers.py:621
 msgid "compare view"
 msgstr "比較の表示"
 
-#: rhodecode/lib/helpers.py:615
+#: rhodecode/lib/helpers.py:641
 msgid "and"
 msgstr "と"
 
-#: rhodecode/lib/helpers.py:616
+#: rhodecode/lib/helpers.py:642
 #, python-format
 msgid "%s more"
 msgstr "%s 以上"
 
-#: rhodecode/lib/helpers.py:617 rhodecode/templates/changelog/changelog.html:51
+#: rhodecode/lib/helpers.py:643 rhodecode/templates/changelog/changelog.html:44
 msgid "revisions"
 msgstr "リビジョン"
 
-#: rhodecode/lib/helpers.py:641
+#: rhodecode/lib/helpers.py:667
 #, python-format
 msgid "fork name %s"
 msgstr "フォーク名 %s"
 
-#: rhodecode/lib/helpers.py:658
-#: rhodecode/templates/pullrequests/pullrequest_show.html:4
-#: rhodecode/templates/pullrequests/pullrequest_show.html:12
+#: rhodecode/lib/helpers.py:684
+#: rhodecode/templates/pullrequests/pullrequest_show.html:8
 #, python-format
 msgid "Pull request #%s"
 msgstr "プルリクエスト #%s"
 
-#: rhodecode/lib/helpers.py:664
+#: rhodecode/lib/helpers.py:690
 msgid "[deleted] repository"
 msgstr "リポジトリを[削除]"
 
-#: rhodecode/lib/helpers.py:666 rhodecode/lib/helpers.py:676
+#: rhodecode/lib/helpers.py:692 rhodecode/lib/helpers.py:702
 msgid "[created] repository"
 msgstr "リポジトリを[作成]"
 
-#: rhodecode/lib/helpers.py:668
+#: rhodecode/lib/helpers.py:694
 msgid "[created] repository as fork"
 msgstr "フォークしてリポジトリを[作成]"
 
-#: rhodecode/lib/helpers.py:670 rhodecode/lib/helpers.py:678
+#: rhodecode/lib/helpers.py:696 rhodecode/lib/helpers.py:704
 msgid "[forked] repository"
 msgstr "リポジトリを[フォーク]"
 
-#: rhodecode/lib/helpers.py:672 rhodecode/lib/helpers.py:680
+#: rhodecode/lib/helpers.py:698 rhodecode/lib/helpers.py:706
 msgid "[updated] repository"
 msgstr "リポジトリを[更新]"
 
-#: rhodecode/lib/helpers.py:674
+#: rhodecode/lib/helpers.py:700
 msgid "[delete] repository"
 msgstr "リポジトリを[削除]"
 
-#: rhodecode/lib/helpers.py:682
+#: rhodecode/lib/helpers.py:708
 msgid "[created] user"
 msgstr "ユーザーを[作成]"
 
-#: rhodecode/lib/helpers.py:684
+#: rhodecode/lib/helpers.py:710
 msgid "[updated] user"
 msgstr "ユーザーを[更新]"
 
-#: rhodecode/lib/helpers.py:686
-msgid "[created] users group"
+#: rhodecode/lib/helpers.py:712
+msgid "[created] user group"
 msgstr "ユーザーグループを[作成]"
 
-#: rhodecode/lib/helpers.py:688
-msgid "[updated] users group"
+#: rhodecode/lib/helpers.py:714
+msgid "[updated] user group"
 msgstr "ユーザーグループを[更新]"
 
-#: rhodecode/lib/helpers.py:690
+#: rhodecode/lib/helpers.py:716
 msgid "[commented] on revision in repository"
 msgstr "リポジトリのリビジョンに[コメント]"
 
-#: rhodecode/lib/helpers.py:692
+#: rhodecode/lib/helpers.py:718
 msgid "[commented] on pull request for"
 msgstr "プルリクエストに[コメント]"
 
-#: rhodecode/lib/helpers.py:694
+#: rhodecode/lib/helpers.py:720
 msgid "[closed] pull request for"
 msgstr "プルリクエストを[クローズ]"
 
-#: rhodecode/lib/helpers.py:696
+#: rhodecode/lib/helpers.py:722
 msgid "[pushed] into"
 msgstr "[プッシュ]"
 
-#: rhodecode/lib/helpers.py:698
+#: rhodecode/lib/helpers.py:724
 msgid "[committed via RhodeCode] into repository"
 msgstr "リポジトリに[RhodeCode経由でコミット]"
 
-#: rhodecode/lib/helpers.py:700
+#: rhodecode/lib/helpers.py:726
 msgid "[pulled from remote] into repository"
 msgstr "リポジトリに[リモートからプル]"
 
-#: rhodecode/lib/helpers.py:702
+#: rhodecode/lib/helpers.py:728
 msgid "[pulled] from"
 msgstr "[プル]"
 
-#: rhodecode/lib/helpers.py:704
+#: rhodecode/lib/helpers.py:730
 msgid "[started following] repository"
 msgstr "リポジトリの[フォローを開始]"
 
-#: rhodecode/lib/helpers.py:706
+#: rhodecode/lib/helpers.py:732
 msgid "[stopped following] repository"
 msgstr "リポジトリの[フォローを停止]"
 
-#: rhodecode/lib/helpers.py:883
+#: rhodecode/lib/helpers.py:910
 #, python-format
 msgid " and %s more"
 msgstr " と %s 以上"
 
-#: rhodecode/lib/helpers.py:887
+#: rhodecode/lib/helpers.py:914
 msgid "No Files"
 msgstr "ファイルなし"
 
-#: rhodecode/lib/helpers.py:1163
+#: rhodecode/lib/helpers.py:1198
 #, python-format
 msgid ""
 "%s repository is not mapped to db perhaps it was created or renamed from "
@@ -908,159 +979,219 @@
 "%s "
 "リポジトリはDB内に見つかりませんでした。おそらくファイルシステム上で作られたか名前が変更されたためです。リポジトリをもう一度チェックするためにアプリケーションを立ち上げ直してください。"
 
-#: rhodecode/lib/utils2.py:403
+#: rhodecode/lib/unionrepo.py:193
+msgid "cannot create new union repository"
+msgstr "新しいユニオンリポジトリは作成できません"
+
+#: rhodecode/lib/utils2.py:411
 #, python-format
 msgid "%d year"
 msgid_plural "%d years"
 msgstr[0] "%d 年"
 
-#: rhodecode/lib/utils2.py:404
+#: rhodecode/lib/utils2.py:412
 #, python-format
 msgid "%d month"
 msgid_plural "%d months"
 msgstr[0] "%d ヶ月"
 
-#: rhodecode/lib/utils2.py:405
+#: rhodecode/lib/utils2.py:413
 #, python-format
 msgid "%d day"
 msgid_plural "%d days"
 msgstr[0] "%d 日"
 
-#: rhodecode/lib/utils2.py:406
+#: rhodecode/lib/utils2.py:414
 #, python-format
 msgid "%d hour"
 msgid_plural "%d hours"
 msgstr[0] "%d 時間"
 
-#: rhodecode/lib/utils2.py:407
+#: rhodecode/lib/utils2.py:415
 #, python-format
 msgid "%d minute"
 msgid_plural "%d minutes"
 msgstr[0] "%d 分"
 
-#: rhodecode/lib/utils2.py:408
+#: rhodecode/lib/utils2.py:416
 #, python-format
 msgid "%d second"
 msgid_plural "%d seconds"
 msgstr[0] "%d 秒"
 
-#: rhodecode/lib/utils2.py:424
+#: rhodecode/lib/utils2.py:432
 #, python-format
 msgid "in %s"
 msgstr ""
 
-#: rhodecode/lib/utils2.py:426
+#: rhodecode/lib/utils2.py:434
 #, python-format
 msgid "%s ago"
 msgstr "%s 前"
 
-#: rhodecode/lib/utils2.py:428
+#: rhodecode/lib/utils2.py:436
 #, python-format
 msgid "in %s and %s"
 msgstr ""
 
-#: rhodecode/lib/utils2.py:431
+#: rhodecode/lib/utils2.py:439
 #, python-format
 msgid "%s and %s ago"
 msgstr "%s と %s 前"
 
-#: rhodecode/lib/utils2.py:434
+#: rhodecode/lib/utils2.py:442
 msgid "just now"
 msgstr "ちょうどいま"
 
-#: rhodecode/lib/celerylib/tasks.py:270
-msgid "password reset link"
-msgstr "パスワードリセットのリンク"
-
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163 rhodecode/model/db.py:1183
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1183
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1289 rhodecode/model/db.py:1388
 msgid "Repository no access"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164 rhodecode/model/db.py:1184
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1184
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1290 rhodecode/model/db.py:1389
 msgid "Repository read access"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165 rhodecode/model/db.py:1185
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1185
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1291 rhodecode/model/db.py:1390
 msgid "Repository write access"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166 rhodecode/model/db.py:1186
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1186
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1292 rhodecode/model/db.py:1391
 msgid "Repository admin access"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168 rhodecode/model/db.py:1188
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1188
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1294
 msgid "Repositories Group no access"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169 rhodecode/model/db.py:1189
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1189
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1295
 msgid "Repositories Group read access"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170 rhodecode/model/db.py:1190
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1190
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1296
 msgid "Repositories Group write access"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171 rhodecode/model/db.py:1191
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1191
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1297
 msgid "Repositories Group admin access"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173 rhodecode/model/db.py:1193
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1193
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1299 rhodecode/model/db.py:1398
 msgid "RhodeCode Administrator"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174 rhodecode/model/db.py:1194
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1194
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1300 rhodecode/model/db.py:1399
 msgid "Repository creation disabled"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175 rhodecode/model/db.py:1195
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1195
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1301 rhodecode/model/db.py:1400
 msgid "Repository creation enabled"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176 rhodecode/model/db.py:1196
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1196
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1302 rhodecode/model/db.py:1401
 msgid "Repository forking disabled"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177 rhodecode/model/db.py:1197
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1197
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1303 rhodecode/model/db.py:1402
 msgid "Repository forking enabled"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178 rhodecode/model/db.py:1198
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1198
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1304 rhodecode/model/db.py:1403
 msgid "Register disabled"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179 rhodecode/model/db.py:1199
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1199
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1305 rhodecode/model/db.py:1404
 msgid "Register new user with RhodeCode with manual activation"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182 rhodecode/model/db.py:1202
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1202
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1308 rhodecode/model/db.py:1407
 msgid "Register new user with RhodeCode with auto activation"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623 rhodecode/model/db.py:1643
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1643
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1749 rhodecode/model/db.py:1838
 msgid "Not Reviewed"
 msgstr "未レビュー"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624 rhodecode/model/db.py:1644
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1644
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1750 rhodecode/model/db.py:1839
 msgid "Approved"
 msgstr "承認"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625 rhodecode/model/db.py:1645
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1645
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1751 rhodecode/model/db.py:1840
 msgid "Rejected"
 msgstr "却下"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626 rhodecode/model/db.py:1646
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1646
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1752 rhodecode/model/db.py:1841
 msgid "Under Review"
 msgstr "レビュー中"
 
-#: rhodecode/model/comment.py:110
+#: rhodecode/model/comment.py:75
 #, python-format
 msgid "on line %s"
 msgstr ""
 
-#: rhodecode/model/comment.py:173
+#: rhodecode/model/comment.py:219
 msgid "[Mention]"
 msgstr "[Mention]"
 
+#: rhodecode/model/db.py:1252
+msgid "top level"
+msgstr ""
+
+#: rhodecode/model/db.py:1393
+msgid "Repository group no access"
+msgstr ""
+
+#: rhodecode/model/db.py:1394
+msgid "Repository group read access"
+msgstr ""
+
+#: rhodecode/model/db.py:1395
+msgid "Repository group write access"
+msgstr ""
+
+#: rhodecode/model/db.py:1396
+msgid "Repository group admin access"
+msgstr ""
+
 #: rhodecode/model/forms.py:43
 msgid "Please enter a login"
 msgstr "ログイン名を入力してください"
@@ -1079,206 +1210,239 @@
 msgid "Enter %(min)i characters or more"
 msgstr "%(min)i 文字以上必要です"
 
-#: rhodecode/model/notification.py:220
-#, python-format
-msgid "commented on commit at %(when)s"
-msgstr "コミットにコメント %(when)s"
-
-#: rhodecode/model/notification.py:221
-#, python-format
-msgid "sent message at %(when)s"
-msgstr "メッセージを送信 %(when)s"
-
-#: rhodecode/model/notification.py:222
-#, python-format
-msgid "mentioned you at %(when)s"
-msgstr "Mention %(when)s"
-
-#: rhodecode/model/notification.py:223
-#, python-format
-msgid "registered in RhodeCode at %(when)s"
-msgstr "RhodeCodeに登録 %(when)s"
-
 #: rhodecode/model/notification.py:224
 #, python-format
-msgid "opened new pull request at %(when)s"
-msgstr "新しいプルリクエストを作成 %(when)s"
+msgid "%(user)s commented on changeset at %(when)s"
+msgstr "%(user)s がコミットにコメント %(when)s"
 
 #: rhodecode/model/notification.py:225
 #, python-format
-msgid "commented on pull request at %(when)s"
-msgstr "プルリクエストにコメント %(when)s"
-
-#: rhodecode/model/pull_request.py:90
+msgid "%(user)s sent message at %(when)s"
+msgstr "%(user)s がメッセージを送信 %(when)s"
+
+#: rhodecode/model/notification.py:226
+#, python-format
+msgid "%(user)s mentioned you at %(when)s"
+msgstr "%(user)s があなたにメンション %(when)s"
+
+#: rhodecode/model/notification.py:227
+#, python-format
+msgid "%(user)s registered in RhodeCode at %(when)s"
+msgstr "%(user)s がRhodeCodeに登録 %(when)s"
+
+#: rhodecode/model/notification.py:228
 #, python-format
-msgid "%(user)s wants you to review pull request #%(pr_id)s"
-msgstr "%(user)s がプリリクエスト #%(pr_id)s のレビューを求めています"
-
-#: rhodecode/model/scm.py:542
+msgid "%(user)s opened new pull request at %(when)s"
+msgstr "%(user)s が新しいプルリクエストを作成 %(when)s"
+
+#: rhodecode/model/notification.py:229
+#, python-format
+msgid "%(user)s commented on pull request at %(when)s"
+msgstr "%(user)s がプルリクエストにコメント %(when)s"
+
+#: rhodecode/model/pull_request.py:104
+#, python-format
+msgid "%(user)s wants you to review pull request #%(pr_id)s: %(pr_title)s"
+msgstr "%(user)s がプリリクエスト #%(pr_id)s のレビューを求めています %(pr_title)s"
+
+#: rhodecode/model/scm.py:598
 msgid "latest tip"
 msgstr "最新のtip"
 
 #: rhodecode/model/user.py:232
-msgid "new user registration"
+msgid "New user registration"
 msgstr "新規ユーザー登録"
 
 #: rhodecode/model/user.py:257 rhodecode/model/user.py:281
-#: rhodecode/model/user.py:303
 msgid "You can't Edit this user since it's crucial for entire application"
 msgstr "アプリケーション全体にとって重要なユーザなため、編集出来ません"
 
-#: rhodecode/model/user.py:327
+#: rhodecode/model/user.py:303
 msgid "You can't remove this user since it's crucial for entire application"
 msgstr "アプリケーション全体にとって重要なユーザなため、削除できません"
 
-#: rhodecode/model/user.py:333
+#: rhodecode/model/user.py:309
 #, python-format
 msgid ""
 "user \"%s\" still owns %s repositories and cannot be removed. Switch "
 "owners or remove those repositories. %s"
 msgstr ""
 
-#: rhodecode/model/validators.py:36 rhodecode/model/validators.py:37
+#: rhodecode/model/user.py:334
+msgid "Password reset link"
+msgstr "パスワードリセットのリンク"
+
+#: rhodecode/model/user.py:366
+msgid "Your new password"
+msgstr "新しいパスワード"
+
+#: rhodecode/model/user.py:367
+#, python-format
+msgid "Your new RhodeCode password:%s"
+msgstr "新しいRhodeCodeパスワード:%s"
+
+#: rhodecode/model/validators.py:38 rhodecode/model/validators.py:39
 msgid "Value cannot be an empty list"
 msgstr "空のリストには出来ません"
 
-#: rhodecode/model/validators.py:83
+#: rhodecode/model/validators.py:85
 #, python-format
 msgid "Username \"%(username)s\" already exists"
 msgstr "ユーザー名 \"%(username)s\" はすでに使われています"
 
-#: rhodecode/model/validators.py:85
+#: rhodecode/model/validators.py:87
 #, python-format
 msgid "Username \"%(username)s\" is forbidden"
 msgstr "ユーザー名 \"%(username)s\" は許可されていません"
 
-#: rhodecode/model/validators.py:87
+#: rhodecode/model/validators.py:89
 msgid ""
 "Username may only contain alphanumeric characters underscores, periods or"
 " dashes and must begin with alphanumeric character"
 msgstr "ユーザー名はアルファベット、アンダースコア(_)、ピリオド(.)、ダッシュ(-)しか使えません。また、アルファベットから始まる必要があります"
 
-#: rhodecode/model/validators.py:115
+#: rhodecode/model/validators.py:117
 #, python-format
 msgid "Username %(username)s is not valid"
 msgstr "ユーザー名 %(username)s は不正です"
 
-#: rhodecode/model/validators.py:134
-msgid "Invalid users group name"
+#: rhodecode/model/validators.py:136
+msgid "Invalid user group name"
 msgstr "不正なユーザーグループ名です"
 
-#: rhodecode/model/validators.py:135
-#, python-format
-msgid "Users group \"%(usersgroup)s\" already exists"
-msgstr "ユーザーグループ \"%(usersgroup)s\" はすでに存在します"
-
 #: rhodecode/model/validators.py:137
+#, python-format
+msgid "User group \"%(usergroup)s\" already exists"
+msgstr "ユーザーグループ \"%(usergroup)s\" はすでに存在します"
+
+#: rhodecode/model/validators.py:139
 msgid ""
-"users group name may only contain  alphanumeric characters underscores, "
+"user group name may only contain alphanumeric characters underscores, "
 "periods or dashes and must begin with alphanumeric character"
 msgstr ""
 "ユーザーグループ名はアルファベット、アンダースコア(_)、ピリオド(.)、ダッシュ(-)しか使えません。また、アルファベットから始まる必要があります"
 " "
 
-#: rhodecode/model/validators.py:175
+#: rhodecode/model/validators.py:177
 msgid "Cannot assign this group as parent"
 msgstr "このグループは親にできません"
 
-#: rhodecode/model/validators.py:176
+#: rhodecode/model/validators.py:178
 #, python-format
 msgid "Group \"%(group_name)s\" already exists"
 msgstr "グループ \"%(group_name)s\" はすでに存在します"
 
-#: rhodecode/model/validators.py:178
+#: rhodecode/model/validators.py:180
 #, python-format
 msgid "Repository with name \"%(group_name)s\" already exists"
 msgstr "グループ名 \"%(group_name)s\" を持つリポジトリはすでに存在します"
 
-#: rhodecode/model/validators.py:236
+#: rhodecode/model/validators.py:238
 msgid "Invalid characters (non-ascii) in password"
 msgstr "パスワードに利用出来ない文字列(non-ascii)です"
 
-#: rhodecode/model/validators.py:251
+#: rhodecode/model/validators.py:253
 msgid "Passwords do not match"
 msgstr "パスワードが一致しません"
 
-#: rhodecode/model/validators.py:268
+#: rhodecode/model/validators.py:270
 msgid "invalid password"
 msgstr "不正なパスワードです"
 
-#: rhodecode/model/validators.py:269
+#: rhodecode/model/validators.py:271
 msgid "invalid user name"
 msgstr "不正なユーザー名です"
 
-#: rhodecode/model/validators.py:270
+#: rhodecode/model/validators.py:272
 msgid "Your account is disabled"
 msgstr "アカウントは無効です"
 
-#: rhodecode/model/validators.py:314
+#: rhodecode/model/validators.py:316
 #, python-format
 msgid "Repository name %(repo)s is disallowed"
 msgstr "リポジトリ名 %(repo)s は許可されていません"
 
-#: rhodecode/model/validators.py:316
+#: rhodecode/model/validators.py:318
 #, python-format
 msgid "Repository named %(repo)s already exists"
 msgstr "リポジトリ %(repo)s はすでに存在します"
 
-#: rhodecode/model/validators.py:317
+#: rhodecode/model/validators.py:319
 #, python-format
 msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\""
 msgstr "リポジトリ \"%(repo)s\" は グループ \"%(group)s\" にすでに存在します"
 
-#: rhodecode/model/validators.py:319
+#: rhodecode/model/validators.py:321
 #, python-format
-msgid "Repositories group with name \"%(repo)s\" already exists"
+msgid "Repository group with name \"%(repo)s\" already exists"
 msgstr "リポジトリグループ名 \"%(repo)s\" はすでに存在します"
 
-#: rhodecode/model/validators.py:432
+#: rhodecode/model/validators.py:438
 msgid "invalid clone url"
 msgstr "無効なクローンURIです"
 
-#: rhodecode/model/validators.py:433
+#: rhodecode/model/validators.py:439
 msgid "Invalid clone url, provide a valid clone http(s)/svn+http(s) url"
 msgstr "無効なクローンURIです。有効な http(s)/svn+http(s) のURIを指定してください"
 
-#: rhodecode/model/validators.py:458
+#: rhodecode/model/validators.py:464
 msgid "Fork have to be the same type as parent"
 msgstr "フォークは親と同じタイプの必要があります"
 
-#: rhodecode/model/validators.py:473
+#: rhodecode/model/validators.py:479
 msgid "You don't have permissions to create repository in this group"
 msgstr "このグループでリポジトリを作成する権限がありません"
 
-#: rhodecode/model/validators.py:498
-msgid "This username or users group name is not valid"
+#: rhodecode/model/validators.py:481
+msgid "no permission to create repository in root location"
+msgstr "ルートにリポジトリを作成する権限がありません"
+
+#: rhodecode/model/validators.py:518
+msgid "You don't have permissions to create a group in this location"
+msgstr "この場所にグループを作成する権限がありません"
+
+#: rhodecode/model/validators.py:557
+msgid "This username or user group name is not valid"
 msgstr "ユーザー名かユーザーグループが不正です"
 
-#: rhodecode/model/validators.py:591
+#: rhodecode/model/validators.py:650
 msgid "This is not a valid path"
 msgstr "不正なパスです"
 
-#: rhodecode/model/validators.py:606
+#: rhodecode/model/validators.py:665
 msgid "This e-mail address is already taken"
 msgstr "このメールアドレスはすでに取得されています"
 
-#: rhodecode/model/validators.py:626
+#: rhodecode/model/validators.py:685
 #, python-format
 msgid "e-mail \"%(email)s\" does not exist."
 msgstr "メールアドレス \"%(email)s\" は存在しません"
 
-#: rhodecode/model/validators.py:663
+#: rhodecode/model/validators.py:722
 msgid ""
 "The LDAP Login attribute of the CN must be specified - this is the name "
 "of the attribute that is equivalent to \"username\""
 msgstr "LDAPのこのCNに対するログイン属性は必須です。 - これは \"ユーザー名\" と同じです"
 
-#: rhodecode/model/validators.py:682
+#: rhodecode/model/validators.py:735
 #, python-format
 msgid "Revisions %(revs)s are already part of pull request or have set status"
+msgstr "リビジョン %(revs) はすでにプルリクエストの一部かステータスが設定されています"
+
+#: rhodecode/model/validators.py:767
+msgid "Please enter a valid IPv4 or IpV6 address"
+msgstr "有効なIPv4かIPv6のアドレスを入力してください"
+
+#: rhodecode/model/validators.py:768
+#, python-format
+msgid "The network size (bits) must be within the range of 0-32 (not %(bits)r)"
 msgstr ""
 
-#: rhodecode/templates/index.html:3
+#: rhodecode/model/validators.py:800
+msgid "Key name can only consist of letters, underscore, dash or numbers"
+msgstr "キー名はアルファベット、アンダースコア(_)、ピリオド(.)、ダッシュ(-)、数字しか使えません。"
+
+#: rhodecode/templates/index.html:5
 msgid "Dashboard"
 msgstr "ダッシュボード"
 
@@ -1287,205 +1451,226 @@
 #: rhodecode/templates/admin/repos/repos.html:9
 #: rhodecode/templates/admin/users/user_edit_my_account.html:31
 #: rhodecode/templates/admin/users/users.html:9
-#: rhodecode/templates/bookmarks/bookmarks.html:10
+#: rhodecode/templates/bookmarks/bookmarks.html:9
 #: rhodecode/templates/branches/branches.html:9
 #: rhodecode/templates/journal/journal.html:9
-#: rhodecode/templates/journal/journal.html:48
-#: rhodecode/templates/tags/tags.html:10
+#: rhodecode/templates/journal/journal.html:46
+#: rhodecode/templates/journal/journal.html:47
+#: rhodecode/templates/tags/tags.html:9
 msgid "quick filter..."
 msgstr "クイックフィルタ..."
 
 #: rhodecode/templates/index_base.html:6
 #: rhodecode/templates/admin/repos/repos.html:9
-#: rhodecode/templates/base/base.html:233
 msgid "repositories"
 msgstr "リポジトリ"
 
 #: rhodecode/templates/index_base.html:13
-#: rhodecode/templates/index_base.html:15
+#: rhodecode/templates/index_base.html:18
+#: rhodecode/templates/admin/repos/repo_add.html:5
 #: rhodecode/templates/admin/repos/repos.html:21
-msgid "ADD REPOSITORY"
+msgid "Add repository"
 msgstr "リポジトリの追加"
 
-#: rhodecode/templates/index_base.html:29
-#: rhodecode/templates/index_base.html:136
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:32
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:32
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:33
+#: rhodecode/templates/index_base.html:15
+#: rhodecode/templates/index_base.html:20
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:31
+msgid "Add group"
+msgstr "グループの追加"
+
+#: rhodecode/templates/index_base.html:27
+msgid "Edit group"
+msgstr "グループの編集"
+
+#: rhodecode/templates/index_base.html:27
+msgid "You have admin right to this group, and can edit it"
+msgstr ""
+
+#: rhodecode/templates/index_base.html:40
+#: rhodecode/templates/index_base.html:140
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:33
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:38
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:43
 #: rhodecode/templates/admin/users_groups/users_group_add.html:32
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:33
+#: rhodecode/templates/admin/users_groups/users_groups.html:34
 msgid "Group name"
 msgstr "グループ名"
 
-#: rhodecode/templates/index_base.html:30
-#: rhodecode/templates/index_base.html:72
-#: rhodecode/templates/index_base.html:138
-#: rhodecode/templates/index_base.html:176
-#: rhodecode/templates/index_base.html:266
+#: rhodecode/templates/index_base.html:41
+#: rhodecode/templates/index_base.html:83
+#: rhodecode/templates/index_base.html:142
+#: rhodecode/templates/index_base.html:180
+#: rhodecode/templates/index_base.html:270
 #: rhodecode/templates/admin/repos/repo_add_base.html:56
 #: rhodecode/templates/admin/repos/repo_edit.html:75
-#: rhodecode/templates/admin/repos/repos.html:72
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:41
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:41
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:34
-#: rhodecode/templates/forks/fork.html:59
-#: rhodecode/templates/settings/repo_settings.html:66
-#: rhodecode/templates/summary/summary.html:114
+#: rhodecode/templates/admin/repos/repos.html:73
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:42
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:47
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:44
+#: rhodecode/templates/forks/fork.html:56
+#: rhodecode/templates/pullrequests/pullrequest.html:101
+#: rhodecode/templates/summary/summary.html:106
 msgid "Description"
 msgstr "説明"
 
-#: rhodecode/templates/index_base.html:40
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:47
-msgid "Repositories group"
+#: rhodecode/templates/index_base.html:51
+#: rhodecode/templates/admin/permissions/permissions.html:55
+#: rhodecode/templates/admin/repos/repo_add_base.html:29
+#: rhodecode/templates/admin/repos/repo_edit.html:49
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:57
+#: rhodecode/templates/forks/fork.html:47
+msgid "Repository group"
 msgstr "リポジトリグループ"
 
-#: rhodecode/templates/index_base.html:71
-#: rhodecode/templates/index_base.html:174
-#: rhodecode/templates/index_base.html:264
+#: rhodecode/templates/index_base.html:82
+#: rhodecode/templates/index_base.html:178
+#: rhodecode/templates/index_base.html:268
 #: rhodecode/templates/admin/repos/repo_add_base.html:9
 #: rhodecode/templates/admin/repos/repo_edit.html:32
-#: rhodecode/templates/admin/repos/repos.html:70
-#: rhodecode/templates/admin/users/user_edit.html:196
-#: rhodecode/templates/admin/users/user_edit_my_account.html:59
-#: rhodecode/templates/admin/users/user_edit_my_account.html:180
-#: rhodecode/templates/admin/users/user_edit_my_account.html:216
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:6
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:184
-#: rhodecode/templates/bookmarks/bookmarks.html:36
+#: rhodecode/templates/admin/repos/repos.html:71
+#: rhodecode/templates/admin/users/user_edit_my_account.html:172
+#: rhodecode/templates/base/perms_summary.html:14
+#: rhodecode/templates/bookmarks/bookmarks.html:34
 #: rhodecode/templates/bookmarks/bookmarks_data.html:6
-#: rhodecode/templates/branches/branches.html:50
+#: rhodecode/templates/branches/branches.html:47
 #: rhodecode/templates/branches/branches_data.html:6
 #: rhodecode/templates/files/files_browser.html:47
-#: rhodecode/templates/journal/journal.html:70
-#: rhodecode/templates/journal/journal.html:196
-#: rhodecode/templates/journal/journal_page_repos.html:7
-#: rhodecode/templates/settings/repo_settings.html:31
-#: rhodecode/templates/summary/summary.html:43
-#: rhodecode/templates/summary/summary.html:132
-#: rhodecode/templates/tags/tags.html:51
+#: rhodecode/templates/journal/journal.html:193
+#: rhodecode/templates/journal/journal.html:296
+#: rhodecode/templates/summary/summary.html:55
+#: rhodecode/templates/summary/summary.html:124
+#: rhodecode/templates/tags/tags.html:48
 #: rhodecode/templates/tags/tags_data.html:6
 msgid "Name"
 msgstr "名前"
 
-#: rhodecode/templates/index_base.html:73
+#: rhodecode/templates/index_base.html:84
 msgid "Last change"
 msgstr "最後の変更時刻"
 
-#: rhodecode/templates/index_base.html:74
-#: rhodecode/templates/index_base.html:179
-#: rhodecode/templates/admin/users/user_edit_my_account.html:182
-#: rhodecode/templates/journal/journal.html:198
+#: rhodecode/templates/index_base.html:85
+#: rhodecode/templates/index_base.html:183
+#: rhodecode/templates/index_base.html:273
+#: rhodecode/templates/admin/repos/repos.html:74
+#: rhodecode/templates/admin/users/user_edit_my_account.html:174
+#: rhodecode/templates/journal/journal.html:195
+#: rhodecode/templates/journal/journal.html:298
 msgid "Tip"
 msgstr "Tip"
 
-#: rhodecode/templates/index_base.html:75
-#: rhodecode/templates/index_base.html:181
-#: rhodecode/templates/index_base.html:269
+#: rhodecode/templates/index_base.html:86
+#: rhodecode/templates/index_base.html:185
+#: rhodecode/templates/index_base.html:275
 #: rhodecode/templates/admin/repos/repo_edit.html:121
-#: rhodecode/templates/admin/repos/repos.html:73
+#: rhodecode/templates/admin/repos/repos.html:76
 msgid "Owner"
 msgstr "所有者"
 
-#: rhodecode/templates/index_base.html:76
-#: rhodecode/templates/summary/summary.html:48
-#: rhodecode/templates/summary/summary.html:51
-msgid "RSS"
-msgstr "RSS"
-
-#: rhodecode/templates/index_base.html:77
+#: rhodecode/templates/index_base.html:87
 msgid "Atom"
 msgstr "Atom"
 
-#: rhodecode/templates/index_base.html:167
-#: rhodecode/templates/index_base.html:207
-#: rhodecode/templates/index_base.html:291
-#: rhodecode/templates/admin/repos/repos.html:94
-#: rhodecode/templates/admin/users/user_edit_my_account.html:202
+#: rhodecode/templates/index_base.html:171
+#: rhodecode/templates/index_base.html:209
+#: rhodecode/templates/index_base.html:296
+#: rhodecode/templates/admin/repos/repos.html:97
+#: rhodecode/templates/admin/users/user_edit_my_account.html:196
 #: rhodecode/templates/admin/users/users.html:107
-#: rhodecode/templates/bookmarks/bookmarks.html:60
-#: rhodecode/templates/branches/branches.html:76
-#: rhodecode/templates/journal/journal.html:221
-#: rhodecode/templates/tags/tags.html:77
+#: rhodecode/templates/bookmarks/bookmarks.html:58
+#: rhodecode/templates/branches/branches.html:73
+#: rhodecode/templates/journal/journal.html:217
+#: rhodecode/templates/journal/journal.html:320
+#: rhodecode/templates/tags/tags.html:74
 msgid "Click to sort ascending"
 msgstr "昇順で並び換え"
 
-#: rhodecode/templates/index_base.html:168
-#: rhodecode/templates/index_base.html:208
-#: rhodecode/templates/index_base.html:292
-#: rhodecode/templates/admin/repos/repos.html:95
-#: rhodecode/templates/admin/users/user_edit_my_account.html:203
+#: rhodecode/templates/index_base.html:172
+#: rhodecode/templates/index_base.html:210
+#: rhodecode/templates/index_base.html:297
+#: rhodecode/templates/admin/repos/repos.html:98
+#: rhodecode/templates/admin/users/user_edit_my_account.html:197
 #: rhodecode/templates/admin/users/users.html:108
-#: rhodecode/templates/bookmarks/bookmarks.html:61
-#: rhodecode/templates/branches/branches.html:77
-#: rhodecode/templates/journal/journal.html:222
-#: rhodecode/templates/tags/tags.html:78
+#: rhodecode/templates/bookmarks/bookmarks.html:59
+#: rhodecode/templates/branches/branches.html:74
+#: rhodecode/templates/journal/journal.html:218
+#: rhodecode/templates/journal/journal.html:321
+#: rhodecode/templates/tags/tags.html:75
 msgid "Click to sort descending"
 msgstr "降順で並び替え"
 
-#: rhodecode/templates/index_base.html:177
-#: rhodecode/templates/index_base.html:267
+#: rhodecode/templates/index_base.html:181
+#: rhodecode/templates/index_base.html:271
 msgid "Last Change"
 msgstr "最後の変更点"
 
-#: rhodecode/templates/index_base.html:209
-#: rhodecode/templates/index_base.html:293
-#: rhodecode/templates/admin/repos/repos.html:96
-#: rhodecode/templates/admin/users/user_edit_my_account.html:204
+#: rhodecode/templates/index_base.html:211
+#: rhodecode/templates/admin/repos/repos.html:99
+#: rhodecode/templates/admin/users/user_edit_my_account.html:198
 #: rhodecode/templates/admin/users/users.html:109
-#: rhodecode/templates/bookmarks/bookmarks.html:62
-#: rhodecode/templates/branches/branches.html:78
-#: rhodecode/templates/journal/journal.html:223
-#: rhodecode/templates/tags/tags.html:79
+#: rhodecode/templates/bookmarks/bookmarks.html:60
+#: rhodecode/templates/branches/branches.html:75
+#: rhodecode/templates/journal/journal.html:219
+#: rhodecode/templates/journal/journal.html:322
+#: rhodecode/templates/tags/tags.html:76
 msgid "No records found."
 msgstr "レコードが見つかりません"
 
-#: rhodecode/templates/index_base.html:210
-#: rhodecode/templates/index_base.html:294
-#: rhodecode/templates/admin/repos/repos.html:97
-#: rhodecode/templates/admin/users/user_edit_my_account.html:205
+#: rhodecode/templates/index_base.html:212
+#: rhodecode/templates/index_base.html:299
+#: rhodecode/templates/admin/repos/repos.html:100
+#: rhodecode/templates/admin/users/user_edit_my_account.html:199
 #: rhodecode/templates/admin/users/users.html:110
-#: rhodecode/templates/bookmarks/bookmarks.html:63
-#: rhodecode/templates/branches/branches.html:79
-#: rhodecode/templates/journal/journal.html:224
-#: rhodecode/templates/tags/tags.html:80
+#: rhodecode/templates/bookmarks/bookmarks.html:61
+#: rhodecode/templates/branches/branches.html:76
+#: rhodecode/templates/journal/journal.html:220
+#: rhodecode/templates/journal/journal.html:323
+#: rhodecode/templates/tags/tags.html:77
 msgid "Data error."
 msgstr "データエラー"
 
-#: rhodecode/templates/index_base.html:211
-#: rhodecode/templates/index_base.html:295
-#: rhodecode/templates/admin/repos/repos.html:98
-#: rhodecode/templates/admin/users/user_edit_my_account.html:206
+#: rhodecode/templates/index_base.html:213
+#: rhodecode/templates/index_base.html:300
+#: rhodecode/templates/admin/repos/repos.html:101
+#: rhodecode/templates/admin/users/user_edit_my_account.html:58
+#: rhodecode/templates/admin/users/user_edit_my_account.html:200
 #: rhodecode/templates/admin/users/users.html:111
-#: rhodecode/templates/bookmarks/bookmarks.html:64
-#: rhodecode/templates/branches/branches.html:80
-#: rhodecode/templates/journal/journal.html:62
-#: rhodecode/templates/journal/journal.html:225
-#: rhodecode/templates/tags/tags.html:81
+#: rhodecode/templates/bookmarks/bookmarks.html:62
+#: rhodecode/templates/branches/branches.html:77
+#: rhodecode/templates/journal/journal.html:221
+#: rhodecode/templates/journal/journal.html:324
+#: rhodecode/templates/tags/tags.html:78
 msgid "Loading..."
 msgstr "読み込み中..."
 
-#: rhodecode/templates/login.html:5 rhodecode/templates/login.html:54
-msgid "Sign In"
-msgstr "サインイン"
+#: rhodecode/templates/index_base.html:298
+msgid "No repositories found."
+msgstr "リポジトリが見つかりません"
+
+#: rhodecode/templates/login.html:5 rhodecode/templates/base/base.html:227
+msgid "Log In"
+msgstr "ログイン"
 
 #: rhodecode/templates/login.html:21
-msgid "Sign In to"
-msgstr ""
+#, python-format
+msgid "Log In to %s"
+msgstr "%s へログイン"
 
 #: rhodecode/templates/login.html:31 rhodecode/templates/register.html:20
 #: rhodecode/templates/admin/admin_log.html:5
 #: rhodecode/templates/admin/users/user_add.html:32
-#: rhodecode/templates/admin/users/user_edit.html:50
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:26
-#: rhodecode/templates/base/base.html:83
-#: rhodecode/templates/summary/summary.html:131
+#: rhodecode/templates/admin/users/user_edit.html:57
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:31
+#: rhodecode/templates/admin/users/users.html:77
+#: rhodecode/templates/base/base.html:203
+#: rhodecode/templates/summary/summary.html:123
 msgid "Username"
 msgstr "ユーザー名"
 
 #: rhodecode/templates/login.html:40 rhodecode/templates/register.html:29
 #: rhodecode/templates/admin/ldap/ldap.html:46
 #: rhodecode/templates/admin/users/user_add.html:41
-#: rhodecode/templates/base/base.html:92
+#: rhodecode/templates/base/base.html:212
 msgid "Password"
 msgstr "パスワード"
 
@@ -1493,16 +1678,20 @@
 msgid "Remember me"
 msgstr "次回から自動的にサインイン"
 
+#: rhodecode/templates/login.html:54
+msgid "Sign In"
+msgstr "サインイン"
+
 #: rhodecode/templates/login.html:60
 msgid "Forgot your password ?"
 msgstr "パスワードを忘れた場合はこちら"
 
-#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:103
+#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:223
 msgid "Don't have an account ?"
 msgstr "アカウントを持っていない場合はこちら"
 
 #: rhodecode/templates/password_reset.html:5
-msgid "Reset your password"
+msgid "Password Reset"
 msgstr "パスワードリセット"
 
 #: rhodecode/templates/password_reset.html:11
@@ -1535,23 +1724,23 @@
 
 #: rhodecode/templates/register.html:47
 #: rhodecode/templates/admin/users/user_add.html:59
-#: rhodecode/templates/admin/users/user_edit.html:90
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:53
+#: rhodecode/templates/admin/users/user_edit.html:97
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:62
 msgid "First Name"
 msgstr "名前"
 
 #: rhodecode/templates/register.html:56
 #: rhodecode/templates/admin/users/user_add.html:68
-#: rhodecode/templates/admin/users/user_edit.html:99
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:62
+#: rhodecode/templates/admin/users/user_edit.html:106
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:71
 msgid "Last Name"
 msgstr "名字"
 
 #: rhodecode/templates/register.html:65
 #: rhodecode/templates/admin/users/user_add.html:77
-#: rhodecode/templates/admin/users/user_edit.html:108
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:71
-#: rhodecode/templates/summary/summary.html:133
+#: rhodecode/templates/admin/users/user_edit.html:115
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:80
+#: rhodecode/templates/summary/summary.html:125
 msgid "Email"
 msgstr "メールアドレス"
 
@@ -1563,44 +1752,31 @@
 msgid "Your account must wait for activation by administrator"
 msgstr "アカウントは管理者のアクティベーションを待つ必要があります"
 
-#: rhodecode/templates/repo_switcher_list.html:11
+#: rhodecode/templates/repo_switcher_list.html:10
 #: rhodecode/templates/admin/defaults/defaults.html:44
 #: rhodecode/templates/admin/repos/repo_add_base.html:65
 #: rhodecode/templates/admin/repos/repo_edit.html:85
-#: rhodecode/templates/settings/repo_settings.html:76
+#: rhodecode/templates/data_table/_dt_elements.html:61
+#: rhodecode/templates/summary/summary.html:77
 msgid "Private repository"
 msgstr "非公開リポジトリ"
 
-#: rhodecode/templates/repo_switcher_list.html:16
+#: rhodecode/templates/repo_switcher_list.html:12
+#: rhodecode/templates/data_table/_dt_elements.html:63
+#: rhodecode/templates/summary/summary.html:79
 msgid "Public repository"
 msgstr "公開リポジトリ"
 
-#: rhodecode/templates/switch_to_list.html:3
-#: rhodecode/templates/branches/branches.html:14
-msgid "branches"
-msgstr "ブランチ"
-
 #: rhodecode/templates/switch_to_list.html:10
 #: rhodecode/templates/branches/branches_data.html:57
 msgid "There are no branches yet"
 msgstr "まだブランチがありません"
 
-#: rhodecode/templates/switch_to_list.html:15
-#: rhodecode/templates/shortlog/shortlog_data.html:10
-#: rhodecode/templates/tags/tags.html:15
-msgid "tags"
-msgstr "タグ"
-
 #: rhodecode/templates/switch_to_list.html:22
 #: rhodecode/templates/tags/tags_data.html:38
 msgid "There are no tags yet"
 msgstr "まだタグがありません"
 
-#: rhodecode/templates/switch_to_list.html:28
-#: rhodecode/templates/bookmarks/bookmarks.html:15
-msgid "bookmarks"
-msgstr "ブックマーク"
-
 #: rhodecode/templates/switch_to_list.html:35
 #: rhodecode/templates/bookmarks/bookmarks_data.html:32
 msgid "There are no bookmarks yet"
@@ -1608,6 +1784,7 @@
 
 #: rhodecode/templates/admin/admin.html:5
 #: rhodecode/templates/admin/admin.html:13
+#: rhodecode/templates/base/base.html:68
 msgid "Admin journal"
 msgstr "管理者ジャーナル"
 
@@ -1628,11 +1805,13 @@
 msgstr[0] "%s エントリ"
 
 #: rhodecode/templates/admin/admin_log.html:6
-#: rhodecode/templates/admin/repos/repos.html:74
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:8
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:9
-#: rhodecode/templates/journal/journal_page_repos.html:9
-#: rhodecode/templates/journal/journal_page_repos.html:10
+#: rhodecode/templates/admin/repos/repos.html:77
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46
+#: rhodecode/templates/admin/users/user_edit_my_account.html:176
+#: rhodecode/templates/admin/users/users.html:87
+#: rhodecode/templates/admin/users_groups/users_groups.html:37
+#: rhodecode/templates/journal/journal.html:197
+#: rhodecode/templates/journal/journal.html:300
 msgid "Action"
 msgstr "アクション"
 
@@ -1642,11 +1821,11 @@
 msgstr "リポジトリ"
 
 #: rhodecode/templates/admin/admin_log.html:8
-#: rhodecode/templates/bookmarks/bookmarks.html:37
+#: rhodecode/templates/bookmarks/bookmarks.html:35
 #: rhodecode/templates/bookmarks/bookmarks_data.html:7
-#: rhodecode/templates/branches/branches.html:51
+#: rhodecode/templates/branches/branches.html:48
 #: rhodecode/templates/branches/branches_data.html:7
-#: rhodecode/templates/tags/tags.html:52
+#: rhodecode/templates/tags/tags.html:49
 #: rhodecode/templates/tags/tags_data.html:7
 msgid "Date"
 msgstr "日時"
@@ -1665,6 +1844,7 @@
 msgstr "リポジトリのデフォルト設定"
 
 #: rhodecode/templates/admin/defaults/defaults.html:11
+#: rhodecode/templates/base/base.html:75
 msgid "Defaults"
 msgstr "デフォルト設定"
 
@@ -1677,8 +1857,7 @@
 #: rhodecode/templates/admin/defaults/defaults.html:48
 #: rhodecode/templates/admin/repos/repo_add_base.html:69
 #: rhodecode/templates/admin/repos/repo_edit.html:89
-#: rhodecode/templates/forks/fork.html:72
-#: rhodecode/templates/settings/repo_settings.html:80
+#: rhodecode/templates/forks/fork.html:69
 msgid ""
 "Private repositories are only visible to people explicitly added as "
 "collaborators."
@@ -1706,7 +1885,7 @@
 
 #: rhodecode/templates/admin/defaults/defaults.html:75
 #: rhodecode/templates/admin/repos/repo_edit.html:112
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:66
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:72
 msgid "Enable locking"
 msgstr "ロックを有効にする"
 
@@ -1717,14 +1896,18 @@
 
 #: rhodecode/templates/admin/defaults/defaults.html:84
 #: rhodecode/templates/admin/ldap/ldap.html:89
-#: rhodecode/templates/admin/repos/repo_edit.html:141
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:74
+#: rhodecode/templates/admin/permissions/permissions.html:92
+#: rhodecode/templates/admin/repos/repo_edit.html:148
+#: rhodecode/templates/admin/repos/repo_edit.html:173
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:80
 #: rhodecode/templates/admin/settings/hooks.html:73
-#: rhodecode/templates/admin/users/user_edit.html:133
-#: rhodecode/templates/admin/users/user_edit.html:178
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:79
+#: rhodecode/templates/admin/users/user_add.html:94
+#: rhodecode/templates/admin/users/user_edit.html:140
+#: rhodecode/templates/admin/users/user_edit.html:185
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:88
+#: rhodecode/templates/admin/users_groups/users_group_add.html:49
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:90
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:135
-#: rhodecode/templates/settings/repo_settings.html:94
 msgid "Save"
 msgstr "保存"
 
@@ -1733,7 +1916,9 @@
 msgstr "LDAP管理"
 
 #: rhodecode/templates/admin/ldap/ldap.html:11
-msgid "Ldap"
+#: rhodecode/templates/admin/users/users.html:86
+#: rhodecode/templates/base/base.html:74
+msgid "LDAP"
 msgstr "LDAP"
 
 #: rhodecode/templates/admin/ldap/ldap.html:28
@@ -1814,8 +1999,7 @@
 msgstr "コメント"
 
 #: rhodecode/templates/admin/notifications/notifications.html:31
-#: rhodecode/templates/base/base.html:267
-#: rhodecode/templates/base/base.html:269
+#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8
 msgid "Pull requests"
 msgstr "プルリクエスト"
 
@@ -1833,6 +2017,7 @@
 msgstr "通知を表示"
 
 #: rhodecode/templates/admin/notifications/show_notification.html:9
+#: rhodecode/templates/base/base.html:241
 msgid "Notifications"
 msgstr "通知"
 
@@ -1841,11 +2026,12 @@
 msgstr "権限管理"
 
 #: rhodecode/templates/admin/permissions/permissions.html:11
-#: rhodecode/templates/admin/repos/repo_edit.html:134
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:58
-#: rhodecode/templates/admin/users/user_edit.html:143
+#: rhodecode/templates/admin/repos/repo_edit.html:158
+#: rhodecode/templates/admin/repos/repo_edit.html:165
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:64
+#: rhodecode/templates/admin/users/user_edit.html:150
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:100
-#: rhodecode/templates/settings/repo_settings.html:86
+#: rhodecode/templates/base/base.html:73
 msgid "Permissions"
 msgstr "権限設定"
 
@@ -1859,30 +2045,21 @@
 
 #: rhodecode/templates/admin/permissions/permissions.html:49
 msgid ""
-"All default permissions on each repository will be reset to choosen "
+"All default permissions on each repository will be reset to chosen "
 "permission, note that all custom default permission on repositories will "
 "be lost"
 msgstr ""
 
 #: rhodecode/templates/admin/permissions/permissions.html:50
 #: rhodecode/templates/admin/permissions/permissions.html:63
-msgid "overwrite existing settings"
+msgid "Overwrite existing settings"
 msgstr "現在の設定を上書きする"
 
-#: rhodecode/templates/admin/permissions/permissions.html:55
-#: rhodecode/templates/admin/repos/repo_add_base.html:29
-#: rhodecode/templates/admin/repos/repo_edit.html:49
-#: rhodecode/templates/admin/repos_groups/repos_groups.html:4
-#: rhodecode/templates/forks/fork.html:50
-#: rhodecode/templates/settings/repo_settings.html:48
-msgid "Repository group"
-msgstr "リポジトリグループ"
-
 #: rhodecode/templates/admin/permissions/permissions.html:62
 msgid ""
-"All default permissions on each repository group will be reset to choosen"
-" permission, note that all custom default permission on repositories "
-"group will be lost"
+"All default permissions on each repository group will be reset to chosen "
+"permission, note that all custom default permission on repository groups "
+"will be lost"
 msgstr ""
 
 #: rhodecode/templates/admin/permissions/permissions.html:69
@@ -1897,40 +2074,95 @@
 msgid "Repository forking"
 msgstr "リポジトリフォーク"
 
-#: rhodecode/templates/admin/permissions/permissions.html:92
-#: rhodecode/templates/admin/repos/repo_edit.html:264
-msgid "set"
-msgstr "保存"
-
-#: rhodecode/templates/admin/repos/repo_add.html:5
-#: rhodecode/templates/admin/repos/repo_add_create_repository.html:5
-msgid "Add repository"
-msgstr "リポジトリの追加"
-
-#: rhodecode/templates/admin/repos/repo_add.html:11
-#: rhodecode/templates/admin/repos/repo_edit.html:11
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:10
+#: rhodecode/templates/admin/permissions/permissions.html:93
+#: rhodecode/templates/admin/permissions/permissions.html:154
+#: rhodecode/templates/admin/repos/repo_edit.html:149
+#: rhodecode/templates/admin/repos/repo_edit.html:174
+#: rhodecode/templates/admin/repos/repo_edit.html:388
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:81
+#: rhodecode/templates/admin/settings/settings.html:115
+#: rhodecode/templates/admin/settings/settings.html:187
+#: rhodecode/templates/admin/settings/settings.html:278
+#: rhodecode/templates/admin/users/user_edit.html:141
+#: rhodecode/templates/admin/users/user_edit.html:186
+#: rhodecode/templates/admin/users/user_edit.html:235
+#: rhodecode/templates/admin/users/user_edit.html:283
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:89
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:136
+#: rhodecode/templates/files/files_add.html:80
+#: rhodecode/templates/files/files_edit.html:66
+#: rhodecode/templates/pullrequests/pullrequest.html:110
+msgid "Reset"
+msgstr "リセット"
+
+#: rhodecode/templates/admin/permissions/permissions.html:103
+msgid "Default User Permissions"
+msgstr "デフォルトのユーザー権限"
+
+#: rhodecode/templates/admin/permissions/permissions.html:113
+#: rhodecode/templates/admin/users/user_edit.html:244
+msgid "Allowed IP addresses"
+msgstr "許可するIPアドレス"
+
+#: rhodecode/templates/admin/permissions/permissions.html:127
+#: rhodecode/templates/admin/repos/repo_edit.html:347
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:70
+#: rhodecode/templates/admin/users/user_edit.html:212
+#: rhodecode/templates/admin/users/user_edit.html:257
+#: rhodecode/templates/admin/users_groups/users_groups.html:46
+#: rhodecode/templates/data_table/_dt_elements.html:122
+#: rhodecode/templates/data_table/_dt_elements.html:130
+msgid "delete"
+msgstr "削除"
+
+#: rhodecode/templates/admin/permissions/permissions.html:128
+#: rhodecode/templates/admin/users/user_edit.html:258
+#, python-format
+msgid "Confirm to delete this ip: %s"
+msgstr "このIPアドレスを削除してよろしいですか: %s"
+
+#: rhodecode/templates/admin/permissions/permissions.html:134
+#: rhodecode/templates/admin/users/user_edit.html:264
+msgid "All IP addresses are allowed"
+msgstr "すべてのIPアドレスが許可されています"
+
+#: rhodecode/templates/admin/permissions/permissions.html:145
+#: rhodecode/templates/admin/users/user_edit.html:275
+msgid "New ip address"
+msgstr "新しいIPアドレス"
+
+#: rhodecode/templates/admin/permissions/permissions.html:153
+#: rhodecode/templates/admin/repos/repo_add_base.html:73
+#: rhodecode/templates/admin/repos/repo_edit.html:387
+#: rhodecode/templates/admin/users/user_edit.html:234
+#: rhodecode/templates/admin/users/user_edit.html:282
+msgid "Add"
+msgstr "追加"
+
+#: rhodecode/templates/admin/repos/repo_add.html:12
+#: rhodecode/templates/admin/repos/repo_add.html:16
+#: rhodecode/templates/base/base.html:69 rhodecode/templates/base/base.html:103
+#: rhodecode/templates/base/base.html:263
 msgid "Repositories"
 msgstr "リポジトリ"
 
-#: rhodecode/templates/admin/repos/repo_add.html:13
-msgid "add new"
+#: rhodecode/templates/admin/repos/repo_add.html:19
+msgid "Add new"
 msgstr "新規追加"
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:20
-#: rhodecode/templates/summary/summary.html:104
-#: rhodecode/templates/summary/summary.html:105
+#: rhodecode/templates/summary/summary.html:96
+#: rhodecode/templates/summary/summary.html:97
 msgid "Clone from"
 msgstr "クローン元"
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:24
 #: rhodecode/templates/admin/repos/repo_edit.html:44
-#: rhodecode/templates/settings/repo_settings.html:43
 msgid "Optional http[s] url from which repository should be cloned."
 msgstr "オプション:クローンするリポジトリのHTTP[S]のURLを指定します"
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:33
-#: rhodecode/templates/forks/fork.html:54
+#: rhodecode/templates/forks/fork.html:51
 msgid "Optionaly select a group to put this repository into."
 msgstr "オプション:このリポジトリが属するグループを選択します"
 
@@ -1940,57 +2172,39 @@
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:47
 #: rhodecode/templates/admin/repos/repo_edit.html:66
-#: rhodecode/templates/forks/fork.html:41
-#: rhodecode/templates/settings/repo_settings.html:57
+#: rhodecode/templates/forks/fork.html:38
 msgid "Landing revision"
 msgstr "ランディングリビジョン"
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:51
 #: rhodecode/templates/admin/repos/repo_edit.html:70
-#: rhodecode/templates/forks/fork.html:45
-#: rhodecode/templates/settings/repo_settings.html:61
+#: rhodecode/templates/forks/fork.html:42
 msgid "Default revision for files page, downloads, whoosh and readme"
 msgstr "ファイルページ、ダウンロード、検索、READMEのデフォルトのリビジョンを指定します"
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:60
 #: rhodecode/templates/admin/repos/repo_edit.html:79
-#: rhodecode/templates/forks/fork.html:63
-#: rhodecode/templates/settings/repo_settings.html:70
+#: rhodecode/templates/forks/fork.html:60
 msgid "Keep it short and to the point. Use a README file for longer descriptions."
 msgstr "短く要点を絞ってください。長い説明にはREADMEファイルを利用してください。"
 
-#: rhodecode/templates/admin/repos/repo_add_base.html:73
-msgid "add"
-msgstr "追加"
-
-#: rhodecode/templates/admin/repos/repo_add_create_repository.html:9
-msgid "add new repository"
-msgstr "新しいリポジトリの追加"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:5
+#: rhodecode/templates/admin/repos/repo_edit.html:8
 msgid "Edit repository"
 msgstr "リポジトリを編集"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:13
-#: rhodecode/templates/admin/users/user_edit.html:13
-#: rhodecode/templates/admin/users/user_edit.html:228
-#: rhodecode/templates/admin/users/user_edit.html:230
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:28
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:13
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:207
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:209
-#: rhodecode/templates/files/files_source.html:29
-#: rhodecode/templates/journal/journal_page_repos.html:29
-msgid "edit"
-msgstr "編集"
+#: rhodecode/templates/admin/repos/repo_edit.html:12
+#: rhodecode/templates/admin/settings/hooks.html:9
+#: rhodecode/templates/admin/settings/settings.html:11
+#: rhodecode/templates/base/base.html:76 rhodecode/templates/base/base.html:121
+#: rhodecode/templates/summary/summary.html:212
+msgid "Settings"
+msgstr "設定"
 
 #: rhodecode/templates/admin/repos/repo_edit.html:40
-#: rhodecode/templates/settings/repo_settings.html:39
 msgid "Clone uri"
 msgstr "クローンURI"
 
 #: rhodecode/templates/admin/repos/repo_edit.html:53
-#: rhodecode/templates/settings/repo_settings.html:52
 msgid "Optional select a group to put this repository into."
 msgstr "オプション: このリポジトリを配置するグループを選択します"
 
@@ -1998,179 +2212,207 @@
 msgid "Change owner of this repository."
 msgstr "リポジトリの所有者を変更"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:142
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:75
-#: rhodecode/templates/admin/settings/settings.html:113
-#: rhodecode/templates/admin/settings/settings.html:179
-#: rhodecode/templates/admin/settings/settings.html:269
-#: rhodecode/templates/admin/users/user_edit.html:134
-#: rhodecode/templates/admin/users/user_edit.html:179
-#: rhodecode/templates/admin/users/user_edit.html:282
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:80
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:136
-#: rhodecode/templates/files/files_add.html:82
-#: rhodecode/templates/files/files_edit.html:68
-#: rhodecode/templates/pullrequests/pullrequest.html:124
-#: rhodecode/templates/settings/repo_settings.html:95
-msgid "Reset"
-msgstr "リセット"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:152
-msgid "Administration"
-msgstr "管理"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:155
+#: rhodecode/templates/admin/repos/repo_edit.html:184
+msgid "Advanced settings"
+msgstr "高度な設定"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:187
 msgid "Statistics"
 msgstr "統計"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:159
+#: rhodecode/templates/admin/repos/repo_edit.html:191
 msgid "Reset current statistics"
 msgstr "現在の統計情報をリセットする"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:159
+#: rhodecode/templates/admin/repos/repo_edit.html:191
 msgid "Confirm to remove current statistics"
 msgstr "現在の統計情報をリセットしてもよろしいですか?"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:162
+#: rhodecode/templates/admin/repos/repo_edit.html:194
 msgid "Fetched to rev"
 msgstr "収集するリビジョン"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:163
+#: rhodecode/templates/admin/repos/repo_edit.html:195
 msgid "Stats gathered"
 msgstr "収集した統計情報"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:171
+#: rhodecode/templates/admin/repos/repo_edit.html:203
 msgid "Remote"
 msgstr "リモート"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:175
+#: rhodecode/templates/admin/repos/repo_edit.html:207
 msgid "Pull changes from remote location"
 msgstr "リモートから変更を取り込む"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:175
+#: rhodecode/templates/admin/repos/repo_edit.html:207
 msgid "Confirm to pull changes from remote side"
 msgstr "リモートから変更を取り込んでもよろしいですか?"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:186
+#: rhodecode/templates/admin/repos/repo_edit.html:218
 msgid "Cache"
 msgstr "キャッシュ"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:190
+#: rhodecode/templates/admin/repos/repo_edit.html:222
 msgid "Invalidate repository cache"
 msgstr "リポジトリのキャッシュを無効化"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:190
+#: rhodecode/templates/admin/repos/repo_edit.html:222
 msgid "Confirm to invalidate repository cache"
 msgstr "リポジトリのキャッシュを無効化してもよろしいですか?"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:193
+#: rhodecode/templates/admin/repos/repo_edit.html:225
 msgid ""
 "Manually invalidate cache for this repository. On first access repository"
 " will be cached again"
 msgstr "このリポジトリのキャッシュを手動で無効化します。リポジトリへの初回アクセス時に再びキャッシュされます。"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:198
+#: rhodecode/templates/admin/repos/repo_edit.html:230
 msgid "List of cached values"
 msgstr "キャッシュしている値の一覧"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:201
+#: rhodecode/templates/admin/repos/repo_edit.html:233
 msgid "Prefix"
 msgstr "プレフィックス"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:202
+#: rhodecode/templates/admin/repos/repo_edit.html:234
 msgid "Key"
 msgstr "キー"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:203
+#: rhodecode/templates/admin/repos/repo_edit.html:235
 #: rhodecode/templates/admin/users/user_add.html:86
-#: rhodecode/templates/admin/users/user_edit.html:117
+#: rhodecode/templates/admin/users/user_edit.html:124
+#: rhodecode/templates/admin/users/users.html:84
 #: rhodecode/templates/admin/users_groups/users_group_add.html:41
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:42
+#: rhodecode/templates/admin/users_groups/users_groups.html:36
 msgid "Active"
 msgstr "アクティブ"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:218
-#: rhodecode/templates/base/base.html:331
-#: rhodecode/templates/base/base.html:333
-#: rhodecode/templates/base/base.html:335
+#: rhodecode/templates/admin/repos/repo_edit.html:250
+#: rhodecode/templates/base/base.html:280
+#: rhodecode/templates/base/base.html:281
 msgid "Public journal"
 msgstr "公開ジャーナル"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:224
+#: rhodecode/templates/admin/repos/repo_edit.html:256
 msgid "Remove from public journal"
 msgstr "公開ジャーナルから削除する"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:226
+#: rhodecode/templates/admin/repos/repo_edit.html:258
 msgid "Add to public journal"
 msgstr "公開ジャーナルに追加する"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:231
+#: rhodecode/templates/admin/repos/repo_edit.html:263
 msgid ""
 "All actions made on this repository will be accessible to everyone in "
 "public journal"
 msgstr "公開ジャーナルでは、このリポジトリに対して行った操作のすべてが公開されます"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:238
+#: rhodecode/templates/admin/repos/repo_edit.html:270
 msgid "Locking"
 msgstr "ロック"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:243
+#: rhodecode/templates/admin/repos/repo_edit.html:275
 msgid "Unlock locked repo"
 msgstr "リポジトリのアンロック"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:243
+#: rhodecode/templates/admin/repos/repo_edit.html:275
 msgid "Confirm to unlock repository"
 msgstr "このリポジトリのロックを外しますか?"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:246
+#: rhodecode/templates/admin/repos/repo_edit.html:278
 msgid "lock repo"
 msgstr "リポジトリのロック"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:246
+#: rhodecode/templates/admin/repos/repo_edit.html:278
 msgid "Confirm to lock repository"
 msgstr "このリポジトリをロックしますか?"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:247
+#: rhodecode/templates/admin/repos/repo_edit.html:279
 msgid "Repository is not locked"
 msgstr "リポジトリはロックされていません"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:252
+#: rhodecode/templates/admin/repos/repo_edit.html:284
 msgid "Force locking on repository. Works only when anonymous access is disabled"
 msgstr "リポジトリを強制ロックします。匿名アクセスが無効になっている場合のみ動作します。"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:259
+#: rhodecode/templates/admin/repos/repo_edit.html:291
 msgid "Set as fork of"
 msgstr "フォーク元の設定"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:268
+#: rhodecode/templates/admin/repos/repo_edit.html:296
+msgid "set"
+msgstr "保存"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:300
 msgid "Manually set this repository as a fork of another from the list"
 msgstr "このリポジトリをリスト中の他のリポジトリのフォークとして、手動で設定します"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:274
-#: rhodecode/templates/changeset/changeset_file_comment.html:26
+#: rhodecode/templates/admin/repos/repo_edit.html:306
+#: rhodecode/templates/changeset/changeset_file_comment.html:41
 msgid "Delete"
 msgstr "削除"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:278
-#: rhodecode/templates/settings/repo_settings.html:115
+#: rhodecode/templates/admin/repos/repo_edit.html:315
 msgid "Remove this repository"
 msgstr "このリポジトリを削除"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:278
-#: rhodecode/templates/settings/repo_settings.html:115
+#: rhodecode/templates/admin/repos/repo_edit.html:315
 msgid "Confirm to delete this repository"
 msgstr "このリポジトリを削除しますか?"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:282
-#: rhodecode/templates/settings/repo_settings.html:119
+#: rhodecode/templates/admin/repos/repo_edit.html:317
+#, python-format
+msgid "this repository has %s fork"
+msgid_plural "this repository has %s forks"
+msgstr[0] "%s 個のフォークがあります"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:318
+msgid "Detach forks"
+msgstr "フォークの切り離し"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:319
+msgid "Delete forks"
+msgstr "フォークも削除"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:322
 msgid ""
 "This repository will be renamed in a special way in order to be "
-"unaccesible for RhodeCode and VCS systems. If you need fully delete it "
-"from file system please do it manually"
+"unaccesible for RhodeCode and VCS systems. If you need to fully delete it"
+" from file system please do it manually"
 msgstr ""
 "このリポジトリはRhodeCodeとVCSシステムからアクセス出来ないようにするために特別な方法でリネームされます。\n"
 "完全な削除が必要な場合はファイルシステムから手動で削除してください"
 
+#: rhodecode/templates/admin/repos/repo_edit.html:336
+msgid "Extra fields"
+msgstr "拡張フィールド"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:348
+#, python-format
+msgid "Confirm to delete this field: %s"
+msgstr "このフィールドを削除してよろしいですか: %s"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:362
+msgid "New field key"
+msgstr "新しいフィールドのキー"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:370
+msgid "New field label"
+msgstr "新しいフィールドのラベル"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:373
+msgid "Enter short label"
+msgstr "ラベルを入力してください"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:379
+msgid "New field description"
+msgstr "新しいフィールドの説明"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:382
+msgid "Enter description of a field"
+msgstr "フィールドの説明を入力してください"
+
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:3
 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:3
 msgid "none"
@@ -2188,8 +2430,6 @@
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:6
 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:6
-#: rhodecode/templates/admin/users/users.html:85
-#: rhodecode/templates/base/base.html:229
 msgid "admin"
 msgstr "管理"
 
@@ -2199,78 +2439,58 @@
 msgstr "メンバー"
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:16
-#: rhodecode/templates/data_table/_dt_elements.html:67
-#: rhodecode/templates/journal/journal.html:95
-#: rhodecode/templates/summary/summary.html:85
 msgid "private repository"
 msgstr "非公開リポジトリ"
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:19
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:28
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:18
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:20
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:35
 msgid "default"
 msgstr "default"
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:33
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:58
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:23
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:42
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:25
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:55
 msgid "revoke"
 msgstr "取消"
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:83
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:67
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:80
 msgid "Add another member"
 msgstr "別のメンバーを追加"
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:97
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:100
 msgid "Failed to remove user"
 msgstr "ユーザーの削除に失敗しました"
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:112
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:103
-msgid "Failed to remove users group"
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:116
+msgid "Failed to remove user group"
 msgstr "ユーザーグループの削除に失敗しました"
 
 #: rhodecode/templates/admin/repos/repos.html:5
 msgid "Repositories administration"
 msgstr "リポジトリ管理"
 
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:73
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:86
 msgid "apply to children"
 msgstr "子リポジトリにも適用"
 
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:74
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87
 msgid ""
-"Set or revoke permission to all children of that group, including "
-"repositories and other groups"
+"Set or revoke permission to all children of that group, including non-"
+"private repositories and other groups"
 msgstr ""
 
+#: rhodecode/templates/admin/repos_groups/repos_groups.html:4
+#, python-format
+msgid "%s Group Dashboard"
+msgstr "%s グループダッシュボード"
+
 #: rhodecode/templates/admin/repos_groups/repos_groups.html:9
-#: rhodecode/templates/base/base.html:122
-#: rhodecode/templates/base/base.html:313
-#: rhodecode/templates/base/base.html:315
-#: rhodecode/templates/base/base.html:317
-#: rhodecode/templates/bookmarks/bookmarks.html:11
-#: rhodecode/templates/branches/branches.html:10
-#: rhodecode/templates/changelog/changelog.html:10
-#: rhodecode/templates/changeset/changeset.html:10
-#: rhodecode/templates/changeset/changeset_range.html:9
-#: rhodecode/templates/compare/compare_diff.html:9
-#: rhodecode/templates/files/file_diff.html:8
-#: rhodecode/templates/files/files.html:8
-#: rhodecode/templates/files/files_add.html:15
-#: rhodecode/templates/files/files_edit.html:15
-#: rhodecode/templates/followers/followers.html:9
-#: rhodecode/templates/forks/fork.html:9 rhodecode/templates/forks/forks.html:9
-#: rhodecode/templates/pullrequests/pullrequest.html:8
-#: rhodecode/templates/pullrequests/pullrequest_show.html:8
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8
-#: rhodecode/templates/settings/repo_settings.html:9
-#: rhodecode/templates/shortlog/shortlog.html:10
-#: rhodecode/templates/summary/summary.html:8
-#: rhodecode/templates/tags/tags.html:11
 msgid "Home"
 msgstr "ホーム"
 
@@ -2279,79 +2499,77 @@
 msgstr "と"
 
 #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:5
-msgid "Add repos group"
-msgstr "リポジトリグループを追加"
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:10
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:10
-msgid "Repos groups"
+msgid "Add repository group"
+msgstr "リポジトリグループの追加"
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:11
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:11
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:16
+#: rhodecode/templates/base/base.html:70 rhodecode/templates/base/base.html:82
+msgid "Repository groups"
 msgstr "リポジトリグループ"
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:12
-msgid "add new repos group"
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:13
+msgid "Add new repository group"
 msgstr "新しいリポジトリグループを追加"
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:50
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:50
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:51
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:56
 msgid "Group parent"
 msgstr "親グループ"
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:58
-#: rhodecode/templates/admin/users/user_add.html:94
-#: rhodecode/templates/admin/users_groups/users_group_add.html:49
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:90
-#: rhodecode/templates/pullrequests/pullrequest_show.html:131
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:59
 msgid "save"
 msgstr "保存"
 
 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:5
-msgid "Edit repos group"
+msgid "Edit repository group"
 msgstr "リポジトリグループを編集"
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:12
-msgid "edit repos group"
-msgstr "リポジトリグループを編集"
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:70
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:13
+#, python-format
+msgid "Edit repository group %s"
+msgstr "リポジトリグループを編集 %s"
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:27
+msgid "Add child group"
+msgstr "子グループの追加"
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:76
 msgid ""
 "Enable lock-by-pulling on group. This option will be applied to all other"
 " groups and repositories inside"
 msgstr ""
 
 #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:5
-msgid "Repositories groups administration"
+msgid "Repository groups administration"
 msgstr "リポジトリグループ管理"
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:22
-msgid "ADD NEW GROUP"
-msgstr "新しいグループを追加"
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:35
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:45
 msgid "Number of toplevel repositories"
 msgstr "トップレベルリポジトリの数"
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:36
-#: rhodecode/templates/admin/users/users.html:87
-#: rhodecode/templates/admin/users_groups/users_groups.html:35
-msgid "action"
-msgstr "アクション"
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55
-#: rhodecode/templates/admin/users/user_edit.html:259
-#: rhodecode/templates/admin/users_groups/users_groups.html:44
-#: rhodecode/templates/data_table/_dt_elements.html:7
-#: rhodecode/templates/data_table/_dt_elements.html:121
-msgid "delete"
-msgstr "削除"
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:64
+msgid "Edit"
+msgstr "編集"
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:65
+#: rhodecode/templates/base/perms_summary.html:29
+#: rhodecode/templates/base/perms_summary.html:48
+#: rhodecode/templates/base/perms_summary.html:50
+#: rhodecode/templates/data_table/_dt_elements.html:116
+#: rhodecode/templates/data_table/_dt_elements.html:117
+msgid "edit"
+msgstr "編集"
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:70
 #, python-format
 msgid "Confirm to delete this group: %s with %s repository"
 msgid_plural "Confirm to delete this group: %s with %s repositories"
 msgstr[0] "このグループを削除してもよろしいですか?: %s %s リポジトリ"
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:63
-msgid "There are no repositories groups yet"
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:78
+msgid "There are no repository groups yet"
 msgstr "まだリポジトリグループがありません"
 
 #: rhodecode/templates/admin/settings/hooks.html:5
@@ -2359,12 +2577,6 @@
 msgid "Settings administration"
 msgstr "設定管理"
 
-#: rhodecode/templates/admin/settings/hooks.html:9
-#: rhodecode/templates/admin/settings/settings.html:9
-#: rhodecode/templates/settings/repo_settings.html:13
-msgid "Settings"
-msgstr "設定"
-
 #: rhodecode/templates/admin/settings/hooks.html:24
 msgid "Built in hooks - read only"
 msgstr "組み込みフック - 読み込み専用"
@@ -2381,208 +2593,212 @@
 msgid "Failed to remove hook"
 msgstr "フックの削除に失敗しました"
 
-#: rhodecode/templates/admin/settings/settings.html:24
+#: rhodecode/templates/admin/settings/settings.html:26
 msgid "Remap and rescan repositories"
 msgstr "リポジトリの再マッピングと再スキャン"
 
-#: rhodecode/templates/admin/settings/settings.html:32
-msgid "rescan option"
+#: rhodecode/templates/admin/settings/settings.html:34
+msgid "Rescan option"
 msgstr "再スキャンオプション"
 
-#: rhodecode/templates/admin/settings/settings.html:38
+#: rhodecode/templates/admin/settings/settings.html:40
 msgid ""
 "In case a repository was deleted from filesystem and there are leftovers "
 "in the database check this option to scan obsolete data in database and "
 "remove it."
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:39
-msgid "destroy old data"
+#: rhodecode/templates/admin/settings/settings.html:41
+msgid "Destroy old data"
 msgstr "古いデータを削除する"
 
-#: rhodecode/templates/admin/settings/settings.html:41
+#: rhodecode/templates/admin/settings/settings.html:43
 msgid ""
 "Rescan repositories location for new repositories. Also deletes obsolete "
 "if `destroy` flag is checked "
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:46
+#: rhodecode/templates/admin/settings/settings.html:48
 msgid "Rescan repositories"
 msgstr "リポジトリを再チェック"
 
-#: rhodecode/templates/admin/settings/settings.html:52
+#: rhodecode/templates/admin/settings/settings.html:54
 msgid "Whoosh indexing"
 msgstr "Whooshインデックス"
 
-#: rhodecode/templates/admin/settings/settings.html:60
-msgid "index build option"
+#: rhodecode/templates/admin/settings/settings.html:62
+msgid "Index build option"
 msgstr "インデックス作成時の設定"
 
-#: rhodecode/templates/admin/settings/settings.html:65
-msgid "build from scratch"
+#: rhodecode/templates/admin/settings/settings.html:67
+msgid "Build from scratch"
 msgstr "一度削除してから再度インデックスを作成"
 
-#: rhodecode/templates/admin/settings/settings.html:71
+#: rhodecode/templates/admin/settings/settings.html:73
 msgid "Reindex"
 msgstr "再インデックス"
 
-#: rhodecode/templates/admin/settings/settings.html:77
+#: rhodecode/templates/admin/settings/settings.html:79
 msgid "Global application settings"
 msgstr "アプリケーション全体の設定"
 
-#: rhodecode/templates/admin/settings/settings.html:86
-msgid "Application name"
-msgstr "アプリケーション名"
-
-#: rhodecode/templates/admin/settings/settings.html:95
-msgid "Realm text"
-msgstr "Realmテキスト"
-
-#: rhodecode/templates/admin/settings/settings.html:104
-msgid "GA code"
-msgstr "GAコード"
-
-#: rhodecode/templates/admin/settings/settings.html:112
-#: rhodecode/templates/admin/settings/settings.html:178
-#: rhodecode/templates/admin/settings/settings.html:268
+#: rhodecode/templates/admin/settings/settings.html:88
+msgid "Site branding"
+msgstr "サイト名"
+
+#: rhodecode/templates/admin/settings/settings.html:97
+msgid "HTTP authentication realm"
+msgstr "HTTP認証レルム"
+
+#: rhodecode/templates/admin/settings/settings.html:106
+msgid "Google Analytics code"
+msgstr "Google Analyticsコード"
+
+#: rhodecode/templates/admin/settings/settings.html:114
+#: rhodecode/templates/admin/settings/settings.html:186
+#: rhodecode/templates/admin/settings/settings.html:277
 msgid "Save settings"
 msgstr "設定を保存"
 
-#: rhodecode/templates/admin/settings/settings.html:119
+#: rhodecode/templates/admin/settings/settings.html:121
 msgid "Visualisation settings"
 msgstr "表示の設定"
 
-#: rhodecode/templates/admin/settings/settings.html:127
+#: rhodecode/templates/admin/settings/settings.html:129
 msgid "General"
 msgstr "一般"
 
-#: rhodecode/templates/admin/settings/settings.html:132
+#: rhodecode/templates/admin/settings/settings.html:134
 msgid "Use lightweight dashboard"
 msgstr "軽量ダッシュボードを使用"
 
-#: rhodecode/templates/admin/settings/settings.html:139
+#: rhodecode/templates/admin/settings/settings.html:140
+msgid "Use repository extra fields"
+msgstr "リポジトリの拡張フィールドを使用"
+
+#: rhodecode/templates/admin/settings/settings.html:147
 msgid "Icons"
 msgstr "アイコン"
 
-#: rhodecode/templates/admin/settings/settings.html:144
+#: rhodecode/templates/admin/settings/settings.html:152
 msgid "Show public repo icon on repositories"
 msgstr "公開リポジトリのアイコンを表示"
 
-#: rhodecode/templates/admin/settings/settings.html:148
+#: rhodecode/templates/admin/settings/settings.html:156
 msgid "Show private repo icon on repositories"
 msgstr "非公開リポジトリのアイコンを表示"
 
-#: rhodecode/templates/admin/settings/settings.html:155
+#: rhodecode/templates/admin/settings/settings.html:163
 msgid "Meta-Tagging"
 msgstr "メタタグ"
 
-#: rhodecode/templates/admin/settings/settings.html:160
+#: rhodecode/templates/admin/settings/settings.html:168
 msgid "Stylify recognised metatags:"
 msgstr "次のメタタグを変換する"
 
-#: rhodecode/templates/admin/settings/settings.html:187
+#: rhodecode/templates/admin/settings/settings.html:195
 msgid "VCS settings"
 msgstr "VCSの設定"
 
-#: rhodecode/templates/admin/settings/settings.html:196
+#: rhodecode/templates/admin/settings/settings.html:204
 msgid "Web"
 msgstr "Web"
 
-#: rhodecode/templates/admin/settings/settings.html:201
-msgid "require ssl for vcs operations"
+#: rhodecode/templates/admin/settings/settings.html:209
+msgid "Require SSL for vcs operations"
 msgstr "VCSの操作にSSLを必須とする"
 
-#: rhodecode/templates/admin/settings/settings.html:203
+#: rhodecode/templates/admin/settings/settings.html:211
 msgid ""
 "RhodeCode will require SSL for pushing or pulling. If SSL is missing it "
 "will return HTTP Error 406: Not Acceptable"
-msgstr "RhodeCodeはPushとPullにSSLを要求します。もしSSLでない場合、HTTP Error 406: Not Acceptalbeを返します"
-
-#: rhodecode/templates/admin/settings/settings.html:209
+msgstr ""
+"RhodeCodeはPushとPullにSSLを要求します。もしSSLでない場合、HTTP Error 406: Not "
+"Acceptalbeを返します"
+
+#: rhodecode/templates/admin/settings/settings.html:217
 msgid "Hooks"
 msgstr "フック"
 
-#: rhodecode/templates/admin/settings/settings.html:214
+#: rhodecode/templates/admin/settings/settings.html:222
 msgid "Update repository after push (hg update)"
 msgstr "プッシュ後にリポジトリをを更新する (hg update)"
 
-#: rhodecode/templates/admin/settings/settings.html:218
+#: rhodecode/templates/admin/settings/settings.html:226
 msgid "Show repository size after push"
 msgstr "プッシュ後にリポジトリのサイズを表示する"
 
-#: rhodecode/templates/admin/settings/settings.html:222
-msgid "Log user push commands"
-msgstr "ユーザーのプッシュコマンドを記録する"
-
-#: rhodecode/templates/admin/settings/settings.html:226
-msgid "Log user pull commands"
-msgstr "ユーザーのプルコマンドを記録する"
-
 #: rhodecode/templates/admin/settings/settings.html:230
-msgid "advanced setup"
+msgid "Log user push commands"
+msgstr "ユーザーのプッシュコマンドを記録する"
+
+#: rhodecode/templates/admin/settings/settings.html:234
+msgid "Log user pull commands"
+msgstr "ユーザーのプルコマンドを記録する"
+
+#: rhodecode/templates/admin/settings/settings.html:238
+msgid "Advanced setup"
 msgstr "高度な設定"
 
-#: rhodecode/templates/admin/settings/settings.html:235
+#: rhodecode/templates/admin/settings/settings.html:243
 msgid "Mercurial Extensions"
 msgstr "Mercurialエクステンション"
 
-#: rhodecode/templates/admin/settings/settings.html:240
-msgid "largefiles extensions"
-msgstr "largefilesエクステンション"
-
-#: rhodecode/templates/admin/settings/settings.html:244
-msgid "hgsubversion extensions"
-msgstr "hgsubversionエクステンション"
-
-#: rhodecode/templates/admin/settings/settings.html:246
+#: rhodecode/templates/admin/settings/settings.html:248
+msgid "Enable largefiles extension"
+msgstr "largefilesエクステンションを有効化"
+
+#: rhodecode/templates/admin/settings/settings.html:252
+msgid "Enable hgsubversion extension"
+msgstr "hgsubversionエクステンションを有効化"
+
+#: rhodecode/templates/admin/settings/settings.html:254
 msgid ""
-"Requires hgsubversion library installed. Allows clonning from svn remote "
+"Requires hgsubversion library installed. Allows cloning from svn remote "
 "locations"
 msgstr "hgsubversion のインストールが必要です。リモートロケーションのsvnからクローン出来るようになります"
 
-#: rhodecode/templates/admin/settings/settings.html:256
+#: rhodecode/templates/admin/settings/settings.html:264
 msgid "Repositories location"
 msgstr "リポジトリロケーション"
 
-#: rhodecode/templates/admin/settings/settings.html:261
+#: rhodecode/templates/admin/settings/settings.html:269
 msgid ""
 "This a crucial application setting. If you are really sure you need to "
 "change this, you must restart application in order to make this setting "
 "take effect. Click this label to unlock."
-msgstr ""
-"これはアプリケーションの重要な設定です。本当に変更が必要でしょうか。"
-"もし、変更した場合、変更を反映さ競るためにアプリケーションを再起動する必要があります。"
-"アンロックにするにはこのラベルをクリックして下さい"
-
-#: rhodecode/templates/admin/settings/settings.html:262
-#: rhodecode/templates/base/base.html:221
-msgid "unlock"
+msgstr "これはアプリケーションの重要な設定です。本当に変更が必要でしょうか。もし、変更した場合、変更を反映さ競るためにアプリケーションを再起動する必要があります。アンロックにするにはこのラベルをクリックして下さい"
+
+#: rhodecode/templates/admin/settings/settings.html:270
+#: rhodecode/templates/base/base.html:131
+msgid "Unlock"
 msgstr "アンロック"
 
-#: rhodecode/templates/admin/settings/settings.html:263
+#: rhodecode/templates/admin/settings/settings.html:272
 msgid ""
 "Location where repositories are stored. After changing this value a "
 "restart, and rescan is required"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:283
+#: rhodecode/templates/admin/settings/settings.html:292
 msgid "Test Email"
 msgstr "テストメール"
 
-#: rhodecode/templates/admin/settings/settings.html:291
+#: rhodecode/templates/admin/settings/settings.html:300
 msgid "Email to"
 msgstr "送信先"
 
-#: rhodecode/templates/admin/settings/settings.html:299
+#: rhodecode/templates/admin/settings/settings.html:308
 msgid "Send"
 msgstr "送る"
 
-#: rhodecode/templates/admin/settings/settings.html:305
+#: rhodecode/templates/admin/settings/settings.html:314
 msgid "System Info and Packages"
 msgstr "システム情報とパッケージ"
 
-#: rhodecode/templates/admin/settings/settings.html:308
-msgid "show"
+#: rhodecode/templates/admin/settings/settings.html:317
+#: rhodecode/templates/changelog/changelog.html:42
+msgid "Show"
 msgstr "表示"
 
 #: rhodecode/templates/admin/users/user_add.html:5
@@ -2591,12 +2807,14 @@
 
 #: rhodecode/templates/admin/users/user_add.html:10
 #: rhodecode/templates/admin/users/user_edit.html:11
+#: rhodecode/templates/base/base.html:71
 msgid "Users"
 msgstr "ユーザー"
 
 #: rhodecode/templates/admin/users/user_add.html:12
-msgid "add new user"
-msgstr "新しいユーザーを追加"
+#: rhodecode/templates/admin/users/users.html:23
+msgid "Add new user"
+msgstr "新しいユーザーの追加"
 
 #: rhodecode/templates/admin/users/user_add.html:50
 msgid "Password confirmation"
@@ -2606,6 +2824,12 @@
 msgid "Edit user"
 msgstr "ユーザー編集"
 
+#: rhodecode/templates/admin/users/user_edit.html:13
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:13
+#, python-format
+msgid "Edit %s"
+msgstr "編集 %s"
+
 #: rhodecode/templates/admin/users/user_edit.html:34
 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:10
 msgid "Change your avatar at"
@@ -2621,26 +2845,31 @@
 msgid "API key"
 msgstr "APIキー"
 
-#: rhodecode/templates/admin/users/user_edit.html:63
+#: rhodecode/templates/admin/users/user_edit.html:50
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:25
+msgid "Current IP"
+msgstr "現在のIP"
+
+#: rhodecode/templates/admin/users/user_edit.html:70
 msgid "LDAP DN"
 msgstr "LDAP DN"
 
-#: rhodecode/templates/admin/users/user_edit.html:72
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:35
+#: rhodecode/templates/admin/users/user_edit.html:79
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44
 msgid "New password"
 msgstr "新しいパスワード"
 
-#: rhodecode/templates/admin/users/user_edit.html:81
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44
+#: rhodecode/templates/admin/users/user_edit.html:88
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:53
 msgid "New password confirmation"
 msgstr "新しいパスワード 再入力"
 
-#: rhodecode/templates/admin/users/user_edit.html:151
+#: rhodecode/templates/admin/users/user_edit.html:158
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:108
 msgid "Inherit default permissions"
 msgstr "デフォルトの権限を継承する"
 
-#: rhodecode/templates/admin/users/user_edit.html:156
+#: rhodecode/templates/admin/users/user_edit.html:163
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:113
 #, python-format
 msgid ""
@@ -2648,53 +2877,31 @@
 "options does not have any action"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit.html:162
+#: rhodecode/templates/admin/users/user_edit.html:169
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:119
 msgid "Create repositories"
 msgstr "リポジトリを作成する"
 
-#: rhodecode/templates/admin/users/user_edit.html:170
+#: rhodecode/templates/admin/users/user_edit.html:177
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:127
 msgid "Fork repositories"
 msgstr "リポジトリをフォークする"
 
-#: rhodecode/templates/admin/users/user_edit.html:190
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:22
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:39
-msgid "Nothing here yet"
-msgstr "まだありません"
-
-#: rhodecode/templates/admin/users/user_edit.html:197
-#: rhodecode/templates/admin/users/user_edit_my_account.html:60
-#: rhodecode/templates/admin/users/user_edit_my_account.html:217
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:185
-msgid "Permission"
-msgstr "権限"
-
-#: rhodecode/templates/admin/users/user_edit.html:198
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:186
-msgid "Edit Permission"
-msgstr "権限の編集"
-
-#: rhodecode/templates/admin/users/user_edit.html:247
+#: rhodecode/templates/admin/users/user_edit.html:200
 msgid "Email addresses"
 msgstr "メールアドレス"
 
-#: rhodecode/templates/admin/users/user_edit.html:260
+#: rhodecode/templates/admin/users/user_edit.html:213
 #, python-format
 msgid "Confirm to delete this email: %s"
 msgstr "このメールを削除してよろしいですか: %s"
 
-#: rhodecode/templates/admin/users/user_edit.html:274
+#: rhodecode/templates/admin/users/user_edit.html:227
 msgid "New email address"
 msgstr "新しいメールアドレス"
 
-#: rhodecode/templates/admin/users/user_edit.html:281
-msgid "Add"
-msgstr "追加"
-
 #: rhodecode/templates/admin/users/user_edit_my_account.html:5
-#: rhodecode/templates/base/base.html:124
+#: rhodecode/templates/base/base.html:242
 msgid "My account"
 msgstr "アカウント"
 
@@ -2707,7 +2914,7 @@
 msgstr "権限"
 
 #: rhodecode/templates/admin/users/user_edit_my_account.html:38
-#: rhodecode/templates/journal/journal.html:49
+#: rhodecode/templates/journal/journal.html:54
 msgid "My repos"
 msgstr "リポジトリ"
 
@@ -2715,132 +2922,97 @@
 msgid "My pull requests"
 msgstr "プルリクエスト"
 
-#: rhodecode/templates/admin/users/user_edit_my_account.html:45
-msgid "Add repo"
-msgstr "リポジトリの追加"
-
 #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:2
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:4
+msgid "Show closed pull requests"
+msgstr "クローズしたプルリクエストを表示"
+
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:6
 msgid "Opened by me"
 msgstr "自分が作成"
 
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:10
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:15
 #, python-format
 msgid "Pull request #%s opened on %s"
 msgstr "プルリクエスト #%s %s に作成"
 
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:15
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:17
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:45
+#: rhodecode/templates/pullrequests/pullrequest_data.html:7
+#: rhodecode/templates/pullrequests/pullrequest_show.html:27
+#: rhodecode/templates/pullrequests/pullrequest_show.html:42
+msgid "Closed"
+msgstr "クローズ"
+
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:23
 msgid "Confirm to delete this pull request"
 msgstr "このプルリクエストを削除しますか?"
 
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:26
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:30
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:51
+msgid "Nothing here yet"
+msgstr "まだありません"
+
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:34
 msgid "I participate in"
 msgstr "レビュアーとして参加"
 
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:33
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:30
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:42
+#: rhodecode/templates/pullrequests/pullrequest_data.html:11
 #, python-format
 msgid "Pull request #%s opened by %s on %s"
 msgstr "プルリクエスト #%s %s によって %s に作成"
 
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:7
-#: rhodecode/templates/bookmarks/bookmarks.html:40
-#: rhodecode/templates/bookmarks/bookmarks_data.html:9
-#: rhodecode/templates/branches/branches.html:54
-#: rhodecode/templates/branches/branches_data.html:9
-#: rhodecode/templates/journal/journal_page_repos.html:8
-#: rhodecode/templates/tags/tags.html:55
-#: rhodecode/templates/tags/tags_data.html:9
-msgid "Revision"
-msgstr "リビジョン"
-
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:28
-#: rhodecode/templates/journal/journal_page_repos.html:29
-msgid "private"
-msgstr "非公開"
-
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:31
-#: rhodecode/templates/data_table/_dt_elements.html:7
-#: rhodecode/templates/journal/journal_page_repos.html:32
-#, python-format
-msgid "Confirm to delete this repository: %s"
-msgstr "このリポジトリを削除しますか? : %s"
-
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:38
-#: rhodecode/templates/journal/journal_page_repos.html:42
-msgid "No repositories yet"
-msgstr "まだリポジトリがありません"
-
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:40
-#: rhodecode/templates/journal/journal_page_repos.html:44
-msgid "create one now"
-msgstr "今すぐ作成する"
-
 #: rhodecode/templates/admin/users/users.html:5
 msgid "Users administration"
 msgstr "ユーザー管理"
 
 #: rhodecode/templates/admin/users/users.html:9
-#: rhodecode/templates/base/base.html:235
 msgid "users"
 msgstr "ユーザー"
 
-#: rhodecode/templates/admin/users/users.html:23
-msgid "ADD NEW USER"
-msgstr "新しいユーザーを追加"
-
-#: rhodecode/templates/admin/users/users.html:77
-msgid "username"
-msgstr "ユーザー名"
-
 #: rhodecode/templates/admin/users/users.html:80
-msgid "firstname"
+msgid "Firstname"
 msgstr "名前"
 
 #: rhodecode/templates/admin/users/users.html:81
-msgid "lastname"
+msgid "Lastname"
 msgstr "名字"
 
 #: rhodecode/templates/admin/users/users.html:82
-msgid "last login"
-msgstr "最終ログイン日"
-
-#: rhodecode/templates/admin/users/users.html:84
-#: rhodecode/templates/admin/users_groups/users_groups.html:34
-msgid "active"
-msgstr "アクティブ"
-
-#: rhodecode/templates/admin/users/users.html:86
-#: rhodecode/templates/base/base.html:238
-msgid "ldap"
-msgstr "LDAP"
+msgid "Last login"
+msgstr "最終ログイン日時"
 
 #: rhodecode/templates/admin/users_groups/users_group_add.html:5
-msgid "Add users group"
-msgstr "ユーザーグループを追加"
+msgid "Add user group"
+msgstr "ユーザーグループの追加"
 
 #: rhodecode/templates/admin/users_groups/users_group_add.html:10
-#: rhodecode/templates/admin/users_groups/users_groups.html:9
-msgid "Users groups"
+#: rhodecode/templates/admin/users_groups/users_groups.html:11
+#: rhodecode/templates/base/base.html:72
+msgid "User groups"
 msgstr "ユーザーグループ"
 
 #: rhodecode/templates/admin/users_groups/users_group_add.html:12
-msgid "add new users group"
-msgstr "新しいユーザーグループを追加"
+#: rhodecode/templates/admin/users_groups/users_groups.html:25
+msgid "Add new user group"
+msgstr "新しいユーザーグループの追加"
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:5
-msgid "Edit users group"
+msgid "Edit user group"
 msgstr "ユーザーグループを編集"
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:11
-msgid "UsersGroups"
+msgid "UserGroups"
 msgstr "ユーザーグループ"
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:50
+#: rhodecode/templates/admin/users_groups/users_groups.html:35
 msgid "Members"
 msgstr "メンバー"
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:58
-msgid "Choosen group members"
+msgid "Chosen group members"
 msgstr "グループメンバーを選ぶ"
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:61
@@ -2855,262 +3027,260 @@
 msgid "Add all elements"
 msgstr "全ての要素を追加"
 
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:146
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:150
 msgid "Group members"
 msgstr "グループメンバー"
 
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:163
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:167
 msgid "No members yet"
 msgstr "まだメンバーがいません"
 
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:171
-msgid "Permissions defined for this group"
-msgstr "このリポジトリの権限設定"
-
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:178
-msgid "No permissions set yet"
-msgstr "まだ権限設定がありません"
-
 #: rhodecode/templates/admin/users_groups/users_groups.html:5
-msgid "Users groups administration"
+msgid "User groups administration"
 msgstr "ユーザーグループ管理"
 
-#: rhodecode/templates/admin/users_groups/users_groups.html:23
-msgid "ADD NEW USER GROUP"
-msgstr "新しいユーザーグループを追加"
-
-#: rhodecode/templates/admin/users_groups/users_groups.html:32
-msgid "group name"
-msgstr "グループ名"
-
-#: rhodecode/templates/admin/users_groups/users_groups.html:33
-#: rhodecode/templates/base/root.html:46
-msgid "members"
-msgstr "メンバー"
-
-#: rhodecode/templates/admin/users_groups/users_groups.html:45
+#: rhodecode/templates/admin/users_groups/users_groups.html:47
 #, python-format
-msgid "Confirm to delete this users group: %s"
+msgid "Confirm to delete this user group: %s"
 msgstr "ユーザグループを削除しますか?: %s"
 
-#: rhodecode/templates/base/base.html:41
+#: rhodecode/templates/base/base.html:42
 msgid "Submit a bug"
 msgstr "バグレポート"
 
-#: rhodecode/templates/base/base.html:77
-msgid "Login to your account"
-msgstr "ログイン"
-
-#: rhodecode/templates/base/base.html:100
-msgid "Forgot password ?"
-msgstr "パスワードを忘れた場合はこちら"
-
-#: rhodecode/templates/base/base.html:107
-msgid "Log In"
-msgstr "ログイン"
+#: rhodecode/templates/base/base.html:108
+#: rhodecode/templates/data_table/_dt_elements.html:9
+#: rhodecode/templates/data_table/_dt_elements.html:11
+#: rhodecode/templates/data_table/_dt_elements.html:13
+#: rhodecode/templates/pullrequests/pullrequest_show.html:81
+#: rhodecode/templates/summary/summary.html:8
+msgid "Summary"
+msgstr "要約"
+
+#: rhodecode/templates/base/base.html:109
+#: rhodecode/templates/changelog/changelog.html:11
+#: rhodecode/templates/data_table/_dt_elements.html:17
+#: rhodecode/templates/data_table/_dt_elements.html:19
+#: rhodecode/templates/data_table/_dt_elements.html:21
+msgid "Changelog"
+msgstr "履歴"
+
+#: rhodecode/templates/base/base.html:110
+#: rhodecode/templates/data_table/_dt_elements.html:25
+#: rhodecode/templates/data_table/_dt_elements.html:27
+#: rhodecode/templates/data_table/_dt_elements.html:29
+#: rhodecode/templates/files/files.html:12
+msgid "Files"
+msgstr "ファイル"
+
+#: rhodecode/templates/base/base.html:112
+msgid "Switch To"
+msgstr "ブランチの切り替え"
+
+#: rhodecode/templates/base/base.html:114
+#: rhodecode/templates/base/base.html:267
+msgid "loading..."
+msgstr "読み込み中..."
 
 #: rhodecode/templates/base/base.html:118
-msgid "Inbox"
-msgstr "受信箱"
-
-#: rhodecode/templates/base/base.html:123
-#: rhodecode/templates/base/base.html:322
-#: rhodecode/templates/base/base.html:324
-#: rhodecode/templates/base/base.html:326
-#: rhodecode/templates/journal/journal.html:4
-#: rhodecode/templates/journal/public_journal.html:4
-msgid "Journal"
-msgstr "ジャーナル"
-
-#: rhodecode/templates/base/base.html:125
-msgid "Log Out"
-msgstr "ログアウト"
-
-#: rhodecode/templates/base/base.html:144
-msgid "Switch repository"
-msgstr "リポジトリの切り替え"
-
-#: rhodecode/templates/base/base.html:146
-msgid "Products"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:152
-#: rhodecode/templates/base/base.html:182 rhodecode/templates/base/root.html:47
-msgid "loading..."
-msgstr "読み込み中..."
-
-#: rhodecode/templates/base/base.html:158
-#: rhodecode/templates/base/base.html:160
-#: rhodecode/templates/base/base.html:162
-#: rhodecode/templates/data_table/_dt_elements.html:15
-#: rhodecode/templates/data_table/_dt_elements.html:17
-#: rhodecode/templates/data_table/_dt_elements.html:19
-msgid "Summary"
-msgstr "要約"
-
-#: rhodecode/templates/base/base.html:166
-#: rhodecode/templates/base/base.html:168
-#: rhodecode/templates/base/base.html:170
-#: rhodecode/templates/changelog/changelog.html:15
-#: rhodecode/templates/data_table/_dt_elements.html:23
-#: rhodecode/templates/data_table/_dt_elements.html:25
-#: rhodecode/templates/data_table/_dt_elements.html:27
-msgid "Changelog"
-msgstr "履歴"
-
-#: rhodecode/templates/base/base.html:175
-#: rhodecode/templates/base/base.html:177
-#: rhodecode/templates/base/base.html:179
-msgid "Switch to"
-msgstr "ブランチの切り替え"
-
-#: rhodecode/templates/base/base.html:186
-#: rhodecode/templates/base/base.html:188
-#: rhodecode/templates/base/base.html:190
-#: rhodecode/templates/data_table/_dt_elements.html:31
-#: rhodecode/templates/data_table/_dt_elements.html:33
-#: rhodecode/templates/data_table/_dt_elements.html:35
-msgid "Files"
-msgstr "ファイル"
-
-#: rhodecode/templates/base/base.html:195
-#: rhodecode/templates/base/base.html:199
 msgid "Options"
 msgstr "オプション"
 
-#: rhodecode/templates/base/base.html:204
-#: rhodecode/templates/base/base.html:206
-msgid "repository settings"
-msgstr "リポジトリ設定"
-
-#: rhodecode/templates/base/base.html:210
-#: rhodecode/templates/data_table/_dt_elements.html:80
-#: rhodecode/templates/forks/fork.html:13
-msgid "fork"
-msgstr "フォーク"
-
-#: rhodecode/templates/base/base.html:212 rhodecode/templates/base/root.html:50
-#: rhodecode/templates/changelog/changelog.html:43
-msgid "Open new pull request"
-msgstr "新しいプルリクエストを作成"
-
-#: rhodecode/templates/base/base.html:215
+#: rhodecode/templates/base/base.html:124
 #: rhodecode/templates/forks/forks_data.html:21
 msgid "Compare fork"
 msgstr "フォークを比較"
 
-#: rhodecode/templates/base/base.html:217
-msgid "search"
-msgstr "検索"
-
-#: rhodecode/templates/base/base.html:223
-msgid "lock"
-msgstr "ロック"
-
-#: rhodecode/templates/base/base.html:234
-msgid "repositories groups"
-msgstr "リポジトリグループ"
-
-#: rhodecode/templates/base/base.html:236
-msgid "users groups"
-msgstr "ユーザーグループ"
-
-#: rhodecode/templates/base/base.html:237
-msgid "permissions"
-msgstr "権限"
-
-#: rhodecode/templates/base/base.html:239
-msgid "defaults"
-msgstr "デフォルト設定"
-
-#: rhodecode/templates/base/base.html:240
-msgid "settings"
-msgstr "設定"
-
-#: rhodecode/templates/base/base.html:251
-#: rhodecode/templates/base/base.html:253
-msgid "Followers"
-msgstr "フォロワー"
-
-#: rhodecode/templates/base/base.html:259
-#: rhodecode/templates/base/base.html:261
-msgid "Forks"
-msgstr "フォーク"
-
-#: rhodecode/templates/base/base.html:340
-#: rhodecode/templates/base/base.html:342
-#: rhodecode/templates/base/base.html:344
-#: rhodecode/templates/search/search.html:52
+#: rhodecode/templates/base/base.html:126
+msgid "Lightweight changelog"
+msgstr "軽量履歴"
+
+#: rhodecode/templates/base/base.html:127
+#: rhodecode/templates/base/base.html:287
+#: rhodecode/templates/search/search.html:14
+#: rhodecode/templates/search/search.html:54
 msgid "Search"
 msgstr "検索"
 
-#: rhodecode/templates/base/root.html:42
-msgid "add another comment"
-msgstr "別のコメントを追加"
+#: rhodecode/templates/base/base.html:133
+msgid "Lock"
+msgstr "ロック"
+
+#: rhodecode/templates/base/base.html:141
+msgid "Follow"
+msgstr "フォロー"
+
+#: rhodecode/templates/base/base.html:142
+msgid "Unfollow"
+msgstr "アンフォロー"
+
+#: rhodecode/templates/base/base.html:145
+#: rhodecode/templates/data_table/_dt_elements.html:33
+#: rhodecode/templates/data_table/_dt_elements.html:35
+#: rhodecode/templates/data_table/_dt_elements.html:37
+#: rhodecode/templates/data_table/_dt_elements.html:74
+#: rhodecode/templates/forks/fork.html:9
+msgid "Fork"
+msgstr "フォーク"
+
+#: rhodecode/templates/base/base.html:147
+msgid "Create Pull Request"
+msgstr "プルリクエストを作成"
+
+#: rhodecode/templates/base/base.html:153
+msgid "Show Pull Requests"
+msgstr "プルリクエストを表示"
+
+#: rhodecode/templates/base/base.html:153
+msgid "Pull Requests"
+msgstr "プルリクエスト"
+
+#: rhodecode/templates/base/base.html:190
+msgid "Not logged in"
+msgstr "ログインしていません"
+
+#: rhodecode/templates/base/base.html:197
+msgid "Login to your account"
+msgstr "ログイン"
+
+#: rhodecode/templates/base/base.html:220
+msgid "Forgot password ?"
+msgstr "パスワードを忘れた場合はこちら"
+
+#: rhodecode/templates/base/base.html:243
+msgid "Log Out"
+msgstr "ログアウト"
+
+#: rhodecode/templates/base/base.html:262
+msgid "Switch repository"
+msgstr "リポジトリの切り替え"
+
+#: rhodecode/templates/base/base.html:274
+msgid "Show recent activity"
+msgstr "最近の活動を表示"
+
+#: rhodecode/templates/base/base.html:275
+#: rhodecode/templates/journal/journal.html:4
+msgid "Journal"
+msgstr "ジャーナル"
+
+#: rhodecode/templates/base/base.html:286
+msgid "Search in repositories"
+msgstr "全てのリポジトリから検索"
+
+#: rhodecode/templates/base/perms_summary.html:8
+msgid "No permissions defined yet"
+msgstr "まだ権限設定がありません"
+
+#: rhodecode/templates/base/perms_summary.html:15
+msgid "Permission"
+msgstr "権限"
+
+#: rhodecode/templates/base/perms_summary.html:16
+msgid "Edit Permission"
+msgstr "権限の編集"
 
 #: rhodecode/templates/base/root.html:43
-#: rhodecode/templates/journal/journal.html:83
-#: rhodecode/templates/summary/summary.html:57
-msgid "Stop following this repository"
-msgstr "このリポジトリのフォローをやめる"
+msgid "Add another comment"
+msgstr "別のコメントを追加"
 
 #: rhodecode/templates/base/root.html:44
-#: rhodecode/templates/summary/summary.html:61
+#: rhodecode/templates/data_table/_dt_elements.html:140
+msgid "Stop following this repository"
+msgstr "このリポジトリのフォローをやめる"
+
+#: rhodecode/templates/base/root.html:45
 msgid "Start following this repository"
 msgstr "このリポジトリのフォローする"
 
-#: rhodecode/templates/base/root.html:45
+#: rhodecode/templates/base/root.html:46
 msgid "Group"
 msgstr "グループ"
 
+#: rhodecode/templates/base/root.html:47
+msgid "members"
+msgstr "メンバー"
+
 #: rhodecode/templates/base/root.html:48
-msgid "search truncated"
-msgstr "検索結果は省略されています"
+#: rhodecode/templates/pullrequests/pullrequest.html:181
+msgid "Loading ..."
+msgstr "読み込み中..."
 
 #: rhodecode/templates/base/root.html:49
-msgid "no matching files"
+msgid "Search truncated"
+msgstr "検索結果は省略されています"
+
+#: rhodecode/templates/base/root.html:50
+msgid "No matching files"
 msgstr "マッチするファイルはありません"
 
 #: rhodecode/templates/base/root.html:51
-msgid "Open new pull request for selected changesets"
-msgstr "選択したチェンジセットから新しいプルリクエストを作成"
+#: rhodecode/templates/changelog/changelog.html:36
+msgid "Open new pull request"
+msgstr "新しいプルリクエストを作成"
 
 #: rhodecode/templates/base/root.html:52
-msgid "Show selected changes __S -> __E"
-msgstr "選択した変更 __S -> __E を表示"
+msgid "Open new pull request for selected changesets"
+msgstr "選択したチェンジセットから新しいプルリクエストを作成"
 
 #: rhodecode/templates/base/root.html:53
+msgid "Show selected changesets __S -> __E"
+msgstr "選択した変更 __S -> __E を表示"
+
+#: rhodecode/templates/base/root.html:54
+msgid "Show selected changeset __S"
+msgstr "選択した変更 __S を表示"
+
+#: rhodecode/templates/base/root.html:55
 msgid "Selection link"
 msgstr ""
 
+#: rhodecode/templates/base/root.html:56
+#: rhodecode/templates/changeset/diff_block.html:8
+msgid "Collapse diff"
+msgstr "差分を折りたたむ"
+
+#: rhodecode/templates/base/root.html:57
+msgid "Expand diff"
+msgstr "差分を表示"
+
 #: rhodecode/templates/bookmarks/bookmarks.html:5
 #, python-format
 msgid "%s Bookmarks"
 msgstr "%s ブックマーク"
 
-#: rhodecode/templates/bookmarks/bookmarks.html:39
+#: rhodecode/templates/bookmarks/bookmarks.html:37
 #: rhodecode/templates/bookmarks/bookmarks_data.html:8
-#: rhodecode/templates/branches/branches.html:53
+#: rhodecode/templates/branches/branches.html:50
 #: rhodecode/templates/branches/branches_data.html:8
-#: rhodecode/templates/tags/tags.html:54
+#: rhodecode/templates/shortlog/shortlog_data.html:8
+#: rhodecode/templates/tags/tags.html:51
 #: rhodecode/templates/tags/tags_data.html:8
 msgid "Author"
 msgstr "作成者"
 
+#: rhodecode/templates/bookmarks/bookmarks.html:38
+#: rhodecode/templates/bookmarks/bookmarks_data.html:9
+#: rhodecode/templates/branches/branches.html:51
+#: rhodecode/templates/branches/branches_data.html:9
+#: rhodecode/templates/shortlog/shortlog_data.html:5
+#: rhodecode/templates/tags/tags.html:52
+#: rhodecode/templates/tags/tags_data.html:9
+msgid "Revision"
+msgstr "リビジョン"
+
 #: rhodecode/templates/branches/branches.html:5
 #, python-format
 msgid "%s Branches"
 msgstr "%s ブランチ"
 
-#: rhodecode/templates/branches/branches.html:29
+#: rhodecode/templates/branches/branches.html:26
 msgid "Compare branches"
 msgstr "ブランチの比較"
 
-#: rhodecode/templates/branches/branches.html:56
+#: rhodecode/templates/branches/branches.html:53
 #: rhodecode/templates/branches/branches_data.html:10
-#: rhodecode/templates/compare/compare_diff.html:5
-#: rhodecode/templates/compare/compare_diff.html:13
-#: rhodecode/templates/tags/tags.html:57
+#: rhodecode/templates/tags/tags.html:54
 #: rhodecode/templates/tags/tags_data.html:10
 msgid "Compare"
 msgstr "比較"
@@ -3120,114 +3290,78 @@
 msgid "%s Changelog"
 msgstr "%s チェンジログ"
 
-#: rhodecode/templates/changelog/changelog.html:15
+#: rhodecode/templates/changelog/changelog.html:11
 #, python-format
 msgid "showing %d out of %d revision"
 msgid_plural "showing %d out of %d revisions"
-msgstr[0] ""
-
-#: rhodecode/templates/changelog/changelog.html:37
+msgstr[0] "%d / %d リビジョンを表示"
+
+#: rhodecode/templates/changelog/changelog.html:30
 msgid "Clear selection"
 msgstr "選択を解除"
 
-#: rhodecode/templates/changelog/changelog.html:40
+#: rhodecode/templates/changelog/changelog.html:33
 #: rhodecode/templates/forks/forks_data.html:19
 #, python-format
-msgid "compare fork with %s"
+msgid "Compare fork with %s"
 msgstr "%s とフォークを比較"
 
-#: rhodecode/templates/changelog/changelog.html:40
+#: rhodecode/templates/changelog/changelog.html:33
 msgid "Compare fork with parent"
 msgstr "フォークを比較"
 
-#: rhodecode/templates/changelog/changelog.html:49
-msgid "Show"
-msgstr "表示"
-
-#: rhodecode/templates/changelog/changelog.html:74
-#: rhodecode/templates/summary/summary.html:375
-msgid "show more"
+#: rhodecode/templates/changelog/changelog.html:76
+#: rhodecode/templates/summary/summary.html:404
+msgid "Show more"
 msgstr "もっと表示"
 
-#: rhodecode/templates/changelog/changelog.html:78
-msgid "Affected number of files, click to show more details"
-msgstr ""
-
-#: rhodecode/templates/changelog/changelog.html:91
-#: rhodecode/templates/changeset/changeset.html:65
-#: rhodecode/templates/changeset/changeset_file_comment.html:20
-#: rhodecode/templates/changeset/changeset_range.html:46
-msgid "Changeset status"
-msgstr "リビジョンステータス"
-
-#: rhodecode/templates/changelog/changelog.html:94
-#: rhodecode/templates/shortlog/shortlog_data.html:20
-msgid "Click to open associated pull request"
-msgstr "関連するプルリクエストを開く"
-
-#: rhodecode/templates/changelog/changelog.html:104
-msgid "Parent"
-msgstr "親リビジョン"
-
-#: rhodecode/templates/changelog/changelog.html:110
-#: rhodecode/templates/changeset/changeset.html:42
-msgid "No parents"
-msgstr "親リビジョンはありません"
-
-#: rhodecode/templates/changelog/changelog.html:115
+#: rhodecode/templates/changelog/changelog.html:89
+#: rhodecode/templates/changeset/changeset_range.html:86
+#, python-format
+msgid "Bookmark %s"
+msgstr "ブックマーク %s"
+
+#: rhodecode/templates/changelog/changelog.html:95
+#: rhodecode/templates/changeset/changeset.html:111
+#: rhodecode/templates/changeset/changeset_range.html:92
+#, python-format
+msgid "Tag %s"
+msgstr "タグ %s"
+
+#: rhodecode/templates/changelog/changelog.html:100
 #: rhodecode/templates/changeset/changeset.html:106
-#: rhodecode/templates/changeset/changeset_range.html:79
-msgid "merge"
-msgstr "マージ"
-
-#: rhodecode/templates/changelog/changelog.html:118
-#: rhodecode/templates/changeset/changeset.html:109
-#: rhodecode/templates/changeset/changeset_range.html:82
-#: rhodecode/templates/files/files.html:29
-#: rhodecode/templates/files/files_add.html:33
-#: rhodecode/templates/files/files_edit.html:33
-#: rhodecode/templates/shortlog/shortlog_data.html:9
-msgid "branch"
-msgstr "ブランチ"
-
-#: rhodecode/templates/changelog/changelog.html:124
-#: rhodecode/templates/changeset/changeset_range.html:88
-msgid "bookmark"
-msgstr "ブックマーク"
-
-#: rhodecode/templates/changelog/changelog.html:130
-#: rhodecode/templates/changeset/changeset.html:114
-#: rhodecode/templates/changeset/changeset_range.html:94
-msgid "tag"
-msgstr "タグ"
-
-#: rhodecode/templates/changelog/changelog.html:301
+#: rhodecode/templates/changeset/changeset_range.html:80
+#, python-format
+msgid "Branch %s"
+msgstr "ブランチ %s"
+
+#: rhodecode/templates/changelog/changelog.html:258
 msgid "There are no changes yet"
 msgstr "まだ変更がありません"
 
 #: rhodecode/templates/changelog/changelog_details.html:4
-#: rhodecode/templates/changeset/changeset.html:94
-msgid "removed"
+#: rhodecode/templates/changeset/changeset.html:91
+msgid "Removed"
 msgstr "削除"
 
 #: rhodecode/templates/changelog/changelog_details.html:5
-#: rhodecode/templates/changeset/changeset.html:95
-msgid "changed"
+#: rhodecode/templates/changeset/changeset.html:92
+msgid "Changed"
 msgstr "変更"
 
 #: rhodecode/templates/changelog/changelog_details.html:6
-#: rhodecode/templates/changeset/changeset.html:96
-msgid "added"
+#: rhodecode/templates/changeset/changeset.html:93
+msgid "Added"
 msgstr "追加"
 
 #: rhodecode/templates/changelog/changelog_details.html:8
 #: rhodecode/templates/changelog/changelog_details.html:9
 #: rhodecode/templates/changelog/changelog_details.html:10
-#: rhodecode/templates/changeset/changeset.html:98
-#: rhodecode/templates/changeset/changeset.html:99
-#: rhodecode/templates/changeset/changeset.html:100
+#: rhodecode/templates/changeset/changeset.html:95
+#: rhodecode/templates/changeset/changeset.html:96
+#: rhodecode/templates/changeset/changeset.html:97
 #, python-format
-msgid "affected %s files"
+msgid "Affected %s files"
 msgstr "%s ファイルに影響"
 
 #: rhodecode/templates/changeset/changeset.html:6
@@ -3235,108 +3369,140 @@
 msgid "%s Changeset"
 msgstr "%s チェンジセット"
 
-#: rhodecode/templates/changeset/changeset.html:14
-msgid "Changeset"
-msgstr "チェンジセット"
-
-#: rhodecode/templates/changeset/changeset.html:52
+#: rhodecode/templates/changeset/changeset.html:39
+msgid "No parents"
+msgstr "親リビジョンはありません"
+
+#: rhodecode/templates/changeset/changeset.html:49
 msgid "No children"
 msgstr "子リビジョンはありません"
 
-#: rhodecode/templates/changeset/changeset.html:70
-#: rhodecode/templates/changeset/diff_block.html:20
-msgid "raw diff"
-msgstr "差分を表示"
-
-#: rhodecode/templates/changeset/changeset.html:71
-msgid "patch diff"
+#: rhodecode/templates/changeset/changeset.html:62
+#: rhodecode/templates/changeset/changeset_file_comment.html:20
+#: rhodecode/templates/changeset/changeset_range.html:44
+msgid "Changeset status"
+msgstr "リビジョンステータス"
+
+#: rhodecode/templates/changeset/changeset.html:67
+#: rhodecode/templates/changeset/diff_block.html:23
+msgid "Raw diff"
+msgstr "diffとして差分を表示"
+
+#: rhodecode/templates/changeset/changeset.html:68
+msgid "Patch diff"
 msgstr "パッチとして差分を表示"
 
-#: rhodecode/templates/changeset/changeset.html:72
-#: rhodecode/templates/changeset/diff_block.html:21
-msgid "download diff"
+#: rhodecode/templates/changeset/changeset.html:69
+#: rhodecode/templates/changeset/diff_block.html:24
+msgid "Download diff"
 msgstr "差分をダウンロード"
 
-#: rhodecode/templates/changeset/changeset.html:76
-#: rhodecode/templates/changeset/changeset_file_comment.html:82
+#: rhodecode/templates/changeset/changeset.html:73
+#: rhodecode/templates/changeset/changeset_file_comment.html:97
 #, python-format
 msgid "%d comment"
 msgid_plural "%d comments"
 msgstr[0] "%d コメント"
 
-#: rhodecode/templates/changeset/changeset.html:76
-#: rhodecode/templates/changeset/changeset_file_comment.html:82
+#: rhodecode/templates/changeset/changeset.html:73
+#: rhodecode/templates/changeset/changeset_file_comment.html:97
 #, python-format
 msgid "(%d inline)"
 msgid_plural "(%d inline)"
 msgstr[0] "(%d インライン)"
 
-#: rhodecode/templates/changeset/changeset.html:122
-#: rhodecode/templates/compare/compare_diff.html:44
-#: rhodecode/templates/pullrequests/pullrequest_show.html:76
+#: rhodecode/templates/changeset/changeset.html:103
+#: rhodecode/templates/changeset/changeset_range.html:77
+msgid "merge"
+msgstr "マージ"
+
+#: rhodecode/templates/changeset/changeset.html:119
+#: rhodecode/templates/compare/compare_diff.html:40
+#: rhodecode/templates/pullrequests/pullrequest_show.html:113
 #, python-format
 msgid "%s file changed"
 msgid_plural "%s files changed"
 msgstr[0] "%s ファイルに影響"
 
-#: rhodecode/templates/changeset/changeset.html:124
-#: rhodecode/templates/compare/compare_diff.html:46
-#: rhodecode/templates/pullrequests/pullrequest_show.html:78
+#: rhodecode/templates/changeset/changeset.html:121
+#: rhodecode/templates/compare/compare_diff.html:42
+#: rhodecode/templates/pullrequests/pullrequest_show.html:115
 #, python-format
 msgid "%s file changed with %s insertions and %s deletions"
 msgid_plural "%s files changed with %s insertions and %s deletions"
 msgstr[0] "%s ファイルに影響。 %s 個の追加と %s 個の削除"
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:42
+#: rhodecode/templates/changeset/changeset.html:134
+#: rhodecode/templates/changeset/changeset.html:146
+#: rhodecode/templates/pullrequests/pullrequest_show.html:131
+#: rhodecode/templates/pullrequests/pullrequest_show.html:195
+msgid "Showing a huge diff might take some time and resources"
+msgstr "巨大な差分の表示はすこし時間とリソースがかかる場合があります"
+
+#: rhodecode/templates/changeset/changeset.html:134
+#: rhodecode/templates/changeset/changeset.html:146
+#: rhodecode/templates/compare/compare_diff.html:58
+#: rhodecode/templates/compare/compare_diff.html:69
+#: rhodecode/templates/pullrequests/pullrequest_show.html:131
+#: rhodecode/templates/pullrequests/pullrequest_show.html:195
+msgid "Show full diff"
+msgstr "すべての差分を表示"
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:30
+#, python-format
+msgid "Status change on pull request #%s"
+msgstr "プルリクエスト #%s のステータスを変更"
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:32
+#, python-format
+msgid "Comment on pull request #%s"
+msgstr "プルリクエストにコメント #%s"
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:57
 msgid "Submitting..."
 msgstr "サブミット中..."
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:45
+#: rhodecode/templates/changeset/changeset_file_comment.html:60
 msgid "Commenting on line {1}."
 msgstr "{1} 行目にコメント"
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:46
-#: rhodecode/templates/changeset/changeset_file_comment.html:121
+#: rhodecode/templates/changeset/changeset_file_comment.html:61
+#: rhodecode/templates/changeset/changeset_file_comment.html:139
 #, python-format
 msgid "Comments parsed using %s syntax with %s support."
 msgstr "コメントには %s 構文 ( %s サポートつき ) が利用出来ます"
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:48
-#: rhodecode/templates/changeset/changeset_file_comment.html:123
+#: rhodecode/templates/changeset/changeset_file_comment.html:63
+#: rhodecode/templates/changeset/changeset_file_comment.html:141
 msgid "Use @username inside this text to send notification to this RhodeCode user"
 msgstr "テキスト内で @username を使うと、この RhodeCode のユーザーに通知を送信します"
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:59
-#: rhodecode/templates/changeset/changeset_file_comment.html:143
+#: rhodecode/templates/changeset/changeset_file_comment.html:74
+#: rhodecode/templates/changeset/changeset_file_comment.html:161
 msgid "Comment"
 msgstr "コメント"
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:60
-#: rhodecode/templates/changeset/changeset_file_comment.html:71
-msgid "Hide"
-msgstr "隠す"
-
-#: rhodecode/templates/changeset/changeset_file_comment.html:67
+#: rhodecode/templates/changeset/changeset_file_comment.html:75
+msgid "Cancel"
+msgstr "キャンセル"
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:82
 msgid "You need to be logged in to comment."
 msgstr "コメントするにはログインが必要です"
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:67
+#: rhodecode/templates/changeset/changeset_file_comment.html:82
 msgid "Login now"
 msgstr "今すぐログインする"
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:118
-msgid "Leave a comment"
-msgstr "コメントを残す"
-
-#: rhodecode/templates/changeset/changeset_file_comment.html:125
-msgid "Check this to change current status of code-review for this changeset"
-msgstr "チェックするとチェンジセットの現在のコードレビューステータスを変更出来ます"
-
-#: rhodecode/templates/changeset/changeset_file_comment.html:125
-msgid "change status"
+#: rhodecode/templates/changeset/changeset_file_comment.html:86
+msgid "Hide"
+msgstr "隠す"
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:143
+msgid "Change status"
 msgstr "ステータスを変更する"
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:145
+#: rhodecode/templates/changeset/changeset_file_comment.html:163
 msgid "Comment and close"
 msgstr "コメントしてクローズ"
 
@@ -3345,116 +3511,138 @@
 msgid "%s Changesets"
 msgstr "%s チェンジセット"
 
-#: rhodecode/templates/changeset/changeset_range.html:29
-#: rhodecode/templates/compare/compare_diff.html:29
-msgid "Compare View"
-msgstr "比較ビュー"
-
-#: rhodecode/templates/changeset/changeset_range.html:29
-msgid "Show combined compare"
-msgstr "結合した比較ビューを表示"
-
-#: rhodecode/templates/changeset/changeset_range.html:54
+#: rhodecode/templates/changeset/changeset_range.html:52
 msgid "Files affected"
 msgstr "影響のあるファイル"
 
-#: rhodecode/templates/changeset/diff_block.html:19
-msgid "show full diff for this file"
-msgstr "このファイルの全差分を表示"
-
-#: rhodecode/templates/changeset/diff_block.html:27
-msgid "show inline comments"
+#: rhodecode/templates/changeset/diff_block.html:22
+msgid "Show full diff for this file"
+msgstr "このファイルのすべての差分を表示"
+
+#: rhodecode/templates/changeset/diff_block.html:30
+msgid "Show inline comments"
 msgstr "インラインコメントを表示"
 
-#: rhodecode/templates/compare/compare_cs.html:5
+#: rhodecode/templates/changeset/diff_block.html:55
+msgid "Show file at latest version in this repo"
+msgstr "このリポジトリの最新バージョンのファイルを表示"
+
+#: rhodecode/templates/changeset/diff_block.html:56
+msgid "Show file at initial version in this repo"
+msgstr "このリポジトリの初期バージョンのファイルを表示"
+
+#: rhodecode/templates/compare/compare_cs.html:4
 msgid "No changesets"
 msgstr "チェンジセットはありません"
 
-#: rhodecode/templates/compare/compare_diff.html:37
-#: rhodecode/templates/pullrequests/pullrequest_show.html:69
+#: rhodecode/templates/compare/compare_cs.html:32
+msgid "Ancestor"
+msgstr "祖先"
+
+#: rhodecode/templates/compare/compare_diff.html:5
+#, python-format
+msgid "%s Compare"
+msgstr "%s 比較"
+
+#: rhodecode/templates/compare/compare_diff.html:9
+msgid "Compare revisions"
+msgstr "リビジョンの比較"
+
+#: rhodecode/templates/compare/compare_diff.html:33
+#: rhodecode/templates/pullrequests/pullrequest_show.html:106
 #, python-format
 msgid "Showing %s commit"
 msgid_plural "Showing %s commits"
 msgstr[0] "%s コミットを表示"
 
-#: rhodecode/templates/compare/compare_diff.html:52
-#: rhodecode/templates/pullrequests/pullrequest_show.html:84
+#: rhodecode/templates/compare/compare_diff.html:48
+#: rhodecode/templates/pullrequests/pullrequest_show.html:121
 msgid "No files"
 msgstr "ファイルはありません"
 
-#: rhodecode/templates/data_table/_dt_elements.html:39
-#: rhodecode/templates/data_table/_dt_elements.html:41
-#: rhodecode/templates/data_table/_dt_elements.html:43
-msgid "Fork"
-msgstr "フォーク"
-
-#: rhodecode/templates/data_table/_dt_elements.html:60
-#: rhodecode/templates/journal/journal.html:89
-#: rhodecode/templates/summary/summary.html:77
+#: rhodecode/templates/compare/compare_diff.html:58
+#: rhodecode/templates/compare/compare_diff.html:69
+msgid "confirm to show potentially huge diff"
+msgstr "巨大な差分の可能性がありますが表示しますか?"
+
+#: rhodecode/templates/data_table/_dt_elements.html:54
+#: rhodecode/templates/summary/summary.html:69
 msgid "Mercurial repository"
 msgstr "Mercurialリポジトリ"
 
-#: rhodecode/templates/data_table/_dt_elements.html:62
-#: rhodecode/templates/journal/journal.html:91
-#: rhodecode/templates/summary/summary.html:80
+#: rhodecode/templates/data_table/_dt_elements.html:56
+#: rhodecode/templates/summary/summary.html:72
 msgid "Git repository"
 msgstr "Gitリポジトリ"
 
-#: rhodecode/templates/data_table/_dt_elements.html:69
-#: rhodecode/templates/journal/journal.html:97
-#: rhodecode/templates/summary/summary.html:87
-msgid "public repository"
-msgstr "公開リポジトリ"
-
-#: rhodecode/templates/data_table/_dt_elements.html:80
-#: rhodecode/templates/summary/summary.html:96
-#: rhodecode/templates/summary/summary.html:97
-msgid "Fork of"
-msgstr "フォーク元: "
-
-#: rhodecode/templates/data_table/_dt_elements.html:94
+#: rhodecode/templates/data_table/_dt_elements.html:74
+#, python-format
+msgid "Fork of %s"
+msgstr "%s のフォーク"
+
+#: rhodecode/templates/data_table/_dt_elements.html:88
 msgid "No changesets yet"
 msgstr "まだチェンジセットがありません"
 
-#: rhodecode/templates/data_table/_dt_elements.html:101
-#: rhodecode/templates/data_table/_dt_elements.html:103
+#: rhodecode/templates/data_table/_dt_elements.html:95
+#: rhodecode/templates/data_table/_dt_elements.html:97
 #, python-format
 msgid "Subscribe to %s rss feed"
 msgstr "%s の RSS フィードを購読"
 
-#: rhodecode/templates/data_table/_dt_elements.html:109
-#: rhodecode/templates/data_table/_dt_elements.html:111
+#: rhodecode/templates/data_table/_dt_elements.html:103
+#: rhodecode/templates/data_table/_dt_elements.html:105
 #, python-format
 msgid "Subscribe to %s atom feed"
 msgstr "%s の ATOM フィードを購読"
 
 #: rhodecode/templates/data_table/_dt_elements.html:122
 #, python-format
+msgid "Confirm to delete this repository: %s"
+msgstr "このリポジトリを削除しますか? : %s"
+
+#: rhodecode/templates/data_table/_dt_elements.html:131
+#, python-format
 msgid "Confirm to delete this user: %s"
 msgstr "このユーザーを本当に削除してよろしいですか?: %s"
 
-#: rhodecode/templates/email_templates/changeset_comment.html:10
-msgid "New status$"
-msgstr "新しいステータス$"
+#: rhodecode/templates/email_templates/changeset_comment.html:9
+#: rhodecode/templates/email_templates/pull_request_comment.html:15
+msgid "New status"
+msgstr "新しいステータス"
+
+#: rhodecode/templates/email_templates/changeset_comment.html:11
+#: rhodecode/templates/email_templates/pull_request_comment.html:9
+msgid "View this comment here"
+msgstr "このコメントを閲覧する"
+
+#: rhodecode/templates/email_templates/changeset_comment.html:14
+msgid "Repo"
+msgstr "リポジトリ"
+
+#: rhodecode/templates/email_templates/changeset_comment.html:16
+msgid "desc"
+msgstr "説明"
 
 #: rhodecode/templates/email_templates/main.html:8
 msgid "This is a notification from RhodeCode."
 msgstr "RhodeCodeからの通知です"
 
 #: rhodecode/templates/email_templates/password_reset.html:4
-msgid "Hello"
-msgstr "こんにちは"
-
-#: rhodecode/templates/email_templates/password_reset.html:6
+#, python-format
+msgid "Hello %s"
+msgstr "こんにちは %s"
+
+#: rhodecode/templates/email_templates/password_reset.html:5
 msgid "We received a request to create a new password for your account."
 msgstr "あなたのアカウントの新しいパスワードの生成リクエストを受け取りました。"
 
-#: rhodecode/templates/email_templates/password_reset.html:8
+#: rhodecode/templates/email_templates/password_reset.html:6
 msgid "You can generate it by clicking following URL"
 msgstr "下のURLをクリックすることで再生成が行えます。"
 
-#: rhodecode/templates/email_templates/password_reset.html:12
-msgid "If you didn't request new password please ignore this email."
+#: rhodecode/templates/email_templates/password_reset.html:11
+msgid "If you did not request new password please ignore this email."
 msgstr "新しいパスワードのリクエストをしていない場合は、このメールを無視して下さい。"
 
 #: rhodecode/templates/email_templates/pull_request.html:4
@@ -3465,34 +3653,29 @@
 msgstr "ユーザ %s がリポジトリ %s で新しいプルリクエストを作成しました。変更をレビューしてください。"
 
 #: rhodecode/templates/email_templates/pull_request.html:5
-msgid "title"
-msgstr "タイトル"
+msgid "View this pull request here"
+msgstr "このプルリクエストを閲覧する"
 
 #: rhodecode/templates/email_templates/pull_request.html:6
-#: rhodecode/templates/pullrequests/pullrequest.html:115
+msgid "title"
+msgstr "タイトル"
+
+#: rhodecode/templates/email_templates/pull_request.html:7
 msgid "description"
 msgstr "説明"
 
-#: rhodecode/templates/email_templates/pull_request.html:11
+#: rhodecode/templates/email_templates/pull_request.html:12
 msgid "revisions for reviewing"
 msgstr "レビュー対象のリビジョン"
 
-#: rhodecode/templates/email_templates/pull_request.html:18
-msgid "View this pull request here"
-msgstr "このプルリクエストを閲覧する"
-
-#: rhodecode/templates/email_templates/pull_request_comment.html:4
+#: rhodecode/templates/email_templates/pull_request_comment.html:3
 #, python-format
-msgid "User %s commented on pull request #%s for repository %s"
-msgstr "ユーザ %s がプルリクエスト #%s (リポジトリ %s) にコメントしました。"
-
-#: rhodecode/templates/email_templates/pull_request_comment.html:10
-msgid "New status"
-msgstr "新しいステータス"
-
-#: rhodecode/templates/email_templates/pull_request_comment.html:14
-msgid "View this comment here"
-msgstr "このコメントを閲覧する"
+msgid "Pull request #%s for repository %s"
+msgstr "プルリクエスト #%s (リポジトリ %s)"
+
+#: rhodecode/templates/email_templates/pull_request_comment.html:13
+msgid "Closing pull request with status"
+msgstr "このステータスでプルリクエストをクローズ"
 
 #: rhodecode/templates/email_templates/registration.html:4
 msgid "A new user have registered in RhodeCode"
@@ -3502,109 +3685,107 @@
 msgid "View this user here"
 msgstr "このユーザを閲覧する"
 
-#: rhodecode/templates/errors/error_document.html:46
+#: rhodecode/templates/errors/error_document.html:55
 #, python-format
 msgid "You will be redirected to %s in %s seconds"
 msgstr ""
 
 #: rhodecode/templates/files/file_diff.html:4
 #, python-format
-msgid "%s File diff"
+msgid "%s File Diff"
 msgstr "%s ファイル差分"
 
-#: rhodecode/templates/files/file_diff.html:12
+#: rhodecode/templates/files/file_diff.html:8
 msgid "File diff"
 msgstr "ファイル差分"
 
 #: rhodecode/templates/files/files.html:4
-#: rhodecode/templates/files/files.html:74
+#: rhodecode/templates/files/files.html:76
 #, python-format
-msgid "%s files"
+msgid "%s Files"
 msgstr "%s ファイル"
 
-#: rhodecode/templates/files/files.html:12
-#: rhodecode/templates/summary/summary.html:351
-msgid "files"
-msgstr "ファイル"
+#: rhodecode/templates/files/files.html:30
+#: rhodecode/templates/files/files_add.html:31
+#: rhodecode/templates/files/files_edit.html:31
+#: rhodecode/templates/shortlog/shortlog_data.html:9
+msgid "Branch"
+msgstr "ブランチ"
 
 #: rhodecode/templates/files/files_add.html:4
-#: rhodecode/templates/files/files_edit.html:4
 #, python-format
-msgid "%s Edit file"
-msgstr ""
+msgid "%s Files Add"
+msgstr "%s ファイルを追加"
 
 #: rhodecode/templates/files/files_add.html:19
-msgid "add file"
+msgid "Add file"
 msgstr "ファイルを追加"
 
-#: rhodecode/templates/files/files_add.html:40
+#: rhodecode/templates/files/files_add.html:38
+#: rhodecode/templates/files/files_browser.html:31
+#: rhodecode/templates/shortlog/shortlog_data.html:78
 msgid "Add new file"
 msgstr "新しいファイルを追加"
 
-#: rhodecode/templates/files/files_add.html:45
+#: rhodecode/templates/files/files_add.html:43
 msgid "File Name"
 msgstr "ファイル名"
 
-#: rhodecode/templates/files/files_add.html:49
-#: rhodecode/templates/files/files_add.html:58
+#: rhodecode/templates/files/files_add.html:47
+#: rhodecode/templates/files/files_add.html:56
 msgid "or"
 msgstr "または"
 
-#: rhodecode/templates/files/files_add.html:49
-#: rhodecode/templates/files/files_add.html:54
+#: rhodecode/templates/files/files_add.html:47
+#: rhodecode/templates/files/files_add.html:52
 msgid "Upload file"
 msgstr "アップロード"
 
-#: rhodecode/templates/files/files_add.html:58
+#: rhodecode/templates/files/files_add.html:56
 msgid "Create new file"
 msgstr "新しいファイルを作成"
 
-#: rhodecode/templates/files/files_add.html:63
-#: rhodecode/templates/files/files_edit.html:39
+#: rhodecode/templates/files/files_add.html:61
+#: rhodecode/templates/files/files_edit.html:37
 #: rhodecode/templates/files/files_ypjax.html:3
 msgid "Location"
 msgstr "場所"
 
-#: rhodecode/templates/files/files_add.html:67
+#: rhodecode/templates/files/files_add.html:65
 msgid "use / to separate directories"
 msgstr "ディレクトリの区切りには / を使います"
 
-#: rhodecode/templates/files/files_add.html:77
-#: rhodecode/templates/files/files_edit.html:63
+#: rhodecode/templates/files/files_add.html:75
+#: rhodecode/templates/files/files_edit.html:61
 #: rhodecode/templates/shortlog/shortlog_data.html:6
-msgid "commit message"
+msgid "Commit message"
 msgstr "コミットメッセージ"
 
-#: rhodecode/templates/files/files_add.html:81
-#: rhodecode/templates/files/files_edit.html:67
+#: rhodecode/templates/files/files_add.html:79
+#: rhodecode/templates/files/files_edit.html:65
 msgid "Commit changes"
 msgstr "変更をコミット"
 
 #: rhodecode/templates/files/files_browser.html:13
-msgid "view"
+msgid "View"
 msgstr "閲覧"
 
 #: rhodecode/templates/files/files_browser.html:14
-msgid "previous revision"
+msgid "Previous revision"
 msgstr "前のリビジョン"
 
 #: rhodecode/templates/files/files_browser.html:16
-msgid "next revision"
+msgid "Next revision"
 msgstr "次のリビジョン"
 
 #: rhodecode/templates/files/files_browser.html:23
-msgid "follow current branch"
+msgid "Follow current branch"
 msgstr "このブランチで追跡"
 
 #: rhodecode/templates/files/files_browser.html:27
-msgid "search file list"
+msgid "Search file list"
 msgstr "ファイル一覧を検索"
 
-#: rhodecode/templates/files/files_browser.html:31
-#: rhodecode/templates/shortlog/shortlog_data.html:78
-msgid "add new file"
-msgstr "新しいファイルを追加"
-
 #: rhodecode/templates/files/files_browser.html:35
 msgid "Loading file list..."
 msgstr "ファイル一覧を読み込み中..."
@@ -3626,34 +3807,39 @@
 msgstr "最終更新日"
 
 #: rhodecode/templates/files/files_browser.html:52
-msgid "Last commiter"
+msgid "Last committer"
 msgstr "最後の作成者"
 
+#: rhodecode/templates/files/files_edit.html:4
+#, python-format
+msgid "%s Files Edit"
+msgstr "%s ファイルを編集"
+
 #: rhodecode/templates/files/files_edit.html:19
-msgid "edit file"
+msgid "Edit file"
 msgstr "ファイルを編集"
 
+#: rhodecode/templates/files/files_edit.html:47
+#: rhodecode/templates/files/files_source.html:23
+msgid "Show annotation"
+msgstr "アノテーションを表示"
+
+#: rhodecode/templates/files/files_edit.html:48
+#: rhodecode/templates/files/files_source.html:25
+#: rhodecode/templates/files/files_source.html:55
+msgid "Show as raw"
+msgstr "元のファイルを表示"
+
 #: rhodecode/templates/files/files_edit.html:49
-#: rhodecode/templates/files/files_source.html:23
-msgid "show annotation"
-msgstr "アノテーションを表示"
-
-#: rhodecode/templates/files/files_edit.html:50
-#: rhodecode/templates/files/files_source.html:25
-#: rhodecode/templates/files/files_source.html:53
-msgid "show as raw"
-msgstr "元のファイルを表示"
-
-#: rhodecode/templates/files/files_edit.html:51
 #: rhodecode/templates/files/files_source.html:26
-msgid "download as raw"
+msgid "Download as raw"
 msgstr "元のファイルをダウンロード"
 
-#: rhodecode/templates/files/files_edit.html:54
-msgid "source"
+#: rhodecode/templates/files/files_edit.html:52
+msgid "Source"
 msgstr "ソース"
 
-#: rhodecode/templates/files/files_edit.html:59
+#: rhodecode/templates/files/files_edit.html:57
 msgid "Editing file"
 msgstr "ファイルを編集"
 
@@ -3662,15 +3848,15 @@
 msgstr "変更履歴"
 
 #: rhodecode/templates/files/files_history_box.html:9
-msgid "diff to revision"
+msgid "Diff to revision"
 msgstr "このリビジョンの差分を見る"
 
 #: rhodecode/templates/files/files_history_box.html:10
-msgid "show at revision"
+msgid "Show at revision"
 msgstr "このリビジョンを見る"
 
 #: rhodecode/templates/files/files_history_box.html:11
-msgid "show full history"
+msgid "Show full history"
 msgstr "すべての履歴を表示"
 
 #: rhodecode/templates/files/files_history_box.html:16
@@ -3684,15 +3870,28 @@
 msgstr "ファイルの履歴を読み込む"
 
 #: rhodecode/templates/files/files_source.html:21
-msgid "show source"
+msgid "Show source"
 msgstr "ソースを表示"
 
-#: rhodecode/templates/files/files_source.html:44
+#: rhodecode/templates/files/files_source.html:29
+#, python-format
+msgid "Edit on branch:%s"
+msgstr "ブランチ:%s で編集"
+
+#: rhodecode/templates/files/files_source.html:31
+msgid "Edit on branch:?"
+msgstr "ブランチ:? で編集"
+
+#: rhodecode/templates/files/files_source.html:31
+msgid "Editing files allowed only when on branch head revision"
+msgstr "ファイル編集はブランチのヘッドリビジョンでのみ許可されています"
+
+#: rhodecode/templates/files/files_source.html:46
 #, python-format
 msgid "Binary file (%s)"
 msgstr "バイナリファイル (%s)"
 
-#: rhodecode/templates/files/files_source.html:53
+#: rhodecode/templates/files/files_source.html:55
 msgid "File is too big to display"
 msgstr "表示するには大きすぎるファイルです"
 
@@ -3713,8 +3912,10 @@
 msgid "%s Followers"
 msgstr "%s フォロワー"
 
-#: rhodecode/templates/followers/followers.html:13
-msgid "followers"
+#: rhodecode/templates/followers/followers.html:9
+#: rhodecode/templates/summary/summary.html:183
+#: rhodecode/templates/summary/summary.html:184
+msgid "Followers"
 msgstr "フォロワー"
 
 #: rhodecode/templates/followers/followers_data.html:12
@@ -3726,32 +3927,32 @@
 msgid "%s Fork"
 msgstr "%s フォーク"
 
-#: rhodecode/templates/forks/fork.html:31
+#: rhodecode/templates/forks/fork.html:28
 msgid "Fork name"
 msgstr "フォーク名"
 
-#: rhodecode/templates/forks/fork.html:68
+#: rhodecode/templates/forks/fork.html:65
 msgid "Private"
 msgstr "非公開"
 
-#: rhodecode/templates/forks/fork.html:77
+#: rhodecode/templates/forks/fork.html:74
 msgid "Copy permissions"
 msgstr "権限のコピー"
 
-#: rhodecode/templates/forks/fork.html:81
+#: rhodecode/templates/forks/fork.html:78
 msgid "Copy permissions from forked repository"
 msgstr "フォーク元リポジトリから権限をコピーします"
 
-#: rhodecode/templates/forks/fork.html:86
+#: rhodecode/templates/forks/fork.html:84
 msgid "Update after clone"
 msgstr "クローン後にupdateする"
 
-#: rhodecode/templates/forks/fork.html:90
+#: rhodecode/templates/forks/fork.html:88
 msgid "Checkout source after making a clone"
 msgstr "クローンした後にソースをチェックアウトします"
 
-#: rhodecode/templates/forks/fork.html:94
-msgid "fork this repository"
+#: rhodecode/templates/forks/fork.html:93
+msgid "Fork this repository"
 msgstr "このリポジトリをフォーク"
 
 #: rhodecode/templates/forks/forks.html:5
@@ -3759,12 +3960,14 @@
 msgid "%s Forks"
 msgstr "%s フォーク"
 
-#: rhodecode/templates/forks/forks.html:13
-msgid "forks"
+#: rhodecode/templates/forks/forks.html:9
+#: rhodecode/templates/summary/summary.html:189
+#: rhodecode/templates/summary/summary.html:190
+msgid "Forks"
 msgstr "フォーク"
 
 #: rhodecode/templates/forks/forks_data.html:17
-msgid "forked"
+msgid "Forked"
 msgstr "フォークしました"
 
 #: rhodecode/templates/forks/forks_data.html:42
@@ -3780,44 +3983,27 @@
 msgstr "RSS ジャーナルフィード"
 
 #: rhodecode/templates/journal/journal.html:32
-#: rhodecode/templates/pullrequests/pullrequest.html:55
 msgid "Refresh"
 msgstr "更新"
 
 #: rhodecode/templates/journal/journal.html:35
 #: rhodecode/templates/journal/public_journal.html:24
-msgid "RSS feed"
-msgstr "RSSフィード"
-
-#: rhodecode/templates/journal/journal.html:38
-#: rhodecode/templates/journal/public_journal.html:27
 msgid "ATOM feed"
 msgstr "ATOMフィード"
 
-#: rhodecode/templates/journal/journal.html:49
+#: rhodecode/templates/journal/journal.html:51
 msgid "Watched"
 msgstr "ウォッチ"
 
-#: rhodecode/templates/journal/journal.html:54
-msgid "ADD"
-msgstr "追加"
-
-#: rhodecode/templates/journal/journal.html:77
-msgid "following user"
-msgstr "フォローしているユーザー"
-
-#: rhodecode/templates/journal/journal.html:77
-msgid "user"
-msgstr "ユーザー"
-
-#: rhodecode/templates/journal/journal.html:110
-msgid "You are not following any users or repositories"
-msgstr "まだどのユーザーもリポジトリもフォローしていません"
-
 #: rhodecode/templates/journal/journal_data.html:55
 msgid "No entries yet"
 msgstr "まだエントリがありません"
 
+#: rhodecode/templates/journal/public_journal.html:4
+#: rhodecode/templates/journal/public_journal.html:21
+msgid "Public Journal"
+msgstr "公開ジャーナル"
+
 #: rhodecode/templates/journal/public_journal.html:13
 msgid "ATOM public journal feed"
 msgstr "ATOM 公開ジャーナルフィード"
@@ -3826,146 +4012,125 @@
 msgid "RSS public journal feed"
 msgstr "RSS 公開ジャーナルフィード"
 
-#: rhodecode/templates/journal/public_journal.html:21
-msgid "Public Journal"
-msgstr "公開ジャーナル"
-
 #: rhodecode/templates/pullrequests/pullrequest.html:4
-#: rhodecode/templates/pullrequests/pullrequest.html:12
+#: rhodecode/templates/pullrequests/pullrequest.html:8
 msgid "New pull request"
 msgstr "新しいプルリクエスト"
 
-#: rhodecode/templates/pullrequests/pullrequest.html:54
-msgid "refresh overview"
-msgstr "概要の更新"
-
-#: rhodecode/templates/pullrequests/pullrequest.html:66
+#: rhodecode/templates/pullrequests/pullrequest.html:52
 msgid "Detailed compare view"
 msgstr "比較ビュー詳細"
 
-#: rhodecode/templates/pullrequests/pullrequest.html:70
-#: rhodecode/templates/pullrequests/pullrequest_show.html:100
+#: rhodecode/templates/pullrequests/pullrequest.html:56
+#: rhodecode/templates/pullrequests/pullrequest_show.html:137
 msgid "Pull request reviewers"
 msgstr "プルリクエストレビュアー"
 
-#: rhodecode/templates/pullrequests/pullrequest.html:79
-#: rhodecode/templates/pullrequests/pullrequest_show.html:112
+#: rhodecode/templates/pullrequests/pullrequest.html:65
+#: rhodecode/templates/pullrequests/pullrequest_show.html:149
 msgid "owner"
 msgstr "所有者"
 
-#: rhodecode/templates/pullrequests/pullrequest.html:91
-#: rhodecode/templates/pullrequests/pullrequest_show.html:127
+#: rhodecode/templates/pullrequests/pullrequest.html:77
 msgid "Add reviewer to this pull request."
 msgstr "このプルリクエストにレビュアーを追加"
 
-#: rhodecode/templates/pullrequests/pullrequest.html:97
+#: rhodecode/templates/pullrequests/pullrequest.html:83
 msgid "Create new pull request"
 msgstr "新しいプルリクエストを作成"
 
-#: rhodecode/templates/pullrequests/pullrequest.html:106
+#: rhodecode/templates/pullrequests/pullrequest.html:92
+#: rhodecode/templates/pullrequests/pullrequest_data.html:14
 #: rhodecode/templates/pullrequests/pullrequest_show.html:25
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:33
 msgid "Title"
 msgstr "タイトル"
 
-#: rhodecode/templates/pullrequests/pullrequest.html:123
+#: rhodecode/templates/pullrequests/pullrequest.html:109
 msgid "Send pull request"
 msgstr "プルリクエストを送る"
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:23
-#, python-format
-msgid "Closed %s"
-msgstr "%s にクローズ"
-
-#: rhodecode/templates/pullrequests/pullrequest_show.html:23
+#: rhodecode/templates/pullrequests/pullrequest_show.html:4
 #, python-format
-msgid "with status %s"
-msgstr "ステータス: %s"
-
-#: rhodecode/templates/pullrequests/pullrequest_show.html:31
-msgid "Status"
-msgstr "ステータス"
-
-#: rhodecode/templates/pullrequests/pullrequest_show.html:36
+msgid "%s Pull Request #%s"
+msgstr "%s プルリクエスト #%s"
+
+#: rhodecode/templates/pullrequests/pullrequest_show.html:35
+msgid "Review status"
+msgstr "レビューステータス"
+
+#: rhodecode/templates/pullrequests/pullrequest_show.html:40
 msgid "Pull request status"
 msgstr "プルリクエストステータス"
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:44
+#: rhodecode/templates/pullrequests/pullrequest_show.html:53
 msgid "Still not reviewed by"
 msgstr "未レビュー"
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:48
+#: rhodecode/templates/pullrequests/pullrequest_show.html:57
 #, python-format
 msgid "%d reviewer"
 msgid_plural "%d reviewers"
 msgstr[0] "%d レビュアー"
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:50
-msgid "pull request was reviewed by all reviewers"
+#: rhodecode/templates/pullrequests/pullrequest_show.html:59
+msgid "Pull request was reviewed by all reviewers"
 msgstr "プルリクエストはすべてのレビュアーにレビューされました"
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:58
+#: rhodecode/templates/pullrequests/pullrequest_show.html:65
+msgid "Origin repository"
+msgstr "Originリポジトリ"
+
+#: rhodecode/templates/pullrequests/pullrequest_show.html:89
 msgid "Created on"
 msgstr "作成日"
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:65
+#: rhodecode/templates/pullrequests/pullrequest_show.html:102
 msgid "Compare view"
 msgstr "比較ビュー"
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:112
+#: rhodecode/templates/pullrequests/pullrequest_show.html:149
 msgid "reviewer"
 msgstr "レビュアー"
 
+#: rhodecode/templates/pullrequests/pullrequest_show.html:164
+msgid "Add or remove reviewer to this pull request."
+msgstr "このプルリクエストにレビュアーを追加/削除"
+
+#: rhodecode/templates/pullrequests/pullrequest_show.html:168
+msgid "Save changes"
+msgstr "変更を保存"
+
 #: rhodecode/templates/pullrequests/pullrequest_show_all.html:4
-msgid "all pull requests"
-msgstr "すべてのプルリクエスト"
-
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:12
-msgid "All pull requests"
-msgstr "すべてのプルリクエスト"
-
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:27
-msgid "Closed"
-msgstr "クローズ"
+#, python-format
+msgid "%s Pull Requests"
+msgstr "%s プルリクエスト"
 
 #: rhodecode/templates/search/search.html:6
-#, python-format
-msgid "Search \"%s\" in repository: %s"
-msgstr "\"%s\" を %s リポジトリから検索"
+msgid "Search repository"
+msgstr "リポジトリから検索"
 
 #: rhodecode/templates/search/search.html:8
-#, python-format
-msgid "Search \"%s\" in all repositories"
-msgstr "\"%s\" を全てのリポジトリから検索"
-
-#: rhodecode/templates/search/search.html:12
-#: rhodecode/templates/search/search.html:32
-#, python-format
-msgid "Search in repository: %s"
-msgstr "%s リポジトリから検索"
-
-#: rhodecode/templates/search/search.html:14
-#: rhodecode/templates/search/search.html:34
+#: rhodecode/templates/search/search.html:16
 msgid "Search in all repositories"
 msgstr "全てのリポジトリから検索"
 
-#: rhodecode/templates/search/search.html:48
+#: rhodecode/templates/search/search.html:50
 msgid "Search term"
 msgstr "検索キーワード"
 
-#: rhodecode/templates/search/search.html:60
+#: rhodecode/templates/search/search.html:62
 msgid "Search in"
 msgstr "検索対象"
 
-#: rhodecode/templates/search/search.html:63
+#: rhodecode/templates/search/search.html:65
 msgid "File contents"
 msgstr "ファイル内容"
 
-#: rhodecode/templates/search/search.html:64
+#: rhodecode/templates/search/search.html:66
 msgid "Commit messages"
 msgstr "コミットメッセージ"
 
-#: rhodecode/templates/search/search.html:65
+#: rhodecode/templates/search/search.html:67
 msgid "File names"
 msgstr "ファイル名"
 
@@ -3975,40 +4140,24 @@
 msgid "Permission denied"
 msgstr "権限がありません"
 
-#: rhodecode/templates/settings/repo_settings.html:5
-#, python-format
-msgid "%s Settings"
-msgstr "%s 設定"
-
-#: rhodecode/templates/settings/repo_settings.html:102
-msgid "Delete repository"
-msgstr "リポジトリを削除"
-
-#: rhodecode/templates/settings/repo_settings.html:109
-msgid "Remove repo"
-msgstr "削除"
-
 #: rhodecode/templates/shortlog/shortlog.html:5
 #, python-format
-msgid "%s Shortlog"
-msgstr "%s 短いログ"
-
+msgid "%s Lightweight Changelog"
+msgstr "%s 軽量履歴"
+
+#: rhodecode/templates/shortlog/shortlog.html:11
 #: rhodecode/templates/shortlog/shortlog.html:15
-#: rhodecode/templates/shortlog/shortlog.html:19
-msgid "shortlog"
-msgstr "ログ"
-
-#: rhodecode/templates/shortlog/shortlog_data.html:5
-msgid "revision"
-msgstr "リビジョン"
+msgid "Lightweight Changelog"
+msgstr "軽量履歴"
 
 #: rhodecode/templates/shortlog/shortlog_data.html:7
-msgid "age"
+msgid "Age"
 msgstr "経過時間"
 
-#: rhodecode/templates/shortlog/shortlog_data.html:8
-msgid "author"
-msgstr "作成者"
+#: rhodecode/templates/shortlog/shortlog_data.html:20
+#, python-format
+msgid "Click to open associated pull request #%s"
+msgstr "関連するプルリクエストを開く #%s"
 
 #: rhodecode/templates/shortlog/shortlog_data.html:75
 msgid "Add or upload files directly via RhodeCode"
@@ -4027,156 +4176,165 @@
 msgid "%s Summary"
 msgstr "%s 要約"
 
-#: rhodecode/templates/summary/summary.html:12
-msgid "summary"
-msgstr "要約"
-
-#: rhodecode/templates/summary/summary.html:20
+#: rhodecode/templates/summary/summary.html:16
 #, python-format
-msgid "repo %s ATOM feed"
-msgstr "リポジトリ %s ATOM フィード"
-
-#: rhodecode/templates/summary/summary.html:21
+msgid "%s ATOM feed"
+msgstr "%s ATOM フィード"
+
+#: rhodecode/templates/summary/summary.html:17
 #, python-format
-msgid "repo %s RSS feed"
-msgstr "リポジトリ %s RSS フィード"
-
-#: rhodecode/templates/summary/summary.html:49
-#: rhodecode/templates/summary/summary.html:52
-msgid "ATOM"
-msgstr "ATOM"
-
-#: rhodecode/templates/summary/summary.html:70
+msgid "%s RSS feed"
+msgstr "%s RSS フィード"
+
+#: rhodecode/templates/summary/summary.html:62
 #, python-format
 msgid "Repository locked by %s"
 msgstr "リポジトリは %s によってロックされました"
 
-#: rhodecode/templates/summary/summary.html:72
+#: rhodecode/templates/summary/summary.html:64
 msgid "Repository unlocked"
 msgstr "リポジトリはロックされていません"
 
-#: rhodecode/templates/summary/summary.html:91
+#: rhodecode/templates/summary/summary.html:83
 #, python-format
 msgid "Non changable ID %s"
 msgstr "変更不能ID %s"
 
-#: rhodecode/templates/summary/summary.html:96
-msgid "public"
+#: rhodecode/templates/summary/summary.html:88
+msgid "Public"
 msgstr "公開"
 
-#: rhodecode/templates/summary/summary.html:104
-msgid "remote clone"
+#: rhodecode/templates/summary/summary.html:88
+#: rhodecode/templates/summary/summary.html:89
+msgid "Fork of"
+msgstr "フォーク元: "
+
+#: rhodecode/templates/summary/summary.html:96
+msgid "Remote clone"
 msgstr "リモートクローン"
 
-#: rhodecode/templates/summary/summary.html:125
+#: rhodecode/templates/summary/summary.html:117
 msgid "Contact"
 msgstr "コンタクト"
 
-#: rhodecode/templates/summary/summary.html:139
+#: rhodecode/templates/summary/summary.html:131
 msgid "Clone url"
 msgstr "クローンURL"
 
-#: rhodecode/templates/summary/summary.html:142
+#: rhodecode/templates/summary/summary.html:136
 msgid "Show by Name"
 msgstr "名前で表示"
 
-#: rhodecode/templates/summary/summary.html:143
+#: rhodecode/templates/summary/summary.html:137
 msgid "Show by ID"
 msgstr "IDで表示"
 
+#: rhodecode/templates/summary/summary.html:143
+msgid "Trending files"
+msgstr "トレンドファイル"
+
 #: rhodecode/templates/summary/summary.html:151
-msgid "Trending files"
-msgstr "トレンドファイル"
+#: rhodecode/templates/summary/summary.html:167
+#: rhodecode/templates/summary/summary.html:232
+msgid "enable"
+msgstr "有効にする"
 
 #: rhodecode/templates/summary/summary.html:159
-#: rhodecode/templates/summary/summary.html:175
-#: rhodecode/templates/summary/summary.html:203
-msgid "enable"
-msgstr "有効にする"
-
-#: rhodecode/templates/summary/summary.html:167
 msgid "Download"
 msgstr "ダウンロード"
 
-#: rhodecode/templates/summary/summary.html:171
+#: rhodecode/templates/summary/summary.html:163
 msgid "There are no downloads yet"
 msgstr "まだダウンロードがありません"
 
-#: rhodecode/templates/summary/summary.html:173
+#: rhodecode/templates/summary/summary.html:165
 msgid "Downloads are disabled for this repository"
 msgstr "このリポジトリのダウンロードは無効化されています"
 
-#: rhodecode/templates/summary/summary.html:179
+#: rhodecode/templates/summary/summary.html:171
 msgid "Download as zip"
 msgstr "ZIPとしてダウンロード"
 
-#: rhodecode/templates/summary/summary.html:182
+#: rhodecode/templates/summary/summary.html:174
 msgid "Check this to download archive with subrepos"
 msgstr "チェックするとダウンロードアーカイブにサブリポジトリが含まれます"
 
-#: rhodecode/templates/summary/summary.html:182
+#: rhodecode/templates/summary/summary.html:174
 msgid "with subrepos"
 msgstr "サブリポジトリを含む"
 
-#: rhodecode/templates/summary/summary.html:195
+#: rhodecode/templates/summary/summary.html:197
+msgid "Repository Size"
+msgstr "リポジトリサイズ"
+
+#: rhodecode/templates/summary/summary.html:204
+#: rhodecode/templates/summary/summary.html:206
+msgid "Feed"
+msgstr "フィード"
+
+#: rhodecode/templates/summary/summary.html:224
 msgid "Commit activity by day / author"
 msgstr "コミットアクティビティ 日/作成者"
 
-#: rhodecode/templates/summary/summary.html:206
+#: rhodecode/templates/summary/summary.html:235
 msgid "Stats gathered: "
 msgstr "収集した統計情報: "
 
-#: rhodecode/templates/summary/summary.html:227
-msgid "Shortlog"
-msgstr "ログ"
-
-#: rhodecode/templates/summary/summary.html:229
+#: rhodecode/templates/summary/summary.html:256
+msgid "Latest changes"
+msgstr "最近の変更点"
+
+#: rhodecode/templates/summary/summary.html:258
 msgid "Quick start"
 msgstr "クイックスタート"
 
-#: rhodecode/templates/summary/summary.html:243
+#: rhodecode/templates/summary/summary.html:272
 #, python-format
 msgid "Readme file at revision '%s'"
 msgstr "リビジョン '%s' のReadmeファイル"
 
-#: rhodecode/templates/summary/summary.html:246
+#: rhodecode/templates/summary/summary.html:275
 msgid "Permalink to this readme"
 msgstr "パーマリンク"
 
-#: rhodecode/templates/summary/summary.html:304
+#: rhodecode/templates/summary/summary.html:333
 #, python-format
 msgid "Download %s as %s"
 msgstr "%s を %sとしてダウンロード"
 
-#: rhodecode/templates/summary/summary.html:661
+#: rhodecode/templates/summary/summary.html:380
+msgid "files"
+msgstr "ファイル"
+
+#: rhodecode/templates/summary/summary.html:690
 msgid "commits"
 msgstr "コミット"
 
-#: rhodecode/templates/summary/summary.html:662
+#: rhodecode/templates/summary/summary.html:691
 msgid "files added"
 msgstr "追加されたファイル"
 
-#: rhodecode/templates/summary/summary.html:663
+#: rhodecode/templates/summary/summary.html:692
 msgid "files changed"
 msgstr "変更されたファイル"
 
-#: rhodecode/templates/summary/summary.html:664
+#: rhodecode/templates/summary/summary.html:693
 msgid "files removed"
 msgstr "削除されたファイル"
 
-#: rhodecode/templates/summary/summary.html:667
+#: rhodecode/templates/summary/summary.html:695
 msgid "commit"
 msgstr "コミット"
 
-#: rhodecode/templates/summary/summary.html:668
+#: rhodecode/templates/summary/summary.html:696
 msgid "file added"
 msgstr "追加されたファイル"
 
-#: rhodecode/templates/summary/summary.html:669
+#: rhodecode/templates/summary/summary.html:697
 msgid "file changed"
 msgstr "変更されたファイル"
 
-#: rhodecode/templates/summary/summary.html:670
+#: rhodecode/templates/summary/summary.html:698
 msgid "file removed"
 msgstr "削除されたファイル"
 
@@ -4185,27 +4343,7 @@
 msgid "%s Tags"
 msgstr "%s タグ"
 
-#: rhodecode/templates/tags/tags.html:29
+#: rhodecode/templates/tags/tags.html:26
 msgid "Compare tags"
 msgstr "タグの比較"
 
-#~ msgid ""
-#~ "%s repository is not mapped to db"
-#~ " perhaps it was created or renamed"
-#~ " from the file system please run "
-#~ "the application again in order to "
-#~ "rescan repositories"
-#~ msgstr ""
-#~ "%s "
-#~ "リポジトリはDB内に見つかりませんでした。おそらくファイルシステム上で作られたか名前が変更されたためです。リポジトリをもう一度チェックするためにアプリケーションを立ち上げ直してください。"
-
-#~ msgid ""
-#~ "%s repository is not mapped to db"
-#~ " perhaps it was moved or renamed  "
-#~ "from the filesystem please run the "
-#~ "application again in order to rescan "
-#~ "repositories"
-#~ msgstr ""
-#~ "%s "
-#~ "リポジトリはDB内に見つかりませんでした。おそらくファイルシステム上で作られたか名前が変更されたためです。リポジトリをもう一度チェックするためにアプリケーションを立ち上げ直してください。"
-
Binary file rhodecode/i18n/pl/LC_MESSAGES/rhodecode.mo has changed
--- a/rhodecode/i18n/pl/LC_MESSAGES/rhodecode.po	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/i18n/pl/LC_MESSAGES/rhodecode.po	Sun Apr 07 18:37:22 2013 +0200
@@ -8,16 +8,15 @@
 msgstr ""
 "Project-Id-Version: rhodecode 0.1\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2012-12-14 04:19+0100\n"
-"PO-Revision-Date: 2013-01-18 18:12+0100\n"
+"POT-Creation-Date: 2013-04-05 10:19-0700\n"
+"PO-Revision-Date: 2013-01-20 03:44+0100\n"
 "Last-Translator: Nemcio <bogdan114@g.pl>\n"
 "Language-Team: Test\n"
-"Language: pl\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && "
+"(n%100<10 || n%100>=20) ? 1 : 2)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Virtaal 0.7.1\n"
 "Generated-By: Babel 0.9.6\n"
 
 #: rhodecode/controllers/changelog.py:95
@@ -25,12 +24,13 @@
 msgstr "Wszystkie gałęzie"
 
 #: rhodecode/controllers/changeset.py:83
-msgid "show white space"
+#, fuzzy
+msgid "Show white space"
 msgstr "pokazuj spacje"
 
-#: rhodecode/controllers/changeset.py:90
-#: rhodecode/controllers/changeset.py:97
-msgid "ignore white space"
+#: rhodecode/controllers/changeset.py:90 rhodecode/controllers/changeset.py:97
+#, fuzzy
+msgid "Ignore white space"
 msgstr "ignoruj pokazywanie spacji"
 
 #: rhodecode/controllers/changeset.py:163
@@ -38,18 +38,22 @@
 msgid "%s line context"
 msgstr "%s linia w kontekście"
 
-#: rhodecode/controllers/changeset.py:314
-#: rhodecode/controllers/pullrequests.py:417
+#: rhodecode/controllers/changeset.py:329
+#: rhodecode/controllers/pullrequests.py:438
 #, python-format
 msgid "Status change -> %s"
 msgstr "Zmiana statusu -> %s"
 
-#: rhodecode/controllers/changeset.py:345
-msgid "Changing status on a changeset associated witha closed pull request is not allowed"
-msgstr "Zmiana statusu na grupy zmian powiązania łączy zamkniętego wniosku jest niedozwolona"
-
-#: rhodecode/controllers/compare.py:75
-#: rhodecode/controllers/pullrequests.py:121
+#: rhodecode/controllers/changeset.py:360
+msgid ""
+"Changing status on a changeset associated with a closed pull request is "
+"not allowed"
+msgstr ""
+"Zmiana statusu na grupy zmian powiązania łączy zamkniętego wniosku jest "
+"niedozwolona"
+
+#: rhodecode/controllers/compare.py:74
+#: rhodecode/controllers/pullrequests.py:167
 #: rhodecode/controllers/shortlog.py:100
 msgid "There are no changesets yet"
 msgstr "Brak zestawienia zmian"
@@ -60,7 +64,9 @@
 
 #: rhodecode/controllers/error.py:98
 msgid "The request could not be understood by the server due to malformed syntax."
-msgstr "Wniosek nie może być rozumiany przez serwer z powodu zniekształconej składni."
+msgstr ""
+"Wniosek nie może być rozumiany przez serwer z powodu zniekształconej "
+"składni."
 
 #: rhodecode/controllers/error.py:101
 msgid "Unauthorized access to resource"
@@ -75,8 +81,12 @@
 msgstr "Zasób nie został znaleziony"
 
 #: rhodecode/controllers/error.py:107
-msgid "The server encountered an unexpected condition which prevented it from fulfilling the request."
-msgstr "Serwer napotkał niespodziewany warunek, który uniemożliwia jej spełnienie żądania."
+msgid ""
+"The server encountered an unexpected condition which prevented it from "
+"fulfilling the request."
+msgstr ""
+"Serwer napotkał niespodziewany warunek, który uniemożliwia jej spełnienie"
+" żądania."
 
 #: rhodecode/controllers/feed.py:52
 #, python-format
@@ -89,167 +99,198 @@
 msgstr "%s %s zasilać"
 
 #: rhodecode/controllers/feed.py:86
-#: rhodecode/templates/changeset/changeset.html:137
-#: rhodecode/templates/changeset/changeset.html:149
-#: rhodecode/templates/compare/compare_diff.html:62
-#: rhodecode/templates/compare/compare_diff.html:73
-#: rhodecode/templates/pullrequests/pullrequest_show.html:94
-#: rhodecode/templates/pullrequests/pullrequest_show.html:153
+#: rhodecode/templates/changeset/changeset.html:134
+#: rhodecode/templates/changeset/changeset.html:146
+#: rhodecode/templates/compare/compare_diff.html:58
+#: rhodecode/templates/compare/compare_diff.html:69
+#: rhodecode/templates/pullrequests/pullrequest_show.html:131
+#: rhodecode/templates/pullrequests/pullrequest_show.html:195
 msgid "Changeset was too big and was cut off..."
 msgstr "Lista zmian była zbyt duża i została ucięta..."
 
-#: rhodecode/controllers/feed.py:92
-msgid "commited on"
-msgstr "komunikaty w"
-
-#: rhodecode/controllers/files.py:86
-msgid "click here to add new file"
+#: rhodecode/controllers/feed.py:91
+#, fuzzy, python-format
+msgid "%s committed on %s"
+msgstr "%s zakomitowal w %s"
+
+#: rhodecode/controllers/files.py:88
+#, fuzzy
+msgid "Click here to add new file"
 msgstr "Kliknij tutaj, by dodać nowy plik"
 
-#: rhodecode/controllers/files.py:87
+#: rhodecode/controllers/files.py:89
 #, python-format
 msgid "There are no files yet %s"
 msgstr "Brak plików %s"
 
-#: rhodecode/controllers/files.py:265
-#: rhodecode/controllers/files.py:325
+#: rhodecode/controllers/files.py:267 rhodecode/controllers/files.py:335
 #, python-format
 msgid "This repository is has been locked by %s on %s"
 msgstr "Repozytorium zostało zablokowane przez %s na %s"
 
-#: rhodecode/controllers/files.py:292
-#, python-format
-msgid "Edited %s via RhodeCode"
+#: rhodecode/controllers/files.py:279
+msgid "You can only edit files with revision being a valid branch "
+msgstr ""
+
+#: rhodecode/controllers/files.py:293
+#, fuzzy, python-format
+msgid "Edited file %s via RhodeCode"
 msgstr "Edytowanie %s w RhodeCode"
 
-#: rhodecode/controllers/files.py:297
+#: rhodecode/controllers/files.py:309
 msgid "No changes"
 msgstr "Bez zmian"
 
-#: rhodecode/controllers/files.py:308
-#: rhodecode/controllers/files.py:372
+#: rhodecode/controllers/files.py:318 rhodecode/controllers/files.py:388
 #, python-format
 msgid "Successfully committed to %s"
 msgstr "Committ wykonany do %s"
 
-#: rhodecode/controllers/files.py:313
-#: rhodecode/controllers/files.py:378
+#: rhodecode/controllers/files.py:323 rhodecode/controllers/files.py:394
 msgid "Error occurred during commit"
 msgstr "Wystąpił błąd w trakcie zatwierdzania"
 
-#: rhodecode/controllers/files.py:344
-#, python-format
-msgid "Added %s via RhodeCode"
+#: rhodecode/controllers/files.py:347
+#, fuzzy
+msgid "Added file via RhodeCode"
 msgstr "Dodano %s poprzez RhodeCode"
 
-#: rhodecode/controllers/files.py:358
+#: rhodecode/controllers/files.py:364
 msgid "No content"
 msgstr "Brak treści"
 
-#: rhodecode/controllers/files.py:362
+#: rhodecode/controllers/files.py:368
 msgid "No filename"
 msgstr "Brak nazwy pliku"
 
-#: rhodecode/controllers/files.py:404
-msgid "downloads disabled"
+#: rhodecode/controllers/files.py:372
+msgid "Location must be relative path and must not contain .. in path"
+msgstr ""
+
+#: rhodecode/controllers/files.py:420
+#, fuzzy
+msgid "Downloads disabled"
 msgstr "Pobieranie wyłączone"
 
-#: rhodecode/controllers/files.py:415
+#: rhodecode/controllers/files.py:431
 #, python-format
 msgid "Unknown revision %s"
 msgstr "Nieznana wersja %s"
 
-#: rhodecode/controllers/files.py:417
+#: rhodecode/controllers/files.py:433
 msgid "Empty repository"
 msgstr "Puste repozytorium"
 
-#: rhodecode/controllers/files.py:419
+#: rhodecode/controllers/files.py:435
 msgid "Unknown archive type"
 msgstr "Nieznany typ archiwum"
 
-#: rhodecode/controllers/files.py:564
-#: rhodecode/templates/changeset/changeset_range.html:13
-#: rhodecode/templates/changeset/changeset_range.html:31
+#: rhodecode/controllers/files.py:617
+#: rhodecode/templates/changeset/changeset_range.html:9
 msgid "Changesets"
 msgstr "Różnice"
 
-#: rhodecode/controllers/files.py:565
-#: rhodecode/controllers/pullrequests.py:74
-#: rhodecode/controllers/summary.py:236
-#: rhodecode/model/scm.py:550
+#: rhodecode/controllers/files.py:618 rhodecode/controllers/pullrequests.py:131
+#: rhodecode/controllers/summary.py:247 rhodecode/model/scm.py:606
+#: rhodecode/templates/switch_to_list.html:3
+#: rhodecode/templates/branches/branches.html:10
 msgid "Branches"
 msgstr "Gałęzie"
 
-#: rhodecode/controllers/files.py:566
-#: rhodecode/controllers/pullrequests.py:78
-#: rhodecode/controllers/summary.py:237
-#: rhodecode/model/scm.py:561
+#: rhodecode/controllers/files.py:619 rhodecode/controllers/pullrequests.py:132
+#: rhodecode/controllers/summary.py:248 rhodecode/model/scm.py:617
+#: rhodecode/templates/switch_to_list.html:15
+#: rhodecode/templates/shortlog/shortlog_data.html:10
+#: rhodecode/templates/tags/tags.html:10
 msgid "Tags"
 msgstr "Etykiety"
 
-#: rhodecode/controllers/forks.py:158
-#, python-format
-msgid "forked %s repository as %s"
+#: rhodecode/controllers/forks.py:175
+#, fuzzy, python-format
+msgid "Forked repository %s as %s"
 msgstr "gałęzi %s w repozytorium %s"
 
-#: rhodecode/controllers/forks.py:172
+#: rhodecode/controllers/forks.py:189
 #, python-format
 msgid "An error occurred during repository forking %s"
 msgstr "Wystąpił błąd podczas rozgałęzienia %s repozytorium"
 
-#: rhodecode/controllers/journal.py:218
-#: rhodecode/controllers/journal.py:261
+#: rhodecode/controllers/journal.py:275 rhodecode/controllers/journal.py:318
 msgid "public journal"
 msgstr "Dziennik publiczny"
 
-#: rhodecode/controllers/journal.py:222
-#: rhodecode/controllers/journal.py:265
-#: rhodecode/templates/base/base.html:232
+#: rhodecode/controllers/journal.py:279 rhodecode/controllers/journal.py:322
 #: rhodecode/templates/journal/journal.html:12
 msgid "journal"
 msgstr "dziennik"
 
-#: rhodecode/controllers/login.py:143
-msgid "You have successfully registered into rhodecode"
+#: rhodecode/controllers/login.py:138
+#, fuzzy
+msgid "You have successfully registered into RhodeCode"
 msgstr "Udało Ci się zarejestrować na stronie"
 
-#: rhodecode/controllers/login.py:164
+#: rhodecode/controllers/login.py:159
 msgid "Your password reset link was sent"
 msgstr "Twój link zresetowania hasła został wysłany"
 
-#: rhodecode/controllers/login.py:184
-msgid "Your password reset was successful, new password has been sent to your email"
+#: rhodecode/controllers/login.py:179
+msgid ""
+"Your password reset was successful, new password has been sent to your "
+"email"
 msgstr "Twoje hasło zostało zresetowane, nowe hasło zostanie wysłane na e-mail"
 
-#: rhodecode/controllers/pullrequests.py:76
-#: rhodecode/model/scm.py:556
+#: rhodecode/controllers/pullrequests.py:118
+#: rhodecode/templates/changeset/changeset.html:10
+#: rhodecode/templates/email_templates/changeset_comment.html:15
+msgid "Changeset"
+msgstr "Grupy zmian"
+
+#: rhodecode/controllers/pullrequests.py:128
+msgid "Special"
+msgstr ""
+
+#: rhodecode/controllers/pullrequests.py:129
+#, fuzzy
+msgid "Peer branches"
+msgstr "gałęzie"
+
+#: rhodecode/controllers/pullrequests.py:130 rhodecode/model/scm.py:612
+#: rhodecode/templates/switch_to_list.html:28
+#: rhodecode/templates/bookmarks/bookmarks.html:10
 msgid "Bookmarks"
 msgstr "Zakładki"
 
-#: rhodecode/controllers/pullrequests.py:190
+#: rhodecode/controllers/pullrequests.py:228
 msgid "Pull request requires a title with min. 3 chars"
 msgstr "Wniosek połączenia gałęzi wymaga tytułu z min. 3 znakami"
 
-#: rhodecode/controllers/pullrequests.py:192
-msgid "error during creation of pull request"
+#: rhodecode/controllers/pullrequests.py:230
+#, fuzzy
+msgid "Error creating pull request"
 msgstr "błąd podczas tworzenia prośby o łączenie gałęzi"
 
-#: rhodecode/controllers/pullrequests.py:224
+#: rhodecode/controllers/pullrequests.py:251
 msgid "Successfully opened new pull request"
 msgstr "Prośba o wykonanie połączenia gałęzi została wykonana prawidłowo"
 
-#: rhodecode/controllers/pullrequests.py:227
+#: rhodecode/controllers/pullrequests.py:254
 msgid "Error occurred during sending pull request"
 msgstr "Wystąpił błąd podczas prośby o połączenie gałęzi"
 
-#: rhodecode/controllers/pullrequests.py:260
+#: rhodecode/controllers/pullrequests.py:287
 msgid "Successfully deleted pull request"
 msgstr "Prośba o skasowanie połączenia gałęzi została wykonana prawidłowo"
 
-#: rhodecode/controllers/pullrequests.py:452
+#: rhodecode/controllers/pullrequests.py:441
+msgid "Closing with"
+msgstr ""
+
+#: rhodecode/controllers/pullrequests.py:478
 #, fuzzy
 msgid "Closing pull request on other statuses than rejected or approved forbidden"
-msgstr "Zamknij wszystkie wnioski połączenia gałęzi innych stanów niż odrzucony, zatwierdzony lub zabroniony"
+msgstr ""
+"Zamknij wszystkie wnioski połączenia gałęzi innych stanów niż odrzucony, "
+"zatwierdzony lub zabroniony"
 
 #: rhodecode/controllers/search.py:134
 msgid "Invalid search query. Try quoting it."
@@ -263,55 +304,12 @@
 msgid "An error occurred during this search operation"
 msgstr "Wystąpił błąd podczas wyszukiwania tej operacji"
 
-#: rhodecode/controllers/settings.py:119
-#: rhodecode/controllers/admin/repos.py:272
-#, python-format
-msgid "Repository %s updated successfully"
-msgstr "Repozytorium %s zostało pomyślnie zaktualizowane"
-
-#: rhodecode/controllers/settings.py:137
-#: rhodecode/controllers/admin/repos.py:290
-#, python-format
-msgid "error occurred during update of repository %s"
-msgstr "wystąpił błąd podczas aktualizacji repozytorium %s"
-
-#: rhodecode/controllers/settings.py:162
-#: rhodecode/controllers/admin/repos.py:315
-#, python-format
-msgid "deleted repository %s"
-msgstr "usunięte repozytorium %s"
-
-#: rhodecode/controllers/settings.py:166
-#: rhodecode/controllers/admin/repos.py:325
-#: rhodecode/controllers/admin/repos.py:331
-#, python-format
-msgid "An error occurred during deletion of %s"
-msgstr "Wystąpił błąd podczas usuwania %s"
-
-#: rhodecode/controllers/settings.py:185
-msgid "unlocked"
-msgstr "Odblokowany"
-
-#: rhodecode/controllers/settings.py:188
-msgid "locked"
-msgstr "zablokowany"
-
-#: rhodecode/controllers/settings.py:190
-#, python-format
-msgid "Repository has been %s"
-msgstr "Repozytoriów jest %s"
-
-#: rhodecode/controllers/settings.py:194
-#: rhodecode/controllers/admin/repos.py:423
-msgid "An error occurred during unlocking"
-msgstr "Wystąpił błąd podczas odblokowywania"
-
-#: rhodecode/controllers/summary.py:140
+#: rhodecode/controllers/summary.py:141
 msgid "No data loaded yet"
 msgstr "Żadne dane nie zostały załadowane"
 
-#: rhodecode/controllers/summary.py:144
-#: rhodecode/templates/summary/summary.html:157
+#: rhodecode/controllers/summary.py:147
+#: rhodecode/templates/summary/summary.html:149
 msgid "Statistics are disabled for this repository"
 msgstr "Statystyki są wyłączone dla tego repozytorium"
 
@@ -320,7 +318,8 @@
 msgstr "Domyślne ustawienia zostały pomyślnie zaktualizowane"
 
 #: rhodecode/controllers/admin/defaults.py:110
-msgid "error occurred during update of defaults"
+#, fuzzy
+msgid "Error occurred during update of defaults"
 msgstr "wystąpił błąd podczas aktualizacji wartości domyślnych"
 
 #: rhodecode/controllers/admin/ldap_settings.py:50
@@ -368,7 +367,7 @@
 msgstr "START_TLS dla połączenia LDAP"
 
 #: rhodecode/controllers/admin/ldap_settings.py:126
-msgid "Ldap settings updated successfully"
+msgid "LDAP settings updated successfully"
 msgstr "Ustawienia LDAP zostały zaktualizowane"
 
 #: rhodecode/controllers/admin/ldap_settings.py:130
@@ -376,543 +375,664 @@
 msgstr "Nie można uaktywnić ldap.\"Python-ldap\" brakuje library."
 
 #: rhodecode/controllers/admin/ldap_settings.py:147
-msgid "error occurred during update of ldap settings"
+#, fuzzy
+msgid "Error occurred during update of ldap settings"
 msgstr "Wystąpił błąd podczas aktualizacji ustawień ldap"
 
-#: rhodecode/controllers/admin/permissions.py:59
-#: rhodecode/controllers/admin/permissions.py:63
-msgid "None"
-msgstr "Brak"
-
 #: rhodecode/controllers/admin/permissions.py:60
 #: rhodecode/controllers/admin/permissions.py:64
-msgid "Read"
-msgstr "Odczyt"
+msgid "None"
+msgstr "Brak"
 
 #: rhodecode/controllers/admin/permissions.py:61
 #: rhodecode/controllers/admin/permissions.py:65
-msgid "Write"
-msgstr "Zapis"
+msgid "Read"
+msgstr "Odczyt"
 
 #: rhodecode/controllers/admin/permissions.py:62
 #: rhodecode/controllers/admin/permissions.py:66
+msgid "Write"
+msgstr "Zapis"
+
+#: rhodecode/controllers/admin/permissions.py:63
+#: rhodecode/controllers/admin/permissions.py:67
 #: rhodecode/templates/admin/defaults/defaults.html:9
 #: rhodecode/templates/admin/ldap/ldap.html:9
 #: rhodecode/templates/admin/permissions/permissions.html:9
-#: rhodecode/templates/admin/repos/repo_add.html:9
-#: rhodecode/templates/admin/repos/repo_edit.html:9
+#: rhodecode/templates/admin/repos/repo_add.html:10
+#: rhodecode/templates/admin/repos/repo_add.html:14
 #: rhodecode/templates/admin/repos/repos.html:9
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:8
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:8
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:10
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:9
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:9
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:11
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:13
 #: rhodecode/templates/admin/settings/hooks.html:9
 #: rhodecode/templates/admin/settings/settings.html:9
 #: rhodecode/templates/admin/users/user_add.html:8
 #: rhodecode/templates/admin/users/user_edit.html:9
-#: rhodecode/templates/admin/users/user_edit.html:126
+#: rhodecode/templates/admin/users/user_edit.html:133
 #: rhodecode/templates/admin/users/users.html:9
+#: rhodecode/templates/admin/users/users.html:85
 #: rhodecode/templates/admin/users_groups/users_group_add.html:8
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:9
 #: rhodecode/templates/admin/users_groups/users_groups.html:9
-#: rhodecode/templates/base/base.html:197
-#: rhodecode/templates/base/base.html:350
-#: rhodecode/templates/base/base.html:352
-#: rhodecode/templates/base/base.html:354
+#: rhodecode/templates/base/base.html:292
+#: rhodecode/templates/base/base.html:293
+#: rhodecode/templates/base/base.html:299
+#: rhodecode/templates/base/base.html:300
 msgid "Admin"
 msgstr "Administracja"
 
-#: rhodecode/controllers/admin/permissions.py:69
-msgid "disabled"
-msgstr "wyłączona"
-
-#: rhodecode/controllers/admin/permissions.py:71
-msgid "allowed with manual account activation"
-msgstr "dozwolona z ręczną aktywacją konta"
-
-#: rhodecode/controllers/admin/permissions.py:73
-msgid "allowed with automatic account activation"
-msgstr "dozwolona z automatyczną aktywacją konta"
-
-#: rhodecode/controllers/admin/permissions.py:75
-#: rhodecode/controllers/admin/permissions.py:78
+#: rhodecode/controllers/admin/permissions.py:70
+#: rhodecode/controllers/admin/permissions.py:76
+#: rhodecode/controllers/admin/permissions.py:79
 msgid "Disabled"
 msgstr "Wyłączone"
 
-#: rhodecode/controllers/admin/permissions.py:76
-#: rhodecode/controllers/admin/permissions.py:79
+#: rhodecode/controllers/admin/permissions.py:72
+#, fuzzy
+msgid "Allowed with manual account activation"
+msgstr "dozwolona z ręczną aktywacją konta"
+
+#: rhodecode/controllers/admin/permissions.py:74
+#, fuzzy
+msgid "Allowed with automatic account activation"
+msgstr "dozwolona z automatyczną aktywacją konta"
+
+#: rhodecode/controllers/admin/permissions.py:77
+#: rhodecode/controllers/admin/permissions.py:80
 msgid "Enabled"
 msgstr "Włączone"
 
-#: rhodecode/controllers/admin/permissions.py:122
+#: rhodecode/controllers/admin/permissions.py:128
 msgid "Default permissions updated successfully"
 msgstr "Domyślne uprawnienia zaktualizowane pomyślnie"
 
-#: rhodecode/controllers/admin/permissions.py:136
-msgid "error occurred during update of permissions"
+#: rhodecode/controllers/admin/permissions.py:142
+#, fuzzy
+msgid "Error occurred during update of permissions"
 msgstr "wystąpił błąd podczas aktualizacji uprawnień"
 
-#: rhodecode/controllers/admin/repos.py:121
+#: rhodecode/controllers/admin/repos.py:127
 msgid "--REMOVE FORK--"
 msgstr "--USUŃ ROZGAŁĘZIENIE--"
 
-#: rhodecode/controllers/admin/repos.py:190
-#, python-format
-msgid "created repository %s from %s"
+#: rhodecode/controllers/admin/repos.py:168
+#, fuzzy, python-format
+msgid "Created repository %s from %s"
 msgstr "utworzone repozytorium %s z %s"
 
-#: rhodecode/controllers/admin/repos.py:194
+#: rhodecode/controllers/admin/repos.py:174
+#, fuzzy, python-format
+msgid "Created repository %s"
+msgstr "utworzone repozytorium %s"
+
+#: rhodecode/controllers/admin/repos.py:197
+#, fuzzy, python-format
+msgid "Error creating repository %s"
+msgstr "utworzone repozytorium %s"
+
+#: rhodecode/controllers/admin/repos.py:266
 #, python-format
-msgid "created repository %s"
-msgstr "utworzone repozytorium %s"
-
-#: rhodecode/controllers/admin/repos.py:225
+msgid "Repository %s updated successfully"
+msgstr "Repozytorium %s zostało pomyślnie zaktualizowane"
+
+#: rhodecode/controllers/admin/repos.py:284
+#, fuzzy, python-format
+msgid "Error occurred during update of repository %s"
+msgstr "wystąpił błąd podczas aktualizacji repozytorium %s"
+
+#: rhodecode/controllers/admin/repos.py:311
+#: rhodecode/controllers/api/api.py:877
 #, python-format
-msgid "error occurred during creation of repository %s"
-msgstr "wystąpił błąd podczas tworzenia repozytorium %s"
-
-#: rhodecode/controllers/admin/repos.py:320
+msgid "Detached %s forks"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:314
+#: rhodecode/controllers/api/api.py:879
+#, fuzzy, python-format
+msgid "Deleted %s forks"
+msgstr "usunięte repozytorium %s"
+
+#: rhodecode/controllers/admin/repos.py:319
+#, fuzzy, python-format
+msgid "Deleted repository %s"
+msgstr "usunięte repozytorium %s"
+
+#: rhodecode/controllers/admin/repos.py:322
 #, python-format
 msgid "Cannot delete %s it still contains attached forks"
 msgstr "Nie można usunąć %s nadal zawiera załączniki rozgałęzienia"
 
-#: rhodecode/controllers/admin/repos.py:349
+#: rhodecode/controllers/admin/repos.py:327
+#, python-format
+msgid "An error occurred during deletion of %s"
+msgstr "Wystąpił błąd podczas usuwania %s"
+
+#: rhodecode/controllers/admin/repos.py:365
+#, fuzzy
+msgid "Repository permissions updated"
+msgstr "Repozytorium wyłączone"
+
+#: rhodecode/controllers/admin/repos.py:384
 msgid "An error occurred during deletion of repository user"
 msgstr "Wystąpił błąd podczas usunięcia użytkownika z repozytorium"
 
-#: rhodecode/controllers/admin/repos.py:368
-msgid "An error occurred during deletion of repository users groups"
+#: rhodecode/controllers/admin/repos.py:403
+#, fuzzy
+msgid "An error occurred during deletion of repository user groups"
 msgstr "Wystąpił błąd podczas usunięcia grupy użytkowników z repozytorium"
 
-#: rhodecode/controllers/admin/repos.py:386
+#: rhodecode/controllers/admin/repos.py:421
 msgid "An error occurred during deletion of repository stats"
 msgstr "Wystąpił błąd podczas usuwania z repozytorium statystyk"
 
-#: rhodecode/controllers/admin/repos.py:403
+#: rhodecode/controllers/admin/repos.py:438
 msgid "An error occurred during cache invalidation"
 msgstr "Wystąpił błąd podczas unieważniania cache"
 
-#: rhodecode/controllers/admin/repos.py:443
+#: rhodecode/controllers/admin/repos.py:458
+#: rhodecode/controllers/admin/repos.py:485
+msgid "An error occurred during unlocking"
+msgstr "Wystąpił błąd podczas odblokowywania"
+
+#: rhodecode/controllers/admin/repos.py:476
+#, fuzzy
+msgid "Unlocked"
+msgstr "Odblokowany"
+
+#: rhodecode/controllers/admin/repos.py:479
+#, fuzzy
+msgid "Locked"
+msgstr "zablokowany"
+
+#: rhodecode/controllers/admin/repos.py:481
+#, python-format
+msgid "Repository has been %s"
+msgstr "Repozytoriów jest %s"
+
+#: rhodecode/controllers/admin/repos.py:505
 msgid "Updated repository visibility in public journal"
 msgstr "Zaktualizowano widoczność stron w publicznym dzienniku"
 
-#: rhodecode/controllers/admin/repos.py:447
+#: rhodecode/controllers/admin/repos.py:509
 msgid "An error occurred during setting this repository in public journal"
 msgstr "Wystąpił błąd podczas ustawiania tego repozytorium w dzienniku publicznym"
 
-#: rhodecode/controllers/admin/repos.py:452
-#: rhodecode/model/validators.py:300
+#: rhodecode/controllers/admin/repos.py:514 rhodecode/model/validators.py:302
 msgid "Token mismatch"
 msgstr "Niezgodność tokenu"
 
-#: rhodecode/controllers/admin/repos.py:465
+#: rhodecode/controllers/admin/repos.py:527
 msgid "Pulled from remote location"
 msgstr "Pobieranie z lokalizacji zdalnej"
 
-#: rhodecode/controllers/admin/repos.py:467
+#: rhodecode/controllers/admin/repos.py:529
 msgid "An error occurred during pull from remote location"
 msgstr "Wystąpił błąd podczas pobierania z lokalizacji zdalnej"
 
-#: rhodecode/controllers/admin/repos.py:483
+#: rhodecode/controllers/admin/repos.py:545
 msgid "Nothing"
 msgstr "Brak"
 
-#: rhodecode/controllers/admin/repos.py:485
+#: rhodecode/controllers/admin/repos.py:547
 #, python-format
 msgid "Marked repo %s as fork of %s"
 msgstr "Oznaczono %s repo jako rozwidlenie %s"
 
-#: rhodecode/controllers/admin/repos.py:489
+#: rhodecode/controllers/admin/repos.py:551
 msgid "An error occurred during this operation"
 msgstr "Wystąpił błąd podczas tej operacji"
 
-#: rhodecode/controllers/admin/repos_groups.py:120
-#, python-format
-msgid "created repos group %s"
+#: rhodecode/controllers/admin/repos.py:590
+#, fuzzy
+msgid "An error occurred during creation of field"
+msgstr "wystąpił błąd podczas tworzenia użytkownika %s"
+
+#: rhodecode/controllers/admin/repos.py:604
+#, fuzzy
+msgid "An error occurred during removal of field"
+msgstr "Wystąpił błąd podczas zapisywania e-maila"
+
+#: rhodecode/controllers/admin/repos_groups.py:145
+#, fuzzy, python-format
+msgid "Created repository group %s"
 msgstr "utworzono grupę repo %s"
 
-#: rhodecode/controllers/admin/repos_groups.py:133
-#, python-format
-msgid "error occurred during creation of repos group %s"
+#: rhodecode/controllers/admin/repos_groups.py:157
+#, fuzzy, python-format
+msgid "Error occurred during creation of repository group %s"
 msgstr "Wystąpił błąd podczas tworzenia grupy repo %s"
 
-#: rhodecode/controllers/admin/repos_groups.py:167
-#, python-format
-msgid "updated repos group %s"
+#: rhodecode/controllers/admin/repos_groups.py:214
+#: rhodecode/controllers/admin/repos_groups.py:286
+msgid "Cannot revoke permission for yourself as admin"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos_groups.py:220
+#, fuzzy, python-format
+msgid "Updated repository group %s"
 msgstr "zaktualizowano grupę repo %s"
 
-#: rhodecode/controllers/admin/repos_groups.py:180
-#, python-format
-msgid "error occurred during update of repos group %s"
+#: rhodecode/controllers/admin/repos_groups.py:235
+#, fuzzy, python-format
+msgid "Error occurred during update of repository group %s"
 msgstr "wystąpił błąd podczas aktualizacji grupy repo %s"
 
-#: rhodecode/controllers/admin/repos_groups.py:198
+#: rhodecode/controllers/admin/repos_groups.py:253
 #, python-format
 msgid "This group contains %s repositores and cannot be deleted"
 msgstr "Ta grupa zawiera %s repozytorium i nie może być usunięta"
 
-#: rhodecode/controllers/admin/repos_groups.py:206
-#, python-format
-msgid "removed repos group %s"
+#: rhodecode/controllers/admin/repos_groups.py:260
+#, fuzzy, python-format
+msgid "This group contains %s subgroups and cannot be deleted"
+msgstr "Ta grupa zawiera %s repozytorium i nie może być usunięta"
+
+#: rhodecode/controllers/admin/repos_groups.py:266
+#, fuzzy, python-format
+msgid "Removed repository group %s"
 msgstr "usunięto grupę repo %s"
 
-#: rhodecode/controllers/admin/repos_groups.py:212
-msgid "Cannot delete this group it still contains subgroups"
-msgstr "Nie można usunąć tej grupy ponieważ nadal zawiera podgrupy"
-
-#: rhodecode/controllers/admin/repos_groups.py:217
-#: rhodecode/controllers/admin/repos_groups.py:222
-#, python-format
-msgid "error occurred during deletion of repos group %s"
+#: rhodecode/controllers/admin/repos_groups.py:271
+#, fuzzy, python-format
+msgid "Error occurred during deletion of repos group %s"
 msgstr "wystąpił błąd podczas kasowania grupy repo %s"
 
-#: rhodecode/controllers/admin/repos_groups.py:243
+#: rhodecode/controllers/admin/repos_groups.py:297
 msgid "An error occurred during deletion of group user"
 msgstr "Wystąpił błąd podczas usunięcia grupy użytkowników"
 
-#: rhodecode/controllers/admin/repos_groups.py:264
-msgid "An error occurred during deletion of group users groups"
+#: rhodecode/controllers/admin/repos_groups.py:318
+#, fuzzy
+msgid "An error occurred during deletion of group user groups"
 msgstr "Wystąpił błąd podczas usuwania grup i grup użytkowników"
 
-#: rhodecode/controllers/admin/settings.py:123
-#, python-format
-msgid "Repositories successfully rescanned added: %s,removed: %s"
-msgstr "Repozytoria z powodzeniem zostały ponownie zeskanowane dodano: %s, usunięto: %s"
-
-#: rhodecode/controllers/admin/settings.py:131
+#: rhodecode/controllers/admin/settings.py:126
+#, fuzzy, python-format
+msgid "Repositories successfully rescanned added: %s ; removed: %s"
+msgstr ""
+"Repozytoria z powodzeniem zostały ponownie zeskanowane dodano: %s, "
+"usunięto: %s"
+
+#: rhodecode/controllers/admin/settings.py:135
 msgid "Whoosh reindex task scheduled"
 msgstr "Zadanie ponownej indeksacji whoosh zostało zaplanowane"
 
-#: rhodecode/controllers/admin/settings.py:162
-msgid "Updated application settings"
-msgstr "Aktualizacja ustawień aplikacji"
-
 #: rhodecode/controllers/admin/settings.py:166
-#: rhodecode/controllers/admin/settings.py:299
-msgid "error occurred during updating application settings"
+msgid "Updated application settings"
+msgstr "Aktualizacja ustawień aplikacji"
+
+#: rhodecode/controllers/admin/settings.py:170
+#: rhodecode/controllers/admin/settings.py:301
+#, fuzzy
+msgid "Error occurred during updating application settings"
 msgstr "wystąpił błąd podczas aktualizacji ustawień aplikacji"
 
-#: rhodecode/controllers/admin/settings.py:207
+#: rhodecode/controllers/admin/settings.py:216
 msgid "Updated visualisation settings"
 msgstr "Aktualizacja ustawień wizualizacji"
 
-#: rhodecode/controllers/admin/settings.py:212
-msgid "error occurred during updating visualisation settings"
+#: rhodecode/controllers/admin/settings.py:221
+#, fuzzy
+msgid "Error occurred during updating visualisation settings"
 msgstr "Wystąpił błąd podczas aktualizacji ustawień wizualizacji"
 
-#: rhodecode/controllers/admin/settings.py:295
+#: rhodecode/controllers/admin/settings.py:297
 msgid "Updated VCS settings"
 msgstr "Aktualizacja ustawień VCS"
 
-#: rhodecode/controllers/admin/settings.py:309
+#: rhodecode/controllers/admin/settings.py:311
 msgid "Added new hook"
 msgstr "Dodano nowy hook"
 
-#: rhodecode/controllers/admin/settings.py:321
+#: rhodecode/controllers/admin/settings.py:323
 msgid "Updated hooks"
 msgstr "Aktualizacja hooku"
 
-#: rhodecode/controllers/admin/settings.py:325
-msgid "error occurred during hook creation"
+#: rhodecode/controllers/admin/settings.py:327
+#, fuzzy
+msgid "Error occurred during hook creation"
 msgstr "Wystąpił błąd podczas tworzenia hooku"
 
-#: rhodecode/controllers/admin/settings.py:344
+#: rhodecode/controllers/admin/settings.py:346
 msgid "Email task created"
 msgstr "E-mail został wysłany"
 
-#: rhodecode/controllers/admin/settings.py:399
+#: rhodecode/controllers/admin/settings.py:410
 msgid "You can't edit this user since it's crucial for entire application"
-msgstr "Nie możesz edytować tego użytkownika ponieważ jest kluczowy dla całej aplikacji"
-
-#: rhodecode/controllers/admin/settings.py:430
+msgstr ""
+"Nie możesz edytować tego użytkownika ponieważ jest kluczowy dla całej "
+"aplikacji"
+
+#: rhodecode/controllers/admin/settings.py:452
 msgid "Your account was updated successfully"
 msgstr "Twoje konto zostało pomyślnie zaktualizowane"
 
-#: rhodecode/controllers/admin/settings.py:445
-#: rhodecode/controllers/admin/users.py:196
-#, python-format
-msgid "error occurred during update of user %s"
+#: rhodecode/controllers/admin/settings.py:467
+#: rhodecode/controllers/admin/users.py:198
+#, fuzzy, python-format
+msgid "Error occurred during update of user %s"
 msgstr "wystąpił błąd podczas aktualizacji użytkownika %s"
 
 #: rhodecode/controllers/admin/users.py:130
-#, python-format
-msgid "created user %s"
+#, fuzzy, python-format
+msgid "Created user %s"
 msgstr "utworzono użytkownika %s"
 
 #: rhodecode/controllers/admin/users.py:142
-#, python-format
-msgid "error occurred during creation of user %s"
+#, fuzzy, python-format
+msgid "Error occurred during creation of user %s"
 msgstr "wystąpił błąd podczas tworzenia użytkownika %s"
 
 #: rhodecode/controllers/admin/users.py:176
 msgid "User updated successfully"
 msgstr "Użytkownik został zaktualizowany"
 
-#: rhodecode/controllers/admin/users.py:212
-msgid "successfully deleted user"
+#: rhodecode/controllers/admin/users.py:214
+#, fuzzy
+msgid "Successfully deleted user"
 msgstr "użytkownik został usunięty"
 
-#: rhodecode/controllers/admin/users.py:217
+#: rhodecode/controllers/admin/users.py:219
 msgid "An error occurred during deletion of user"
 msgstr "Wystąpił błąd podczas usuwania użytkownika"
 
-#: rhodecode/controllers/admin/users.py:231
+#: rhodecode/controllers/admin/users.py:233
 msgid "You can't edit this user"
 msgstr "Nie możesz edytować tego użytkownika"
 
-#: rhodecode/controllers/admin/users.py:272
+#: rhodecode/controllers/admin/users.py:276
 msgid "Granted 'repository create' permission to user"
 msgstr "Przyznano użytkownikowi uprawnienie do 'tworzenia repozytorium'"
 
-#: rhodecode/controllers/admin/users.py:277
+#: rhodecode/controllers/admin/users.py:281
 msgid "Revoked 'repository create' permission to user"
 msgstr "Cofnięto użytkownikowi uprawnienie do 'tworzenia repozytorium'"
 
-#: rhodecode/controllers/admin/users.py:283
+#: rhodecode/controllers/admin/users.py:287
 msgid "Granted 'repository fork' permission to user"
 msgstr "Przyznano użytkownikowi uprawnienie do 'tworzenia rozgałęzień'"
 
-#: rhodecode/controllers/admin/users.py:288
+#: rhodecode/controllers/admin/users.py:292
 msgid "Revoked 'repository fork' permission to user"
 msgstr "Cofnięto użytkownikowi uprawnienie do 'tworzenia rozgałęzień'"
 
-#: rhodecode/controllers/admin/users.py:294
-#: rhodecode/controllers/admin/users_groups.py:279
+#: rhodecode/controllers/admin/users.py:298
+#: rhodecode/controllers/admin/users_groups.py:281
 msgid "An error occurred during permissions saving"
 msgstr "Wystąpił błąd podczas zapisywania uprawnień"
 
-#: rhodecode/controllers/admin/users.py:309
+#: rhodecode/controllers/admin/users.py:312
 #, python-format
 msgid "Added email %s to user"
 msgstr "Dodano e-mail %s do użytkownika"
 
-#: rhodecode/controllers/admin/users.py:315
+#: rhodecode/controllers/admin/users.py:318
 msgid "An error occurred during email saving"
 msgstr "Wystąpił błąd podczas zapisywania e-maila"
 
-#: rhodecode/controllers/admin/users.py:325
+#: rhodecode/controllers/admin/users.py:328
 msgid "Removed email from user"
 msgstr "Usunięto e-mail użytkownikowi"
 
+#: rhodecode/controllers/admin/users.py:341
+#, fuzzy, python-format
+msgid "Added ip %s to user"
+msgstr "Dodano e-mail %s do użytkownika"
+
+#: rhodecode/controllers/admin/users.py:347
+#, fuzzy
+msgid "An error occurred during ip saving"
+msgstr "Wystąpił błąd podczas zapisywania e-maila"
+
+#: rhodecode/controllers/admin/users.py:359
+#, fuzzy
+msgid "Removed ip from user"
+msgstr "Usunięto e-mail użytkownikowi"
+
 #: rhodecode/controllers/admin/users_groups.py:86
-#, python-format
-msgid "created users group %s"
+#, fuzzy, python-format
+msgid "Created user group %s"
 msgstr "utworzono grupę użytkowników %s"
 
 #: rhodecode/controllers/admin/users_groups.py:97
-#, python-format
-msgid "error occurred during creation of users group %s"
+#, fuzzy, python-format
+msgid "Error occurred during creation of user group %s"
 msgstr "wystąpił błąd podczas tworzenia grupy użytkowników %s"
 
-#: rhodecode/controllers/admin/users_groups.py:164
-#, python-format
-msgid "updated users group %s"
+#: rhodecode/controllers/admin/users_groups.py:166
+#, fuzzy, python-format
+msgid "Updated user group %s"
 msgstr "zaktualizowano grupę użytkowników %s"
 
-#: rhodecode/controllers/admin/users_groups.py:186
-#, python-format
-msgid "error occurred during update of users group %s"
+#: rhodecode/controllers/admin/users_groups.py:188
+#, fuzzy, python-format
+msgid "Error occurred during update of user group %s"
 msgstr "wystąpił błąd podczas aktualizacji grupy użytkowników %s"
 
-#: rhodecode/controllers/admin/users_groups.py:203
-msgid "successfully deleted users group"
+#: rhodecode/controllers/admin/users_groups.py:205
+#, fuzzy
+msgid "Successfully deleted user group"
 msgstr "grupa użytkowników została usunięta z powodzeniem"
 
-#: rhodecode/controllers/admin/users_groups.py:208
-msgid "An error occurred during deletion of users group"
+#: rhodecode/controllers/admin/users_groups.py:210
+#, fuzzy
+msgid "An error occurred during deletion of user group"
 msgstr "Wystąpił błąd podczas usuwania grupy użytkowników"
 
-#: rhodecode/controllers/admin/users_groups.py:257
-msgid "Granted 'repository create' permission to users group"
+#: rhodecode/controllers/admin/users_groups.py:259
+#, fuzzy
+msgid "Granted 'repository create' permission to user group"
 msgstr "Przyznano grupie użytkowników uprawnienia do 'tworzenia repozytorium'"
 
-#: rhodecode/controllers/admin/users_groups.py:262
-msgid "Revoked 'repository create' permission to users group"
+#: rhodecode/controllers/admin/users_groups.py:264
+#, fuzzy
+msgid "Revoked 'repository create' permission to user group"
 msgstr "Cofnięto grupie użytkowników uprawnienia do 'tworzenia repozytorium'"
 
-#: rhodecode/controllers/admin/users_groups.py:268
-msgid "Granted 'repository fork' permission to users group"
+#: rhodecode/controllers/admin/users_groups.py:270
+#, fuzzy
+msgid "Granted 'repository fork' permission to user group"
 msgstr "Przyznano grupie użytkowników uprawnienia do 'tworzenia rozgałęzień'"
 
-#: rhodecode/controllers/admin/users_groups.py:273
-msgid "Revoked 'repository fork' permission to users group"
+#: rhodecode/controllers/admin/users_groups.py:275
+#, fuzzy
+msgid "Revoked 'repository fork' permission to user group"
 msgstr "Cofnięto grupie użytkowników uprawnienia do 'tworzenia rozgałęzień'"
 
-#: rhodecode/lib/auth.py:499
+#: rhodecode/lib/auth.py:530
+#, fuzzy, python-format
+msgid "IP %s not allowed"
+msgstr "Obserwatorzy %s"
+
+#: rhodecode/lib/auth.py:579
 msgid "You need to be a registered user to perform this action"
 msgstr "Musisz być zarejestrowanym użytkownikiem, żeby wykonać to działanie"
 
-#: rhodecode/lib/auth.py:540
+#: rhodecode/lib/auth.py:620
 msgid "You need to be a signed in to view this page"
 msgstr "Musisz być zalogowany, żeby oglądać stronę"
 
-#: rhodecode/lib/diffs.py:74
-msgid "binary file"
+#: rhodecode/lib/diffs.py:66
+#, fuzzy
+msgid "Binary file"
 msgstr "plik binarny"
 
-#: rhodecode/lib/diffs.py:90
+#: rhodecode/lib/diffs.py:82
 msgid "Changeset was too big and was cut off, use diff menu to display this diff"
-msgstr "Lista zmian była zbyt duża i została obcięta, użyj menu porównań żeby wyświetlić różnice"
-
-#: rhodecode/lib/diffs.py:100
+msgstr ""
+"Lista zmian była zbyt duża i została obcięta, użyj menu porównań żeby "
+"wyświetlić różnice"
+
+#: rhodecode/lib/diffs.py:92
 msgid "No changes detected"
 msgstr "Nie wykryto zmian"
 
-#: rhodecode/lib/helpers.py:374
+#: rhodecode/lib/helpers.py:394
 #, python-format
 msgid "%a, %d %b %Y %H:%M:%S"
 msgstr "%d.%m.%Y, %H:%M:%S"
 
-#: rhodecode/lib/helpers.py:486
+#: rhodecode/lib/helpers.py:506
 msgid "True"
 msgstr "Prawda"
 
-#: rhodecode/lib/helpers.py:490
+#: rhodecode/lib/helpers.py:509
 msgid "False"
 msgstr "Fałsz"
 
-#: rhodecode/lib/helpers.py:530
+#: rhodecode/lib/helpers.py:547
 #, python-format
 msgid "Deleted branch: %s"
 msgstr "Usunięta gałąź: %s"
 
-#: rhodecode/lib/helpers.py:533
+#: rhodecode/lib/helpers.py:550
 #, python-format
 msgid "Created tag: %s"
 msgstr "Utworzony tag: %s"
 
-#: rhodecode/lib/helpers.py:546
+#: rhodecode/lib/helpers.py:563
 msgid "Changeset not found"
 msgstr "Nie znaleziono changeset"
 
-#: rhodecode/lib/helpers.py:589
+#: rhodecode/lib/helpers.py:615
 #, python-format
 msgid "Show all combined changesets %s->%s"
 msgstr "Pokaż wszystkie zestawienia zmian changesets %s->%s"
 
-#: rhodecode/lib/helpers.py:595
+#: rhodecode/lib/helpers.py:621
 msgid "compare view"
 msgstr "Wyświetl porównanie"
 
-#: rhodecode/lib/helpers.py:615
+#: rhodecode/lib/helpers.py:641
 msgid "and"
 msgstr "i"
 
-#: rhodecode/lib/helpers.py:616
+#: rhodecode/lib/helpers.py:642
 #, python-format
 msgid "%s more"
 msgstr "%s więcej"
 
-#: rhodecode/lib/helpers.py:617
-#: rhodecode/templates/changelog/changelog.html:51
+#: rhodecode/lib/helpers.py:643 rhodecode/templates/changelog/changelog.html:44
 msgid "revisions"
 msgstr "rewizja"
 
-#: rhodecode/lib/helpers.py:641
+#: rhodecode/lib/helpers.py:667
 #, python-format
 msgid "fork name %s"
 msgstr "nazwa rozgałęzienia %s"
 
-#: rhodecode/lib/helpers.py:658
-#: rhodecode/templates/pullrequests/pullrequest_show.html:4
-#: rhodecode/templates/pullrequests/pullrequest_show.html:12
+#: rhodecode/lib/helpers.py:684
+#: rhodecode/templates/pullrequests/pullrequest_show.html:8
 #, python-format
 msgid "Pull request #%s"
 msgstr "Połączonych gałęzi #%s"
 
-#: rhodecode/lib/helpers.py:664
+#: rhodecode/lib/helpers.py:690
 msgid "[deleted] repository"
 msgstr "[usunięte] repozytorium"
 
-#: rhodecode/lib/helpers.py:666
-#: rhodecode/lib/helpers.py:676
+#: rhodecode/lib/helpers.py:692 rhodecode/lib/helpers.py:702
 msgid "[created] repository"
 msgstr "[utworzone] repozytorium"
 
-#: rhodecode/lib/helpers.py:668
+#: rhodecode/lib/helpers.py:694
 msgid "[created] repository as fork"
 msgstr "[utworzone] repozytorium jako rozgałęzienie"
 
-#: rhodecode/lib/helpers.py:670
-#: rhodecode/lib/helpers.py:678
+#: rhodecode/lib/helpers.py:696 rhodecode/lib/helpers.py:704
 msgid "[forked] repository"
 msgstr "[rozgałęzione] repozytorium"
 
-#: rhodecode/lib/helpers.py:672
-#: rhodecode/lib/helpers.py:680
+#: rhodecode/lib/helpers.py:698 rhodecode/lib/helpers.py:706
 msgid "[updated] repository"
 msgstr "[zaktualizowane] repozytorium"
 
-#: rhodecode/lib/helpers.py:674
+#: rhodecode/lib/helpers.py:700
 msgid "[delete] repository"
 msgstr "[skasowane] repozytorium"
 
-#: rhodecode/lib/helpers.py:682
+#: rhodecode/lib/helpers.py:708
 msgid "[created] user"
 msgstr "[utworzony] użytkownik"
 
-#: rhodecode/lib/helpers.py:684
+#: rhodecode/lib/helpers.py:710
 msgid "[updated] user"
 msgstr "[zaktualizowany] użytkownik"
 
-#: rhodecode/lib/helpers.py:686
-msgid "[created] users group"
+#: rhodecode/lib/helpers.py:712
+#, fuzzy
+msgid "[created] user group"
 msgstr "[utworzona] grupa użytkowników"
 
-#: rhodecode/lib/helpers.py:688
-msgid "[updated] users group"
+#: rhodecode/lib/helpers.py:714
+#, fuzzy
+msgid "[updated] user group"
 msgstr "[zaktualizowana] grupa użytkowników"
 
-#: rhodecode/lib/helpers.py:690
+#: rhodecode/lib/helpers.py:716
 msgid "[commented] on revision in repository"
 msgstr "[komentarz] do zmiany w repozytorium"
 
-#: rhodecode/lib/helpers.py:692
+#: rhodecode/lib/helpers.py:718
 msgid "[commented] on pull request for"
 msgstr "[komentarz] wniosek o połączenie gałęzi"
 
-#: rhodecode/lib/helpers.py:694
+#: rhodecode/lib/helpers.py:720
 msgid "[closed] pull request for"
 msgstr "[zamknięty] wniosek o połączenie gałęzi"
 
-#: rhodecode/lib/helpers.py:696
+#: rhodecode/lib/helpers.py:722
 msgid "[pushed] into"
 msgstr "[wysłane zmiany] w"
 
-#: rhodecode/lib/helpers.py:698
+#: rhodecode/lib/helpers.py:724
 msgid "[committed via RhodeCode] into repository"
 msgstr "[committed przez RhodeCode] do repozytorium"
 
-#: rhodecode/lib/helpers.py:700
+#: rhodecode/lib/helpers.py:726
 msgid "[pulled from remote] into repository"
 msgstr "[pobieranie z zdalnego] do repozytorium"
 
-#: rhodecode/lib/helpers.py:702
+#: rhodecode/lib/helpers.py:728
 msgid "[pulled] from"
 msgstr "[pobrano] z"
 
-#: rhodecode/lib/helpers.py:704
+#: rhodecode/lib/helpers.py:730
 msgid "[started following] repository"
 msgstr "[start następnego] repozytorium"
 
-#: rhodecode/lib/helpers.py:706
+#: rhodecode/lib/helpers.py:732
 msgid "[stopped following] repository"
 msgstr "[zatrzymany po] repozytorium"
 
-#: rhodecode/lib/helpers.py:883
+#: rhodecode/lib/helpers.py:910
 #, python-format
 msgid " and %s more"
 msgstr "i %s więcej"
 
-#: rhodecode/lib/helpers.py:887
+#: rhodecode/lib/helpers.py:914
 msgid "No Files"
 msgstr "Brak Plików"
 
-#: rhodecode/lib/helpers.py:1163
+#: rhodecode/lib/helpers.py:1198
 #, python-format
-msgid "%s repository is not mapped to db perhaps it was created or renamed from the filesystem please run the application again in order to rescan repositories"
-msgstr "%s repozytorium nie jest mapowane do db może zostało utworzone lub zmienione z systemie plików proszę uruchomić aplikację ponownie, aby ponownie przeskanować repozytoria"
-
-#: rhodecode/lib/utils2.py:403
+msgid ""
+"%s repository is not mapped to db perhaps it was created or renamed from "
+"the filesystem please run the application again in order to rescan "
+"repositories"
+msgstr ""
+"%s repozytorium nie jest mapowane do db może zostało utworzone lub "
+"zmienione z systemie plików proszę uruchomić aplikację ponownie, aby "
+"ponownie przeskanować repozytoria"
+
+#: rhodecode/lib/unionrepo.py:193
+#, fuzzy
+msgid "cannot create new union repository"
+msgstr "[utworzone] repozytorium"
+
+#: rhodecode/lib/utils2.py:411
 #, python-format
 msgid "%d year"
 msgid_plural "%d years"
@@ -920,7 +1040,7 @@
 msgstr[1] "%d lata"
 msgstr[2] "%d lat"
 
-#: rhodecode/lib/utils2.py:404
+#: rhodecode/lib/utils2.py:412
 #, python-format
 msgid "%d month"
 msgid_plural "%d months"
@@ -928,7 +1048,7 @@
 msgstr[1] "%d miesięcy"
 msgstr[2] "%d miesięcy"
 
-#: rhodecode/lib/utils2.py:405
+#: rhodecode/lib/utils2.py:413
 #, python-format
 msgid "%d day"
 msgid_plural "%d days"
@@ -936,7 +1056,7 @@
 msgstr[1] "%d dni"
 msgstr[2] "%d dni"
 
-#: rhodecode/lib/utils2.py:406
+#: rhodecode/lib/utils2.py:414
 #, python-format
 msgid "%d hour"
 msgid_plural "%d hours"
@@ -944,7 +1064,7 @@
 msgstr[1] "%d godziny"
 msgstr[2] "%d godzin"
 
-#: rhodecode/lib/utils2.py:407
+#: rhodecode/lib/utils2.py:415
 #, python-format
 msgid "%d minute"
 msgid_plural "%d minutes"
@@ -952,7 +1072,7 @@
 msgstr[1] "%d minuty"
 msgstr[2] "%d minut"
 
-#: rhodecode/lib/utils2.py:408
+#: rhodecode/lib/utils2.py:416
 #, python-format
 msgid "%d second"
 msgid_plural "%d seconds"
@@ -960,143 +1080,183 @@
 msgstr[1] "%d sekund"
 msgstr[2] "%d sekund"
 
-#: rhodecode/lib/utils2.py:424
+#: rhodecode/lib/utils2.py:432
 #, python-format
 msgid "in %s"
 msgstr "w %s"
 
-#: rhodecode/lib/utils2.py:426
+#: rhodecode/lib/utils2.py:434
 #, python-format
 msgid "%s ago"
 msgstr "%s temu"
 
-#: rhodecode/lib/utils2.py:428
+#: rhodecode/lib/utils2.py:436
 #, python-format
 msgid "in %s and %s"
 msgstr "w %s i %s"
 
-#: rhodecode/lib/utils2.py:431
+#: rhodecode/lib/utils2.py:439
 #, python-format
 msgid "%s and %s ago"
 msgstr "%s i %s temu"
 
-#: rhodecode/lib/utils2.py:434
+#: rhodecode/lib/utils2.py:442
 msgid "just now"
 msgstr "przed chwilą"
 
-#: rhodecode/lib/celerylib/tasks.py:270
-msgid "password reset link"
-msgstr "łącze resetowania hasła"
-
 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163
-#: rhodecode/model/db.py:1183
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1183
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1289 rhodecode/model/db.py:1388
 msgid "Repository no access"
 msgstr "Brak dostępu do repozytorium"
 
 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164
-#: rhodecode/model/db.py:1184
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1184
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1290 rhodecode/model/db.py:1389
 msgid "Repository read access"
 msgstr "Repozytorium do odczytu"
 
 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165
-#: rhodecode/model/db.py:1185
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1185
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1291 rhodecode/model/db.py:1390
 msgid "Repository write access"
 msgstr "Repozytorium do zapisu"
 
 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166
-#: rhodecode/model/db.py:1186
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1186
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1292 rhodecode/model/db.py:1391
 msgid "Repository admin access"
 msgstr "Administracja dostępu do repozytorium"
 
 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168
-#: rhodecode/model/db.py:1188
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1188
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1294
 msgid "Repositories Group no access"
 msgstr "Grupy repozytoriów brak dostępu"
 
 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169
-#: rhodecode/model/db.py:1189
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1189
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1295
 msgid "Repositories Group read access"
 msgstr "Grupy repozytoriów dostęp do odczytu"
 
 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170
-#: rhodecode/model/db.py:1190
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1190
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1296
 msgid "Repositories Group write access"
 msgstr "Grupy repozytoriów dostęp do zapisu"
 
 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171
-#: rhodecode/model/db.py:1191
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1191
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1297
 msgid "Repositories Group admin access"
 msgstr "Repozytoria Grupy dostęp administratora"
 
 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173
-#: rhodecode/model/db.py:1193
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1193
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1299 rhodecode/model/db.py:1398
 msgid "RhodeCode Administrator"
 msgstr "Administrator Repo"
 
 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174
-#: rhodecode/model/db.py:1194
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1194
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1300 rhodecode/model/db.py:1399
 msgid "Repository creation disabled"
 msgstr "Repozytorium wyłączone"
 
 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175
-#: rhodecode/model/db.py:1195
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1195
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1301 rhodecode/model/db.py:1400
 msgid "Repository creation enabled"
 msgstr "Repozytorium włączone"
 
 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176
-#: rhodecode/model/db.py:1196
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1196
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1302 rhodecode/model/db.py:1401
 msgid "Repository forking disabled"
 msgstr "Rozwidlenie repozytorium wyłączone"
 
 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177
-#: rhodecode/model/db.py:1197
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1197
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1303 rhodecode/model/db.py:1402
 msgid "Repository forking enabled"
 msgstr "Rozwidlenie repozytorium włączone"
 
 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178
-#: rhodecode/model/db.py:1198
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1198
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1304 rhodecode/model/db.py:1403
 msgid "Register disabled"
 msgstr "Rejestracja wyłączona"
 
 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179
-#: rhodecode/model/db.py:1199
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1199
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1305 rhodecode/model/db.py:1404
 msgid "Register new user with RhodeCode with manual activation"
 msgstr "Rejestracja nowego użytkownika na stronie z ręczną aktywacją"
 
 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182
-#: rhodecode/model/db.py:1202
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1202
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1308 rhodecode/model/db.py:1407
 msgid "Register new user with RhodeCode with auto activation"
 msgstr "Rejestracja nowego użytkownika na stronie z automatyczną aktywacją"
 
 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623
-#: rhodecode/model/db.py:1643
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1643
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1749 rhodecode/model/db.py:1838
 msgid "Not Reviewed"
 msgstr "Brak Korekty"
 
 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624
-#: rhodecode/model/db.py:1644
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1644
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1750 rhodecode/model/db.py:1839
 msgid "Approved"
 msgstr "Zaakceptowano"
 
 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625
-#: rhodecode/model/db.py:1645
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1645
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1751 rhodecode/model/db.py:1840
 msgid "Rejected"
 msgstr "Odrzucono"
 
 #: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626
-#: rhodecode/model/db.py:1646
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1646
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1752 rhodecode/model/db.py:1841
 msgid "Under Review"
 msgstr "Objęty Przeglądem"
 
-#: rhodecode/model/comment.py:110
+#: rhodecode/model/comment.py:75
 #, python-format
 msgid "on line %s"
 msgstr "widziany %s"
 
-#: rhodecode/model/comment.py:173
+#: rhodecode/model/comment.py:219
 msgid "[Mention]"
 msgstr "[Wymieniony]"
 
+#: rhodecode/model/db.py:1252
+msgid "top level"
+msgstr ""
+
+#: rhodecode/model/db.py:1393
+#, fuzzy
+msgid "Repository group no access"
+msgstr "Grupy repozytoriów brak dostępu"
+
+#: rhodecode/model/db.py:1394
+#, fuzzy
+msgid "Repository group read access"
+msgstr "Grupy repozytoriów dostęp do odczytu"
+
+#: rhodecode/model/db.py:1395
+#, fuzzy
+msgid "Repository group write access"
+msgstr "Grupy repozytoriów dostęp do zapisu"
+
+#: rhodecode/model/db.py:1396
+#, fuzzy
+msgid "Repository group admin access"
+msgstr "Repozytoria Grupy dostęp administratora"
+
 #: rhodecode/model/forms.py:43
 msgid "Please enter a login"
 msgstr "Wpisz login"
@@ -1115,198 +1275,257 @@
 msgid "Enter %(min)i characters or more"
 msgstr "Wpisz %(min)i lub więcej znaków"
 
-#: rhodecode/model/notification.py:220
-#, python-format
-msgid "commented on commit at %(when)s"
-msgstr "skomentował zatwierdzenie %(when)s"
-
-#: rhodecode/model/notification.py:221
-#, python-format
-msgid "sent message at %(when)s"
-msgstr "wysłano wiadomość do %(when)s"
-
-#: rhodecode/model/notification.py:222
-#, python-format
-msgid "mentioned you at %(when)s"
-msgstr "wspomniał o Tobie w %(when)s"
-
-#: rhodecode/model/notification.py:223
-#, python-format
-msgid "registered in RhodeCode at %(when)s"
-msgstr "zarejestrowany na stronie w %(when)s"
-
 #: rhodecode/model/notification.py:224
-#, python-format
-msgid "opened new pull request at %(when)s"
-msgstr "otworzył nowe połączenie gałęzi w %(when)s"
+#, fuzzy, python-format
+msgid "%(user)s commented on changeset at %(when)s"
+msgstr "%(user)s skomentował zatwierdzenie %(when)s"
 
 #: rhodecode/model/notification.py:225
-#, python-format
-msgid "commented on pull request at %(when)s"
-msgstr "skomentował nowe połączenie gałęzi w %(when)s"
-
-#: rhodecode/model/pull_request.py:90
-#, python-format
-msgid "%(user)s wants you to review pull request #%(pr_id)s"
-msgstr "%(user)s chce żeby przejrzeć nowe gałęzie #%(pr_id)s"
-
-#: rhodecode/model/scm.py:542
+#, fuzzy, python-format
+msgid "%(user)s sent message at %(when)s"
+msgstr "%(user)s wysłał wiadomość do %(when)s"
+
+#: rhodecode/model/notification.py:226
+#, fuzzy, python-format
+msgid "%(user)s mentioned you at %(when)s"
+msgstr "%(user)s wspomniał o Tobie w %(when)s"
+
+#: rhodecode/model/notification.py:227
+#, fuzzy, python-format
+msgid "%(user)s registered in RhodeCode at %(when)s"
+msgstr "%(user)s zarejestrował na stronie w %(when)s"
+
+#: rhodecode/model/notification.py:228
+#, fuzzy, python-format
+msgid "%(user)s opened new pull request at %(when)s"
+msgstr "%(user)s otworzył nowe połączenie gałęzi w %(when)s"
+
+#: rhodecode/model/notification.py:229
+#, fuzzy, python-format
+msgid "%(user)s commented on pull request at %(when)s"
+msgstr "%(user)s skomentował nowe połączenie gałęzi w %(when)s"
+
+#: rhodecode/model/pull_request.py:104
+#, fuzzy, python-format
+msgid "%(user)s wants you to review pull request #%(pr_id)s: %(pr_title)s"
+msgstr "%(user)s chce żeby przejrzeć nowe gałęzie #%(pr_id)s: %(pr_title)s"
+
+#: rhodecode/model/scm.py:598
 msgid "latest tip"
 msgstr "ostatni tip"
 
 #: rhodecode/model/user.py:232
-msgid "new user registration"
+#, fuzzy
+msgid "New user registration"
 msgstr "nowy użytkownik się zarejestrował"
 
-#: rhodecode/model/user.py:257
-#: rhodecode/model/user.py:281
-#: rhodecode/model/user.py:303
+#: rhodecode/model/user.py:257 rhodecode/model/user.py:281
 msgid "You can't Edit this user since it's crucial for entire application"
-msgstr "Nie możesz edytować tego użytkownika ponieważ jest kluczowy dla całej aplikacji"
-
-#: rhodecode/model/user.py:327
+msgstr ""
+"Nie możesz edytować tego użytkownika ponieważ jest kluczowy dla całej "
+"aplikacji"
+
+#: rhodecode/model/user.py:303
 msgid "You can't remove this user since it's crucial for entire application"
-msgstr "Nie możesz usunąć tego użytkownika ponieważ jest kluczowy dla całej aplikacji"
-
-#: rhodecode/model/user.py:333
+msgstr ""
+"Nie możesz usunąć tego użytkownika ponieważ jest kluczowy dla całej "
+"aplikacji"
+
+#: rhodecode/model/user.py:309
 #, python-format
-msgid "user \"%s\" still owns %s repositories and cannot be removed. Switch owners or remove those repositories. %s"
-msgstr "użytkownik \"%s\" wciąż posiada repozytoria następujące %s i nie może zostać usunięty. Zmień właściciela lub usuń te repozytoria. %s"
-
-#: rhodecode/model/validators.py:36
-#: rhodecode/model/validators.py:37
+msgid ""
+"user \"%s\" still owns %s repositories and cannot be removed. Switch "
+"owners or remove those repositories. %s"
+msgstr ""
+"użytkownik \"%s\" wciąż posiada repozytoria następujące %s i nie może "
+"zostać usunięty. Zmień właściciela lub usuń te repozytoria. %s"
+
+#: rhodecode/model/user.py:334
+#, fuzzy
+msgid "Password reset link"
+msgstr "łącze resetowania hasła"
+
+#: rhodecode/model/user.py:366
+#, fuzzy
+msgid "Your new password"
+msgstr "Nowe hasło"
+
+#: rhodecode/model/user.py:367
+#, python-format
+msgid "Your new RhodeCode password:%s"
+msgstr ""
+
+#: rhodecode/model/validators.py:38 rhodecode/model/validators.py:39
 msgid "Value cannot be an empty list"
 msgstr "Wartość listy nie może być pusta"
 
-#: rhodecode/model/validators.py:83
+#: rhodecode/model/validators.py:85
 #, python-format
 msgid "Username \"%(username)s\" already exists"
 msgstr "Użytkownik \"%(username)s\" już istnieje"
 
-#: rhodecode/model/validators.py:85
+#: rhodecode/model/validators.py:87
 #, python-format
 msgid "Username \"%(username)s\" is forbidden"
 msgstr "Nazwa użytkownika \"%(username)s\" jest zabroniona"
 
-#: rhodecode/model/validators.py:87
-msgid "Username may only contain alphanumeric characters underscores, periods or dashes and must begin with alphanumeric character"
-msgstr "Nazwa użytkownika może zawierać tylko znaki alfanumeryczne, podkreślenia, kropki lub myślniki i musi zaczynać się znakiem alfanumerycznym"
-
-#: rhodecode/model/validators.py:115
+#: rhodecode/model/validators.py:89
+msgid ""
+"Username may only contain alphanumeric characters underscores, periods or"
+" dashes and must begin with alphanumeric character"
+msgstr ""
+"Nazwa użytkownika może zawierać tylko znaki alfanumeryczne, podkreślenia,"
+" kropki lub myślniki i musi zaczynać się znakiem alfanumerycznym"
+
+#: rhodecode/model/validators.py:117
 #, python-format
 msgid "Username %(username)s is not valid"
 msgstr "Nazwa użytkownika %(username)s jest nieprawidłowa"
 
-#: rhodecode/model/validators.py:134
-msgid "Invalid users group name"
+#: rhodecode/model/validators.py:136
+#, fuzzy
+msgid "Invalid user group name"
 msgstr "Niewłaściwa nazwa grupy"
 
-#: rhodecode/model/validators.py:135
-#, python-format
-msgid "Users group \"%(usersgroup)s\" already exists"
-msgstr "Nazwa grupy \"%(usersgroup)s\" już istnieje"
-
 #: rhodecode/model/validators.py:137
-msgid "users group name may only contain  alphanumeric characters underscores, periods or dashes and must begin with alphanumeric character"
-msgstr "Nazwa grupy może zawierać tylko znaki alfanumeryczne, podkreślenia, kropki lub myślniki i musi zaczynać się znakiem alfanumerycznym"
-
-#: rhodecode/model/validators.py:175
+#, fuzzy, python-format
+msgid "User group \"%(usergroup)s\" already exists"
+msgstr "Nazwa grupy \"%(usergroup)s\" już istnieje"
+
+#: rhodecode/model/validators.py:139
+#, fuzzy
+msgid ""
+"user group name may only contain alphanumeric characters underscores, "
+"periods or dashes and must begin with alphanumeric character"
+msgstr ""
+"Nazwa grupy może zawierać tylko znaki alfanumeryczne, podkreślenia, "
+"kropki lub myślniki i musi zaczynać się znakiem alfanumerycznym"
+
+#: rhodecode/model/validators.py:177
 msgid "Cannot assign this group as parent"
 msgstr "Nie można przypisać do tej grupy jako rodzic"
 
-#: rhodecode/model/validators.py:176
+#: rhodecode/model/validators.py:178
 #, python-format
 msgid "Group \"%(group_name)s\" already exists"
 msgstr "Nazwa grupy \"%(group_name)s\" już istnieje"
 
-#: rhodecode/model/validators.py:178
+#: rhodecode/model/validators.py:180
 #, python-format
 msgid "Repository with name \"%(group_name)s\" already exists"
 msgstr "Repozytorium o nazwie \"%(group_name)s\" już istnieje"
 
-#: rhodecode/model/validators.py:236
+#: rhodecode/model/validators.py:238
 msgid "Invalid characters (non-ascii) in password"
 msgstr "Nieprawidłowe znaki (nie-ascii) w haśle"
 
-#: rhodecode/model/validators.py:251
+#: rhodecode/model/validators.py:253
 msgid "Passwords do not match"
 msgstr "Hasła różnią się"
 
-#: rhodecode/model/validators.py:268
+#: rhodecode/model/validators.py:270
 msgid "invalid password"
 msgstr "nieprawidłowe hasło"
 
-#: rhodecode/model/validators.py:269
+#: rhodecode/model/validators.py:271
 msgid "invalid user name"
 msgstr "niepoprawna nazwa użytkownika"
 
-#: rhodecode/model/validators.py:270
+#: rhodecode/model/validators.py:272
 msgid "Your account is disabled"
 msgstr "Twoje konto jest wyłączone"
 
-#: rhodecode/model/validators.py:314
+#: rhodecode/model/validators.py:316
 #, python-format
 msgid "Repository name %(repo)s is disallowed"
 msgstr "Nazwa repozytorium  %(repo)s jest zabroniona"
 
-#: rhodecode/model/validators.py:316
+#: rhodecode/model/validators.py:318
 #, python-format
 msgid "Repository named %(repo)s already exists"
 msgstr "Repozytorium o nazwie %(repo)s już istnieje"
 
-#: rhodecode/model/validators.py:317
-#, python-format
-msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\""
-msgstr "Repozytorium  \"%(repo)s\" już istnieje w grupie \"%(group)s\""
-
 #: rhodecode/model/validators.py:319
 #, python-format
-msgid "Repositories group with name \"%(repo)s\" already exists"
+msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\""
+msgstr "Repozytorium  \"%(repo)s\" już istnieje w grupie \"%(group)s\""
+
+#: rhodecode/model/validators.py:321
+#, fuzzy, python-format
+msgid "Repository group with name \"%(repo)s\" already exists"
 msgstr "Grupa repozytoriów z nazwą \"%(repo)s\" już istnieje"
 
-#: rhodecode/model/validators.py:432
+#: rhodecode/model/validators.py:438
 msgid "invalid clone url"
 msgstr "nieprawidłowe url klonowania"
 
-#: rhodecode/model/validators.py:433
+#: rhodecode/model/validators.py:439
 msgid "Invalid clone url, provide a valid clone http(s)/svn+http(s) url"
 msgstr "Nieprawidłowe url klonowania, wstaw prawidłowy url http(s)/svn+http(s)"
 
-#: rhodecode/model/validators.py:458
+#: rhodecode/model/validators.py:464
 msgid "Fork have to be the same type as parent"
 msgstr "Fork musi być tego samego typu, jak rodzic"
 
-#: rhodecode/model/validators.py:473
+#: rhodecode/model/validators.py:479
 msgid "You don't have permissions to create repository in this group"
 msgstr "Nie masz uprawnień do tworzenia repozytorium w tej grupie"
 
-#: rhodecode/model/validators.py:498
-msgid "This username or users group name is not valid"
+#: rhodecode/model/validators.py:481
+#, fuzzy
+msgid "no permission to create repository in root location"
+msgstr "Nie masz uprawnień do tworzenia repozytorium w tej grupie"
+
+#: rhodecode/model/validators.py:518
+#, fuzzy
+msgid "You don't have permissions to create a group in this location"
+msgstr "Nie masz uprawnień do tworzenia repozytorium w tej grupie"
+
+#: rhodecode/model/validators.py:557
+#, fuzzy
+msgid "This username or user group name is not valid"
 msgstr "Ta nazwa użytkownika lub grupy użytkowników nie jest prawidłowa"
 
-#: rhodecode/model/validators.py:591
+#: rhodecode/model/validators.py:650
 msgid "This is not a valid path"
 msgstr "To nie jest prawidłowa ścieżka"
 
-#: rhodecode/model/validators.py:606
+#: rhodecode/model/validators.py:665
 msgid "This e-mail address is already taken"
 msgstr "Ten adres e-mail jest już zajęty"
 
-#: rhodecode/model/validators.py:626
+#: rhodecode/model/validators.py:685
 #, python-format
 msgid "e-mail \"%(email)s\" does not exist."
 msgstr "e-mail \"%(email)s\" nie istnieje."
 
-#: rhodecode/model/validators.py:663
-msgid "The LDAP Login attribute of the CN must be specified - this is the name of the attribute that is equivalent to \"username\""
-msgstr "Atrybut logowania CN do LDAP należy określić, jest to nazwa atrybutu, który jest odpowiednikiem  \"username\""
-
-#: rhodecode/model/validators.py:682
+#: rhodecode/model/validators.py:722
+msgid ""
+"The LDAP Login attribute of the CN must be specified - this is the name "
+"of the attribute that is equivalent to \"username\""
+msgstr ""
+"Atrybut logowania CN do LDAP należy określić, jest to nazwa atrybutu, "
+"który jest odpowiednikiem  \"username\""
+
+#: rhodecode/model/validators.py:735
 #, python-format
 msgid "Revisions %(revs)s are already part of pull request or have set status"
 msgstr "Rewizja  %(revs)s jest już częścią  nowej gałęzi więc określ jego status"
 
-#: rhodecode/templates/index.html:3
+#: rhodecode/model/validators.py:767
+msgid "Please enter a valid IPv4 or IpV6 address"
+msgstr ""
+
+#: rhodecode/model/validators.py:768
+#, python-format
+msgid "The network size (bits) must be within the range of 0-32 (not %(bits)r)"
+msgstr ""
+
+#: rhodecode/model/validators.py:800
+msgid "Key name can only consist of letters, underscore, dash or numbers"
+msgstr ""
+
+#: rhodecode/templates/index.html:5
 msgid "Dashboard"
 msgstr "Repozytorium"
 
@@ -1315,208 +1534,229 @@
 #: rhodecode/templates/admin/repos/repos.html:9
 #: rhodecode/templates/admin/users/user_edit_my_account.html:31
 #: rhodecode/templates/admin/users/users.html:9
-#: rhodecode/templates/bookmarks/bookmarks.html:10
+#: rhodecode/templates/bookmarks/bookmarks.html:9
 #: rhodecode/templates/branches/branches.html:9
 #: rhodecode/templates/journal/journal.html:9
-#: rhodecode/templates/journal/journal.html:48
-#: rhodecode/templates/tags/tags.html:10
+#: rhodecode/templates/journal/journal.html:46
+#: rhodecode/templates/journal/journal.html:47
+#: rhodecode/templates/tags/tags.html:9
 msgid "quick filter..."
 msgstr "szybki filtr..."
 
 #: rhodecode/templates/index_base.html:6
 #: rhodecode/templates/admin/repos/repos.html:9
-#: rhodecode/templates/base/base.html:233
 msgid "repositories"
 msgstr "repozytoria"
 
 #: rhodecode/templates/index_base.html:13
-#: rhodecode/templates/index_base.html:15
+#: rhodecode/templates/index_base.html:18
+#: rhodecode/templates/admin/repos/repo_add.html:5
 #: rhodecode/templates/admin/repos/repos.html:21
-msgid "ADD REPOSITORY"
-msgstr "DODAJ REPOZYTORIUM"
-
-#: rhodecode/templates/index_base.html:29
-#: rhodecode/templates/index_base.html:136
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:32
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:32
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:33
+msgid "Add repository"
+msgstr "Dodaj repozytorium"
+
+#: rhodecode/templates/index_base.html:15
+#: rhodecode/templates/index_base.html:20
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:31
+#, fuzzy
+msgid "Add group"
+msgstr "edytuj grupy repo"
+
+#: rhodecode/templates/index_base.html:27
+#, fuzzy
+msgid "Edit group"
+msgstr "edytuj grupy repo"
+
+#: rhodecode/templates/index_base.html:27
+msgid "You have admin right to this group, and can edit it"
+msgstr ""
+
+#: rhodecode/templates/index_base.html:40
+#: rhodecode/templates/index_base.html:140
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:33
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:38
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:43
 #: rhodecode/templates/admin/users_groups/users_group_add.html:32
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:33
+#: rhodecode/templates/admin/users_groups/users_groups.html:34
 msgid "Group name"
 msgstr "Nazwa grupy"
 
-#: rhodecode/templates/index_base.html:30
-#: rhodecode/templates/index_base.html:72
-#: rhodecode/templates/index_base.html:138
-#: rhodecode/templates/index_base.html:176
-#: rhodecode/templates/index_base.html:266
+#: rhodecode/templates/index_base.html:41
+#: rhodecode/templates/index_base.html:83
+#: rhodecode/templates/index_base.html:142
+#: rhodecode/templates/index_base.html:180
+#: rhodecode/templates/index_base.html:270
 #: rhodecode/templates/admin/repos/repo_add_base.html:56
 #: rhodecode/templates/admin/repos/repo_edit.html:75
-#: rhodecode/templates/admin/repos/repos.html:72
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:41
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:41
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:34
-#: rhodecode/templates/forks/fork.html:59
-#: rhodecode/templates/settings/repo_settings.html:66
-#: rhodecode/templates/summary/summary.html:114
+#: rhodecode/templates/admin/repos/repos.html:73
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:42
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:47
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:44
+#: rhodecode/templates/forks/fork.html:56
+#: rhodecode/templates/pullrequests/pullrequest.html:101
+#: rhodecode/templates/summary/summary.html:106
 msgid "Description"
 msgstr "Opis"
 
-#: rhodecode/templates/index_base.html:40
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:47
-msgid "Repositories group"
-msgstr "Grupy w repozytorium"
-
-#: rhodecode/templates/index_base.html:71
-#: rhodecode/templates/index_base.html:174
-#: rhodecode/templates/index_base.html:264
+#: rhodecode/templates/index_base.html:51
+#: rhodecode/templates/admin/permissions/permissions.html:55
+#: rhodecode/templates/admin/repos/repo_add_base.html:29
+#: rhodecode/templates/admin/repos/repo_edit.html:49
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:57
+#: rhodecode/templates/forks/fork.html:47
+msgid "Repository group"
+msgstr "Repozytorium grupy"
+
+#: rhodecode/templates/index_base.html:82
+#: rhodecode/templates/index_base.html:178
+#: rhodecode/templates/index_base.html:268
 #: rhodecode/templates/admin/repos/repo_add_base.html:9
 #: rhodecode/templates/admin/repos/repo_edit.html:32
-#: rhodecode/templates/admin/repos/repos.html:70
-#: rhodecode/templates/admin/users/user_edit.html:196
-#: rhodecode/templates/admin/users/user_edit_my_account.html:59
-#: rhodecode/templates/admin/users/user_edit_my_account.html:180
-#: rhodecode/templates/admin/users/user_edit_my_account.html:216
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:6
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:184
-#: rhodecode/templates/bookmarks/bookmarks.html:36
+#: rhodecode/templates/admin/repos/repos.html:71
+#: rhodecode/templates/admin/users/user_edit_my_account.html:172
+#: rhodecode/templates/base/perms_summary.html:14
+#: rhodecode/templates/bookmarks/bookmarks.html:34
 #: rhodecode/templates/bookmarks/bookmarks_data.html:6
-#: rhodecode/templates/branches/branches.html:50
+#: rhodecode/templates/branches/branches.html:47
 #: rhodecode/templates/branches/branches_data.html:6
 #: rhodecode/templates/files/files_browser.html:47
-#: rhodecode/templates/journal/journal.html:70
-#: rhodecode/templates/journal/journal.html:196
-#: rhodecode/templates/journal/journal_page_repos.html:7
-#: rhodecode/templates/settings/repo_settings.html:31
-#: rhodecode/templates/summary/summary.html:43
-#: rhodecode/templates/summary/summary.html:132
-#: rhodecode/templates/tags/tags.html:51
+#: rhodecode/templates/journal/journal.html:193
+#: rhodecode/templates/journal/journal.html:296
+#: rhodecode/templates/summary/summary.html:55
+#: rhodecode/templates/summary/summary.html:124
+#: rhodecode/templates/tags/tags.html:48
 #: rhodecode/templates/tags/tags_data.html:6
 msgid "Name"
 msgstr "Nazwa"
 
-#: rhodecode/templates/index_base.html:73
+#: rhodecode/templates/index_base.html:84
 msgid "Last change"
 msgstr "Ostatnia aktywność"
 
-#: rhodecode/templates/index_base.html:74
-#: rhodecode/templates/index_base.html:179
-#: rhodecode/templates/admin/users/user_edit_my_account.html:182
-#: rhodecode/templates/journal/journal.html:198
+#: rhodecode/templates/index_base.html:85
+#: rhodecode/templates/index_base.html:183
+#: rhodecode/templates/index_base.html:273
+#: rhodecode/templates/admin/repos/repos.html:74
+#: rhodecode/templates/admin/users/user_edit_my_account.html:174
+#: rhodecode/templates/journal/journal.html:195
+#: rhodecode/templates/journal/journal.html:298
 msgid "Tip"
 msgstr "Ostatnia zmiana"
 
-#: rhodecode/templates/index_base.html:75
-#: rhodecode/templates/index_base.html:181
-#: rhodecode/templates/index_base.html:269
+#: rhodecode/templates/index_base.html:86
+#: rhodecode/templates/index_base.html:185
+#: rhodecode/templates/index_base.html:275
 #: rhodecode/templates/admin/repos/repo_edit.html:121
-#: rhodecode/templates/admin/repos/repos.html:73
+#: rhodecode/templates/admin/repos/repos.html:76
 msgid "Owner"
 msgstr "Właściciel"
 
-#: rhodecode/templates/index_base.html:76
-#: rhodecode/templates/summary/summary.html:48
-#: rhodecode/templates/summary/summary.html:51
-msgid "RSS"
-msgstr "RSS"
-
-#: rhodecode/templates/index_base.html:77
+#: rhodecode/templates/index_base.html:87
 msgid "Atom"
 msgstr "Atom"
 
-#: rhodecode/templates/index_base.html:167
-#: rhodecode/templates/index_base.html:207
-#: rhodecode/templates/index_base.html:291
-#: rhodecode/templates/admin/repos/repos.html:94
-#: rhodecode/templates/admin/users/user_edit_my_account.html:202
+#: rhodecode/templates/index_base.html:171
+#: rhodecode/templates/index_base.html:209
+#: rhodecode/templates/index_base.html:296
+#: rhodecode/templates/admin/repos/repos.html:97
+#: rhodecode/templates/admin/users/user_edit_my_account.html:196
 #: rhodecode/templates/admin/users/users.html:107
-#: rhodecode/templates/bookmarks/bookmarks.html:60
-#: rhodecode/templates/branches/branches.html:76
-#: rhodecode/templates/journal/journal.html:221
-#: rhodecode/templates/tags/tags.html:77
+#: rhodecode/templates/bookmarks/bookmarks.html:58
+#: rhodecode/templates/branches/branches.html:73
+#: rhodecode/templates/journal/journal.html:217
+#: rhodecode/templates/journal/journal.html:320
+#: rhodecode/templates/tags/tags.html:74
 msgid "Click to sort ascending"
 msgstr "Kliknij, aby posortować rosnąco"
 
-#: rhodecode/templates/index_base.html:168
-#: rhodecode/templates/index_base.html:208
-#: rhodecode/templates/index_base.html:292
-#: rhodecode/templates/admin/repos/repos.html:95
-#: rhodecode/templates/admin/users/user_edit_my_account.html:203
+#: rhodecode/templates/index_base.html:172
+#: rhodecode/templates/index_base.html:210
+#: rhodecode/templates/index_base.html:297
+#: rhodecode/templates/admin/repos/repos.html:98
+#: rhodecode/templates/admin/users/user_edit_my_account.html:197
 #: rhodecode/templates/admin/users/users.html:108
-#: rhodecode/templates/bookmarks/bookmarks.html:61
-#: rhodecode/templates/branches/branches.html:77
-#: rhodecode/templates/journal/journal.html:222
-#: rhodecode/templates/tags/tags.html:78
+#: rhodecode/templates/bookmarks/bookmarks.html:59
+#: rhodecode/templates/branches/branches.html:74
+#: rhodecode/templates/journal/journal.html:218
+#: rhodecode/templates/journal/journal.html:321
+#: rhodecode/templates/tags/tags.html:75
 msgid "Click to sort descending"
 msgstr "Kliknij, aby posortować malejąco"
 
-#: rhodecode/templates/index_base.html:177
-#: rhodecode/templates/index_base.html:267
+#: rhodecode/templates/index_base.html:181
+#: rhodecode/templates/index_base.html:271
 msgid "Last Change"
 msgstr "Ostatnia akytwność"
 
-#: rhodecode/templates/index_base.html:209
-#: rhodecode/templates/index_base.html:293
-#: rhodecode/templates/admin/repos/repos.html:96
-#: rhodecode/templates/admin/users/user_edit_my_account.html:204
+#: rhodecode/templates/index_base.html:211
+#: rhodecode/templates/admin/repos/repos.html:99
+#: rhodecode/templates/admin/users/user_edit_my_account.html:198
 #: rhodecode/templates/admin/users/users.html:109
-#: rhodecode/templates/bookmarks/bookmarks.html:62
-#: rhodecode/templates/branches/branches.html:78
-#: rhodecode/templates/journal/journal.html:223
-#: rhodecode/templates/tags/tags.html:79
+#: rhodecode/templates/bookmarks/bookmarks.html:60
+#: rhodecode/templates/branches/branches.html:75
+#: rhodecode/templates/journal/journal.html:219
+#: rhodecode/templates/journal/journal.html:322
+#: rhodecode/templates/tags/tags.html:76
 msgid "No records found."
 msgstr "Nie znaleziono rekordów."
 
-#: rhodecode/templates/index_base.html:210
-#: rhodecode/templates/index_base.html:294
-#: rhodecode/templates/admin/repos/repos.html:97
-#: rhodecode/templates/admin/users/user_edit_my_account.html:205
+#: rhodecode/templates/index_base.html:212
+#: rhodecode/templates/index_base.html:299
+#: rhodecode/templates/admin/repos/repos.html:100
+#: rhodecode/templates/admin/users/user_edit_my_account.html:199
 #: rhodecode/templates/admin/users/users.html:110
-#: rhodecode/templates/bookmarks/bookmarks.html:63
-#: rhodecode/templates/branches/branches.html:79
-#: rhodecode/templates/journal/journal.html:224
-#: rhodecode/templates/tags/tags.html:80
+#: rhodecode/templates/bookmarks/bookmarks.html:61
+#: rhodecode/templates/branches/branches.html:76
+#: rhodecode/templates/journal/journal.html:220
+#: rhodecode/templates/journal/journal.html:323
+#: rhodecode/templates/tags/tags.html:77
 msgid "Data error."
 msgstr "Błąd danych."
 
-#: rhodecode/templates/index_base.html:211
-#: rhodecode/templates/index_base.html:295
-#: rhodecode/templates/admin/repos/repos.html:98
-#: rhodecode/templates/admin/users/user_edit_my_account.html:206
+#: rhodecode/templates/index_base.html:213
+#: rhodecode/templates/index_base.html:300
+#: rhodecode/templates/admin/repos/repos.html:101
+#: rhodecode/templates/admin/users/user_edit_my_account.html:58
+#: rhodecode/templates/admin/users/user_edit_my_account.html:200
 #: rhodecode/templates/admin/users/users.html:111
-#: rhodecode/templates/bookmarks/bookmarks.html:64
-#: rhodecode/templates/branches/branches.html:80
-#: rhodecode/templates/journal/journal.html:62
-#: rhodecode/templates/journal/journal.html:225
-#: rhodecode/templates/tags/tags.html:81
+#: rhodecode/templates/bookmarks/bookmarks.html:62
+#: rhodecode/templates/branches/branches.html:77
+#: rhodecode/templates/journal/journal.html:221
+#: rhodecode/templates/journal/journal.html:324
+#: rhodecode/templates/tags/tags.html:78
 msgid "Loading..."
 msgstr "Wczytywanie..."
 
-#: rhodecode/templates/login.html:5
-#: rhodecode/templates/login.html:54
-msgid "Sign In"
+#: rhodecode/templates/index_base.html:298
+#, fuzzy
+msgid "No repositories found."
+msgstr "grupy w repozytorium"
+
+#: rhodecode/templates/login.html:5 rhodecode/templates/base/base.html:227
+msgid "Log In"
 msgstr "Zaloguj się"
 
 #: rhodecode/templates/login.html:21
-msgid "Sign In to"
-msgstr "Zarejestruj się"
-
-#: rhodecode/templates/login.html:31
-#: rhodecode/templates/register.html:20
+#, python-format
+msgid "Log In to %s"
+msgstr ""
+
+#: rhodecode/templates/login.html:31 rhodecode/templates/register.html:20
 #: rhodecode/templates/admin/admin_log.html:5
 #: rhodecode/templates/admin/users/user_add.html:32
-#: rhodecode/templates/admin/users/user_edit.html:50
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:26
-#: rhodecode/templates/base/base.html:83
-#: rhodecode/templates/summary/summary.html:131
+#: rhodecode/templates/admin/users/user_edit.html:57
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:31
+#: rhodecode/templates/admin/users/users.html:77
+#: rhodecode/templates/base/base.html:203
+#: rhodecode/templates/summary/summary.html:123
 msgid "Username"
 msgstr "Nazwa użytkownika"
 
-#: rhodecode/templates/login.html:40
-#: rhodecode/templates/register.html:29
+#: rhodecode/templates/login.html:40 rhodecode/templates/register.html:29
 #: rhodecode/templates/admin/ldap/ldap.html:46
 #: rhodecode/templates/admin/users/user_add.html:41
-#: rhodecode/templates/base/base.html:92
+#: rhodecode/templates/base/base.html:212
 msgid "Password"
 msgstr "Hasło"
 
@@ -1524,18 +1764,22 @@
 msgid "Remember me"
 msgstr "Zapamiętaj mnie"
 
+#: rhodecode/templates/login.html:54
+msgid "Sign In"
+msgstr "Zaloguj się"
+
 #: rhodecode/templates/login.html:60
 msgid "Forgot your password ?"
 msgstr "Zapomniałeś hasła?"
 
-#: rhodecode/templates/login.html:63
-#: rhodecode/templates/base/base.html:103
+#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:223
 msgid "Don't have an account ?"
 msgstr "Nie masz konta?"
 
 #: rhodecode/templates/password_reset.html:5
-msgid "Reset your password"
-msgstr "Zresetuj swoje hasło"
+#, fuzzy
+msgid "Password Reset"
+msgstr "łącze resetowania hasła"
 
 #: rhodecode/templates/password_reset.html:11
 msgid "Reset your password to"
@@ -1553,8 +1797,7 @@
 msgid "Password reset link will be send to matching email address"
 msgstr "Link do zresetowania hasła zostanie wysłany na adres e-mail"
 
-#: rhodecode/templates/register.html:5
-#: rhodecode/templates/register.html:74
+#: rhodecode/templates/register.html:5 rhodecode/templates/register.html:74
 msgid "Sign Up"
 msgstr "Zarejestruj się"
 
@@ -1568,23 +1811,23 @@
 
 #: rhodecode/templates/register.html:47
 #: rhodecode/templates/admin/users/user_add.html:59
-#: rhodecode/templates/admin/users/user_edit.html:90
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:53
+#: rhodecode/templates/admin/users/user_edit.html:97
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:62
 msgid "First Name"
 msgstr "Imię"
 
 #: rhodecode/templates/register.html:56
 #: rhodecode/templates/admin/users/user_add.html:68
-#: rhodecode/templates/admin/users/user_edit.html:99
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:62
+#: rhodecode/templates/admin/users/user_edit.html:106
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:71
 msgid "Last Name"
 msgstr "Nazwisko"
 
 #: rhodecode/templates/register.html:65
 #: rhodecode/templates/admin/users/user_add.html:77
-#: rhodecode/templates/admin/users/user_edit.html:108
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:71
-#: rhodecode/templates/summary/summary.html:133
+#: rhodecode/templates/admin/users/user_edit.html:115
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:80
+#: rhodecode/templates/summary/summary.html:125
 msgid "Email"
 msgstr "E-mail"
 
@@ -1596,44 +1839,31 @@
 msgid "Your account must wait for activation by administrator"
 msgstr "Twoje konto musi zostać aktywowane przez administratora"
 
-#: rhodecode/templates/repo_switcher_list.html:11
+#: rhodecode/templates/repo_switcher_list.html:10
 #: rhodecode/templates/admin/defaults/defaults.html:44
 #: rhodecode/templates/admin/repos/repo_add_base.html:65
 #: rhodecode/templates/admin/repos/repo_edit.html:85
-#: rhodecode/templates/settings/repo_settings.html:76
+#: rhodecode/templates/data_table/_dt_elements.html:61
+#: rhodecode/templates/summary/summary.html:77
 msgid "Private repository"
 msgstr "Prywatne repozytorium"
 
-#: rhodecode/templates/repo_switcher_list.html:16
+#: rhodecode/templates/repo_switcher_list.html:12
+#: rhodecode/templates/data_table/_dt_elements.html:63
+#: rhodecode/templates/summary/summary.html:79
 msgid "Public repository"
 msgstr "Publiczne repozytorium"
 
-#: rhodecode/templates/switch_to_list.html:3
-#: rhodecode/templates/branches/branches.html:14
-msgid "branches"
-msgstr "gałęzie"
-
 #: rhodecode/templates/switch_to_list.html:10
 #: rhodecode/templates/branches/branches_data.html:57
 msgid "There are no branches yet"
 msgstr "Nie ma jeszcze gałęzi"
 
-#: rhodecode/templates/switch_to_list.html:15
-#: rhodecode/templates/shortlog/shortlog_data.html:10
-#: rhodecode/templates/tags/tags.html:15
-msgid "tags"
-msgstr "Tagi"
-
 #: rhodecode/templates/switch_to_list.html:22
 #: rhodecode/templates/tags/tags_data.html:38
 msgid "There are no tags yet"
 msgstr "Nie ma jeszcze tagów"
 
-#: rhodecode/templates/switch_to_list.html:28
-#: rhodecode/templates/bookmarks/bookmarks.html:15
-msgid "bookmarks"
-msgstr "zakładki"
-
 #: rhodecode/templates/switch_to_list.html:35
 #: rhodecode/templates/bookmarks/bookmarks_data.html:32
 msgid "There are no bookmarks yet"
@@ -1641,6 +1871,7 @@
 
 #: rhodecode/templates/admin/admin.html:5
 #: rhodecode/templates/admin/admin.html:13
+#: rhodecode/templates/base/base.html:68
 msgid "Admin journal"
 msgstr "Dziennik administratora"
 
@@ -1663,11 +1894,13 @@
 msgstr[2] "%s wejść"
 
 #: rhodecode/templates/admin/admin_log.html:6
-#: rhodecode/templates/admin/repos/repos.html:74
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:8
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:9
-#: rhodecode/templates/journal/journal_page_repos.html:9
-#: rhodecode/templates/journal/journal_page_repos.html:10
+#: rhodecode/templates/admin/repos/repos.html:77
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46
+#: rhodecode/templates/admin/users/user_edit_my_account.html:176
+#: rhodecode/templates/admin/users/users.html:87
+#: rhodecode/templates/admin/users_groups/users_groups.html:37
+#: rhodecode/templates/journal/journal.html:197
+#: rhodecode/templates/journal/journal.html:300
 msgid "Action"
 msgstr "Działanie"
 
@@ -1677,11 +1910,11 @@
 msgstr "Repozytorium"
 
 #: rhodecode/templates/admin/admin_log.html:8
-#: rhodecode/templates/bookmarks/bookmarks.html:37
+#: rhodecode/templates/bookmarks/bookmarks.html:35
 #: rhodecode/templates/bookmarks/bookmarks_data.html:7
-#: rhodecode/templates/branches/branches.html:51
+#: rhodecode/templates/branches/branches.html:48
 #: rhodecode/templates/branches/branches_data.html:7
-#: rhodecode/templates/tags/tags.html:52
+#: rhodecode/templates/tags/tags.html:49
 #: rhodecode/templates/tags/tags_data.html:7
 msgid "Date"
 msgstr "Data"
@@ -1700,6 +1933,7 @@
 msgstr "Repozytoria domyślne"
 
 #: rhodecode/templates/admin/defaults/defaults.html:11
+#: rhodecode/templates/base/base.html:75
 msgid "Defaults"
 msgstr "Domyślne"
 
@@ -1712,10 +1946,13 @@
 #: rhodecode/templates/admin/defaults/defaults.html:48
 #: rhodecode/templates/admin/repos/repo_add_base.html:69
 #: rhodecode/templates/admin/repos/repo_edit.html:89
-#: rhodecode/templates/forks/fork.html:72
-#: rhodecode/templates/settings/repo_settings.html:80
-msgid "Private repositories are only visible to people explicitly added as collaborators."
-msgstr "Prywatne repozytoria są widoczne tylko dla osób bezpośrednio dodanych jako współpracownicy."
+#: rhodecode/templates/forks/fork.html:69
+msgid ""
+"Private repositories are only visible to people explicitly added as "
+"collaborators."
+msgstr ""
+"Prywatne repozytoria są widoczne tylko dla osób bezpośrednio dodanych "
+"jako współpracownicy."
 
 #: rhodecode/templates/admin/defaults/defaults.html:55
 #: rhodecode/templates/admin/repos/repo_edit.html:94
@@ -1739,7 +1976,7 @@
 
 #: rhodecode/templates/admin/defaults/defaults.html:75
 #: rhodecode/templates/admin/repos/repo_edit.html:112
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:66
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:72
 msgid "Enable locking"
 msgstr "Włącz blokowanie"
 
@@ -1750,14 +1987,18 @@
 
 #: rhodecode/templates/admin/defaults/defaults.html:84
 #: rhodecode/templates/admin/ldap/ldap.html:89
-#: rhodecode/templates/admin/repos/repo_edit.html:141
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:74
+#: rhodecode/templates/admin/permissions/permissions.html:92
+#: rhodecode/templates/admin/repos/repo_edit.html:148
+#: rhodecode/templates/admin/repos/repo_edit.html:173
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:80
 #: rhodecode/templates/admin/settings/hooks.html:73
-#: rhodecode/templates/admin/users/user_edit.html:133
-#: rhodecode/templates/admin/users/user_edit.html:178
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:79
+#: rhodecode/templates/admin/users/user_add.html:94
+#: rhodecode/templates/admin/users/user_edit.html:140
+#: rhodecode/templates/admin/users/user_edit.html:185
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:88
+#: rhodecode/templates/admin/users_groups/users_group_add.html:49
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:90
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:135
-#: rhodecode/templates/settings/repo_settings.html:94
 msgid "Save"
 msgstr "Zapisz"
 
@@ -1766,8 +2007,11 @@
 msgstr "Administracja LDAP"
 
 #: rhodecode/templates/admin/ldap/ldap.html:11
-msgid "Ldap"
-msgstr "Ldap"
+#: rhodecode/templates/admin/users/users.html:86
+#: rhodecode/templates/base/base.html:74
+#, fuzzy
+msgid "LDAP"
+msgstr "ldap"
 
 #: rhodecode/templates/admin/ldap/ldap.html:28
 msgid "Connection settings"
@@ -1847,8 +2091,7 @@
 msgstr "Komentarze"
 
 #: rhodecode/templates/admin/notifications/notifications.html:31
-#: rhodecode/templates/base/base.html:267
-#: rhodecode/templates/base/base.html:269
+#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8
 msgid "Pull requests"
 msgstr "Połączone gałęzie"
 
@@ -1866,6 +2109,7 @@
 msgstr "Pokaż powiadomienia"
 
 #: rhodecode/templates/admin/notifications/show_notification.html:9
+#: rhodecode/templates/base/base.html:241
 msgid "Notifications"
 msgstr "Powiadomienia"
 
@@ -1874,11 +2118,12 @@
 msgstr "Uprawnienia administracji"
 
 #: rhodecode/templates/admin/permissions/permissions.html:11
-#: rhodecode/templates/admin/repos/repo_edit.html:134
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:58
-#: rhodecode/templates/admin/users/user_edit.html:143
+#: rhodecode/templates/admin/repos/repo_edit.html:158
+#: rhodecode/templates/admin/repos/repo_edit.html:165
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:64
+#: rhodecode/templates/admin/users/user_edit.html:150
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:100
-#: rhodecode/templates/settings/repo_settings.html:86
+#: rhodecode/templates/base/base.html:73
 msgid "Permissions"
 msgstr "Uprawnienia"
 
@@ -1891,26 +2136,32 @@
 msgstr "Dostęp anonimowy"
 
 #: rhodecode/templates/admin/permissions/permissions.html:49
-msgid "All default permissions on each repository will be reset to choosen permission, note that all custom default permission on repositories will be lost"
-msgstr "Wszystkie uprawnienia domyślne każdego repozytorium zostaną przywrócone. Wybrane uprawnienie zostaną skasowane. Pamiętaj, że wszystkie niestandardowe uprawnienia w repozytoriach zostaną utracone."
+#, fuzzy
+msgid ""
+"All default permissions on each repository will be reset to chosen "
+"permission, note that all custom default permission on repositories will "
+"be lost"
+msgstr ""
+"Wszystkie uprawnienia domyślne każdego repozytorium zostaną przywrócone. "
+"Wybrane uprawnienie zostaną skasowane. Pamiętaj, że wszystkie "
+"niestandardowe uprawnienia w repozytoriach zostaną utracone."
 
 #: rhodecode/templates/admin/permissions/permissions.html:50
 #: rhodecode/templates/admin/permissions/permissions.html:63
-msgid "overwrite existing settings"
+#, fuzzy
+msgid "Overwrite existing settings"
 msgstr "Nadpisz ustawienia"
 
-#: rhodecode/templates/admin/permissions/permissions.html:55
-#: rhodecode/templates/admin/repos/repo_add_base.html:29
-#: rhodecode/templates/admin/repos/repo_edit.html:49
-#: rhodecode/templates/admin/repos_groups/repos_groups.html:4
-#: rhodecode/templates/forks/fork.html:50
-#: rhodecode/templates/settings/repo_settings.html:48
-msgid "Repository group"
-msgstr "Repozytorium grupy"
-
 #: rhodecode/templates/admin/permissions/permissions.html:62
-msgid "All default permissions on each repository group will be reset to choosen permission, note that all custom default permission on repositories group will be lost"
-msgstr "Wszystkie uprawnienia domyślne każdego repozytorium zostaną przywrócone. Wybrane uprawnienie zostaną skasowane. Pamiętaj, że wszystkie niestandardowe uprawnienia w repozytoriach zostaną utracone."
+#, fuzzy
+msgid ""
+"All default permissions on each repository group will be reset to chosen "
+"permission, note that all custom default permission on repository groups "
+"will be lost"
+msgstr ""
+"Wszystkie uprawnienia domyślne każdego repozytorium zostaną przywrócone. "
+"Wybrane uprawnienie zostaną skasowane. Pamiętaj, że wszystkie "
+"niestandardowe uprawnienia w repozytoriach zostaną utracone."
 
 #: rhodecode/templates/admin/permissions/permissions.html:69
 msgid "Registration"
@@ -1924,40 +2175,99 @@
 msgid "Repository forking"
 msgstr "Rozwidlanie repozytorium"
 
-#: rhodecode/templates/admin/permissions/permissions.html:92
-#: rhodecode/templates/admin/repos/repo_edit.html:264
-msgid "set"
-msgstr "ustaw"
-
-#: rhodecode/templates/admin/repos/repo_add.html:5
-#: rhodecode/templates/admin/repos/repo_add_create_repository.html:5
-msgid "Add repository"
-msgstr "Dodaj repozytorium"
-
-#: rhodecode/templates/admin/repos/repo_add.html:11
-#: rhodecode/templates/admin/repos/repo_edit.html:11
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:10
+#: rhodecode/templates/admin/permissions/permissions.html:93
+#: rhodecode/templates/admin/permissions/permissions.html:154
+#: rhodecode/templates/admin/repos/repo_edit.html:149
+#: rhodecode/templates/admin/repos/repo_edit.html:174
+#: rhodecode/templates/admin/repos/repo_edit.html:388
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:81
+#: rhodecode/templates/admin/settings/settings.html:115
+#: rhodecode/templates/admin/settings/settings.html:187
+#: rhodecode/templates/admin/settings/settings.html:278
+#: rhodecode/templates/admin/users/user_edit.html:141
+#: rhodecode/templates/admin/users/user_edit.html:186
+#: rhodecode/templates/admin/users/user_edit.html:235
+#: rhodecode/templates/admin/users/user_edit.html:283
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:89
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:136
+#: rhodecode/templates/files/files_add.html:80
+#: rhodecode/templates/files/files_edit.html:66
+#: rhodecode/templates/pullrequests/pullrequest.html:110
+msgid "Reset"
+msgstr "Zresetuj"
+
+#: rhodecode/templates/admin/permissions/permissions.html:103
+#, fuzzy
+msgid "Default User Permissions"
+msgstr "Domyślne uprawnienia"
+
+#: rhodecode/templates/admin/permissions/permissions.html:113
+#: rhodecode/templates/admin/users/user_edit.html:244
+#, fuzzy
+msgid "Allowed IP addresses"
+msgstr "Adresy e-mail"
+
+#: rhodecode/templates/admin/permissions/permissions.html:127
+#: rhodecode/templates/admin/repos/repo_edit.html:347
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:70
+#: rhodecode/templates/admin/users/user_edit.html:212
+#: rhodecode/templates/admin/users/user_edit.html:257
+#: rhodecode/templates/admin/users_groups/users_groups.html:46
+#: rhodecode/templates/data_table/_dt_elements.html:122
+#: rhodecode/templates/data_table/_dt_elements.html:130
+msgid "delete"
+msgstr "usuń"
+
+#: rhodecode/templates/admin/permissions/permissions.html:128
+#: rhodecode/templates/admin/users/user_edit.html:258
+#, fuzzy, python-format
+msgid "Confirm to delete this ip: %s"
+msgstr "Potwierdź, aby usunąć ten e-mail: %s"
+
+#: rhodecode/templates/admin/permissions/permissions.html:134
+#: rhodecode/templates/admin/users/user_edit.html:264
+msgid "All IP addresses are allowed"
+msgstr ""
+
+#: rhodecode/templates/admin/permissions/permissions.html:145
+#: rhodecode/templates/admin/users/user_edit.html:275
+#, fuzzy
+msgid "New ip address"
+msgstr "Nowy adres e-mail"
+
+#: rhodecode/templates/admin/permissions/permissions.html:153
+#: rhodecode/templates/admin/repos/repo_add_base.html:73
+#: rhodecode/templates/admin/repos/repo_edit.html:387
+#: rhodecode/templates/admin/users/user_edit.html:234
+#: rhodecode/templates/admin/users/user_edit.html:282
+msgid "Add"
+msgstr "Dodaj"
+
+#: rhodecode/templates/admin/repos/repo_add.html:12
+#: rhodecode/templates/admin/repos/repo_add.html:16
+#: rhodecode/templates/base/base.html:69 rhodecode/templates/base/base.html:103
+#: rhodecode/templates/base/base.html:263
 msgid "Repositories"
 msgstr "Repozytoria"
 
-#: rhodecode/templates/admin/repos/repo_add.html:13
-msgid "add new"
+#: rhodecode/templates/admin/repos/repo_add.html:19
+#, fuzzy
+msgid "Add new"
 msgstr "dodaj nowe"
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:20
-#: rhodecode/templates/summary/summary.html:104
-#: rhodecode/templates/summary/summary.html:105
+#: rhodecode/templates/summary/summary.html:96
+#: rhodecode/templates/summary/summary.html:97
 msgid "Clone from"
 msgstr "Klonuj z"
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:24
 #: rhodecode/templates/admin/repos/repo_edit.html:44
-#: rhodecode/templates/settings/repo_settings.html:43
 msgid "Optional http[s] url from which repository should be cloned."
 msgstr "Opcjonalnie http[s] url z którego repozytorium powinno być klonowane."
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:33
-#: rhodecode/templates/forks/fork.html:54
+#: rhodecode/templates/forks/fork.html:51
 msgid "Optionaly select a group to put this repository into."
 msgstr "Opcjonalnie wybierz grupę do wprowadzenia tego repozytorium."
 
@@ -1967,57 +2277,39 @@
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:47
 #: rhodecode/templates/admin/repos/repo_edit.html:66
-#: rhodecode/templates/forks/fork.html:41
-#: rhodecode/templates/settings/repo_settings.html:57
+#: rhodecode/templates/forks/fork.html:38
 msgid "Landing revision"
 msgstr "Docelowa rewizja"
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:51
 #: rhodecode/templates/admin/repos/repo_edit.html:70
-#: rhodecode/templates/forks/fork.html:45
-#: rhodecode/templates/settings/repo_settings.html:61
+#: rhodecode/templates/forks/fork.html:42
 msgid "Default revision for files page, downloads, whoosh and readme"
 msgstr "Wersja domyślna dla plików stronicowania, pobierania plików, readme"
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:60
 #: rhodecode/templates/admin/repos/repo_edit.html:79
-#: rhodecode/templates/forks/fork.html:63
-#: rhodecode/templates/settings/repo_settings.html:70
+#: rhodecode/templates/forks/fork.html:60
 msgid "Keep it short and to the point. Use a README file for longer descriptions."
 msgstr "Powinna być krótka i na temat. Użyj pliku README dla dłuższych opisów."
 
-#: rhodecode/templates/admin/repos/repo_add_base.html:73
-msgid "add"
-msgstr "dodaj"
-
-#: rhodecode/templates/admin/repos/repo_add_create_repository.html:9
-msgid "add new repository"
-msgstr "dodaj nowe repozytorium"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:5
+#: rhodecode/templates/admin/repos/repo_edit.html:8
 msgid "Edit repository"
 msgstr "Edytuj repozytorium"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:13
-#: rhodecode/templates/admin/users/user_edit.html:13
-#: rhodecode/templates/admin/users/user_edit.html:228
-#: rhodecode/templates/admin/users/user_edit.html:230
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:28
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:13
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:207
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:209
-#: rhodecode/templates/files/files_source.html:29
-#: rhodecode/templates/journal/journal_page_repos.html:29
-msgid "edit"
-msgstr "edycja"
+#: rhodecode/templates/admin/repos/repo_edit.html:12
+#: rhodecode/templates/admin/settings/hooks.html:9
+#: rhodecode/templates/admin/settings/settings.html:11
+#: rhodecode/templates/base/base.html:76 rhodecode/templates/base/base.html:121
+#: rhodecode/templates/summary/summary.html:212
+msgid "Settings"
+msgstr "Ustawienia"
 
 #: rhodecode/templates/admin/repos/repo_edit.html:40
-#: rhodecode/templates/settings/repo_settings.html:39
 msgid "Clone uri"
 msgstr "Klonowane uri"
 
 #: rhodecode/templates/admin/repos/repo_edit.html:53
-#: rhodecode/templates/settings/repo_settings.html:52
 msgid "Optional select a group to put this repository into."
 msgstr "Opcjonalnie wybierz grupę do wprowadzenia tego repozytorium."
 
@@ -2025,169 +2317,221 @@
 msgid "Change owner of this repository."
 msgstr "Zmiana właściciela tego repozytorium."
 
-#: rhodecode/templates/admin/repos/repo_edit.html:142
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:75
-#: rhodecode/templates/admin/settings/settings.html:113
-#: rhodecode/templates/admin/settings/settings.html:179
-#: rhodecode/templates/admin/settings/settings.html:269
-#: rhodecode/templates/admin/users/user_edit.html:134
-#: rhodecode/templates/admin/users/user_edit.html:179
-#: rhodecode/templates/admin/users/user_edit.html:282
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:80
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:136
-#: rhodecode/templates/files/files_add.html:82
-#: rhodecode/templates/files/files_edit.html:68
-#: rhodecode/templates/pullrequests/pullrequest.html:124
-#: rhodecode/templates/settings/repo_settings.html:95
-msgid "Reset"
-msgstr "Zresetuj"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:152
-msgid "Administration"
-msgstr "Administracja"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:155
+#: rhodecode/templates/admin/repos/repo_edit.html:184
+#, fuzzy
+msgid "Advanced settings"
+msgstr "Zapisz ustawienia"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:187
 msgid "Statistics"
 msgstr "Statystyki"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:159
+#: rhodecode/templates/admin/repos/repo_edit.html:191
 msgid "Reset current statistics"
 msgstr "Zresetuj bieżące statystyki"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:159
+#: rhodecode/templates/admin/repos/repo_edit.html:191
 msgid "Confirm to remove current statistics"
 msgstr "Potwierdź usunięcie aktualnych statystyk"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:162
+#: rhodecode/templates/admin/repos/repo_edit.html:194
 msgid "Fetched to rev"
 msgstr "Ściągnięte do rev"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:163
+#: rhodecode/templates/admin/repos/repo_edit.html:195
 msgid "Stats gathered"
 msgstr "statystyki zgromadzone"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:171
-msgid "Remote"
-msgstr "Zdalnie"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:175
-msgid "Pull changes from remote location"
-msgstr "Prożba połączenia zmian z lokalizacji zdalnej"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:175
-msgid "Confirm to pull changes from remote side"
-msgstr "Potwierdź pull z zdalnej strony"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:186
-msgid "Cache"
-msgstr "Pamięć podręczna"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:190
-msgid "Invalidate repository cache"
-msgstr "Unieważnij pamięć podręczną repozytorium"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:190
-msgid "Confirm to invalidate repository cache"
-msgstr "Potwierdź unieważnienie pamięci podręcznej repozytorium"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:193
-msgid "Manually invalidate cache for this repository. On first access repository will be cached again"
-msgstr "Ręcznie unieważnienie cache dla tego repozytorium. Przy pierwszym dostępie do repozytorium zostanie dodany do bufora ponownie"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:198
-msgid "List of cached values"
-msgstr "Lista buforowanych wartości"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:201
-msgid "Prefix"
-msgstr "Prefiks"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:202
-msgid "Key"
-msgstr "Klucz"
-
 #: rhodecode/templates/admin/repos/repo_edit.html:203
-#: rhodecode/templates/admin/users/user_add.html:86
-#: rhodecode/templates/admin/users/user_edit.html:117
-#: rhodecode/templates/admin/users_groups/users_group_add.html:41
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:42
-msgid "Active"
-msgstr "Aktywny"
+msgid "Remote"
+msgstr "Zdalnie"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:207
+msgid "Pull changes from remote location"
+msgstr "Pobierz z zdalnej lokalizacji"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:207
+msgid "Confirm to pull changes from remote side"
+msgstr "Potwierdź pull z zdalnej strony"
 
 #: rhodecode/templates/admin/repos/repo_edit.html:218
-#: rhodecode/templates/base/base.html:331
-#: rhodecode/templates/base/base.html:333
-#: rhodecode/templates/base/base.html:335
+msgid "Cache"
+msgstr "Pamięć podręczna"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:222
+msgid "Invalidate repository cache"
+msgstr "Unieważnij pamięć podręczną repozytorium"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:222
+msgid "Confirm to invalidate repository cache"
+msgstr "Potwierdź unieważnienie pamięci podręcznej repozytorium"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:225
+msgid ""
+"Manually invalidate cache for this repository. On first access repository"
+" will be cached again"
+msgstr ""
+"Ręcznie unieważnienie cache dla tego repozytorium. Przy pierwszym "
+"dostępie do repozytorium zostanie dodany do bufora ponownie"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:230
+msgid "List of cached values"
+msgstr "Lista buforowanych wartości"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:233
+msgid "Prefix"
+msgstr "Prefiks"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:234
+msgid "Key"
+msgstr "Klucz"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:235
+#: rhodecode/templates/admin/users/user_add.html:86
+#: rhodecode/templates/admin/users/user_edit.html:124
+#: rhodecode/templates/admin/users/users.html:84
+#: rhodecode/templates/admin/users_groups/users_group_add.html:41
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:42
+#: rhodecode/templates/admin/users_groups/users_groups.html:36
+msgid "Active"
+msgstr "Aktywny"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:250
+#: rhodecode/templates/base/base.html:280
+#: rhodecode/templates/base/base.html:281
 msgid "Public journal"
 msgstr "Dziennik publiczny"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:224
+#: rhodecode/templates/admin/repos/repo_edit.html:256
 msgid "Remove from public journal"
 msgstr "Usuń z dziennika publicznego"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:226
+#: rhodecode/templates/admin/repos/repo_edit.html:258
 msgid "Add to public journal"
 msgstr "Dodaj do dziennika publicznego"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:231
-msgid "All actions made on this repository will be accessible to everyone in public journal"
-msgstr "Wszystkie działania wykonywane na tym repozytorium będą dostępne dla wszystkich w dzienniku publicznym"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:238
+#: rhodecode/templates/admin/repos/repo_edit.html:263
+msgid ""
+"All actions made on this repository will be accessible to everyone in "
+"public journal"
+msgstr ""
+"Wszystkie działania wykonywane na tym repozytorium będą dostępne dla "
+"wszystkich w dzienniku publicznym"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:270
 msgid "Locking"
 msgstr "Blokuj"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:243
+#: rhodecode/templates/admin/repos/repo_edit.html:275
 msgid "Unlock locked repo"
 msgstr "Odblokuj zablokowane repo"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:243
+#: rhodecode/templates/admin/repos/repo_edit.html:275
 msgid "Confirm to unlock repository"
 msgstr "Potwierdź odblokowanie repozytorium"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:246
+#: rhodecode/templates/admin/repos/repo_edit.html:278
 msgid "lock repo"
 msgstr "blokada repo"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:246
+#: rhodecode/templates/admin/repos/repo_edit.html:278
 msgid "Confirm to lock repository"
 msgstr "Potwierdź blokowanie repozytorium"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:247
+#: rhodecode/templates/admin/repos/repo_edit.html:279
 msgid "Repository is not locked"
 msgstr "Repozytorium nie jest zablokowane"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:252
+#: rhodecode/templates/admin/repos/repo_edit.html:284
 msgid "Force locking on repository. Works only when anonymous access is disabled"
-msgstr "Wymuś blokowanie na repozytorium. Działa tylko wtedy, gdy dostęp anonimowy jest wyłączony"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:259
+msgstr ""
+"Wymuś blokowanie na repozytorium. Działa tylko wtedy, gdy dostęp "
+"anonimowy jest wyłączony"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:291
 msgid "Set as fork of"
 msgstr "Ustaw jako rozwidlenie"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:268
+#: rhodecode/templates/admin/repos/repo_edit.html:296
+msgid "set"
+msgstr "ustaw"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:300
 msgid "Manually set this repository as a fork of another from the list"
 msgstr "Ręczne ustawienie rozwidlenia z listy"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:274
-#: rhodecode/templates/changeset/changeset_file_comment.html:26
+#: rhodecode/templates/admin/repos/repo_edit.html:306
+#: rhodecode/templates/changeset/changeset_file_comment.html:41
 msgid "Delete"
 msgstr "Usuń"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:278
-#: rhodecode/templates/settings/repo_settings.html:115
+#: rhodecode/templates/admin/repos/repo_edit.html:315
 msgid "Remove this repository"
 msgstr "Usuń to repozytorium"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:278
-#: rhodecode/templates/settings/repo_settings.html:115
+#: rhodecode/templates/admin/repos/repo_edit.html:315
 msgid "Confirm to delete this repository"
 msgstr "Potwierdź, aby usunąć repozytorium"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:282
-#: rhodecode/templates/settings/repo_settings.html:119
-msgid "This repository will be renamed in a special way in order to be unaccesible for RhodeCode and VCS systems. If you need fully delete it from file system please do it manually"
-msgstr "To repozytorium zostanie zmienione w sposób szczególny, żeby było niedostępne dla strony i systemów VCS. Jeśli chcesz całkowicie usunąć go z systemu plików prosimy zrobić to ręcznie"
+#: rhodecode/templates/admin/repos/repo_edit.html:317
+#, fuzzy, python-format
+msgid "this repository has %s fork"
+msgid_plural "this repository has %s forks"
+msgstr[0] "to repozytorium ma %s fork"
+msgstr[1] "to repozytorium ma %s forki"
+msgstr[2] "to repozytorium ma %s forków"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:318
+#, fuzzy
+msgid "Detach forks"
+msgstr "Ustaw jako rozwidlenie"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:319
+#, fuzzy
+msgid "Delete forks"
+msgstr "usuń"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:322
+#, fuzzy
+msgid ""
+"This repository will be renamed in a special way in order to be "
+"unaccesible for RhodeCode and VCS systems. If you need to fully delete it"
+" from file system please do it manually"
+msgstr ""
+"To repozytorium zostanie zmienione w sposób szczególny, żeby było "
+"niedostępne dla strony i systemów VCS. Jeśli chcesz całkowicie usunąć go "
+"z systemu plików prosimy zrobić to ręcznie"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:336
+msgid "Extra fields"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:348
+#, fuzzy, python-format
+msgid "Confirm to delete this field: %s"
+msgstr "Potwierdź, aby usunąć ten e-mail: %s"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:362
+#, fuzzy
+msgid "New field key"
+msgstr "dodaj nowy plik"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:370
+msgid "New field label"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:373
+msgid "Enter short label"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:379
+#, fuzzy
+msgid "New field description"
+msgstr "opis"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:382
+msgid "Enter description of a field"
+msgstr ""
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:3
 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:3
@@ -2206,8 +2550,6 @@
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:6
 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:6
-#: rhodecode/templates/admin/users/users.html:85
-#: rhodecode/templates/base/base.html:229
 msgid "admin"
 msgstr "administracja"
 
@@ -2217,79 +2559,63 @@
 msgstr "użytkownik"
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:16
-#: rhodecode/templates/data_table/_dt_elements.html:67
-#: rhodecode/templates/journal/journal.html:95
-#: rhodecode/templates/summary/summary.html:85
 msgid "private repository"
 msgstr "prywatne repozytorium"
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:19
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:28
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:18
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:20
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:35
 msgid "default"
 msgstr "domyślne"
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:33
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:58
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:23
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:42
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:25
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:55
 msgid "revoke"
 msgstr "odwołane"
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:83
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:67
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:80
 msgid "Add another member"
 msgstr "Dodaj kolejnego użytkownika"
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:97
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:100
 msgid "Failed to remove user"
 msgstr "Nie udało się usunąć użytkownika"
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:112
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:103
-msgid "Failed to remove users group"
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:116
+#, fuzzy
+msgid "Failed to remove user group"
 msgstr "Nie udało się usunąć grupy użytkowników"
 
 #: rhodecode/templates/admin/repos/repos.html:5
 msgid "Repositories administration"
 msgstr "Administracja repozytoriami"
 
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:73
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:86
 #, fuzzy
 msgid "apply to children"
 msgstr "dotyczy dzieci"
 
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:74
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87
 #, fuzzy
-msgid "Set or revoke permission to all children of that group, including repositories and other groups"
-msgstr "Ustawia lub cofa uprawnienia do wszystkich dzieci z tej grupy, w tym repozytoria oraz innych grup"
+msgid ""
+"Set or revoke permission to all children of that group, including non-"
+"private repositories and other groups"
+msgstr ""
+"Ustawia lub cofa uprawnienia do wszystkich dzieci z tej grupy, w tym "
+"repozytoria oraz innych grup"
+
+#: rhodecode/templates/admin/repos_groups/repos_groups.html:4
+#, python-format
+msgid "%s Group Dashboard"
+msgstr "%s Grupa"
 
 #: rhodecode/templates/admin/repos_groups/repos_groups.html:9
-#: rhodecode/templates/base/base.html:122
-#: rhodecode/templates/base/base.html:313
-#: rhodecode/templates/base/base.html:315
-#: rhodecode/templates/base/base.html:317
-#: rhodecode/templates/bookmarks/bookmarks.html:11
-#: rhodecode/templates/branches/branches.html:10
-#: rhodecode/templates/changelog/changelog.html:10
-#: rhodecode/templates/changeset/changeset.html:10
-#: rhodecode/templates/changeset/changeset_range.html:9
-#: rhodecode/templates/compare/compare_diff.html:9
-#: rhodecode/templates/files/file_diff.html:8
-#: rhodecode/templates/files/files.html:8
-#: rhodecode/templates/files/files_add.html:15
-#: rhodecode/templates/files/files_edit.html:15
-#: rhodecode/templates/followers/followers.html:9
-#: rhodecode/templates/forks/fork.html:9
-#: rhodecode/templates/forks/forks.html:9
-#: rhodecode/templates/pullrequests/pullrequest.html:8
-#: rhodecode/templates/pullrequests/pullrequest_show.html:8
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8
-#: rhodecode/templates/settings/repo_settings.html:9
-#: rhodecode/templates/shortlog/shortlog.html:10
-#: rhodecode/templates/summary/summary.html:8
-#: rhodecode/templates/tags/tags.html:11
 msgid "Home"
 msgstr "Strona Główna"
 
@@ -2298,70 +2624,79 @@
 msgstr "używając"
 
 #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:5
-msgid "Add repos group"
-msgstr "Dodaj grupę repos"
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:10
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:10
-msgid "Repos groups"
-msgstr "Grupy repos"
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:12
-msgid "add new repos group"
+#, fuzzy
+msgid "Add repository group"
+msgstr "Repozytorium grupy"
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:11
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:11
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:16
+#: rhodecode/templates/base/base.html:70 rhodecode/templates/base/base.html:82
+#, fuzzy
+msgid "Repository groups"
+msgstr "Repozytorium grupy"
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:13
+#, fuzzy
+msgid "Add new repository group"
 msgstr "dodaj nową grupę repozytorium"
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:50
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:50
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:51
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:56
 msgid "Group parent"
-msgstr "Dominująca grupa"
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:58
-#: rhodecode/templates/admin/users/user_add.html:94
-#: rhodecode/templates/admin/users_groups/users_group_add.html:49
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:90
-#: rhodecode/templates/pullrequests/pullrequest_show.html:131
+msgstr "Rodzic gropy"
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:59
 msgid "save"
 msgstr "zapisz"
 
 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:5
-msgid "Edit repos group"
-msgstr "Edytuj grupy repo"
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:12
-msgid "edit repos group"
+#, fuzzy
+msgid "Edit repository group"
 msgstr "edytuj grupy repo"
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:70
-msgid "Enable lock-by-pulling on group. This option will be applied to all other groups and repositories inside"
-msgstr "Włącz blokowanie pulling przez grupy. Opcja ta będzie stosowana do wszystkich innych grup i repozytoriów wewnątrz"
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:13
+#, fuzzy, python-format
+msgid "Edit repository group %s"
+msgstr "edytuj grupe %s"
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:27
+#, fuzzy
+msgid "Add child group"
+msgstr "dodaj nową grupę użytkowników"
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:76
+msgid ""
+"Enable lock-by-pulling on group. This option will be applied to all other"
+" groups and repositories inside"
+msgstr ""
+"Włącz blokowanie pulling przez grupy. Opcja ta będzie stosowana do "
+"wszystkich innych grup i repozytoriów wewnątrz"
 
 #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:5
-msgid "Repositories groups administration"
+#, fuzzy
+msgid "Repository groups administration"
 msgstr "Repozytoria grup administracyjnych"
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:22
-msgid "ADD NEW GROUP"
-msgstr "DODAJ NOWĄ GRUPĘ"
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:35
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:45
 msgid "Number of toplevel repositories"
 msgstr "Liczba najwyższego poziomu repozytorium"
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:36
-#: rhodecode/templates/admin/users/users.html:87
-#: rhodecode/templates/admin/users_groups/users_groups.html:35
-msgid "action"
-msgstr "działanie"
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55
-#: rhodecode/templates/admin/users/user_edit.html:259
-#: rhodecode/templates/admin/users_groups/users_groups.html:44
-#: rhodecode/templates/data_table/_dt_elements.html:7
-#: rhodecode/templates/data_table/_dt_elements.html:121
-msgid "delete"
-msgstr "usuń"
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:64
+#, fuzzy
+msgid "Edit"
+msgstr "edycja"
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:65
+#: rhodecode/templates/base/perms_summary.html:29
+#: rhodecode/templates/base/perms_summary.html:48
+#: rhodecode/templates/base/perms_summary.html:50
+#: rhodecode/templates/data_table/_dt_elements.html:116
+#: rhodecode/templates/data_table/_dt_elements.html:117
+msgid "edit"
+msgstr "edycja"
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:70
 #, python-format
 msgid "Confirm to delete this group: %s with %s repository"
 msgid_plural "Confirm to delete this group: %s with %s repositories"
@@ -2369,8 +2704,9 @@
 msgstr[1] "Potwierdź żeby usunąć grupę %s wraz z %s repozytoriami"
 msgstr[2] "Potwierdź żeby usunąć grupę %s wraz z %s repozytoriami"
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:63
-msgid "There are no repositories groups yet"
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:78
+#, fuzzy
+msgid "There are no repository groups yet"
 msgstr "Nie ma jeszcze grup repozytoriów"
 
 #: rhodecode/templates/admin/settings/hooks.html:5
@@ -2378,12 +2714,6 @@
 msgid "Settings administration"
 msgstr "Ustawienia administracji"
 
-#: rhodecode/templates/admin/settings/hooks.html:9
-#: rhodecode/templates/admin/settings/settings.html:9
-#: rhodecode/templates/settings/repo_settings.html:13
-msgid "Settings"
-msgstr "Ustawienia"
-
 #: rhodecode/templates/admin/settings/hooks.html:24
 msgid "Built in hooks - read only"
 msgstr "Wbudowana w aktualizację - tylko do odczytu"
@@ -2400,192 +2730,236 @@
 msgid "Failed to remove hook"
 msgstr "Nie udało się usunąć hooka"
 
-#: rhodecode/templates/admin/settings/settings.html:24
+#: rhodecode/templates/admin/settings/settings.html:26
 msgid "Remap and rescan repositories"
 msgstr "Mapowanie i skanowanie repozytorów"
 
-#: rhodecode/templates/admin/settings/settings.html:32
-msgid "rescan option"
+#: rhodecode/templates/admin/settings/settings.html:34
+#, fuzzy
+msgid "Rescan option"
 msgstr "ponowne skanowanie opcji"
 
-#: rhodecode/templates/admin/settings/settings.html:38
-msgid "In case a repository was deleted from filesystem and there are leftovers in the database check this option to scan obsolete data in database and remove it."
-msgstr "W przypadku repozytoriów zostaną usunięte systemy plików i jeśli są pozostałości w bazie danych to ta opcja sprawdzi ją oraz przeskanuje, a następnie usunie je z bazy danych."
-
-#: rhodecode/templates/admin/settings/settings.html:39
-msgid "destroy old data"
-msgstr "zniszcz stare dane"
+#: rhodecode/templates/admin/settings/settings.html:40
+msgid ""
+"In case a repository was deleted from filesystem and there are leftovers "
+"in the database check this option to scan obsolete data in database and "
+"remove it."
+msgstr ""
+"W przypadku repozytoriów zostaną usunięte systemy plików i jeśli są "
+"pozostałości w bazie danych to ta opcja sprawdzi ją oraz przeskanuje, a "
+"następnie usunie je z bazy danych."
 
 #: rhodecode/templates/admin/settings/settings.html:41
-msgid "Rescan repositories location for new repositories. Also deletes obsolete if `destroy` flag is checked "
-msgstr "Skanowanie ponowne lokalizacji dla nowych repozytoriów. Usuwa również nieaktualne jeśli została zaznaczona flaga `zniszcz` do sprawdzana"
-
-#: rhodecode/templates/admin/settings/settings.html:46
+#, fuzzy
+msgid "Destroy old data"
+msgstr "zniszcz stare dane"
+
+#: rhodecode/templates/admin/settings/settings.html:43
+msgid ""
+"Rescan repositories location for new repositories. Also deletes obsolete "
+"if `destroy` flag is checked "
+msgstr ""
+"Skanowanie ponowne lokalizacji dla nowych repozytoriów. Usuwa również "
+"nieaktualne jeśli została zaznaczona flaga `zniszcz` do sprawdzana"
+
+#: rhodecode/templates/admin/settings/settings.html:48
 msgid "Rescan repositories"
 msgstr "Skanuj ponownie repozytoria"
 
-#: rhodecode/templates/admin/settings/settings.html:52
+#: rhodecode/templates/admin/settings/settings.html:54
 msgid "Whoosh indexing"
 msgstr "indeksowanie Whoosh"
 
-#: rhodecode/templates/admin/settings/settings.html:60
-msgid "index build option"
+#: rhodecode/templates/admin/settings/settings.html:62
+#, fuzzy
+msgid "Index build option"
 msgstr "opcja budowania indeksowania"
 
-#: rhodecode/templates/admin/settings/settings.html:65
-msgid "build from scratch"
+#: rhodecode/templates/admin/settings/settings.html:67
+#, fuzzy
+msgid "Build from scratch"
 msgstr "buduj od podstaw"
 
-#: rhodecode/templates/admin/settings/settings.html:71
+#: rhodecode/templates/admin/settings/settings.html:73
 msgid "Reindex"
 msgstr "Indeksuj ponownie"
 
-#: rhodecode/templates/admin/settings/settings.html:77
+#: rhodecode/templates/admin/settings/settings.html:79
 msgid "Global application settings"
 msgstr "Globalne ustawienia aplikacji"
 
-#: rhodecode/templates/admin/settings/settings.html:86
-msgid "Application name"
-msgstr "Nazwa aplikacji"
-
-#: rhodecode/templates/admin/settings/settings.html:95
-msgid "Realm text"
-msgstr "Realny tekst"
-
-#: rhodecode/templates/admin/settings/settings.html:104
-msgid "GA code"
-msgstr "GA kod"
-
-#: rhodecode/templates/admin/settings/settings.html:112
-#: rhodecode/templates/admin/settings/settings.html:178
-#: rhodecode/templates/admin/settings/settings.html:268
+#: rhodecode/templates/admin/settings/settings.html:88
+msgid "Site branding"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:97
+msgid "HTTP authentication realm"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:106
+msgid "Google Analytics code"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:114
+#: rhodecode/templates/admin/settings/settings.html:186
+#: rhodecode/templates/admin/settings/settings.html:277
 msgid "Save settings"
 msgstr "Zapisz ustawienia"
 
-#: rhodecode/templates/admin/settings/settings.html:119
+#: rhodecode/templates/admin/settings/settings.html:121
 msgid "Visualisation settings"
 msgstr "Ustawienia wizualizacji"
 
-#: rhodecode/templates/admin/settings/settings.html:127
+#: rhodecode/templates/admin/settings/settings.html:129
 msgid "General"
 msgstr "Główne"
 
-#: rhodecode/templates/admin/settings/settings.html:132
+#: rhodecode/templates/admin/settings/settings.html:134
 msgid "Use lightweight dashboard"
 msgstr "Użyj lekkiego pulpitu"
 
-#: rhodecode/templates/admin/settings/settings.html:139
+#: rhodecode/templates/admin/settings/settings.html:140
+#, fuzzy
+msgid "Use repository extra fields"
+msgstr "repozytoria"
+
+#: rhodecode/templates/admin/settings/settings.html:147
 msgid "Icons"
 msgstr "Ikony"
 
-#: rhodecode/templates/admin/settings/settings.html:144
+#: rhodecode/templates/admin/settings/settings.html:152
 msgid "Show public repo icon on repositories"
 msgstr "Pokazuj w publicznym repo ikonę w repozytoriach"
 
-#: rhodecode/templates/admin/settings/settings.html:148
+#: rhodecode/templates/admin/settings/settings.html:156
 msgid "Show private repo icon on repositories"
 msgstr "Pokazuj w prywatnym repo ikonę w repozytoriach"
 
-#: rhodecode/templates/admin/settings/settings.html:155
+#: rhodecode/templates/admin/settings/settings.html:163
 msgid "Meta-Tagging"
 msgstr "Tagowanie meta"
 
-#: rhodecode/templates/admin/settings/settings.html:160
+#: rhodecode/templates/admin/settings/settings.html:168
 msgid "Stylify recognised metatags:"
 msgstr "Stylizacja rozpoznanych meta tagów:"
 
-#: rhodecode/templates/admin/settings/settings.html:187
+#: rhodecode/templates/admin/settings/settings.html:195
 msgid "VCS settings"
 msgstr "VCS ustawienia"
 
-#: rhodecode/templates/admin/settings/settings.html:196
+#: rhodecode/templates/admin/settings/settings.html:204
 msgid "Web"
 msgstr "www"
 
-#: rhodecode/templates/admin/settings/settings.html:201
-msgid "require ssl for vcs operations"
+#: rhodecode/templates/admin/settings/settings.html:209
+#, fuzzy
+msgid "Require SSL for vcs operations"
 msgstr "wymagaj ssl dla operacji vcs"
 
-#: rhodecode/templates/admin/settings/settings.html:203
-msgid "RhodeCode will require SSL for pushing or pulling. If SSL is missing it will return HTTP Error 406: Not Acceptable"
-msgstr "RhodeCode wymaga SSL do wysłania zmian lub pobierania. Jeśli brakuje SSL zwróci błąd HTTP 406: Not Acceptable"
-
-#: rhodecode/templates/admin/settings/settings.html:209
+#: rhodecode/templates/admin/settings/settings.html:211
+msgid ""
+"RhodeCode will require SSL for pushing or pulling. If SSL is missing it "
+"will return HTTP Error 406: Not Acceptable"
+msgstr ""
+"RhodeCode wymaga SSL do wysłania zmian lub pobierania. Jeśli brakuje SSL "
+"zwróci błąd HTTP 406: Not Acceptable"
+
+#: rhodecode/templates/admin/settings/settings.html:217
 msgid "Hooks"
 msgstr "Aktualizacja"
 
-#: rhodecode/templates/admin/settings/settings.html:214
+#: rhodecode/templates/admin/settings/settings.html:222
 msgid "Update repository after push (hg update)"
 msgstr "Aktualizacja repozytorium po wysłaniu zmian (aktualizacja hg)"
 
-#: rhodecode/templates/admin/settings/settings.html:218
+#: rhodecode/templates/admin/settings/settings.html:226
 msgid "Show repository size after push"
 msgstr "Pokaż rozmiar repozytorium po wysłaniu zmian"
 
-#: rhodecode/templates/admin/settings/settings.html:222
+#: rhodecode/templates/admin/settings/settings.html:230
 msgid "Log user push commands"
 msgstr "Logi poleceń wysłania zmian użytkowników"
 
-#: rhodecode/templates/admin/settings/settings.html:226
+#: rhodecode/templates/admin/settings/settings.html:234
 msgid "Log user pull commands"
 msgstr "Logi poleceń połączenia gałęzi użytkowników"
 
-#: rhodecode/templates/admin/settings/settings.html:230
-msgid "advanced setup"
+#: rhodecode/templates/admin/settings/settings.html:238
+#, fuzzy
+msgid "Advanced setup"
 msgstr "zaawansowane ustawienia"
 
-#: rhodecode/templates/admin/settings/settings.html:235
+#: rhodecode/templates/admin/settings/settings.html:243
 msgid "Mercurial Extensions"
 msgstr "Rozszerzenia Mercurial"
 
-#: rhodecode/templates/admin/settings/settings.html:240
-msgid "largefiles extensions"
+#: rhodecode/templates/admin/settings/settings.html:248
+#, fuzzy
+msgid "Enable largefiles extension"
 msgstr "rozszerzenia dużych pliów"
 
-#: rhodecode/templates/admin/settings/settings.html:244
-msgid "hgsubversion extensions"
+#: rhodecode/templates/admin/settings/settings.html:252
+#, fuzzy
+msgid "Enable hgsubversion extension"
 msgstr "rozszerzenia hgsubversion"
 
-#: rhodecode/templates/admin/settings/settings.html:246
-msgid "Requires hgsubversion library installed. Allows clonning from svn remote locations"
-msgstr "Wymaga biblioteki hgsubversion zainstalowanej. Umożliwia klonowanie z zdalnych lokalizacji svn"
-
-#: rhodecode/templates/admin/settings/settings.html:256
+#: rhodecode/templates/admin/settings/settings.html:254
+#, fuzzy
+msgid ""
+"Requires hgsubversion library installed. Allows cloning from svn remote "
+"locations"
+msgstr ""
+"Wymaga biblioteki hgsubversion zainstalowanej. Umożliwia klonowanie z "
+"zdalnych lokalizacji svn"
+
+#: rhodecode/templates/admin/settings/settings.html:264
 msgid "Repositories location"
 msgstr "Położenie repozytorium"
 
-#: rhodecode/templates/admin/settings/settings.html:261
-msgid "This a crucial application setting. If you are really sure you need to change this, you must restart application in order to make this setting take effect. Click this label to unlock."
-msgstr "To kluczowe ustawienia aplikacji. Jeśli jesteś pewny, że chcesz to zmienić, należy ponownie uruchomić aplikację w celu zaktualizowania lokalizacji. Kliknij tą etykietę, żeby odblokować."
-
-#: rhodecode/templates/admin/settings/settings.html:262
-#: rhodecode/templates/base/base.html:221
-msgid "unlock"
+#: rhodecode/templates/admin/settings/settings.html:269
+msgid ""
+"This a crucial application setting. If you are really sure you need to "
+"change this, you must restart application in order to make this setting "
+"take effect. Click this label to unlock."
+msgstr ""
+"To kluczowe ustawienia aplikacji. Jeśli jesteś pewny, że chcesz to "
+"zmienić, należy ponownie uruchomić aplikację w celu zaktualizowania "
+"lokalizacji. Kliknij tą etykietę, żeby odblokować."
+
+#: rhodecode/templates/admin/settings/settings.html:270
+#: rhodecode/templates/base/base.html:131
+#, fuzzy
+msgid "Unlock"
 msgstr "odblokowany"
 
-#: rhodecode/templates/admin/settings/settings.html:263
-msgid "Location where repositories are stored. After changing this value a restart, and rescan is required"
-msgstr "Miejsce, w którym przechowywane są repozytoria. Po zmianie tej wartości jest wymagany restart i ponowne skanowanie"
-
-#: rhodecode/templates/admin/settings/settings.html:283
+#: rhodecode/templates/admin/settings/settings.html:272
+msgid ""
+"Location where repositories are stored. After changing this value a "
+"restart, and rescan is required"
+msgstr ""
+"Miejsce, w którym przechowywane są repozytoria. Po zmianie tej wartości "
+"jest wymagany restart i ponowne skanowanie"
+
+#: rhodecode/templates/admin/settings/settings.html:292
 msgid "Test Email"
 msgstr "Test e-maila"
 
-#: rhodecode/templates/admin/settings/settings.html:291
+#: rhodecode/templates/admin/settings/settings.html:300
 msgid "Email to"
 msgstr "E-mail do"
 
-#: rhodecode/templates/admin/settings/settings.html:299
+#: rhodecode/templates/admin/settings/settings.html:308
 msgid "Send"
 msgstr "Wyślij"
 
-#: rhodecode/templates/admin/settings/settings.html:305
+#: rhodecode/templates/admin/settings/settings.html:314
 msgid "System Info and Packages"
 msgstr "Informacje Systemowe i pakiety"
 
-#: rhodecode/templates/admin/settings/settings.html:308
-msgid "show"
-msgstr "pokaż"
+#: rhodecode/templates/admin/settings/settings.html:317
+#: rhodecode/templates/changelog/changelog.html:42
+msgid "Show"
+msgstr "Wyświetl"
 
 #: rhodecode/templates/admin/users/user_add.html:5
 msgid "Add user"
@@ -2593,11 +2967,14 @@
 
 #: rhodecode/templates/admin/users/user_add.html:10
 #: rhodecode/templates/admin/users/user_edit.html:11
+#: rhodecode/templates/base/base.html:71
 msgid "Users"
 msgstr "Użytkownicy"
 
 #: rhodecode/templates/admin/users/user_add.html:12
-msgid "add new user"
+#: rhodecode/templates/admin/users/users.html:23
+#, fuzzy
+msgid "Add new user"
 msgstr "dodaj nowego użytkownika"
 
 #: rhodecode/templates/admin/users/user_add.html:50
@@ -2608,6 +2985,12 @@
 msgid "Edit user"
 msgstr "Edytuj użytkownika"
 
+#: rhodecode/templates/admin/users/user_edit.html:13
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:13
+#, fuzzy, python-format
+msgid "Edit %s"
+msgstr "edycja %s"
+
 #: rhodecode/templates/admin/users/user_edit.html:34
 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:10
 msgid "Change your avatar at"
@@ -2623,78 +3006,65 @@
 msgid "API key"
 msgstr "Klucz API"
 
-#: rhodecode/templates/admin/users/user_edit.html:63
+#: rhodecode/templates/admin/users/user_edit.html:50
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:25
+msgid "Current IP"
+msgstr ""
+
+#: rhodecode/templates/admin/users/user_edit.html:70
 msgid "LDAP DN"
 msgstr "LDAP DN"
 
-#: rhodecode/templates/admin/users/user_edit.html:72
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:35
+#: rhodecode/templates/admin/users/user_edit.html:79
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44
 msgid "New password"
 msgstr "Nowe hasło"
 
-#: rhodecode/templates/admin/users/user_edit.html:81
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44
+#: rhodecode/templates/admin/users/user_edit.html:88
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:53
 msgid "New password confirmation"
 msgstr "Potwierdzenie nowego hasła"
 
-#: rhodecode/templates/admin/users/user_edit.html:151
+#: rhodecode/templates/admin/users/user_edit.html:158
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:108
 msgid "Inherit default permissions"
 msgstr "Dziedziczą uprawnienia domyślne"
 
-#: rhodecode/templates/admin/users/user_edit.html:156
+#: rhodecode/templates/admin/users/user_edit.html:163
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:113
 #, python-format
-msgid "Select to inherit permissions from %s settings. With this selected below options does not have any action"
-msgstr "Zaznacz, żeby dziedziczyć uprawnienia z %s ustawień. Po wybraniu tej opcji, poniżej nie ma żadnych działań"
-
-#: rhodecode/templates/admin/users/user_edit.html:162
+msgid ""
+"Select to inherit permissions from %s settings. With this selected below "
+"options does not have any action"
+msgstr ""
+"Zaznacz, żeby dziedziczyć uprawnienia z %s ustawień. Po wybraniu tej "
+"opcji, poniżej nie ma żadnych działań"
+
+#: rhodecode/templates/admin/users/user_edit.html:169
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:119
 msgid "Create repositories"
 msgstr "Utwórz repozytorium"
 
-#: rhodecode/templates/admin/users/user_edit.html:170
+#: rhodecode/templates/admin/users/user_edit.html:177
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:127
 msgid "Fork repositories"
 msgstr "Rozwidlenie repozytorium"
 
-#: rhodecode/templates/admin/users/user_edit.html:190
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:22
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:39
-msgid "Nothing here yet"
-msgstr "Nic tu nie ma jeszcze"
-
-#: rhodecode/templates/admin/users/user_edit.html:197
-#: rhodecode/templates/admin/users/user_edit_my_account.html:60
-#: rhodecode/templates/admin/users/user_edit_my_account.html:217
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:185
-msgid "Permission"
-msgstr "Uprawnienia"
-
-#: rhodecode/templates/admin/users/user_edit.html:198
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:186
-msgid "Edit Permission"
-msgstr "Edycja Uprawnień"
-
-#: rhodecode/templates/admin/users/user_edit.html:247
+#: rhodecode/templates/admin/users/user_edit.html:200
 msgid "Email addresses"
 msgstr "Adresy e-mail"
 
-#: rhodecode/templates/admin/users/user_edit.html:260
+#: rhodecode/templates/admin/users/user_edit.html:213
 #, python-format
 msgid "Confirm to delete this email: %s"
 msgstr "Potwierdź, aby usunąć ten e-mail: %s"
 
-#: rhodecode/templates/admin/users/user_edit.html:274
+#: rhodecode/templates/admin/users/user_edit.html:227
 msgid "New email address"
 msgstr "Nowy adres e-mail"
 
-#: rhodecode/templates/admin/users/user_edit.html:281
-msgid "Add"
-msgstr "Dodaj"
-
 #: rhodecode/templates/admin/users/user_edit_my_account.html:5
-#: rhodecode/templates/base/base.html:124
+#: rhodecode/templates/base/base.html:242
 msgid "My account"
 msgstr "Moje konto"
 
@@ -2707,7 +3077,7 @@
 msgstr "Moje uprawnienia"
 
 #: rhodecode/templates/admin/users/user_edit_my_account.html:38
-#: rhodecode/templates/journal/journal.html:49
+#: rhodecode/templates/journal/journal.html:54
 msgid "My repos"
 msgstr "Moje repo"
 
@@ -2715,132 +3085,107 @@
 msgid "My pull requests"
 msgstr "Moje prośby połączenia gałęzi"
 
-#: rhodecode/templates/admin/users/user_edit_my_account.html:45
-msgid "Add repo"
-msgstr "Dodaj repo"
-
 #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:2
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:4
+#, fuzzy
+msgid "Show closed pull requests"
+msgstr "[zamknięty] wniosek o połączenie gałęzi"
+
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:6
 msgid "Opened by me"
 msgstr "Otwarty przez mnie"
 
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:10
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:15
 #, python-format
 msgid "Pull request #%s opened on %s"
 msgstr "Wniosek połączenia gałęzi #%s otwarty %s"
 
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:15
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:17
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:45
+#: rhodecode/templates/pullrequests/pullrequest_data.html:7
+#: rhodecode/templates/pullrequests/pullrequest_show.html:27
+#: rhodecode/templates/pullrequests/pullrequest_show.html:42
+msgid "Closed"
+msgstr "Zamknięte"
+
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:23
 msgid "Confirm to delete this pull request"
 msgstr "Potwierdź usunięcie połączenia gałęzi"
 
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:26
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:30
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:51
+msgid "Nothing here yet"
+msgstr "Nic tu nie ma jeszcze"
+
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:34
 msgid "I participate in"
 msgstr "Biorę udział w"
 
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:33
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:30
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:42
+#: rhodecode/templates/pullrequests/pullrequest_data.html:11
 #, python-format
 msgid "Pull request #%s opened by %s on %s"
 msgstr "Wniosek połączenia gałęzi #%s otwarty %s dnia %s"
 
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:7
-#: rhodecode/templates/bookmarks/bookmarks.html:40
-#: rhodecode/templates/bookmarks/bookmarks_data.html:9
-#: rhodecode/templates/branches/branches.html:54
-#: rhodecode/templates/branches/branches_data.html:9
-#: rhodecode/templates/journal/journal_page_repos.html:8
-#: rhodecode/templates/tags/tags.html:55
-#: rhodecode/templates/tags/tags_data.html:9
-msgid "Revision"
-msgstr "Rewizja"
-
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:28
-#: rhodecode/templates/journal/journal_page_repos.html:29
-msgid "private"
-msgstr "prywatny"
-
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:31
-#: rhodecode/templates/data_table/_dt_elements.html:7
-#: rhodecode/templates/journal/journal_page_repos.html:32
-#, python-format
-msgid "Confirm to delete this repository: %s"
-msgstr "Potwierdź usunięcie repozytorium: %s"
-
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:38
-#: rhodecode/templates/journal/journal_page_repos.html:42
-msgid "No repositories yet"
-msgstr "Nie ma jeszcze repozytoriów"
-
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:40
-#: rhodecode/templates/journal/journal_page_repos.html:44
-msgid "create one now"
-msgstr "utwórz je teraz"
-
 #: rhodecode/templates/admin/users/users.html:5
 msgid "Users administration"
 msgstr "Administracja użytkownikami"
 
 #: rhodecode/templates/admin/users/users.html:9
-#: rhodecode/templates/base/base.html:235
 msgid "users"
 msgstr "użytkownicy"
 
-#: rhodecode/templates/admin/users/users.html:23
-msgid "ADD NEW USER"
-msgstr "DODAJ NOWEGO UŻYTKOWNIKA"
-
-#: rhodecode/templates/admin/users/users.html:77
-msgid "username"
-msgstr "nazwa użytkownika"
-
 #: rhodecode/templates/admin/users/users.html:80
-msgid "firstname"
+#, fuzzy
+msgid "Firstname"
 msgstr "imię"
 
 #: rhodecode/templates/admin/users/users.html:81
-msgid "lastname"
+#, fuzzy
+msgid "Lastname"
 msgstr "nazwisko"
 
 #: rhodecode/templates/admin/users/users.html:82
-msgid "last login"
+#, fuzzy
+msgid "Last login"
 msgstr "ostatnio zalogowany"
 
-#: rhodecode/templates/admin/users/users.html:84
-#: rhodecode/templates/admin/users_groups/users_groups.html:34
-msgid "active"
-msgstr "aktywny"
-
-#: rhodecode/templates/admin/users/users.html:86
-#: rhodecode/templates/base/base.html:238
-msgid "ldap"
-msgstr "ldap"
-
 #: rhodecode/templates/admin/users_groups/users_group_add.html:5
-msgid "Add users group"
+#, fuzzy
+msgid "Add user group"
 msgstr "Dodaj grupę użytkowników"
 
 #: rhodecode/templates/admin/users_groups/users_group_add.html:10
-#: rhodecode/templates/admin/users_groups/users_groups.html:9
-msgid "Users groups"
-msgstr "Grupy użytkowników"
+#: rhodecode/templates/admin/users_groups/users_groups.html:11
+#: rhodecode/templates/base/base.html:72
+#, fuzzy
+msgid "User groups"
+msgstr "grupy użytkowników"
 
 #: rhodecode/templates/admin/users_groups/users_group_add.html:12
-msgid "add new users group"
+#: rhodecode/templates/admin/users_groups/users_groups.html:25
+#, fuzzy
+msgid "Add new user group"
 msgstr "dodaj nową grupę użytkowników"
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:5
-msgid "Edit users group"
+#, fuzzy
+msgid "Edit user group"
 msgstr "Edytuj grupę użytkowników"
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:11
-msgid "UsersGroups"
-msgstr "Grupy użytkowników"
+#, fuzzy
+msgid "UserGroups"
+msgstr "grupy użytkowników"
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:50
+#: rhodecode/templates/admin/users_groups/users_groups.html:35
 msgid "Members"
 msgstr "Użytkownik"
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:58
-msgid "Choosen group members"
+#, fuzzy
+msgid "Chosen group members"
 msgstr "Wybrane grupy użytkowników"
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:61
@@ -2855,264 +3200,280 @@
 msgid "Add all elements"
 msgstr "Dodaj wszystkie elementy"
 
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:146
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:150
 msgid "Group members"
 msgstr "Grupy użytkowników"
 
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:163
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:167
 msgid "No members yet"
 msgstr "Nie ma jeszcze żadnego użytkownika"
 
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:171
-msgid "Permissions defined for this group"
-msgstr "Uprawnienia określone dla tej grupy"
-
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:178
-msgid "No permissions set yet"
-msgstr "Nie ma jeszcze ustawionych uprawnień"
-
 #: rhodecode/templates/admin/users_groups/users_groups.html:5
-msgid "Users groups administration"
+#, fuzzy
+msgid "User groups administration"
 msgstr "Użytkownicy grupy administracji"
 
-#: rhodecode/templates/admin/users_groups/users_groups.html:23
-msgid "ADD NEW USER GROUP"
-msgstr "DODAJ NOWĄ GRUPĘ UŻYTKOWNIKÓW"
-
-#: rhodecode/templates/admin/users_groups/users_groups.html:32
-msgid "group name"
-msgstr "nazwa grupy"
-
-#: rhodecode/templates/admin/users_groups/users_groups.html:33
-#: rhodecode/templates/base/root.html:46
-msgid "members"
-msgstr "użytkownik"
-
-#: rhodecode/templates/admin/users_groups/users_groups.html:45
-#, python-format
-msgid "Confirm to delete this users group: %s"
+#: rhodecode/templates/admin/users_groups/users_groups.html:47
+#, fuzzy, python-format
+msgid "Confirm to delete this user group: %s"
 msgstr "Potwierdź usunięcie grupy użytkowników: %s"
 
-#: rhodecode/templates/base/base.html:41
+#: rhodecode/templates/base/base.html:42
 msgid "Submit a bug"
 msgstr "Prześlij błąd"
 
-#: rhodecode/templates/base/base.html:77
-msgid "Login to your account"
-msgstr "Zaloguj się do swojego konta"
-
-#: rhodecode/templates/base/base.html:100
-msgid "Forgot password ?"
-msgstr "Nie pamiętasz hasła?"
-
-#: rhodecode/templates/base/base.html:107
-msgid "Log In"
-msgstr "Zaloguj się"
+#: rhodecode/templates/base/base.html:108
+#: rhodecode/templates/data_table/_dt_elements.html:9
+#: rhodecode/templates/data_table/_dt_elements.html:11
+#: rhodecode/templates/data_table/_dt_elements.html:13
+#: rhodecode/templates/pullrequests/pullrequest_show.html:81
+#: rhodecode/templates/summary/summary.html:8
+msgid "Summary"
+msgstr "Podsumowanie"
+
+#: rhodecode/templates/base/base.html:109
+#: rhodecode/templates/changelog/changelog.html:11
+#: rhodecode/templates/data_table/_dt_elements.html:17
+#: rhodecode/templates/data_table/_dt_elements.html:19
+#: rhodecode/templates/data_table/_dt_elements.html:21
+msgid "Changelog"
+msgstr "Dziennik zmian"
+
+#: rhodecode/templates/base/base.html:110
+#: rhodecode/templates/data_table/_dt_elements.html:25
+#: rhodecode/templates/data_table/_dt_elements.html:27
+#: rhodecode/templates/data_table/_dt_elements.html:29
+#: rhodecode/templates/files/files.html:12
+msgid "Files"
+msgstr "Pliki"
+
+#: rhodecode/templates/base/base.html:112
+#, fuzzy
+msgid "Switch To"
+msgstr "Przełącz do"
+
+#: rhodecode/templates/base/base.html:114
+#: rhodecode/templates/base/base.html:267
+msgid "loading..."
+msgstr "wczytywanie..."
 
 #: rhodecode/templates/base/base.html:118
-msgid "Inbox"
-msgstr "Odebrana poczta"
-
-#: rhodecode/templates/base/base.html:123
-#: rhodecode/templates/base/base.html:322
-#: rhodecode/templates/base/base.html:324
-#: rhodecode/templates/base/base.html:326
-#: rhodecode/templates/journal/journal.html:4
-#: rhodecode/templates/journal/public_journal.html:4
-msgid "Journal"
-msgstr "Dziennik"
-
-#: rhodecode/templates/base/base.html:125
-msgid "Log Out"
-msgstr "Wyloguj się"
-
-#: rhodecode/templates/base/base.html:144
-msgid "Switch repository"
-msgstr "Przełącz repozytorium"
-
-#: rhodecode/templates/base/base.html:146
-msgid "Products"
-msgstr "Produkty"
-
-#: rhodecode/templates/base/base.html:152
-#: rhodecode/templates/base/base.html:182
-#: rhodecode/templates/base/root.html:47
-msgid "loading..."
-msgstr "wczytywanie..."
-
-#: rhodecode/templates/base/base.html:158
-#: rhodecode/templates/base/base.html:160
-#: rhodecode/templates/base/base.html:162
-#: rhodecode/templates/data_table/_dt_elements.html:15
-#: rhodecode/templates/data_table/_dt_elements.html:17
-#: rhodecode/templates/data_table/_dt_elements.html:19
-msgid "Summary"
-msgstr "Podsumowanie"
-
-#: rhodecode/templates/base/base.html:166
-#: rhodecode/templates/base/base.html:168
-#: rhodecode/templates/base/base.html:170
-#: rhodecode/templates/changelog/changelog.html:15
-#: rhodecode/templates/data_table/_dt_elements.html:23
-#: rhodecode/templates/data_table/_dt_elements.html:25
-#: rhodecode/templates/data_table/_dt_elements.html:27
-msgid "Changelog"
-msgstr "Dziennik zmian"
-
-#: rhodecode/templates/base/base.html:175
-#: rhodecode/templates/base/base.html:177
-#: rhodecode/templates/base/base.html:179
-msgid "Switch to"
-msgstr "Przełącz do"
-
-#: rhodecode/templates/base/base.html:186
-#: rhodecode/templates/base/base.html:188
-#: rhodecode/templates/base/base.html:190
-#: rhodecode/templates/data_table/_dt_elements.html:31
-#: rhodecode/templates/data_table/_dt_elements.html:33
-#: rhodecode/templates/data_table/_dt_elements.html:35
-msgid "Files"
-msgstr "Pliki"
-
-#: rhodecode/templates/base/base.html:195
-#: rhodecode/templates/base/base.html:199
 msgid "Options"
 msgstr "Opcje"
 
-#: rhodecode/templates/base/base.html:204
-#: rhodecode/templates/base/base.html:206
-msgid "repository settings"
-msgstr "ustawienia repozytorium"
-
-#: rhodecode/templates/base/base.html:210
-#: rhodecode/templates/data_table/_dt_elements.html:80
-#: rhodecode/templates/forks/fork.html:13
-msgid "fork"
-msgstr "gałąż"
-
-#: rhodecode/templates/base/base.html:212
-#: rhodecode/templates/base/root.html:50
-#: rhodecode/templates/changelog/changelog.html:43
-msgid "Open new pull request"
-msgstr "Otwórz nową prośbę o połączenie gałęzi"
-
-#: rhodecode/templates/base/base.html:215
+#: rhodecode/templates/base/base.html:124
 #: rhodecode/templates/forks/forks_data.html:21
 msgid "Compare fork"
 msgstr "Porównaj rozwidlenie"
 
-#: rhodecode/templates/base/base.html:217
-msgid "search"
-msgstr "szukaj"
-
-#: rhodecode/templates/base/base.html:223
-msgid "lock"
-msgstr "zablokowane"
-
-#: rhodecode/templates/base/base.html:234
-msgid "repositories groups"
-msgstr "grupy w repozytorium"
-
-#: rhodecode/templates/base/base.html:236
-msgid "users groups"
-msgstr "grupy użytkowników"
-
-#: rhodecode/templates/base/base.html:237
-msgid "permissions"
-msgstr "uprawnienia"
-
-#: rhodecode/templates/base/base.html:239
-msgid "defaults"
-msgstr "domyślne"
-
-#: rhodecode/templates/base/base.html:240
-msgid "settings"
-msgstr "ustawienia"
-
-#: rhodecode/templates/base/base.html:251
-#: rhodecode/templates/base/base.html:253
-msgid "Followers"
-msgstr "Obserwowane"
-
-#: rhodecode/templates/base/base.html:259
-#: rhodecode/templates/base/base.html:261
-msgid "Forks"
-msgstr "Gałęzie"
-
-#: rhodecode/templates/base/base.html:340
-#: rhodecode/templates/base/base.html:342
-#: rhodecode/templates/base/base.html:344
-#: rhodecode/templates/search/search.html:52
+#: rhodecode/templates/base/base.html:126
+#, fuzzy
+msgid "Lightweight changelog"
+msgstr "Użyj lekkiego pulpitu"
+
+#: rhodecode/templates/base/base.html:127
+#: rhodecode/templates/base/base.html:287
+#: rhodecode/templates/search/search.html:14
+#: rhodecode/templates/search/search.html:54
 msgid "Search"
 msgstr "Szukaj"
 
-#: rhodecode/templates/base/root.html:42
-msgid "add another comment"
-msgstr "dodaj kolejny komentarz"
+#: rhodecode/templates/base/base.html:133
+#, fuzzy
+msgid "Lock"
+msgstr "zablokowane"
+
+#: rhodecode/templates/base/base.html:141
+#, fuzzy
+msgid "Follow"
+msgstr "obserwatorzy"
+
+#: rhodecode/templates/base/base.html:142
+#, fuzzy
+msgid "Unfollow"
+msgstr "obserwatorzy"
+
+#: rhodecode/templates/base/base.html:145
+#: rhodecode/templates/data_table/_dt_elements.html:33
+#: rhodecode/templates/data_table/_dt_elements.html:35
+#: rhodecode/templates/data_table/_dt_elements.html:37
+#: rhodecode/templates/data_table/_dt_elements.html:74
+#: rhodecode/templates/forks/fork.html:9
+msgid "Fork"
+msgstr "Gałąź"
+
+#: rhodecode/templates/base/base.html:147
+#, fuzzy
+msgid "Create Pull Request"
+msgstr "Stwórz nowe żądanie połączenia gałęzi"
+
+#: rhodecode/templates/base/base.html:153
+#, fuzzy
+msgid "Show Pull Requests"
+msgstr "Nowa prośba o połączenie gałęzi"
+
+#: rhodecode/templates/base/base.html:153
+#, fuzzy
+msgid "Pull Requests"
+msgstr "Połączone gałęzie"
+
+#: rhodecode/templates/base/base.html:190
+#, fuzzy
+msgid "Not logged in"
+msgstr "ostatnio zalogowany"
+
+#: rhodecode/templates/base/base.html:197
+msgid "Login to your account"
+msgstr "Zaloguj się do swojego konta"
+
+#: rhodecode/templates/base/base.html:220
+msgid "Forgot password ?"
+msgstr "Nie pamiętasz hasła?"
+
+#: rhodecode/templates/base/base.html:243
+msgid "Log Out"
+msgstr "Wyloguj się"
+
+#: rhodecode/templates/base/base.html:262
+msgid "Switch repository"
+msgstr "Przełącz repozytorium"
+
+#: rhodecode/templates/base/base.html:274
+msgid "Show recent activity"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:275
+#: rhodecode/templates/journal/journal.html:4
+msgid "Journal"
+msgstr "Dziennik"
+
+#: rhodecode/templates/base/base.html:286
+#, fuzzy
+msgid "Search in repositories"
+msgstr "Szukaj we wszystkich repozytoriach"
+
+#: rhodecode/templates/base/perms_summary.html:8
+#, fuzzy
+msgid "No permissions defined yet"
+msgstr "Nie ma jeszcze ustawionych uprawnień"
+
+#: rhodecode/templates/base/perms_summary.html:15
+msgid "Permission"
+msgstr "Uprawnienia"
+
+#: rhodecode/templates/base/perms_summary.html:16
+msgid "Edit Permission"
+msgstr "Edycja Uprawnień"
 
 #: rhodecode/templates/base/root.html:43
-#: rhodecode/templates/journal/journal.html:83
-#: rhodecode/templates/summary/summary.html:57
-msgid "Stop following this repository"
-msgstr "Zakończyć obserwację tego repozytorium"
+#, fuzzy
+msgid "Add another comment"
+msgstr "dodaj kolejny komentarz"
 
 #: rhodecode/templates/base/root.html:44
-#: rhodecode/templates/summary/summary.html:61
+#: rhodecode/templates/data_table/_dt_elements.html:140
+msgid "Stop following this repository"
+msgstr "Zakończyć obserwację tego repozytorium"
+
+#: rhodecode/templates/base/root.html:45
 msgid "Start following this repository"
 msgstr "Zacznij obserwację tego repozytorium"
 
-#: rhodecode/templates/base/root.html:45
+#: rhodecode/templates/base/root.html:46
 msgid "Group"
 msgstr "Grupa"
 
+#: rhodecode/templates/base/root.html:47
+msgid "members"
+msgstr "użytkownik"
+
 #: rhodecode/templates/base/root.html:48
-msgid "search truncated"
-msgstr "wyszukaj obcięte"
+#: rhodecode/templates/pullrequests/pullrequest.html:181
+#, fuzzy
+msgid "Loading ..."
+msgstr "wczytywanie..."
 
 #: rhodecode/templates/base/root.html:49
-msgid "no matching files"
+#, fuzzy
+msgid "Search truncated"
+msgstr "wyszukaj obcięte"
+
+#: rhodecode/templates/base/root.html:50
+#, fuzzy
+msgid "No matching files"
 msgstr "nie ma plików pasujących"
 
 #: rhodecode/templates/base/root.html:51
-msgid "Open new pull request for selected changesets"
-msgstr "Otwórz nową prośbę o połączenie gałęzi w zestawieniu zmian"
+#: rhodecode/templates/changelog/changelog.html:36
+msgid "Open new pull request"
+msgstr "Otwórz nową prośbę o połączenie gałęzi"
 
 #: rhodecode/templates/base/root.html:52
-msgid "Show selected changes __S -> __E"
-msgstr "Pokaż wybrane zmiany __S -> __E"
+msgid "Open new pull request for selected changesets"
+msgstr "Otwórz nową prośbę o połączenie gałęzi w zestawieniu zmian"
 
 #: rhodecode/templates/base/root.html:53
+#, fuzzy
+msgid "Show selected changesets __S -> __E"
+msgstr "Pokaż wybrane zmiany __S -> __E"
+
+#: rhodecode/templates/base/root.html:54
+#, fuzzy
+msgid "Show selected changeset __S"
+msgstr "Pokaż wybrane zmiany __S -> __E"
+
+#: rhodecode/templates/base/root.html:55
 msgid "Selection link"
 msgstr "Wybór linku"
 
+#: rhodecode/templates/base/root.html:56
+#: rhodecode/templates/changeset/diff_block.html:8
+#, fuzzy
+msgid "Collapse diff"
+msgstr "Pliki różnic"
+
+#: rhodecode/templates/base/root.html:57
+#, fuzzy
+msgid "Expand diff"
+msgstr "poprawka różnic"
+
 #: rhodecode/templates/bookmarks/bookmarks.html:5
 #, python-format
 msgid "%s Bookmarks"
 msgstr "%s Zakładki"
 
-#: rhodecode/templates/bookmarks/bookmarks.html:39
+#: rhodecode/templates/bookmarks/bookmarks.html:37
 #: rhodecode/templates/bookmarks/bookmarks_data.html:8
-#: rhodecode/templates/branches/branches.html:53
+#: rhodecode/templates/branches/branches.html:50
 #: rhodecode/templates/branches/branches_data.html:8
-#: rhodecode/templates/tags/tags.html:54
+#: rhodecode/templates/shortlog/shortlog_data.html:8
+#: rhodecode/templates/tags/tags.html:51
 #: rhodecode/templates/tags/tags_data.html:8
 msgid "Author"
 msgstr "Autor"
 
+#: rhodecode/templates/bookmarks/bookmarks.html:38
+#: rhodecode/templates/bookmarks/bookmarks_data.html:9
+#: rhodecode/templates/branches/branches.html:51
+#: rhodecode/templates/branches/branches_data.html:9
+#: rhodecode/templates/shortlog/shortlog_data.html:5
+#: rhodecode/templates/tags/tags.html:52
+#: rhodecode/templates/tags/tags_data.html:9
+msgid "Revision"
+msgstr "Rewizja"
+
 #: rhodecode/templates/branches/branches.html:5
 #, python-format
 msgid "%s Branches"
 msgstr "%s Gałęzie"
 
-#: rhodecode/templates/branches/branches.html:29
+#: rhodecode/templates/branches/branches.html:26
 msgid "Compare branches"
 msgstr "porównaj gałęzie"
 
-#: rhodecode/templates/branches/branches.html:56
+#: rhodecode/templates/branches/branches.html:53
 #: rhodecode/templates/branches/branches_data.html:10
-#: rhodecode/templates/compare/compare_diff.html:5
-#: rhodecode/templates/compare/compare_diff.html:13
-#: rhodecode/templates/tags/tags.html:57
+#: rhodecode/templates/tags/tags.html:54
 #: rhodecode/templates/tags/tags_data.html:10
 msgid "Compare"
 msgstr "Porównaj"
@@ -3122,7 +3483,7 @@
 msgid "%s Changelog"
 msgstr "%s Dziennik zmian"
 
-#: rhodecode/templates/changelog/changelog.html:15
+#: rhodecode/templates/changelog/changelog.html:11
 #, python-format
 msgid "showing %d out of %d revision"
 msgid_plural "showing %d out of %d revisions"
@@ -3130,108 +3491,76 @@
 msgstr[1] "pokazano %d w rewizjach %d"
 msgstr[2] "pokazano %d w rewizjach %d"
 
-#: rhodecode/templates/changelog/changelog.html:37
+#: rhodecode/templates/changelog/changelog.html:30
 msgid "Clear selection"
 msgstr "Wyczyść zaznaczenie"
 
-#: rhodecode/templates/changelog/changelog.html:40
+#: rhodecode/templates/changelog/changelog.html:33
 #: rhodecode/templates/forks/forks_data.html:19
-#, python-format
-msgid "compare fork with %s"
+#, fuzzy, python-format
+msgid "Compare fork with %s"
 msgstr "porównaj gałęzie %s"
 
-#: rhodecode/templates/changelog/changelog.html:40
+#: rhodecode/templates/changelog/changelog.html:33
 msgid "Compare fork with parent"
 msgstr "porównaj gałąź w rodzicem"
 
-#: rhodecode/templates/changelog/changelog.html:49
-msgid "Show"
-msgstr "Wyświetl"
-
-#: rhodecode/templates/changelog/changelog.html:74
-#: rhodecode/templates/summary/summary.html:375
-msgid "show more"
-msgstr "pokaż więcej"
-
-#: rhodecode/templates/changelog/changelog.html:78
-msgid "Affected number of files, click to show more details"
-msgstr "Dotyczy liczby plików, kliknij, aby zobaczyć więcej szczegółów"
-
-#: rhodecode/templates/changelog/changelog.html:91
-#: rhodecode/templates/changeset/changeset.html:65
-#: rhodecode/templates/changeset/changeset_file_comment.html:20
-#: rhodecode/templates/changeset/changeset_range.html:46
-msgid "Changeset status"
-msgstr "Status grupy zmian"
-
-#: rhodecode/templates/changelog/changelog.html:94
-#: rhodecode/templates/shortlog/shortlog_data.html:20
-msgid "Click to open associated pull request"
-msgstr "Kliknij żeby otworzyć prośbę o połączenie gałęzi"
-
-#: rhodecode/templates/changelog/changelog.html:104
-msgid "Parent"
-msgstr "Rewizja"
-
-#: rhodecode/templates/changelog/changelog.html:110
-#: rhodecode/templates/changeset/changeset.html:42
-msgid "No parents"
-msgstr "Brak rewizji"
-
-#: rhodecode/templates/changelog/changelog.html:115
+#: rhodecode/templates/changelog/changelog.html:76
+#: rhodecode/templates/summary/summary.html:404
+#, fuzzy
+msgid "Show more"
+msgstr "Pokaż więcej"
+
+#: rhodecode/templates/changelog/changelog.html:89
+#: rhodecode/templates/changeset/changeset_range.html:86
+#, fuzzy, python-format
+msgid "Bookmark %s"
+msgstr "Zakładki %s"
+
+#: rhodecode/templates/changelog/changelog.html:95
+#: rhodecode/templates/changeset/changeset.html:111
+#: rhodecode/templates/changeset/changeset_range.html:92
+#, fuzzy, python-format
+msgid "Tag %s"
+msgstr "Tagi %s"
+
+#: rhodecode/templates/changelog/changelog.html:100
 #: rhodecode/templates/changeset/changeset.html:106
-#: rhodecode/templates/changeset/changeset_range.html:79
-msgid "merge"
-msgstr "połącz"
-
-#: rhodecode/templates/changelog/changelog.html:118
-#: rhodecode/templates/changeset/changeset.html:109
-#: rhodecode/templates/changeset/changeset_range.html:82
-#: rhodecode/templates/files/files.html:29
-#: rhodecode/templates/files/files_add.html:33
-#: rhodecode/templates/files/files_edit.html:33
-#: rhodecode/templates/shortlog/shortlog_data.html:9
-msgid "branch"
-msgstr "gałąź"
-
-#: rhodecode/templates/changelog/changelog.html:124
-#: rhodecode/templates/changeset/changeset_range.html:88
-msgid "bookmark"
-msgstr "zakładka"
-
-#: rhodecode/templates/changelog/changelog.html:130
-#: rhodecode/templates/changeset/changeset.html:114
-#: rhodecode/templates/changeset/changeset_range.html:94
-msgid "tag"
-msgstr "etykieta"
-
-#: rhodecode/templates/changelog/changelog.html:301
+#: rhodecode/templates/changeset/changeset_range.html:80
+#, fuzzy, python-format
+msgid "Branch %s"
+msgstr "Gałęzie %s"
+
+#: rhodecode/templates/changelog/changelog.html:258
 msgid "There are no changes yet"
 msgstr "Nie ma jeszcze zmian"
 
 #: rhodecode/templates/changelog/changelog_details.html:4
-#: rhodecode/templates/changeset/changeset.html:94
-msgid "removed"
+#: rhodecode/templates/changeset/changeset.html:91
+#, fuzzy
+msgid "Removed"
 msgstr "usunięto"
 
 #: rhodecode/templates/changelog/changelog_details.html:5
-#: rhodecode/templates/changeset/changeset.html:95
-msgid "changed"
+#: rhodecode/templates/changeset/changeset.html:92
+#, fuzzy
+msgid "Changed"
 msgstr "zmiana"
 
 #: rhodecode/templates/changelog/changelog_details.html:6
-#: rhodecode/templates/changeset/changeset.html:96
-msgid "added"
+#: rhodecode/templates/changeset/changeset.html:93
+#, fuzzy
+msgid "Added"
 msgstr "dodana"
 
 #: rhodecode/templates/changelog/changelog_details.html:8
 #: rhodecode/templates/changelog/changelog_details.html:9
 #: rhodecode/templates/changelog/changelog_details.html:10
-#: rhodecode/templates/changeset/changeset.html:98
-#: rhodecode/templates/changeset/changeset.html:99
-#: rhodecode/templates/changeset/changeset.html:100
-#, python-format
-msgid "affected %s files"
+#: rhodecode/templates/changeset/changeset.html:95
+#: rhodecode/templates/changeset/changeset.html:96
+#: rhodecode/templates/changeset/changeset.html:97
+#, fuzzy, python-format
+msgid "Affected %s files"
 msgstr "zarażone pliki %s"
 
 #: rhodecode/templates/changeset/changeset.html:6
@@ -3239,31 +3568,40 @@
 msgid "%s Changeset"
 msgstr "%s Grupy zmian"
 
-#: rhodecode/templates/changeset/changeset.html:14
-msgid "Changeset"
-msgstr "Grupy zmian"
-
-#: rhodecode/templates/changeset/changeset.html:52
+#: rhodecode/templates/changeset/changeset.html:39
+msgid "No parents"
+msgstr "Brak rewizji"
+
+#: rhodecode/templates/changeset/changeset.html:49
 #, fuzzy
 msgid "No children"
 msgstr "Brak dzieci"
 
-#: rhodecode/templates/changeset/changeset.html:70
-#: rhodecode/templates/changeset/diff_block.html:20
-msgid "raw diff"
+#: rhodecode/templates/changeset/changeset.html:62
+#: rhodecode/templates/changeset/changeset_file_comment.html:20
+#: rhodecode/templates/changeset/changeset_range.html:44
+msgid "Changeset status"
+msgstr "Status grupy zmian"
+
+#: rhodecode/templates/changeset/changeset.html:67
+#: rhodecode/templates/changeset/diff_block.html:23
+#, fuzzy
+msgid "Raw diff"
 msgstr "raw różnic"
 
-#: rhodecode/templates/changeset/changeset.html:71
-msgid "patch diff"
+#: rhodecode/templates/changeset/changeset.html:68
+#, fuzzy
+msgid "Patch diff"
 msgstr "poprawka różnic"
 
-#: rhodecode/templates/changeset/changeset.html:72
-#: rhodecode/templates/changeset/diff_block.html:21
-msgid "download diff"
+#: rhodecode/templates/changeset/changeset.html:69
+#: rhodecode/templates/changeset/diff_block.html:24
+#, fuzzy
+msgid "Download diff"
 msgstr "pobierz różnice"
 
-#: rhodecode/templates/changeset/changeset.html:76
-#: rhodecode/templates/changeset/changeset_file_comment.html:82
+#: rhodecode/templates/changeset/changeset.html:73
+#: rhodecode/templates/changeset/changeset_file_comment.html:97
 #, python-format
 msgid "%d comment"
 msgid_plural "%d comments"
@@ -3271,8 +3609,8 @@
 msgstr[1] "%d komentarzy"
 msgstr[2] "%d komentarzy"
 
-#: rhodecode/templates/changeset/changeset.html:76
-#: rhodecode/templates/changeset/changeset_file_comment.html:82
+#: rhodecode/templates/changeset/changeset.html:73
+#: rhodecode/templates/changeset/changeset_file_comment.html:97
 #, python-format
 msgid "(%d inline)"
 msgid_plural "(%d inline)"
@@ -3280,9 +3618,14 @@
 msgstr[1] "(%d linii)"
 msgstr[2] "(%d linii)"
 
-#: rhodecode/templates/changeset/changeset.html:122
-#: rhodecode/templates/compare/compare_diff.html:44
-#: rhodecode/templates/pullrequests/pullrequest_show.html:76
+#: rhodecode/templates/changeset/changeset.html:103
+#: rhodecode/templates/changeset/changeset_range.html:77
+msgid "merge"
+msgstr "połącz"
+
+#: rhodecode/templates/changeset/changeset.html:119
+#: rhodecode/templates/compare/compare_diff.html:40
+#: rhodecode/templates/pullrequests/pullrequest_show.html:113
 #, python-format
 msgid "%s file changed"
 msgid_plural "%s files changed"
@@ -3290,9 +3633,9 @@
 msgstr[1] "%s pliki zostały zmienione"
 msgstr[2] "%s plików zostało zmienionych"
 
-#: rhodecode/templates/changeset/changeset.html:124
-#: rhodecode/templates/compare/compare_diff.html:46
-#: rhodecode/templates/pullrequests/pullrequest_show.html:78
+#: rhodecode/templates/changeset/changeset.html:121
+#: rhodecode/templates/compare/compare_diff.html:42
+#: rhodecode/templates/pullrequests/pullrequest_show.html:115
 #, python-format
 msgid "%s file changed with %s insertions and %s deletions"
 msgid_plural "%s files changed with %s insertions and %s deletions"
@@ -3300,56 +3643,82 @@
 msgstr[1] "%s plików zostało zmienionych z %s inercjami i %s usunięciami"
 msgstr[2] "%s plików zostało zmienionych z %s inercjami i %s usunięciami"
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:42
+#: rhodecode/templates/changeset/changeset.html:134
+#: rhodecode/templates/changeset/changeset.html:146
+#: rhodecode/templates/pullrequests/pullrequest_show.html:131
+#: rhodecode/templates/pullrequests/pullrequest_show.html:195
+msgid "Showing a huge diff might take some time and resources"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset.html:134
+#: rhodecode/templates/changeset/changeset.html:146
+#: rhodecode/templates/compare/compare_diff.html:58
+#: rhodecode/templates/compare/compare_diff.html:69
+#: rhodecode/templates/pullrequests/pullrequest_show.html:131
+#: rhodecode/templates/pullrequests/pullrequest_show.html:195
+#, fuzzy
+msgid "Show full diff"
+msgstr "pokaż pełną historię"
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:30
+#, fuzzy, python-format
+msgid "Status change on pull request #%s"
+msgstr "wszystkie prośby połączenia gałęzi %s"
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:32
+#, fuzzy, python-format
+msgid "Comment on pull request #%s"
+msgstr "[komentarz] wniosek o połączenie gałęzi %s"
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:57
 msgid "Submitting..."
 msgstr "Przesyłanie..."
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:45
+#: rhodecode/templates/changeset/changeset_file_comment.html:60
 msgid "Commenting on line {1}."
 msgstr "Komentując linię {1}."
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:46
-#: rhodecode/templates/changeset/changeset_file_comment.html:121
+#: rhodecode/templates/changeset/changeset_file_comment.html:61
+#: rhodecode/templates/changeset/changeset_file_comment.html:139
 #, python-format
 msgid "Comments parsed using %s syntax with %s support."
 msgstr "Komentarze analizowane za pomocą %s składni od %s wsparcia."
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:48
-#: rhodecode/templates/changeset/changeset_file_comment.html:123
+#: rhodecode/templates/changeset/changeset_file_comment.html:63
+#: rhodecode/templates/changeset/changeset_file_comment.html:141
 msgid "Use @username inside this text to send notification to this RhodeCode user"
-msgstr "Użyj @username wewnątrz tego tekstu, aby wysłać powiadomienie do użytkownika strony"
-
-#: rhodecode/templates/changeset/changeset_file_comment.html:59
-#: rhodecode/templates/changeset/changeset_file_comment.html:143
+msgstr ""
+"Użyj @username wewnątrz tego tekstu, aby wysłać powiadomienie do "
+"użytkownika strony"
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:74
+#: rhodecode/templates/changeset/changeset_file_comment.html:161
 msgid "Comment"
 msgstr "Komentarz"
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:60
-#: rhodecode/templates/changeset/changeset_file_comment.html:71
-msgid "Hide"
-msgstr "Ukryj"
-
-#: rhodecode/templates/changeset/changeset_file_comment.html:67
+#: rhodecode/templates/changeset/changeset_file_comment.html:75
+#, fuzzy
+msgid "Cancel"
+msgstr "zmiana"
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:82
 msgid "You need to be logged in to comment."
 msgstr "Musisz być zalogowany żeby komentarz."
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:67
+#: rhodecode/templates/changeset/changeset_file_comment.html:82
 msgid "Login now"
 msgstr "Zaloguj się teraz"
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:118
-msgid "Leave a comment"
-msgstr "Napisz komentarz"
-
-#: rhodecode/templates/changeset/changeset_file_comment.html:125
-msgid "Check this to change current status of code-review for this changeset"
-msgstr "Zaznacz to, aby zmienić bieżący stan code przeglądu tego zestawienia zmian"
-
-#: rhodecode/templates/changeset/changeset_file_comment.html:125
-msgid "change status"
+#: rhodecode/templates/changeset/changeset_file_comment.html:86
+msgid "Hide"
+msgstr "Ukryj"
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:143
+#, fuzzy
+msgid "Change status"
 msgstr "zmień status"
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:145
+#: rhodecode/templates/changeset/changeset_file_comment.html:163
 msgid "Comment and close"
 msgstr "Skomentuj i zamknij"
 
@@ -3358,33 +3727,49 @@
 msgid "%s Changesets"
 msgstr "%s Zestawienie zmian"
 
-#: rhodecode/templates/changeset/changeset_range.html:29
-#: rhodecode/templates/compare/compare_diff.html:29
-msgid "Compare View"
-msgstr "Wyświetl Porównanie"
-
-#: rhodecode/templates/changeset/changeset_range.html:29
-msgid "Show combined compare"
-msgstr "Pokaż połączone porównaj"
-
-#: rhodecode/templates/changeset/changeset_range.html:54
+#: rhodecode/templates/changeset/changeset_range.html:52
 msgid "Files affected"
 msgstr "pliki naruszone"
 
-#: rhodecode/templates/changeset/diff_block.html:19
-msgid "show full diff for this file"
+#: rhodecode/templates/changeset/diff_block.html:22
+#, fuzzy
+msgid "Show full diff for this file"
 msgstr "pokaż pełną edycja tego pliku"
 
-#: rhodecode/templates/changeset/diff_block.html:27
-msgid "show inline comments"
+#: rhodecode/templates/changeset/diff_block.html:30
+#, fuzzy
+msgid "Show inline comments"
 msgstr "pokaż online komentarz"
 
-#: rhodecode/templates/compare/compare_cs.html:5
+#: rhodecode/templates/changeset/diff_block.html:55
+msgid "Show file at latest version in this repo"
+msgstr ""
+
+#: rhodecode/templates/changeset/diff_block.html:56
+msgid "Show file at initial version in this repo"
+msgstr ""
+
+#: rhodecode/templates/compare/compare_cs.html:4
 msgid "No changesets"
 msgstr "Brak zestawienia zmian"
 
-#: rhodecode/templates/compare/compare_diff.html:37
-#: rhodecode/templates/pullrequests/pullrequest_show.html:69
+#: rhodecode/templates/compare/compare_cs.html:32
+#, fuzzy
+msgid "Ancestor"
+msgstr "gałęzie"
+
+#: rhodecode/templates/compare/compare_diff.html:5
+#, fuzzy, python-format
+msgid "%s Compare"
+msgstr "%s Porównaj"
+
+#: rhodecode/templates/compare/compare_diff.html:9
+#, fuzzy
+msgid "Compare revisions"
+msgstr "poprzednia wersja"
+
+#: rhodecode/templates/compare/compare_diff.html:33
+#: rhodecode/templates/pullrequests/pullrequest_show.html:106
 #, python-format
 msgid "Showing %s commit"
 msgid_plural "Showing %s commits"
@@ -3392,120 +3777,132 @@
 msgstr[1] "Pokaż %s komentarze"
 msgstr[2] "Pokaż %s komentarze"
 
-#: rhodecode/templates/compare/compare_diff.html:52
-#: rhodecode/templates/pullrequests/pullrequest_show.html:84
+#: rhodecode/templates/compare/compare_diff.html:48
+#: rhodecode/templates/pullrequests/pullrequest_show.html:121
 msgid "No files"
 msgstr "Brak plików"
 
-#: rhodecode/templates/data_table/_dt_elements.html:39
-#: rhodecode/templates/data_table/_dt_elements.html:41
-#: rhodecode/templates/data_table/_dt_elements.html:43
-msgid "Fork"
-msgstr "Gałąź"
-
-#: rhodecode/templates/data_table/_dt_elements.html:60
-#: rhodecode/templates/journal/journal.html:89
-#: rhodecode/templates/summary/summary.html:77
+#: rhodecode/templates/compare/compare_diff.html:58
+#: rhodecode/templates/compare/compare_diff.html:69
+msgid "confirm to show potentially huge diff"
+msgstr ""
+
+#: rhodecode/templates/data_table/_dt_elements.html:54
+#: rhodecode/templates/summary/summary.html:69
 msgid "Mercurial repository"
 msgstr "Repozytorium mercurial"
 
-#: rhodecode/templates/data_table/_dt_elements.html:62
-#: rhodecode/templates/journal/journal.html:91
-#: rhodecode/templates/summary/summary.html:80
+#: rhodecode/templates/data_table/_dt_elements.html:56
+#: rhodecode/templates/summary/summary.html:72
 msgid "Git repository"
 msgstr "Repozytorium git"
 
-#: rhodecode/templates/data_table/_dt_elements.html:69
-#: rhodecode/templates/journal/journal.html:97
-#: rhodecode/templates/summary/summary.html:87
-msgid "public repository"
-msgstr "Publiczne repozytorium"
-
-#: rhodecode/templates/data_table/_dt_elements.html:80
-#: rhodecode/templates/summary/summary.html:96
-#: rhodecode/templates/summary/summary.html:97
-msgid "Fork of"
-msgstr "Gałąź z"
-
-#: rhodecode/templates/data_table/_dt_elements.html:94
+#: rhodecode/templates/data_table/_dt_elements.html:74
+#, fuzzy, python-format
+msgid "Fork of %s"
+msgstr "nazwa rozgałęzienia %s"
+
+#: rhodecode/templates/data_table/_dt_elements.html:88
 msgid "No changesets yet"
 msgstr "Nie ma jeszcze zestawienia zmian"
 
-#: rhodecode/templates/data_table/_dt_elements.html:101
-#: rhodecode/templates/data_table/_dt_elements.html:103
+#: rhodecode/templates/data_table/_dt_elements.html:95
+#: rhodecode/templates/data_table/_dt_elements.html:97
 #, python-format
 msgid "Subscribe to %s rss feed"
 msgstr "Subskrybuj %s kanał rss"
 
-#: rhodecode/templates/data_table/_dt_elements.html:109
-#: rhodecode/templates/data_table/_dt_elements.html:111
+#: rhodecode/templates/data_table/_dt_elements.html:103
+#: rhodecode/templates/data_table/_dt_elements.html:105
 #, python-format
 msgid "Subscribe to %s atom feed"
 msgstr "Subskrybuj %s kanał atom"
 
 #: rhodecode/templates/data_table/_dt_elements.html:122
 #, python-format
+msgid "Confirm to delete this repository: %s"
+msgstr "Potwierdź usunięcie repozytorium: %s"
+
+#: rhodecode/templates/data_table/_dt_elements.html:131
+#, python-format
 msgid "Confirm to delete this user: %s"
 msgstr "Potwierdź usunięcie tego użytkownika: %s"
 
-#: rhodecode/templates/email_templates/changeset_comment.html:10
-msgid "New status$"
-msgstr "Nowy status$"
+#: rhodecode/templates/email_templates/changeset_comment.html:9
+#: rhodecode/templates/email_templates/pull_request_comment.html:15
+msgid "New status"
+msgstr "Nowy status"
+
+#: rhodecode/templates/email_templates/changeset_comment.html:11
+#: rhodecode/templates/email_templates/pull_request_comment.html:9
+msgid "View this comment here"
+msgstr "Zobacz ten komentarz tutaj"
+
+#: rhodecode/templates/email_templates/changeset_comment.html:14
+#, fuzzy
+msgid "Repo"
+msgstr "Moje repo"
+
+#: rhodecode/templates/email_templates/changeset_comment.html:16
+msgid "desc"
+msgstr ""
 
 #: rhodecode/templates/email_templates/main.html:8
 msgid "This is a notification from RhodeCode."
 msgstr "To jest powiadomienie z strony"
 
 #: rhodecode/templates/email_templates/password_reset.html:4
-msgid "Hello"
-msgstr "Witaj"
-
-#: rhodecode/templates/email_templates/password_reset.html:6
+#, fuzzy, python-format
+msgid "Hello %s"
+msgstr "Witaj %s"
+
+#: rhodecode/templates/email_templates/password_reset.html:5
 msgid "We received a request to create a new password for your account."
 msgstr "Otrzymaliśmy prośbę o utworzenie nowego hasła do twojego konta."
 
-#: rhodecode/templates/email_templates/password_reset.html:8
+#: rhodecode/templates/email_templates/password_reset.html:6
 msgid "You can generate it by clicking following URL"
 msgstr "Możesz wygenerować nowe hasło klikając w link URL poniżej:"
 
-#: rhodecode/templates/email_templates/password_reset.html:12
-msgid "If you didn't request new password please ignore this email."
+#: rhodecode/templates/email_templates/password_reset.html:11
+#, fuzzy
+msgid "If you did not request new password please ignore this email."
 msgstr "Jeśli nie chcesz wygenerować nowego hasła to zignoruj tą wiadomość."
 
 #: rhodecode/templates/email_templates/pull_request.html:4
 #, python-format
-msgid "User %s opened pull request for repository %s and wants you to review changes."
-msgstr "Użytkownik %s zgłosił wniosek połączenia w repozytorium %s i chce żeby sprawdzić zmiany."
+msgid ""
+"User %s opened pull request for repository %s and wants you to review "
+"changes."
+msgstr ""
+"Użytkownik %s zgłosił wniosek połączenia w repozytorium %s i chce żeby "
+"sprawdzić zmiany."
 
 #: rhodecode/templates/email_templates/pull_request.html:5
+msgid "View this pull request here"
+msgstr "Wyświetl prośby pobrania tutaj"
+
+#: rhodecode/templates/email_templates/pull_request.html:6
 msgid "title"
 msgstr "tytuł"
 
-#: rhodecode/templates/email_templates/pull_request.html:6
-#: rhodecode/templates/pullrequests/pullrequest.html:115
+#: rhodecode/templates/email_templates/pull_request.html:7
 msgid "description"
 msgstr "opis"
 
-#: rhodecode/templates/email_templates/pull_request.html:11
+#: rhodecode/templates/email_templates/pull_request.html:12
 msgid "revisions for reviewing"
 msgstr "korekty dotyczące rewizji"
 
-#: rhodecode/templates/email_templates/pull_request.html:18
-msgid "View this pull request here"
-msgstr "Wyświetl prośby pobrania tutaj"
-
-#: rhodecode/templates/email_templates/pull_request_comment.html:4
-#, python-format
-msgid "User %s commented on pull request #%s for repository %s"
-msgstr "Użytkownik %s skomentował wniosek o połączenie gałęzi #%s dla repozytorium %s"
-
-#: rhodecode/templates/email_templates/pull_request_comment.html:10
-msgid "New status"
-msgstr "Nowy status"
-
-#: rhodecode/templates/email_templates/pull_request_comment.html:14
-msgid "View this comment here"
-msgstr "Zobacz ten komentarz tutaj"
+#: rhodecode/templates/email_templates/pull_request_comment.html:3
+#, fuzzy, python-format
+msgid "Pull request #%s for repository %s"
+msgstr "Połączenie gałęzi #%s dla repozytorium %s"
+
+#: rhodecode/templates/email_templates/pull_request_comment.html:13
+#, fuzzy
+msgid "Closing pull request with status"
+msgstr "Żądanie statusu połączenia gałęzi"
 
 #: rhodecode/templates/email_templates/registration.html:4
 msgid "A new user have registered in RhodeCode"
@@ -3515,109 +3912,115 @@
 msgid "View this user here"
 msgstr "Zobacz tego użytkownika tutaj"
 
-#: rhodecode/templates/errors/error_document.html:46
+#: rhodecode/templates/errors/error_document.html:55
 #, python-format
 msgid "You will be redirected to %s in %s seconds"
 msgstr "Zostaniesz przekierowany do %s za %s sekund"
 
 #: rhodecode/templates/files/file_diff.html:4
-#, python-format
-msgid "%s File diff"
+#, fuzzy, python-format
+msgid "%s File Diff"
 msgstr "%s Pliki różnic"
 
-#: rhodecode/templates/files/file_diff.html:12
+#: rhodecode/templates/files/file_diff.html:8
 msgid "File diff"
 msgstr "Pliki różnic"
 
 #: rhodecode/templates/files/files.html:4
-#: rhodecode/templates/files/files.html:74
-#, python-format
-msgid "%s files"
+#: rhodecode/templates/files/files.html:76
+#, fuzzy, python-format
+msgid "%s Files"
 msgstr "Pliki %s"
 
-#: rhodecode/templates/files/files.html:12
-#: rhodecode/templates/summary/summary.html:351
-msgid "files"
-msgstr "pliki"
+#: rhodecode/templates/files/files.html:30
+#: rhodecode/templates/files/files_add.html:31
+#: rhodecode/templates/files/files_edit.html:31
+#: rhodecode/templates/shortlog/shortlog_data.html:9
+#, fuzzy
+msgid "Branch"
+msgstr "gałąź"
 
 #: rhodecode/templates/files/files_add.html:4
-#: rhodecode/templates/files/files_edit.html:4
-#, python-format
-msgid "%s Edit file"
-msgstr "Edytuj plik %s"
+#, fuzzy, python-format
+msgid "%s Files Add"
+msgstr "Pliki %s"
 
 #: rhodecode/templates/files/files_add.html:19
-msgid "add file"
+#, fuzzy
+msgid "Add file"
 msgstr "dodaj plik"
 
-#: rhodecode/templates/files/files_add.html:40
+#: rhodecode/templates/files/files_add.html:38
+#: rhodecode/templates/files/files_browser.html:31
+#: rhodecode/templates/shortlog/shortlog_data.html:78
 msgid "Add new file"
 msgstr "Dodaj nowy plik"
 
-#: rhodecode/templates/files/files_add.html:45
+#: rhodecode/templates/files/files_add.html:43
 msgid "File Name"
 msgstr "Nazwa Pliku"
 
-#: rhodecode/templates/files/files_add.html:49
-#: rhodecode/templates/files/files_add.html:58
+#: rhodecode/templates/files/files_add.html:47
+#: rhodecode/templates/files/files_add.html:56
 msgid "or"
 msgstr "lub"
 
-#: rhodecode/templates/files/files_add.html:49
-#: rhodecode/templates/files/files_add.html:54
+#: rhodecode/templates/files/files_add.html:47
+#: rhodecode/templates/files/files_add.html:52
 msgid "Upload file"
 msgstr "Dodaj plik"
 
-#: rhodecode/templates/files/files_add.html:58
+#: rhodecode/templates/files/files_add.html:56
 msgid "Create new file"
 msgstr "Utwórz nowy plik"
 
-#: rhodecode/templates/files/files_add.html:63
-#: rhodecode/templates/files/files_edit.html:39
+#: rhodecode/templates/files/files_add.html:61
+#: rhodecode/templates/files/files_edit.html:37
 #: rhodecode/templates/files/files_ypjax.html:3
 msgid "Location"
 msgstr "Położenie"
 
-#: rhodecode/templates/files/files_add.html:67
+#: rhodecode/templates/files/files_add.html:65
 msgid "use / to separate directories"
 msgstr "Użyj / do oddzielenia katalogów"
 
-#: rhodecode/templates/files/files_add.html:77
-#: rhodecode/templates/files/files_edit.html:63
+#: rhodecode/templates/files/files_add.html:75
+#: rhodecode/templates/files/files_edit.html:61
 #: rhodecode/templates/shortlog/shortlog_data.html:6
-msgid "commit message"
+#, fuzzy
+msgid "Commit message"
 msgstr "komentarz"
 
-#: rhodecode/templates/files/files_add.html:81
-#: rhodecode/templates/files/files_edit.html:67
+#: rhodecode/templates/files/files_add.html:79
+#: rhodecode/templates/files/files_edit.html:65
 msgid "Commit changes"
 msgstr "Zatwierdź zmiany"
 
 #: rhodecode/templates/files/files_browser.html:13
-msgid "view"
+#, fuzzy
+msgid "View"
 msgstr "widok"
 
 #: rhodecode/templates/files/files_browser.html:14
-msgid "previous revision"
+#, fuzzy
+msgid "Previous revision"
 msgstr "poprzednia wersja"
 
 #: rhodecode/templates/files/files_browser.html:16
-msgid "next revision"
+#, fuzzy
+msgid "Next revision"
 msgstr "następna wersja"
 
 #: rhodecode/templates/files/files_browser.html:23
-msgid "follow current branch"
+#, fuzzy
+msgid "Follow current branch"
 msgstr "śledź mierzącą gałąź"
 
 #: rhodecode/templates/files/files_browser.html:27
-msgid "search file list"
+#, fuzzy
+msgid "Search file list"
 msgstr "lista szukanych plików"
 
-#: rhodecode/templates/files/files_browser.html:31
-#: rhodecode/templates/shortlog/shortlog_data.html:78
-msgid "add new file"
-msgstr "dodaj nowy plik"
-
 #: rhodecode/templates/files/files_browser.html:35
 msgid "Loading file list..."
 msgstr "Wczytywanie listy plików..."
@@ -3639,34 +4042,44 @@
 msgstr "Ostatnio modyfikowany"
 
 #: rhodecode/templates/files/files_browser.html:52
-msgid "Last commiter"
+msgid "Last committer"
 msgstr "Autor"
 
+#: rhodecode/templates/files/files_edit.html:4
+#, fuzzy, python-format
+msgid "%s Files Edit"
+msgstr "Pliki %s"
+
 #: rhodecode/templates/files/files_edit.html:19
-msgid "edit file"
+#, fuzzy
+msgid "Edit file"
 msgstr "edytuj plik"
 
+#: rhodecode/templates/files/files_edit.html:47
+#: rhodecode/templates/files/files_source.html:23
+#, fuzzy
+msgid "Show annotation"
+msgstr "pokaż adnotacje"
+
+#: rhodecode/templates/files/files_edit.html:48
+#: rhodecode/templates/files/files_source.html:25
+#: rhodecode/templates/files/files_source.html:55
+#, fuzzy
+msgid "Show as raw"
+msgstr "wyświetl jako raw"
+
 #: rhodecode/templates/files/files_edit.html:49
-#: rhodecode/templates/files/files_source.html:23
-msgid "show annotation"
-msgstr "pokaż adnotacje"
-
-#: rhodecode/templates/files/files_edit.html:50
-#: rhodecode/templates/files/files_source.html:25
-#: rhodecode/templates/files/files_source.html:53
-msgid "show as raw"
-msgstr "wyświetl jako raw"
-
-#: rhodecode/templates/files/files_edit.html:51
 #: rhodecode/templates/files/files_source.html:26
-msgid "download as raw"
+#, fuzzy
+msgid "Download as raw"
 msgstr "Pobierz jako raw"
 
-#: rhodecode/templates/files/files_edit.html:54
-msgid "source"
+#: rhodecode/templates/files/files_edit.html:52
+#, fuzzy
+msgid "Source"
 msgstr "źródło"
 
-#: rhodecode/templates/files/files_edit.html:59
+#: rhodecode/templates/files/files_edit.html:57
 msgid "Editing file"
 msgstr "Edycja pliku"
 
@@ -3675,15 +4088,18 @@
 msgstr "Historia"
 
 #: rhodecode/templates/files/files_history_box.html:9
-msgid "diff to revision"
+#, fuzzy
+msgid "Diff to revision"
 msgstr "różnice do rewizji"
 
 #: rhodecode/templates/files/files_history_box.html:10
-msgid "show at revision"
+#, fuzzy
+msgid "Show at revision"
 msgstr "wskaż zmiany"
 
 #: rhodecode/templates/files/files_history_box.html:11
-msgid "show full history"
+#, fuzzy
+msgid "Show full history"
 msgstr "pokaż pełną historię"
 
 #: rhodecode/templates/files/files_history_box.html:16
@@ -3699,15 +4115,30 @@
 msgstr "Załaduj historię pliku"
 
 #: rhodecode/templates/files/files_source.html:21
-msgid "show source"
+#, fuzzy
+msgid "Show source"
 msgstr "pokaż źródło"
 
-#: rhodecode/templates/files/files_source.html:44
+#: rhodecode/templates/files/files_source.html:29
+#, fuzzy, python-format
+msgid "Edit on branch:%s"
+msgstr "Usunięta gałąź: %s"
+
+#: rhodecode/templates/files/files_source.html:31
+#, fuzzy
+msgid "Edit on branch:?"
+msgstr "Usunięta gałąź: %s"
+
+#: rhodecode/templates/files/files_source.html:31
+msgid "Editing files allowed only when on branch head revision"
+msgstr ""
+
+#: rhodecode/templates/files/files_source.html:46
 #, python-format
 msgid "Binary file (%s)"
 msgstr "Plik binarny (%s)"
 
-#: rhodecode/templates/files/files_source.html:53
+#: rhodecode/templates/files/files_source.html:55
 msgid "File is too big to display"
 msgstr "Plik jest za duży do wyświetlenia"
 
@@ -3728,9 +4159,11 @@
 msgid "%s Followers"
 msgstr "Obserwatorzy %s"
 
-#: rhodecode/templates/followers/followers.html:13
-msgid "followers"
-msgstr "obserwatorzy"
+#: rhodecode/templates/followers/followers.html:9
+#: rhodecode/templates/summary/summary.html:183
+#: rhodecode/templates/summary/summary.html:184
+msgid "Followers"
+msgstr "Obserwowane"
 
 #: rhodecode/templates/followers/followers_data.html:12
 msgid "Started following -"
@@ -3741,32 +4174,33 @@
 msgid "%s Fork"
 msgstr "Gałęzi %s"
 
-#: rhodecode/templates/forks/fork.html:31
+#: rhodecode/templates/forks/fork.html:28
 msgid "Fork name"
 msgstr "Nazwa rozgałęzienia"
 
-#: rhodecode/templates/forks/fork.html:68
+#: rhodecode/templates/forks/fork.html:65
 msgid "Private"
 msgstr "Prywatny"
 
-#: rhodecode/templates/forks/fork.html:77
+#: rhodecode/templates/forks/fork.html:74
 msgid "Copy permissions"
 msgstr "Skopiuj uprawnienia"
 
-#: rhodecode/templates/forks/fork.html:81
+#: rhodecode/templates/forks/fork.html:78
 msgid "Copy permissions from forked repository"
 msgstr "Skopiuj zezwolenia z rozwidlenia repozytorium"
 
-#: rhodecode/templates/forks/fork.html:86
+#: rhodecode/templates/forks/fork.html:84
 msgid "Update after clone"
 msgstr "Aktualizuj po klonowaniu"
 
-#: rhodecode/templates/forks/fork.html:90
+#: rhodecode/templates/forks/fork.html:88
 msgid "Checkout source after making a clone"
 msgstr "Sprawdź źródło po wykonaniu klonowania"
 
-#: rhodecode/templates/forks/fork.html:94
-msgid "fork this repository"
+#: rhodecode/templates/forks/fork.html:93
+#, fuzzy
+msgid "Fork this repository"
 msgstr "gałąź tego repozytorium"
 
 #: rhodecode/templates/forks/forks.html:5
@@ -3774,12 +4208,15 @@
 msgid "%s Forks"
 msgstr "Gałęzi %s"
 
-#: rhodecode/templates/forks/forks.html:13
-msgid "forks"
-msgstr "gałąź"
+#: rhodecode/templates/forks/forks.html:9
+#: rhodecode/templates/summary/summary.html:189
+#: rhodecode/templates/summary/summary.html:190
+msgid "Forks"
+msgstr "Gałęzie"
 
 #: rhodecode/templates/forks/forks_data.html:17
-msgid "forked"
+#, fuzzy
+msgid "Forked"
 msgstr "rozgałęziony"
 
 #: rhodecode/templates/forks/forks_data.html:42
@@ -3795,44 +4232,27 @@
 msgstr "Dziennik kanału RSS"
 
 #: rhodecode/templates/journal/journal.html:32
-#: rhodecode/templates/pullrequests/pullrequest.html:55
 msgid "Refresh"
 msgstr "Odśwież"
 
 #: rhodecode/templates/journal/journal.html:35
 #: rhodecode/templates/journal/public_journal.html:24
-msgid "RSS feed"
-msgstr "Kanał RSS"
-
-#: rhodecode/templates/journal/journal.html:38
-#: rhodecode/templates/journal/public_journal.html:27
 msgid "ATOM feed"
 msgstr "Kanał ATOM"
 
-#: rhodecode/templates/journal/journal.html:49
+#: rhodecode/templates/journal/journal.html:51
 msgid "Watched"
 msgstr "Obserwowane"
 
-#: rhodecode/templates/journal/journal.html:54
-msgid "ADD"
-msgstr "DODAJ"
-
-#: rhodecode/templates/journal/journal.html:77
-msgid "following user"
-msgstr "następujący użytkownik"
-
-#: rhodecode/templates/journal/journal.html:77
-msgid "user"
-msgstr "użytkownik"
-
-#: rhodecode/templates/journal/journal.html:110
-msgid "You are not following any users or repositories"
-msgstr "Nie obserwujesz żadnych użytkowników lub repozytoriów"
-
 #: rhodecode/templates/journal/journal_data.html:55
 msgid "No entries yet"
 msgstr "Brak wpisów jeszcze"
 
+#: rhodecode/templates/journal/public_journal.html:4
+#: rhodecode/templates/journal/public_journal.html:21
+msgid "Public Journal"
+msgstr "Dziennik Publiczny"
+
 #: rhodecode/templates/journal/public_journal.html:13
 msgid "ATOM public journal feed"
 msgstr "Publiczny dziennik kanału ATOM"
@@ -3841,75 +4261,61 @@
 msgid "RSS public journal feed"
 msgstr "Publiczny dziennik kanału RSS"
 
-#: rhodecode/templates/journal/public_journal.html:21
-msgid "Public Journal"
-msgstr "Dziennik Publiczny"
-
 #: rhodecode/templates/pullrequests/pullrequest.html:4
-#: rhodecode/templates/pullrequests/pullrequest.html:12
+#: rhodecode/templates/pullrequests/pullrequest.html:8
 msgid "New pull request"
 msgstr "Nowa prośba o połączenie gałęzi"
 
-#: rhodecode/templates/pullrequests/pullrequest.html:54
-msgid "refresh overview"
-msgstr "odśwież informacje"
-
-#: rhodecode/templates/pullrequests/pullrequest.html:66
+#: rhodecode/templates/pullrequests/pullrequest.html:52
 msgid "Detailed compare view"
 msgstr "Szczegółowe porównanie widoku"
 
-#: rhodecode/templates/pullrequests/pullrequest.html:70
-#: rhodecode/templates/pullrequests/pullrequest_show.html:100
+#: rhodecode/templates/pullrequests/pullrequest.html:56
+#: rhodecode/templates/pullrequests/pullrequest_show.html:137
 msgid "Pull request reviewers"
 msgstr "Recenzje wniosków połączenia gałęzi"
 
-#: rhodecode/templates/pullrequests/pullrequest.html:79
-#: rhodecode/templates/pullrequests/pullrequest_show.html:112
+#: rhodecode/templates/pullrequests/pullrequest.html:65
+#: rhodecode/templates/pullrequests/pullrequest_show.html:149
 msgid "owner"
 msgstr "właściciel"
 
-#: rhodecode/templates/pullrequests/pullrequest.html:91
-#: rhodecode/templates/pullrequests/pullrequest_show.html:127
+#: rhodecode/templates/pullrequests/pullrequest.html:77
 msgid "Add reviewer to this pull request."
 msgstr "Pokarz wszystkie zmiany"
 
-#: rhodecode/templates/pullrequests/pullrequest.html:97
+#: rhodecode/templates/pullrequests/pullrequest.html:83
 msgid "Create new pull request"
 msgstr "Stwórz nowe żądanie połączenia gałęzi"
 
-#: rhodecode/templates/pullrequests/pullrequest.html:106
+#: rhodecode/templates/pullrequests/pullrequest.html:92
+#: rhodecode/templates/pullrequests/pullrequest_data.html:14
 #: rhodecode/templates/pullrequests/pullrequest_show.html:25
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:33
 msgid "Title"
 msgstr "Tytuł"
 
-#: rhodecode/templates/pullrequests/pullrequest.html:123
+#: rhodecode/templates/pullrequests/pullrequest.html:109
 msgid "Send pull request"
 msgstr "Wyślij prośbę o połączenie gałęzi"
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:23
-#, python-format
-msgid "Closed %s"
-msgstr "Zamknięty %s"
-
-#: rhodecode/templates/pullrequests/pullrequest_show.html:23
-#, python-format
-msgid "with status %s"
-msgstr "stanu z %s"
-
-#: rhodecode/templates/pullrequests/pullrequest_show.html:31
-msgid "Status"
-msgstr "Status"
-
-#: rhodecode/templates/pullrequests/pullrequest_show.html:36
+#: rhodecode/templates/pullrequests/pullrequest_show.html:4
+#, fuzzy, python-format
+msgid "%s Pull Request #%s"
+msgstr "%s Połączonych gałęzi #%s"
+
+#: rhodecode/templates/pullrequests/pullrequest_show.html:35
+msgid "Review status"
+msgstr "Nowy status"
+
+#: rhodecode/templates/pullrequests/pullrequest_show.html:40
 msgid "Pull request status"
 msgstr "Żądanie statusu połączenia gałęzi"
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:44
+#: rhodecode/templates/pullrequests/pullrequest_show.html:53
 msgid "Still not reviewed by"
 msgstr "Nie ma jeszcze recenzenta"
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:48
+#: rhodecode/templates/pullrequests/pullrequest_show.html:57
 #, python-format
 msgid "%d reviewer"
 msgid_plural "%d reviewers"
@@ -3917,72 +4323,70 @@
 msgstr[1] "%d recenzenci"
 msgstr[2] "%d recenzentów"
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:50
-msgid "pull request was reviewed by all reviewers"
+#: rhodecode/templates/pullrequests/pullrequest_show.html:59
+#, fuzzy
+msgid "Pull request was reviewed by all reviewers"
 msgstr "połączenie gałęzi zostało zweryfikowane przez wszystkich recenzentów"
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:58
+#: rhodecode/templates/pullrequests/pullrequest_show.html:65
+#, fuzzy
+msgid "Origin repository"
+msgstr "Repozytorium git"
+
+#: rhodecode/templates/pullrequests/pullrequest_show.html:89
 msgid "Created on"
 msgstr "Utworzono"
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:65
+#: rhodecode/templates/pullrequests/pullrequest_show.html:102
 msgid "Compare view"
 msgstr "Wyświetl porównanie"
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:112
+#: rhodecode/templates/pullrequests/pullrequest_show.html:149
 msgid "reviewer"
 msgstr "recenzent"
 
+#: rhodecode/templates/pullrequests/pullrequest_show.html:164
+#, fuzzy
+msgid "Add or remove reviewer to this pull request."
+msgstr "Pokarz wszystkie zmiany"
+
+#: rhodecode/templates/pullrequests/pullrequest_show.html:168
+#, fuzzy
+msgid "Save changes"
+msgstr "Bez zmian"
+
 #: rhodecode/templates/pullrequests/pullrequest_show_all.html:4
-msgid "all pull requests"
-msgstr "wszystkie prośby połączenia gałęzi"
-
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:12
-msgid "All pull requests"
-msgstr "Wszystkie prośby połączenia gałęzi"
-
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:27
-msgid "Closed"
-msgstr "Zamknięte"
+#, fuzzy, python-format
+msgid "%s Pull Requests"
+msgstr "%s Moje prośby połączenia gałęzi"
 
 #: rhodecode/templates/search/search.html:6
-#, python-format
-msgid "Search \"%s\" in repository: %s"
-msgstr "Wyszukiwanie \"%s\" w repozytorium: %s"
+#, fuzzy
+msgid "Search repository"
+msgstr "Szukaj w repozytorium: %s"
 
 #: rhodecode/templates/search/search.html:8
-#, python-format
-msgid "Search \"%s\" in all repositories"
-msgstr "Wyszukiwanie \"%s\" w wszystkich repozytoriach"
-
-#: rhodecode/templates/search/search.html:12
-#: rhodecode/templates/search/search.html:32
-#, python-format
-msgid "Search in repository: %s"
-msgstr "Szukaj w repozytorium: %s"
-
-#: rhodecode/templates/search/search.html:14
-#: rhodecode/templates/search/search.html:34
+#: rhodecode/templates/search/search.html:16
 msgid "Search in all repositories"
 msgstr "Szukaj we wszystkich repozytoriach"
 
-#: rhodecode/templates/search/search.html:48
+#: rhodecode/templates/search/search.html:50
 msgid "Search term"
 msgstr "Szukana fraza"
 
-#: rhodecode/templates/search/search.html:60
+#: rhodecode/templates/search/search.html:62
 msgid "Search in"
 msgstr "Szukaj w"
 
-#: rhodecode/templates/search/search.html:63
+#: rhodecode/templates/search/search.html:65
 msgid "File contents"
 msgstr "Zawartość pliku"
 
-#: rhodecode/templates/search/search.html:64
+#: rhodecode/templates/search/search.html:66
 msgid "Commit messages"
 msgstr "Komunikaty"
 
-#: rhodecode/templates/search/search.html:65
+#: rhodecode/templates/search/search.html:67
 msgid "File names"
 msgstr "Nazwy plików"
 
@@ -3992,40 +4396,25 @@
 msgid "Permission denied"
 msgstr "Brak uprawnień"
 
-#: rhodecode/templates/settings/repo_settings.html:5
-#, python-format
-msgid "%s Settings"
-msgstr "Ustawienia %s"
-
-#: rhodecode/templates/settings/repo_settings.html:102
-msgid "Delete repository"
-msgstr "Usuń repozytorium"
-
-#: rhodecode/templates/settings/repo_settings.html:109
-msgid "Remove repo"
-msgstr "Usuń repo"
-
 #: rhodecode/templates/shortlog/shortlog.html:5
-#, python-format
-msgid "%s Shortlog"
-msgstr "%s Lista zmian"
-
+#, fuzzy, python-format
+msgid "%s Lightweight Changelog"
+msgstr "%s Prosta lista zmian"
+
+#: rhodecode/templates/shortlog/shortlog.html:11
 #: rhodecode/templates/shortlog/shortlog.html:15
-#: rhodecode/templates/shortlog/shortlog.html:19
-msgid "shortlog"
-msgstr "lista zmian"
-
-#: rhodecode/templates/shortlog/shortlog_data.html:5
-msgid "revision"
-msgstr "rewizja"
+msgid "Lightweight Changelog"
+msgstr "Użyj lekkiego pulpitu"
 
 #: rhodecode/templates/shortlog/shortlog_data.html:7
-msgid "age"
+#, fuzzy
+msgid "Age"
 msgstr "ostatnia zmiana"
 
-#: rhodecode/templates/shortlog/shortlog_data.html:8
-msgid "author"
-msgstr "autor"
+#: rhodecode/templates/shortlog/shortlog_data.html:20
+#, fuzzy, python-format
+msgid "Click to open associated pull request #%s"
+msgstr "Kliknij żeby otworzyć prośbę o połączenie gałęzi #%s"
 
 #: rhodecode/templates/shortlog/shortlog_data.html:75
 msgid "Add or upload files directly via RhodeCode"
@@ -4044,156 +4433,170 @@
 msgid "%s Summary"
 msgstr "Podsumowanie %s"
 
-#: rhodecode/templates/summary/summary.html:12
-msgid "summary"
-msgstr "Podsumowanie"
-
-#: rhodecode/templates/summary/summary.html:20
-#, python-format
-msgid "repo %s ATOM feed"
-msgstr "repo %s kanał ATOM"
-
-#: rhodecode/templates/summary/summary.html:21
-#, python-format
-msgid "repo %s RSS feed"
-msgstr "repo %s kanał RSS"
-
-#: rhodecode/templates/summary/summary.html:49
-#: rhodecode/templates/summary/summary.html:52
-msgid "ATOM"
-msgstr "ATOM"
-
-#: rhodecode/templates/summary/summary.html:70
+#: rhodecode/templates/summary/summary.html:16
+#, fuzzy, python-format
+msgid "%s ATOM feed"
+msgstr "%s ATOM"
+
+#: rhodecode/templates/summary/summary.html:17
+#, fuzzy, python-format
+msgid "%s RSS feed"
+msgstr "%s RSS"
+
+#: rhodecode/templates/summary/summary.html:62
 #, python-format
 msgid "Repository locked by %s"
 msgstr "Repozytorium zablokowane przez %s"
 
-#: rhodecode/templates/summary/summary.html:72
+#: rhodecode/templates/summary/summary.html:64
 msgid "Repository unlocked"
 msgstr "Repozytorium odblokowane"
 
-#: rhodecode/templates/summary/summary.html:91
+#: rhodecode/templates/summary/summary.html:83
 #, python-format
 msgid "Non changable ID %s"
 msgstr "Brak ID pełnej zmiany %s"
 
-#: rhodecode/templates/summary/summary.html:96
-msgid "public"
+#: rhodecode/templates/summary/summary.html:88
+#, fuzzy
+msgid "Public"
 msgstr "publiczny"
 
-#: rhodecode/templates/summary/summary.html:104
-msgid "remote clone"
+#: rhodecode/templates/summary/summary.html:88
+#: rhodecode/templates/summary/summary.html:89
+msgid "Fork of"
+msgstr "Gałąź z"
+
+#: rhodecode/templates/summary/summary.html:96
+#, fuzzy
+msgid "Remote clone"
 msgstr "zdalne klonowanie"
 
-#: rhodecode/templates/summary/summary.html:125
+#: rhodecode/templates/summary/summary.html:117
 msgid "Contact"
 msgstr "Kontakt"
 
-#: rhodecode/templates/summary/summary.html:139
+#: rhodecode/templates/summary/summary.html:131
 msgid "Clone url"
 msgstr "Url klonowania"
 
-#: rhodecode/templates/summary/summary.html:142
+#: rhodecode/templates/summary/summary.html:136
 msgid "Show by Name"
 msgstr "Pokaż nazwę"
 
-#: rhodecode/templates/summary/summary.html:143
+#: rhodecode/templates/summary/summary.html:137
 msgid "Show by ID"
 msgstr "Pokaż ID"
 
+#: rhodecode/templates/summary/summary.html:143
+msgid "Trending files"
+msgstr "Statystyki"
+
 #: rhodecode/templates/summary/summary.html:151
-msgid "Trending files"
-msgstr "Statystyki"
+#: rhodecode/templates/summary/summary.html:167
+#: rhodecode/templates/summary/summary.html:232
+msgid "enable"
+msgstr "włącz"
 
 #: rhodecode/templates/summary/summary.html:159
-#: rhodecode/templates/summary/summary.html:175
-#: rhodecode/templates/summary/summary.html:203
-msgid "enable"
-msgstr "włącz"
-
-#: rhodecode/templates/summary/summary.html:167
 msgid "Download"
 msgstr "Pobierz"
 
-#: rhodecode/templates/summary/summary.html:171
+#: rhodecode/templates/summary/summary.html:163
 msgid "There are no downloads yet"
 msgstr "Nie pobrano jeszcze plików"
 
-#: rhodecode/templates/summary/summary.html:173
+#: rhodecode/templates/summary/summary.html:165
 msgid "Downloads are disabled for this repository"
 msgstr "Pliki do pobrania są zostały wyłączone dla tego repozytorium"
 
-#: rhodecode/templates/summary/summary.html:179
+#: rhodecode/templates/summary/summary.html:171
 msgid "Download as zip"
 msgstr "Pobierz jako zip"
 
-#: rhodecode/templates/summary/summary.html:182
+#: rhodecode/templates/summary/summary.html:174
 msgid "Check this to download archive with subrepos"
 msgstr "Zaznacz tu żeby pobrać archiwum z subrepozytorium"
 
-#: rhodecode/templates/summary/summary.html:182
+#: rhodecode/templates/summary/summary.html:174
 msgid "with subrepos"
 msgstr "z subrepozytorium"
 
-#: rhodecode/templates/summary/summary.html:195
+#: rhodecode/templates/summary/summary.html:197
+#, fuzzy
+msgid "Repository Size"
+msgstr "repozytoria"
+
+#: rhodecode/templates/summary/summary.html:204
+#: rhodecode/templates/summary/summary.html:206
+#, fuzzy
+msgid "Feed"
+msgstr "Kanał RSS"
+
+#: rhodecode/templates/summary/summary.html:224
 msgid "Commit activity by day / author"
 msgstr "komunikaty aktywne w ciągu dnia / autor"
 
-#: rhodecode/templates/summary/summary.html:206
+#: rhodecode/templates/summary/summary.html:235
 msgid "Stats gathered: "
 msgstr "Statystyki zebrane: "
 
-#: rhodecode/templates/summary/summary.html:227
-msgid "Shortlog"
-msgstr "Lista zmian"
-
-#: rhodecode/templates/summary/summary.html:229
+#: rhodecode/templates/summary/summary.html:256
+#, fuzzy
+msgid "Latest changes"
+msgstr "Ostatnia aktywność"
+
+#: rhodecode/templates/summary/summary.html:258
 msgid "Quick start"
 msgstr "Szybki start"
 
-#: rhodecode/templates/summary/summary.html:243
+#: rhodecode/templates/summary/summary.html:272
 #, python-format
 msgid "Readme file at revision '%s'"
 msgstr "Plik readme w rewizji '%s'"
 
-#: rhodecode/templates/summary/summary.html:246
+#: rhodecode/templates/summary/summary.html:275
 msgid "Permalink to this readme"
 msgstr "Link do tego readme"
 
-#: rhodecode/templates/summary/summary.html:304
+#: rhodecode/templates/summary/summary.html:333
 #, python-format
 msgid "Download %s as %s"
 msgstr "Pobierz %s jak %s"
 
-#: rhodecode/templates/summary/summary.html:661
+#: rhodecode/templates/summary/summary.html:380
+msgid "files"
+msgstr "pliki"
+
+#: rhodecode/templates/summary/summary.html:690
 msgid "commits"
 msgstr "komunikaty"
 
-#: rhodecode/templates/summary/summary.html:662
+#: rhodecode/templates/summary/summary.html:691
 msgid "files added"
 msgstr "pliki dodane"
 
-#: rhodecode/templates/summary/summary.html:663
+#: rhodecode/templates/summary/summary.html:692
 msgid "files changed"
 msgstr "pliki zmienione"
 
-#: rhodecode/templates/summary/summary.html:664
+#: rhodecode/templates/summary/summary.html:693
 msgid "files removed"
 msgstr "pliki usunięte"
 
-#: rhodecode/templates/summary/summary.html:667
+#: rhodecode/templates/summary/summary.html:695
 msgid "commit"
 msgstr "komunikaty"
 
-#: rhodecode/templates/summary/summary.html:668
+#: rhodecode/templates/summary/summary.html:696
 msgid "file added"
 msgstr "plik dodany"
 
-#: rhodecode/templates/summary/summary.html:669
+#: rhodecode/templates/summary/summary.html:697
 msgid "file changed"
 msgstr "plik zmieniony"
 
-#: rhodecode/templates/summary/summary.html:670
+#: rhodecode/templates/summary/summary.html:698
 msgid "file removed"
 msgstr "plik usunięty"
 
@@ -4202,32 +4605,7 @@
 msgid "%s Tags"
 msgstr "Etykiety pliku %s"
 
-#: rhodecode/templates/tags/tags.html:29
+#: rhodecode/templates/tags/tags.html:26
 msgid "Compare tags"
 msgstr "Porównaj tagi"
 
-#~ msgid ""
-#~ "%s repository is not mapped to db"
-#~ " perhaps it was created or renamed"
-#~ " from the file system please run "
-#~ "the application again in order to "
-#~ "rescan repositories"
-#~ msgstr ""
-#~ "%s repozytorium nie jest mapowane do "
-#~ "db może zostało utworzone lub zmienione"
-#~ " z systemu plików proszę uruchomić "
-#~ "aplikację ponownie, aby ponownie przeskanować"
-#~ " repozytoria"
-
-#~ msgid ""
-#~ "%s repository is not mapped to db"
-#~ " perhaps it was moved or renamed  "
-#~ "from the filesystem please run the "
-#~ "application again in order to rescan "
-#~ "repositories"
-#~ msgstr ""
-#~ "%s repozytorium nie jest mapowane do "
-#~ "db może zostało przeniesione lub "
-#~ "zmienione w systemie plików proszę "
-#~ "uruchomić aplikację ponownie, aby ponownie "
-#~ "przeskanować repozytoria"
Binary file rhodecode/i18n/pt_BR/LC_MESSAGES/rhodecode.mo has changed
--- a/rhodecode/i18n/pt_BR/LC_MESSAGES/rhodecode.po	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/i18n/pt_BR/LC_MESSAGES/rhodecode.po	Sun Apr 07 18:37:22 2013 +0200
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: RhodeCode 1.2.0\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2012-12-14 04:19+0100\n"
+"POT-Creation-Date: 2013-04-05 10:19-0700\n"
 "PO-Revision-Date: 2012-05-22 16:47-0300\n"
 "Last-Translator: Augusto Herrmann <augusto.herrmann@gmail.com>\n"
 "Language-Team: pt_BR <LL@li.org>\n"
@@ -22,11 +22,13 @@
 msgstr "Todos os Ramos"
 
 #: rhodecode/controllers/changeset.py:83
-msgid "show white space"
+#, fuzzy
+msgid "Show white space"
 msgstr "mostrar espaços em branco"
 
 #: rhodecode/controllers/changeset.py:90 rhodecode/controllers/changeset.py:97
-msgid "ignore white space"
+#, fuzzy
+msgid "Ignore white space"
 msgstr "ignorar espaços em branco"
 
 #: rhodecode/controllers/changeset.py:163
@@ -34,20 +36,20 @@
 msgid "%s line context"
 msgstr "contexto de %s linhas"
 
-#: rhodecode/controllers/changeset.py:314
-#: rhodecode/controllers/pullrequests.py:417
+#: rhodecode/controllers/changeset.py:329
+#: rhodecode/controllers/pullrequests.py:438
 #, fuzzy, python-format
 msgid "Status change -> %s"
 msgstr "Última alteração"
 
-#: rhodecode/controllers/changeset.py:345
+#: rhodecode/controllers/changeset.py:360
 msgid ""
-"Changing status on a changeset associated witha closed pull request is "
+"Changing status on a changeset associated with a closed pull request is "
 "not allowed"
 msgstr ""
 
-#: rhodecode/controllers/compare.py:75
-#: rhodecode/controllers/pullrequests.py:121
+#: rhodecode/controllers/compare.py:74
+#: rhodecode/controllers/pullrequests.py:167
 #: rhodecode/controllers/shortlog.py:100
 #, fuzzy
 msgid "There are no changesets yet"
@@ -94,129 +96,142 @@
 msgstr "%s - feed %s"
 
 #: rhodecode/controllers/feed.py:86
-#: rhodecode/templates/changeset/changeset.html:137
-#: rhodecode/templates/changeset/changeset.html:149
-#: rhodecode/templates/compare/compare_diff.html:62
-#: rhodecode/templates/compare/compare_diff.html:73
-#: rhodecode/templates/pullrequests/pullrequest_show.html:94
-#: rhodecode/templates/pullrequests/pullrequest_show.html:153
+#: rhodecode/templates/changeset/changeset.html:134
+#: rhodecode/templates/changeset/changeset.html:146
+#: rhodecode/templates/compare/compare_diff.html:58
+#: rhodecode/templates/compare/compare_diff.html:69
+#: rhodecode/templates/pullrequests/pullrequest_show.html:131
+#: rhodecode/templates/pullrequests/pullrequest_show.html:195
 msgid "Changeset was too big and was cut off..."
 msgstr "Conjunto de mudanças era grande demais e foi cortado..."
 
-#: rhodecode/controllers/feed.py:92
-#, fuzzy
-msgid "commited on"
+#: rhodecode/controllers/feed.py:91
+#, fuzzy, python-format
+msgid "%s committed on %s"
 msgstr "commit"
 
-#: rhodecode/controllers/files.py:86
-#, fuzzy
-msgid "click here to add new file"
+#: rhodecode/controllers/files.py:88
+#, fuzzy
+msgid "Click here to add new file"
 msgstr "adicionar novo arquivo"
 
-#: rhodecode/controllers/files.py:87
+#: rhodecode/controllers/files.py:89
 #, python-format
 msgid "There are no files yet %s"
 msgstr "Ainda não há arquivos %s"
 
-#: rhodecode/controllers/files.py:265 rhodecode/controllers/files.py:325
+#: rhodecode/controllers/files.py:267 rhodecode/controllers/files.py:335
 #, python-format
 msgid "This repository is has been locked by %s on %s"
 msgstr ""
 
-#: rhodecode/controllers/files.py:292
-#, python-format
-msgid "Edited %s via RhodeCode"
+#: rhodecode/controllers/files.py:279
+msgid "You can only edit files with revision being a valid branch "
+msgstr ""
+
+#: rhodecode/controllers/files.py:293
+#, fuzzy, python-format
+msgid "Edited file %s via RhodeCode"
 msgstr "Editado %s via RhodeCode"
 
-#: rhodecode/controllers/files.py:297
+#: rhodecode/controllers/files.py:309
 msgid "No changes"
 msgstr "Sem alterações"
 
-#: rhodecode/controllers/files.py:308 rhodecode/controllers/files.py:372
+#: rhodecode/controllers/files.py:318 rhodecode/controllers/files.py:388
 #, python-format
 msgid "Successfully committed to %s"
 msgstr "Commit realizado com sucesso para %s"
 
-#: rhodecode/controllers/files.py:313 rhodecode/controllers/files.py:378
+#: rhodecode/controllers/files.py:323 rhodecode/controllers/files.py:394
 msgid "Error occurred during commit"
 msgstr "Ocorreu um erro ao realizar commit"
 
-#: rhodecode/controllers/files.py:344
-#, python-format
-msgid "Added %s via RhodeCode"
+#: rhodecode/controllers/files.py:347
+#, fuzzy
+msgid "Added file via RhodeCode"
 msgstr "Adicionado %s via RhodeCode"
 
-#: rhodecode/controllers/files.py:358
+#: rhodecode/controllers/files.py:364
 msgid "No content"
 msgstr "Nenhum conteúdo"
 
-#: rhodecode/controllers/files.py:362
+#: rhodecode/controllers/files.py:368
 msgid "No filename"
 msgstr "Nenhum nomes de arquivo"
 
-#: rhodecode/controllers/files.py:404
-msgid "downloads disabled"
+#: rhodecode/controllers/files.py:372
+msgid "Location must be relative path and must not contain .. in path"
+msgstr ""
+
+#: rhodecode/controllers/files.py:420
+#, fuzzy
+msgid "Downloads disabled"
 msgstr "downloads desabilitados"
 
-#: rhodecode/controllers/files.py:415
+#: rhodecode/controllers/files.py:431
 #, python-format
 msgid "Unknown revision %s"
 msgstr "Revisão desconhecida %s"
 
-#: rhodecode/controllers/files.py:417
+#: rhodecode/controllers/files.py:433
 msgid "Empty repository"
 msgstr "Repositório vazio"
 
-#: rhodecode/controllers/files.py:419
+#: rhodecode/controllers/files.py:435
 msgid "Unknown archive type"
 msgstr "Arquivo de tipo desconhecido"
 
-#: rhodecode/controllers/files.py:564
-#: rhodecode/templates/changeset/changeset_range.html:13
-#: rhodecode/templates/changeset/changeset_range.html:31
+#: rhodecode/controllers/files.py:617
+#: rhodecode/templates/changeset/changeset_range.html:9
 msgid "Changesets"
 msgstr "Conjuntos de mudanças"
 
-#: rhodecode/controllers/files.py:565 rhodecode/controllers/pullrequests.py:74
-#: rhodecode/controllers/summary.py:236 rhodecode/model/scm.py:550
+#: rhodecode/controllers/files.py:618 rhodecode/controllers/pullrequests.py:131
+#: rhodecode/controllers/summary.py:247 rhodecode/model/scm.py:606
+#: rhodecode/templates/switch_to_list.html:3
+#: rhodecode/templates/branches/branches.html:10
 msgid "Branches"
 msgstr "Ramos"
 
-#: rhodecode/controllers/files.py:566 rhodecode/controllers/pullrequests.py:78
-#: rhodecode/controllers/summary.py:237 rhodecode/model/scm.py:561
+#: rhodecode/controllers/files.py:619 rhodecode/controllers/pullrequests.py:132
+#: rhodecode/controllers/summary.py:248 rhodecode/model/scm.py:617
+#: rhodecode/templates/switch_to_list.html:15
+#: rhodecode/templates/shortlog/shortlog_data.html:10
+#: rhodecode/templates/tags/tags.html:10
 msgid "Tags"
 msgstr "Etiquetas"
 
-#: rhodecode/controllers/forks.py:158
-#, python-format
-msgid "forked %s repository as %s"
+#: rhodecode/controllers/forks.py:175
+#, fuzzy, python-format
+msgid "Forked repository %s as %s"
 msgstr "bifurcado repositório %s como %s"
 
-#: rhodecode/controllers/forks.py:172
+#: rhodecode/controllers/forks.py:189
 #, python-format
 msgid "An error occurred during repository forking %s"
 msgstr "Ocorreu um erro ao bifurcar o repositório %s"
 
-#: rhodecode/controllers/journal.py:218 rhodecode/controllers/journal.py:261
+#: rhodecode/controllers/journal.py:275 rhodecode/controllers/journal.py:318
 #, fuzzy
 msgid "public journal"
 msgstr "Diário público"
 
-#: rhodecode/controllers/journal.py:222 rhodecode/controllers/journal.py:265
-#: rhodecode/templates/base/base.html:232
+#: rhodecode/controllers/journal.py:279 rhodecode/controllers/journal.py:322
 #: rhodecode/templates/journal/journal.html:12
 msgid "journal"
 msgstr "diário"
 
-#: rhodecode/controllers/login.py:143
-msgid "You have successfully registered into rhodecode"
+#: rhodecode/controllers/login.py:138
+#, fuzzy
+msgid "You have successfully registered into RhodeCode"
 msgstr "Você se registrou com sucesso no rhodecode"
 
-#: rhodecode/controllers/login.py:164
+#: rhodecode/controllers/login.py:159
 msgid "Your password reset link was sent"
 msgstr "Seu link de reinicialização de senha foi enviado"
 
-#: rhodecode/controllers/login.py:184
+#: rhodecode/controllers/login.py:179
 msgid ""
 "Your password reset was successful, new password has been sent to your "
 "email"
@@ -224,35 +239,56 @@
 "Sua reinicialização de senha foi bem sucedida, sua senha foi enviada ao "
 "seu e-mail"
 
-#: rhodecode/controllers/pullrequests.py:76 rhodecode/model/scm.py:556
+#: rhodecode/controllers/pullrequests.py:118
+#: rhodecode/templates/changeset/changeset.html:10
+#: rhodecode/templates/email_templates/changeset_comment.html:15
+msgid "Changeset"
+msgstr "Conjunto de Mudanças"
+
+#: rhodecode/controllers/pullrequests.py:128
+msgid "Special"
+msgstr ""
+
+#: rhodecode/controllers/pullrequests.py:129
+#, fuzzy
+msgid "Peer branches"
+msgstr "ramos"
+
+#: rhodecode/controllers/pullrequests.py:130 rhodecode/model/scm.py:612
+#: rhodecode/templates/switch_to_list.html:28
+#: rhodecode/templates/bookmarks/bookmarks.html:10
 msgid "Bookmarks"
 msgstr "Marcadores"
 
-#: rhodecode/controllers/pullrequests.py:190
+#: rhodecode/controllers/pullrequests.py:228
 msgid "Pull request requires a title with min. 3 chars"
 msgstr ""
 
-#: rhodecode/controllers/pullrequests.py:192
-#, fuzzy
-msgid "error during creation of pull request"
+#: rhodecode/controllers/pullrequests.py:230
+#, fuzzy
+msgid "Error creating pull request"
 msgstr "ocorreu um erro ao criar o usuário %s"
 
-#: rhodecode/controllers/pullrequests.py:224
+#: rhodecode/controllers/pullrequests.py:251
 #, fuzzy
 msgid "Successfully opened new pull request"
 msgstr "usuário excluído com sucesso"
 
-#: rhodecode/controllers/pullrequests.py:227
+#: rhodecode/controllers/pullrequests.py:254
 #, fuzzy
 msgid "Error occurred during sending pull request"
 msgstr "ocorreu um erro ao criar o repositório %s"
 
-#: rhodecode/controllers/pullrequests.py:260
+#: rhodecode/controllers/pullrequests.py:287
 #, fuzzy
 msgid "Successfully deleted pull request"
 msgstr "usuário excluído com sucesso"
 
-#: rhodecode/controllers/pullrequests.py:452
+#: rhodecode/controllers/pullrequests.py:441
+msgid "Closing with"
+msgstr ""
+
+#: rhodecode/controllers/pullrequests.py:478
 msgid "Closing pull request on other statuses than rejected or approved forbidden"
 msgstr ""
 
@@ -268,58 +304,12 @@
 msgid "An error occurred during this search operation"
 msgstr "Ocorreu um erro durante essa operação de busca"
 
-#: rhodecode/controllers/settings.py:119
-#: rhodecode/controllers/admin/repos.py:272
-#, python-format
-msgid "Repository %s updated successfully"
-msgstr "Repositório %s atualizado com sucesso"
-
-#: rhodecode/controllers/settings.py:137
-#: rhodecode/controllers/admin/repos.py:290
-#, python-format
-msgid "error occurred during update of repository %s"
-msgstr "ocorreu um erro ao atualizar o repositório %s"
-
-#: rhodecode/controllers/settings.py:162
-#: rhodecode/controllers/admin/repos.py:315
-#, python-format
-msgid "deleted repository %s"
-msgstr "excluído o repositório %s"
-
-#: rhodecode/controllers/settings.py:166
-#: rhodecode/controllers/admin/repos.py:325
-#: rhodecode/controllers/admin/repos.py:331
-#, python-format
-msgid "An error occurred during deletion of %s"
-msgstr "Ocorreu um erro durante a exclusão de %s"
-
-#: rhodecode/controllers/settings.py:185
-#, fuzzy
-msgid "unlocked"
-msgstr "destravar"
-
-#: rhodecode/controllers/settings.py:188
-#, fuzzy
-msgid "locked"
-msgstr "destravar"
-
-#: rhodecode/controllers/settings.py:190
-#, fuzzy, python-format
-msgid "Repository has been %s"
-msgstr "bifurcado repositório %s como %s"
-
-#: rhodecode/controllers/settings.py:194
-#: rhodecode/controllers/admin/repos.py:423
-#, fuzzy
-msgid "An error occurred during unlocking"
-msgstr "Ocorreu um erro durante essa operação"
-
-#: rhodecode/controllers/summary.py:140
+#: rhodecode/controllers/summary.py:141
 msgid "No data loaded yet"
 msgstr "Ainda não há dados carregados"
 
-#: rhodecode/controllers/summary.py:144
-#: rhodecode/templates/summary/summary.html:157
+#: rhodecode/controllers/summary.py:147
+#: rhodecode/templates/summary/summary.html:149
 msgid "Statistics are disabled for this repository"
 msgstr "As estatísticas estão desabillitadas para este repositório"
 
@@ -330,7 +320,7 @@
 
 #: rhodecode/controllers/admin/defaults.py:110
 #, fuzzy
-msgid "error occurred during update of defaults"
+msgid "Error occurred during update of defaults"
 msgstr "ocorreu um erro ao atualizar o usuário %s"
 
 #: rhodecode/controllers/admin/ldap_settings.py:50
@@ -378,7 +368,7 @@
 msgstr "START_TLS na conexão LDAP"
 
 #: rhodecode/controllers/admin/ldap_settings.py:126
-msgid "Ldap settings updated successfully"
+msgid "LDAP settings updated successfully"
 msgstr "Configurações de LDAP atualizadas com sucesso"
 
 #: rhodecode/controllers/admin/ldap_settings.py:130
@@ -386,556 +376,659 @@
 msgstr "Não foi possível ativar LDAP. A biblioteca \"python-ldap\" está faltando."
 
 #: rhodecode/controllers/admin/ldap_settings.py:147
-msgid "error occurred during update of ldap settings"
+#, fuzzy
+msgid "Error occurred during update of ldap settings"
 msgstr "ocorreu um erro ao atualizar as configurações de LDAP"
 
-#: rhodecode/controllers/admin/permissions.py:59
-#: rhodecode/controllers/admin/permissions.py:63
-msgid "None"
-msgstr "Nenhum"
-
 #: rhodecode/controllers/admin/permissions.py:60
 #: rhodecode/controllers/admin/permissions.py:64
-msgid "Read"
-msgstr "Ler"
+msgid "None"
+msgstr "Nenhum"
 
 #: rhodecode/controllers/admin/permissions.py:61
 #: rhodecode/controllers/admin/permissions.py:65
-msgid "Write"
-msgstr "Gravar"
+msgid "Read"
+msgstr "Ler"
 
 #: rhodecode/controllers/admin/permissions.py:62
 #: rhodecode/controllers/admin/permissions.py:66
+msgid "Write"
+msgstr "Gravar"
+
+#: rhodecode/controllers/admin/permissions.py:63
+#: rhodecode/controllers/admin/permissions.py:67
 #: rhodecode/templates/admin/defaults/defaults.html:9
 #: rhodecode/templates/admin/ldap/ldap.html:9
 #: rhodecode/templates/admin/permissions/permissions.html:9
-#: rhodecode/templates/admin/repos/repo_add.html:9
-#: rhodecode/templates/admin/repos/repo_edit.html:9
+#: rhodecode/templates/admin/repos/repo_add.html:10
+#: rhodecode/templates/admin/repos/repo_add.html:14
 #: rhodecode/templates/admin/repos/repos.html:9
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:8
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:8
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:10
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:9
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:9
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:11
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:13
 #: rhodecode/templates/admin/settings/hooks.html:9
 #: rhodecode/templates/admin/settings/settings.html:9
 #: rhodecode/templates/admin/users/user_add.html:8
 #: rhodecode/templates/admin/users/user_edit.html:9
-#: rhodecode/templates/admin/users/user_edit.html:126
+#: rhodecode/templates/admin/users/user_edit.html:133
 #: rhodecode/templates/admin/users/users.html:9
+#: rhodecode/templates/admin/users/users.html:85
 #: rhodecode/templates/admin/users_groups/users_group_add.html:8
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:9
 #: rhodecode/templates/admin/users_groups/users_groups.html:9
-#: rhodecode/templates/base/base.html:197
-#: rhodecode/templates/base/base.html:350
-#: rhodecode/templates/base/base.html:352
-#: rhodecode/templates/base/base.html:354
+#: rhodecode/templates/base/base.html:292
+#: rhodecode/templates/base/base.html:293
+#: rhodecode/templates/base/base.html:299
+#: rhodecode/templates/base/base.html:300
 msgid "Admin"
 msgstr "Administrador"
 
-#: rhodecode/controllers/admin/permissions.py:69
-msgid "disabled"
-msgstr "desabilitado"
-
-#: rhodecode/controllers/admin/permissions.py:71
-msgid "allowed with manual account activation"
-msgstr "permitido com ativação manual de conta"
-
-#: rhodecode/controllers/admin/permissions.py:73
-msgid "allowed with automatic account activation"
-msgstr "permitido com ativação automática de conta"
-
-#: rhodecode/controllers/admin/permissions.py:75
-#: rhodecode/controllers/admin/permissions.py:78
+#: rhodecode/controllers/admin/permissions.py:70
+#: rhodecode/controllers/admin/permissions.py:76
+#: rhodecode/controllers/admin/permissions.py:79
 msgid "Disabled"
 msgstr "Desabilitado"
 
-#: rhodecode/controllers/admin/permissions.py:76
-#: rhodecode/controllers/admin/permissions.py:79
+#: rhodecode/controllers/admin/permissions.py:72
+#, fuzzy
+msgid "Allowed with manual account activation"
+msgstr "permitido com ativação manual de conta"
+
+#: rhodecode/controllers/admin/permissions.py:74
+#, fuzzy
+msgid "Allowed with automatic account activation"
+msgstr "permitido com ativação automática de conta"
+
+#: rhodecode/controllers/admin/permissions.py:77
+#: rhodecode/controllers/admin/permissions.py:80
 msgid "Enabled"
 msgstr "Habilitado"
 
-#: rhodecode/controllers/admin/permissions.py:122
+#: rhodecode/controllers/admin/permissions.py:128
 msgid "Default permissions updated successfully"
 msgstr "Permissões padrões atualizadas com sucesso"
 
-#: rhodecode/controllers/admin/permissions.py:136
-msgid "error occurred during update of permissions"
+#: rhodecode/controllers/admin/permissions.py:142
+#, fuzzy
+msgid "Error occurred during update of permissions"
 msgstr "ocorreu um erro ao atualizar as permissões"
 
-#: rhodecode/controllers/admin/repos.py:121
+#: rhodecode/controllers/admin/repos.py:127
 msgid "--REMOVE FORK--"
 msgstr "--REMOVER BIFURCAÇÂO--"
 
-#: rhodecode/controllers/admin/repos.py:190
-#, python-format
-msgid "created repository %s from %s"
+#: rhodecode/controllers/admin/repos.py:168
+#, fuzzy, python-format
+msgid "Created repository %s from %s"
 msgstr "repositório %s criado a partir de %s"
 
-#: rhodecode/controllers/admin/repos.py:194
+#: rhodecode/controllers/admin/repos.py:174
+#, fuzzy, python-format
+msgid "Created repository %s"
+msgstr "repositório %s criado"
+
+#: rhodecode/controllers/admin/repos.py:197
+#, fuzzy, python-format
+msgid "Error creating repository %s"
+msgstr "repositório %s criado"
+
+#: rhodecode/controllers/admin/repos.py:266
 #, python-format
-msgid "created repository %s"
-msgstr "repositório %s criado"
-
-#: rhodecode/controllers/admin/repos.py:225
+msgid "Repository %s updated successfully"
+msgstr "Repositório %s atualizado com sucesso"
+
+#: rhodecode/controllers/admin/repos.py:284
+#, fuzzy, python-format
+msgid "Error occurred during update of repository %s"
+msgstr "ocorreu um erro ao atualizar o repositório %s"
+
+#: rhodecode/controllers/admin/repos.py:311
+#: rhodecode/controllers/api/api.py:877
 #, python-format
-msgid "error occurred during creation of repository %s"
-msgstr "ocorreu um erro ao criar o repositório %s"
-
-#: rhodecode/controllers/admin/repos.py:320
+msgid "Detached %s forks"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:314
+#: rhodecode/controllers/api/api.py:879
+#, fuzzy, python-format
+msgid "Deleted %s forks"
+msgstr "excluído o repositório %s"
+
+#: rhodecode/controllers/admin/repos.py:319
+#, fuzzy, python-format
+msgid "Deleted repository %s"
+msgstr "excluído o repositório %s"
+
+#: rhodecode/controllers/admin/repos.py:322
 #, python-format
 msgid "Cannot delete %s it still contains attached forks"
 msgstr "Nao é possível excluir %s pois ele ainda contém bifurcações vinculadas"
 
-#: rhodecode/controllers/admin/repos.py:349
+#: rhodecode/controllers/admin/repos.py:327
+#, python-format
+msgid "An error occurred during deletion of %s"
+msgstr "Ocorreu um erro durante a exclusão de %s"
+
+#: rhodecode/controllers/admin/repos.py:365
+#, fuzzy
+msgid "Repository permissions updated"
+msgstr "Criação de repositório"
+
+#: rhodecode/controllers/admin/repos.py:384
 msgid "An error occurred during deletion of repository user"
 msgstr "Ocorreu um erro ao excluir usuário de repositório"
 
-#: rhodecode/controllers/admin/repos.py:368
-msgid "An error occurred during deletion of repository users groups"
+#: rhodecode/controllers/admin/repos.py:403
+#, fuzzy
+msgid "An error occurred during deletion of repository user groups"
 msgstr "Ocorreu um erro ao excluir grupo de usuário de repositório"
 
-#: rhodecode/controllers/admin/repos.py:386
+#: rhodecode/controllers/admin/repos.py:421
 msgid "An error occurred during deletion of repository stats"
 msgstr "Ocorreu um erro ao excluir estatísticas de repositório"
 
-#: rhodecode/controllers/admin/repos.py:403
+#: rhodecode/controllers/admin/repos.py:438
 msgid "An error occurred during cache invalidation"
 msgstr "Ocorreu um erro ao invalidar o cache"
 
-#: rhodecode/controllers/admin/repos.py:443
+#: rhodecode/controllers/admin/repos.py:458
+#: rhodecode/controllers/admin/repos.py:485
+#, fuzzy
+msgid "An error occurred during unlocking"
+msgstr "Ocorreu um erro durante essa operação"
+
+#: rhodecode/controllers/admin/repos.py:476
+#, fuzzy
+msgid "Unlocked"
+msgstr "destravar"
+
+#: rhodecode/controllers/admin/repos.py:479
+#, fuzzy
+msgid "Locked"
+msgstr "destravar"
+
+#: rhodecode/controllers/admin/repos.py:481
+#, fuzzy, python-format
+msgid "Repository has been %s"
+msgstr "bifurcado repositório %s como %s"
+
+#: rhodecode/controllers/admin/repos.py:505
 msgid "Updated repository visibility in public journal"
 msgstr "Atualizada a visibilidade do repositório no diário público"
 
-#: rhodecode/controllers/admin/repos.py:447
+#: rhodecode/controllers/admin/repos.py:509
 msgid "An error occurred during setting this repository in public journal"
 msgstr "Ocorreu um erro ao ajustar esse repositório no diário público"
 
-#: rhodecode/controllers/admin/repos.py:452 rhodecode/model/validators.py:300
+#: rhodecode/controllers/admin/repos.py:514 rhodecode/model/validators.py:302
 msgid "Token mismatch"
 msgstr "Descompasso de Token"
 
-#: rhodecode/controllers/admin/repos.py:465
+#: rhodecode/controllers/admin/repos.py:527
 msgid "Pulled from remote location"
 msgstr "Realizado pull de localização remota"
 
-#: rhodecode/controllers/admin/repos.py:467
+#: rhodecode/controllers/admin/repos.py:529
 msgid "An error occurred during pull from remote location"
 msgstr "Ocorreu um erro ao realizar pull de localização remota"
 
-#: rhodecode/controllers/admin/repos.py:483
+#: rhodecode/controllers/admin/repos.py:545
 msgid "Nothing"
 msgstr "Nada"
 
-#: rhodecode/controllers/admin/repos.py:485
+#: rhodecode/controllers/admin/repos.py:547
 #, python-format
 msgid "Marked repo %s as fork of %s"
 msgstr "Marcado repositório %s como bifurcação de %s"
 
-#: rhodecode/controllers/admin/repos.py:489
+#: rhodecode/controllers/admin/repos.py:551
 msgid "An error occurred during this operation"
 msgstr "Ocorreu um erro durante essa operação"
 
-#: rhodecode/controllers/admin/repos_groups.py:120
-#, python-format
-msgid "created repos group %s"
+#: rhodecode/controllers/admin/repos.py:590
+#, fuzzy
+msgid "An error occurred during creation of field"
+msgstr "ocorreu um erro ao criar o usuário %s"
+
+#: rhodecode/controllers/admin/repos.py:604
+#, fuzzy
+msgid "An error occurred during removal of field"
+msgstr "Ocorreu um erro durante essa operação"
+
+#: rhodecode/controllers/admin/repos_groups.py:145
+#, fuzzy, python-format
+msgid "Created repository group %s"
 msgstr "criado grupo de repositórios %s"
 
-#: rhodecode/controllers/admin/repos_groups.py:133
-#, python-format
-msgid "error occurred during creation of repos group %s"
+#: rhodecode/controllers/admin/repos_groups.py:157
+#, fuzzy, python-format
+msgid "Error occurred during creation of repository group %s"
 msgstr "ccorreu um erro ao criar grupo de repositório %s"
 
-#: rhodecode/controllers/admin/repos_groups.py:167
-#, python-format
-msgid "updated repos group %s"
+#: rhodecode/controllers/admin/repos_groups.py:214
+#: rhodecode/controllers/admin/repos_groups.py:286
+msgid "Cannot revoke permission for yourself as admin"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos_groups.py:220
+#, fuzzy, python-format
+msgid "Updated repository group %s"
 msgstr "atualizado grupo de repositórios %s"
 
-#: rhodecode/controllers/admin/repos_groups.py:180
-#, python-format
-msgid "error occurred during update of repos group %s"
+#: rhodecode/controllers/admin/repos_groups.py:235
+#, fuzzy, python-format
+msgid "Error occurred during update of repository group %s"
 msgstr "ocorreu um erro ao atualizar grupo de repositórios %s"
 
-#: rhodecode/controllers/admin/repos_groups.py:198
+#: rhodecode/controllers/admin/repos_groups.py:253
 #, python-format
 msgid "This group contains %s repositores and cannot be deleted"
 msgstr "Esse grupo contém %s repositórios e não pode ser excluído"
 
-#: rhodecode/controllers/admin/repos_groups.py:206
-#, python-format
-msgid "removed repos group %s"
+#: rhodecode/controllers/admin/repos_groups.py:260
+#, fuzzy, python-format
+msgid "This group contains %s subgroups and cannot be deleted"
+msgstr "Esse grupo contém %s repositórios e não pode ser excluído"
+
+#: rhodecode/controllers/admin/repos_groups.py:266
+#, fuzzy, python-format
+msgid "Removed repository group %s"
 msgstr "removido grupo de repositórios %s"
 
-#: rhodecode/controllers/admin/repos_groups.py:212
-msgid "Cannot delete this group it still contains subgroups"
-msgstr "Nao é possível excluir este grupo pois ele ainda contém subgrupos"
-
-#: rhodecode/controllers/admin/repos_groups.py:217
-#: rhodecode/controllers/admin/repos_groups.py:222
-#, python-format
-msgid "error occurred during deletion of repos group %s"
+#: rhodecode/controllers/admin/repos_groups.py:271
+#, fuzzy, python-format
+msgid "Error occurred during deletion of repos group %s"
 msgstr "ccorreu um erro ao excluir grupo de repositórios %s"
 
-#: rhodecode/controllers/admin/repos_groups.py:243
+#: rhodecode/controllers/admin/repos_groups.py:297
 msgid "An error occurred during deletion of group user"
 msgstr "Ocorreu um erro ao excluir o usuário de grupo"
 
-#: rhodecode/controllers/admin/repos_groups.py:264
-msgid "An error occurred during deletion of group users groups"
+#: rhodecode/controllers/admin/repos_groups.py:318
+#, fuzzy
+msgid "An error occurred during deletion of group user groups"
 msgstr "Ocorreu um erro ao excluir o grupo do grupo de usuários"
 
-#: rhodecode/controllers/admin/settings.py:123
-#, python-format
-msgid "Repositories successfully rescanned added: %s,removed: %s"
+#: rhodecode/controllers/admin/settings.py:126
+#, fuzzy, python-format
+msgid "Repositories successfully rescanned added: %s ; removed: %s"
 msgstr "Repositórios varridos com sucesso adicionados: %s, removidos: %s"
 
-#: rhodecode/controllers/admin/settings.py:131
+#: rhodecode/controllers/admin/settings.py:135
 msgid "Whoosh reindex task scheduled"
 msgstr "Tarefa de reindexação do whoosh agendada"
 
-#: rhodecode/controllers/admin/settings.py:162
+#: rhodecode/controllers/admin/settings.py:166
 msgid "Updated application settings"
 msgstr "Configurações da aplicação atualizadas"
 
-#: rhodecode/controllers/admin/settings.py:166
-#: rhodecode/controllers/admin/settings.py:299
-msgid "error occurred during updating application settings"
+#: rhodecode/controllers/admin/settings.py:170
+#: rhodecode/controllers/admin/settings.py:301
+#, fuzzy
+msgid "Error occurred during updating application settings"
 msgstr "ocorreu um erro ao atualizar as configurações da aplicação"
 
-#: rhodecode/controllers/admin/settings.py:207
+#: rhodecode/controllers/admin/settings.py:216
 #, fuzzy
 msgid "Updated visualisation settings"
 msgstr "Configurações da aplicação atualizadas"
 
-#: rhodecode/controllers/admin/settings.py:212
-#, fuzzy
-msgid "error occurred during updating visualisation settings"
+#: rhodecode/controllers/admin/settings.py:221
+#, fuzzy
+msgid "Error occurred during updating visualisation settings"
 msgstr "ocorreu um erro ao atualizar as configurações da aplicação"
 
-#: rhodecode/controllers/admin/settings.py:295
+#: rhodecode/controllers/admin/settings.py:297
 #, fuzzy
 msgid "Updated VCS settings"
 msgstr "Atualizadas as configurações do mercurial"
 
-#: rhodecode/controllers/admin/settings.py:309
+#: rhodecode/controllers/admin/settings.py:311
 msgid "Added new hook"
 msgstr "Adicionado novo gancho"
 
-#: rhodecode/controllers/admin/settings.py:321
+#: rhodecode/controllers/admin/settings.py:323
 msgid "Updated hooks"
 msgstr "Atualizados os ganchos"
 
-#: rhodecode/controllers/admin/settings.py:325
-msgid "error occurred during hook creation"
+#: rhodecode/controllers/admin/settings.py:327
+#, fuzzy
+msgid "Error occurred during hook creation"
 msgstr "ocorreu um erro ao criar gancho"
 
-#: rhodecode/controllers/admin/settings.py:344
+#: rhodecode/controllers/admin/settings.py:346
 msgid "Email task created"
 msgstr "Tarefa de e-mail criada"
 
-#: rhodecode/controllers/admin/settings.py:399
+#: rhodecode/controllers/admin/settings.py:410
 msgid "You can't edit this user since it's crucial for entire application"
 msgstr "Você não pode editar esse usuário pois ele é crucial para toda a aplicação"
 
-#: rhodecode/controllers/admin/settings.py:430
+#: rhodecode/controllers/admin/settings.py:452
 msgid "Your account was updated successfully"
 msgstr "Sua conta foi atualizada com sucesso"
 
-#: rhodecode/controllers/admin/settings.py:445
-#: rhodecode/controllers/admin/users.py:196
-#, python-format
-msgid "error occurred during update of user %s"
+#: rhodecode/controllers/admin/settings.py:467
+#: rhodecode/controllers/admin/users.py:198
+#, fuzzy, python-format
+msgid "Error occurred during update of user %s"
 msgstr "ocorreu um erro ao atualizar o usuário %s"
 
 #: rhodecode/controllers/admin/users.py:130
-#, python-format
-msgid "created user %s"
+#, fuzzy, python-format
+msgid "Created user %s"
 msgstr "usuário %s criado"
 
 #: rhodecode/controllers/admin/users.py:142
-#, python-format
-msgid "error occurred during creation of user %s"
+#, fuzzy, python-format
+msgid "Error occurred during creation of user %s"
 msgstr "ocorreu um erro ao criar o usuário %s"
 
 #: rhodecode/controllers/admin/users.py:176
 msgid "User updated successfully"
 msgstr "Usuário atualizado com sucesso"
 
-#: rhodecode/controllers/admin/users.py:212
-msgid "successfully deleted user"
+#: rhodecode/controllers/admin/users.py:214
+#, fuzzy
+msgid "Successfully deleted user"
 msgstr "usuário excluído com sucesso"
 
-#: rhodecode/controllers/admin/users.py:217
+#: rhodecode/controllers/admin/users.py:219
 msgid "An error occurred during deletion of user"
 msgstr "Ocorreu um erro ao excluir o usuário"
 
-#: rhodecode/controllers/admin/users.py:231
+#: rhodecode/controllers/admin/users.py:233
 msgid "You can't edit this user"
 msgstr "Você não pode editar esse usuário"
 
-#: rhodecode/controllers/admin/users.py:272
+#: rhodecode/controllers/admin/users.py:276
 msgid "Granted 'repository create' permission to user"
 msgstr "Concedida permissão de 'criar repositório' ao usuário"
 
-#: rhodecode/controllers/admin/users.py:277
+#: rhodecode/controllers/admin/users.py:281
 msgid "Revoked 'repository create' permission to user"
 msgstr "Revogada permissão de 'criar repositório' ao usuário"
 
-#: rhodecode/controllers/admin/users.py:283
+#: rhodecode/controllers/admin/users.py:287
 #, fuzzy
 msgid "Granted 'repository fork' permission to user"
 msgstr "Concedida permissão de 'criar repositório' ao usuário"
 
-#: rhodecode/controllers/admin/users.py:288
+#: rhodecode/controllers/admin/users.py:292
 #, fuzzy
 msgid "Revoked 'repository fork' permission to user"
 msgstr "Revogada permissão de 'criar repositório' ao usuário"
 
-#: rhodecode/controllers/admin/users.py:294
-#: rhodecode/controllers/admin/users_groups.py:279
+#: rhodecode/controllers/admin/users.py:298
+#: rhodecode/controllers/admin/users_groups.py:281
 #, fuzzy
 msgid "An error occurred during permissions saving"
 msgstr "Ocorreu um erro durante essa operação"
 
-#: rhodecode/controllers/admin/users.py:309
+#: rhodecode/controllers/admin/users.py:312
 #, python-format
 msgid "Added email %s to user"
 msgstr ""
 
-#: rhodecode/controllers/admin/users.py:315
+#: rhodecode/controllers/admin/users.py:318
 #, fuzzy
 msgid "An error occurred during email saving"
 msgstr "Ocorreu um erro durante essa operação"
 
-#: rhodecode/controllers/admin/users.py:325
+#: rhodecode/controllers/admin/users.py:328
 #, fuzzy
 msgid "Removed email from user"
 msgstr "removido grupo de repositórios %s"
 
+#: rhodecode/controllers/admin/users.py:341
+#, python-format
+msgid "Added ip %s to user"
+msgstr ""
+
+#: rhodecode/controllers/admin/users.py:347
+#, fuzzy
+msgid "An error occurred during ip saving"
+msgstr "Ocorreu um erro durante essa operação"
+
+#: rhodecode/controllers/admin/users.py:359
+#, fuzzy
+msgid "Removed ip from user"
+msgstr "removido grupo de repositórios %s"
+
 #: rhodecode/controllers/admin/users_groups.py:86
-#, python-format
-msgid "created users group %s"
+#, fuzzy, python-format
+msgid "Created user group %s"
 msgstr "criado grupo de usuários %s"
 
 #: rhodecode/controllers/admin/users_groups.py:97
-#, python-format
-msgid "error occurred during creation of users group %s"
+#, fuzzy, python-format
+msgid "Error occurred during creation of user group %s"
 msgstr "ocorreu um erro ao criar o grupo de usuários %s"
 
-#: rhodecode/controllers/admin/users_groups.py:164
-#, python-format
-msgid "updated users group %s"
+#: rhodecode/controllers/admin/users_groups.py:166
+#, fuzzy, python-format
+msgid "Updated user group %s"
 msgstr "grupo de usuários %s atualizado"
 
-#: rhodecode/controllers/admin/users_groups.py:186
-#, python-format
-msgid "error occurred during update of users group %s"
+#: rhodecode/controllers/admin/users_groups.py:188
+#, fuzzy, python-format
+msgid "Error occurred during update of user group %s"
 msgstr "ocorreu um erro ao atualizar o grupo de usuários %s"
 
-#: rhodecode/controllers/admin/users_groups.py:203
-msgid "successfully deleted users group"
+#: rhodecode/controllers/admin/users_groups.py:205
+#, fuzzy
+msgid "Successfully deleted user group"
 msgstr "grupo de usuários excluído com sucesso"
 
-#: rhodecode/controllers/admin/users_groups.py:208
-msgid "An error occurred during deletion of users group"
+#: rhodecode/controllers/admin/users_groups.py:210
+#, fuzzy
+msgid "An error occurred during deletion of user group"
 msgstr "Ocorreu um erro ao excluir o grupo de usuários"
 
-#: rhodecode/controllers/admin/users_groups.py:257
-#, fuzzy
-msgid "Granted 'repository create' permission to users group"
+#: rhodecode/controllers/admin/users_groups.py:259
+#, fuzzy
+msgid "Granted 'repository create' permission to user group"
 msgstr "Concedida permissão de 'criar repositório' ao usuário"
 
-#: rhodecode/controllers/admin/users_groups.py:262
-#, fuzzy
-msgid "Revoked 'repository create' permission to users group"
+#: rhodecode/controllers/admin/users_groups.py:264
+#, fuzzy
+msgid "Revoked 'repository create' permission to user group"
 msgstr "Revogada permissão de 'criar repositório' ao usuário"
 
-#: rhodecode/controllers/admin/users_groups.py:268
-#, fuzzy
-msgid "Granted 'repository fork' permission to users group"
+#: rhodecode/controllers/admin/users_groups.py:270
+#, fuzzy
+msgid "Granted 'repository fork' permission to user group"
 msgstr "Concedida permissão de 'criar repositório' ao usuário"
 
-#: rhodecode/controllers/admin/users_groups.py:273
-#, fuzzy
-msgid "Revoked 'repository fork' permission to users group"
+#: rhodecode/controllers/admin/users_groups.py:275
+#, fuzzy
+msgid "Revoked 'repository fork' permission to user group"
 msgstr "Revogada permissão de 'criar repositório' ao usuário"
 
-#: rhodecode/lib/auth.py:499
+#: rhodecode/lib/auth.py:530
+#, fuzzy, python-format
+msgid "IP %s not allowed"
+msgstr "seguidores"
+
+#: rhodecode/lib/auth.py:579
 msgid "You need to be a registered user to perform this action"
 msgstr "Você precisa ser um usuário registrado para realizar essa ação"
 
-#: rhodecode/lib/auth.py:540
+#: rhodecode/lib/auth.py:620
 msgid "You need to be a signed in to view this page"
 msgstr "Você precisa estar logado para ver essa página"
 
-#: rhodecode/lib/diffs.py:74
-msgid "binary file"
+#: rhodecode/lib/diffs.py:66
+#, fuzzy
+msgid "Binary file"
 msgstr "arquivo binário"
 
-#: rhodecode/lib/diffs.py:90
+#: rhodecode/lib/diffs.py:82
 msgid "Changeset was too big and was cut off, use diff menu to display this diff"
 msgstr ""
 "Conjunto de mudanças é grande demais e foi cortado, use o menu de "
 "diferenças para ver as diferenças"
 
-#: rhodecode/lib/diffs.py:100
+#: rhodecode/lib/diffs.py:92
 msgid "No changes detected"
 msgstr "Nenhuma alteração detectada"
 
-#: rhodecode/lib/helpers.py:374
+#: rhodecode/lib/helpers.py:394
 #, python-format
 msgid "%a, %d %b %Y %H:%M:%S"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:486
+#: rhodecode/lib/helpers.py:506
 msgid "True"
 msgstr "Verdadeiro"
 
-#: rhodecode/lib/helpers.py:490
+#: rhodecode/lib/helpers.py:509
 msgid "False"
 msgstr "Falso"
 
-#: rhodecode/lib/helpers.py:530
+#: rhodecode/lib/helpers.py:547
 #, fuzzy, python-format
 msgid "Deleted branch: %s"
 msgstr "excluído o repositório %s"
 
-#: rhodecode/lib/helpers.py:533
+#: rhodecode/lib/helpers.py:550
 #, fuzzy, python-format
 msgid "Created tag: %s"
 msgstr "usuário %s criado"
 
-#: rhodecode/lib/helpers.py:546
+#: rhodecode/lib/helpers.py:563
 msgid "Changeset not found"
 msgstr "Conjunto de alterações não encontrado"
 
-#: rhodecode/lib/helpers.py:589
+#: rhodecode/lib/helpers.py:615
 #, python-format
 msgid "Show all combined changesets %s->%s"
 msgstr "Ver todos os conjuntos de mudanças combinados %s->%s"
 
-#: rhodecode/lib/helpers.py:595
+#: rhodecode/lib/helpers.py:621
 msgid "compare view"
 msgstr "comparar exibir"
 
-#: rhodecode/lib/helpers.py:615
+#: rhodecode/lib/helpers.py:641
 msgid "and"
 msgstr "e"
 
-#: rhodecode/lib/helpers.py:616
+#: rhodecode/lib/helpers.py:642
 #, python-format
 msgid "%s more"
 msgstr "%s mais"
 
-#: rhodecode/lib/helpers.py:617 rhodecode/templates/changelog/changelog.html:51
+#: rhodecode/lib/helpers.py:643 rhodecode/templates/changelog/changelog.html:44
 msgid "revisions"
 msgstr "revisões"
 
-#: rhodecode/lib/helpers.py:641
+#: rhodecode/lib/helpers.py:667
 #, fuzzy, python-format
 msgid "fork name %s"
 msgstr "nome da bifurcação"
 
-#: rhodecode/lib/helpers.py:658
-#: rhodecode/templates/pullrequests/pullrequest_show.html:4
-#: rhodecode/templates/pullrequests/pullrequest_show.html:12
+#: rhodecode/lib/helpers.py:684
+#: rhodecode/templates/pullrequests/pullrequest_show.html:8
 #, python-format
 msgid "Pull request #%s"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:664
+#: rhodecode/lib/helpers.py:690
 msgid "[deleted] repository"
 msgstr "repositório [excluído]"
 
-#: rhodecode/lib/helpers.py:666 rhodecode/lib/helpers.py:676
+#: rhodecode/lib/helpers.py:692 rhodecode/lib/helpers.py:702
 msgid "[created] repository"
 msgstr "repositório [criado]"
 
-#: rhodecode/lib/helpers.py:668
+#: rhodecode/lib/helpers.py:694
 msgid "[created] repository as fork"
 msgstr "repositório [criado] como uma bifurcação"
 
-#: rhodecode/lib/helpers.py:670 rhodecode/lib/helpers.py:678
+#: rhodecode/lib/helpers.py:696 rhodecode/lib/helpers.py:704
 msgid "[forked] repository"
 msgstr "repositório [bifurcado]"
 
-#: rhodecode/lib/helpers.py:672 rhodecode/lib/helpers.py:680
+#: rhodecode/lib/helpers.py:698 rhodecode/lib/helpers.py:706
 msgid "[updated] repository"
 msgstr "repositório [atualizado]"
 
-#: rhodecode/lib/helpers.py:674
+#: rhodecode/lib/helpers.py:700
 msgid "[delete] repository"
 msgstr "[excluir] repositório"
 
-#: rhodecode/lib/helpers.py:682
+#: rhodecode/lib/helpers.py:708
 #, fuzzy
 msgid "[created] user"
 msgstr "usuário %s criado"
 
-#: rhodecode/lib/helpers.py:684
+#: rhodecode/lib/helpers.py:710
 #, fuzzy
 msgid "[updated] user"
 msgstr "grupo de usuários %s atualizado"
 
-#: rhodecode/lib/helpers.py:686
-#, fuzzy
-msgid "[created] users group"
+#: rhodecode/lib/helpers.py:712
+#, fuzzy
+msgid "[created] user group"
 msgstr "criado grupo de usuários %s"
 
-#: rhodecode/lib/helpers.py:688
-#, fuzzy
-msgid "[updated] users group"
+#: rhodecode/lib/helpers.py:714
+#, fuzzy
+msgid "[updated] user group"
 msgstr "grupo de usuários %s atualizado"
 
-#: rhodecode/lib/helpers.py:690
+#: rhodecode/lib/helpers.py:716
 #, fuzzy
 msgid "[commented] on revision in repository"
 msgstr "repositório [criado]"
 
-#: rhodecode/lib/helpers.py:692
+#: rhodecode/lib/helpers.py:718
 #, fuzzy
 msgid "[commented] on pull request for"
 msgstr "repositório [criado]"
 
-#: rhodecode/lib/helpers.py:694
+#: rhodecode/lib/helpers.py:720
 #, fuzzy
 msgid "[closed] pull request for"
 msgstr "repositório [criado]"
 
-#: rhodecode/lib/helpers.py:696
+#: rhodecode/lib/helpers.py:722
 msgid "[pushed] into"
 msgstr "[realizado push] para"
 
-#: rhodecode/lib/helpers.py:698
+#: rhodecode/lib/helpers.py:724
 #, fuzzy
 msgid "[committed via RhodeCode] into repository"
 msgstr "[realizado commit via RhodeCode] para"
 
-#: rhodecode/lib/helpers.py:700
+#: rhodecode/lib/helpers.py:726
 #, fuzzy
 msgid "[pulled from remote] into repository"
 msgstr "[realizado pull remoto] para"
 
-#: rhodecode/lib/helpers.py:702
+#: rhodecode/lib/helpers.py:728
 msgid "[pulled] from"
 msgstr "[realizado pull] a partir de"
 
-#: rhodecode/lib/helpers.py:704
+#: rhodecode/lib/helpers.py:730
 msgid "[started following] repository"
 msgstr "[passou a seguir] o repositório"
 
-#: rhodecode/lib/helpers.py:706
+#: rhodecode/lib/helpers.py:732
 msgid "[stopped following] repository"
 msgstr "[parou de seguir] o repositório"
 
-#: rhodecode/lib/helpers.py:883
+#: rhodecode/lib/helpers.py:910
 #, python-format
 msgid " and %s more"
 msgstr " e mais %s"
 
-#: rhodecode/lib/helpers.py:887
+#: rhodecode/lib/helpers.py:914
 msgid "No Files"
 msgstr "Nenhum Arquivo"
 
-#: rhodecode/lib/helpers.py:1163
+#: rhodecode/lib/helpers.py:1198
 #, python-format
 msgid ""
 "%s repository is not mapped to db perhaps it was created or renamed from "
@@ -946,180 +1039,245 @@
 "renomeado a partir do sistema de arquivos. Por favor execute a aplicação "
 "outra vez para varrer novamente por repositórios"
 
-#: rhodecode/lib/utils2.py:403
+#: rhodecode/lib/unionrepo.py:193
+#, fuzzy
+msgid "cannot create new union repository"
+msgstr "repositório [criado]"
+
+#: rhodecode/lib/utils2.py:411
 #, python-format
 msgid "%d year"
 msgid_plural "%d years"
 msgstr[0] "%d ano"
 msgstr[1] "%d anos"
 
-#: rhodecode/lib/utils2.py:404
+#: rhodecode/lib/utils2.py:412
 #, python-format
 msgid "%d month"
 msgid_plural "%d months"
 msgstr[0] "%d mês"
 msgstr[1] "%d meses"
 
-#: rhodecode/lib/utils2.py:405
+#: rhodecode/lib/utils2.py:413
 #, python-format
 msgid "%d day"
 msgid_plural "%d days"
 msgstr[0] "%d dia"
 msgstr[1] "%d dias"
 
-#: rhodecode/lib/utils2.py:406
+#: rhodecode/lib/utils2.py:414
 #, python-format
 msgid "%d hour"
 msgid_plural "%d hours"
 msgstr[0] "%d hora"
 msgstr[1] "%d horas"
 
-#: rhodecode/lib/utils2.py:407
+#: rhodecode/lib/utils2.py:415
 #, python-format
 msgid "%d minute"
 msgid_plural "%d minutes"
 msgstr[0] "%d minuto"
 msgstr[1] "%d minutos"
 
-#: rhodecode/lib/utils2.py:408
+#: rhodecode/lib/utils2.py:416
 #, python-format
 msgid "%d second"
 msgid_plural "%d seconds"
 msgstr[0] "%d segundo"
 msgstr[1] "%d segundos"
 
-#: rhodecode/lib/utils2.py:424
+#: rhodecode/lib/utils2.py:432
 #, fuzzy, python-format
 msgid "in %s"
 msgstr "na linha %s"
 
-#: rhodecode/lib/utils2.py:426
+#: rhodecode/lib/utils2.py:434
 #, python-format
 msgid "%s ago"
 msgstr "%s atrás"
 
-#: rhodecode/lib/utils2.py:428
+#: rhodecode/lib/utils2.py:436
 #, fuzzy, python-format
 msgid "in %s and %s"
 msgstr "%s e %s atrás"
 
-#: rhodecode/lib/utils2.py:431
+#: rhodecode/lib/utils2.py:439
 #, python-format
 msgid "%s and %s ago"
 msgstr "%s e %s atrás"
 
-#: rhodecode/lib/utils2.py:434
+#: rhodecode/lib/utils2.py:442
 msgid "just now"
 msgstr "agora há pouco"
 
-#: rhodecode/lib/celerylib/tasks.py:270
-msgid "password reset link"
-msgstr "link de reinicialização de senha"
-
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163 rhodecode/model/db.py:1183
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1183
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1289 rhodecode/model/db.py:1388
 #, fuzzy
 msgid "Repository no access"
 msgstr "repositórios"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164 rhodecode/model/db.py:1184
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1184
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1290 rhodecode/model/db.py:1389
 #, fuzzy
 msgid "Repository read access"
 msgstr "Esse repositório já existe"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165 rhodecode/model/db.py:1185
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1185
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1291 rhodecode/model/db.py:1390
 #, fuzzy
 msgid "Repository write access"
 msgstr "repositórios"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166 rhodecode/model/db.py:1186
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1186
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1292 rhodecode/model/db.py:1391
 #, fuzzy
 msgid "Repository admin access"
 msgstr "repositórios"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168 rhodecode/model/db.py:1188
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1188
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1294
 #, fuzzy
 msgid "Repositories Group no access"
 msgstr "grupos de repositórios"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169 rhodecode/model/db.py:1189
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1189
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1295
 #, fuzzy
 msgid "Repositories Group read access"
 msgstr "grupos de repositórios"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170 rhodecode/model/db.py:1190
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1190
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1296
 #, fuzzy
 msgid "Repositories Group write access"
 msgstr "grupos de repositórios"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171 rhodecode/model/db.py:1191
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1191
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1297
 #, fuzzy
 msgid "Repositories Group admin access"
 msgstr "grupos de repositórios"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173 rhodecode/model/db.py:1193
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1193
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1299 rhodecode/model/db.py:1398
 #, fuzzy
 msgid "RhodeCode Administrator"
 msgstr "Administração de usuários"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174 rhodecode/model/db.py:1194
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1194
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1300 rhodecode/model/db.py:1399
 #, fuzzy
 msgid "Repository creation disabled"
 msgstr "Criação de repositório"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175 rhodecode/model/db.py:1195
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1195
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1301 rhodecode/model/db.py:1400
 #, fuzzy
 msgid "Repository creation enabled"
 msgstr "Criação de repositório"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176 rhodecode/model/db.py:1196
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1196
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1302 rhodecode/model/db.py:1401
 #, fuzzy
 msgid "Repository forking disabled"
 msgstr "Criação de repositório"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177 rhodecode/model/db.py:1197
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1197
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1303 rhodecode/model/db.py:1402
 #, fuzzy
 msgid "Repository forking enabled"
 msgstr "Criação de repositório"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178 rhodecode/model/db.py:1198
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1198
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1304 rhodecode/model/db.py:1403
 #, fuzzy
 msgid "Register disabled"
 msgstr "desabilitado"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179 rhodecode/model/db.py:1199
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1199
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1305 rhodecode/model/db.py:1404
 msgid "Register new user with RhodeCode with manual activation"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182 rhodecode/model/db.py:1202
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1202
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1308 rhodecode/model/db.py:1407
 msgid "Register new user with RhodeCode with auto activation"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623 rhodecode/model/db.py:1643
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1643
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1749 rhodecode/model/db.py:1838
 msgid "Not Reviewed"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624 rhodecode/model/db.py:1644
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1644
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1750 rhodecode/model/db.py:1839
 #, fuzzy
 msgid "Approved"
 msgstr "removidos"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625 rhodecode/model/db.py:1645
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1645
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1751 rhodecode/model/db.py:1840
 msgid "Rejected"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626 rhodecode/model/db.py:1646
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1646
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1752 rhodecode/model/db.py:1841
 msgid "Under Review"
 msgstr ""
 
-#: rhodecode/model/comment.py:110
+#: rhodecode/model/comment.py:75
 #, python-format
 msgid "on line %s"
 msgstr "na linha %s"
 
-#: rhodecode/model/comment.py:173
+#: rhodecode/model/comment.py:219
 msgid "[Mention]"
 msgstr "[Menção]"
 
+#: rhodecode/model/db.py:1252
+msgid "top level"
+msgstr ""
+
+#: rhodecode/model/db.py:1393
+#, fuzzy
+msgid "Repository group no access"
+msgstr "grupos de repositórios"
+
+#: rhodecode/model/db.py:1394
+#, fuzzy
+msgid "Repository group read access"
+msgstr "grupos de repositórios"
+
+#: rhodecode/model/db.py:1395
+#, fuzzy
+msgid "Repository group write access"
+msgstr "grupos de repositórios"
+
+#: rhodecode/model/db.py:1396
+#, fuzzy
+msgid "Repository group admin access"
+msgstr "grupos de repositórios"
+
 #: rhodecode/model/forms.py:43
 msgid "Please enter a login"
 msgstr "Por favor entre um login"
@@ -1138,64 +1296,64 @@
 msgid "Enter %(min)i characters or more"
 msgstr "Entre com %(min)i caracteres ou mais"
 
-#: rhodecode/model/notification.py:220
-#, fuzzy, python-format
-msgid "commented on commit at %(when)s"
-msgstr "comentado no commit"
-
-#: rhodecode/model/notification.py:221
-#, fuzzy, python-format
-msgid "sent message at %(when)s"
-msgstr "mensagem enviada"
-
-#: rhodecode/model/notification.py:222
-#, fuzzy, python-format
-msgid "mentioned you at %(when)s"
-msgstr "mencionou você"
-
-#: rhodecode/model/notification.py:223
-#, fuzzy, python-format
-msgid "registered in RhodeCode at %(when)s"
-msgstr "registrado no RhodeCode"
-
 #: rhodecode/model/notification.py:224
 #, fuzzy, python-format
-msgid "opened new pull request at %(when)s"
+msgid "%(user)s commented on changeset at %(when)s"
 msgstr "comentado no commit"
 
 #: rhodecode/model/notification.py:225
 #, fuzzy, python-format
-msgid "commented on pull request at %(when)s"
+msgid "%(user)s sent message at %(when)s"
+msgstr "mensagem enviada"
+
+#: rhodecode/model/notification.py:226
+#, fuzzy, python-format
+msgid "%(user)s mentioned you at %(when)s"
+msgstr "mencionou você"
+
+#: rhodecode/model/notification.py:227
+#, fuzzy, python-format
+msgid "%(user)s registered in RhodeCode at %(when)s"
+msgstr "registrado no RhodeCode"
+
+#: rhodecode/model/notification.py:228
+#, fuzzy, python-format
+msgid "%(user)s opened new pull request at %(when)s"
 msgstr "comentado no commit"
 
-#: rhodecode/model/pull_request.py:90
+#: rhodecode/model/notification.py:229
+#, fuzzy, python-format
+msgid "%(user)s commented on pull request at %(when)s"
+msgstr "comentado no commit"
+
+#: rhodecode/model/pull_request.py:104
 #, python-format
-msgid "%(user)s wants you to review pull request #%(pr_id)s"
+msgid "%(user)s wants you to review pull request #%(pr_id)s: %(pr_title)s"
 msgstr ""
 
-#: rhodecode/model/scm.py:542
+#: rhodecode/model/scm.py:598
 #, fuzzy
 msgid "latest tip"
 msgstr "último login"
 
 #: rhodecode/model/user.py:232
-msgid "new user registration"
+#, fuzzy
+msgid "New user registration"
 msgstr "registro de novo usuário"
 
 #: rhodecode/model/user.py:257 rhodecode/model/user.py:281
-#: rhodecode/model/user.py:303
 msgid "You can't Edit this user since it's crucial for entire application"
 msgstr ""
 "Você não pode Editar esse usuário, pois ele é crucial para toda a "
 "aplicação"
 
-#: rhodecode/model/user.py:327
+#: rhodecode/model/user.py:303
 msgid "You can't remove this user since it's crucial for entire application"
 msgstr ""
 "Você não pode remover esse usuário, pois ele é crucial para toda a "
 "aplicação"
 
-#: rhodecode/model/user.py:333
+#: rhodecode/model/user.py:309
 #, python-format
 msgid ""
 "user \"%s\" still owns %s repositories and cannot be removed. Switch "
@@ -1204,21 +1362,36 @@
 "usuário \"%s\" ainda é dono de %s repositórios e não pode ser removido. "
 "Troque os donos ou remova esses repositórios. %s"
 
-#: rhodecode/model/validators.py:36 rhodecode/model/validators.py:37
+#: rhodecode/model/user.py:334
+#, fuzzy
+msgid "Password reset link"
+msgstr "link de reinicialização de senha"
+
+#: rhodecode/model/user.py:366
+#, fuzzy
+msgid "Your new password"
+msgstr "Nova senha"
+
+#: rhodecode/model/user.py:367
+#, python-format
+msgid "Your new RhodeCode password:%s"
+msgstr ""
+
+#: rhodecode/model/validators.py:38 rhodecode/model/validators.py:39
 msgid "Value cannot be an empty list"
 msgstr ""
 
-#: rhodecode/model/validators.py:83
+#: rhodecode/model/validators.py:85
 #, fuzzy, python-format
 msgid "Username \"%(username)s\" already exists"
 msgstr "Esse nome de usuário já existe"
 
-#: rhodecode/model/validators.py:85
+#: rhodecode/model/validators.py:87
 #, python-format
 msgid "Username \"%(username)s\" is forbidden"
 msgstr ""
 
-#: rhodecode/model/validators.py:87
+#: rhodecode/model/validators.py:89
 msgid ""
 "Username may only contain alphanumeric characters underscores, periods or"
 " dashes and must begin with alphanumeric character"
@@ -1226,122 +1399,134 @@
 "Nome de usuário pode conter somente caracteres alfanuméricos, sublinha, "
 "pontos e hífens e deve iniciar com caractere alfanumérico"
 
-#: rhodecode/model/validators.py:115
+#: rhodecode/model/validators.py:117
 #, fuzzy, python-format
 msgid "Username %(username)s is not valid"
 msgstr "Esse nome de usuário ou nome de grupo de usuários não é válido"
 
-#: rhodecode/model/validators.py:134
-#, fuzzy
-msgid "Invalid users group name"
+#: rhodecode/model/validators.py:136
+#, fuzzy
+msgid "Invalid user group name"
 msgstr "nome de usuário inválido"
 
-#: rhodecode/model/validators.py:135
-#, fuzzy, python-format
-msgid "Users group \"%(usersgroup)s\" already exists"
-msgstr "Esse grupo de usuários já existe"
-
 #: rhodecode/model/validators.py:137
+#, fuzzy, python-format
+msgid "User group \"%(usergroup)s\" already exists"
+msgstr "Esse grupo de usuários já existe"
+
+#: rhodecode/model/validators.py:139
+#, fuzzy
 msgid ""
-"users group name may only contain  alphanumeric characters underscores, "
+"user group name may only contain alphanumeric characters underscores, "
 "periods or dashes and must begin with alphanumeric character"
 msgstr ""
 "Nome de grupo de repositório pode conter somente caracteres "
 "alfanuméricos, sublinha, pontos e hífens e deve iniciar com caractere "
 "alfanumérico"
 
-#: rhodecode/model/validators.py:175
+#: rhodecode/model/validators.py:177
 msgid "Cannot assign this group as parent"
 msgstr "Não é possível associar esse grupo como progenitor"
 
-#: rhodecode/model/validators.py:176
+#: rhodecode/model/validators.py:178
 #, fuzzy, python-format
 msgid "Group \"%(group_name)s\" already exists"
 msgstr "Esse nome de usuário já existe"
 
-#: rhodecode/model/validators.py:178
+#: rhodecode/model/validators.py:180
 #, fuzzy, python-format
 msgid "Repository with name \"%(group_name)s\" already exists"
 msgstr "Já existe um repositório com esse nome"
 
-#: rhodecode/model/validators.py:236
+#: rhodecode/model/validators.py:238
 #, fuzzy
 msgid "Invalid characters (non-ascii) in password"
 msgstr "Caracteres inválidos na senha"
 
-#: rhodecode/model/validators.py:251
+#: rhodecode/model/validators.py:253
 msgid "Passwords do not match"
 msgstr "Senhas não conferem"
 
-#: rhodecode/model/validators.py:268
+#: rhodecode/model/validators.py:270
 msgid "invalid password"
 msgstr "senha inválida"
 
-#: rhodecode/model/validators.py:269
+#: rhodecode/model/validators.py:271
 msgid "invalid user name"
 msgstr "nome de usuário inválido"
 
-#: rhodecode/model/validators.py:270
+#: rhodecode/model/validators.py:272
 msgid "Your account is disabled"
 msgstr "Sua conta está desabilitada"
 
-#: rhodecode/model/validators.py:314
+#: rhodecode/model/validators.py:316
 #, fuzzy, python-format
 msgid "Repository name %(repo)s is disallowed"
 msgstr "Esse nome de repositório não é permitido"
 
-#: rhodecode/model/validators.py:316
+#: rhodecode/model/validators.py:318
 #, fuzzy, python-format
 msgid "Repository named %(repo)s already exists"
 msgstr "Já existe um repositório com esse nome"
 
-#: rhodecode/model/validators.py:317
+#: rhodecode/model/validators.py:319
 #, fuzzy, python-format
 msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\""
 msgstr "Esse repositório já existe em um grupo \"%s\""
 
-#: rhodecode/model/validators.py:319
+#: rhodecode/model/validators.py:321
 #, fuzzy, python-format
-msgid "Repositories group with name \"%(repo)s\" already exists"
+msgid "Repository group with name \"%(repo)s\" already exists"
 msgstr "Já existe um repositório com esse nome"
 
-#: rhodecode/model/validators.py:432
+#: rhodecode/model/validators.py:438
 msgid "invalid clone url"
 msgstr "URL de clonagem inválida"
 
-#: rhodecode/model/validators.py:433
+#: rhodecode/model/validators.py:439
 #, fuzzy
 msgid "Invalid clone url, provide a valid clone http(s)/svn+http(s) url"
 msgstr "URL de clonagem inválida, forneça uma URL válida de clonagem http\\s"
 
-#: rhodecode/model/validators.py:458
+#: rhodecode/model/validators.py:464
 #, fuzzy
 msgid "Fork have to be the same type as parent"
 msgstr "Bifurcação precisa ser do mesmo tipo que o original"
 
-#: rhodecode/model/validators.py:473
+#: rhodecode/model/validators.py:479
 #, fuzzy
 msgid "You don't have permissions to create repository in this group"
 msgstr "Você não tem permissão para ver esta página"
 
-#: rhodecode/model/validators.py:498
-msgid "This username or users group name is not valid"
+#: rhodecode/model/validators.py:481
+#, fuzzy
+msgid "no permission to create repository in root location"
+msgstr "Você não tem permissão para ver esta página"
+
+#: rhodecode/model/validators.py:518
+#, fuzzy
+msgid "You don't have permissions to create a group in this location"
+msgstr "Você não tem permissão para ver esta página"
+
+#: rhodecode/model/validators.py:557
+#, fuzzy
+msgid "This username or user group name is not valid"
 msgstr "Esse nome de usuário ou nome de grupo de usuários não é válido"
 
-#: rhodecode/model/validators.py:591
+#: rhodecode/model/validators.py:650
 msgid "This is not a valid path"
 msgstr "Esse não é um caminho válido"
 
-#: rhodecode/model/validators.py:606
+#: rhodecode/model/validators.py:665
 msgid "This e-mail address is already taken"
 msgstr "Esse endereço de e-mail já está tomado"
 
-#: rhodecode/model/validators.py:626
+#: rhodecode/model/validators.py:685
 #, fuzzy, python-format
 msgid "e-mail \"%(email)s\" does not exist."
 msgstr "Esse endereço de e-mail não existe."
 
-#: rhodecode/model/validators.py:663
+#: rhodecode/model/validators.py:722
 msgid ""
 "The LDAP Login attribute of the CN must be specified - this is the name "
 "of the attribute that is equivalent to \"username\""
@@ -1349,12 +1534,25 @@
 "O atributo de login LDAP do CN deve ser especificado - isto é o nome do "
 "atributo que é equivalente ao 'nome de usuário'"
 
-#: rhodecode/model/validators.py:682
+#: rhodecode/model/validators.py:735
 #, python-format
 msgid "Revisions %(revs)s are already part of pull request or have set status"
 msgstr ""
 
-#: rhodecode/templates/index.html:3
+#: rhodecode/model/validators.py:767
+msgid "Please enter a valid IPv4 or IpV6 address"
+msgstr ""
+
+#: rhodecode/model/validators.py:768
+#, python-format
+msgid "The network size (bits) must be within the range of 0-32 (not %(bits)r)"
+msgstr ""
+
+#: rhodecode/model/validators.py:800
+msgid "Key name can only consist of letters, underscore, dash or numbers"
+msgstr ""
+
+#: rhodecode/templates/index.html:5
 msgid "Dashboard"
 msgstr "Painel de Controle"
 
@@ -1363,205 +1561,229 @@
 #: rhodecode/templates/admin/repos/repos.html:9
 #: rhodecode/templates/admin/users/user_edit_my_account.html:31
 #: rhodecode/templates/admin/users/users.html:9
-#: rhodecode/templates/bookmarks/bookmarks.html:10
+#: rhodecode/templates/bookmarks/bookmarks.html:9
 #: rhodecode/templates/branches/branches.html:9
 #: rhodecode/templates/journal/journal.html:9
-#: rhodecode/templates/journal/journal.html:48
-#: rhodecode/templates/tags/tags.html:10
+#: rhodecode/templates/journal/journal.html:46
+#: rhodecode/templates/journal/journal.html:47
+#: rhodecode/templates/tags/tags.html:9
 msgid "quick filter..."
 msgstr "filtro rápido..."
 
 #: rhodecode/templates/index_base.html:6
 #: rhodecode/templates/admin/repos/repos.html:9
-#: rhodecode/templates/base/base.html:233
 msgid "repositories"
 msgstr "repositórios"
 
 #: rhodecode/templates/index_base.html:13
-#: rhodecode/templates/index_base.html:15
+#: rhodecode/templates/index_base.html:18
+#: rhodecode/templates/admin/repos/repo_add.html:5
 #: rhodecode/templates/admin/repos/repos.html:21
-msgid "ADD REPOSITORY"
-msgstr "ADICIONAR REPOSITÓRIO"
-
-#: rhodecode/templates/index_base.html:29
-#: rhodecode/templates/index_base.html:136
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:32
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:32
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:33
+msgid "Add repository"
+msgstr "Adicionar repositório"
+
+#: rhodecode/templates/index_base.html:15
+#: rhodecode/templates/index_base.html:20
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:31
+#, fuzzy
+msgid "Add group"
+msgstr "editar grupo de repositórios"
+
+#: rhodecode/templates/index_base.html:27
+#, fuzzy
+msgid "Edit group"
+msgstr "editar grupo de repositórios"
+
+#: rhodecode/templates/index_base.html:27
+msgid "You have admin right to this group, and can edit it"
+msgstr ""
+
+#: rhodecode/templates/index_base.html:40
+#: rhodecode/templates/index_base.html:140
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:33
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:38
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:43
 #: rhodecode/templates/admin/users_groups/users_group_add.html:32
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:33
+#: rhodecode/templates/admin/users_groups/users_groups.html:34
 msgid "Group name"
 msgstr "Nome do grupo"
 
-#: rhodecode/templates/index_base.html:30
-#: rhodecode/templates/index_base.html:72
-#: rhodecode/templates/index_base.html:138
-#: rhodecode/templates/index_base.html:176
-#: rhodecode/templates/index_base.html:266
+#: rhodecode/templates/index_base.html:41
+#: rhodecode/templates/index_base.html:83
+#: rhodecode/templates/index_base.html:142
+#: rhodecode/templates/index_base.html:180
+#: rhodecode/templates/index_base.html:270
 #: rhodecode/templates/admin/repos/repo_add_base.html:56
 #: rhodecode/templates/admin/repos/repo_edit.html:75
-#: rhodecode/templates/admin/repos/repos.html:72
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:41
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:41
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:34
-#: rhodecode/templates/forks/fork.html:59
-#: rhodecode/templates/settings/repo_settings.html:66
-#: rhodecode/templates/summary/summary.html:114
+#: rhodecode/templates/admin/repos/repos.html:73
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:42
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:47
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:44
+#: rhodecode/templates/forks/fork.html:56
+#: rhodecode/templates/pullrequests/pullrequest.html:101
+#: rhodecode/templates/summary/summary.html:106
 msgid "Description"
 msgstr "Descrição"
 
-#: rhodecode/templates/index_base.html:40
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:47
-msgid "Repositories group"
+#: rhodecode/templates/index_base.html:51
+#: rhodecode/templates/admin/permissions/permissions.html:55
+#: rhodecode/templates/admin/repos/repo_add_base.html:29
+#: rhodecode/templates/admin/repos/repo_edit.html:49
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:57
+#: rhodecode/templates/forks/fork.html:47
+msgid "Repository group"
 msgstr "Grupo de repositórios"
 
-#: rhodecode/templates/index_base.html:71
-#: rhodecode/templates/index_base.html:174
-#: rhodecode/templates/index_base.html:264
+#: rhodecode/templates/index_base.html:82
+#: rhodecode/templates/index_base.html:178
+#: rhodecode/templates/index_base.html:268
 #: rhodecode/templates/admin/repos/repo_add_base.html:9
 #: rhodecode/templates/admin/repos/repo_edit.html:32
-#: rhodecode/templates/admin/repos/repos.html:70
-#: rhodecode/templates/admin/users/user_edit.html:196
-#: rhodecode/templates/admin/users/user_edit_my_account.html:59
-#: rhodecode/templates/admin/users/user_edit_my_account.html:180
-#: rhodecode/templates/admin/users/user_edit_my_account.html:216
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:6
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:184
-#: rhodecode/templates/bookmarks/bookmarks.html:36
+#: rhodecode/templates/admin/repos/repos.html:71
+#: rhodecode/templates/admin/users/user_edit_my_account.html:172
+#: rhodecode/templates/base/perms_summary.html:14
+#: rhodecode/templates/bookmarks/bookmarks.html:34
 #: rhodecode/templates/bookmarks/bookmarks_data.html:6
-#: rhodecode/templates/branches/branches.html:50
+#: rhodecode/templates/branches/branches.html:47
 #: rhodecode/templates/branches/branches_data.html:6
 #: rhodecode/templates/files/files_browser.html:47
-#: rhodecode/templates/journal/journal.html:70
-#: rhodecode/templates/journal/journal.html:196
-#: rhodecode/templates/journal/journal_page_repos.html:7
-#: rhodecode/templates/settings/repo_settings.html:31
-#: rhodecode/templates/summary/summary.html:43
-#: rhodecode/templates/summary/summary.html:132
-#: rhodecode/templates/tags/tags.html:51
+#: rhodecode/templates/journal/journal.html:193
+#: rhodecode/templates/journal/journal.html:296
+#: rhodecode/templates/summary/summary.html:55
+#: rhodecode/templates/summary/summary.html:124
+#: rhodecode/templates/tags/tags.html:48
 #: rhodecode/templates/tags/tags_data.html:6
 msgid "Name"
 msgstr "Nome"
 
-#: rhodecode/templates/index_base.html:73
+#: rhodecode/templates/index_base.html:84
 msgid "Last change"
 msgstr "Última alteração"
 
-#: rhodecode/templates/index_base.html:74
-#: rhodecode/templates/index_base.html:179
-#: rhodecode/templates/admin/users/user_edit_my_account.html:182
-#: rhodecode/templates/journal/journal.html:198
+#: rhodecode/templates/index_base.html:85
+#: rhodecode/templates/index_base.html:183
+#: rhodecode/templates/index_base.html:273
+#: rhodecode/templates/admin/repos/repos.html:74
+#: rhodecode/templates/admin/users/user_edit_my_account.html:174
+#: rhodecode/templates/journal/journal.html:195
+#: rhodecode/templates/journal/journal.html:298
 msgid "Tip"
 msgstr "Ponta"
 
-#: rhodecode/templates/index_base.html:75
-#: rhodecode/templates/index_base.html:181
-#: rhodecode/templates/index_base.html:269
+#: rhodecode/templates/index_base.html:86
+#: rhodecode/templates/index_base.html:185
+#: rhodecode/templates/index_base.html:275
 #: rhodecode/templates/admin/repos/repo_edit.html:121
-#: rhodecode/templates/admin/repos/repos.html:73
+#: rhodecode/templates/admin/repos/repos.html:76
 msgid "Owner"
 msgstr "Dono"
 
-#: rhodecode/templates/index_base.html:76
-#: rhodecode/templates/summary/summary.html:48
-#: rhodecode/templates/summary/summary.html:51
-msgid "RSS"
-msgstr "RSS"
-
-#: rhodecode/templates/index_base.html:77
+#: rhodecode/templates/index_base.html:87
 msgid "Atom"
 msgstr "Atom"
 
-#: rhodecode/templates/index_base.html:167
-#: rhodecode/templates/index_base.html:207
-#: rhodecode/templates/index_base.html:291
-#: rhodecode/templates/admin/repos/repos.html:94
-#: rhodecode/templates/admin/users/user_edit_my_account.html:202
+#: rhodecode/templates/index_base.html:171
+#: rhodecode/templates/index_base.html:209
+#: rhodecode/templates/index_base.html:296
+#: rhodecode/templates/admin/repos/repos.html:97
+#: rhodecode/templates/admin/users/user_edit_my_account.html:196
 #: rhodecode/templates/admin/users/users.html:107
-#: rhodecode/templates/bookmarks/bookmarks.html:60
-#: rhodecode/templates/branches/branches.html:76
-#: rhodecode/templates/journal/journal.html:221
-#: rhodecode/templates/tags/tags.html:77
+#: rhodecode/templates/bookmarks/bookmarks.html:58
+#: rhodecode/templates/branches/branches.html:73
+#: rhodecode/templates/journal/journal.html:217
+#: rhodecode/templates/journal/journal.html:320
+#: rhodecode/templates/tags/tags.html:74
 msgid "Click to sort ascending"
 msgstr "Clique para ordenar em ordem crescente"
 
-#: rhodecode/templates/index_base.html:168
-#: rhodecode/templates/index_base.html:208
-#: rhodecode/templates/index_base.html:292
-#: rhodecode/templates/admin/repos/repos.html:95
-#: rhodecode/templates/admin/users/user_edit_my_account.html:203
+#: rhodecode/templates/index_base.html:172
+#: rhodecode/templates/index_base.html:210
+#: rhodecode/templates/index_base.html:297
+#: rhodecode/templates/admin/repos/repos.html:98
+#: rhodecode/templates/admin/users/user_edit_my_account.html:197
 #: rhodecode/templates/admin/users/users.html:108
-#: rhodecode/templates/bookmarks/bookmarks.html:61
-#: rhodecode/templates/branches/branches.html:77
-#: rhodecode/templates/journal/journal.html:222
-#: rhodecode/templates/tags/tags.html:78
+#: rhodecode/templates/bookmarks/bookmarks.html:59
+#: rhodecode/templates/branches/branches.html:74
+#: rhodecode/templates/journal/journal.html:218
+#: rhodecode/templates/journal/journal.html:321
+#: rhodecode/templates/tags/tags.html:75
 msgid "Click to sort descending"
 msgstr "Clique para ordenar em ordem descrescente"
 
-#: rhodecode/templates/index_base.html:177
-#: rhodecode/templates/index_base.html:267
+#: rhodecode/templates/index_base.html:181
+#: rhodecode/templates/index_base.html:271
 msgid "Last Change"
 msgstr "Última Alteração"
 
-#: rhodecode/templates/index_base.html:209
-#: rhodecode/templates/index_base.html:293
-#: rhodecode/templates/admin/repos/repos.html:96
-#: rhodecode/templates/admin/users/user_edit_my_account.html:204
+#: rhodecode/templates/index_base.html:211
+#: rhodecode/templates/admin/repos/repos.html:99
+#: rhodecode/templates/admin/users/user_edit_my_account.html:198
 #: rhodecode/templates/admin/users/users.html:109
-#: rhodecode/templates/bookmarks/bookmarks.html:62
-#: rhodecode/templates/branches/branches.html:78
-#: rhodecode/templates/journal/journal.html:223
-#: rhodecode/templates/tags/tags.html:79
+#: rhodecode/templates/bookmarks/bookmarks.html:60
+#: rhodecode/templates/branches/branches.html:75
+#: rhodecode/templates/journal/journal.html:219
+#: rhodecode/templates/journal/journal.html:322
+#: rhodecode/templates/tags/tags.html:76
 msgid "No records found."
 msgstr "Nenhum registro encontrado."
 
-#: rhodecode/templates/index_base.html:210
-#: rhodecode/templates/index_base.html:294
-#: rhodecode/templates/admin/repos/repos.html:97
-#: rhodecode/templates/admin/users/user_edit_my_account.html:205
+#: rhodecode/templates/index_base.html:212
+#: rhodecode/templates/index_base.html:299
+#: rhodecode/templates/admin/repos/repos.html:100
+#: rhodecode/templates/admin/users/user_edit_my_account.html:199
 #: rhodecode/templates/admin/users/users.html:110
-#: rhodecode/templates/bookmarks/bookmarks.html:63
-#: rhodecode/templates/branches/branches.html:79
-#: rhodecode/templates/journal/journal.html:224
-#: rhodecode/templates/tags/tags.html:80
+#: rhodecode/templates/bookmarks/bookmarks.html:61
+#: rhodecode/templates/branches/branches.html:76
+#: rhodecode/templates/journal/journal.html:220
+#: rhodecode/templates/journal/journal.html:323
+#: rhodecode/templates/tags/tags.html:77
 msgid "Data error."
 msgstr "Erro de dados."
 
-#: rhodecode/templates/index_base.html:211
-#: rhodecode/templates/index_base.html:295
-#: rhodecode/templates/admin/repos/repos.html:98
-#: rhodecode/templates/admin/users/user_edit_my_account.html:206
+#: rhodecode/templates/index_base.html:213
+#: rhodecode/templates/index_base.html:300
+#: rhodecode/templates/admin/repos/repos.html:101
+#: rhodecode/templates/admin/users/user_edit_my_account.html:58
+#: rhodecode/templates/admin/users/user_edit_my_account.html:200
 #: rhodecode/templates/admin/users/users.html:111
-#: rhodecode/templates/bookmarks/bookmarks.html:64
-#: rhodecode/templates/branches/branches.html:80
-#: rhodecode/templates/journal/journal.html:62
-#: rhodecode/templates/journal/journal.html:225
-#: rhodecode/templates/tags/tags.html:81
+#: rhodecode/templates/bookmarks/bookmarks.html:62
+#: rhodecode/templates/branches/branches.html:77
+#: rhodecode/templates/journal/journal.html:221
+#: rhodecode/templates/journal/journal.html:324
+#: rhodecode/templates/tags/tags.html:78
 msgid "Loading..."
 msgstr "Carregando..."
 
-#: rhodecode/templates/login.html:5 rhodecode/templates/login.html:54
-msgid "Sign In"
+#: rhodecode/templates/index_base.html:298
+#, fuzzy
+msgid "No repositories found."
+msgstr "grupos de repositórios"
+
+#: rhodecode/templates/login.html:5 rhodecode/templates/base/base.html:227
+msgid "Log In"
 msgstr "Entrar"
 
 #: rhodecode/templates/login.html:21
-msgid "Sign In to"
-msgstr "Entrar em"
+#, python-format
+msgid "Log In to %s"
+msgstr ""
 
 #: rhodecode/templates/login.html:31 rhodecode/templates/register.html:20
 #: rhodecode/templates/admin/admin_log.html:5
 #: rhodecode/templates/admin/users/user_add.html:32
-#: rhodecode/templates/admin/users/user_edit.html:50
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:26
-#: rhodecode/templates/base/base.html:83
-#: rhodecode/templates/summary/summary.html:131
+#: rhodecode/templates/admin/users/user_edit.html:57
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:31
+#: rhodecode/templates/admin/users/users.html:77
+#: rhodecode/templates/base/base.html:203
+#: rhodecode/templates/summary/summary.html:123
 msgid "Username"
 msgstr "Nome de usuário"
 
 #: rhodecode/templates/login.html:40 rhodecode/templates/register.html:29
 #: rhodecode/templates/admin/ldap/ldap.html:46
 #: rhodecode/templates/admin/users/user_add.html:41
-#: rhodecode/templates/base/base.html:92
+#: rhodecode/templates/base/base.html:212
 msgid "Password"
 msgstr "Senha"
 
@@ -1569,17 +1791,22 @@
 msgid "Remember me"
 msgstr "Lembre-se de mim"
 
+#: rhodecode/templates/login.html:54
+msgid "Sign In"
+msgstr "Entrar"
+
 #: rhodecode/templates/login.html:60
 msgid "Forgot your password ?"
 msgstr "Esqueceu sua senha ?"
 
-#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:103
+#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:223
 msgid "Don't have an account ?"
 msgstr "Não possui uma conta ?"
 
 #: rhodecode/templates/password_reset.html:5
-msgid "Reset your password"
-msgstr "Reinicializar sua senha"
+#, fuzzy
+msgid "Password Reset"
+msgstr "link de reinicialização de senha"
 
 #: rhodecode/templates/password_reset.html:11
 msgid "Reset your password to"
@@ -1613,23 +1840,23 @@
 
 #: rhodecode/templates/register.html:47
 #: rhodecode/templates/admin/users/user_add.html:59
-#: rhodecode/templates/admin/users/user_edit.html:90
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:53
+#: rhodecode/templates/admin/users/user_edit.html:97
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:62
 msgid "First Name"
 msgstr "Primeiro Nome"
 
 #: rhodecode/templates/register.html:56
 #: rhodecode/templates/admin/users/user_add.html:68
-#: rhodecode/templates/admin/users/user_edit.html:99
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:62
+#: rhodecode/templates/admin/users/user_edit.html:106
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:71
 msgid "Last Name"
 msgstr "Último Nome"
 
 #: rhodecode/templates/register.html:65
 #: rhodecode/templates/admin/users/user_add.html:77
-#: rhodecode/templates/admin/users/user_edit.html:108
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:71
-#: rhodecode/templates/summary/summary.html:133
+#: rhodecode/templates/admin/users/user_edit.html:115
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:80
+#: rhodecode/templates/summary/summary.html:125
 msgid "Email"
 msgstr "E-mail"
 
@@ -1641,44 +1868,31 @@
 msgid "Your account must wait for activation by administrator"
 msgstr "Sua conta precisa esperar ativação por um administrador"
 
-#: rhodecode/templates/repo_switcher_list.html:11
+#: rhodecode/templates/repo_switcher_list.html:10
 #: rhodecode/templates/admin/defaults/defaults.html:44
 #: rhodecode/templates/admin/repos/repo_add_base.html:65
 #: rhodecode/templates/admin/repos/repo_edit.html:85
-#: rhodecode/templates/settings/repo_settings.html:76
+#: rhodecode/templates/data_table/_dt_elements.html:61
+#: rhodecode/templates/summary/summary.html:77
 msgid "Private repository"
 msgstr "Repositório privado"
 
-#: rhodecode/templates/repo_switcher_list.html:16
+#: rhodecode/templates/repo_switcher_list.html:12
+#: rhodecode/templates/data_table/_dt_elements.html:63
+#: rhodecode/templates/summary/summary.html:79
 msgid "Public repository"
 msgstr "Repositório público"
 
-#: rhodecode/templates/switch_to_list.html:3
-#: rhodecode/templates/branches/branches.html:14
-msgid "branches"
-msgstr "ramos"
-
 #: rhodecode/templates/switch_to_list.html:10
 #: rhodecode/templates/branches/branches_data.html:57
 msgid "There are no branches yet"
 msgstr "Ainda não há ramos"
 
-#: rhodecode/templates/switch_to_list.html:15
-#: rhodecode/templates/shortlog/shortlog_data.html:10
-#: rhodecode/templates/tags/tags.html:15
-msgid "tags"
-msgstr "etiquetas"
-
 #: rhodecode/templates/switch_to_list.html:22
 #: rhodecode/templates/tags/tags_data.html:38
 msgid "There are no tags yet"
 msgstr "Ainda não há etiquetas"
 
-#: rhodecode/templates/switch_to_list.html:28
-#: rhodecode/templates/bookmarks/bookmarks.html:15
-msgid "bookmarks"
-msgstr "marcadores"
-
 #: rhodecode/templates/switch_to_list.html:35
 #: rhodecode/templates/bookmarks/bookmarks_data.html:32
 msgid "There are no bookmarks yet"
@@ -1686,6 +1900,7 @@
 
 #: rhodecode/templates/admin/admin.html:5
 #: rhodecode/templates/admin/admin.html:13
+#: rhodecode/templates/base/base.html:68
 msgid "Admin journal"
 msgstr "Diário do administrador"
 
@@ -1709,11 +1924,13 @@
 msgstr[1] ""
 
 #: rhodecode/templates/admin/admin_log.html:6
-#: rhodecode/templates/admin/repos/repos.html:74
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:8
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:9
-#: rhodecode/templates/journal/journal_page_repos.html:9
-#: rhodecode/templates/journal/journal_page_repos.html:10
+#: rhodecode/templates/admin/repos/repos.html:77
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46
+#: rhodecode/templates/admin/users/user_edit_my_account.html:176
+#: rhodecode/templates/admin/users/users.html:87
+#: rhodecode/templates/admin/users_groups/users_groups.html:37
+#: rhodecode/templates/journal/journal.html:197
+#: rhodecode/templates/journal/journal.html:300
 msgid "Action"
 msgstr "Ação"
 
@@ -1723,11 +1940,11 @@
 msgstr "Repositório"
 
 #: rhodecode/templates/admin/admin_log.html:8
-#: rhodecode/templates/bookmarks/bookmarks.html:37
+#: rhodecode/templates/bookmarks/bookmarks.html:35
 #: rhodecode/templates/bookmarks/bookmarks_data.html:7
-#: rhodecode/templates/branches/branches.html:51
+#: rhodecode/templates/branches/branches.html:48
 #: rhodecode/templates/branches/branches_data.html:7
-#: rhodecode/templates/tags/tags.html:52
+#: rhodecode/templates/tags/tags.html:49
 #: rhodecode/templates/tags/tags_data.html:7
 msgid "Date"
 msgstr "Data"
@@ -1747,6 +1964,7 @@
 msgstr "grupos de repositórios"
 
 #: rhodecode/templates/admin/defaults/defaults.html:11
+#: rhodecode/templates/base/base.html:75
 #, fuzzy
 msgid "Defaults"
 msgstr "excluir"
@@ -1760,8 +1978,7 @@
 #: rhodecode/templates/admin/defaults/defaults.html:48
 #: rhodecode/templates/admin/repos/repo_add_base.html:69
 #: rhodecode/templates/admin/repos/repo_edit.html:89
-#: rhodecode/templates/forks/fork.html:72
-#: rhodecode/templates/settings/repo_settings.html:80
+#: rhodecode/templates/forks/fork.html:69
 msgid ""
 "Private repositories are only visible to people explicitly added as "
 "collaborators."
@@ -1791,7 +2008,7 @@
 
 #: rhodecode/templates/admin/defaults/defaults.html:75
 #: rhodecode/templates/admin/repos/repo_edit.html:112
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:66
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:72
 #, fuzzy
 msgid "Enable locking"
 msgstr "habilitar"
@@ -1803,14 +2020,18 @@
 
 #: rhodecode/templates/admin/defaults/defaults.html:84
 #: rhodecode/templates/admin/ldap/ldap.html:89
-#: rhodecode/templates/admin/repos/repo_edit.html:141
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:74
+#: rhodecode/templates/admin/permissions/permissions.html:92
+#: rhodecode/templates/admin/repos/repo_edit.html:148
+#: rhodecode/templates/admin/repos/repo_edit.html:173
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:80
 #: rhodecode/templates/admin/settings/hooks.html:73
-#: rhodecode/templates/admin/users/user_edit.html:133
-#: rhodecode/templates/admin/users/user_edit.html:178
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:79
+#: rhodecode/templates/admin/users/user_add.html:94
+#: rhodecode/templates/admin/users/user_edit.html:140
+#: rhodecode/templates/admin/users/user_edit.html:185
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:88
+#: rhodecode/templates/admin/users_groups/users_group_add.html:49
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:90
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:135
-#: rhodecode/templates/settings/repo_settings.html:94
 msgid "Save"
 msgstr "Salvar"
 
@@ -1819,8 +2040,11 @@
 msgstr "Administração de LDAP"
 
 #: rhodecode/templates/admin/ldap/ldap.html:11
-msgid "Ldap"
-msgstr "LDAP"
+#: rhodecode/templates/admin/users/users.html:86
+#: rhodecode/templates/base/base.html:74
+#, fuzzy
+msgid "LDAP"
+msgstr "ldap"
 
 #: rhodecode/templates/admin/ldap/ldap.html:28
 msgid "Connection settings"
@@ -1901,8 +2125,7 @@
 msgstr "commits"
 
 #: rhodecode/templates/admin/notifications/notifications.html:31
-#: rhodecode/templates/base/base.html:267
-#: rhodecode/templates/base/base.html:269
+#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8
 msgid "Pull requests"
 msgstr ""
 
@@ -1920,6 +2143,7 @@
 msgstr "Mostrar notificação"
 
 #: rhodecode/templates/admin/notifications/show_notification.html:9
+#: rhodecode/templates/base/base.html:241
 msgid "Notifications"
 msgstr "Notificações"
 
@@ -1928,11 +2152,12 @@
 msgstr "Administração de permissões"
 
 #: rhodecode/templates/admin/permissions/permissions.html:11
-#: rhodecode/templates/admin/repos/repo_edit.html:134
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:58
-#: rhodecode/templates/admin/users/user_edit.html:143
+#: rhodecode/templates/admin/repos/repo_edit.html:158
+#: rhodecode/templates/admin/repos/repo_edit.html:165
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:64
+#: rhodecode/templates/admin/users/user_edit.html:150
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:100
-#: rhodecode/templates/settings/repo_settings.html:86
+#: rhodecode/templates/base/base.html:73
 msgid "Permissions"
 msgstr "Permissões"
 
@@ -1945,8 +2170,9 @@
 msgstr "Acesso anônimo"
 
 #: rhodecode/templates/admin/permissions/permissions.html:49
+#, fuzzy
 msgid ""
-"All default permissions on each repository will be reset to choosen "
+"All default permissions on each repository will be reset to chosen "
 "permission, note that all custom default permission on repositories will "
 "be lost"
 msgstr ""
@@ -1956,24 +2182,16 @@
 
 #: rhodecode/templates/admin/permissions/permissions.html:50
 #: rhodecode/templates/admin/permissions/permissions.html:63
-msgid "overwrite existing settings"
+#, fuzzy
+msgid "Overwrite existing settings"
 msgstr "sobrescrever configurações existentes"
 
-#: rhodecode/templates/admin/permissions/permissions.html:55
-#: rhodecode/templates/admin/repos/repo_add_base.html:29
-#: rhodecode/templates/admin/repos/repo_edit.html:49
-#: rhodecode/templates/admin/repos_groups/repos_groups.html:4
-#: rhodecode/templates/forks/fork.html:50
-#: rhodecode/templates/settings/repo_settings.html:48
-msgid "Repository group"
-msgstr "Grupo de repositórios"
-
 #: rhodecode/templates/admin/permissions/permissions.html:62
 #, fuzzy
 msgid ""
-"All default permissions on each repository group will be reset to choosen"
-" permission, note that all custom default permission on repositories "
-"group will be lost"
+"All default permissions on each repository group will be reset to chosen "
+"permission, note that all custom default permission on repository groups "
+"will be lost"
 msgstr ""
 "Todas as permissões padrão em cada repositório serão reinicializadas para"
 " as permissões escolhidas. Note que todas as permissões padrão "
@@ -1992,40 +2210,100 @@
 msgid "Repository forking"
 msgstr "Criação de repositório"
 
-#: rhodecode/templates/admin/permissions/permissions.html:92
-#: rhodecode/templates/admin/repos/repo_edit.html:264
-msgid "set"
-msgstr "ajustar"
-
-#: rhodecode/templates/admin/repos/repo_add.html:5
-#: rhodecode/templates/admin/repos/repo_add_create_repository.html:5
-msgid "Add repository"
-msgstr "Adicionar repositório"
-
-#: rhodecode/templates/admin/repos/repo_add.html:11
-#: rhodecode/templates/admin/repos/repo_edit.html:11
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:10
+#: rhodecode/templates/admin/permissions/permissions.html:93
+#: rhodecode/templates/admin/permissions/permissions.html:154
+#: rhodecode/templates/admin/repos/repo_edit.html:149
+#: rhodecode/templates/admin/repos/repo_edit.html:174
+#: rhodecode/templates/admin/repos/repo_edit.html:388
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:81
+#: rhodecode/templates/admin/settings/settings.html:115
+#: rhodecode/templates/admin/settings/settings.html:187
+#: rhodecode/templates/admin/settings/settings.html:278
+#: rhodecode/templates/admin/users/user_edit.html:141
+#: rhodecode/templates/admin/users/user_edit.html:186
+#: rhodecode/templates/admin/users/user_edit.html:235
+#: rhodecode/templates/admin/users/user_edit.html:283
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:89
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:136
+#: rhodecode/templates/files/files_add.html:80
+#: rhodecode/templates/files/files_edit.html:66
+#: rhodecode/templates/pullrequests/pullrequest.html:110
+msgid "Reset"
+msgstr "Limpar"
+
+#: rhodecode/templates/admin/permissions/permissions.html:103
+#, fuzzy
+msgid "Default User Permissions"
+msgstr "Permissões padrão"
+
+#: rhodecode/templates/admin/permissions/permissions.html:113
+#: rhodecode/templates/admin/users/user_edit.html:244
+#, fuzzy
+msgid "Allowed IP addresses"
+msgstr "Endereço de e-mail"
+
+#: rhodecode/templates/admin/permissions/permissions.html:127
+#: rhodecode/templates/admin/repos/repo_edit.html:347
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:70
+#: rhodecode/templates/admin/users/user_edit.html:212
+#: rhodecode/templates/admin/users/user_edit.html:257
+#: rhodecode/templates/admin/users_groups/users_groups.html:46
+#: rhodecode/templates/data_table/_dt_elements.html:122
+#: rhodecode/templates/data_table/_dt_elements.html:130
+msgid "delete"
+msgstr "excluir"
+
+#: rhodecode/templates/admin/permissions/permissions.html:128
+#: rhodecode/templates/admin/users/user_edit.html:258
+#, fuzzy, python-format
+msgid "Confirm to delete this ip: %s"
+msgstr "Confirma excluir este usuário: %s"
+
+#: rhodecode/templates/admin/permissions/permissions.html:134
+#: rhodecode/templates/admin/users/user_edit.html:264
+msgid "All IP addresses are allowed"
+msgstr ""
+
+#: rhodecode/templates/admin/permissions/permissions.html:145
+#: rhodecode/templates/admin/users/user_edit.html:275
+#, fuzzy
+msgid "New ip address"
+msgstr "Endereço de e-mail"
+
+#: rhodecode/templates/admin/permissions/permissions.html:153
+#: rhodecode/templates/admin/repos/repo_add_base.html:73
+#: rhodecode/templates/admin/repos/repo_edit.html:387
+#: rhodecode/templates/admin/users/user_edit.html:234
+#: rhodecode/templates/admin/users/user_edit.html:282
+#, fuzzy
+msgid "Add"
+msgstr "adicionar"
+
+#: rhodecode/templates/admin/repos/repo_add.html:12
+#: rhodecode/templates/admin/repos/repo_add.html:16
+#: rhodecode/templates/base/base.html:69 rhodecode/templates/base/base.html:103
+#: rhodecode/templates/base/base.html:263
 msgid "Repositories"
 msgstr "Repositórios"
 
-#: rhodecode/templates/admin/repos/repo_add.html:13
-msgid "add new"
+#: rhodecode/templates/admin/repos/repo_add.html:19
+#, fuzzy
+msgid "Add new"
 msgstr "adicionar novo"
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:20
-#: rhodecode/templates/summary/summary.html:104
-#: rhodecode/templates/summary/summary.html:105
+#: rhodecode/templates/summary/summary.html:96
+#: rhodecode/templates/summary/summary.html:97
 msgid "Clone from"
 msgstr "Clonar de"
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:24
 #: rhodecode/templates/admin/repos/repo_edit.html:44
-#: rhodecode/templates/settings/repo_settings.html:43
 msgid "Optional http[s] url from which repository should be cloned."
 msgstr "URL opcional http[s] da qual o repositório deve ser clonado."
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:33
-#: rhodecode/templates/forks/fork.html:54
+#: rhodecode/templates/forks/fork.html:51
 #, fuzzy
 msgid "Optionaly select a group to put this repository into."
 msgstr "Opcionalmente selecione um grupo no qual colocar esse repositório."
@@ -2036,60 +2314,42 @@
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:47
 #: rhodecode/templates/admin/repos/repo_edit.html:66
-#: rhodecode/templates/forks/fork.html:41
-#: rhodecode/templates/settings/repo_settings.html:57
+#: rhodecode/templates/forks/fork.html:38
 #, fuzzy
 msgid "Landing revision"
 msgstr "próxima revisão"
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:51
 #: rhodecode/templates/admin/repos/repo_edit.html:70
-#: rhodecode/templates/forks/fork.html:45
-#: rhodecode/templates/settings/repo_settings.html:61
+#: rhodecode/templates/forks/fork.html:42
 msgid "Default revision for files page, downloads, whoosh and readme"
 msgstr ""
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:60
 #: rhodecode/templates/admin/repos/repo_edit.html:79
-#: rhodecode/templates/forks/fork.html:63
-#: rhodecode/templates/settings/repo_settings.html:70
+#: rhodecode/templates/forks/fork.html:60
 msgid "Keep it short and to the point. Use a README file for longer descriptions."
 msgstr ""
 "Seja sucinto e objetivo. Use um arquivo README para descrições mais "
 "longas."
 
-#: rhodecode/templates/admin/repos/repo_add_base.html:73
-msgid "add"
-msgstr "adicionar"
-
-#: rhodecode/templates/admin/repos/repo_add_create_repository.html:9
-msgid "add new repository"
-msgstr "adicionar novo repositório"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:5
+#: rhodecode/templates/admin/repos/repo_edit.html:8
 msgid "Edit repository"
 msgstr "Editar repositório"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:13
-#: rhodecode/templates/admin/users/user_edit.html:13
-#: rhodecode/templates/admin/users/user_edit.html:228
-#: rhodecode/templates/admin/users/user_edit.html:230
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:28
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:13
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:207
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:209
-#: rhodecode/templates/files/files_source.html:29
-#: rhodecode/templates/journal/journal_page_repos.html:29
-msgid "edit"
-msgstr "editar"
+#: rhodecode/templates/admin/repos/repo_edit.html:12
+#: rhodecode/templates/admin/settings/hooks.html:9
+#: rhodecode/templates/admin/settings/settings.html:11
+#: rhodecode/templates/base/base.html:76 rhodecode/templates/base/base.html:121
+#: rhodecode/templates/summary/summary.html:212
+msgid "Settings"
+msgstr "Configurações"
 
 #: rhodecode/templates/admin/repos/repo_edit.html:40
-#: rhodecode/templates/settings/repo_settings.html:39
 msgid "Clone uri"
 msgstr "URI de clonagem"
 
 #: rhodecode/templates/admin/repos/repo_edit.html:53
-#: rhodecode/templates/settings/repo_settings.html:52
 msgid "Optional select a group to put this repository into."
 msgstr "Opcionalmente selecione um grupo no qual colocar esse repositório."
 
@@ -2097,114 +2357,99 @@
 msgid "Change owner of this repository."
 msgstr "Mudar o dono desse repositório."
 
-#: rhodecode/templates/admin/repos/repo_edit.html:142
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:75
-#: rhodecode/templates/admin/settings/settings.html:113
-#: rhodecode/templates/admin/settings/settings.html:179
-#: rhodecode/templates/admin/settings/settings.html:269
-#: rhodecode/templates/admin/users/user_edit.html:134
-#: rhodecode/templates/admin/users/user_edit.html:179
-#: rhodecode/templates/admin/users/user_edit.html:282
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:80
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:136
-#: rhodecode/templates/files/files_add.html:82
-#: rhodecode/templates/files/files_edit.html:68
-#: rhodecode/templates/pullrequests/pullrequest.html:124
-#: rhodecode/templates/settings/repo_settings.html:95
-msgid "Reset"
-msgstr "Limpar"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:152
-msgid "Administration"
-msgstr "Administração"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:155
+#: rhodecode/templates/admin/repos/repo_edit.html:184
+#, fuzzy
+msgid "Advanced settings"
+msgstr "Salvar configurações"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:187
 msgid "Statistics"
 msgstr "Estatísticas"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:159
+#: rhodecode/templates/admin/repos/repo_edit.html:191
 msgid "Reset current statistics"
 msgstr "Reinicializar estatísticas atuais"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:159
+#: rhodecode/templates/admin/repos/repo_edit.html:191
 msgid "Confirm to remove current statistics"
 msgstr "Confirma remover atuais estatísticas"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:162
+#: rhodecode/templates/admin/repos/repo_edit.html:194
 msgid "Fetched to rev"
 msgstr "Trazida à rev"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:163
+#: rhodecode/templates/admin/repos/repo_edit.html:195
 msgid "Stats gathered"
 msgstr "Estatísticas coletadas"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:171
+#: rhodecode/templates/admin/repos/repo_edit.html:203
 msgid "Remote"
 msgstr "Remoto"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:175
+#: rhodecode/templates/admin/repos/repo_edit.html:207
 msgid "Pull changes from remote location"
 msgstr "Realizar pull de alterações a partir de localização remota"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:175
+#: rhodecode/templates/admin/repos/repo_edit.html:207
 msgid "Confirm to pull changes from remote side"
 msgstr "Confirma realizar pull de alterações a partir de lado remoto"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:186
+#: rhodecode/templates/admin/repos/repo_edit.html:218
 msgid "Cache"
 msgstr "Cache"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:190
+#: rhodecode/templates/admin/repos/repo_edit.html:222
 msgid "Invalidate repository cache"
 msgstr "Invalidar cache do repositório"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:190
+#: rhodecode/templates/admin/repos/repo_edit.html:222
 msgid "Confirm to invalidate repository cache"
 msgstr "Confirma invalidar cache do repositório"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:193
+#: rhodecode/templates/admin/repos/repo_edit.html:225
 msgid ""
 "Manually invalidate cache for this repository. On first access repository"
 " will be cached again"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:198
+#: rhodecode/templates/admin/repos/repo_edit.html:230
 msgid "List of cached values"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:201
+#: rhodecode/templates/admin/repos/repo_edit.html:233
 msgid "Prefix"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:202
+#: rhodecode/templates/admin/repos/repo_edit.html:234
 #, fuzzy
 msgid "Key"
 msgstr "Chave de API"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:203
+#: rhodecode/templates/admin/repos/repo_edit.html:235
 #: rhodecode/templates/admin/users/user_add.html:86
-#: rhodecode/templates/admin/users/user_edit.html:117
+#: rhodecode/templates/admin/users/user_edit.html:124
+#: rhodecode/templates/admin/users/users.html:84
 #: rhodecode/templates/admin/users_groups/users_group_add.html:41
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:42
+#: rhodecode/templates/admin/users_groups/users_groups.html:36
 msgid "Active"
 msgstr "Ativo"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:218
-#: rhodecode/templates/base/base.html:331
-#: rhodecode/templates/base/base.html:333
-#: rhodecode/templates/base/base.html:335
+#: rhodecode/templates/admin/repos/repo_edit.html:250
+#: rhodecode/templates/base/base.html:280
+#: rhodecode/templates/base/base.html:281
 msgid "Public journal"
 msgstr "Diário público"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:224
+#: rhodecode/templates/admin/repos/repo_edit.html:256
 msgid "Remove from public journal"
 msgstr "Remover do diário público"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:226
+#: rhodecode/templates/admin/repos/repo_edit.html:258
 msgid "Add to public journal"
 msgstr "Adicionar ao diário público"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:231
+#: rhodecode/templates/admin/repos/repo_edit.html:263
 msgid ""
 "All actions made on this repository will be accessible to everyone in "
 "public journal"
@@ -2212,76 +2457,125 @@
 "Todas as ações feitas nesse repositório serão acessíveis a todos no "
 "diário público"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:238
+#: rhodecode/templates/admin/repos/repo_edit.html:270
 #, fuzzy
 msgid "Locking"
 msgstr "destravar"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:243
+#: rhodecode/templates/admin/repos/repo_edit.html:275
 msgid "Unlock locked repo"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:243
+#: rhodecode/templates/admin/repos/repo_edit.html:275
 #, fuzzy
 msgid "Confirm to unlock repository"
 msgstr "Confirma excluir este repositório"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:246
+#: rhodecode/templates/admin/repos/repo_edit.html:278
 msgid "lock repo"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:246
+#: rhodecode/templates/admin/repos/repo_edit.html:278
 #, fuzzy
 msgid "Confirm to lock repository"
 msgstr "Confirma excluir este repositório"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:247
+#: rhodecode/templates/admin/repos/repo_edit.html:279
 #, fuzzy
 msgid "Repository is not locked"
 msgstr "repositórios"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:252
+#: rhodecode/templates/admin/repos/repo_edit.html:284
 msgid "Force locking on repository. Works only when anonymous access is disabled"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:259
+#: rhodecode/templates/admin/repos/repo_edit.html:291
 #, fuzzy
 msgid "Set as fork of"
 msgstr "Marcar como bifurcação"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:268
+#: rhodecode/templates/admin/repos/repo_edit.html:296
+msgid "set"
+msgstr "ajustar"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:300
 #, fuzzy
 msgid "Manually set this repository as a fork of another from the list"
 msgstr "Marcar manualmente este repositório como sendo uma bifurcação de outro"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:274
-#: rhodecode/templates/changeset/changeset_file_comment.html:26
+#: rhodecode/templates/admin/repos/repo_edit.html:306
+#: rhodecode/templates/changeset/changeset_file_comment.html:41
 msgid "Delete"
 msgstr "Excluir"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:278
-#: rhodecode/templates/settings/repo_settings.html:115
+#: rhodecode/templates/admin/repos/repo_edit.html:315
 msgid "Remove this repository"
 msgstr "Remover deste repositório"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:278
-#: rhodecode/templates/settings/repo_settings.html:115
+#: rhodecode/templates/admin/repos/repo_edit.html:315
 msgid "Confirm to delete this repository"
 msgstr "Confirma excluir este repositório"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:282
-#: rhodecode/templates/settings/repo_settings.html:119
+#: rhodecode/templates/admin/repos/repo_edit.html:317
+#, fuzzy, python-format
+msgid "this repository has %s fork"
+msgid_plural "this repository has %s forks"
+msgstr[0] "repositório [criado] como uma bifurcação"
+msgstr[1] ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:318
+#, fuzzy
+msgid "Detach forks"
+msgstr "Marcar como bifurcação"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:319
+#, fuzzy
+msgid "Delete forks"
+msgstr "excluir"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:322
 #, fuzzy
 msgid ""
 "This repository will be renamed in a special way in order to be "
-"unaccesible for RhodeCode and VCS systems. If you need fully delete it "
-"from file system please do it manually"
+"unaccesible for RhodeCode and VCS systems. If you need to fully delete it"
+" from file system please do it manually"
 msgstr ""
 "Este repositório será renomeado de uma maneira especial, de forma a ser "
 "inacessível ao RhodeCode e sistemas de controle de versão.\n"
 "                         Se você precisa exclui-lo completamente do "
 "sistema de arquivos, por favor faça-o manualmente"
 
+#: rhodecode/templates/admin/repos/repo_edit.html:336
+msgid "Extra fields"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:348
+#, fuzzy, python-format
+msgid "Confirm to delete this field: %s"
+msgstr "Confirma excluir este usuário: %s"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:362
+#, fuzzy
+msgid "New field key"
+msgstr "adicionar novo arquivo"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:370
+msgid "New field label"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:373
+msgid "Enter short label"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:379
+#, fuzzy
+msgid "New field description"
+msgstr "Descrição"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:382
+msgid "Enter description of a field"
+msgstr ""
+
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:3
 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:3
 msgid "none"
@@ -2299,8 +2593,6 @@
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:6
 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:6
-#: rhodecode/templates/admin/users/users.html:85
-#: rhodecode/templates/base/base.html:229
 msgid "admin"
 msgstr "administrador"
 
@@ -2310,79 +2602,60 @@
 msgstr "membro"
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:16
-#: rhodecode/templates/data_table/_dt_elements.html:67
-#: rhodecode/templates/journal/journal.html:95
-#: rhodecode/templates/summary/summary.html:85
 msgid "private repository"
 msgstr "repositório privado"
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:19
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:28
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:18
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:20
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:35
 #, fuzzy
 msgid "default"
 msgstr "excluir"
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:33
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:58
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:23
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:42
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:25
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:55
 msgid "revoke"
 msgstr "revogar"
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:83
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:67
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:80
 msgid "Add another member"
 msgstr "Adicionar outro membro"
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:97
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:100
 msgid "Failed to remove user"
 msgstr "Falha ao reomver usuário"
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:112
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:103
-msgid "Failed to remove users group"
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:116
+#, fuzzy
+msgid "Failed to remove user group"
 msgstr "Falha ao remover grupo de usuários"
 
 #: rhodecode/templates/admin/repos/repos.html:5
 msgid "Repositories administration"
 msgstr "Administração de repositórios"
 
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:73
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:86
 msgid "apply to children"
 msgstr ""
 
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:74
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87
 msgid ""
-"Set or revoke permission to all children of that group, including "
-"repositories and other groups"
+"Set or revoke permission to all children of that group, including non-"
+"private repositories and other groups"
+msgstr ""
+
+#: rhodecode/templates/admin/repos_groups/repos_groups.html:4
+#, python-format
+msgid "%s Group Dashboard"
 msgstr ""
 
 #: rhodecode/templates/admin/repos_groups/repos_groups.html:9
-#: rhodecode/templates/base/base.html:122
-#: rhodecode/templates/base/base.html:313
-#: rhodecode/templates/base/base.html:315
-#: rhodecode/templates/base/base.html:317
-#: rhodecode/templates/bookmarks/bookmarks.html:11
-#: rhodecode/templates/branches/branches.html:10
-#: rhodecode/templates/changelog/changelog.html:10
-#: rhodecode/templates/changeset/changeset.html:10
-#: rhodecode/templates/changeset/changeset_range.html:9
-#: rhodecode/templates/compare/compare_diff.html:9
-#: rhodecode/templates/files/file_diff.html:8
-#: rhodecode/templates/files/files.html:8
-#: rhodecode/templates/files/files_add.html:15
-#: rhodecode/templates/files/files_edit.html:15
-#: rhodecode/templates/followers/followers.html:9
-#: rhodecode/templates/forks/fork.html:9 rhodecode/templates/forks/forks.html:9
-#: rhodecode/templates/pullrequests/pullrequest.html:8
-#: rhodecode/templates/pullrequests/pullrequest_show.html:8
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8
-#: rhodecode/templates/settings/repo_settings.html:9
-#: rhodecode/templates/shortlog/shortlog.html:10
-#: rhodecode/templates/summary/summary.html:8
-#: rhodecode/templates/tags/tags.html:11
 msgid "Home"
 msgstr "Início"
 
@@ -2391,80 +2664,86 @@
 msgstr "com"
 
 #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:5
-msgid "Add repos group"
-msgstr "Adicionar grupo de repositórios"
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:10
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:10
-msgid "Repos groups"
+#, fuzzy
+msgid "Add repository group"
 msgstr "Grupo de repositórios"
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:12
-msgid "add new repos group"
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:11
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:11
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:16
+#: rhodecode/templates/base/base.html:70 rhodecode/templates/base/base.html:82
+#, fuzzy
+msgid "Repository groups"
+msgstr "Grupo de repositórios"
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:13
+#, fuzzy
+msgid "Add new repository group"
 msgstr "adicionar novo grupo de repositórios"
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:50
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:50
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:51
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:56
 msgid "Group parent"
 msgstr "Progenitor do grupo"
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:58
-#: rhodecode/templates/admin/users/user_add.html:94
-#: rhodecode/templates/admin/users_groups/users_group_add.html:49
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:90
-#: rhodecode/templates/pullrequests/pullrequest_show.html:131
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:59
 msgid "save"
 msgstr "salvar"
 
 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:5
-msgid "Edit repos group"
-msgstr "Editar grupo de repositórios"
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:12
-msgid "edit repos group"
+#, fuzzy
+msgid "Edit repository group"
+msgstr "editar grupo de repositórios"
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:13
+#, fuzzy, python-format
+msgid "Edit repository group %s"
 msgstr "editar grupo de repositórios"
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:70
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:27
+#, fuzzy
+msgid "Add child group"
+msgstr "Adicionar novo grupo de usuários"
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:76
 msgid ""
 "Enable lock-by-pulling on group. This option will be applied to all other"
 " groups and repositories inside"
 msgstr ""
 
 #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:5
-msgid "Repositories groups administration"
+#, fuzzy
+msgid "Repository groups administration"
 msgstr "Administração de grupos de repositórios"
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:22
-msgid "ADD NEW GROUP"
-msgstr "ADICIONAR NOVO GRUPO"
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:35
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:45
 msgid "Number of toplevel repositories"
 msgstr "Número de repositórios de nível superior"
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:36
-#: rhodecode/templates/admin/users/users.html:87
-#: rhodecode/templates/admin/users_groups/users_groups.html:35
-msgid "action"
-msgstr "ação"
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55
-#: rhodecode/templates/admin/users/user_edit.html:259
-#: rhodecode/templates/admin/users_groups/users_groups.html:44
-#: rhodecode/templates/data_table/_dt_elements.html:7
-#: rhodecode/templates/data_table/_dt_elements.html:121
-msgid "delete"
-msgstr "excluir"
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:64
+#, fuzzy
+msgid "Edit"
+msgstr "editar"
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:65
+#: rhodecode/templates/base/perms_summary.html:29
+#: rhodecode/templates/base/perms_summary.html:48
+#: rhodecode/templates/base/perms_summary.html:50
+#: rhodecode/templates/data_table/_dt_elements.html:116
+#: rhodecode/templates/data_table/_dt_elements.html:117
+msgid "edit"
+msgstr "editar"
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:70
 #, fuzzy, python-format
 msgid "Confirm to delete this group: %s with %s repository"
 msgid_plural "Confirm to delete this group: %s with %s repositories"
 msgstr[0] "Confirma excluir este repositório"
 msgstr[1] ""
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:63
-msgid "There are no repositories groups yet"
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:78
+#, fuzzy
+msgid "There are no repository groups yet"
 msgstr "Ainda não há grupos de repositórios"
 
 #: rhodecode/templates/admin/settings/hooks.html:5
@@ -2472,12 +2751,6 @@
 msgid "Settings administration"
 msgstr "Administração de configurações"
 
-#: rhodecode/templates/admin/settings/hooks.html:9
-#: rhodecode/templates/admin/settings/settings.html:9
-#: rhodecode/templates/settings/repo_settings.html:13
-msgid "Settings"
-msgstr "Configurações"
-
 #: rhodecode/templates/admin/settings/hooks.html:24
 msgid "Built in hooks - read only"
 msgstr "Ganchos pré-definidos - somente leitura"
@@ -2494,15 +2767,16 @@
 msgid "Failed to remove hook"
 msgstr "Falha ao remover gancho"
 
-#: rhodecode/templates/admin/settings/settings.html:24
+#: rhodecode/templates/admin/settings/settings.html:26
 msgid "Remap and rescan repositories"
 msgstr "Remapear e varrer novamente repositórios"
 
-#: rhodecode/templates/admin/settings/settings.html:32
-msgid "rescan option"
+#: rhodecode/templates/admin/settings/settings.html:34
+#, fuzzy
+msgid "Rescan option"
 msgstr "opção de varredura"
 
-#: rhodecode/templates/admin/settings/settings.html:38
+#: rhodecode/templates/admin/settings/settings.html:40
 msgid ""
 "In case a repository was deleted from filesystem and there are leftovers "
 "in the database check this option to scan obsolete data in database and "
@@ -2512,163 +2786,172 @@
 "restos no banco de dados, marque esta opção para varrer dados obsoletos "
 "no banco e removê-los."
 
-#: rhodecode/templates/admin/settings/settings.html:39
-msgid "destroy old data"
+#: rhodecode/templates/admin/settings/settings.html:41
+#, fuzzy
+msgid "Destroy old data"
 msgstr "destruir dados antigos"
 
-#: rhodecode/templates/admin/settings/settings.html:41
+#: rhodecode/templates/admin/settings/settings.html:43
 msgid ""
 "Rescan repositories location for new repositories. Also deletes obsolete "
 "if `destroy` flag is checked "
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:46
+#: rhodecode/templates/admin/settings/settings.html:48
 msgid "Rescan repositories"
 msgstr "Varrer repositórios"
 
-#: rhodecode/templates/admin/settings/settings.html:52
+#: rhodecode/templates/admin/settings/settings.html:54
 msgid "Whoosh indexing"
 msgstr "Indexação do Whoosh"
 
-#: rhodecode/templates/admin/settings/settings.html:60
-msgid "index build option"
+#: rhodecode/templates/admin/settings/settings.html:62
+#, fuzzy
+msgid "Index build option"
 msgstr "opção de construção de índice"
 
-#: rhodecode/templates/admin/settings/settings.html:65
-msgid "build from scratch"
+#: rhodecode/templates/admin/settings/settings.html:67
+#, fuzzy
+msgid "Build from scratch"
 msgstr "construir do início"
 
-#: rhodecode/templates/admin/settings/settings.html:71
+#: rhodecode/templates/admin/settings/settings.html:73
 msgid "Reindex"
 msgstr "Reindexar"
 
-#: rhodecode/templates/admin/settings/settings.html:77
+#: rhodecode/templates/admin/settings/settings.html:79
 msgid "Global application settings"
 msgstr "Configurações globais da aplicação"
 
-#: rhodecode/templates/admin/settings/settings.html:86
-msgid "Application name"
-msgstr "Nome da aplicação"
-
-#: rhodecode/templates/admin/settings/settings.html:95
-msgid "Realm text"
-msgstr "Texto de esfera"
-
-#: rhodecode/templates/admin/settings/settings.html:104
-msgid "GA code"
-msgstr "Código GA"
-
-#: rhodecode/templates/admin/settings/settings.html:112
-#: rhodecode/templates/admin/settings/settings.html:178
-#: rhodecode/templates/admin/settings/settings.html:268
+#: rhodecode/templates/admin/settings/settings.html:88
+msgid "Site branding"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:97
+msgid "HTTP authentication realm"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:106
+msgid "Google Analytics code"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:114
+#: rhodecode/templates/admin/settings/settings.html:186
+#: rhodecode/templates/admin/settings/settings.html:277
 msgid "Save settings"
 msgstr "Salvar configurações"
 
-#: rhodecode/templates/admin/settings/settings.html:119
+#: rhodecode/templates/admin/settings/settings.html:121
 #, fuzzy
 msgid "Visualisation settings"
 msgstr "Configurações globais da aplicação"
 
-#: rhodecode/templates/admin/settings/settings.html:127
+#: rhodecode/templates/admin/settings/settings.html:129
 #, fuzzy
 msgid "General"
 msgstr "habilitar"
 
-#: rhodecode/templates/admin/settings/settings.html:132
+#: rhodecode/templates/admin/settings/settings.html:134
 msgid "Use lightweight dashboard"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:139
+#: rhodecode/templates/admin/settings/settings.html:140
+#, fuzzy
+msgid "Use repository extra fields"
+msgstr "repositórios"
+
+#: rhodecode/templates/admin/settings/settings.html:147
 #, fuzzy
 msgid "Icons"
 msgstr "Opções"
 
-#: rhodecode/templates/admin/settings/settings.html:144
+#: rhodecode/templates/admin/settings/settings.html:152
 msgid "Show public repo icon on repositories"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:148
+#: rhodecode/templates/admin/settings/settings.html:156
 #, fuzzy
 msgid "Show private repo icon on repositories"
 msgstr "repositório privado"
 
-#: rhodecode/templates/admin/settings/settings.html:155
+#: rhodecode/templates/admin/settings/settings.html:163
 #, fuzzy
 msgid "Meta-Tagging"
 msgstr "configurações"
 
-#: rhodecode/templates/admin/settings/settings.html:160
+#: rhodecode/templates/admin/settings/settings.html:168
 msgid "Stylify recognised metatags:"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:187
+#: rhodecode/templates/admin/settings/settings.html:195
 #, fuzzy
 msgid "VCS settings"
 msgstr "configurações"
 
-#: rhodecode/templates/admin/settings/settings.html:196
+#: rhodecode/templates/admin/settings/settings.html:204
 msgid "Web"
 msgstr "Web"
 
-#: rhodecode/templates/admin/settings/settings.html:201
-#, fuzzy
-msgid "require ssl for vcs operations"
+#: rhodecode/templates/admin/settings/settings.html:209
+#, fuzzy
+msgid "Require SSL for vcs operations"
 msgstr "exigir ssl para realizar push"
 
-#: rhodecode/templates/admin/settings/settings.html:203
+#: rhodecode/templates/admin/settings/settings.html:211
 msgid ""
 "RhodeCode will require SSL for pushing or pulling. If SSL is missing it "
 "will return HTTP Error 406: Not Acceptable"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:209
+#: rhodecode/templates/admin/settings/settings.html:217
 msgid "Hooks"
 msgstr "Ganchos"
 
-#: rhodecode/templates/admin/settings/settings.html:214
-msgid "Update repository after push (hg update)"
-msgstr "Atualizar repositório após realizar push (hg update)"
-
-#: rhodecode/templates/admin/settings/settings.html:218
-msgid "Show repository size after push"
-msgstr "Mostrar tamanho do repositório após o push"
-
 #: rhodecode/templates/admin/settings/settings.html:222
+msgid "Update repository after push (hg update)"
+msgstr "Atualizar repositório após realizar push (hg update)"
+
+#: rhodecode/templates/admin/settings/settings.html:226
+msgid "Show repository size after push"
+msgstr "Mostrar tamanho do repositório após o push"
+
+#: rhodecode/templates/admin/settings/settings.html:230
 msgid "Log user push commands"
 msgstr "Armazenar registro de comandos de push dos usuários"
 
-#: rhodecode/templates/admin/settings/settings.html:226
+#: rhodecode/templates/admin/settings/settings.html:234
 msgid "Log user pull commands"
 msgstr "Armazenar registro de comandos de pull dos usuários"
 
-#: rhodecode/templates/admin/settings/settings.html:230
-msgid "advanced setup"
+#: rhodecode/templates/admin/settings/settings.html:238
+#, fuzzy
+msgid "Advanced setup"
 msgstr "confirguações avançadas"
 
-#: rhodecode/templates/admin/settings/settings.html:235
+#: rhodecode/templates/admin/settings/settings.html:243
 #, fuzzy
 msgid "Mercurial Extensions"
 msgstr "Repositório Mercurial"
 
-#: rhodecode/templates/admin/settings/settings.html:240
-msgid "largefiles extensions"
+#: rhodecode/templates/admin/settings/settings.html:248
+msgid "Enable largefiles extension"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:244
-msgid "hgsubversion extensions"
+#: rhodecode/templates/admin/settings/settings.html:252
+msgid "Enable hgsubversion extension"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:246
+#: rhodecode/templates/admin/settings/settings.html:254
 msgid ""
-"Requires hgsubversion library installed. Allows clonning from svn remote "
+"Requires hgsubversion library installed. Allows cloning from svn remote "
 "locations"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:256
+#: rhodecode/templates/admin/settings/settings.html:264
 msgid "Repositories location"
 msgstr "Localização dos repositórios"
 
-#: rhodecode/templates/admin/settings/settings.html:261
+#: rhodecode/templates/admin/settings/settings.html:269
 msgid ""
 "This a crucial application setting. If you are really sure you need to "
 "change this, you must restart application in order to make this setting "
@@ -2678,36 +2961,38 @@
 "certeza de que quer mudar isto, você precisa reiniciar a aplicação para "
 "que essa configuração tenha efeito. Clique este rótulo para destravar."
 
-#: rhodecode/templates/admin/settings/settings.html:262
-#: rhodecode/templates/base/base.html:221
-msgid "unlock"
+#: rhodecode/templates/admin/settings/settings.html:270
+#: rhodecode/templates/base/base.html:131
+#, fuzzy
+msgid "Unlock"
 msgstr "destravar"
 
-#: rhodecode/templates/admin/settings/settings.html:263
+#: rhodecode/templates/admin/settings/settings.html:272
 msgid ""
 "Location where repositories are stored. After changing this value a "
 "restart, and rescan is required"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:283
+#: rhodecode/templates/admin/settings/settings.html:292
 msgid "Test Email"
 msgstr "Testar E-mail"
 
-#: rhodecode/templates/admin/settings/settings.html:291
+#: rhodecode/templates/admin/settings/settings.html:300
 msgid "Email to"
 msgstr "E-mail para"
 
-#: rhodecode/templates/admin/settings/settings.html:299
+#: rhodecode/templates/admin/settings/settings.html:308
 msgid "Send"
 msgstr "Enviar"
 
-#: rhodecode/templates/admin/settings/settings.html:305
+#: rhodecode/templates/admin/settings/settings.html:314
 msgid "System Info and Packages"
 msgstr "Informações de Sistema e Pacotes"
 
-#: rhodecode/templates/admin/settings/settings.html:308
-msgid "show"
-msgstr "mostrar"
+#: rhodecode/templates/admin/settings/settings.html:317
+#: rhodecode/templates/changelog/changelog.html:42
+msgid "Show"
+msgstr "Mostrar"
 
 #: rhodecode/templates/admin/users/user_add.html:5
 msgid "Add user"
@@ -2715,11 +3000,14 @@
 
 #: rhodecode/templates/admin/users/user_add.html:10
 #: rhodecode/templates/admin/users/user_edit.html:11
+#: rhodecode/templates/base/base.html:71
 msgid "Users"
 msgstr "Usuários"
 
 #: rhodecode/templates/admin/users/user_add.html:12
-msgid "add new user"
+#: rhodecode/templates/admin/users/users.html:23
+#, fuzzy
+msgid "Add new user"
 msgstr "adicionar novo usuário"
 
 #: rhodecode/templates/admin/users/user_add.html:50
@@ -2730,6 +3018,12 @@
 msgid "Edit user"
 msgstr "Editar usuário"
 
+#: rhodecode/templates/admin/users/user_edit.html:13
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:13
+#, fuzzy, python-format
+msgid "Edit %s"
+msgstr "editar"
+
 #: rhodecode/templates/admin/users/user_edit.html:34
 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:10
 msgid "Change your avatar at"
@@ -2745,27 +3039,32 @@
 msgid "API key"
 msgstr "Chave de API"
 
-#: rhodecode/templates/admin/users/user_edit.html:63
+#: rhodecode/templates/admin/users/user_edit.html:50
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:25
+msgid "Current IP"
+msgstr ""
+
+#: rhodecode/templates/admin/users/user_edit.html:70
 msgid "LDAP DN"
 msgstr "DN LDAP"
 
-#: rhodecode/templates/admin/users/user_edit.html:72
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:35
+#: rhodecode/templates/admin/users/user_edit.html:79
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44
 msgid "New password"
 msgstr "Nova senha"
 
-#: rhodecode/templates/admin/users/user_edit.html:81
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44
+#: rhodecode/templates/admin/users/user_edit.html:88
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:53
 msgid "New password confirmation"
 msgstr "Confirmação de nova senha"
 
-#: rhodecode/templates/admin/users/user_edit.html:151
+#: rhodecode/templates/admin/users/user_edit.html:158
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:108
 #, fuzzy
 msgid "Inherit default permissions"
 msgstr "Permissões padrão"
 
-#: rhodecode/templates/admin/users/user_edit.html:156
+#: rhodecode/templates/admin/users/user_edit.html:163
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:113
 #, python-format
 msgid ""
@@ -2773,59 +3072,34 @@
 "options does not have any action"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit.html:162
+#: rhodecode/templates/admin/users/user_edit.html:169
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:119
 msgid "Create repositories"
 msgstr "Criar repositórios"
 
-#: rhodecode/templates/admin/users/user_edit.html:170
+#: rhodecode/templates/admin/users/user_edit.html:177
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:127
 #, fuzzy
 msgid "Fork repositories"
 msgstr "repositórios"
 
-#: rhodecode/templates/admin/users/user_edit.html:190
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:22
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:39
-#, fuzzy
-msgid "Nothing here yet"
-msgstr "Ainda não há notificações aqui"
-
-#: rhodecode/templates/admin/users/user_edit.html:197
-#: rhodecode/templates/admin/users/user_edit_my_account.html:60
-#: rhodecode/templates/admin/users/user_edit_my_account.html:217
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:185
-msgid "Permission"
-msgstr "Permissão"
-
-#: rhodecode/templates/admin/users/user_edit.html:198
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:186
-#, fuzzy
-msgid "Edit Permission"
-msgstr "Permissão de repositório"
-
-#: rhodecode/templates/admin/users/user_edit.html:247
+#: rhodecode/templates/admin/users/user_edit.html:200
 #, fuzzy
 msgid "Email addresses"
 msgstr "Endereço de e-mail"
 
-#: rhodecode/templates/admin/users/user_edit.html:260
+#: rhodecode/templates/admin/users/user_edit.html:213
 #, fuzzy, python-format
 msgid "Confirm to delete this email: %s"
 msgstr "Confirma excluir este usuário: %s"
 
-#: rhodecode/templates/admin/users/user_edit.html:274
+#: rhodecode/templates/admin/users/user_edit.html:227
 #, fuzzy
 msgid "New email address"
 msgstr "Endereço de e-mail"
 
-#: rhodecode/templates/admin/users/user_edit.html:281
-#, fuzzy
-msgid "Add"
-msgstr "adicionar"
-
 #: rhodecode/templates/admin/users/user_edit_my_account.html:5
-#: rhodecode/templates/base/base.html:124
+#: rhodecode/templates/base/base.html:242
 msgid "My account"
 msgstr "Minha conta"
 
@@ -2838,7 +3112,7 @@
 msgstr "Minhas permissões"
 
 #: rhodecode/templates/admin/users/user_edit_my_account.html:38
-#: rhodecode/templates/journal/journal.html:49
+#: rhodecode/templates/journal/journal.html:54
 msgid "My repos"
 msgstr "Meus repositórios"
 
@@ -2847,135 +3121,109 @@
 msgid "My pull requests"
 msgstr "comentado no commit"
 
-#: rhodecode/templates/admin/users/user_edit_my_account.html:45
-#, fuzzy
-msgid "Add repo"
-msgstr "adicionar novo"
-
 #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:2
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:4
+#, fuzzy
+msgid "Show closed pull requests"
+msgstr "repositório [criado]"
+
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:6
 msgid "Opened by me"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:10
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:15
 #, python-format
 msgid "Pull request #%s opened on %s"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:15
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:17
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:45
+#: rhodecode/templates/pullrequests/pullrequest_data.html:7
+#: rhodecode/templates/pullrequests/pullrequest_show.html:27
+#: rhodecode/templates/pullrequests/pullrequest_show.html:42
+msgid "Closed"
+msgstr ""
+
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:23
 #, fuzzy
 msgid "Confirm to delete this pull request"
 msgstr "Confirma excluir este repositório"
 
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:26
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:30
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:51
+#, fuzzy
+msgid "Nothing here yet"
+msgstr "Ainda não há notificações aqui"
+
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:34
 msgid "I participate in"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:33
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:30
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:42
+#: rhodecode/templates/pullrequests/pullrequest_data.html:11
 #, python-format
 msgid "Pull request #%s opened by %s on %s"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:7
-#: rhodecode/templates/bookmarks/bookmarks.html:40
-#: rhodecode/templates/bookmarks/bookmarks_data.html:9
-#: rhodecode/templates/branches/branches.html:54
-#: rhodecode/templates/branches/branches_data.html:9
-#: rhodecode/templates/journal/journal_page_repos.html:8
-#: rhodecode/templates/tags/tags.html:55
-#: rhodecode/templates/tags/tags_data.html:9
-msgid "Revision"
-msgstr "Revisão"
-
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:28
-#: rhodecode/templates/journal/journal_page_repos.html:29
-msgid "private"
-msgstr "privado"
-
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:31
-#: rhodecode/templates/data_table/_dt_elements.html:7
-#: rhodecode/templates/journal/journal_page_repos.html:32
-#, python-format
-msgid "Confirm to delete this repository: %s"
-msgstr "Confirma excluir esse repositório: %s"
-
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:38
-#: rhodecode/templates/journal/journal_page_repos.html:42
-msgid "No repositories yet"
-msgstr "Ainda não há repositórios"
-
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:40
-#: rhodecode/templates/journal/journal_page_repos.html:44
-msgid "create one now"
-msgstr "criar um agora"
-
 #: rhodecode/templates/admin/users/users.html:5
 msgid "Users administration"
 msgstr "Administração de usuários"
 
 #: rhodecode/templates/admin/users/users.html:9
-#: rhodecode/templates/base/base.html:235
 msgid "users"
 msgstr "usuários"
 
-#: rhodecode/templates/admin/users/users.html:23
-msgid "ADD NEW USER"
-msgstr "ADICIONAR NOVO USUÁRIO"
-
-#: rhodecode/templates/admin/users/users.html:77
-msgid "username"
-msgstr "nome de usuário"
-
 #: rhodecode/templates/admin/users/users.html:80
 #, fuzzy
-msgid "firstname"
+msgid "Firstname"
 msgstr "Primeiro Nome"
 
 #: rhodecode/templates/admin/users/users.html:81
-msgid "lastname"
+#, fuzzy
+msgid "Lastname"
 msgstr "sobrenome"
 
 #: rhodecode/templates/admin/users/users.html:82
-msgid "last login"
+#, fuzzy
+msgid "Last login"
 msgstr "último login"
 
-#: rhodecode/templates/admin/users/users.html:84
-#: rhodecode/templates/admin/users_groups/users_groups.html:34
-msgid "active"
-msgstr "ativo"
-
-#: rhodecode/templates/admin/users/users.html:86
-#: rhodecode/templates/base/base.html:238
-msgid "ldap"
-msgstr "ldap"
-
 #: rhodecode/templates/admin/users_groups/users_group_add.html:5
-msgid "Add users group"
+#, fuzzy
+msgid "Add user group"
 msgstr "Adicionar grupo de usuários"
 
 #: rhodecode/templates/admin/users_groups/users_group_add.html:10
-#: rhodecode/templates/admin/users_groups/users_groups.html:9
-msgid "Users groups"
-msgstr "Grupos de usuários"
+#: rhodecode/templates/admin/users_groups/users_groups.html:11
+#: rhodecode/templates/base/base.html:72
+#, fuzzy
+msgid "User groups"
+msgstr "grupos de usuários"
 
 #: rhodecode/templates/admin/users_groups/users_group_add.html:12
-msgid "add new users group"
+#: rhodecode/templates/admin/users_groups/users_groups.html:25
+#, fuzzy
+msgid "Add new user group"
 msgstr "Adicionar novo grupo de usuários"
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:5
-msgid "Edit users group"
+#, fuzzy
+msgid "Edit user group"
 msgstr "Editar grupo de usuários"
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:11
-msgid "UsersGroups"
-msgstr "Grupos de Usuários"
+#, fuzzy
+msgid "UserGroups"
+msgstr "grupos de usuários"
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:50
+#: rhodecode/templates/admin/users_groups/users_groups.html:35
 msgid "Members"
 msgstr "Membros"
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:58
-msgid "Choosen group members"
+#, fuzzy
+msgid "Chosen group members"
 msgstr "Membros escolhidos do grupo"
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:61
@@ -2990,270 +3238,283 @@
 msgid "Add all elements"
 msgstr "Adicionar todos os elementos"
 
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:146
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:150
 msgid "Group members"
 msgstr "Membros do grupo"
 
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:163
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:167
 #, fuzzy
 msgid "No members yet"
 msgstr "membros"
 
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:171
-#, fuzzy
-msgid "Permissions defined for this group"
-msgstr "Administração de permissões"
-
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:178
-#, fuzzy
-msgid "No permissions set yet"
-msgstr "Copiar permissões"
-
 #: rhodecode/templates/admin/users_groups/users_groups.html:5
-msgid "Users groups administration"
+#, fuzzy
+msgid "User groups administration"
 msgstr "Administração de grupos de usuários"
 
-#: rhodecode/templates/admin/users_groups/users_groups.html:23
-msgid "ADD NEW USER GROUP"
-msgstr "ADICIONAR NOVO GRUPO DE USUÁRIOS"
-
-#: rhodecode/templates/admin/users_groups/users_groups.html:32
-msgid "group name"
-msgstr "nome do grupo"
-
-#: rhodecode/templates/admin/users_groups/users_groups.html:33
-#: rhodecode/templates/base/root.html:46
-msgid "members"
-msgstr "membros"
-
-#: rhodecode/templates/admin/users_groups/users_groups.html:45
-#, python-format
-msgid "Confirm to delete this users group: %s"
+#: rhodecode/templates/admin/users_groups/users_groups.html:47
+#, fuzzy, python-format
+msgid "Confirm to delete this user group: %s"
 msgstr "Confirme para excluir este grupo de usuários: %s"
 
-#: rhodecode/templates/base/base.html:41
+#: rhodecode/templates/base/base.html:42
 msgid "Submit a bug"
 msgstr "Encaminhe um bug"
 
-#: rhodecode/templates/base/base.html:77
-msgid "Login to your account"
-msgstr "Entrar com sua conta"
-
-#: rhodecode/templates/base/base.html:100
-msgid "Forgot password ?"
-msgstr "Esqueceu a senha ?"
-
-#: rhodecode/templates/base/base.html:107
-msgid "Log In"
-msgstr "Entrar"
+#: rhodecode/templates/base/base.html:108
+#: rhodecode/templates/data_table/_dt_elements.html:9
+#: rhodecode/templates/data_table/_dt_elements.html:11
+#: rhodecode/templates/data_table/_dt_elements.html:13
+#: rhodecode/templates/pullrequests/pullrequest_show.html:81
+#: rhodecode/templates/summary/summary.html:8
+msgid "Summary"
+msgstr "Sumário"
+
+#: rhodecode/templates/base/base.html:109
+#: rhodecode/templates/changelog/changelog.html:11
+#: rhodecode/templates/data_table/_dt_elements.html:17
+#: rhodecode/templates/data_table/_dt_elements.html:19
+#: rhodecode/templates/data_table/_dt_elements.html:21
+msgid "Changelog"
+msgstr "Registro de alterações"
+
+#: rhodecode/templates/base/base.html:110
+#: rhodecode/templates/data_table/_dt_elements.html:25
+#: rhodecode/templates/data_table/_dt_elements.html:27
+#: rhodecode/templates/data_table/_dt_elements.html:29
+#: rhodecode/templates/files/files.html:12
+msgid "Files"
+msgstr "Arquivos"
+
+#: rhodecode/templates/base/base.html:112
+#, fuzzy
+msgid "Switch To"
+msgstr "Trocar para"
+
+#: rhodecode/templates/base/base.html:114
+#: rhodecode/templates/base/base.html:267
+msgid "loading..."
+msgstr "carregando..."
 
 #: rhodecode/templates/base/base.html:118
-msgid "Inbox"
-msgstr "Caixa de Entrada"
-
-#: rhodecode/templates/base/base.html:123
-#: rhodecode/templates/base/base.html:322
-#: rhodecode/templates/base/base.html:324
-#: rhodecode/templates/base/base.html:326
-#: rhodecode/templates/journal/journal.html:4
-#: rhodecode/templates/journal/public_journal.html:4
-msgid "Journal"
-msgstr "Diário"
-
-#: rhodecode/templates/base/base.html:125
-msgid "Log Out"
-msgstr "Sair"
-
-#: rhodecode/templates/base/base.html:144
-msgid "Switch repository"
-msgstr "Trocar repositório"
-
-#: rhodecode/templates/base/base.html:146
-msgid "Products"
-msgstr "Produtos"
-
-#: rhodecode/templates/base/base.html:152
-#: rhodecode/templates/base/base.html:182 rhodecode/templates/base/root.html:47
-msgid "loading..."
-msgstr "carregando..."
-
-#: rhodecode/templates/base/base.html:158
-#: rhodecode/templates/base/base.html:160
-#: rhodecode/templates/base/base.html:162
-#: rhodecode/templates/data_table/_dt_elements.html:15
-#: rhodecode/templates/data_table/_dt_elements.html:17
-#: rhodecode/templates/data_table/_dt_elements.html:19
-msgid "Summary"
-msgstr "Sumário"
-
-#: rhodecode/templates/base/base.html:166
-#: rhodecode/templates/base/base.html:168
-#: rhodecode/templates/base/base.html:170
-#: rhodecode/templates/changelog/changelog.html:15
-#: rhodecode/templates/data_table/_dt_elements.html:23
-#: rhodecode/templates/data_table/_dt_elements.html:25
-#: rhodecode/templates/data_table/_dt_elements.html:27
-msgid "Changelog"
-msgstr "Registro de alterações"
-
-#: rhodecode/templates/base/base.html:175
-#: rhodecode/templates/base/base.html:177
-#: rhodecode/templates/base/base.html:179
-msgid "Switch to"
-msgstr "Trocar para"
-
-#: rhodecode/templates/base/base.html:186
-#: rhodecode/templates/base/base.html:188
-#: rhodecode/templates/base/base.html:190
-#: rhodecode/templates/data_table/_dt_elements.html:31
-#: rhodecode/templates/data_table/_dt_elements.html:33
-#: rhodecode/templates/data_table/_dt_elements.html:35
-msgid "Files"
-msgstr "Arquivos"
-
-#: rhodecode/templates/base/base.html:195
-#: rhodecode/templates/base/base.html:199
 msgid "Options"
 msgstr "Opções"
 
-#: rhodecode/templates/base/base.html:204
-#: rhodecode/templates/base/base.html:206
-#, fuzzy
-msgid "repository settings"
-msgstr "Criação de repositório"
-
-#: rhodecode/templates/base/base.html:210
-#: rhodecode/templates/data_table/_dt_elements.html:80
-#: rhodecode/templates/forks/fork.html:13
-msgid "fork"
-msgstr "bifurcação"
-
-#: rhodecode/templates/base/base.html:212 rhodecode/templates/base/root.html:50
-#: rhodecode/templates/changelog/changelog.html:43
-msgid "Open new pull request"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:215
+#: rhodecode/templates/base/base.html:124
 #: rhodecode/templates/forks/forks_data.html:21
 #, fuzzy
 msgid "Compare fork"
 msgstr "comparar exibir"
 
-#: rhodecode/templates/base/base.html:217
-msgid "search"
-msgstr "pesquisar"
-
-#: rhodecode/templates/base/base.html:223
-#, fuzzy
-msgid "lock"
-msgstr "destravar"
-
-#: rhodecode/templates/base/base.html:234
-msgid "repositories groups"
-msgstr "grupos de repositórios"
-
-#: rhodecode/templates/base/base.html:236
-msgid "users groups"
-msgstr "grupos de usuários"
-
-#: rhodecode/templates/base/base.html:237
-msgid "permissions"
-msgstr "permissões"
-
-#: rhodecode/templates/base/base.html:239
-#, fuzzy
-msgid "defaults"
-msgstr "excluir"
-
-#: rhodecode/templates/base/base.html:240
-msgid "settings"
-msgstr "configurações"
-
-#: rhodecode/templates/base/base.html:251
-#: rhodecode/templates/base/base.html:253
-msgid "Followers"
-msgstr "Seguidores"
-
-#: rhodecode/templates/base/base.html:259
-#: rhodecode/templates/base/base.html:261
-msgid "Forks"
-msgstr "Bifurcações"
-
-#: rhodecode/templates/base/base.html:340
-#: rhodecode/templates/base/base.html:342
-#: rhodecode/templates/base/base.html:344
-#: rhodecode/templates/search/search.html:52
+#: rhodecode/templates/base/base.html:126
+msgid "Lightweight changelog"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:127
+#: rhodecode/templates/base/base.html:287
+#: rhodecode/templates/search/search.html:14
+#: rhodecode/templates/search/search.html:54
 msgid "Search"
 msgstr "Pesquisar"
 
-#: rhodecode/templates/base/root.html:42
-msgid "add another comment"
-msgstr "adicionar outro comentário"
+#: rhodecode/templates/base/base.html:133
+#, fuzzy
+msgid "Lock"
+msgstr "destravar"
+
+#: rhodecode/templates/base/base.html:141
+#, fuzzy
+msgid "Follow"
+msgstr "seguidores"
+
+#: rhodecode/templates/base/base.html:142
+#, fuzzy
+msgid "Unfollow"
+msgstr "seguidores"
+
+#: rhodecode/templates/base/base.html:145
+#: rhodecode/templates/data_table/_dt_elements.html:33
+#: rhodecode/templates/data_table/_dt_elements.html:35
+#: rhodecode/templates/data_table/_dt_elements.html:37
+#: rhodecode/templates/data_table/_dt_elements.html:74
+#: rhodecode/templates/forks/fork.html:9
+msgid "Fork"
+msgstr "Bifurcação"
+
+#: rhodecode/templates/base/base.html:147
+#, fuzzy
+msgid "Create Pull Request"
+msgstr "Criar novo arquivo"
+
+#: rhodecode/templates/base/base.html:153
+#, fuzzy
+msgid "Show Pull Requests"
+msgstr "comentado no commit"
+
+#: rhodecode/templates/base/base.html:153
+#, fuzzy
+msgid "Pull Requests"
+msgstr "comentado no commit"
+
+#: rhodecode/templates/base/base.html:190
+#, fuzzy
+msgid "Not logged in"
+msgstr "último login"
+
+#: rhodecode/templates/base/base.html:197
+msgid "Login to your account"
+msgstr "Entrar com sua conta"
+
+#: rhodecode/templates/base/base.html:220
+msgid "Forgot password ?"
+msgstr "Esqueceu a senha ?"
+
+#: rhodecode/templates/base/base.html:243
+msgid "Log Out"
+msgstr "Sair"
+
+#: rhodecode/templates/base/base.html:262
+msgid "Switch repository"
+msgstr "Trocar repositório"
+
+#: rhodecode/templates/base/base.html:274
+msgid "Show recent activity"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:275
+#: rhodecode/templates/journal/journal.html:4
+msgid "Journal"
+msgstr "Diário"
+
+#: rhodecode/templates/base/base.html:286
+#, fuzzy
+msgid "Search in repositories"
+msgstr "em todos os repositórios"
+
+#: rhodecode/templates/base/perms_summary.html:8
+#, fuzzy
+msgid "No permissions defined yet"
+msgstr "Copiar permissões"
+
+#: rhodecode/templates/base/perms_summary.html:15
+msgid "Permission"
+msgstr "Permissão"
+
+#: rhodecode/templates/base/perms_summary.html:16
+#, fuzzy
+msgid "Edit Permission"
+msgstr "Permissão de repositório"
 
 #: rhodecode/templates/base/root.html:43
-#: rhodecode/templates/journal/journal.html:83
-#: rhodecode/templates/summary/summary.html:57
-msgid "Stop following this repository"
-msgstr "Parar de seguir este repositório"
+#, fuzzy
+msgid "Add another comment"
+msgstr "adicionar outro comentário"
 
 #: rhodecode/templates/base/root.html:44
-#: rhodecode/templates/summary/summary.html:61
+#: rhodecode/templates/data_table/_dt_elements.html:140
+msgid "Stop following this repository"
+msgstr "Parar de seguir este repositório"
+
+#: rhodecode/templates/base/root.html:45
 msgid "Start following this repository"
 msgstr "Passar a seguir este repositório"
 
-#: rhodecode/templates/base/root.html:45
+#: rhodecode/templates/base/root.html:46
 msgid "Group"
 msgstr "Grupo"
 
+#: rhodecode/templates/base/root.html:47
+msgid "members"
+msgstr "membros"
+
 #: rhodecode/templates/base/root.html:48
-msgid "search truncated"
-msgstr "pesquisa truncada"
+#: rhodecode/templates/pullrequests/pullrequest.html:181
+#, fuzzy
+msgid "Loading ..."
+msgstr "carregando..."
 
 #: rhodecode/templates/base/root.html:49
-msgid "no matching files"
+#, fuzzy
+msgid "Search truncated"
+msgstr "pesquisa truncada"
+
+#: rhodecode/templates/base/root.html:50
+#, fuzzy
+msgid "No matching files"
 msgstr "nenhum arquivo corresponde"
 
 #: rhodecode/templates/base/root.html:51
-msgid "Open new pull request for selected changesets"
+#: rhodecode/templates/changelog/changelog.html:36
+msgid "Open new pull request"
 msgstr ""
 
 #: rhodecode/templates/base/root.html:52
-msgid "Show selected changes __S -> __E"
-msgstr "Mostrar alterações selecionadas __S -> __E"
+msgid "Open new pull request for selected changesets"
+msgstr ""
 
 #: rhodecode/templates/base/root.html:53
+#, fuzzy
+msgid "Show selected changesets __S -> __E"
+msgstr "Mostrar alterações selecionadas __S -> __E"
+
+#: rhodecode/templates/base/root.html:54
+#, fuzzy
+msgid "Show selected changeset __S"
+msgstr "Mostrar alterações selecionadas __S -> __E"
+
+#: rhodecode/templates/base/root.html:55
 msgid "Selection link"
 msgstr "Link da seleção"
 
+#: rhodecode/templates/base/root.html:56
+#: rhodecode/templates/changeset/diff_block.html:8
+#, fuzzy
+msgid "Collapse diff"
+msgstr "Diff do arquivo"
+
+#: rhodecode/templates/base/root.html:57
+#, fuzzy
+msgid "Expand diff"
+msgstr "diff bruto"
+
 #: rhodecode/templates/bookmarks/bookmarks.html:5
 #, fuzzy, python-format
 msgid "%s Bookmarks"
 msgstr "marcadores"
 
-#: rhodecode/templates/bookmarks/bookmarks.html:39
+#: rhodecode/templates/bookmarks/bookmarks.html:37
 #: rhodecode/templates/bookmarks/bookmarks_data.html:8
-#: rhodecode/templates/branches/branches.html:53
+#: rhodecode/templates/branches/branches.html:50
 #: rhodecode/templates/branches/branches_data.html:8
-#: rhodecode/templates/tags/tags.html:54
+#: rhodecode/templates/shortlog/shortlog_data.html:8
+#: rhodecode/templates/tags/tags.html:51
 #: rhodecode/templates/tags/tags_data.html:8
 msgid "Author"
 msgstr "Autor"
 
+#: rhodecode/templates/bookmarks/bookmarks.html:38
+#: rhodecode/templates/bookmarks/bookmarks_data.html:9
+#: rhodecode/templates/branches/branches.html:51
+#: rhodecode/templates/branches/branches_data.html:9
+#: rhodecode/templates/shortlog/shortlog_data.html:5
+#: rhodecode/templates/tags/tags.html:52
+#: rhodecode/templates/tags/tags_data.html:9
+msgid "Revision"
+msgstr "Revisão"
+
 #: rhodecode/templates/branches/branches.html:5
 #, fuzzy, python-format
 msgid "%s Branches"
 msgstr "ramos"
 
-#: rhodecode/templates/branches/branches.html:29
+#: rhodecode/templates/branches/branches.html:26
 #, fuzzy
 msgid "Compare branches"
 msgstr "ramos"
 
-#: rhodecode/templates/branches/branches.html:56
+#: rhodecode/templates/branches/branches.html:53
 #: rhodecode/templates/branches/branches_data.html:10
-#: rhodecode/templates/compare/compare_diff.html:5
-#: rhodecode/templates/compare/compare_diff.html:13
-#: rhodecode/templates/tags/tags.html:57
+#: rhodecode/templates/tags/tags.html:54
 #: rhodecode/templates/tags/tags_data.html:10
 #, fuzzy
 msgid "Compare"
@@ -3264,118 +3525,85 @@
 msgid "%s Changelog"
 msgstr "Registro de alterações"
 
-#: rhodecode/templates/changelog/changelog.html:15
+#: rhodecode/templates/changelog/changelog.html:11
 #, python-format
 msgid "showing %d out of %d revision"
 msgid_plural "showing %d out of %d revisions"
 msgstr[0] "mostrando %d de %d revisão"
 msgstr[1] "mostrando %d de %d revisões"
 
-#: rhodecode/templates/changelog/changelog.html:37
+#: rhodecode/templates/changelog/changelog.html:30
 #, fuzzy
 msgid "Clear selection"
 msgstr "Configurações de busca"
 
-#: rhodecode/templates/changelog/changelog.html:40
+#: rhodecode/templates/changelog/changelog.html:33
 #: rhodecode/templates/forks/forks_data.html:19
-#, python-format
-msgid "compare fork with %s"
-msgstr ""
-
-#: rhodecode/templates/changelog/changelog.html:40
+#, fuzzy, python-format
+msgid "Compare fork with %s"
+msgstr "comparar exibir"
+
+#: rhodecode/templates/changelog/changelog.html:33
 #, fuzzy
 msgid "Compare fork with parent"
 msgstr "comparar exibir"
 
-#: rhodecode/templates/changelog/changelog.html:49
-msgid "Show"
-msgstr "Mostrar"
-
-#: rhodecode/templates/changelog/changelog.html:74
-#: rhodecode/templates/summary/summary.html:375
-msgid "show more"
+#: rhodecode/templates/changelog/changelog.html:76
+#: rhodecode/templates/summary/summary.html:404
+#, fuzzy
+msgid "Show more"
 msgstr "mostrar mais"
 
-#: rhodecode/templates/changelog/changelog.html:78
-msgid "Affected number of files, click to show more details"
-msgstr "Número de arquivos afetados, clique para mostrar mais detalhes"
-
-#: rhodecode/templates/changelog/changelog.html:91
-#: rhodecode/templates/changeset/changeset.html:65
-#: rhodecode/templates/changeset/changeset_file_comment.html:20
-#: rhodecode/templates/changeset/changeset_range.html:46
-#, fuzzy
-msgid "Changeset status"
-msgstr "Conjuntos de mudanças"
-
-#: rhodecode/templates/changelog/changelog.html:94
-#: rhodecode/templates/shortlog/shortlog_data.html:20
-msgid "Click to open associated pull request"
-msgstr ""
-
-#: rhodecode/templates/changelog/changelog.html:104
-msgid "Parent"
-msgstr "Progenitor"
-
-#: rhodecode/templates/changelog/changelog.html:110
-#: rhodecode/templates/changeset/changeset.html:42
-msgid "No parents"
-msgstr "Sem progenitores"
-
-#: rhodecode/templates/changelog/changelog.html:115
+#: rhodecode/templates/changelog/changelog.html:89
+#: rhodecode/templates/changeset/changeset_range.html:86
+#, fuzzy, python-format
+msgid "Bookmark %s"
+msgstr "marcadores"
+
+#: rhodecode/templates/changelog/changelog.html:95
+#: rhodecode/templates/changeset/changeset.html:111
+#: rhodecode/templates/changeset/changeset_range.html:92
+#, fuzzy, python-format
+msgid "Tag %s"
+msgstr "etiquetas"
+
+#: rhodecode/templates/changelog/changelog.html:100
 #: rhodecode/templates/changeset/changeset.html:106
-#: rhodecode/templates/changeset/changeset_range.html:79
-msgid "merge"
-msgstr "mesclar"
-
-#: rhodecode/templates/changelog/changelog.html:118
-#: rhodecode/templates/changeset/changeset.html:109
-#: rhodecode/templates/changeset/changeset_range.html:82
-#: rhodecode/templates/files/files.html:29
-#: rhodecode/templates/files/files_add.html:33
-#: rhodecode/templates/files/files_edit.html:33
-#: rhodecode/templates/shortlog/shortlog_data.html:9
-msgid "branch"
-msgstr "ramo"
-
-#: rhodecode/templates/changelog/changelog.html:124
-#: rhodecode/templates/changeset/changeset_range.html:88
-msgid "bookmark"
-msgstr "marcador"
-
-#: rhodecode/templates/changelog/changelog.html:130
-#: rhodecode/templates/changeset/changeset.html:114
-#: rhodecode/templates/changeset/changeset_range.html:94
-msgid "tag"
-msgstr "etiqueta"
-
-#: rhodecode/templates/changelog/changelog.html:301
+#: rhodecode/templates/changeset/changeset_range.html:80
+#, fuzzy, python-format
+msgid "Branch %s"
+msgstr "ramos"
+
+#: rhodecode/templates/changelog/changelog.html:258
 msgid "There are no changes yet"
 msgstr "Ainda não há alteações"
 
 #: rhodecode/templates/changelog/changelog_details.html:4
-#: rhodecode/templates/changeset/changeset.html:94
-msgid "removed"
+#: rhodecode/templates/changeset/changeset.html:91
+#, fuzzy
+msgid "Removed"
 msgstr "removidos"
 
 #: rhodecode/templates/changelog/changelog_details.html:5
-#: rhodecode/templates/changeset/changeset.html:95
-msgid "changed"
+#: rhodecode/templates/changeset/changeset.html:92
+#, fuzzy
+msgid "Changed"
 msgstr "alterados"
 
 #: rhodecode/templates/changelog/changelog_details.html:6
-#: rhodecode/templates/changeset/changeset.html:96
-msgid "added"
+#: rhodecode/templates/changeset/changeset.html:93
+#, fuzzy
+msgid "Added"
 msgstr "adicionados"
 
 #: rhodecode/templates/changelog/changelog_details.html:8
 #: rhodecode/templates/changelog/changelog_details.html:9
 #: rhodecode/templates/changelog/changelog_details.html:10
-#: rhodecode/templates/changeset/changeset.html:98
-#: rhodecode/templates/changeset/changeset.html:99
-#: rhodecode/templates/changeset/changeset.html:100
-#, python-format
-msgid "affected %s files"
+#: rhodecode/templates/changeset/changeset.html:95
+#: rhodecode/templates/changeset/changeset.html:96
+#: rhodecode/templates/changeset/changeset.html:97
+#, fuzzy, python-format
+msgid "Affected %s files"
 msgstr "%s arquivos afetados"
 
 #: rhodecode/templates/changeset/changeset.html:6
@@ -3383,116 +3611,153 @@
 msgid "%s Changeset"
 msgstr "Conjunto de Mudanças"
 
-#: rhodecode/templates/changeset/changeset.html:14
-msgid "Changeset"
-msgstr "Conjunto de Mudanças"
-
-#: rhodecode/templates/changeset/changeset.html:52
+#: rhodecode/templates/changeset/changeset.html:39
+msgid "No parents"
+msgstr "Sem progenitores"
+
+#: rhodecode/templates/changeset/changeset.html:49
 msgid "No children"
 msgstr ""
 
-#: rhodecode/templates/changeset/changeset.html:70
-#: rhodecode/templates/changeset/diff_block.html:20
-msgid "raw diff"
-msgstr "diff bruto"
-
-#: rhodecode/templates/changeset/changeset.html:71
-#, fuzzy
-msgid "patch diff"
+#: rhodecode/templates/changeset/changeset.html:62
+#: rhodecode/templates/changeset/changeset_file_comment.html:20
+#: rhodecode/templates/changeset/changeset_range.html:44
+#, fuzzy
+msgid "Changeset status"
+msgstr "Conjuntos de mudanças"
+
+#: rhodecode/templates/changeset/changeset.html:67
+#: rhodecode/templates/changeset/diff_block.html:23
+#, fuzzy
+msgid "Raw diff"
 msgstr "diff bruto"
 
-#: rhodecode/templates/changeset/changeset.html:72
-#: rhodecode/templates/changeset/diff_block.html:21
-msgid "download diff"
+#: rhodecode/templates/changeset/changeset.html:68
+#, fuzzy
+msgid "Patch diff"
+msgstr "diff bruto"
+
+#: rhodecode/templates/changeset/changeset.html:69
+#: rhodecode/templates/changeset/diff_block.html:24
+#, fuzzy
+msgid "Download diff"
 msgstr "descarregar diff"
 
-#: rhodecode/templates/changeset/changeset.html:76
-#: rhodecode/templates/changeset/changeset_file_comment.html:82
+#: rhodecode/templates/changeset/changeset.html:73
+#: rhodecode/templates/changeset/changeset_file_comment.html:97
 #, python-format
 msgid "%d comment"
 msgid_plural "%d comments"
 msgstr[0] "%d comentário"
 msgstr[1] "%d comentários"
 
-#: rhodecode/templates/changeset/changeset.html:76
-#: rhodecode/templates/changeset/changeset_file_comment.html:82
+#: rhodecode/templates/changeset/changeset.html:73
+#: rhodecode/templates/changeset/changeset_file_comment.html:97
 #, python-format
 msgid "(%d inline)"
 msgid_plural "(%d inline)"
 msgstr[0] "(%d em linha)"
 msgstr[1] "(%d em linha)"
 
-#: rhodecode/templates/changeset/changeset.html:122
-#: rhodecode/templates/compare/compare_diff.html:44
-#: rhodecode/templates/pullrequests/pullrequest_show.html:76
+#: rhodecode/templates/changeset/changeset.html:103
+#: rhodecode/templates/changeset/changeset_range.html:77
+msgid "merge"
+msgstr "mesclar"
+
+#: rhodecode/templates/changeset/changeset.html:119
+#: rhodecode/templates/compare/compare_diff.html:40
+#: rhodecode/templates/pullrequests/pullrequest_show.html:113
 #, fuzzy, python-format
 msgid "%s file changed"
 msgid_plural "%s files changed"
 msgstr[0] "arquivo alterado"
 msgstr[1] ""
 
-#: rhodecode/templates/changeset/changeset.html:124
-#: rhodecode/templates/compare/compare_diff.html:46
-#: rhodecode/templates/pullrequests/pullrequest_show.html:78
+#: rhodecode/templates/changeset/changeset.html:121
+#: rhodecode/templates/compare/compare_diff.html:42
+#: rhodecode/templates/pullrequests/pullrequest_show.html:115
 #, fuzzy, python-format
 msgid "%s file changed with %s insertions and %s deletions"
 msgid_plural "%s files changed with %s insertions and %s deletions"
 msgstr[0] "%s arquivos afetados com %s inserções e %s exclusões"
 msgstr[1] ""
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:42
+#: rhodecode/templates/changeset/changeset.html:134
+#: rhodecode/templates/changeset/changeset.html:146
+#: rhodecode/templates/pullrequests/pullrequest_show.html:131
+#: rhodecode/templates/pullrequests/pullrequest_show.html:195
+msgid "Showing a huge diff might take some time and resources"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset.html:134
+#: rhodecode/templates/changeset/changeset.html:146
+#: rhodecode/templates/compare/compare_diff.html:58
+#: rhodecode/templates/compare/compare_diff.html:69
+#: rhodecode/templates/pullrequests/pullrequest_show.html:131
+#: rhodecode/templates/pullrequests/pullrequest_show.html:195
+#, fuzzy
+msgid "Show full diff"
+msgstr "Carregando lista de arquivos..."
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:30
+#, fuzzy, python-format
+msgid "Status change on pull request #%s"
+msgstr "Criar novo arquivo"
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:32
+#, fuzzy, python-format
+msgid "Comment on pull request #%s"
+msgstr "repositório [criado]"
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:57
 msgid "Submitting..."
 msgstr "Enviando..."
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:45
+#: rhodecode/templates/changeset/changeset_file_comment.html:60
 msgid "Commenting on line {1}."
 msgstr "Comentando a linha {1}."
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:46
-#: rhodecode/templates/changeset/changeset_file_comment.html:121
+#: rhodecode/templates/changeset/changeset_file_comment.html:61
+#: rhodecode/templates/changeset/changeset_file_comment.html:139
 #, python-format
 msgid "Comments parsed using %s syntax with %s support."
 msgstr "Comentários interpretados usando a sintaxe %s com suporte a %s."
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:48
-#: rhodecode/templates/changeset/changeset_file_comment.html:123
+#: rhodecode/templates/changeset/changeset_file_comment.html:63
+#: rhodecode/templates/changeset/changeset_file_comment.html:141
 msgid "Use @username inside this text to send notification to this RhodeCode user"
 msgstr ""
 "Use @nomedeusuário dentro desse texto para enviar notificação a este "
 "usuário do RhodeCode"
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:59
-#: rhodecode/templates/changeset/changeset_file_comment.html:143
+#: rhodecode/templates/changeset/changeset_file_comment.html:74
+#: rhodecode/templates/changeset/changeset_file_comment.html:161
 msgid "Comment"
 msgstr "Comentário"
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:60
-#: rhodecode/templates/changeset/changeset_file_comment.html:71
-msgid "Hide"
-msgstr "Ocultar"
-
-#: rhodecode/templates/changeset/changeset_file_comment.html:67
+#: rhodecode/templates/changeset/changeset_file_comment.html:75
+#, fuzzy
+msgid "Cancel"
+msgstr "alterados"
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:82
 msgid "You need to be logged in to comment."
 msgstr "Você precisa estar logado para comentar."
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:67
+#: rhodecode/templates/changeset/changeset_file_comment.html:82
 msgid "Login now"
 msgstr "Entrar agora"
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:118
-msgid "Leave a comment"
-msgstr "Deixar um comentário"
-
-#: rhodecode/templates/changeset/changeset_file_comment.html:125
-msgid "Check this to change current status of code-review for this changeset"
-msgstr ""
-
-#: rhodecode/templates/changeset/changeset_file_comment.html:125
-#, fuzzy
-msgid "change status"
+#: rhodecode/templates/changeset/changeset_file_comment.html:86
+msgid "Hide"
+msgstr "Ocultar"
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:143
+#, fuzzy
+msgid "Change status"
 msgstr "Conjuntos de mudanças"
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:145
+#: rhodecode/templates/changeset/changeset_file_comment.html:163
 msgid "Comment and close"
 msgstr ""
 
@@ -3501,122 +3766,147 @@
 msgid "%s Changesets"
 msgstr "Conjuntos de mudanças"
 
-#: rhodecode/templates/changeset/changeset_range.html:29
-#: rhodecode/templates/compare/compare_diff.html:29
-msgid "Compare View"
-msgstr "Exibir Comparação"
-
-#: rhodecode/templates/changeset/changeset_range.html:29
-#, fuzzy
-msgid "Show combined compare"
-msgstr "mostrar comentários em linha"
-
-#: rhodecode/templates/changeset/changeset_range.html:54
+#: rhodecode/templates/changeset/changeset_range.html:52
 msgid "Files affected"
 msgstr "Arquivos afetados"
 
-#: rhodecode/templates/changeset/diff_block.html:19
-msgid "show full diff for this file"
+#: rhodecode/templates/changeset/diff_block.html:22
+msgid "Show full diff for this file"
 msgstr ""
 
-#: rhodecode/templates/changeset/diff_block.html:27
-msgid "show inline comments"
+#: rhodecode/templates/changeset/diff_block.html:30
+#, fuzzy
+msgid "Show inline comments"
 msgstr "mostrar comentários em linha"
 
-#: rhodecode/templates/compare/compare_cs.html:5
+#: rhodecode/templates/changeset/diff_block.html:55
+msgid "Show file at latest version in this repo"
+msgstr ""
+
+#: rhodecode/templates/changeset/diff_block.html:56
+msgid "Show file at initial version in this repo"
+msgstr ""
+
+#: rhodecode/templates/compare/compare_cs.html:4
 #, fuzzy
 msgid "No changesets"
 msgstr "Nenhum conjunto de alterações ainda."
 
-#: rhodecode/templates/compare/compare_diff.html:37
-#: rhodecode/templates/pullrequests/pullrequest_show.html:69
+#: rhodecode/templates/compare/compare_cs.html:32
+#, fuzzy
+msgid "Ancestor"
+msgstr "ramos"
+
+#: rhodecode/templates/compare/compare_diff.html:5
+#, fuzzy, python-format
+msgid "%s Compare"
+msgstr "comparar exibir"
+
+#: rhodecode/templates/compare/compare_diff.html:9
+#, fuzzy
+msgid "Compare revisions"
+msgstr "revisão anterior"
+
+#: rhodecode/templates/compare/compare_diff.html:33
+#: rhodecode/templates/pullrequests/pullrequest_show.html:106
 #, fuzzy, python-format
 msgid "Showing %s commit"
 msgid_plural "Showing %s commits"
 msgstr[0] "mostrar comentários em linha"
 msgstr[1] ""
 
-#: rhodecode/templates/compare/compare_diff.html:52
-#: rhodecode/templates/pullrequests/pullrequest_show.html:84
+#: rhodecode/templates/compare/compare_diff.html:48
+#: rhodecode/templates/pullrequests/pullrequest_show.html:121
 #, fuzzy
 msgid "No files"
 msgstr "arquivos"
 
-#: rhodecode/templates/data_table/_dt_elements.html:39
-#: rhodecode/templates/data_table/_dt_elements.html:41
-#: rhodecode/templates/data_table/_dt_elements.html:43
-msgid "Fork"
-msgstr "Bifurcação"
-
-#: rhodecode/templates/data_table/_dt_elements.html:60
-#: rhodecode/templates/journal/journal.html:89
-#: rhodecode/templates/summary/summary.html:77
+#: rhodecode/templates/compare/compare_diff.html:58
+#: rhodecode/templates/compare/compare_diff.html:69
+msgid "confirm to show potentially huge diff"
+msgstr ""
+
+#: rhodecode/templates/data_table/_dt_elements.html:54
+#: rhodecode/templates/summary/summary.html:69
 msgid "Mercurial repository"
 msgstr "Repositório Mercurial"
 
-#: rhodecode/templates/data_table/_dt_elements.html:62
-#: rhodecode/templates/journal/journal.html:91
-#: rhodecode/templates/summary/summary.html:80
+#: rhodecode/templates/data_table/_dt_elements.html:56
+#: rhodecode/templates/summary/summary.html:72
 msgid "Git repository"
 msgstr "Repositório Git"
 
-#: rhodecode/templates/data_table/_dt_elements.html:69
-#: rhodecode/templates/journal/journal.html:97
-#: rhodecode/templates/summary/summary.html:87
-msgid "public repository"
-msgstr "repositório público"
-
-#: rhodecode/templates/data_table/_dt_elements.html:80
-#: rhodecode/templates/summary/summary.html:96
-#: rhodecode/templates/summary/summary.html:97
-msgid "Fork of"
-msgstr "Bifurcação de"
-
-#: rhodecode/templates/data_table/_dt_elements.html:94
+#: rhodecode/templates/data_table/_dt_elements.html:74
+#, fuzzy, python-format
+msgid "Fork of %s"
+msgstr "nome da bifurcação"
+
+#: rhodecode/templates/data_table/_dt_elements.html:88
 msgid "No changesets yet"
 msgstr "Nenhum conjunto de alterações ainda."
 
-#: rhodecode/templates/data_table/_dt_elements.html:101
-#: rhodecode/templates/data_table/_dt_elements.html:103
+#: rhodecode/templates/data_table/_dt_elements.html:95
+#: rhodecode/templates/data_table/_dt_elements.html:97
 #, python-format
 msgid "Subscribe to %s rss feed"
 msgstr "Assinar o feed rss de %s"
 
-#: rhodecode/templates/data_table/_dt_elements.html:109
-#: rhodecode/templates/data_table/_dt_elements.html:111
+#: rhodecode/templates/data_table/_dt_elements.html:103
+#: rhodecode/templates/data_table/_dt_elements.html:105
 #, python-format
 msgid "Subscribe to %s atom feed"
 msgstr "Assinar o feed atom de %s"
 
 #: rhodecode/templates/data_table/_dt_elements.html:122
 #, python-format
+msgid "Confirm to delete this repository: %s"
+msgstr "Confirma excluir esse repositório: %s"
+
+#: rhodecode/templates/data_table/_dt_elements.html:131
+#, python-format
 msgid "Confirm to delete this user: %s"
 msgstr "Confirma excluir este usuário: %s"
 
-#: rhodecode/templates/email_templates/changeset_comment.html:10
-#, fuzzy
-msgid "New status$"
+#: rhodecode/templates/email_templates/changeset_comment.html:9
+#: rhodecode/templates/email_templates/pull_request_comment.html:15
+#, fuzzy
+msgid "New status"
 msgstr "Conjuntos de mudanças"
 
+#: rhodecode/templates/email_templates/changeset_comment.html:11
+#: rhodecode/templates/email_templates/pull_request_comment.html:9
+msgid "View this comment here"
+msgstr ""
+
+#: rhodecode/templates/email_templates/changeset_comment.html:14
+#, fuzzy
+msgid "Repo"
+msgstr "Meus repositórios"
+
+#: rhodecode/templates/email_templates/changeset_comment.html:16
+msgid "desc"
+msgstr ""
+
 #: rhodecode/templates/email_templates/main.html:8
 #, fuzzy
 msgid "This is a notification from RhodeCode."
 msgstr "Esta é uma notificação do RhodeCode."
 
 #: rhodecode/templates/email_templates/password_reset.html:4
-msgid "Hello"
+#, python-format
+msgid "Hello %s"
+msgstr ""
+
+#: rhodecode/templates/email_templates/password_reset.html:5
+msgid "We received a request to create a new password for your account."
 msgstr ""
 
 #: rhodecode/templates/email_templates/password_reset.html:6
-msgid "We received a request to create a new password for your account."
-msgstr ""
-
-#: rhodecode/templates/email_templates/password_reset.html:8
 msgid "You can generate it by clicking following URL"
 msgstr ""
 
-#: rhodecode/templates/email_templates/password_reset.html:12
-msgid "If you didn't request new password please ignore this email."
+#: rhodecode/templates/email_templates/password_reset.html:11
+msgid "If you did not request new password please ignore this email."
 msgstr ""
 
 #: rhodecode/templates/email_templates/pull_request.html:4
@@ -3628,37 +3918,32 @@
 
 #: rhodecode/templates/email_templates/pull_request.html:5
 #, fuzzy
+msgid "View this pull request here"
+msgstr "Confirma excluir este repositório"
+
+#: rhodecode/templates/email_templates/pull_request.html:6
+#, fuzzy
 msgid "title"
 msgstr "escrever"
 
-#: rhodecode/templates/email_templates/pull_request.html:6
-#: rhodecode/templates/pullrequests/pullrequest.html:115
+#: rhodecode/templates/email_templates/pull_request.html:7
 #, fuzzy
 msgid "description"
 msgstr "Descrição"
 
-#: rhodecode/templates/email_templates/pull_request.html:11
+#: rhodecode/templates/email_templates/pull_request.html:12
 msgid "revisions for reviewing"
 msgstr ""
 
-#: rhodecode/templates/email_templates/pull_request.html:18
-#, fuzzy
-msgid "View this pull request here"
-msgstr "Confirma excluir este repositório"
-
-#: rhodecode/templates/email_templates/pull_request_comment.html:4
+#: rhodecode/templates/email_templates/pull_request_comment.html:3
 #, fuzzy, python-format
-msgid "User %s commented on pull request #%s for repository %s"
+msgid "Pull request #%s for repository %s"
 msgstr "repositório [criado]"
 
-#: rhodecode/templates/email_templates/pull_request_comment.html:10
-#, fuzzy
-msgid "New status"
-msgstr "Conjuntos de mudanças"
-
-#: rhodecode/templates/email_templates/pull_request_comment.html:14
-msgid "View this comment here"
-msgstr ""
+#: rhodecode/templates/email_templates/pull_request_comment.html:13
+#, fuzzy
+msgid "Closing pull request with status"
+msgstr "repositório [criado]"
 
 #: rhodecode/templates/email_templates/registration.html:4
 #, fuzzy
@@ -3669,109 +3954,115 @@
 msgid "View this user here"
 msgstr ""
 
-#: rhodecode/templates/errors/error_document.html:46
+#: rhodecode/templates/errors/error_document.html:55
 #, python-format
 msgid "You will be redirected to %s in %s seconds"
 msgstr "Você será redirecionado para %s em %s segundos"
 
 #: rhodecode/templates/files/file_diff.html:4
 #, fuzzy, python-format
-msgid "%s File diff"
+msgid "%s File Diff"
 msgstr "Diff do arquivo"
 
-#: rhodecode/templates/files/file_diff.html:12
+#: rhodecode/templates/files/file_diff.html:8
 msgid "File diff"
 msgstr "Diff do arquivo"
 
 #: rhodecode/templates/files/files.html:4
-#: rhodecode/templates/files/files.html:74
+#: rhodecode/templates/files/files.html:76
 #, fuzzy, python-format
-msgid "%s files"
+msgid "%s Files"
 msgstr "arquivos"
 
-#: rhodecode/templates/files/files.html:12
-#: rhodecode/templates/summary/summary.html:351
-msgid "files"
-msgstr "arquivos"
+#: rhodecode/templates/files/files.html:30
+#: rhodecode/templates/files/files_add.html:31
+#: rhodecode/templates/files/files_edit.html:31
+#: rhodecode/templates/shortlog/shortlog_data.html:9
+#, fuzzy
+msgid "Branch"
+msgstr "ramo"
 
 #: rhodecode/templates/files/files_add.html:4
-#: rhodecode/templates/files/files_edit.html:4
 #, fuzzy, python-format
-msgid "%s Edit file"
-msgstr "editar arquivo"
+msgid "%s Files Add"
+msgstr "arquivos"
 
 #: rhodecode/templates/files/files_add.html:19
-msgid "add file"
+#, fuzzy
+msgid "Add file"
 msgstr "adicionar arquivo"
 
-#: rhodecode/templates/files/files_add.html:40
+#: rhodecode/templates/files/files_add.html:38
+#: rhodecode/templates/files/files_browser.html:31
+#: rhodecode/templates/shortlog/shortlog_data.html:78
 msgid "Add new file"
 msgstr "Adicionar novo arquivo"
 
-#: rhodecode/templates/files/files_add.html:45
+#: rhodecode/templates/files/files_add.html:43
 msgid "File Name"
 msgstr "Nome de Arquivo"
 
-#: rhodecode/templates/files/files_add.html:49
-#: rhodecode/templates/files/files_add.html:58
+#: rhodecode/templates/files/files_add.html:47
+#: rhodecode/templates/files/files_add.html:56
 msgid "or"
 msgstr "ou"
 
-#: rhodecode/templates/files/files_add.html:49
-#: rhodecode/templates/files/files_add.html:54
+#: rhodecode/templates/files/files_add.html:47
+#: rhodecode/templates/files/files_add.html:52
 msgid "Upload file"
 msgstr "Enviar arquivo"
 
-#: rhodecode/templates/files/files_add.html:58
+#: rhodecode/templates/files/files_add.html:56
 msgid "Create new file"
 msgstr "Criar novo arquivo"
 
-#: rhodecode/templates/files/files_add.html:63
-#: rhodecode/templates/files/files_edit.html:39
+#: rhodecode/templates/files/files_add.html:61
+#: rhodecode/templates/files/files_edit.html:37
 #: rhodecode/templates/files/files_ypjax.html:3
 msgid "Location"
 msgstr "Local"
 
-#: rhodecode/templates/files/files_add.html:67
+#: rhodecode/templates/files/files_add.html:65
 msgid "use / to separate directories"
 msgstr "use / para separar diretórios"
 
-#: rhodecode/templates/files/files_add.html:77
-#: rhodecode/templates/files/files_edit.html:63
+#: rhodecode/templates/files/files_add.html:75
+#: rhodecode/templates/files/files_edit.html:61
 #: rhodecode/templates/shortlog/shortlog_data.html:6
-msgid "commit message"
+#, fuzzy
+msgid "Commit message"
 msgstr "mensagem de commit"
 
-#: rhodecode/templates/files/files_add.html:81
-#: rhodecode/templates/files/files_edit.html:67
+#: rhodecode/templates/files/files_add.html:79
+#: rhodecode/templates/files/files_edit.html:65
 msgid "Commit changes"
 msgstr "Realizar commit das alterações"
 
 #: rhodecode/templates/files/files_browser.html:13
-msgid "view"
+#, fuzzy
+msgid "View"
 msgstr "ver"
 
 #: rhodecode/templates/files/files_browser.html:14
-msgid "previous revision"
+#, fuzzy
+msgid "Previous revision"
 msgstr "revisão anterior"
 
 #: rhodecode/templates/files/files_browser.html:16
-msgid "next revision"
+#, fuzzy
+msgid "Next revision"
 msgstr "próxima revisão"
 
 #: rhodecode/templates/files/files_browser.html:23
-msgid "follow current branch"
+#, fuzzy
+msgid "Follow current branch"
 msgstr "seguir ramo atual"
 
 #: rhodecode/templates/files/files_browser.html:27
-msgid "search file list"
+#, fuzzy
+msgid "Search file list"
 msgstr "pesquisar lista de arquivos"
 
-#: rhodecode/templates/files/files_browser.html:31
-#: rhodecode/templates/shortlog/shortlog_data.html:78
-msgid "add new file"
-msgstr "adicionar novo arquivo"
-
 #: rhodecode/templates/files/files_browser.html:35
 msgid "Loading file list..."
 msgstr "Carregando lista de arquivos..."
@@ -3793,34 +4084,44 @@
 msgstr "Última alteração"
 
 #: rhodecode/templates/files/files_browser.html:52
-msgid "Last commiter"
+msgid "Last committer"
 msgstr "Último commiter"
 
+#: rhodecode/templates/files/files_edit.html:4
+#, fuzzy, python-format
+msgid "%s Files Edit"
+msgstr "arquivos"
+
 #: rhodecode/templates/files/files_edit.html:19
-msgid "edit file"
+#, fuzzy
+msgid "Edit file"
 msgstr "editar arquivo"
 
+#: rhodecode/templates/files/files_edit.html:47
+#: rhodecode/templates/files/files_source.html:23
+#, fuzzy
+msgid "Show annotation"
+msgstr "mostrar anotação"
+
+#: rhodecode/templates/files/files_edit.html:48
+#: rhodecode/templates/files/files_source.html:25
+#: rhodecode/templates/files/files_source.html:55
+#, fuzzy
+msgid "Show as raw"
+msgstr "mostrar como bruto"
+
 #: rhodecode/templates/files/files_edit.html:49
-#: rhodecode/templates/files/files_source.html:23
-msgid "show annotation"
-msgstr "mostrar anotação"
-
-#: rhodecode/templates/files/files_edit.html:50
-#: rhodecode/templates/files/files_source.html:25
-#: rhodecode/templates/files/files_source.html:53
-msgid "show as raw"
-msgstr "mostrar como bruto"
-
-#: rhodecode/templates/files/files_edit.html:51
 #: rhodecode/templates/files/files_source.html:26
-msgid "download as raw"
+#, fuzzy
+msgid "Download as raw"
 msgstr "descarregar como bruto"
 
-#: rhodecode/templates/files/files_edit.html:54
-msgid "source"
+#: rhodecode/templates/files/files_edit.html:52
+#, fuzzy
+msgid "Source"
 msgstr "fonte"
 
-#: rhodecode/templates/files/files_edit.html:59
+#: rhodecode/templates/files/files_edit.html:57
 msgid "Editing file"
 msgstr "Editando arquivo"
 
@@ -3830,17 +4131,17 @@
 
 #: rhodecode/templates/files/files_history_box.html:9
 #, fuzzy
-msgid "diff to revision"
+msgid "Diff to revision"
 msgstr "próxima revisão"
 
 #: rhodecode/templates/files/files_history_box.html:10
 #, fuzzy
-msgid "show at revision"
+msgid "Show at revision"
 msgstr "próxima revisão"
 
 #: rhodecode/templates/files/files_history_box.html:11
 #, fuzzy
-msgid "show full history"
+msgid "Show full history"
 msgstr "Carregando lista de arquivos..."
 
 #: rhodecode/templates/files/files_history_box.html:16
@@ -3856,15 +4157,30 @@
 msgstr "Carregando lista de arquivos..."
 
 #: rhodecode/templates/files/files_source.html:21
-msgid "show source"
+#, fuzzy
+msgid "Show source"
 msgstr "mostrar fonte"
 
-#: rhodecode/templates/files/files_source.html:44
+#: rhodecode/templates/files/files_source.html:29
+#, fuzzy, python-format
+msgid "Edit on branch:%s"
+msgstr "excluído o repositório %s"
+
+#: rhodecode/templates/files/files_source.html:31
+#, fuzzy
+msgid "Edit on branch:?"
+msgstr "excluído o repositório %s"
+
+#: rhodecode/templates/files/files_source.html:31
+msgid "Editing files allowed only when on branch head revision"
+msgstr ""
+
+#: rhodecode/templates/files/files_source.html:46
 #, python-format
 msgid "Binary file (%s)"
 msgstr "Arquivo binário (%s)"
 
-#: rhodecode/templates/files/files_source.html:53
+#: rhodecode/templates/files/files_source.html:55
 msgid "File is too big to display"
 msgstr "Arquivo é grande demais para exibir"
 
@@ -3885,9 +4201,11 @@
 msgid "%s Followers"
 msgstr "seguidores"
 
-#: rhodecode/templates/followers/followers.html:13
-msgid "followers"
-msgstr "seguidores"
+#: rhodecode/templates/followers/followers.html:9
+#: rhodecode/templates/summary/summary.html:183
+#: rhodecode/templates/summary/summary.html:184
+msgid "Followers"
+msgstr "Seguidores"
 
 #: rhodecode/templates/followers/followers_data.html:12
 #, fuzzy
@@ -3899,32 +4217,33 @@
 msgid "%s Fork"
 msgstr "bifurcação"
 
-#: rhodecode/templates/forks/fork.html:31
+#: rhodecode/templates/forks/fork.html:28
 msgid "Fork name"
 msgstr "Nome da bifurcação"
 
-#: rhodecode/templates/forks/fork.html:68
+#: rhodecode/templates/forks/fork.html:65
 msgid "Private"
 msgstr "Privado"
 
-#: rhodecode/templates/forks/fork.html:77
+#: rhodecode/templates/forks/fork.html:74
 msgid "Copy permissions"
 msgstr "Copiar permissões"
 
-#: rhodecode/templates/forks/fork.html:81
+#: rhodecode/templates/forks/fork.html:78
 msgid "Copy permissions from forked repository"
 msgstr ""
 
-#: rhodecode/templates/forks/fork.html:86
+#: rhodecode/templates/forks/fork.html:84
 msgid "Update after clone"
 msgstr "Atualizar após clonar"
 
-#: rhodecode/templates/forks/fork.html:90
+#: rhodecode/templates/forks/fork.html:88
 msgid "Checkout source after making a clone"
 msgstr ""
 
-#: rhodecode/templates/forks/fork.html:94
-msgid "fork this repository"
+#: rhodecode/templates/forks/fork.html:93
+#, fuzzy
+msgid "Fork this repository"
 msgstr "bifurcar este repositório"
 
 #: rhodecode/templates/forks/forks.html:5
@@ -3932,12 +4251,15 @@
 msgid "%s Forks"
 msgstr "bifurcações"
 
-#: rhodecode/templates/forks/forks.html:13
-msgid "forks"
-msgstr "bifurcações"
+#: rhodecode/templates/forks/forks.html:9
+#: rhodecode/templates/summary/summary.html:189
+#: rhodecode/templates/summary/summary.html:190
+msgid "Forks"
+msgstr "Bifurcações"
 
 #: rhodecode/templates/forks/forks_data.html:17
-msgid "forked"
+#, fuzzy
+msgid "Forked"
 msgstr "bifurcado"
 
 #: rhodecode/templates/forks/forks_data.html:42
@@ -3955,45 +4277,27 @@
 msgstr "diário público de %s - feed %s"
 
 #: rhodecode/templates/journal/journal.html:32
-#: rhodecode/templates/pullrequests/pullrequest.html:55
 msgid "Refresh"
 msgstr "Atualizar"
 
 #: rhodecode/templates/journal/journal.html:35
 #: rhodecode/templates/journal/public_journal.html:24
-#, fuzzy
-msgid "RSS feed"
-msgstr "%s - feed %s"
-
-#: rhodecode/templates/journal/journal.html:38
-#: rhodecode/templates/journal/public_journal.html:27
 msgid "ATOM feed"
 msgstr ""
 
-#: rhodecode/templates/journal/journal.html:49
+#: rhodecode/templates/journal/journal.html:51
 msgid "Watched"
 msgstr "Seguindo"
 
-#: rhodecode/templates/journal/journal.html:54
-msgid "ADD"
-msgstr "ADICIONAR"
-
-#: rhodecode/templates/journal/journal.html:77
-msgid "following user"
-msgstr "seguindo usuário"
-
-#: rhodecode/templates/journal/journal.html:77
-msgid "user"
-msgstr "usuário"
-
-#: rhodecode/templates/journal/journal.html:110
-msgid "You are not following any users or repositories"
-msgstr "Você não está seguindo quaisquer usuários ou repositórios"
-
 #: rhodecode/templates/journal/journal_data.html:55
 msgid "No entries yet"
 msgstr "Ainda não há entradas"
 
+#: rhodecode/templates/journal/public_journal.html:4
+#: rhodecode/templates/journal/public_journal.html:21
+msgid "Public Journal"
+msgstr "Diário Público"
+
 #: rhodecode/templates/journal/public_journal.html:13
 #, fuzzy
 msgid "ATOM public journal feed"
@@ -4004,158 +4308,140 @@
 msgid "RSS public journal feed"
 msgstr "diário público de %s - feed %s"
 
-#: rhodecode/templates/journal/public_journal.html:21
-msgid "Public Journal"
-msgstr "Diário Público"
-
 #: rhodecode/templates/pullrequests/pullrequest.html:4
-#: rhodecode/templates/pullrequests/pullrequest.html:12
+#: rhodecode/templates/pullrequests/pullrequest.html:8
 msgid "New pull request"
 msgstr ""
 
-#: rhodecode/templates/pullrequests/pullrequest.html:54
-msgid "refresh overview"
-msgstr ""
-
-#: rhodecode/templates/pullrequests/pullrequest.html:66
+#: rhodecode/templates/pullrequests/pullrequest.html:52
 #, fuzzy
 msgid "Detailed compare view"
 msgstr "comparar exibir"
 
-#: rhodecode/templates/pullrequests/pullrequest.html:70
-#: rhodecode/templates/pullrequests/pullrequest_show.html:100
+#: rhodecode/templates/pullrequests/pullrequest.html:56
+#: rhodecode/templates/pullrequests/pullrequest_show.html:137
 msgid "Pull request reviewers"
 msgstr ""
 
-#: rhodecode/templates/pullrequests/pullrequest.html:79
-#: rhodecode/templates/pullrequests/pullrequest_show.html:112
+#: rhodecode/templates/pullrequests/pullrequest.html:65
+#: rhodecode/templates/pullrequests/pullrequest_show.html:149
 #, fuzzy
 msgid "owner"
 msgstr "Dono"
 
-#: rhodecode/templates/pullrequests/pullrequest.html:91
-#: rhodecode/templates/pullrequests/pullrequest_show.html:127
+#: rhodecode/templates/pullrequests/pullrequest.html:77
 msgid "Add reviewer to this pull request."
 msgstr ""
 
-#: rhodecode/templates/pullrequests/pullrequest.html:97
+#: rhodecode/templates/pullrequests/pullrequest.html:83
 #, fuzzy
 msgid "Create new pull request"
 msgstr "Criar novo arquivo"
 
-#: rhodecode/templates/pullrequests/pullrequest.html:106
+#: rhodecode/templates/pullrequests/pullrequest.html:92
+#: rhodecode/templates/pullrequests/pullrequest_data.html:14
 #: rhodecode/templates/pullrequests/pullrequest_show.html:25
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:33
 #, fuzzy
 msgid "Title"
 msgstr "escrever"
 
-#: rhodecode/templates/pullrequests/pullrequest.html:123
+#: rhodecode/templates/pullrequests/pullrequest.html:109
 msgid "Send pull request"
 msgstr ""
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:23
-#, python-format
-msgid "Closed %s"
-msgstr ""
-
-#: rhodecode/templates/pullrequests/pullrequest_show.html:23
-#, python-format
-msgid "with status %s"
-msgstr ""
-
-#: rhodecode/templates/pullrequests/pullrequest_show.html:31
-#, fuzzy
-msgid "Status"
+#: rhodecode/templates/pullrequests/pullrequest_show.html:4
+#, fuzzy, python-format
+msgid "%s Pull Request #%s"
+msgstr "comentado no commit"
+
+#: rhodecode/templates/pullrequests/pullrequest_show.html:35
+#, fuzzy
+msgid "Review status"
 msgstr "Conjuntos de mudanças"
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:36
+#: rhodecode/templates/pullrequests/pullrequest_show.html:40
 msgid "Pull request status"
 msgstr ""
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:44
+#: rhodecode/templates/pullrequests/pullrequest_show.html:53
 msgid "Still not reviewed by"
 msgstr ""
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:48
+#: rhodecode/templates/pullrequests/pullrequest_show.html:57
 #, python-format
 msgid "%d reviewer"
 msgid_plural "%d reviewers"
 msgstr[0] ""
 msgstr[1] ""
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:50
-msgid "pull request was reviewed by all reviewers"
+#: rhodecode/templates/pullrequests/pullrequest_show.html:59
+msgid "Pull request was reviewed by all reviewers"
 msgstr ""
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:58
+#: rhodecode/templates/pullrequests/pullrequest_show.html:65
+#, fuzzy
+msgid "Origin repository"
+msgstr "Repositório Git"
+
+#: rhodecode/templates/pullrequests/pullrequest_show.html:89
 #, fuzzy
 msgid "Created on"
 msgstr "criar um agora"
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:65
+#: rhodecode/templates/pullrequests/pullrequest_show.html:102
 #, fuzzy
 msgid "Compare view"
 msgstr "comparar exibir"
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:112
+#: rhodecode/templates/pullrequests/pullrequest_show.html:149
 #, fuzzy
 msgid "reviewer"
 msgstr ""
 
+#: rhodecode/templates/pullrequests/pullrequest_show.html:164
+#, fuzzy
+msgid "Add or remove reviewer to this pull request."
+msgstr "Confirma excluir este repositório"
+
+#: rhodecode/templates/pullrequests/pullrequest_show.html:168
+#, fuzzy
+msgid "Save changes"
+msgstr "Sem alterações"
+
 #: rhodecode/templates/pullrequests/pullrequest_show_all.html:4
-#, fuzzy
-msgid "all pull requests"
-msgstr "Criar novo arquivo"
-
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:12
-msgid "All pull requests"
-msgstr ""
-
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:27
-msgid "Closed"
-msgstr ""
+#, fuzzy, python-format
+msgid "%s Pull Requests"
+msgstr "comentado no commit"
 
 #: rhodecode/templates/search/search.html:6
-#, fuzzy, python-format
-msgid "Search \"%s\" in repository: %s"
+#, fuzzy
+msgid "Search repository"
 msgstr "no repositório"
 
 #: rhodecode/templates/search/search.html:8
-#, fuzzy, python-format
-msgid "Search \"%s\" in all repositories"
-msgstr "em todos os repositórios"
-
-#: rhodecode/templates/search/search.html:12
-#: rhodecode/templates/search/search.html:32
-#, fuzzy, python-format
-msgid "Search in repository: %s"
-msgstr "no repositório"
-
-#: rhodecode/templates/search/search.html:14
-#: rhodecode/templates/search/search.html:34
+#: rhodecode/templates/search/search.html:16
 #, fuzzy
 msgid "Search in all repositories"
 msgstr "em todos os repositórios"
 
-#: rhodecode/templates/search/search.html:48
+#: rhodecode/templates/search/search.html:50
 msgid "Search term"
 msgstr "Termo de pesquisa"
 
-#: rhodecode/templates/search/search.html:60
+#: rhodecode/templates/search/search.html:62
 msgid "Search in"
 msgstr "Pesquisando em"
 
-#: rhodecode/templates/search/search.html:63
+#: rhodecode/templates/search/search.html:65
 msgid "File contents"
 msgstr "Conteúdo dos arquivos"
 
-#: rhodecode/templates/search/search.html:64
+#: rhodecode/templates/search/search.html:66
 #, fuzzy
 msgid "Commit messages"
 msgstr "mensagem de commit"
 
-#: rhodecode/templates/search/search.html:65
+#: rhodecode/templates/search/search.html:67
 msgid "File names"
 msgstr "Nomes dos arquivos"
 
@@ -4165,42 +4451,25 @@
 msgid "Permission denied"
 msgstr "Permissão negada"
 
-#: rhodecode/templates/settings/repo_settings.html:5
-#, fuzzy, python-format
-msgid "%s Settings"
-msgstr "configurações"
-
-#: rhodecode/templates/settings/repo_settings.html:102
-#, fuzzy
-msgid "Delete repository"
-msgstr "[excluir] repositório"
-
-#: rhodecode/templates/settings/repo_settings.html:109
-#, fuzzy
-msgid "Remove repo"
-msgstr "remover"
-
 #: rhodecode/templates/shortlog/shortlog.html:5
 #, fuzzy, python-format
-msgid "%s Shortlog"
-msgstr "log resumido"
-
+msgid "%s Lightweight Changelog"
+msgstr "arquivo alterado"
+
+#: rhodecode/templates/shortlog/shortlog.html:11
 #: rhodecode/templates/shortlog/shortlog.html:15
-#: rhodecode/templates/shortlog/shortlog.html:19
-msgid "shortlog"
-msgstr "log resumido"
-
-#: rhodecode/templates/shortlog/shortlog_data.html:5
-msgid "revision"
-msgstr "revisão"
+msgid "Lightweight Changelog"
+msgstr ""
 
 #: rhodecode/templates/shortlog/shortlog_data.html:7
-msgid "age"
+#, fuzzy
+msgid "Age"
 msgstr "idade"
 
-#: rhodecode/templates/shortlog/shortlog_data.html:8
-msgid "author"
-msgstr "autor"
+#: rhodecode/templates/shortlog/shortlog_data.html:20
+#, fuzzy, python-format
+msgid "Click to open associated pull request #%s"
+msgstr "repositório [criado]"
 
 #: rhodecode/templates/shortlog/shortlog_data.html:75
 msgid "Add or upload files directly via RhodeCode"
@@ -4219,158 +4488,172 @@
 msgid "%s Summary"
 msgstr "sumário"
 
-#: rhodecode/templates/summary/summary.html:12
-msgid "summary"
-msgstr "sumário"
-
-#: rhodecode/templates/summary/summary.html:20
+#: rhodecode/templates/summary/summary.html:16
 #, fuzzy, python-format
-msgid "repo %s ATOM feed"
-msgstr "Assinar o feed atom de %s"
-
-#: rhodecode/templates/summary/summary.html:21
+msgid "%s ATOM feed"
+msgstr "%s - feed %s"
+
+#: rhodecode/templates/summary/summary.html:17
 #, fuzzy, python-format
-msgid "repo %s RSS feed"
-msgstr "Assinar o feed rss de %s"
-
-#: rhodecode/templates/summary/summary.html:49
-#: rhodecode/templates/summary/summary.html:52
-msgid "ATOM"
-msgstr "ATOM"
-
-#: rhodecode/templates/summary/summary.html:70
+msgid "%s RSS feed"
+msgstr "%s - feed %s"
+
+#: rhodecode/templates/summary/summary.html:62
 #, fuzzy, python-format
 msgid "Repository locked by %s"
 msgstr "repositórios"
 
-#: rhodecode/templates/summary/summary.html:72
+#: rhodecode/templates/summary/summary.html:64
 #, fuzzy
 msgid "Repository unlocked"
 msgstr "repositórios"
 
-#: rhodecode/templates/summary/summary.html:91
+#: rhodecode/templates/summary/summary.html:83
 #, python-format
 msgid "Non changable ID %s"
 msgstr "ID não alterável %s"
 
-#: rhodecode/templates/summary/summary.html:96
-msgid "public"
+#: rhodecode/templates/summary/summary.html:88
+#, fuzzy
+msgid "Public"
 msgstr "público"
 
-#: rhodecode/templates/summary/summary.html:104
-msgid "remote clone"
+#: rhodecode/templates/summary/summary.html:88
+#: rhodecode/templates/summary/summary.html:89
+msgid "Fork of"
+msgstr "Bifurcação de"
+
+#: rhodecode/templates/summary/summary.html:96
+#, fuzzy
+msgid "Remote clone"
 msgstr "clone remoto"
 
-#: rhodecode/templates/summary/summary.html:125
+#: rhodecode/templates/summary/summary.html:117
 msgid "Contact"
 msgstr "Contato"
 
-#: rhodecode/templates/summary/summary.html:139
+#: rhodecode/templates/summary/summary.html:131
 msgid "Clone url"
 msgstr "URL de clonagem"
 
-#: rhodecode/templates/summary/summary.html:142
+#: rhodecode/templates/summary/summary.html:136
 msgid "Show by Name"
 msgstr "Mostrar por Nome"
 
-#: rhodecode/templates/summary/summary.html:143
+#: rhodecode/templates/summary/summary.html:137
 msgid "Show by ID"
 msgstr "Mostrar por ID"
 
-#: rhodecode/templates/summary/summary.html:151
+#: rhodecode/templates/summary/summary.html:143
 msgid "Trending files"
 msgstr "Tendências em arquivos"
 
-#: rhodecode/templates/summary/summary.html:159
-#: rhodecode/templates/summary/summary.html:175
-#: rhodecode/templates/summary/summary.html:203
+#: rhodecode/templates/summary/summary.html:151
+#: rhodecode/templates/summary/summary.html:167
+#: rhodecode/templates/summary/summary.html:232
 msgid "enable"
 msgstr "habilitar"
 
-#: rhodecode/templates/summary/summary.html:167
+#: rhodecode/templates/summary/summary.html:159
 msgid "Download"
 msgstr "Download"
 
-#: rhodecode/templates/summary/summary.html:171
+#: rhodecode/templates/summary/summary.html:163
 msgid "There are no downloads yet"
 msgstr "Ainda não há downloads"
 
-#: rhodecode/templates/summary/summary.html:173
+#: rhodecode/templates/summary/summary.html:165
 msgid "Downloads are disabled for this repository"
 msgstr "Downloads estão desabilitados para este repositório"
 
-#: rhodecode/templates/summary/summary.html:179
+#: rhodecode/templates/summary/summary.html:171
 #, fuzzy
 msgid "Download as zip"
 msgstr "descarregar como bruto"
 
-#: rhodecode/templates/summary/summary.html:182
+#: rhodecode/templates/summary/summary.html:174
 msgid "Check this to download archive with subrepos"
 msgstr "Marque isto para descarregar arquivo com subrepositórios"
 
-#: rhodecode/templates/summary/summary.html:182
+#: rhodecode/templates/summary/summary.html:174
 msgid "with subrepos"
 msgstr "com subrepositórios"
 
-#: rhodecode/templates/summary/summary.html:195
+#: rhodecode/templates/summary/summary.html:197
+#, fuzzy
+msgid "Repository Size"
+msgstr "repositórios"
+
+#: rhodecode/templates/summary/summary.html:204
+#: rhodecode/templates/summary/summary.html:206
+#, fuzzy
+msgid "Feed"
+msgstr "%s - feed %s"
+
+#: rhodecode/templates/summary/summary.html:224
 msgid "Commit activity by day / author"
 msgstr "Atividade de commit por dia / autor"
 
-#: rhodecode/templates/summary/summary.html:206
+#: rhodecode/templates/summary/summary.html:235
 msgid "Stats gathered: "
 msgstr "Estatísticas coletadas:"
 
-#: rhodecode/templates/summary/summary.html:227
-msgid "Shortlog"
-msgstr "Log resumido"
-
-#: rhodecode/templates/summary/summary.html:229
+#: rhodecode/templates/summary/summary.html:256
+#, fuzzy
+msgid "Latest changes"
+msgstr "Última alteração"
+
+#: rhodecode/templates/summary/summary.html:258
 msgid "Quick start"
 msgstr "Início rápido"
 
-#: rhodecode/templates/summary/summary.html:243
+#: rhodecode/templates/summary/summary.html:272
 #, python-format
 msgid "Readme file at revision '%s'"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:246
+#: rhodecode/templates/summary/summary.html:275
 msgid "Permalink to this readme"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:304
+#: rhodecode/templates/summary/summary.html:333
 #, python-format
 msgid "Download %s as %s"
 msgstr "Descarregar %s como %s"
 
-#: rhodecode/templates/summary/summary.html:661
+#: rhodecode/templates/summary/summary.html:380
+msgid "files"
+msgstr "arquivos"
+
+#: rhodecode/templates/summary/summary.html:690
 msgid "commits"
 msgstr "commits"
 
-#: rhodecode/templates/summary/summary.html:662
+#: rhodecode/templates/summary/summary.html:691
 msgid "files added"
 msgstr "arquivos adicionados"
 
-#: rhodecode/templates/summary/summary.html:663
+#: rhodecode/templates/summary/summary.html:692
 msgid "files changed"
 msgstr "arquivos alterados"
 
-#: rhodecode/templates/summary/summary.html:664
+#: rhodecode/templates/summary/summary.html:693
 msgid "files removed"
 msgstr "arquivos removidos"
 
-#: rhodecode/templates/summary/summary.html:667
+#: rhodecode/templates/summary/summary.html:695
 msgid "commit"
 msgstr "commit"
 
-#: rhodecode/templates/summary/summary.html:668
+#: rhodecode/templates/summary/summary.html:696
 msgid "file added"
 msgstr "arquivo adicionado"
 
-#: rhodecode/templates/summary/summary.html:669
+#: rhodecode/templates/summary/summary.html:697
 msgid "file changed"
 msgstr "arquivo alterado"
 
-#: rhodecode/templates/summary/summary.html:670
+#: rhodecode/templates/summary/summary.html:698
 msgid "file removed"
 msgstr "arquivo removido"
 
@@ -4379,36 +4662,8 @@
 msgid "%s Tags"
 msgstr "%s atrás"
 
-#: rhodecode/templates/tags/tags.html:29
+#: rhodecode/templates/tags/tags.html:26
 #, fuzzy
 msgid "Compare tags"
 msgstr "comparar exibir"
 
-#~ msgid ""
-#~ "%s repository is not mapped to db"
-#~ " perhaps it was created or renamed"
-#~ " from the file system please run "
-#~ "the application again in order to "
-#~ "rescan repositories"
-#~ msgstr ""
-#~ "repositório %s não está mapeado ao "
-#~ "bd. Talvez ele tenha sido criado "
-#~ "ou renomeado a partir do sistema "
-#~ "de arquivos. Por favor execute a "
-#~ "aplicação outra vez para varrer "
-#~ "novamente por repositórios"
-
-#~ msgid ""
-#~ "%s repository is not mapped to db"
-#~ " perhaps it was moved or renamed  "
-#~ "from the filesystem please run the "
-#~ "application again in order to rescan "
-#~ "repositories"
-#~ msgstr ""
-#~ "repositório %s não está mapeado ao "
-#~ "bd. Talvez ele tenha sido movido "
-#~ "ou renomeado a partir do sistema "
-#~ "de arquivos. Por favor execute a "
-#~ "aplicação outra vez para varrer "
-#~ "novamente por repositórios"
-
--- a/rhodecode/i18n/rhodecode.pot	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/i18n/rhodecode.pot	Sun Apr 07 18:37:22 2013 +0200
@@ -1,14 +1,14 @@
 # Translations template for RhodeCode.
-# Copyright (C) 2012 ORGANIZATION
+# Copyright (C) 2013 ORGANIZATION
 # This file is distributed under the same license as the RhodeCode project.
-# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
 #
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: RhodeCode 1.5.1b\n"
+"Project-Id-Version: RhodeCode 1.6.0b\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2012-12-14 04:19+0100\n"
+"POT-Creation-Date: 2013-04-05 10:19-0700\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -22,11 +22,11 @@
 msgstr ""
 
 #: rhodecode/controllers/changeset.py:83
-msgid "show white space"
+msgid "Show white space"
 msgstr ""
 
 #: rhodecode/controllers/changeset.py:90 rhodecode/controllers/changeset.py:97
-msgid "ignore white space"
+msgid "Ignore white space"
 msgstr ""
 
 #: rhodecode/controllers/changeset.py:163
@@ -34,18 +34,18 @@
 msgid "%s line context"
 msgstr ""
 
-#: rhodecode/controllers/changeset.py:314 rhodecode/controllers/pullrequests.py:417
+#: rhodecode/controllers/changeset.py:329 rhodecode/controllers/pullrequests.py:438
 #, python-format
 msgid "Status change -> %s"
 msgstr ""
 
-#: rhodecode/controllers/changeset.py:345
+#: rhodecode/controllers/changeset.py:360
 msgid ""
-"Changing status on a changeset associated witha closed pull request is not "
+"Changing status on a changeset associated with a closed pull request is not "
 "allowed"
 msgstr ""
 
-#: rhodecode/controllers/compare.py:75 rhodecode/controllers/pullrequests.py:121
+#: rhodecode/controllers/compare.py:74 rhodecode/controllers/pullrequests.py:167
 #: rhodecode/controllers/shortlog.py:100
 msgid "There are no changesets yet"
 msgstr ""
@@ -87,154 +87,185 @@
 msgstr ""
 
 #: rhodecode/controllers/feed.py:86
-#: rhodecode/templates/changeset/changeset.html:137
-#: rhodecode/templates/changeset/changeset.html:149
-#: rhodecode/templates/compare/compare_diff.html:62
-#: rhodecode/templates/compare/compare_diff.html:73
-#: rhodecode/templates/pullrequests/pullrequest_show.html:94
-#: rhodecode/templates/pullrequests/pullrequest_show.html:153
+#: rhodecode/templates/changeset/changeset.html:134
+#: rhodecode/templates/changeset/changeset.html:146
+#: rhodecode/templates/compare/compare_diff.html:58
+#: rhodecode/templates/compare/compare_diff.html:69
+#: rhodecode/templates/pullrequests/pullrequest_show.html:131
+#: rhodecode/templates/pullrequests/pullrequest_show.html:195
 msgid "Changeset was too big and was cut off..."
 msgstr ""
 
-#: rhodecode/controllers/feed.py:92
-msgid "commited on"
-msgstr ""
-
-#: rhodecode/controllers/files.py:86
-msgid "click here to add new file"
-msgstr ""
-
-#: rhodecode/controllers/files.py:87
+#: rhodecode/controllers/feed.py:91
+#, python-format
+msgid "%s committed on %s"
+msgstr ""
+
+#: rhodecode/controllers/files.py:88
+msgid "Click here to add new file"
+msgstr ""
+
+#: rhodecode/controllers/files.py:89
 #, python-format
 msgid "There are no files yet %s"
 msgstr ""
 
-#: rhodecode/controllers/files.py:265 rhodecode/controllers/files.py:325
+#: rhodecode/controllers/files.py:267 rhodecode/controllers/files.py:335
 #, python-format
 msgid "This repository is has been locked by %s on %s"
 msgstr ""
 
-#: rhodecode/controllers/files.py:292
+#: rhodecode/controllers/files.py:279
+msgid "You can only edit files with revision being a valid branch "
+msgstr ""
+
+#: rhodecode/controllers/files.py:293
 #, python-format
-msgid "Edited %s via RhodeCode"
-msgstr ""
-
-#: rhodecode/controllers/files.py:297
+msgid "Edited file %s via RhodeCode"
+msgstr ""
+
+#: rhodecode/controllers/files.py:309
 msgid "No changes"
 msgstr ""
 
-#: rhodecode/controllers/files.py:308 rhodecode/controllers/files.py:372
+#: rhodecode/controllers/files.py:318 rhodecode/controllers/files.py:388
 #, python-format
 msgid "Successfully committed to %s"
 msgstr ""
 
-#: rhodecode/controllers/files.py:313 rhodecode/controllers/files.py:378
+#: rhodecode/controllers/files.py:323 rhodecode/controllers/files.py:394
 msgid "Error occurred during commit"
 msgstr ""
 
-#: rhodecode/controllers/files.py:344
-#, python-format
-msgid "Added %s via RhodeCode"
-msgstr ""
-
-#: rhodecode/controllers/files.py:358
+#: rhodecode/controllers/files.py:347
+msgid "Added file via RhodeCode"
+msgstr ""
+
+#: rhodecode/controllers/files.py:364
 msgid "No content"
 msgstr ""
 
-#: rhodecode/controllers/files.py:362
+#: rhodecode/controllers/files.py:368
 msgid "No filename"
 msgstr ""
 
-#: rhodecode/controllers/files.py:404
-msgid "downloads disabled"
-msgstr ""
-
-#: rhodecode/controllers/files.py:415
+#: rhodecode/controllers/files.py:372
+msgid "Location must be relative path and must not contain .. in path"
+msgstr ""
+
+#: rhodecode/controllers/files.py:420
+msgid "Downloads disabled"
+msgstr ""
+
+#: rhodecode/controllers/files.py:431
 #, python-format
 msgid "Unknown revision %s"
 msgstr ""
 
-#: rhodecode/controllers/files.py:417
+#: rhodecode/controllers/files.py:433
 msgid "Empty repository"
 msgstr ""
 
-#: rhodecode/controllers/files.py:419
+#: rhodecode/controllers/files.py:435
 msgid "Unknown archive type"
 msgstr ""
 
-#: rhodecode/controllers/files.py:564
-#: rhodecode/templates/changeset/changeset_range.html:13
-#: rhodecode/templates/changeset/changeset_range.html:31
+#: rhodecode/controllers/files.py:617
+#: rhodecode/templates/changeset/changeset_range.html:9
 msgid "Changesets"
 msgstr ""
 
-#: rhodecode/controllers/files.py:565 rhodecode/controllers/pullrequests.py:74
-#: rhodecode/controllers/summary.py:236 rhodecode/model/scm.py:550
+#: rhodecode/controllers/files.py:618 rhodecode/controllers/pullrequests.py:131
+#: rhodecode/controllers/summary.py:247 rhodecode/model/scm.py:606
+#: rhodecode/templates/switch_to_list.html:3
+#: rhodecode/templates/branches/branches.html:10
 msgid "Branches"
 msgstr ""
 
-#: rhodecode/controllers/files.py:566 rhodecode/controllers/pullrequests.py:78
-#: rhodecode/controllers/summary.py:237 rhodecode/model/scm.py:561
+#: rhodecode/controllers/files.py:619 rhodecode/controllers/pullrequests.py:132
+#: rhodecode/controllers/summary.py:248 rhodecode/model/scm.py:617
+#: rhodecode/templates/switch_to_list.html:15
+#: rhodecode/templates/shortlog/shortlog_data.html:10
+#: rhodecode/templates/tags/tags.html:10
 msgid "Tags"
 msgstr ""
 
-#: rhodecode/controllers/forks.py:158
+#: rhodecode/controllers/forks.py:175
 #, python-format
-msgid "forked %s repository as %s"
-msgstr ""
-
-#: rhodecode/controllers/forks.py:172
+msgid "Forked repository %s as %s"
+msgstr ""
+
+#: rhodecode/controllers/forks.py:189
 #, python-format
 msgid "An error occurred during repository forking %s"
 msgstr ""
 
-#: rhodecode/controllers/journal.py:218 rhodecode/controllers/journal.py:261
+#: rhodecode/controllers/journal.py:275 rhodecode/controllers/journal.py:318
 msgid "public journal"
 msgstr ""
 
-#: rhodecode/controllers/journal.py:222 rhodecode/controllers/journal.py:265
-#: rhodecode/templates/base/base.html:232
+#: rhodecode/controllers/journal.py:279 rhodecode/controllers/journal.py:322
 #: rhodecode/templates/journal/journal.html:12
 msgid "journal"
 msgstr ""
 
-#: rhodecode/controllers/login.py:143
-msgid "You have successfully registered into rhodecode"
-msgstr ""
-
-#: rhodecode/controllers/login.py:164
+#: rhodecode/controllers/login.py:138
+msgid "You have successfully registered into RhodeCode"
+msgstr ""
+
+#: rhodecode/controllers/login.py:159
 msgid "Your password reset link was sent"
 msgstr ""
 
-#: rhodecode/controllers/login.py:184
+#: rhodecode/controllers/login.py:179
 msgid "Your password reset was successful, new password has been sent to your email"
 msgstr ""
 
-#: rhodecode/controllers/pullrequests.py:76 rhodecode/model/scm.py:556
+#: rhodecode/controllers/pullrequests.py:118
+#: rhodecode/templates/changeset/changeset.html:10
+#: rhodecode/templates/email_templates/changeset_comment.html:15
+msgid "Changeset"
+msgstr ""
+
+#: rhodecode/controllers/pullrequests.py:128
+msgid "Special"
+msgstr ""
+
+#: rhodecode/controllers/pullrequests.py:129
+msgid "Peer branches"
+msgstr ""
+
+#: rhodecode/controllers/pullrequests.py:130 rhodecode/model/scm.py:612
+#: rhodecode/templates/switch_to_list.html:28
+#: rhodecode/templates/bookmarks/bookmarks.html:10
 msgid "Bookmarks"
 msgstr ""
 
-#: rhodecode/controllers/pullrequests.py:190
+#: rhodecode/controllers/pullrequests.py:228
 msgid "Pull request requires a title with min. 3 chars"
 msgstr ""
 
-#: rhodecode/controllers/pullrequests.py:192
-msgid "error during creation of pull request"
-msgstr ""
-
-#: rhodecode/controllers/pullrequests.py:224
+#: rhodecode/controllers/pullrequests.py:230
+msgid "Error creating pull request"
+msgstr ""
+
+#: rhodecode/controllers/pullrequests.py:251
 msgid "Successfully opened new pull request"
 msgstr ""
 
-#: rhodecode/controllers/pullrequests.py:227
+#: rhodecode/controllers/pullrequests.py:254
 msgid "Error occurred during sending pull request"
 msgstr ""
 
-#: rhodecode/controllers/pullrequests.py:260
+#: rhodecode/controllers/pullrequests.py:287
 msgid "Successfully deleted pull request"
 msgstr ""
 
-#: rhodecode/controllers/pullrequests.py:452
+#: rhodecode/controllers/pullrequests.py:441
+msgid "Closing with"
+msgstr ""
+
+#: rhodecode/controllers/pullrequests.py:478
 msgid "Closing pull request on other statuses than rejected or approved forbidden"
 msgstr ""
 
@@ -250,50 +281,12 @@
 msgid "An error occurred during this search operation"
 msgstr ""
 
-#: rhodecode/controllers/settings.py:119 rhodecode/controllers/admin/repos.py:272
-#, python-format
-msgid "Repository %s updated successfully"
-msgstr ""
-
-#: rhodecode/controllers/settings.py:137 rhodecode/controllers/admin/repos.py:290
-#, python-format
-msgid "error occurred during update of repository %s"
-msgstr ""
-
-#: rhodecode/controllers/settings.py:162 rhodecode/controllers/admin/repos.py:315
-#, python-format
-msgid "deleted repository %s"
-msgstr ""
-
-#: rhodecode/controllers/settings.py:166 rhodecode/controllers/admin/repos.py:325
-#: rhodecode/controllers/admin/repos.py:331
-#, python-format
-msgid "An error occurred during deletion of %s"
-msgstr ""
-
-#: rhodecode/controllers/settings.py:185
-msgid "unlocked"
-msgstr ""
-
-#: rhodecode/controllers/settings.py:188
-msgid "locked"
-msgstr ""
-
-#: rhodecode/controllers/settings.py:190
-#, python-format
-msgid "Repository has been %s"
-msgstr ""
-
-#: rhodecode/controllers/settings.py:194 rhodecode/controllers/admin/repos.py:423
-msgid "An error occurred during unlocking"
-msgstr ""
-
-#: rhodecode/controllers/summary.py:140
+#: rhodecode/controllers/summary.py:141
 msgid "No data loaded yet"
 msgstr ""
 
-#: rhodecode/controllers/summary.py:144
-#: rhodecode/templates/summary/summary.html:157
+#: rhodecode/controllers/summary.py:147
+#: rhodecode/templates/summary/summary.html:149
 msgid "Statistics are disabled for this repository"
 msgstr ""
 
@@ -302,7 +295,7 @@
 msgstr ""
 
 #: rhodecode/controllers/admin/defaults.py:110
-msgid "error occurred during update of defaults"
+msgid "Error occurred during update of defaults"
 msgstr ""
 
 #: rhodecode/controllers/admin/ldap_settings.py:50
@@ -350,7 +343,7 @@
 msgstr ""
 
 #: rhodecode/controllers/admin/ldap_settings.py:126
-msgid "Ldap settings updated successfully"
+msgid "LDAP settings updated successfully"
 msgstr ""
 
 #: rhodecode/controllers/admin/ldap_settings.py:130
@@ -358,696 +351,837 @@
 msgstr ""
 
 #: rhodecode/controllers/admin/ldap_settings.py:147
-msgid "error occurred during update of ldap settings"
-msgstr ""
-
-#: rhodecode/controllers/admin/permissions.py:59
-#: rhodecode/controllers/admin/permissions.py:63
-msgid "None"
+msgid "Error occurred during update of ldap settings"
 msgstr ""
 
 #: rhodecode/controllers/admin/permissions.py:60
 #: rhodecode/controllers/admin/permissions.py:64
-msgid "Read"
+msgid "None"
 msgstr ""
 
 #: rhodecode/controllers/admin/permissions.py:61
 #: rhodecode/controllers/admin/permissions.py:65
-msgid "Write"
+msgid "Read"
 msgstr ""
 
 #: rhodecode/controllers/admin/permissions.py:62
 #: rhodecode/controllers/admin/permissions.py:66
+msgid "Write"
+msgstr ""
+
+#: rhodecode/controllers/admin/permissions.py:63
+#: rhodecode/controllers/admin/permissions.py:67
 #: rhodecode/templates/admin/defaults/defaults.html:9
 #: rhodecode/templates/admin/ldap/ldap.html:9
 #: rhodecode/templates/admin/permissions/permissions.html:9
-#: rhodecode/templates/admin/repos/repo_add.html:9
-#: rhodecode/templates/admin/repos/repo_edit.html:9
+#: rhodecode/templates/admin/repos/repo_add.html:10
+#: rhodecode/templates/admin/repos/repo_add.html:14
 #: rhodecode/templates/admin/repos/repos.html:9
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:8
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:8
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:10
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:9
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:9
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:11
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:13
 #: rhodecode/templates/admin/settings/hooks.html:9
 #: rhodecode/templates/admin/settings/settings.html:9
 #: rhodecode/templates/admin/users/user_add.html:8
 #: rhodecode/templates/admin/users/user_edit.html:9
-#: rhodecode/templates/admin/users/user_edit.html:126
+#: rhodecode/templates/admin/users/user_edit.html:133
 #: rhodecode/templates/admin/users/users.html:9
+#: rhodecode/templates/admin/users/users.html:85
 #: rhodecode/templates/admin/users_groups/users_group_add.html:8
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:9
 #: rhodecode/templates/admin/users_groups/users_groups.html:9
-#: rhodecode/templates/base/base.html:197 rhodecode/templates/base/base.html:350
-#: rhodecode/templates/base/base.html:352 rhodecode/templates/base/base.html:354
+#: rhodecode/templates/base/base.html:292 rhodecode/templates/base/base.html:293
+#: rhodecode/templates/base/base.html:299 rhodecode/templates/base/base.html:300
 msgid "Admin"
 msgstr ""
 
-#: rhodecode/controllers/admin/permissions.py:69
-msgid "disabled"
-msgstr ""
-
-#: rhodecode/controllers/admin/permissions.py:71
-msgid "allowed with manual account activation"
-msgstr ""
-
-#: rhodecode/controllers/admin/permissions.py:73
-msgid "allowed with automatic account activation"
-msgstr ""
-
-#: rhodecode/controllers/admin/permissions.py:75
-#: rhodecode/controllers/admin/permissions.py:78
-msgid "Disabled"
-msgstr ""
-
+#: rhodecode/controllers/admin/permissions.py:70
 #: rhodecode/controllers/admin/permissions.py:76
 #: rhodecode/controllers/admin/permissions.py:79
+msgid "Disabled"
+msgstr ""
+
+#: rhodecode/controllers/admin/permissions.py:72
+msgid "Allowed with manual account activation"
+msgstr ""
+
+#: rhodecode/controllers/admin/permissions.py:74
+msgid "Allowed with automatic account activation"
+msgstr ""
+
+#: rhodecode/controllers/admin/permissions.py:77
+#: rhodecode/controllers/admin/permissions.py:80
 msgid "Enabled"
 msgstr ""
 
-#: rhodecode/controllers/admin/permissions.py:122
+#: rhodecode/controllers/admin/permissions.py:128
 msgid "Default permissions updated successfully"
 msgstr ""
 
-#: rhodecode/controllers/admin/permissions.py:136
-msgid "error occurred during update of permissions"
-msgstr ""
-
-#: rhodecode/controllers/admin/repos.py:121
+#: rhodecode/controllers/admin/permissions.py:142
+msgid "Error occurred during update of permissions"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:127
 msgid "--REMOVE FORK--"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos.py:190
+#: rhodecode/controllers/admin/repos.py:168
+#, python-format
+msgid "Created repository %s from %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:174
 #, python-format
-msgid "created repository %s from %s"
-msgstr ""
-
-#: rhodecode/controllers/admin/repos.py:194
+msgid "Created repository %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:197
+#, python-format
+msgid "Error creating repository %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:266
 #, python-format
-msgid "created repository %s"
-msgstr ""
-
-#: rhodecode/controllers/admin/repos.py:225
+msgid "Repository %s updated successfully"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:284
+#, python-format
+msgid "Error occurred during update of repository %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:311 rhodecode/controllers/api/api.py:877
 #, python-format
-msgid "error occurred during creation of repository %s"
-msgstr ""
-
-#: rhodecode/controllers/admin/repos.py:320
+msgid "Detached %s forks"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:314 rhodecode/controllers/api/api.py:879
+#, python-format
+msgid "Deleted %s forks"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:319
+#, python-format
+msgid "Deleted repository %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:322
 #, python-format
 msgid "Cannot delete %s it still contains attached forks"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos.py:349
+#: rhodecode/controllers/admin/repos.py:327
+#, python-format
+msgid "An error occurred during deletion of %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:365
+msgid "Repository permissions updated"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:384
 msgid "An error occurred during deletion of repository user"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos.py:368
-msgid "An error occurred during deletion of repository users groups"
-msgstr ""
-
-#: rhodecode/controllers/admin/repos.py:386
-msgid "An error occurred during deletion of repository stats"
-msgstr ""
-
 #: rhodecode/controllers/admin/repos.py:403
+msgid "An error occurred during deletion of repository user groups"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:421
+msgid "An error occurred during deletion of repository stats"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:438
 msgid "An error occurred during cache invalidation"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos.py:443
+#: rhodecode/controllers/admin/repos.py:458
+#: rhodecode/controllers/admin/repos.py:485
+msgid "An error occurred during unlocking"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:476
+msgid "Unlocked"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:479
+msgid "Locked"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:481
+#, python-format
+msgid "Repository has been %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:505
 msgid "Updated repository visibility in public journal"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos.py:447
+#: rhodecode/controllers/admin/repos.py:509
 msgid "An error occurred during setting this repository in public journal"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos.py:452 rhodecode/model/validators.py:300
+#: rhodecode/controllers/admin/repos.py:514 rhodecode/model/validators.py:302
 msgid "Token mismatch"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos.py:465
+#: rhodecode/controllers/admin/repos.py:527
 msgid "Pulled from remote location"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos.py:467
+#: rhodecode/controllers/admin/repos.py:529
 msgid "An error occurred during pull from remote location"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos.py:483
+#: rhodecode/controllers/admin/repos.py:545
 msgid "Nothing"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos.py:485
+#: rhodecode/controllers/admin/repos.py:547
 #, python-format
 msgid "Marked repo %s as fork of %s"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos.py:489
+#: rhodecode/controllers/admin/repos.py:551
 msgid "An error occurred during this operation"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos_groups.py:120
+#: rhodecode/controllers/admin/repos.py:590
+msgid "An error occurred during creation of field"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:604
+msgid "An error occurred during removal of field"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos_groups.py:145
 #, python-format
-msgid "created repos group %s"
-msgstr ""
-
-#: rhodecode/controllers/admin/repos_groups.py:133
+msgid "Created repository group %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos_groups.py:157
 #, python-format
-msgid "error occurred during creation of repos group %s"
-msgstr ""
-
-#: rhodecode/controllers/admin/repos_groups.py:167
+msgid "Error occurred during creation of repository group %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos_groups.py:214
+#: rhodecode/controllers/admin/repos_groups.py:286
+msgid "Cannot revoke permission for yourself as admin"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos_groups.py:220
 #, python-format
-msgid "updated repos group %s"
-msgstr ""
-
-#: rhodecode/controllers/admin/repos_groups.py:180
+msgid "Updated repository group %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos_groups.py:235
 #, python-format
-msgid "error occurred during update of repos group %s"
-msgstr ""
-
-#: rhodecode/controllers/admin/repos_groups.py:198
+msgid "Error occurred during update of repository group %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos_groups.py:253
 #, python-format
 msgid "This group contains %s repositores and cannot be deleted"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos_groups.py:206
+#: rhodecode/controllers/admin/repos_groups.py:260
+#, python-format
+msgid "This group contains %s subgroups and cannot be deleted"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos_groups.py:266
 #, python-format
-msgid "removed repos group %s"
-msgstr ""
-
-#: rhodecode/controllers/admin/repos_groups.py:212
-msgid "Cannot delete this group it still contains subgroups"
-msgstr ""
-
-#: rhodecode/controllers/admin/repos_groups.py:217
-#: rhodecode/controllers/admin/repos_groups.py:222
+msgid "Removed repository group %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos_groups.py:271
 #, python-format
-msgid "error occurred during deletion of repos group %s"
-msgstr ""
-
-#: rhodecode/controllers/admin/repos_groups.py:243
+msgid "Error occurred during deletion of repos group %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos_groups.py:297
 msgid "An error occurred during deletion of group user"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos_groups.py:264
-msgid "An error occurred during deletion of group users groups"
-msgstr ""
-
-#: rhodecode/controllers/admin/settings.py:123
+#: rhodecode/controllers/admin/repos_groups.py:318
+msgid "An error occurred during deletion of group user groups"
+msgstr ""
+
+#: rhodecode/controllers/admin/settings.py:126
 #, python-format
-msgid "Repositories successfully rescanned added: %s,removed: %s"
-msgstr ""
-
-#: rhodecode/controllers/admin/settings.py:131
+msgid "Repositories successfully rescanned added: %s ; removed: %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/settings.py:135
 msgid "Whoosh reindex task scheduled"
 msgstr ""
 
-#: rhodecode/controllers/admin/settings.py:162
-msgid "Updated application settings"
-msgstr ""
-
 #: rhodecode/controllers/admin/settings.py:166
-#: rhodecode/controllers/admin/settings.py:299
-msgid "error occurred during updating application settings"
-msgstr ""
-
-#: rhodecode/controllers/admin/settings.py:207
+msgid "Updated application settings"
+msgstr ""
+
+#: rhodecode/controllers/admin/settings.py:170
+#: rhodecode/controllers/admin/settings.py:301
+msgid "Error occurred during updating application settings"
+msgstr ""
+
+#: rhodecode/controllers/admin/settings.py:216
 msgid "Updated visualisation settings"
 msgstr ""
 
-#: rhodecode/controllers/admin/settings.py:212
-msgid "error occurred during updating visualisation settings"
-msgstr ""
-
-#: rhodecode/controllers/admin/settings.py:295
+#: rhodecode/controllers/admin/settings.py:221
+msgid "Error occurred during updating visualisation settings"
+msgstr ""
+
+#: rhodecode/controllers/admin/settings.py:297
 msgid "Updated VCS settings"
 msgstr ""
 
-#: rhodecode/controllers/admin/settings.py:309
+#: rhodecode/controllers/admin/settings.py:311
 msgid "Added new hook"
 msgstr ""
 
-#: rhodecode/controllers/admin/settings.py:321
+#: rhodecode/controllers/admin/settings.py:323
 msgid "Updated hooks"
 msgstr ""
 
-#: rhodecode/controllers/admin/settings.py:325
-msgid "error occurred during hook creation"
-msgstr ""
-
-#: rhodecode/controllers/admin/settings.py:344
+#: rhodecode/controllers/admin/settings.py:327
+msgid "Error occurred during hook creation"
+msgstr ""
+
+#: rhodecode/controllers/admin/settings.py:346
 msgid "Email task created"
 msgstr ""
 
-#: rhodecode/controllers/admin/settings.py:399
+#: rhodecode/controllers/admin/settings.py:410
 msgid "You can't edit this user since it's crucial for entire application"
 msgstr ""
 
-#: rhodecode/controllers/admin/settings.py:430
+#: rhodecode/controllers/admin/settings.py:452
 msgid "Your account was updated successfully"
 msgstr ""
 
-#: rhodecode/controllers/admin/settings.py:445
-#: rhodecode/controllers/admin/users.py:196
+#: rhodecode/controllers/admin/settings.py:467
+#: rhodecode/controllers/admin/users.py:198
 #, python-format
-msgid "error occurred during update of user %s"
+msgid "Error occurred during update of user %s"
 msgstr ""
 
 #: rhodecode/controllers/admin/users.py:130
 #, python-format
-msgid "created user %s"
+msgid "Created user %s"
 msgstr ""
 
 #: rhodecode/controllers/admin/users.py:142
 #, python-format
-msgid "error occurred during creation of user %s"
+msgid "Error occurred during creation of user %s"
 msgstr ""
 
 #: rhodecode/controllers/admin/users.py:176
 msgid "User updated successfully"
 msgstr ""
 
-#: rhodecode/controllers/admin/users.py:212
-msgid "successfully deleted user"
-msgstr ""
-
-#: rhodecode/controllers/admin/users.py:217
+#: rhodecode/controllers/admin/users.py:214
+msgid "Successfully deleted user"
+msgstr ""
+
+#: rhodecode/controllers/admin/users.py:219
 msgid "An error occurred during deletion of user"
 msgstr ""
 
-#: rhodecode/controllers/admin/users.py:231
+#: rhodecode/controllers/admin/users.py:233
 msgid "You can't edit this user"
 msgstr ""
 
-#: rhodecode/controllers/admin/users.py:272
+#: rhodecode/controllers/admin/users.py:276
 msgid "Granted 'repository create' permission to user"
 msgstr ""
 
-#: rhodecode/controllers/admin/users.py:277
+#: rhodecode/controllers/admin/users.py:281
 msgid "Revoked 'repository create' permission to user"
 msgstr ""
 
-#: rhodecode/controllers/admin/users.py:283
+#: rhodecode/controllers/admin/users.py:287
 msgid "Granted 'repository fork' permission to user"
 msgstr ""
 
-#: rhodecode/controllers/admin/users.py:288
+#: rhodecode/controllers/admin/users.py:292
 msgid "Revoked 'repository fork' permission to user"
 msgstr ""
 
-#: rhodecode/controllers/admin/users.py:294
-#: rhodecode/controllers/admin/users_groups.py:279
+#: rhodecode/controllers/admin/users.py:298
+#: rhodecode/controllers/admin/users_groups.py:281
 msgid "An error occurred during permissions saving"
 msgstr ""
 
-#: rhodecode/controllers/admin/users.py:309
+#: rhodecode/controllers/admin/users.py:312
 #, python-format
 msgid "Added email %s to user"
 msgstr ""
 
-#: rhodecode/controllers/admin/users.py:315
+#: rhodecode/controllers/admin/users.py:318
 msgid "An error occurred during email saving"
 msgstr ""
 
-#: rhodecode/controllers/admin/users.py:325
+#: rhodecode/controllers/admin/users.py:328
 msgid "Removed email from user"
 msgstr ""
 
+#: rhodecode/controllers/admin/users.py:341
+#, python-format
+msgid "Added ip %s to user"
+msgstr ""
+
+#: rhodecode/controllers/admin/users.py:347
+msgid "An error occurred during ip saving"
+msgstr ""
+
+#: rhodecode/controllers/admin/users.py:359
+msgid "Removed ip from user"
+msgstr ""
+
 #: rhodecode/controllers/admin/users_groups.py:86
 #, python-format
-msgid "created users group %s"
+msgid "Created user group %s"
 msgstr ""
 
 #: rhodecode/controllers/admin/users_groups.py:97
 #, python-format
-msgid "error occurred during creation of users group %s"
-msgstr ""
-
-#: rhodecode/controllers/admin/users_groups.py:164
+msgid "Error occurred during creation of user group %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/users_groups.py:166
 #, python-format
-msgid "updated users group %s"
-msgstr ""
-
-#: rhodecode/controllers/admin/users_groups.py:186
+msgid "Updated user group %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/users_groups.py:188
 #, python-format
-msgid "error occurred during update of users group %s"
-msgstr ""
-
-#: rhodecode/controllers/admin/users_groups.py:203
-msgid "successfully deleted users group"
-msgstr ""
-
-#: rhodecode/controllers/admin/users_groups.py:208
-msgid "An error occurred during deletion of users group"
-msgstr ""
-
-#: rhodecode/controllers/admin/users_groups.py:257
-msgid "Granted 'repository create' permission to users group"
-msgstr ""
-
-#: rhodecode/controllers/admin/users_groups.py:262
-msgid "Revoked 'repository create' permission to users group"
-msgstr ""
-
-#: rhodecode/controllers/admin/users_groups.py:268
-msgid "Granted 'repository fork' permission to users group"
-msgstr ""
-
-#: rhodecode/controllers/admin/users_groups.py:273
-msgid "Revoked 'repository fork' permission to users group"
-msgstr ""
-
-#: rhodecode/lib/auth.py:499
+msgid "Error occurred during update of user group %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/users_groups.py:205
+msgid "Successfully deleted user group"
+msgstr ""
+
+#: rhodecode/controllers/admin/users_groups.py:210
+msgid "An error occurred during deletion of user group"
+msgstr ""
+
+#: rhodecode/controllers/admin/users_groups.py:259
+msgid "Granted 'repository create' permission to user group"
+msgstr ""
+
+#: rhodecode/controllers/admin/users_groups.py:264
+msgid "Revoked 'repository create' permission to user group"
+msgstr ""
+
+#: rhodecode/controllers/admin/users_groups.py:270
+msgid "Granted 'repository fork' permission to user group"
+msgstr ""
+
+#: rhodecode/controllers/admin/users_groups.py:275
+msgid "Revoked 'repository fork' permission to user group"
+msgstr ""
+
+#: rhodecode/lib/auth.py:530
+#, python-format
+msgid "IP %s not allowed"
+msgstr ""
+
+#: rhodecode/lib/auth.py:579
 msgid "You need to be a registered user to perform this action"
 msgstr ""
 
-#: rhodecode/lib/auth.py:540
+#: rhodecode/lib/auth.py:620
 msgid "You need to be a signed in to view this page"
 msgstr ""
 
-#: rhodecode/lib/diffs.py:74
-msgid "binary file"
-msgstr ""
-
-#: rhodecode/lib/diffs.py:90
+#: rhodecode/lib/diffs.py:66
+msgid "Binary file"
+msgstr ""
+
+#: rhodecode/lib/diffs.py:82
 msgid "Changeset was too big and was cut off, use diff menu to display this diff"
 msgstr ""
 
-#: rhodecode/lib/diffs.py:100
+#: rhodecode/lib/diffs.py:92
 msgid "No changes detected"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:374
+#: rhodecode/lib/helpers.py:394
 #, python-format
 msgid "%a, %d %b %Y %H:%M:%S"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:486
+#: rhodecode/lib/helpers.py:506
 msgid "True"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:490
+#: rhodecode/lib/helpers.py:509
 msgid "False"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:530
+#: rhodecode/lib/helpers.py:547
 #, python-format
 msgid "Deleted branch: %s"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:533
+#: rhodecode/lib/helpers.py:550
 #, python-format
 msgid "Created tag: %s"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:546
+#: rhodecode/lib/helpers.py:563
 msgid "Changeset not found"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:589
-#, python-format
-msgid "Show all combined changesets %s->%s"
-msgstr ""
-
-#: rhodecode/lib/helpers.py:595
-msgid "compare view"
-msgstr ""
-
 #: rhodecode/lib/helpers.py:615
-msgid "and"
-msgstr ""
-
-#: rhodecode/lib/helpers.py:616
 #, python-format
-msgid "%s more"
-msgstr ""
-
-#: rhodecode/lib/helpers.py:617 rhodecode/templates/changelog/changelog.html:51
-msgid "revisions"
+msgid "Show all combined changesets %s->%s"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:621
+msgid "compare view"
 msgstr ""
 
 #: rhodecode/lib/helpers.py:641
+msgid "and"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:642
+#, python-format
+msgid "%s more"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:643 rhodecode/templates/changelog/changelog.html:44
+msgid "revisions"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:667
 #, python-format
 msgid "fork name %s"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:658
-#: rhodecode/templates/pullrequests/pullrequest_show.html:4
-#: rhodecode/templates/pullrequests/pullrequest_show.html:12
-#, python-format
-msgid "Pull request #%s"
-msgstr ""
-
-#: rhodecode/lib/helpers.py:664
-msgid "[deleted] repository"
-msgstr ""
-
-#: rhodecode/lib/helpers.py:666 rhodecode/lib/helpers.py:676
-msgid "[created] repository"
-msgstr ""
-
-#: rhodecode/lib/helpers.py:668
-msgid "[created] repository as fork"
-msgstr ""
-
-#: rhodecode/lib/helpers.py:670 rhodecode/lib/helpers.py:678
-msgid "[forked] repository"
-msgstr ""
-
-#: rhodecode/lib/helpers.py:672 rhodecode/lib/helpers.py:680
-msgid "[updated] repository"
-msgstr ""
-
-#: rhodecode/lib/helpers.py:674
-msgid "[delete] repository"
-msgstr ""
-
-#: rhodecode/lib/helpers.py:682
-msgid "[created] user"
-msgstr ""
-
 #: rhodecode/lib/helpers.py:684
-msgid "[updated] user"
-msgstr ""
-
-#: rhodecode/lib/helpers.py:686
-msgid "[created] users group"
-msgstr ""
-
-#: rhodecode/lib/helpers.py:688
-msgid "[updated] users group"
+#: rhodecode/templates/pullrequests/pullrequest_show.html:8
+#, python-format
+msgid "Pull request #%s"
 msgstr ""
 
 #: rhodecode/lib/helpers.py:690
-msgid "[commented] on revision in repository"
-msgstr ""
-
-#: rhodecode/lib/helpers.py:692
-msgid "[commented] on pull request for"
+msgid "[deleted] repository"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:692 rhodecode/lib/helpers.py:702
+msgid "[created] repository"
 msgstr ""
 
 #: rhodecode/lib/helpers.py:694
-msgid "[closed] pull request for"
-msgstr ""
-
-#: rhodecode/lib/helpers.py:696
-msgid "[pushed] into"
-msgstr ""
-
-#: rhodecode/lib/helpers.py:698
-msgid "[committed via RhodeCode] into repository"
+msgid "[created] repository as fork"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:696 rhodecode/lib/helpers.py:704
+msgid "[forked] repository"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:698 rhodecode/lib/helpers.py:706
+msgid "[updated] repository"
 msgstr ""
 
 #: rhodecode/lib/helpers.py:700
+msgid "[delete] repository"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:708
+msgid "[created] user"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:710
+msgid "[updated] user"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:712
+msgid "[created] user group"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:714
+msgid "[updated] user group"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:716
+msgid "[commented] on revision in repository"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:718
+msgid "[commented] on pull request for"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:720
+msgid "[closed] pull request for"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:722
+msgid "[pushed] into"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:724
+msgid "[committed via RhodeCode] into repository"
+msgstr ""
+
+#: rhodecode/lib/helpers.py:726
 msgid "[pulled from remote] into repository"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:702
+#: rhodecode/lib/helpers.py:728
 msgid "[pulled] from"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:704
+#: rhodecode/lib/helpers.py:730
 msgid "[started following] repository"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:706
+#: rhodecode/lib/helpers.py:732
 msgid "[stopped following] repository"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:883
+#: rhodecode/lib/helpers.py:910
 #, python-format
 msgid " and %s more"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:887
+#: rhodecode/lib/helpers.py:914
 msgid "No Files"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:1163
+#: rhodecode/lib/helpers.py:1198
 #, python-format
 msgid ""
 "%s repository is not mapped to db perhaps it was created or renamed from the "
 "filesystem please run the application again in order to rescan repositories"
 msgstr ""
 
-#: rhodecode/lib/utils2.py:403
+#: rhodecode/lib/unionrepo.py:193
+msgid "cannot create new union repository"
+msgstr ""
+
+#: rhodecode/lib/utils2.py:411
 #, python-format
 msgid "%d year"
 msgid_plural "%d years"
 msgstr[0] ""
 msgstr[1] ""
 
-#: rhodecode/lib/utils2.py:404
+#: rhodecode/lib/utils2.py:412
 #, python-format
 msgid "%d month"
 msgid_plural "%d months"
 msgstr[0] ""
 msgstr[1] ""
 
-#: rhodecode/lib/utils2.py:405
+#: rhodecode/lib/utils2.py:413
 #, python-format
 msgid "%d day"
 msgid_plural "%d days"
 msgstr[0] ""
 msgstr[1] ""
 
-#: rhodecode/lib/utils2.py:406
+#: rhodecode/lib/utils2.py:414
 #, python-format
 msgid "%d hour"
 msgid_plural "%d hours"
 msgstr[0] ""
 msgstr[1] ""
 
-#: rhodecode/lib/utils2.py:407
+#: rhodecode/lib/utils2.py:415
 #, python-format
 msgid "%d minute"
 msgid_plural "%d minutes"
 msgstr[0] ""
 msgstr[1] ""
 
-#: rhodecode/lib/utils2.py:408
+#: rhodecode/lib/utils2.py:416
 #, python-format
 msgid "%d second"
 msgid_plural "%d seconds"
 msgstr[0] ""
 msgstr[1] ""
 
-#: rhodecode/lib/utils2.py:424
+#: rhodecode/lib/utils2.py:432
 #, python-format
 msgid "in %s"
 msgstr ""
 
-#: rhodecode/lib/utils2.py:426
-#, python-format
-msgid "%s ago"
-msgstr ""
-
-#: rhodecode/lib/utils2.py:428
-#, python-format
-msgid "in %s and %s"
-msgstr ""
-
-#: rhodecode/lib/utils2.py:431
-#, python-format
-msgid "%s and %s ago"
-msgstr ""
-
 #: rhodecode/lib/utils2.py:434
+#, python-format
+msgid "%s ago"
+msgstr ""
+
+#: rhodecode/lib/utils2.py:436
+#, python-format
+msgid "in %s and %s"
+msgstr ""
+
+#: rhodecode/lib/utils2.py:439
+#, python-format
+msgid "%s and %s ago"
+msgstr ""
+
+#: rhodecode/lib/utils2.py:442
 msgid "just now"
 msgstr ""
 
-#: rhodecode/lib/celerylib/tasks.py:270
-msgid "password reset link"
-msgstr ""
-
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163 rhodecode/model/db.py:1183
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1183
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1289 rhodecode/model/db.py:1388
 msgid "Repository no access"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164 rhodecode/model/db.py:1184
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1184
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1290 rhodecode/model/db.py:1389
 msgid "Repository read access"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165 rhodecode/model/db.py:1185
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1185
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1291 rhodecode/model/db.py:1390
 msgid "Repository write access"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166 rhodecode/model/db.py:1186
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1186
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1292 rhodecode/model/db.py:1391
 msgid "Repository admin access"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168 rhodecode/model/db.py:1188
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1188
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1294
 msgid "Repositories Group no access"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169 rhodecode/model/db.py:1189
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1189
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1295
 msgid "Repositories Group read access"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170 rhodecode/model/db.py:1190
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1190
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1296
 msgid "Repositories Group write access"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171 rhodecode/model/db.py:1191
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1191
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1297
 msgid "Repositories Group admin access"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173 rhodecode/model/db.py:1193
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1193
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1299 rhodecode/model/db.py:1398
 msgid "RhodeCode Administrator"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174 rhodecode/model/db.py:1194
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1194
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1300 rhodecode/model/db.py:1399
 msgid "Repository creation disabled"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175 rhodecode/model/db.py:1195
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1195
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1301 rhodecode/model/db.py:1400
 msgid "Repository creation enabled"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176 rhodecode/model/db.py:1196
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1196
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1302 rhodecode/model/db.py:1401
 msgid "Repository forking disabled"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177 rhodecode/model/db.py:1197
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1197
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1303 rhodecode/model/db.py:1402
 msgid "Repository forking enabled"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178 rhodecode/model/db.py:1198
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1198
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1304 rhodecode/model/db.py:1403
 msgid "Register disabled"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179 rhodecode/model/db.py:1199
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1199
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1305 rhodecode/model/db.py:1404
 msgid "Register new user with RhodeCode with manual activation"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182 rhodecode/model/db.py:1202
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1202
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1308 rhodecode/model/db.py:1407
 msgid "Register new user with RhodeCode with auto activation"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623 rhodecode/model/db.py:1643
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1643
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1749 rhodecode/model/db.py:1838
 msgid "Not Reviewed"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624 rhodecode/model/db.py:1644
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1644
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1750 rhodecode/model/db.py:1839
 msgid "Approved"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625 rhodecode/model/db.py:1645
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1645
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1751 rhodecode/model/db.py:1840
 msgid "Rejected"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626 rhodecode/model/db.py:1646
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1646
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1752 rhodecode/model/db.py:1841
 msgid "Under Review"
 msgstr ""
 
-#: rhodecode/model/comment.py:110
+#: rhodecode/model/comment.py:75
 #, python-format
 msgid "on line %s"
 msgstr ""
 
-#: rhodecode/model/comment.py:173
+#: rhodecode/model/comment.py:219
 msgid "[Mention]"
 msgstr ""
 
+#: rhodecode/model/db.py:1252
+msgid "top level"
+msgstr ""
+
+#: rhodecode/model/db.py:1393
+msgid "Repository group no access"
+msgstr ""
+
+#: rhodecode/model/db.py:1394
+msgid "Repository group read access"
+msgstr ""
+
+#: rhodecode/model/db.py:1395
+msgid "Repository group write access"
+msgstr ""
+
+#: rhodecode/model/db.py:1396
+msgid "Repository group admin access"
+msgstr ""
+
 #: rhodecode/model/forms.py:43
 msgid "Please enter a login"
 msgstr ""
@@ -1066,204 +1200,237 @@
 msgid "Enter %(min)i characters or more"
 msgstr ""
 
-#: rhodecode/model/notification.py:220
-#, python-format
-msgid "commented on commit at %(when)s"
-msgstr ""
-
-#: rhodecode/model/notification.py:221
-#, python-format
-msgid "sent message at %(when)s"
-msgstr ""
-
-#: rhodecode/model/notification.py:222
-#, python-format
-msgid "mentioned you at %(when)s"
-msgstr ""
-
-#: rhodecode/model/notification.py:223
-#, python-format
-msgid "registered in RhodeCode at %(when)s"
-msgstr ""
-
 #: rhodecode/model/notification.py:224
 #, python-format
-msgid "opened new pull request at %(when)s"
+msgid "%(user)s commented on changeset at %(when)s"
 msgstr ""
 
 #: rhodecode/model/notification.py:225
 #, python-format
-msgid "commented on pull request at %(when)s"
-msgstr ""
-
-#: rhodecode/model/pull_request.py:90
+msgid "%(user)s sent message at %(when)s"
+msgstr ""
+
+#: rhodecode/model/notification.py:226
+#, python-format
+msgid "%(user)s mentioned you at %(when)s"
+msgstr ""
+
+#: rhodecode/model/notification.py:227
+#, python-format
+msgid "%(user)s registered in RhodeCode at %(when)s"
+msgstr ""
+
+#: rhodecode/model/notification.py:228
 #, python-format
-msgid "%(user)s wants you to review pull request #%(pr_id)s"
-msgstr ""
-
-#: rhodecode/model/scm.py:542
+msgid "%(user)s opened new pull request at %(when)s"
+msgstr ""
+
+#: rhodecode/model/notification.py:229
+#, python-format
+msgid "%(user)s commented on pull request at %(when)s"
+msgstr ""
+
+#: rhodecode/model/pull_request.py:104
+#, python-format
+msgid "%(user)s wants you to review pull request #%(pr_id)s: %(pr_title)s"
+msgstr ""
+
+#: rhodecode/model/scm.py:598
 msgid "latest tip"
 msgstr ""
 
 #: rhodecode/model/user.py:232
-msgid "new user registration"
+msgid "New user registration"
 msgstr ""
 
 #: rhodecode/model/user.py:257 rhodecode/model/user.py:281
+msgid "You can't Edit this user since it's crucial for entire application"
+msgstr ""
+
 #: rhodecode/model/user.py:303
-msgid "You can't Edit this user since it's crucial for entire application"
-msgstr ""
-
-#: rhodecode/model/user.py:327
 msgid "You can't remove this user since it's crucial for entire application"
 msgstr ""
 
-#: rhodecode/model/user.py:333
+#: rhodecode/model/user.py:309
 #, python-format
 msgid ""
 "user \"%s\" still owns %s repositories and cannot be removed. Switch owners "
 "or remove those repositories. %s"
 msgstr ""
 
-#: rhodecode/model/validators.py:36 rhodecode/model/validators.py:37
+#: rhodecode/model/user.py:334
+msgid "Password reset link"
+msgstr ""
+
+#: rhodecode/model/user.py:366
+msgid "Your new password"
+msgstr ""
+
+#: rhodecode/model/user.py:367
+#, python-format
+msgid "Your new RhodeCode password:%s"
+msgstr ""
+
+#: rhodecode/model/validators.py:38 rhodecode/model/validators.py:39
 msgid "Value cannot be an empty list"
 msgstr ""
 
-#: rhodecode/model/validators.py:83
-#, python-format
-msgid "Username \"%(username)s\" already exists"
-msgstr ""
-
 #: rhodecode/model/validators.py:85
 #, python-format
-msgid "Username \"%(username)s\" is forbidden"
+msgid "Username \"%(username)s\" already exists"
 msgstr ""
 
 #: rhodecode/model/validators.py:87
+#, python-format
+msgid "Username \"%(username)s\" is forbidden"
+msgstr ""
+
+#: rhodecode/model/validators.py:89
 msgid ""
 "Username may only contain alphanumeric characters underscores, periods or "
 "dashes and must begin with alphanumeric character"
 msgstr ""
 
-#: rhodecode/model/validators.py:115
+#: rhodecode/model/validators.py:117
 #, python-format
 msgid "Username %(username)s is not valid"
 msgstr ""
 
-#: rhodecode/model/validators.py:134
-msgid "Invalid users group name"
-msgstr ""
-
-#: rhodecode/model/validators.py:135
-#, python-format
-msgid "Users group \"%(usersgroup)s\" already exists"
+#: rhodecode/model/validators.py:136
+msgid "Invalid user group name"
 msgstr ""
 
 #: rhodecode/model/validators.py:137
+#, python-format
+msgid "User group \"%(usergroup)s\" already exists"
+msgstr ""
+
+#: rhodecode/model/validators.py:139
 msgid ""
-"users group name may only contain  alphanumeric characters underscores, "
-"periods or dashes and must begin with alphanumeric character"
-msgstr ""
-
-#: rhodecode/model/validators.py:175
+"user group name may only contain alphanumeric characters underscores, periods"
+" or dashes and must begin with alphanumeric character"
+msgstr ""
+
+#: rhodecode/model/validators.py:177
 msgid "Cannot assign this group as parent"
 msgstr ""
 
-#: rhodecode/model/validators.py:176
-#, python-format
-msgid "Group \"%(group_name)s\" already exists"
-msgstr ""
-
 #: rhodecode/model/validators.py:178
 #, python-format
+msgid "Group \"%(group_name)s\" already exists"
+msgstr ""
+
+#: rhodecode/model/validators.py:180
+#, python-format
 msgid "Repository with name \"%(group_name)s\" already exists"
 msgstr ""
 
-#: rhodecode/model/validators.py:236
+#: rhodecode/model/validators.py:238
 msgid "Invalid characters (non-ascii) in password"
 msgstr ""
 
-#: rhodecode/model/validators.py:251
+#: rhodecode/model/validators.py:253
 msgid "Passwords do not match"
 msgstr ""
 
-#: rhodecode/model/validators.py:268
-msgid "invalid password"
-msgstr ""
-
-#: rhodecode/model/validators.py:269
-msgid "invalid user name"
-msgstr ""
-
 #: rhodecode/model/validators.py:270
+msgid "invalid password"
+msgstr ""
+
+#: rhodecode/model/validators.py:271
+msgid "invalid user name"
+msgstr ""
+
+#: rhodecode/model/validators.py:272
 msgid "Your account is disabled"
 msgstr ""
 
-#: rhodecode/model/validators.py:314
-#, python-format
-msgid "Repository name %(repo)s is disallowed"
-msgstr ""
-
 #: rhodecode/model/validators.py:316
 #, python-format
+msgid "Repository name %(repo)s is disallowed"
+msgstr ""
+
+#: rhodecode/model/validators.py:318
+#, python-format
 msgid "Repository named %(repo)s already exists"
 msgstr ""
 
-#: rhodecode/model/validators.py:317
-#, python-format
-msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\""
-msgstr ""
-
 #: rhodecode/model/validators.py:319
 #, python-format
-msgid "Repositories group with name \"%(repo)s\" already exists"
-msgstr ""
-
-#: rhodecode/model/validators.py:432
+msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\""
+msgstr ""
+
+#: rhodecode/model/validators.py:321
+#, python-format
+msgid "Repository group with name \"%(repo)s\" already exists"
+msgstr ""
+
+#: rhodecode/model/validators.py:438
 msgid "invalid clone url"
 msgstr ""
 
-#: rhodecode/model/validators.py:433
+#: rhodecode/model/validators.py:439
 msgid "Invalid clone url, provide a valid clone http(s)/svn+http(s) url"
 msgstr ""
 
-#: rhodecode/model/validators.py:458
+#: rhodecode/model/validators.py:464
 msgid "Fork have to be the same type as parent"
 msgstr ""
 
-#: rhodecode/model/validators.py:473
+#: rhodecode/model/validators.py:479
 msgid "You don't have permissions to create repository in this group"
 msgstr ""
 
-#: rhodecode/model/validators.py:498
-msgid "This username or users group name is not valid"
-msgstr ""
-
-#: rhodecode/model/validators.py:591
+#: rhodecode/model/validators.py:481
+msgid "no permission to create repository in root location"
+msgstr ""
+
+#: rhodecode/model/validators.py:518
+msgid "You don't have permissions to create a group in this location"
+msgstr ""
+
+#: rhodecode/model/validators.py:557
+msgid "This username or user group name is not valid"
+msgstr ""
+
+#: rhodecode/model/validators.py:650
 msgid "This is not a valid path"
 msgstr ""
 
-#: rhodecode/model/validators.py:606
+#: rhodecode/model/validators.py:665
 msgid "This e-mail address is already taken"
 msgstr ""
 
-#: rhodecode/model/validators.py:626
+#: rhodecode/model/validators.py:685
 #, python-format
 msgid "e-mail \"%(email)s\" does not exist."
 msgstr ""
 
-#: rhodecode/model/validators.py:663
+#: rhodecode/model/validators.py:722
 msgid ""
 "The LDAP Login attribute of the CN must be specified - this is the name of "
 "the attribute that is equivalent to \"username\""
 msgstr ""
 
-#: rhodecode/model/validators.py:682
+#: rhodecode/model/validators.py:735
 #, python-format
 msgid "Revisions %(revs)s are already part of pull request or have set status"
 msgstr ""
 
-#: rhodecode/templates/index.html:3
+#: rhodecode/model/validators.py:767
+msgid "Please enter a valid IPv4 or IpV6 address"
+msgstr ""
+
+#: rhodecode/model/validators.py:768
+#, python-format
+msgid "The network size (bits) must be within the range of 0-32 (not %(bits)r)"
+msgstr ""
+
+#: rhodecode/model/validators.py:800
+msgid "Key name can only consist of letters, underscore, dash or numbers"
+msgstr ""
+
+#: rhodecode/templates/index.html:5
 msgid "Dashboard"
 msgstr ""
 
@@ -1272,191 +1439,211 @@
 #: rhodecode/templates/admin/repos/repos.html:9
 #: rhodecode/templates/admin/users/user_edit_my_account.html:31
 #: rhodecode/templates/admin/users/users.html:9
-#: rhodecode/templates/bookmarks/bookmarks.html:10
+#: rhodecode/templates/bookmarks/bookmarks.html:9
 #: rhodecode/templates/branches/branches.html:9
 #: rhodecode/templates/journal/journal.html:9
-#: rhodecode/templates/journal/journal.html:48
-#: rhodecode/templates/tags/tags.html:10
+#: rhodecode/templates/journal/journal.html:46
+#: rhodecode/templates/journal/journal.html:47 rhodecode/templates/tags/tags.html:9
 msgid "quick filter..."
 msgstr ""
 
 #: rhodecode/templates/index_base.html:6
 #: rhodecode/templates/admin/repos/repos.html:9
-#: rhodecode/templates/base/base.html:233
 msgid "repositories"
 msgstr ""
 
-#: rhodecode/templates/index_base.html:13 rhodecode/templates/index_base.html:15
+#: rhodecode/templates/index_base.html:13 rhodecode/templates/index_base.html:18
+#: rhodecode/templates/admin/repos/repo_add.html:5
 #: rhodecode/templates/admin/repos/repos.html:21
-msgid "ADD REPOSITORY"
-msgstr ""
-
-#: rhodecode/templates/index_base.html:29 rhodecode/templates/index_base.html:136
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:32
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:32
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:33
+msgid "Add repository"
+msgstr ""
+
+#: rhodecode/templates/index_base.html:15 rhodecode/templates/index_base.html:20
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:31
+msgid "Add group"
+msgstr ""
+
+#: rhodecode/templates/index_base.html:27
+msgid "Edit group"
+msgstr ""
+
+#: rhodecode/templates/index_base.html:27
+msgid "You have admin right to this group, and can edit it"
+msgstr ""
+
+#: rhodecode/templates/index_base.html:40 rhodecode/templates/index_base.html:140
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:33
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:38
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:43
 #: rhodecode/templates/admin/users_groups/users_group_add.html:32
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:33
+#: rhodecode/templates/admin/users_groups/users_groups.html:34
 msgid "Group name"
 msgstr ""
 
-#: rhodecode/templates/index_base.html:30 rhodecode/templates/index_base.html:72
-#: rhodecode/templates/index_base.html:138 rhodecode/templates/index_base.html:176
-#: rhodecode/templates/index_base.html:266
+#: rhodecode/templates/index_base.html:41 rhodecode/templates/index_base.html:83
+#: rhodecode/templates/index_base.html:142 rhodecode/templates/index_base.html:180
+#: rhodecode/templates/index_base.html:270
 #: rhodecode/templates/admin/repos/repo_add_base.html:56
 #: rhodecode/templates/admin/repos/repo_edit.html:75
-#: rhodecode/templates/admin/repos/repos.html:72
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:41
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:41
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:34
-#: rhodecode/templates/forks/fork.html:59
-#: rhodecode/templates/settings/repo_settings.html:66
-#: rhodecode/templates/summary/summary.html:114
+#: rhodecode/templates/admin/repos/repos.html:73
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:42
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:47
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:44
+#: rhodecode/templates/forks/fork.html:56
+#: rhodecode/templates/pullrequests/pullrequest.html:101
+#: rhodecode/templates/summary/summary.html:106
 msgid "Description"
 msgstr ""
 
-#: rhodecode/templates/index_base.html:40
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:47
-msgid "Repositories group"
-msgstr ""
-
-#: rhodecode/templates/index_base.html:71 rhodecode/templates/index_base.html:174
-#: rhodecode/templates/index_base.html:264
+#: rhodecode/templates/index_base.html:51
+#: rhodecode/templates/admin/permissions/permissions.html:55
+#: rhodecode/templates/admin/repos/repo_add_base.html:29
+#: rhodecode/templates/admin/repos/repo_edit.html:49
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:57
+#: rhodecode/templates/forks/fork.html:47
+msgid "Repository group"
+msgstr ""
+
+#: rhodecode/templates/index_base.html:82 rhodecode/templates/index_base.html:178
+#: rhodecode/templates/index_base.html:268
 #: rhodecode/templates/admin/repos/repo_add_base.html:9
 #: rhodecode/templates/admin/repos/repo_edit.html:32
-#: rhodecode/templates/admin/repos/repos.html:70
-#: rhodecode/templates/admin/users/user_edit.html:196
-#: rhodecode/templates/admin/users/user_edit_my_account.html:59
-#: rhodecode/templates/admin/users/user_edit_my_account.html:180
-#: rhodecode/templates/admin/users/user_edit_my_account.html:216
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:6
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:184
-#: rhodecode/templates/bookmarks/bookmarks.html:36
+#: rhodecode/templates/admin/repos/repos.html:71
+#: rhodecode/templates/admin/users/user_edit_my_account.html:172
+#: rhodecode/templates/base/perms_summary.html:14
+#: rhodecode/templates/bookmarks/bookmarks.html:34
 #: rhodecode/templates/bookmarks/bookmarks_data.html:6
-#: rhodecode/templates/branches/branches.html:50
+#: rhodecode/templates/branches/branches.html:47
 #: rhodecode/templates/branches/branches_data.html:6
 #: rhodecode/templates/files/files_browser.html:47
-#: rhodecode/templates/journal/journal.html:70
-#: rhodecode/templates/journal/journal.html:196
-#: rhodecode/templates/journal/journal_page_repos.html:7
-#: rhodecode/templates/settings/repo_settings.html:31
-#: rhodecode/templates/summary/summary.html:43
-#: rhodecode/templates/summary/summary.html:132
-#: rhodecode/templates/tags/tags.html:51 rhodecode/templates/tags/tags_data.html:6
+#: rhodecode/templates/journal/journal.html:193
+#: rhodecode/templates/journal/journal.html:296
+#: rhodecode/templates/summary/summary.html:55
+#: rhodecode/templates/summary/summary.html:124
+#: rhodecode/templates/tags/tags.html:48 rhodecode/templates/tags/tags_data.html:6
 msgid "Name"
 msgstr ""
 
-#: rhodecode/templates/index_base.html:73
+#: rhodecode/templates/index_base.html:84
 msgid "Last change"
 msgstr ""
 
-#: rhodecode/templates/index_base.html:74 rhodecode/templates/index_base.html:179
-#: rhodecode/templates/admin/users/user_edit_my_account.html:182
-#: rhodecode/templates/journal/journal.html:198
+#: rhodecode/templates/index_base.html:85 rhodecode/templates/index_base.html:183
+#: rhodecode/templates/index_base.html:273
+#: rhodecode/templates/admin/repos/repos.html:74
+#: rhodecode/templates/admin/users/user_edit_my_account.html:174
+#: rhodecode/templates/journal/journal.html:195
+#: rhodecode/templates/journal/journal.html:298
 msgid "Tip"
 msgstr ""
 
-#: rhodecode/templates/index_base.html:75 rhodecode/templates/index_base.html:181
-#: rhodecode/templates/index_base.html:269
+#: rhodecode/templates/index_base.html:86 rhodecode/templates/index_base.html:185
+#: rhodecode/templates/index_base.html:275
 #: rhodecode/templates/admin/repos/repo_edit.html:121
-#: rhodecode/templates/admin/repos/repos.html:73
+#: rhodecode/templates/admin/repos/repos.html:76
 msgid "Owner"
 msgstr ""
 
-#: rhodecode/templates/index_base.html:76
-#: rhodecode/templates/summary/summary.html:48
-#: rhodecode/templates/summary/summary.html:51
-msgid "RSS"
-msgstr ""
-
-#: rhodecode/templates/index_base.html:77
+#: rhodecode/templates/index_base.html:87
 msgid "Atom"
 msgstr ""
 
-#: rhodecode/templates/index_base.html:167 rhodecode/templates/index_base.html:207
-#: rhodecode/templates/index_base.html:291
-#: rhodecode/templates/admin/repos/repos.html:94
-#: rhodecode/templates/admin/users/user_edit_my_account.html:202
+#: rhodecode/templates/index_base.html:171 rhodecode/templates/index_base.html:209
+#: rhodecode/templates/index_base.html:296
+#: rhodecode/templates/admin/repos/repos.html:97
+#: rhodecode/templates/admin/users/user_edit_my_account.html:196
 #: rhodecode/templates/admin/users/users.html:107
-#: rhodecode/templates/bookmarks/bookmarks.html:60
-#: rhodecode/templates/branches/branches.html:76
-#: rhodecode/templates/journal/journal.html:221
-#: rhodecode/templates/tags/tags.html:77
+#: rhodecode/templates/bookmarks/bookmarks.html:58
+#: rhodecode/templates/branches/branches.html:73
+#: rhodecode/templates/journal/journal.html:217
+#: rhodecode/templates/journal/journal.html:320
+#: rhodecode/templates/tags/tags.html:74
 msgid "Click to sort ascending"
 msgstr ""
 
-#: rhodecode/templates/index_base.html:168 rhodecode/templates/index_base.html:208
-#: rhodecode/templates/index_base.html:292
-#: rhodecode/templates/admin/repos/repos.html:95
-#: rhodecode/templates/admin/users/user_edit_my_account.html:203
+#: rhodecode/templates/index_base.html:172 rhodecode/templates/index_base.html:210
+#: rhodecode/templates/index_base.html:297
+#: rhodecode/templates/admin/repos/repos.html:98
+#: rhodecode/templates/admin/users/user_edit_my_account.html:197
 #: rhodecode/templates/admin/users/users.html:108
-#: rhodecode/templates/bookmarks/bookmarks.html:61
-#: rhodecode/templates/branches/branches.html:77
-#: rhodecode/templates/journal/journal.html:222
-#: rhodecode/templates/tags/tags.html:78
+#: rhodecode/templates/bookmarks/bookmarks.html:59
+#: rhodecode/templates/branches/branches.html:74
+#: rhodecode/templates/journal/journal.html:218
+#: rhodecode/templates/journal/journal.html:321
+#: rhodecode/templates/tags/tags.html:75
 msgid "Click to sort descending"
 msgstr ""
 
-#: rhodecode/templates/index_base.html:177 rhodecode/templates/index_base.html:267
+#: rhodecode/templates/index_base.html:181 rhodecode/templates/index_base.html:271
 msgid "Last Change"
 msgstr ""
 
-#: rhodecode/templates/index_base.html:209 rhodecode/templates/index_base.html:293
-#: rhodecode/templates/admin/repos/repos.html:96
-#: rhodecode/templates/admin/users/user_edit_my_account.html:204
+#: rhodecode/templates/index_base.html:211
+#: rhodecode/templates/admin/repos/repos.html:99
+#: rhodecode/templates/admin/users/user_edit_my_account.html:198
 #: rhodecode/templates/admin/users/users.html:109
-#: rhodecode/templates/bookmarks/bookmarks.html:62
-#: rhodecode/templates/branches/branches.html:78
-#: rhodecode/templates/journal/journal.html:223
-#: rhodecode/templates/tags/tags.html:79
+#: rhodecode/templates/bookmarks/bookmarks.html:60
+#: rhodecode/templates/branches/branches.html:75
+#: rhodecode/templates/journal/journal.html:219
+#: rhodecode/templates/journal/journal.html:322
+#: rhodecode/templates/tags/tags.html:76
 msgid "No records found."
 msgstr ""
 
-#: rhodecode/templates/index_base.html:210 rhodecode/templates/index_base.html:294
-#: rhodecode/templates/admin/repos/repos.html:97
-#: rhodecode/templates/admin/users/user_edit_my_account.html:205
+#: rhodecode/templates/index_base.html:212 rhodecode/templates/index_base.html:299
+#: rhodecode/templates/admin/repos/repos.html:100
+#: rhodecode/templates/admin/users/user_edit_my_account.html:199
 #: rhodecode/templates/admin/users/users.html:110
-#: rhodecode/templates/bookmarks/bookmarks.html:63
-#: rhodecode/templates/branches/branches.html:79
-#: rhodecode/templates/journal/journal.html:224
-#: rhodecode/templates/tags/tags.html:80
+#: rhodecode/templates/bookmarks/bookmarks.html:61
+#: rhodecode/templates/branches/branches.html:76
+#: rhodecode/templates/journal/journal.html:220
+#: rhodecode/templates/journal/journal.html:323
+#: rhodecode/templates/tags/tags.html:77
 msgid "Data error."
 msgstr ""
 
-#: rhodecode/templates/index_base.html:211 rhodecode/templates/index_base.html:295
-#: rhodecode/templates/admin/repos/repos.html:98
-#: rhodecode/templates/admin/users/user_edit_my_account.html:206
+#: rhodecode/templates/index_base.html:213 rhodecode/templates/index_base.html:300
+#: rhodecode/templates/admin/repos/repos.html:101
+#: rhodecode/templates/admin/users/user_edit_my_account.html:58
+#: rhodecode/templates/admin/users/user_edit_my_account.html:200
 #: rhodecode/templates/admin/users/users.html:111
-#: rhodecode/templates/bookmarks/bookmarks.html:64
-#: rhodecode/templates/branches/branches.html:80
-#: rhodecode/templates/journal/journal.html:62
-#: rhodecode/templates/journal/journal.html:225
-#: rhodecode/templates/tags/tags.html:81
+#: rhodecode/templates/bookmarks/bookmarks.html:62
+#: rhodecode/templates/branches/branches.html:77
+#: rhodecode/templates/journal/journal.html:221
+#: rhodecode/templates/journal/journal.html:324
+#: rhodecode/templates/tags/tags.html:78
 msgid "Loading..."
 msgstr ""
 
-#: rhodecode/templates/login.html:5 rhodecode/templates/login.html:54
-msgid "Sign In"
+#: rhodecode/templates/index_base.html:298
+msgid "No repositories found."
+msgstr ""
+
+#: rhodecode/templates/login.html:5 rhodecode/templates/base/base.html:227
+msgid "Log In"
 msgstr ""
 
 #: rhodecode/templates/login.html:21
-msgid "Sign In to"
+#, python-format
+msgid "Log In to %s"
 msgstr ""
 
 #: rhodecode/templates/login.html:31 rhodecode/templates/register.html:20
 #: rhodecode/templates/admin/admin_log.html:5
 #: rhodecode/templates/admin/users/user_add.html:32
-#: rhodecode/templates/admin/users/user_edit.html:50
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:26
-#: rhodecode/templates/base/base.html:83
-#: rhodecode/templates/summary/summary.html:131
+#: rhodecode/templates/admin/users/user_edit.html:57
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:31
+#: rhodecode/templates/admin/users/users.html:77
+#: rhodecode/templates/base/base.html:203
+#: rhodecode/templates/summary/summary.html:123
 msgid "Username"
 msgstr ""
 
 #: rhodecode/templates/login.html:40 rhodecode/templates/register.html:29
 #: rhodecode/templates/admin/ldap/ldap.html:46
 #: rhodecode/templates/admin/users/user_add.html:41
-#: rhodecode/templates/base/base.html:92
+#: rhodecode/templates/base/base.html:212
 msgid "Password"
 msgstr ""
 
@@ -1464,16 +1651,20 @@
 msgid "Remember me"
 msgstr ""
 
+#: rhodecode/templates/login.html:54
+msgid "Sign In"
+msgstr ""
+
 #: rhodecode/templates/login.html:60
 msgid "Forgot your password ?"
 msgstr ""
 
-#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:103
+#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:223
 msgid "Don't have an account ?"
 msgstr ""
 
 #: rhodecode/templates/password_reset.html:5
-msgid "Reset your password"
+msgid "Password Reset"
 msgstr ""
 
 #: rhodecode/templates/password_reset.html:11
@@ -1506,23 +1697,23 @@
 
 #: rhodecode/templates/register.html:47
 #: rhodecode/templates/admin/users/user_add.html:59
-#: rhodecode/templates/admin/users/user_edit.html:90
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:53
+#: rhodecode/templates/admin/users/user_edit.html:97
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:62
 msgid "First Name"
 msgstr ""
 
 #: rhodecode/templates/register.html:56
 #: rhodecode/templates/admin/users/user_add.html:68
-#: rhodecode/templates/admin/users/user_edit.html:99
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:62
+#: rhodecode/templates/admin/users/user_edit.html:106
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:71
 msgid "Last Name"
 msgstr ""
 
 #: rhodecode/templates/register.html:65
 #: rhodecode/templates/admin/users/user_add.html:77
-#: rhodecode/templates/admin/users/user_edit.html:108
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:71
-#: rhodecode/templates/summary/summary.html:133
+#: rhodecode/templates/admin/users/user_edit.html:115
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:80
+#: rhodecode/templates/summary/summary.html:125
 msgid "Email"
 msgstr ""
 
@@ -1534,50 +1725,38 @@
 msgid "Your account must wait for activation by administrator"
 msgstr ""
 
-#: rhodecode/templates/repo_switcher_list.html:11
+#: rhodecode/templates/repo_switcher_list.html:10
 #: rhodecode/templates/admin/defaults/defaults.html:44
 #: rhodecode/templates/admin/repos/repo_add_base.html:65
 #: rhodecode/templates/admin/repos/repo_edit.html:85
-#: rhodecode/templates/settings/repo_settings.html:76
+#: rhodecode/templates/data_table/_dt_elements.html:61
+#: rhodecode/templates/summary/summary.html:77
 msgid "Private repository"
 msgstr ""
 
-#: rhodecode/templates/repo_switcher_list.html:16
+#: rhodecode/templates/repo_switcher_list.html:12
+#: rhodecode/templates/data_table/_dt_elements.html:63
+#: rhodecode/templates/summary/summary.html:79
 msgid "Public repository"
 msgstr ""
 
-#: rhodecode/templates/switch_to_list.html:3
-#: rhodecode/templates/branches/branches.html:14
-msgid "branches"
-msgstr ""
-
 #: rhodecode/templates/switch_to_list.html:10
 #: rhodecode/templates/branches/branches_data.html:57
 msgid "There are no branches yet"
 msgstr ""
 
-#: rhodecode/templates/switch_to_list.html:15
-#: rhodecode/templates/shortlog/shortlog_data.html:10
-#: rhodecode/templates/tags/tags.html:15
-msgid "tags"
-msgstr ""
-
 #: rhodecode/templates/switch_to_list.html:22
 #: rhodecode/templates/tags/tags_data.html:38
 msgid "There are no tags yet"
 msgstr ""
 
-#: rhodecode/templates/switch_to_list.html:28
-#: rhodecode/templates/bookmarks/bookmarks.html:15
-msgid "bookmarks"
-msgstr ""
-
 #: rhodecode/templates/switch_to_list.html:35
 #: rhodecode/templates/bookmarks/bookmarks_data.html:32
 msgid "There are no bookmarks yet"
 msgstr ""
 
 #: rhodecode/templates/admin/admin.html:5 rhodecode/templates/admin/admin.html:13
+#: rhodecode/templates/base/base.html:68
 msgid "Admin journal"
 msgstr ""
 
@@ -1599,11 +1778,13 @@
 msgstr[1] ""
 
 #: rhodecode/templates/admin/admin_log.html:6
-#: rhodecode/templates/admin/repos/repos.html:74
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:8
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:9
-#: rhodecode/templates/journal/journal_page_repos.html:9
-#: rhodecode/templates/journal/journal_page_repos.html:10
+#: rhodecode/templates/admin/repos/repos.html:77
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46
+#: rhodecode/templates/admin/users/user_edit_my_account.html:176
+#: rhodecode/templates/admin/users/users.html:87
+#: rhodecode/templates/admin/users_groups/users_groups.html:37
+#: rhodecode/templates/journal/journal.html:197
+#: rhodecode/templates/journal/journal.html:300
 msgid "Action"
 msgstr ""
 
@@ -1613,11 +1794,11 @@
 msgstr ""
 
 #: rhodecode/templates/admin/admin_log.html:8
-#: rhodecode/templates/bookmarks/bookmarks.html:37
+#: rhodecode/templates/bookmarks/bookmarks.html:35
 #: rhodecode/templates/bookmarks/bookmarks_data.html:7
-#: rhodecode/templates/branches/branches.html:51
+#: rhodecode/templates/branches/branches.html:48
 #: rhodecode/templates/branches/branches_data.html:7
-#: rhodecode/templates/tags/tags.html:52 rhodecode/templates/tags/tags_data.html:7
+#: rhodecode/templates/tags/tags.html:49 rhodecode/templates/tags/tags_data.html:7
 msgid "Date"
 msgstr ""
 
@@ -1635,6 +1816,7 @@
 msgstr ""
 
 #: rhodecode/templates/admin/defaults/defaults.html:11
+#: rhodecode/templates/base/base.html:75
 msgid "Defaults"
 msgstr ""
 
@@ -1647,8 +1829,7 @@
 #: rhodecode/templates/admin/defaults/defaults.html:48
 #: rhodecode/templates/admin/repos/repo_add_base.html:69
 #: rhodecode/templates/admin/repos/repo_edit.html:89
-#: rhodecode/templates/forks/fork.html:72
-#: rhodecode/templates/settings/repo_settings.html:80
+#: rhodecode/templates/forks/fork.html:69
 msgid ""
 "Private repositories are only visible to people explicitly added as "
 "collaborators."
@@ -1676,7 +1857,7 @@
 
 #: rhodecode/templates/admin/defaults/defaults.html:75
 #: rhodecode/templates/admin/repos/repo_edit.html:112
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:66
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:72
 msgid "Enable locking"
 msgstr ""
 
@@ -1687,14 +1868,18 @@
 
 #: rhodecode/templates/admin/defaults/defaults.html:84
 #: rhodecode/templates/admin/ldap/ldap.html:89
-#: rhodecode/templates/admin/repos/repo_edit.html:141
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:74
+#: rhodecode/templates/admin/permissions/permissions.html:92
+#: rhodecode/templates/admin/repos/repo_edit.html:148
+#: rhodecode/templates/admin/repos/repo_edit.html:173
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:80
 #: rhodecode/templates/admin/settings/hooks.html:73
-#: rhodecode/templates/admin/users/user_edit.html:133
-#: rhodecode/templates/admin/users/user_edit.html:178
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:79
+#: rhodecode/templates/admin/users/user_add.html:94
+#: rhodecode/templates/admin/users/user_edit.html:140
+#: rhodecode/templates/admin/users/user_edit.html:185
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:88
+#: rhodecode/templates/admin/users_groups/users_group_add.html:49
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:90
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:135
-#: rhodecode/templates/settings/repo_settings.html:94
 msgid "Save"
 msgstr ""
 
@@ -1703,7 +1888,9 @@
 msgstr ""
 
 #: rhodecode/templates/admin/ldap/ldap.html:11
-msgid "Ldap"
+#: rhodecode/templates/admin/users/users.html:86
+#: rhodecode/templates/base/base.html:74
+msgid "LDAP"
 msgstr ""
 
 #: rhodecode/templates/admin/ldap/ldap.html:28
@@ -1784,7 +1971,7 @@
 msgstr ""
 
 #: rhodecode/templates/admin/notifications/notifications.html:31
-#: rhodecode/templates/base/base.html:267 rhodecode/templates/base/base.html:269
+#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8
 msgid "Pull requests"
 msgstr ""
 
@@ -1802,6 +1989,7 @@
 msgstr ""
 
 #: rhodecode/templates/admin/notifications/show_notification.html:9
+#: rhodecode/templates/base/base.html:241
 msgid "Notifications"
 msgstr ""
 
@@ -1810,11 +1998,12 @@
 msgstr ""
 
 #: rhodecode/templates/admin/permissions/permissions.html:11
-#: rhodecode/templates/admin/repos/repo_edit.html:134
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:58
-#: rhodecode/templates/admin/users/user_edit.html:143
+#: rhodecode/templates/admin/repos/repo_edit.html:158
+#: rhodecode/templates/admin/repos/repo_edit.html:165
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:64
+#: rhodecode/templates/admin/users/user_edit.html:150
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:100
-#: rhodecode/templates/settings/repo_settings.html:86
+#: rhodecode/templates/base/base.html:73
 msgid "Permissions"
 msgstr ""
 
@@ -1828,30 +2017,21 @@
 
 #: rhodecode/templates/admin/permissions/permissions.html:49
 msgid ""
-"All default permissions on each repository will be reset to choosen "
+"All default permissions on each repository will be reset to chosen "
 "permission, note that all custom default permission on repositories will be "
 "lost"
 msgstr ""
 
 #: rhodecode/templates/admin/permissions/permissions.html:50
 #: rhodecode/templates/admin/permissions/permissions.html:63
-msgid "overwrite existing settings"
-msgstr ""
-
-#: rhodecode/templates/admin/permissions/permissions.html:55
-#: rhodecode/templates/admin/repos/repo_add_base.html:29
-#: rhodecode/templates/admin/repos/repo_edit.html:49
-#: rhodecode/templates/admin/repos_groups/repos_groups.html:4
-#: rhodecode/templates/forks/fork.html:50
-#: rhodecode/templates/settings/repo_settings.html:48
-msgid "Repository group"
+msgid "Overwrite existing settings"
 msgstr ""
 
 #: rhodecode/templates/admin/permissions/permissions.html:62
 msgid ""
-"All default permissions on each repository group will be reset to choosen "
-"permission, note that all custom default permission on repositories group "
-"will be lost"
+"All default permissions on each repository group will be reset to chosen "
+"permission, note that all custom default permission on repository groups will"
+" be lost"
 msgstr ""
 
 #: rhodecode/templates/admin/permissions/permissions.html:69
@@ -1866,40 +2046,95 @@
 msgid "Repository forking"
 msgstr ""
 
-#: rhodecode/templates/admin/permissions/permissions.html:92
-#: rhodecode/templates/admin/repos/repo_edit.html:264
-msgid "set"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_add.html:5
-#: rhodecode/templates/admin/repos/repo_add_create_repository.html:5
-msgid "Add repository"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_add.html:11
-#: rhodecode/templates/admin/repos/repo_edit.html:11
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:10
+#: rhodecode/templates/admin/permissions/permissions.html:93
+#: rhodecode/templates/admin/permissions/permissions.html:154
+#: rhodecode/templates/admin/repos/repo_edit.html:149
+#: rhodecode/templates/admin/repos/repo_edit.html:174
+#: rhodecode/templates/admin/repos/repo_edit.html:388
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:81
+#: rhodecode/templates/admin/settings/settings.html:115
+#: rhodecode/templates/admin/settings/settings.html:187
+#: rhodecode/templates/admin/settings/settings.html:278
+#: rhodecode/templates/admin/users/user_edit.html:141
+#: rhodecode/templates/admin/users/user_edit.html:186
+#: rhodecode/templates/admin/users/user_edit.html:235
+#: rhodecode/templates/admin/users/user_edit.html:283
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:89
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:136
+#: rhodecode/templates/files/files_add.html:80
+#: rhodecode/templates/files/files_edit.html:66
+#: rhodecode/templates/pullrequests/pullrequest.html:110
+msgid "Reset"
+msgstr ""
+
+#: rhodecode/templates/admin/permissions/permissions.html:103
+msgid "Default User Permissions"
+msgstr ""
+
+#: rhodecode/templates/admin/permissions/permissions.html:113
+#: rhodecode/templates/admin/users/user_edit.html:244
+msgid "Allowed IP addresses"
+msgstr ""
+
+#: rhodecode/templates/admin/permissions/permissions.html:127
+#: rhodecode/templates/admin/repos/repo_edit.html:347
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:70
+#: rhodecode/templates/admin/users/user_edit.html:212
+#: rhodecode/templates/admin/users/user_edit.html:257
+#: rhodecode/templates/admin/users_groups/users_groups.html:46
+#: rhodecode/templates/data_table/_dt_elements.html:122
+#: rhodecode/templates/data_table/_dt_elements.html:130
+msgid "delete"
+msgstr ""
+
+#: rhodecode/templates/admin/permissions/permissions.html:128
+#: rhodecode/templates/admin/users/user_edit.html:258
+#, python-format
+msgid "Confirm to delete this ip: %s"
+msgstr ""
+
+#: rhodecode/templates/admin/permissions/permissions.html:134
+#: rhodecode/templates/admin/users/user_edit.html:264
+msgid "All IP addresses are allowed"
+msgstr ""
+
+#: rhodecode/templates/admin/permissions/permissions.html:145
+#: rhodecode/templates/admin/users/user_edit.html:275
+msgid "New ip address"
+msgstr ""
+
+#: rhodecode/templates/admin/permissions/permissions.html:153
+#: rhodecode/templates/admin/repos/repo_add_base.html:73
+#: rhodecode/templates/admin/repos/repo_edit.html:387
+#: rhodecode/templates/admin/users/user_edit.html:234
+#: rhodecode/templates/admin/users/user_edit.html:282
+msgid "Add"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_add.html:12
+#: rhodecode/templates/admin/repos/repo_add.html:16
+#: rhodecode/templates/base/base.html:69 rhodecode/templates/base/base.html:103
+#: rhodecode/templates/base/base.html:263
 msgid "Repositories"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_add.html:13
-msgid "add new"
+#: rhodecode/templates/admin/repos/repo_add.html:19
+msgid "Add new"
 msgstr ""
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:20
-#: rhodecode/templates/summary/summary.html:104
-#: rhodecode/templates/summary/summary.html:105
+#: rhodecode/templates/summary/summary.html:96
+#: rhodecode/templates/summary/summary.html:97
 msgid "Clone from"
 msgstr ""
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:24
 #: rhodecode/templates/admin/repos/repo_edit.html:44
-#: rhodecode/templates/settings/repo_settings.html:43
 msgid "Optional http[s] url from which repository should be cloned."
 msgstr ""
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:33
-#: rhodecode/templates/forks/fork.html:54
+#: rhodecode/templates/forks/fork.html:51
 msgid "Optionaly select a group to put this repository into."
 msgstr ""
 
@@ -1909,57 +2144,39 @@
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:47
 #: rhodecode/templates/admin/repos/repo_edit.html:66
-#: rhodecode/templates/forks/fork.html:41
-#: rhodecode/templates/settings/repo_settings.html:57
+#: rhodecode/templates/forks/fork.html:38
 msgid "Landing revision"
 msgstr ""
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:51
 #: rhodecode/templates/admin/repos/repo_edit.html:70
-#: rhodecode/templates/forks/fork.html:45
-#: rhodecode/templates/settings/repo_settings.html:61
+#: rhodecode/templates/forks/fork.html:42
 msgid "Default revision for files page, downloads, whoosh and readme"
 msgstr ""
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:60
 #: rhodecode/templates/admin/repos/repo_edit.html:79
-#: rhodecode/templates/forks/fork.html:63
-#: rhodecode/templates/settings/repo_settings.html:70
+#: rhodecode/templates/forks/fork.html:60
 msgid "Keep it short and to the point. Use a README file for longer descriptions."
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_add_base.html:73
-msgid "add"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_add_create_repository.html:9
-msgid "add new repository"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:5
+#: rhodecode/templates/admin/repos/repo_edit.html:8
 msgid "Edit repository"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:13
-#: rhodecode/templates/admin/users/user_edit.html:13
-#: rhodecode/templates/admin/users/user_edit.html:228
-#: rhodecode/templates/admin/users/user_edit.html:230
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:28
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:13
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:207
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:209
-#: rhodecode/templates/files/files_source.html:29
-#: rhodecode/templates/journal/journal_page_repos.html:29
-msgid "edit"
+#: rhodecode/templates/admin/repos/repo_edit.html:12
+#: rhodecode/templates/admin/settings/hooks.html:9
+#: rhodecode/templates/admin/settings/settings.html:11
+#: rhodecode/templates/base/base.html:76 rhodecode/templates/base/base.html:121
+#: rhodecode/templates/summary/summary.html:212
+msgid "Settings"
 msgstr ""
 
 #: rhodecode/templates/admin/repos/repo_edit.html:40
-#: rhodecode/templates/settings/repo_settings.html:39
 msgid "Clone uri"
 msgstr ""
 
 #: rhodecode/templates/admin/repos/repo_edit.html:53
-#: rhodecode/templates/settings/repo_settings.html:52
 msgid "Optional select a group to put this repository into."
 msgstr ""
 
@@ -1967,174 +2184,203 @@
 msgid "Change owner of this repository."
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:142
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:75
-#: rhodecode/templates/admin/settings/settings.html:113
-#: rhodecode/templates/admin/settings/settings.html:179
-#: rhodecode/templates/admin/settings/settings.html:269
-#: rhodecode/templates/admin/users/user_edit.html:134
-#: rhodecode/templates/admin/users/user_edit.html:179
-#: rhodecode/templates/admin/users/user_edit.html:282
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:80
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:136
-#: rhodecode/templates/files/files_add.html:82
-#: rhodecode/templates/files/files_edit.html:68
-#: rhodecode/templates/pullrequests/pullrequest.html:124
-#: rhodecode/templates/settings/repo_settings.html:95
-msgid "Reset"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:152
-msgid "Administration"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:155
+#: rhodecode/templates/admin/repos/repo_edit.html:184
+msgid "Advanced settings"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:187
 msgid "Statistics"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:159
+#: rhodecode/templates/admin/repos/repo_edit.html:191
 msgid "Reset current statistics"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:159
+#: rhodecode/templates/admin/repos/repo_edit.html:191
 msgid "Confirm to remove current statistics"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:162
+#: rhodecode/templates/admin/repos/repo_edit.html:194
 msgid "Fetched to rev"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:163
+#: rhodecode/templates/admin/repos/repo_edit.html:195
 msgid "Stats gathered"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:171
-msgid "Remote"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:175
-msgid "Pull changes from remote location"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:175
-msgid "Confirm to pull changes from remote side"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:186
-msgid "Cache"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:190
-msgid "Invalidate repository cache"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:190
-msgid "Confirm to invalidate repository cache"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:193
-msgid ""
-"Manually invalidate cache for this repository. On first access repository "
-"will be cached again"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:198
-msgid "List of cached values"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:201
-msgid "Prefix"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:202
-msgid "Key"
-msgstr ""
-
 #: rhodecode/templates/admin/repos/repo_edit.html:203
-#: rhodecode/templates/admin/users/user_add.html:86
-#: rhodecode/templates/admin/users/user_edit.html:117
-#: rhodecode/templates/admin/users_groups/users_group_add.html:41
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:42
-msgid "Active"
+msgid "Remote"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:207
+msgid "Pull changes from remote location"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:207
+msgid "Confirm to pull changes from remote side"
 msgstr ""
 
 #: rhodecode/templates/admin/repos/repo_edit.html:218
-#: rhodecode/templates/base/base.html:331 rhodecode/templates/base/base.html:333
-#: rhodecode/templates/base/base.html:335
+msgid "Cache"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:222
+msgid "Invalidate repository cache"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:222
+msgid "Confirm to invalidate repository cache"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:225
+msgid ""
+"Manually invalidate cache for this repository. On first access repository "
+"will be cached again"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:230
+msgid "List of cached values"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:233
+msgid "Prefix"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:234
+msgid "Key"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:235
+#: rhodecode/templates/admin/users/user_add.html:86
+#: rhodecode/templates/admin/users/user_edit.html:124
+#: rhodecode/templates/admin/users/users.html:84
+#: rhodecode/templates/admin/users_groups/users_group_add.html:41
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:42
+#: rhodecode/templates/admin/users_groups/users_groups.html:36
+msgid "Active"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:250
+#: rhodecode/templates/base/base.html:280 rhodecode/templates/base/base.html:281
 msgid "Public journal"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:224
+#: rhodecode/templates/admin/repos/repo_edit.html:256
 msgid "Remove from public journal"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:226
+#: rhodecode/templates/admin/repos/repo_edit.html:258
 msgid "Add to public journal"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:231
+#: rhodecode/templates/admin/repos/repo_edit.html:263
 msgid ""
 "All actions made on this repository will be accessible to everyone in public "
 "journal"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:238
+#: rhodecode/templates/admin/repos/repo_edit.html:270
 msgid "Locking"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:243
+#: rhodecode/templates/admin/repos/repo_edit.html:275
 msgid "Unlock locked repo"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:243
+#: rhodecode/templates/admin/repos/repo_edit.html:275
 msgid "Confirm to unlock repository"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:246
+#: rhodecode/templates/admin/repos/repo_edit.html:278
 msgid "lock repo"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:246
-msgid "Confirm to lock repository"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:247
-msgid "Repository is not locked"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:252
-msgid "Force locking on repository. Works only when anonymous access is disabled"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:259
-msgid "Set as fork of"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:268
-msgid "Manually set this repository as a fork of another from the list"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:274
-#: rhodecode/templates/changeset/changeset_file_comment.html:26
-msgid "Delete"
-msgstr ""
-
 #: rhodecode/templates/admin/repos/repo_edit.html:278
-#: rhodecode/templates/settings/repo_settings.html:115
+msgid "Confirm to lock repository"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:279
+msgid "Repository is not locked"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:284
+msgid "Force locking on repository. Works only when anonymous access is disabled"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:291
+msgid "Set as fork of"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:296
+msgid "set"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:300
+msgid "Manually set this repository as a fork of another from the list"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:306
+#: rhodecode/templates/changeset/changeset_file_comment.html:41
+msgid "Delete"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:315
 msgid "Remove this repository"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:278
-#: rhodecode/templates/settings/repo_settings.html:115
+#: rhodecode/templates/admin/repos/repo_edit.html:315
 msgid "Confirm to delete this repository"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:282
-#: rhodecode/templates/settings/repo_settings.html:119
+#: rhodecode/templates/admin/repos/repo_edit.html:317
+#, python-format
+msgid "this repository has %s fork"
+msgid_plural "this repository has %s forks"
+msgstr[0] ""
+msgstr[1] ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:318
+msgid "Detach forks"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:319
+msgid "Delete forks"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:322
 msgid ""
 "This repository will be renamed in a special way in order to be unaccesible "
-"for RhodeCode and VCS systems. If you need fully delete it from file system "
-"please do it manually"
+"for RhodeCode and VCS systems. If you need to fully delete it from file "
+"system please do it manually"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:336
+msgid "Extra fields"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:348
+#, python-format
+msgid "Confirm to delete this field: %s"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:362
+msgid "New field key"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:370
+msgid "New field label"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:373
+msgid "Enter short label"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:379
+msgid "New field description"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:382
+msgid "Enter description of a field"
 msgstr ""
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:3
@@ -2154,8 +2400,6 @@
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:6
 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:6
-#: rhodecode/templates/admin/users/users.html:85
-#: rhodecode/templates/base/base.html:229
 msgid "admin"
 msgstr ""
 
@@ -2165,75 +2409,58 @@
 msgstr ""
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:16
-#: rhodecode/templates/data_table/_dt_elements.html:67
-#: rhodecode/templates/journal/journal.html:95
-#: rhodecode/templates/summary/summary.html:85
 msgid "private repository"
 msgstr ""
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:19
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:28
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:18
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:20
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:35
 msgid "default"
 msgstr ""
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:33
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:58
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:23
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:42
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:25
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:55
 msgid "revoke"
 msgstr ""
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:83
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:67
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:80
 msgid "Add another member"
 msgstr ""
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:97
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:100
 msgid "Failed to remove user"
 msgstr ""
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:112
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:103
-msgid "Failed to remove users group"
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:116
+msgid "Failed to remove user group"
 msgstr ""
 
 #: rhodecode/templates/admin/repos/repos.html:5
 msgid "Repositories administration"
 msgstr ""
 
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:73
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:86
 msgid "apply to children"
 msgstr ""
 
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:74
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87
 msgid ""
-"Set or revoke permission to all children of that group, including "
-"repositories and other groups"
+"Set or revoke permission to all children of that group, including non-private"
+" repositories and other groups"
+msgstr ""
+
+#: rhodecode/templates/admin/repos_groups/repos_groups.html:4
+#, python-format
+msgid "%s Group Dashboard"
 msgstr ""
 
 #: rhodecode/templates/admin/repos_groups/repos_groups.html:9
-#: rhodecode/templates/base/base.html:122 rhodecode/templates/base/base.html:313
-#: rhodecode/templates/base/base.html:315 rhodecode/templates/base/base.html:317
-#: rhodecode/templates/bookmarks/bookmarks.html:11
-#: rhodecode/templates/branches/branches.html:10
-#: rhodecode/templates/changelog/changelog.html:10
-#: rhodecode/templates/changeset/changeset.html:10
-#: rhodecode/templates/changeset/changeset_range.html:9
-#: rhodecode/templates/compare/compare_diff.html:9
-#: rhodecode/templates/files/file_diff.html:8
-#: rhodecode/templates/files/files.html:8
-#: rhodecode/templates/files/files_add.html:15
-#: rhodecode/templates/files/files_edit.html:15
-#: rhodecode/templates/followers/followers.html:9
-#: rhodecode/templates/forks/fork.html:9 rhodecode/templates/forks/forks.html:9
-#: rhodecode/templates/pullrequests/pullrequest.html:8
-#: rhodecode/templates/pullrequests/pullrequest_show.html:8
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8
-#: rhodecode/templates/settings/repo_settings.html:9
-#: rhodecode/templates/shortlog/shortlog.html:10
-#: rhodecode/templates/summary/summary.html:8 rhodecode/templates/tags/tags.html:11
 msgid "Home"
 msgstr ""
 
@@ -2242,80 +2469,78 @@
 msgstr ""
 
 #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:5
-msgid "Add repos group"
-msgstr ""
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:10
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:10
-msgid "Repos groups"
-msgstr ""
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:12
-msgid "add new repos group"
-msgstr ""
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:50
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:50
+msgid "Add repository group"
+msgstr ""
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:11
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:11
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:16
+#: rhodecode/templates/base/base.html:70 rhodecode/templates/base/base.html:82
+msgid "Repository groups"
+msgstr ""
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:13
+msgid "Add new repository group"
+msgstr ""
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:51
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:56
 msgid "Group parent"
 msgstr ""
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:58
-#: rhodecode/templates/admin/users/user_add.html:94
-#: rhodecode/templates/admin/users_groups/users_group_add.html:49
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:90
-#: rhodecode/templates/pullrequests/pullrequest_show.html:131
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:59
 msgid "save"
 msgstr ""
 
 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:5
-msgid "Edit repos group"
-msgstr ""
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:12
-msgid "edit repos group"
-msgstr ""
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:70
+msgid "Edit repository group"
+msgstr ""
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:13
+#, python-format
+msgid "Edit repository group %s"
+msgstr ""
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:27
+msgid "Add child group"
+msgstr ""
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:76
 msgid ""
 "Enable lock-by-pulling on group. This option will be applied to all other "
 "groups and repositories inside"
 msgstr ""
 
 #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:5
-msgid "Repositories groups administration"
-msgstr ""
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:22
-msgid "ADD NEW GROUP"
-msgstr ""
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:35
+msgid "Repository groups administration"
+msgstr ""
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:45
 msgid "Number of toplevel repositories"
 msgstr ""
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:36
-#: rhodecode/templates/admin/users/users.html:87
-#: rhodecode/templates/admin/users_groups/users_groups.html:35
-msgid "action"
-msgstr ""
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55
-#: rhodecode/templates/admin/users/user_edit.html:259
-#: rhodecode/templates/admin/users_groups/users_groups.html:44
-#: rhodecode/templates/data_table/_dt_elements.html:7
-#: rhodecode/templates/data_table/_dt_elements.html:121
-msgid "delete"
-msgstr ""
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:64
+msgid "Edit"
+msgstr ""
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:65
+#: rhodecode/templates/base/perms_summary.html:29
+#: rhodecode/templates/base/perms_summary.html:48
+#: rhodecode/templates/base/perms_summary.html:50
+#: rhodecode/templates/data_table/_dt_elements.html:116
+#: rhodecode/templates/data_table/_dt_elements.html:117
+msgid "edit"
+msgstr ""
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:70
 #, python-format
 msgid "Confirm to delete this group: %s with %s repository"
 msgid_plural "Confirm to delete this group: %s with %s repositories"
 msgstr[0] ""
 msgstr[1] ""
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:63
-msgid "There are no repositories groups yet"
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:78
+msgid "There are no repository groups yet"
 msgstr ""
 
 #: rhodecode/templates/admin/settings/hooks.html:5
@@ -2323,12 +2548,6 @@
 msgid "Settings administration"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/hooks.html:9
-#: rhodecode/templates/admin/settings/settings.html:9
-#: rhodecode/templates/settings/repo_settings.html:13
-msgid "Settings"
-msgstr ""
-
 #: rhodecode/templates/admin/settings/hooks.html:24
 msgid "Built in hooks - read only"
 msgstr ""
@@ -2345,205 +2564,210 @@
 msgid "Failed to remove hook"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:24
+#: rhodecode/templates/admin/settings/settings.html:26
 msgid "Remap and rescan repositories"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:32
-msgid "rescan option"
-msgstr ""
-
-#: rhodecode/templates/admin/settings/settings.html:38
+#: rhodecode/templates/admin/settings/settings.html:34
+msgid "Rescan option"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:40
 msgid ""
 "In case a repository was deleted from filesystem and there are leftovers in "
 "the database check this option to scan obsolete data in database and remove "
 "it."
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:39
-msgid "destroy old data"
-msgstr ""
-
 #: rhodecode/templates/admin/settings/settings.html:41
+msgid "Destroy old data"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:43
 msgid ""
 "Rescan repositories location for new repositories. Also deletes obsolete if "
 "`destroy` flag is checked "
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:46
+#: rhodecode/templates/admin/settings/settings.html:48
 msgid "Rescan repositories"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:52
+#: rhodecode/templates/admin/settings/settings.html:54
 msgid "Whoosh indexing"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:60
-msgid "index build option"
-msgstr ""
-
-#: rhodecode/templates/admin/settings/settings.html:65
-msgid "build from scratch"
-msgstr ""
-
-#: rhodecode/templates/admin/settings/settings.html:71
+#: rhodecode/templates/admin/settings/settings.html:62
+msgid "Index build option"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:67
+msgid "Build from scratch"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:73
 msgid "Reindex"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:77
+#: rhodecode/templates/admin/settings/settings.html:79
 msgid "Global application settings"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:86
-msgid "Application name"
-msgstr ""
-
-#: rhodecode/templates/admin/settings/settings.html:95
-msgid "Realm text"
-msgstr ""
-
-#: rhodecode/templates/admin/settings/settings.html:104
-msgid "GA code"
-msgstr ""
-
-#: rhodecode/templates/admin/settings/settings.html:112
-#: rhodecode/templates/admin/settings/settings.html:178
-#: rhodecode/templates/admin/settings/settings.html:268
+#: rhodecode/templates/admin/settings/settings.html:88
+msgid "Site branding"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:97
+msgid "HTTP authentication realm"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:106
+msgid "Google Analytics code"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:114
+#: rhodecode/templates/admin/settings/settings.html:186
+#: rhodecode/templates/admin/settings/settings.html:277
 msgid "Save settings"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:119
+#: rhodecode/templates/admin/settings/settings.html:121
 msgid "Visualisation settings"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:127
+#: rhodecode/templates/admin/settings/settings.html:129
 msgid "General"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:132
+#: rhodecode/templates/admin/settings/settings.html:134
 msgid "Use lightweight dashboard"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:139
+#: rhodecode/templates/admin/settings/settings.html:140
+msgid "Use repository extra fields"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:147
 msgid "Icons"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:144
+#: rhodecode/templates/admin/settings/settings.html:152
 msgid "Show public repo icon on repositories"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:148
+#: rhodecode/templates/admin/settings/settings.html:156
 msgid "Show private repo icon on repositories"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:155
+#: rhodecode/templates/admin/settings/settings.html:163
 msgid "Meta-Tagging"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:160
+#: rhodecode/templates/admin/settings/settings.html:168
 msgid "Stylify recognised metatags:"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:187
+#: rhodecode/templates/admin/settings/settings.html:195
 msgid "VCS settings"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:196
+#: rhodecode/templates/admin/settings/settings.html:204
 msgid "Web"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:201
-msgid "require ssl for vcs operations"
-msgstr ""
-
-#: rhodecode/templates/admin/settings/settings.html:203
+#: rhodecode/templates/admin/settings/settings.html:209
+msgid "Require SSL for vcs operations"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:211
 msgid ""
 "RhodeCode will require SSL for pushing or pulling. If SSL is missing it will "
 "return HTTP Error 406: Not Acceptable"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:209
+#: rhodecode/templates/admin/settings/settings.html:217
 msgid "Hooks"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:214
-msgid "Update repository after push (hg update)"
-msgstr ""
-
-#: rhodecode/templates/admin/settings/settings.html:218
-msgid "Show repository size after push"
-msgstr ""
-
 #: rhodecode/templates/admin/settings/settings.html:222
-msgid "Log user push commands"
+msgid "Update repository after push (hg update)"
 msgstr ""
 
 #: rhodecode/templates/admin/settings/settings.html:226
-msgid "Log user pull commands"
+msgid "Show repository size after push"
 msgstr ""
 
 #: rhodecode/templates/admin/settings/settings.html:230
-msgid "advanced setup"
-msgstr ""
-
-#: rhodecode/templates/admin/settings/settings.html:235
+msgid "Log user push commands"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:234
+msgid "Log user pull commands"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:238
+msgid "Advanced setup"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:243
 msgid "Mercurial Extensions"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:240
-msgid "largefiles extensions"
-msgstr ""
-
-#: rhodecode/templates/admin/settings/settings.html:244
-msgid "hgsubversion extensions"
-msgstr ""
-
-#: rhodecode/templates/admin/settings/settings.html:246
+#: rhodecode/templates/admin/settings/settings.html:248
+msgid "Enable largefiles extension"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:252
+msgid "Enable hgsubversion extension"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:254
 msgid ""
-"Requires hgsubversion library installed. Allows clonning from svn remote "
+"Requires hgsubversion library installed. Allows cloning from svn remote "
 "locations"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:256
+#: rhodecode/templates/admin/settings/settings.html:264
 msgid "Repositories location"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:261
+#: rhodecode/templates/admin/settings/settings.html:269
 msgid ""
 "This a crucial application setting. If you are really sure you need to change"
 " this, you must restart application in order to make this setting take "
 "effect. Click this label to unlock."
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:262
-#: rhodecode/templates/base/base.html:221
-msgid "unlock"
-msgstr ""
-
-#: rhodecode/templates/admin/settings/settings.html:263
+#: rhodecode/templates/admin/settings/settings.html:270
+#: rhodecode/templates/base/base.html:131
+msgid "Unlock"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:272
 msgid ""
 "Location where repositories are stored. After changing this value a restart, "
 "and rescan is required"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:283
+#: rhodecode/templates/admin/settings/settings.html:292
 msgid "Test Email"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:291
+#: rhodecode/templates/admin/settings/settings.html:300
 msgid "Email to"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:299
-msgid "Send"
-msgstr ""
-
-#: rhodecode/templates/admin/settings/settings.html:305
-msgid "System Info and Packages"
-msgstr ""
-
 #: rhodecode/templates/admin/settings/settings.html:308
-msgid "show"
+msgid "Send"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:314
+msgid "System Info and Packages"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:317
+#: rhodecode/templates/changelog/changelog.html:42
+msgid "Show"
 msgstr ""
 
 #: rhodecode/templates/admin/users/user_add.html:5
@@ -2552,11 +2776,13 @@
 
 #: rhodecode/templates/admin/users/user_add.html:10
 #: rhodecode/templates/admin/users/user_edit.html:11
+#: rhodecode/templates/base/base.html:71
 msgid "Users"
 msgstr ""
 
 #: rhodecode/templates/admin/users/user_add.html:12
-msgid "add new user"
+#: rhodecode/templates/admin/users/users.html:23
+msgid "Add new user"
 msgstr ""
 
 #: rhodecode/templates/admin/users/user_add.html:50
@@ -2567,6 +2793,12 @@
 msgid "Edit user"
 msgstr ""
 
+#: rhodecode/templates/admin/users/user_edit.html:13
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:13
+#, python-format
+msgid "Edit %s"
+msgstr ""
+
 #: rhodecode/templates/admin/users/user_edit.html:34
 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:10
 msgid "Change your avatar at"
@@ -2582,26 +2814,31 @@
 msgid "API key"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit.html:63
+#: rhodecode/templates/admin/users/user_edit.html:50
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:25
+msgid "Current IP"
+msgstr ""
+
+#: rhodecode/templates/admin/users/user_edit.html:70
 msgid "LDAP DN"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit.html:72
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:35
+#: rhodecode/templates/admin/users/user_edit.html:79
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44
 msgid "New password"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit.html:81
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44
+#: rhodecode/templates/admin/users/user_edit.html:88
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:53
 msgid "New password confirmation"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit.html:151
+#: rhodecode/templates/admin/users/user_edit.html:158
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:108
 msgid "Inherit default permissions"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit.html:156
+#: rhodecode/templates/admin/users/user_edit.html:163
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:113
 #, python-format
 msgid ""
@@ -2609,53 +2846,31 @@
 "options does not have any action"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit.html:162
+#: rhodecode/templates/admin/users/user_edit.html:169
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:119
 msgid "Create repositories"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit.html:170
+#: rhodecode/templates/admin/users/user_edit.html:177
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:127
 msgid "Fork repositories"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit.html:190
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:22
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:39
-msgid "Nothing here yet"
-msgstr ""
-
-#: rhodecode/templates/admin/users/user_edit.html:197
-#: rhodecode/templates/admin/users/user_edit_my_account.html:60
-#: rhodecode/templates/admin/users/user_edit_my_account.html:217
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:185
-msgid "Permission"
-msgstr ""
-
-#: rhodecode/templates/admin/users/user_edit.html:198
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:186
-msgid "Edit Permission"
-msgstr ""
-
-#: rhodecode/templates/admin/users/user_edit.html:247
+#: rhodecode/templates/admin/users/user_edit.html:200
 msgid "Email addresses"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit.html:260
+#: rhodecode/templates/admin/users/user_edit.html:213
 #, python-format
 msgid "Confirm to delete this email: %s"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit.html:274
+#: rhodecode/templates/admin/users/user_edit.html:227
 msgid "New email address"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit.html:281
-msgid "Add"
-msgstr ""
-
 #: rhodecode/templates/admin/users/user_edit_my_account.html:5
-#: rhodecode/templates/base/base.html:124
+#: rhodecode/templates/base/base.html:242
 msgid "My account"
 msgstr ""
 
@@ -2668,7 +2883,7 @@
 msgstr ""
 
 #: rhodecode/templates/admin/users/user_edit_my_account.html:38
-#: rhodecode/templates/journal/journal.html:49
+#: rhodecode/templates/journal/journal.html:54
 msgid "My repos"
 msgstr ""
 
@@ -2676,131 +2891,97 @@
 msgid "My pull requests"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit_my_account.html:45
-msgid "Add repo"
-msgstr ""
-
 #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:2
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:4
+msgid "Show closed pull requests"
+msgstr ""
+
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:6
 msgid "Opened by me"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:10
-#, python-format
-msgid "Pull request #%s opened on %s"
-msgstr ""
-
 #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:15
+#, python-format
+msgid "Pull request #%s opened on %s"
+msgstr ""
+
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:17
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:45
+#: rhodecode/templates/pullrequests/pullrequest_data.html:7
+#: rhodecode/templates/pullrequests/pullrequest_show.html:27
+#: rhodecode/templates/pullrequests/pullrequest_show.html:42
+msgid "Closed"
+msgstr ""
+
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:23
 msgid "Confirm to delete this pull request"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:26
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:30
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:51
+msgid "Nothing here yet"
+msgstr ""
+
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:34
 msgid "I participate in"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:33
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:30
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:42
+#: rhodecode/templates/pullrequests/pullrequest_data.html:11
 #, python-format
 msgid "Pull request #%s opened by %s on %s"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:7
-#: rhodecode/templates/bookmarks/bookmarks.html:40
-#: rhodecode/templates/bookmarks/bookmarks_data.html:9
-#: rhodecode/templates/branches/branches.html:54
-#: rhodecode/templates/branches/branches_data.html:9
-#: rhodecode/templates/journal/journal_page_repos.html:8
-#: rhodecode/templates/tags/tags.html:55 rhodecode/templates/tags/tags_data.html:9
-msgid "Revision"
-msgstr ""
-
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:28
-#: rhodecode/templates/journal/journal_page_repos.html:29
-msgid "private"
-msgstr ""
-
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:31
-#: rhodecode/templates/data_table/_dt_elements.html:7
-#: rhodecode/templates/journal/journal_page_repos.html:32
-#, python-format
-msgid "Confirm to delete this repository: %s"
-msgstr ""
-
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:38
-#: rhodecode/templates/journal/journal_page_repos.html:42
-msgid "No repositories yet"
-msgstr ""
-
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:40
-#: rhodecode/templates/journal/journal_page_repos.html:44
-msgid "create one now"
-msgstr ""
-
 #: rhodecode/templates/admin/users/users.html:5
 msgid "Users administration"
 msgstr ""
 
 #: rhodecode/templates/admin/users/users.html:9
-#: rhodecode/templates/base/base.html:235
 msgid "users"
 msgstr ""
 
-#: rhodecode/templates/admin/users/users.html:23
-msgid "ADD NEW USER"
-msgstr ""
-
-#: rhodecode/templates/admin/users/users.html:77
-msgid "username"
-msgstr ""
-
 #: rhodecode/templates/admin/users/users.html:80
-msgid "firstname"
+msgid "Firstname"
 msgstr ""
 
 #: rhodecode/templates/admin/users/users.html:81
-msgid "lastname"
+msgid "Lastname"
 msgstr ""
 
 #: rhodecode/templates/admin/users/users.html:82
-msgid "last login"
-msgstr ""
-
-#: rhodecode/templates/admin/users/users.html:84
-#: rhodecode/templates/admin/users_groups/users_groups.html:34
-msgid "active"
-msgstr ""
-
-#: rhodecode/templates/admin/users/users.html:86
-#: rhodecode/templates/base/base.html:238
-msgid "ldap"
+msgid "Last login"
 msgstr ""
 
 #: rhodecode/templates/admin/users_groups/users_group_add.html:5
-msgid "Add users group"
+msgid "Add user group"
 msgstr ""
 
 #: rhodecode/templates/admin/users_groups/users_group_add.html:10
-#: rhodecode/templates/admin/users_groups/users_groups.html:9
-msgid "Users groups"
+#: rhodecode/templates/admin/users_groups/users_groups.html:11
+#: rhodecode/templates/base/base.html:72
+msgid "User groups"
 msgstr ""
 
 #: rhodecode/templates/admin/users_groups/users_group_add.html:12
-msgid "add new users group"
+#: rhodecode/templates/admin/users_groups/users_groups.html:25
+msgid "Add new user group"
 msgstr ""
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:5
-msgid "Edit users group"
+msgid "Edit user group"
 msgstr ""
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:11
-msgid "UsersGroups"
+msgid "UserGroups"
 msgstr ""
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:50
+#: rhodecode/templates/admin/users_groups/users_groups.html:35
 msgid "Members"
 msgstr ""
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:58
-msgid "Choosen group members"
+msgid "Chosen group members"
 msgstr ""
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:61
@@ -2815,249 +2996,256 @@
 msgid "Add all elements"
 msgstr ""
 
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:146
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:150
 msgid "Group members"
 msgstr ""
 
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:163
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:167
 msgid "No members yet"
 msgstr ""
 
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:171
-msgid "Permissions defined for this group"
-msgstr ""
-
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:178
-msgid "No permissions set yet"
-msgstr ""
-
 #: rhodecode/templates/admin/users_groups/users_groups.html:5
-msgid "Users groups administration"
-msgstr ""
-
-#: rhodecode/templates/admin/users_groups/users_groups.html:23
-msgid "ADD NEW USER GROUP"
-msgstr ""
-
-#: rhodecode/templates/admin/users_groups/users_groups.html:32
-msgid "group name"
-msgstr ""
-
-#: rhodecode/templates/admin/users_groups/users_groups.html:33
-#: rhodecode/templates/base/root.html:46
-msgid "members"
-msgstr ""
-
-#: rhodecode/templates/admin/users_groups/users_groups.html:45
+msgid "User groups administration"
+msgstr ""
+
+#: rhodecode/templates/admin/users_groups/users_groups.html:47
 #, python-format
-msgid "Confirm to delete this users group: %s"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:41
+msgid "Confirm to delete this user group: %s"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:42
 msgid "Submit a bug"
 msgstr ""
 
-#: rhodecode/templates/base/base.html:77
-msgid "Login to your account"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:100
-msgid "Forgot password ?"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:107
-msgid "Log In"
+#: rhodecode/templates/base/base.html:108
+#: rhodecode/templates/data_table/_dt_elements.html:9
+#: rhodecode/templates/data_table/_dt_elements.html:11
+#: rhodecode/templates/data_table/_dt_elements.html:13
+#: rhodecode/templates/pullrequests/pullrequest_show.html:81
+#: rhodecode/templates/summary/summary.html:8
+msgid "Summary"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:109
+#: rhodecode/templates/changelog/changelog.html:11
+#: rhodecode/templates/data_table/_dt_elements.html:17
+#: rhodecode/templates/data_table/_dt_elements.html:19
+#: rhodecode/templates/data_table/_dt_elements.html:21
+msgid "Changelog"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:110
+#: rhodecode/templates/data_table/_dt_elements.html:25
+#: rhodecode/templates/data_table/_dt_elements.html:27
+#: rhodecode/templates/data_table/_dt_elements.html:29
+#: rhodecode/templates/files/files.html:12
+msgid "Files"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:112
+msgid "Switch To"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:114 rhodecode/templates/base/base.html:267
+msgid "loading..."
 msgstr ""
 
 #: rhodecode/templates/base/base.html:118
-msgid "Inbox"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:123 rhodecode/templates/base/base.html:322
-#: rhodecode/templates/base/base.html:324 rhodecode/templates/base/base.html:326
-#: rhodecode/templates/journal/journal.html:4
-#: rhodecode/templates/journal/public_journal.html:4
-msgid "Journal"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:125
-msgid "Log Out"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:144
-msgid "Switch repository"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:146
-msgid "Products"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:152 rhodecode/templates/base/base.html:182
-#: rhodecode/templates/base/root.html:47
-msgid "loading..."
-msgstr ""
-
-#: rhodecode/templates/base/base.html:158 rhodecode/templates/base/base.html:160
-#: rhodecode/templates/base/base.html:162
-#: rhodecode/templates/data_table/_dt_elements.html:15
-#: rhodecode/templates/data_table/_dt_elements.html:17
-#: rhodecode/templates/data_table/_dt_elements.html:19
-msgid "Summary"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:166 rhodecode/templates/base/base.html:168
-#: rhodecode/templates/base/base.html:170
-#: rhodecode/templates/changelog/changelog.html:15
-#: rhodecode/templates/data_table/_dt_elements.html:23
-#: rhodecode/templates/data_table/_dt_elements.html:25
-#: rhodecode/templates/data_table/_dt_elements.html:27
-msgid "Changelog"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:175 rhodecode/templates/base/base.html:177
-#: rhodecode/templates/base/base.html:179
-msgid "Switch to"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:186 rhodecode/templates/base/base.html:188
-#: rhodecode/templates/base/base.html:190
-#: rhodecode/templates/data_table/_dt_elements.html:31
+msgid "Options"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:124
+#: rhodecode/templates/forks/forks_data.html:21
+msgid "Compare fork"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:126
+msgid "Lightweight changelog"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:127 rhodecode/templates/base/base.html:287
+#: rhodecode/templates/search/search.html:14
+#: rhodecode/templates/search/search.html:54
+msgid "Search"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:133
+msgid "Lock"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:141
+msgid "Follow"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:142
+msgid "Unfollow"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:145
 #: rhodecode/templates/data_table/_dt_elements.html:33
 #: rhodecode/templates/data_table/_dt_elements.html:35
-msgid "Files"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:195 rhodecode/templates/base/base.html:199
-msgid "Options"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:204 rhodecode/templates/base/base.html:206
-msgid "repository settings"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:210
-#: rhodecode/templates/data_table/_dt_elements.html:80
-#: rhodecode/templates/forks/fork.html:13
-msgid "fork"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:212 rhodecode/templates/base/root.html:50
-#: rhodecode/templates/changelog/changelog.html:43
-msgid "Open new pull request"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:215
-#: rhodecode/templates/forks/forks_data.html:21
-msgid "Compare fork"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:217
-msgid "search"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:223
-msgid "lock"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:234
-msgid "repositories groups"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:236
-msgid "users groups"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:237
-msgid "permissions"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:239
-msgid "defaults"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:240
-msgid "settings"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:251 rhodecode/templates/base/base.html:253
-msgid "Followers"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:259 rhodecode/templates/base/base.html:261
-msgid "Forks"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:340 rhodecode/templates/base/base.html:342
-#: rhodecode/templates/base/base.html:344 rhodecode/templates/search/search.html:52
-msgid "Search"
-msgstr ""
-
-#: rhodecode/templates/base/root.html:42
-msgid "add another comment"
+#: rhodecode/templates/data_table/_dt_elements.html:37
+#: rhodecode/templates/data_table/_dt_elements.html:74
+#: rhodecode/templates/forks/fork.html:9
+msgid "Fork"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:147
+msgid "Create Pull Request"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:153
+msgid "Show Pull Requests"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:153
+msgid "Pull Requests"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:190
+msgid "Not logged in"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:197
+msgid "Login to your account"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:220
+msgid "Forgot password ?"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:243
+msgid "Log Out"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:262
+msgid "Switch repository"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:274
+msgid "Show recent activity"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:275
+#: rhodecode/templates/journal/journal.html:4
+msgid "Journal"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:286
+msgid "Search in repositories"
+msgstr ""
+
+#: rhodecode/templates/base/perms_summary.html:8
+msgid "No permissions defined yet"
+msgstr ""
+
+#: rhodecode/templates/base/perms_summary.html:15
+msgid "Permission"
+msgstr ""
+
+#: rhodecode/templates/base/perms_summary.html:16
+msgid "Edit Permission"
 msgstr ""
 
 #: rhodecode/templates/base/root.html:43
-#: rhodecode/templates/journal/journal.html:83
-#: rhodecode/templates/summary/summary.html:57
-msgid "Stop following this repository"
+msgid "Add another comment"
 msgstr ""
 
 #: rhodecode/templates/base/root.html:44
-#: rhodecode/templates/summary/summary.html:61
-msgid "Start following this repository"
+#: rhodecode/templates/data_table/_dt_elements.html:140
+msgid "Stop following this repository"
 msgstr ""
 
 #: rhodecode/templates/base/root.html:45
+msgid "Start following this repository"
+msgstr ""
+
+#: rhodecode/templates/base/root.html:46
 msgid "Group"
 msgstr ""
 
+#: rhodecode/templates/base/root.html:47
+msgid "members"
+msgstr ""
+
 #: rhodecode/templates/base/root.html:48
-msgid "search truncated"
+#: rhodecode/templates/pullrequests/pullrequest.html:181
+msgid "Loading ..."
 msgstr ""
 
 #: rhodecode/templates/base/root.html:49
-msgid "no matching files"
+msgid "Search truncated"
+msgstr ""
+
+#: rhodecode/templates/base/root.html:50
+msgid "No matching files"
 msgstr ""
 
 #: rhodecode/templates/base/root.html:51
-msgid "Open new pull request for selected changesets"
+#: rhodecode/templates/changelog/changelog.html:36
+msgid "Open new pull request"
 msgstr ""
 
 #: rhodecode/templates/base/root.html:52
-msgid "Show selected changes __S -> __E"
+msgid "Open new pull request for selected changesets"
 msgstr ""
 
 #: rhodecode/templates/base/root.html:53
+msgid "Show selected changesets __S -> __E"
+msgstr ""
+
+#: rhodecode/templates/base/root.html:54
+msgid "Show selected changeset __S"
+msgstr ""
+
+#: rhodecode/templates/base/root.html:55
 msgid "Selection link"
 msgstr ""
 
+#: rhodecode/templates/base/root.html:56
+#: rhodecode/templates/changeset/diff_block.html:8
+msgid "Collapse diff"
+msgstr ""
+
+#: rhodecode/templates/base/root.html:57
+msgid "Expand diff"
+msgstr ""
+
 #: rhodecode/templates/bookmarks/bookmarks.html:5
 #, python-format
 msgid "%s Bookmarks"
 msgstr ""
 
-#: rhodecode/templates/bookmarks/bookmarks.html:39
+#: rhodecode/templates/bookmarks/bookmarks.html:37
 #: rhodecode/templates/bookmarks/bookmarks_data.html:8
-#: rhodecode/templates/branches/branches.html:53
+#: rhodecode/templates/branches/branches.html:50
 #: rhodecode/templates/branches/branches_data.html:8
-#: rhodecode/templates/tags/tags.html:54 rhodecode/templates/tags/tags_data.html:8
+#: rhodecode/templates/shortlog/shortlog_data.html:8
+#: rhodecode/templates/tags/tags.html:51 rhodecode/templates/tags/tags_data.html:8
 msgid "Author"
 msgstr ""
 
+#: rhodecode/templates/bookmarks/bookmarks.html:38
+#: rhodecode/templates/bookmarks/bookmarks_data.html:9
+#: rhodecode/templates/branches/branches.html:51
+#: rhodecode/templates/branches/branches_data.html:9
+#: rhodecode/templates/shortlog/shortlog_data.html:5
+#: rhodecode/templates/tags/tags.html:52 rhodecode/templates/tags/tags_data.html:9
+msgid "Revision"
+msgstr ""
+
 #: rhodecode/templates/branches/branches.html:5
 #, python-format
 msgid "%s Branches"
 msgstr ""
 
-#: rhodecode/templates/branches/branches.html:29
+#: rhodecode/templates/branches/branches.html:26
 msgid "Compare branches"
 msgstr ""
 
-#: rhodecode/templates/branches/branches.html:56
+#: rhodecode/templates/branches/branches.html:53
 #: rhodecode/templates/branches/branches_data.html:10
-#: rhodecode/templates/compare/compare_diff.html:5
-#: rhodecode/templates/compare/compare_diff.html:13
-#: rhodecode/templates/tags/tags.html:57 rhodecode/templates/tags/tags_data.html:10
+#: rhodecode/templates/tags/tags.html:54 rhodecode/templates/tags/tags_data.html:10
 msgid "Compare"
 msgstr ""
 
@@ -3066,115 +3254,79 @@
 msgid "%s Changelog"
 msgstr ""
 
-#: rhodecode/templates/changelog/changelog.html:15
+#: rhodecode/templates/changelog/changelog.html:11
 #, python-format
 msgid "showing %d out of %d revision"
 msgid_plural "showing %d out of %d revisions"
 msgstr[0] ""
 msgstr[1] ""
 
-#: rhodecode/templates/changelog/changelog.html:37
+#: rhodecode/templates/changelog/changelog.html:30
 msgid "Clear selection"
 msgstr ""
 
-#: rhodecode/templates/changelog/changelog.html:40
+#: rhodecode/templates/changelog/changelog.html:33
 #: rhodecode/templates/forks/forks_data.html:19
 #, python-format
-msgid "compare fork with %s"
-msgstr ""
-
-#: rhodecode/templates/changelog/changelog.html:40
+msgid "Compare fork with %s"
+msgstr ""
+
+#: rhodecode/templates/changelog/changelog.html:33
 msgid "Compare fork with parent"
 msgstr ""
 
-#: rhodecode/templates/changelog/changelog.html:49
-msgid "Show"
-msgstr ""
-
-#: rhodecode/templates/changelog/changelog.html:74
-#: rhodecode/templates/summary/summary.html:375
-msgid "show more"
-msgstr ""
-
-#: rhodecode/templates/changelog/changelog.html:78
-msgid "Affected number of files, click to show more details"
-msgstr ""
-
-#: rhodecode/templates/changelog/changelog.html:91
-#: rhodecode/templates/changeset/changeset.html:65
-#: rhodecode/templates/changeset/changeset_file_comment.html:20
-#: rhodecode/templates/changeset/changeset_range.html:46
-msgid "Changeset status"
-msgstr ""
-
-#: rhodecode/templates/changelog/changelog.html:94
-#: rhodecode/templates/shortlog/shortlog_data.html:20
-msgid "Click to open associated pull request"
-msgstr ""
-
-#: rhodecode/templates/changelog/changelog.html:104
-msgid "Parent"
-msgstr ""
-
-#: rhodecode/templates/changelog/changelog.html:110
-#: rhodecode/templates/changeset/changeset.html:42
-msgid "No parents"
-msgstr ""
-
-#: rhodecode/templates/changelog/changelog.html:115
+#: rhodecode/templates/changelog/changelog.html:76
+#: rhodecode/templates/summary/summary.html:404
+msgid "Show more"
+msgstr ""
+
+#: rhodecode/templates/changelog/changelog.html:89
+#: rhodecode/templates/changeset/changeset_range.html:86
+#, python-format
+msgid "Bookmark %s"
+msgstr ""
+
+#: rhodecode/templates/changelog/changelog.html:95
+#: rhodecode/templates/changeset/changeset.html:111
+#: rhodecode/templates/changeset/changeset_range.html:92
+#, python-format
+msgid "Tag %s"
+msgstr ""
+
+#: rhodecode/templates/changelog/changelog.html:100
 #: rhodecode/templates/changeset/changeset.html:106
-#: rhodecode/templates/changeset/changeset_range.html:79
-msgid "merge"
-msgstr ""
-
-#: rhodecode/templates/changelog/changelog.html:118
-#: rhodecode/templates/changeset/changeset.html:109
-#: rhodecode/templates/changeset/changeset_range.html:82
-#: rhodecode/templates/files/files.html:29
-#: rhodecode/templates/files/files_add.html:33
-#: rhodecode/templates/files/files_edit.html:33
-#: rhodecode/templates/shortlog/shortlog_data.html:9
-msgid "branch"
-msgstr ""
-
-#: rhodecode/templates/changelog/changelog.html:124
-#: rhodecode/templates/changeset/changeset_range.html:88
-msgid "bookmark"
-msgstr ""
-
-#: rhodecode/templates/changelog/changelog.html:130
-#: rhodecode/templates/changeset/changeset.html:114
-#: rhodecode/templates/changeset/changeset_range.html:94
-msgid "tag"
-msgstr ""
-
-#: rhodecode/templates/changelog/changelog.html:301
+#: rhodecode/templates/changeset/changeset_range.html:80
+#, python-format
+msgid "Branch %s"
+msgstr ""
+
+#: rhodecode/templates/changelog/changelog.html:258
 msgid "There are no changes yet"
 msgstr ""
 
 #: rhodecode/templates/changelog/changelog_details.html:4
-#: rhodecode/templates/changeset/changeset.html:94
-msgid "removed"
+#: rhodecode/templates/changeset/changeset.html:91
+msgid "Removed"
 msgstr ""
 
 #: rhodecode/templates/changelog/changelog_details.html:5
-#: rhodecode/templates/changeset/changeset.html:95
-msgid "changed"
+#: rhodecode/templates/changeset/changeset.html:92
+msgid "Changed"
 msgstr ""
 
 #: rhodecode/templates/changelog/changelog_details.html:6
-#: rhodecode/templates/changeset/changeset.html:96
-msgid "added"
+#: rhodecode/templates/changeset/changeset.html:93
+msgid "Added"
 msgstr ""
 
 #: rhodecode/templates/changelog/changelog_details.html:8
 #: rhodecode/templates/changelog/changelog_details.html:9
 #: rhodecode/templates/changelog/changelog_details.html:10
-#: rhodecode/templates/changeset/changeset.html:98
-#: rhodecode/templates/changeset/changeset.html:99
-#: rhodecode/templates/changeset/changeset.html:100
+#: rhodecode/templates/changeset/changeset.html:95
+#: rhodecode/templates/changeset/changeset.html:96
+#: rhodecode/templates/changeset/changeset.html:97
 #, python-format
-msgid "affected %s files"
+msgid "Affected %s files"
 msgstr ""
 
 #: rhodecode/templates/changeset/changeset.html:6
@@ -3182,112 +3334,144 @@
 msgid "%s Changeset"
 msgstr ""
 
-#: rhodecode/templates/changeset/changeset.html:14
-msgid "Changeset"
-msgstr ""
-
-#: rhodecode/templates/changeset/changeset.html:52
+#: rhodecode/templates/changeset/changeset.html:39
+msgid "No parents"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset.html:49
 msgid "No children"
 msgstr ""
 
-#: rhodecode/templates/changeset/changeset.html:70
-#: rhodecode/templates/changeset/diff_block.html:20
-msgid "raw diff"
-msgstr ""
-
-#: rhodecode/templates/changeset/changeset.html:71
-msgid "patch diff"
-msgstr ""
-
-#: rhodecode/templates/changeset/changeset.html:72
-#: rhodecode/templates/changeset/diff_block.html:21
-msgid "download diff"
-msgstr ""
-
-#: rhodecode/templates/changeset/changeset.html:76
-#: rhodecode/templates/changeset/changeset_file_comment.html:82
+#: rhodecode/templates/changeset/changeset.html:62
+#: rhodecode/templates/changeset/changeset_file_comment.html:20
+#: rhodecode/templates/changeset/changeset_range.html:44
+msgid "Changeset status"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset.html:67
+#: rhodecode/templates/changeset/diff_block.html:23
+msgid "Raw diff"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset.html:68
+msgid "Patch diff"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset.html:69
+#: rhodecode/templates/changeset/diff_block.html:24
+msgid "Download diff"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset.html:73
+#: rhodecode/templates/changeset/changeset_file_comment.html:97
 #, python-format
 msgid "%d comment"
 msgid_plural "%d comments"
 msgstr[0] ""
 msgstr[1] ""
 
-#: rhodecode/templates/changeset/changeset.html:76
-#: rhodecode/templates/changeset/changeset_file_comment.html:82
+#: rhodecode/templates/changeset/changeset.html:73
+#: rhodecode/templates/changeset/changeset_file_comment.html:97
 #, python-format
 msgid "(%d inline)"
 msgid_plural "(%d inline)"
 msgstr[0] ""
 msgstr[1] ""
 
-#: rhodecode/templates/changeset/changeset.html:122
-#: rhodecode/templates/compare/compare_diff.html:44
-#: rhodecode/templates/pullrequests/pullrequest_show.html:76
+#: rhodecode/templates/changeset/changeset.html:103
+#: rhodecode/templates/changeset/changeset_range.html:77
+msgid "merge"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset.html:119
+#: rhodecode/templates/compare/compare_diff.html:40
+#: rhodecode/templates/pullrequests/pullrequest_show.html:113
 #, python-format
 msgid "%s file changed"
 msgid_plural "%s files changed"
 msgstr[0] ""
 msgstr[1] ""
 
-#: rhodecode/templates/changeset/changeset.html:124
-#: rhodecode/templates/compare/compare_diff.html:46
-#: rhodecode/templates/pullrequests/pullrequest_show.html:78
+#: rhodecode/templates/changeset/changeset.html:121
+#: rhodecode/templates/compare/compare_diff.html:42
+#: rhodecode/templates/pullrequests/pullrequest_show.html:115
 #, python-format
 msgid "%s file changed with %s insertions and %s deletions"
 msgid_plural "%s files changed with %s insertions and %s deletions"
 msgstr[0] ""
 msgstr[1] ""
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:42
-msgid "Submitting..."
-msgstr ""
-
-#: rhodecode/templates/changeset/changeset_file_comment.html:45
-msgid "Commenting on line {1}."
-msgstr ""
-
-#: rhodecode/templates/changeset/changeset_file_comment.html:46
-#: rhodecode/templates/changeset/changeset_file_comment.html:121
+#: rhodecode/templates/changeset/changeset.html:134
+#: rhodecode/templates/changeset/changeset.html:146
+#: rhodecode/templates/pullrequests/pullrequest_show.html:131
+#: rhodecode/templates/pullrequests/pullrequest_show.html:195
+msgid "Showing a huge diff might take some time and resources"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset.html:134
+#: rhodecode/templates/changeset/changeset.html:146
+#: rhodecode/templates/compare/compare_diff.html:58
+#: rhodecode/templates/compare/compare_diff.html:69
+#: rhodecode/templates/pullrequests/pullrequest_show.html:131
+#: rhodecode/templates/pullrequests/pullrequest_show.html:195
+msgid "Show full diff"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:30
 #, python-format
-msgid "Comments parsed using %s syntax with %s support."
-msgstr ""
-
-#: rhodecode/templates/changeset/changeset_file_comment.html:48
-#: rhodecode/templates/changeset/changeset_file_comment.html:123
-msgid "Use @username inside this text to send notification to this RhodeCode user"
-msgstr ""
-
-#: rhodecode/templates/changeset/changeset_file_comment.html:59
-#: rhodecode/templates/changeset/changeset_file_comment.html:143
-msgid "Comment"
+msgid "Status change on pull request #%s"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:32
+#, python-format
+msgid "Comment on pull request #%s"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:57
+msgid "Submitting..."
 msgstr ""
 
 #: rhodecode/templates/changeset/changeset_file_comment.html:60
-#: rhodecode/templates/changeset/changeset_file_comment.html:71
-msgid "Hide"
-msgstr ""
-
-#: rhodecode/templates/changeset/changeset_file_comment.html:67
+msgid "Commenting on line {1}."
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:61
+#: rhodecode/templates/changeset/changeset_file_comment.html:139
+#, python-format
+msgid "Comments parsed using %s syntax with %s support."
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:63
+#: rhodecode/templates/changeset/changeset_file_comment.html:141
+msgid "Use @username inside this text to send notification to this RhodeCode user"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:74
+#: rhodecode/templates/changeset/changeset_file_comment.html:161
+msgid "Comment"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:75
+msgid "Cancel"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:82
 msgid "You need to be logged in to comment."
 msgstr ""
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:67
+#: rhodecode/templates/changeset/changeset_file_comment.html:82
 msgid "Login now"
 msgstr ""
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:118
-msgid "Leave a comment"
-msgstr ""
-
-#: rhodecode/templates/changeset/changeset_file_comment.html:125
-msgid "Check this to change current status of code-review for this changeset"
-msgstr ""
-
-#: rhodecode/templates/changeset/changeset_file_comment.html:125
-msgid "change status"
-msgstr ""
-
-#: rhodecode/templates/changeset/changeset_file_comment.html:145
+#: rhodecode/templates/changeset/changeset_file_comment.html:86
+msgid "Hide"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:143
+msgid "Change status"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:163
 msgid "Comment and close"
 msgstr ""
 
@@ -3296,97 +3480,118 @@
 msgid "%s Changesets"
 msgstr ""
 
-#: rhodecode/templates/changeset/changeset_range.html:29
-#: rhodecode/templates/compare/compare_diff.html:29
-msgid "Compare View"
-msgstr ""
-
-#: rhodecode/templates/changeset/changeset_range.html:29
-msgid "Show combined compare"
-msgstr ""
-
-#: rhodecode/templates/changeset/changeset_range.html:54
+#: rhodecode/templates/changeset/changeset_range.html:52
 msgid "Files affected"
 msgstr ""
 
-#: rhodecode/templates/changeset/diff_block.html:19
-msgid "show full diff for this file"
-msgstr ""
-
-#: rhodecode/templates/changeset/diff_block.html:27
-msgid "show inline comments"
-msgstr ""
-
-#: rhodecode/templates/compare/compare_cs.html:5
+#: rhodecode/templates/changeset/diff_block.html:22
+msgid "Show full diff for this file"
+msgstr ""
+
+#: rhodecode/templates/changeset/diff_block.html:30
+msgid "Show inline comments"
+msgstr ""
+
+#: rhodecode/templates/changeset/diff_block.html:55
+msgid "Show file at latest version in this repo"
+msgstr ""
+
+#: rhodecode/templates/changeset/diff_block.html:56
+msgid "Show file at initial version in this repo"
+msgstr ""
+
+#: rhodecode/templates/compare/compare_cs.html:4
 msgid "No changesets"
 msgstr ""
 
-#: rhodecode/templates/compare/compare_diff.html:37
-#: rhodecode/templates/pullrequests/pullrequest_show.html:69
+#: rhodecode/templates/compare/compare_cs.html:32
+msgid "Ancestor"
+msgstr ""
+
+#: rhodecode/templates/compare/compare_diff.html:5
+#, python-format
+msgid "%s Compare"
+msgstr ""
+
+#: rhodecode/templates/compare/compare_diff.html:9
+msgid "Compare revisions"
+msgstr ""
+
+#: rhodecode/templates/compare/compare_diff.html:33
+#: rhodecode/templates/pullrequests/pullrequest_show.html:106
 #, python-format
 msgid "Showing %s commit"
 msgid_plural "Showing %s commits"
 msgstr[0] ""
 msgstr[1] ""
 
-#: rhodecode/templates/compare/compare_diff.html:52
-#: rhodecode/templates/pullrequests/pullrequest_show.html:84
+#: rhodecode/templates/compare/compare_diff.html:48
+#: rhodecode/templates/pullrequests/pullrequest_show.html:121
 msgid "No files"
 msgstr ""
 
-#: rhodecode/templates/data_table/_dt_elements.html:39
-#: rhodecode/templates/data_table/_dt_elements.html:41
-#: rhodecode/templates/data_table/_dt_elements.html:43
-msgid "Fork"
-msgstr ""
-
-#: rhodecode/templates/data_table/_dt_elements.html:60
-#: rhodecode/templates/journal/journal.html:89
-#: rhodecode/templates/summary/summary.html:77
+#: rhodecode/templates/compare/compare_diff.html:58
+#: rhodecode/templates/compare/compare_diff.html:69
+msgid "confirm to show potentially huge diff"
+msgstr ""
+
+#: rhodecode/templates/data_table/_dt_elements.html:54
+#: rhodecode/templates/summary/summary.html:69
 msgid "Mercurial repository"
 msgstr ""
 
-#: rhodecode/templates/data_table/_dt_elements.html:62
-#: rhodecode/templates/journal/journal.html:91
-#: rhodecode/templates/summary/summary.html:80
+#: rhodecode/templates/data_table/_dt_elements.html:56
+#: rhodecode/templates/summary/summary.html:72
 msgid "Git repository"
 msgstr ""
 
-#: rhodecode/templates/data_table/_dt_elements.html:69
-#: rhodecode/templates/journal/journal.html:97
-#: rhodecode/templates/summary/summary.html:87
-msgid "public repository"
-msgstr ""
-
-#: rhodecode/templates/data_table/_dt_elements.html:80
-#: rhodecode/templates/summary/summary.html:96
-#: rhodecode/templates/summary/summary.html:97
-msgid "Fork of"
-msgstr ""
-
-#: rhodecode/templates/data_table/_dt_elements.html:94
+#: rhodecode/templates/data_table/_dt_elements.html:74
+#, python-format
+msgid "Fork of %s"
+msgstr ""
+
+#: rhodecode/templates/data_table/_dt_elements.html:88
 msgid "No changesets yet"
 msgstr ""
 
-#: rhodecode/templates/data_table/_dt_elements.html:101
-#: rhodecode/templates/data_table/_dt_elements.html:103
+#: rhodecode/templates/data_table/_dt_elements.html:95
+#: rhodecode/templates/data_table/_dt_elements.html:97
 #, python-format
 msgid "Subscribe to %s rss feed"
 msgstr ""
 
-#: rhodecode/templates/data_table/_dt_elements.html:109
-#: rhodecode/templates/data_table/_dt_elements.html:111
+#: rhodecode/templates/data_table/_dt_elements.html:103
+#: rhodecode/templates/data_table/_dt_elements.html:105
 #, python-format
 msgid "Subscribe to %s atom feed"
 msgstr ""
 
 #: rhodecode/templates/data_table/_dt_elements.html:122
 #, python-format
+msgid "Confirm to delete this repository: %s"
+msgstr ""
+
+#: rhodecode/templates/data_table/_dt_elements.html:131
+#, python-format
 msgid "Confirm to delete this user: %s"
 msgstr ""
 
-#: rhodecode/templates/email_templates/changeset_comment.html:10
-msgid "New status$"
+#: rhodecode/templates/email_templates/changeset_comment.html:9
+#: rhodecode/templates/email_templates/pull_request_comment.html:15
+msgid "New status"
+msgstr ""
+
+#: rhodecode/templates/email_templates/changeset_comment.html:11
+#: rhodecode/templates/email_templates/pull_request_comment.html:9
+msgid "View this comment here"
+msgstr ""
+
+#: rhodecode/templates/email_templates/changeset_comment.html:14
+msgid "Repo"
+msgstr ""
+
+#: rhodecode/templates/email_templates/changeset_comment.html:16
+msgid "desc"
 msgstr ""
 
 #: rhodecode/templates/email_templates/main.html:8
@@ -3394,19 +3599,20 @@
 msgstr ""
 
 #: rhodecode/templates/email_templates/password_reset.html:4
-msgid "Hello"
+#, python-format
+msgid "Hello %s"
+msgstr ""
+
+#: rhodecode/templates/email_templates/password_reset.html:5
+msgid "We received a request to create a new password for your account."
 msgstr ""
 
 #: rhodecode/templates/email_templates/password_reset.html:6
-msgid "We received a request to create a new password for your account."
-msgstr ""
-
-#: rhodecode/templates/email_templates/password_reset.html:8
 msgid "You can generate it by clicking following URL"
 msgstr ""
 
-#: rhodecode/templates/email_templates/password_reset.html:12
-msgid "If you didn't request new password please ignore this email."
+#: rhodecode/templates/email_templates/password_reset.html:11
+msgid "If you did not request new password please ignore this email."
 msgstr ""
 
 #: rhodecode/templates/email_templates/pull_request.html:4
@@ -3415,33 +3621,28 @@
 msgstr ""
 
 #: rhodecode/templates/email_templates/pull_request.html:5
-msgid "title"
+msgid "View this pull request here"
 msgstr ""
 
 #: rhodecode/templates/email_templates/pull_request.html:6
-#: rhodecode/templates/pullrequests/pullrequest.html:115
+msgid "title"
+msgstr ""
+
+#: rhodecode/templates/email_templates/pull_request.html:7
 msgid "description"
 msgstr ""
 
-#: rhodecode/templates/email_templates/pull_request.html:11
+#: rhodecode/templates/email_templates/pull_request.html:12
 msgid "revisions for reviewing"
 msgstr ""
 
-#: rhodecode/templates/email_templates/pull_request.html:18
-msgid "View this pull request here"
-msgstr ""
-
-#: rhodecode/templates/email_templates/pull_request_comment.html:4
+#: rhodecode/templates/email_templates/pull_request_comment.html:3
 #, python-format
-msgid "User %s commented on pull request #%s for repository %s"
-msgstr ""
-
-#: rhodecode/templates/email_templates/pull_request_comment.html:10
-msgid "New status"
-msgstr ""
-
-#: rhodecode/templates/email_templates/pull_request_comment.html:14
-msgid "View this comment here"
+msgid "Pull request #%s for repository %s"
+msgstr ""
+
+#: rhodecode/templates/email_templates/pull_request_comment.html:13
+msgid "Closing pull request with status"
 msgstr ""
 
 #: rhodecode/templates/email_templates/registration.html:4
@@ -3452,106 +3653,104 @@
 msgid "View this user here"
 msgstr ""
 
-#: rhodecode/templates/errors/error_document.html:46
+#: rhodecode/templates/errors/error_document.html:55
 #, python-format
 msgid "You will be redirected to %s in %s seconds"
 msgstr ""
 
 #: rhodecode/templates/files/file_diff.html:4
 #, python-format
-msgid "%s File diff"
-msgstr ""
-
-#: rhodecode/templates/files/file_diff.html:12
+msgid "%s File Diff"
+msgstr ""
+
+#: rhodecode/templates/files/file_diff.html:8
 msgid "File diff"
 msgstr ""
 
-#: rhodecode/templates/files/files.html:4 rhodecode/templates/files/files.html:74
+#: rhodecode/templates/files/files.html:4 rhodecode/templates/files/files.html:76
 #, python-format
-msgid "%s files"
-msgstr ""
-
-#: rhodecode/templates/files/files.html:12
-#: rhodecode/templates/summary/summary.html:351
-msgid "files"
+msgid "%s Files"
+msgstr ""
+
+#: rhodecode/templates/files/files.html:30
+#: rhodecode/templates/files/files_add.html:31
+#: rhodecode/templates/files/files_edit.html:31
+#: rhodecode/templates/shortlog/shortlog_data.html:9
+msgid "Branch"
 msgstr ""
 
 #: rhodecode/templates/files/files_add.html:4
-#: rhodecode/templates/files/files_edit.html:4
 #, python-format
-msgid "%s Edit file"
+msgid "%s Files Add"
 msgstr ""
 
 #: rhodecode/templates/files/files_add.html:19
-msgid "add file"
-msgstr ""
-
-#: rhodecode/templates/files/files_add.html:40
+msgid "Add file"
+msgstr ""
+
+#: rhodecode/templates/files/files_add.html:38
+#: rhodecode/templates/files/files_browser.html:31
+#: rhodecode/templates/shortlog/shortlog_data.html:78
 msgid "Add new file"
 msgstr ""
 
-#: rhodecode/templates/files/files_add.html:45
+#: rhodecode/templates/files/files_add.html:43
 msgid "File Name"
 msgstr ""
 
-#: rhodecode/templates/files/files_add.html:49
-#: rhodecode/templates/files/files_add.html:58
+#: rhodecode/templates/files/files_add.html:47
+#: rhodecode/templates/files/files_add.html:56
 msgid "or"
 msgstr ""
 
-#: rhodecode/templates/files/files_add.html:49
-#: rhodecode/templates/files/files_add.html:54
+#: rhodecode/templates/files/files_add.html:47
+#: rhodecode/templates/files/files_add.html:52
 msgid "Upload file"
 msgstr ""
 
-#: rhodecode/templates/files/files_add.html:58
+#: rhodecode/templates/files/files_add.html:56
 msgid "Create new file"
 msgstr ""
 
-#: rhodecode/templates/files/files_add.html:63
-#: rhodecode/templates/files/files_edit.html:39
+#: rhodecode/templates/files/files_add.html:61
+#: rhodecode/templates/files/files_edit.html:37
 #: rhodecode/templates/files/files_ypjax.html:3
 msgid "Location"
 msgstr ""
 
-#: rhodecode/templates/files/files_add.html:67
+#: rhodecode/templates/files/files_add.html:65
 msgid "use / to separate directories"
 msgstr ""
 
-#: rhodecode/templates/files/files_add.html:77
-#: rhodecode/templates/files/files_edit.html:63
+#: rhodecode/templates/files/files_add.html:75
+#: rhodecode/templates/files/files_edit.html:61
 #: rhodecode/templates/shortlog/shortlog_data.html:6
-msgid "commit message"
-msgstr ""
-
-#: rhodecode/templates/files/files_add.html:81
-#: rhodecode/templates/files/files_edit.html:67
+msgid "Commit message"
+msgstr ""
+
+#: rhodecode/templates/files/files_add.html:79
+#: rhodecode/templates/files/files_edit.html:65
 msgid "Commit changes"
 msgstr ""
 
 #: rhodecode/templates/files/files_browser.html:13
-msgid "view"
+msgid "View"
 msgstr ""
 
 #: rhodecode/templates/files/files_browser.html:14
-msgid "previous revision"
+msgid "Previous revision"
 msgstr ""
 
 #: rhodecode/templates/files/files_browser.html:16
-msgid "next revision"
+msgid "Next revision"
 msgstr ""
 
 #: rhodecode/templates/files/files_browser.html:23
-msgid "follow current branch"
+msgid "Follow current branch"
 msgstr ""
 
 #: rhodecode/templates/files/files_browser.html:27
-msgid "search file list"
-msgstr ""
-
-#: rhodecode/templates/files/files_browser.html:31
-#: rhodecode/templates/shortlog/shortlog_data.html:78
-msgid "add new file"
+msgid "Search file list"
 msgstr ""
 
 #: rhodecode/templates/files/files_browser.html:35
@@ -3575,34 +3774,39 @@
 msgstr ""
 
 #: rhodecode/templates/files/files_browser.html:52
-msgid "Last commiter"
+msgid "Last committer"
+msgstr ""
+
+#: rhodecode/templates/files/files_edit.html:4
+#, python-format
+msgid "%s Files Edit"
 msgstr ""
 
 #: rhodecode/templates/files/files_edit.html:19
-msgid "edit file"
+msgid "Edit file"
+msgstr ""
+
+#: rhodecode/templates/files/files_edit.html:47
+#: rhodecode/templates/files/files_source.html:23
+msgid "Show annotation"
+msgstr ""
+
+#: rhodecode/templates/files/files_edit.html:48
+#: rhodecode/templates/files/files_source.html:25
+#: rhodecode/templates/files/files_source.html:55
+msgid "Show as raw"
 msgstr ""
 
 #: rhodecode/templates/files/files_edit.html:49
-#: rhodecode/templates/files/files_source.html:23
-msgid "show annotation"
-msgstr ""
-
-#: rhodecode/templates/files/files_edit.html:50
-#: rhodecode/templates/files/files_source.html:25
-#: rhodecode/templates/files/files_source.html:53
-msgid "show as raw"
-msgstr ""
-
-#: rhodecode/templates/files/files_edit.html:51
 #: rhodecode/templates/files/files_source.html:26
-msgid "download as raw"
-msgstr ""
-
-#: rhodecode/templates/files/files_edit.html:54
-msgid "source"
-msgstr ""
-
-#: rhodecode/templates/files/files_edit.html:59
+msgid "Download as raw"
+msgstr ""
+
+#: rhodecode/templates/files/files_edit.html:52
+msgid "Source"
+msgstr ""
+
+#: rhodecode/templates/files/files_edit.html:57
 msgid "Editing file"
 msgstr ""
 
@@ -3611,15 +3815,15 @@
 msgstr ""
 
 #: rhodecode/templates/files/files_history_box.html:9
-msgid "diff to revision"
+msgid "Diff to revision"
 msgstr ""
 
 #: rhodecode/templates/files/files_history_box.html:10
-msgid "show at revision"
+msgid "Show at revision"
 msgstr ""
 
 #: rhodecode/templates/files/files_history_box.html:11
-msgid "show full history"
+msgid "Show full history"
 msgstr ""
 
 #: rhodecode/templates/files/files_history_box.html:16
@@ -3634,15 +3838,28 @@
 msgstr ""
 
 #: rhodecode/templates/files/files_source.html:21
-msgid "show source"
-msgstr ""
-
-#: rhodecode/templates/files/files_source.html:44
+msgid "Show source"
+msgstr ""
+
+#: rhodecode/templates/files/files_source.html:29
+#, python-format
+msgid "Edit on branch:%s"
+msgstr ""
+
+#: rhodecode/templates/files/files_source.html:31
+msgid "Edit on branch:?"
+msgstr ""
+
+#: rhodecode/templates/files/files_source.html:31
+msgid "Editing files allowed only when on branch head revision"
+msgstr ""
+
+#: rhodecode/templates/files/files_source.html:46
 #, python-format
 msgid "Binary file (%s)"
 msgstr ""
 
-#: rhodecode/templates/files/files_source.html:53
+#: rhodecode/templates/files/files_source.html:55
 msgid "File is too big to display"
 msgstr ""
 
@@ -3663,8 +3880,10 @@
 msgid "%s Followers"
 msgstr ""
 
-#: rhodecode/templates/followers/followers.html:13
-msgid "followers"
+#: rhodecode/templates/followers/followers.html:9
+#: rhodecode/templates/summary/summary.html:183
+#: rhodecode/templates/summary/summary.html:184
+msgid "Followers"
 msgstr ""
 
 #: rhodecode/templates/followers/followers_data.html:12
@@ -3676,32 +3895,32 @@
 msgid "%s Fork"
 msgstr ""
 
-#: rhodecode/templates/forks/fork.html:31
+#: rhodecode/templates/forks/fork.html:28
 msgid "Fork name"
 msgstr ""
 
-#: rhodecode/templates/forks/fork.html:68
+#: rhodecode/templates/forks/fork.html:65
 msgid "Private"
 msgstr ""
 
-#: rhodecode/templates/forks/fork.html:77
+#: rhodecode/templates/forks/fork.html:74
 msgid "Copy permissions"
 msgstr ""
 
-#: rhodecode/templates/forks/fork.html:81
+#: rhodecode/templates/forks/fork.html:78
 msgid "Copy permissions from forked repository"
 msgstr ""
 
-#: rhodecode/templates/forks/fork.html:86
+#: rhodecode/templates/forks/fork.html:84
 msgid "Update after clone"
 msgstr ""
 
-#: rhodecode/templates/forks/fork.html:90
+#: rhodecode/templates/forks/fork.html:88
 msgid "Checkout source after making a clone"
 msgstr ""
 
-#: rhodecode/templates/forks/fork.html:94
-msgid "fork this repository"
+#: rhodecode/templates/forks/fork.html:93
+msgid "Fork this repository"
 msgstr ""
 
 #: rhodecode/templates/forks/forks.html:5
@@ -3709,12 +3928,14 @@
 msgid "%s Forks"
 msgstr ""
 
-#: rhodecode/templates/forks/forks.html:13
-msgid "forks"
+#: rhodecode/templates/forks/forks.html:9
+#: rhodecode/templates/summary/summary.html:189
+#: rhodecode/templates/summary/summary.html:190
+msgid "Forks"
 msgstr ""
 
 #: rhodecode/templates/forks/forks_data.html:17
-msgid "forked"
+msgid "Forked"
 msgstr ""
 
 #: rhodecode/templates/forks/forks_data.html:42
@@ -3730,44 +3951,27 @@
 msgstr ""
 
 #: rhodecode/templates/journal/journal.html:32
-#: rhodecode/templates/pullrequests/pullrequest.html:55
 msgid "Refresh"
 msgstr ""
 
 #: rhodecode/templates/journal/journal.html:35
 #: rhodecode/templates/journal/public_journal.html:24
-msgid "RSS feed"
-msgstr ""
-
-#: rhodecode/templates/journal/journal.html:38
-#: rhodecode/templates/journal/public_journal.html:27
 msgid "ATOM feed"
 msgstr ""
 
-#: rhodecode/templates/journal/journal.html:49
+#: rhodecode/templates/journal/journal.html:51
 msgid "Watched"
 msgstr ""
 
-#: rhodecode/templates/journal/journal.html:54
-msgid "ADD"
-msgstr ""
-
-#: rhodecode/templates/journal/journal.html:77
-msgid "following user"
-msgstr ""
-
-#: rhodecode/templates/journal/journal.html:77
-msgid "user"
-msgstr ""
-
-#: rhodecode/templates/journal/journal.html:110
-msgid "You are not following any users or repositories"
-msgstr ""
-
 #: rhodecode/templates/journal/journal_data.html:55
 msgid "No entries yet"
 msgstr ""
 
+#: rhodecode/templates/journal/public_journal.html:4
+#: rhodecode/templates/journal/public_journal.html:21
+msgid "Public Journal"
+msgstr ""
+
 #: rhodecode/templates/journal/public_journal.html:13
 msgid "ATOM public journal feed"
 msgstr ""
@@ -3776,147 +3980,126 @@
 msgid "RSS public journal feed"
 msgstr ""
 
-#: rhodecode/templates/journal/public_journal.html:21
-msgid "Public Journal"
-msgstr ""
-
 #: rhodecode/templates/pullrequests/pullrequest.html:4
-#: rhodecode/templates/pullrequests/pullrequest.html:12
+#: rhodecode/templates/pullrequests/pullrequest.html:8
 msgid "New pull request"
 msgstr ""
 
-#: rhodecode/templates/pullrequests/pullrequest.html:54
-msgid "refresh overview"
-msgstr ""
-
-#: rhodecode/templates/pullrequests/pullrequest.html:66
+#: rhodecode/templates/pullrequests/pullrequest.html:52
 msgid "Detailed compare view"
 msgstr ""
 
-#: rhodecode/templates/pullrequests/pullrequest.html:70
-#: rhodecode/templates/pullrequests/pullrequest_show.html:100
+#: rhodecode/templates/pullrequests/pullrequest.html:56
+#: rhodecode/templates/pullrequests/pullrequest_show.html:137
 msgid "Pull request reviewers"
 msgstr ""
 
-#: rhodecode/templates/pullrequests/pullrequest.html:79
-#: rhodecode/templates/pullrequests/pullrequest_show.html:112
+#: rhodecode/templates/pullrequests/pullrequest.html:65
+#: rhodecode/templates/pullrequests/pullrequest_show.html:149
 msgid "owner"
 msgstr ""
 
-#: rhodecode/templates/pullrequests/pullrequest.html:91
-#: rhodecode/templates/pullrequests/pullrequest_show.html:127
+#: rhodecode/templates/pullrequests/pullrequest.html:77
 msgid "Add reviewer to this pull request."
 msgstr ""
 
-#: rhodecode/templates/pullrequests/pullrequest.html:97
+#: rhodecode/templates/pullrequests/pullrequest.html:83
 msgid "Create new pull request"
 msgstr ""
 
-#: rhodecode/templates/pullrequests/pullrequest.html:106
+#: rhodecode/templates/pullrequests/pullrequest.html:92
+#: rhodecode/templates/pullrequests/pullrequest_data.html:14
 #: rhodecode/templates/pullrequests/pullrequest_show.html:25
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:33
 msgid "Title"
 msgstr ""
 
-#: rhodecode/templates/pullrequests/pullrequest.html:123
+#: rhodecode/templates/pullrequests/pullrequest.html:109
 msgid "Send pull request"
 msgstr ""
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:23
-#, python-format
-msgid "Closed %s"
-msgstr ""
-
-#: rhodecode/templates/pullrequests/pullrequest_show.html:23
+#: rhodecode/templates/pullrequests/pullrequest_show.html:4
 #, python-format
-msgid "with status %s"
-msgstr ""
-
-#: rhodecode/templates/pullrequests/pullrequest_show.html:31
-msgid "Status"
-msgstr ""
-
-#: rhodecode/templates/pullrequests/pullrequest_show.html:36
+msgid "%s Pull Request #%s"
+msgstr ""
+
+#: rhodecode/templates/pullrequests/pullrequest_show.html:35
+msgid "Review status"
+msgstr ""
+
+#: rhodecode/templates/pullrequests/pullrequest_show.html:40
 msgid "Pull request status"
 msgstr ""
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:44
+#: rhodecode/templates/pullrequests/pullrequest_show.html:53
 msgid "Still not reviewed by"
 msgstr ""
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:48
+#: rhodecode/templates/pullrequests/pullrequest_show.html:57
 #, python-format
 msgid "%d reviewer"
 msgid_plural "%d reviewers"
 msgstr[0] ""
 msgstr[1] ""
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:50
-msgid "pull request was reviewed by all reviewers"
-msgstr ""
-
-#: rhodecode/templates/pullrequests/pullrequest_show.html:58
-msgid "Created on"
+#: rhodecode/templates/pullrequests/pullrequest_show.html:59
+msgid "Pull request was reviewed by all reviewers"
 msgstr ""
 
 #: rhodecode/templates/pullrequests/pullrequest_show.html:65
+msgid "Origin repository"
+msgstr ""
+
+#: rhodecode/templates/pullrequests/pullrequest_show.html:89
+msgid "Created on"
+msgstr ""
+
+#: rhodecode/templates/pullrequests/pullrequest_show.html:102
 msgid "Compare view"
 msgstr ""
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:112
+#: rhodecode/templates/pullrequests/pullrequest_show.html:149
 msgid "reviewer"
 msgstr ""
 
+#: rhodecode/templates/pullrequests/pullrequest_show.html:164
+msgid "Add or remove reviewer to this pull request."
+msgstr ""
+
+#: rhodecode/templates/pullrequests/pullrequest_show.html:168
+msgid "Save changes"
+msgstr ""
+
 #: rhodecode/templates/pullrequests/pullrequest_show_all.html:4
-msgid "all pull requests"
-msgstr ""
-
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:12
-msgid "All pull requests"
-msgstr ""
-
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:27
-msgid "Closed"
+#, python-format
+msgid "%s Pull Requests"
 msgstr ""
 
 #: rhodecode/templates/search/search.html:6
-#, python-format
-msgid "Search \"%s\" in repository: %s"
+msgid "Search repository"
 msgstr ""
 
 #: rhodecode/templates/search/search.html:8
-#, python-format
-msgid "Search \"%s\" in all repositories"
-msgstr ""
-
-#: rhodecode/templates/search/search.html:12
-#: rhodecode/templates/search/search.html:32
-#, python-format
-msgid "Search in repository: %s"
-msgstr ""
-
-#: rhodecode/templates/search/search.html:14
-#: rhodecode/templates/search/search.html:34
+#: rhodecode/templates/search/search.html:16
 msgid "Search in all repositories"
 msgstr ""
 
-#: rhodecode/templates/search/search.html:48
+#: rhodecode/templates/search/search.html:50
 msgid "Search term"
 msgstr ""
 
-#: rhodecode/templates/search/search.html:60
+#: rhodecode/templates/search/search.html:62
 msgid "Search in"
 msgstr ""
 
-#: rhodecode/templates/search/search.html:63
-msgid "File contents"
-msgstr ""
-
-#: rhodecode/templates/search/search.html:64
-msgid "Commit messages"
-msgstr ""
-
 #: rhodecode/templates/search/search.html:65
+msgid "File contents"
+msgstr ""
+
+#: rhodecode/templates/search/search.html:66
+msgid "Commit messages"
+msgstr ""
+
+#: rhodecode/templates/search/search.html:67
 msgid "File names"
 msgstr ""
 
@@ -3926,39 +4109,23 @@
 msgid "Permission denied"
 msgstr ""
 
-#: rhodecode/templates/settings/repo_settings.html:5
-#, python-format
-msgid "%s Settings"
-msgstr ""
-
-#: rhodecode/templates/settings/repo_settings.html:102
-msgid "Delete repository"
-msgstr ""
-
-#: rhodecode/templates/settings/repo_settings.html:109
-msgid "Remove repo"
-msgstr ""
-
 #: rhodecode/templates/shortlog/shortlog.html:5
 #, python-format
-msgid "%s Shortlog"
-msgstr ""
-
+msgid "%s Lightweight Changelog"
+msgstr ""
+
+#: rhodecode/templates/shortlog/shortlog.html:11
 #: rhodecode/templates/shortlog/shortlog.html:15
-#: rhodecode/templates/shortlog/shortlog.html:19
-msgid "shortlog"
-msgstr ""
-
-#: rhodecode/templates/shortlog/shortlog_data.html:5
-msgid "revision"
+msgid "Lightweight Changelog"
 msgstr ""
 
 #: rhodecode/templates/shortlog/shortlog_data.html:7
-msgid "age"
-msgstr ""
-
-#: rhodecode/templates/shortlog/shortlog_data.html:8
-msgid "author"
+msgid "Age"
+msgstr ""
+
+#: rhodecode/templates/shortlog/shortlog_data.html:20
+#, python-format
+msgid "Click to open associated pull request #%s"
 msgstr ""
 
 #: rhodecode/templates/shortlog/shortlog_data.html:75
@@ -3978,156 +4145,165 @@
 msgid "%s Summary"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:12
-msgid "summary"
-msgstr ""
-
-#: rhodecode/templates/summary/summary.html:20
+#: rhodecode/templates/summary/summary.html:16
 #, python-format
-msgid "repo %s ATOM feed"
-msgstr ""
-
-#: rhodecode/templates/summary/summary.html:21
+msgid "%s ATOM feed"
+msgstr ""
+
+#: rhodecode/templates/summary/summary.html:17
 #, python-format
-msgid "repo %s RSS feed"
-msgstr ""
-
-#: rhodecode/templates/summary/summary.html:49
-#: rhodecode/templates/summary/summary.html:52
-msgid "ATOM"
-msgstr ""
-
-#: rhodecode/templates/summary/summary.html:70
+msgid "%s RSS feed"
+msgstr ""
+
+#: rhodecode/templates/summary/summary.html:62
 #, python-format
 msgid "Repository locked by %s"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:72
+#: rhodecode/templates/summary/summary.html:64
 msgid "Repository unlocked"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:91
+#: rhodecode/templates/summary/summary.html:83
 #, python-format
 msgid "Non changable ID %s"
 msgstr ""
 
+#: rhodecode/templates/summary/summary.html:88
+msgid "Public"
+msgstr ""
+
+#: rhodecode/templates/summary/summary.html:88
+#: rhodecode/templates/summary/summary.html:89
+msgid "Fork of"
+msgstr ""
+
 #: rhodecode/templates/summary/summary.html:96
-msgid "public"
-msgstr ""
-
-#: rhodecode/templates/summary/summary.html:104
-msgid "remote clone"
-msgstr ""
-
-#: rhodecode/templates/summary/summary.html:125
+msgid "Remote clone"
+msgstr ""
+
+#: rhodecode/templates/summary/summary.html:117
 msgid "Contact"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:139
+#: rhodecode/templates/summary/summary.html:131
 msgid "Clone url"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:142
+#: rhodecode/templates/summary/summary.html:136
 msgid "Show by Name"
 msgstr ""
 
+#: rhodecode/templates/summary/summary.html:137
+msgid "Show by ID"
+msgstr ""
+
 #: rhodecode/templates/summary/summary.html:143
-msgid "Show by ID"
+msgid "Trending files"
 msgstr ""
 
 #: rhodecode/templates/summary/summary.html:151
-msgid "Trending files"
+#: rhodecode/templates/summary/summary.html:167
+#: rhodecode/templates/summary/summary.html:232
+msgid "enable"
 msgstr ""
 
 #: rhodecode/templates/summary/summary.html:159
-#: rhodecode/templates/summary/summary.html:175
-#: rhodecode/templates/summary/summary.html:203
-msgid "enable"
-msgstr ""
-
-#: rhodecode/templates/summary/summary.html:167
 msgid "Download"
 msgstr ""
 
+#: rhodecode/templates/summary/summary.html:163
+msgid "There are no downloads yet"
+msgstr ""
+
+#: rhodecode/templates/summary/summary.html:165
+msgid "Downloads are disabled for this repository"
+msgstr ""
+
 #: rhodecode/templates/summary/summary.html:171
-msgid "There are no downloads yet"
-msgstr ""
-
-#: rhodecode/templates/summary/summary.html:173
-msgid "Downloads are disabled for this repository"
-msgstr ""
-
-#: rhodecode/templates/summary/summary.html:179
 msgid "Download as zip"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:182
+#: rhodecode/templates/summary/summary.html:174
 msgid "Check this to download archive with subrepos"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:182
+#: rhodecode/templates/summary/summary.html:174
 msgid "with subrepos"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:195
+#: rhodecode/templates/summary/summary.html:197
+msgid "Repository Size"
+msgstr ""
+
+#: rhodecode/templates/summary/summary.html:204
+#: rhodecode/templates/summary/summary.html:206
+msgid "Feed"
+msgstr ""
+
+#: rhodecode/templates/summary/summary.html:224
 msgid "Commit activity by day / author"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:206
+#: rhodecode/templates/summary/summary.html:235
 msgid "Stats gathered: "
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:227
-msgid "Shortlog"
-msgstr ""
-
-#: rhodecode/templates/summary/summary.html:229
+#: rhodecode/templates/summary/summary.html:256
+msgid "Latest changes"
+msgstr ""
+
+#: rhodecode/templates/summary/summary.html:258
 msgid "Quick start"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:243
+#: rhodecode/templates/summary/summary.html:272
 #, python-format
 msgid "Readme file at revision '%s'"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:246
+#: rhodecode/templates/summary/summary.html:275
 msgid "Permalink to this readme"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:304
+#: rhodecode/templates/summary/summary.html:333
 #, python-format
 msgid "Download %s as %s"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:661
+#: rhodecode/templates/summary/summary.html:380
+msgid "files"
+msgstr ""
+
+#: rhodecode/templates/summary/summary.html:690
 msgid "commits"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:662
+#: rhodecode/templates/summary/summary.html:691
 msgid "files added"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:663
+#: rhodecode/templates/summary/summary.html:692
 msgid "files changed"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:664
+#: rhodecode/templates/summary/summary.html:693
 msgid "files removed"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:667
+#: rhodecode/templates/summary/summary.html:695
 msgid "commit"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:668
+#: rhodecode/templates/summary/summary.html:696
 msgid "file added"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:669
+#: rhodecode/templates/summary/summary.html:697
 msgid "file changed"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:670
+#: rhodecode/templates/summary/summary.html:698
 msgid "file removed"
 msgstr ""
 
@@ -4136,7 +4312,7 @@
 msgid "%s Tags"
 msgstr ""
 
-#: rhodecode/templates/tags/tags.html:29
+#: rhodecode/templates/tags/tags.html:26
 msgid "Compare tags"
 msgstr ""
 
Binary file rhodecode/i18n/zh_CN/LC_MESSAGES/rhodecode.mo has changed
--- a/rhodecode/i18n/zh_CN/LC_MESSAGES/rhodecode.po	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/i18n/zh_CN/LC_MESSAGES/rhodecode.po	Sun Apr 07 18:37:22 2013 +0200
@@ -8,27 +8,28 @@
 msgstr ""
 "Project-Id-Version: RhodeCode 1.4.4\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2012-12-14 12:53+0800\n"
+"POT-Creation-Date: 2013-04-05 10:17-0700\n"
 "PO-Revision-Date: 2012-12-14 12:57+0800\n"
 "Last-Translator: xpol <xpolife@gmail.com>\n"
 "Language-Team: mikespook\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
+"Plural-Forms: nplurals=1; plural=0\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Generated-By: Babel 0.9.6\n"
-"X-Generator: Poedit 1.5.4\n"
 
 #: rhodecode/controllers/changelog.py:95
 msgid "All Branches"
 msgstr "所有分支"
 
 #: rhodecode/controllers/changeset.py:83
-msgid "show white space"
+#, fuzzy
+msgid "Show white space"
 msgstr "显示空白字符"
 
 #: rhodecode/controllers/changeset.py:90 rhodecode/controllers/changeset.py:97
-msgid "ignore white space"
+#, fuzzy
+msgid "Ignore white space"
 msgstr "忽略空白字符"
 
 #: rhodecode/controllers/changeset.py:163
@@ -36,20 +37,21 @@
 msgid "%s line context"
 msgstr "%s行上下文"
 
-#: rhodecode/controllers/changeset.py:314
-#: rhodecode/controllers/pullrequests.py:417
+#: rhodecode/controllers/changeset.py:329
+#: rhodecode/controllers/pullrequests.py:438
 #, python-format
 msgid "Status change -> %s"
 msgstr "状态修改为%s"
 
-#: rhodecode/controllers/changeset.py:345
+#: rhodecode/controllers/changeset.py:360
+#, fuzzy
 msgid ""
-"Changing status on a changeset associated witha closed pull request is not "
-"allowed"
+"Changing status on a changeset associated with a closed pull request is "
+"not allowed"
 msgstr "不允许修改已关闭拉取请求的修订集状态"
 
-#: rhodecode/controllers/compare.py:75
-#: rhodecode/controllers/pullrequests.py:121
+#: rhodecode/controllers/compare.py:74
+#: rhodecode/controllers/pullrequests.py:167
 #: rhodecode/controllers/shortlog.py:100
 msgid "There are no changesets yet"
 msgstr "还没有修订集"
@@ -59,8 +61,7 @@
 msgstr "主页"
 
 #: rhodecode/controllers/error.py:98
-msgid ""
-"The request could not be understood by the server due to malformed syntax."
+msgid "The request could not be understood by the server due to malformed syntax."
 msgstr "由于错误的语法,服务器无法对请求进行响应。"
 
 #: rhodecode/controllers/error.py:101
@@ -92,157 +93,194 @@
 msgstr "%s %s订阅"
 
 #: rhodecode/controllers/feed.py:86
-#: rhodecode/templates/changeset/changeset.html:137
-#: rhodecode/templates/changeset/changeset.html:149
-#: rhodecode/templates/compare/compare_diff.html:62
-#: rhodecode/templates/compare/compare_diff.html:73
-#: rhodecode/templates/pullrequests/pullrequest_show.html:94
-#: rhodecode/templates/pullrequests/pullrequest_show.html:153
+#: rhodecode/templates/changeset/changeset.html:134
+#: rhodecode/templates/changeset/changeset.html:146
+#: rhodecode/templates/compare/compare_diff.html:58
+#: rhodecode/templates/compare/compare_diff.html:69
+#: rhodecode/templates/pullrequests/pullrequest_show.html:131
+#: rhodecode/templates/pullrequests/pullrequest_show.html:195
 msgid "Changeset was too big and was cut off..."
 msgstr "修订集太大已被截断......"
 
-#: rhodecode/controllers/feed.py:92
-msgid "commited on"
+#: rhodecode/controllers/feed.py:91
+#, fuzzy, python-format
+msgid "%s committed on %s"
 msgstr "提交于"
 
-#: rhodecode/controllers/files.py:86
-msgid "click here to add new file"
+#: rhodecode/controllers/files.py:88
+#, fuzzy
+msgid "Click here to add new file"
 msgstr "点击此处添加新文件"
 
-#: rhodecode/controllers/files.py:87
+#: rhodecode/controllers/files.py:89
 #, python-format
 msgid "There are no files yet %s"
 msgstr "还没有文件%s"
 
-#: rhodecode/controllers/files.py:265 rhodecode/controllers/files.py:325
+#: rhodecode/controllers/files.py:267 rhodecode/controllers/files.py:335
 #, python-format
 msgid "This repository is has been locked by %s on %s"
 msgstr "版本库由%s于%s锁定"
 
-#: rhodecode/controllers/files.py:292
-#, python-format
-msgid "Edited %s via RhodeCode"
+#: rhodecode/controllers/files.py:279
+msgid "You can only edit files with revision being a valid branch "
+msgstr ""
+
+#: rhodecode/controllers/files.py:293
+#, fuzzy, python-format
+msgid "Edited file %s via RhodeCode"
 msgstr "通过RhodeCode修改了%s"
 
-#: rhodecode/controllers/files.py:297
+#: rhodecode/controllers/files.py:309
 msgid "No changes"
 msgstr "无变更"
 
-#: rhodecode/controllers/files.py:308 rhodecode/controllers/files.py:372
+#: rhodecode/controllers/files.py:318 rhodecode/controllers/files.py:388
 #, python-format
 msgid "Successfully committed to %s"
 msgstr "成功提交到%s"
 
-#: rhodecode/controllers/files.py:313 rhodecode/controllers/files.py:378
+#: rhodecode/controllers/files.py:323 rhodecode/controllers/files.py:394
 msgid "Error occurred during commit"
 msgstr "提交时发生错误"
 
-#: rhodecode/controllers/files.py:344
-#, python-format
-msgid "Added %s via RhodeCode"
+#: rhodecode/controllers/files.py:347
+#, fuzzy
+msgid "Added file via RhodeCode"
 msgstr "通过RhodeCode添加了%s"
 
-#: rhodecode/controllers/files.py:358
+#: rhodecode/controllers/files.py:364
 msgid "No content"
 msgstr "无内容"
 
-#: rhodecode/controllers/files.py:362
+#: rhodecode/controllers/files.py:368
 msgid "No filename"
 msgstr "无文件名"
 
-#: rhodecode/controllers/files.py:404
-msgid "downloads disabled"
+#: rhodecode/controllers/files.py:372
+msgid "Location must be relative path and must not contain .. in path"
+msgstr ""
+
+#: rhodecode/controllers/files.py:420
+#, fuzzy
+msgid "Downloads disabled"
 msgstr "禁止下载"
 
-#: rhodecode/controllers/files.py:415
+#: rhodecode/controllers/files.py:431
 #, python-format
 msgid "Unknown revision %s"
 msgstr "未知版本%s"
 
-#: rhodecode/controllers/files.py:417
+#: rhodecode/controllers/files.py:433
 msgid "Empty repository"
 msgstr "空版本库"
 
-#: rhodecode/controllers/files.py:419
+#: rhodecode/controllers/files.py:435
 msgid "Unknown archive type"
 msgstr "未知包类型"
 
-#: rhodecode/controllers/files.py:564
-#: rhodecode/templates/changeset/changeset_range.html:13
-#: rhodecode/templates/changeset/changeset_range.html:31
+#: rhodecode/controllers/files.py:617
+#: rhodecode/templates/changeset/changeset_range.html:9
 msgid "Changesets"
 msgstr "修订集"
 
-#: rhodecode/controllers/files.py:565 rhodecode/controllers/pullrequests.py:74
-#: rhodecode/controllers/summary.py:236 rhodecode/model/scm.py:550
+#: rhodecode/controllers/files.py:618 rhodecode/controllers/pullrequests.py:131
+#: rhodecode/controllers/summary.py:247 rhodecode/model/scm.py:606
+#: rhodecode/templates/switch_to_list.html:3
+#: rhodecode/templates/branches/branches.html:10
 msgid "Branches"
 msgstr "分支"
 
-#: rhodecode/controllers/files.py:566 rhodecode/controllers/pullrequests.py:78
-#: rhodecode/controllers/summary.py:237 rhodecode/model/scm.py:561
+#: rhodecode/controllers/files.py:619 rhodecode/controllers/pullrequests.py:132
+#: rhodecode/controllers/summary.py:248 rhodecode/model/scm.py:617
+#: rhodecode/templates/switch_to_list.html:15
+#: rhodecode/templates/shortlog/shortlog_data.html:10
+#: rhodecode/templates/tags/tags.html:10
 msgid "Tags"
 msgstr "标签"
 
-#: rhodecode/controllers/forks.py:158
-#, python-format
-msgid "forked %s repository as %s"
+#: rhodecode/controllers/forks.py:175
+#, fuzzy, python-format
+msgid "Forked repository %s as %s"
 msgstr "版本库%s被复刻到%s"
 
-#: rhodecode/controllers/forks.py:172
+#: rhodecode/controllers/forks.py:189
 #, python-format
 msgid "An error occurred during repository forking %s"
 msgstr "在复刻版本库%s的时候发生错误"
 
-#: rhodecode/controllers/journal.py:218 rhodecode/controllers/journal.py:261
+#: rhodecode/controllers/journal.py:275 rhodecode/controllers/journal.py:318
 msgid "public journal"
 msgstr "公共日志"
 
-#: rhodecode/controllers/journal.py:222 rhodecode/controllers/journal.py:265
-#: rhodecode/templates/base/base.html:232
+#: rhodecode/controllers/journal.py:279 rhodecode/controllers/journal.py:322
 #: rhodecode/templates/journal/journal.html:12
 msgid "journal"
 msgstr "日志"
 
-#: rhodecode/controllers/login.py:143
-msgid "You have successfully registered into rhodecode"
+#: rhodecode/controllers/login.py:138
+#, fuzzy
+msgid "You have successfully registered into RhodeCode"
 msgstr "成功注册到RhodeCode"
 
-#: rhodecode/controllers/login.py:164
+#: rhodecode/controllers/login.py:159
 msgid "Your password reset link was sent"
 msgstr "密码重置链接已经发送"
 
-#: rhodecode/controllers/login.py:184
+#: rhodecode/controllers/login.py:179
 msgid ""
-"Your password reset was successful, new password has been sent to your email"
+"Your password reset was successful, new password has been sent to your "
+"email"
 msgstr "密码已经成功重置,新密码已经发送到你的邮箱"
 
-#: rhodecode/controllers/pullrequests.py:76 rhodecode/model/scm.py:556
+#: rhodecode/controllers/pullrequests.py:118
+#: rhodecode/templates/changeset/changeset.html:10
+#: rhodecode/templates/email_templates/changeset_comment.html:15
+msgid "Changeset"
+msgstr "修订集"
+
+#: rhodecode/controllers/pullrequests.py:128
+msgid "Special"
+msgstr ""
+
+#: rhodecode/controllers/pullrequests.py:129
+#, fuzzy
+msgid "Peer branches"
+msgstr "分支"
+
+#: rhodecode/controllers/pullrequests.py:130 rhodecode/model/scm.py:612
+#: rhodecode/templates/switch_to_list.html:28
+#: rhodecode/templates/bookmarks/bookmarks.html:10
 msgid "Bookmarks"
 msgstr "书签"
 
-#: rhodecode/controllers/pullrequests.py:190
+#: rhodecode/controllers/pullrequests.py:228
 msgid "Pull request requires a title with min. 3 chars"
 msgstr "拉取请求的标题至少3个字符"
 
-#: rhodecode/controllers/pullrequests.py:192
-msgid "error during creation of pull request"
+#: rhodecode/controllers/pullrequests.py:230
+#, fuzzy
+msgid "Error creating pull request"
 msgstr "提交拉取请求时发生错误"
 
-#: rhodecode/controllers/pullrequests.py:224
+#: rhodecode/controllers/pullrequests.py:251
 msgid "Successfully opened new pull request"
 msgstr "成功提交拉取请求"
 
-#: rhodecode/controllers/pullrequests.py:227
+#: rhodecode/controllers/pullrequests.py:254
 msgid "Error occurred during sending pull request"
 msgstr "提交拉取请求时发生错误"
 
-#: rhodecode/controllers/pullrequests.py:260
+#: rhodecode/controllers/pullrequests.py:287
 msgid "Successfully deleted pull request"
 msgstr "成功删除拉取请求"
 
-#: rhodecode/controllers/pullrequests.py:452
-msgid ""
-"Closing pull request on other statuses than rejected or approved forbidden"
+#: rhodecode/controllers/pullrequests.py:441
+msgid "Closing with"
+msgstr ""
+
+#: rhodecode/controllers/pullrequests.py:478
+msgid "Closing pull request on other statuses than rejected or approved forbidden"
 msgstr "只能以批准或者驳回的状态关闭拉取请求"
 
 #: rhodecode/controllers/search.py:134
@@ -257,55 +295,12 @@
 msgid "An error occurred during this search operation"
 msgstr "在搜索操作中发生异常"
 
-#: rhodecode/controllers/settings.py:119
-#: rhodecode/controllers/admin/repos.py:272
-#, python-format
-msgid "Repository %s updated successfully"
-msgstr "版本库%s成功更新"
-
-#: rhodecode/controllers/settings.py:137
-#: rhodecode/controllers/admin/repos.py:290
-#, python-format
-msgid "error occurred during update of repository %s"
-msgstr "在更新版本库%s的时候发生错误"
-
-#: rhodecode/controllers/settings.py:162
-#: rhodecode/controllers/admin/repos.py:315
-#, python-format
-msgid "deleted repository %s"
-msgstr "已经删除版本库%s"
-
-#: rhodecode/controllers/settings.py:166
-#: rhodecode/controllers/admin/repos.py:325
-#: rhodecode/controllers/admin/repos.py:331
-#, python-format
-msgid "An error occurred during deletion of %s"
-msgstr "在删除%s的时候发生错误"
-
-#: rhodecode/controllers/settings.py:185
-msgid "unlocked"
-msgstr "未锁"
-
-#: rhodecode/controllers/settings.py:188
-msgid "locked"
-msgstr "已锁"
-
-#: rhodecode/controllers/settings.py:190
-#, python-format
-msgid "Repository has been %s"
-msgstr "版本库已被%s"
-
-#: rhodecode/controllers/settings.py:194
-#: rhodecode/controllers/admin/repos.py:423
-msgid "An error occurred during unlocking"
-msgstr "解锁时发生错误"
-
-#: rhodecode/controllers/summary.py:140
+#: rhodecode/controllers/summary.py:141
 msgid "No data loaded yet"
 msgstr "数据未加载"
 
-#: rhodecode/controllers/summary.py:144
-#: rhodecode/templates/summary/summary.html:157
+#: rhodecode/controllers/summary.py:147
+#: rhodecode/templates/summary/summary.html:149
 msgid "Statistics are disabled for this repository"
 msgstr "该版本库统计功能已经禁用"
 
@@ -314,7 +309,8 @@
 msgstr "默认设置已经成功更新"
 
 #: rhodecode/controllers/admin/defaults.py:110
-msgid "error occurred during update of defaults"
+#, fuzzy
+msgid "Error occurred during update of defaults"
 msgstr "更新默认设置时发生错误"
 
 #: rhodecode/controllers/admin/ldap_settings.py:50
@@ -362,7 +358,7 @@
 msgstr "LDAP连接上的START_TLS"
 
 #: rhodecode/controllers/admin/ldap_settings.py:126
-msgid "Ldap settings updated successfully"
+msgid "LDAP settings updated successfully"
 msgstr "LDAP设置已经成功更新"
 
 #: rhodecode/controllers/admin/ldap_settings.py:130
@@ -370,696 +366,867 @@
 msgstr "无法启用LDAP。缺失“python-ldap”库。"
 
 #: rhodecode/controllers/admin/ldap_settings.py:147
-msgid "error occurred during update of ldap settings"
+#, fuzzy
+msgid "Error occurred during update of ldap settings"
 msgstr "更新LDAP设置时发生错误"
 
-#: rhodecode/controllers/admin/permissions.py:59
-#: rhodecode/controllers/admin/permissions.py:63
-msgid "None"
-msgstr "无"
-
 #: rhodecode/controllers/admin/permissions.py:60
 #: rhodecode/controllers/admin/permissions.py:64
-msgid "Read"
-msgstr "读"
+msgid "None"
+msgstr "无"
 
 #: rhodecode/controllers/admin/permissions.py:61
 #: rhodecode/controllers/admin/permissions.py:65
-msgid "Write"
-msgstr "写"
+msgid "Read"
+msgstr "读"
 
 #: rhodecode/controllers/admin/permissions.py:62
 #: rhodecode/controllers/admin/permissions.py:66
+msgid "Write"
+msgstr "写"
+
+#: rhodecode/controllers/admin/permissions.py:63
+#: rhodecode/controllers/admin/permissions.py:67
 #: rhodecode/templates/admin/defaults/defaults.html:9
 #: rhodecode/templates/admin/ldap/ldap.html:9
 #: rhodecode/templates/admin/permissions/permissions.html:9
-#: rhodecode/templates/admin/repos/repo_add.html:9
-#: rhodecode/templates/admin/repos/repo_edit.html:9
+#: rhodecode/templates/admin/repos/repo_add.html:10
+#: rhodecode/templates/admin/repos/repo_add.html:14
 #: rhodecode/templates/admin/repos/repos.html:9
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:8
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:8
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:10
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:9
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:9
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:11
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:13
 #: rhodecode/templates/admin/settings/hooks.html:9
 #: rhodecode/templates/admin/settings/settings.html:9
 #: rhodecode/templates/admin/users/user_add.html:8
 #: rhodecode/templates/admin/users/user_edit.html:9
-#: rhodecode/templates/admin/users/user_edit.html:126
+#: rhodecode/templates/admin/users/user_edit.html:133
 #: rhodecode/templates/admin/users/users.html:9
+#: rhodecode/templates/admin/users/users.html:85
 #: rhodecode/templates/admin/users_groups/users_group_add.html:8
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:9
 #: rhodecode/templates/admin/users_groups/users_groups.html:9
-#: rhodecode/templates/base/base.html:197
-#: rhodecode/templates/base/base.html:350
-#: rhodecode/templates/base/base.html:352
-#: rhodecode/templates/base/base.html:354
+#: rhodecode/templates/base/base.html:292
+#: rhodecode/templates/base/base.html:293
+#: rhodecode/templates/base/base.html:299
+#: rhodecode/templates/base/base.html:300
 msgid "Admin"
 msgstr "管理"
 
-#: rhodecode/controllers/admin/permissions.py:69
-msgid "disabled"
-msgstr "禁用"
-
-#: rhodecode/controllers/admin/permissions.py:71
-msgid "allowed with manual account activation"
-msgstr "允许手工启用帐号"
-
-#: rhodecode/controllers/admin/permissions.py:73
-msgid "allowed with automatic account activation"
-msgstr "允许自动启用帐号"
-
-#: rhodecode/controllers/admin/permissions.py:75
-#: rhodecode/controllers/admin/permissions.py:78
+#: rhodecode/controllers/admin/permissions.py:70
+#: rhodecode/controllers/admin/permissions.py:76
+#: rhodecode/controllers/admin/permissions.py:79
 msgid "Disabled"
 msgstr "停用"
 
-#: rhodecode/controllers/admin/permissions.py:76
-#: rhodecode/controllers/admin/permissions.py:79
+#: rhodecode/controllers/admin/permissions.py:72
+#, fuzzy
+msgid "Allowed with manual account activation"
+msgstr "允许手工启用帐号"
+
+#: rhodecode/controllers/admin/permissions.py:74
+#, fuzzy
+msgid "Allowed with automatic account activation"
+msgstr "允许自动启用帐号"
+
+#: rhodecode/controllers/admin/permissions.py:77
+#: rhodecode/controllers/admin/permissions.py:80
 msgid "Enabled"
 msgstr "启用"
 
-#: rhodecode/controllers/admin/permissions.py:122
+#: rhodecode/controllers/admin/permissions.py:128
 msgid "Default permissions updated successfully"
 msgstr "成功更新默认权限"
 
-#: rhodecode/controllers/admin/permissions.py:136
-msgid "error occurred during update of permissions"
+#: rhodecode/controllers/admin/permissions.py:142
+#, fuzzy
+msgid "Error occurred during update of permissions"
 msgstr "更新权限时发生错误"
 
-#: rhodecode/controllers/admin/repos.py:121
+#: rhodecode/controllers/admin/repos.py:127
 msgid "--REMOVE FORK--"
 msgstr "-- 移除复刻 --"
 
-#: rhodecode/controllers/admin/repos.py:190
-#, python-format
-msgid "created repository %s from %s"
+#: rhodecode/controllers/admin/repos.py:168
+#, fuzzy, python-format
+msgid "Created repository %s from %s"
 msgstr "新版本库%s基于%s建立。"
 
-#: rhodecode/controllers/admin/repos.py:194
+#: rhodecode/controllers/admin/repos.py:174
+#, fuzzy, python-format
+msgid "Created repository %s"
+msgstr "建立版本库%s"
+
+#: rhodecode/controllers/admin/repos.py:197
+#, fuzzy, python-format
+msgid "Error creating repository %s"
+msgstr "建立版本库%s"
+
+#: rhodecode/controllers/admin/repos.py:266
 #, python-format
-msgid "created repository %s"
-msgstr "建立版本库%s"
-
-#: rhodecode/controllers/admin/repos.py:225
+msgid "Repository %s updated successfully"
+msgstr "版本库%s成功更新"
+
+#: rhodecode/controllers/admin/repos.py:284
+#, fuzzy, python-format
+msgid "Error occurred during update of repository %s"
+msgstr "在更新版本库%s的时候发生错误"
+
+#: rhodecode/controllers/admin/repos.py:311
+#: rhodecode/controllers/api/api.py:877
 #, python-format
-msgid "error occurred during creation of repository %s"
-msgstr "创建版本库时发生错误%s"
-
-#: rhodecode/controllers/admin/repos.py:320
+msgid "Detached %s forks"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:314
+#: rhodecode/controllers/api/api.py:879
+#, fuzzy, python-format
+msgid "Deleted %s forks"
+msgstr "已经删除版本库%s"
+
+#: rhodecode/controllers/admin/repos.py:319
+#, fuzzy, python-format
+msgid "Deleted repository %s"
+msgstr "已经删除版本库%s"
+
+#: rhodecode/controllers/admin/repos.py:322
 #, python-format
 msgid "Cannot delete %s it still contains attached forks"
 msgstr "无法删除%s因为它还有其他分复刻本库"
 
-#: rhodecode/controllers/admin/repos.py:349
+#: rhodecode/controllers/admin/repos.py:327
+#, python-format
+msgid "An error occurred during deletion of %s"
+msgstr "在删除%s的时候发生错误"
+
+#: rhodecode/controllers/admin/repos.py:365
+#, fuzzy
+msgid "Repository permissions updated"
+msgstr "禁用创建版本库"
+
+#: rhodecode/controllers/admin/repos.py:384
 msgid "An error occurred during deletion of repository user"
 msgstr "删除版本库用户时发生错误"
 
-#: rhodecode/controllers/admin/repos.py:368
-msgid "An error occurred during deletion of repository users groups"
+#: rhodecode/controllers/admin/repos.py:403
+#, fuzzy
+msgid "An error occurred during deletion of repository user groups"
 msgstr "删除版本库用户组时发生错误"
 
-#: rhodecode/controllers/admin/repos.py:386
+#: rhodecode/controllers/admin/repos.py:421
 msgid "An error occurred during deletion of repository stats"
 msgstr "删除版本库统计时发生错误"
 
-#: rhodecode/controllers/admin/repos.py:403
+#: rhodecode/controllers/admin/repos.py:438
 msgid "An error occurred during cache invalidation"
 msgstr "清除缓存时发生错误"
 
-#: rhodecode/controllers/admin/repos.py:443
+#: rhodecode/controllers/admin/repos.py:458
+#: rhodecode/controllers/admin/repos.py:485
+msgid "An error occurred during unlocking"
+msgstr "解锁时发生错误"
+
+#: rhodecode/controllers/admin/repos.py:476
+#, fuzzy
+msgid "Unlocked"
+msgstr "未锁"
+
+#: rhodecode/controllers/admin/repos.py:479
+#, fuzzy
+msgid "Locked"
+msgstr "已锁"
+
+#: rhodecode/controllers/admin/repos.py:481
+#, python-format
+msgid "Repository has been %s"
+msgstr "版本库已被%s"
+
+#: rhodecode/controllers/admin/repos.py:505
 msgid "Updated repository visibility in public journal"
 msgstr "成功更新在公共日志中的可见性"
 
-#: rhodecode/controllers/admin/repos.py:447
+#: rhodecode/controllers/admin/repos.py:509
 msgid "An error occurred during setting this repository in public journal"
 msgstr "设置版本库到公共日志时发生错误"
 
-#: rhodecode/controllers/admin/repos.py:452 rhodecode/model/validators.py:300
+#: rhodecode/controllers/admin/repos.py:514 rhodecode/model/validators.py:302
 msgid "Token mismatch"
 msgstr "令牌不匹配"
 
-#: rhodecode/controllers/admin/repos.py:465
+#: rhodecode/controllers/admin/repos.py:527
 msgid "Pulled from remote location"
 msgstr "成功拉取自远程路径"
 
-#: rhodecode/controllers/admin/repos.py:467
+#: rhodecode/controllers/admin/repos.py:529
 msgid "An error occurred during pull from remote location"
 msgstr "从远程路径拉取时发生错误"
 
-#: rhodecode/controllers/admin/repos.py:483
+#: rhodecode/controllers/admin/repos.py:545
 msgid "Nothing"
 msgstr "无"
 
-#: rhodecode/controllers/admin/repos.py:485
+#: rhodecode/controllers/admin/repos.py:547
 #, python-format
 msgid "Marked repo %s as fork of %s"
 msgstr "成功将版本库%s标记为复刻自%s"
 
-#: rhodecode/controllers/admin/repos.py:489
+#: rhodecode/controllers/admin/repos.py:551
 msgid "An error occurred during this operation"
 msgstr "在搜索操作中发生错误"
 
-#: rhodecode/controllers/admin/repos_groups.py:120
-#, python-format
-msgid "created repos group %s"
+#: rhodecode/controllers/admin/repos.py:590
+#, fuzzy
+msgid "An error occurred during creation of field"
+msgstr "创建用户%s时发生错误"
+
+#: rhodecode/controllers/admin/repos.py:604
+#, fuzzy
+msgid "An error occurred during removal of field"
+msgstr "保存电子邮件时发生错误"
+
+#: rhodecode/controllers/admin/repos_groups.py:145
+#, fuzzy, python-format
+msgid "Created repository group %s"
 msgstr "建立版本库组%s"
 
-#: rhodecode/controllers/admin/repos_groups.py:133
-#, python-format
-msgid "error occurred during creation of repos group %s"
+#: rhodecode/controllers/admin/repos_groups.py:157
+#, fuzzy, python-format
+msgid "Error occurred during creation of repository group %s"
 msgstr "创建版本库组时发生错误%s"
 
-#: rhodecode/controllers/admin/repos_groups.py:167
-#, python-format
-msgid "updated repos group %s"
+#: rhodecode/controllers/admin/repos_groups.py:214
+#: rhodecode/controllers/admin/repos_groups.py:286
+msgid "Cannot revoke permission for yourself as admin"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos_groups.py:220
+#, fuzzy, python-format
+msgid "Updated repository group %s"
 msgstr "更新版本库组%s"
 
-#: rhodecode/controllers/admin/repos_groups.py:180
-#, python-format
-msgid "error occurred during update of repos group %s"
+#: rhodecode/controllers/admin/repos_groups.py:235
+#, fuzzy, python-format
+msgid "Error occurred during update of repository group %s"
 msgstr "更新版本库组时发生错误%s"
 
-#: rhodecode/controllers/admin/repos_groups.py:198
+#: rhodecode/controllers/admin/repos_groups.py:253
 #, python-format
 msgid "This group contains %s repositores and cannot be deleted"
 msgstr "这个组内有%s个版本库因而无法删除"
 
-#: rhodecode/controllers/admin/repos_groups.py:206
-#, python-format
-msgid "removed repos group %s"
+#: rhodecode/controllers/admin/repos_groups.py:260
+#, fuzzy, python-format
+msgid "This group contains %s subgroups and cannot be deleted"
+msgstr "这个组内有%s个版本库因而无法删除"
+
+#: rhodecode/controllers/admin/repos_groups.py:266
+#, fuzzy, python-format
+msgid "Removed repository group %s"
 msgstr "移除版本库组%s"
 
-#: rhodecode/controllers/admin/repos_groups.py:212
-msgid "Cannot delete this group it still contains subgroups"
-msgstr "不能删除包含子组的组"
-
-#: rhodecode/controllers/admin/repos_groups.py:217
-#: rhodecode/controllers/admin/repos_groups.py:222
-#, python-format
-msgid "error occurred during deletion of repos group %s"
+#: rhodecode/controllers/admin/repos_groups.py:271
+#, fuzzy, python-format
+msgid "Error occurred during deletion of repos group %s"
 msgstr "删除版本库组时发生错误%s"
 
-#: rhodecode/controllers/admin/repos_groups.py:243
+#: rhodecode/controllers/admin/repos_groups.py:297
 msgid "An error occurred during deletion of group user"
 msgstr "删除组用户时发生错误"
 
-#: rhodecode/controllers/admin/repos_groups.py:264
-msgid "An error occurred during deletion of group users groups"
+#: rhodecode/controllers/admin/repos_groups.py:318
+#, fuzzy
+msgid "An error occurred during deletion of group user groups"
 msgstr "删除版本库组的用户组时发生错误"
 
-#: rhodecode/controllers/admin/settings.py:123
-#, python-format
-msgid "Repositories successfully rescanned added: %s,removed: %s"
+#: rhodecode/controllers/admin/settings.py:126
+#, fuzzy, python-format
+msgid "Repositories successfully rescanned added: %s ; removed: %s"
 msgstr "重新扫描版本库成功,增加%s, 移除%s"
 
-#: rhodecode/controllers/admin/settings.py:131
+#: rhodecode/controllers/admin/settings.py:135
 msgid "Whoosh reindex task scheduled"
 msgstr "Whoosh重新索引任务调度"
 
-#: rhodecode/controllers/admin/settings.py:162
-msgid "Updated application settings"
-msgstr "更新应用设置"
-
 #: rhodecode/controllers/admin/settings.py:166
-#: rhodecode/controllers/admin/settings.py:299
-msgid "error occurred during updating application settings"
+msgid "Updated application settings"
+msgstr "更新应用设置"
+
+#: rhodecode/controllers/admin/settings.py:170
+#: rhodecode/controllers/admin/settings.py:301
+#, fuzzy
+msgid "Error occurred during updating application settings"
 msgstr "更新设置时发生错误"
 
-#: rhodecode/controllers/admin/settings.py:207
+#: rhodecode/controllers/admin/settings.py:216
 msgid "Updated visualisation settings"
 msgstr "成功更新可视化设置"
 
-#: rhodecode/controllers/admin/settings.py:212
-msgid "error occurred during updating visualisation settings"
+#: rhodecode/controllers/admin/settings.py:221
+#, fuzzy
+msgid "Error occurred during updating visualisation settings"
 msgstr "更新可视化设置时发生错误"
 
-#: rhodecode/controllers/admin/settings.py:295
+#: rhodecode/controllers/admin/settings.py:297
 msgid "Updated VCS settings"
 msgstr "成功更新版本控制系统设置"
 
-#: rhodecode/controllers/admin/settings.py:309
+#: rhodecode/controllers/admin/settings.py:311
 msgid "Added new hook"
 msgstr "新建钩子"
 
-#: rhodecode/controllers/admin/settings.py:321
+#: rhodecode/controllers/admin/settings.py:323
 msgid "Updated hooks"
 msgstr "更新钩子"
 
-#: rhodecode/controllers/admin/settings.py:325
-msgid "error occurred during hook creation"
+#: rhodecode/controllers/admin/settings.py:327
+#, fuzzy
+msgid "Error occurred during hook creation"
 msgstr "创建钩子时发生错误"
 
-#: rhodecode/controllers/admin/settings.py:344
+#: rhodecode/controllers/admin/settings.py:346
 msgid "Email task created"
 msgstr "已创建电子邮件任务"
 
-#: rhodecode/controllers/admin/settings.py:399
+#: rhodecode/controllers/admin/settings.py:410
 msgid "You can't edit this user since it's crucial for entire application"
 msgstr "由于是系统帐号,无法编辑该用户"
 
-#: rhodecode/controllers/admin/settings.py:430
+#: rhodecode/controllers/admin/settings.py:452
 msgid "Your account was updated successfully"
 msgstr "你的帐号已经更新完成"
 
-#: rhodecode/controllers/admin/settings.py:445
-#: rhodecode/controllers/admin/users.py:196
-#, python-format
-msgid "error occurred during update of user %s"
+#: rhodecode/controllers/admin/settings.py:467
+#: rhodecode/controllers/admin/users.py:198
+#, fuzzy, python-format
+msgid "Error occurred during update of user %s"
 msgstr "更新用户%s时发生错误"
 
 #: rhodecode/controllers/admin/users.py:130
-#, python-format
-msgid "created user %s"
+#, fuzzy, python-format
+msgid "Created user %s"
 msgstr "创建用户%s"
 
 #: rhodecode/controllers/admin/users.py:142
-#, python-format
-msgid "error occurred during creation of user %s"
+#, fuzzy, python-format
+msgid "Error occurred during creation of user %s"
 msgstr "创建用户%s时发生错误"
 
 #: rhodecode/controllers/admin/users.py:176
 msgid "User updated successfully"
 msgstr "用户更新成功"
 
-#: rhodecode/controllers/admin/users.py:212
-msgid "successfully deleted user"
+#: rhodecode/controllers/admin/users.py:214
+#, fuzzy
+msgid "Successfully deleted user"
 msgstr "用户删除成功"
 
-#: rhodecode/controllers/admin/users.py:217
+#: rhodecode/controllers/admin/users.py:219
 msgid "An error occurred during deletion of user"
 msgstr "删除用户时发生错误"
 
-#: rhodecode/controllers/admin/users.py:231
+#: rhodecode/controllers/admin/users.py:233
 msgid "You can't edit this user"
 msgstr "无法编辑该用户"
 
-#: rhodecode/controllers/admin/users.py:272
+#: rhodecode/controllers/admin/users.py:276
 msgid "Granted 'repository create' permission to user"
 msgstr "已授予用户“创建版本库”的权限"
 
-#: rhodecode/controllers/admin/users.py:277
+#: rhodecode/controllers/admin/users.py:281
 msgid "Revoked 'repository create' permission to user"
 msgstr "已撤销用户“创建版本库”的权限"
 
-#: rhodecode/controllers/admin/users.py:283
+#: rhodecode/controllers/admin/users.py:287
 msgid "Granted 'repository fork' permission to user"
 msgstr "成功授予了用户“复刻版本库”权限"
 
-#: rhodecode/controllers/admin/users.py:288
+#: rhodecode/controllers/admin/users.py:292
 msgid "Revoked 'repository fork' permission to user"
 msgstr "成功撤销用户“复刻版本库”权限"
 
-#: rhodecode/controllers/admin/users.py:294
-#: rhodecode/controllers/admin/users_groups.py:279
+#: rhodecode/controllers/admin/users.py:298
+#: rhodecode/controllers/admin/users_groups.py:281
 msgid "An error occurred during permissions saving"
 msgstr "保存权限时发生错误"
 
-#: rhodecode/controllers/admin/users.py:309
+#: rhodecode/controllers/admin/users.py:312
 #, python-format
 msgid "Added email %s to user"
 msgstr "已为用户添加电子邮件 %s"
 
-#: rhodecode/controllers/admin/users.py:315
+#: rhodecode/controllers/admin/users.py:318
 msgid "An error occurred during email saving"
 msgstr "保存电子邮件时发生错误"
 
-#: rhodecode/controllers/admin/users.py:325
+#: rhodecode/controllers/admin/users.py:328
 msgid "Removed email from user"
 msgstr "成功删除用户电子邮件"
 
+#: rhodecode/controllers/admin/users.py:341
+#, fuzzy, python-format
+msgid "Added ip %s to user"
+msgstr "已为用户添加电子邮件 %s"
+
+#: rhodecode/controllers/admin/users.py:347
+#, fuzzy
+msgid "An error occurred during ip saving"
+msgstr "保存电子邮件时发生错误"
+
+#: rhodecode/controllers/admin/users.py:359
+#, fuzzy
+msgid "Removed ip from user"
+msgstr "成功删除用户电子邮件"
+
 #: rhodecode/controllers/admin/users_groups.py:86
-#, python-format
-msgid "created users group %s"
+#, fuzzy, python-format
+msgid "Created user group %s"
 msgstr "建立用户组%s"
 
 #: rhodecode/controllers/admin/users_groups.py:97
-#, python-format
-msgid "error occurred during creation of users group %s"
+#, fuzzy, python-format
+msgid "Error occurred during creation of user group %s"
 msgstr "创建用户组%s时发生错误"
 
-#: rhodecode/controllers/admin/users_groups.py:164
-#, python-format
-msgid "updated users group %s"
+#: rhodecode/controllers/admin/users_groups.py:166
+#, fuzzy, python-format
+msgid "Updated user group %s"
 msgstr "更新用户组%s"
 
-#: rhodecode/controllers/admin/users_groups.py:186
-#, python-format
-msgid "error occurred during update of users group %s"
+#: rhodecode/controllers/admin/users_groups.py:188
+#, fuzzy, python-format
+msgid "Error occurred during update of user group %s"
 msgstr "更新用户组%s时发生错误"
 
-#: rhodecode/controllers/admin/users_groups.py:203
-msgid "successfully deleted users group"
+#: rhodecode/controllers/admin/users_groups.py:205
+#, fuzzy
+msgid "Successfully deleted user group"
 msgstr "删除用户组成功"
 
-#: rhodecode/controllers/admin/users_groups.py:208
-msgid "An error occurred during deletion of users group"
+#: rhodecode/controllers/admin/users_groups.py:210
+#, fuzzy
+msgid "An error occurred during deletion of user group"
 msgstr "删除用户组时发生错误"
 
-#: rhodecode/controllers/admin/users_groups.py:257
-msgid "Granted 'repository create' permission to users group"
+#: rhodecode/controllers/admin/users_groups.py:259
+#, fuzzy
+msgid "Granted 'repository create' permission to user group"
 msgstr "已授予用户组“创建版本库”的权限"
 
-#: rhodecode/controllers/admin/users_groups.py:262
-msgid "Revoked 'repository create' permission to users group"
+#: rhodecode/controllers/admin/users_groups.py:264
+#, fuzzy
+msgid "Revoked 'repository create' permission to user group"
 msgstr "已撤销用户组“创建版本库”的权限"
 
-#: rhodecode/controllers/admin/users_groups.py:268
-msgid "Granted 'repository fork' permission to users group"
+#: rhodecode/controllers/admin/users_groups.py:270
+#, fuzzy
+msgid "Granted 'repository fork' permission to user group"
 msgstr "已授予用户组“复刻版本库”的权限"
 
-#: rhodecode/controllers/admin/users_groups.py:273
-msgid "Revoked 'repository fork' permission to users group"
+#: rhodecode/controllers/admin/users_groups.py:275
+#, fuzzy
+msgid "Revoked 'repository fork' permission to user group"
 msgstr "已撤销用户组“复刻版本库”的权限"
 
-#: rhodecode/lib/auth.py:499
+#: rhodecode/lib/auth.py:530
+#, fuzzy, python-format
+msgid "IP %s not allowed"
+msgstr "%s个关注者"
+
+#: rhodecode/lib/auth.py:579
 msgid "You need to be a registered user to perform this action"
 msgstr "必须是注册用户才能进行此操作"
 
-#: rhodecode/lib/auth.py:540
+#: rhodecode/lib/auth.py:620
 msgid "You need to be a signed in to view this page"
 msgstr "必须登录才能访问该页面"
 
-#: rhodecode/lib/diffs.py:74
-msgid "binary file"
+#: rhodecode/lib/diffs.py:66
+#, fuzzy
+msgid "Binary file"
 msgstr "二进制文件"
 
-#: rhodecode/lib/diffs.py:90
-msgid ""
-"Changeset was too big and was cut off, use diff menu to display this diff"
+#: rhodecode/lib/diffs.py:82
+msgid "Changeset was too big and was cut off, use diff menu to display this diff"
 msgstr "修订集因过大而被截断,可查看原始修订集作为替代"
 
-#: rhodecode/lib/diffs.py:100
+#: rhodecode/lib/diffs.py:92
 msgid "No changes detected"
 msgstr "未发现差异"
 
-#: rhodecode/lib/helpers.py:374
+#: rhodecode/lib/helpers.py:394
 #, python-format
 msgid "%a, %d %b %Y %H:%M:%S"
 msgstr "%Y/%m/%d %H:%M:%S"
 
-#: rhodecode/lib/helpers.py:486
+#: rhodecode/lib/helpers.py:506
 msgid "True"
 msgstr "是"
 
-#: rhodecode/lib/helpers.py:490
+#: rhodecode/lib/helpers.py:509
 msgid "False"
 msgstr "否"
 
-#: rhodecode/lib/helpers.py:530
+#: rhodecode/lib/helpers.py:547
 #, python-format
 msgid "Deleted branch: %s"
 msgstr "已经删除分支%s"
 
-#: rhodecode/lib/helpers.py:533
+#: rhodecode/lib/helpers.py:550
 #, python-format
 msgid "Created tag: %s"
 msgstr "创建标签%s"
 
-#: rhodecode/lib/helpers.py:546
+#: rhodecode/lib/helpers.py:563
 msgid "Changeset not found"
 msgstr "未找到修订集"
 
-#: rhodecode/lib/helpers.py:589
+#: rhodecode/lib/helpers.py:615
 #, python-format
 msgid "Show all combined changesets %s->%s"
 msgstr "显示合并的修订集%s->%s"
 
-#: rhodecode/lib/helpers.py:595
+#: rhodecode/lib/helpers.py:621
 msgid "compare view"
 msgstr "比较显示"
 
-#: rhodecode/lib/helpers.py:615
+#: rhodecode/lib/helpers.py:641
 msgid "and"
 msgstr "还有"
 
-#: rhodecode/lib/helpers.py:616
+#: rhodecode/lib/helpers.py:642
 #, python-format
 msgid "%s more"
 msgstr "%s个"
 
-#: rhodecode/lib/helpers.py:617
-#: rhodecode/templates/changelog/changelog.html:51
+#: rhodecode/lib/helpers.py:643 rhodecode/templates/changelog/changelog.html:44
 msgid "revisions"
 msgstr "修订"
 
-#: rhodecode/lib/helpers.py:641
+#: rhodecode/lib/helpers.py:667
 #, python-format
 msgid "fork name %s"
 msgstr "复刻名称%s"
 
-#: rhodecode/lib/helpers.py:658
-#: rhodecode/templates/pullrequests/pullrequest_show.html:4
-#: rhodecode/templates/pullrequests/pullrequest_show.html:12
+#: rhodecode/lib/helpers.py:684
+#: rhodecode/templates/pullrequests/pullrequest_show.html:8
 #, python-format
 msgid "Pull request #%s"
 msgstr "拉取请求#%s"
 
-#: rhodecode/lib/helpers.py:664
+#: rhodecode/lib/helpers.py:690
 msgid "[deleted] repository"
 msgstr "[删除]版本库"
 
-#: rhodecode/lib/helpers.py:666 rhodecode/lib/helpers.py:676
+#: rhodecode/lib/helpers.py:692 rhodecode/lib/helpers.py:702
 msgid "[created] repository"
 msgstr "[创建]版本库"
 
-#: rhodecode/lib/helpers.py:668
+#: rhodecode/lib/helpers.py:694
 msgid "[created] repository as fork"
 msgstr "[创建]复刻版本库"
 
-#: rhodecode/lib/helpers.py:670 rhodecode/lib/helpers.py:678
+#: rhodecode/lib/helpers.py:696 rhodecode/lib/helpers.py:704
 msgid "[forked] repository"
 msgstr "[复刻]版本库"
 
-#: rhodecode/lib/helpers.py:672 rhodecode/lib/helpers.py:680
+#: rhodecode/lib/helpers.py:698 rhodecode/lib/helpers.py:706
 msgid "[updated] repository"
 msgstr "[更新]版本库"
 
-#: rhodecode/lib/helpers.py:674
+#: rhodecode/lib/helpers.py:700
 msgid "[delete] repository"
 msgstr "[删除]版本库"
 
-#: rhodecode/lib/helpers.py:682
+#: rhodecode/lib/helpers.py:708
 msgid "[created] user"
 msgstr "[创建]用户"
 
-#: rhodecode/lib/helpers.py:684
+#: rhodecode/lib/helpers.py:710
 msgid "[updated] user"
 msgstr "[更新]用户"
 
-#: rhodecode/lib/helpers.py:686
-msgid "[created] users group"
+#: rhodecode/lib/helpers.py:712
+#, fuzzy
+msgid "[created] user group"
 msgstr "[创建]用户组"
 
-#: rhodecode/lib/helpers.py:688
-msgid "[updated] users group"
+#: rhodecode/lib/helpers.py:714
+#, fuzzy
+msgid "[updated] user group"
 msgstr "[更新]用户组"
 
-#: rhodecode/lib/helpers.py:690
+#: rhodecode/lib/helpers.py:716
 msgid "[commented] on revision in repository"
 msgstr "[评论]了版本库中的修订"
 
-#: rhodecode/lib/helpers.py:692
+#: rhodecode/lib/helpers.py:718
 msgid "[commented] on pull request for"
 msgstr "[评论]拉取请求"
 
-#: rhodecode/lib/helpers.py:694
+#: rhodecode/lib/helpers.py:720
 msgid "[closed] pull request for"
 msgstr "[关闭] 拉取请求"
 
-#: rhodecode/lib/helpers.py:696
+#: rhodecode/lib/helpers.py:722
 msgid "[pushed] into"
 msgstr "[推送]到"
 
-#: rhodecode/lib/helpers.py:698
+#: rhodecode/lib/helpers.py:724
 msgid "[committed via RhodeCode] into repository"
 msgstr "[通过RhodeCode提交]到版本库"
 
-#: rhodecode/lib/helpers.py:700
+#: rhodecode/lib/helpers.py:726
 msgid "[pulled from remote] into repository"
 msgstr "[远程拉取]到版本库"
 
-#: rhodecode/lib/helpers.py:702
+#: rhodecode/lib/helpers.py:728
 msgid "[pulled] from"
 msgstr "[拉取]自"
 
-#: rhodecode/lib/helpers.py:704
+#: rhodecode/lib/helpers.py:730
 msgid "[started following] repository"
 msgstr "[开始关注]版本库"
 
-#: rhodecode/lib/helpers.py:706
+#: rhodecode/lib/helpers.py:732
 msgid "[stopped following] repository"
 msgstr "[停止关注]版本库"
 
-#: rhodecode/lib/helpers.py:883
+#: rhodecode/lib/helpers.py:910
 #, python-format
 msgid " and %s more"
 msgstr "还有%s个"
 
-#: rhodecode/lib/helpers.py:887
+#: rhodecode/lib/helpers.py:914
 msgid "No Files"
 msgstr "没有文件"
 
-#: rhodecode/lib/helpers.py:1163
+#: rhodecode/lib/helpers.py:1198
 #, python-format
 msgid ""
-"%s repository is not mapped to db perhaps it was created or renamed from the "
-"filesystem please run the application again in order to rescan repositories"
-msgstr ""
-"版本库%s没有映射到数据库,可能是从文件系统创建或者重命名,请重启RhodeCode以重"
-"新扫描版本库"
-
-#: rhodecode/lib/utils2.py:403
+"%s repository is not mapped to db perhaps it was created or renamed from "
+"the filesystem please run the application again in order to rescan "
+"repositories"
+msgstr "版本库%s没有映射到数据库,可能是从文件系统创建或者重命名,请重启RhodeCode以重新扫描版本库"
+
+#: rhodecode/lib/unionrepo.py:193
+#, fuzzy
+msgid "cannot create new union repository"
+msgstr "[创建]版本库"
+
+#: rhodecode/lib/utils2.py:411
 #, python-format
 msgid "%d year"
 msgid_plural "%d years"
 msgstr[0] "%d年"
 
-#: rhodecode/lib/utils2.py:404
+#: rhodecode/lib/utils2.py:412
 #, python-format
 msgid "%d month"
 msgid_plural "%d months"
 msgstr[0] "%d月"
 
-#: rhodecode/lib/utils2.py:405
+#: rhodecode/lib/utils2.py:413
 #, python-format
 msgid "%d day"
 msgid_plural "%d days"
 msgstr[0] "%d天"
 
-#: rhodecode/lib/utils2.py:406
+#: rhodecode/lib/utils2.py:414
 #, python-format
 msgid "%d hour"
 msgid_plural "%d hours"
 msgstr[0] "%d时"
 
-#: rhodecode/lib/utils2.py:407
+#: rhodecode/lib/utils2.py:415
 #, python-format
 msgid "%d minute"
 msgid_plural "%d minutes"
 msgstr[0] "%d分"
 
-#: rhodecode/lib/utils2.py:408
+#: rhodecode/lib/utils2.py:416
 #, python-format
 msgid "%d second"
 msgid_plural "%d seconds"
 msgstr[0] "%d秒"
 
-#: rhodecode/lib/utils2.py:424
+#: rhodecode/lib/utils2.py:432
 #, python-format
 msgid "in %s"
 msgstr "%s"
 
-#: rhodecode/lib/utils2.py:426
+#: rhodecode/lib/utils2.py:434
 #, python-format
 msgid "%s ago"
 msgstr "%s前"
 
-#: rhodecode/lib/utils2.py:428
+#: rhodecode/lib/utils2.py:436
 #, python-format
 msgid "in %s and %s"
 msgstr "%s零%s"
 
-#: rhodecode/lib/utils2.py:431
+#: rhodecode/lib/utils2.py:439
 #, python-format
 msgid "%s and %s ago"
 msgstr "%s零%s前"
 
-#: rhodecode/lib/utils2.py:434
+#: rhodecode/lib/utils2.py:442
 msgid "just now"
 msgstr "刚才"
 
-#: rhodecode/lib/celerylib/tasks.py:270
-msgid "password reset link"
-msgstr "密码重置链接"
-
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163 rhodecode/model/db.py:1183
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1183
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1289 rhodecode/model/db.py:1388
 msgid "Repository no access"
 msgstr "无版本库访问权限"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164 rhodecode/model/db.py:1184
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1184
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1290 rhodecode/model/db.py:1389
 msgid "Repository read access"
 msgstr "版本库读取权限"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165 rhodecode/model/db.py:1185
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1185
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1291 rhodecode/model/db.py:1390
 msgid "Repository write access"
 msgstr "版本库写入权限"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166 rhodecode/model/db.py:1186
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1186
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1292 rhodecode/model/db.py:1391
 msgid "Repository admin access"
 msgstr "版本库管理权限"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168 rhodecode/model/db.py:1188
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1188
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1294
 msgid "Repositories Group no access"
 msgstr "无版本库组访问权限"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169 rhodecode/model/db.py:1189
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1189
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1295
 msgid "Repositories Group read access"
 msgstr "版本库组读取权限"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170 rhodecode/model/db.py:1190
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1190
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1296
 msgid "Repositories Group write access"
 msgstr "版本库组写入"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171 rhodecode/model/db.py:1191
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1191
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1297
 msgid "Repositories Group admin access"
 msgstr "版本库组管理权限"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173 rhodecode/model/db.py:1193
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1193
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1299 rhodecode/model/db.py:1398
 msgid "RhodeCode Administrator"
 msgstr "RhodeCode 管理员"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174 rhodecode/model/db.py:1194
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1194
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1300 rhodecode/model/db.py:1399
 msgid "Repository creation disabled"
 msgstr "禁用创建版本库"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175 rhodecode/model/db.py:1195
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1195
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1301 rhodecode/model/db.py:1400
 msgid "Repository creation enabled"
 msgstr "允许创建版本库"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176 rhodecode/model/db.py:1196
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1196
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1302 rhodecode/model/db.py:1401
 msgid "Repository forking disabled"
 msgstr "禁用复刻版本库"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177 rhodecode/model/db.py:1197
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1197
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1303 rhodecode/model/db.py:1402
 msgid "Repository forking enabled"
 msgstr "允许复刻版本库"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178 rhodecode/model/db.py:1198
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1198
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1304 rhodecode/model/db.py:1403
 msgid "Register disabled"
 msgstr "禁用注册"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179 rhodecode/model/db.py:1199
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1199
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1305 rhodecode/model/db.py:1404
 msgid "Register new user with RhodeCode with manual activation"
 msgstr "用手动激活注册新用户"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182 rhodecode/model/db.py:1202
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1202
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1308 rhodecode/model/db.py:1407
 msgid "Register new user with RhodeCode with auto activation"
 msgstr "用自动激活注册新用户"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623 rhodecode/model/db.py:1643
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1643
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1749 rhodecode/model/db.py:1838
 msgid "Not Reviewed"
 msgstr "未检视"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624 rhodecode/model/db.py:1644
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1644
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1750 rhodecode/model/db.py:1839
 msgid "Approved"
 msgstr "已批准"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625 rhodecode/model/db.py:1645
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1645
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1751 rhodecode/model/db.py:1840
 msgid "Rejected"
 msgstr "驳回"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626 rhodecode/model/db.py:1646
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1646
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1752 rhodecode/model/db.py:1841
 msgid "Under Review"
 msgstr "检视中"
 
-#: rhodecode/model/comment.py:110
+#: rhodecode/model/comment.py:75
 #, python-format
 msgid "on line %s"
 msgstr "在%s行"
 
-#: rhodecode/model/comment.py:173
+#: rhodecode/model/comment.py:219
 msgid "[Mention]"
 msgstr "[提及]"
 
+#: rhodecode/model/db.py:1252
+msgid "top level"
+msgstr ""
+
+#: rhodecode/model/db.py:1393
+#, fuzzy
+msgid "Repository group no access"
+msgstr "无版本库组访问权限"
+
+#: rhodecode/model/db.py:1394
+#, fuzzy
+msgid "Repository group read access"
+msgstr "版本库组读取权限"
+
+#: rhodecode/model/db.py:1395
+#, fuzzy
+msgid "Repository group write access"
+msgstr "版本库组写入"
+
+#: rhodecode/model/db.py:1396
+#, fuzzy
+msgid "Repository group admin access"
+msgstr "版本库组管理权限"
+
 #: rhodecode/model/forms.py:43
 msgid "Please enter a login"
 msgstr "请登录"
@@ -1078,207 +1245,245 @@
 msgid "Enter %(min)i characters or more"
 msgstr "输入少于%(min)i个字符"
 
-#: rhodecode/model/notification.py:220
-#, python-format
-msgid "commented on commit at %(when)s"
+#: rhodecode/model/notification.py:224
+#, fuzzy, python-format
+msgid "%(user)s commented on changeset at %(when)s"
 msgstr "在%(when)s评论了提交"
 
-#: rhodecode/model/notification.py:221
-#, python-format
-msgid "sent message at %(when)s"
-msgstr "在%(when)s发送信息"
-
-#: rhodecode/model/notification.py:222
-#, python-format
-msgid "mentioned you at %(when)s"
-msgstr "在%(when)s提到了你"
-
-#: rhodecode/model/notification.py:223
-#, python-format
-msgid "registered in RhodeCode at %(when)s"
-msgstr "在%(when)s注册到RhodeCode"
-
-#: rhodecode/model/notification.py:224
-#, python-format
-msgid "opened new pull request at %(when)s"
-msgstr "在%(when)s创建新的拉取请求"
-
 #: rhodecode/model/notification.py:225
-#, python-format
-msgid "commented on pull request at %(when)s"
+#, fuzzy, python-format
+msgid "%(user)s sent message at %(when)s"
+msgstr "在%(when)s发送信息"
+
+#: rhodecode/model/notification.py:226
+#, fuzzy, python-format
+msgid "%(user)s mentioned you at %(when)s"
+msgstr "在%(when)s提到了你"
+
+#: rhodecode/model/notification.py:227
+#, fuzzy, python-format
+msgid "%(user)s registered in RhodeCode at %(when)s"
+msgstr "在%(when)s注册到RhodeCode"
+
+#: rhodecode/model/notification.py:228
+#, fuzzy, python-format
+msgid "%(user)s opened new pull request at %(when)s"
+msgstr "在%(when)s创建新的拉取请求"
+
+#: rhodecode/model/notification.py:229
+#, fuzzy, python-format
+msgid "%(user)s commented on pull request at %(when)s"
 msgstr "在%(when)s评论了拉取请求"
 
-#: rhodecode/model/pull_request.py:90
-#, python-format
-msgid "%(user)s wants you to review pull request #%(pr_id)s"
+#: rhodecode/model/pull_request.py:104
+#, fuzzy, python-format
+msgid "%(user)s wants you to review pull request #%(pr_id)s: %(pr_title)s"
 msgstr "%(user)s想要你检视拉取请求#%(pr_id)s"
 
-#: rhodecode/model/scm.py:542
+#: rhodecode/model/scm.py:598
 msgid "latest tip"
 msgstr "最新tip版本"
 
 #: rhodecode/model/user.py:232
-msgid "new user registration"
+#, fuzzy
+msgid "New user registration"
 msgstr "[RhodeCode]新用户注册"
 
 #: rhodecode/model/user.py:257 rhodecode/model/user.py:281
-#: rhodecode/model/user.py:303
 msgid "You can't Edit this user since it's crucial for entire application"
 msgstr "由于是系统帐号,无法编辑该用户"
 
-#: rhodecode/model/user.py:327
+#: rhodecode/model/user.py:303
 msgid "You can't remove this user since it's crucial for entire application"
 msgstr "由于是系统帐号,无法删除该用户"
 
-#: rhodecode/model/user.py:333
+#: rhodecode/model/user.py:309
 #, python-format
 msgid ""
-"user \"%s\" still owns %s repositories and cannot be removed. Switch owners "
-"or remove those repositories. %s"
+"user \"%s\" still owns %s repositories and cannot be removed. Switch "
+"owners or remove those repositories. %s"
+msgstr "由于用户 \"%s\" 拥有版本库%s因而无法删除,请修改版本库所有者或删除版本库。%s"
+
+#: rhodecode/model/user.py:334
+#, fuzzy
+msgid "Password reset link"
+msgstr "密码重置链接"
+
+#: rhodecode/model/user.py:366
+#, fuzzy
+msgid "Your new password"
+msgstr "新密码"
+
+#: rhodecode/model/user.py:367
+#, python-format
+msgid "Your new RhodeCode password:%s"
 msgstr ""
-"由于用户 \"%s\" 拥有版本库%s因而无法删除,请修改版本库所有者或删除版本库。%s"
-
-#: rhodecode/model/validators.py:36 rhodecode/model/validators.py:37
+
+#: rhodecode/model/validators.py:38 rhodecode/model/validators.py:39
 msgid "Value cannot be an empty list"
 msgstr "值不能为空"
 
-#: rhodecode/model/validators.py:83
+#: rhodecode/model/validators.py:85
 #, python-format
 msgid "Username \"%(username)s\" already exists"
 msgstr "用户名称%(username)s已经存在"
 
-#: rhodecode/model/validators.py:85
+#: rhodecode/model/validators.py:87
 #, python-format
 msgid "Username \"%(username)s\" is forbidden"
 msgstr "不允许用户名 \"%(username)s\""
 
-#: rhodecode/model/validators.py:87
+#: rhodecode/model/validators.py:89
 msgid ""
-"Username may only contain alphanumeric characters underscores, periods or "
-"dashes and must begin with alphanumeric character"
-msgstr ""
-"只能使用字母、数字、下划线、小数点或减号作为用户名,且必须由数字或字母开头"
-
-#: rhodecode/model/validators.py:115
+"Username may only contain alphanumeric characters underscores, periods or"
+" dashes and must begin with alphanumeric character"
+msgstr "只能使用字母、数字、下划线、小数点或减号作为用户名,且必须由数字或字母开头"
+
+#: rhodecode/model/validators.py:117
 #, python-format
 msgid "Username %(username)s is not valid"
 msgstr "用户名称 %(username)s 无效"
 
-#: rhodecode/model/validators.py:134
-msgid "Invalid users group name"
+#: rhodecode/model/validators.py:136
+#, fuzzy
+msgid "Invalid user group name"
 msgstr "无效的用户组名"
 
-#: rhodecode/model/validators.py:135
-#, python-format
-msgid "Users group \"%(usersgroup)s\" already exists"
-msgstr "用户组 \"%(usersgroup)s\" 已经存在"
-
 #: rhodecode/model/validators.py:137
+#, fuzzy, python-format
+msgid "User group \"%(usergroup)s\" already exists"
+msgstr "用户组 \"%(usersgroup)s\" 已经存在"
+
+#: rhodecode/model/validators.py:139
+#, fuzzy
 msgid ""
-"users group name may only contain  alphanumeric characters underscores, "
+"user group name may only contain alphanumeric characters underscores, "
 "periods or dashes and must begin with alphanumeric character"
-msgstr ""
-"只能使用字母、数字、下划线、小数点或减号作为用户组名,且必须由数字或字母开头"
-
-#: rhodecode/model/validators.py:175
+msgstr "只能使用字母、数字、下划线、小数点或减号作为用户组名,且必须由数字或字母开头"
+
+#: rhodecode/model/validators.py:177
 msgid "Cannot assign this group as parent"
 msgstr "不能将这个组作为parent"
 
-#: rhodecode/model/validators.py:176
+#: rhodecode/model/validators.py:178
 #, python-format
 msgid "Group \"%(group_name)s\" already exists"
 msgstr "组 \"%(group_name)s\" 已经存在"
 
-#: rhodecode/model/validators.py:178
+#: rhodecode/model/validators.py:180
 #, python-format
 msgid "Repository with name \"%(group_name)s\" already exists"
 msgstr "已经存在名为 \"%(group_name)s\" 的版本库"
 
-#: rhodecode/model/validators.py:236
+#: rhodecode/model/validators.py:238
 msgid "Invalid characters (non-ascii) in password"
 msgstr "密码含有无效(非ASCII)字符"
 
-#: rhodecode/model/validators.py:251
+#: rhodecode/model/validators.py:253
 msgid "Passwords do not match"
 msgstr "密码不符"
 
-#: rhodecode/model/validators.py:268
+#: rhodecode/model/validators.py:270
 msgid "invalid password"
 msgstr "无效密码"
 
-#: rhodecode/model/validators.py:269
+#: rhodecode/model/validators.py:271
 msgid "invalid user name"
 msgstr "无效用户名"
 
-#: rhodecode/model/validators.py:270
+#: rhodecode/model/validators.py:272
 msgid "Your account is disabled"
 msgstr "该帐号已被禁用"
 
-#: rhodecode/model/validators.py:314
+#: rhodecode/model/validators.py:316
 #, python-format
 msgid "Repository name %(repo)s is disallowed"
 msgstr "版本库名称不能为%(repo)s"
 
-#: rhodecode/model/validators.py:316
+#: rhodecode/model/validators.py:318
 #, python-format
 msgid "Repository named %(repo)s already exists"
 msgstr "已经存在版本库%(repo)s"
 
-#: rhodecode/model/validators.py:317
-#, python-format
-msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\""
-msgstr "版本库组 \"%(group)s\" 中已经存在版本库 \"%(repo)s\""
-
 #: rhodecode/model/validators.py:319
 #, python-format
-msgid "Repositories group with name \"%(repo)s\" already exists"
+msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\""
+msgstr "版本库组 \"%(group)s\" 中已经存在版本库 \"%(repo)s\""
+
+#: rhodecode/model/validators.py:321
+#, fuzzy, python-format
+msgid "Repository group with name \"%(repo)s\" already exists"
 msgstr "已经存在名为 \"%(repo)s\" 的版本库组"
 
-#: rhodecode/model/validators.py:432
+#: rhodecode/model/validators.py:438
 msgid "invalid clone url"
 msgstr "无效的克隆地址"
 
-#: rhodecode/model/validators.py:433
+#: rhodecode/model/validators.py:439
 msgid "Invalid clone url, provide a valid clone http(s)/svn+http(s) url"
 msgstr "无效的克隆地址,提供一个有效的克隆 http(s)或svn+http(s)地址"
 
-#: rhodecode/model/validators.py:458
+#: rhodecode/model/validators.py:464
 msgid "Fork have to be the same type as parent"
 msgstr "复刻版本库必须和父版本库类型相同"
 
-#: rhodecode/model/validators.py:473
+#: rhodecode/model/validators.py:479
 msgid "You don't have permissions to create repository in this group"
 msgstr "没有在该版本库组中创建版本库的权限"
 
-#: rhodecode/model/validators.py:498
-msgid "This username or users group name is not valid"
+#: rhodecode/model/validators.py:481
+#, fuzzy
+msgid "no permission to create repository in root location"
+msgstr "没有在该版本库组中创建版本库的权限"
+
+#: rhodecode/model/validators.py:518
+#, fuzzy
+msgid "You don't have permissions to create a group in this location"
+msgstr "没有在该版本库组中创建版本库的权限"
+
+#: rhodecode/model/validators.py:557
+#, fuzzy
+msgid "This username or user group name is not valid"
 msgstr "用户或用户组名称无效"
 
-#: rhodecode/model/validators.py:591
+#: rhodecode/model/validators.py:650
 msgid "This is not a valid path"
 msgstr "不是一个合法的路径"
 
-#: rhodecode/model/validators.py:606
+#: rhodecode/model/validators.py:665
 msgid "This e-mail address is already taken"
 msgstr "该邮件地址已被使用"
 
-#: rhodecode/model/validators.py:626
+#: rhodecode/model/validators.py:685
 #, python-format
 msgid "e-mail \"%(email)s\" does not exist."
 msgstr "邮件地址\"%(email)s\"不存在"
 
-#: rhodecode/model/validators.py:663
+#: rhodecode/model/validators.py:722
 msgid ""
-"The LDAP Login attribute of the CN must be specified - this is the name of "
-"the attribute that is equivalent to \"username\""
+"The LDAP Login attribute of the CN must be specified - this is the name "
+"of the attribute that is equivalent to \"username\""
 msgstr "LDAP 登陆属性的 CN 必须指定 - 这个名字作为用户名"
 
-#: rhodecode/model/validators.py:682
+#: rhodecode/model/validators.py:735
 #, python-format
 msgid "Revisions %(revs)s are already part of pull request or have set status"
 msgstr "修订%(revs)s已经包含在拉取请求中或者或者已经设置状态"
 
-#: rhodecode/templates/index.html:3
+#: rhodecode/model/validators.py:767
+msgid "Please enter a valid IPv4 or IpV6 address"
+msgstr ""
+
+#: rhodecode/model/validators.py:768
+#, python-format
+msgid "The network size (bits) must be within the range of 0-32 (not %(bits)r)"
+msgstr ""
+
+#: rhodecode/model/validators.py:800
+msgid "Key name can only consist of letters, underscore, dash or numbers"
+msgstr ""
+
+#: rhodecode/templates/index.html:5
 msgid "Dashboard"
 msgstr "控制面板"
 
@@ -1287,205 +1492,229 @@
 #: rhodecode/templates/admin/repos/repos.html:9
 #: rhodecode/templates/admin/users/user_edit_my_account.html:31
 #: rhodecode/templates/admin/users/users.html:9
-#: rhodecode/templates/bookmarks/bookmarks.html:10
+#: rhodecode/templates/bookmarks/bookmarks.html:9
 #: rhodecode/templates/branches/branches.html:9
 #: rhodecode/templates/journal/journal.html:9
-#: rhodecode/templates/journal/journal.html:48
-#: rhodecode/templates/tags/tags.html:10
+#: rhodecode/templates/journal/journal.html:46
+#: rhodecode/templates/journal/journal.html:47
+#: rhodecode/templates/tags/tags.html:9
 msgid "quick filter..."
 msgstr "快速过滤..."
 
 #: rhodecode/templates/index_base.html:6
 #: rhodecode/templates/admin/repos/repos.html:9
-#: rhodecode/templates/base/base.html:233
 msgid "repositories"
 msgstr "版本库"
 
 #: rhodecode/templates/index_base.html:13
-#: rhodecode/templates/index_base.html:15
+#: rhodecode/templates/index_base.html:18
+#: rhodecode/templates/admin/repos/repo_add.html:5
 #: rhodecode/templates/admin/repos/repos.html:21
-msgid "ADD REPOSITORY"
-msgstr "新建版本库"
-
-#: rhodecode/templates/index_base.html:29
-#: rhodecode/templates/index_base.html:136
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:32
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:32
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:33
+msgid "Add repository"
+msgstr "添加版本库"
+
+#: rhodecode/templates/index_base.html:15
+#: rhodecode/templates/index_base.html:20
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:31
+#, fuzzy
+msgid "Add group"
+msgstr "编辑版本库组"
+
+#: rhodecode/templates/index_base.html:27
+#, fuzzy
+msgid "Edit group"
+msgstr "编辑版本库组"
+
+#: rhodecode/templates/index_base.html:27
+msgid "You have admin right to this group, and can edit it"
+msgstr ""
+
+#: rhodecode/templates/index_base.html:40
+#: rhodecode/templates/index_base.html:140
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:33
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:38
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:43
 #: rhodecode/templates/admin/users_groups/users_group_add.html:32
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:33
+#: rhodecode/templates/admin/users_groups/users_groups.html:34
 msgid "Group name"
 msgstr "组名"
 
-#: rhodecode/templates/index_base.html:30
-#: rhodecode/templates/index_base.html:72
-#: rhodecode/templates/index_base.html:138
-#: rhodecode/templates/index_base.html:176
-#: rhodecode/templates/index_base.html:266
+#: rhodecode/templates/index_base.html:41
+#: rhodecode/templates/index_base.html:83
+#: rhodecode/templates/index_base.html:142
+#: rhodecode/templates/index_base.html:180
+#: rhodecode/templates/index_base.html:270
 #: rhodecode/templates/admin/repos/repo_add_base.html:56
 #: rhodecode/templates/admin/repos/repo_edit.html:75
-#: rhodecode/templates/admin/repos/repos.html:72
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:41
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:41
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:34
-#: rhodecode/templates/forks/fork.html:59
-#: rhodecode/templates/settings/repo_settings.html:66
-#: rhodecode/templates/summary/summary.html:114
+#: rhodecode/templates/admin/repos/repos.html:73
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:42
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:47
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:44
+#: rhodecode/templates/forks/fork.html:56
+#: rhodecode/templates/pullrequests/pullrequest.html:101
+#: rhodecode/templates/summary/summary.html:106
 msgid "Description"
 msgstr "描述"
 
-#: rhodecode/templates/index_base.html:40
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:47
-msgid "Repositories group"
+#: rhodecode/templates/index_base.html:51
+#: rhodecode/templates/admin/permissions/permissions.html:55
+#: rhodecode/templates/admin/repos/repo_add_base.html:29
+#: rhodecode/templates/admin/repos/repo_edit.html:49
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:57
+#: rhodecode/templates/forks/fork.html:47
+msgid "Repository group"
 msgstr "版本库组"
 
-#: rhodecode/templates/index_base.html:71
-#: rhodecode/templates/index_base.html:174
-#: rhodecode/templates/index_base.html:264
+#: rhodecode/templates/index_base.html:82
+#: rhodecode/templates/index_base.html:178
+#: rhodecode/templates/index_base.html:268
 #: rhodecode/templates/admin/repos/repo_add_base.html:9
 #: rhodecode/templates/admin/repos/repo_edit.html:32
-#: rhodecode/templates/admin/repos/repos.html:70
-#: rhodecode/templates/admin/users/user_edit.html:196
-#: rhodecode/templates/admin/users/user_edit_my_account.html:59
-#: rhodecode/templates/admin/users/user_edit_my_account.html:180
-#: rhodecode/templates/admin/users/user_edit_my_account.html:216
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:6
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:184
-#: rhodecode/templates/bookmarks/bookmarks.html:36
+#: rhodecode/templates/admin/repos/repos.html:71
+#: rhodecode/templates/admin/users/user_edit_my_account.html:172
+#: rhodecode/templates/base/perms_summary.html:14
+#: rhodecode/templates/bookmarks/bookmarks.html:34
 #: rhodecode/templates/bookmarks/bookmarks_data.html:6
-#: rhodecode/templates/branches/branches.html:50
+#: rhodecode/templates/branches/branches.html:47
 #: rhodecode/templates/branches/branches_data.html:6
 #: rhodecode/templates/files/files_browser.html:47
-#: rhodecode/templates/journal/journal.html:70
-#: rhodecode/templates/journal/journal.html:196
-#: rhodecode/templates/journal/journal_page_repos.html:7
-#: rhodecode/templates/settings/repo_settings.html:31
-#: rhodecode/templates/summary/summary.html:43
-#: rhodecode/templates/summary/summary.html:132
-#: rhodecode/templates/tags/tags.html:51
+#: rhodecode/templates/journal/journal.html:193
+#: rhodecode/templates/journal/journal.html:296
+#: rhodecode/templates/summary/summary.html:55
+#: rhodecode/templates/summary/summary.html:124
+#: rhodecode/templates/tags/tags.html:48
 #: rhodecode/templates/tags/tags_data.html:6
 msgid "Name"
 msgstr "名称"
 
-#: rhodecode/templates/index_base.html:73
+#: rhodecode/templates/index_base.html:84
 msgid "Last change"
 msgstr "最后修改"
 
-#: rhodecode/templates/index_base.html:74
-#: rhodecode/templates/index_base.html:179
-#: rhodecode/templates/admin/users/user_edit_my_account.html:182
-#: rhodecode/templates/journal/journal.html:198
+#: rhodecode/templates/index_base.html:85
+#: rhodecode/templates/index_base.html:183
+#: rhodecode/templates/index_base.html:273
+#: rhodecode/templates/admin/repos/repos.html:74
+#: rhodecode/templates/admin/users/user_edit_my_account.html:174
+#: rhodecode/templates/journal/journal.html:195
+#: rhodecode/templates/journal/journal.html:298
 msgid "Tip"
 msgstr "Tip"
 
-#: rhodecode/templates/index_base.html:75
-#: rhodecode/templates/index_base.html:181
-#: rhodecode/templates/index_base.html:269
+#: rhodecode/templates/index_base.html:86
+#: rhodecode/templates/index_base.html:185
+#: rhodecode/templates/index_base.html:275
 #: rhodecode/templates/admin/repos/repo_edit.html:121
-#: rhodecode/templates/admin/repos/repos.html:73
+#: rhodecode/templates/admin/repos/repos.html:76
 msgid "Owner"
 msgstr "所有者"
 
-#: rhodecode/templates/index_base.html:76
-#: rhodecode/templates/summary/summary.html:48
-#: rhodecode/templates/summary/summary.html:51
-msgid "RSS"
-msgstr "RSS"
-
-#: rhodecode/templates/index_base.html:77
+#: rhodecode/templates/index_base.html:87
 msgid "Atom"
 msgstr "Atom"
 
-#: rhodecode/templates/index_base.html:167
-#: rhodecode/templates/index_base.html:207
-#: rhodecode/templates/index_base.html:291
-#: rhodecode/templates/admin/repos/repos.html:94
-#: rhodecode/templates/admin/users/user_edit_my_account.html:202
+#: rhodecode/templates/index_base.html:171
+#: rhodecode/templates/index_base.html:209
+#: rhodecode/templates/index_base.html:296
+#: rhodecode/templates/admin/repos/repos.html:97
+#: rhodecode/templates/admin/users/user_edit_my_account.html:196
 #: rhodecode/templates/admin/users/users.html:107
-#: rhodecode/templates/bookmarks/bookmarks.html:60
-#: rhodecode/templates/branches/branches.html:76
-#: rhodecode/templates/journal/journal.html:221
-#: rhodecode/templates/tags/tags.html:77
+#: rhodecode/templates/bookmarks/bookmarks.html:58
+#: rhodecode/templates/branches/branches.html:73
+#: rhodecode/templates/journal/journal.html:217
+#: rhodecode/templates/journal/journal.html:320
+#: rhodecode/templates/tags/tags.html:74
 msgid "Click to sort ascending"
 msgstr "点击以升序排列"
 
-#: rhodecode/templates/index_base.html:168
-#: rhodecode/templates/index_base.html:208
-#: rhodecode/templates/index_base.html:292
-#: rhodecode/templates/admin/repos/repos.html:95
-#: rhodecode/templates/admin/users/user_edit_my_account.html:203
+#: rhodecode/templates/index_base.html:172
+#: rhodecode/templates/index_base.html:210
+#: rhodecode/templates/index_base.html:297
+#: rhodecode/templates/admin/repos/repos.html:98
+#: rhodecode/templates/admin/users/user_edit_my_account.html:197
 #: rhodecode/templates/admin/users/users.html:108
-#: rhodecode/templates/bookmarks/bookmarks.html:61
-#: rhodecode/templates/branches/branches.html:77
-#: rhodecode/templates/journal/journal.html:222
-#: rhodecode/templates/tags/tags.html:78
+#: rhodecode/templates/bookmarks/bookmarks.html:59
+#: rhodecode/templates/branches/branches.html:74
+#: rhodecode/templates/journal/journal.html:218
+#: rhodecode/templates/journal/journal.html:321
+#: rhodecode/templates/tags/tags.html:75
 msgid "Click to sort descending"
 msgstr "点击以降序排列"
 
-#: rhodecode/templates/index_base.html:177
-#: rhodecode/templates/index_base.html:267
+#: rhodecode/templates/index_base.html:181
+#: rhodecode/templates/index_base.html:271
 msgid "Last Change"
 msgstr "最后修改"
 
-#: rhodecode/templates/index_base.html:209
-#: rhodecode/templates/index_base.html:293
-#: rhodecode/templates/admin/repos/repos.html:96
-#: rhodecode/templates/admin/users/user_edit_my_account.html:204
+#: rhodecode/templates/index_base.html:211
+#: rhodecode/templates/admin/repos/repos.html:99
+#: rhodecode/templates/admin/users/user_edit_my_account.html:198
 #: rhodecode/templates/admin/users/users.html:109
-#: rhodecode/templates/bookmarks/bookmarks.html:62
-#: rhodecode/templates/branches/branches.html:78
-#: rhodecode/templates/journal/journal.html:223
-#: rhodecode/templates/tags/tags.html:79
+#: rhodecode/templates/bookmarks/bookmarks.html:60
+#: rhodecode/templates/branches/branches.html:75
+#: rhodecode/templates/journal/journal.html:219
+#: rhodecode/templates/journal/journal.html:322
+#: rhodecode/templates/tags/tags.html:76
 msgid "No records found."
 msgstr "没有找到记录"
 
-#: rhodecode/templates/index_base.html:210
-#: rhodecode/templates/index_base.html:294
-#: rhodecode/templates/admin/repos/repos.html:97
-#: rhodecode/templates/admin/users/user_edit_my_account.html:205
+#: rhodecode/templates/index_base.html:212
+#: rhodecode/templates/index_base.html:299
+#: rhodecode/templates/admin/repos/repos.html:100
+#: rhodecode/templates/admin/users/user_edit_my_account.html:199
 #: rhodecode/templates/admin/users/users.html:110
-#: rhodecode/templates/bookmarks/bookmarks.html:63
-#: rhodecode/templates/branches/branches.html:79
-#: rhodecode/templates/journal/journal.html:224
-#: rhodecode/templates/tags/tags.html:80
+#: rhodecode/templates/bookmarks/bookmarks.html:61
+#: rhodecode/templates/branches/branches.html:76
+#: rhodecode/templates/journal/journal.html:220
+#: rhodecode/templates/journal/journal.html:323
+#: rhodecode/templates/tags/tags.html:77
 msgid "Data error."
 msgstr "数据错误"
 
-#: rhodecode/templates/index_base.html:211
-#: rhodecode/templates/index_base.html:295
-#: rhodecode/templates/admin/repos/repos.html:98
-#: rhodecode/templates/admin/users/user_edit_my_account.html:206
+#: rhodecode/templates/index_base.html:213
+#: rhodecode/templates/index_base.html:300
+#: rhodecode/templates/admin/repos/repos.html:101
+#: rhodecode/templates/admin/users/user_edit_my_account.html:58
+#: rhodecode/templates/admin/users/user_edit_my_account.html:200
 #: rhodecode/templates/admin/users/users.html:111
-#: rhodecode/templates/bookmarks/bookmarks.html:64
-#: rhodecode/templates/branches/branches.html:80
-#: rhodecode/templates/journal/journal.html:62
-#: rhodecode/templates/journal/journal.html:225
-#: rhodecode/templates/tags/tags.html:81
+#: rhodecode/templates/bookmarks/bookmarks.html:62
+#: rhodecode/templates/branches/branches.html:77
+#: rhodecode/templates/journal/journal.html:221
+#: rhodecode/templates/journal/journal.html:324
+#: rhodecode/templates/tags/tags.html:78
 msgid "Loading..."
 msgstr "载入中..."
 
-#: rhodecode/templates/login.html:5 rhodecode/templates/login.html:54
-msgid "Sign In"
+#: rhodecode/templates/index_base.html:298
+#, fuzzy
+msgid "No repositories found."
+msgstr "版本库组"
+
+#: rhodecode/templates/login.html:5 rhodecode/templates/base/base.html:227
+msgid "Log In"
 msgstr "登录"
 
 #: rhodecode/templates/login.html:21
-msgid "Sign In to"
-msgstr "登录到"
+#, python-format
+msgid "Log In to %s"
+msgstr ""
 
 #: rhodecode/templates/login.html:31 rhodecode/templates/register.html:20
 #: rhodecode/templates/admin/admin_log.html:5
 #: rhodecode/templates/admin/users/user_add.html:32
-#: rhodecode/templates/admin/users/user_edit.html:50
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:26
-#: rhodecode/templates/base/base.html:83
-#: rhodecode/templates/summary/summary.html:131
+#: rhodecode/templates/admin/users/user_edit.html:57
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:31
+#: rhodecode/templates/admin/users/users.html:77
+#: rhodecode/templates/base/base.html:203
+#: rhodecode/templates/summary/summary.html:123
 msgid "Username"
 msgstr "帐号"
 
 #: rhodecode/templates/login.html:40 rhodecode/templates/register.html:29
 #: rhodecode/templates/admin/ldap/ldap.html:46
 #: rhodecode/templates/admin/users/user_add.html:41
-#: rhodecode/templates/base/base.html:92
+#: rhodecode/templates/base/base.html:212
 msgid "Password"
 msgstr "密码"
 
@@ -1493,17 +1722,22 @@
 msgid "Remember me"
 msgstr "记住密码"
 
+#: rhodecode/templates/login.html:54
+msgid "Sign In"
+msgstr "登录"
+
 #: rhodecode/templates/login.html:60
 msgid "Forgot your password ?"
 msgstr "忘记了密码?"
 
-#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:103
+#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:223
 msgid "Don't have an account ?"
 msgstr "还没有帐号?"
 
 #: rhodecode/templates/password_reset.html:5
-msgid "Reset your password"
-msgstr "重置密码"
+#, fuzzy
+msgid "Password Reset"
+msgstr "密码重置链接"
 
 #: rhodecode/templates/password_reset.html:11
 msgid "Reset your password to"
@@ -1535,23 +1769,23 @@
 
 #: rhodecode/templates/register.html:47
 #: rhodecode/templates/admin/users/user_add.html:59
-#: rhodecode/templates/admin/users/user_edit.html:90
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:53
+#: rhodecode/templates/admin/users/user_edit.html:97
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:62
 msgid "First Name"
 msgstr "名"
 
 #: rhodecode/templates/register.html:56
 #: rhodecode/templates/admin/users/user_add.html:68
-#: rhodecode/templates/admin/users/user_edit.html:99
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:62
+#: rhodecode/templates/admin/users/user_edit.html:106
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:71
 msgid "Last Name"
 msgstr "姓"
 
 #: rhodecode/templates/register.html:65
 #: rhodecode/templates/admin/users/user_add.html:77
-#: rhodecode/templates/admin/users/user_edit.html:108
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:71
-#: rhodecode/templates/summary/summary.html:133
+#: rhodecode/templates/admin/users/user_edit.html:115
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:80
+#: rhodecode/templates/summary/summary.html:125
 msgid "Email"
 msgstr "电子邮件"
 
@@ -1563,44 +1797,31 @@
 msgid "Your account must wait for activation by administrator"
 msgstr "管理员审核后,你注册的帐号将被启用"
 
-#: rhodecode/templates/repo_switcher_list.html:11
+#: rhodecode/templates/repo_switcher_list.html:10
 #: rhodecode/templates/admin/defaults/defaults.html:44
 #: rhodecode/templates/admin/repos/repo_add_base.html:65
 #: rhodecode/templates/admin/repos/repo_edit.html:85
-#: rhodecode/templates/settings/repo_settings.html:76
+#: rhodecode/templates/data_table/_dt_elements.html:61
+#: rhodecode/templates/summary/summary.html:77
 msgid "Private repository"
 msgstr "私有版本库"
 
-#: rhodecode/templates/repo_switcher_list.html:16
+#: rhodecode/templates/repo_switcher_list.html:12
+#: rhodecode/templates/data_table/_dt_elements.html:63
+#: rhodecode/templates/summary/summary.html:79
 msgid "Public repository"
 msgstr "公共版本库"
 
-#: rhodecode/templates/switch_to_list.html:3
-#: rhodecode/templates/branches/branches.html:14
-msgid "branches"
-msgstr "分支"
-
 #: rhodecode/templates/switch_to_list.html:10
 #: rhodecode/templates/branches/branches_data.html:57
 msgid "There are no branches yet"
 msgstr "没有任何分支"
 
-#: rhodecode/templates/switch_to_list.html:15
-#: rhodecode/templates/shortlog/shortlog_data.html:10
-#: rhodecode/templates/tags/tags.html:15
-msgid "tags"
-msgstr "标签"
-
 #: rhodecode/templates/switch_to_list.html:22
 #: rhodecode/templates/tags/tags_data.html:38
 msgid "There are no tags yet"
 msgstr "没有任何标签"
 
-#: rhodecode/templates/switch_to_list.html:28
-#: rhodecode/templates/bookmarks/bookmarks.html:15
-msgid "bookmarks"
-msgstr "书签"
-
 #: rhodecode/templates/switch_to_list.html:35
 #: rhodecode/templates/bookmarks/bookmarks_data.html:32
 msgid "There are no bookmarks yet"
@@ -1608,6 +1829,7 @@
 
 #: rhodecode/templates/admin/admin.html:5
 #: rhodecode/templates/admin/admin.html:13
+#: rhodecode/templates/base/base.html:68
 msgid "Admin journal"
 msgstr "系统日志"
 
@@ -1628,11 +1850,13 @@
 msgstr[0] "%s条"
 
 #: rhodecode/templates/admin/admin_log.html:6
-#: rhodecode/templates/admin/repos/repos.html:74
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:8
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:9
-#: rhodecode/templates/journal/journal_page_repos.html:9
-#: rhodecode/templates/journal/journal_page_repos.html:10
+#: rhodecode/templates/admin/repos/repos.html:77
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46
+#: rhodecode/templates/admin/users/user_edit_my_account.html:176
+#: rhodecode/templates/admin/users/users.html:87
+#: rhodecode/templates/admin/users_groups/users_groups.html:37
+#: rhodecode/templates/journal/journal.html:197
+#: rhodecode/templates/journal/journal.html:300
 msgid "Action"
 msgstr "操作"
 
@@ -1642,11 +1866,11 @@
 msgstr "版本库"
 
 #: rhodecode/templates/admin/admin_log.html:8
-#: rhodecode/templates/bookmarks/bookmarks.html:37
+#: rhodecode/templates/bookmarks/bookmarks.html:35
 #: rhodecode/templates/bookmarks/bookmarks_data.html:7
-#: rhodecode/templates/branches/branches.html:51
+#: rhodecode/templates/branches/branches.html:48
 #: rhodecode/templates/branches/branches_data.html:7
-#: rhodecode/templates/tags/tags.html:52
+#: rhodecode/templates/tags/tags.html:49
 #: rhodecode/templates/tags/tags_data.html:7
 msgid "Date"
 msgstr "日期"
@@ -1665,6 +1889,7 @@
 msgstr "版本库默认设置"
 
 #: rhodecode/templates/admin/defaults/defaults.html:11
+#: rhodecode/templates/base/base.html:75
 msgid "Defaults"
 msgstr "默认设置"
 
@@ -1677,8 +1902,7 @@
 #: rhodecode/templates/admin/defaults/defaults.html:48
 #: rhodecode/templates/admin/repos/repo_add_base.html:69
 #: rhodecode/templates/admin/repos/repo_edit.html:89
-#: rhodecode/templates/forks/fork.html:72
-#: rhodecode/templates/settings/repo_settings.html:80
+#: rhodecode/templates/forks/fork.html:69
 msgid ""
 "Private repositories are only visible to people explicitly added as "
 "collaborators."
@@ -1706,7 +1930,7 @@
 
 #: rhodecode/templates/admin/defaults/defaults.html:75
 #: rhodecode/templates/admin/repos/repo_edit.html:112
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:66
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:72
 msgid "Enable locking"
 msgstr "启用锁定"
 
@@ -1717,14 +1941,18 @@
 
 #: rhodecode/templates/admin/defaults/defaults.html:84
 #: rhodecode/templates/admin/ldap/ldap.html:89
-#: rhodecode/templates/admin/repos/repo_edit.html:141
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:74
+#: rhodecode/templates/admin/permissions/permissions.html:92
+#: rhodecode/templates/admin/repos/repo_edit.html:148
+#: rhodecode/templates/admin/repos/repo_edit.html:173
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:80
 #: rhodecode/templates/admin/settings/hooks.html:73
-#: rhodecode/templates/admin/users/user_edit.html:133
-#: rhodecode/templates/admin/users/user_edit.html:178
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:79
+#: rhodecode/templates/admin/users/user_add.html:94
+#: rhodecode/templates/admin/users/user_edit.html:140
+#: rhodecode/templates/admin/users/user_edit.html:185
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:88
+#: rhodecode/templates/admin/users_groups/users_group_add.html:49
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:90
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:135
-#: rhodecode/templates/settings/repo_settings.html:94
 msgid "Save"
 msgstr "保存"
 
@@ -1733,7 +1961,10 @@
 msgstr "LDAP管理员"
 
 #: rhodecode/templates/admin/ldap/ldap.html:11
-msgid "Ldap"
+#: rhodecode/templates/admin/users/users.html:86
+#: rhodecode/templates/base/base.html:74
+#, fuzzy
+msgid "LDAP"
 msgstr "LDAP"
 
 #: rhodecode/templates/admin/ldap/ldap.html:28
@@ -1814,8 +2045,7 @@
 msgstr "评论"
 
 #: rhodecode/templates/admin/notifications/notifications.html:31
-#: rhodecode/templates/base/base.html:267
-#: rhodecode/templates/base/base.html:269
+#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8
 msgid "Pull requests"
 msgstr "拉取请求"
 
@@ -1833,6 +2063,7 @@
 msgstr "显示通知"
 
 #: rhodecode/templates/admin/notifications/show_notification.html:9
+#: rhodecode/templates/base/base.html:241
 msgid "Notifications"
 msgstr "通知"
 
@@ -1841,11 +2072,12 @@
 msgstr "权限管理"
 
 #: rhodecode/templates/admin/permissions/permissions.html:11
-#: rhodecode/templates/admin/repos/repo_edit.html:134
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:58
-#: rhodecode/templates/admin/users/user_edit.html:143
+#: rhodecode/templates/admin/repos/repo_edit.html:158
+#: rhodecode/templates/admin/repos/repo_edit.html:165
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:64
+#: rhodecode/templates/admin/users/user_edit.html:150
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:100
-#: rhodecode/templates/settings/repo_settings.html:86
+#: rhodecode/templates/base/base.html:73
 msgid "Permissions"
 msgstr "权限"
 
@@ -1858,34 +2090,26 @@
 msgstr "匿名访问"
 
 #: rhodecode/templates/admin/permissions/permissions.html:49
+#, fuzzy
 msgid ""
-"All default permissions on each repository will be reset to choosen "
-"permission, note that all custom default permission on repositories will be "
-"lost"
-msgstr ""
-"所有版本库的默认权限将被重置到选择的权限,所有版本库的自定义权限将被丢弃"
+"All default permissions on each repository will be reset to chosen "
+"permission, note that all custom default permission on repositories will "
+"be lost"
+msgstr "所有版本库的默认权限将被重置到选择的权限,所有版本库的自定义权限将被丢弃"
 
 #: rhodecode/templates/admin/permissions/permissions.html:50
 #: rhodecode/templates/admin/permissions/permissions.html:63
-msgid "overwrite existing settings"
+#, fuzzy
+msgid "Overwrite existing settings"
 msgstr "覆盖已有设置"
 
-#: rhodecode/templates/admin/permissions/permissions.html:55
-#: rhodecode/templates/admin/repos/repo_add_base.html:29
-#: rhodecode/templates/admin/repos/repo_edit.html:49
-#: rhodecode/templates/admin/repos_groups/repos_groups.html:4
-#: rhodecode/templates/forks/fork.html:50
-#: rhodecode/templates/settings/repo_settings.html:48
-msgid "Repository group"
-msgstr "版本库组"
-
 #: rhodecode/templates/admin/permissions/permissions.html:62
+#, fuzzy
 msgid ""
-"All default permissions on each repository group will be reset to choosen "
-"permission, note that all custom default permission on repositories group "
+"All default permissions on each repository group will be reset to chosen "
+"permission, note that all custom default permission on repository groups "
 "will be lost"
-msgstr ""
-"所有版本库组的默认权限将被重置到选择的权限,所有版本库组的自定义权限将被丢弃"
+msgstr "所有版本库组的默认权限将被重置到选择的权限,所有版本库组的自定义权限将被丢弃"
 
 #: rhodecode/templates/admin/permissions/permissions.html:69
 msgid "Registration"
@@ -1899,40 +2123,99 @@
 msgid "Repository forking"
 msgstr "版本库复刻"
 
-#: rhodecode/templates/admin/permissions/permissions.html:92
-#: rhodecode/templates/admin/repos/repo_edit.html:264
-msgid "set"
-msgstr "设置"
-
-#: rhodecode/templates/admin/repos/repo_add.html:5
-#: rhodecode/templates/admin/repos/repo_add_create_repository.html:5
-msgid "Add repository"
-msgstr "添加版本库"
-
-#: rhodecode/templates/admin/repos/repo_add.html:11
-#: rhodecode/templates/admin/repos/repo_edit.html:11
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:10
+#: rhodecode/templates/admin/permissions/permissions.html:93
+#: rhodecode/templates/admin/permissions/permissions.html:154
+#: rhodecode/templates/admin/repos/repo_edit.html:149
+#: rhodecode/templates/admin/repos/repo_edit.html:174
+#: rhodecode/templates/admin/repos/repo_edit.html:388
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:81
+#: rhodecode/templates/admin/settings/settings.html:115
+#: rhodecode/templates/admin/settings/settings.html:187
+#: rhodecode/templates/admin/settings/settings.html:278
+#: rhodecode/templates/admin/users/user_edit.html:141
+#: rhodecode/templates/admin/users/user_edit.html:186
+#: rhodecode/templates/admin/users/user_edit.html:235
+#: rhodecode/templates/admin/users/user_edit.html:283
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:89
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:136
+#: rhodecode/templates/files/files_add.html:80
+#: rhodecode/templates/files/files_edit.html:66
+#: rhodecode/templates/pullrequests/pullrequest.html:110
+msgid "Reset"
+msgstr "重置"
+
+#: rhodecode/templates/admin/permissions/permissions.html:103
+#, fuzzy
+msgid "Default User Permissions"
+msgstr "默认权限"
+
+#: rhodecode/templates/admin/permissions/permissions.html:113
+#: rhodecode/templates/admin/users/user_edit.html:244
+#, fuzzy
+msgid "Allowed IP addresses"
+msgstr "邮件地址"
+
+#: rhodecode/templates/admin/permissions/permissions.html:127
+#: rhodecode/templates/admin/repos/repo_edit.html:347
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:70
+#: rhodecode/templates/admin/users/user_edit.html:212
+#: rhodecode/templates/admin/users/user_edit.html:257
+#: rhodecode/templates/admin/users_groups/users_groups.html:46
+#: rhodecode/templates/data_table/_dt_elements.html:122
+#: rhodecode/templates/data_table/_dt_elements.html:130
+msgid "delete"
+msgstr "删除"
+
+#: rhodecode/templates/admin/permissions/permissions.html:128
+#: rhodecode/templates/admin/users/user_edit.html:258
+#, fuzzy, python-format
+msgid "Confirm to delete this ip: %s"
+msgstr "确认删除邮箱:%s"
+
+#: rhodecode/templates/admin/permissions/permissions.html:134
+#: rhodecode/templates/admin/users/user_edit.html:264
+msgid "All IP addresses are allowed"
+msgstr ""
+
+#: rhodecode/templates/admin/permissions/permissions.html:145
+#: rhodecode/templates/admin/users/user_edit.html:275
+#, fuzzy
+msgid "New ip address"
+msgstr "增加邮箱"
+
+#: rhodecode/templates/admin/permissions/permissions.html:153
+#: rhodecode/templates/admin/repos/repo_add_base.html:73
+#: rhodecode/templates/admin/repos/repo_edit.html:387
+#: rhodecode/templates/admin/users/user_edit.html:234
+#: rhodecode/templates/admin/users/user_edit.html:282
+msgid "Add"
+msgstr "增加"
+
+#: rhodecode/templates/admin/repos/repo_add.html:12
+#: rhodecode/templates/admin/repos/repo_add.html:16
+#: rhodecode/templates/base/base.html:69 rhodecode/templates/base/base.html:103
+#: rhodecode/templates/base/base.html:263
 msgid "Repositories"
 msgstr "版本库"
 
-#: rhodecode/templates/admin/repos/repo_add.html:13
-msgid "add new"
+#: rhodecode/templates/admin/repos/repo_add.html:19
+#, fuzzy
+msgid "Add new"
 msgstr "新建"
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:20
-#: rhodecode/templates/summary/summary.html:104
-#: rhodecode/templates/summary/summary.html:105
+#: rhodecode/templates/summary/summary.html:96
+#: rhodecode/templates/summary/summary.html:97
 msgid "Clone from"
 msgstr "克隆自"
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:24
 #: rhodecode/templates/admin/repos/repo_edit.html:44
-#: rhodecode/templates/settings/repo_settings.html:43
 msgid "Optional http[s] url from which repository should be cloned."
 msgstr "可选的,指定版本库应该从哪个http[s]地址克隆。"
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:33
-#: rhodecode/templates/forks/fork.html:54
+#: rhodecode/templates/forks/fork.html:51
 msgid "Optionaly select a group to put this repository into."
 msgstr "可选的,选择一个组将版本库放到其中"
 
@@ -1942,58 +2225,39 @@
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:47
 #: rhodecode/templates/admin/repos/repo_edit.html:66
-#: rhodecode/templates/forks/fork.html:41
-#: rhodecode/templates/settings/repo_settings.html:57
+#: rhodecode/templates/forks/fork.html:38
 msgid "Landing revision"
 msgstr "默认修订"
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:51
 #: rhodecode/templates/admin/repos/repo_edit.html:70
-#: rhodecode/templates/forks/fork.html:45
-#: rhodecode/templates/settings/repo_settings.html:61
+#: rhodecode/templates/forks/fork.html:42
 msgid "Default revision for files page, downloads, whoosh and readme"
 msgstr "文件浏览、下载、whoosh和README的默认修订版本"
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:60
 #: rhodecode/templates/admin/repos/repo_edit.html:79
-#: rhodecode/templates/forks/fork.html:63
-#: rhodecode/templates/settings/repo_settings.html:70
-msgid ""
-"Keep it short and to the point. Use a README file for longer descriptions."
+#: rhodecode/templates/forks/fork.html:60
+msgid "Keep it short and to the point. Use a README file for longer descriptions."
 msgstr "保持简短。用README文件来写更长的描述。"
 
-#: rhodecode/templates/admin/repos/repo_add_base.html:73
-msgid "add"
-msgstr "新建"
-
-#: rhodecode/templates/admin/repos/repo_add_create_repository.html:9
-msgid "add new repository"
-msgstr "新建版本库"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:5
+#: rhodecode/templates/admin/repos/repo_edit.html:8
 msgid "Edit repository"
 msgstr "编辑版本库"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:13
-#: rhodecode/templates/admin/users/user_edit.html:13
-#: rhodecode/templates/admin/users/user_edit.html:228
-#: rhodecode/templates/admin/users/user_edit.html:230
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:28
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:13
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:207
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:209
-#: rhodecode/templates/files/files_source.html:29
-#: rhodecode/templates/journal/journal_page_repos.html:29
-msgid "edit"
-msgstr "编辑"
+#: rhodecode/templates/admin/repos/repo_edit.html:12
+#: rhodecode/templates/admin/settings/hooks.html:9
+#: rhodecode/templates/admin/settings/settings.html:11
+#: rhodecode/templates/base/base.html:76 rhodecode/templates/base/base.html:121
+#: rhodecode/templates/summary/summary.html:212
+msgid "Settings"
+msgstr "设置"
 
 #: rhodecode/templates/admin/repos/repo_edit.html:40
-#: rhodecode/templates/settings/repo_settings.html:39
 msgid "Clone uri"
 msgstr "克隆地址"
 
 #: rhodecode/templates/admin/repos/repo_edit.html:53
-#: rhodecode/templates/settings/repo_settings.html:52
 msgid "Optional select a group to put this repository into."
 msgstr "可选的,选择一个组将版本库放到其中"
 
@@ -2001,179 +2265,210 @@
 msgid "Change owner of this repository."
 msgstr "修改这个版本库的所有者"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:142
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:75
-#: rhodecode/templates/admin/settings/settings.html:113
-#: rhodecode/templates/admin/settings/settings.html:179
-#: rhodecode/templates/admin/settings/settings.html:269
-#: rhodecode/templates/admin/users/user_edit.html:134
-#: rhodecode/templates/admin/users/user_edit.html:179
-#: rhodecode/templates/admin/users/user_edit.html:282
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:80
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:136
-#: rhodecode/templates/files/files_add.html:82
-#: rhodecode/templates/files/files_edit.html:68
-#: rhodecode/templates/pullrequests/pullrequest.html:124
-#: rhodecode/templates/settings/repo_settings.html:95
-msgid "Reset"
-msgstr "重置"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:152
-msgid "Administration"
-msgstr "管理"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:155
+#: rhodecode/templates/admin/repos/repo_edit.html:184
+#, fuzzy
+msgid "Advanced settings"
+msgstr "保存设置"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:187
 msgid "Statistics"
 msgstr "统计"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:159
+#: rhodecode/templates/admin/repos/repo_edit.html:191
 msgid "Reset current statistics"
 msgstr "重置统计"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:159
+#: rhodecode/templates/admin/repos/repo_edit.html:191
 msgid "Confirm to remove current statistics"
 msgstr "确认移除当前统计"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:162
+#: rhodecode/templates/admin/repos/repo_edit.html:194
 msgid "Fetched to rev"
 msgstr "获取到修订"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:163
+#: rhodecode/templates/admin/repos/repo_edit.html:195
 msgid "Stats gathered"
 msgstr "已收集的统计"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:171
-msgid "Remote"
-msgstr "远程"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:175
-msgid "Pull changes from remote location"
-msgstr "从远程路径拉取修订集"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:175
-msgid "Confirm to pull changes from remote side"
-msgstr "确认从远程拉取修订集"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:186
-msgid "Cache"
-msgstr "缓存"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:190
-msgid "Invalidate repository cache"
-msgstr "清除版本库缓存"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:190
-msgid "Confirm to invalidate repository cache"
-msgstr "确认清除版本库缓存"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:193
-msgid ""
-"Manually invalidate cache for this repository. On first access repository "
-"will be cached again"
-msgstr "手动清除版本库缓存。之后第一次访问的时候将重建缓存"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:198
-msgid "List of cached values"
-msgstr "缓存值列表"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:201
-msgid "Prefix"
-msgstr "前缀"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:202
-msgid "Key"
-msgstr "键"
-
 #: rhodecode/templates/admin/repos/repo_edit.html:203
-#: rhodecode/templates/admin/users/user_add.html:86
-#: rhodecode/templates/admin/users/user_edit.html:117
-#: rhodecode/templates/admin/users_groups/users_group_add.html:41
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:42
-msgid "Active"
-msgstr "启用"
+msgid "Remote"
+msgstr "远程"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:207
+msgid "Pull changes from remote location"
+msgstr "从远程路径拉取修订集"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:207
+msgid "Confirm to pull changes from remote side"
+msgstr "确认从远程拉取修订集"
 
 #: rhodecode/templates/admin/repos/repo_edit.html:218
-#: rhodecode/templates/base/base.html:331
-#: rhodecode/templates/base/base.html:333
-#: rhodecode/templates/base/base.html:335
+msgid "Cache"
+msgstr "缓存"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:222
+msgid "Invalidate repository cache"
+msgstr "清除版本库缓存"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:222
+msgid "Confirm to invalidate repository cache"
+msgstr "确认清除版本库缓存"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:225
+msgid ""
+"Manually invalidate cache for this repository. On first access repository"
+" will be cached again"
+msgstr "手动清除版本库缓存。之后第一次访问的时候将重建缓存"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:230
+msgid "List of cached values"
+msgstr "缓存值列表"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:233
+msgid "Prefix"
+msgstr "前缀"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:234
+msgid "Key"
+msgstr "键"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:235
+#: rhodecode/templates/admin/users/user_add.html:86
+#: rhodecode/templates/admin/users/user_edit.html:124
+#: rhodecode/templates/admin/users/users.html:84
+#: rhodecode/templates/admin/users_groups/users_group_add.html:41
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:42
+#: rhodecode/templates/admin/users_groups/users_groups.html:36
+msgid "Active"
+msgstr "启用"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:250
+#: rhodecode/templates/base/base.html:280
+#: rhodecode/templates/base/base.html:281
 msgid "Public journal"
 msgstr "公共日志"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:224
+#: rhodecode/templates/admin/repos/repo_edit.html:256
 msgid "Remove from public journal"
 msgstr "从公共日志删除"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:226
+#: rhodecode/templates/admin/repos/repo_edit.html:258
 msgid "Add to public journal"
 msgstr "添加到公共日志"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:231
+#: rhodecode/templates/admin/repos/repo_edit.html:263
 msgid ""
-"All actions made on this repository will be accessible to everyone in public "
-"journal"
+"All actions made on this repository will be accessible to everyone in "
+"public journal"
 msgstr "任何人都可以在公共日志上看到这个版本库上的所有动作"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:238
+#: rhodecode/templates/admin/repos/repo_edit.html:270
 msgid "Locking"
 msgstr "锁定"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:243
+#: rhodecode/templates/admin/repos/repo_edit.html:275
 msgid "Unlock locked repo"
 msgstr "解锁版本库"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:243
+#: rhodecode/templates/admin/repos/repo_edit.html:275
 msgid "Confirm to unlock repository"
 msgstr "确认解锁版本库"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:246
+#: rhodecode/templates/admin/repos/repo_edit.html:278
 msgid "lock repo"
 msgstr "锁定版本库"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:246
+#: rhodecode/templates/admin/repos/repo_edit.html:278
 msgid "Confirm to lock repository"
 msgstr "确认锁定版本库"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:247
+#: rhodecode/templates/admin/repos/repo_edit.html:279
 msgid "Repository is not locked"
 msgstr "版本库未锁定"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:252
-msgid ""
-"Force locking on repository. Works only when anonymous access is disabled"
+#: rhodecode/templates/admin/repos/repo_edit.html:284
+msgid "Force locking on repository. Works only when anonymous access is disabled"
 msgstr "强制锁定版本库。只有在禁止匿名访问时候才有效"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:259
+#: rhodecode/templates/admin/repos/repo_edit.html:291
 msgid "Set as fork of"
 msgstr "设置复刻自"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:268
+#: rhodecode/templates/admin/repos/repo_edit.html:296
+msgid "set"
+msgstr "设置"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:300
 msgid "Manually set this repository as a fork of another from the list"
 msgstr "从列表中手动设置这个版本库复刻自另一版本库"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:274
-#: rhodecode/templates/changeset/changeset_file_comment.html:26
+#: rhodecode/templates/admin/repos/repo_edit.html:306
+#: rhodecode/templates/changeset/changeset_file_comment.html:41
 msgid "Delete"
 msgstr "删除"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:278
-#: rhodecode/templates/settings/repo_settings.html:115
+#: rhodecode/templates/admin/repos/repo_edit.html:315
 msgid "Remove this repository"
 msgstr "删除版本库"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:278
-#: rhodecode/templates/settings/repo_settings.html:115
+#: rhodecode/templates/admin/repos/repo_edit.html:315
 msgid "Confirm to delete this repository"
 msgstr "确认删除版本库"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:282
-#: rhodecode/templates/settings/repo_settings.html:119
+#: rhodecode/templates/admin/repos/repo_edit.html:317
+#, fuzzy, python-format
+msgid "this repository has %s fork"
+msgid_plural "this repository has %s forks"
+msgstr[0] "[创建]复刻版本库"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:318
+#, fuzzy
+msgid "Detach forks"
+msgstr "设置复刻自"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:319
+#, fuzzy
+msgid "Delete forks"
+msgstr "删除"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:322
+#, fuzzy
 msgid ""
-"This repository will be renamed in a special way in order to be unaccesible "
-"for RhodeCode and VCS systems. If you need fully delete it from file system "
-"please do it manually"
+"This repository will be renamed in a special way in order to be "
+"unaccesible for RhodeCode and VCS systems. If you need to fully delete it"
+" from file system please do it manually"
+msgstr "这个版本库将以特殊的方式重命名这样RhodeCode和版本控制系统将不能访问它。如果需要从文件系统完全删除,请要手动操作"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:336
+msgid "Extra fields"
 msgstr ""
-"这个版本库将以特殊的方式重命名这样RhodeCode和版本控制系统将不能访问它。如果需"
-"要从文件系统完全删除,请要手动操作"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:348
+#, fuzzy, python-format
+msgid "Confirm to delete this field: %s"
+msgstr "确认删除邮箱:%s"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:362
+#, fuzzy
+msgid "New field key"
+msgstr "新建文件"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:370
+msgid "New field label"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:373
+msgid "Enter short label"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:379
+#, fuzzy
+msgid "New field description"
+msgstr "描述"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:382
+msgid "Enter description of a field"
+msgstr ""
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:3
 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:3
@@ -2192,8 +2487,6 @@
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:6
 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:6
-#: rhodecode/templates/admin/users/users.html:85
-#: rhodecode/templates/base/base.html:229
 msgid "admin"
 msgstr "管理"
 
@@ -2203,79 +2496,60 @@
 msgstr "成员"
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:16
-#: rhodecode/templates/data_table/_dt_elements.html:67
-#: rhodecode/templates/journal/journal.html:95
-#: rhodecode/templates/summary/summary.html:85
 msgid "private repository"
 msgstr "私有版本库"
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:19
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:28
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:18
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:20
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:35
 msgid "default"
 msgstr "默认"
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:33
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:58
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:23
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:42
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:25
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:55
 msgid "revoke"
 msgstr "移除"
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:83
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:67
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:80
 msgid "Add another member"
 msgstr "添加成员"
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:97
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:100
 msgid "Failed to remove user"
 msgstr "删除用户失败"
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:112
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:103
-msgid "Failed to remove users group"
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:116
+#, fuzzy
+msgid "Failed to remove user group"
 msgstr "删除用户组失败"
 
 #: rhodecode/templates/admin/repos/repos.html:5
 msgid "Repositories administration"
 msgstr "版本库管理员"
 
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:73
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:86
 msgid "apply to children"
 msgstr "应用到成员"
 
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:74
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87
+#, fuzzy
 msgid ""
-"Set or revoke permission to all children of that group, including "
-"repositories and other groups"
+"Set or revoke permission to all children of that group, including non-"
+"private repositories and other groups"
 msgstr "设置或者撤销该组所有成员的权限,包括版本库和其他组"
 
+#: rhodecode/templates/admin/repos_groups/repos_groups.html:4
+#, fuzzy, python-format
+msgid "%s Group Dashboard"
+msgstr "使用轻量的控制面板"
+
 #: rhodecode/templates/admin/repos_groups/repos_groups.html:9
-#: rhodecode/templates/base/base.html:122
-#: rhodecode/templates/base/base.html:313
-#: rhodecode/templates/base/base.html:315
-#: rhodecode/templates/base/base.html:317
-#: rhodecode/templates/bookmarks/bookmarks.html:11
-#: rhodecode/templates/branches/branches.html:10
-#: rhodecode/templates/changelog/changelog.html:10
-#: rhodecode/templates/changeset/changeset.html:10
-#: rhodecode/templates/changeset/changeset_range.html:9
-#: rhodecode/templates/compare/compare_diff.html:9
-#: rhodecode/templates/files/file_diff.html:8
-#: rhodecode/templates/files/files.html:8
-#: rhodecode/templates/files/files_add.html:15
-#: rhodecode/templates/files/files_edit.html:15
-#: rhodecode/templates/followers/followers.html:9
-#: rhodecode/templates/forks/fork.html:9
-#: rhodecode/templates/forks/forks.html:9
-#: rhodecode/templates/pullrequests/pullrequest.html:8
-#: rhodecode/templates/pullrequests/pullrequest_show.html:8
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8
-#: rhodecode/templates/settings/repo_settings.html:9
-#: rhodecode/templates/shortlog/shortlog.html:10
-#: rhodecode/templates/summary/summary.html:8
-#: rhodecode/templates/tags/tags.html:11
 msgid "Home"
 msgstr "首页"
 
@@ -2284,79 +2558,85 @@
 msgstr "有"
 
 #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:5
-msgid "Add repos group"
-msgstr "添加版本库组"
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:10
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:10
-msgid "Repos groups"
+#, fuzzy
+msgid "Add repository group"
 msgstr "版本库组"
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:12
-msgid "add new repos group"
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:11
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:11
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:16
+#: rhodecode/templates/base/base.html:70 rhodecode/templates/base/base.html:82
+#, fuzzy
+msgid "Repository groups"
+msgstr "版本库组"
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:13
+#, fuzzy
+msgid "Add new repository group"
 msgstr "添加新版本库组"
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:50
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:50
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:51
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:56
 msgid "Group parent"
 msgstr "上级组"
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:58
-#: rhodecode/templates/admin/users/user_add.html:94
-#: rhodecode/templates/admin/users_groups/users_group_add.html:49
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:90
-#: rhodecode/templates/pullrequests/pullrequest_show.html:131
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:59
 msgid "save"
 msgstr "保存"
 
 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:5
-msgid "Edit repos group"
+#, fuzzy
+msgid "Edit repository group"
 msgstr "编辑版本库组"
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:12
-msgid "edit repos group"
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:13
+#, fuzzy, python-format
+msgid "Edit repository group %s"
 msgstr "编辑版本库组"
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:70
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:27
+#, fuzzy
+msgid "Add child group"
+msgstr "添加新用户组"
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:76
 msgid ""
-"Enable lock-by-pulling on group. This option will be applied to all other "
-"groups and repositories inside"
+"Enable lock-by-pulling on group. This option will be applied to all other"
+" groups and repositories inside"
 msgstr "启用组的拉取锁定。这个选项将应用到组内的其他组和版本库"
 
 #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:5
-msgid "Repositories groups administration"
+#, fuzzy
+msgid "Repository groups administration"
 msgstr "版本库管理员"
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:22
-msgid "ADD NEW GROUP"
-msgstr "添加组"
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:35
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:45
 msgid "Number of toplevel repositories"
 msgstr "顶层版本库数量"
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:36
-#: rhodecode/templates/admin/users/users.html:87
-#: rhodecode/templates/admin/users_groups/users_groups.html:35
-msgid "action"
-msgstr "操作"
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55
-#: rhodecode/templates/admin/users/user_edit.html:259
-#: rhodecode/templates/admin/users_groups/users_groups.html:44
-#: rhodecode/templates/data_table/_dt_elements.html:7
-#: rhodecode/templates/data_table/_dt_elements.html:121
-msgid "delete"
-msgstr "删除"
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:64
+#, fuzzy
+msgid "Edit"
+msgstr "编辑"
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:65
+#: rhodecode/templates/base/perms_summary.html:29
+#: rhodecode/templates/base/perms_summary.html:48
+#: rhodecode/templates/base/perms_summary.html:50
+#: rhodecode/templates/data_table/_dt_elements.html:116
+#: rhodecode/templates/data_table/_dt_elements.html:117
+msgid "edit"
+msgstr "编辑"
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:70
 #, python-format
 msgid "Confirm to delete this group: %s with %s repository"
 msgid_plural "Confirm to delete this group: %s with %s repositories"
 msgstr[0] "确认删除这个版本库组:%s包含%s个版本库"
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:63
-msgid "There are no repositories groups yet"
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:78
+#, fuzzy
+msgid "There are no repository groups yet"
 msgstr "没有版本库组"
 
 #: rhodecode/templates/admin/settings/hooks.html:5
@@ -2364,12 +2644,6 @@
 msgid "Settings administration"
 msgstr "系统设置"
 
-#: rhodecode/templates/admin/settings/hooks.html:9
-#: rhodecode/templates/admin/settings/settings.html:9
-#: rhodecode/templates/settings/repo_settings.html:13
-msgid "Settings"
-msgstr "设置"
-
 #: rhodecode/templates/admin/settings/hooks.html:24
 msgid "Built in hooks - read only"
 msgstr "内建钩子 - 只读"
@@ -2386,209 +2660,221 @@
 msgid "Failed to remove hook"
 msgstr "移除钩子失败"
 
-#: rhodecode/templates/admin/settings/settings.html:24
+#: rhodecode/templates/admin/settings/settings.html:26
 msgid "Remap and rescan repositories"
 msgstr "重新扫描并映射版本库"
 
-#: rhodecode/templates/admin/settings/settings.html:32
-msgid "rescan option"
+#: rhodecode/templates/admin/settings/settings.html:34
+#, fuzzy
+msgid "Rescan option"
 msgstr "重新扫描选项"
 
-#: rhodecode/templates/admin/settings/settings.html:38
+#: rhodecode/templates/admin/settings/settings.html:40
 msgid ""
-"In case a repository was deleted from filesystem and there are leftovers in "
-"the database check this option to scan obsolete data in database and remove "
-"it."
-msgstr ""
-"如果版本库已经从文件系统删除,但数据库仍然有遗留信息,请勾选该项进行清理"
-
-#: rhodecode/templates/admin/settings/settings.html:39
-msgid "destroy old data"
-msgstr "清理旧数据"
+"In case a repository was deleted from filesystem and there are leftovers "
+"in the database check this option to scan obsolete data in database and "
+"remove it."
+msgstr "如果版本库已经从文件系统删除,但数据库仍然有遗留信息,请勾选该项进行清理"
 
 #: rhodecode/templates/admin/settings/settings.html:41
+#, fuzzy
+msgid "Destroy old data"
+msgstr "清理旧数据"
+
+#: rhodecode/templates/admin/settings/settings.html:43
 msgid ""
-"Rescan repositories location for new repositories. Also deletes obsolete if "
-"`destroy` flag is checked "
-msgstr ""
-"重新扫描版本库路径以发现新版本库。 同时删除过时的,如果设置有 `destroy` 标志"
-
-#: rhodecode/templates/admin/settings/settings.html:46
+"Rescan repositories location for new repositories. Also deletes obsolete "
+"if `destroy` flag is checked "
+msgstr "重新扫描版本库路径以发现新版本库。 同时删除过时的,如果设置有 `destroy` 标志"
+
+#: rhodecode/templates/admin/settings/settings.html:48
 msgid "Rescan repositories"
 msgstr "重新扫描版本库"
 
-#: rhodecode/templates/admin/settings/settings.html:52
+#: rhodecode/templates/admin/settings/settings.html:54
 msgid "Whoosh indexing"
 msgstr "Whoosh索引"
 
-#: rhodecode/templates/admin/settings/settings.html:60
-msgid "index build option"
+#: rhodecode/templates/admin/settings/settings.html:62
+#, fuzzy
+msgid "Index build option"
 msgstr "构建索引选项"
 
-#: rhodecode/templates/admin/settings/settings.html:65
-msgid "build from scratch"
+#: rhodecode/templates/admin/settings/settings.html:67
+#, fuzzy
+msgid "Build from scratch"
 msgstr "重新建立"
 
-#: rhodecode/templates/admin/settings/settings.html:71
+#: rhodecode/templates/admin/settings/settings.html:73
 msgid "Reindex"
 msgstr "重新索引"
 
-#: rhodecode/templates/admin/settings/settings.html:77
+#: rhodecode/templates/admin/settings/settings.html:79
 msgid "Global application settings"
 msgstr "全局设置"
 
-#: rhodecode/templates/admin/settings/settings.html:86
-msgid "Application name"
-msgstr "应用名称"
-
-#: rhodecode/templates/admin/settings/settings.html:95
-msgid "Realm text"
-msgstr "Realm text"
-
-#: rhodecode/templates/admin/settings/settings.html:104
-msgid "GA code"
-msgstr "GA code"
-
-#: rhodecode/templates/admin/settings/settings.html:112
-#: rhodecode/templates/admin/settings/settings.html:178
-#: rhodecode/templates/admin/settings/settings.html:268
+#: rhodecode/templates/admin/settings/settings.html:88
+msgid "Site branding"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:97
+msgid "HTTP authentication realm"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:106
+msgid "Google Analytics code"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:114
+#: rhodecode/templates/admin/settings/settings.html:186
+#: rhodecode/templates/admin/settings/settings.html:277
 msgid "Save settings"
 msgstr "保存设置"
 
-#: rhodecode/templates/admin/settings/settings.html:119
+#: rhodecode/templates/admin/settings/settings.html:121
 msgid "Visualisation settings"
 msgstr "可视化设置"
 
-#: rhodecode/templates/admin/settings/settings.html:127
+#: rhodecode/templates/admin/settings/settings.html:129
 msgid "General"
 msgstr "通用"
 
-#: rhodecode/templates/admin/settings/settings.html:132
+#: rhodecode/templates/admin/settings/settings.html:134
 msgid "Use lightweight dashboard"
 msgstr "使用轻量的控制面板"
 
-#: rhodecode/templates/admin/settings/settings.html:139
+#: rhodecode/templates/admin/settings/settings.html:140
+#, fuzzy
+msgid "Use repository extra fields"
+msgstr "版本库"
+
+#: rhodecode/templates/admin/settings/settings.html:147
 msgid "Icons"
 msgstr "图标"
 
-#: rhodecode/templates/admin/settings/settings.html:144
+#: rhodecode/templates/admin/settings/settings.html:152
 msgid "Show public repo icon on repositories"
 msgstr "显示公共版本库图标"
 
-#: rhodecode/templates/admin/settings/settings.html:148
+#: rhodecode/templates/admin/settings/settings.html:156
 msgid "Show private repo icon on repositories"
 msgstr "显示私有版本库图标"
 
-#: rhodecode/templates/admin/settings/settings.html:155
+#: rhodecode/templates/admin/settings/settings.html:163
 msgid "Meta-Tagging"
 msgstr "元标记"
 
-#: rhodecode/templates/admin/settings/settings.html:160
+#: rhodecode/templates/admin/settings/settings.html:168
 msgid "Stylify recognised metatags:"
 msgstr "样式化识别的元标记"
 
-#: rhodecode/templates/admin/settings/settings.html:187
+#: rhodecode/templates/admin/settings/settings.html:195
 msgid "VCS settings"
 msgstr "版本控制系统设置"
 
-#: rhodecode/templates/admin/settings/settings.html:196
+#: rhodecode/templates/admin/settings/settings.html:204
 msgid "Web"
 msgstr "网络"
 
-#: rhodecode/templates/admin/settings/settings.html:201
-msgid "require ssl for vcs operations"
+#: rhodecode/templates/admin/settings/settings.html:209
+#, fuzzy
+msgid "Require SSL for vcs operations"
 msgstr "要求使用SSL进行版本控制系统操作"
 
-#: rhodecode/templates/admin/settings/settings.html:203
+#: rhodecode/templates/admin/settings/settings.html:211
 msgid ""
-"RhodeCode will require SSL for pushing or pulling. If SSL is missing it will "
-"return HTTP Error 406: Not Acceptable"
-msgstr ""
-"勾选后RhodeCode将要求使用SSL进行推送和拉取。如果没有使用SSL将返回HTTP 406错"
-"误:Not Acceptable"
-
-#: rhodecode/templates/admin/settings/settings.html:209
+"RhodeCode will require SSL for pushing or pulling. If SSL is missing it "
+"will return HTTP Error 406: Not Acceptable"
+msgstr "勾选后RhodeCode将要求使用SSL进行推送和拉取。如果没有使用SSL将返回HTTP 406错误:Not Acceptable"
+
+#: rhodecode/templates/admin/settings/settings.html:217
 msgid "Hooks"
 msgstr "钩子"
 
-#: rhodecode/templates/admin/settings/settings.html:214
+#: rhodecode/templates/admin/settings/settings.html:222
 msgid "Update repository after push (hg update)"
 msgstr "推送后更新版本库(hg update)"
 
-#: rhodecode/templates/admin/settings/settings.html:218
+#: rhodecode/templates/admin/settings/settings.html:226
 msgid "Show repository size after push"
 msgstr "推送后显示版本库大小"
 
-#: rhodecode/templates/admin/settings/settings.html:222
+#: rhodecode/templates/admin/settings/settings.html:230
 msgid "Log user push commands"
 msgstr "记录用户推送命令"
 
-#: rhodecode/templates/admin/settings/settings.html:226
+#: rhodecode/templates/admin/settings/settings.html:234
 msgid "Log user pull commands"
 msgstr "记录用户拉取命令"
 
-#: rhodecode/templates/admin/settings/settings.html:230
-msgid "advanced setup"
+#: rhodecode/templates/admin/settings/settings.html:238
+#, fuzzy
+msgid "Advanced setup"
 msgstr "高级设置"
 
-#: rhodecode/templates/admin/settings/settings.html:235
+#: rhodecode/templates/admin/settings/settings.html:243
 msgid "Mercurial Extensions"
 msgstr "Mercurial扩展"
 
-#: rhodecode/templates/admin/settings/settings.html:240
-msgid "largefiles extensions"
+#: rhodecode/templates/admin/settings/settings.html:248
+#, fuzzy
+msgid "Enable largefiles extension"
 msgstr "大文件扩展"
 
-#: rhodecode/templates/admin/settings/settings.html:244
-msgid "hgsubversion extensions"
+#: rhodecode/templates/admin/settings/settings.html:252
+#, fuzzy
+msgid "Enable hgsubversion extension"
 msgstr "hgsubversion扩展"
 
-#: rhodecode/templates/admin/settings/settings.html:246
+#: rhodecode/templates/admin/settings/settings.html:254
+#, fuzzy
 msgid ""
-"Requires hgsubversion library installed. Allows clonning from svn remote "
+"Requires hgsubversion library installed. Allows cloning from svn remote "
 "locations"
 msgstr " 允许从远程svn地址克隆。需要安装hgsubversion库"
 
-#: rhodecode/templates/admin/settings/settings.html:256
+#: rhodecode/templates/admin/settings/settings.html:264
 msgid "Repositories location"
 msgstr "版本库路径"
 
-#: rhodecode/templates/admin/settings/settings.html:261
+#: rhodecode/templates/admin/settings/settings.html:269
 msgid ""
 "This a crucial application setting. If you are really sure you need to "
-"change this, you must restart application in order to make this setting take "
-"effect. Click this label to unlock."
+"change this, you must restart application in order to make this setting "
+"take effect. Click this label to unlock."
 msgstr "这是一个关键设置。如果确认修改该项设置,请重启服务以便设置生效。"
 
-#: rhodecode/templates/admin/settings/settings.html:262
-#: rhodecode/templates/base/base.html:221
-msgid "unlock"
+#: rhodecode/templates/admin/settings/settings.html:270
+#: rhodecode/templates/base/base.html:131
+#, fuzzy
+msgid "Unlock"
 msgstr "解锁"
 
-#: rhodecode/templates/admin/settings/settings.html:263
+#: rhodecode/templates/admin/settings/settings.html:272
 msgid ""
-"Location where repositories are stored. After changing this value a restart, "
-"and rescan is required"
+"Location where repositories are stored. After changing this value a "
+"restart, and rescan is required"
 msgstr "版本库存储路径。 修改后需要重启和重新扫描"
 
-#: rhodecode/templates/admin/settings/settings.html:283
+#: rhodecode/templates/admin/settings/settings.html:292
 msgid "Test Email"
 msgstr "测试邮件"
 
-#: rhodecode/templates/admin/settings/settings.html:291
+#: rhodecode/templates/admin/settings/settings.html:300
 msgid "Email to"
 msgstr "发送到"
 
-#: rhodecode/templates/admin/settings/settings.html:299
+#: rhodecode/templates/admin/settings/settings.html:308
 msgid "Send"
 msgstr "发送"
 
-#: rhodecode/templates/admin/settings/settings.html:305
+#: rhodecode/templates/admin/settings/settings.html:314
 msgid "System Info and Packages"
 msgstr "系统和软件包信息"
 
-#: rhodecode/templates/admin/settings/settings.html:308
-msgid "show"
+#: rhodecode/templates/admin/settings/settings.html:317
+#: rhodecode/templates/changelog/changelog.html:42
+msgid "Show"
 msgstr "显示"
 
 #: rhodecode/templates/admin/users/user_add.html:5
@@ -2597,11 +2883,14 @@
 
 #: rhodecode/templates/admin/users/user_add.html:10
 #: rhodecode/templates/admin/users/user_edit.html:11
+#: rhodecode/templates/base/base.html:71
 msgid "Users"
 msgstr "用户"
 
 #: rhodecode/templates/admin/users/user_add.html:12
-msgid "add new user"
+#: rhodecode/templates/admin/users/users.html:23
+#, fuzzy
+msgid "Add new user"
 msgstr "添加新用户"
 
 #: rhodecode/templates/admin/users/user_add.html:50
@@ -2612,6 +2901,12 @@
 msgid "Edit user"
 msgstr "编辑用户"
 
+#: rhodecode/templates/admin/users/user_edit.html:13
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:13
+#, fuzzy, python-format
+msgid "Edit %s"
+msgstr "编辑"
+
 #: rhodecode/templates/admin/users/user_edit.html:34
 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:10
 msgid "Change your avatar at"
@@ -2627,26 +2922,31 @@
 msgid "API key"
 msgstr "API密钥"
 
-#: rhodecode/templates/admin/users/user_edit.html:63
+#: rhodecode/templates/admin/users/user_edit.html:50
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:25
+msgid "Current IP"
+msgstr ""
+
+#: rhodecode/templates/admin/users/user_edit.html:70
 msgid "LDAP DN"
 msgstr "LDAP DN"
 
-#: rhodecode/templates/admin/users/user_edit.html:72
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:35
+#: rhodecode/templates/admin/users/user_edit.html:79
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44
 msgid "New password"
 msgstr "新密码"
 
-#: rhodecode/templates/admin/users/user_edit.html:81
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44
+#: rhodecode/templates/admin/users/user_edit.html:88
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:53
 msgid "New password confirmation"
 msgstr "确认新密码"
 
-#: rhodecode/templates/admin/users/user_edit.html:151
+#: rhodecode/templates/admin/users/user_edit.html:158
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:108
 msgid "Inherit default permissions"
 msgstr "继承默认权限"
 
-#: rhodecode/templates/admin/users/user_edit.html:156
+#: rhodecode/templates/admin/users/user_edit.html:163
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:113
 #, python-format
 msgid ""
@@ -2654,53 +2954,31 @@
 "options does not have any action"
 msgstr "勾选以从%s继承权限设置。 勾选后下面的选项将不起作用"
 
-#: rhodecode/templates/admin/users/user_edit.html:162
+#: rhodecode/templates/admin/users/user_edit.html:169
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:119
 msgid "Create repositories"
 msgstr "创建版本库"
 
-#: rhodecode/templates/admin/users/user_edit.html:170
+#: rhodecode/templates/admin/users/user_edit.html:177
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:127
 msgid "Fork repositories"
 msgstr "复刻版本库"
 
-#: rhodecode/templates/admin/users/user_edit.html:190
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:22
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:39
-msgid "Nothing here yet"
-msgstr "无条目"
-
-#: rhodecode/templates/admin/users/user_edit.html:197
-#: rhodecode/templates/admin/users/user_edit_my_account.html:60
-#: rhodecode/templates/admin/users/user_edit_my_account.html:217
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:185
-msgid "Permission"
-msgstr "权限"
-
-#: rhodecode/templates/admin/users/user_edit.html:198
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:186
-msgid "Edit Permission"
-msgstr "编辑权限"
-
-#: rhodecode/templates/admin/users/user_edit.html:247
+#: rhodecode/templates/admin/users/user_edit.html:200
 msgid "Email addresses"
 msgstr "邮件地址"
 
-#: rhodecode/templates/admin/users/user_edit.html:260
+#: rhodecode/templates/admin/users/user_edit.html:213
 #, python-format
 msgid "Confirm to delete this email: %s"
 msgstr "确认删除邮箱:%s"
 
-#: rhodecode/templates/admin/users/user_edit.html:274
+#: rhodecode/templates/admin/users/user_edit.html:227
 msgid "New email address"
 msgstr "增加邮箱"
 
-#: rhodecode/templates/admin/users/user_edit.html:281
-msgid "Add"
-msgstr "增加"
-
 #: rhodecode/templates/admin/users/user_edit_my_account.html:5
-#: rhodecode/templates/base/base.html:124
+#: rhodecode/templates/base/base.html:242
 msgid "My account"
 msgstr "我的账户"
 
@@ -2713,7 +2991,7 @@
 msgstr "我的权限"
 
 #: rhodecode/templates/admin/users/user_edit_my_account.html:38
-#: rhodecode/templates/journal/journal.html:49
+#: rhodecode/templates/journal/journal.html:54
 msgid "My repos"
 msgstr "我的版本库"
 
@@ -2721,132 +2999,107 @@
 msgid "My pull requests"
 msgstr "我的拉取请求"
 
-#: rhodecode/templates/admin/users/user_edit_my_account.html:45
-msgid "Add repo"
-msgstr "新建版本库"
-
 #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:2
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:4
+#, fuzzy
+msgid "Show closed pull requests"
+msgstr "[关闭] 拉取请求"
+
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:6
 msgid "Opened by me"
 msgstr "我创建的"
 
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:10
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:15
 #, python-format
 msgid "Pull request #%s opened on %s"
 msgstr "拉取请求#%s创建于%s"
 
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:15
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:17
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:45
+#: rhodecode/templates/pullrequests/pullrequest_data.html:7
+#: rhodecode/templates/pullrequests/pullrequest_show.html:27
+#: rhodecode/templates/pullrequests/pullrequest_show.html:42
+msgid "Closed"
+msgstr "已关闭"
+
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:23
 msgid "Confirm to delete this pull request"
 msgstr "确认删除拉取请求"
 
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:26
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:30
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:51
+msgid "Nothing here yet"
+msgstr "无条目"
+
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:34
 msgid "I participate in"
 msgstr "我参与的"
 
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:33
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:30
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:42
+#: rhodecode/templates/pullrequests/pullrequest_data.html:11
 #, python-format
 msgid "Pull request #%s opened by %s on %s"
 msgstr "拉取请求#%s由%s创建于%s"
 
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:7
-#: rhodecode/templates/bookmarks/bookmarks.html:40
-#: rhodecode/templates/bookmarks/bookmarks_data.html:9
-#: rhodecode/templates/branches/branches.html:54
-#: rhodecode/templates/branches/branches_data.html:9
-#: rhodecode/templates/journal/journal_page_repos.html:8
-#: rhodecode/templates/tags/tags.html:55
-#: rhodecode/templates/tags/tags_data.html:9
-msgid "Revision"
-msgstr "修订"
-
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:28
-#: rhodecode/templates/journal/journal_page_repos.html:29
-msgid "private"
-msgstr "私有"
-
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:31
-#: rhodecode/templates/data_table/_dt_elements.html:7
-#: rhodecode/templates/journal/journal_page_repos.html:32
-#, python-format
-msgid "Confirm to delete this repository: %s"
-msgstr "确认删除版本库:%s"
-
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:38
-#: rhodecode/templates/journal/journal_page_repos.html:42
-msgid "No repositories yet"
-msgstr "没有任何版本库"
-
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:40
-#: rhodecode/templates/journal/journal_page_repos.html:44
-msgid "create one now"
-msgstr "创建一个"
-
 #: rhodecode/templates/admin/users/users.html:5
 msgid "Users administration"
 msgstr "用户管理员"
 
 #: rhodecode/templates/admin/users/users.html:9
-#: rhodecode/templates/base/base.html:235
 msgid "users"
 msgstr "用户"
 
-#: rhodecode/templates/admin/users/users.html:23
-msgid "ADD NEW USER"
-msgstr "添加用户"
-
-#: rhodecode/templates/admin/users/users.html:77
-msgid "username"
-msgstr "用户名"
-
 #: rhodecode/templates/admin/users/users.html:80
-msgid "firstname"
+#, fuzzy
+msgid "Firstname"
 msgstr "名"
 
 #: rhodecode/templates/admin/users/users.html:81
-msgid "lastname"
+#, fuzzy
+msgid "Lastname"
 msgstr "姓"
 
 #: rhodecode/templates/admin/users/users.html:82
-msgid "last login"
+#, fuzzy
+msgid "Last login"
 msgstr "最后登录"
 
-#: rhodecode/templates/admin/users/users.html:84
-#: rhodecode/templates/admin/users_groups/users_groups.html:34
-msgid "active"
-msgstr "启用"
-
-#: rhodecode/templates/admin/users/users.html:86
-#: rhodecode/templates/base/base.html:238
-msgid "ldap"
-msgstr "LDAP"
-
 #: rhodecode/templates/admin/users_groups/users_group_add.html:5
-msgid "Add users group"
+#, fuzzy
+msgid "Add user group"
 msgstr "添加用户组"
 
 #: rhodecode/templates/admin/users_groups/users_group_add.html:10
-#: rhodecode/templates/admin/users_groups/users_groups.html:9
-msgid "Users groups"
+#: rhodecode/templates/admin/users_groups/users_groups.html:11
+#: rhodecode/templates/base/base.html:72
+#, fuzzy
+msgid "User groups"
 msgstr "用户组"
 
 #: rhodecode/templates/admin/users_groups/users_group_add.html:12
-msgid "add new users group"
+#: rhodecode/templates/admin/users_groups/users_groups.html:25
+#, fuzzy
+msgid "Add new user group"
 msgstr "添加新用户组"
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:5
-msgid "Edit users group"
+#, fuzzy
+msgid "Edit user group"
 msgstr "编辑用户组"
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:11
-msgid "UsersGroups"
+#, fuzzy
+msgid "UserGroups"
 msgstr "用户组"
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:50
+#: rhodecode/templates/admin/users_groups/users_groups.html:35
 msgid "Members"
 msgstr "成员"
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:58
-msgid "Choosen group members"
+#, fuzzy
+msgid "Chosen group members"
 msgstr "选择组成员"
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:61
@@ -2861,264 +3114,280 @@
 msgid "Add all elements"
 msgstr "添加全部项目"
 
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:146
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:150
 msgid "Group members"
 msgstr "拥护者成员"
 
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:163
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:167
 msgid "No members yet"
 msgstr "还没有成员"
 
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:171
-msgid "Permissions defined for this group"
-msgstr "这个组的权限"
-
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:178
-msgid "No permissions set yet"
-msgstr "还未设置权限"
-
 #: rhodecode/templates/admin/users_groups/users_groups.html:5
-msgid "Users groups administration"
+#, fuzzy
+msgid "User groups administration"
 msgstr "用户组管理"
 
-#: rhodecode/templates/admin/users_groups/users_groups.html:23
-msgid "ADD NEW USER GROUP"
-msgstr "添加新用户组"
-
-#: rhodecode/templates/admin/users_groups/users_groups.html:32
-msgid "group name"
-msgstr "组名"
-
-#: rhodecode/templates/admin/users_groups/users_groups.html:33
-#: rhodecode/templates/base/root.html:46
-msgid "members"
-msgstr "成员"
-
-#: rhodecode/templates/admin/users_groups/users_groups.html:45
-#, python-format
-msgid "Confirm to delete this users group: %s"
+#: rhodecode/templates/admin/users_groups/users_groups.html:47
+#, fuzzy, python-format
+msgid "Confirm to delete this user group: %s"
 msgstr "确认删除该组:%s"
 
-#: rhodecode/templates/base/base.html:41
+#: rhodecode/templates/base/base.html:42
 msgid "Submit a bug"
 msgstr "提交bug"
 
-#: rhodecode/templates/base/base.html:77
-msgid "Login to your account"
-msgstr "登录"
-
-#: rhodecode/templates/base/base.html:100
-msgid "Forgot password ?"
-msgstr "忘记密码?"
-
-#: rhodecode/templates/base/base.html:107
-msgid "Log In"
-msgstr "登录"
+#: rhodecode/templates/base/base.html:108
+#: rhodecode/templates/data_table/_dt_elements.html:9
+#: rhodecode/templates/data_table/_dt_elements.html:11
+#: rhodecode/templates/data_table/_dt_elements.html:13
+#: rhodecode/templates/pullrequests/pullrequest_show.html:81
+#: rhodecode/templates/summary/summary.html:8
+msgid "Summary"
+msgstr "概况"
+
+#: rhodecode/templates/base/base.html:109
+#: rhodecode/templates/changelog/changelog.html:11
+#: rhodecode/templates/data_table/_dt_elements.html:17
+#: rhodecode/templates/data_table/_dt_elements.html:19
+#: rhodecode/templates/data_table/_dt_elements.html:21
+msgid "Changelog"
+msgstr "修订记录"
+
+#: rhodecode/templates/base/base.html:110
+#: rhodecode/templates/data_table/_dt_elements.html:25
+#: rhodecode/templates/data_table/_dt_elements.html:27
+#: rhodecode/templates/data_table/_dt_elements.html:29
+#: rhodecode/templates/files/files.html:12
+msgid "Files"
+msgstr "浏览"
+
+#: rhodecode/templates/base/base.html:112
+#, fuzzy
+msgid "Switch To"
+msgstr "切换到"
+
+#: rhodecode/templates/base/base.html:114
+#: rhodecode/templates/base/base.html:267
+msgid "loading..."
+msgstr "载入中..."
 
 #: rhodecode/templates/base/base.html:118
-msgid "Inbox"
-msgstr "收件箱"
-
-#: rhodecode/templates/base/base.html:123
-#: rhodecode/templates/base/base.html:322
-#: rhodecode/templates/base/base.html:324
-#: rhodecode/templates/base/base.html:326
-#: rhodecode/templates/journal/journal.html:4
-#: rhodecode/templates/journal/public_journal.html:4
-msgid "Journal"
-msgstr "日志"
-
-#: rhodecode/templates/base/base.html:125
-msgid "Log Out"
-msgstr "退出"
-
-#: rhodecode/templates/base/base.html:144
-msgid "Switch repository"
-msgstr "切换版本库"
-
-#: rhodecode/templates/base/base.html:146
-msgid "Products"
-msgstr "产品"
-
-#: rhodecode/templates/base/base.html:152
-#: rhodecode/templates/base/base.html:182
-#: rhodecode/templates/base/root.html:47
-msgid "loading..."
-msgstr "载入中..."
-
-#: rhodecode/templates/base/base.html:158
-#: rhodecode/templates/base/base.html:160
-#: rhodecode/templates/base/base.html:162
-#: rhodecode/templates/data_table/_dt_elements.html:15
-#: rhodecode/templates/data_table/_dt_elements.html:17
-#: rhodecode/templates/data_table/_dt_elements.html:19
-msgid "Summary"
-msgstr "概况"
-
-#: rhodecode/templates/base/base.html:166
-#: rhodecode/templates/base/base.html:168
-#: rhodecode/templates/base/base.html:170
-#: rhodecode/templates/changelog/changelog.html:15
-#: rhodecode/templates/data_table/_dt_elements.html:23
-#: rhodecode/templates/data_table/_dt_elements.html:25
-#: rhodecode/templates/data_table/_dt_elements.html:27
-msgid "Changelog"
-msgstr "修订记录"
-
-#: rhodecode/templates/base/base.html:175
-#: rhodecode/templates/base/base.html:177
-#: rhodecode/templates/base/base.html:179
-msgid "Switch to"
-msgstr "切换到"
-
-#: rhodecode/templates/base/base.html:186
-#: rhodecode/templates/base/base.html:188
-#: rhodecode/templates/base/base.html:190
-#: rhodecode/templates/data_table/_dt_elements.html:31
-#: rhodecode/templates/data_table/_dt_elements.html:33
-#: rhodecode/templates/data_table/_dt_elements.html:35
-msgid "Files"
-msgstr "浏览"
-
-#: rhodecode/templates/base/base.html:195
-#: rhodecode/templates/base/base.html:199
 msgid "Options"
 msgstr "选项"
 
-#: rhodecode/templates/base/base.html:204
-#: rhodecode/templates/base/base.html:206
-msgid "repository settings"
-msgstr "版本库选项"
-
-#: rhodecode/templates/base/base.html:210
-#: rhodecode/templates/data_table/_dt_elements.html:80
-#: rhodecode/templates/forks/fork.html:13
-msgid "fork"
-msgstr "复刻"
-
-#: rhodecode/templates/base/base.html:212
-#: rhodecode/templates/base/root.html:50
-#: rhodecode/templates/changelog/changelog.html:43
-msgid "Open new pull request"
-msgstr "新建拉取请求"
-
-#: rhodecode/templates/base/base.html:215
+#: rhodecode/templates/base/base.html:124
 #: rhodecode/templates/forks/forks_data.html:21
 msgid "Compare fork"
 msgstr "比较复刻"
 
-#: rhodecode/templates/base/base.html:217
-msgid "search"
-msgstr "搜索"
-
-#: rhodecode/templates/base/base.html:223
-msgid "lock"
-msgstr "锁定"
-
-#: rhodecode/templates/base/base.html:234
-msgid "repositories groups"
-msgstr "版本库组"
-
-#: rhodecode/templates/base/base.html:236
-msgid "users groups"
-msgstr "用户组"
-
-#: rhodecode/templates/base/base.html:237
-msgid "permissions"
-msgstr "权限"
-
-#: rhodecode/templates/base/base.html:239
-msgid "defaults"
-msgstr "默认设置"
-
-#: rhodecode/templates/base/base.html:240
-msgid "settings"
-msgstr "设置"
-
-#: rhodecode/templates/base/base.html:251
-#: rhodecode/templates/base/base.html:253
-msgid "Followers"
-msgstr "关注者"
-
-#: rhodecode/templates/base/base.html:259
-#: rhodecode/templates/base/base.html:261
-msgid "Forks"
-msgstr "复刻"
-
-#: rhodecode/templates/base/base.html:340
-#: rhodecode/templates/base/base.html:342
-#: rhodecode/templates/base/base.html:344
-#: rhodecode/templates/search/search.html:52
+#: rhodecode/templates/base/base.html:126
+#, fuzzy
+msgid "Lightweight changelog"
+msgstr "使用轻量的控制面板"
+
+#: rhodecode/templates/base/base.html:127
+#: rhodecode/templates/base/base.html:287
+#: rhodecode/templates/search/search.html:14
+#: rhodecode/templates/search/search.html:54
 msgid "Search"
 msgstr "搜索"
 
-#: rhodecode/templates/base/root.html:42
-msgid "add another comment"
-msgstr "添加新的评论"
+#: rhodecode/templates/base/base.html:133
+#, fuzzy
+msgid "Lock"
+msgstr "锁定"
+
+#: rhodecode/templates/base/base.html:141
+#, fuzzy
+msgid "Follow"
+msgstr "关注者"
+
+#: rhodecode/templates/base/base.html:142
+#, fuzzy
+msgid "Unfollow"
+msgstr "关注者"
+
+#: rhodecode/templates/base/base.html:145
+#: rhodecode/templates/data_table/_dt_elements.html:33
+#: rhodecode/templates/data_table/_dt_elements.html:35
+#: rhodecode/templates/data_table/_dt_elements.html:37
+#: rhodecode/templates/data_table/_dt_elements.html:74
+#: rhodecode/templates/forks/fork.html:9
+msgid "Fork"
+msgstr "复刻"
+
+#: rhodecode/templates/base/base.html:147
+#, fuzzy
+msgid "Create Pull Request"
+msgstr "创建新的拉取请求"
+
+#: rhodecode/templates/base/base.html:153
+#, fuzzy
+msgid "Show Pull Requests"
+msgstr "新建拉取请求"
+
+#: rhodecode/templates/base/base.html:153
+#, fuzzy
+msgid "Pull Requests"
+msgstr "拉取请求"
+
+#: rhodecode/templates/base/base.html:190
+#, fuzzy
+msgid "Not logged in"
+msgstr "最后登录"
+
+#: rhodecode/templates/base/base.html:197
+msgid "Login to your account"
+msgstr "登录"
+
+#: rhodecode/templates/base/base.html:220
+msgid "Forgot password ?"
+msgstr "忘记密码?"
+
+#: rhodecode/templates/base/base.html:243
+msgid "Log Out"
+msgstr "退出"
+
+#: rhodecode/templates/base/base.html:262
+msgid "Switch repository"
+msgstr "切换版本库"
+
+#: rhodecode/templates/base/base.html:274
+msgid "Show recent activity"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:275
+#: rhodecode/templates/journal/journal.html:4
+msgid "Journal"
+msgstr "日志"
+
+#: rhodecode/templates/base/base.html:286
+#, fuzzy
+msgid "Search in repositories"
+msgstr "在所有的版本库中搜索"
+
+#: rhodecode/templates/base/perms_summary.html:8
+#, fuzzy
+msgid "No permissions defined yet"
+msgstr "还未设置权限"
+
+#: rhodecode/templates/base/perms_summary.html:15
+msgid "Permission"
+msgstr "权限"
+
+#: rhodecode/templates/base/perms_summary.html:16
+msgid "Edit Permission"
+msgstr "编辑权限"
 
 #: rhodecode/templates/base/root.html:43
-#: rhodecode/templates/journal/journal.html:83
-#: rhodecode/templates/summary/summary.html:57
-msgid "Stop following this repository"
-msgstr "停止关注该版本库"
+#, fuzzy
+msgid "Add another comment"
+msgstr "添加新的评论"
 
 #: rhodecode/templates/base/root.html:44
-#: rhodecode/templates/summary/summary.html:61
+#: rhodecode/templates/data_table/_dt_elements.html:140
+msgid "Stop following this repository"
+msgstr "停止关注该版本库"
+
+#: rhodecode/templates/base/root.html:45
 msgid "Start following this repository"
 msgstr "开始关注该版本库"
 
-#: rhodecode/templates/base/root.html:45
+#: rhodecode/templates/base/root.html:46
 msgid "Group"
 msgstr "组"
 
+#: rhodecode/templates/base/root.html:47
+msgid "members"
+msgstr "成员"
+
 #: rhodecode/templates/base/root.html:48
-msgid "search truncated"
-msgstr "搜索被截断"
+#: rhodecode/templates/pullrequests/pullrequest.html:181
+#, fuzzy
+msgid "Loading ..."
+msgstr "载入中..."
 
 #: rhodecode/templates/base/root.html:49
-msgid "no matching files"
+#, fuzzy
+msgid "Search truncated"
+msgstr "搜索被截断"
+
+#: rhodecode/templates/base/root.html:50
+#, fuzzy
+msgid "No matching files"
 msgstr "没有符合的文件"
 
 #: rhodecode/templates/base/root.html:51
-msgid "Open new pull request for selected changesets"
-msgstr "为选择的变更集创建新的拉取请求"
+#: rhodecode/templates/changelog/changelog.html:36
+msgid "Open new pull request"
+msgstr "新建拉取请求"
 
 #: rhodecode/templates/base/root.html:52
-msgid "Show selected changes __S -> __E"
-msgstr "显示选定的修订集:__S -> __E"
+msgid "Open new pull request for selected changesets"
+msgstr "为选择的变更集创建新的拉取请求"
 
 #: rhodecode/templates/base/root.html:53
+#, fuzzy
+msgid "Show selected changesets __S -> __E"
+msgstr "显示选定的修订集:__S -> __E"
+
+#: rhodecode/templates/base/root.html:54
+#, fuzzy
+msgid "Show selected changeset __S"
+msgstr "显示选定的修订集:__S -> __E"
+
+#: rhodecode/templates/base/root.html:55
 msgid "Selection link"
 msgstr "选择链接"
 
+#: rhodecode/templates/base/root.html:56
+#: rhodecode/templates/changeset/diff_block.html:8
+#, fuzzy
+msgid "Collapse diff"
+msgstr "文件差异"
+
+#: rhodecode/templates/base/root.html:57
+#, fuzzy
+msgid "Expand diff"
+msgstr "原始diff"
+
 #: rhodecode/templates/bookmarks/bookmarks.html:5
 #, python-format
 msgid "%s Bookmarks"
 msgstr "%s书签"
 
-#: rhodecode/templates/bookmarks/bookmarks.html:39
+#: rhodecode/templates/bookmarks/bookmarks.html:37
 #: rhodecode/templates/bookmarks/bookmarks_data.html:8
-#: rhodecode/templates/branches/branches.html:53
+#: rhodecode/templates/branches/branches.html:50
 #: rhodecode/templates/branches/branches_data.html:8
-#: rhodecode/templates/tags/tags.html:54
+#: rhodecode/templates/shortlog/shortlog_data.html:8
+#: rhodecode/templates/tags/tags.html:51
 #: rhodecode/templates/tags/tags_data.html:8
 msgid "Author"
 msgstr "作者"
 
+#: rhodecode/templates/bookmarks/bookmarks.html:38
+#: rhodecode/templates/bookmarks/bookmarks_data.html:9
+#: rhodecode/templates/branches/branches.html:51
+#: rhodecode/templates/branches/branches_data.html:9
+#: rhodecode/templates/shortlog/shortlog_data.html:5
+#: rhodecode/templates/tags/tags.html:52
+#: rhodecode/templates/tags/tags_data.html:9
+msgid "Revision"
+msgstr "修订"
+
 #: rhodecode/templates/branches/branches.html:5
 #, python-format
 msgid "%s Branches"
 msgstr "%s分支"
 
-#: rhodecode/templates/branches/branches.html:29
+#: rhodecode/templates/branches/branches.html:26
 msgid "Compare branches"
 msgstr "比较分支"
 
-#: rhodecode/templates/branches/branches.html:56
+#: rhodecode/templates/branches/branches.html:53
 #: rhodecode/templates/branches/branches_data.html:10
-#: rhodecode/templates/compare/compare_diff.html:5
-#: rhodecode/templates/compare/compare_diff.html:13
-#: rhodecode/templates/tags/tags.html:57
+#: rhodecode/templates/tags/tags.html:54
 #: rhodecode/templates/tags/tags_data.html:10
 msgid "Compare"
 msgstr "比较显示"
@@ -3128,114 +3397,82 @@
 msgid "%s Changelog"
 msgstr "%s修订记录"
 
-#: rhodecode/templates/changelog/changelog.html:15
+#: rhodecode/templates/changelog/changelog.html:11
 #, python-format
 msgid "showing %d out of %d revision"
 msgid_plural "showing %d out of %d revisions"
 msgstr[0] "显示%d/%d个版本"
 
-#: rhodecode/templates/changelog/changelog.html:37
+#: rhodecode/templates/changelog/changelog.html:30
 msgid "Clear selection"
 msgstr "清除选择"
 
-#: rhodecode/templates/changelog/changelog.html:40
+#: rhodecode/templates/changelog/changelog.html:33
 #: rhodecode/templates/forks/forks_data.html:19
-#, python-format
-msgid "compare fork with %s"
+#, fuzzy, python-format
+msgid "Compare fork with %s"
 msgstr "比较复刻和%s"
 
-#: rhodecode/templates/changelog/changelog.html:40
+#: rhodecode/templates/changelog/changelog.html:33
 msgid "Compare fork with parent"
 msgstr "比较复刻和源版本库"
 
-#: rhodecode/templates/changelog/changelog.html:49
-msgid "Show"
-msgstr "显示"
-
-#: rhodecode/templates/changelog/changelog.html:74
-#: rhodecode/templates/summary/summary.html:375
-msgid "show more"
+#: rhodecode/templates/changelog/changelog.html:76
+#: rhodecode/templates/summary/summary.html:404
+#, fuzzy
+msgid "Show more"
 msgstr "显示更多"
 
-#: rhodecode/templates/changelog/changelog.html:78
-msgid "Affected number of files, click to show more details"
-msgstr "影响的文件数,点击显示详细信息"
-
-#: rhodecode/templates/changelog/changelog.html:91
-#: rhodecode/templates/changeset/changeset.html:65
-#: rhodecode/templates/changeset/changeset_file_comment.html:20
-#: rhodecode/templates/changeset/changeset_range.html:46
-msgid "Changeset status"
-msgstr "修订集状态"
-
-#: rhodecode/templates/changelog/changelog.html:94
-#: rhodecode/templates/shortlog/shortlog_data.html:20
-msgid "Click to open associated pull request"
-msgstr "点击建立相关的拉取请求"
-
-#: rhodecode/templates/changelog/changelog.html:104
-msgid "Parent"
-msgstr "父版本"
-
-#: rhodecode/templates/changelog/changelog.html:110
-#: rhodecode/templates/changeset/changeset.html:42
-msgid "No parents"
-msgstr "无父版本"
-
-#: rhodecode/templates/changelog/changelog.html:115
+#: rhodecode/templates/changelog/changelog.html:89
+#: rhodecode/templates/changeset/changeset_range.html:86
+#, fuzzy, python-format
+msgid "Bookmark %s"
+msgstr "书签"
+
+#: rhodecode/templates/changelog/changelog.html:95
+#: rhodecode/templates/changeset/changeset.html:111
+#: rhodecode/templates/changeset/changeset_range.html:92
+#, fuzzy, python-format
+msgid "Tag %s"
+msgstr "标签"
+
+#: rhodecode/templates/changelog/changelog.html:100
 #: rhodecode/templates/changeset/changeset.html:106
-#: rhodecode/templates/changeset/changeset_range.html:79
-msgid "merge"
-msgstr "合并"
-
-#: rhodecode/templates/changelog/changelog.html:118
-#: rhodecode/templates/changeset/changeset.html:109
-#: rhodecode/templates/changeset/changeset_range.html:82
-#: rhodecode/templates/files/files.html:29
-#: rhodecode/templates/files/files_add.html:33
-#: rhodecode/templates/files/files_edit.html:33
-#: rhodecode/templates/shortlog/shortlog_data.html:9
-msgid "branch"
+#: rhodecode/templates/changeset/changeset_range.html:80
+#, fuzzy, python-format
+msgid "Branch %s"
 msgstr "分支"
 
-#: rhodecode/templates/changelog/changelog.html:124
-#: rhodecode/templates/changeset/changeset_range.html:88
-msgid "bookmark"
-msgstr "书签"
-
-#: rhodecode/templates/changelog/changelog.html:130
-#: rhodecode/templates/changeset/changeset.html:114
-#: rhodecode/templates/changeset/changeset_range.html:94
-msgid "tag"
-msgstr "标签"
-
-#: rhodecode/templates/changelog/changelog.html:301
+#: rhodecode/templates/changelog/changelog.html:258
 msgid "There are no changes yet"
 msgstr "没有任何变更"
 
 #: rhodecode/templates/changelog/changelog_details.html:4
-#: rhodecode/templates/changeset/changeset.html:94
-msgid "removed"
+#: rhodecode/templates/changeset/changeset.html:91
+#, fuzzy
+msgid "Removed"
 msgstr "移除"
 
 #: rhodecode/templates/changelog/changelog_details.html:5
-#: rhodecode/templates/changeset/changeset.html:95
-msgid "changed"
+#: rhodecode/templates/changeset/changeset.html:92
+#, fuzzy
+msgid "Changed"
 msgstr "修改"
 
 #: rhodecode/templates/changelog/changelog_details.html:6
-#: rhodecode/templates/changeset/changeset.html:96
-msgid "added"
+#: rhodecode/templates/changeset/changeset.html:93
+#, fuzzy
+msgid "Added"
 msgstr "添加"
 
 #: rhodecode/templates/changelog/changelog_details.html:8
 #: rhodecode/templates/changelog/changelog_details.html:9
 #: rhodecode/templates/changelog/changelog_details.html:10
-#: rhodecode/templates/changeset/changeset.html:98
-#: rhodecode/templates/changeset/changeset.html:99
-#: rhodecode/templates/changeset/changeset.html:100
-#, python-format
-msgid "affected %s files"
+#: rhodecode/templates/changeset/changeset.html:95
+#: rhodecode/templates/changeset/changeset.html:96
+#: rhodecode/templates/changeset/changeset.html:97
+#, fuzzy, python-format
+msgid "Affected %s files"
 msgstr "影响%s文件"
 
 #: rhodecode/templates/changeset/changeset.html:6
@@ -3243,109 +3480,146 @@
 msgid "%s Changeset"
 msgstr "%s修订集"
 
-#: rhodecode/templates/changeset/changeset.html:14
-msgid "Changeset"
-msgstr "修订集"
-
-#: rhodecode/templates/changeset/changeset.html:52
+#: rhodecode/templates/changeset/changeset.html:39
+msgid "No parents"
+msgstr "无父版本"
+
+#: rhodecode/templates/changeset/changeset.html:49
 msgid "No children"
 msgstr "无子对象"
 
-#: rhodecode/templates/changeset/changeset.html:70
-#: rhodecode/templates/changeset/diff_block.html:20
-msgid "raw diff"
-msgstr "原始diff"
-
-#: rhodecode/templates/changeset/changeset.html:71
-msgid "patch diff"
+#: rhodecode/templates/changeset/changeset.html:62
+#: rhodecode/templates/changeset/changeset_file_comment.html:20
+#: rhodecode/templates/changeset/changeset_range.html:44
+msgid "Changeset status"
+msgstr "修订集状态"
+
+#: rhodecode/templates/changeset/changeset.html:67
+#: rhodecode/templates/changeset/diff_block.html:23
+#, fuzzy
+msgid "Raw diff"
 msgstr "原始diff"
 
-#: rhodecode/templates/changeset/changeset.html:72
-#: rhodecode/templates/changeset/diff_block.html:21
-msgid "download diff"
+#: rhodecode/templates/changeset/changeset.html:68
+#, fuzzy
+msgid "Patch diff"
+msgstr "原始diff"
+
+#: rhodecode/templates/changeset/changeset.html:69
+#: rhodecode/templates/changeset/diff_block.html:24
+#, fuzzy
+msgid "Download diff"
 msgstr "下载diff"
 
-#: rhodecode/templates/changeset/changeset.html:76
-#: rhodecode/templates/changeset/changeset_file_comment.html:82
+#: rhodecode/templates/changeset/changeset.html:73
+#: rhodecode/templates/changeset/changeset_file_comment.html:97
 #, python-format
 msgid "%d comment"
 msgid_plural "%d comments"
 msgstr[0] "%d条评论"
 
-#: rhodecode/templates/changeset/changeset.html:76
-#: rhodecode/templates/changeset/changeset_file_comment.html:82
+#: rhodecode/templates/changeset/changeset.html:73
+#: rhodecode/templates/changeset/changeset_file_comment.html:97
 #, python-format
 msgid "(%d inline)"
 msgid_plural "(%d inline)"
 msgstr[0] "(%d内嵌)"
 
-#: rhodecode/templates/changeset/changeset.html:122
-#: rhodecode/templates/compare/compare_diff.html:44
-#: rhodecode/templates/pullrequests/pullrequest_show.html:76
+#: rhodecode/templates/changeset/changeset.html:103
+#: rhodecode/templates/changeset/changeset_range.html:77
+msgid "merge"
+msgstr "合并"
+
+#: rhodecode/templates/changeset/changeset.html:119
+#: rhodecode/templates/compare/compare_diff.html:40
+#: rhodecode/templates/pullrequests/pullrequest_show.html:113
 #, python-format
 msgid "%s file changed"
 msgid_plural "%s files changed"
 msgstr[0] "修改%s个文件"
 
-#: rhodecode/templates/changeset/changeset.html:124
-#: rhodecode/templates/compare/compare_diff.html:46
-#: rhodecode/templates/pullrequests/pullrequest_show.html:78
+#: rhodecode/templates/changeset/changeset.html:121
+#: rhodecode/templates/compare/compare_diff.html:42
+#: rhodecode/templates/pullrequests/pullrequest_show.html:115
 #, python-format
 msgid "%s file changed with %s insertions and %s deletions"
 msgid_plural "%s files changed with %s insertions and %s deletions"
 msgstr[0] "修改%s个文件包括%s行插入和%s行删除"
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:42
+#: rhodecode/templates/changeset/changeset.html:134
+#: rhodecode/templates/changeset/changeset.html:146
+#: rhodecode/templates/pullrequests/pullrequest_show.html:131
+#: rhodecode/templates/pullrequests/pullrequest_show.html:195
+msgid "Showing a huge diff might take some time and resources"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset.html:134
+#: rhodecode/templates/changeset/changeset.html:146
+#: rhodecode/templates/compare/compare_diff.html:58
+#: rhodecode/templates/compare/compare_diff.html:69
+#: rhodecode/templates/pullrequests/pullrequest_show.html:131
+#: rhodecode/templates/pullrequests/pullrequest_show.html:195
+#, fuzzy
+msgid "Show full diff"
+msgstr "显示全部历史记录"
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:30
+#, fuzzy, python-format
+msgid "Status change on pull request #%s"
+msgstr "所有拉取请求 %s"
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:32
+#, fuzzy, python-format
+msgid "Comment on pull request #%s"
+msgstr "[评论]拉取请求 %s"
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:57
 msgid "Submitting..."
 msgstr "提交中……"
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:45
+#: rhodecode/templates/changeset/changeset_file_comment.html:60
 msgid "Commenting on line {1}."
 msgstr "在{1}行上评论"
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:46
-#: rhodecode/templates/changeset/changeset_file_comment.html:121
+#: rhodecode/templates/changeset/changeset_file_comment.html:61
+#: rhodecode/templates/changeset/changeset_file_comment.html:139
 #, python-format
 msgid "Comments parsed using %s syntax with %s support."
 msgstr "评论使用%s语法并支持%s"
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:48
-#: rhodecode/templates/changeset/changeset_file_comment.html:123
-msgid ""
-"Use @username inside this text to send notification to this RhodeCode user"
+#: rhodecode/templates/changeset/changeset_file_comment.html:63
+#: rhodecode/templates/changeset/changeset_file_comment.html:141
+msgid "Use @username inside this text to send notification to this RhodeCode user"
 msgstr "在文本中使用 @用户名 以发送通知到该RhodeCode用户"
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:59
-#: rhodecode/templates/changeset/changeset_file_comment.html:143
+#: rhodecode/templates/changeset/changeset_file_comment.html:74
+#: rhodecode/templates/changeset/changeset_file_comment.html:161
 msgid "Comment"
 msgstr "评论"
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:60
-#: rhodecode/templates/changeset/changeset_file_comment.html:71
-msgid "Hide"
-msgstr "隐藏"
-
-#: rhodecode/templates/changeset/changeset_file_comment.html:67
+#: rhodecode/templates/changeset/changeset_file_comment.html:75
+#, fuzzy
+msgid "Cancel"
+msgstr "修改"
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:82
 msgid "You need to be logged in to comment."
 msgstr "必须登录才能评论"
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:67
+#: rhodecode/templates/changeset/changeset_file_comment.html:82
 msgid "Login now"
 msgstr "现在登陆"
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:118
-msgid "Leave a comment"
-msgstr "发表评论"
-
-#: rhodecode/templates/changeset/changeset_file_comment.html:125
-msgid "Check this to change current status of code-review for this changeset"
-msgstr "勾选以改变这个修订集的代码审查状态"
-
-#: rhodecode/templates/changeset/changeset_file_comment.html:125
-msgid "change status"
+#: rhodecode/templates/changeset/changeset_file_comment.html:86
+msgid "Hide"
+msgstr "隐藏"
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:143
+#, fuzzy
+msgid "Change status"
 msgstr "改变状态"
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:145
+#: rhodecode/templates/changeset/changeset_file_comment.html:163
 msgid "Comment and close"
 msgstr "评论并关闭"
 
@@ -3354,116 +3628,144 @@
 msgid "%s Changesets"
 msgstr "%s修订集"
 
-#: rhodecode/templates/changeset/changeset_range.html:29
-#: rhodecode/templates/compare/compare_diff.html:29
-msgid "Compare View"
-msgstr "比较显示"
-
-#: rhodecode/templates/changeset/changeset_range.html:29
-msgid "Show combined compare"
-msgstr "显示紧凑比较"
-
-#: rhodecode/templates/changeset/changeset_range.html:54
+#: rhodecode/templates/changeset/changeset_range.html:52
 msgid "Files affected"
 msgstr "影响文件"
 
-#: rhodecode/templates/changeset/diff_block.html:19
-msgid "show full diff for this file"
+#: rhodecode/templates/changeset/diff_block.html:22
+#, fuzzy
+msgid "Show full diff for this file"
 msgstr "显示文件的完整差异"
 
-#: rhodecode/templates/changeset/diff_block.html:27
-msgid "show inline comments"
+#: rhodecode/templates/changeset/diff_block.html:30
+#, fuzzy
+msgid "Show inline comments"
 msgstr "显示内嵌评论"
 
-#: rhodecode/templates/compare/compare_cs.html:5
+#: rhodecode/templates/changeset/diff_block.html:55
+msgid "Show file at latest version in this repo"
+msgstr ""
+
+#: rhodecode/templates/changeset/diff_block.html:56
+msgid "Show file at initial version in this repo"
+msgstr ""
+
+#: rhodecode/templates/compare/compare_cs.html:4
 msgid "No changesets"
 msgstr "无修订"
 
-#: rhodecode/templates/compare/compare_diff.html:37
-#: rhodecode/templates/pullrequests/pullrequest_show.html:69
+#: rhodecode/templates/compare/compare_cs.html:32
+#, fuzzy
+msgid "Ancestor"
+msgstr "分支"
+
+#: rhodecode/templates/compare/compare_diff.html:5
+#, fuzzy, python-format
+msgid "%s Compare"
+msgstr "比较显示"
+
+#: rhodecode/templates/compare/compare_diff.html:9
+#, fuzzy
+msgid "Compare revisions"
+msgstr "上一个修订"
+
+#: rhodecode/templates/compare/compare_diff.html:33
+#: rhodecode/templates/pullrequests/pullrequest_show.html:106
 #, python-format
 msgid "Showing %s commit"
 msgid_plural "Showing %s commits"
 msgstr[0] "显示%s个提交"
 
-#: rhodecode/templates/compare/compare_diff.html:52
-#: rhodecode/templates/pullrequests/pullrequest_show.html:84
+#: rhodecode/templates/compare/compare_diff.html:48
+#: rhodecode/templates/pullrequests/pullrequest_show.html:121
 msgid "No files"
 msgstr "无文件"
 
-#: rhodecode/templates/data_table/_dt_elements.html:39
-#: rhodecode/templates/data_table/_dt_elements.html:41
-#: rhodecode/templates/data_table/_dt_elements.html:43
-msgid "Fork"
-msgstr "复刻"
-
-#: rhodecode/templates/data_table/_dt_elements.html:60
-#: rhodecode/templates/journal/journal.html:89
-#: rhodecode/templates/summary/summary.html:77
+#: rhodecode/templates/compare/compare_diff.html:58
+#: rhodecode/templates/compare/compare_diff.html:69
+msgid "confirm to show potentially huge diff"
+msgstr ""
+
+#: rhodecode/templates/data_table/_dt_elements.html:54
+#: rhodecode/templates/summary/summary.html:69
 msgid "Mercurial repository"
 msgstr "Mercurial版本库"
 
-#: rhodecode/templates/data_table/_dt_elements.html:62
-#: rhodecode/templates/journal/journal.html:91
-#: rhodecode/templates/summary/summary.html:80
+#: rhodecode/templates/data_table/_dt_elements.html:56
+#: rhodecode/templates/summary/summary.html:72
 msgid "Git repository"
 msgstr "Git版本库"
 
-#: rhodecode/templates/data_table/_dt_elements.html:69
-#: rhodecode/templates/journal/journal.html:97
-#: rhodecode/templates/summary/summary.html:87
-msgid "public repository"
-msgstr "公共版本库"
-
-#: rhodecode/templates/data_table/_dt_elements.html:80
-#: rhodecode/templates/summary/summary.html:96
-#: rhodecode/templates/summary/summary.html:97
-msgid "Fork of"
-msgstr "复刻自"
-
-#: rhodecode/templates/data_table/_dt_elements.html:94
+#: rhodecode/templates/data_table/_dt_elements.html:74
+#, fuzzy, python-format
+msgid "Fork of %s"
+msgstr "复刻名称%s"
+
+#: rhodecode/templates/data_table/_dt_elements.html:88
 msgid "No changesets yet"
 msgstr "无修订"
 
-#: rhodecode/templates/data_table/_dt_elements.html:101
-#: rhodecode/templates/data_table/_dt_elements.html:103
+#: rhodecode/templates/data_table/_dt_elements.html:95
+#: rhodecode/templates/data_table/_dt_elements.html:97
 #, python-format
 msgid "Subscribe to %s rss feed"
 msgstr "订阅%s的RSS"
 
-#: rhodecode/templates/data_table/_dt_elements.html:109
-#: rhodecode/templates/data_table/_dt_elements.html:111
+#: rhodecode/templates/data_table/_dt_elements.html:103
+#: rhodecode/templates/data_table/_dt_elements.html:105
 #, python-format
 msgid "Subscribe to %s atom feed"
 msgstr "订阅%s的Atom"
 
 #: rhodecode/templates/data_table/_dt_elements.html:122
 #, python-format
+msgid "Confirm to delete this repository: %s"
+msgstr "确认删除版本库:%s"
+
+#: rhodecode/templates/data_table/_dt_elements.html:131
+#, python-format
 msgid "Confirm to delete this user: %s"
 msgstr "确认删除用户:%s"
 
-#: rhodecode/templates/email_templates/changeset_comment.html:10
-msgid "New status$"
-msgstr "新状态$"
+#: rhodecode/templates/email_templates/changeset_comment.html:9
+#: rhodecode/templates/email_templates/pull_request_comment.html:15
+msgid "New status"
+msgstr "新状态"
+
+#: rhodecode/templates/email_templates/changeset_comment.html:11
+#: rhodecode/templates/email_templates/pull_request_comment.html:9
+msgid "View this comment here"
+msgstr "查看评论"
+
+#: rhodecode/templates/email_templates/changeset_comment.html:14
+#, fuzzy
+msgid "Repo"
+msgstr "我的版本库"
+
+#: rhodecode/templates/email_templates/changeset_comment.html:16
+msgid "desc"
+msgstr ""
 
 #: rhodecode/templates/email_templates/main.html:8
 msgid "This is a notification from RhodeCode."
 msgstr "这是一个RhodeCode通知。"
 
 #: rhodecode/templates/email_templates/password_reset.html:4
-msgid "Hello"
+#, fuzzy, python-format
+msgid "Hello %s"
 msgstr "你好"
 
-#: rhodecode/templates/email_templates/password_reset.html:6
+#: rhodecode/templates/email_templates/password_reset.html:5
 msgid "We received a request to create a new password for your account."
 msgstr "我们收到重置你用户密码的请求。"
 
-#: rhodecode/templates/email_templates/password_reset.html:8
+#: rhodecode/templates/email_templates/password_reset.html:6
 msgid "You can generate it by clicking following URL"
 msgstr "点击下面的链接以重新生成密码:"
 
-#: rhodecode/templates/email_templates/password_reset.html:12
-msgid "If you didn't request new password please ignore this email."
+#: rhodecode/templates/email_templates/password_reset.html:11
+#, fuzzy
+msgid "If you did not request new password please ignore this email."
 msgstr "如果你没有要求重置密码,请忽略这封邮件。"
 
 #: rhodecode/templates/email_templates/pull_request.html:4
@@ -3474,34 +3776,30 @@
 msgstr "用户%s在版本库%s中创建了一个拉取请求需要你检视"
 
 #: rhodecode/templates/email_templates/pull_request.html:5
-msgid "title"
-msgstr "标题"
+msgid "View this pull request here"
+msgstr "查看拉取请求"
 
 #: rhodecode/templates/email_templates/pull_request.html:6
-#: rhodecode/templates/pullrequests/pullrequest.html:115
+msgid "title"
+msgstr "标题"
+
+#: rhodecode/templates/email_templates/pull_request.html:7
 msgid "description"
 msgstr "描述"
 
-#: rhodecode/templates/email_templates/pull_request.html:11
+#: rhodecode/templates/email_templates/pull_request.html:12
 msgid "revisions for reviewing"
 msgstr "待检视修订"
 
-#: rhodecode/templates/email_templates/pull_request.html:18
-msgid "View this pull request here"
-msgstr "查看拉取请求"
-
-#: rhodecode/templates/email_templates/pull_request_comment.html:4
-#, python-format
-msgid "User %s commented on pull request #%s for repository %s"
+#: rhodecode/templates/email_templates/pull_request_comment.html:3
+#, fuzzy, python-format
+msgid "Pull request #%s for repository %s"
 msgstr "用户%s评论了版本库%s的拉取请求%s"
 
-#: rhodecode/templates/email_templates/pull_request_comment.html:10
-msgid "New status"
-msgstr "新状态"
-
-#: rhodecode/templates/email_templates/pull_request_comment.html:14
-msgid "View this comment here"
-msgstr "查看评论"
+#: rhodecode/templates/email_templates/pull_request_comment.html:13
+#, fuzzy
+msgid "Closing pull request with status"
+msgstr "拉取请求状态"
 
 #: rhodecode/templates/email_templates/registration.html:4
 msgid "A new user have registered in RhodeCode"
@@ -3511,109 +3809,115 @@
 msgid "View this user here"
 msgstr "查看用户"
 
-#: rhodecode/templates/errors/error_document.html:46
+#: rhodecode/templates/errors/error_document.html:55
 #, python-format
 msgid "You will be redirected to %s in %s seconds"
 msgstr "重定向到%s,于%s秒后"
 
 #: rhodecode/templates/files/file_diff.html:4
-#, python-format
-msgid "%s File diff"
+#, fuzzy, python-format
+msgid "%s File Diff"
 msgstr "%s文件差异"
 
-#: rhodecode/templates/files/file_diff.html:12
+#: rhodecode/templates/files/file_diff.html:8
 msgid "File diff"
 msgstr "文件差异"
 
 #: rhodecode/templates/files/files.html:4
-#: rhodecode/templates/files/files.html:74
-#, python-format
-msgid "%s files"
+#: rhodecode/templates/files/files.html:76
+#, fuzzy, python-format
+msgid "%s Files"
 msgstr "%s文件"
 
-#: rhodecode/templates/files/files.html:12
-#: rhodecode/templates/summary/summary.html:351
-msgid "files"
-msgstr "文件"
+#: rhodecode/templates/files/files.html:30
+#: rhodecode/templates/files/files_add.html:31
+#: rhodecode/templates/files/files_edit.html:31
+#: rhodecode/templates/shortlog/shortlog_data.html:9
+#, fuzzy
+msgid "Branch"
+msgstr "分支"
 
 #: rhodecode/templates/files/files_add.html:4
-#: rhodecode/templates/files/files_edit.html:4
-#, python-format
-msgid "%s Edit file"
-msgstr "%s编辑文件"
+#, fuzzy, python-format
+msgid "%s Files Add"
+msgstr "%s文件"
 
 #: rhodecode/templates/files/files_add.html:19
-msgid "add file"
+#, fuzzy
+msgid "Add file"
 msgstr "新建文件"
 
-#: rhodecode/templates/files/files_add.html:40
+#: rhodecode/templates/files/files_add.html:38
+#: rhodecode/templates/files/files_browser.html:31
+#: rhodecode/templates/shortlog/shortlog_data.html:78
 msgid "Add new file"
 msgstr "新建文件"
 
-#: rhodecode/templates/files/files_add.html:45
+#: rhodecode/templates/files/files_add.html:43
 msgid "File Name"
 msgstr "文件名"
 
-#: rhodecode/templates/files/files_add.html:49
-#: rhodecode/templates/files/files_add.html:58
+#: rhodecode/templates/files/files_add.html:47
+#: rhodecode/templates/files/files_add.html:56
 msgid "or"
 msgstr "或者"
 
-#: rhodecode/templates/files/files_add.html:49
-#: rhodecode/templates/files/files_add.html:54
+#: rhodecode/templates/files/files_add.html:47
+#: rhodecode/templates/files/files_add.html:52
 msgid "Upload file"
 msgstr "上传文件"
 
-#: rhodecode/templates/files/files_add.html:58
+#: rhodecode/templates/files/files_add.html:56
 msgid "Create new file"
 msgstr "创建新文件"
 
-#: rhodecode/templates/files/files_add.html:63
-#: rhodecode/templates/files/files_edit.html:39
+#: rhodecode/templates/files/files_add.html:61
+#: rhodecode/templates/files/files_edit.html:37
 #: rhodecode/templates/files/files_ypjax.html:3
 msgid "Location"
 msgstr "位置"
 
-#: rhodecode/templates/files/files_add.html:67
+#: rhodecode/templates/files/files_add.html:65
 msgid "use / to separate directories"
 msgstr "使用 / 目录分隔符"
 
-#: rhodecode/templates/files/files_add.html:77
-#: rhodecode/templates/files/files_edit.html:63
+#: rhodecode/templates/files/files_add.html:75
+#: rhodecode/templates/files/files_edit.html:61
 #: rhodecode/templates/shortlog/shortlog_data.html:6
-msgid "commit message"
+#, fuzzy
+msgid "Commit message"
 msgstr "提交信息"
 
-#: rhodecode/templates/files/files_add.html:81
-#: rhodecode/templates/files/files_edit.html:67
+#: rhodecode/templates/files/files_add.html:79
+#: rhodecode/templates/files/files_edit.html:65
 msgid "Commit changes"
 msgstr "提交修改"
 
 #: rhodecode/templates/files/files_browser.html:13
-msgid "view"
+#, fuzzy
+msgid "View"
 msgstr "显示"
 
 #: rhodecode/templates/files/files_browser.html:14
-msgid "previous revision"
+#, fuzzy
+msgid "Previous revision"
 msgstr "上一个修订"
 
 #: rhodecode/templates/files/files_browser.html:16
-msgid "next revision"
+#, fuzzy
+msgid "Next revision"
 msgstr "下一个修订"
 
 #: rhodecode/templates/files/files_browser.html:23
-msgid "follow current branch"
+#, fuzzy
+msgid "Follow current branch"
 msgstr "沿着当前分支"
 
 #: rhodecode/templates/files/files_browser.html:27
-msgid "search file list"
+#, fuzzy
+msgid "Search file list"
 msgstr "搜索文件列表"
 
-#: rhodecode/templates/files/files_browser.html:31
-#: rhodecode/templates/shortlog/shortlog_data.html:78
-msgid "add new file"
-msgstr "新建文件"
-
 #: rhodecode/templates/files/files_browser.html:35
 msgid "Loading file list..."
 msgstr "加载文件列表..."
@@ -3635,34 +3939,44 @@
 msgstr "最后修改于"
 
 #: rhodecode/templates/files/files_browser.html:52
-msgid "Last commiter"
+msgid "Last committer"
 msgstr "最后提交者"
 
+#: rhodecode/templates/files/files_edit.html:4
+#, fuzzy, python-format
+msgid "%s Files Edit"
+msgstr "%s文件"
+
 #: rhodecode/templates/files/files_edit.html:19
-msgid "edit file"
+#, fuzzy
+msgid "Edit file"
 msgstr "编辑文件"
 
+#: rhodecode/templates/files/files_edit.html:47
+#: rhodecode/templates/files/files_source.html:23
+#, fuzzy
+msgid "Show annotation"
+msgstr "显示注释"
+
+#: rhodecode/templates/files/files_edit.html:48
+#: rhodecode/templates/files/files_source.html:25
+#: rhodecode/templates/files/files_source.html:55
+#, fuzzy
+msgid "Show as raw"
+msgstr "显示原始文件"
+
 #: rhodecode/templates/files/files_edit.html:49
-#: rhodecode/templates/files/files_source.html:23
-msgid "show annotation"
-msgstr "显示注释"
-
-#: rhodecode/templates/files/files_edit.html:50
-#: rhodecode/templates/files/files_source.html:25
-#: rhodecode/templates/files/files_source.html:53
-msgid "show as raw"
-msgstr "显示原始文件"
-
-#: rhodecode/templates/files/files_edit.html:51
 #: rhodecode/templates/files/files_source.html:26
-msgid "download as raw"
+#, fuzzy
+msgid "Download as raw"
 msgstr "下载原始文件"
 
-#: rhodecode/templates/files/files_edit.html:54
-msgid "source"
+#: rhodecode/templates/files/files_edit.html:52
+#, fuzzy
+msgid "Source"
 msgstr "显示源文件"
 
-#: rhodecode/templates/files/files_edit.html:59
+#: rhodecode/templates/files/files_edit.html:57
 msgid "Editing file"
 msgstr "编辑文件"
 
@@ -3671,15 +3985,18 @@
 msgstr "历史"
 
 #: rhodecode/templates/files/files_history_box.html:9
-msgid "diff to revision"
+#, fuzzy
+msgid "Diff to revision"
 msgstr "比较差异"
 
 #: rhodecode/templates/files/files_history_box.html:10
-msgid "show at revision"
+#, fuzzy
+msgid "Show at revision"
 msgstr "显示修订"
 
 #: rhodecode/templates/files/files_history_box.html:11
-msgid "show full history"
+#, fuzzy
+msgid "Show full history"
 msgstr "显示全部历史记录"
 
 #: rhodecode/templates/files/files_history_box.html:16
@@ -3693,15 +4010,30 @@
 msgstr "加载文件历史记录..."
 
 #: rhodecode/templates/files/files_source.html:21
-msgid "show source"
+#, fuzzy
+msgid "Show source"
 msgstr "显示代码"
 
-#: rhodecode/templates/files/files_source.html:44
+#: rhodecode/templates/files/files_source.html:29
+#, fuzzy, python-format
+msgid "Edit on branch:%s"
+msgstr "已经删除分支%s"
+
+#: rhodecode/templates/files/files_source.html:31
+#, fuzzy
+msgid "Edit on branch:?"
+msgstr "已经删除分支%s"
+
+#: rhodecode/templates/files/files_source.html:31
+msgid "Editing files allowed only when on branch head revision"
+msgstr ""
+
+#: rhodecode/templates/files/files_source.html:46
 #, python-format
 msgid "Binary file (%s)"
 msgstr "二进制文件(%s)"
 
-#: rhodecode/templates/files/files_source.html:53
+#: rhodecode/templates/files/files_source.html:55
 msgid "File is too big to display"
 msgstr "文件过大,不能显示"
 
@@ -3722,8 +4054,10 @@
 msgid "%s Followers"
 msgstr "%s个关注者"
 
-#: rhodecode/templates/followers/followers.html:13
-msgid "followers"
+#: rhodecode/templates/followers/followers.html:9
+#: rhodecode/templates/summary/summary.html:183
+#: rhodecode/templates/summary/summary.html:184
+msgid "Followers"
 msgstr "关注者"
 
 #: rhodecode/templates/followers/followers_data.html:12
@@ -3735,32 +4069,33 @@
 msgid "%s Fork"
 msgstr "%s的复刻"
 
-#: rhodecode/templates/forks/fork.html:31
+#: rhodecode/templates/forks/fork.html:28
 msgid "Fork name"
 msgstr "复刻名称"
 
-#: rhodecode/templates/forks/fork.html:68
+#: rhodecode/templates/forks/fork.html:65
 msgid "Private"
 msgstr "私有"
 
-#: rhodecode/templates/forks/fork.html:77
+#: rhodecode/templates/forks/fork.html:74
 msgid "Copy permissions"
 msgstr "拷贝权限"
 
-#: rhodecode/templates/forks/fork.html:81
+#: rhodecode/templates/forks/fork.html:78
 msgid "Copy permissions from forked repository"
 msgstr "从被复刻版本库拷贝权限"
 
-#: rhodecode/templates/forks/fork.html:86
+#: rhodecode/templates/forks/fork.html:84
 msgid "Update after clone"
 msgstr "克隆后更新"
 
-#: rhodecode/templates/forks/fork.html:90
+#: rhodecode/templates/forks/fork.html:88
 msgid "Checkout source after making a clone"
 msgstr "完成克隆后检出源代码"
 
-#: rhodecode/templates/forks/fork.html:94
-msgid "fork this repository"
+#: rhodecode/templates/forks/fork.html:93
+#, fuzzy
+msgid "Fork this repository"
 msgstr "复刻该版本库"
 
 #: rhodecode/templates/forks/forks.html:5
@@ -3768,12 +4103,15 @@
 msgid "%s Forks"
 msgstr "%s个复刻"
 
-#: rhodecode/templates/forks/forks.html:13
-msgid "forks"
+#: rhodecode/templates/forks/forks.html:9
+#: rhodecode/templates/summary/summary.html:189
+#: rhodecode/templates/summary/summary.html:190
+msgid "Forks"
 msgstr "复刻"
 
 #: rhodecode/templates/forks/forks_data.html:17
-msgid "forked"
+#, fuzzy
+msgid "Forked"
 msgstr "已有复刻"
 
 #: rhodecode/templates/forks/forks_data.html:42
@@ -3789,44 +4127,27 @@
 msgstr "订阅日志RSS"
 
 #: rhodecode/templates/journal/journal.html:32
-#: rhodecode/templates/pullrequests/pullrequest.html:55
 msgid "Refresh"
 msgstr "刷新"
 
 #: rhodecode/templates/journal/journal.html:35
 #: rhodecode/templates/journal/public_journal.html:24
-msgid "RSS feed"
-msgstr "订阅RSS"
-
-#: rhodecode/templates/journal/journal.html:38
-#: rhodecode/templates/journal/public_journal.html:27
 msgid "ATOM feed"
 msgstr "订阅ATOM"
 
-#: rhodecode/templates/journal/journal.html:49
+#: rhodecode/templates/journal/journal.html:51
 msgid "Watched"
 msgstr "关注的"
 
-#: rhodecode/templates/journal/journal.html:54
-msgid "ADD"
-msgstr "新建版本库"
-
-#: rhodecode/templates/journal/journal.html:77
-msgid "following user"
-msgstr "关注用户"
-
-#: rhodecode/templates/journal/journal.html:77
-msgid "user"
-msgstr "用户"
-
-#: rhodecode/templates/journal/journal.html:110
-msgid "You are not following any users or repositories"
-msgstr "未关注任何用户或版本库"
-
 #: rhodecode/templates/journal/journal_data.html:55
 msgid "No entries yet"
 msgstr "没有条目"
 
+#: rhodecode/templates/journal/public_journal.html:4
+#: rhodecode/templates/journal/public_journal.html:21
+msgid "Public Journal"
+msgstr "公共日志"
+
 #: rhodecode/templates/journal/public_journal.html:13
 msgid "ATOM public journal feed"
 msgstr "订阅公共日志ATOM"
@@ -3835,146 +4156,131 @@
 msgid "RSS public journal feed"
 msgstr "订阅公共日志RSS"
 
-#: rhodecode/templates/journal/public_journal.html:21
-msgid "Public Journal"
-msgstr "公共日志"
-
 #: rhodecode/templates/pullrequests/pullrequest.html:4
-#: rhodecode/templates/pullrequests/pullrequest.html:12
+#: rhodecode/templates/pullrequests/pullrequest.html:8
 msgid "New pull request"
 msgstr "新建拉取请求"
 
-#: rhodecode/templates/pullrequests/pullrequest.html:54
-msgid "refresh overview"
-msgstr "刷新概览"
-
-#: rhodecode/templates/pullrequests/pullrequest.html:66
+#: rhodecode/templates/pullrequests/pullrequest.html:52
 msgid "Detailed compare view"
 msgstr "详细比较显示"
 
-#: rhodecode/templates/pullrequests/pullrequest.html:70
-#: rhodecode/templates/pullrequests/pullrequest_show.html:100
+#: rhodecode/templates/pullrequests/pullrequest.html:56
+#: rhodecode/templates/pullrequests/pullrequest_show.html:137
 msgid "Pull request reviewers"
 msgstr "拉取请求检视人员"
 
-#: rhodecode/templates/pullrequests/pullrequest.html:79
-#: rhodecode/templates/pullrequests/pullrequest_show.html:112
+#: rhodecode/templates/pullrequests/pullrequest.html:65
+#: rhodecode/templates/pullrequests/pullrequest_show.html:149
 msgid "owner"
 msgstr "所有者"
 
-#: rhodecode/templates/pullrequests/pullrequest.html:91
-#: rhodecode/templates/pullrequests/pullrequest_show.html:127
+#: rhodecode/templates/pullrequests/pullrequest.html:77
 msgid "Add reviewer to this pull request."
 msgstr "为这个拉取请求增加检视人员"
 
-#: rhodecode/templates/pullrequests/pullrequest.html:97
+#: rhodecode/templates/pullrequests/pullrequest.html:83
 msgid "Create new pull request"
 msgstr "创建新的拉取请求"
 
-#: rhodecode/templates/pullrequests/pullrequest.html:106
+#: rhodecode/templates/pullrequests/pullrequest.html:92
+#: rhodecode/templates/pullrequests/pullrequest_data.html:14
 #: rhodecode/templates/pullrequests/pullrequest_show.html:25
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:33
 msgid "Title"
 msgstr "标题"
 
-#: rhodecode/templates/pullrequests/pullrequest.html:123
+#: rhodecode/templates/pullrequests/pullrequest.html:109
 msgid "Send pull request"
 msgstr "发送拉取请求"
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:23
-#, python-format
-msgid "Closed %s"
-msgstr "于%s前关闭"
-
-#: rhodecode/templates/pullrequests/pullrequest_show.html:23
-#, python-format
-msgid "with status %s"
-msgstr "状态%s"
-
-#: rhodecode/templates/pullrequests/pullrequest_show.html:31
-msgid "Status"
-msgstr "状态"
-
-#: rhodecode/templates/pullrequests/pullrequest_show.html:36
+#: rhodecode/templates/pullrequests/pullrequest_show.html:4
+#, fuzzy, python-format
+msgid "%s Pull Request #%s"
+msgstr "拉取请求#%s"
+
+#: rhodecode/templates/pullrequests/pullrequest_show.html:35
+#, fuzzy
+msgid "Review status"
+msgstr "新状态"
+
+#: rhodecode/templates/pullrequests/pullrequest_show.html:40
 msgid "Pull request status"
 msgstr "拉取请求状态"
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:44
+#: rhodecode/templates/pullrequests/pullrequest_show.html:53
 msgid "Still not reviewed by"
 msgstr "还未检视的检视人员"
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:48
+#: rhodecode/templates/pullrequests/pullrequest_show.html:57
 #, python-format
 msgid "%d reviewer"
 msgid_plural "%d reviewers"
 msgstr[0] "%d个检视者"
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:50
-msgid "pull request was reviewed by all reviewers"
+#: rhodecode/templates/pullrequests/pullrequest_show.html:59
+#, fuzzy
+msgid "Pull request was reviewed by all reviewers"
 msgstr "拉取请求已经由所有检视人员检视"
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:58
+#: rhodecode/templates/pullrequests/pullrequest_show.html:65
+#, fuzzy
+msgid "Origin repository"
+msgstr "Git版本库"
+
+#: rhodecode/templates/pullrequests/pullrequest_show.html:89
 msgid "Created on"
 msgstr "创建于"
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:65
+#: rhodecode/templates/pullrequests/pullrequest_show.html:102
 msgid "Compare view"
 msgstr "比较显示"
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:112
+#: rhodecode/templates/pullrequests/pullrequest_show.html:149
 msgid "reviewer"
 msgstr "检视者"
 
+#: rhodecode/templates/pullrequests/pullrequest_show.html:164
+#, fuzzy
+msgid "Add or remove reviewer to this pull request."
+msgstr "为这个拉取请求增加检视人员"
+
+#: rhodecode/templates/pullrequests/pullrequest_show.html:168
+#, fuzzy
+msgid "Save changes"
+msgstr "无变更"
+
 #: rhodecode/templates/pullrequests/pullrequest_show_all.html:4
-msgid "all pull requests"
-msgstr "所有拉取请求"
-
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:12
-msgid "All pull requests"
-msgstr "所有拉取请求"
-
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:27
-msgid "Closed"
-msgstr "已关闭"
+#, fuzzy, python-format
+msgid "%s Pull Requests"
+msgstr "我的拉取请求"
 
 #: rhodecode/templates/search/search.html:6
-#, python-format
-msgid "Search \"%s\" in repository: %s"
-msgstr "搜索 \"%s\" 于版本库 %s 中"
+#, fuzzy
+msgid "Search repository"
+msgstr "在版本库%s中搜索"
 
 #: rhodecode/templates/search/search.html:8
-#, python-format
-msgid "Search \"%s\" in all repositories"
-msgstr "在所有的版本库中搜索 \"%s\""
-
-#: rhodecode/templates/search/search.html:12
-#: rhodecode/templates/search/search.html:32
-#, python-format
-msgid "Search in repository: %s"
-msgstr "在版本库%s中搜索"
-
-#: rhodecode/templates/search/search.html:14
-#: rhodecode/templates/search/search.html:34
+#: rhodecode/templates/search/search.html:16
 msgid "Search in all repositories"
 msgstr "在所有的版本库中搜索"
 
-#: rhodecode/templates/search/search.html:48
+#: rhodecode/templates/search/search.html:50
 msgid "Search term"
 msgstr "搜索短语"
 
-#: rhodecode/templates/search/search.html:60
+#: rhodecode/templates/search/search.html:62
 msgid "Search in"
 msgstr "搜索范围"
 
-#: rhodecode/templates/search/search.html:63
+#: rhodecode/templates/search/search.html:65
 msgid "File contents"
 msgstr "文件内容"
 
-#: rhodecode/templates/search/search.html:64
+#: rhodecode/templates/search/search.html:66
 msgid "Commit messages"
 msgstr "提交信息"
 
-#: rhodecode/templates/search/search.html:65
+#: rhodecode/templates/search/search.html:67
 msgid "File names"
 msgstr "文件名"
 
@@ -3984,40 +4290,26 @@
 msgid "Permission denied"
 msgstr "权限不足"
 
-#: rhodecode/templates/settings/repo_settings.html:5
-#, python-format
-msgid "%s Settings"
-msgstr "%s设置"
-
-#: rhodecode/templates/settings/repo_settings.html:102
-msgid "Delete repository"
-msgstr "删除版本库"
-
-#: rhodecode/templates/settings/repo_settings.html:109
-msgid "Remove repo"
-msgstr "删除版本库"
-
 #: rhodecode/templates/shortlog/shortlog.html:5
-#, python-format
-msgid "%s Shortlog"
-msgstr "%s简短日志"
-
+#, fuzzy, python-format
+msgid "%s Lightweight Changelog"
+msgstr "使用轻量的控制面板"
+
+#: rhodecode/templates/shortlog/shortlog.html:11
 #: rhodecode/templates/shortlog/shortlog.html:15
-#: rhodecode/templates/shortlog/shortlog.html:19
-msgid "shortlog"
-msgstr "简短日志"
-
-#: rhodecode/templates/shortlog/shortlog_data.html:5
-msgid "revision"
-msgstr "修订"
+#, fuzzy
+msgid "Lightweight Changelog"
+msgstr "使用轻量的控制面板"
 
 #: rhodecode/templates/shortlog/shortlog_data.html:7
-msgid "age"
+#, fuzzy
+msgid "Age"
 msgstr "时间"
 
-#: rhodecode/templates/shortlog/shortlog_data.html:8
-msgid "author"
-msgstr "作者"
+#: rhodecode/templates/shortlog/shortlog_data.html:20
+#, python-format
+msgid "Click to open associated pull request #%s"
+msgstr "点击建立相关的拉取请求 #%s"
 
 #: rhodecode/templates/shortlog/shortlog_data.html:75
 msgid "Add or upload files directly via RhodeCode"
@@ -4036,156 +4328,170 @@
 msgid "%s Summary"
 msgstr "%s概要"
 
-#: rhodecode/templates/summary/summary.html:12
-msgid "summary"
-msgstr "概要"
-
-#: rhodecode/templates/summary/summary.html:20
-#, python-format
-msgid "repo %s ATOM feed"
-msgstr "订阅ATOM %s"
-
-#: rhodecode/templates/summary/summary.html:21
-#, python-format
-msgid "repo %s RSS feed"
-msgstr "订阅RSS %s"
-
-#: rhodecode/templates/summary/summary.html:49
-#: rhodecode/templates/summary/summary.html:52
-msgid "ATOM"
-msgstr "ATOM"
-
-#: rhodecode/templates/summary/summary.html:70
+#: rhodecode/templates/summary/summary.html:16
+#, fuzzy, python-format
+msgid "%s ATOM feed"
+msgstr "%s %s订阅"
+
+#: rhodecode/templates/summary/summary.html:17
+#, fuzzy, python-format
+msgid "%s RSS feed"
+msgstr "%s %s订阅"
+
+#: rhodecode/templates/summary/summary.html:62
 #, python-format
 msgid "Repository locked by %s"
 msgstr "版本库由%s锁定"
 
-#: rhodecode/templates/summary/summary.html:72
+#: rhodecode/templates/summary/summary.html:64
 msgid "Repository unlocked"
 msgstr "版本库未锁定"
 
-#: rhodecode/templates/summary/summary.html:91
+#: rhodecode/templates/summary/summary.html:83
 #, python-format
 msgid "Non changable ID %s"
 msgstr "不可变ID %s"
 
-#: rhodecode/templates/summary/summary.html:96
-msgid "public"
+#: rhodecode/templates/summary/summary.html:88
+#, fuzzy
+msgid "Public"
 msgstr "公共"
 
-#: rhodecode/templates/summary/summary.html:104
-msgid "remote clone"
+#: rhodecode/templates/summary/summary.html:88
+#: rhodecode/templates/summary/summary.html:89
+msgid "Fork of"
+msgstr "复刻自"
+
+#: rhodecode/templates/summary/summary.html:96
+#, fuzzy
+msgid "Remote clone"
 msgstr "远程克隆"
 
-#: rhodecode/templates/summary/summary.html:125
+#: rhodecode/templates/summary/summary.html:117
 msgid "Contact"
 msgstr "联系方式"
 
-#: rhodecode/templates/summary/summary.html:139
+#: rhodecode/templates/summary/summary.html:131
 msgid "Clone url"
 msgstr "克隆地址"
 
-#: rhodecode/templates/summary/summary.html:142
+#: rhodecode/templates/summary/summary.html:136
 msgid "Show by Name"
 msgstr "以名字显示"
 
-#: rhodecode/templates/summary/summary.html:143
+#: rhodecode/templates/summary/summary.html:137
 msgid "Show by ID"
 msgstr "按ID显示"
 
+#: rhodecode/templates/summary/summary.html:143
+msgid "Trending files"
+msgstr "文件趋势图"
+
 #: rhodecode/templates/summary/summary.html:151
-msgid "Trending files"
-msgstr "文件趋势图"
+#: rhodecode/templates/summary/summary.html:167
+#: rhodecode/templates/summary/summary.html:232
+msgid "enable"
+msgstr "启用"
 
 #: rhodecode/templates/summary/summary.html:159
-#: rhodecode/templates/summary/summary.html:175
-#: rhodecode/templates/summary/summary.html:203
-msgid "enable"
-msgstr "启用"
-
-#: rhodecode/templates/summary/summary.html:167
 msgid "Download"
 msgstr "下载"
 
-#: rhodecode/templates/summary/summary.html:171
+#: rhodecode/templates/summary/summary.html:163
 msgid "There are no downloads yet"
 msgstr "无下载"
 
-#: rhodecode/templates/summary/summary.html:173
+#: rhodecode/templates/summary/summary.html:165
 msgid "Downloads are disabled for this repository"
 msgstr "这个版本库的下载已经禁用"
 
-#: rhodecode/templates/summary/summary.html:179
+#: rhodecode/templates/summary/summary.html:171
 msgid "Download as zip"
 msgstr "zip打包下载"
 
-#: rhodecode/templates/summary/summary.html:182
+#: rhodecode/templates/summary/summary.html:174
 msgid "Check this to download archive with subrepos"
 msgstr "勾选以下载包含子版本库的压缩包"
 
-#: rhodecode/templates/summary/summary.html:182
+#: rhodecode/templates/summary/summary.html:174
 msgid "with subrepos"
 msgstr "包括子版本库"
 
-#: rhodecode/templates/summary/summary.html:195
+#: rhodecode/templates/summary/summary.html:197
+#, fuzzy
+msgid "Repository Size"
+msgstr "版本库"
+
+#: rhodecode/templates/summary/summary.html:204
+#: rhodecode/templates/summary/summary.html:206
+#, fuzzy
+msgid "Feed"
+msgstr "订阅RSS"
+
+#: rhodecode/templates/summary/summary.html:224
 msgid "Commit activity by day / author"
 msgstr "按日期或作者的提交活动"
 
-#: rhodecode/templates/summary/summary.html:206
+#: rhodecode/templates/summary/summary.html:235
 msgid "Stats gathered: "
 msgstr "已收集的统计:"
 
-#: rhodecode/templates/summary/summary.html:227
-msgid "Shortlog"
-msgstr "简短日志"
-
-#: rhodecode/templates/summary/summary.html:229
+#: rhodecode/templates/summary/summary.html:256
+#, fuzzy
+msgid "Latest changes"
+msgstr "最后修改"
+
+#: rhodecode/templates/summary/summary.html:258
 msgid "Quick start"
 msgstr "快速入门"
 
-#: rhodecode/templates/summary/summary.html:243
+#: rhodecode/templates/summary/summary.html:272
 #, python-format
 msgid "Readme file at revision '%s'"
 msgstr "修订'%s'中的README"
 
-#: rhodecode/templates/summary/summary.html:246
+#: rhodecode/templates/summary/summary.html:275
 msgid "Permalink to this readme"
 msgstr "这个README的永久链接"
 
-#: rhodecode/templates/summary/summary.html:304
+#: rhodecode/templates/summary/summary.html:333
 #, python-format
 msgid "Download %s as %s"
 msgstr "下载%s为%s包"
 
-#: rhodecode/templates/summary/summary.html:661
+#: rhodecode/templates/summary/summary.html:380
+msgid "files"
+msgstr "文件"
+
+#: rhodecode/templates/summary/summary.html:690
 msgid "commits"
 msgstr "提交"
 
-#: rhodecode/templates/summary/summary.html:662
+#: rhodecode/templates/summary/summary.html:691
 msgid "files added"
 msgstr "文件已添加"
 
-#: rhodecode/templates/summary/summary.html:663
+#: rhodecode/templates/summary/summary.html:692
 msgid "files changed"
 msgstr "文件已更改"
 
-#: rhodecode/templates/summary/summary.html:664
+#: rhodecode/templates/summary/summary.html:693
 msgid "files removed"
 msgstr "文件已删除"
 
-#: rhodecode/templates/summary/summary.html:667
+#: rhodecode/templates/summary/summary.html:695
 msgid "commit"
 msgstr "提交"
 
-#: rhodecode/templates/summary/summary.html:668
+#: rhodecode/templates/summary/summary.html:696
 msgid "file added"
 msgstr "文件已添加"
 
-#: rhodecode/templates/summary/summary.html:669
+#: rhodecode/templates/summary/summary.html:697
 msgid "file changed"
 msgstr "文件已更改"
 
-#: rhodecode/templates/summary/summary.html:670
+#: rhodecode/templates/summary/summary.html:698
 msgid "file removed"
 msgstr "文件已删除"
 
@@ -4194,6 +4500,7 @@
 msgid "%s Tags"
 msgstr "%s标签"
 
-#: rhodecode/templates/tags/tags.html:29
+#: rhodecode/templates/tags/tags.html:26
 msgid "Compare tags"
 msgstr "比较标签"
+
Binary file rhodecode/i18n/zh_TW/LC_MESSAGES/rhodecode.mo has changed
--- a/rhodecode/i18n/zh_TW/LC_MESSAGES/rhodecode.po	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/i18n/zh_TW/LC_MESSAGES/rhodecode.po	Sun Apr 07 18:37:22 2013 +0200
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: RhodeCode 1.2.0\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2012-12-14 04:19+0100\n"
+"POT-Creation-Date: 2013-04-05 10:17-0700\n"
 "PO-Revision-Date: 2012-05-09 22:23+0800\n"
 "Last-Translator: Nansen <nansenat16@gmail.com>\n"
 "Language-Team: zh_TW <LL@li.org>\n"
@@ -23,11 +23,11 @@
 msgstr "分支"
 
 #: rhodecode/controllers/changeset.py:83
-msgid "show white space"
+msgid "Show white space"
 msgstr ""
 
 #: rhodecode/controllers/changeset.py:90 rhodecode/controllers/changeset.py:97
-msgid "ignore white space"
+msgid "Ignore white space"
 msgstr ""
 
 #: rhodecode/controllers/changeset.py:163
@@ -35,20 +35,20 @@
 msgid "%s line context"
 msgstr "文件內容"
 
-#: rhodecode/controllers/changeset.py:314
-#: rhodecode/controllers/pullrequests.py:417
+#: rhodecode/controllers/changeset.py:329
+#: rhodecode/controllers/pullrequests.py:438
 #, fuzzy, python-format
 msgid "Status change -> %s"
 msgstr "最後修改"
 
-#: rhodecode/controllers/changeset.py:345
+#: rhodecode/controllers/changeset.py:360
 msgid ""
-"Changing status on a changeset associated witha closed pull request is "
+"Changing status on a changeset associated with a closed pull request is "
 "not allowed"
 msgstr ""
 
-#: rhodecode/controllers/compare.py:75
-#: rhodecode/controllers/pullrequests.py:121
+#: rhodecode/controllers/compare.py:74
+#: rhodecode/controllers/pullrequests.py:167
 #: rhodecode/controllers/shortlog.py:100
 #, fuzzy
 msgid "There are no changesets yet"
@@ -91,164 +91,198 @@
 msgstr ""
 
 #: rhodecode/controllers/feed.py:86
-#: rhodecode/templates/changeset/changeset.html:137
-#: rhodecode/templates/changeset/changeset.html:149
-#: rhodecode/templates/compare/compare_diff.html:62
-#: rhodecode/templates/compare/compare_diff.html:73
-#: rhodecode/templates/pullrequests/pullrequest_show.html:94
-#: rhodecode/templates/pullrequests/pullrequest_show.html:153
+#: rhodecode/templates/changeset/changeset.html:134
+#: rhodecode/templates/changeset/changeset.html:146
+#: rhodecode/templates/compare/compare_diff.html:58
+#: rhodecode/templates/compare/compare_diff.html:69
+#: rhodecode/templates/pullrequests/pullrequest_show.html:131
+#: rhodecode/templates/pullrequests/pullrequest_show.html:195
 msgid "Changeset was too big and was cut off..."
 msgstr ""
 
-#: rhodecode/controllers/feed.py:92
-#, fuzzy
-msgid "commited on"
+#: rhodecode/controllers/feed.py:91
+#, fuzzy, python-format
+msgid "%s committed on %s"
 msgstr "遞交"
 
-#: rhodecode/controllers/files.py:86
-#, fuzzy
-msgid "click here to add new file"
+#: rhodecode/controllers/files.py:88
+#, fuzzy
+msgid "Click here to add new file"
 msgstr "新增使用者"
 
-#: rhodecode/controllers/files.py:87
+#: rhodecode/controllers/files.py:89
 #, fuzzy, python-format
 msgid "There are no files yet %s"
 msgstr "尚未有任何檔案"
 
-#: rhodecode/controllers/files.py:265 rhodecode/controllers/files.py:325
+#: rhodecode/controllers/files.py:267 rhodecode/controllers/files.py:335
 #, python-format
 msgid "This repository is has been locked by %s on %s"
 msgstr ""
 
-#: rhodecode/controllers/files.py:292
-#, python-format
-msgid "Edited %s via RhodeCode"
+#: rhodecode/controllers/files.py:279
+msgid "You can only edit files with revision being a valid branch "
+msgstr ""
+
+#: rhodecode/controllers/files.py:293
+#, fuzzy, python-format
+msgid "Edited file %s via RhodeCode"
 msgstr "使用 RhodeCode 編輯 %s"
 
-#: rhodecode/controllers/files.py:297
+#: rhodecode/controllers/files.py:309
 msgid "No changes"
 msgstr "沒有修改"
 
-#: rhodecode/controllers/files.py:308 rhodecode/controllers/files.py:372
+#: rhodecode/controllers/files.py:318 rhodecode/controllers/files.py:388
 #, python-format
 msgid "Successfully committed to %s"
 msgstr "成功遞交至 %s"
 
-#: rhodecode/controllers/files.py:313 rhodecode/controllers/files.py:378
+#: rhodecode/controllers/files.py:323 rhodecode/controllers/files.py:394
 msgid "Error occurred during commit"
 msgstr ""
 
-#: rhodecode/controllers/files.py:344
-#, fuzzy, python-format
-msgid "Added %s via RhodeCode"
+#: rhodecode/controllers/files.py:347
+#, fuzzy
+msgid "Added file via RhodeCode"
 msgstr "使用 RhodeCode 編輯 %s"
 
-#: rhodecode/controllers/files.py:358
+#: rhodecode/controllers/files.py:364
 #, fuzzy
 msgid "No content"
 msgstr "文件內容"
 
-#: rhodecode/controllers/files.py:362
+#: rhodecode/controllers/files.py:368
 #, fuzzy
 msgid "No filename"
 msgstr "檔案名稱"
 
-#: rhodecode/controllers/files.py:404
-msgid "downloads disabled"
+#: rhodecode/controllers/files.py:372
+msgid "Location must be relative path and must not contain .. in path"
+msgstr ""
+
+#: rhodecode/controllers/files.py:420
+#, fuzzy
+msgid "Downloads disabled"
 msgstr "下載已關閉"
 
-#: rhodecode/controllers/files.py:415
+#: rhodecode/controllers/files.py:431
 #, python-format
 msgid "Unknown revision %s"
 msgstr "未知修訂 %s"
 
-#: rhodecode/controllers/files.py:417
+#: rhodecode/controllers/files.py:433
 msgid "Empty repository"
 msgstr "空的版本庫"
 
-#: rhodecode/controllers/files.py:419
+#: rhodecode/controllers/files.py:435
 msgid "Unknown archive type"
 msgstr "未知的存檔類型"
 
-#: rhodecode/controllers/files.py:564
-#: rhodecode/templates/changeset/changeset_range.html:13
-#: rhodecode/templates/changeset/changeset_range.html:31
+#: rhodecode/controllers/files.py:617
+#: rhodecode/templates/changeset/changeset_range.html:9
 msgid "Changesets"
 msgstr "變更"
 
-#: rhodecode/controllers/files.py:565 rhodecode/controllers/pullrequests.py:74
-#: rhodecode/controllers/summary.py:236 rhodecode/model/scm.py:550
+#: rhodecode/controllers/files.py:618 rhodecode/controllers/pullrequests.py:131
+#: rhodecode/controllers/summary.py:247 rhodecode/model/scm.py:606
+#: rhodecode/templates/switch_to_list.html:3
+#: rhodecode/templates/branches/branches.html:10
 msgid "Branches"
 msgstr "分支"
 
-#: rhodecode/controllers/files.py:566 rhodecode/controllers/pullrequests.py:78
-#: rhodecode/controllers/summary.py:237 rhodecode/model/scm.py:561
+#: rhodecode/controllers/files.py:619 rhodecode/controllers/pullrequests.py:132
+#: rhodecode/controllers/summary.py:248 rhodecode/model/scm.py:617
+#: rhodecode/templates/switch_to_list.html:15
+#: rhodecode/templates/shortlog/shortlog_data.html:10
+#: rhodecode/templates/tags/tags.html:10
 msgid "Tags"
 msgstr "標籤"
 
-#: rhodecode/controllers/forks.py:158
-#, python-format
-msgid "forked %s repository as %s"
+#: rhodecode/controllers/forks.py:175
+#, fuzzy, python-format
+msgid "Forked repository %s as %s"
 msgstr "forked %s 版本庫為 %s"
 
-#: rhodecode/controllers/forks.py:172
+#: rhodecode/controllers/forks.py:189
 #, python-format
 msgid "An error occurred during repository forking %s"
 msgstr ""
 
-#: rhodecode/controllers/journal.py:218 rhodecode/controllers/journal.py:261
+#: rhodecode/controllers/journal.py:275 rhodecode/controllers/journal.py:318
 #, fuzzy
 msgid "public journal"
 msgstr "公開日誌"
 
-#: rhodecode/controllers/journal.py:222 rhodecode/controllers/journal.py:265
-#: rhodecode/templates/base/base.html:232
+#: rhodecode/controllers/journal.py:279 rhodecode/controllers/journal.py:322
 #: rhodecode/templates/journal/journal.html:12
 msgid "journal"
 msgstr "日誌"
 
-#: rhodecode/controllers/login.py:143
-msgid "You have successfully registered into rhodecode"
+#: rhodecode/controllers/login.py:138
+#, fuzzy
+msgid "You have successfully registered into RhodeCode"
 msgstr "您已經成功註冊rhodecode"
 
-#: rhodecode/controllers/login.py:164
+#: rhodecode/controllers/login.py:159
 msgid "Your password reset link was sent"
 msgstr "您的密碼重設連結已寄出"
 
-#: rhodecode/controllers/login.py:184
+#: rhodecode/controllers/login.py:179
 msgid ""
 "Your password reset was successful, new password has been sent to your "
 "email"
 msgstr "您的密碼重設動作已完成,新的密碼已寄至您的信箱"
 
-#: rhodecode/controllers/pullrequests.py:76 rhodecode/model/scm.py:556
+#: rhodecode/controllers/pullrequests.py:118
+#: rhodecode/templates/changeset/changeset.html:10
+#: rhodecode/templates/email_templates/changeset_comment.html:15
+msgid "Changeset"
+msgstr ""
+
+#: rhodecode/controllers/pullrequests.py:128
+msgid "Special"
+msgstr ""
+
+#: rhodecode/controllers/pullrequests.py:129
+#, fuzzy
+msgid "Peer branches"
+msgstr "分支"
+
+#: rhodecode/controllers/pullrequests.py:130 rhodecode/model/scm.py:612
+#: rhodecode/templates/switch_to_list.html:28
+#: rhodecode/templates/bookmarks/bookmarks.html:10
 msgid "Bookmarks"
 msgstr ""
 
-#: rhodecode/controllers/pullrequests.py:190
+#: rhodecode/controllers/pullrequests.py:228
 msgid "Pull request requires a title with min. 3 chars"
 msgstr ""
 
-#: rhodecode/controllers/pullrequests.py:192
-#, fuzzy
-msgid "error during creation of pull request"
+#: rhodecode/controllers/pullrequests.py:230
+#, fuzzy
+msgid "Error creating pull request"
 msgstr "建立使用者 %s"
 
-#: rhodecode/controllers/pullrequests.py:224
+#: rhodecode/controllers/pullrequests.py:251
 #, fuzzy
 msgid "Successfully opened new pull request"
 msgstr "成功刪除使用者"
 
-#: rhodecode/controllers/pullrequests.py:227
+#: rhodecode/controllers/pullrequests.py:254
 msgid "Error occurred during sending pull request"
 msgstr ""
 
-#: rhodecode/controllers/pullrequests.py:260
+#: rhodecode/controllers/pullrequests.py:287
 #, fuzzy
 msgid "Successfully deleted pull request"
 msgstr "成功刪除使用者"
 
-#: rhodecode/controllers/pullrequests.py:452
+#: rhodecode/controllers/pullrequests.py:441
+msgid "Closing with"
+msgstr ""
+
+#: rhodecode/controllers/pullrequests.py:478
 msgid "Closing pull request on other statuses than rejected or approved forbidden"
 msgstr ""
 
@@ -264,57 +298,12 @@
 msgid "An error occurred during this search operation"
 msgstr ""
 
-#: rhodecode/controllers/settings.py:119
-#: rhodecode/controllers/admin/repos.py:272
-#, python-format
-msgid "Repository %s updated successfully"
-msgstr "版本庫 %s 更新完成"
-
-#: rhodecode/controllers/settings.py:137
-#: rhodecode/controllers/admin/repos.py:290
-#, python-format
-msgid "error occurred during update of repository %s"
-msgstr ""
-
-#: rhodecode/controllers/settings.py:162
-#: rhodecode/controllers/admin/repos.py:315
-#, python-format
-msgid "deleted repository %s"
-msgstr "刪除版本庫 %s"
-
-#: rhodecode/controllers/settings.py:166
-#: rhodecode/controllers/admin/repos.py:325
-#: rhodecode/controllers/admin/repos.py:331
-#, python-format
-msgid "An error occurred during deletion of %s"
-msgstr ""
-
-#: rhodecode/controllers/settings.py:185
-#, fuzzy
-msgid "unlocked"
-msgstr "解鎖"
-
-#: rhodecode/controllers/settings.py:188
-#, fuzzy
-msgid "locked"
-msgstr "解鎖"
-
-#: rhodecode/controllers/settings.py:190
-#, fuzzy, python-format
-msgid "Repository has been %s"
-msgstr "forked %s 版本庫為 %s"
-
-#: rhodecode/controllers/settings.py:194
-#: rhodecode/controllers/admin/repos.py:423
-msgid "An error occurred during unlocking"
-msgstr ""
-
-#: rhodecode/controllers/summary.py:140
+#: rhodecode/controllers/summary.py:141
 msgid "No data loaded yet"
 msgstr ""
 
-#: rhodecode/controllers/summary.py:144
-#: rhodecode/templates/summary/summary.html:157
+#: rhodecode/controllers/summary.py:147
+#: rhodecode/templates/summary/summary.html:149
 msgid "Statistics are disabled for this repository"
 msgstr "這個版本庫的統計功能已停用"
 
@@ -324,7 +313,7 @@
 msgstr "LDAP設定更新完成"
 
 #: rhodecode/controllers/admin/defaults.py:110
-msgid "error occurred during update of defaults"
+msgid "Error occurred during update of defaults"
 msgstr ""
 
 #: rhodecode/controllers/admin/ldap_settings.py:50
@@ -372,7 +361,7 @@
 msgstr ""
 
 #: rhodecode/controllers/admin/ldap_settings.py:126
-msgid "Ldap settings updated successfully"
+msgid "LDAP settings updated successfully"
 msgstr "LDAP設定更新完成"
 
 #: rhodecode/controllers/admin/ldap_settings.py:130
@@ -380,545 +369,645 @@
 msgstr "無法啟用LDAP。找不到python-ldap函式庫"
 
 #: rhodecode/controllers/admin/ldap_settings.py:147
-msgid "error occurred during update of ldap settings"
-msgstr ""
-
-#: rhodecode/controllers/admin/permissions.py:59
-#: rhodecode/controllers/admin/permissions.py:63
-msgid "None"
-msgstr "無"
+msgid "Error occurred during update of ldap settings"
+msgstr ""
 
 #: rhodecode/controllers/admin/permissions.py:60
 #: rhodecode/controllers/admin/permissions.py:64
-msgid "Read"
-msgstr "讀"
+msgid "None"
+msgstr "無"
 
 #: rhodecode/controllers/admin/permissions.py:61
 #: rhodecode/controllers/admin/permissions.py:65
-msgid "Write"
-msgstr "寫"
+msgid "Read"
+msgstr "讀"
 
 #: rhodecode/controllers/admin/permissions.py:62
 #: rhodecode/controllers/admin/permissions.py:66
+msgid "Write"
+msgstr "寫"
+
+#: rhodecode/controllers/admin/permissions.py:63
+#: rhodecode/controllers/admin/permissions.py:67
 #: rhodecode/templates/admin/defaults/defaults.html:9
 #: rhodecode/templates/admin/ldap/ldap.html:9
 #: rhodecode/templates/admin/permissions/permissions.html:9
-#: rhodecode/templates/admin/repos/repo_add.html:9
-#: rhodecode/templates/admin/repos/repo_edit.html:9
+#: rhodecode/templates/admin/repos/repo_add.html:10
+#: rhodecode/templates/admin/repos/repo_add.html:14
 #: rhodecode/templates/admin/repos/repos.html:9
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:8
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:8
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:10
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:9
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:9
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:11
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:13
 #: rhodecode/templates/admin/settings/hooks.html:9
 #: rhodecode/templates/admin/settings/settings.html:9
 #: rhodecode/templates/admin/users/user_add.html:8
 #: rhodecode/templates/admin/users/user_edit.html:9
-#: rhodecode/templates/admin/users/user_edit.html:126
+#: rhodecode/templates/admin/users/user_edit.html:133
 #: rhodecode/templates/admin/users/users.html:9
+#: rhodecode/templates/admin/users/users.html:85
 #: rhodecode/templates/admin/users_groups/users_group_add.html:8
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:9
 #: rhodecode/templates/admin/users_groups/users_groups.html:9
-#: rhodecode/templates/base/base.html:197
-#: rhodecode/templates/base/base.html:350
-#: rhodecode/templates/base/base.html:352
-#: rhodecode/templates/base/base.html:354
+#: rhodecode/templates/base/base.html:292
+#: rhodecode/templates/base/base.html:293
+#: rhodecode/templates/base/base.html:299
+#: rhodecode/templates/base/base.html:300
 msgid "Admin"
 msgstr "管理"
 
-#: rhodecode/controllers/admin/permissions.py:69
-msgid "disabled"
-msgstr "停用"
-
-#: rhodecode/controllers/admin/permissions.py:71
-msgid "allowed with manual account activation"
-msgstr "允許手動啟用帳號"
-
-#: rhodecode/controllers/admin/permissions.py:73
-msgid "allowed with automatic account activation"
-msgstr "允許自動啟用帳號"
-
-#: rhodecode/controllers/admin/permissions.py:75
-#: rhodecode/controllers/admin/permissions.py:78
+#: rhodecode/controllers/admin/permissions.py:70
+#: rhodecode/controllers/admin/permissions.py:76
+#: rhodecode/controllers/admin/permissions.py:79
 msgid "Disabled"
 msgstr "停用"
 
-#: rhodecode/controllers/admin/permissions.py:76
-#: rhodecode/controllers/admin/permissions.py:79
+#: rhodecode/controllers/admin/permissions.py:72
+#, fuzzy
+msgid "Allowed with manual account activation"
+msgstr "允許手動啟用帳號"
+
+#: rhodecode/controllers/admin/permissions.py:74
+#, fuzzy
+msgid "Allowed with automatic account activation"
+msgstr "允許自動啟用帳號"
+
+#: rhodecode/controllers/admin/permissions.py:77
+#: rhodecode/controllers/admin/permissions.py:80
 msgid "Enabled"
 msgstr "啟用"
 
-#: rhodecode/controllers/admin/permissions.py:122
+#: rhodecode/controllers/admin/permissions.py:128
 msgid "Default permissions updated successfully"
 msgstr "預設權限更新完成"
 
-#: rhodecode/controllers/admin/permissions.py:136
-msgid "error occurred during update of permissions"
-msgstr ""
-
-#: rhodecode/controllers/admin/repos.py:121
+#: rhodecode/controllers/admin/permissions.py:142
+msgid "Error occurred during update of permissions"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:127
 msgid "--REMOVE FORK--"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos.py:190
-#, python-format
-msgid "created repository %s from %s"
+#: rhodecode/controllers/admin/repos.py:168
+#, fuzzy, python-format
+msgid "Created repository %s from %s"
 msgstr "建立版本庫 %s 到 %s"
 
-#: rhodecode/controllers/admin/repos.py:194
+#: rhodecode/controllers/admin/repos.py:174
+#, fuzzy, python-format
+msgid "Created repository %s"
+msgstr "建立版本庫 %s"
+
+#: rhodecode/controllers/admin/repos.py:197
+#, fuzzy, python-format
+msgid "Error creating repository %s"
+msgstr "建立版本庫 %s"
+
+#: rhodecode/controllers/admin/repos.py:266
 #, python-format
-msgid "created repository %s"
+msgid "Repository %s updated successfully"
+msgstr "版本庫 %s 更新完成"
+
+#: rhodecode/controllers/admin/repos.py:284
+#, fuzzy, python-format
+msgid "Error occurred during update of repository %s"
 msgstr "建立版本庫 %s"
 
-#: rhodecode/controllers/admin/repos.py:225
+#: rhodecode/controllers/admin/repos.py:311
+#: rhodecode/controllers/api/api.py:877
 #, python-format
-msgid "error occurred during creation of repository %s"
-msgstr ""
-
-#: rhodecode/controllers/admin/repos.py:320
+msgid "Detached %s forks"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:314
+#: rhodecode/controllers/api/api.py:879
+#, fuzzy, python-format
+msgid "Deleted %s forks"
+msgstr "刪除版本庫 %s"
+
+#: rhodecode/controllers/admin/repos.py:319
+#, fuzzy, python-format
+msgid "Deleted repository %s"
+msgstr "刪除版本庫 %s"
+
+#: rhodecode/controllers/admin/repos.py:322
 #, python-format
 msgid "Cannot delete %s it still contains attached forks"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos.py:349
+#: rhodecode/controllers/admin/repos.py:327
+#, python-format
+msgid "An error occurred during deletion of %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:365
+#, fuzzy
+msgid "Repository permissions updated"
+msgstr "版本庫建立"
+
+#: rhodecode/controllers/admin/repos.py:384
 msgid "An error occurred during deletion of repository user"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos.py:368
-msgid "An error occurred during deletion of repository users groups"
-msgstr ""
-
-#: rhodecode/controllers/admin/repos.py:386
-msgid "An error occurred during deletion of repository stats"
-msgstr ""
-
 #: rhodecode/controllers/admin/repos.py:403
+msgid "An error occurred during deletion of repository user groups"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:421
+msgid "An error occurred during deletion of repository stats"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:438
 msgid "An error occurred during cache invalidation"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos.py:443
+#: rhodecode/controllers/admin/repos.py:458
+#: rhodecode/controllers/admin/repos.py:485
+msgid "An error occurred during unlocking"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos.py:476
+#, fuzzy
+msgid "Unlocked"
+msgstr "解鎖"
+
+#: rhodecode/controllers/admin/repos.py:479
+#, fuzzy
+msgid "Locked"
+msgstr "解鎖"
+
+#: rhodecode/controllers/admin/repos.py:481
+#, fuzzy, python-format
+msgid "Repository has been %s"
+msgstr "forked %s 版本庫為 %s"
+
+#: rhodecode/controllers/admin/repos.py:505
 msgid "Updated repository visibility in public journal"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos.py:447
+#: rhodecode/controllers/admin/repos.py:509
 msgid "An error occurred during setting this repository in public journal"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos.py:452 rhodecode/model/validators.py:300
+#: rhodecode/controllers/admin/repos.py:514 rhodecode/model/validators.py:302
 msgid "Token mismatch"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos.py:465
+#: rhodecode/controllers/admin/repos.py:527
 msgid "Pulled from remote location"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos.py:467
+#: rhodecode/controllers/admin/repos.py:529
 msgid "An error occurred during pull from remote location"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos.py:483
+#: rhodecode/controllers/admin/repos.py:545
 msgid "Nothing"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos.py:485
+#: rhodecode/controllers/admin/repos.py:547
 #, fuzzy, python-format
 msgid "Marked repo %s as fork of %s"
 msgstr "建立版本庫 %s 到 %s"
 
-#: rhodecode/controllers/admin/repos.py:489
+#: rhodecode/controllers/admin/repos.py:551
 msgid "An error occurred during this operation"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos_groups.py:120
-#, python-format
-msgid "created repos group %s"
+#: rhodecode/controllers/admin/repos.py:590
+#, fuzzy
+msgid "An error occurred during creation of field"
+msgstr "建立使用者 %s"
+
+#: rhodecode/controllers/admin/repos.py:604
+msgid "An error occurred during removal of field"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos_groups.py:145
+#, fuzzy, python-format
+msgid "Created repository group %s"
 msgstr "建立版本庫群組 %s"
 
-#: rhodecode/controllers/admin/repos_groups.py:133
+#: rhodecode/controllers/admin/repos_groups.py:157
+#, fuzzy, python-format
+msgid "Error occurred during creation of repository group %s"
+msgstr "建立使用者 %s"
+
+#: rhodecode/controllers/admin/repos_groups.py:214
+#: rhodecode/controllers/admin/repos_groups.py:286
+msgid "Cannot revoke permission for yourself as admin"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos_groups.py:220
+#, fuzzy, python-format
+msgid "Updated repository group %s"
+msgstr "更新版本庫群組 %s"
+
+#: rhodecode/controllers/admin/repos_groups.py:235
 #, python-format
-msgid "error occurred during creation of repos group %s"
-msgstr ""
-
-#: rhodecode/controllers/admin/repos_groups.py:167
-#, python-format
-msgid "updated repos group %s"
-msgstr "更新版本庫群組 %s"
-
-#: rhodecode/controllers/admin/repos_groups.py:180
-#, python-format
-msgid "error occurred during update of repos group %s"
-msgstr ""
-
-#: rhodecode/controllers/admin/repos_groups.py:198
+msgid "Error occurred during update of repository group %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos_groups.py:253
 #, python-format
 msgid "This group contains %s repositores and cannot be deleted"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos_groups.py:206
-#, python-format
-msgid "removed repos group %s"
-msgstr "移除版本庫群組 %s"
-
-#: rhodecode/controllers/admin/repos_groups.py:212
-msgid "Cannot delete this group it still contains subgroups"
-msgstr ""
-
-#: rhodecode/controllers/admin/repos_groups.py:217
-#: rhodecode/controllers/admin/repos_groups.py:222
+#: rhodecode/controllers/admin/repos_groups.py:260
 #, python-format
-msgid "error occurred during deletion of repos group %s"
-msgstr ""
-
-#: rhodecode/controllers/admin/repos_groups.py:243
+msgid "This group contains %s subgroups and cannot be deleted"
+msgstr ""
+
+#: rhodecode/controllers/admin/repos_groups.py:266
+#, fuzzy, python-format
+msgid "Removed repository group %s"
+msgstr "移除版本庫群組 %s"
+
+#: rhodecode/controllers/admin/repos_groups.py:271
+#, fuzzy, python-format
+msgid "Error occurred during deletion of repos group %s"
+msgstr "建立使用者 %s"
+
+#: rhodecode/controllers/admin/repos_groups.py:297
 msgid "An error occurred during deletion of group user"
 msgstr ""
 
-#: rhodecode/controllers/admin/repos_groups.py:264
-msgid "An error occurred during deletion of group users groups"
-msgstr ""
-
-#: rhodecode/controllers/admin/settings.py:123
+#: rhodecode/controllers/admin/repos_groups.py:318
+#, fuzzy
+msgid "An error occurred during deletion of group user groups"
+msgstr "建立使用者 %s"
+
+#: rhodecode/controllers/admin/settings.py:126
 #, python-format
-msgid "Repositories successfully rescanned added: %s,removed: %s"
-msgstr ""
-
-#: rhodecode/controllers/admin/settings.py:131
+msgid "Repositories successfully rescanned added: %s ; removed: %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/settings.py:135
 msgid "Whoosh reindex task scheduled"
 msgstr "Whoosh 重新索引工作排程"
 
-#: rhodecode/controllers/admin/settings.py:162
+#: rhodecode/controllers/admin/settings.py:166
 msgid "Updated application settings"
 msgstr "更新應用設定"
 
-#: rhodecode/controllers/admin/settings.py:166
-#: rhodecode/controllers/admin/settings.py:299
-msgid "error occurred during updating application settings"
-msgstr ""
-
-#: rhodecode/controllers/admin/settings.py:207
+#: rhodecode/controllers/admin/settings.py:170
+#: rhodecode/controllers/admin/settings.py:301
+#, fuzzy
+msgid "Error occurred during updating application settings"
+msgstr "更新應用設定"
+
+#: rhodecode/controllers/admin/settings.py:216
 #, fuzzy
 msgid "Updated visualisation settings"
 msgstr "更新應用設定"
 
-#: rhodecode/controllers/admin/settings.py:212
-msgid "error occurred during updating visualisation settings"
-msgstr ""
-
-#: rhodecode/controllers/admin/settings.py:295
+#: rhodecode/controllers/admin/settings.py:221
+#, fuzzy
+msgid "Error occurred during updating visualisation settings"
+msgstr "更新應用設定"
+
+#: rhodecode/controllers/admin/settings.py:297
 #, fuzzy
 msgid "Updated VCS settings"
 msgstr "更新 mercurial 設定"
 
-#: rhodecode/controllers/admin/settings.py:309
+#: rhodecode/controllers/admin/settings.py:311
 msgid "Added new hook"
 msgstr "新增hook"
 
-#: rhodecode/controllers/admin/settings.py:321
+#: rhodecode/controllers/admin/settings.py:323
 msgid "Updated hooks"
 msgstr "更新hook"
 
-#: rhodecode/controllers/admin/settings.py:325
-msgid "error occurred during hook creation"
-msgstr ""
-
-#: rhodecode/controllers/admin/settings.py:344
+#: rhodecode/controllers/admin/settings.py:327
+msgid "Error occurred during hook creation"
+msgstr ""
+
+#: rhodecode/controllers/admin/settings.py:346
 msgid "Email task created"
 msgstr ""
 
-#: rhodecode/controllers/admin/settings.py:399
+#: rhodecode/controllers/admin/settings.py:410
 msgid "You can't edit this user since it's crucial for entire application"
 msgstr ""
 
-#: rhodecode/controllers/admin/settings.py:430
+#: rhodecode/controllers/admin/settings.py:452
 msgid "Your account was updated successfully"
 msgstr "您的帳號已更新完成"
 
-#: rhodecode/controllers/admin/settings.py:445
-#: rhodecode/controllers/admin/users.py:196
+#: rhodecode/controllers/admin/settings.py:467
+#: rhodecode/controllers/admin/users.py:198
 #, python-format
-msgid "error occurred during update of user %s"
+msgid "Error occurred during update of user %s"
 msgstr ""
 
 #: rhodecode/controllers/admin/users.py:130
-#, python-format
-msgid "created user %s"
+#, fuzzy, python-format
+msgid "Created user %s"
 msgstr "建立使用者 %s"
 
 #: rhodecode/controllers/admin/users.py:142
-#, python-format
-msgid "error occurred during creation of user %s"
-msgstr ""
+#, fuzzy, python-format
+msgid "Error occurred during creation of user %s"
+msgstr "建立使用者 %s"
 
 #: rhodecode/controllers/admin/users.py:176
 msgid "User updated successfully"
 msgstr "使用者更新完成"
 
-#: rhodecode/controllers/admin/users.py:212
-msgid "successfully deleted user"
+#: rhodecode/controllers/admin/users.py:214
+#, fuzzy
+msgid "Successfully deleted user"
 msgstr "成功刪除使用者"
 
-#: rhodecode/controllers/admin/users.py:217
+#: rhodecode/controllers/admin/users.py:219
 msgid "An error occurred during deletion of user"
 msgstr ""
 
-#: rhodecode/controllers/admin/users.py:231
+#: rhodecode/controllers/admin/users.py:233
 msgid "You can't edit this user"
 msgstr "您無法編輯這位使用者"
 
-#: rhodecode/controllers/admin/users.py:272
+#: rhodecode/controllers/admin/users.py:276
 msgid "Granted 'repository create' permission to user"
 msgstr ""
 
-#: rhodecode/controllers/admin/users.py:277
+#: rhodecode/controllers/admin/users.py:281
 msgid "Revoked 'repository create' permission to user"
 msgstr ""
 
-#: rhodecode/controllers/admin/users.py:283
+#: rhodecode/controllers/admin/users.py:287
 #, fuzzy
 msgid "Granted 'repository fork' permission to user"
 msgstr "版本庫權限"
 
-#: rhodecode/controllers/admin/users.py:288
+#: rhodecode/controllers/admin/users.py:292
 #, fuzzy
 msgid "Revoked 'repository fork' permission to user"
 msgstr "版本庫權限"
 
-#: rhodecode/controllers/admin/users.py:294
-#: rhodecode/controllers/admin/users_groups.py:279
+#: rhodecode/controllers/admin/users.py:298
+#: rhodecode/controllers/admin/users_groups.py:281
 msgid "An error occurred during permissions saving"
 msgstr ""
 
-#: rhodecode/controllers/admin/users.py:309
+#: rhodecode/controllers/admin/users.py:312
 #, python-format
 msgid "Added email %s to user"
 msgstr ""
 
-#: rhodecode/controllers/admin/users.py:315
+#: rhodecode/controllers/admin/users.py:318
 msgid "An error occurred during email saving"
 msgstr ""
 
-#: rhodecode/controllers/admin/users.py:325
+#: rhodecode/controllers/admin/users.py:328
 #, fuzzy
 msgid "Removed email from user"
 msgstr "移除版本庫群組 %s"
 
-#: rhodecode/controllers/admin/users_groups.py:86
+#: rhodecode/controllers/admin/users.py:341
 #, python-format
-msgid "created users group %s"
+msgid "Added ip %s to user"
+msgstr ""
+
+#: rhodecode/controllers/admin/users.py:347
+msgid "An error occurred during ip saving"
+msgstr ""
+
+#: rhodecode/controllers/admin/users.py:359
+#, fuzzy
+msgid "Removed ip from user"
+msgstr "移除版本庫群組 %s"
+
+#: rhodecode/controllers/admin/users_groups.py:86
+#, fuzzy, python-format
+msgid "Created user group %s"
 msgstr "建立使用者群組 %s"
 
 #: rhodecode/controllers/admin/users_groups.py:97
-#, python-format
-msgid "error occurred during creation of users group %s"
-msgstr ""
-
-#: rhodecode/controllers/admin/users_groups.py:164
-#, python-format
-msgid "updated users group %s"
+#, fuzzy, python-format
+msgid "Error occurred during creation of user group %s"
+msgstr "建立使用者 %s"
+
+#: rhodecode/controllers/admin/users_groups.py:166
+#, fuzzy, python-format
+msgid "Updated user group %s"
 msgstr "更新使用者群組 %s"
 
-#: rhodecode/controllers/admin/users_groups.py:186
+#: rhodecode/controllers/admin/users_groups.py:188
 #, python-format
-msgid "error occurred during update of users group %s"
-msgstr ""
-
-#: rhodecode/controllers/admin/users_groups.py:203
-msgid "successfully deleted users group"
+msgid "Error occurred during update of user group %s"
+msgstr ""
+
+#: rhodecode/controllers/admin/users_groups.py:205
+#, fuzzy
+msgid "Successfully deleted user group"
 msgstr "成功移除使用者群組"
 
-#: rhodecode/controllers/admin/users_groups.py:208
-msgid "An error occurred during deletion of users group"
-msgstr ""
-
-#: rhodecode/controllers/admin/users_groups.py:257
-msgid "Granted 'repository create' permission to users group"
-msgstr ""
-
-#: rhodecode/controllers/admin/users_groups.py:262
-msgid "Revoked 'repository create' permission to users group"
-msgstr ""
-
-#: rhodecode/controllers/admin/users_groups.py:268
-msgid "Granted 'repository fork' permission to users group"
-msgstr ""
-
-#: rhodecode/controllers/admin/users_groups.py:273
-msgid "Revoked 'repository fork' permission to users group"
-msgstr ""
-
-#: rhodecode/lib/auth.py:499
+#: rhodecode/controllers/admin/users_groups.py:210
+msgid "An error occurred during deletion of user group"
+msgstr ""
+
+#: rhodecode/controllers/admin/users_groups.py:259
+#, fuzzy
+msgid "Granted 'repository create' permission to user group"
+msgstr "版本庫權限"
+
+#: rhodecode/controllers/admin/users_groups.py:264
+#, fuzzy
+msgid "Revoked 'repository create' permission to user group"
+msgstr "版本庫權限"
+
+#: rhodecode/controllers/admin/users_groups.py:270
+#, fuzzy
+msgid "Granted 'repository fork' permission to user group"
+msgstr "版本庫權限"
+
+#: rhodecode/controllers/admin/users_groups.py:275
+#, fuzzy
+msgid "Revoked 'repository fork' permission to user group"
+msgstr "版本庫權限"
+
+#: rhodecode/lib/auth.py:530
+#, fuzzy, python-format
+msgid "IP %s not allowed"
+msgstr "追蹤者"
+
+#: rhodecode/lib/auth.py:579
 msgid "You need to be a registered user to perform this action"
 msgstr "您必須是註冊使用者才能執行這個動作"
 
-#: rhodecode/lib/auth.py:540
+#: rhodecode/lib/auth.py:620
 msgid "You need to be a signed in to view this page"
 msgstr "您必須登入後才能瀏覽這個頁面"
 
-#: rhodecode/lib/diffs.py:74
-msgid "binary file"
+#: rhodecode/lib/diffs.py:66
+#, fuzzy
+msgid "Binary file"
 msgstr "二進位檔"
 
-#: rhodecode/lib/diffs.py:90
+#: rhodecode/lib/diffs.py:82
 msgid "Changeset was too big and was cut off, use diff menu to display this diff"
 msgstr ""
 
-#: rhodecode/lib/diffs.py:100
+#: rhodecode/lib/diffs.py:92
 msgid "No changes detected"
 msgstr "尚未有任何變更"
 
-#: rhodecode/lib/helpers.py:374
+#: rhodecode/lib/helpers.py:394
 #, python-format
 msgid "%a, %d %b %Y %H:%M:%S"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:486
+#: rhodecode/lib/helpers.py:506
 msgid "True"
 msgstr "真"
 
-#: rhodecode/lib/helpers.py:490
+#: rhodecode/lib/helpers.py:509
 msgid "False"
 msgstr "假"
 
-#: rhodecode/lib/helpers.py:530
+#: rhodecode/lib/helpers.py:547
 #, fuzzy, python-format
 msgid "Deleted branch: %s"
 msgstr "刪除版本庫 %s"
 
-#: rhodecode/lib/helpers.py:533
+#: rhodecode/lib/helpers.py:550
 #, fuzzy, python-format
 msgid "Created tag: %s"
 msgstr "建立使用者 %s"
 
-#: rhodecode/lib/helpers.py:546
+#: rhodecode/lib/helpers.py:563
 #, fuzzy
 msgid "Changeset not found"
 msgstr "修改"
 
-#: rhodecode/lib/helpers.py:589
+#: rhodecode/lib/helpers.py:615
 #, python-format
 msgid "Show all combined changesets %s->%s"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:595
+#: rhodecode/lib/helpers.py:621
 msgid "compare view"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:615
+#: rhodecode/lib/helpers.py:641
 msgid "and"
 msgstr "和"
 
-#: rhodecode/lib/helpers.py:616
+#: rhodecode/lib/helpers.py:642
 #, python-format
 msgid "%s more"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:617 rhodecode/templates/changelog/changelog.html:51
+#: rhodecode/lib/helpers.py:643 rhodecode/templates/changelog/changelog.html:44
 msgid "revisions"
 msgstr "修訂"
 
-#: rhodecode/lib/helpers.py:641
+#: rhodecode/lib/helpers.py:667
 #, fuzzy, python-format
 msgid "fork name %s"
 msgstr "fork 名稱"
 
-#: rhodecode/lib/helpers.py:658
-#: rhodecode/templates/pullrequests/pullrequest_show.html:4
-#: rhodecode/templates/pullrequests/pullrequest_show.html:12
+#: rhodecode/lib/helpers.py:684
+#: rhodecode/templates/pullrequests/pullrequest_show.html:8
 #, python-format
 msgid "Pull request #%s"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:664
+#: rhodecode/lib/helpers.py:690
 msgid "[deleted] repository"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:666 rhodecode/lib/helpers.py:676
+#: rhodecode/lib/helpers.py:692 rhodecode/lib/helpers.py:702
 msgid "[created] repository"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:668
+#: rhodecode/lib/helpers.py:694
 #, fuzzy
 msgid "[created] repository as fork"
 msgstr "建立版本庫 %s"
 
-#: rhodecode/lib/helpers.py:670 rhodecode/lib/helpers.py:678
+#: rhodecode/lib/helpers.py:696 rhodecode/lib/helpers.py:704
 msgid "[forked] repository"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:672 rhodecode/lib/helpers.py:680
+#: rhodecode/lib/helpers.py:698 rhodecode/lib/helpers.py:706
 msgid "[updated] repository"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:674
+#: rhodecode/lib/helpers.py:700
 msgid "[delete] repository"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:682
+#: rhodecode/lib/helpers.py:708
 #, fuzzy
 msgid "[created] user"
 msgstr "建立使用者 %s"
 
-#: rhodecode/lib/helpers.py:684
+#: rhodecode/lib/helpers.py:710
 #, fuzzy
 msgid "[updated] user"
 msgstr "更新使用者群組 %s"
 
-#: rhodecode/lib/helpers.py:686
-#, fuzzy
-msgid "[created] users group"
+#: rhodecode/lib/helpers.py:712
+#, fuzzy
+msgid "[created] user group"
 msgstr "建立使用者群組 %s"
 
-#: rhodecode/lib/helpers.py:688
-#, fuzzy
-msgid "[updated] users group"
+#: rhodecode/lib/helpers.py:714
+#, fuzzy
+msgid "[updated] user group"
 msgstr "更新使用者群組 %s"
 
-#: rhodecode/lib/helpers.py:690
+#: rhodecode/lib/helpers.py:716
 msgid "[commented] on revision in repository"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:692
+#: rhodecode/lib/helpers.py:718
 #, fuzzy
 msgid "[commented] on pull request for"
 msgstr "建立使用者 %s"
 
-#: rhodecode/lib/helpers.py:694
+#: rhodecode/lib/helpers.py:720
 msgid "[closed] pull request for"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:696
+#: rhodecode/lib/helpers.py:722
 msgid "[pushed] into"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:698
+#: rhodecode/lib/helpers.py:724
 msgid "[committed via RhodeCode] into repository"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:700
+#: rhodecode/lib/helpers.py:726
 msgid "[pulled from remote] into repository"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:702
+#: rhodecode/lib/helpers.py:728
 msgid "[pulled] from"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:704
+#: rhodecode/lib/helpers.py:730
 msgid "[started following] repository"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:706
+#: rhodecode/lib/helpers.py:732
 msgid "[stopped following] repository"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:883
+#: rhodecode/lib/helpers.py:910
 #, python-format
 msgid " and %s more"
 msgstr ""
 
-#: rhodecode/lib/helpers.py:887
+#: rhodecode/lib/helpers.py:914
 msgid "No Files"
 msgstr "沒有檔案"
 
-#: rhodecode/lib/helpers.py:1163
+#: rhodecode/lib/helpers.py:1198
 #, python-format
 msgid ""
 "%s repository is not mapped to db perhaps it was created or renamed from "
@@ -926,175 +1015,239 @@
 "repositories"
 msgstr ""
 
-#: rhodecode/lib/utils2.py:403
+#: rhodecode/lib/unionrepo.py:193
+#, fuzzy
+msgid "cannot create new union repository"
+msgstr "建立版本庫 %s"
+
+#: rhodecode/lib/utils2.py:411
 #, fuzzy, python-format
 msgid "%d year"
 msgid_plural "%d years"
 msgstr[0] "年"
 
-#: rhodecode/lib/utils2.py:404
+#: rhodecode/lib/utils2.py:412
 #, fuzzy, python-format
 msgid "%d month"
 msgid_plural "%d months"
 msgstr[0] "月"
 
-#: rhodecode/lib/utils2.py:405
+#: rhodecode/lib/utils2.py:413
 #, fuzzy, python-format
 msgid "%d day"
 msgid_plural "%d days"
 msgstr[0] "日"
 
-#: rhodecode/lib/utils2.py:406
+#: rhodecode/lib/utils2.py:414
 #, fuzzy, python-format
 msgid "%d hour"
 msgid_plural "%d hours"
 msgstr[0] "時"
 
-#: rhodecode/lib/utils2.py:407
+#: rhodecode/lib/utils2.py:415
 #, fuzzy, python-format
 msgid "%d minute"
 msgid_plural "%d minutes"
 msgstr[0] "分"
 
-#: rhodecode/lib/utils2.py:408
+#: rhodecode/lib/utils2.py:416
 #, fuzzy, python-format
 msgid "%d second"
 msgid_plural "%d seconds"
 msgstr[0] "秒"
 
-#: rhodecode/lib/utils2.py:424
+#: rhodecode/lib/utils2.py:432
 #, python-format
 msgid "in %s"
 msgstr ""
 
-#: rhodecode/lib/utils2.py:426
-#, fuzzy, python-format
-msgid "%s ago"
-msgstr "之前"
-
-#: rhodecode/lib/utils2.py:428
-#, fuzzy, python-format
-msgid "in %s and %s"
-msgstr "下載 %s 為 %s"
-
-#: rhodecode/lib/utils2.py:431
-#, python-format
-msgid "%s and %s ago"
-msgstr ""
-
 #: rhodecode/lib/utils2.py:434
+#, fuzzy, python-format
+msgid "%s ago"
+msgstr "之前"
+
+#: rhodecode/lib/utils2.py:436
+#, fuzzy, python-format
+msgid "in %s and %s"
+msgstr "下載 %s 為 %s"
+
+#: rhodecode/lib/utils2.py:439
+#, python-format
+msgid "%s and %s ago"
+msgstr ""
+
+#: rhodecode/lib/utils2.py:442
 msgid "just now"
 msgstr "現在"
 
-#: rhodecode/lib/celerylib/tasks.py:270
-#, fuzzy
-msgid "password reset link"
-msgstr "您的密碼重設連結已寄出"
-
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163 rhodecode/model/db.py:1183
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1163
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1183
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1289 rhodecode/model/db.py:1388
 #, fuzzy
 msgid "Repository no access"
 msgstr "個版本庫"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164 rhodecode/model/db.py:1184
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1164
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1184
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1290 rhodecode/model/db.py:1389
 #, fuzzy
 msgid "Repository read access"
 msgstr "這個版本庫已經存在"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165 rhodecode/model/db.py:1185
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1165
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1185
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1291 rhodecode/model/db.py:1390
 #, fuzzy
 msgid "Repository write access"
 msgstr "個版本庫"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166 rhodecode/model/db.py:1186
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1166
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1186
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1292 rhodecode/model/db.py:1391
 #, fuzzy
 msgid "Repository admin access"
 msgstr "個版本庫"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168 rhodecode/model/db.py:1188
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1168
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1188
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1294
 #, fuzzy
 msgid "Repositories Group no access"
 msgstr "版本庫群組"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169 rhodecode/model/db.py:1189
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1169
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1189
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1295
 #, fuzzy
 msgid "Repositories Group read access"
 msgstr "版本庫群組"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170 rhodecode/model/db.py:1190
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1170
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1190
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1296
 #, fuzzy
 msgid "Repositories Group write access"
 msgstr "版本庫群組"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171 rhodecode/model/db.py:1191
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1171
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1191
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1297
 #, fuzzy
 msgid "Repositories Group admin access"
 msgstr "版本庫群組"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173 rhodecode/model/db.py:1193
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1173
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1193
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1299 rhodecode/model/db.py:1398
 #, fuzzy
 msgid "RhodeCode Administrator"
 msgstr "使用者管理員"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174 rhodecode/model/db.py:1194
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1174
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1194
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1300 rhodecode/model/db.py:1399
 #, fuzzy
 msgid "Repository creation disabled"
 msgstr "版本庫建立"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175 rhodecode/model/db.py:1195
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1175
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1195
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1301 rhodecode/model/db.py:1400
 #, fuzzy
 msgid "Repository creation enabled"
 msgstr "版本庫建立"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176 rhodecode/model/db.py:1196
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1176
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1196
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1302 rhodecode/model/db.py:1401
 #, fuzzy
 msgid "Repository forking disabled"
 msgstr "版本庫建立"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177 rhodecode/model/db.py:1197
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1177
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1197
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1303 rhodecode/model/db.py:1402
 #, fuzzy
 msgid "Repository forking enabled"
 msgstr "版本庫建立"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178 rhodecode/model/db.py:1198
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1178
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1198
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1304 rhodecode/model/db.py:1403
 #, fuzzy
 msgid "Register disabled"
 msgstr "停用"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179 rhodecode/model/db.py:1199
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1179
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1199
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1305 rhodecode/model/db.py:1404
 msgid "Register new user with RhodeCode with manual activation"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182 rhodecode/model/db.py:1202
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1182
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1202
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1308 rhodecode/model/db.py:1407
 msgid "Register new user with RhodeCode with auto activation"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623 rhodecode/model/db.py:1643
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1623
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1643
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1749 rhodecode/model/db.py:1838
 msgid "Not Reviewed"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624 rhodecode/model/db.py:1644
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1624
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1644
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1750 rhodecode/model/db.py:1839
 #, fuzzy
 msgid "Approved"
 msgstr "移除"
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625 rhodecode/model/db.py:1645
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1625
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1645
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1751 rhodecode/model/db.py:1840
 msgid "Rejected"
 msgstr ""
 
-#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626 rhodecode/model/db.py:1646
+#: rhodecode/lib/dbmigrate/schema/db_1_4_0.py:1626
+#: rhodecode/lib/dbmigrate/schema/db_1_5_0.py:1646
+#: rhodecode/lib/dbmigrate/schema/db_1_5_2.py:1752 rhodecode/model/db.py:1841
 msgid "Under Review"
 msgstr ""
 
-#: rhodecode/model/comment.py:110
+#: rhodecode/model/comment.py:75
 #, python-format
 msgid "on line %s"
 msgstr ""
 
-#: rhodecode/model/comment.py:173
+#: rhodecode/model/comment.py:219
 msgid "[Mention]"
 msgstr ""
 
+#: rhodecode/model/db.py:1252
+msgid "top level"
+msgstr ""
+
+#: rhodecode/model/db.py:1393
+#, fuzzy
+msgid "Repository group no access"
+msgstr "版本庫群組"
+
+#: rhodecode/model/db.py:1394
+#, fuzzy
+msgid "Repository group read access"
+msgstr "版本庫群組"
+
+#: rhodecode/model/db.py:1395
+#, fuzzy
+msgid "Repository group write access"
+msgstr "版本庫群組"
+
+#: rhodecode/model/db.py:1396
+#, fuzzy
+msgid "Repository group admin access"
+msgstr "版本庫群組"
+
 #: rhodecode/model/forms.py:43
 msgid "Please enter a login"
 msgstr "請登入"
@@ -1113,210 +1266,249 @@
 msgid "Enter %(min)i characters or more"
 msgstr ""
 
-#: rhodecode/model/notification.py:220
-#, python-format
-msgid "commented on commit at %(when)s"
-msgstr ""
-
-#: rhodecode/model/notification.py:221
-#, fuzzy, python-format
-msgid "sent message at %(when)s"
-msgstr "遞交資訊"
-
-#: rhodecode/model/notification.py:222
-#, python-format
-msgid "mentioned you at %(when)s"
-msgstr ""
-
-#: rhodecode/model/notification.py:223
-#, fuzzy, python-format
-msgid "registered in RhodeCode at %(when)s"
-msgstr "您已經成功註冊rhodecode"
-
 #: rhodecode/model/notification.py:224
 #, fuzzy, python-format
-msgid "opened new pull request at %(when)s"
+msgid "%(user)s commented on changeset at %(when)s"
 msgstr "建立使用者 %s"
 
 #: rhodecode/model/notification.py:225
 #, fuzzy, python-format
-msgid "commented on pull request at %(when)s"
-msgstr "建立使用者 %s"
-
-#: rhodecode/model/pull_request.py:90
+msgid "%(user)s sent message at %(when)s"
+msgstr "遞交資訊"
+
+#: rhodecode/model/notification.py:226
 #, python-format
-msgid "%(user)s wants you to review pull request #%(pr_id)s"
-msgstr ""
-
-#: rhodecode/model/scm.py:542
+msgid "%(user)s mentioned you at %(when)s"
+msgstr ""
+
+#: rhodecode/model/notification.py:227
+#, fuzzy, python-format
+msgid "%(user)s registered in RhodeCode at %(when)s"
+msgstr "您已經成功註冊rhodecode"
+
+#: rhodecode/model/notification.py:228
+#, fuzzy, python-format
+msgid "%(user)s opened new pull request at %(when)s"
+msgstr "建立使用者 %s"
+
+#: rhodecode/model/notification.py:229
+#, fuzzy, python-format
+msgid "%(user)s commented on pull request at %(when)s"
+msgstr "建立使用者 %s"
+
+#: rhodecode/model/pull_request.py:104
+#, python-format
+msgid "%(user)s wants you to review pull request #%(pr_id)s: %(pr_title)s"
+msgstr ""
+
+#: rhodecode/model/scm.py:598
 #, fuzzy
 msgid "latest tip"
 msgstr "最後登入"
 
 #: rhodecode/model/user.py:232
 #, fuzzy
-msgid "new user registration"
+msgid "New user registration"
 msgstr "[RhodeCode] 新使用者註冊"
 
 #: rhodecode/model/user.py:257 rhodecode/model/user.py:281
-#: rhodecode/model/user.py:303
 msgid "You can't Edit this user since it's crucial for entire application"
 msgstr "您無法編輯這個使用者,因為他是系統帳號"
 
-#: rhodecode/model/user.py:327
+#: rhodecode/model/user.py:303
 msgid "You can't remove this user since it's crucial for entire application"
 msgstr "您無法移除這個使用者,因為他是系統帳號"
 
-#: rhodecode/model/user.py:333
+#: rhodecode/model/user.py:309
 #, fuzzy, python-format
 msgid ""
 "user \"%s\" still owns %s repositories and cannot be removed. Switch "
 "owners or remove those repositories. %s"
 msgstr "這個使用者擁有 %s 個版本庫所以無法移除,請先變更版本庫擁有者或者刪除版本庫"
 
-#: rhodecode/model/validators.py:36 rhodecode/model/validators.py:37
+#: rhodecode/model/user.py:334
+#, fuzzy
+msgid "Password reset link"
+msgstr "您的密碼重設連結已寄出"
+
+#: rhodecode/model/user.py:366
+#, fuzzy
+msgid "Your new password"
+msgstr "新密碼"
+
+#: rhodecode/model/user.py:367
+#, python-format
+msgid "Your new RhodeCode password:%s"
+msgstr ""
+
+#: rhodecode/model/validators.py:38 rhodecode/model/validators.py:39
 msgid "Value cannot be an empty list"
 msgstr ""
 
-#: rhodecode/model/validators.py:83
+#: rhodecode/model/validators.py:85
 #, fuzzy, python-format
 msgid "Username \"%(username)s\" already exists"
 msgstr "使用者名稱已存在"
 
-#: rhodecode/model/validators.py:85
+#: rhodecode/model/validators.py:87
 #, python-format
 msgid "Username \"%(username)s\" is forbidden"
 msgstr ""
 
-#: rhodecode/model/validators.py:87
+#: rhodecode/model/validators.py:89
 msgid ""
 "Username may only contain alphanumeric characters underscores, periods or"
 " dashes and must begin with alphanumeric character"
 msgstr "使用者名稱只能使用字母數字、底線、小數點或破折號,且必須使用數字或字母開頭"
 
-#: rhodecode/model/validators.py:115
+#: rhodecode/model/validators.py:117
 #, fuzzy, python-format
 msgid "Username %(username)s is not valid"
 msgstr "使用者名稱或群組名稱無效"
 
-#: rhodecode/model/validators.py:134
-#, fuzzy
-msgid "Invalid users group name"
+#: rhodecode/model/validators.py:136
+#, fuzzy
+msgid "Invalid user group name"
 msgstr "無效的使用者名稱"
 
-#: rhodecode/model/validators.py:135
-#, fuzzy, python-format
-msgid "Users group \"%(usersgroup)s\" already exists"
-msgstr "這個使用者群組已存在"
-
 #: rhodecode/model/validators.py:137
+#, fuzzy, python-format
+msgid "User group \"%(usergroup)s\" already exists"
+msgstr "這個使用者群組已存在"
+
+#: rhodecode/model/validators.py:139
+#, fuzzy
 msgid ""
-"users group name may only contain  alphanumeric characters underscores, "
+"user group name may only contain alphanumeric characters underscores, "
 "periods or dashes and must begin with alphanumeric character"
 msgstr "群組名稱只能使用字母數字、底線、小數點或破折號,且必須使用數字或字母開頭"
 
-#: rhodecode/model/validators.py:175
+#: rhodecode/model/validators.py:177
 msgid "Cannot assign this group as parent"
 msgstr ""
 
-#: rhodecode/model/validators.py:176
+#: rhodecode/model/validators.py:178
 #, fuzzy, python-format
 msgid "Group \"%(group_name)s\" already exists"
 msgstr "使用者名稱已存在"
 
-#: rhodecode/model/validators.py:178
+#: rhodecode/model/validators.py:180
 #, fuzzy, python-format
 msgid "Repository with name \"%(group_name)s\" already exists"
 msgstr "這個版本庫已經存在"
 
-#: rhodecode/model/validators.py:236
+#: rhodecode/model/validators.py:238
 #, fuzzy
 msgid "Invalid characters (non-ascii) in password"
 msgstr "無效的字元在密碼中"
 
-#: rhodecode/model/validators.py:251
+#: rhodecode/model/validators.py:253
 msgid "Passwords do not match"
 msgstr "密碼不相符"
 
-#: rhodecode/model/validators.py:268
+#: rhodecode/model/validators.py:270
 msgid "invalid password"
 msgstr "無效的密碼"
 
-#: rhodecode/model/validators.py:269
+#: rhodecode/model/validators.py:271
 msgid "invalid user name"
 msgstr "無效的使用者名稱"
 
-#: rhodecode/model/validators.py:270
+#: rhodecode/model/validators.py:272
 msgid "Your account is disabled"
 msgstr "您的帳號已被停用"
 
-#: rhodecode/model/validators.py:314
+#: rhodecode/model/validators.py:316
 #, fuzzy, python-format
 msgid "Repository name %(repo)s is disallowed"
 msgstr "不允許的版本庫名稱"
 
-#: rhodecode/model/validators.py:316
+#: rhodecode/model/validators.py:318
 #, fuzzy, python-format
 msgid "Repository named %(repo)s already exists"
 msgstr "這個版本庫已經存在"
 
-#: rhodecode/model/validators.py:317
-#, fuzzy, python-format
-msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\""
-msgstr "這個版本庫已存在於群組 \"%s\""
-
 #: rhodecode/model/validators.py:319
 #, fuzzy, python-format
-msgid "Repositories group with name \"%(repo)s\" already exists"
+msgid "Repository \"%(repo)s\" already exists in group \"%(group)s\""
+msgstr "這個版本庫已存在於群組 \"%s\""
+
+#: rhodecode/model/validators.py:321
+#, fuzzy, python-format
+msgid "Repository group with name \"%(repo)s\" already exists"
 msgstr "這個版本庫已經存在"
 
-#: rhodecode/model/validators.py:432
+#: rhodecode/model/validators.py:438
 msgid "invalid clone url"
 msgstr "無效的複製URL"
 
-#: rhodecode/model/validators.py:433
+#: rhodecode/model/validators.py:439
 msgid "Invalid clone url, provide a valid clone http(s)/svn+http(s) url"
 msgstr ""
 
-#: rhodecode/model/validators.py:458
+#: rhodecode/model/validators.py:464
 #, fuzzy
 msgid "Fork have to be the same type as parent"
 msgstr "Fork 必須使用相同的版本庫類型"
 
-#: rhodecode/model/validators.py:473
+#: rhodecode/model/validators.py:479
 #, fuzzy
 msgid "You don't have permissions to create repository in this group"
 msgstr "您沒有權限瀏覽這個頁面"
 
-#: rhodecode/model/validators.py:498
-msgid "This username or users group name is not valid"
+#: rhodecode/model/validators.py:481
+#, fuzzy
+msgid "no permission to create repository in root location"
+msgstr "您沒有權限瀏覽這個頁面"
+
+#: rhodecode/model/validators.py:518
+#, fuzzy
+msgid "You don't have permissions to create a group in this location"
+msgstr "您沒有權限瀏覽這個頁面"
+
+#: rhodecode/model/validators.py:557
+#, fuzzy
+msgid "This username or user group name is not valid"
 msgstr "使用者名稱或群組名稱無效"
 
-#: rhodecode/model/validators.py:591
+#: rhodecode/model/validators.py:650
 msgid "This is not a valid path"
 msgstr "不是一個有效的路徑"
 
-#: rhodecode/model/validators.py:606
+#: rhodecode/model/validators.py:665
 msgid "This e-mail address is already taken"
 msgstr "這個郵件位址已經使用了"
 
-#: rhodecode/model/validators.py:626
+#: rhodecode/model/validators.py:685
 #, fuzzy, python-format
 msgid "e-mail \"%(email)s\" does not exist."
 msgstr "這個郵件位址不存在"
 
-#: rhodecode/model/validators.py:663
+#: rhodecode/model/validators.py:722
 msgid ""
 "The LDAP Login attribute of the CN must be specified - this is the name "
 "of the attribute that is equivalent to \"username\""
 msgstr ""
 
-#: rhodecode/model/validators.py:682
+#: rhodecode/model/validators.py:735
 #, python-format
 msgid "Revisions %(revs)s are already part of pull request or have set status"
 msgstr ""
 
-#: rhodecode/templates/index.html:3
+#: rhodecode/model/validators.py:767
+msgid "Please enter a valid IPv4 or IpV6 address"
+msgstr ""
+
+#: rhodecode/model/validators.py:768
+#, python-format
+msgid "The network size (bits) must be within the range of 0-32 (not %(bits)r)"
+msgstr ""
+
+#: rhodecode/model/validators.py:800
+msgid "Key name can only consist of letters, underscore, dash or numbers"
+msgstr ""
+
+#: rhodecode/templates/index.html:5
 msgid "Dashboard"
 msgstr "儀表板"
 
@@ -1325,207 +1517,232 @@
 #: rhodecode/templates/admin/repos/repos.html:9
 #: rhodecode/templates/admin/users/user_edit_my_account.html:31
 #: rhodecode/templates/admin/users/users.html:9
-#: rhodecode/templates/bookmarks/bookmarks.html:10
+#: rhodecode/templates/bookmarks/bookmarks.html:9
 #: rhodecode/templates/branches/branches.html:9
 #: rhodecode/templates/journal/journal.html:9
-#: rhodecode/templates/journal/journal.html:48
-#: rhodecode/templates/tags/tags.html:10
+#: rhodecode/templates/journal/journal.html:46
+#: rhodecode/templates/journal/journal.html:47
+#: rhodecode/templates/tags/tags.html:9
 msgid "quick filter..."
 msgstr "快速過濾..."
 
 #: rhodecode/templates/index_base.html:6
 #: rhodecode/templates/admin/repos/repos.html:9
-#: rhodecode/templates/base/base.html:233
 msgid "repositories"
 msgstr "個版本庫"
 
 #: rhodecode/templates/index_base.html:13
-#: rhodecode/templates/index_base.html:15
+#: rhodecode/templates/index_base.html:18
+#: rhodecode/templates/admin/repos/repo_add.html:5
 #: rhodecode/templates/admin/repos/repos.html:21
-msgid "ADD REPOSITORY"
+msgid "Add repository"
 msgstr "新增版本庫"
 
-#: rhodecode/templates/index_base.html:29
-#: rhodecode/templates/index_base.html:136
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:32
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:32
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:33
+#: rhodecode/templates/index_base.html:15
+#: rhodecode/templates/index_base.html:20
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:31
+#, fuzzy
+msgid "Add group"
+msgstr "編輯版本庫群組"
+
+#: rhodecode/templates/index_base.html:27
+#, fuzzy
+msgid "Edit group"
+msgstr "編輯版本庫群組"
+
+#: rhodecode/templates/index_base.html:27
+msgid "You have admin right to this group, and can edit it"
+msgstr ""
+
+#: rhodecode/templates/index_base.html:40
+#: rhodecode/templates/index_base.html:140
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:33
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:38
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:43
 #: rhodecode/templates/admin/users_groups/users_group_add.html:32
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:33
+#: rhodecode/templates/admin/users_groups/users_groups.html:34
 msgid "Group name"
 msgstr "群組名稱"
 
-#: rhodecode/templates/index_base.html:30
-#: rhodecode/templates/index_base.html:72
-#: rhodecode/templates/index_base.html:138
-#: rhodecode/templates/index_base.html:176
-#: rhodecode/templates/index_base.html:266
+#: rhodecode/templates/index_base.html:41
+#: rhodecode/templates/index_base.html:83
+#: rhodecode/templates/index_base.html:142
+#: rhodecode/templates/index_base.html:180
+#: rhodecode/templates/index_base.html:270
 #: rhodecode/templates/admin/repos/repo_add_base.html:56
 #: rhodecode/templates/admin/repos/repo_edit.html:75
-#: rhodecode/templates/admin/repos/repos.html:72
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:41
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:41
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:34
-#: rhodecode/templates/forks/fork.html:59
-#: rhodecode/templates/settings/repo_settings.html:66
-#: rhodecode/templates/summary/summary.html:114
+#: rhodecode/templates/admin/repos/repos.html:73
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:42
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:47
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:44
+#: rhodecode/templates/forks/fork.html:56
+#: rhodecode/templates/pullrequests/pullrequest.html:101
+#: rhodecode/templates/summary/summary.html:106
 msgid "Description"
 msgstr "描述"
 
-#: rhodecode/templates/index_base.html:40
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:47
-msgid "Repositories group"
+#: rhodecode/templates/index_base.html:51
+#: rhodecode/templates/admin/permissions/permissions.html:55
+#: rhodecode/templates/admin/repos/repo_add_base.html:29
+#: rhodecode/templates/admin/repos/repo_edit.html:49
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:57
+#: rhodecode/templates/forks/fork.html:47
+msgid "Repository group"
 msgstr "版本庫群組"
 
-#: rhodecode/templates/index_base.html:71
-#: rhodecode/templates/index_base.html:174
-#: rhodecode/templates/index_base.html:264
+#: rhodecode/templates/index_base.html:82
+#: rhodecode/templates/index_base.html:178
+#: rhodecode/templates/index_base.html:268
 #: rhodecode/templates/admin/repos/repo_add_base.html:9
 #: rhodecode/templates/admin/repos/repo_edit.html:32
-#: rhodecode/templates/admin/repos/repos.html:70
-#: rhodecode/templates/admin/users/user_edit.html:196
-#: rhodecode/templates/admin/users/user_edit_my_account.html:59
-#: rhodecode/templates/admin/users/user_edit_my_account.html:180
-#: rhodecode/templates/admin/users/user_edit_my_account.html:216
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:6
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:184
-#: rhodecode/templates/bookmarks/bookmarks.html:36
+#: rhodecode/templates/admin/repos/repos.html:71
+#: rhodecode/templates/admin/users/user_edit_my_account.html:172
+#: rhodecode/templates/base/perms_summary.html:14
+#: rhodecode/templates/bookmarks/bookmarks.html:34
 #: rhodecode/templates/bookmarks/bookmarks_data.html:6
-#: rhodecode/templates/branches/branches.html:50
+#: rhodecode/templates/branches/branches.html:47
 #: rhodecode/templates/branches/branches_data.html:6
 #: rhodecode/templates/files/files_browser.html:47
-#: rhodecode/templates/journal/journal.html:70
-#: rhodecode/templates/journal/journal.html:196
-#: rhodecode/templates/journal/journal_page_repos.html:7
-#: rhodecode/templates/settings/repo_settings.html:31
-#: rhodecode/templates/summary/summary.html:43
-#: rhodecode/templates/summary/summary.html:132
-#: rhodecode/templates/tags/tags.html:51
+#: rhodecode/templates/journal/journal.html:193
+#: rhodecode/templates/journal/journal.html:296
+#: rhodecode/templates/summary/summary.html:55
+#: rhodecode/templates/summary/summary.html:124
+#: rhodecode/templates/tags/tags.html:48
 #: rhodecode/templates/tags/tags_data.html:6
 msgid "Name"
 msgstr "名稱"
 
-#: rhodecode/templates/index_base.html:73
+#: rhodecode/templates/index_base.html:84
 msgid "Last change"
 msgstr "最後修改"
 
-#: rhodecode/templates/index_base.html:74
-#: rhodecode/templates/index_base.html:179
-#: rhodecode/templates/admin/users/user_edit_my_account.html:182
-#: rhodecode/templates/journal/journal.html:198
+#: rhodecode/templates/index_base.html:85
+#: rhodecode/templates/index_base.html:183
+#: rhodecode/templates/index_base.html:273
+#: rhodecode/templates/admin/repos/repos.html:74
+#: rhodecode/templates/admin/users/user_edit_my_account.html:174
+#: rhodecode/templates/journal/journal.html:195
+#: rhodecode/templates/journal/journal.html:298
 msgid "Tip"
 msgstr ""
 
-#: rhodecode/templates/index_base.html:75
-#: rhodecode/templates/index_base.html:181
-#: rhodecode/templates/index_base.html:269
+#: rhodecode/templates/index_base.html:86
+#: rhodecode/templates/index_base.html:185
+#: rhodecode/templates/index_base.html:275
 #: rhodecode/templates/admin/repos/repo_edit.html:121
-#: rhodecode/templates/admin/repos/repos.html:73
+#: rhodecode/templates/admin/repos/repos.html:76
 msgid "Owner"
 msgstr "擁有者"
 
-#: rhodecode/templates/index_base.html:76
-#: rhodecode/templates/summary/summary.html:48
-#: rhodecode/templates/summary/summary.html:51
-msgid "RSS"
-msgstr ""
-
-#: rhodecode/templates/index_base.html:77
+#: rhodecode/templates/index_base.html:87
 msgid "Atom"
 msgstr ""
 
-#: rhodecode/templates/index_base.html:167
-#: rhodecode/templates/index_base.html:207
-#: rhodecode/templates/index_base.html:291
-#: rhodecode/templates/admin/repos/repos.html:94
-#: rhodecode/templates/admin/users/user_edit_my_account.html:202
+#: rhodecode/templates/index_base.html:171
+#: rhodecode/templates/index_base.html:209
+#: rhodecode/templates/index_base.html:296
+#: rhodecode/templates/admin/repos/repos.html:97
+#: rhodecode/templates/admin/users/user_edit_my_account.html:196
 #: rhodecode/templates/admin/users/users.html:107
-#: rhodecode/templates/bookmarks/bookmarks.html:60
-#: rhodecode/templates/branches/branches.html:76
-#: rhodecode/templates/journal/journal.html:221
-#: rhodecode/templates/tags/tags.html:77
+#: rhodecode/templates/bookmarks/bookmarks.html:58
+#: rhodecode/templates/branches/branches.html:73
+#: rhodecode/templates/journal/journal.html:217
+#: rhodecode/templates/journal/journal.html:320
+#: rhodecode/templates/tags/tags.html:74
 msgid "Click to sort ascending"
 msgstr ""
 
-#: rhodecode/templates/index_base.html:168
-#: rhodecode/templates/index_base.html:208
-#: rhodecode/templates/index_base.html:292
-#: rhodecode/templates/admin/repos/repos.html:95
-#: rhodecode/templates/admin/users/user_edit_my_account.html:203
+#: rhodecode/templates/index_base.html:172
+#: rhodecode/templates/index_base.html:210
+#: rhodecode/templates/index_base.html:297
+#: rhodecode/templates/admin/repos/repos.html:98
+#: rhodecode/templates/admin/users/user_edit_my_account.html:197
 #: rhodecode/templates/admin/users/users.html:108
-#: rhodecode/templates/bookmarks/bookmarks.html:61
-#: rhodecode/templates/branches/branches.html:77
-#: rhodecode/templates/journal/journal.html:222
-#: rhodecode/templates/tags/tags.html:78
+#: rhodecode/templates/bookmarks/bookmarks.html:59
+#: rhodecode/templates/branches/branches.html:74
+#: rhodecode/templates/journal/journal.html:218
+#: rhodecode/templates/journal/journal.html:321
+#: rhodecode/templates/tags/tags.html:75
 msgid "Click to sort descending"
 msgstr ""
 
-#: rhodecode/templates/index_base.html:177
-#: rhodecode/templates/index_base.html:267
+#: rhodecode/templates/index_base.html:181
+#: rhodecode/templates/index_base.html:271
 #, fuzzy
 msgid "Last Change"
 msgstr "最後修改"
 
-#: rhodecode/templates/index_base.html:209
-#: rhodecode/templates/index_base.html:293
-#: rhodecode/templates/admin/repos/repos.html:96
-#: rhodecode/templates/admin/users/user_edit_my_account.html:204
+#: rhodecode/templates/index_base.html:211
+#: rhodecode/templates/admin/repos/repos.html:99
+#: rhodecode/templates/admin/users/user_edit_my_account.html:198
 #: rhodecode/templates/admin/users/users.html:109
-#: rhodecode/templates/bookmarks/bookmarks.html:62
-#: rhodecode/templates/branches/branches.html:78
-#: rhodecode/templates/journal/journal.html:223
-#: rhodecode/templates/tags/tags.html:79
+#: rhodecode/templates/bookmarks/bookmarks.html:60
+#: rhodecode/templates/branches/branches.html:75
+#: rhodecode/templates/journal/journal.html:219
+#: rhodecode/templates/journal/journal.html:322
+#: rhodecode/templates/tags/tags.html:76
 msgid "No records found."
 msgstr ""
 
-#: rhodecode/templates/index_base.html:210
-#: rhodecode/templates/index_base.html:294
-#: rhodecode/templates/admin/repos/repos.html:97
-#: rhodecode/templates/admin/users/user_edit_my_account.html:205
+#: rhodecode/templates/index_base.html:212
+#: rhodecode/templates/index_base.html:299
+#: rhodecode/templates/admin/repos/repos.html:100
+#: rhodecode/templates/admin/users/user_edit_my_account.html:199
 #: rhodecode/templates/admin/users/users.html:110
-#: rhodecode/templates/bookmarks/bookmarks.html:63
-#: rhodecode/templates/branches/branches.html:79
-#: rhodecode/templates/journal/journal.html:224
-#: rhodecode/templates/tags/tags.html:80
+#: rhodecode/templates/bookmarks/bookmarks.html:61
+#: rhodecode/templates/branches/branches.html:76
+#: rhodecode/templates/journal/journal.html:220
+#: rhodecode/templates/journal/journal.html:323
+#: rhodecode/templates/tags/tags.html:77
 msgid "Data error."
 msgstr ""
 
-#: rhodecode/templates/index_base.html:211
-#: rhodecode/templates/index_base.html:295
-#: rhodecode/templates/admin/repos/repos.html:98
-#: rhodecode/templates/admin/users/user_edit_my_account.html:206
+#: rhodecode/templates/index_base.html:213
+#: rhodecode/templates/index_base.html:300
+#: rhodecode/templates/admin/repos/repos.html:101
+#: rhodecode/templates/admin/users/user_edit_my_account.html:58
+#: rhodecode/templates/admin/users/user_edit_my_account.html:200
 #: rhodecode/templates/admin/users/users.html:111
-#: rhodecode/templates/bookmarks/bookmarks.html:64
-#: rhodecode/templates/branches/branches.html:80
-#: rhodecode/templates/journal/journal.html:62
-#: rhodecode/templates/journal/journal.html:225
-#: rhodecode/templates/tags/tags.html:81
+#: rhodecode/templates/bookmarks/bookmarks.html:62
+#: rhodecode/templates/branches/branches.html:77
+#: rhodecode/templates/journal/journal.html:221
+#: rhodecode/templates/journal/journal.html:324
+#: rhodecode/templates/tags/tags.html:78
 #, fuzzy
 msgid "Loading..."
 msgstr "載入中..."
 
-#: rhodecode/templates/login.html:5 rhodecode/templates/login.html:54
-msgid "Sign In"
+#: rhodecode/templates/index_base.html:298
+#, fuzzy
+msgid "No repositories found."
+msgstr "版本庫群組"
+
+#: rhodecode/templates/login.html:5 rhodecode/templates/base/base.html:227
+#, fuzzy
+msgid "Log In"
 msgstr "登入"
 
 #: rhodecode/templates/login.html:21
-msgid "Sign In to"
-msgstr "登入"
+#, python-format
+msgid "Log In to %s"
+msgstr ""
 
 #: rhodecode/templates/login.html:31 rhodecode/templates/register.html:20
 #: rhodecode/templates/admin/admin_log.html:5
 #: rhodecode/templates/admin/users/user_add.html:32
-#: rhodecode/templates/admin/users/user_edit.html:50
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:26
-#: rhodecode/templates/base/base.html:83
-#: rhodecode/templates/summary/summary.html:131
+#: rhodecode/templates/admin/users/user_edit.html:57
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:31
+#: rhodecode/templates/admin/users/users.html:77
+#: rhodecode/templates/base/base.html:203
+#: rhodecode/templates/summary/summary.html:123
 msgid "Username"
 msgstr "帳號"
 
 #: rhodecode/templates/login.html:40 rhodecode/templates/register.html:29
 #: rhodecode/templates/admin/ldap/ldap.html:46
 #: rhodecode/templates/admin/users/user_add.html:41
-#: rhodecode/templates/base/base.html:92
+#: rhodecode/templates/base/base.html:212
 msgid "Password"
 msgstr "密碼"
 
@@ -1534,17 +1751,22 @@
 msgid "Remember me"
 msgstr "成員"
 
+#: rhodecode/templates/login.html:54
+msgid "Sign In"
+msgstr "登入"
+
 #: rhodecode/templates/login.html:60
 msgid "Forgot your password ?"
 msgstr "忘記您的密碼?"
 
-#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:103
+#: rhodecode/templates/login.html:63 rhodecode/templates/base/base.html:223
 msgid "Don't have an account ?"
 msgstr "沒有帳號?"
 
 #: rhodecode/templates/password_reset.html:5
-msgid "Reset your password"
-msgstr "重設您的密碼"
+#, fuzzy
+msgid "Password Reset"
+msgstr "您的密碼重設連結已寄出"
 
 #: rhodecode/templates/password_reset.html:11
 msgid "Reset your password to"
@@ -1576,23 +1798,23 @@
 
 #: rhodecode/templates/register.html:47
 #: rhodecode/templates/admin/users/user_add.html:59
-#: rhodecode/templates/admin/users/user_edit.html:90
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:53
+#: rhodecode/templates/admin/users/user_edit.html:97
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:62
 msgid "First Name"
 msgstr "名"
 
 #: rhodecode/templates/register.html:56
 #: rhodecode/templates/admin/users/user_add.html:68
-#: rhodecode/templates/admin/users/user_edit.html:99
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:62
+#: rhodecode/templates/admin/users/user_edit.html:106
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:71
 msgid "Last Name"
 msgstr "姓"
 
 #: rhodecode/templates/register.html:65
 #: rhodecode/templates/admin/users/user_add.html:77
-#: rhodecode/templates/admin/users/user_edit.html:108
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:71
-#: rhodecode/templates/summary/summary.html:133
+#: rhodecode/templates/admin/users/user_edit.html:115
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:80
+#: rhodecode/templates/summary/summary.html:125
 msgid "Email"
 msgstr "電子郵件"
 
@@ -1604,44 +1826,31 @@
 msgid "Your account must wait for activation by administrator"
 msgstr "您的帳號註冊後將等待管理員啟用"
 
-#: rhodecode/templates/repo_switcher_list.html:11
+#: rhodecode/templates/repo_switcher_list.html:10
 #: rhodecode/templates/admin/defaults/defaults.html:44
 #: rhodecode/templates/admin/repos/repo_add_base.html:65
 #: rhodecode/templates/admin/repos/repo_edit.html:85
-#: rhodecode/templates/settings/repo_settings.html:76
+#: rhodecode/templates/data_table/_dt_elements.html:61
+#: rhodecode/templates/summary/summary.html:77
 msgid "Private repository"
 msgstr "私有的版本庫"
 
-#: rhodecode/templates/repo_switcher_list.html:16
+#: rhodecode/templates/repo_switcher_list.html:12
+#: rhodecode/templates/data_table/_dt_elements.html:63
+#: rhodecode/templates/summary/summary.html:79
 msgid "Public repository"
 msgstr "公開的版本庫"
 
-#: rhodecode/templates/switch_to_list.html:3
-#: rhodecode/templates/branches/branches.html:14
-msgid "branches"
-msgstr "分支"
-
 #: rhodecode/templates/switch_to_list.html:10
 #: rhodecode/templates/branches/branches_data.html:57
 msgid "There are no branches yet"
 msgstr "沒有任何分支"
 
-#: rhodecode/templates/switch_to_list.html:15
-#: rhodecode/templates/shortlog/shortlog_data.html:10
-#: rhodecode/templates/tags/tags.html:15
-msgid "tags"
-msgstr "標籤"
-
 #: rhodecode/templates/switch_to_list.html:22
 #: rhodecode/templates/tags/tags_data.html:38
 msgid "There are no tags yet"
 msgstr "沒有任何標籤"
 
-#: rhodecode/templates/switch_to_list.html:28
-#: rhodecode/templates/bookmarks/bookmarks.html:15
-msgid "bookmarks"
-msgstr ""
-
 #: rhodecode/templates/switch_to_list.html:35
 #: rhodecode/templates/bookmarks/bookmarks_data.html:32
 #, fuzzy
@@ -1650,6 +1859,7 @@
 
 #: rhodecode/templates/admin/admin.html:5
 #: rhodecode/templates/admin/admin.html:13
+#: rhodecode/templates/base/base.html:68
 msgid "Admin journal"
 msgstr "管理員日誌"
 
@@ -1672,11 +1882,13 @@
 msgstr[0] ""
 
 #: rhodecode/templates/admin/admin_log.html:6
-#: rhodecode/templates/admin/repos/repos.html:74
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:8
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:9
-#: rhodecode/templates/journal/journal_page_repos.html:9
-#: rhodecode/templates/journal/journal_page_repos.html:10
+#: rhodecode/templates/admin/repos/repos.html:77
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:46
+#: rhodecode/templates/admin/users/user_edit_my_account.html:176
+#: rhodecode/templates/admin/users/users.html:87
+#: rhodecode/templates/admin/users_groups/users_groups.html:37
+#: rhodecode/templates/journal/journal.html:197
+#: rhodecode/templates/journal/journal.html:300
 msgid "Action"
 msgstr "動作"
 
@@ -1686,11 +1898,11 @@
 msgstr "版本庫"
 
 #: rhodecode/templates/admin/admin_log.html:8
-#: rhodecode/templates/bookmarks/bookmarks.html:37
+#: rhodecode/templates/bookmarks/bookmarks.html:35
 #: rhodecode/templates/bookmarks/bookmarks_data.html:7
-#: rhodecode/templates/branches/branches.html:51
+#: rhodecode/templates/branches/branches.html:48
 #: rhodecode/templates/branches/branches_data.html:7
-#: rhodecode/templates/tags/tags.html:52
+#: rhodecode/templates/tags/tags.html:49
 #: rhodecode/templates/tags/tags_data.html:7
 msgid "Date"
 msgstr "時間"
@@ -1710,6 +1922,7 @@
 msgstr "版本庫群組"
 
 #: rhodecode/templates/admin/defaults/defaults.html:11
+#: rhodecode/templates/base/base.html:75
 #, fuzzy
 msgid "Defaults"
 msgstr "刪除"
@@ -1723,8 +1936,7 @@
 #: rhodecode/templates/admin/defaults/defaults.html:48
 #: rhodecode/templates/admin/repos/repo_add_base.html:69
 #: rhodecode/templates/admin/repos/repo_edit.html:89
-#: rhodecode/templates/forks/fork.html:72
-#: rhodecode/templates/settings/repo_settings.html:80
+#: rhodecode/templates/forks/fork.html:69
 msgid ""
 "Private repositories are only visible to people explicitly added as "
 "collaborators."
@@ -1752,7 +1964,7 @@
 
 #: rhodecode/templates/admin/defaults/defaults.html:75
 #: rhodecode/templates/admin/repos/repo_edit.html:112
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:66
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:72
 #, fuzzy
 msgid "Enable locking"
 msgstr "啟用"
@@ -1764,14 +1976,18 @@
 
 #: rhodecode/templates/admin/defaults/defaults.html:84
 #: rhodecode/templates/admin/ldap/ldap.html:89
-#: rhodecode/templates/admin/repos/repo_edit.html:141
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:74
+#: rhodecode/templates/admin/permissions/permissions.html:92
+#: rhodecode/templates/admin/repos/repo_edit.html:148
+#: rhodecode/templates/admin/repos/repo_edit.html:173
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:80
 #: rhodecode/templates/admin/settings/hooks.html:73
-#: rhodecode/templates/admin/users/user_edit.html:133
-#: rhodecode/templates/admin/users/user_edit.html:178
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:79
+#: rhodecode/templates/admin/users/user_add.html:94
+#: rhodecode/templates/admin/users/user_edit.html:140
+#: rhodecode/templates/admin/users/user_edit.html:185
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:88
+#: rhodecode/templates/admin/users_groups/users_group_add.html:49
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:90
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:135
-#: rhodecode/templates/settings/repo_settings.html:94
 msgid "Save"
 msgstr "儲存"
 
@@ -1780,7 +1996,9 @@
 msgstr "LDAP管理者"
 
 #: rhodecode/templates/admin/ldap/ldap.html:11
-msgid "Ldap"
+#: rhodecode/templates/admin/users/users.html:86
+#: rhodecode/templates/base/base.html:74
+msgid "LDAP"
 msgstr ""
 
 #: rhodecode/templates/admin/ldap/ldap.html:28
@@ -1862,8 +2080,7 @@
 msgstr "遞交"
 
 #: rhodecode/templates/admin/notifications/notifications.html:31
-#: rhodecode/templates/base/base.html:267
-#: rhodecode/templates/base/base.html:269
+#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8
 msgid "Pull requests"
 msgstr ""
 
@@ -1882,6 +2099,7 @@
 msgstr "險是註釋"
 
 #: rhodecode/templates/admin/notifications/show_notification.html:9
+#: rhodecode/templates/base/base.html:241
 #, fuzzy
 msgid "Notifications"
 msgstr "位置"
@@ -1891,11 +2109,12 @@
 msgstr "權限管理員"
 
 #: rhodecode/templates/admin/permissions/permissions.html:11
-#: rhodecode/templates/admin/repos/repo_edit.html:134
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:58
-#: rhodecode/templates/admin/users/user_edit.html:143
+#: rhodecode/templates/admin/repos/repo_edit.html:158
+#: rhodecode/templates/admin/repos/repo_edit.html:165
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:64
+#: rhodecode/templates/admin/users/user_edit.html:150
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:100
-#: rhodecode/templates/settings/repo_settings.html:86
+#: rhodecode/templates/base/base.html:73
 msgid "Permissions"
 msgstr "權限"
 
@@ -1909,30 +2128,22 @@
 
 #: rhodecode/templates/admin/permissions/permissions.html:49
 msgid ""
-"All default permissions on each repository will be reset to choosen "
+"All default permissions on each repository will be reset to chosen "
 "permission, note that all custom default permission on repositories will "
 "be lost"
 msgstr ""
 
 #: rhodecode/templates/admin/permissions/permissions.html:50
 #: rhodecode/templates/admin/permissions/permissions.html:63
-msgid "overwrite existing settings"
+#, fuzzy
+msgid "Overwrite existing settings"
 msgstr "複寫已存在設定"
 
-#: rhodecode/templates/admin/permissions/permissions.html:55
-#: rhodecode/templates/admin/repos/repo_add_base.html:29
-#: rhodecode/templates/admin/repos/repo_edit.html:49
-#: rhodecode/templates/admin/repos_groups/repos_groups.html:4
-#: rhodecode/templates/forks/fork.html:50
-#: rhodecode/templates/settings/repo_settings.html:48
-msgid "Repository group"
-msgstr "版本庫群組"
-
 #: rhodecode/templates/admin/permissions/permissions.html:62
 msgid ""
-"All default permissions on each repository group will be reset to choosen"
-" permission, note that all custom default permission on repositories "
-"group will be lost"
+"All default permissions on each repository group will be reset to chosen "
+"permission, note that all custom default permission on repository groups "
+"will be lost"
 msgstr ""
 
 #: rhodecode/templates/admin/permissions/permissions.html:69
@@ -1948,40 +2159,100 @@
 msgid "Repository forking"
 msgstr "版本庫建立"
 
-#: rhodecode/templates/admin/permissions/permissions.html:92
-#: rhodecode/templates/admin/repos/repo_edit.html:264
-msgid "set"
-msgstr "設定"
-
-#: rhodecode/templates/admin/repos/repo_add.html:5
-#: rhodecode/templates/admin/repos/repo_add_create_repository.html:5
-msgid "Add repository"
-msgstr "新增版本庫"
-
-#: rhodecode/templates/admin/repos/repo_add.html:11
-#: rhodecode/templates/admin/repos/repo_edit.html:11
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:10
+#: rhodecode/templates/admin/permissions/permissions.html:93
+#: rhodecode/templates/admin/permissions/permissions.html:154
+#: rhodecode/templates/admin/repos/repo_edit.html:149
+#: rhodecode/templates/admin/repos/repo_edit.html:174
+#: rhodecode/templates/admin/repos/repo_edit.html:388
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:81
+#: rhodecode/templates/admin/settings/settings.html:115
+#: rhodecode/templates/admin/settings/settings.html:187
+#: rhodecode/templates/admin/settings/settings.html:278
+#: rhodecode/templates/admin/users/user_edit.html:141
+#: rhodecode/templates/admin/users/user_edit.html:186
+#: rhodecode/templates/admin/users/user_edit.html:235
+#: rhodecode/templates/admin/users/user_edit.html:283
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:89
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:136
+#: rhodecode/templates/files/files_add.html:80
+#: rhodecode/templates/files/files_edit.html:66
+#: rhodecode/templates/pullrequests/pullrequest.html:110
+msgid "Reset"
+msgstr "重設"
+
+#: rhodecode/templates/admin/permissions/permissions.html:103
+#, fuzzy
+msgid "Default User Permissions"
+msgstr "預設權限"
+
+#: rhodecode/templates/admin/permissions/permissions.html:113
+#: rhodecode/templates/admin/users/user_edit.html:244
+#, fuzzy
+msgid "Allowed IP addresses"
+msgstr "郵件位址"
+
+#: rhodecode/templates/admin/permissions/permissions.html:127
+#: rhodecode/templates/admin/repos/repo_edit.html:347
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:70
+#: rhodecode/templates/admin/users/user_edit.html:212
+#: rhodecode/templates/admin/users/user_edit.html:257
+#: rhodecode/templates/admin/users_groups/users_groups.html:46
+#: rhodecode/templates/data_table/_dt_elements.html:122
+#: rhodecode/templates/data_table/_dt_elements.html:130
+msgid "delete"
+msgstr "刪除"
+
+#: rhodecode/templates/admin/permissions/permissions.html:128
+#: rhodecode/templates/admin/users/user_edit.html:258
+#, fuzzy, python-format
+msgid "Confirm to delete this ip: %s"
+msgstr "確認刪除這個使用者"
+
+#: rhodecode/templates/admin/permissions/permissions.html:134
+#: rhodecode/templates/admin/users/user_edit.html:264
+msgid "All IP addresses are allowed"
+msgstr ""
+
+#: rhodecode/templates/admin/permissions/permissions.html:145
+#: rhodecode/templates/admin/users/user_edit.html:275
+#, fuzzy
+msgid "New ip address"
+msgstr "郵件位址"
+
+#: rhodecode/templates/admin/permissions/permissions.html:153
+#: rhodecode/templates/admin/repos/repo_add_base.html:73
+#: rhodecode/templates/admin/repos/repo_edit.html:387
+#: rhodecode/templates/admin/users/user_edit.html:234
+#: rhodecode/templates/admin/users/user_edit.html:282
+#, fuzzy
+msgid "Add"
+msgstr "新增"
+
+#: rhodecode/templates/admin/repos/repo_add.html:12
+#: rhodecode/templates/admin/repos/repo_add.html:16
+#: rhodecode/templates/base/base.html:69 rhodecode/templates/base/base.html:103
+#: rhodecode/templates/base/base.html:263
 msgid "Repositories"
 msgstr "版本庫"
 
-#: rhodecode/templates/admin/repos/repo_add.html:13
-msgid "add new"
+#: rhodecode/templates/admin/repos/repo_add.html:19
+#, fuzzy
+msgid "Add new"
 msgstr "新增"
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:20
-#: rhodecode/templates/summary/summary.html:104
-#: rhodecode/templates/summary/summary.html:105
+#: rhodecode/templates/summary/summary.html:96
+#: rhodecode/templates/summary/summary.html:97
 msgid "Clone from"
 msgstr "複製由"
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:24
 #: rhodecode/templates/admin/repos/repo_edit.html:44
-#: rhodecode/templates/settings/repo_settings.html:43
 msgid "Optional http[s] url from which repository should be cloned."
 msgstr ""
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:33
-#: rhodecode/templates/forks/fork.html:54
+#: rhodecode/templates/forks/fork.html:51
 msgid "Optionaly select a group to put this repository into."
 msgstr ""
 
@@ -1992,58 +2263,40 @@
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:47
 #: rhodecode/templates/admin/repos/repo_edit.html:66
-#: rhodecode/templates/forks/fork.html:41
-#: rhodecode/templates/settings/repo_settings.html:57
+#: rhodecode/templates/forks/fork.html:38
 #, fuzzy
 msgid "Landing revision"
 msgstr "下一個修訂"
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:51
 #: rhodecode/templates/admin/repos/repo_edit.html:70
-#: rhodecode/templates/forks/fork.html:45
-#: rhodecode/templates/settings/repo_settings.html:61
+#: rhodecode/templates/forks/fork.html:42
 msgid "Default revision for files page, downloads, whoosh and readme"
 msgstr ""
 
 #: rhodecode/templates/admin/repos/repo_add_base.html:60
 #: rhodecode/templates/admin/repos/repo_edit.html:79
-#: rhodecode/templates/forks/fork.html:63
-#: rhodecode/templates/settings/repo_settings.html:70
+#: rhodecode/templates/forks/fork.html:60
 msgid "Keep it short and to the point. Use a README file for longer descriptions."
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_add_base.html:73
-msgid "add"
-msgstr "新增"
-
-#: rhodecode/templates/admin/repos/repo_add_create_repository.html:9
-msgid "add new repository"
-msgstr "新增版本庫"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:5
+#: rhodecode/templates/admin/repos/repo_edit.html:8
 msgid "Edit repository"
 msgstr "編輯版本庫"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:13
-#: rhodecode/templates/admin/users/user_edit.html:13
-#: rhodecode/templates/admin/users/user_edit.html:228
-#: rhodecode/templates/admin/users/user_edit.html:230
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:28
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:13
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:207
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:209
-#: rhodecode/templates/files/files_source.html:29
-#: rhodecode/templates/journal/journal_page_repos.html:29
-msgid "edit"
-msgstr "編輯"
+#: rhodecode/templates/admin/repos/repo_edit.html:12
+#: rhodecode/templates/admin/settings/hooks.html:9
+#: rhodecode/templates/admin/settings/settings.html:11
+#: rhodecode/templates/base/base.html:76 rhodecode/templates/base/base.html:121
+#: rhodecode/templates/summary/summary.html:212
+msgid "Settings"
+msgstr "設定"
 
 #: rhodecode/templates/admin/repos/repo_edit.html:40
-#: rhodecode/templates/settings/repo_settings.html:39
 msgid "Clone uri"
 msgstr "複製URL"
 
 #: rhodecode/templates/admin/repos/repo_edit.html:53
-#: rhodecode/templates/settings/repo_settings.html:52
 msgid "Optional select a group to put this repository into."
 msgstr ""
 
@@ -2052,179 +2305,211 @@
 msgid "Change owner of this repository."
 msgstr "修改於版本庫 %s"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:142
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:75
-#: rhodecode/templates/admin/settings/settings.html:113
-#: rhodecode/templates/admin/settings/settings.html:179
-#: rhodecode/templates/admin/settings/settings.html:269
-#: rhodecode/templates/admin/users/user_edit.html:134
-#: rhodecode/templates/admin/users/user_edit.html:179
-#: rhodecode/templates/admin/users/user_edit.html:282
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:80
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:136
-#: rhodecode/templates/files/files_add.html:82
-#: rhodecode/templates/files/files_edit.html:68
-#: rhodecode/templates/pullrequests/pullrequest.html:124
-#: rhodecode/templates/settings/repo_settings.html:95
-msgid "Reset"
-msgstr "重設"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:152
-msgid "Administration"
-msgstr "管理者"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:155
+#: rhodecode/templates/admin/repos/repo_edit.html:184
+#, fuzzy
+msgid "Advanced settings"
+msgstr "儲存設定"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:187
 msgid "Statistics"
 msgstr "統計"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:159
+#: rhodecode/templates/admin/repos/repo_edit.html:191
 msgid "Reset current statistics"
 msgstr "重設目前的統計"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:159
+#: rhodecode/templates/admin/repos/repo_edit.html:191
 msgid "Confirm to remove current statistics"
 msgstr "確認移除目前的統計"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:162
+#: rhodecode/templates/admin/repos/repo_edit.html:194
 msgid "Fetched to rev"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:163
+#: rhodecode/templates/admin/repos/repo_edit.html:195
 msgid "Stats gathered"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:171
-msgid "Remote"
-msgstr "遠端"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:175
-msgid "Pull changes from remote location"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:175
-msgid "Confirm to pull changes from remote side"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:186
-msgid "Cache"
-msgstr "快取"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:190
-msgid "Invalidate repository cache"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:190
-msgid "Confirm to invalidate repository cache"
-msgstr "確認廢止版本庫快取"
-
-#: rhodecode/templates/admin/repos/repo_edit.html:193
-msgid ""
-"Manually invalidate cache for this repository. On first access repository"
-" will be cached again"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:198
-msgid "List of cached values"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:201
-msgid "Prefix"
-msgstr ""
-
-#: rhodecode/templates/admin/repos/repo_edit.html:202
-msgid "Key"
-msgstr ""
-
 #: rhodecode/templates/admin/repos/repo_edit.html:203
-#: rhodecode/templates/admin/users/user_add.html:86
-#: rhodecode/templates/admin/users/user_edit.html:117
-#: rhodecode/templates/admin/users_groups/users_group_add.html:41
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:42
-msgid "Active"
-msgstr "啟用"
+msgid "Remote"
+msgstr "遠端"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:207
+msgid "Pull changes from remote location"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:207
+msgid "Confirm to pull changes from remote side"
+msgstr ""
 
 #: rhodecode/templates/admin/repos/repo_edit.html:218
-#: rhodecode/templates/base/base.html:331
-#: rhodecode/templates/base/base.html:333
-#: rhodecode/templates/base/base.html:335
+msgid "Cache"
+msgstr "快取"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:222
+msgid "Invalidate repository cache"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:222
+msgid "Confirm to invalidate repository cache"
+msgstr "確認廢止版本庫快取"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:225
+msgid ""
+"Manually invalidate cache for this repository. On first access repository"
+" will be cached again"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:230
+msgid "List of cached values"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:233
+msgid "Prefix"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:234
+msgid "Key"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:235
+#: rhodecode/templates/admin/users/user_add.html:86
+#: rhodecode/templates/admin/users/user_edit.html:124
+#: rhodecode/templates/admin/users/users.html:84
+#: rhodecode/templates/admin/users_groups/users_group_add.html:41
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:42
+#: rhodecode/templates/admin/users_groups/users_groups.html:36
+msgid "Active"
+msgstr "啟用"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:250
+#: rhodecode/templates/base/base.html:280
+#: rhodecode/templates/base/base.html:281
 msgid "Public journal"
 msgstr "公開日誌"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:224
+#: rhodecode/templates/admin/repos/repo_edit.html:256
 msgid "Remove from public journal"
 msgstr "從公開日誌移除"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:226
+#: rhodecode/templates/admin/repos/repo_edit.html:258
 msgid "Add to public journal"
 msgstr "新增至公開日誌"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:231
+#: rhodecode/templates/admin/repos/repo_edit.html:263
 msgid ""
 "All actions made on this repository will be accessible to everyone in "
 "public journal"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:238
+#: rhodecode/templates/admin/repos/repo_edit.html:270
 #, fuzzy
 msgid "Locking"
 msgstr "解鎖"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:243
+#: rhodecode/templates/admin/repos/repo_edit.html:275
 msgid "Unlock locked repo"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:243
+#: rhodecode/templates/admin/repos/repo_edit.html:275
 #, fuzzy
 msgid "Confirm to unlock repository"
 msgstr "確認移除這個版本庫"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:246
+#: rhodecode/templates/admin/repos/repo_edit.html:278
 msgid "lock repo"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:246
+#: rhodecode/templates/admin/repos/repo_edit.html:278
 #, fuzzy
 msgid "Confirm to lock repository"
 msgstr "確認移除這個版本庫"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:247
+#: rhodecode/templates/admin/repos/repo_edit.html:279
 #, fuzzy
 msgid "Repository is not locked"
 msgstr "個版本庫"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:252
+#: rhodecode/templates/admin/repos/repo_edit.html:284
 msgid "Force locking on repository. Works only when anonymous access is disabled"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:259
+#: rhodecode/templates/admin/repos/repo_edit.html:291
 msgid "Set as fork of"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:268
+#: rhodecode/templates/admin/repos/repo_edit.html:296
+msgid "set"
+msgstr "設定"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:300
 msgid "Manually set this repository as a fork of another from the list"
 msgstr ""
 
-#: rhodecode/templates/admin/repos/repo_edit.html:274
-#: rhodecode/templates/changeset/changeset_file_comment.html:26
+#: rhodecode/templates/admin/repos/repo_edit.html:306
+#: rhodecode/templates/changeset/changeset_file_comment.html:41
 msgid "Delete"
 msgstr "移除"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:278
-#: rhodecode/templates/settings/repo_settings.html:115
+#: rhodecode/templates/admin/repos/repo_edit.html:315
 msgid "Remove this repository"
 msgstr "移除版本庫"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:278
-#: rhodecode/templates/settings/repo_settings.html:115
+#: rhodecode/templates/admin/repos/repo_edit.html:315
 msgid "Confirm to delete this repository"
 msgstr "確認移除這個版本庫"
 
-#: rhodecode/templates/admin/repos/repo_edit.html:282
-#: rhodecode/templates/settings/repo_settings.html:119
+#: rhodecode/templates/admin/repos/repo_edit.html:317
+#, fuzzy, python-format
+msgid "this repository has %s fork"
+msgid_plural "this repository has %s forks"
+msgstr[0] "建立版本庫 %s"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:318
+msgid "Detach forks"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:319
+#, fuzzy
+msgid "Delete forks"
+msgstr "刪除"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:322
 msgid ""
 "This repository will be renamed in a special way in order to be "
-"unaccesible for RhodeCode and VCS systems. If you need fully delete it "
-"from file system please do it manually"
+"unaccesible for RhodeCode and VCS systems. If you need to fully delete it"
+" from file system please do it manually"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:336
+msgid "Extra fields"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:348
+#, fuzzy, python-format
+msgid "Confirm to delete this field: %s"
+msgstr "確認刪除這個使用者"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:362
+#, fuzzy
+msgid "New field key"
+msgstr "新增使用者"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:370
+msgid "New field label"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:373
+msgid "Enter short label"
+msgstr ""
+
+#: rhodecode/templates/admin/repos/repo_edit.html:379
+#, fuzzy
+msgid "New field description"
+msgstr "描述"
+
+#: rhodecode/templates/admin/repos/repo_edit.html:382
+msgid "Enter description of a field"
 msgstr ""
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:3
@@ -2244,8 +2529,6 @@
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:6
 #: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:6
-#: rhodecode/templates/admin/users/users.html:85
-#: rhodecode/templates/base/base.html:229
 msgid "admin"
 msgstr "管理員"
 
@@ -2255,79 +2538,60 @@
 msgstr "成員"
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:16
-#: rhodecode/templates/data_table/_dt_elements.html:67
-#: rhodecode/templates/journal/journal.html:95
-#: rhodecode/templates/summary/summary.html:85
 msgid "private repository"
 msgstr "私有版本庫"
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:19
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:28
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:18
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:20
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:35
 #, fuzzy
 msgid "default"
 msgstr "刪除"
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:33
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:58
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:23
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:42
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:25
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:55
 msgid "revoke"
 msgstr ""
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:83
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:67
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:80
 msgid "Add another member"
 msgstr "新增另ㄧ位成員"
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:97
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:100
 msgid "Failed to remove user"
 msgstr "移除使用者失敗"
 
 #: rhodecode/templates/admin/repos/repo_edit_perms.html:112
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:103
-msgid "Failed to remove users group"
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:116
+#, fuzzy
+msgid "Failed to remove user group"
 msgstr "移除使用者群組失敗"
 
 #: rhodecode/templates/admin/repos/repos.html:5
 msgid "Repositories administration"
 msgstr "版本庫管理員"
 
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:73
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:86
 msgid "apply to children"
 msgstr ""
 
-#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:74
+#: rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html:87
 msgid ""
-"Set or revoke permission to all children of that group, including "
-"repositories and other groups"
+"Set or revoke permission to all children of that group, including non-"
+"private repositories and other groups"
+msgstr ""
+
+#: rhodecode/templates/admin/repos_groups/repos_groups.html:4
+#, python-format
+msgid "%s Group Dashboard"
 msgstr ""
 
 #: rhodecode/templates/admin/repos_groups/repos_groups.html:9
-#: rhodecode/templates/base/base.html:122
-#: rhodecode/templates/base/base.html:313
-#: rhodecode/templates/base/base.html:315
-#: rhodecode/templates/base/base.html:317
-#: rhodecode/templates/bookmarks/bookmarks.html:11
-#: rhodecode/templates/branches/branches.html:10
-#: rhodecode/templates/changelog/changelog.html:10
-#: rhodecode/templates/changeset/changeset.html:10
-#: rhodecode/templates/changeset/changeset_range.html:9
-#: rhodecode/templates/compare/compare_diff.html:9
-#: rhodecode/templates/files/file_diff.html:8
-#: rhodecode/templates/files/files.html:8
-#: rhodecode/templates/files/files_add.html:15
-#: rhodecode/templates/files/files_edit.html:15
-#: rhodecode/templates/followers/followers.html:9
-#: rhodecode/templates/forks/fork.html:9 rhodecode/templates/forks/forks.html:9
-#: rhodecode/templates/pullrequests/pullrequest.html:8
-#: rhodecode/templates/pullrequests/pullrequest_show.html:8
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:8
-#: rhodecode/templates/settings/repo_settings.html:9
-#: rhodecode/templates/shortlog/shortlog.html:10
-#: rhodecode/templates/summary/summary.html:8
-#: rhodecode/templates/tags/tags.html:11
 msgid "Home"
 msgstr "首頁"
 
@@ -2336,80 +2600,86 @@
 msgstr ""
 
 #: rhodecode/templates/admin/repos_groups/repos_groups_add.html:5
-msgid "Add repos group"
-msgstr "新增版本庫群組"
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:10
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:10
-msgid "Repos groups"
+#, fuzzy
+msgid "Add repository group"
 msgstr "版本庫群組"
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:12
-msgid "add new repos group"
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:11
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:11
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:16
+#: rhodecode/templates/base/base.html:70 rhodecode/templates/base/base.html:82
+#, fuzzy
+msgid "Repository groups"
+msgstr "版本庫群組"
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:13
+#, fuzzy
+msgid "Add new repository group"
 msgstr "新增版本庫群組"
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:50
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:50
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:51
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:56
 msgid "Group parent"
 msgstr "父群組"
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:58
-#: rhodecode/templates/admin/users/user_add.html:94
-#: rhodecode/templates/admin/users_groups/users_group_add.html:49
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:90
-#: rhodecode/templates/pullrequests/pullrequest_show.html:131
+#: rhodecode/templates/admin/repos_groups/repos_groups_add.html:59
 msgid "save"
 msgstr "儲存"
 
 #: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:5
-msgid "Edit repos group"
+#, fuzzy
+msgid "Edit repository group"
+msgstr "編輯版本庫群組"
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:13
+#, fuzzy, python-format
+msgid "Edit repository group %s"
 msgstr "編輯版本庫群組"
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:12
-msgid "edit repos group"
-msgstr "編輯版本庫群組"
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:70
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:27
+#, fuzzy
+msgid "Add child group"
+msgstr "新增使用者群組"
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_edit.html:76
 msgid ""
 "Enable lock-by-pulling on group. This option will be applied to all other"
 " groups and repositories inside"
 msgstr ""
 
 #: rhodecode/templates/admin/repos_groups/repos_groups_show.html:5
-msgid "Repositories groups administration"
+#, fuzzy
+msgid "Repository groups administration"
 msgstr "版本庫群組管理員"
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:22
-msgid "ADD NEW GROUP"
-msgstr "新增群組"
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:35
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:45
 #, fuzzy
 msgid "Number of toplevel repositories"
 msgstr "版本庫數量"
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:36
-#: rhodecode/templates/admin/users/users.html:87
-#: rhodecode/templates/admin/users_groups/users_groups.html:35
-msgid "action"
-msgstr "動作"
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55
-#: rhodecode/templates/admin/users/user_edit.html:259
-#: rhodecode/templates/admin/users_groups/users_groups.html:44
-#: rhodecode/templates/data_table/_dt_elements.html:7
-#: rhodecode/templates/data_table/_dt_elements.html:121
-msgid "delete"
-msgstr "刪除"
-
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:55
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:64
+#, fuzzy
+msgid "Edit"
+msgstr "編輯"
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:65
+#: rhodecode/templates/base/perms_summary.html:29
+#: rhodecode/templates/base/perms_summary.html:48
+#: rhodecode/templates/base/perms_summary.html:50
+#: rhodecode/templates/data_table/_dt_elements.html:116
+#: rhodecode/templates/data_table/_dt_elements.html:117
+msgid "edit"
+msgstr "編輯"
+
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:70
 #, fuzzy, python-format
 msgid "Confirm to delete this group: %s with %s repository"
 msgid_plural "Confirm to delete this group: %s with %s repositories"
 msgstr[0] "確認移除這個版本庫"
 
-#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:63
-msgid "There are no repositories groups yet"
+#: rhodecode/templates/admin/repos_groups/repos_groups_show.html:78
+#, fuzzy
+msgid "There are no repository groups yet"
 msgstr "沒有任何版本庫群組"
 
 #: rhodecode/templates/admin/settings/hooks.html:5
@@ -2417,12 +2687,6 @@
 msgid "Settings administration"
 msgstr "設定管理員"
 
-#: rhodecode/templates/admin/settings/hooks.html:9
-#: rhodecode/templates/admin/settings/settings.html:9
-#: rhodecode/templates/settings/repo_settings.html:13
-msgid "Settings"
-msgstr "設定"
-
 #: rhodecode/templates/admin/settings/hooks.html:24
 msgid "Built in hooks - read only"
 msgstr "內建hook - 唯讀"
@@ -2439,216 +2703,227 @@
 msgid "Failed to remove hook"
 msgstr "移除hook失敗"
 
-#: rhodecode/templates/admin/settings/settings.html:24
+#: rhodecode/templates/admin/settings/settings.html:26
 msgid "Remap and rescan repositories"
 msgstr "重新對映與掃描版本庫"
 
-#: rhodecode/templates/admin/settings/settings.html:32
-msgid "rescan option"
+#: rhodecode/templates/admin/settings/settings.html:34
+#, fuzzy
+msgid "Rescan option"
 msgstr "重新掃描選項"
 
-#: rhodecode/templates/admin/settings/settings.html:38
+#: rhodecode/templates/admin/settings/settings.html:40
 msgid ""
 "In case a repository was deleted from filesystem and there are leftovers "
 "in the database check this option to scan obsolete data in database and "
 "remove it."
 msgstr "如果版本庫已從檔案系統中刪除,但是資料還留在資料庫,請勾選這個項目清理資料庫中舊的資料"
 
-#: rhodecode/templates/admin/settings/settings.html:39
-msgid "destroy old data"
+#: rhodecode/templates/admin/settings/settings.html:41
+#, fuzzy
+msgid "Destroy old data"
 msgstr "移除舊資料"
 
-#: rhodecode/templates/admin/settings/settings.html:41
+#: rhodecode/templates/admin/settings/settings.html:43
 msgid ""
 "Rescan repositories location for new repositories. Also deletes obsolete "
 "if `destroy` flag is checked "
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:46
+#: rhodecode/templates/admin/settings/settings.html:48
 msgid "Rescan repositories"
 msgstr "重新掃描版本庫"
 
-#: rhodecode/templates/admin/settings/settings.html:52
+#: rhodecode/templates/admin/settings/settings.html:54
 msgid "Whoosh indexing"
 msgstr "Whoosh 索引"
 
-#: rhodecode/templates/admin/settings/settings.html:60
-msgid "index build option"
+#: rhodecode/templates/admin/settings/settings.html:62
+#, fuzzy
+msgid "Index build option"
 msgstr "索引選項"
 
-#: rhodecode/templates/admin/settings/settings.html:65
-msgid "build from scratch"
+#: rhodecode/templates/admin/settings/settings.html:67
+#, fuzzy
+msgid "Build from scratch"
 msgstr "重頭建立索引"
 
-#: rhodecode/templates/admin/settings/settings.html:71
+#: rhodecode/templates/admin/settings/settings.html:73
 msgid "Reindex"
 msgstr "重新索引"
 
-#: rhodecode/templates/admin/settings/settings.html:77
+#: rhodecode/templates/admin/settings/settings.html:79
 msgid "Global application settings"
 msgstr "全域設定"
 
-#: rhodecode/templates/admin/settings/settings.html:86
-msgid "Application name"
-msgstr "應用名稱"
-
-#: rhodecode/templates/admin/settings/settings.html:95
-msgid "Realm text"
-msgstr ""
-
-#: rhodecode/templates/admin/settings/settings.html:104
-msgid "GA code"
-msgstr ""
-
-#: rhodecode/templates/admin/settings/settings.html:112
-#: rhodecode/templates/admin/settings/settings.html:178
-#: rhodecode/templates/admin/settings/settings.html:268
+#: rhodecode/templates/admin/settings/settings.html:88
+msgid "Site branding"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:97
+msgid "HTTP authentication realm"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:106
+msgid "Google Analytics code"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:114
+#: rhodecode/templates/admin/settings/settings.html:186
+#: rhodecode/templates/admin/settings/settings.html:277
 msgid "Save settings"
 msgstr "儲存設定"
 
-#: rhodecode/templates/admin/settings/settings.html:119
+#: rhodecode/templates/admin/settings/settings.html:121
 #, fuzzy
 msgid "Visualisation settings"
 msgstr "全域設定"
 
-#: rhodecode/templates/admin/settings/settings.html:127
+#: rhodecode/templates/admin/settings/settings.html:129
 #, fuzzy
 msgid "General"
 msgstr "啟用"
 
-#: rhodecode/templates/admin/settings/settings.html:132
+#: rhodecode/templates/admin/settings/settings.html:134
 msgid "Use lightweight dashboard"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:139
+#: rhodecode/templates/admin/settings/settings.html:140
+#, fuzzy
+msgid "Use repository extra fields"
+msgstr "個版本庫"
+
+#: rhodecode/templates/admin/settings/settings.html:147
 #, fuzzy
 msgid "Icons"
 msgstr "選項"
 
-#: rhodecode/templates/admin/settings/settings.html:144
+#: rhodecode/templates/admin/settings/settings.html:152
 msgid "Show public repo icon on repositories"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:148
+#: rhodecode/templates/admin/settings/settings.html:156
 #, fuzzy
 msgid "Show private repo icon on repositories"
 msgstr "私有版本庫"
 
-#: rhodecode/templates/admin/settings/settings.html:155
+#: rhodecode/templates/admin/settings/settings.html:163
 #, fuzzy
 msgid "Meta-Tagging"
 msgstr "設定"
 
-#: rhodecode/templates/admin/settings/settings.html:160
+#: rhodecode/templates/admin/settings/settings.html:168
 msgid "Stylify recognised metatags:"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:187
+#: rhodecode/templates/admin/settings/settings.html:195
 #, fuzzy
 msgid "VCS settings"
 msgstr "設定"
 
-#: rhodecode/templates/admin/settings/settings.html:196
+#: rhodecode/templates/admin/settings/settings.html:204
 msgid "Web"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:201
-#, fuzzy
-msgid "require ssl for vcs operations"
-msgstr "推送時要求使用SSL"
-
-#: rhodecode/templates/admin/settings/settings.html:203
-msgid ""
-"RhodeCode will require SSL for pushing or pulling. If SSL is missing it "
-"will return HTTP Error 406: Not Acceptable"
-msgstr ""
-
 #: rhodecode/templates/admin/settings/settings.html:209
+#, fuzzy
+msgid "Require SSL for vcs operations"
+msgstr "推送時要求使用SSL"
+
+#: rhodecode/templates/admin/settings/settings.html:211
+msgid ""
+"RhodeCode will require SSL for pushing or pulling. If SSL is missing it "
+"will return HTTP Error 406: Not Acceptable"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:217
 msgid "Hooks"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:214
-msgid "Update repository after push (hg update)"
-msgstr "push後更新版本庫 (hg update)"
-
-#: rhodecode/templates/admin/settings/settings.html:218
-msgid "Show repository size after push"
-msgstr "push 後顯示版本庫大小"
-
 #: rhodecode/templates/admin/settings/settings.html:222
+msgid "Update repository after push (hg update)"
+msgstr "push後更新版本庫 (hg update)"
+
+#: rhodecode/templates/admin/settings/settings.html:226
+msgid "Show repository size after push"
+msgstr "push 後顯示版本庫大小"
+
+#: rhodecode/templates/admin/settings/settings.html:230
 msgid "Log user push commands"
 msgstr "紀錄使用者推送命令"
 
-#: rhodecode/templates/admin/settings/settings.html:226
+#: rhodecode/templates/admin/settings/settings.html:234
 msgid "Log user pull commands"
 msgstr "紀錄使用者抓取命令"
 
-#: rhodecode/templates/admin/settings/settings.html:230
-msgid "advanced setup"
+#: rhodecode/templates/admin/settings/settings.html:238
+#, fuzzy
+msgid "Advanced setup"
 msgstr "進階設定"
 
-#: rhodecode/templates/admin/settings/settings.html:235
+#: rhodecode/templates/admin/settings/settings.html:243
 #, fuzzy
 msgid "Mercurial Extensions"
 msgstr "Mercurial 版本庫"
 
-#: rhodecode/templates/admin/settings/settings.html:240
-msgid "largefiles extensions"
-msgstr ""
-
-#: rhodecode/templates/admin/settings/settings.html:244
-msgid "hgsubversion extensions"
-msgstr ""
-
-#: rhodecode/templates/admin/settings/settings.html:246
+#: rhodecode/templates/admin/settings/settings.html:248
+msgid "Enable largefiles extension"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:252
+msgid "Enable hgsubversion extension"
+msgstr ""
+
+#: rhodecode/templates/admin/settings/settings.html:254
 msgid ""
-"Requires hgsubversion library installed. Allows clonning from svn remote "
+"Requires hgsubversion library installed. Allows cloning from svn remote "
 "locations"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:256
+#: rhodecode/templates/admin/settings/settings.html:264
 msgid "Repositories location"
 msgstr "版本庫路徑"
 
-#: rhodecode/templates/admin/settings/settings.html:261
+#: rhodecode/templates/admin/settings/settings.html:269
 msgid ""
 "This a crucial application setting. If you are really sure you need to "
 "change this, you must restart application in order to make this setting "
 "take effect. Click this label to unlock."
 msgstr "這是一個關鍵的設定,如果您確定要修改這個設定,請重新啟動應用程式以套用設定"
 
-#: rhodecode/templates/admin/settings/settings.html:262
-#: rhodecode/templates/base/base.html:221
-msgid "unlock"
+#: rhodecode/templates/admin/settings/settings.html:270
+#: rhodecode/templates/base/base.html:131
+#, fuzzy
+msgid "Unlock"
 msgstr "解鎖"
 
-#: rhodecode/templates/admin/settings/settings.html:263
+#: rhodecode/templates/admin/settings/settings.html:272
 msgid ""
 "Location where repositories are stored. After changing this value a "
 "restart, and rescan is required"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:283
+#: rhodecode/templates/admin/settings/settings.html:292
 msgid "Test Email"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:291
+#: rhodecode/templates/admin/settings/settings.html:300
 #, fuzzy
 msgid "Email to"
 msgstr "電子郵件"
 
-#: rhodecode/templates/admin/settings/settings.html:299
+#: rhodecode/templates/admin/settings/settings.html:308
 #, fuzzy
 msgid "Send"
 msgstr "秒"
 
-#: rhodecode/templates/admin/settings/settings.html:305
+#: rhodecode/templates/admin/settings/settings.html:314
 msgid "System Info and Packages"
 msgstr ""
 
-#: rhodecode/templates/admin/settings/settings.html:308
-#, fuzzy
-msgid "show"
+#: rhodecode/templates/admin/settings/settings.html:317
+#: rhodecode/templates/changelog/changelog.html:42
+msgid "Show"
 msgstr "顯示"
 
 #: rhodecode/templates/admin/users/user_add.html:5
@@ -2657,11 +2932,14 @@
 
 #: rhodecode/templates/admin/users/user_add.html:10
 #: rhodecode/templates/admin/users/user_edit.html:11
+#: rhodecode/templates/base/base.html:71
 msgid "Users"
 msgstr "使用者"
 
 #: rhodecode/templates/admin/users/user_add.html:12
-msgid "add new user"
+#: rhodecode/templates/admin/users/users.html:23
+#, fuzzy
+msgid "Add new user"
 msgstr "新增使用者"
 
 #: rhodecode/templates/admin/users/user_add.html:50
@@ -2673,6 +2951,12 @@
 msgid "Edit user"
 msgstr "編輯使用者"
 
+#: rhodecode/templates/admin/users/user_edit.html:13
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:13
+#, fuzzy, python-format
+msgid "Edit %s"
+msgstr "編輯"
+
 #: rhodecode/templates/admin/users/user_edit.html:34
 #: rhodecode/templates/admin/users/user_edit_my_account_form.html:10
 msgid "Change your avatar at"
@@ -2688,27 +2972,32 @@
 msgid "API key"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit.html:63
+#: rhodecode/templates/admin/users/user_edit.html:50
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:25
+msgid "Current IP"
+msgstr ""
+
+#: rhodecode/templates/admin/users/user_edit.html:70
 msgid "LDAP DN"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit.html:72
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:35
+#: rhodecode/templates/admin/users/user_edit.html:79
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44
 msgid "New password"
 msgstr "新密碼"
 
-#: rhodecode/templates/admin/users/user_edit.html:81
-#: rhodecode/templates/admin/users/user_edit_my_account_form.html:44
+#: rhodecode/templates/admin/users/user_edit.html:88
+#: rhodecode/templates/admin/users/user_edit_my_account_form.html:53
 msgid "New password confirmation"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit.html:151
+#: rhodecode/templates/admin/users/user_edit.html:158
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:108
 #, fuzzy
 msgid "Inherit default permissions"
 msgstr "預設權限"
 
-#: rhodecode/templates/admin/users/user_edit.html:156
+#: rhodecode/templates/admin/users/user_edit.html:163
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:113
 #, python-format
 msgid ""
@@ -2716,60 +3005,34 @@
 "options does not have any action"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit.html:162
+#: rhodecode/templates/admin/users/user_edit.html:169
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:119
 msgid "Create repositories"
 msgstr "建立版本庫"
 
-#: rhodecode/templates/admin/users/user_edit.html:170
+#: rhodecode/templates/admin/users/user_edit.html:177
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:127
 #, fuzzy
 msgid "Fork repositories"
 msgstr "個版本庫"
 
-#: rhodecode/templates/admin/users/user_edit.html:190
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:22
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:39
-#, fuzzy
-msgid "Nothing here yet"
-msgstr "尚未有任何變更"
-
-#: rhodecode/templates/admin/users/user_edit.html:197
-#: rhodecode/templates/admin/users/user_edit_my_account.html:60
-#: rhodecode/templates/admin/users/user_edit_my_account.html:217
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:185
-#, fuzzy
-msgid "Permission"
-msgstr "權限"
-
-#: rhodecode/templates/admin/users/user_edit.html:198
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:186
-#, fuzzy
-msgid "Edit Permission"
-msgstr "版本庫權限"
-
-#: rhodecode/templates/admin/users/user_edit.html:247
+#: rhodecode/templates/admin/users/user_edit.html:200
 #, fuzzy
 msgid "Email addresses"
 msgstr "郵件位址"
 
-#: rhodecode/templates/admin/users/user_edit.html:260
+#: rhodecode/templates/admin/users/user_edit.html:213
 #, fuzzy, python-format
 msgid "Confirm to delete this email: %s"
 msgstr "確認刪除這個使用者"
 
-#: rhodecode/templates/admin/users/user_edit.html:274
+#: rhodecode/templates/admin/users/user_edit.html:227
 #, fuzzy
 msgid "New email address"
 msgstr "郵件位址"
 
-#: rhodecode/templates/admin/users/user_edit.html:281
-#, fuzzy
-msgid "Add"
-msgstr "新增"
-
 #: rhodecode/templates/admin/users/user_edit_my_account.html:5
-#: rhodecode/templates/base/base.html:124
+#: rhodecode/templates/base/base.html:242
 msgid "My account"
 msgstr "我的帳號"
 
@@ -2783,7 +3046,7 @@
 msgstr "權限"
 
 #: rhodecode/templates/admin/users/user_edit_my_account.html:38
-#: rhodecode/templates/journal/journal.html:49
+#: rhodecode/templates/journal/journal.html:54
 #, fuzzy
 msgid "My repos"
 msgstr "空的版本庫"
@@ -2793,135 +3056,109 @@
 msgid "My pull requests"
 msgstr "建立使用者 %s"
 
-#: rhodecode/templates/admin/users/user_edit_my_account.html:45
-#, fuzzy
-msgid "Add repo"
-msgstr "新增"
-
 #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:2
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:4
+#, fuzzy
+msgid "Show closed pull requests"
+msgstr "建立使用者 %s"
+
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:6
 msgid "Opened by me"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:10
-#, python-format
-msgid "Pull request #%s opened on %s"
-msgstr ""
-
 #: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:15
+#, python-format
+msgid "Pull request #%s opened on %s"
+msgstr ""
+
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:17
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:45
+#: rhodecode/templates/pullrequests/pullrequest_data.html:7
+#: rhodecode/templates/pullrequests/pullrequest_show.html:27
+#: rhodecode/templates/pullrequests/pullrequest_show.html:42
+msgid "Closed"
+msgstr ""
+
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:23
 #, fuzzy
 msgid "Confirm to delete this pull request"
 msgstr "確認移除這個版本庫"
 
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:26
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:30
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:51
+#, fuzzy
+msgid "Nothing here yet"
+msgstr "尚未有任何變更"
+
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:34
 msgid "I participate in"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:33
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:30
+#: rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html:42
+#: rhodecode/templates/pullrequests/pullrequest_data.html:11
 #, python-format
 msgid "Pull request #%s opened by %s on %s"
 msgstr ""
 
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:7
-#: rhodecode/templates/bookmarks/bookmarks.html:40
-#: rhodecode/templates/bookmarks/bookmarks_data.html:9
-#: rhodecode/templates/branches/branches.html:54
-#: rhodecode/templates/branches/branches_data.html:9
-#: rhodecode/templates/journal/journal_page_repos.html:8
-#: rhodecode/templates/tags/tags.html:55
-#: rhodecode/templates/tags/tags_data.html:9
-msgid "Revision"
-msgstr "修訂"
-
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:28
-#: rhodecode/templates/journal/journal_page_repos.html:29
-msgid "private"
-msgstr "私有"
-
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:31
-#: rhodecode/templates/data_table/_dt_elements.html:7
-#: rhodecode/templates/journal/journal_page_repos.html:32
-#, fuzzy, python-format
-msgid "Confirm to delete this repository: %s"
-msgstr "確認移除這個版本庫"
-
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:38
-#: rhodecode/templates/journal/journal_page_repos.html:42
-msgid "No repositories yet"
-msgstr "沒有任何版本庫"
-
-#: rhodecode/templates/admin/users/user_edit_my_account_repos.html:40
-#: rhodecode/templates/journal/journal_page_repos.html:44
-msgid "create one now"
-msgstr ""
-
 #: rhodecode/templates/admin/users/users.html:5
 msgid "Users administration"
 msgstr "使用者管理員"
 
 #: rhodecode/templates/admin/users/users.html:9
-#: rhodecode/templates/base/base.html:235
 msgid "users"
 msgstr "使用者"
 
-#: rhodecode/templates/admin/users/users.html:23
-msgid "ADD NEW USER"
-msgstr "新增使用者"
-
-#: rhodecode/templates/admin/users/users.html:77
-msgid "username"
-msgstr "使用者名稱"
-
 #: rhodecode/templates/admin/users/users.html:80
 #, fuzzy
-msgid "firstname"
+msgid "Firstname"
 msgstr "名"
 
 #: rhodecode/templates/admin/users/users.html:81
-msgid "lastname"
+#, fuzzy
+msgid "Lastname"
 msgstr "姓"
 
 #: rhodecode/templates/admin/users/users.html:82
-msgid "last login"
+#, fuzzy
+msgid "Last login"
 msgstr "最後登入"
 
-#: rhodecode/templates/admin/users/users.html:84
-#: rhodecode/templates/admin/users_groups/users_groups.html:34
-msgid "active"
-msgstr "啟用"
-
-#: rhodecode/templates/admin/users/users.html:86
-#: rhodecode/templates/base/base.html:238
-msgid "ldap"
-msgstr ""
-
 #: rhodecode/templates/admin/users_groups/users_group_add.html:5
-msgid "Add users group"
+#, fuzzy
+msgid "Add user group"
 msgstr "新增使用者群組"
 
 #: rhodecode/templates/admin/users_groups/users_group_add.html:10
-#: rhodecode/templates/admin/users_groups/users_groups.html:9
-msgid "Users groups"
+#: rhodecode/templates/admin/users_groups/users_groups.html:11
+#: rhodecode/templates/base/base.html:72
+#, fuzzy
+msgid "User groups"
 msgstr "使用者群組"
 
 #: rhodecode/templates/admin/users_groups/users_group_add.html:12
-msgid "add new users group"
+#: rhodecode/templates/admin/users_groups/users_groups.html:25
+#, fuzzy
+msgid "Add new user group"
 msgstr "新增使用者群組"
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:5
-msgid "Edit users group"
+#, fuzzy
+msgid "Edit user group"
 msgstr "編輯使用者群組"
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:11
-msgid "UsersGroups"
+#, fuzzy
+msgid "UserGroups"
 msgstr "使用者群組"
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:50
+#: rhodecode/templates/admin/users_groups/users_groups.html:35
 msgid "Members"
 msgstr "成員"
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:58
-msgid "Choosen group members"
+#, fuzzy
+msgid "Chosen group members"
 msgstr "選擇群組成員"
 
 #: rhodecode/templates/admin/users_groups/users_group_edit.html:61
@@ -2936,273 +3173,283 @@
 msgid "Add all elements"
 msgstr "新增索有元素"
 
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:146
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:150
 #, fuzzy
 msgid "Group members"
 msgstr "選擇群組成員"
 
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:163
+#: rhodecode/templates/admin/users_groups/users_group_edit.html:167
 #, fuzzy
 msgid "No members yet"
 msgstr "成員"
 
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:171
-#, fuzzy
-msgid "Permissions defined for this group"
-msgstr "權限管理員"
-
-#: rhodecode/templates/admin/users_groups/users_group_edit.html:178
-#, fuzzy
-msgid "No permissions set yet"
-msgstr "權限"
-
 #: rhodecode/templates/admin/users_groups/users_groups.html:5
-msgid "Users groups administration"
+#, fuzzy
+msgid "User groups administration"
 msgstr "使用者群組管理員"
 
-#: rhodecode/templates/admin/users_groups/users_groups.html:23
-msgid "ADD NEW USER GROUP"
-msgstr "建立新的使用者群組"
-
-#: rhodecode/templates/admin/users_groups/users_groups.html:32
-msgid "group name"
-msgstr "群組名稱"
-
-#: rhodecode/templates/admin/users_groups/users_groups.html:33
-#: rhodecode/templates/base/root.html:46
-msgid "members"
-msgstr "成員"
-
-#: rhodecode/templates/admin/users_groups/users_groups.html:45
+#: rhodecode/templates/admin/users_groups/users_groups.html:47
 #, fuzzy, python-format
-msgid "Confirm to delete this users group: %s"
+msgid "Confirm to delete this user group: %s"
 msgstr "確認刪除這個群組"
 
-#: rhodecode/templates/base/base.html:41
+#: rhodecode/templates/base/base.html:42
 msgid "Submit a bug"
 msgstr "回報錯誤"
 
-#: rhodecode/templates/base/base.html:77
-msgid "Login to your account"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:100
-msgid "Forgot password ?"
-msgstr "忘記密碼?"
-
-#: rhodecode/templates/base/base.html:107
-#, fuzzy
-msgid "Log In"
-msgstr "登入"
-
-#: rhodecode/templates/base/base.html:118
-msgid "Inbox"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:123
-#: rhodecode/templates/base/base.html:322
-#: rhodecode/templates/base/base.html:324
-#: rhodecode/templates/base/base.html:326
-#: rhodecode/templates/journal/journal.html:4
-#: rhodecode/templates/journal/public_journal.html:4
-msgid "Journal"
-msgstr "日誌"
-
-#: rhodecode/templates/base/base.html:125
-msgid "Log Out"
-msgstr "登出"
-
-#: rhodecode/templates/base/base.html:144
-msgid "Switch repository"
-msgstr "切換版本庫"
-
-#: rhodecode/templates/base/base.html:146
-msgid "Products"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:152
-#: rhodecode/templates/base/base.html:182 rhodecode/templates/base/root.html:47
-msgid "loading..."
-msgstr "載入中..."
-
-#: rhodecode/templates/base/base.html:158
-#: rhodecode/templates/base/base.html:160
-#: rhodecode/templates/base/base.html:162
-#: rhodecode/templates/data_table/_dt_elements.html:15
+#: rhodecode/templates/base/base.html:108
+#: rhodecode/templates/data_table/_dt_elements.html:9
+#: rhodecode/templates/data_table/_dt_elements.html:11
+#: rhodecode/templates/data_table/_dt_elements.html:13
+#: rhodecode/templates/pullrequests/pullrequest_show.html:81
+#: rhodecode/templates/summary/summary.html:8
+msgid "Summary"
+msgstr "概況"
+
+#: rhodecode/templates/base/base.html:109
+#: rhodecode/templates/changelog/changelog.html:11
 #: rhodecode/templates/data_table/_dt_elements.html:17
 #: rhodecode/templates/data_table/_dt_elements.html:19
-msgid "Summary"
-msgstr "概況"
-
-#: rhodecode/templates/base/base.html:166
-#: rhodecode/templates/base/base.html:168
-#: rhodecode/templates/base/base.html:170
-#: rhodecode/templates/changelog/changelog.html:15
-#: rhodecode/templates/data_table/_dt_elements.html:23
-#: rhodecode/templates/data_table/_dt_elements.html:25
-#: rhodecode/templates/data_table/_dt_elements.html:27
+#: rhodecode/templates/data_table/_dt_elements.html:21
 msgid "Changelog"
 msgstr "修改紀錄"
 
-#: rhodecode/templates/base/base.html:175
-#: rhodecode/templates/base/base.html:177
-#: rhodecode/templates/base/base.html:179
-msgid "Switch to"
-msgstr "切換至"
-
-#: rhodecode/templates/base/base.html:186
-#: rhodecode/templates/base/base.html:188
-#: rhodecode/templates/base/base.html:190
-#: rhodecode/templates/data_table/_dt_elements.html:31
-#: rhodecode/templates/data_table/_dt_elements.html:33
-#: rhodecode/templates/data_table/_dt_elements.html:35
+#: rhodecode/templates/base/base.html:110
+#: rhodecode/templates/data_table/_dt_elements.html:25
+#: rhodecode/templates/data_table/_dt_elements.html:27
+#: rhodecode/templates/data_table/_dt_elements.html:29
+#: rhodecode/templates/files/files.html:12
 msgid "Files"
 msgstr "檔案"
 
-#: rhodecode/templates/base/base.html:195
-#: rhodecode/templates/base/base.html:199
+#: rhodecode/templates/base/base.html:112
+#, fuzzy
+msgid "Switch To"
+msgstr "切換至"
+
+#: rhodecode/templates/base/base.html:114
+#: rhodecode/templates/base/base.html:267
+msgid "loading..."
+msgstr "載入中..."
+
+#: rhodecode/templates/base/base.html:118
 msgid "Options"
 msgstr "選項"
 
-#: rhodecode/templates/base/base.html:204
-#: rhodecode/templates/base/base.html:206
-#, fuzzy
-msgid "repository settings"
-msgstr "版本庫建立"
-
-#: rhodecode/templates/base/base.html:210
-#: rhodecode/templates/data_table/_dt_elements.html:80
-#: rhodecode/templates/forks/fork.html:13
-msgid "fork"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:212 rhodecode/templates/base/root.html:50
-#: rhodecode/templates/changelog/changelog.html:43
-msgid "Open new pull request"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:215
+#: rhodecode/templates/base/base.html:124
 #: rhodecode/templates/forks/forks_data.html:21
 msgid "Compare fork"
 msgstr ""
 
-#: rhodecode/templates/base/base.html:217
-msgid "search"
-msgstr "搜尋"
-
-#: rhodecode/templates/base/base.html:223
-#, fuzzy
-msgid "lock"
-msgstr "解鎖"
-
-#: rhodecode/templates/base/base.html:234
-msgid "repositories groups"
-msgstr "版本庫群組"
-
-#: rhodecode/templates/base/base.html:236
-msgid "users groups"
-msgstr "使用者群組"
-
-#: rhodecode/templates/base/base.html:237
-msgid "permissions"
-msgstr "權限"
-
-#: rhodecode/templates/base/base.html:239
-#, fuzzy
-msgid "defaults"
-msgstr "刪除"
-
-#: rhodecode/templates/base/base.html:240
-msgid "settings"
-msgstr "設定"
-
-#: rhodecode/templates/base/base.html:251
-#: rhodecode/templates/base/base.html:253
-msgid "Followers"
-msgstr "追蹤者"
-
-#: rhodecode/templates/base/base.html:259
-#: rhodecode/templates/base/base.html:261
-msgid "Forks"
-msgstr ""
-
-#: rhodecode/templates/base/base.html:340
-#: rhodecode/templates/base/base.html:342
-#: rhodecode/templates/base/base.html:344
-#: rhodecode/templates/search/search.html:52
+#: rhodecode/templates/base/base.html:126
+msgid "Lightweight changelog"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:127
+#: rhodecode/templates/base/base.html:287
+#: rhodecode/templates/search/search.html:14
+#: rhodecode/templates/search/search.html:54
 msgid "Search"
 msgstr "搜尋"
 
-#: rhodecode/templates/base/root.html:42
-#, fuzzy
-msgid "add another comment"
-msgstr "新增另ㄧ位成員"
+#: rhodecode/templates/base/base.html:133
+#, fuzzy
+msgid "Lock"
+msgstr "解鎖"
+
+#: rhodecode/templates/base/base.html:141
+#, fuzzy
+msgid "Follow"
+msgstr "追蹤者"
+
+#: rhodecode/templates/base/base.html:142
+#, fuzzy
+msgid "Unfollow"
+msgstr "追蹤者"
+
+#: rhodecode/templates/base/base.html:145
+#: rhodecode/templates/data_table/_dt_elements.html:33
+#: rhodecode/templates/data_table/_dt_elements.html:35
+#: rhodecode/templates/data_table/_dt_elements.html:37
+#: rhodecode/templates/data_table/_dt_elements.html:74
+#: rhodecode/templates/forks/fork.html:9
+msgid "Fork"
+msgstr "分支"
+
+#: rhodecode/templates/base/base.html:147
+#, fuzzy
+msgid "Create Pull Request"
+msgstr "建立使用者 %s"
+
+#: rhodecode/templates/base/base.html:153
+#, fuzzy
+msgid "Show Pull Requests"
+msgstr "建立使用者 %s"
+
+#: rhodecode/templates/base/base.html:153
+#, fuzzy
+msgid "Pull Requests"
+msgstr "建立使用者 %s"
+
+#: rhodecode/templates/base/base.html:190
+#, fuzzy
+msgid "Not logged in"
+msgstr "最後登入"
+
+#: rhodecode/templates/base/base.html:197
+msgid "Login to your account"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:220
+msgid "Forgot password ?"
+msgstr "忘記密碼?"
+
+#: rhodecode/templates/base/base.html:243
+msgid "Log Out"
+msgstr "登出"
+
+#: rhodecode/templates/base/base.html:262
+msgid "Switch repository"
+msgstr "切換版本庫"
+
+#: rhodecode/templates/base/base.html:274
+msgid "Show recent activity"
+msgstr ""
+
+#: rhodecode/templates/base/base.html:275
+#: rhodecode/templates/journal/journal.html:4
+msgid "Journal"
+msgstr "日誌"
+
+#: rhodecode/templates/base/base.html:286
+#, fuzzy
+msgid "Search in repositories"
+msgstr "於所有的版本庫"
+
+#: rhodecode/templates/base/perms_summary.html:8
+#, fuzzy
+msgid "No permissions defined yet"
+msgstr "權限"
+
+#: rhodecode/templates/base/perms_summary.html:15
+#, fuzzy
+msgid "Permission"
+msgstr "權限"
+
+#: rhodecode/templates/base/perms_summary.html:16
+#, fuzzy
+msgid "Edit Permission"
+msgstr "版本庫權限"
 
 #: rhodecode/templates/base/root.html:43
-#: rhodecode/templates/journal/journal.html:83
-#: rhodecode/templates/summary/summary.html:57
-msgid "Stop following this repository"
-msgstr "停止追蹤這個版本庫"
+#, fuzzy
+msgid "Add another comment"
+msgstr "新增另ㄧ位成員"
 
 #: rhodecode/templates/base/root.html:44
-#: rhodecode/templates/summary/summary.html:61
+#: rhodecode/templates/data_table/_dt_elements.html:140
+msgid "Stop following this repository"
+msgstr "停止追蹤這個版本庫"
+
+#: rhodecode/templates/base/root.html:45
 msgid "Start following this repository"
 msgstr "開始追蹤這個版本庫"
 
-#: rhodecode/templates/base/root.html:45
+#: rhodecode/templates/base/root.html:46
 msgid "Group"
 msgstr "群組"
 
+#: rhodecode/templates/base/root.html:47
+msgid "members"
+msgstr "成員"
+
 #: rhodecode/templates/base/root.html:48
-msgid "search truncated"
-msgstr ""
+#: rhodecode/templates/pullrequests/pullrequest.html:181
+#, fuzzy
+msgid "Loading ..."
+msgstr "載入中..."
 
 #: rhodecode/templates/base/root.html:49
-msgid "no matching files"
+msgid "Search truncated"
+msgstr ""
+
+#: rhodecode/templates/base/root.html:50
+#, fuzzy
+msgid "No matching files"
 msgstr "無符合的檔案"
 
 #: rhodecode/templates/base/root.html:51
-msgid "Open new pull request for selected changesets"
+#: rhodecode/templates/changelog/changelog.html:36
+msgid "Open new pull request"
 msgstr ""
 
 #: rhodecode/templates/base/root.html:52
-msgid "Show selected changes __S -> __E"
+msgid "Open new pull request for selected changesets"
 msgstr ""
 
 #: rhodecode/templates/base/root.html:53
+msgid "Show selected changesets __S -> __E"
+msgstr ""
+
+#: rhodecode/templates/base/root.html:54
+#, fuzzy
+msgid "Show selected changeset __S"
+msgstr "尚未有任何變更"
+
+#: rhodecode/templates/base/root.html:55
 msgid "Selection link"
 msgstr ""
 
+#: rhodecode/templates/base/root.html:56
+#: rhodecode/templates/changeset/diff_block.html:8
+#, fuzzy
+msgid "Collapse diff"
+msgstr "檔案差異"
+
+#: rhodecode/templates/base/root.html:57
+#, fuzzy
+msgid "Expand diff"
+msgstr "原始差異"
+
 #: rhodecode/templates/bookmarks/bookmarks.html:5
 #, python-format
 msgid "%s Bookmarks"
 msgstr ""
 
-#: rhodecode/templates/bookmarks/bookmarks.html:39
+#: rhodecode/templates/bookmarks/bookmarks.html:37
 #: rhodecode/templates/bookmarks/bookmarks_data.html:8
-#: rhodecode/templates/branches/branches.html:53
+#: rhodecode/templates/branches/branches.html:50
 #: rhodecode/templates/branches/branches_data.html:8
-#: rhodecode/templates/tags/tags.html:54
+#: rhodecode/templates/shortlog/shortlog_data.html:8
+#: rhodecode/templates/tags/tags.html:51
 #: rhodecode/templates/tags/tags_data.html:8
 #, fuzzy
 msgid "Author"
 msgstr "作者"
 
+#: rhodecode/templates/bookmarks/bookmarks.html:38
+#: rhodecode/templates/bookmarks/bookmarks_data.html:9
+#: rhodecode/templates/branches/branches.html:51
+#: rhodecode/templates/branches/branches_data.html:9
+#: rhodecode/templates/shortlog/shortlog_data.html:5
+#: rhodecode/templates/tags/tags.html:52
+#: rhodecode/templates/tags/tags_data.html:9
+msgid "Revision"
+msgstr "修訂"
+
 #: rhodecode/templates/branches/branches.html:5
 #, fuzzy, python-format
 msgid "%s Branches"
 msgstr "分支"
 
-#: rhodecode/templates/branches/branches.html:29
+#: rhodecode/templates/branches/branches.html:26
 #, fuzzy
 msgid "Compare branches"
 msgstr "分支"
 
-#: rhodecode/templates/branches/branches.html:56
+#: rhodecode/templates/branches/branches.html:53
 #: rhodecode/templates/branches/branches_data.html:10
-#: rhodecode/templates/compare/compare_diff.html:5
-#: rhodecode/templates/compare/compare_diff.html:13
-#: rhodecode/templates/tags/tags.html:57
+#: rhodecode/templates/tags/tags.html:54
 #: rhodecode/templates/tags/tags_data.html:10
 #, fuzzy
 msgid "Compare"
@@ -3213,229 +3460,233 @@
 msgid "%s Changelog"
 msgstr "修改紀錄"
 
-#: rhodecode/templates/changelog/changelog.html:15
+#: rhodecode/templates/changelog/changelog.html:11
 #, python-format
 msgid "showing %d out of %d revision"
 msgid_plural "showing %d out of %d revisions"
 msgstr[0] ""
 
-#: rhodecode/templates/changelog/changelog.html:37
+#: rhodecode/templates/changelog/changelog.html:30
 #, fuzzy
 msgid "Clear selection"
 msgstr "搜尋選項"
 
-#: rhodecode/templates/changelog/changelog.html:40
+#: rhodecode/templates/changelog/changelog.html:33
 #: rhodecode/templates/forks/forks_data.html:19
-#, python-format
-msgid "compare fork with %s"
-msgstr ""
-
-#: rhodecode/templates/changelog/changelog.html:40
+#, fuzzy, python-format
+msgid "Compare fork with %s"
+msgstr "比較顯示"
+
+#: rhodecode/templates/changelog/changelog.html:33
 msgid "Compare fork with parent"
 msgstr ""
 
-#: rhodecode/templates/changelog/changelog.html:49
-msgid "Show"
-msgstr "顯示"
-
-#: rhodecode/templates/changelog/changelog.html:74
-#: rhodecode/templates/summary/summary.html:375
-msgid "show more"
+#: rhodecode/templates/changelog/changelog.html:76
+#: rhodecode/templates/summary/summary.html:404
+#, fuzzy
+msgid "Show more"
 msgstr "顯示更多"
 
-#: rhodecode/templates/changelog/changelog.html:78
-msgid "Affected number of files, click to show more details"
-msgstr ""
-
-#: rhodecode/templates/changelog/changelog.html:91
-#: rhodecode/templates/changeset/changeset.html:65
-#: rhodecode/templates/changeset/changeset_file_comment.html:20
-#: rhodecode/templates/changeset/changeset_range.html:46
-#, fuzzy
-msgid "Changeset status"
-msgstr "變更"
-
-#: rhodecode/templates/changelog/changelog.html:94
-#: rhodecode/templates/shortlog/shortlog_data.html:20
-msgid "Click to open associated pull request"
-msgstr ""
-
-#: rhodecode/templates/changelog/changelog.html:104
-msgid "Parent"
-msgstr ""
-
-#: rhodecode/templates/changelog/changelog.html:110
-#: rhodecode/templates/changeset/changeset.html:42
-msgid "No parents"
-msgstr ""
-
-#: rhodecode/templates/changelog/changelog.html:115
+#: rhodecode/templates/changelog/changelog.html:89
+#: rhodecode/templates/changeset/changeset_range.html:86
+#, python-format
+msgid "Bookmark %s"
+msgstr ""
+
+#: rhodecode/templates/changelog/changelog.html:95
+#: rhodecode/templates/changeset/changeset.html:111
+#: rhodecode/templates/changeset/changeset_range.html:92
+#, fuzzy, python-format
+msgid "Tag %s"
+msgstr "標籤"
+
+#: rhodecode/templates/changelog/changelog.html:100
 #: rhodecode/templates/changeset/changeset.html:106
-#: rhodecode/templates/changeset/changeset_range.html:79
-msgid "merge"
-msgstr "合併"
-
-#: rhodecode/templates/changelog/changelog.html:118
-#: rhodecode/templates/changeset/changeset.html:109
-#: rhodecode/templates/changeset/changeset_range.html:82
-#: rhodecode/templates/files/files.html:29
-#: rhodecode/templates/files/files_add.html:33
-#: rhodecode/templates/files/files_edit.html:33
-#: rhodecode/templates/shortlog/shortlog_data.html:9
-msgid "branch"
+#: rhodecode/templates/changeset/changeset_range.html:80
+#, fuzzy, python-format
+msgid "Branch %s"
 msgstr "分支"
 
-#: rhodecode/templates/changelog/changelog.html:124
-#: rhodecode/templates/changeset/changeset_range.html:88
-msgid "bookmark"
-msgstr ""
-
-#: rhodecode/templates/changelog/changelog.html:130
-#: rhodecode/templates/changeset/changeset.html:114
-#: rhodecode/templates/changeset/changeset_range.html:94
-msgid "tag"
-msgstr "標籤"
-
-#: rhodecode/templates/changelog/changelog.html:301
+#: rhodecode/templates/changelog/changelog.html:258
 msgid "There are no changes yet"
 msgstr "尚未有任何變更"
 
 #: rhodecode/templates/changelog/changelog_details.html:4
-#: rhodecode/templates/changeset/changeset.html:94
-msgid "removed"
+#: rhodecode/templates/changeset/changeset.html:91
+#, fuzzy
+msgid "Removed"
 msgstr "移除"
 
 #: rhodecode/templates/changelog/changelog_details.html:5
-#: rhodecode/templates/changeset/changeset.html:95
-msgid "changed"
+#: rhodecode/templates/changeset/changeset.html:92
+#, fuzzy
+msgid "Changed"
 msgstr "修改"
 
 #: rhodecode/templates/changelog/changelog_details.html:6
-#: rhodecode/templates/changeset/changeset.html:96
-msgid "added"
+#: rhodecode/templates/changeset/changeset.html:93
+#, fuzzy
+msgid "Added"
 msgstr "新增"
 
 #: rhodecode/templates/changelog/changelog_details.html:8
 #: rhodecode/templates/changelog/changelog_details.html:9
 #: rhodecode/templates/changelog/changelog_details.html:10
-#: rhodecode/templates/changeset/changeset.html:98
-#: rhodecode/templates/changeset/changeset.html:99
-#: rhodecode/templates/changeset/changeset.html:100
-#, python-format
-msgid "affected %s files"
-msgstr ""
+#: rhodecode/templates/changeset/changeset.html:95
+#: rhodecode/templates/changeset/changeset.html:96
+#: rhodecode/templates/changeset/changeset.html:97
+#, fuzzy, python-format
+msgid "Affected %s files"
+msgstr "檔案"
 
 #: rhodecode/templates/changeset/changeset.html:6
 #, fuzzy, python-format
 msgid "%s Changeset"
 msgstr "沒有修改"
 
-#: rhodecode/templates/changeset/changeset.html:14
-msgid "Changeset"
-msgstr ""
-
-#: rhodecode/templates/changeset/changeset.html:52
+#: rhodecode/templates/changeset/changeset.html:39
+msgid "No parents"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset.html:49
 msgid "No children"
 msgstr ""
 
-#: rhodecode/templates/changeset/changeset.html:70
-#: rhodecode/templates/changeset/diff_block.html:20
-msgid "raw diff"
+#: rhodecode/templates/changeset/changeset.html:62
+#: rhodecode/templates/changeset/changeset_file_comment.html:20
+#: rhodecode/templates/changeset/changeset_range.html:44
+#, fuzzy
+msgid "Changeset status"
+msgstr "變更"
+
+#: rhodecode/templates/changeset/changeset.html:67
+#: rhodecode/templates/changeset/diff_block.html:23
+#, fuzzy
+msgid "Raw diff"
 msgstr "原始差異"
 
-#: rhodecode/templates/changeset/changeset.html:71
-#, fuzzy
-msgid "patch diff"
+#: rhodecode/templates/changeset/changeset.html:68
+#, fuzzy
+msgid "Patch diff"
 msgstr "原始差異"
 
-#: rhodecode/templates/changeset/changeset.html:72
-#: rhodecode/templates/changeset/diff_block.html:21
-msgid "download diff"
+#: rhodecode/templates/changeset/changeset.html:69
+#: rhodecode/templates/changeset/diff_block.html:24
+#, fuzzy
+msgid "Download diff"
 msgstr "下載差異"
 
-#: rhodecode/templates/changeset/changeset.html:76
-#: rhodecode/templates/changeset/changeset_file_comment.html:82
+#: rhodecode/templates/changeset/changeset.html:73
+#: rhodecode/templates/changeset/changeset_file_comment.html:97
 #, fuzzy, python-format
 msgid "%d comment"
 msgid_plural "%d comments"
 msgstr[0] "遞交"
 
-#: rhodecode/templates/changeset/changeset.html:76
-#: rhodecode/templates/changeset/changeset_file_comment.html:82
+#: rhodecode/templates/changeset/changeset.html:73
+#: rhodecode/templates/changeset/changeset_file_comment.html:97
 #, python-format
 msgid "(%d inline)"
 msgid_plural "(%d inline)"
 msgstr[0] ""
 
-#: rhodecode/templates/changeset/changeset.html:122
-#: rhodecode/templates/compare/compare_diff.html:44
-#: rhodecode/templates/pullrequests/pullrequest_show.html:76
+#: rhodecode/templates/changeset/changeset.html:103
+#: rhodecode/templates/changeset/changeset_range.html:77
+msgid "merge"
+msgstr "合併"
+
+#: rhodecode/templates/changeset/changeset.html:119
+#: rhodecode/templates/compare/compare_diff.html:40
+#: rhodecode/templates/pullrequests/pullrequest_show.html:113
 #, fuzzy, python-format
 msgid "%s file changed"
 msgid_plural "%s files changed"
 msgstr[0] "檔案修改"
 
-#: rhodecode/templates/changeset/changeset.html:124
-#: rhodecode/templates/compare/compare_diff.html:46
-#: rhodecode/templates/pullrequests/pullrequest_show.html:78
+#: rhodecode/templates/changeset/changeset.html:121
+#: rhodecode/templates/compare/compare_diff.html:42
+#: rhodecode/templates/pullrequests/pullrequest_show.html:115
 #, python-format
 msgid "%s file changed with %s insertions and %s deletions"
 msgid_plural "%s files changed with %s insertions and %s deletions"
 msgstr[0] ""
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:42
+#: rhodecode/templates/changeset/changeset.html:134
+#: rhodecode/templates/changeset/changeset.html:146
+#: rhodecode/templates/pullrequests/pullrequest_show.html:131
+#: rhodecode/templates/pullrequests/pullrequest_show.html:195
+msgid "Showing a huge diff might take some time and resources"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset.html:134
+#: rhodecode/templates/changeset/changeset.html:146
+#: rhodecode/templates/compare/compare_diff.html:58
+#: rhodecode/templates/compare/compare_diff.html:69
+#: rhodecode/templates/pullrequests/pullrequest_show.html:131
+#: rhodecode/templates/pullrequests/pullrequest_show.html:195
+#, fuzzy
+msgid "Show full diff"
+msgstr "載入檔案列表..."
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:30
+#, fuzzy, python-format
+msgid "Status change on pull request #%s"
+msgstr "建立使用者 %s"
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:32
+#, fuzzy, python-format
+msgid "Comment on pull request #%s"
+msgstr "建立使用者 %s"
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:57
 msgid "Submitting..."
 msgstr ""
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:45
+#: rhodecode/templates/changeset/changeset_file_comment.html:60
 msgid "Commenting on line {1}."
 msgstr ""
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:46
-#: rhodecode/templates/changeset/changeset_file_comment.html:121
+#: rhodecode/templates/changeset/changeset_file_comment.html:61
+#: rhodecode/templates/changeset/changeset_file_comment.html:139
 #, python-format
 msgid "Comments parsed using %s syntax with %s support."
 msgstr ""
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:48
-#: rhodecode/templates/changeset/changeset_file_comment.html:123
+#: rhodecode/templates/changeset/changeset_file_comment.html:63
+#: rhodecode/templates/changeset/changeset_file_comment.html:141
 msgid "Use @username inside this text to send notification to this RhodeCode user"
 msgstr ""
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:59
-#: rhodecode/templates/changeset/changeset_file_comment.html:143
+#: rhodecode/templates/changeset/changeset_file_comment.html:74
+#: rhodecode/templates/changeset/changeset_file_comment.html:161
 #, fuzzy
 msgid "Comment"
 msgstr "遞交"
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:60
-#: rhodecode/templates/changeset/changeset_file_comment.html:71
-msgid "Hide"
-msgstr ""
-
-#: rhodecode/templates/changeset/changeset_file_comment.html:67
+#: rhodecode/templates/changeset/changeset_file_comment.html:75
+#, fuzzy
+msgid "Cancel"
+msgstr "修改"
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:82
 #, fuzzy
 msgid "You need to be logged in to comment."
 msgstr "您必須登入後才能瀏覽這個頁面"
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:67
+#: rhodecode/templates/changeset/changeset_file_comment.html:82
 msgid "Login now"
 msgstr ""
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:118
-msgid "Leave a comment"
-msgstr ""
-
-#: rhodecode/templates/changeset/changeset_file_comment.html:125
-msgid "Check this to change current status of code-review for this changeset"
-msgstr ""
-
-#: rhodecode/templates/changeset/changeset_file_comment.html:125
-#, fuzzy
-msgid "change status"
+#: rhodecode/templates/changeset/changeset_file_comment.html:86
+msgid "Hide"
+msgstr ""
+
+#: rhodecode/templates/changeset/changeset_file_comment.html:143
+#, fuzzy
+msgid "Change status"
 msgstr "變更"
 
-#: rhodecode/templates/changeset/changeset_file_comment.html:145
+#: rhodecode/templates/changeset/changeset_file_comment.html:163
 msgid "Comment and close"
 msgstr ""
 
@@ -3444,121 +3695,145 @@
 msgid "%s Changesets"
 msgstr "變更"
 
-#: rhodecode/templates/changeset/changeset_range.html:29
-#: rhodecode/templates/compare/compare_diff.html:29
-msgid "Compare View"
-msgstr "比較顯示"
-
-#: rhodecode/templates/changeset/changeset_range.html:29
-#, fuzzy
-msgid "Show combined compare"
-msgstr "文件內容"
-
-#: rhodecode/templates/changeset/changeset_range.html:54
+#: rhodecode/templates/changeset/changeset_range.html:52
 msgid "Files affected"
 msgstr ""
 
-#: rhodecode/templates/changeset/diff_block.html:19
-msgid "show full diff for this file"
-msgstr ""
-
-#: rhodecode/templates/changeset/diff_block.html:27
-#, fuzzy
-msgid "show inline comments"
+#: rhodecode/templates/changeset/diff_block.html:22
+msgid "Show full diff for this file"
+msgstr ""
+
+#: rhodecode/templates/changeset/diff_block.html:30
+#, fuzzy
+msgid "Show inline comments"
 msgstr "文件內容"
 
-#: rhodecode/templates/compare/compare_cs.html:5
+#: rhodecode/templates/changeset/diff_block.html:55
+msgid "Show file at latest version in this repo"
+msgstr ""
+
+#: rhodecode/templates/changeset/diff_block.html:56
+msgid "Show file at initial version in this repo"
+msgstr ""
+
+#: rhodecode/templates/compare/compare_cs.html:4
 #, fuzzy
 msgid "No changesets"
 msgstr "尚未有任何變更"
 
-#: rhodecode/templates/compare/compare_diff.html:37
-#: rhodecode/templates/pullrequests/pullrequest_show.html:69
+#: rhodecode/templates/compare/compare_cs.html:32
+#, fuzzy
+msgid "Ancestor"
+msgstr "分支"
+
+#: rhodecode/templates/compare/compare_diff.html:5
+#, fuzzy, python-format
+msgid "%s Compare"
+msgstr "比較顯示"
+
+#: rhodecode/templates/compare/compare_diff.html:9
+#, fuzzy
+msgid "Compare revisions"
+msgstr "前一個修訂"
+
+#: rhodecode/templates/compare/compare_diff.html:33
+#: rhodecode/templates/pullrequests/pullrequest_show.html:106
 #, fuzzy, python-format
 msgid "Showing %s commit"
 msgid_plural "Showing %s commits"
 msgstr[0] "文件內容"
 
-#: rhodecode/templates/compare/compare_diff.html:52
-#: rhodecode/templates/pullrequests/pullrequest_show.html:84
+#: rhodecode/templates/compare/compare_diff.html:48
+#: rhodecode/templates/pullrequests/pullrequest_show.html:121
 #, fuzzy
 msgid "No files"
 msgstr "檔案"
 
-#: rhodecode/templates/data_table/_dt_elements.html:39
-#: rhodecode/templates/data_table/_dt_elements.html:41
-#: rhodecode/templates/data_table/_dt_elements.html:43
-msgid "Fork"
-msgstr "分支"
-
-#: rhodecode/templates/data_table/_dt_elements.html:60
-#: rhodecode/templates/journal/journal.html:89
-#: rhodecode/templates/summary/summary.html:77
+#: rhodecode/templates/compare/compare_diff.html:58
+#: rhodecode/templates/compare/compare_diff.html:69
+msgid "confirm to show potentially huge diff"
+msgstr ""
+
+#: rhodecode/templates/data_table/_dt_elements.html:54
+#: rhodecode/templates/summary/summary.html:69
 msgid "Mercurial repository"
 msgstr "Mercurial 版本庫"
 
-#: rhodecode/templates/data_table/_dt_elements.html:62
-#: rhodecode/templates/journal/journal.html:91
-#: rhodecode/templates/summary/summary.html:80
+#: rhodecode/templates/data_table/_dt_elements.html:56
+#: rhodecode/templates/summary/summary.html:72
 msgid "Git repository"
 msgstr "Git 版本庫"
 
-#: rhodecode/templates/data_table/_dt_elements.html:69
-#: rhodecode/templates/journal/journal.html:97
-#: rhodecode/templates/summary/summary.html:87
-msgid "public repository"
-msgstr "公開版本庫"
-
-#: rhodecode/templates/data_table/_dt_elements.html:80
-#: rhodecode/templates/summary/summary.html:96
-#: rhodecode/templates/summary/summary.html:97
-msgid "Fork of"
-msgstr ""
-
-#: rhodecode/templates/data_table/_dt_elements.html:94
+#: rhodecode/templates/data_table/_dt_elements.html:74
+#, fuzzy, python-format
+msgid "Fork of %s"
+msgstr "fork 名稱"
+
+#: rhodecode/templates/data_table/_dt_elements.html:88
 msgid "No changesets yet"
 msgstr "尚未有任何變更"
 
-#: rhodecode/templates/data_table/_dt_elements.html:101
-#: rhodecode/templates/data_table/_dt_elements.html:103
+#: rhodecode/templates/data_table/_dt_elements.html:95
+#: rhodecode/templates/data_table/_dt_elements.html:97
 #, python-format
 msgid "Subscribe to %s rss feed"
 msgstr "訂閱 %s rss"
 
-#: rhodecode/templates/data_table/_dt_elements.html:109
-#: rhodecode/templates/data_table/_dt_elements.html:111
+#: rhodecode/templates/data_table/_dt_elements.html:103
+#: rhodecode/templates/data_table/_dt_elements.html:105
 #, python-format
 msgid "Subscribe to %s atom feed"
 msgstr "訂閱 %s atom"
 
 #: rhodecode/templates/data_table/_dt_elements.html:122
 #, fuzzy, python-format
+msgid "Confirm to delete this repository: %s"
+msgstr "確認移除這個版本庫"
+
+#: rhodecode/templates/data_table/_dt_elements.html:131
+#, fuzzy, python-format
 msgid "Confirm to delete this user: %s"
 msgstr "確認刪除這個使用者"
 
-#: rhodecode/templates/email_templates/changeset_comment.html:10
-#, fuzzy
-msgid "New status$"
+#: rhodecode/templates/email_templates/changeset_comment.html:9
+#: rhodecode/templates/email_templates/pull_request_comment.html:15
+#, fuzzy
+msgid "New status"
 msgstr "變更"
 
+#: rhodecode/templates/email_templates/changeset_comment.html:11
+#: rhodecode/templates/email_templates/pull_request_comment.html:9
+msgid "View this comment here"
+msgstr ""
+
+#: rhodecode/templates/email_templates/changeset_comment.html:14
+#, fuzzy
+msgid "Repo"
+msgstr "空的版本庫"
+
+#: rhodecode/templates/email_templates/changeset_comment.html:16
+msgid "desc"
+msgstr ""
+
 #: rhodecode/templates/email_templates/main.html:8
 msgid "This is a notification from RhodeCode."
 msgstr ""
 
 #: rhodecode/templates/email_templates/password_reset.html:4
-msgid "Hello"
+#, python-format
+msgid "Hello %s"
+msgstr ""
+
+#: rhodecode/templates/email_templates/password_reset.html:5
+msgid "We received a request to create a new password for your account."
 msgstr ""
 
 #: rhodecode/templates/email_templates/password_reset.html:6
-msgid "We received a request to create a new password for your account."
-msgstr ""
-
-#: rhodecode/templates/email_templates/password_reset.html:8
 msgid "You can generate it by clicking following URL"
 msgstr ""
 
-#: rhodecode/templates/email_templates/password_reset.html:12
-msgid "If you didn't request new password please ignore this email."
+#: rhodecode/templates/email_templates/password_reset.html:11
+msgid "If you did not request new password please ignore this email."
 msgstr ""
 
 #: rhodecode/templates/email_templates/pull_request.html:4
@@ -3570,37 +3845,32 @@
 
 #: rhodecode/templates/email_templates/pull_request.html:5
 #, fuzzy
+msgid "View this pull request here"
+msgstr "確認移除這個版本庫"
+
+#: rhodecode/templates/email_templates/pull_request.html:6
+#, fuzzy
 msgid "title"
 msgstr "寫"
 
-#: rhodecode/templates/email_templates/pull_request.html:6
-#: rhodecode/templates/pullrequests/pullrequest.html:115
+#: rhodecode/templates/email_templates/pull_request.html:7
 #, fuzzy
 msgid "description"
 msgstr "描述"
 
-#: rhodecode/templates/email_templates/pull_request.html:11
+#: rhodecode/templates/email_templates/pull_request.html:12
 msgid "revisions for reviewing"
 msgstr ""
 
-#: rhodecode/templates/email_templates/pull_request.html:18
-#, fuzzy
-msgid "View this pull request here"
-msgstr "確認移除這個版本庫"
-
-#: rhodecode/templates/email_templates/pull_request_comment.html:4
+#: rhodecode/templates/email_templates/pull_request_comment.html:3
 #, fuzzy, python-format
-msgid "User %s commented on pull request #%s for repository %s"
+msgid "Pull request #%s for repository %s"
 msgstr "建立使用者 %s"
 
-#: rhodecode/templates/email_templates/pull_request_comment.html:10
-#, fuzzy
-msgid "New status"
-msgstr "變更"
-
-#: rhodecode/templates/email_templates/pull_request_comment.html:14
-msgid "View this comment here"
-msgstr ""
+#: rhodecode/templates/email_templates/pull_request_comment.html:13
+#, fuzzy
+msgid "Closing pull request with status"
+msgstr "建立使用者 %s"
 
 #: rhodecode/templates/email_templates/registration.html:4
 #, fuzzy
@@ -3611,116 +3881,119 @@
 msgid "View this user here"
 msgstr ""
 
-#: rhodecode/templates/errors/error_document.html:46
+#: rhodecode/templates/errors/error_document.html:55
 #, python-format
 msgid "You will be redirected to %s in %s seconds"
 msgstr ""
 
 #: rhodecode/templates/files/file_diff.html:4
 #, fuzzy, python-format
-msgid "%s File diff"
+msgid "%s File Diff"
 msgstr "檔案差異"
 
-#: rhodecode/templates/files/file_diff.html:12
+#: rhodecode/templates/files/file_diff.html:8
 msgid "File diff"
 msgstr "檔案差異"
 
 #: rhodecode/templates/files/files.html:4
-#: rhodecode/templates/files/files.html:74
+#: rhodecode/templates/files/files.html:76
 #, fuzzy, python-format
-msgid "%s files"
+msgid "%s Files"
 msgstr "檔案"
 
-#: rhodecode/templates/files/files.html:12
-#: rhodecode/templates/summary/summary.html:351
-msgid "files"
-msgstr "檔案"
+#: rhodecode/templates/files/files.html:30
+#: rhodecode/templates/files/files_add.html:31
+#: rhodecode/templates/files/files_edit.html:31
+#: rhodecode/templates/shortlog/shortlog_data.html:9
+#, fuzzy
+msgid "Branch"
+msgstr "分支"
 
 #: rhodecode/templates/files/files_add.html:4
-#: rhodecode/templates/files/files_edit.html:4
 #, fuzzy, python-format
-msgid "%s Edit file"
-msgstr "編輯檔案"
+msgid "%s Files Add"
+msgstr "檔案"
 
 #: rhodecode/templates/files/files_add.html:19
 #, fuzzy
-msgid "add file"
+msgid "Add file"
 msgstr "編輯檔案"
 
-#: rhodecode/templates/files/files_add.html:40
+#: rhodecode/templates/files/files_add.html:38
+#: rhodecode/templates/files/files_browser.html:31
+#: rhodecode/templates/shortlog/shortlog_data.html:78
 #, fuzzy
 msgid "Add new file"
 msgstr "新增使用者"
 
-#: rhodecode/templates/files/files_add.html:45
+#: rhodecode/templates/files/files_add.html:43
 #, fuzzy
 msgid "File Name"
 msgstr "檔案名稱"
 
-#: rhodecode/templates/files/files_add.html:49
-#: rhodecode/templates/files/files_add.html:58
+#: rhodecode/templates/files/files_add.html:47
+#: rhodecode/templates/files/files_add.html:56
 #, fuzzy
 msgid "or"
 msgstr "時"
 
-#: rhodecode/templates/files/files_add.html:49
-#: rhodecode/templates/files/files_add.html:54
+#: rhodecode/templates/files/files_add.html:47
+#: rhodecode/templates/files/files_add.html:52
 #, fuzzy
 msgid "Upload file"
 msgstr "編輯檔案"
 
-#: rhodecode/templates/files/files_add.html:58
+#: rhodecode/templates/files/files_add.html:56
 #, fuzzy
 msgid "Create new file"
 msgstr "建立使用者 %s"
 
-#: rhodecode/templates/files/files_add.html:63
-#: rhodecode/templates/files/files_edit.html:39
+#: rhodecode/templates/files/files_add.html:61
+#: rhodecode/templates/files/files_edit.html:37
 #: rhodecode/templates/files/files_ypjax.html:3
 msgid "Location"
 msgstr "位置"
 
-#: rhodecode/templates/files/files_add.html:67
+#: rhodecode/templates/files/files_add.html:65
 msgid "use / to separate directories"
 msgstr ""
 
-#: rhodecode/templates/files/files_add.html:77
-#: rhodecode/templates/files/files_edit.html:63
+#: rhodecode/templates/files/files_add.html:75
+#: rhodecode/templates/files/files_edit.html:61
 #: rhodecode/templates/shortlog/shortlog_data.html:6
-msgid "commit message"
+#, fuzzy
+msgid "Commit message"
 msgstr "遞交資訊"
 
-#: rhodecode/templates/files/files_add.html:81
-#: rhodecode/templates/files/files_edit.html:67
+#: rhodecode/templates/files/files_add.html:79
+#: rhodecode/templates/files/files_edit.html:65
 msgid "Commit changes"
 msgstr "遞交修改"
 
 #: rhodecode/templates/files/files_browser.html:13
-msgid "view"
+#, fuzzy
+msgid "View"
 msgstr "顯示"
 
 #: rhodecode/templates/files/files_browser.html:14
-msgid "previous revision"
+#, fuzzy
+msgid "Previous revision"
 msgstr "前一個修訂"
 
 #: rhodecode/templates/files/files_browser.html:16
-msgid "next revision"
+#, fuzzy
+msgid "Next revision"
 msgstr "下一個修訂"
 
 #: rhodecode/templates/files/files_browser.html:23
-msgid "follow current branch"
+msgid "Follow current branch"
 msgstr ""
 
 #: rhodecode/templates/files/files_browser.html:27
-msgid "search file list"
+#, fuzzy
+msgid "Search file list"
 msgstr "搜尋檔案列表"
 
-#: rhodecode/templates/files/files_browser.html:31
-#: rhodecode/templates/shortlog/shortlog_data.html:78
-#, fuzzy
-msgid "add new file"
-msgstr "新增使用者"
-
 #: rhodecode/templates/files/files_browser.html:35
 msgid "Loading file list..."
 msgstr "載入檔案列表..."
@@ -3743,35 +4016,44 @@
 msgstr "最後修改"
 
 #: rhodecode/templates/files/files_browser.html:52
-msgid "Last commiter"
+msgid "Last committer"
 msgstr "最後的遞交者"
 
+#: rhodecode/templates/files/files_edit.html:4
+#, fuzzy, python-format
+msgid "%s Files Edit"
+msgstr "檔案"
+
 #: rhodecode/templates/files/files_edit.html:19
-msgid "edit file"
+#, fuzzy
+msgid "Edit file"
 msgstr "編輯檔案"
 
+#: rhodecode/templates/files/files_edit.html:47
+#: rhodecode/templates/files/files_source.html:23
+#, fuzzy
+msgid "Show annotation"
+msgstr "險是註釋"
+
+#: rhodecode/templates/files/files_edit.html:48
+#: rhodecode/templates/files/files_source.html:25
+#: rhodecode/templates/files/files_source.html:55
+#, fuzzy
+msgid "Show as raw"
+msgstr "顯示原始文件"
+
 #: rhodecode/templates/files/files_edit.html:49
-#: rhodecode/templates/files/files_source.html:23
-msgid "show annotation"
-msgstr "險是註釋"
-
-#: rhodecode/templates/files/files_edit.html:50
-#: rhodecode/templates/files/files_source.html:25
-#: rhodecode/templates/files/files_source.html:53
-msgid "show as raw"
-msgstr "顯示原始文件"
-
-#: rhodecode/templates/files/files_edit.html:51
 #: rhodecode/templates/files/files_source.html:26
-msgid "download as raw"
+#, fuzzy
+msgid "Download as raw"
 msgstr "下載原始文件"
 
-#: rhodecode/templates/files/files_edit.html:54
-#, fuzzy
-msgid "source"
+#: rhodecode/templates/files/files_edit.html:52
+#, fuzzy
+msgid "Source"
 msgstr "顯示原始碼"
 
-#: rhodecode/templates/files/files_edit.html:59
+#: rhodecode/templates/files/files_edit.html:57
 #, fuzzy
 msgid "Editing file"
 msgstr "編輯檔案"
@@ -3782,17 +4064,17 @@
 
 #: rhodecode/templates/files/files_history_box.html:9
 #, fuzzy
-msgid "diff to revision"
+msgid "Diff to revision"
 msgstr "下一個修訂"
 
 #: rhodecode/templates/files/files_history_box.html:10
 #, fuzzy
-msgid "show at revision"
+msgid "Show at revision"
 msgstr "下一個修訂"
 
 #: rhodecode/templates/files/files_history_box.html:11
 #, fuzzy
-msgid "show full history"
+msgid "Show full history"
 msgstr "載入檔案列表..."
 
 #: rhodecode/templates/files/files_history_box.html:16
@@ -3807,15 +4089,30 @@
 msgstr "載入檔案列表..."
 
 #: rhodecode/templates/files/files_source.html:21
-msgid "show source"
+#, fuzzy
+msgid "Show source"
 msgstr "顯示原始碼"
 
-#: rhodecode/templates/files/files_source.html:44
+#: rhodecode/templates/files/files_source.html:29
+#, fuzzy, python-format
+msgid "Edit on branch:%s"
+msgstr "刪除版本庫 %s"
+
+#: rhodecode/templates/files/files_source.html:31
+#, fuzzy
+msgid "Edit on branch:?"
+msgstr "刪除版本庫 %s"
+
+#: rhodecode/templates/files/files_source.html:31
+msgid "Editing files allowed only when on branch head revision"
+msgstr ""
+
+#: rhodecode/templates/files/files_source.html:46
 #, python-format
 msgid "Binary file (%s)"
 msgstr "二進位檔 (%s)"
 
-#: rhodecode/templates/files/files_source.html:53
+#: rhodecode/templates/files/files_source.html:55
 msgid "File is too big to display"
 msgstr "顯示的檔案太大"
 
@@ -3837,8 +4134,10 @@
 msgid "%s Followers"
 msgstr "追蹤者"
 
-#: rhodecode/templates/followers/followers.html:13
-msgid "followers"
+#: rhodecode/templates/followers/followers.html:9
+#: rhodecode/templates/summary/summary.html:183
+#: rhodecode/templates/summary/summary.html:184
+msgid "Followers"
 msgstr "追蹤者"
 
 #: rhodecode/templates/followers/followers_data.html:12
@@ -3851,33 +4150,34 @@
 msgid "%s Fork"
 msgstr "分支"
 
-#: rhodecode/templates/forks/fork.html:31
+#: rhodecode/templates/forks/fork.html:28
 msgid "Fork name"
 msgstr "分支名稱"
 
-#: rhodecode/templates/forks/fork.html:68
+#: rhodecode/templates/forks/fork.html:65
 msgid "Private"
 msgstr "私有"
 
-#: rhodecode/templates/forks/fork.html:77
+#: rhodecode/templates/forks/fork.html:74
 #, fuzzy
 msgid "Copy permissions"
 msgstr "權限"
 
-#: rhodecode/templates/forks/fork.html:81
+#: rhodecode/templates/forks/fork.html:78
 msgid "Copy permissions from forked repository"
 msgstr ""
 
-#: rhodecode/templates/forks/fork.html:86
+#: rhodecode/templates/forks/fork.html:84
 msgid "Update after clone"
 msgstr ""
 
-#: rhodecode/templates/forks/fork.html:90
+#: rhodecode/templates/forks/fork.html:88
 msgid "Checkout source after making a clone"
 msgstr ""
 
-#: rhodecode/templates/forks/fork.html:94
-msgid "fork this repository"
+#: rhodecode/templates/forks/fork.html:93
+#, fuzzy
+msgid "Fork this repository"
 msgstr "fork 這個版本庫"
 
 #: rhodecode/templates/forks/forks.html:5
@@ -3885,12 +4185,15 @@
 msgid "%s Forks"
 msgstr "分支"
 
-#: rhodecode/templates/forks/forks.html:13
-msgid "forks"
-msgstr "分支"
+#: rhodecode/templates/forks/forks.html:9
+#: rhodecode/templates/summary/summary.html:189
+#: rhodecode/templates/summary/summary.html:190
+msgid "Forks"
+msgstr ""
 
 #: rhodecode/templates/forks/forks_data.html:17
-msgid "forked"
+#, fuzzy
+msgid "Forked"
 msgstr "已建立分支"
 
 #: rhodecode/templates/forks/forks_data.html:42
@@ -3908,46 +4211,28 @@
 msgstr "%s 公開日誌 %s feed"
 
 #: rhodecode/templates/journal/journal.html:32
-#: rhodecode/templates/pullrequests/pullrequest.html:55
 msgid "Refresh"
 msgstr ""
 
 #: rhodecode/templates/journal/journal.html:35
 #: rhodecode/templates/journal/public_journal.html:24
-msgid "RSS feed"
-msgstr ""
-
-#: rhodecode/templates/journal/journal.html:38
-#: rhodecode/templates/journal/public_journal.html:27
 msgid "ATOM feed"
 msgstr ""
 
-#: rhodecode/templates/journal/journal.html:49
+#: rhodecode/templates/journal/journal.html:51
 #, fuzzy
 msgid "Watched"
 msgstr "快取"
 
-#: rhodecode/templates/journal/journal.html:54
-#, fuzzy
-msgid "ADD"
-msgstr "新增"
-
-#: rhodecode/templates/journal/journal.html:77
-msgid "following user"
-msgstr "追蹤使用者"
-
-#: rhodecode/templates/journal/journal.html:77
-msgid "user"
-msgstr "使用者"
-
-#: rhodecode/templates/journal/journal.html:110
-msgid "You are not following any users or repositories"
-msgstr "您尚未追蹤任何使用者或版本庫"
-
 #: rhodecode/templates/journal/journal_data.html:55
 msgid "No entries yet"
 msgstr ""
 
+#: rhodecode/templates/journal/public_journal.html:4
+#: rhodecode/templates/journal/public_journal.html:21
+msgid "Public Journal"
+msgstr "開放日誌"
+
 #: rhodecode/templates/journal/public_journal.html:13
 #, fuzzy
 msgid "ATOM public journal feed"
@@ -3958,157 +4243,139 @@
 msgid "RSS public journal feed"
 msgstr "%s 公開日誌 %s feed"
 
-#: rhodecode/templates/journal/public_journal.html:21
-msgid "Public Journal"
-msgstr "開放日誌"
-
 #: rhodecode/templates/pullrequests/pullrequest.html:4
-#: rhodecode/templates/pullrequests/pullrequest.html:12
+#: rhodecode/templates/pullrequests/pullrequest.html:8
 msgid "New pull request"
 msgstr ""
 
-#: rhodecode/templates/pullrequests/pullrequest.html:54
-msgid "refresh overview"
-msgstr ""
-
-#: rhodecode/templates/pullrequests/pullrequest.html:66
+#: rhodecode/templates/pullrequests/pullrequest.html:52
 #, fuzzy
 msgid "Detailed compare view"
 msgstr "比較顯示"
 
-#: rhodecode/templates/pullrequests/pullrequest.html:70
-#: rhodecode/templates/pullrequests/pullrequest_show.html:100
+#: rhodecode/templates/pullrequests/pullrequest.html:56
+#: rhodecode/templates/pullrequests/pullrequest_show.html:137
 msgid "Pull request reviewers"
 msgstr ""
 
-#: rhodecode/templates/pullrequests/pullrequest.html:79
-#: rhodecode/templates/pullrequests/pullrequest_show.html:112
+#: rhodecode/templates/pullrequests/pullrequest.html:65
+#: rhodecode/templates/pullrequests/pullrequest_show.html:149
 #, fuzzy
 msgid "owner"
 msgstr "擁有者"
 
-#: rhodecode/templates/pullrequests/pullrequest.html:91
-#: rhodecode/templates/pullrequests/pullrequest_show.html:127
+#: rhodecode/templates/pullrequests/pullrequest.html:77
 msgid "Add reviewer to this pull request."
 msgstr ""
 
-#: rhodecode/templates/pullrequests/pullrequest.html:97
+#: rhodecode/templates/pullrequests/pullrequest.html:83
 #, fuzzy
 msgid "Create new pull request"
 msgstr "建立使用者 %s"
 
-#: rhodecode/templates/pullrequests/pullrequest.html:106
+#: rhodecode/templates/pullrequests/pullrequest.html:92
+#: rhodecode/templates/pullrequests/pullrequest_data.html:14
 #: rhodecode/templates/pullrequests/pullrequest_show.html:25
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:33
 #, fuzzy
 msgid "Title"
 msgstr "寫"
 
-#: rhodecode/templates/pullrequests/pullrequest.html:123
+#: rhodecode/templates/pullrequests/pullrequest.html:109
 msgid "Send pull request"
 msgstr ""
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:23
-#, python-format
-msgid "Closed %s"
-msgstr ""
-
-#: rhodecode/templates/pullrequests/pullrequest_show.html:23
-#, python-format
-msgid "with status %s"
-msgstr ""
-
-#: rhodecode/templates/pullrequests/pullrequest_show.html:31
-#, fuzzy
-msgid "Status"
+#: rhodecode/templates/pullrequests/pullrequest_show.html:4
+#, fuzzy, python-format
+msgid "%s Pull Request #%s"
+msgstr "建立使用者 %s"
+
+#: rhodecode/templates/pullrequests/pullrequest_show.html:35
+#, fuzzy
+msgid "Review status"
 msgstr "變更"
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:36
+#: rhodecode/templates/pullrequests/pullrequest_show.html:40
 msgid "Pull request status"
 msgstr ""
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:44
+#: rhodecode/templates/pullrequests/pullrequest_show.html:53
 msgid "Still not reviewed by"
 msgstr ""
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:48
+#: rhodecode/templates/pullrequests/pullrequest_show.html:57
 #, python-format
 msgid "%d reviewer"
 msgid_plural "%d reviewers"
 msgstr[0] ""
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:50
-msgid "pull request was reviewed by all reviewers"
-msgstr ""
-
-#: rhodecode/templates/pullrequests/pullrequest_show.html:58
+#: rhodecode/templates/pullrequests/pullrequest_show.html:59
+msgid "Pull request was reviewed by all reviewers"
+msgstr ""
+
+#: rhodecode/templates/pullrequests/pullrequest_show.html:65
+#, fuzzy
+msgid "Origin repository"
+msgstr "Git 版本庫"
+
+#: rhodecode/templates/pullrequests/pullrequest_show.html:89
 #, fuzzy
 msgid "Created on"
 msgstr "建立使用者 %s"
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:65
+#: rhodecode/templates/pullrequests/pullrequest_show.html:102
 #, fuzzy
 msgid "Compare view"
 msgstr "比較顯示"
 
-#: rhodecode/templates/pullrequests/pullrequest_show.html:112
+#: rhodecode/templates/pullrequests/pullrequest_show.html:149
 #, fuzzy
 msgid "reviewer"
 msgstr ""
 
+#: rhodecode/templates/pullrequests/pullrequest_show.html:164
+#, fuzzy
+msgid "Add or remove reviewer to this pull request."
+msgstr "確認移除這個版本庫"
+
+#: rhodecode/templates/pullrequests/pullrequest_show.html:168
+#, fuzzy
+msgid "Save changes"
+msgstr "沒有修改"
+
 #: rhodecode/templates/pullrequests/pullrequest_show_all.html:4
-#, fuzzy
-msgid "all pull requests"
+#, fuzzy, python-format
+msgid "%s Pull Requests"
 msgstr "建立使用者 %s"
 
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:12
-msgid "All pull requests"
-msgstr ""
-
-#: rhodecode/templates/pullrequests/pullrequest_show_all.html:27
-msgid "Closed"
-msgstr ""
-
 #: rhodecode/templates/search/search.html:6
-#, fuzzy, python-format
-msgid "Search \"%s\" in repository: %s"
+#, fuzzy
+msgid "Search repository"
 msgstr "於版本庫:"
 
 #: rhodecode/templates/search/search.html:8
-#, fuzzy, python-format
-msgid "Search \"%s\" in all repositories"
-msgstr "於所有的版本庫"
-
-#: rhodecode/templates/search/search.html:12
-#: rhodecode/templates/search/search.html:32
-#, fuzzy, python-format
-msgid "Search in repository: %s"
-msgstr "於版本庫:"
-
-#: rhodecode/templates/search/search.html:14
-#: rhodecode/templates/search/search.html:34
+#: rhodecode/templates/search/search.html:16
 #, fuzzy
 msgid "Search in all repositories"
 msgstr "於所有的版本庫"
 
-#: rhodecode/templates/search/search.html:48
+#: rhodecode/templates/search/search.html:50
 msgid "Search term"
 msgstr "搜尋關鍵字"
 
-#: rhodecode/templates/search/search.html:60
+#: rhodecode/templates/search/search.html:62
 msgid "Search in"
 msgstr "搜尋範圍"
 
-#: rhodecode/templates/search/search.html:63
+#: rhodecode/templates/search/search.html:65
 msgid "File contents"
 msgstr "文件內容"
 
-#: rhodecode/templates/search/search.html:64
+#: rhodecode/templates/search/search.html:66
 #, fuzzy
 msgid "Commit messages"
 msgstr "遞交資訊"
 
-#: rhodecode/templates/search/search.html:65
+#: rhodecode/templates/search/search.html:67
 msgid "File names"
 msgstr "檔案名稱"
 
@@ -4118,42 +4385,25 @@
 msgid "Permission denied"
 msgstr "權限不足"
 
-#: rhodecode/templates/settings/repo_settings.html:5
-#, fuzzy, python-format
-msgid "%s Settings"
-msgstr "設定"
-
-#: rhodecode/templates/settings/repo_settings.html:102
-#, fuzzy
-msgid "Delete repository"
-msgstr "刪除版本庫 %s"
-
-#: rhodecode/templates/settings/repo_settings.html:109
-#, fuzzy
-msgid "Remove repo"
-msgstr "移除"
-
 #: rhodecode/templates/shortlog/shortlog.html:5
 #, fuzzy, python-format
-msgid "%s Shortlog"
-msgstr "簡短紀錄"
-
+msgid "%s Lightweight Changelog"
+msgstr "檔案修改"
+
+#: rhodecode/templates/shortlog/shortlog.html:11
 #: rhodecode/templates/shortlog/shortlog.html:15
-#: rhodecode/templates/shortlog/shortlog.html:19
-msgid "shortlog"
-msgstr "簡短紀錄"
-
-#: rhodecode/templates/shortlog/shortlog_data.html:5
-msgid "revision"
-msgstr "修訂"
+msgid "Lightweight Changelog"
+msgstr ""
 
 #: rhodecode/templates/shortlog/shortlog_data.html:7
-msgid "age"
-msgstr ""
-
-#: rhodecode/templates/shortlog/shortlog_data.html:8
-msgid "author"
-msgstr "作者"
+#, fuzzy
+msgid "Age"
+msgstr "標籤"
+
+#: rhodecode/templates/shortlog/shortlog_data.html:20
+#, python-format
+msgid "Click to open associated pull request #%s"
+msgstr ""
 
 #: rhodecode/templates/shortlog/shortlog_data.html:75
 msgid "Add or upload files directly via RhodeCode"
@@ -4173,162 +4423,175 @@
 msgid "%s Summary"
 msgstr "概況"
 
-#: rhodecode/templates/summary/summary.html:12
-msgid "summary"
-msgstr "概況"
-
-#: rhodecode/templates/summary/summary.html:20
-#, fuzzy, python-format
-msgid "repo %s ATOM feed"
-msgstr "訂閱 %s atom"
-
-#: rhodecode/templates/summary/summary.html:21
+#: rhodecode/templates/summary/summary.html:16
 #, fuzzy, python-format
-msgid "repo %s RSS feed"
+msgid "%s ATOM feed"
+msgstr "訂閱 %s atom"
+
+#: rhodecode/templates/summary/summary.html:17
+#, fuzzy, python-format
+msgid "%s RSS feed"
 msgstr "訂閱 %s rss"
 
-#: rhodecode/templates/summary/summary.html:49
-#: rhodecode/templates/summary/summary.html:52
-#, fuzzy
-msgid "ATOM"
-msgstr "作者"
-
-#: rhodecode/templates/summary/summary.html:70
+#: rhodecode/templates/summary/summary.html:62
 #, fuzzy, python-format
 msgid "Repository locked by %s"
 msgstr "個版本庫"
 
-#: rhodecode/templates/summary/summary.html:72
+#: rhodecode/templates/summary/summary.html:64
 #, fuzzy
 msgid "Repository unlocked"
 msgstr "個版本庫"
 
-#: rhodecode/templates/summary/summary.html:91
+#: rhodecode/templates/summary/summary.html:83
 #, fuzzy, python-format
 msgid "Non changable ID %s"
 msgstr "沒有修改"
 
-#: rhodecode/templates/summary/summary.html:96
-msgid "public"
+#: rhodecode/templates/summary/summary.html:88
+#, fuzzy
+msgid "Public"
 msgstr "公開"
 
-#: rhodecode/templates/summary/summary.html:104
-msgid "remote clone"
+#: rhodecode/templates/summary/summary.html:88
+#: rhodecode/templates/summary/summary.html:89
+msgid "Fork of"
+msgstr ""
+
+#: rhodecode/templates/summary/summary.html:96
+#, fuzzy
+msgid "Remote clone"
 msgstr "遠端複製"
 
-#: rhodecode/templates/summary/summary.html:125
+#: rhodecode/templates/summary/summary.html:117
 msgid "Contact"
 msgstr "聯絡方式"
 
-#: rhodecode/templates/summary/summary.html:139
+#: rhodecode/templates/summary/summary.html:131
 msgid "Clone url"
 msgstr "複製連結"
 
-#: rhodecode/templates/summary/summary.html:142
+#: rhodecode/templates/summary/summary.html:136
 #, fuzzy
 msgid "Show by Name"
 msgstr "顯示更多"
 
-#: rhodecode/templates/summary/summary.html:143
+#: rhodecode/templates/summary/summary.html:137
 msgid "Show by ID"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:151
+#: rhodecode/templates/summary/summary.html:143
 #, fuzzy
 msgid "Trending files"
 msgstr "編輯檔案"
 
-#: rhodecode/templates/summary/summary.html:159
-#: rhodecode/templates/summary/summary.html:175
-#: rhodecode/templates/summary/summary.html:203
+#: rhodecode/templates/summary/summary.html:151
+#: rhodecode/templates/summary/summary.html:167
+#: rhodecode/templates/summary/summary.html:232
 msgid "enable"
 msgstr "啟用"
 
-#: rhodecode/templates/summary/summary.html:167
+#: rhodecode/templates/summary/summary.html:159
 msgid "Download"
 msgstr "下載"
 
-#: rhodecode/templates/summary/summary.html:171
+#: rhodecode/templates/summary/summary.html:163
 msgid "There are no downloads yet"
 msgstr "沒有任何下載"
 
-#: rhodecode/templates/summary/summary.html:173
+#: rhodecode/templates/summary/summary.html:165
 msgid "Downloads are disabled for this repository"
 msgstr "這個版本庫的下載已停用"
 
-#: rhodecode/templates/summary/summary.html:179
+#: rhodecode/templates/summary/summary.html:171
 #, fuzzy
 msgid "Download as zip"
 msgstr "下載原始文件"
 
-#: rhodecode/templates/summary/summary.html:182
+#: rhodecode/templates/summary/summary.html:174
 msgid "Check this to download archive with subrepos"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:182
+#: rhodecode/templates/summary/summary.html:174
 msgid "with subrepos"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:195
+#: rhodecode/templates/summary/summary.html:197
+#, fuzzy
+msgid "Repository Size"
+msgstr "個版本庫"
+
+#: rhodecode/templates/summary/summary.html:204
+#: rhodecode/templates/summary/summary.html:206
+#, fuzzy
+msgid "Feed"
+msgstr "已建立分支"
+
+#: rhodecode/templates/summary/summary.html:224
 msgid "Commit activity by day / author"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:206
+#: rhodecode/templates/summary/summary.html:235
 msgid "Stats gathered: "
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:227
-msgid "Shortlog"
-msgstr "簡短紀錄"
-
-#: rhodecode/templates/summary/summary.html:229
+#: rhodecode/templates/summary/summary.html:256
+#, fuzzy
+msgid "Latest changes"
+msgstr "最後修改"
+
+#: rhodecode/templates/summary/summary.html:258
 #, fuzzy
 msgid "Quick start"
 msgstr "快速過濾..."
 
-#: rhodecode/templates/summary/summary.html:243
+#: rhodecode/templates/summary/summary.html:272
 #, python-format
 msgid "Readme file at revision '%s'"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:246
+#: rhodecode/templates/summary/summary.html:275
 msgid "Permalink to this readme"
 msgstr ""
 
-#: rhodecode/templates/summary/summary.html:304
+#: rhodecode/templates/summary/summary.html:333
 #, python-format
 msgid "Download %s as %s"
 msgstr "下載 %s 為 %s"
 
-#: rhodecode/templates/summary/summary.html:661
+#: rhodecode/templates/summary/summary.html:380
+msgid "files"
+msgstr "檔案"
+
+#: rhodecode/templates/summary/summary.html:690
 msgid "commits"
 msgstr "遞交"
 
-#: rhodecode/templates/summary/summary.html:662
+#: rhodecode/templates/summary/summary.html:691
 msgid "files added"
 msgstr "多個檔案新增"
 
-#: rhodecode/templates/summary/summary.html:663
+#: rhodecode/templates/summary/summary.html:692
 msgid "files changed"
 msgstr "多個檔案修改"
 
-#: rhodecode/templates/summary/summary.html:664
+#: rhodecode/templates/summary/summary.html:693
 msgid "files removed"
 msgstr "移除多個檔案"
 
-#: rhodecode/templates/summary/summary.html:667
+#: rhodecode/templates/summary/summary.html:695
 msgid "commit"
 msgstr "遞交"
 
-#: rhodecode/templates/summary/summary.html:668
+#: rhodecode/templates/summary/summary.html:696
 msgid "file added"
 msgstr "檔案新增"
 
-#: rhodecode/templates/summary/summary.html:669
+#: rhodecode/templates/summary/summary.html:697
 msgid "file changed"
 msgstr "檔案修改"
 
-#: rhodecode/templates/summary/summary.html:670
+#: rhodecode/templates/summary/summary.html:698
 msgid "file removed"
 msgstr "移除檔案"
 
@@ -4337,24 +4600,8 @@
 msgid "%s Tags"
 msgstr "之前"
 
-#: rhodecode/templates/tags/tags.html:29
+#: rhodecode/templates/tags/tags.html:26
 #, fuzzy
 msgid "Compare tags"
 msgstr "比較顯示"
 
-#~ msgid ""
-#~ "%s repository is not mapped to db"
-#~ " perhaps it was created or renamed"
-#~ " from the file system please run "
-#~ "the application again in order to "
-#~ "rescan repositories"
-#~ msgstr ""
-
-#~ msgid ""
-#~ "%s repository is not mapped to db"
-#~ " perhaps it was moved or renamed  "
-#~ "from the filesystem please run the "
-#~ "application again in order to rescan "
-#~ "repositories"
-#~ msgstr ""
-
--- a/rhodecode/lib/__init__.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/lib/__init__.py	Sun Apr 07 18:37:22 2013 +0200
@@ -19,6 +19,7 @@
         return (tip.revision, tip.short_id)
     except Exception, err:
         if not quiet:
-            print ("Cannot retrieve rhodecode's revision. Original error "
-                   "was: %s" % err)
+            print ("WARNING: Cannot retrieve rhodecode's revision. "
+                   "disregard this if you don't know what that means. "
+                   "Original error was: %s" % err)
         return None
--- a/rhodecode/lib/annotate.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/lib/annotate.py	Sun Apr 07 18:37:22 2013 +0200
@@ -10,14 +10,13 @@
     :copyright: (C) 2011-2012 Marcin Kuzminski <marcin@python-works.com>
     :license: GPLv3, see COPYING for more details.
 """
+import StringIO
 
 from rhodecode.lib.vcs.exceptions import VCSError
 from rhodecode.lib.vcs.nodes import FileNode
 from pygments.formatters import HtmlFormatter
 from pygments import highlight
 
-import StringIO
-
 
 def annotate_highlight(filenode, annotate_from_changeset_func=None,
         order=None, headers=None, **options):
@@ -34,11 +33,12 @@
     :param headers: dictionary with headers (keys are whats in ``order``
       parameter)
     """
+    from rhodecode.lib.utils import get_custom_lexer
     options['linenos'] = True
     formatter = AnnotateHtmlFormatter(filenode=filenode, order=order,
         headers=headers,
         annotate_from_changeset_func=annotate_from_changeset_func, **options)
-    lexer = filenode.lexer
+    lexer = get_custom_lexer(filenode.extension) or filenode.lexer
     highlighted = highlight(filenode.content, lexer, formatter)
     return highlighted
 
--- a/rhodecode/lib/auth.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/lib/auth.py	Sun Apr 07 18:37:22 2013 +0200
@@ -40,7 +40,8 @@
 from rhodecode.model.meta import Session
 
 from rhodecode.lib.utils2 import str2bool, safe_unicode
-from rhodecode.lib.exceptions import LdapPasswordError, LdapUsernameError
+from rhodecode.lib.exceptions import LdapPasswordError, LdapUsernameError,\
+    LdapImportError
 from rhodecode.lib.utils import get_repo_slug, get_repos_group_slug
 from rhodecode.lib.auth_ldap import AuthLdap
 
@@ -241,7 +242,7 @@
 
                 Session().commit()
                 return True
-            except (LdapUsernameError, LdapPasswordError,):
+            except (LdapUsernameError, LdapPasswordError, LdapImportError):
                 pass
             except (Exception,):
                 log.error(traceback.format_exc())
@@ -381,7 +382,7 @@
 
         if not is_user_loaded:
             # if we cannot authenticate user try anonymous
-            if self.anonymous_user.active is True:
+            if self.anonymous_user.active:
                 user_model.fill_data(self, user_id=self.anonymous_user.user_id)
                 # then we set this user is logged in
                 self.is_authenticated = True
@@ -401,6 +402,22 @@
         return self.admin
 
     @property
+    def repos_admin(self):
+        """
+        Returns list of repositories you're an admin of
+        """
+        return [x[0] for x in self.permissions['repositories'].iteritems()
+                if x[1] == 'repository.admin']
+
+    @property
+    def groups_admin(self):
+        """
+        Returns list of repository groups you're an admin of
+        """
+        return [x[0] for x in self.permissions['repositories_groups'].iteritems()
+                if x[1] == 'group.admin']
+
+    @property
     def ip_allowed(self):
         """
         Checks if ip_addr used in constructor is allowed from defined list of
@@ -663,7 +680,6 @@
 
     def check_permissions(self):
         repo_name = get_repo_slug(request)
-
         try:
             user_perms = set([self.user_perms['repositories'][repo_name]])
         except KeyError:
@@ -686,6 +702,7 @@
             user_perms = set([self.user_perms['repositories_groups'][group_name]])
         except KeyError:
             return False
+
         if self.required_perms.issubset(user_perms):
             return True
         return False
@@ -699,11 +716,11 @@
 
     def check_permissions(self):
         group_name = get_repos_group_slug(request)
-
         try:
             user_perms = set([self.user_perms['repositories_groups'][group_name]])
         except KeyError:
             return False
+
         if self.required_perms.intersection(user_perms):
             return True
         return False
@@ -726,7 +743,8 @@
         self.repo_name = None
         self.group_name = None
 
-    def __call__(self, check_Location=''):
+    def __call__(self, check_location=''):
+        #TODO: put user as attribute here
         user = request.user
         cls_name = self.__class__.__name__
         check_scope = {
@@ -739,19 +757,19 @@
         }.get(cls_name, '?')
         log.debug('checking cls:%s %s usr:%s %s @ %s', cls_name,
                   self.required_perms, user, check_scope,
-                  check_Location or 'unspecified location')
+                  check_location or 'unspecified location')
         if not user:
             log.debug('Empty request user')
             return False
         self.user_perms = user.permissions
         if self.check_permissions():
             log.debug('Permission to %s granted for user: %s @ %s', self.repo_name, user,
-                      check_Location or 'unspecified location')
+                      check_location or 'unspecified location')
             return True
 
         else:
             log.debug('Permission to %s denied for user: %s @ %s', self.repo_name, user,
-                        check_Location or 'unspecified location')
+                        check_location or 'unspecified location')
             return False
 
     def check_permissions(self):
@@ -774,9 +792,9 @@
 
 
 class HasRepoPermissionAll(PermsFunction):
-    def __call__(self, repo_name=None, check_Location=''):
+    def __call__(self, repo_name=None, check_location=''):
         self.repo_name = repo_name
-        return super(HasRepoPermissionAll, self).__call__(check_Location)
+        return super(HasRepoPermissionAll, self).__call__(check_location)
 
     def check_permissions(self):
         if not self.repo_name:
@@ -794,9 +812,9 @@
 
 
 class HasRepoPermissionAny(PermsFunction):
-    def __call__(self, repo_name=None, check_Location=''):
+    def __call__(self, repo_name=None, check_location=''):
         self.repo_name = repo_name
-        return super(HasRepoPermissionAny, self).__call__(check_Location)
+        return super(HasRepoPermissionAny, self).__call__(check_location)
 
     def check_permissions(self):
         if not self.repo_name:
@@ -814,9 +832,9 @@
 
 
 class HasReposGroupPermissionAny(PermsFunction):
-    def __call__(self, group_name=None, check_Location=''):
+    def __call__(self, group_name=None, check_location=''):
         self.group_name = group_name
-        return super(HasReposGroupPermissionAny, self).__call__(check_Location)
+        return super(HasReposGroupPermissionAny, self).__call__(check_location)
 
     def check_permissions(self):
         try:
@@ -831,9 +849,9 @@
 
 
 class HasReposGroupPermissionAll(PermsFunction):
-    def __call__(self, group_name=None, check_Location=''):
+    def __call__(self, group_name=None, check_location=''):
         self.group_name = group_name
-        return super(HasReposGroupPermissionAll, self).__call__(check_Location)
+        return super(HasReposGroupPermissionAll, self).__call__(check_location)
 
     def check_permissions(self):
         try:
--- a/rhodecode/lib/auth_ldap.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/lib/auth_ldap.py	Sun Apr 07 18:37:22 2013 +0200
@@ -26,7 +26,7 @@
 import logging
 
 from rhodecode.lib.exceptions import LdapConnectionError, LdapUsernameError, \
-    LdapPasswordError
+    LdapPasswordError, LdapImportError
 from rhodecode.lib.utils2 import safe_str
 
 log = logging.getLogger(__name__)
@@ -36,7 +36,7 @@
     import ldap
 except ImportError:
     # means that python-ldap is not installed
-    pass
+    ldap = None
 
 
 class AuthLdap(object):
@@ -45,6 +45,9 @@
                  tls_kind='PLAIN', tls_reqcert='DEMAND', ldap_version=3,
                  ldap_filter='(&(objectClass=user)(!(objectClass=computer)))',
                  search_scope='SUBTREE', attr_login='uid'):
+        if ldap is None:
+            raise LdapImportError
+
         self.ldap_version = ldap_version
         ldap_server_type = 'ldap'
 
--- a/rhodecode/lib/base.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/lib/base.py	Sun Apr 07 18:37:22 2013 +0200
@@ -32,6 +32,22 @@
 log = logging.getLogger(__name__)
 
 
+def _filter_proxy(ip):
+    """
+    HEADERS can have mutliple ips inside the left-most being the original
+    client, and each successive proxy that passed the request adding the IP
+    address where it received the request from.
+
+    :param ip:
+    """
+    if ',' in ip:
+        _ips = ip.split(',')
+        _first_ip = _ips[0].strip()
+        log.debug('Got multiple IPs %s, using %s' % (','.join(_ips), _first_ip))
+        return _first_ip
+    return ip
+
+
 def _get_ip_addr(environ):
     proxy_key = 'HTTP_X_REAL_IP'
     proxy_key2 = 'HTTP_X_FORWARDED_FOR'
@@ -39,22 +55,14 @@
 
     ip = environ.get(proxy_key)
     if ip:
-        return ip
+        return _filter_proxy(ip)
 
     ip = environ.get(proxy_key2)
     if ip:
-        return ip
+        return _filter_proxy(ip)
 
     ip = environ.get(def_key, '0.0.0.0')
-
-    # HEADERS can have mutliple ips inside
-    # the left-most being the original client, and each successive proxy
-    # that passed the request adding the IP address where it received the
-    # request from.
-    if ',' in ip:
-        ip = ip.split(',')[0].strip()
-
-    return ip
+    return _filter_proxy(ip)
 
 
 def _get_access_path(environ):
@@ -127,7 +135,7 @@
                 if len(by_id) == 2 and by_id[1].isdigit():
                     _repo_name = Repository.get(by_id[1]).repo_name
                     data[1] = _repo_name
-        except:
+        except Exception:
             log.debug('Failed to extract repo_name from id %s' % (
                       traceback.format_exc()
                       )
@@ -265,8 +273,8 @@
         c.visual.stylify_metatags = str2bool(rc_config.get('rhodecode_stylify_metatags'))
         c.visual.lightweight_dashboard = str2bool(rc_config.get('rhodecode_lightweight_dashboard'))
         c.visual.lightweight_dashboard_items = safe_int(config.get('dashboard_items', 100))
-
-        c.repo_name = get_repo_slug(request)
+        c.visual.repository_fields = str2bool(rc_config.get('rhodecode_repository_fields'))
+        c.repo_name = get_repo_slug(request)  # can be empty
         c.backends = BACKENDS.keys()
         c.unread_notifications = NotificationModel()\
                         .get_unread_cnt_for_user(c.rhodecode_user.user_id)
@@ -280,7 +288,6 @@
         # WSGIController.__call__ dispatches to the Controller method
         # the request is routed to. This routing information is
         # available in environ['pylons.routes_dict']
-        start = time.time()
         try:
             self.ip_addr = _get_ip_addr(environ)
             # make sure that we update permissions each time we call controller
@@ -301,10 +308,6 @@
             )
             return WSGIController.__call__(self, environ, start_response)
         finally:
-            log.info('IP: %s Request to %s time: %.3fs' % (
-                _get_ip_addr(environ),
-                safe_unicode(_get_access_path(environ)), time.time() - start)
-            )
             meta.Session.remove()
 
 
@@ -317,6 +320,7 @@
     c.rhodecode_db_repo: instance of db
     c.repository_followers: number of followers
     c.repository_forks: number of forks
+    c.repository_following: weather the current user is following the current repo
     """
 
     def __before__(self):
@@ -337,3 +341,5 @@
             c.repository_followers = self.scm_model.get_followers(dbr)
             c.repository_forks = self.scm_model.get_forks(dbr)
             c.repository_pull_requests = self.scm_model.get_pull_requests(dbr)
+            c.repository_following = self.scm_model.is_following_repo(c.repo_name,
+                                                self.rhodecode_user.user_id)
--- a/rhodecode/lib/celerylib/__init__.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/lib/celerylib/__init__.py	Sun Apr 07 18:37:22 2013 +0200
@@ -59,6 +59,7 @@
 
 
 def run_task(task, *args, **kwargs):
+    global CELERY_ON
     if CELERY_ON:
         try:
             t = task.apply_async(args=args, kwargs=kwargs)
@@ -68,6 +69,7 @@
         except socket.error, e:
             if isinstance(e, IOError) and e.errno == 111:
                 log.debug('Unable to connect to celeryd. Sync execution')
+                CELERY_ON = False
             else:
                 log.error(traceback.format_exc())
         except KeyError, e:
@@ -122,7 +124,7 @@
             ret = func(*fargs, **fkwargs)
             return ret
         finally:
-            if CELERY_ON and CELERY_EAGER is False:
+            if CELERY_ON and not CELERY_EAGER:
                 meta.Session.remove()
 
     return decorator(__wrapper, func)
--- a/rhodecode/lib/celerylib/tasks.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/lib/celerylib/tasks.py	Sun Apr 07 18:37:22 2013 +0200
@@ -87,7 +87,7 @@
 
 @task(ignore_result=True)
 @dbsession
-def get_commits_stats(repo_name, ts_min_y, ts_max_y):
+def get_commits_stats(repo_name, ts_min_y, ts_max_y, recurse_limit=100):
     log = get_logger(get_commits_stats)
     DBS = get_session()
     lockkey = __get_lockkey('get_commits_stats', repo_name, ts_min_y,
@@ -160,9 +160,9 @@
                          co_day_auth_aggr[akc(cs.author)]['data']]
                     time_pos = l.index(k)
                 except ValueError:
-                    time_pos = False
+                    time_pos = None
 
-                if time_pos >= 0 and time_pos is not False:
+                if time_pos >= 0 and time_pos is not None:
 
                     datadict = \
                         co_day_auth_aggr[akc(cs.author)]['data'][time_pos]
@@ -240,8 +240,12 @@
         lock.release()
 
         # execute another task if celery is enabled
-        if len(repo.revisions) > 1 and CELERY_ON:
-            run_task(get_commits_stats, repo_name, ts_min_y, ts_max_y)
+        if len(repo.revisions) > 1 and CELERY_ON and recurse_limit > 0:
+            recurse_limit -= 1
+            run_task(get_commits_stats, repo_name, ts_min_y, ts_max_y,
+                     recurse_limit)
+        if recurse_limit <= 0:
+            log.debug('Breaking recursive mode due to reach of recurse limit')
         return True
     except LockHeld:
         log.info('LockHeld')
@@ -250,7 +254,7 @@
 
 @task(ignore_result=True)
 @dbsession
-def send_email(recipients, subject, body, html_body=''):
+def send_email(recipients, subject, body='', html_body=''):
     """
     Sends an email with defined parameters from the .ini files.
 
@@ -278,7 +282,7 @@
     mail_port = email_config.get('smtp_port')
     tls = str2bool(email_config.get('smtp_use_tls'))
     ssl = str2bool(email_config.get('smtp_use_ssl'))
-    debug = str2bool(config.get('debug'))
+    debug = str2bool(email_config.get('debug'))
     smtp_auth = email_config.get('smtp_auth')
 
     if not mail_server:
@@ -363,6 +367,7 @@
                    fork_name, '', DBS)
     # finally commit at latest possible stage
     DBS.commit()
+    fork_repo.update_changeset_cache()
 
 
 def __get_codes_stats(repo_name):
--- a/rhodecode/lib/cleanup.py	Mon Mar 11 17:59:38 2013 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,144 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-    package.rhodecode.lib.cleanup
-    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-    :created_on: Jul 14, 2012
-    :author: marcink
-    :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
-    :license: GPLv3, see COPYING for more details.
-"""
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-from __future__ import with_statement
-
-import os
-import sys
-import re
-import shutil
-import logging
-import datetime
-
-from os.path import dirname as dn, join as jn
-from rhodecode.model import init_model
-from rhodecode.lib.utils2 import engine_from_config, safe_str
-from rhodecode.model.db import RhodeCodeUi
-
-
-#to get the rhodecode import
-sys.path.append(dn(dn(dn(os.path.realpath(__file__)))))
-
-from rhodecode.lib.utils import BasePasterCommand, Command, ask_ok,\
-    REMOVED_REPO_PAT, add_cache
-
-log = logging.getLogger(__name__)
-
-
-class CleanupCommand(BasePasterCommand):
-
-    max_args = 1
-    min_args = 1
-
-    usage = "CONFIG_FILE"
-    summary = "Cleanup deleted repos"
-    group_name = "RhodeCode"
-    takes_config_file = -1
-    parser = Command.standard_parser(verbose=True)
-
-    def _parse_older_than(self, val):
-        regex = re.compile(r'((?P<days>\d+?)d)?((?P<hours>\d+?)h)?((?P<minutes>\d+?)m)?((?P<seconds>\d+?)s)?')
-        parts = regex.match(val)
-        if not parts:
-            return
-        parts = parts.groupdict()
-        time_params = {}
-        for (name, param) in parts.iteritems():
-            if param:
-                time_params[name] = int(param)
-        return datetime.timedelta(**time_params)
-
-    def _extract_date(self, name):
-        """
-        Extract the date part from rm__<date> pattern of removed repos,
-        and convert it to datetime object
-
-        :param name:
-        """
-        date_part = name[4:19]  # 4:19 since we don't parse milisecods
-        return datetime.datetime.strptime(date_part, '%Y%m%d_%H%M%S')
-
-    def command(self):
-        logging.config.fileConfig(self.path_to_ini_file)
-        from pylons import config
-
-        #get to remove repos !!
-        add_cache(config)
-        engine = engine_from_config(config, 'sqlalchemy.db1.')
-        init_model(engine)
-
-        repos_location = RhodeCodeUi.get_repos_location()
-        to_remove = []
-        for dn, dirs, f in os.walk(safe_str(repos_location)):
-            for loc in dirs:
-                if REMOVED_REPO_PAT.match(loc):
-                    to_remove.append([os.path.join(dn, loc),
-                                      self._extract_date(loc)])
-
-        #filter older than (if present)!
-        now = datetime.datetime.now()
-        older_than = self.options.older_than
-        if older_than:
-            to_remove_filtered = []
-            older_than_date = self._parse_older_than(older_than)
-            for name, date_ in to_remove:
-                repo_age = now - date_
-                if repo_age > older_than_date:
-                    to_remove_filtered.append([name, date_])
-
-            to_remove = to_remove_filtered
-            print >> sys.stdout, 'removing [%s] deleted repos older than %s[%s]' \
-                % (len(to_remove), older_than, older_than_date)
-        else:
-            print >> sys.stdout, 'removing all [%s] deleted repos' \
-                % len(to_remove)
-        if self.options.dont_ask or not to_remove:
-            # don't ask just remove !
-            remove = True
-        else:
-            remove = ask_ok('are you sure to remove listed repos \n%s [y/n]?'
-                            % ', \n'.join(['%s removed on %s'
-                    % (safe_str(x[0]), safe_str(x[1])) for x in to_remove]))
-
-        if remove:
-            for name, date_ in to_remove:
-                print >> sys.stdout, 'removing repository %s' % name
-                shutil.rmtree(os.path.join(repos_location, name))
-        else:
-            print 'nothing done exiting...'
-            sys.exit(0)
-
-    def update_parser(self):
-        self.parser.add_option('--older-than',
-                          action='store',
-                          dest='older_than',
-                          help=(
-                            "only remove repos that have been removed "
-                            "at least given time ago "
-                            "ex. --older-than=30d deletes repositores "
-                            "removed more than 30days ago. Possible options "
-                            "d[ays]/h[ours]/m[inutes]/s[seconds]. OPTIONAL"),
-                          )
-        self.parser.add_option('--dont-ask',
-                               action='store_true',
-                               dest='dont_ask',
-                               help=("Don't ask to remove repos"))
--- a/rhodecode/lib/db_manage.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/lib/db_manage.py	Sun Apr 07 18:37:22 2013 +0200
@@ -43,6 +43,7 @@
 from rhodecode.model.repos_group import ReposGroupModel
 #from rhodecode.model import meta
 from rhodecode.model.meta import Session, Base
+from rhodecode.model.repo import RepoModel
 
 
 log = logging.getLogger(__name__)
@@ -66,12 +67,11 @@
         self.db_exists = False
         self.cli_args = cli_args
         self.init_db()
-        global ask_ok
 
-        if self.cli_args.get('force_ask') is True:
-            ask_ok = lambda *args, **kwargs: True
-        elif self.cli_args.get('force_ask') is False:
-            ask_ok = lambda *args, **kwargs: False
+        force_ask = self.cli_args.get('force_ask')
+        if force_ask is not None:
+            global ask_ok
+            ask_ok = lambda *args, **kwargs: force_ask
 
     def init_db(self):
         engine = create_engine(self.dburi, echo=self.log_sql)
@@ -289,6 +289,9 @@
             def step_10(self):
                 pass
 
+            def step_11(self):
+                self.klass.update_repo_info()
+
         upgrade_steps = [0] + range(curr_version + 1, __dbversion__ + 1)
 
         # CALL THE PROPER ORDER OF STEPS TO PERFORM FULL UPGRADE
@@ -315,7 +318,7 @@
         try:
             self.sa.add(paths)
             self.sa.commit()
-        except:
+        except Exception:
             self.sa.rollback()
             raise
 
@@ -335,7 +338,7 @@
         try:
             self.sa.add(def_user)
             self.sa.commit()
-        except:
+        except Exception:
             self.sa.rollback()
             raise
 
@@ -349,7 +352,7 @@
         try:
             self.sa.add(hgsettings3)
             self.sa.commit()
-        except:
+        except Exception:
             self.sa.rollback()
             raise
 
@@ -549,6 +552,9 @@
             self.populate_default_permissions()
         return fixed
 
+    def update_repo_info(self):
+        RepoModel.update_repoinfo()
+
     def config_prompt(self, test_repo_path='', retries=3):
         defaults = self.cli_args
         _path = defaults.get('repos_location')
@@ -582,7 +588,7 @@
 
         if retries == 0:
             sys.exit('max retries reached')
-        if path_ok is False:
+        if not path_ok:
             retries -= 1
             return self.config_prompt(test_repo_path, retries)
 
@@ -704,7 +710,8 @@
                 reg_perm.permission = perm
                 self.sa.add(reg_perm)
 
-    def finish(self):
+    @staticmethod
+    def check_waitress():
         """
         Function executed at the end of setup
         """
--- a/rhodecode/lib/dbmigrate/__init__.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/lib/dbmigrate/__init__.py	Sun Apr 07 18:37:22 2013 +0200
@@ -41,7 +41,7 @@
     min_args = 1
 
     usage = "CONFIG_FILE"
-    summary = "Upgrades current db to newer version given configuration file"
+    summary = "Upgrades current db to newer version"
     group_name = "RhodeCode"
 
     parser = Command.standard_parser(verbose=True)
--- a/rhodecode/lib/dbmigrate/schema/db_1_2_0.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/lib/dbmigrate/schema/db_1_2_0.py	Sun Apr 07 18:37:22 2013 +0200
@@ -41,7 +41,7 @@
 
 from rhodecode.lib.utils2 import str2bool, safe_str, get_changeset_safe, \
     generate_api_key, safe_unicode
-from rhodecode.lib.exceptions import UsersGroupsAssignedException
+from rhodecode.lib.exceptions import UserGroupsAssignedException
 from rhodecode.lib.compat import json
 
 from rhodecode.model.meta import Base, Session
@@ -282,7 +282,7 @@
     user_followers = relationship('UserFollowing', primaryjoin='UserFollowing.follows_user_id==User.user_id', cascade='all')
     repo_to_perm = relationship('UserRepoToPerm', primaryjoin='UserRepoToPerm.user_id==User.user_id', cascade='all')
 
-    group_member = relationship('UsersGroupMember', cascade='all')
+    group_member = relationship('UserGroupMember', cascade='all')
 
     @property
     def full_contact(self):
@@ -361,7 +361,7 @@
     repository = relationship('Repository')
 
 
-class UsersGroup(Base, BaseModel):
+class UserGroup(Base, BaseModel):
     __tablename__ = 'users_groups'
     __table_args__ = {'extend_existing':True}
 
@@ -369,7 +369,7 @@
     users_group_name = Column("users_group_name", String(length=255, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None)
     users_group_active = Column("users_group_active", Boolean(), nullable=True, unique=None, default=None)
 
-    members = relationship('UsersGroupMember', cascade="all, delete, delete-orphan", lazy="joined")
+    members = relationship('UserGroupMember', cascade="all, delete, delete-orphan", lazy="joined")
 
     def __repr__(self):
         return '<userGroup(%s)>' % (self.users_group_name)
@@ -425,7 +425,7 @@
                     if v:
                         v = [v] if isinstance(v, basestring) else v
                         for u_id in set(v):
-                            member = UsersGroupMember(users_group_id, u_id)
+                            member = UserGroupMember(users_group_id, u_id)
                             members_list.append(member)
                     setattr(users_group, 'members', members_list)
                 setattr(users_group, k, v)
@@ -442,12 +442,12 @@
         try:
 
             # check if this group is not assigned to repo
-            assigned_groups = UsersGroupRepoToPerm.query()\
-                .filter(UsersGroupRepoToPerm.users_group_id ==
+            assigned_groups = UserGroupRepoToPerm.query()\
+                .filter(UserGroupRepoToPerm.users_group_id ==
                         users_group_id).all()
 
             if assigned_groups:
-                raise UsersGroupsAssignedException('RepoGroup assigned to %s' %
+                raise UserGroupsAssignedException('RepoGroup assigned to %s' %
                                                    assigned_groups)
 
             users_group = cls.get(users_group_id, cache=False)
@@ -458,7 +458,7 @@
             Session.rollback()
             raise
 
-class UsersGroupMember(Base, BaseModel):
+class UserGroupMember(Base, BaseModel):
     __tablename__ = 'users_groups_members'
     __table_args__ = {'extend_existing':True}
 
@@ -467,7 +467,7 @@
     user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
 
     user = relationship('User', lazy='joined')
-    users_group = relationship('UsersGroup')
+    users_group = relationship('UserGroup')
 
     def __init__(self, gr_id='', u_id=''):
         self.users_group_id = gr_id
@@ -475,7 +475,7 @@
 
     @staticmethod
     def add_user_to_group(group, user):
-        ugm = UsersGroupMember()
+        ugm = UserGroupMember()
         ugm.users_group = group
         ugm.user = user
         Session.add(ugm)
@@ -505,7 +505,7 @@
     fork = relationship('Repository', remote_side=repo_id)
     group = relationship('RepoGroup')
     repo_to_perm = relationship('UserRepoToPerm', cascade='all', order_by='UserRepoToPerm.repo_to_perm_id')
-    users_group_to_perm = relationship('UsersGroupRepoToPerm', cascade='all')
+    users_group_to_perm = relationship('UserGroupRepoToPerm', cascade='all')
     stats = relationship('Statistics', cascade='all', uselist=False)
 
     followers = relationship('UserFollowing', primaryjoin='UserFollowing.follows_repo_id==Repository.repo_id', cascade='all')
@@ -909,7 +909,7 @@
         except:
             Session.rollback()
 
-class UsersGroupRepoToPerm(Base, BaseModel):
+class UserGroupRepoToPerm(Base, BaseModel):
     __tablename__ = 'users_group_repo_to_perm'
     __table_args__ = (UniqueConstraint('repository_id', 'users_group_id', 'permission_id'), {'extend_existing':True})
     users_group_to_perm_id = Column("users_group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
@@ -917,21 +917,21 @@
     permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
     repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=None, default=None)
 
-    users_group = relationship('UsersGroup')
+    users_group = relationship('UserGroup')
     permission = relationship('Permission')
     repository = relationship('Repository')
 
     def __repr__(self):
         return '<userGroup:%s => %s >' % (self.users_group, self.repository)
 
-class UsersGroupToPerm(Base, BaseModel):
+class UserGroupToPerm(Base, BaseModel):
     __tablename__ = 'users_group_to_perm'
     __table_args__ = {'extend_existing':True}
     users_group_to_perm_id = Column("users_group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
     users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None)
     permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
 
-    users_group = relationship('UsersGroup')
+    users_group = relationship('UserGroup')
     permission = relationship('Permission')
 
 
--- a/rhodecode/lib/dbmigrate/schema/db_1_3_0.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/lib/dbmigrate/schema/db_1_3_0.py	Sun Apr 07 18:37:22 2013 +0200
@@ -305,7 +305,7 @@
     repo_to_perm = relationship('UserRepoToPerm', primaryjoin='UserRepoToPerm.user_id==User.user_id', cascade='all')
     repo_group_to_perm = relationship('UserRepoGroupToPerm', primaryjoin='UserRepoGroupToPerm.user_id==User.user_id', cascade='all')
 
-    group_member = relationship('UsersGroupMember', cascade='all')
+    group_member = relationship('UserGroupMember', cascade='all')
 
     notifications = relationship('UserNotification', cascade='all')
     # notifications assigned to this user
@@ -423,7 +423,7 @@
     repository = relationship('Repository', cascade='')
 
 
-class UsersGroup(Base, BaseModel):
+class UserGroup(Base, BaseModel):
     __tablename__ = 'users_groups'
     __table_args__ = (
         {'extend_existing': True, 'mysql_engine':'InnoDB',
@@ -434,9 +434,9 @@
     users_group_name = Column("users_group_name", String(length=255, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None)
     users_group_active = Column("users_group_active", Boolean(), nullable=True, unique=None, default=None)
 
-    members = relationship('UsersGroupMember', cascade="all, delete, delete-orphan", lazy="joined")
-    users_group_to_perm = relationship('UsersGroupToPerm', cascade='all')
-    users_group_repo_to_perm = relationship('UsersGroupRepoToPerm', cascade='all')
+    members = relationship('UserGroupMember', cascade="all, delete, delete-orphan", lazy="joined")
+    users_group_to_perm = relationship('UserGroupToPerm', cascade='all')
+    users_group_repo_to_perm = relationship('UserGroupRepoToPerm', cascade='all')
 
     def __unicode__(self):
         return u'<userGroup(%s)>' % (self.users_group_name)
@@ -465,7 +465,7 @@
         return users_group.get(users_group_id)
 
 
-class UsersGroupMember(Base, BaseModel):
+class UserGroupMember(Base, BaseModel):
     __tablename__ = 'users_groups_members'
     __table_args__ = (
         {'extend_existing': True, 'mysql_engine':'InnoDB',
@@ -477,7 +477,7 @@
     user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
 
     user = relationship('User', lazy='joined')
-    users_group = relationship('UsersGroup')
+    users_group = relationship('UserGroup')
 
     def __init__(self, gr_id='', u_id=''):
         self.users_group_id = gr_id
@@ -510,7 +510,7 @@
     fork = relationship('Repository', remote_side=repo_id)
     group = relationship('RepoGroup')
     repo_to_perm = relationship('UserRepoToPerm', cascade='all', order_by='UserRepoToPerm.repo_to_perm_id')
-    users_group_to_perm = relationship('UsersGroupRepoToPerm', cascade='all')
+    users_group_to_perm = relationship('UserGroupRepoToPerm', cascade='all')
     stats = relationship('Statistics', cascade='all', uselist=False)
 
     followers = relationship('UserFollowing', primaryjoin='UserFollowing.follows_repo_id==Repository.repo_id', cascade='all')
@@ -749,7 +749,7 @@
     group_description = Column("group_description", String(length=10000, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
 
     repo_group_to_perm = relationship('UserRepoGroupToPerm', cascade='all', order_by='UserRepoGroupToPerm.group_to_perm_id')
-    users_group_to_perm = relationship('UsersGroupRepoGroupToPerm', cascade='all')
+    users_group_to_perm = relationship('UserGroupRepoGroupToPerm', cascade='all')
 
     parent_group = relationship('RepoGroup', remote_side=group_id)
 
@@ -946,7 +946,7 @@
     permission = relationship('Permission', lazy='joined')
 
 
-class UsersGroupRepoToPerm(Base, BaseModel):
+class UserGroupRepoToPerm(Base, BaseModel):
     __tablename__ = 'users_group_repo_to_perm'
     __table_args__ = (
         UniqueConstraint('repository_id', 'users_group_id', 'permission_id'),
@@ -958,7 +958,7 @@
     permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
     repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=None, default=None)
 
-    users_group = relationship('UsersGroup')
+    users_group = relationship('UserGroup')
     permission = relationship('Permission')
     repository = relationship('Repository')
 
@@ -975,7 +975,7 @@
         return u'<userGroup:%s => %s >' % (self.users_group, self.repository)
 
 
-class UsersGroupToPerm(Base, BaseModel):
+class UserGroupToPerm(Base, BaseModel):
     __tablename__ = 'users_group_to_perm'
     __table_args__ = (
         UniqueConstraint('users_group_id', 'permission_id',),
@@ -986,7 +986,7 @@
     users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None)
     permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
 
-    users_group = relationship('UsersGroup')
+    users_group = relationship('UserGroup')
     permission = relationship('Permission')
 
 
@@ -1008,7 +1008,7 @@
     permission = relationship('Permission')
 
 
-class UsersGroupRepoGroupToPerm(Base, BaseModel):
+class UserGroupRepoGroupToPerm(Base, BaseModel):
     __tablename__ = 'users_group_repo_group_to_perm'
     __table_args__ = (
         UniqueConstraint('users_group_id', 'group_id'),
@@ -1021,7 +1021,7 @@
     group_id = Column("group_id", Integer(), ForeignKey('groups.group_id'), nullable=False, unique=None, default=None)
     permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
 
-    users_group = relationship('UsersGroup')
+    users_group = relationship('UserGroup')
     permission = relationship('Permission')
     group = relationship('RepoGroup')
 
--- a/rhodecode/lib/dbmigrate/schema/db_1_4_0.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/lib/dbmigrate/schema/db_1_4_0.py	Sun Apr 07 18:37:22 2013 +0200
@@ -322,7 +322,7 @@
     repo_to_perm = relationship('UserRepoToPerm', primaryjoin='UserRepoToPerm.user_id==User.user_id', cascade='all')
     repo_group_to_perm = relationship('UserRepoGroupToPerm', primaryjoin='UserRepoGroupToPerm.user_id==User.user_id', cascade='all')
 
-    group_member = relationship('UsersGroupMember', cascade='all')
+    group_member = relationship('UserGroupMember', cascade='all')
 
     notifications = relationship('UserNotification', cascade='all')
     # notifications assigned to this user
@@ -521,7 +521,7 @@
     repository = relationship('Repository', cascade='')
 
 
-class UsersGroup(Base, BaseModel):
+class UserGroup(Base, BaseModel):
     __tablename__ = 'users_groups'
     __table_args__ = (
         {'extend_existing': True, 'mysql_engine': 'InnoDB',
@@ -533,9 +533,9 @@
     users_group_active = Column("users_group_active", Boolean(), nullable=True, unique=None, default=None)
     inherit_default_permissions = Column("users_group_inherit_default_permissions", Boolean(), nullable=False, unique=None, default=True)
 
-    members = relationship('UsersGroupMember', cascade="all, delete, delete-orphan", lazy="joined")
-    users_group_to_perm = relationship('UsersGroupToPerm', cascade='all')
-    users_group_repo_to_perm = relationship('UsersGroupRepoToPerm', cascade='all')
+    members = relationship('UserGroupMember', cascade="all, delete, delete-orphan", lazy="joined")
+    users_group_to_perm = relationship('UserGroupToPerm', cascade='all')
+    users_group_repo_to_perm = relationship('UserGroupRepoToPerm', cascade='all')
 
     def __unicode__(self):
         return u'<userGroup(%s)>' % (self.users_group_name)
@@ -575,7 +575,7 @@
         return data
 
 
-class UsersGroupMember(Base, BaseModel):
+class UserGroupMember(Base, BaseModel):
     __tablename__ = 'users_groups_members'
     __table_args__ = (
         {'extend_existing': True, 'mysql_engine': 'InnoDB',
@@ -587,7 +587,7 @@
     user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
 
     user = relationship('User', lazy='joined')
-    users_group = relationship('UsersGroup')
+    users_group = relationship('UserGroup')
 
     def __init__(self, gr_id='', u_id=''):
         self.users_group_id = gr_id
@@ -625,7 +625,7 @@
     fork = relationship('Repository', remote_side=repo_id)
     group = relationship('RepoGroup')
     repo_to_perm = relationship('UserRepoToPerm', cascade='all', order_by='UserRepoToPerm.repo_to_perm_id')
-    users_group_to_perm = relationship('UsersGroupRepoToPerm', cascade='all')
+    users_group_to_perm = relationship('UserGroupRepoToPerm', cascade='all')
     stats = relationship('Statistics', cascade='all', uselist=False)
 
     followers = relationship('UserFollowing',
@@ -1013,7 +1013,7 @@
     enable_locking = Column("enable_locking", Boolean(), nullable=False, unique=None, default=False)
 
     repo_group_to_perm = relationship('UserRepoGroupToPerm', cascade='all', order_by='UserRepoGroupToPerm.group_to_perm_id')
-    users_group_to_perm = relationship('UsersGroupRepoGroupToPerm', cascade='all')
+    users_group_to_perm = relationship('UserGroupRepoGroupToPerm', cascade='all')
 
     parent_group = relationship('RepoGroup', remote_side=group_id)
 
@@ -1277,7 +1277,7 @@
     permission = relationship('Permission', lazy='joined')
 
 
-class UsersGroupRepoToPerm(Base, BaseModel):
+class UserGroupRepoToPerm(Base, BaseModel):
     __tablename__ = 'users_group_repo_to_perm'
     __table_args__ = (
         UniqueConstraint('repository_id', 'users_group_id', 'permission_id'),
@@ -1289,7 +1289,7 @@
     permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
     repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=None, default=None)
 
-    users_group = relationship('UsersGroup')
+    users_group = relationship('UserGroup')
     permission = relationship('Permission')
     repository = relationship('Repository')
 
@@ -1306,7 +1306,7 @@
         return u'<userGroup:%s => %s >' % (self.users_group, self.repository)
 
 
-class UsersGroupToPerm(Base, BaseModel):
+class UserGroupToPerm(Base, BaseModel):
     __tablename__ = 'users_group_to_perm'
     __table_args__ = (
         UniqueConstraint('users_group_id', 'permission_id',),
@@ -1317,7 +1317,7 @@
     users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None)
     permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
 
-    users_group = relationship('UsersGroup')
+    users_group = relationship('UserGroup')
     permission = relationship('Permission')
 
 
@@ -1339,7 +1339,7 @@
     permission = relationship('Permission')
 
 
-class UsersGroupRepoGroupToPerm(Base, BaseModel):
+class UserGroupRepoGroupToPerm(Base, BaseModel):
     __tablename__ = 'users_group_repo_group_to_perm'
     __table_args__ = (
         UniqueConstraint('users_group_id', 'group_id'),
@@ -1352,7 +1352,7 @@
     group_id = Column("group_id", Integer(), ForeignKey('groups.group_id'), nullable=False, unique=None, default=None)
     permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
 
-    users_group = relationship('UsersGroup')
+    users_group = relationship('UserGroup')
     permission = relationship('Permission')
     group = relationship('RepoGroup')
 
--- a/rhodecode/lib/dbmigrate/schema/db_1_5_0.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/lib/dbmigrate/schema/db_1_5_0.py	Sun Apr 07 18:37:22 2013 +0200
@@ -341,7 +341,7 @@
     repo_to_perm = relationship('UserRepoToPerm', primaryjoin='UserRepoToPerm.user_id==User.user_id', cascade='all')
     repo_group_to_perm = relationship('UserRepoGroupToPerm', primaryjoin='UserRepoGroupToPerm.user_id==User.user_id', cascade='all')
 
-    group_member = relationship('UsersGroupMember', cascade='all')
+    group_member = relationship('UserGroupMember', cascade='all')
 
     notifications = relationship('UserNotification', cascade='all')
     # notifications assigned to this user
@@ -541,7 +541,7 @@
     repository = relationship('Repository', cascade='')
 
 
-class UsersGroup(Base, BaseModel):
+class UserGroup(Base, BaseModel):
     __tablename__ = 'users_groups'
     __table_args__ = (
         {'extend_existing': True, 'mysql_engine': 'InnoDB',
@@ -553,9 +553,9 @@
     users_group_active = Column("users_group_active", Boolean(), nullable=True, unique=None, default=None)
     inherit_default_permissions = Column("users_group_inherit_default_permissions", Boolean(), nullable=False, unique=None, default=True)
 
-    members = relationship('UsersGroupMember', cascade="all, delete, delete-orphan", lazy="joined")
-    users_group_to_perm = relationship('UsersGroupToPerm', cascade='all')
-    users_group_repo_to_perm = relationship('UsersGroupRepoToPerm', cascade='all')
+    members = relationship('UserGroupMember', cascade="all, delete, delete-orphan", lazy="joined")
+    users_group_to_perm = relationship('UserGroupToPerm', cascade='all')
+    users_group_repo_to_perm = relationship('UserGroupRepoToPerm', cascade='all')
 
     def __unicode__(self):
         return u'<userGroup(%s)>' % (self.users_group_name)
@@ -595,7 +595,7 @@
         return data
 
 
-class UsersGroupMember(Base, BaseModel):
+class UserGroupMember(Base, BaseModel):
     __tablename__ = 'users_groups_members'
     __table_args__ = (
         {'extend_existing': True, 'mysql_engine': 'InnoDB',
@@ -607,7 +607,7 @@
     user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
 
     user = relationship('User', lazy='joined')
-    users_group = relationship('UsersGroup')
+    users_group = relationship('UserGroup')
 
     def __init__(self, gr_id='', u_id=''):
         self.users_group_id = gr_id
@@ -645,7 +645,7 @@
     fork = relationship('Repository', remote_side=repo_id)
     group = relationship('RepoGroup')
     repo_to_perm = relationship('UserRepoToPerm', cascade='all', order_by='UserRepoToPerm.repo_to_perm_id')
-    users_group_to_perm = relationship('UsersGroupRepoToPerm', cascade='all')
+    users_group_to_perm = relationship('UserGroupRepoToPerm', cascade='all')
     stats = relationship('Statistics', cascade='all', uselist=False)
 
     followers = relationship('UserFollowing',
@@ -1033,7 +1033,7 @@
     enable_locking = Column("enable_locking", Boolean(), nullable=False, unique=None, default=False)
 
     repo_group_to_perm = relationship('UserRepoGroupToPerm', cascade='all', order_by='UserRepoGroupToPerm.group_to_perm_id')
-    users_group_to_perm = relationship('UsersGroupRepoGroupToPerm', cascade='all')
+    users_group_to_perm = relationship('UserGroupRepoGroupToPerm', cascade='all')
 
     parent_group = relationship('RepoGroup', remote_side=group_id)
 
@@ -1297,7 +1297,7 @@
     permission = relationship('Permission', lazy='joined')
 
 
-class UsersGroupRepoToPerm(Base, BaseModel):
+class UserGroupRepoToPerm(Base, BaseModel):
     __tablename__ = 'users_group_repo_to_perm'
     __table_args__ = (
         UniqueConstraint('repository_id', 'users_group_id', 'permission_id'),
@@ -1309,7 +1309,7 @@
     permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
     repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=None, default=None)
 
-    users_group = relationship('UsersGroup')
+    users_group = relationship('UserGroup')
     permission = relationship('Permission')
     repository = relationship('Repository')
 
@@ -1326,7 +1326,7 @@
         return u'<userGroup:%s => %s >' % (self.users_group, self.repository)
 
 
-class UsersGroupToPerm(Base, BaseModel):
+class UserGroupToPerm(Base, BaseModel):
     __tablename__ = 'users_group_to_perm'
     __table_args__ = (
         UniqueConstraint('users_group_id', 'permission_id',),
@@ -1337,7 +1337,7 @@
     users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None)
     permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
 
-    users_group = relationship('UsersGroup')
+    users_group = relationship('UserGroup')
     permission = relationship('Permission')
 
 
@@ -1359,7 +1359,7 @@
     permission = relationship('Permission')
 
 
-class UsersGroupRepoGroupToPerm(Base, BaseModel):
+class UserGroupRepoGroupToPerm(Base, BaseModel):
     __tablename__ = 'users_group_repo_group_to_perm'
     __table_args__ = (
         UniqueConstraint('users_group_id', 'group_id'),
@@ -1372,7 +1372,7 @@
     group_id = Column("group_id", Integer(), ForeignKey('groups.group_id'), nullable=False, unique=None, default=None)
     permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
 
-    users_group = relationship('UsersGroup')
+    users_group = relationship('UserGroup')
     permission = relationship('Permission')
     group = relationship('RepoGroup')
 
--- a/rhodecode/lib/dbmigrate/schema/db_1_5_2.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/lib/dbmigrate/schema/db_1_5_2.py	Sun Apr 07 18:37:22 2013 +0200
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 """
-    rhodecode.model.db_1_4_0
+    rhodecode.model.db_1_5_2
     ~~~~~~~~~~~~~~~~~~~~~~~~
 
     Database Models for RhodeCode <=1.5.X
@@ -23,6 +23,1926 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-#TODO: replace that will db.py content after 1.6 Release
+import os
+import logging
+import datetime
+import traceback
+import hashlib
+import time
+from collections import defaultdict
+
+from sqlalchemy import *
+from sqlalchemy.ext.hybrid import hybrid_property
+from sqlalchemy.orm import relationship, joinedload, class_mapper, validates
+from sqlalchemy.exc import DatabaseError
+from beaker.cache import cache_region, region_invalidate
+from webob.exc import HTTPNotFound
+
+from pylons.i18n.translation import lazy_ugettext as _
+
+from rhodecode.lib.vcs import get_backend
+from rhodecode.lib.vcs.utils.helpers import get_scm
+from rhodecode.lib.vcs.exceptions import VCSError
+from rhodecode.lib.vcs.utils.lazy import LazyProperty
+
+from rhodecode.lib.utils2 import str2bool, safe_str, get_changeset_safe, \
+    safe_unicode, remove_suffix, remove_prefix
+from rhodecode.lib.compat import json
+from rhodecode.lib.caching_query import FromCache
+
+from rhodecode.model.meta import Base, Session
+
+URL_SEP = '/'
+log = logging.getLogger(__name__)
+
+#==============================================================================
+# BASE CLASSES
+#==============================================================================
+
+_hash_key = lambda k: hashlib.md5(safe_str(k)).hexdigest()
+
+
+class BaseModel(object):
+    """
+    Base Model for all classess
+    """
+
+    @classmethod
+    def _get_keys(cls):
+        """return column names for this model """
+        return class_mapper(cls).c.keys()
+
+    def get_dict(self):
+        """
+        return dict with keys and values corresponding
+        to this model data """
+
+        d = {}
+        for k in self._get_keys():
+            d[k] = getattr(self, k)
+
+        # also use __json__() if present to get additional fields
+        _json_attr = getattr(self, '__json__', None)
+        if _json_attr:
+            # update with attributes from __json__
+            if callable(_json_attr):
+                _json_attr = _json_attr()
+            for k, val in _json_attr.iteritems():
+                d[k] = val
+        return d
+
+    def get_appstruct(self):
+        """return list with keys and values tupples corresponding
+        to this model data """
+
+        l = []
+        for k in self._get_keys():
+            l.append((k, getattr(self, k),))
+        return l
+
+    def populate_obj(self, populate_dict):
+        """populate model with data from given populate_dict"""
+
+        for k in self._get_keys():
+            if k in populate_dict:
+                setattr(self, k, populate_dict[k])
+
+    @classmethod
+    def query(cls):
+        return Session().query(cls)
+
+    @classmethod
+    def get(cls, id_):
+        if id_:
+            return cls.query().get(id_)
+
+    @classmethod
+    def get_or_404(cls, id_):
+        try:
+            id_ = int(id_)
+        except (TypeError, ValueError):
+            raise HTTPNotFound
+
+        res = cls.query().get(id_)
+        if not res:
+            raise HTTPNotFound
+        return res
+
+    @classmethod
+    def getAll(cls):
+        return cls.query().all()
+
+    @classmethod
+    def delete(cls, id_):
+        obj = cls.query().get(id_)
+        Session().delete(obj)
+
+    def __repr__(self):
+        if hasattr(self, '__unicode__'):
+            # python repr needs to return str
+            return safe_str(self.__unicode__())
+        return '<DB:%s>' % (self.__class__.__name__)
+
+
+class RhodeCodeSetting(Base, BaseModel):
+    __tablename__ = 'rhodecode_settings'
+    __table_args__ = (
+        UniqueConstraint('app_settings_name'),
+        {'extend_existing': True, 'mysql_engine': 'InnoDB',
+         'mysql_charset': 'utf8'}
+    )
+    app_settings_id = Column("app_settings_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
+    app_settings_name = Column("app_settings_name", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
+    _app_settings_value = Column("app_settings_value", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
+
+    def __init__(self, k='', v=''):
+        self.app_settings_name = k
+        self.app_settings_value = v
+
+    @validates('_app_settings_value')
+    def validate_settings_value(self, key, val):
+        assert type(val) == unicode
+        return val
+
+    @hybrid_property
+    def app_settings_value(self):
+        v = self._app_settings_value
+        if self.app_settings_name in ["ldap_active",
+                                      "default_repo_enable_statistics",
+                                      "default_repo_enable_locking",
+                                      "default_repo_private",
+                                      "default_repo_enable_downloads"]:
+            v = str2bool(v)
+        return v
+
+    @app_settings_value.setter
+    def app_settings_value(self, val):
+        """
+        Setter that will always make sure we use unicode in app_settings_value
+
+        :param val:
+        """
+        self._app_settings_value = safe_unicode(val)
+
+    def __unicode__(self):
+        return u"<%s('%s:%s')>" % (
+            self.__class__.__name__,
+            self.app_settings_name, self.app_settings_value
+        )
+
+    @classmethod
+    def get_by_name(cls, key):
+        return cls.query()\
+            .filter(cls.app_settings_name == key).scalar()
+
+    @classmethod
+    def get_by_name_or_create(cls, key):
+        res = cls.get_by_name(key)
+        if not res:
+            res = cls(key)
+        return res
+
+    @classmethod
+    def get_app_settings(cls, cache=False):
+
+        ret = cls.query()
+
+        if cache:
+            ret = ret.options(FromCache("sql_cache_short", "get_hg_settings"))
+
+        if not ret:
+            raise Exception('Could not get application settings !')
+        settings = {}
+        for each in ret:
+            settings['rhodecode_' + each.app_settings_name] = \
+                each.app_settings_value
+
+        return settings
+
+    @classmethod
+    def get_ldap_settings(cls, cache=False):
+        ret = cls.query()\
+                .filter(cls.app_settings_name.startswith('ldap_')).all()
+        fd = {}
+        for row in ret:
+            fd.update({row.app_settings_name: row.app_settings_value})
+
+        return fd
+
+    @classmethod
+    def get_default_repo_settings(cls, cache=False, strip_prefix=False):
+        ret = cls.query()\
+                .filter(cls.app_settings_name.startswith('default_')).all()
+        fd = {}
+        for row in ret:
+            key = row.app_settings_name
+            if strip_prefix:
+                key = remove_prefix(key, prefix='default_')
+            fd.update({key: row.app_settings_value})
+
+        return fd
+
+
+class RhodeCodeUi(Base, BaseModel):
+    __tablename__ = 'rhodecode_ui'
+    __table_args__ = (
+        UniqueConstraint('ui_key'),
+        {'extend_existing': True, 'mysql_engine': 'InnoDB',
+         'mysql_charset': 'utf8'}
+    )
+
+    HOOK_UPDATE = 'changegroup.update'
+    HOOK_REPO_SIZE = 'changegroup.repo_size'
+    HOOK_PUSH = 'changegroup.push_logger'
+    HOOK_PRE_PUSH = 'prechangegroup.pre_push'
+    HOOK_PULL = 'outgoing.pull_logger'
+    HOOK_PRE_PULL = 'preoutgoing.pre_pull'
+
+    ui_id = Column("ui_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
+    ui_section = Column("ui_section", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
+    ui_key = Column("ui_key", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
+    ui_value = Column("ui_value", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
+    ui_active = Column("ui_active", Boolean(), nullable=True, unique=None, default=True)
+
+    @classmethod
+    def get_by_key(cls, key):
+        return cls.query().filter(cls.ui_key == key).scalar()
+
+    @classmethod
+    def get_builtin_hooks(cls):
+        q = cls.query()
+        q = q.filter(cls.ui_key.in_([cls.HOOK_UPDATE, cls.HOOK_REPO_SIZE,
+                                     cls.HOOK_PUSH, cls.HOOK_PRE_PUSH,
+                                     cls.HOOK_PULL, cls.HOOK_PRE_PULL]))
+        return q.all()
+
+    @classmethod
+    def get_custom_hooks(cls):
+        q = cls.query()
+        q = q.filter(~cls.ui_key.in_([cls.HOOK_UPDATE, cls.HOOK_REPO_SIZE,
+                                      cls.HOOK_PUSH, cls.HOOK_PRE_PUSH,
+                                      cls.HOOK_PULL, cls.HOOK_PRE_PULL]))
+        q = q.filter(cls.ui_section == 'hooks')
+        return q.all()
+
+    @classmethod
+    def get_repos_location(cls):
+        return cls.get_by_key('/').ui_value
+
+    @classmethod
+    def create_or_update_hook(cls, key, val):
+        new_ui = cls.get_by_key(key) or cls()
+        new_ui.ui_section = 'hooks'
+        new_ui.ui_active = True
+        new_ui.ui_key = key
+        new_ui.ui_value = val
+
+        Session().add(new_ui)
+
+    def __repr__(self):
+        return '<DB:%s[%s:%s]>' % (self.__class__.__name__, self.ui_key,
+                                   self.ui_value)
+
+
+class User(Base, BaseModel):
+    __tablename__ = 'users'
+    __table_args__ = (
+        UniqueConstraint('username'), UniqueConstraint('email'),
+        Index('u_username_idx', 'username'),
+        Index('u_email_idx', 'email'),
+        {'extend_existing': True, 'mysql_engine': 'InnoDB',
+         'mysql_charset': 'utf8'}
+    )
+    DEFAULT_USER = 'default'
+    DEFAULT_PERMISSIONS = [
+        'hg.register.manual_activate', 'hg.create.repository',
+        'hg.fork.repository', 'repository.read', 'group.read'
+    ]
+    user_id = Column("user_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
+    username = Column("username", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
+    password = Column("password", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
+    active = Column("active", Boolean(), nullable=True, unique=None, default=True)
+    admin = Column("admin", Boolean(), nullable=True, unique=None, default=False)
+    name = Column("firstname", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
+    lastname = Column("lastname", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
+    _email = Column("email", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
+    last_login = Column("last_login", DateTime(timezone=False), nullable=True, unique=None, default=None)
+    ldap_dn = Column("ldap_dn", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
+    api_key = Column("api_key", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
+    inherit_default_permissions = Column("inherit_default_permissions", Boolean(), nullable=False, unique=None, default=True)
+
+    user_log = relationship('UserLog')
+    user_perms = relationship('UserToPerm', primaryjoin="User.user_id==UserToPerm.user_id", cascade='all')
+
+    repositories = relationship('Repository')
+    user_followers = relationship('UserFollowing', primaryjoin='UserFollowing.follows_user_id==User.user_id', cascade='all')
+    followings = relationship('UserFollowing', primaryjoin='UserFollowing.user_id==User.user_id', cascade='all')
+
+    repo_to_perm = relationship('UserRepoToPerm', primaryjoin='UserRepoToPerm.user_id==User.user_id', cascade='all')
+    repo_group_to_perm = relationship('UserRepoGroupToPerm', primaryjoin='UserRepoGroupToPerm.user_id==User.user_id', cascade='all')
+
+    group_member = relationship('UserGroupMember', cascade='all')
+
+    notifications = relationship('UserNotification', cascade='all')
+    # notifications assigned to this user
+    user_created_notifications = relationship('Notification', cascade='all')
+    # comments created by this user
+    user_comments = relationship('ChangesetComment', cascade='all')
+    #extra emails for this user
+    user_emails = relationship('UserEmailMap', cascade='all')
+
+    @hybrid_property
+    def email(self):
+        return self._email
+
+    @email.setter
+    def email(self, val):
+        self._email = val.lower() if val else None
+
+    @property
+    def firstname(self):
+        # alias for future
+        return self.name
+
+    @property
+    def emails(self):
+        other = UserEmailMap.query().filter(UserEmailMap.user==self).all()
+        return [self.email] + [x.email for x in other]
+
+    @property
+    def ip_addresses(self):
+        ret = UserIpMap.query().filter(UserIpMap.user == self).all()
+        return [x.ip_addr for x in ret]
+
+    @property
+    def username_and_name(self):
+        return '%s (%s %s)' % (self.username, self.firstname, self.lastname)
+
+    @property
+    def full_name(self):
+        return '%s %s' % (self.firstname, self.lastname)
+
+    @property
+    def full_name_or_username(self):
+        return ('%s %s' % (self.firstname, self.lastname)
+                if (self.firstname and self.lastname) else self.username)
+
+    @property
+    def full_contact(self):
+        return '%s %s <%s>' % (self.firstname, self.lastname, self.email)
+
+    @property
+    def short_contact(self):
+        return '%s %s' % (self.firstname, self.lastname)
+
+    @property
+    def is_admin(self):
+        return self.admin
+
+    def __unicode__(self):
+        return u"<%s('id:%s:%s')>" % (self.__class__.__name__,
+                                     self.user_id, self.username)
+
+    @classmethod
+    def get_by_username(cls, username, case_insensitive=False, cache=False):
+        if case_insensitive:
+            q = cls.query().filter(cls.username.ilike(username))
+        else:
+            q = cls.query().filter(cls.username == username)
+
+        if cache:
+            q = q.options(FromCache(
+                            "sql_cache_short",
+                            "get_user_%s" % _hash_key(username)
+                          )
+            )
+        return q.scalar()
+
+    @classmethod
+    def get_by_api_key(cls, api_key, cache=False):
+        q = cls.query().filter(cls.api_key == api_key)
+
+        if cache:
+            q = q.options(FromCache("sql_cache_short",
+                                    "get_api_key_%s" % api_key))
+        return q.scalar()
+
+    @classmethod
+    def get_by_email(cls, email, case_insensitive=False, cache=False):
+        if case_insensitive:
+            q = cls.query().filter(cls.email.ilike(email))
+        else:
+            q = cls.query().filter(cls.email == email)
+
+        if cache:
+            q = q.options(FromCache("sql_cache_short",
+                                    "get_email_key_%s" % email))
+
+        ret = q.scalar()
+        if ret is None:
+            q = UserEmailMap.query()
+            # try fetching in alternate email map
+            if case_insensitive:
+                q = q.filter(UserEmailMap.email.ilike(email))
+            else:
+                q = q.filter(UserEmailMap.email == email)
+            q = q.options(joinedload(UserEmailMap.user))
+            if cache:
+                q = q.options(FromCache("sql_cache_short",
+                                        "get_email_map_key_%s" % email))
+            ret = getattr(q.scalar(), 'user', None)
+
+        return ret
+
+    def update_lastlogin(self):
+        """Update user lastlogin"""
+        self.last_login = datetime.datetime.now()
+        Session().add(self)
+        log.debug('updated user %s lastlogin' % self.username)
+
+    def get_api_data(self):
+        """
+        Common function for generating user related data for API
+        """
+        user = self
+        data = dict(
+            user_id=user.user_id,
+            username=user.username,
+            firstname=user.name,
+            lastname=user.lastname,
+            email=user.email,
+            emails=user.emails,
+            api_key=user.api_key,
+            active=user.active,
+            admin=user.admin,
+            ldap_dn=user.ldap_dn,
+            last_login=user.last_login,
+            ip_addresses=user.ip_addresses
+        )
+        return data
+
+    def __json__(self):
+        data = dict(
+            full_name=self.full_name,
+            full_name_or_username=self.full_name_or_username,
+            short_contact=self.short_contact,
+            full_contact=self.full_contact
+        )
+        data.update(self.get_api_data())
+        return data
+
+
+class UserEmailMap(Base, BaseModel):
+    __tablename__ = 'user_email_map'
+    __table_args__ = (
+        Index('uem_email_idx', 'email'),
+        UniqueConstraint('email'),
+        {'extend_existing': True, 'mysql_engine': 'InnoDB',
+         'mysql_charset': 'utf8'}
+    )
+    __mapper_args__ = {}
+
+    email_id = Column("email_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
+    user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=True, unique=None, default=None)
+    _email = Column("email", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=False, default=None)
+    user = relationship('User', lazy='joined')
+
+    @validates('_email')
+    def validate_email(self, key, email):
+        # check if this email is not main one
+        main_email = Session().query(User).filter(User.email == email).scalar()
+        if main_email is not None:
+            raise AttributeError('email %s is present is user table' % email)
+        return email
+
+    @hybrid_property
+    def email(self):
+        return self._email
+
+    @email.setter
+    def email(self, val):
+        self._email = val.lower() if val else None
+
+
+class UserIpMap(Base, BaseModel):
+    __tablename__ = 'user_ip_map'
+    __table_args__ = (
+        UniqueConstraint('user_id', 'ip_addr'),
+        {'extend_existing': True, 'mysql_engine': 'InnoDB',
+         'mysql_charset': 'utf8'}
+    )
+    __mapper_args__ = {}
+
+    ip_id = Column("ip_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
+    user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=True, unique=None, default=None)
+    ip_addr = Column("ip_addr", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=False, default=None)
+    active = Column("active", Boolean(), nullable=True, unique=None, default=True)
+    user = relationship('User', lazy='joined')
+
+    @classmethod
+    def _get_ip_range(cls, ip_addr):
+        from rhodecode.lib import ipaddr
+        net = ipaddr.IPv4Network(ip_addr)
+        return [str(net.network), str(net.broadcast)]
+
+    def __json__(self):
+        return dict(
+          ip_addr=self.ip_addr,
+          ip_range=self._get_ip_range(self.ip_addr)
+        )
+
+
+class UserLog(Base, BaseModel):
+    __tablename__ = 'user_logs'
+    __table_args__ = (
+        {'extend_existing': True, 'mysql_engine': 'InnoDB',
+         'mysql_charset': 'utf8'},
+    )
+    user_log_id = Column("user_log_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
+    user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=True, unique=None, default=None)
+    username = Column("username", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
+    repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=True)
+    repository_name = Column("repository_name", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
+    user_ip = Column("user_ip", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
+    action = Column("action", UnicodeText(1200000, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
+    action_date = Column("action_date", DateTime(timezone=False), nullable=True, unique=None, default=None)
+
+    @property
+    def action_as_day(self):
+        return datetime.date(*self.action_date.timetuple()[:3])
+
+    user = relationship('User')
+    repository = relationship('Repository', cascade='')
+
+
+class UserGroup(Base, BaseModel):
+    __tablename__ = 'users_groups'
+    __table_args__ = (
+        {'extend_existing': True, 'mysql_engine': 'InnoDB',
+         'mysql_charset': 'utf8'},
+    )
+
+    users_group_id = Column("users_group_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
+    users_group_name = Column("users_group_name", String(255, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None)
+    users_group_active = Column("users_group_active", Boolean(), nullable=True, unique=None, default=None)
+    inherit_default_permissions = Column("users_group_inherit_default_permissions", Boolean(), nullable=False, unique=None, default=True)
+
+    members = relationship('UserGroupMember', cascade="all, delete, delete-orphan", lazy="joined")
+    users_group_to_perm = relationship('UserGroupToPerm', cascade='all')
+    users_group_repo_to_perm = relationship('UserGroupRepoToPerm', cascade='all')
+
+    def __unicode__(self):
+        return u'<userGroup(%s)>' % (self.users_group_name)
+
+    @classmethod
+    def get_by_group_name(cls, group_name, cache=False,
+                          case_insensitive=False):
+        if case_insensitive:
+            q = cls.query().filter(cls.users_group_name.ilike(group_name))
+        else:
+            q = cls.query().filter(cls.users_group_name == group_name)
+        if cache:
+            q = q.options(FromCache(
+                            "sql_cache_short",
+                            "get_user_%s" % _hash_key(group_name)
+                          )
+            )
+        return q.scalar()
+
+    @classmethod
+    def get(cls, users_group_id, cache=False):
+        users_group = cls.query()
+        if cache:
+            users_group = users_group.options(FromCache("sql_cache_short",
+                                    "get_users_group_%s" % users_group_id))
+        return users_group.get(users_group_id)
+
+    def get_api_data(self):
+        users_group = self
+
+        data = dict(
+            users_group_id=users_group.users_group_id,
+            group_name=users_group.users_group_name,
+            active=users_group.users_group_active,
+        )
+
+        return data
+
+
+class UserGroupMember(Base, BaseModel):
+    __tablename__ = 'users_groups_members'
+    __table_args__ = (
+        {'extend_existing': True, 'mysql_engine': 'InnoDB',
+         'mysql_charset': 'utf8'},
+    )
+
+    users_group_member_id = Column("users_group_member_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
+    users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None)
+    user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
+
+    user = relationship('User', lazy='joined')
+    users_group = relationship('UserGroup')
+
+    def __init__(self, gr_id='', u_id=''):
+        self.users_group_id = gr_id
+        self.user_id = u_id
+
+
+class Repository(Base, BaseModel):
+    __tablename__ = 'repositories'
+    __table_args__ = (
+        UniqueConstraint('repo_name'),
+        Index('r_repo_name_idx', 'repo_name'),
+        {'extend_existing': True, 'mysql_engine': 'InnoDB',
+         'mysql_charset': 'utf8'},
+    )
+
+    repo_id = Column("repo_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
+    repo_name = Column("repo_name", String(255, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None)
+    clone_uri = Column("clone_uri", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=False, default=None)
+    repo_type = Column("repo_type", String(255, convert_unicode=False, assert_unicode=None), nullable=False, unique=False, default=None)
+    user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=False, default=None)
+    private = Column("private", Boolean(), nullable=True, unique=None, default=None)
+    enable_statistics = Column("statistics", Boolean(), nullable=True, unique=None, default=True)
+    enable_downloads = Column("downloads", Boolean(), nullable=True, unique=None, default=True)
+    description = Column("description", String(10000, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
+    created_on = Column('created_on', DateTime(timezone=False), nullable=True, unique=None, default=datetime.datetime.now)
+    updated_on = Column('updated_on', DateTime(timezone=False), nullable=True, unique=None, default=datetime.datetime.now)
+    landing_rev = Column("landing_revision", String(255, convert_unicode=False, assert_unicode=None), nullable=False, unique=False, default=None)
+    enable_locking = Column("enable_locking", Boolean(), nullable=False, unique=None, default=False)
+    _locked = Column("locked", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=False, default=None)
+    _changeset_cache = Column("changeset_cache", LargeBinary(), nullable=True) #JSON data
+
+    fork_id = Column("fork_id", Integer(), ForeignKey('repositories.repo_id'), nullable=True, unique=False, default=None)
+    group_id = Column("group_id", Integer(), ForeignKey('groups.group_id'), nullable=True, unique=False, default=None)
+
+    user = relationship('User')
+    fork = relationship('Repository', remote_side=repo_id)
+    group = relationship('RepoGroup')
+    repo_to_perm = relationship('UserRepoToPerm', cascade='all', order_by='UserRepoToPerm.repo_to_perm_id')
+    users_group_to_perm = relationship('UserGroupRepoToPerm', cascade='all')
+    stats = relationship('Statistics', cascade='all', uselist=False)
+
+    followers = relationship('UserFollowing',
+                             primaryjoin='UserFollowing.follows_repo_id==Repository.repo_id',
+                             cascade='all')
+
+    logs = relationship('UserLog')
+    comments = relationship('ChangesetComment', cascade="all, delete, delete-orphan")
+
+    pull_requests_org = relationship('PullRequest',
+                    primaryjoin='PullRequest.org_repo_id==Repository.repo_id',
+                    cascade="all, delete, delete-orphan")
+
+    pull_requests_other = relationship('PullRequest',
+                    primaryjoin='PullRequest.other_repo_id==Repository.repo_id',
+                    cascade="all, delete, delete-orphan")
+
+    def __unicode__(self):
+        return u"<%s('%s:%s')>" % (self.__class__.__name__, self.repo_id,
+                                   self.repo_name)
+
+    @hybrid_property
+    def locked(self):
+        # always should return [user_id, timelocked]
+        if self._locked:
+            _lock_info = self._locked.split(':')
+            return int(_lock_info[0]), _lock_info[1]
+        return [None, None]
+
+    @locked.setter
+    def locked(self, val):
+        if val and isinstance(val, (list, tuple)):
+            self._locked = ':'.join(map(str, val))
+        else:
+            self._locked = None
+
+    @hybrid_property
+    def changeset_cache(self):
+        from rhodecode.lib.vcs.backends.base import EmptyChangeset
+        dummy = EmptyChangeset().__json__()
+        if not self._changeset_cache:
+            return dummy
+        try:
+            return json.loads(self._changeset_cache)
+        except TypeError:
+            return dummy
+
+    @changeset_cache.setter
+    def changeset_cache(self, val):
+        try:
+            self._changeset_cache = json.dumps(val)
+        except:
+            log.error(traceback.format_exc())
+
+    @classmethod
+    def url_sep(cls):
+        return URL_SEP
+
+    @classmethod
+    def normalize_repo_name(cls, repo_name):
+        """
+        Normalizes os specific repo_name to the format internally stored inside
+        dabatabase using URL_SEP
+
+        :param cls:
+        :param repo_name:
+        """
+        return cls.url_sep().join(repo_name.split(os.sep))
+
+    @classmethod
+    def get_by_repo_name(cls, repo_name):
+        q = Session().query(cls).filter(cls.repo_name == repo_name)
+        q = q.options(joinedload(Repository.fork))\
+                .options(joinedload(Repository.user))\
+                .options(joinedload(Repository.group))
+        return q.scalar()
+
+    @classmethod
+    def get_by_full_path(cls, repo_full_path):
+        repo_name = repo_full_path.split(cls.base_path(), 1)[-1]
+        repo_name = cls.normalize_repo_name(repo_name)
+        return cls.get_by_repo_name(repo_name.strip(URL_SEP))
+
+    @classmethod
+    def get_repo_forks(cls, repo_id):
+        return cls.query().filter(Repository.fork_id == repo_id)
+
+    @classmethod
+    def base_path(cls):
+        """
+        Returns base path when all repos are stored
+
+        :param cls:
+        """
+        q = Session().query(RhodeCodeUi)\
+            .filter(RhodeCodeUi.ui_key == cls.url_sep())
+        q = q.options(FromCache("sql_cache_short", "repository_repo_path"))
+        return q.one().ui_value
+
+    @property
+    def forks(self):
+        """
+        Return forks of this repo
+        """
+        return Repository.get_repo_forks(self.repo_id)
+
+    @property
+    def parent(self):
+        """
+        Returns fork parent
+        """
+        return self.fork
+
+    @property
+    def just_name(self):
+        return self.repo_name.split(Repository.url_sep())[-1]
+
+    @property
+    def groups_with_parents(self):
+        groups = []
+        if self.group is None:
+            return groups
+
+        cur_gr = self.group
+        groups.insert(0, cur_gr)
+        while 1:
+            gr = getattr(cur_gr, 'parent_group', None)
+            cur_gr = cur_gr.parent_group
+            if gr is None:
+                break
+            groups.insert(0, gr)
+
+        return groups
+
+    @property
+    def groups_and_repo(self):
+        return self.groups_with_parents, self.just_name
+
+    @LazyProperty
+    def repo_path(self):
+        """
+        Returns base full path for that repository means where it actually
+        exists on a filesystem
+        """
+        q = Session().query(RhodeCodeUi).filter(RhodeCodeUi.ui_key ==
+                                              Repository.url_sep())
+        q = q.options(FromCache("sql_cache_short", "repository_repo_path"))
+        return q.one().ui_value
+
+    @property
+    def repo_full_path(self):
+        p = [self.repo_path]
+        # we need to split the name by / since this is how we store the
+        # names in the database, but that eventually needs to be converted
+        # into a valid system path
+        p += self.repo_name.split(Repository.url_sep())
+        return os.path.join(*p)
+
+    @property
+    def cache_keys(self):
+        """
+        Returns associated cache keys for that repo
+        """
+        return CacheInvalidation.query()\
+            .filter(CacheInvalidation.cache_args == self.repo_name)\
+            .order_by(CacheInvalidation.cache_key)\
+            .all()
+
+    def get_new_name(self, repo_name):
+        """
+        returns new full repository name based on assigned group and new new
+
+        :param group_name:
+        """
+        path_prefix = self.group.full_path_splitted if self.group else []
+        return Repository.url_sep().join(path_prefix + [repo_name])
+
+    @property
+    def _ui(self):
+        """
+        Creates an db based ui object for this repository
+        """
+        from rhodecode.lib.utils import make_ui
+        return make_ui('db', clear_session=False)
+
+    @classmethod
+    def inject_ui(cls, repo, extras={}):
+        from rhodecode.lib.vcs.backends.hg import MercurialRepository
+        from rhodecode.lib.vcs.backends.git import GitRepository
+        required = (MercurialRepository, GitRepository)
+        if not isinstance(repo, required):
+            raise Exception('repo must be instance of %s' % required)
+
+        # inject ui extra param to log this action via push logger
+        for k, v in extras.items():
+            repo._repo.ui.setconfig('rhodecode_extras', k, v)
+
+    @classmethod
+    def is_valid(cls, repo_name):
+        """
+        returns True if given repo name is a valid filesystem repository
+
+        :param cls:
+        :param repo_name:
+        """
+        from rhodecode.lib.utils import is_valid_repo
+
+        return is_valid_repo(repo_name, cls.base_path())
+
+    def get_api_data(self):
+        """
+        Common function for generating repo api data
+
+        """
+        repo = self
+        data = dict(
+            repo_id=repo.repo_id,
+            repo_name=repo.repo_name,
+            repo_type=repo.repo_type,
+            clone_uri=repo.clone_uri,
+            private=repo.private,
+            created_on=repo.created_on,
+            description=repo.description,
+            landing_rev=repo.landing_rev,
+            owner=repo.user.username,
+            fork_of=repo.fork.repo_name if repo.fork else None,
+            enable_statistics=repo.enable_statistics,
+            enable_locking=repo.enable_locking,
+            enable_downloads=repo.enable_downloads,
+            last_changeset=repo.changeset_cache
+        )
+
+        return data
+
+    @classmethod
+    def lock(cls, repo, user_id):
+        repo.locked = [user_id, time.time()]
+        Session().add(repo)
+        Session().commit()
+
+    @classmethod
+    def unlock(cls, repo):
+        repo.locked = None
+        Session().add(repo)
+        Session().commit()
+
+    @property
+    def last_db_change(self):
+        return self.updated_on
+
+    def clone_url(self, **override):
+        from pylons import url
+        from urlparse import urlparse
+        import urllib
+        parsed_url = urlparse(url('home', qualified=True))
+        default_clone_uri = '%(scheme)s://%(user)s%(pass)s%(netloc)s%(prefix)s%(path)s'
+        decoded_path = safe_unicode(urllib.unquote(parsed_url.path))
+        args = {
+           'user': '',
+           'pass': '',
+           'scheme': parsed_url.scheme,
+           'netloc': parsed_url.netloc,
+           'prefix': decoded_path,
+           'path': self.repo_name
+        }
+
+        args.update(override)
+        return default_clone_uri % args
+
+    #==========================================================================
+    # SCM PROPERTIES
+    #==========================================================================
+
+    def get_changeset(self, rev=None):
+        return get_changeset_safe(self.scm_instance, rev)
+
+    def get_landing_changeset(self):
+        """
+        Returns landing changeset, or if that doesn't exist returns the tip
+        """
+        cs = self.get_changeset(self.landing_rev) or self.get_changeset()
+        return cs
+
+    def update_changeset_cache(self, cs_cache=None):
+        """
+        Update cache of last changeset for repository, keys should be::
+
+            short_id
+            raw_id
+            revision
+            message
+            date
+            author
+
+        :param cs_cache:
+        """
+        from rhodecode.lib.vcs.backends.base import BaseChangeset
+        if cs_cache is None:
+            cs_cache = self.get_changeset()
+        if isinstance(cs_cache, BaseChangeset):
+            cs_cache = cs_cache.__json__()
 
-from rhodecode.model.db import *
+        if cs_cache != self.changeset_cache:
+            last_change = cs_cache.get('date') or self.last_change
+            log.debug('updated repo %s with new cs cache %s' % (self, cs_cache))
+            self.updated_on = last_change
+            self.changeset_cache = cs_cache
+            Session().add(self)
+            Session().commit()
+
+    @property
+    def tip(self):
+        return self.get_changeset('tip')
+
+    @property
+    def author(self):
+        return self.tip.author
+
+    @property
+    def last_change(self):
+        return self.scm_instance.last_change
+
+    def get_comments(self, revisions=None):
+        """
+        Returns comments for this repository grouped by revisions
+
+        :param revisions: filter query by revisions only
+        """
+        cmts = ChangesetComment.query()\
+            .filter(ChangesetComment.repo == self)
+        if revisions:
+            cmts = cmts.filter(ChangesetComment.revision.in_(revisions))
+        grouped = defaultdict(list)
+        for cmt in cmts.all():
+            grouped[cmt.revision].append(cmt)
+        return grouped
+
+    def statuses(self, revisions=None):
+        """
+        Returns statuses for this repository
+
+        :param revisions: list of revisions to get statuses for
+        :type revisions: list
+        """
+
+        statuses = ChangesetStatus.query()\
+            .filter(ChangesetStatus.repo == self)\
+            .filter(ChangesetStatus.version == 0)
+        if revisions:
+            statuses = statuses.filter(ChangesetStatus.revision.in_(revisions))
+        grouped = {}
+
+        #maybe we have open new pullrequest without a status ?
+        stat = ChangesetStatus.STATUS_UNDER_REVIEW
+        status_lbl = ChangesetStatus.get_status_lbl(stat)
+        for pr in PullRequest.query().filter(PullRequest.org_repo == self).all():
+            for rev in pr.revisions:
+                pr_id = pr.pull_request_id
+                pr_repo = pr.other_repo.repo_name
+                grouped[rev] = [stat, status_lbl, pr_id, pr_repo]
+
+        for stat in statuses.all():
+            pr_id = pr_repo = None
+            if stat.pull_request:
+                pr_id = stat.pull_request.pull_request_id
+                pr_repo = stat.pull_request.other_repo.repo_name
+            grouped[stat.revision] = [str(stat.status), stat.status_lbl,
+                                      pr_id, pr_repo]
+        return grouped
+
+    #==========================================================================
+    # SCM CACHE INSTANCE
+    #==========================================================================
+
+    @property
+    def invalidate(self):
+        return CacheInvalidation.invalidate(self.repo_name)
+
+    def set_invalidate(self):
+        """
+        set a cache for invalidation for this instance
+        """
+        CacheInvalidation.set_invalidate(repo_name=self.repo_name)
+
+    @LazyProperty
+    def scm_instance(self):
+        import rhodecode
+        full_cache = str2bool(rhodecode.CONFIG.get('vcs_full_cache'))
+        if full_cache:
+            return self.scm_instance_cached()
+        return self.__get_instance()
+
+    def scm_instance_cached(self, cache_map=None):
+        @cache_region('long_term')
+        def _c(repo_name):
+            return self.__get_instance()
+        rn = self.repo_name
+        log.debug('Getting cached instance of repo')
+
+        if cache_map:
+            # get using prefilled cache_map
+            invalidate_repo = cache_map[self.repo_name]
+            if invalidate_repo:
+                invalidate_repo = (None if invalidate_repo.cache_active
+                                   else invalidate_repo)
+        else:
+            # get from invalidate
+            invalidate_repo = self.invalidate
+
+        if invalidate_repo is not None:
+            region_invalidate(_c, None, rn)
+            # update our cache
+            CacheInvalidation.set_valid(invalidate_repo.cache_key)
+        return _c(rn)
+
+    def __get_instance(self):
+        repo_full_path = self.repo_full_path
+        try:
+            alias = get_scm(repo_full_path)[0]
+            log.debug('Creating instance of %s repository' % alias)
+            backend = get_backend(alias)
+        except VCSError:
+            log.error(traceback.format_exc())
+            log.error('Perhaps this repository is in db and not in '
+                      'filesystem run rescan repositories with '
+                      '"destroy old data " option from admin panel')
+            return
+
+        if alias == 'hg':
+
+            repo = backend(safe_str(repo_full_path), create=False,
+                           baseui=self._ui)
+            # skip hidden web repository
+            if repo._get_hidden():
+                return
+        else:
+            repo = backend(repo_full_path, create=False)
+
+        return repo
+
+
+class RepoGroup(Base, BaseModel):
+    __tablename__ = 'groups'
+    __table_args__ = (
+        UniqueConstraint('group_name', 'group_parent_id'),
+        CheckConstraint('group_id != group_parent_id'),
+        {'extend_existing': True, 'mysql_engine': 'InnoDB',
+         'mysql_charset': 'utf8'},
+    )
+    __mapper_args__ = {'order_by': 'group_name'}
+
+    group_id = Column("group_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
+    group_name = Column("group_name", String(255, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None)
+    group_parent_id = Column("group_parent_id", Integer(), ForeignKey('groups.group_id'), nullable=True, unique=None, default=None)
+    group_description = Column("group_description", String(10000, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
+    enable_locking = Column("enable_locking", Boolean(), nullable=False, unique=None, default=False)
+
+    repo_group_to_perm = relationship('UserRepoGroupToPerm', cascade='all', order_by='UserRepoGroupToPerm.group_to_perm_id')
+    users_group_to_perm = relationship('UserGroupRepoGroupToPerm', cascade='all')
+
+    parent_group = relationship('RepoGroup', remote_side=group_id)
+
+    def __init__(self, group_name='', parent_group=None):
+        self.group_name = group_name
+        self.parent_group = parent_group
+
+    def __unicode__(self):
+        return u"<%s('%s:%s')>" % (self.__class__.__name__, self.group_id,
+                                  self.group_name)
+
+    @classmethod
+    def groups_choices(cls, check_perms=False):
+        from webhelpers.html import literal as _literal
+        from rhodecode.model.scm import ScmModel
+        groups = cls.query().all()
+        if check_perms:
+            #filter group user have access to, it's done
+            #magically inside ScmModel based on current user
+            groups = ScmModel().get_repos_groups(groups)
+        repo_groups = [('', '')]
+        sep = ' &raquo; '
+        _name = lambda k: _literal(sep.join(k))
+
+        repo_groups.extend([(x.group_id, _name(x.full_path_splitted))
+                              for x in groups])
+
+        repo_groups = sorted(repo_groups, key=lambda t: t[1].split(sep)[0])
+        return repo_groups
+
+    @classmethod
+    def url_sep(cls):
+        return URL_SEP
+
+    @classmethod
+    def get_by_group_name(cls, group_name, cache=False, case_insensitive=False):
+        if case_insensitive:
+            gr = cls.query()\
+                .filter(cls.group_name.ilike(group_name))
+        else:
+            gr = cls.query()\
+                .filter(cls.group_name == group_name)
+        if cache:
+            gr = gr.options(FromCache(
+                            "sql_cache_short",
+                            "get_group_%s" % _hash_key(group_name)
+                            )
+            )
+        return gr.scalar()
+
+    @property
+    def parents(self):
+        parents_recursion_limit = 5
+        groups = []
+        if self.parent_group is None:
+            return groups
+        cur_gr = self.parent_group
+        groups.insert(0, cur_gr)
+        cnt = 0
+        while 1:
+            cnt += 1
+            gr = getattr(cur_gr, 'parent_group', None)
+            cur_gr = cur_gr.parent_group
+            if gr is None:
+                break
+            if cnt == parents_recursion_limit:
+                # this will prevent accidental infinit loops
+                log.error('group nested more than %s' %
+                          parents_recursion_limit)
+                break
+
+            groups.insert(0, gr)
+        return groups
+
+    @property
+    def children(self):
+        return RepoGroup.query().filter(RepoGroup.parent_group == self)
+
+    @property
+    def name(self):
+        return self.group_name.split(RepoGroup.url_sep())[-1]
+
+    @property
+    def full_path(self):
+        return self.group_name
+
+    @property
+    def full_path_splitted(self):
+        return self.group_name.split(RepoGroup.url_sep())
+
+    @property
+    def repositories(self):
+        return Repository.query()\
+                .filter(Repository.group == self)\
+                .order_by(Repository.repo_name)
+
+    @property
+    def repositories_recursive_count(self):
+        cnt = self.repositories.count()
+
+        def children_count(group):
+            cnt = 0
+            for child in group.children:
+                cnt += child.repositories.count()
+                cnt += children_count(child)
+            return cnt
+
+        return cnt + children_count(self)
+
+    def recursive_groups_and_repos(self):
+        """
+        Recursive return all groups, with repositories in those groups
+        """
+        all_ = []
+
+        def _get_members(root_gr):
+            for r in root_gr.repositories:
+                all_.append(r)
+            childs = root_gr.children.all()
+            if childs:
+                for gr in childs:
+                    all_.append(gr)
+                    _get_members(gr)
+
+        _get_members(self)
+        return [self] + all_
+
+    def get_new_name(self, group_name):
+        """
+        returns new full group name based on parent and new name
+
+        :param group_name:
+        """
+        path_prefix = (self.parent_group.full_path_splitted if
+                       self.parent_group else [])
+        return RepoGroup.url_sep().join(path_prefix + [group_name])
+
+
+class Permission(Base, BaseModel):
+    __tablename__ = 'permissions'
+    __table_args__ = (
+        Index('p_perm_name_idx', 'permission_name'),
+        {'extend_existing': True, 'mysql_engine': 'InnoDB',
+         'mysql_charset': 'utf8'},
+    )
+    PERMS = [
+        ('repository.none', _('Repository no access')),
+        ('repository.read', _('Repository read access')),
+        ('repository.write', _('Repository write access')),
+        ('repository.admin', _('Repository admin access')),
+
+        ('group.none', _('Repositories Group no access')),
+        ('group.read', _('Repositories Group read access')),
+        ('group.write', _('Repositories Group write access')),
+        ('group.admin', _('Repositories Group admin access')),
+
+        ('hg.admin', _('RhodeCode Administrator')),
+        ('hg.create.none', _('Repository creation disabled')),
+        ('hg.create.repository', _('Repository creation enabled')),
+        ('hg.fork.none', _('Repository forking disabled')),
+        ('hg.fork.repository', _('Repository forking enabled')),
+        ('hg.register.none', _('Register disabled')),
+        ('hg.register.manual_activate', _('Register new user with RhodeCode '
+                                          'with manual activation')),
+
+        ('hg.register.auto_activate', _('Register new user with RhodeCode '
+                                        'with auto activation')),
+    ]
+
+    # defines which permissions are more important higher the more important
+    PERM_WEIGHTS = {
+        'repository.none': 0,
+        'repository.read': 1,
+        'repository.write': 3,
+        'repository.admin': 4,
+
+        'group.none': 0,
+        'group.read': 1,
+        'group.write': 3,
+        'group.admin': 4,
+
+        'hg.fork.none': 0,
+        'hg.fork.repository': 1,
+        'hg.create.none': 0,
+        'hg.create.repository':1
+    }
+
+    permission_id = Column("permission_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
+    permission_name = Column("permission_name", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
+    permission_longname = Column("permission_longname", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
+
+    def __unicode__(self):
+        return u"<%s('%s:%s')>" % (
+            self.__class__.__name__, self.permission_id, self.permission_name
+        )
+
+    @classmethod
+    def get_by_key(cls, key):
+        return cls.query().filter(cls.permission_name == key).scalar()
+
+    @classmethod
+    def get_default_perms(cls, default_user_id):
+        q = Session().query(UserRepoToPerm, Repository, cls)\
+         .join((Repository, UserRepoToPerm.repository_id == Repository.repo_id))\
+         .join((cls, UserRepoToPerm.permission_id == cls.permission_id))\
+         .filter(UserRepoToPerm.user_id == default_user_id)
+
+        return q.all()
+
+    @classmethod
+    def get_default_group_perms(cls, default_user_id):
+        q = Session().query(UserRepoGroupToPerm, RepoGroup, cls)\
+         .join((RepoGroup, UserRepoGroupToPerm.group_id == RepoGroup.group_id))\
+         .join((cls, UserRepoGroupToPerm.permission_id == cls.permission_id))\
+         .filter(UserRepoGroupToPerm.user_id == default_user_id)
+
+        return q.all()
+
+
+class UserRepoToPerm(Base, BaseModel):
+    __tablename__ = 'repo_to_perm'
+    __table_args__ = (
+        UniqueConstraint('user_id', 'repository_id', 'permission_id'),
+        {'extend_existing': True, 'mysql_engine': 'InnoDB',
+         'mysql_charset': 'utf8'}
+    )
+    repo_to_perm_id = Column("repo_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
+    user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
+    permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
+    repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=None, default=None)
+
+    user = relationship('User')
+    repository = relationship('Repository')
+    permission = relationship('Permission')
+
+    @classmethod
+    def create(cls, user, repository, permission):
+        n = cls()
+        n.user = user
+        n.repository = repository
+        n.permission = permission
+        Session().add(n)
+        return n
+
+    def __unicode__(self):
+        return u'<user:%s => %s >' % (self.user, self.repository)
+
+
+class UserToPerm(Base, BaseModel):
+    __tablename__ = 'user_to_perm'
+    __table_args__ = (
+        UniqueConstraint('user_id', 'permission_id'),
+        {'extend_existing': True, 'mysql_engine': 'InnoDB',
+         'mysql_charset': 'utf8'}
+    )
+    user_to_perm_id = Column("user_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
+    user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
+    permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
+
+    user = relationship('User')
+    permission = relationship('Permission', lazy='joined')
+
+
+class UserGroupRepoToPerm(Base, BaseModel):
+    __tablename__ = 'users_group_repo_to_perm'
+    __table_args__ = (
+        UniqueConstraint('repository_id', 'users_group_id', 'permission_id'),
+        {'extend_existing': True, 'mysql_engine': 'InnoDB',
+         'mysql_charset': 'utf8'}
+    )
+    users_group_to_perm_id = Column("users_group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
+    users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None)
+    permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
+    repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=None, default=None)
+
+    users_group = relationship('UserGroup')
+    permission = relationship('Permission')
+    repository = relationship('Repository')
+
+    @classmethod
+    def create(cls, users_group, repository, permission):
+        n = cls()
+        n.users_group = users_group
+        n.repository = repository
+        n.permission = permission
+        Session().add(n)
+        return n
+
+    def __unicode__(self):
+        return u'<userGroup:%s => %s >' % (self.users_group, self.repository)
+
+
+class UserGroupToPerm(Base, BaseModel):
+    __tablename__ = 'users_group_to_perm'
+    __table_args__ = (
+        UniqueConstraint('users_group_id', 'permission_id',),
+        {'extend_existing': True, 'mysql_engine': 'InnoDB',
+         'mysql_charset': 'utf8'}
+    )
+    users_group_to_perm_id = Column("users_group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
+    users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None)
+    permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
+
+    users_group = relationship('UserGroup')
+    permission = relationship('Permission')
+
+
+class UserRepoGroupToPerm(Base, BaseModel):
+    __tablename__ = 'user_repo_group_to_perm'
+    __table_args__ = (
+        UniqueConstraint('user_id', 'group_id', 'permission_id'),
+        {'extend_existing': True, 'mysql_engine': 'InnoDB',
+         'mysql_charset': 'utf8'}
+    )
+
+    group_to_perm_id = Column("group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
+    user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
+    group_id = Column("group_id", Integer(), ForeignKey('groups.group_id'), nullable=False, unique=None, default=None)
+    permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
+
+    user = relationship('User')
+    group = relationship('RepoGroup')
+    permission = relationship('Permission')
+
+
+class UserGroupRepoGroupToPerm(Base, BaseModel):
+    __tablename__ = 'users_group_repo_group_to_perm'
+    __table_args__ = (
+        UniqueConstraint('users_group_id', 'group_id'),
+        {'extend_existing': True, 'mysql_engine': 'InnoDB',
+         'mysql_charset': 'utf8'}
+    )
+
+    users_group_repo_group_to_perm_id = Column("users_group_repo_group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
+    users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None)
+    group_id = Column("group_id", Integer(), ForeignKey('groups.group_id'), nullable=False, unique=None, default=None)
+    permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
+
+    users_group = relationship('UserGroup')
+    permission = relationship('Permission')
+    group = relationship('RepoGroup')
+
+
+class Statistics(Base, BaseModel):
+    __tablename__ = 'statistics'
+    __table_args__ = (
+         UniqueConstraint('repository_id'),
+         {'extend_existing': True, 'mysql_engine': 'InnoDB',
+          'mysql_charset': 'utf8'}
+    )
+    stat_id = Column("stat_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
+    repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=True, default=None)
+    stat_on_revision = Column("stat_on_revision", Integer(), nullable=False)
+    commit_activity = Column("commit_activity", LargeBinary(1000000), nullable=False)#JSON data
+    commit_activity_combined = Column("commit_activity_combined", LargeBinary(), nullable=False)#JSON data
+    languages = Column("languages", LargeBinary(1000000), nullable=False)#JSON data
+
+    repository = relationship('Repository', single_parent=True)
+
+
+class UserFollowing(Base, BaseModel):
+    __tablename__ = 'user_followings'
+    __table_args__ = (
+        UniqueConstraint('user_id', 'follows_repository_id'),
+        UniqueConstraint('user_id', 'follows_user_id'),
+        {'extend_existing': True, 'mysql_engine': 'InnoDB',
+         'mysql_charset': 'utf8'}
+    )
+
+    user_following_id = Column("user_following_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
+    user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
+    follows_repo_id = Column("follows_repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=True, unique=None, default=None)
+    follows_user_id = Column("follows_user_id", Integer(), ForeignKey('users.user_id'), nullable=True, unique=None, default=None)
+    follows_from = Column('follows_from', DateTime(timezone=False), nullable=True, unique=None, default=datetime.datetime.now)
+
+    user = relationship('User', primaryjoin='User.user_id==UserFollowing.user_id')
+
+    follows_user = relationship('User', primaryjoin='User.user_id==UserFollowing.follows_user_id')
+    follows_repository = relationship('Repository', order_by='Repository.repo_name')
+
+    @classmethod
+    def get_repo_followers(cls, repo_id):
+        return cls.query().filter(cls.follows_repo_id == repo_id)
+
+
+class CacheInvalidation(Base, BaseModel):
+    __tablename__ = 'cache_invalidation'
+    __table_args__ = (
+        UniqueConstraint('cache_key'),
+        Index('key_idx', 'cache_key'),
+        {'extend_existing': True, 'mysql_engine': 'InnoDB',
+         'mysql_charset': 'utf8'},
+    )
+    cache_id = Column("cache_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
+    cache_key = Column("cache_key", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
+    cache_args = Column("cache_args", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
+    cache_active = Column("cache_active", Boolean(), nullable=True, unique=None, default=False)
+
+    def __init__(self, cache_key, cache_args=''):
+        self.cache_key = cache_key
+        self.cache_args = cache_args
+        self.cache_active = False
+
+    def __unicode__(self):
+        return u"<%s('%s:%s')>" % (self.__class__.__name__,
+                                  self.cache_id, self.cache_key)
+
+    @property
+    def prefix(self):
+        _split = self.cache_key.split(self.cache_args, 1)
+        if _split and len(_split) == 2:
+            return _split[0]
+        return ''
+
+    @classmethod
+    def clear_cache(cls):
+        cls.query().delete()
+
+    @classmethod
+    def _get_key(cls, key):
+        """
+        Wrapper for generating a key, together with a prefix
+
+        :param key:
+        """
+        import rhodecode
+        prefix = ''
+        org_key = key
+        iid = rhodecode.CONFIG.get('instance_id')
+        if iid:
+            prefix = iid
+
+        return "%s%s" % (prefix, key), prefix, org_key
+
+    @classmethod
+    def get_by_key(cls, key):
+        return cls.query().filter(cls.cache_key == key).scalar()
+
+    @classmethod
+    def get_by_repo_name(cls, repo_name):
+        return cls.query().filter(cls.cache_args == repo_name).all()
+
+    @classmethod
+    def _get_or_create_key(cls, key, repo_name, commit=True):
+        inv_obj = Session().query(cls).filter(cls.cache_key == key).scalar()
+        if not inv_obj:
+            try:
+                inv_obj = CacheInvalidation(key, repo_name)
+                Session().add(inv_obj)
+                if commit:
+                    Session().commit()
+            except Exception:
+                log.error(traceback.format_exc())
+                Session().rollback()
+        return inv_obj
+
+    @classmethod
+    def invalidate(cls, key):
+        """
+        Returns Invalidation object if this given key should be invalidated
+        None otherwise. `cache_active = False` means that this cache
+        state is not valid and needs to be invalidated
+
+        :param key:
+        """
+        repo_name = key
+        repo_name = remove_suffix(repo_name, '_README')
+        repo_name = remove_suffix(repo_name, '_RSS')
+        repo_name = remove_suffix(repo_name, '_ATOM')
+
+        # adds instance prefix
+        key, _prefix, _org_key = cls._get_key(key)
+        inv = cls._get_or_create_key(key, repo_name)
+
+        if inv and inv.cache_active is False:
+            return inv
+
+    @classmethod
+    def set_invalidate(cls, key=None, repo_name=None):
+        """
+        Mark this Cache key for invalidation, either by key or whole
+        cache sets based on repo_name
+
+        :param key:
+        """
+        if key:
+            key, _prefix, _org_key = cls._get_key(key)
+            inv_objs = Session().query(cls).filter(cls.cache_key == key).all()
+        elif repo_name:
+            inv_objs = Session().query(cls).filter(cls.cache_args == repo_name).all()
+
+        log.debug('marking %s key[s] for invalidation based on key=%s,repo_name=%s'
+                  % (len(inv_objs), key, repo_name))
+        try:
+            for inv_obj in inv_objs:
+                inv_obj.cache_active = False
+                Session().add(inv_obj)
+            Session().commit()
+        except Exception:
+            log.error(traceback.format_exc())
+            Session().rollback()
+
+    @classmethod
+    def set_valid(cls, key):
+        """
+        Mark this cache key as active and currently cached
+
+        :param key:
+        """
+        inv_obj = cls.get_by_key(key)
+        inv_obj.cache_active = True
+        Session().add(inv_obj)
+        Session().commit()
+
+    @classmethod
+    def get_cache_map(cls):
+
+        class cachemapdict(dict):
+
+            def __init__(self, *args, **kwargs):
+                fixkey = kwargs.get('fixkey')
+                if fixkey:
+                    del kwargs['fixkey']
+                self.fixkey = fixkey
+                super(cachemapdict, self).__init__(*args, **kwargs)
+
+            def __getattr__(self, name):
+                key = name
+                if self.fixkey:
+                    key, _prefix, _org_key = cls._get_key(key)
+                if key in self.__dict__:
+                    return self.__dict__[key]
+                else:
+                    return self[key]
+
+            def __getitem__(self, key):
+                if self.fixkey:
+                    key, _prefix, _org_key = cls._get_key(key)
+                try:
+                    return super(cachemapdict, self).__getitem__(key)
+                except KeyError:
+                    return
+
+        cache_map = cachemapdict(fixkey=True)
+        for obj in cls.query().all():
+            cache_map[obj.cache_key] = cachemapdict(obj.get_dict())
+        return cache_map
+
+
+class ChangesetComment(Base, BaseModel):
+    __tablename__ = 'changeset_comments'
+    __table_args__ = (
+        Index('cc_revision_idx', 'revision'),
+        {'extend_existing': True, 'mysql_engine': 'InnoDB',
+         'mysql_charset': 'utf8'},
+    )
+    comment_id = Column('comment_id', Integer(), nullable=False, primary_key=True)
+    repo_id = Column('repo_id', Integer(), ForeignKey('repositories.repo_id'), nullable=False)
+    revision = Column('revision', String(40), nullable=True)
+    pull_request_id = Column("pull_request_id", Integer(), ForeignKey('pull_requests.pull_request_id'), nullable=True)
+    line_no = Column('line_no', Unicode(10), nullable=True)
+    hl_lines = Column('hl_lines', Unicode(512), nullable=True)
+    f_path = Column('f_path', Unicode(1000), nullable=True)
+    user_id = Column('user_id', Integer(), ForeignKey('users.user_id'), nullable=False)
+    text = Column('text', UnicodeText(25000), nullable=False)
+    created_on = Column('created_on', DateTime(timezone=False), nullable=False, default=datetime.datetime.now)
+    modified_at = Column('modified_at', DateTime(timezone=False), nullable=False, default=datetime.datetime.now)
+
+    author = relationship('User', lazy='joined')
+    repo = relationship('Repository')
+    status_change = relationship('ChangesetStatus', cascade="all, delete, delete-orphan")
+    pull_request = relationship('PullRequest', lazy='joined')
+
+    @classmethod
+    def get_users(cls, revision=None, pull_request_id=None):
+        """
+        Returns user associated with this ChangesetComment. ie those
+        who actually commented
+
+        :param cls:
+        :param revision:
+        """
+        q = Session().query(User)\
+                .join(ChangesetComment.author)
+        if revision:
+            q = q.filter(cls.revision == revision)
+        elif pull_request_id:
+            q = q.filter(cls.pull_request_id == pull_request_id)
+        return q.all()
+
+
+class ChangesetStatus(Base, BaseModel):
+    __tablename__ = 'changeset_statuses'
+    __table_args__ = (
+        Index('cs_revision_idx', 'revision'),
+        Index('cs_version_idx', 'version'),
+        UniqueConstraint('repo_id', 'revision', 'version'),
+        {'extend_existing': True, 'mysql_engine': 'InnoDB',
+         'mysql_charset': 'utf8'}
+    )
+    STATUS_NOT_REVIEWED = DEFAULT = 'not_reviewed'
+    STATUS_APPROVED = 'approved'
+    STATUS_REJECTED = 'rejected'
+    STATUS_UNDER_REVIEW = 'under_review'
+
+    STATUSES = [
+        (STATUS_NOT_REVIEWED, _("Not Reviewed")),  # (no icon) and default
+        (STATUS_APPROVED, _("Approved")),
+        (STATUS_REJECTED, _("Rejected")),
+        (STATUS_UNDER_REVIEW, _("Under Review")),
+    ]
+
+    changeset_status_id = Column('changeset_status_id', Integer(), nullable=False, primary_key=True)
+    repo_id = Column('repo_id', Integer(), ForeignKey('repositories.repo_id'), nullable=False)
+    user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None)
+    revision = Column('revision', String(40), nullable=False)
+    status = Column('status', String(128), nullable=False, default=DEFAULT)
+    changeset_comment_id = Column('changeset_comment_id', Integer(), ForeignKey('changeset_comments.comment_id'))
+    modified_at = Column('modified_at', DateTime(), nullable=False, default=datetime.datetime.now)
+    version = Column('version', Integer(), nullable=False, default=0)
+    pull_request_id = Column("pull_request_id", Integer(), ForeignKey('pull_requests.pull_request_id'), nullable=True)
+
+    author = relationship('User', lazy='joined')
+    repo = relationship('Repository')
+    comment = relationship('ChangesetComment', lazy='joined')
+    pull_request = relationship('PullRequest', lazy='joined')
+
+    def __unicode__(self):
+        return u"<%s('%s:%s')>" % (
+            self.__class__.__name__,
+            self.status, self.author
+        )
+
+    @classmethod
+    def get_status_lbl(cls, value):
+        return dict(cls.STATUSES).get(value)
+
+    @property
+    def status_lbl(self):
+        return ChangesetStatus.get_status_lbl(self.status)
+
+
+class PullRequest(Base, BaseModel):
+    __tablename__ = 'pull_requests'
+    __table_args__ = (
+        {'extend_existing': True, 'mysql_engine': 'InnoDB',
+         'mysql_charset': 'utf8'},
+    )
+
+    STATUS_NEW = u'new'
+    STATUS_OPEN = u'open'
+    STATUS_CLOSED = u'closed'
+
+    pull_request_id = Column('pull_request_id', Integer(), nullable=False, primary_key=True)
+    title = Column('title', Unicode(256), nullable=True)
+    description = Column('description', UnicodeText(10240), nullable=True)
+    status = Column('status', Unicode(256), nullable=False, default=STATUS_NEW)
+    created_on = Column('created_on', DateTime(timezone=False), nullable=False, default=datetime.datetime.now)
+    updated_on = Column('updated_on', DateTime(timezone=False), nullable=False, default=datetime.datetime.now)
+    user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None)
+    _revisions = Column('revisions', UnicodeText(20500))  # 500 revisions max
+    org_repo_id = Column('org_repo_id', Integer(), ForeignKey('repositories.repo_id'), nullable=False)
+    org_ref = Column('org_ref', Unicode(256), nullable=False)
+    other_repo_id = Column('other_repo_id', Integer(), ForeignKey('repositories.repo_id'), nullable=False)
+    other_ref = Column('other_ref', Unicode(256), nullable=False)
+
+    @hybrid_property
+    def revisions(self):
+        return self._revisions.split(':')
+
+    @revisions.setter
+    def revisions(self, val):
+        self._revisions = ':'.join(val)
+
+    @property
+    def org_ref_parts(self):
+        return self.org_ref.split(':')
+
+    @property
+    def other_ref_parts(self):
+        return self.other_ref.split(':')
+
+    author = relationship('User', lazy='joined')
+    reviewers = relationship('PullRequestReviewers',
+                             cascade="all, delete, delete-orphan")
+    org_repo = relationship('Repository', primaryjoin='PullRequest.org_repo_id==Repository.repo_id')
+    other_repo = relationship('Repository', primaryjoin='PullRequest.other_repo_id==Repository.repo_id')
+    statuses = relationship('ChangesetStatus')
+    comments = relationship('ChangesetComment',
+                             cascade="all, delete, delete-orphan")
+
+    def is_closed(self):
+        return self.status == self.STATUS_CLOSED
+
+    def __json__(self):
+        return dict(
+          revisions=self.revisions
+        )
+
+
+class PullRequestReviewers(Base, BaseModel):
+    __tablename__ = 'pull_request_reviewers'
+    __table_args__ = (
+        {'extend_existing': True, 'mysql_engine': 'InnoDB',
+         'mysql_charset': 'utf8'},
+    )
+
+    def __init__(self, user=None, pull_request=None):
+        self.user = user
+        self.pull_request = pull_request
+
+    pull_requests_reviewers_id = Column('pull_requests_reviewers_id', Integer(), nullable=False, primary_key=True)
+    pull_request_id = Column("pull_request_id", Integer(), ForeignKey('pull_requests.pull_request_id'), nullable=False)
+    user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=True)
+
+    user = relationship('User')
+    pull_request = relationship('PullRequest')
+
+
+class Notification(Base, BaseModel):
+    __tablename__ = 'notifications'
+    __table_args__ = (
+        Index('notification_type_idx', 'type'),
+        {'extend_existing': True, 'mysql_engine': 'InnoDB',
+         'mysql_charset': 'utf8'},
+    )
+
+    TYPE_CHANGESET_COMMENT = u'cs_comment'
+    TYPE_MESSAGE = u'message'
+    TYPE_MENTION = u'mention'
+    TYPE_REGISTRATION = u'registration'
+    TYPE_PULL_REQUEST = u'pull_request'
+    TYPE_PULL_REQUEST_COMMENT = u'pull_request_comment'
+
+    notification_id = Column('notification_id', Integer(), nullable=False, primary_key=True)
+    subject = Column('subject', Unicode(512), nullable=True)
+    body = Column('body', UnicodeText(50000), nullable=True)
+    created_by = Column("created_by", Integer(), ForeignKey('users.user_id'), nullable=True)
+    created_on = Column('created_on', DateTime(timezone=False), nullable=False, default=datetime.datetime.now)
+    type_ = Column('type', Unicode(256))
+
+    created_by_user = relationship('User')
+    notifications_to_users = relationship('UserNotification', lazy='joined',
+                                          cascade="all, delete, delete-orphan")
+
+    @property
+    def recipients(self):
+        return [x.user for x in UserNotification.query()\
+                .filter(UserNotification.notification == self)\
+                .order_by(UserNotification.user_id.asc()).all()]
+
+    @classmethod
+    def create(cls, created_by, subject, body, recipients, type_=None):
+        if type_ is None:
+            type_ = Notification.TYPE_MESSAGE
+
+        notification = cls()
+        notification.created_by_user = created_by
+        notification.subject = subject
+        notification.body = body
+        notification.type_ = type_
+        notification.created_on = datetime.datetime.now()
+
+        for u in recipients:
+            assoc = UserNotification()
+            assoc.notification = notification
+            u.notifications.append(assoc)
+        Session().add(notification)
+        return notification
+
+    @property
+    def description(self):
+        from rhodecode.model.notification import NotificationModel
+        return NotificationModel().make_description(self)
+
+
+class UserNotification(Base, BaseModel):
+    __tablename__ = 'user_to_notification'
+    __table_args__ = (
+        UniqueConstraint('user_id', 'notification_id'),
+        {'extend_existing': True, 'mysql_engine': 'InnoDB',
+         'mysql_charset': 'utf8'}
+    )
+    user_id = Column('user_id', Integer(), ForeignKey('users.user_id'), primary_key=True)
+    notification_id = Column("notification_id", Integer(), ForeignKey('notifications.notification_id'), primary_key=True)
+    read = Column('read', Boolean, default=False)
+    sent_on = Column('sent_on', DateTime(timezone=False), nullable=True, unique=None)
+
+    user = relationship('User', lazy="joined")
+    notification = relationship('Notification', lazy="joined",
+                                order_by=lambda: Notification.created_on.desc(),)
+
+    def mark_as_read(self):
+        self.read = True
+        Session().add(self)
+
+
+class DbMigrateVersion(Base, BaseModel):
+    __tablename__ = 'db_migrate_version'
+    __table_args__ = (
+        {'extend_existing': True, 'mysql_engine': 'InnoDB',
+         'mysql_charset': 'utf8'},
+    )
+    repository_id = Column('repository_id', String(250), primary_key=True)
+    repository_path = Column('repository_path', Text)
+    version = Column('version', Integer)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rhodecode/lib/dbmigrate/schema/db_1_6_0.py	Sun Apr 07 18:37:22 2013 +0200
@@ -0,0 +1,28 @@
+# -*- coding: utf-8 -*-
+"""
+    rhodecode.model.db_1_6_0
+    ~~~~~~~~~~~~~~~~~~~~~~~~
+
+    Database Models for RhodeCode <=1.5.X
+
+    :created_on: Apr 08, 2010
+    :author: marcink
+    :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
+    :license: GPLv3, see COPYING for more details.
+"""
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+#TODO: replace that will db.py content after next
+
+from rhodecode.model.db import *
--- a/rhodecode/lib/dbmigrate/versions/003_version_1_2_0.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/lib/dbmigrate/versions/003_version_1_2_0.py	Sun Apr 07 18:37:22 2013 +0200
@@ -34,26 +34,26 @@
     #==========================================================================
     # Add table `users_groups`
     #==========================================================================
-    from rhodecode.lib.dbmigrate.schema.db_1_2_0 import UsersGroup
-    UsersGroup().__table__.create()
+    from rhodecode.lib.dbmigrate.schema.db_1_2_0 import UserGroup
+    UserGroup().__table__.create()
 
     #==========================================================================
     # Add table `users_groups_members`
     #==========================================================================
-    from rhodecode.lib.dbmigrate.schema.db_1_2_0 import UsersGroupMember
-    UsersGroupMember().__table__.create()
+    from rhodecode.lib.dbmigrate.schema.db_1_2_0 import UserGroupMember
+    UserGroupMember().__table__.create()
 
     #==========================================================================
     # Add table `users_group_repo_to_perm`
     #==========================================================================
-    from rhodecode.lib.dbmigrate.schema.db_1_2_0 import UsersGroupRepoToPerm
-    UsersGroupRepoToPerm().__table__.create()
+    from rhodecode.lib.dbmigrate.schema.db_1_2_0 import UserGroupRepoToPerm
+    UserGroupRepoToPerm().__table__.create()
 
     #==========================================================================
     # Add table `users_group_to_perm`
     #==========================================================================
-    from rhodecode.lib.dbmigrate.schema.db_1_2_0 import UsersGroupToPerm
-    UsersGroupToPerm().__table__.create()
+    from rhodecode.lib.dbmigrate.schema.db_1_2_0 import UserGroupToPerm
+    UserGroupToPerm().__table__.create()
 
     #==========================================================================
     # Upgrade of `users` table
--- a/rhodecode/lib/dbmigrate/versions/004_version_1_3_0.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/lib/dbmigrate/versions/004_version_1_3_0.py	Sun Apr 07 18:37:22 2013 +0200
@@ -21,8 +21,8 @@
     #==========================================================================
     # Add table `users_group_repo_group_to_perm`
     #==========================================================================
-    from rhodecode.lib.dbmigrate.schema.db_1_3_0 import UsersGroupRepoGroupToPerm
-    UsersGroupRepoGroupToPerm().__table__.create()
+    from rhodecode.lib.dbmigrate.schema.db_1_3_0 import UserGroupRepoGroupToPerm
+    UserGroupRepoGroupToPerm().__table__.create()
 
     #==========================================================================
     # Add table `changeset_comments`
@@ -45,8 +45,8 @@
     #==========================================================================
     # Add unique to table `users_group_to_perm`
     #==========================================================================
-    from rhodecode.lib.dbmigrate.schema.db_1_3_0 import UsersGroupToPerm
-    tbl = UsersGroupToPerm().__table__
+    from rhodecode.lib.dbmigrate.schema.db_1_3_0 import UserGroupToPerm
+    tbl = UserGroupToPerm().__table__
     cons = UniqueConstraint('users_group_id', 'permission_id', table=tbl)
     cons.create()
 
--- a/rhodecode/lib/dbmigrate/versions/006_version_1_4_0.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/lib/dbmigrate/versions/006_version_1_4_0.py	Sun Apr 07 18:37:22 2013 +0200
@@ -74,8 +74,8 @@
     #==========================================================================
     # USERS GROUP TABLE
     #==========================================================================
-    from rhodecode.lib.dbmigrate.schema.db_1_3_0 import UsersGroup
-    tbl = UsersGroup.__table__
+    from rhodecode.lib.dbmigrate.schema.db_1_3_0 import UserGroup
+    tbl = UserGroup.__table__
     # add inherit_default_permission column
     gr_inherit_default_permissions = Column(
                                     "users_group_inherit_default_permissions",
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rhodecode/lib/dbmigrate/versions/011_version_1_6_0.py	Sun Apr 07 18:37:22 2013 +0200
@@ -0,0 +1,36 @@
+import logging
+import datetime
+
+from sqlalchemy import *
+from sqlalchemy.exc import DatabaseError
+from sqlalchemy.orm import relation, backref, class_mapper, joinedload
+from sqlalchemy.orm.session import Session
+from sqlalchemy.ext.declarative import declarative_base
+
+from rhodecode.lib.dbmigrate.migrate import *
+from rhodecode.lib.dbmigrate.migrate.changeset import *
+
+from rhodecode.model.meta import Base
+from rhodecode.model import meta
+from rhodecode.lib.dbmigrate.versions import _reset_base
+
+log = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    """
+    Upgrade operations go here.
+    Don't create your own engine; bind migrate_engine to your metadata
+    """
+    _reset_base(migrate_engine)
+    #==========================================================================
+    # USER LOGS
+    #==========================================================================
+    from rhodecode.lib.dbmigrate.schema.db_1_6_0 import RepositoryField
+    tbl = RepositoryField.__table__
+    tbl.create()
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
--- a/rhodecode/lib/diffs.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/lib/diffs.py	Sun Apr 07 18:37:22 2013 +0200
@@ -28,24 +28,16 @@
 import re
 import difflib
 import logging
-import traceback
 
 from itertools import tee, imap
 
-from mercurial import patch
-from mercurial.mdiff import diffopts
-from mercurial.bundlerepo import bundlerepository
-
 from pylons.i18n.translation import _
 
-from rhodecode.lib.compat import BytesIO
-from rhodecode.lib.vcs.utils.hgcompat import localrepo
 from rhodecode.lib.vcs.exceptions import VCSError
 from rhodecode.lib.vcs.nodes import FileNode, SubModuleNode
 from rhodecode.lib.vcs.backends.base import EmptyChangeset
 from rhodecode.lib.helpers import escape
-from rhodecode.lib.utils import make_ui
-from rhodecode.lib.utils2 import safe_unicode
+from rhodecode.lib.utils2 import safe_unicode, safe_str
 
 log = logging.getLogger(__name__)
 
@@ -71,7 +63,7 @@
         filenode_old = FileNode(filenode_new.path, '', EmptyChangeset())
 
     if filenode_old.is_binary or filenode_new.is_binary:
-        diff = wrap_to_table(_('binary file'))
+        diff = wrap_to_table(_('Binary file'))
         stats = (0, 0)
         size = 0
 
@@ -429,7 +421,7 @@
 
         sorter = lambda info: {'A': 0, 'M': 1, 'D': 2}.get(info['operation'])
 
-        if inline_diff is False:
+        if not inline_diff:
             return diff_container(sorted(_files, key=sorter))
 
         # highlight inline changes
@@ -692,20 +684,8 @@
         return self.adds, self.removes
 
 
-class InMemoryBundleRepo(bundlerepository):
-    def __init__(self, ui, path, bundlestream):
-        self._tempparent = None
-        localrepo.localrepository.__init__(self, ui, path)
-        self.ui.setconfig('phases', 'publish', False)
-
-        self.bundle = bundlestream
-
-        # dict with the mapping 'filename' -> position in the bundle
-        self.bundlefilespos = {}
-
-
-def differ(org_repo, org_ref, other_repo, other_ref, discovery_data=None,
-           remote_compare=False, context=3, ignore_whitespace=False):
+def differ(org_repo, org_ref, other_repo, other_ref,
+           context=3, ignore_whitespace=False):
     """
     General differ between branches, bookmarks, revisions of two remote or
     local but related repositories
@@ -723,48 +703,15 @@
     org_repo = org_repo_scm._repo
     other_repo = other_repo_scm._repo
 
-    org_ref = org_ref[1]
-    other_ref = other_ref[1]
+    org_ref = safe_str(org_ref[1])
+    other_ref = safe_str(other_ref[1])
 
     if org_repo_scm == other_repo_scm:
         log.debug('running diff between %s@%s and %s@%s'
-                  % (org_repo.path, org_ref, other_repo.path, other_ref))
+                  % (org_repo.path, org_ref,
+                     other_repo.path, other_ref))
         _diff = org_repo_scm.get_diff(rev1=org_ref, rev2=other_ref,
             ignore_whitespace=ignore_whitespace, context=context)
         return _diff
 
-    elif remote_compare:
-        opts = diffopts(git=True, ignorews=ignore_whitespace, context=context)
-        common, incoming, rheads = discovery_data
-        org_repo_peer = localrepo.locallegacypeer(org_repo.local())
-        # create a bundle (uncompressed if other repo is not local)
-        if org_repo_peer.capable('getbundle'):
-            # disable repo hooks here since it's just bundle !
-            # patch and reset hooks section of UI config to not run any
-            # hooks on fetching archives with subrepos
-            for k, _ in org_repo.ui.configitems('hooks'):
-                org_repo.ui.setconfig('hooks', k, None)
-            unbundle = org_repo.getbundle('incoming', common=None,
-                                          heads=None)
-
-            buf = BytesIO()
-            while True:
-                chunk = unbundle._stream.read(1024 * 4)
-                if not chunk:
-                    break
-                buf.write(chunk)
-
-            buf.seek(0)
-            # replace chunked _stream with data that can do tell() and seek()
-            unbundle._stream = buf
-
-            ui = make_ui('db')
-            bundlerepo = InMemoryBundleRepo(ui, path=org_repo.root,
-                                            bundlestream=unbundle)
-
-            return ''.join(patch.diff(bundlerepo,
-                                      node1=other_repo[other_ref].node(),
-                                      node2=org_repo[org_ref].node(),
-                                      opts=opts))
-
-    return ''
+    return '' # FIXME: when is it ever relevant to return nothing?
--- a/rhodecode/lib/exceptions.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/lib/exceptions.py	Sun Apr 07 18:37:22 2013 +0200
@@ -50,7 +50,7 @@
     pass
 
 
-class UsersGroupsAssignedException(Exception):
+class UserGroupsAssignedException(Exception):
     pass
 
 
@@ -58,14 +58,23 @@
     pass
 
 
+class AttachedForksError(Exception):
+    pass
+
+
 class HTTPLockedRC(HTTPClientError):
     """
-    Special Exception For locked Repos in RhodeCode
+    Special Exception For locked Repos in RhodeCode, the return code can
+    be overwritten by _code keyword argument passed into constructors
     """
     code = 423
     title = explanation = 'Repository Locked'
 
     def __init__(self, reponame, username, *args, **kwargs):
+        from rhodecode import CONFIG
+        from rhodecode.lib.utils2 import safe_int
+        _code = CONFIG.get('lock_ret_code')
+        self.code = safe_int(_code, self.code)
         self.title = self.explanation = ('Repository `%s` locked by '
                                          'user `%s`' % (reponame, username))
         super(HTTPLockedRC, self).__init__(*args, **kwargs)
--- a/rhodecode/lib/helpers.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/lib/helpers.py	Sun Apr 07 18:37:22 2013 +0200
@@ -41,9 +41,10 @@
     convert_boolean_attrs, NotGiven, _make_safe_id_component
 
 from rhodecode.lib.annotate import annotate_highlight
-from rhodecode.lib.utils import repo_name_slug
+from rhodecode.lib.utils import repo_name_slug, get_custom_lexer
 from rhodecode.lib.utils2 import str2bool, safe_unicode, safe_str, \
-    get_changeset_safe, datetime_to_time, time_to_datetime, AttributeDict
+    get_changeset_safe, datetime_to_time, time_to_datetime, AttributeDict,\
+    safe_int
 from rhodecode.lib.markup_renderer import MarkupRenderer
 from rhodecode.lib.vcs.exceptions import ChangesetDoesNotExistError
 from rhodecode.lib.vcs.backends.base import BaseChangeset, EmptyChangeset
@@ -253,13 +254,14 @@
 
 
 def pygmentize(filenode, **kwargs):
-    """pygmentize function using pygments
+    """
+    pygmentize function using pygments
 
     :param filenode:
     """
-
-    return literal(code_highlight(filenode.content,
-                                  filenode.lexer, CodeHtmlFormatter(**kwargs)))
+    lexer = get_custom_lexer(filenode.extension) or filenode.lexer
+    return literal(code_highlight(filenode.content, lexer,
+                                  CodeHtmlFormatter(**kwargs)))
 
 
 def pygmentize_annotation(repo_name, filenode, **kwargs):
@@ -362,13 +364,31 @@
 from rhodecode.lib.utils2 import credentials_filter, age as _age
 from rhodecode.model.db import User, ChangesetStatus
 
-age = lambda  x: _age(x)
+age = lambda  x, y=False: _age(x, y)
 capitalize = lambda x: x.capitalize()
 email = author_email
 short_id = lambda x: x[:12]
 hide_credentials = lambda x: ''.join(credentials_filter(x))
 
 
+def show_id(cs):
+    """
+    Configurable function that shows ID
+    by default it's r123:fffeeefffeee
+
+    :param cs: changeset instance
+    """
+    from rhodecode import CONFIG
+    def_len = safe_int(CONFIG.get('show_sha_length', 12))
+    show_rev = str2bool(CONFIG.get('show_revision_number', True))
+
+    raw_id = cs.raw_id[:def_len]
+    if show_rev:
+        return 'r%s:%s' % (cs.revision, raw_id)
+    else:
+        return '%s' % (raw_id)
+
+
 def fmt_date(date):
     if date:
         _fmt = _(u"%a, %d %b %Y %H:%M:%S").encode('utf8')
@@ -474,23 +494,20 @@
     return value
 
 
-def bool2icon(value):
-    """Returns True/False values represented as small html image of true/false
+def boolicon(value):
+    """Returns boolean value of a value, represented as small html image of true/false
     icons
 
-    :param value: bool value
+    :param value: value
     """
 
-    if value is True:
+    if value:
         return HTML.tag('img', src=url("/images/icons/accept.png"),
                         alt=_('True'))
-
-    if value is False:
+    else:
         return HTML.tag('img', src=url("/images/icons/cancel.png"),
                         alt=_('False'))
 
-    return value
-
 
 def action_parser(user_log, feed=False, parse_cs=False):
     """
@@ -549,13 +566,18 @@
             return link_to(lbl, _url, raw_id=rev.raw_id, repo_name=repo_name,
                            class_='lazy-cs' if lazy_cs else '')
 
+        def _get_op(rev_txt):
+            _op = None
+            _name = rev_txt
+            if len(rev_txt.split('=>')) == 2:
+                _op, _name = rev_txt.split('=>')
+            return _op, _name
+
         revs = []
         if len(filter(lambda v: v != '', revs_ids)) > 0:
             repo = None
             for rev in revs_ids[:revs_top_limit]:
-                _op = _name = None
-                if len(rev.split('=>')) == 2:
-                    _op, _name = rev.split('=>')
+                _op, _name = _get_op(rev)
 
                 # we want parsed changesets, or new log store format is bad
                 if parse_cs:
@@ -582,6 +604,10 @@
             [lnk(rev, repo_name) for rev in revs[:revs_limit]]
             )
         )
+        _op1, _name1 = _get_op(revs_ids[0])
+        _op2, _name2 = _get_op(revs_ids[-1])
+
+        _rev = '%s...%s' % (_name1, _name2)
 
         compare_view = (
             ' <div class="compare_view tooltip" title="%s">'
@@ -590,7 +616,7 @@
                     revs_ids[0][:12], revs_ids[-1][:12]
                 ),
                 url('changeset_home', repo_name=repo_name,
-                    revision='%s...%s' % (revs_ids[0], revs_ids[-1])
+                    revision=_rev
                 ),
                 _('compare view')
             )
@@ -683,9 +709,9 @@
                                     get_user_name, 'user_add.png'),
     'admin_updated_user':          (_('[updated] user'),
                                     get_user_name, 'user_edit.png'),
-    'admin_created_users_group':   (_('[created] users group'),
+    'admin_created_users_group':   (_('[created] user group'),
                                     get_users_group, 'group_add.png'),
-    'admin_updated_users_group':   (_('[updated] users group'),
+    'admin_updated_users_group':   (_('[updated] user group'),
                                     get_users_group, 'group_edit.png'),
     'user_commented_revision':     (_('[commented] on revision in repository'),
                                     get_cs_links, 'comment_add.png'),
@@ -741,7 +767,8 @@
 # PERMS
 #==============================================================================
 from rhodecode.lib.auth import HasPermissionAny, HasPermissionAll, \
-HasRepoPermissionAny, HasRepoPermissionAll
+HasRepoPermissionAny, HasRepoPermissionAll, HasReposGroupPermissionAll, \
+HasReposGroupPermissionAny
 
 
 #==============================================================================
@@ -887,7 +914,7 @@
         return ': ' + _('No Files')
 
 
-def repo_link(groups_and_repos, last_url=None):
+def repo_link(groups_and_repos):
     """
     Makes a breadcrumbs link to repo within a group
     joins &raquo; on each group to create a fancy link
@@ -898,18 +925,14 @@
     :param groups_and_repos:
     :param last_url:
     """
-    groups, repo_name = groups_and_repos
-    last_link = link_to(repo_name, last_url) if last_url else repo_name
+    groups, just_name, repo_name = groups_and_repos
+    last_url = url('summary_home', repo_name=repo_name)
+    last_link = link_to(just_name, last_url)
 
-    if not groups:
-        if last_url:
-            return last_link
-        return repo_name
-    else:
-        def make_link(group):
-            return link_to(group.name,
-                           url('repos_group_home', group_name=group.group_name))
-        return literal(' &raquo; '.join(map(make_link, groups) + [last_link]))
+    def make_link(group):
+        return link_to(group.name,
+                       url('repos_group_home', group_name=group.group_name))
+    return literal(' &raquo; '.join(map(make_link, groups) + ['<span>%s</span>' % last_link]))
 
 
 def fancy_file_stats(stats):
@@ -975,7 +998,12 @@
     return literal('<div style="width:%spx">%s%s</div>' % (width, d_a, d_d))
 
 
-def urlify_text(text_):
+def urlify_text(text_, safe=True):
+    """
+    Extrac urls from text and make html links out of them
+
+    :param text_:
+    """
 
     url_pat = re.compile(r'''(http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]'''
                          '''|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+)''')
@@ -983,8 +1011,10 @@
     def url_func(match_obj):
         url_full = match_obj.groups()[0]
         return '<a href="%(url)s">%(url)s</a>' % ({'url': url_full})
-
-    return literal(url_pat.sub(url_func, text_))
+    _newtext = url_pat.sub(url_func, text_)
+    if safe:
+        return literal(_newtext)
+    return _newtext
 
 
 def urlify_changesets(text_, repository):
@@ -992,26 +1022,26 @@
     Extract revision ids from changeset and make link from them
 
     :param text_:
-    :param repository:
+    :param repository: repo name to build the URL with
     """
-
-    URL_PAT = re.compile(r'([0-9a-fA-F]{12,})')
+    from pylons import url  # doh, we need to re-import url to mock it later
+    URL_PAT = re.compile(r'(^|\s)([0-9a-fA-F]{12,40})($|\s)')
 
     def url_func(match_obj):
-        rev = match_obj.groups()[0]
-        pref = ''
-        if match_obj.group().startswith(' '):
-            pref = ' '
+        rev = match_obj.groups()[1]
+        pref = match_obj.groups()[0]
+        suf = match_obj.groups()[2]
+
         tmpl = (
         '%(pref)s<a class="%(cls)s" href="%(url)s">'
-        '%(rev)s'
-        '</a>'
+        '%(rev)s</a>%(suf)s'
         )
         return tmpl % {
          'pref': pref,
          'cls': 'revision-link',
          'url': url('changeset_home', repo_name=repository, revision=rev),
          'rev': rev,
+         'suf': suf
         }
 
     newtext = URL_PAT.sub(url_func, text_)
@@ -1030,6 +1060,7 @@
     :param link_: changeset link
     """
     import traceback
+    from pylons import url  # doh, we need to re-import url to mock it later
 
     def escaper(string):
         return string.replace('<', '&lt;').replace('>', '&gt;')
@@ -1048,8 +1079,12 @@
     # urlify changesets - extrac revisions and make link out of them
     newtext = urlify_changesets(escaper(text_), repository)
 
+    # extract http/https links and make them real urls
+    newtext = urlify_text(newtext, safe=False)
+
     try:
-        conf = config['app_conf']
+        from rhodecode import CONFIG
+        conf = CONFIG
 
         # allow multiple issue servers to be used
         valid_indices = [
@@ -1105,7 +1140,7 @@
         if link_:
             # wrap not links into final link => link_
             newtext = linkify_others(newtext, link_)
-    except:
+    except Exception:
         log.error(traceback.format_exc())
         pass
 
--- a/rhodecode/lib/hooks.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/lib/hooks.py	Sun Apr 07 18:37:22 2013 +0200
@@ -26,6 +26,7 @@
 import sys
 import time
 import binascii
+import traceback
 from inspect import isfunction
 
 from mercurial.scmutil import revrange
@@ -36,7 +37,7 @@
 from rhodecode.lib.vcs.backends.base import EmptyChangeset
 from rhodecode.lib.compat import json
 from rhodecode.lib.exceptions import HTTPLockedRC
-from rhodecode.lib.utils2 import safe_str, datetime_to_time
+from rhodecode.lib.utils2 import safe_str, _extract_extras
 from rhodecode.model.db import Repository, User
 
 
@@ -91,55 +92,35 @@
 def pre_push(ui, repo, **kwargs):
     # pre push function, currently used to ban pushing when
     # repository is locked
-    try:
-        rc_extras = json.loads(os.environ.get('RC_SCM_DATA', "{}"))
-    except:
-        rc_extras = {}
-    extras = dict(repo.ui.configitems('rhodecode_extras'))
+    ex = _extract_extras()
 
-    if 'username' in extras:
-        username = extras['username']
-        repository = extras['repository']
-        scm = extras['scm']
-        locked_by = extras['locked_by']
-    elif 'username' in rc_extras:
-        username = rc_extras['username']
-        repository = rc_extras['repository']
-        scm = rc_extras['scm']
-        locked_by = rc_extras['locked_by']
-    else:
-        raise Exception('Missing data in repo.ui and os.environ')
-
-    usr = User.get_by_username(username)
-    if locked_by[0] and usr.user_id != int(locked_by[0]):
-        locked_by = User.get(locked_by[0]).username
-        raise HTTPLockedRC(repository, locked_by)
+    usr = User.get_by_username(ex.username)
+    if ex.locked_by[0] and usr.user_id != int(ex.locked_by[0]):
+        locked_by = User.get(ex.locked_by[0]).username
+        # this exception is interpreted in git/hg middlewares and based
+        # on that proper return code is server to client
+        _http_ret = HTTPLockedRC(ex.repository, locked_by)
+        if str(_http_ret.code).startswith('2'):
+            #2xx Codes don't raise exceptions
+            sys.stdout.write(_http_ret.title)
+        else:
+            raise _http_ret
 
 
 def pre_pull(ui, repo, **kwargs):
     # pre push function, currently used to ban pushing when
     # repository is locked
-    try:
-        rc_extras = json.loads(os.environ.get('RC_SCM_DATA', "{}"))
-    except:
-        rc_extras = {}
-    extras = dict(repo.ui.configitems('rhodecode_extras'))
-    if 'username' in extras:
-        username = extras['username']
-        repository = extras['repository']
-        scm = extras['scm']
-        locked_by = extras['locked_by']
-    elif 'username' in rc_extras:
-        username = rc_extras['username']
-        repository = rc_extras['repository']
-        scm = rc_extras['scm']
-        locked_by = rc_extras['locked_by']
-    else:
-        raise Exception('Missing data in repo.ui and os.environ')
-
-    if locked_by[0]:
-        locked_by = User.get(locked_by[0]).username
-        raise HTTPLockedRC(repository, locked_by)
+    ex = _extract_extras()
+    if ex.locked_by[0]:
+        locked_by = User.get(ex.locked_by[0]).username
+        # this exception is interpreted in git/hg middlewares and based
+        # on that proper return code is server to client
+        _http_ret = HTTPLockedRC(ex.repository, locked_by)
+        if str(_http_ret.code).startswith('2'):
+            #2xx Codes don't raise exceptions
+            sys.stdout.write(_http_ret.title)
+        else:
+            raise _http_ret
 
 
 def log_pull_action(ui, repo, **kwargs):
@@ -149,42 +130,30 @@
     :param ui:
     :param repo:
     """
-    try:
-        rc_extras = json.loads(os.environ.get('RC_SCM_DATA', "{}"))
-    except:
-        rc_extras = {}
-    extras = dict(repo.ui.configitems('rhodecode_extras'))
-    if 'username' in extras:
-        username = extras['username']
-        repository = extras['repository']
-        scm = extras['scm']
-        make_lock = extras['make_lock']
-        ip = extras['ip']
-    elif 'username' in rc_extras:
-        username = rc_extras['username']
-        repository = rc_extras['repository']
-        scm = rc_extras['scm']
-        make_lock = rc_extras['make_lock']
-        ip = rc_extras['ip']
-    else:
-        raise Exception('Missing data in repo.ui and os.environ')
-    user = User.get_by_username(username)
+    ex = _extract_extras()
+
+    user = User.get_by_username(ex.username)
     action = 'pull'
-    action_logger(user, action, repository, ip, commit=True)
+    action_logger(user, action, ex.repository, ex.ip, commit=True)
     # extension hook call
     from rhodecode import EXTENSIONS
     callback = getattr(EXTENSIONS, 'PULL_HOOK', None)
-
     if isfunction(callback):
         kw = {}
-        kw.update(extras)
+        kw.update(ex)
         callback(**kw)
 
-    if make_lock is True:
-        Repository.lock(Repository.get_by_repo_name(repository), user.user_id)
+    if ex.make_lock is not None and ex.make_lock:
+        Repository.lock(Repository.get_by_repo_name(ex.repository), user.user_id)
         #msg = 'Made lock on repo `%s`' % repository
         #sys.stdout.write(msg)
 
+    if ex.locked_by[0]:
+        locked_by = User.get(ex.locked_by[0]).username
+        _http_ret = HTTPLockedRC(ex.repository, locked_by)
+        if str(_http_ret.code).startswith('2'):
+            #2xx Codes don't raise exceptions
+            sys.stdout.write(_http_ret.title)
     return 0
 
 
@@ -196,28 +165,11 @@
     :param repo: repo object containing the `ui` object
     """
 
-    try:
-        rc_extras = json.loads(os.environ.get('RC_SCM_DATA', "{}"))
-    except:
-        rc_extras = {}
+    ex = _extract_extras()
 
-    extras = dict(repo.ui.configitems('rhodecode_extras'))
-    if 'username' in extras:
-        username = extras['username']
-        repository = extras['repository']
-        scm = extras['scm']
-        make_lock = extras['make_lock']
-    elif 'username' in rc_extras:
-        username = rc_extras['username']
-        repository = rc_extras['repository']
-        scm = rc_extras['scm']
-        make_lock = rc_extras['make_lock']
-    else:
-        raise Exception('Missing data in repo.ui and os.environ')
+    action = ex.action + ':%s'
 
-    action = 'push' + ':%s'
-
-    if scm == 'hg':
+    if ex.scm == 'hg':
         node = kwargs['node']
 
         def get_revs(repo, rev_opt):
@@ -233,28 +185,35 @@
         stop, start = get_revs(repo, [node + ':'])
         h = binascii.hexlify
         revs = [h(repo[r].node()) for r in xrange(start, stop + 1)]
-    elif scm == 'git':
+    elif ex.scm == 'git':
         revs = kwargs.get('_git_revs', [])
         if '_git_revs' in kwargs:
             kwargs.pop('_git_revs')
 
     action = action % ','.join(revs)
 
-    action_logger(username, action, repository, extras['ip'], commit=True)
+    action_logger(ex.username, action, ex.repository, ex.ip, commit=True)
 
     # extension hook call
     from rhodecode import EXTENSIONS
     callback = getattr(EXTENSIONS, 'PUSH_HOOK', None)
     if isfunction(callback):
         kw = {'pushed_revs': revs}
-        kw.update(extras)
+        kw.update(ex)
         callback(**kw)
 
-    if make_lock is False:
-        Repository.unlock(Repository.get_by_repo_name(repository))
-        msg = 'Released lock on repo `%s`\n' % repository
+    if ex.make_lock is not None and not ex.make_lock:
+        Repository.unlock(Repository.get_by_repo_name(ex.repository))
+        msg = 'Released lock on repo `%s`\n' % ex.repository
         sys.stdout.write(msg)
 
+    if ex.locked_by[0]:
+        locked_by = User.get(ex.locked_by[0]).username
+        _http_ret = HTTPLockedRC(ex.repository, locked_by)
+        if str(_http_ret.code).startswith('2'):
+            #2xx Codes don't raise exceptions
+            sys.stdout.write(_http_ret.title)
+
     return 0
 
 
@@ -359,7 +318,7 @@
     from rhodecode.model import init_model
     from rhodecode.model.db import RhodeCodeUi
     from rhodecode.lib.utils import make_ui
-    extras = json.loads(env['RHODECODE_EXTRAS'])
+    extras = _extract_extras(env)
 
     path, ini_name = os.path.split(extras['config'])
     conf = appconfig('config:%s' % ini_name, relative_to=path)
@@ -380,15 +339,11 @@
 
     _hooks = dict(baseui.configitems('hooks')) or {}
 
-    for k, v in extras.items():
-        baseui.setconfig('rhodecode_extras', k, v)
     if hook_type == 'pre':
         repo = repo.scm_instance
     else:
         #post push shouldn't use the cached instance never
-        repo = repo.scm_instance_no_cache
-
-    repo.ui = baseui
+        repo = repo.scm_instance_no_cache()
 
     if hook_type == 'pre':
         pre_push(baseui, repo)
--- a/rhodecode/lib/indexers/__init__.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/lib/indexers/__init__.py	Sun Apr 07 18:37:22 2013 +0200
@@ -105,7 +105,7 @@
     min_args = 1
 
     usage = "CONFIG_FILE"
-    summary = "Creates index for full text search given configuration file"
+    summary = "Creates or update full text search index"
     group_name = "RhodeCode"
     takes_config_file = -1
     parser = Command.standard_parser(verbose=True)
--- a/rhodecode/lib/middleware/https_fixup.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/lib/middleware/https_fixup.py	Sun Apr 07 18:37:22 2013 +0200
@@ -23,6 +23,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+from pylons.controllers.util import Request
 from rhodecode.lib.utils2 import str2bool
 
 
@@ -34,6 +35,15 @@
 
     def __call__(self, environ, start_response):
         self.__fixup(environ)
+        debug = str2bool(self.config.get('debug'))
+        if str2bool(self.config.get('use_htsts')) and not debug:
+            req = Request(environ, self.application)
+            resp = req.get_response(self.application)
+            if environ['wsgi.url_scheme'] == 'https':
+                resp.headers['Strict-Transport-Security'] = \
+                    'max-age=8640000; includeSubDomains'
+            return resp(environ, start_response)
+
         return self.application(environ, start_response)
 
     def __fixup(self, environ):
--- a/rhodecode/lib/middleware/pygrack.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/lib/middleware/pygrack.py	Sun Apr 07 18:37:22 2013 +0200
@@ -6,6 +6,7 @@
 
 from webob import Request, Response, exc
 
+import rhodecode
 from rhodecode.lib import subprocessio
 
 log = logging.getLogger(__name__)
@@ -82,10 +83,11 @@
         # if you do add '\n' as part of data, count it.
         server_advert = '# service=%s' % git_command
         packet_len = str(hex(len(server_advert) + 4)[2:].rjust(4, '0')).lower()
+        _git_path = rhodecode.CONFIG.get('git_path', 'git')
         try:
             out = subprocessio.SubprocessIOChunker(
-                r'git %s --stateless-rpc --advertise-refs "%s"' % (
-                                git_command[4:], self.content_path),
+                r'%s %s --stateless-rpc --advertise-refs "%s"' % (
+                            _git_path, git_command[4:], self.content_path),
                 starting_values=[
                     packet_len + server_advert + '0000'
                 ]
@@ -119,8 +121,6 @@
 
         try:
             gitenv = os.environ
-            from rhodecode.lib.compat import json
-            gitenv['RHODECODE_EXTRAS'] = json.dumps(self.extras)
             # forget all configs
             gitenv['GIT_CONFIG_NOGLOBAL'] = '1'
             opts = dict(
@@ -142,8 +142,9 @@
         if git_command in [u'git-receive-pack']:
             # updating refs manually after each push.
             # Needed for pre-1.7.0.4 git clients using regular HTTP mode.
-            cmd = (u'git --git-dir "%s" '
-                    'update-server-info' % self.content_path)
+            _git_path = rhodecode.CONFIG.get('git_path', 'git')
+            cmd = (u'%s --git-dir "%s" '
+                    'update-server-info' % (_git_path, self.content_path))
             log.debug('handling cmd %s' % cmd)
             subprocess.call(cmd, shell=True)
 
--- a/rhodecode/lib/middleware/simplegit.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/lib/middleware/simplegit.py	Sun Apr 07 18:37:22 2013 +0200
@@ -79,7 +79,8 @@
 from webob.exc import HTTPNotFound, HTTPForbidden, HTTPInternalServerError, \
     HTTPBadRequest, HTTPNotAcceptable
 
-from rhodecode.lib.utils2 import safe_str, fix_PATH, get_server_url
+from rhodecode.lib.utils2 import safe_str, fix_PATH, get_server_url,\
+    _set_extras
 from rhodecode.lib.base import BaseVCSController
 from rhodecode.lib.auth import get_container_username
 from rhodecode.lib.utils import is_valid_repo, make_ui
@@ -121,11 +122,11 @@
         try:
             repo_name = self.__get_repository(environ)
             log.debug('Extracted repo name is %s' % repo_name)
-        except:
+        except Exception:
             return HTTPInternalServerError()(environ, start_response)
 
         # quick check if that dir exists...
-        if is_valid_repo(repo_name, self.basepath, 'git') is False:
+        if not is_valid_repo(repo_name, self.basepath, 'git'):
             return HTTPNotFound()(environ, start_response)
 
         #======================================================================
@@ -142,11 +143,11 @@
             anonymous_perm = self._check_permission(action, anonymous_user,
                                                     repo_name, ip_addr)
 
-            if anonymous_perm is not True or anonymous_user.active is False:
-                if anonymous_perm is not True:
+            if not anonymous_perm or not anonymous_user.active:
+                if not anonymous_perm:
                     log.debug('Not enough credentials to access this '
                               'repository as anonymous user')
-                if anonymous_user.active is False:
+                if not anonymous_user.active:
                     log.debug('Anonymous access is disabled, running '
                               'authentication')
                 #==============================================================
@@ -177,13 +178,13 @@
                     if user is None or not user.active:
                         return HTTPForbidden()(environ, start_response)
                     username = user.username
-                except:
+                except Exception:
                     log.error(traceback.format_exc())
                     return HTTPInternalServerError()(environ, start_response)
 
                 #check permissions for this repository
                 perm = self._check_permission(action, user, repo_name, ip_addr)
-                if perm is not True:
+                if not perm:
                     return HTTPForbidden()(environ, start_response)
 
         # extras are injected into UI object and later available
@@ -205,7 +206,8 @@
         #===================================================================
         # GIT REQUEST HANDLING
         #===================================================================
-        repo_path = os.path.join(safe_str(self.basepath), safe_str(repo_name))
+        str_repo_name = safe_str(repo_name)
+        repo_path = os.path.join(safe_str(self.basepath),str_repo_name)
         log.debug('Repository path is %s' % repo_path)
 
         # CHECK LOCKING only if it's not ANONYMOUS USER
@@ -230,11 +232,12 @@
         try:
             self._handle_githooks(repo_name, action, baseui, environ)
             log.info('%s action on GIT repo "%s" by "%s" from %s' %
-                     (action, repo_name, username, ip_addr))
+                     (action, str_repo_name, safe_str(username), ip_addr))
             app = self.__make_app(repo_name, repo_path, extras)
             return app(environ, start_response)
         except HTTPLockedRC, e:
-            log.debug('Repository LOCKED ret code 423!')
+            _code = CONFIG.get('lock_ret_code')
+            log.debug('Repository LOCKED ret code %s!' % (_code))
             return e(environ, start_response)
         except Exception:
             log.error(traceback.format_exc())
@@ -270,7 +273,7 @@
         try:
             environ['PATH_INFO'] = self._get_by_id(environ['PATH_INFO'])
             repo_name = GIT_PROTO_PAT.match(environ['PATH_INFO']).group(1)
-        except:
+        except Exception:
             log.error(traceback.format_exc())
             raise
 
@@ -315,7 +318,6 @@
         from rhodecode.model.db import Repository
         _repo = Repository.get_by_repo_name(repo_name)
         _repo = _repo.scm_instance
-        _repo._repo.ui = baseui
 
         _hooks = dict(baseui.configitems('hooks')) or {}
         if action == 'pull':
@@ -332,10 +334,4 @@
         :param extras: dict with extra params to put into baseui
         """
 
-        # make our hgweb quiet so it doesn't print output
-        baseui.setconfig('ui', 'quiet', 'true')
-
-        #inject some additional parameters that will be available in ui
-        #for hooks
-        for k, v in extras.items():
-            baseui.setconfig('rhodecode_extras', k, v)
+        _set_extras(extras)
--- a/rhodecode/lib/middleware/simplehg.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/lib/middleware/simplehg.py	Sun Apr 07 18:37:22 2013 +0200
@@ -35,7 +35,8 @@
 from webob.exc import HTTPNotFound, HTTPForbidden, HTTPInternalServerError, \
     HTTPBadRequest, HTTPNotAcceptable
 
-from rhodecode.lib.utils2 import safe_str, fix_PATH, get_server_url
+from rhodecode.lib.utils2 import safe_str, fix_PATH, get_server_url,\
+    _set_extras
 from rhodecode.lib.base import BaseVCSController
 from rhodecode.lib.auth import get_container_username
 from rhodecode.lib.utils import make_ui, is_valid_repo, ui_sections
@@ -84,11 +85,11 @@
         try:
             repo_name = environ['REPO_NAME'] = self.__get_repository(environ)
             log.debug('Extracted repo name is %s' % repo_name)
-        except:
+        except Exception:
             return HTTPInternalServerError()(environ, start_response)
 
         # quick check if that dir exists...
-        if is_valid_repo(repo_name, self.basepath, 'hg') is False:
+        if not is_valid_repo(repo_name, self.basepath, 'hg'):
             return HTTPNotFound()(environ, start_response)
 
         #======================================================================
@@ -105,11 +106,11 @@
             anonymous_perm = self._check_permission(action, anonymous_user,
                                                     repo_name, ip_addr)
 
-            if anonymous_perm is not True or anonymous_user.active is False:
-                if anonymous_perm is not True:
+            if not anonymous_perm or not anonymous_user.active:
+                if not anonymous_perm:
                     log.debug('Not enough credentials to access this '
                               'repository as anonymous user')
-                if anonymous_user.active is False:
+                if not anonymous_user.active:
                     log.debug('Anonymous access is disabled, running '
                               'authentication')
                 #==============================================================
@@ -140,13 +141,13 @@
                     if user is None or not user.active:
                         return HTTPForbidden()(environ, start_response)
                     username = user.username
-                except:
+                except Exception:
                     log.error(traceback.format_exc())
                     return HTTPInternalServerError()(environ, start_response)
 
                 #check permissions for this repository
                 perm = self._check_permission(action, user, repo_name, ip_addr)
-                if perm is not True:
+                if not perm:
                     return HTTPForbidden()(environ, start_response)
 
         # extras are injected into mercurial UI object and later available
@@ -167,7 +168,8 @@
         #======================================================================
         # MERCURIAL REQUEST HANDLING
         #======================================================================
-        repo_path = os.path.join(safe_str(self.basepath), safe_str(repo_name))
+        str_repo_name = safe_str(repo_name)
+        repo_path = os.path.join(safe_str(self.basepath), str_repo_name)
         log.debug('Repository path is %s' % repo_path)
 
         # CHECK LOCKING only if it's not ANONYMOUS USER
@@ -192,14 +194,15 @@
 
         try:
             log.info('%s action on HG repo "%s" by "%s" from %s' %
-                     (action, repo_name, username, ip_addr))
+                     (action, str_repo_name, safe_str(username), ip_addr))
             app = self.__make_app(repo_path, baseui, extras)
             return app(environ, start_response)
         except RepoError, e:
             if str(e).find('not found') != -1:
                 return HTTPNotFound()(environ, start_response)
         except HTTPLockedRC, e:
-            log.debug('Repository LOCKED ret code 423!')
+            _code = CONFIG.get('lock_ret_code')
+            log.debug('Repository LOCKED ret code %s!' % (_code))
             return e(environ, start_response)
         except Exception:
             log.error(traceback.format_exc())
@@ -227,7 +230,7 @@
             repo_name = '/'.join(environ['PATH_INFO'].split('/')[1:])
             if repo_name.endswith('/'):
                 repo_name = repo_name.rstrip('/')
-        except:
+        except Exception:
             log.error(traceback.format_exc())
             raise
 
@@ -275,11 +278,6 @@
         # make our hgweb quiet so it doesn't print output
         baseui.setconfig('ui', 'quiet', 'true')
 
-        #inject some additional parameters that will be available in ui
-        #for hooks
-        for k, v in extras.items():
-            baseui.setconfig('rhodecode_extras', k, v)
-
         repoui = make_ui('file', hgrc, False)
 
         if repoui:
@@ -287,3 +285,4 @@
             for section in ui_sections:
                 for k, v in repoui.configitems(section):
                     baseui.setconfig(section, k, v)
+        _set_extras(extras)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rhodecode/lib/middleware/wrapper.py	Sun Apr 07 18:37:22 2013 +0200
@@ -0,0 +1,46 @@
+# -*- coding: utf-8 -*-
+"""
+    rhodecode.lib.middleware.wrapper
+    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+    request time mesuring app
+
+    :created_on: May 23, 2013
+    :author: marcink
+    :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
+    :license: GPLv3, see COPYING for more details.
+"""
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+import time
+import logging
+from rhodecode.lib.base import _get_ip_addr, _get_access_path
+from rhodecode.lib.utils2 import safe_unicode
+
+
+class RequestWrapper(object):
+
+    def __init__(self, app, config):
+        self.application = app
+        self.config = config
+
+    def __call__(self, environ, start_response):
+        start = time.time()
+        try:
+            return self.application(environ, start_response)
+        finally:
+            log = logging.getLogger('rhodecode.' + self.__class__.__name__)
+            log.info('IP: %s Request to %s time: %.3fs' % (
+                _get_ip_addr(environ),
+                safe_unicode(_get_access_path(environ)), time.time() - start)
+            )
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rhodecode/lib/paster_commands/cache_keys.py	Sun Apr 07 18:37:22 2013 +0200
@@ -0,0 +1,85 @@
+# -*- coding: utf-8 -*-
+"""
+    rhodecode.lib.paster_commands.cache_keys
+    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+    cleanup-keys paster command for RhodeCode
+
+
+    :created_on: mar 27, 2013
+    :author: marcink
+    :copyright: (C) 2010-2013 Marcin Kuzminski <marcin@python-works.com>
+    :license: GPLv3, see COPYING for more details.
+"""
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+from __future__ import with_statement
+
+import os
+import sys
+import logging
+
+from os.path import dirname as dn, join as jn
+from rhodecode.model.meta import Session
+#to get the rhodecode import
+rc_path = dn(dn(dn(os.path.realpath(__file__))))
+sys.path.append(rc_path)
+from rhodecode.lib.utils import BasePasterCommand
+
+from rhodecode.model.db import CacheInvalidation
+
+
+log = logging.getLogger(__name__)
+
+
+class Command(BasePasterCommand):
+
+    max_args = 1
+    min_args = 1
+
+    usage = "CONFIG_FILE"
+    group_name = "RhodeCode"
+    takes_config_file = -1
+    parser = BasePasterCommand.standard_parser(verbose=True)
+    summary = "Cache keys utils"
+
+    def command(self):
+        #get SqlAlchemy session
+        self._init_session()
+        _caches = CacheInvalidation.query().order_by(CacheInvalidation.cache_key).all()
+        if self.options.show:
+            for c_obj in _caches:
+                print 'key:%s active:%s' % (c_obj.cache_key, c_obj.cache_active)
+        elif self.options.cleanup:
+            for c_obj in _caches:
+                Session().delete(c_obj)
+                print 'removing key:%s' % (c_obj.cache_key)
+            Session().commit()
+        else:
+            print 'nothing done exiting...'
+        sys.exit(0)
+
+    def update_parser(self):
+        self.parser.add_option(
+            '--show',
+            action='store_true',
+            dest='show',
+            help=("show existing cache keys with together with status")
+        )
+
+        self.parser.add_option(
+            '--cleanup',
+            action="store_true",
+            dest="cleanup",
+            help="cleanup existing cache keys"
+        )
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rhodecode/lib/paster_commands/cleanup.py	Sun Apr 07 18:37:22 2013 +0200
@@ -0,0 +1,153 @@
+# -*- coding: utf-8 -*-
+"""
+    package.rhodecode.lib.cleanup
+    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+    cleanup-repos paster command for RhodeCode
+
+
+    :created_on: Jul 14, 2012
+    :author: marcink
+    :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
+    :license: GPLv3, see COPYING for more details.
+"""
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+from __future__ import with_statement
+
+import os
+import sys
+import re
+import shutil
+import logging
+import datetime
+
+from os.path import dirname as dn, join as jn
+#to get the rhodecode import
+rc_path = dn(dn(dn(os.path.realpath(__file__))))
+sys.path.append(rc_path)
+from rhodecode.lib.utils import BasePasterCommand, ask_ok, REMOVED_REPO_PAT
+
+from rhodecode.lib.utils2 import safe_str
+from rhodecode.model.db import RhodeCodeUi
+
+
+log = logging.getLogger(__name__)
+
+
+class Command(BasePasterCommand):
+
+    max_args = 1
+    min_args = 1
+
+    usage = "CONFIG_FILE"
+    group_name = "RhodeCode"
+    takes_config_file = -1
+    parser = BasePasterCommand.standard_parser(verbose=True)
+    summary = "Cleanup deleted repos"
+
+    def _parse_older_than(self, val):
+        regex = re.compile(r'((?P<days>\d+?)d)?((?P<hours>\d+?)h)?((?P<minutes>\d+?)m)?((?P<seconds>\d+?)s)?')
+        parts = regex.match(val)
+        if not parts:
+            return
+        parts = parts.groupdict()
+        time_params = {}
+        for (name, param) in parts.iteritems():
+            if param:
+                time_params[name] = int(param)
+        return datetime.timedelta(**time_params)
+
+    def _extract_date(self, name):
+        """
+        Extract the date part from rm__<date> pattern of removed repos,
+        and convert it to datetime object
+
+        :param name:
+        """
+        date_part = name[4:19]  # 4:19 since we don't parse milisecods
+        return datetime.datetime.strptime(date_part, '%Y%m%d_%H%M%S')
+
+    def command(self):
+        #get SqlAlchemy session
+        self._init_session()
+
+        repos_location = RhodeCodeUi.get_repos_location()
+        to_remove = []
+        for dn, dirs, f in os.walk(safe_str(repos_location)):
+            alldirs = list(dirs)
+            del dirs[:]
+            if ('.hg' in alldirs or
+                'objects' in alldirs and ('refs' in alldirs or 'packed-refs' in f)):
+                continue
+            for loc in alldirs:
+                if REMOVED_REPO_PAT.match(loc):
+                    to_remove.append([os.path.join(dn, loc),
+                                      self._extract_date(loc)])
+                else:
+                    dirs.append(loc)
+
+        #filter older than (if present)!
+        now = datetime.datetime.now()
+        older_than = self.options.older_than
+        if older_than:
+            to_remove_filtered = []
+            older_than_date = self._parse_older_than(older_than)
+            for name, date_ in to_remove:
+                repo_age = now - date_
+                if repo_age > older_than_date:
+                    to_remove_filtered.append([name, date_])
+
+            to_remove = to_remove_filtered
+            print >> sys.stdout, 'removing %s deleted repos older than %s (%s)' \
+                % (len(to_remove), older_than, older_than_date)
+        else:
+            print >> sys.stdout, 'removing all [%s] deleted repos' \
+                % len(to_remove)
+        if self.options.dont_ask or not to_remove:
+            # don't ask just remove !
+            remove = True
+        else:
+            remove = ask_ok('the following repositories will be deleted completely:\n%s\n'
+                            'are you sure you want to remove them [y/n]?'
+                            % ', \n'.join(['%s removed on %s'
+                    % (safe_str(x[0]), safe_str(x[1])) for x in to_remove]))
+
+        if remove:
+            for path, date_ in to_remove:
+                print >> sys.stdout, 'removing repository %s' % path
+                shutil.rmtree(path)
+        else:
+            print 'nothing done exiting...'
+            sys.exit(0)
+
+    def update_parser(self):
+        self.parser.add_option(
+            '--older-than',
+            action='store',
+            dest='older_than',
+            help=("only remove repos that have been removed "
+                 "at least given time ago. "
+                 "The default is to remove all removed repositories. "
+                 "Possible suffixes: "
+                 "d (days), h (hours), m (minutes), s (seconds). "
+                 "For example --older-than=30d deletes repositories "
+                 "removed more than 30 days ago.")
+            )
+
+        self.parser.add_option(
+            '--dont-ask',
+            action="store_true",
+            dest="dont_ask",
+            help="remove repositories without asking for confirmation."
+        )
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rhodecode/lib/paster_commands/ishell.py	Sun Apr 07 18:37:22 2013 +0200
@@ -0,0 +1,76 @@
+# -*- coding: utf-8 -*-
+"""
+    rhodecode.lib.paster_commands.ishell
+    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+    interactive shell paster command for RhodeCode
+
+
+    :created_on: Apr 4, 2013
+    :author: marcink
+    :copyright: (C) 2010-2013 Marcin Kuzminski <marcin@python-works.com>
+    :license: GPLv3, see COPYING for more details.
+"""
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+from __future__ import with_statement
+
+import os
+import sys
+import logging
+
+from os.path import dirname as dn, join as jn
+#to get the rhodecode import
+rc_path = dn(dn(dn(os.path.realpath(__file__))))
+sys.path.append(rc_path)
+from rhodecode.lib.utils import BasePasterCommand
+
+
+log = logging.getLogger(__name__)
+
+
+class Command(BasePasterCommand):
+
+    max_args = 1
+    min_args = 1
+
+    usage = "CONFIG_FILE"
+    group_name = "RhodeCode"
+    takes_config_file = -1
+    parser = BasePasterCommand.standard_parser(verbose=True)
+    summary = "Interactive shell"
+
+    def command(self):
+        #get SqlAlchemy session
+        self._init_session()
+
+        # imports, used in ipython shell
+        import os
+        import sys
+        import time
+        import shutil
+        import datetime
+        from rhodecode.model.db import *
+
+        try:
+            from IPython import embed
+            from IPython.config.loader import Config
+            cfg = Config()
+            cfg.InteractiveShellEmbed.confirm_exit = False
+            embed(config=cfg, banner1="RhodeCode IShell.")
+        except ImportError:
+            print 'ipython installation required for ishell'
+            sys.exit(-1)
+
+    def update_parser(self):
+        pass
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rhodecode/lib/paster_commands/make_rcextensions.py	Sun Apr 07 18:37:22 2013 +0200
@@ -0,0 +1,82 @@
+# -*- coding: utf-8 -*-
+"""
+    rhodecode.lib.paster_commands.make_rcextensions
+    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+    make-rcext paster command for RhodeCode
+
+    :created_on: Mar 6, 2012
+    :author: marcink
+    :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
+    :license: GPLv3, see COPYING for more details.
+"""
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+from __future__ import with_statement
+
+import os
+import sys
+import pkg_resources
+import traceback
+import logging
+
+from os.path import dirname as dn, join as jn
+#to get the rhodecode import
+rc_path = dn(dn(dn(os.path.realpath(__file__))))
+sys.path.append(rc_path)
+
+from rhodecode.lib.utils import BasePasterCommand, ask_ok
+
+log = logging.getLogger(__name__)
+
+
+class Command(BasePasterCommand):
+
+    max_args = 1
+    min_args = 1
+
+    usage = "CONFIG_FILE"
+    group_name = "RhodeCode"
+    takes_config_file = -1
+    parser = BasePasterCommand.standard_parser(verbose=True)
+    summary = "Creates additional extensions for rhodecode"
+
+    def command(self):
+        logging.config.fileConfig(self.path_to_ini_file)
+        from pylons import config
+
+        def _make_file(ext_file, tmpl):
+            bdir = os.path.split(ext_file)[0]
+            if not os.path.isdir(bdir):
+                os.makedirs(bdir)
+            with open(ext_file, 'wb') as f:
+                f.write(tmpl)
+                log.info('Writen new extensions file to %s' % ext_file)
+
+        here = config['here']
+        tmpl = pkg_resources.resource_string(
+            'rhodecode', jn('config', 'rcextensions', '__init__.py')
+        )
+        ext_file = jn(here, 'rcextensions', '__init__.py')
+        if os.path.exists(ext_file):
+            msg = ('Extension file already exists, do you want '
+                   'to overwrite it ? [y/n]')
+            if ask_ok(msg):
+                _make_file(ext_file, tmpl)
+            else:
+                log.info('nothing done...')
+        else:
+            _make_file(ext_file, tmpl)
+
+    def update_parser(self):
+        pass
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rhodecode/lib/paster_commands/repo_scan.py	Sun Apr 07 18:37:22 2013 +0200
@@ -0,0 +1,74 @@
+# -*- coding: utf-8 -*-
+"""
+    rhodecode.lib.paster_commands.make_rcextensions
+    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+    repo-scan paster command for RhodeCode
+
+
+    :created_on: Feb 9, 2013
+    :author: marcink
+    :copyright: (C) 2010-2013 Marcin Kuzminski <marcin@python-works.com>
+    :license: GPLv3, see COPYING for more details.
+"""
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+from __future__ import with_statement
+
+import os
+import sys
+import logging
+
+from os.path import dirname as dn, join as jn
+from rhodecode.model.scm import ScmModel
+#to get the rhodecode import
+rc_path = dn(dn(dn(os.path.realpath(__file__))))
+sys.path.append(rc_path)
+from rhodecode.lib.utils import BasePasterCommand, repo2db_mapper
+
+from rhodecode.model.db import Repository
+from rhodecode.model.repo import RepoModel
+from rhodecode.model.meta import Session
+
+
+log = logging.getLogger(__name__)
+
+
+class Command(BasePasterCommand):
+
+    max_args = 1
+    min_args = 1
+
+    usage = "CONFIG_FILE"
+    group_name = "RhodeCode"
+    takes_config_file = -1
+    parser = BasePasterCommand.standard_parser(verbose=True)
+    summary = "Rescan default location for new repositories"
+
+    def command(self):
+        #get SqlAlchemy session
+        self._init_session()
+        rm_obsolete = self.options.delete_obsolete
+        log.info('Now scanning root location for new repos...')
+        added, removed = repo2db_mapper(ScmModel().repo_scan(),
+                                        remove_obsolete=rm_obsolete)
+        added = ','.join(added) or '-'
+        removed = ','.join(removed) or '-'
+        log.info('Scan completed added:%s removed:%s' % (added, removed))
+
+    def update_parser(self):
+        self.parser.add_option('--delete-obsolete',
+                          action='store_true',
+                          help="Use this flag do delete repositories that are "
+                          "present in RhodeCode database but not on the filesystem",
+                          )
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rhodecode/lib/paster_commands/setup_rhodecode.py	Sun Apr 07 18:37:22 2013 +0200
@@ -0,0 +1,101 @@
+import os
+import sys
+from paste.script.appinstall import AbstractInstallCommand
+from paste.script.command import BadCommand
+from paste.deploy import appconfig
+
+from os.path import dirname as dn, join as jn
+#to get the rhodecode import
+rc_path = dn(dn(dn(os.path.realpath(__file__))))
+sys.path.append(rc_path)
+
+
+class Command(AbstractInstallCommand):
+
+    default_verbosity = 1
+    max_args = 1
+    min_args = 1
+    summary = "Setup an application, given a config file"
+    usage = "CONFIG_FILE"
+    group_name = "RhodeCode"
+
+    description = """\
+
+    Setup RhodeCode according to its configuration file.  This is
+    the second part of a two-phase web application installation
+    process (the first phase is prepare-app).  The setup process
+    consist of things like setting up databases, creating super user
+    """
+
+    parser = AbstractInstallCommand.standard_parser(
+        simulate=True, quiet=True, interactive=True)
+    parser.add_option('--user',
+                      action='store',
+                      dest='username',
+                      default=None,
+                      help='Admin Username')
+    parser.add_option('--email',
+                      action='store',
+                      dest='email',
+                      default=None,
+                      help='Admin Email')
+    parser.add_option('--password',
+                      action='store',
+                      dest='password',
+                      default=None,
+                      help='Admin password min 6 chars')
+    parser.add_option('--repos',
+                      action='store',
+                      dest='repos_location',
+                      default=None,
+                      help='Absolute path to repositories location')
+    parser.add_option('--name',
+                      action='store',
+                      dest='section_name',
+                      default=None,
+                      help='The name of the section to set up (default: app:main)')
+    parser.add_option('--force-yes',
+                       action='store_true',
+                       dest='force_ask',
+                       default=None,
+                       help='Force yes to every question')
+    parser.add_option('--force-no',
+                       action='store_false',
+                       dest='force_ask',
+                       default=None,
+                       help='Force no to every question')
+
+    def command(self):
+        config_spec = self.args[0]
+        section = self.options.section_name
+        if section is None:
+            if '#' in config_spec:
+                config_spec, section = config_spec.split('#', 1)
+            else:
+                section = 'main'
+        if not ':' in section:
+            plain_section = section
+            section = 'app:' + section
+        else:
+            plain_section = section.split(':', 1)[0]
+        if not config_spec.startswith('config:'):
+            config_spec = 'config:' + config_spec
+        if plain_section != 'main':
+            config_spec += '#' + plain_section
+        config_file = config_spec[len('config:'):].split('#', 1)[0]
+        config_file = os.path.join(os.getcwd(), config_file)
+        self.logging_file_config(config_file)
+        conf = appconfig(config_spec, relative_to=os.getcwd())
+        ep_name = conf.context.entry_point_name
+        ep_group = conf.context.protocol
+        dist = conf.context.distribution
+        if dist is None:
+            raise BadCommand(
+                "The section %r is not the application (probably a filter).  "
+                "You should add #section_name, where section_name is the "
+                "section that configures your application" % plain_section)
+        installer = self.get_installer(dist, ep_group, ep_name)
+        installer.setup_config(
+            self, config_file, section, self.sysconfig_install_vars(installer))
+        self.call_sysconfig_functions(
+            'post_setup_hook', installer, config_file)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rhodecode/lib/paster_commands/update_repoinfo.py	Sun Apr 07 18:37:22 2013 +0200
@@ -0,0 +1,87 @@
+# -*- coding: utf-8 -*-
+"""
+    rhodecode.lib.paster_commands.make_rcextensions
+    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+    uodate-repoinfo paster command for RhodeCode
+
+    :created_on: Jul 14, 2012
+    :author: marcink
+    :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
+    :license: GPLv3, see COPYING for more details.
+"""
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+from __future__ import with_statement
+
+import os
+import sys
+import logging
+import string
+
+from os.path import dirname as dn, join as jn
+#to get the rhodecode import
+rc_path = dn(dn(dn(os.path.realpath(__file__))))
+sys.path.append(rc_path)
+from rhodecode.lib.utils import BasePasterCommand
+
+from rhodecode.model.db import Repository
+from rhodecode.model.repo import RepoModel
+from rhodecode.model.meta import Session
+
+log = logging.getLogger(__name__)
+
+
+class Command(BasePasterCommand):
+
+    max_args = 1
+    min_args = 1
+
+    usage = "CONFIG_FILE"
+    group_name = "RhodeCode"
+    takes_config_file = -1
+    parser = BasePasterCommand.standard_parser(verbose=True)
+    summary = "Updates repositories caches for last changeset"
+
+    def command(self):
+        #get SqlAlchemy session
+        self._init_session()
+
+        repo_update_list = map(string.strip,
+                               self.options.repo_update_list.split(',')) \
+                               if self.options.repo_update_list else None
+
+        if repo_update_list:
+            repo_list = Repository.query()\
+                .filter(Repository.repo_name.in_(repo_update_list))
+        else:
+            repo_list = Repository.getAll()
+        RepoModel.update_repoinfo(repositories=repo_list)
+        Session().commit()
+
+        if self.options.invalidate_cache:
+            for r in repo_list:
+                r.set_invalidate()
+        log.info('Updated cache for %s repositories' % (len(repo_list)))
+
+    def update_parser(self):
+        self.parser.add_option('--update-only',
+                           action='store',
+                           dest='repo_update_list',
+                           help="Specifies a comma separated list of repositores "
+                                "to update last commit info for. OPTIONAL")
+        self.parser.add_option('--invalidate-cache',
+                           action='store_true',
+                           dest='invalidate_cache',
+                           help="Trigger cache invalidation event for repos. "
+                                "OPTIONAL")
--- a/rhodecode/lib/rcmail/response.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/lib/rcmail/response.py	Sun Apr 07 18:37:22 2013 +0200
@@ -444,7 +444,7 @@
     try:
         return value.encode("ascii")
     except UnicodeEncodeError:
-        if not_email is False and VALUE_IS_EMAIL_ADDRESS(value):
+        if not not_email and VALUE_IS_EMAIL_ADDRESS(value):
             # this could have an email address, make sure we don't screw it up
             name, address = parseaddr(value)
             return '"%s" <%s>' % (
--- a/rhodecode/lib/subprocessio.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/lib/subprocessio.py	Sun Apr 07 18:37:22 2013 +0200
@@ -119,7 +119,11 @@
         kr = self.keep_reading
         da = self.data_added
         go = self.go
-        b = s.read(cs)
+
+        try:
+            b = s.read(cs)
+        except ValueError:
+            b = ''
 
         while b and go.is_set():
             if len(t) > ccm:
@@ -372,7 +376,9 @@
             bg_out.stop()
             bg_err.stop()
             err = '%s' % ''.join(bg_err)
-            raise EnvironmentError("Subprocess exited due to an error:\n" + err)
+            if err:
+                raise EnvironmentError("Subprocess exited due to an error:\n" + err)
+            raise EnvironmentError("Subprocess exited with non 0 ret code:%s" % _returncode)
 
         self.process = _p
         self.output = bg_out
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rhodecode/lib/unionrepo.py	Sun Apr 07 18:37:22 2013 +0200
@@ -0,0 +1,218 @@
+# unionrepo.py - repository class for viewing union of repository changesets
+#
+# Derived from bundlerepo.py
+# Copyright 2006, 2007 Benoit Boissinot <bboissin@gmail.com>
+# Copyright 2013 Unity Technologies, Mads Kiilerich <madski@unity3d.com>
+#
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2 or any later version.
+
+"""Repository class for "in-memory pull" of one local repository to another,
+allowing operations like diff and log with revsets.
+"""
+
+import os
+from mercurial.node import nullid
+from mercurial.i18n import _
+from mercurial import util, mdiff, cmdutil, scmutil
+from mercurial import localrepo, changelog, manifest, filelog, revlog
+
+
+class unionrevlog(revlog.revlog):
+    def __init__(self, opener, indexfile, revlog2, linkmapper):
+        # How it works:
+        # To retrieve a revision, we just need to know the node id so we can
+        # look it up in revlog2.
+        #
+        # To differentiate a rev in the second revlog from a rev in the revlog,
+        # we check revision against repotiprev.
+        opener = scmutil.readonlyvfs(opener)
+        revlog.revlog.__init__(self, opener, indexfile)
+        self.revlog2 = revlog2
+
+        n = len(self)
+        self.repotiprev = n - 1
+        self.bundlerevs = set()  # used by 'bundle()' revset expression
+        for rev2 in self.revlog2:
+            rev = self.revlog2.index[rev2]
+            # rev numbers - in revlog2, very different from self.rev
+            _start, _csize, _rsize, _base, linkrev, p1rev, p2rev, node = rev
+
+            if linkmapper is None:  # link is to same revlog
+                assert linkrev == rev2  # we never link back
+                link = n
+            else:  # rev must be mapped from repo2 cl to unified cl by linkmapper
+                link = linkmapper(linkrev)
+
+            if node in self.nodemap:
+                # this happens for the common revlog revisions
+                self.bundlerevs.add(self.nodemap[node])
+                continue
+
+            p1node = self.revlog2.node(p1rev)
+            p2node = self.revlog2.node(p2rev)
+
+            e = (None, None, None, None,
+                 link, self.rev(p1node), self.rev(p2node), node)
+            self.index.insert(-1, e)
+            self.nodemap[node] = n
+            self.bundlerevs.add(n)
+            n += 1
+
+    def _chunk(self, rev):
+        if rev <= self.repotiprev:
+            return revlog.revlog._chunk(self, rev)
+        return self.revlog2._chunk(self.node(rev))
+
+    def revdiff(self, rev1, rev2):
+        """return or calculate a delta between two revisions"""
+        if rev1 > self.repotiprev and rev2 > self.repotiprev:
+            return self.revlog2.revdiff(
+                self.revlog2.rev(self.node(rev1)),
+                self.revlog2.rev(self.node(rev2)))
+        elif rev1 <= self.repotiprev and rev2 <= self.repotiprev:
+            return revlog.revlog.revdiff(self, rev1, rev2)
+
+        return mdiff.textdiff(self.revision(self.node(rev1)),
+                              self.revision(self.node(rev2)))
+
+    def revision(self, nodeorrev):
+        """return an uncompressed revision of a given node or revision
+        number.
+        """
+        if isinstance(nodeorrev, int):
+            rev = nodeorrev
+            node = self.node(rev)
+        else:
+            node = nodeorrev
+            rev = self.rev(node)
+
+        if node == nullid:
+            return ""
+
+        if rev > self.repotiprev:
+            text = self.revlog2.revision(node)
+            self._cache = (node, rev, text)
+        else:
+            text = revlog.revlog.revision(self, rev)
+            # already cached
+        return text
+
+    def addrevision(self, text, transaction, link, p1=None, p2=None, d=None):
+        raise NotImplementedError
+
+    def addgroup(self, revs, linkmapper, transaction):
+        raise NotImplementedError
+
+    def strip(self, rev, minlink):
+        raise NotImplementedError
+
+    def checksize(self):
+        raise NotImplementedError
+
+
+class unionchangelog(unionrevlog, changelog.changelog):
+    def __init__(self, opener, opener2):
+        changelog.changelog.__init__(self, opener)
+        linkmapper = None
+        changelog2 = changelog.changelog(opener2)
+        unionrevlog.__init__(self, opener, self.indexfile, changelog2,
+                             linkmapper)
+
+
+class unionmanifest(unionrevlog, manifest.manifest):
+    def __init__(self, opener, opener2, linkmapper):
+        manifest.manifest.__init__(self, opener)
+        manifest2 = manifest.manifest(opener2)
+        unionrevlog.__init__(self, opener, self.indexfile, manifest2,
+                             linkmapper)
+
+
+class unionfilelog(unionrevlog, filelog.filelog):
+    def __init__(self, opener, path, opener2, linkmapper, repo):
+        filelog.filelog.__init__(self, opener, path)
+        filelog2 = filelog.filelog(opener2, path)
+        unionrevlog.__init__(self, opener, self.indexfile, filelog2,
+                             linkmapper)
+        self._repo = repo
+
+    def _file(self, f):
+        self._repo.file(f)
+
+
+class unionpeer(localrepo.localpeer):
+    def canpush(self):
+        return False
+
+
+class unionrepository(localrepo.localrepository):
+    def __init__(self, ui, path, path2):
+        localrepo.localrepository.__init__(self, ui, path)
+        self.ui.setconfig('phases', 'publish', False)
+
+        self._url = 'union:%s+%s' % (util.expandpath(path),
+                                     util.expandpath(path2))
+        self.repo2 = localrepo.localrepository(ui, path2)
+
+    @localrepo.unfilteredpropertycache
+    def changelog(self):
+        return unionchangelog(self.sopener, self.repo2.sopener)
+
+    def _clrev(self, rev2):
+        """map from repo2 changelog rev to temporary rev in self.changelog"""
+        node = self.repo2.changelog.node(rev2)
+        return self.changelog.rev(node)
+
+    @localrepo.unfilteredpropertycache
+    def manifest(self):
+        return unionmanifest(self.sopener, self.repo2.sopener,
+                             self._clrev)
+
+    def url(self):
+        return self._url
+
+    def file(self, f):
+        return unionfilelog(self.sopener, f, self.repo2.sopener,
+                            self._clrev, self)
+
+    def close(self):
+        self.repo2.close()
+
+    def cancopy(self):
+        return False
+
+    def peer(self):
+        return unionpeer(self)
+
+    def getcwd(self):
+        return os.getcwd()  # always outside the repo
+
+
+def instance(ui, path, create):
+    if create:
+        raise util.Abort(_('cannot create new union repository'))
+    parentpath = ui.config("bundle", "mainreporoot", "")
+    if not parentpath:
+        # try to find the correct path to the working directory repo
+        parentpath = cmdutil.findrepo(os.getcwd())
+        if parentpath is None:
+            parentpath = ''
+    if parentpath:
+        # Try to make the full path relative so we get a nice, short URL.
+        # In particular, we don't want temp dir names in test outputs.
+        cwd = os.getcwd()
+        if parentpath == cwd:
+            parentpath = ''
+        else:
+            cwd = os.path.join(cwd, '')
+            if parentpath.startswith(cwd):
+                parentpath = parentpath[len(cwd):]
+    if path.startswith('union:'):
+        s = path.split(":", 1)[1].split("+", 1)
+        if len(s) == 1:
+            repopath, repopath2 = parentpath, s[0]
+        else:
+            repopath, repopath2 = s
+    else:
+        repopath, repopath2 = parentpath, path
+    return unionrepository(ui, repopath, repopath2)
--- a/rhodecode/lib/update_repoinfo.py	Mon Mar 11 17:59:38 2013 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,87 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-    package.rhodecode.lib.cleanup
-    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-    :created_on: Jul 14, 2012
-    :author: marcink
-    :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
-    :license: GPLv3, see COPYING for more details.
-"""
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-from __future__ import with_statement
-
-import os
-import sys
-import re
-import shutil
-import logging
-import datetime
-import string
-
-from os.path import dirname as dn, join as jn
-from rhodecode.model import init_model
-from rhodecode.lib.utils2 import engine_from_config, safe_str
-from rhodecode.model.db import RhodeCodeUi, Repository
-from rhodecode.lib.vcs.backends.base import EmptyChangeset
-
-
-#to get the rhodecode import
-sys.path.append(dn(dn(dn(os.path.realpath(__file__)))))
-
-from rhodecode.lib.utils import BasePasterCommand, Command, add_cache
-
-log = logging.getLogger(__name__)
-
-
-class UpdateCommand(BasePasterCommand):
-
-    max_args = 1
-    min_args = 1
-
-    usage = "CONFIG_FILE"
-    summary = "Cleanup deleted repos"
-    group_name = "RhodeCode"
-    takes_config_file = -1
-    parser = Command.standard_parser(verbose=True)
-
-    def command(self):
-        logging.config.fileConfig(self.path_to_ini_file)
-        from pylons import config
-
-        #get to remove repos !!
-        add_cache(config)
-        engine = engine_from_config(config, 'sqlalchemy.db1.')
-        init_model(engine)
-
-        repo_update_list = map(string.strip,
-                               self.options.repo_update_list.split(',')) \
-                               if self.options.repo_update_list else None
-
-        if repo_update_list:
-            repo_list = Repository.query().filter(Repository.repo_name.in_(repo_update_list))
-        else:
-            repo_list = Repository.getAll()
-        for repo in repo_list:
-            last_cs = (repo.scm_instance.get_changeset() if repo.scm_instance
-                           else EmptyChangeset())
-            repo.update_changeset_cache(last_cs)
-
-    def update_parser(self):
-        self.parser.add_option('--update-only',
-                          action='store',
-                          dest='repo_update_list',
-                          help="Specifies a comma separated list of repositores "
-                                "to update last commit info for. OPTIONAL",
-                          )
--- a/rhodecode/lib/utils.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/lib/utils.py	Sun Apr 07 18:37:22 2013 +0200
@@ -162,16 +162,16 @@
         user_log.user_ip = ipaddr
         sa.add(user_log)
 
-        log.info('Logging action %s on %s by %s' %
-                 (action, safe_unicode(repo), user_obj))
+        log.info('Logging action:%s on %s by user:%s ip:%s' %
+                 (action, safe_unicode(repo), user_obj, ipaddr))
         if commit:
             sa.commit()
-    except:
+    except Exception:
         log.error(traceback.format_exc())
         raise
 
 
-def get_repos(path, recursive=False, skip_removed_repos=True):
+def get_filesystem_repos(path, recursive=False, skip_removed_repos=True):
     """
     Scans given path for repos and return (name,(type,path)) tuple
 
@@ -185,6 +185,7 @@
 
     def _get_repos(p):
         if not os.access(p, os.W_OK):
+            log.warn('ignoring repo path without write access: %s', p)
             return
         for dirpath in os.listdir(p):
             if os.path.isfile(os.path.join(p, dirpath)):
@@ -213,9 +214,6 @@
 
     return _get_repos(path)
 
-#alias for backward compat
-get_filesystem_repos = get_repos
-
 
 def is_valid_repo(repo_name, base_path, scm=None):
     """
@@ -240,9 +238,9 @@
         return False
 
 
-def is_valid_repos_group(repos_group_name, base_path):
+def is_valid_repos_group(repos_group_name, base_path, skip_path_check=False):
     """
-    Returns True if given path is a repos group False otherwise
+    Returns True if given path is a repository group False otherwise
 
     :param repo_name:
     :param base_path:
@@ -263,7 +261,7 @@
         pass
 
     # check if it's a valid path
-    if os.path.isdir(full_path):
+    if skip_path_check or os.path.isdir(full_path):
         return True
 
     return False
@@ -429,11 +427,6 @@
         raise Exception('Missing administrative account!')
     added = []
 
-#    # clear cache keys
-#    log.debug("Clearing cache keys now...")
-#    CacheInvalidation.clear_cache()
-#    sa.commit()
-
     ##creation defaults
     defs = RhodeCodeSetting.get_default_repo_settings(strip_prefix=True)
     enable_statistics = defs.get('repo_enable_statistics')
@@ -474,10 +467,9 @@
                 ScmModel().install_git_hook(db_repo.scm_instance)
         # during starting install all cache keys for all repositories in the
         # system, this will register all repos and multiple instances
-        key, _prefix, _org_key = CacheInvalidation._get_key(name)
+        cache_key = CacheInvalidation._get_cache_key(name)
+        log.debug("Creating invalidation cache key for %s: %s", name, cache_key)
         CacheInvalidation.invalidate(name)
-        log.debug("Creating a cache key for %s, instance_id %s"
-                  % (name, _prefix or 'unknown'))
 
     sa.commit()
     removed = []
@@ -491,11 +483,10 @@
                     sa.delete(repo)
                     sa.commit()
                     removed.append(repo.repo_name)
-                except:
+                except Exception:
                     #don't hold further removals on error
                     log.error(traceback.format_exc())
                     sa.rollback()
-
     return added, removed
 
 
@@ -550,6 +541,26 @@
         log.debug('adding extra into INDEX_EXTENSIONS')
         conf.INDEX_EXTENSIONS.extend(getattr(EXT, 'EXTRA_INDEX_EXTENSIONS', []))
 
+        # auto check if the module is not missing any data, set to default if is
+        # this will help autoupdate new feature of rcext module
+        from rhodecode.config import rcextensions
+        for k in dir(rcextensions):
+            if not k.startswith('_') and not hasattr(EXT, k):
+                setattr(EXT, k, getattr(rcextensions, k))
+
+
+def get_custom_lexer(extension):
+    """
+    returns a custom lexer if it's defined in rcextensions module, or None
+    if there's no custom lexer defined
+    """
+    import rhodecode
+    from pygments import lexers
+    #check if we didn't define this extension as other lexer
+    if rhodecode.EXTENSIONS and extension in rhodecode.EXTENSIONS.EXTRA_LEXERS:
+        _lexer_name = rhodecode.EXTENSIONS.EXTRA_LEXERS[extension]
+        return lexers.get_lexer_by_name(_lexer_name)
+
 
 #==============================================================================
 # TEST FUNCTIONS AND CREATORS
@@ -704,26 +715,40 @@
         conf = paste.deploy.appconfig('config:' + self.path_to_ini_file)
         pylonsconfig.init_app(conf.global_conf, conf.local_conf)
 
+    def _init_session(self):
+        """
+        Inits SqlAlchemy Session
+        """
+        logging.config.fileConfig(self.path_to_ini_file)
+        from pylons import config
+        from rhodecode.model import init_model
+        from rhodecode.lib.utils2 import engine_from_config
+
+        #get to remove repos !!
+        add_cache(config)
+        engine = engine_from_config(config, 'sqlalchemy.db1.')
+        init_model(engine)
+
 
 def check_git_version():
     """
     Checks what version of git is installed in system, and issues a warning
     if it's too old for RhodeCode to properly work.
     """
-    import subprocess
+    from rhodecode import BACKENDS
+    from rhodecode.lib.vcs.backends.git.repository import GitRepository
     from distutils.version import StrictVersion
-    from rhodecode import BACKENDS
 
-    p = subprocess.Popen('git --version', shell=True,
-                        stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-    stdout, stderr = p.communicate()
+    stdout, stderr = GitRepository._run_git_command('--version', _bare=True,
+                                                    _safe=True)
+
     ver = (stdout.split(' ')[-1] or '').strip() or '0.0.0'
     if len(ver.split('.')) > 3:
         #StrictVersion needs to be only 3 element type
         ver = '.'.join(ver.split('.')[:3])
     try:
         _ver = StrictVersion(ver)
-    except:
+    except Exception:
         _ver = StrictVersion('0.0.0')
         stderr = traceback.format_exc()
 
@@ -735,7 +760,7 @@
     if 'git' in BACKENDS:
         log.debug('GIT version detected: %s' % stdout)
         if stderr:
-            log.warning('Unable to detect git version org error was:%r' % stderr)
+            log.warning('Unable to detect git version, org error was: %r' % stderr)
         elif to_old_git:
             log.warning('RhodeCode detected git version %s, which is too old '
                         'for the system to function properly. Make sure '
--- a/rhodecode/lib/utils2.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/lib/utils2.py	Sun Apr 07 18:37:22 2013 +0200
@@ -23,13 +23,17 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+import os
 import re
+import sys
 import time
 import datetime
+import traceback
 import webob
 
 from pylons.i18n.translation import _, ungettext
 from rhodecode.lib.vcs.utils.lazy import LazyProperty
+from rhodecode.lib.compat import json
 
 
 def __get_lem():
@@ -349,31 +353,35 @@
     return engine
 
 
-def age(prevdate):
+def age(prevdate, show_short_version=False, now=None):
     """
     turns a datetime into an age string.
+    If show_short_version is True, then it will generate a not so accurate but shorter string,
+    example: 2days ago, instead of 2 days and 23 hours ago.
 
     :param prevdate: datetime object
+    :param show_short_version: if it should aproximate the date and return a shorter string
     :rtype: unicode
     :returns: unicode words describing age
     """
-
+    now = now or datetime.datetime.now()
     order = ['year', 'month', 'day', 'hour', 'minute', 'second']
     deltas = {}
     future = False
 
-    # Get date parts deltas
-    now = datetime.datetime.now()
     if prevdate > now:
         now, prevdate = prevdate, now
         future = True
-
+    if future:
+        prevdate = prevdate.replace(microsecond=0)
+    # Get date parts deltas
+    from dateutil import relativedelta
     for part in order:
-        deltas[part] = getattr(now, part) - getattr(prevdate, part)
+        d = relativedelta.relativedelta(now, prevdate)
+        deltas[part] = getattr(d, part + 's')
 
     # Fix negative offsets (there is 1 second between 10:59:59 and 11:00:00,
     # not 1 hour, -59 minutes and -59 seconds)
-
     for num, length in [(5, 60), (4, 60), (3, 24)]:  # seconds, minutes, hours
         part = order[num]
         carry_part = order[num - 1]
@@ -419,7 +427,7 @@
         else:
             sub_value = 0
 
-        if sub_value == 0:
+        if sub_value == 0 or show_short_version:
             if future:
                 return _(u'in %s') % fmt_funcs[part](value)
             else:
@@ -545,7 +553,6 @@
     Get current active python path, and append it to PATH variable to fix issues
     of subprocess calls and different python versions
     """
-    import sys
     if os_ is None:
         import os
     else:
@@ -563,7 +570,7 @@
         _url = sa_url.make_url(engine)
         if _url.password:
             _url.password = 'XXXXX'
-    except:
+    except Exception:
         pass
     return str(_url)
 
@@ -571,3 +578,32 @@
 def get_server_url(environ):
     req = webob.Request(environ)
     return req.host_url + req.script_name
+
+
+def _extract_extras(env=None):
+    """
+    Extracts the rc extras data from os.environ, and wraps it into named
+    AttributeDict object
+    """
+    if not env:
+        env = os.environ
+
+    try:
+        rc_extras = json.loads(env['RC_SCM_DATA'])
+    except Exception:
+        print os.environ
+        print >> sys.stderr, traceback.format_exc()
+        rc_extras = {}
+
+    try:
+        for k in ['username', 'repository', 'locked_by', 'scm', 'make_lock',
+                  'action', 'ip']:
+            rc_extras[k]
+    except KeyError, e:
+        raise Exception('Missing key %s in os.environ %s' % (e, rc_extras))
+
+    return AttributeDict(rc_extras)
+
+
+def _set_extras(extras):
+    os.environ['RC_SCM_DATA'] = json.dumps(extras)
--- a/rhodecode/lib/vcs/backends/base.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/lib/vcs/backends/base.py	Sun Apr 07 18:37:22 2013 +0200
@@ -9,7 +9,7 @@
     :copyright: (c) 2010-2011 by Marcin Kuzminski, Lukasz Balcerzak.
 """
 
-
+import datetime
 from itertools import chain
 from rhodecode.lib.vcs.utils import author_name, author_email
 from rhodecode.lib.vcs.utils.lazy import LazyProperty
@@ -433,28 +433,28 @@
         raise NotImplementedError
 
     @LazyProperty
-    def commiter(self):
+    def committer(self):
         """
-        Returns Commiter for given commit
+        Returns Committer for given commit
         """
 
         raise NotImplementedError
 
     @LazyProperty
-    def commiter_name(self):
+    def committer_name(self):
         """
         Returns Author name for given commit
         """
 
-        return author_name(self.commiter)
+        return author_name(self.committer)
 
     @LazyProperty
-    def commiter_email(self):
+    def committer_email(self):
         """
         Returns Author email address for given commit
         """
 
-        return author_email(self.commiter)
+        return author_email(self.committer)
 
     @LazyProperty
     def author(self):
@@ -959,12 +959,12 @@
     """
 
     def __init__(self, cs='0' * 40, repo=None, requested_revision=None,
-                 alias=None, revision=-1, message='', author='', date=''):
+                 alias=None, revision=-1, message='', author='', date=None):
         self._empty_cs = cs
         self.revision = revision
         self.message = message
         self.author = author
-        self.date = date
+        self.date = date or datetime.datetime.fromtimestamp(0)
         self.repository = repo
         self.requested_revision = requested_revision
         self.alias = alias
--- a/rhodecode/lib/vcs/backends/git/changeset.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/lib/vcs/backends/git/changeset.py	Sun Apr 07 18:37:22 2013 +0200
@@ -2,6 +2,7 @@
 from itertools import chain
 from dulwich import objects
 from subprocess import Popen, PIPE
+import rhodecode
 from rhodecode.lib.vcs.conf import settings
 from rhodecode.lib.vcs.exceptions import RepositoryError
 from rhodecode.lib.vcs.exceptions import ChangesetError
@@ -16,6 +17,7 @@
 from rhodecode.lib.vcs.utils import safe_unicode
 from rhodecode.lib.vcs.utils import date_fromtimestamp
 from rhodecode.lib.vcs.utils.lazy import LazyProperty
+from rhodecode.lib.utils2 import safe_int
 
 
 class GitChangeset(BaseChangeset):
@@ -40,7 +42,7 @@
         self._commit = commit
 
         self._tree_id = commit.tree
-        self._commiter_property = 'committer'
+        self._committer_property = 'committer'
         self._author_property = 'author'
         self._date_property = 'commit_time'
         self._date_tz_property = 'commit_timezone'
@@ -52,8 +54,8 @@
         self._paths = {}
 
     @LazyProperty
-    def commiter(self):
-        return safe_unicode(getattr(self._commit, self._commiter_property))
+    def committer(self):
+        return safe_unicode(getattr(self._commit, self._committer_property))
 
     @LazyProperty
     def author(self):
@@ -151,7 +153,7 @@
                     self._stat_modes[name] = stat
             if not path in self._paths:
                 raise NodeDoesNotExistError("There is no file nor directory "
-                    "at the given path %r at revision %r"
+                    "at the given path '%s' at revision %s"
                     % (path, self.short_id))
         return self._paths[path]
 
@@ -165,8 +167,8 @@
     def _get_filectx(self, path):
         path = self._fix_path(path)
         if self._get_kind(path) != NodeKind.FILE:
-            raise ChangesetError("File does not exist for revision %r at "
-                " %r" % (self.raw_id, path))
+            raise ChangesetError("File does not exist for revision %s at "
+                " '%s'" % (self.raw_id, path))
         return path
 
     def _get_file_nodes(self):
@@ -185,8 +187,10 @@
         """
         Returns list of children changesets.
         """
+        rev_filter = _git_path = rhodecode.CONFIG.get('git_rev_filter',
+                                              '--all').strip()
         so, se = self.repository.run_git_command(
-            "rev-list --all --children | grep '^%s'" % self.raw_id
+            "rev-list %s --children | grep '^%s'" % (rev_filter, self.raw_id)
         )
 
         children = []
@@ -274,10 +278,9 @@
         """
         Returns last commit of the file at the given ``path``.
         """
-        node = self.get_node(path)
-        return node.history[0]
+        return self.get_file_history(path, limit=1)[0]
 
-    def get_file_history(self, path):
+    def get_file_history(self, path, limit=None):
         """
         Returns history of file as reversed list of ``Changeset`` objects for
         which file at given ``path`` has been modified.
@@ -286,11 +289,16 @@
         which is generally not good. Should be replaced with algorithm
         iterating commits.
         """
+
         self._get_filectx(path)
-
-        cmd = 'log --pretty="format: %%H" -s -p %s -- "%s"' % (
-                  self.id, path
-               )
+        if limit:
+            cmd = 'log -n %s --pretty="format: %%H" -s -p %s -- "%s"' % (
+                      safe_int(limit, 0), self.id, path
+                   )
+        else:
+            cmd = 'log --pretty="format: %%H" -s -p %s -- "%s"' % (
+                      self.id, path
+                   )
         so, se = self.repository.run_git_command(cmd)
         ids = re.findall(r'[0-9a-fA-F]{40}', so)
         return [self.repository.get_changeset(id) for id in ids]
@@ -362,8 +370,9 @@
             frmt = 'zip'
         else:
             frmt = 'tar'
-        cmd = 'git archive --format=%s --prefix=%s/ %s' % (frmt, prefix,
-            self.raw_id)
+        _git_path = rhodecode.CONFIG.get('git_path', 'git')
+        cmd = '%s archive --format=%s --prefix=%s/ %s' % (_git_path,
+                                                frmt, prefix, self.raw_id)
         if kind == 'tgz':
             cmd += ' | gzip -9'
         elif kind == 'tbz2':
@@ -385,8 +394,8 @@
 
     def get_nodes(self, path):
         if self._get_kind(path) != NodeKind.DIR:
-            raise ChangesetError("Directory does not exist for revision %r at "
-                " %r" % (self.revision, path))
+            raise ChangesetError("Directory does not exist for revision %s at "
+                " '%s'" % (self.revision, path))
         path = self._fix_path(path)
         id = self._get_id_for_path(path)
         tree = self.repository._repo[id]
@@ -449,7 +458,7 @@
                     node._blob = obj
                 else:
                     raise NodeDoesNotExistError("There is no file nor directory "
-                        "at the given path %r at revision %r"
+                        "at the given path '%s' at revision %s"
                         % (path, self.short_id))
             # cache node
             self.nodes[path] = node
--- a/rhodecode/lib/vcs/backends/git/repository.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/lib/vcs/backends/git/repository.py	Sun Apr 07 18:37:22 2013 +0200
@@ -20,7 +20,8 @@
 from dulwich.repo import Repo, NotGitRepository
 from dulwich.objects import Tag
 from string import Template
-from subprocess import Popen, PIPE
+
+import rhodecode
 from rhodecode.lib.vcs.backends.base import BaseRepository
 from rhodecode.lib.vcs.exceptions import BranchDoesNotExistError
 from rhodecode.lib.vcs.exceptions import ChangesetDoesNotExistError
@@ -63,18 +64,9 @@
             abspath(get_user_home(), '.gitconfig'),
         ]
 
-    @ThreadLocalLazyProperty
+    @property
     def _repo(self):
-        repo = Repo(self.path)
-        #temporary set that to now at later we will move it to constructor
-        baseui = None
-        if baseui is None:
-            from mercurial.ui import ui
-            baseui = ui()
-        # patch the instance of GitRepo with an "FAKE" ui object to add
-        # compatibility layer with Mercurial
-        setattr(repo, 'ui', baseui)
-        return repo
+        return Repo(self.path)
 
     @property
     def head(self):
@@ -91,20 +83,27 @@
         """
         return self._get_all_revisions()
 
-    def run_git_command(self, cmd):
+    @classmethod
+    def _run_git_command(cls, cmd, **opts):
         """
         Runs given ``cmd`` as git command and returns tuple
-        (returncode, stdout, stderr).
-
-        .. note::
-           This method exists only until log/blame functionality is implemented
-           at Dulwich (see https://bugs.launchpad.net/bugs/645142). Parsing
-           os command's output is road to hell...
+        (stdout, stderr).
 
         :param cmd: git command to be executed
+        :param opts: env options to pass into Subprocess command
         """
 
-        _copts = ['-c', 'core.quotepath=false', ]
+        if '_bare' in opts:
+            _copts = []
+            del opts['_bare']
+        else:
+            _copts = ['-c', 'core.quotepath=false', ]
+        safe_call = False
+        if '_safe' in opts:
+            #no exc on failure
+            del opts['_safe']
+            safe_call = True
+
         _str_cmd = False
         if isinstance(cmd, basestring):
             cmd = [cmd]
@@ -116,24 +115,34 @@
             del gitenv['GIT_DIR']
         gitenv['GIT_CONFIG_NOGLOBAL'] = '1'
 
-        cmd = ['git'] + _copts + cmd
+        _git_path = rhodecode.CONFIG.get('git_path', 'git')
+        cmd = [_git_path] + _copts + cmd
         if _str_cmd:
             cmd = ' '.join(cmd)
         try:
-            opts = dict(
+            _opts = dict(
                 env=gitenv,
                 shell=False,
             )
-            if os.path.isdir(self.path):
-                opts['cwd'] = self.path
-            p = subprocessio.SubprocessIOChunker(cmd, **opts)
+            _opts.update(opts)
+            p = subprocessio.SubprocessIOChunker(cmd, **_opts)
         except (EnvironmentError, OSError), err:
-            log.error(traceback.format_exc())
-            raise RepositoryError("Couldn't run git command (%s).\n"
-                                  "Original error was:%s" % (cmd, err))
+            tb_err = ("Couldn't run git command (%s).\n"
+                      "Original error was:%s\n" % (cmd, err))
+            log.error(tb_err)
+            if safe_call:
+                return '', err
+            else:
+                raise RepositoryError(tb_err)
 
         return ''.join(p.output), ''.join(p.error)
 
+    def run_git_command(self, cmd):
+        opts = {}
+        if os.path.isdir(self.path):
+            opts['cwd'] = self.path
+        return self._run_git_command(cmd, **opts)
+
     @classmethod
     def _check_url(cls, url):
         """
@@ -203,7 +212,7 @@
                 else:
                     return Repo.init(self.path)
             else:
-                return Repo(self.path)
+                return self._repo
         except (NotGitRepository, OSError), err:
             raise RepositoryError(err)
 
@@ -215,7 +224,9 @@
             self._repo.head()
         except KeyError:
             return []
-        cmd = 'rev-list --all --reverse --date-order'
+        rev_filter = _git_path = rhodecode.CONFIG.get('git_rev_filter',
+                                                      '--all').strip()
+        cmd = 'rev-list %s --reverse --date-order' % (rev_filter)
         try:
             so, se = self.run_git_command(cmd)
         except RepositoryError:
@@ -248,9 +259,9 @@
             or isinstance(revision, int) or is_null(revision)):
             try:
                 revision = self.revisions[int(revision)]
-            except:
-                raise ChangesetDoesNotExistError("Revision %r does not exist "
-                    "for this repository %s" % (revision, self))
+            except Exception:
+                raise ChangesetDoesNotExistError("Revision %s does not exist "
+                    "for this repository" % (revision))
 
         elif is_bstr(revision):
             # get by branch/tag name
@@ -264,12 +275,12 @@
                 return _tags_shas[_tags_shas.index(revision)]
 
             elif not pattern.match(revision) or revision not in self.revisions:
-                raise ChangesetDoesNotExistError("Revision %r does not exist "
-                    "for this repository %s" % (revision, self))
+                raise ChangesetDoesNotExistError("Revision %s does not exist "
+                    "for this repository" % (revision))
 
         # Ensure we return full id
         if not pattern.match(str(revision)):
-            raise ChangesetDoesNotExistError("Given revision %r not recognized"
+            raise ChangesetDoesNotExistError("Given revision %s not recognized"
                 % revision)
         return revision
 
@@ -288,6 +299,15 @@
             url = ':///'.join(('file', url))
         return url
 
+    def get_hook_location(self):
+        """
+        returns absolute path to location where hooks are stored
+        """
+        loc = os.path.join(self.path, 'hooks')
+        if not self.bare:
+            loc = os.path.join(self.path, '.git', 'hooks')
+        return loc
+
     @LazyProperty
     def name(self):
         return os.path.basename(self.path)
@@ -399,7 +419,9 @@
         return self._get_parsed_refs()
 
     def _get_parsed_refs(self):
-        refs = self._repo.get_refs()
+        # cache the property
+        _repo = self._repo
+        refs = _repo.get_refs()
         keys = [('refs/heads/', 'H'),
                 ('refs/remotes/origin/', 'RH'),
                 ('refs/tags/', 'T')]
@@ -409,9 +431,9 @@
                 if ref.startswith(k):
                     _key = ref[len(k):]
                     if type_ == 'T':
-                        obj = self._repo.get_object(sha)
+                        obj = _repo.get_object(sha)
                         if isinstance(obj, Tag):
-                            sha = self._repo.get_object(sha).object[1]
+                            sha = _repo.get_object(sha).object[1]
                     _refs[_key] = [sha, type_]
                     break
         return _refs
@@ -480,7 +502,9 @@
             cmd_template += ' $branch_name'
             cmd_params['branch_name'] = branch_name
         else:
-            cmd_template += ' --all'
+            rev_filter = _git_path = rhodecode.CONFIG.get('git_rev_filter',
+                                                          '--all').strip()
+            cmd_template += ' %s' % (rev_filter)
 
         cmd = Template(cmd_template).safe_substitute(**cmd_params)
         revs = self.run_git_command(cmd)[0].splitlines()
--- a/rhodecode/lib/vcs/backends/hg/changeset.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/lib/vcs/backends/hg/changeset.py	Sun Apr 07 18:37:22 2013 +0200
@@ -44,8 +44,8 @@
         return safe_unicode(self._ctx.description())
 
     @LazyProperty
-    def commiter(self):
-        return safe_unicode(self.auhtor)
+    def committer(self):
+        return safe_unicode(self.author)
 
     @LazyProperty
     def author(self):
@@ -174,14 +174,14 @@
         elif path in self._dir_paths:
             return NodeKind.DIR
         else:
-            raise ChangesetError("Node does not exist at the given path %r"
+            raise ChangesetError("Node does not exist at the given path '%s'"
                 % (path))
 
     def _get_filectx(self, path):
         path = self._fix_path(path)
         if self._get_kind(path) != NodeKind.FILE:
-            raise ChangesetError("File does not exist for revision %r at "
-                " %r" % (self.raw_id, path))
+            raise ChangesetError("File does not exist for revision %s at "
+                " '%s'" % (self.raw_id, path))
         return self._ctx.filectx(path)
 
     def _extract_submodules(self):
@@ -219,19 +219,23 @@
         """
         Returns last commit of the file at the given ``path``.
         """
-        node = self.get_node(path)
-        return node.history[0]
+        return self.get_file_history(path, limit=1)[0]
 
-    def get_file_history(self, path):
+    def get_file_history(self, path, limit=None):
         """
         Returns history of file as reversed list of ``Changeset`` objects for
         which file at given ``path`` has been modified.
         """
         fctx = self._get_filectx(path)
-        nodes = [fctx.filectx(x).node() for x in fctx.filelog()]
-        changesets = [self.repository.get_changeset(hex(node))
-            for node in reversed(nodes)]
-        return changesets
+        hist = []
+        cnt = 0
+        for cs in reversed([x for x in fctx.filelog()]):
+            cnt += 1
+            hist.append(hex(fctx.filectx(cs).node()))
+            if limit and cnt == limit:
+                break
+
+        return [self.repository.get_changeset(node) for node in hist]
 
     def get_file_annotate(self, path):
         """
@@ -296,8 +300,8 @@
         """
 
         if self._get_kind(path) != NodeKind.DIR:
-            raise ChangesetError("Directory does not exist for revision %r at "
-                " %r" % (self.revision, path))
+            raise ChangesetError("Directory does not exist for revision %s at "
+                " '%s'" % (self.revision, path))
         path = self._fix_path(path)
 
         filenodes = [FileNode(f, changeset=self) for f in self._file_paths
@@ -340,7 +344,7 @@
                     node = DirNode(path, changeset=self)
             else:
                 raise NodeDoesNotExistError("There is no file nor directory "
-                    "at the given path: %r at revision %r"
+                    "at the given path: '%s' at revision %s"
                     % (path, self.short_id))
             # cache node
             self.nodes[path] = node
--- a/rhodecode/lib/vcs/backends/hg/repository.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/lib/vcs/backends/hg/repository.py	Sun Apr 07 18:37:22 2013 +0200
@@ -79,6 +79,13 @@
     def branches(self):
         return self._get_branches()
 
+    @LazyProperty
+    def allbranches(self):
+        """
+        List all branches, including closed branches.
+        """
+        return self._get_branches(closed=True)
+
     def _get_branches(self, closed=False):
         """
         Get's branches for this repository
@@ -397,9 +404,9 @@
         try:
             revision = hex(self._repo.lookup(revision))
         except (IndexError, ValueError, RepoLookupError, TypeError):
-            raise ChangesetDoesNotExistError("Revision %r does not "
-                                    "exist for this repository %s" \
-                                    % (revision, self))
+            raise ChangesetDoesNotExistError("Revision %s does not "
+                                    "exist for this repository"
+                                    % (revision))
         return revision
 
     def _get_archives(self, archive_name='tip'):
@@ -422,6 +429,12 @@
             url = "file:" + urllib.pathname2url(url)
         return url
 
+    def get_hook_location(self):
+        """
+        returns absolute path to location where hooks are stored
+        """
+        return os.path.join(self.path, '.hg', '.hgrc')
+
     def get_changeset(self, revision=None):
         """
         Returns ``MercurialChangeset`` object representing repository's
@@ -451,11 +464,11 @@
         end_pos = self.revisions.index(end_raw_id) if end else None
 
         if None not in [start, end] and start_pos > end_pos:
-            raise RepositoryError("start revision '%s' cannot be "
+            raise RepositoryError("Start revision '%s' cannot be "
                                   "after end revision '%s'" % (start, end))
 
-        if branch_name and branch_name not in self.branches.keys():
-            raise BranchDoesNotExistError('Such branch %s does not exists for'
+        if branch_name and branch_name not in self.allbranches.keys():
+            raise BranchDoesNotExistError('Branch %s not found in'
                                   ' this repository' % branch_name)
         if end_pos is not None:
             end_pos += 1
@@ -492,7 +505,7 @@
         """
         return MercurialWorkdir(self)
 
-    def get_config_value(self, section, name, config_file=None):
+    def get_config_value(self, section, name=None, config_file=None):
         """
         Returns configuration value for a given [``section``] and ``name``.
 
--- a/rhodecode/lib/vcs/utils/lazy.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/lib/vcs/utils/lazy.py	Sun Apr 07 18:37:22 2013 +0200
@@ -1,3 +1,14 @@
+class _Missing(object):
+
+    def __repr__(self):
+        return 'no value'
+
+    def __reduce__(self):
+        return '_missing'
+
+_missing = _Missing()
+
+
 class LazyProperty(object):
     """
     Decorator for easier creation of ``property`` from potentially expensive to
@@ -24,8 +35,11 @@
     def __get__(self, obj, klass=None):
         if obj is None:
             return self
-        result = obj.__dict__[self.__name__] = self._func(obj)
-        return result
+        value = obj.__dict__.get(self.__name__, _missing)
+        if value is _missing:
+            value = self._func(obj)
+            obj.__dict__[self.__name__] = value
+        return value
 
 import threading
 
@@ -41,5 +55,8 @@
         if not hasattr(obj, '__tl_dict__'):
             obj.__tl_dict__ = threading.local().__dict__
 
-        result = obj.__tl_dict__[self.__name__] = self._func(obj)
-        return result
+        value = obj.__tl_dict__.get(self.__name__, _missing)
+        if value is _missing:
+            value = self._func(obj)
+            obj.__tl_dict__[self.__name__] = value
+        return value
--- a/rhodecode/lib/vcs/utils/lockfiles.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/lib/vcs/utils/lockfiles.py	Sun Apr 07 18:37:22 2013 +0200
@@ -2,71 +2,71 @@
 
 
 class LockFile(object):
-	"""Provides methods to obtain, check for, and release a file based lock which
-	should be used to handle concurrent access to the same file.
+    """Provides methods to obtain, check for, and release a file based lock which
+    should be used to handle concurrent access to the same file.
 
-	As we are a utility class to be derived from, we only use protected methods.
+    As we are a utility class to be derived from, we only use protected methods.
 
-	Locks will automatically be released on destruction"""
-	__slots__ = ("_file_path", "_owns_lock")
+    Locks will automatically be released on destruction"""
+    __slots__ = ("_file_path", "_owns_lock")
 
-	def __init__(self, file_path):
-		self._file_path = file_path
-		self._owns_lock = False
+    def __init__(self, file_path):
+        self._file_path = file_path
+        self._owns_lock = False
 
-	def __del__(self):
-		self._release_lock()
+    def __del__(self):
+        self._release_lock()
 
-	def _lock_file_path(self):
-		""":return: Path to lockfile"""
-		return "%s.lock" % (self._file_path)
+    def _lock_file_path(self):
+        """:return: Path to lockfile"""
+        return "%s.lock" % (self._file_path)
 
-	def _has_lock(self):
-		""":return: True if we have a lock and if the lockfile still exists
-		:raise AssertionError: if our lock-file does not exist"""
-		if not self._owns_lock:
-			return False
+    def _has_lock(self):
+        """:return: True if we have a lock and if the lockfile still exists
+        :raise AssertionError: if our lock-file does not exist"""
+        if not self._owns_lock:
+            return False
 
-		return True
+        return True
 
-	def _obtain_lock_or_raise(self):
-		"""Create a lock file as flag for other instances, mark our instance as lock-holder
+    def _obtain_lock_or_raise(self):
+        """Create a lock file as flag for other instances, mark our instance as lock-holder
 
-		:raise IOError: if a lock was already present or a lock file could not be written"""
-		if self._has_lock():
-			return
-		lock_file = self._lock_file_path()
-		if os.path.isfile(lock_file):
-			raise IOError("Lock for file %r did already exist, delete %r in case the lock is illegal" % (self._file_path, lock_file))
+        :raise IOError: if a lock was already present or a lock file could not be written"""
+        if self._has_lock():
+            return
+        lock_file = self._lock_file_path()
+        if os.path.isfile(lock_file):
+            raise IOError("Lock for file %r did already exist, delete %r in case the lock is illegal" % (self._file_path, lock_file))
 
-		try:
-			fd = os.open(lock_file, os.O_WRONLY | os.O_CREAT | os.O_EXCL, 0)
-			os.close(fd)
-		except OSError,e:
-			raise IOError(str(e))
+        try:
+            fd = os.open(lock_file, os.O_WRONLY | os.O_CREAT | os.O_EXCL, 0)
+            os.close(fd)
+        except OSError,e:
+            raise IOError(str(e))
 
-		self._owns_lock = True
+        self._owns_lock = True
 
-	def _obtain_lock(self):
-		"""The default implementation will raise if a lock cannot be obtained.
-		Subclasses may override this method to provide a different implementation"""
-		return self._obtain_lock_or_raise()
+    def _obtain_lock(self):
+        """The default implementation will raise if a lock cannot be obtained.
+        Subclasses may override this method to provide a different implementation"""
+        return self._obtain_lock_or_raise()
 
-	def _release_lock(self):
-		"""Release our lock if we have one"""
-		if not self._has_lock():
-			return
+    def _release_lock(self):
+        """Release our lock if we have one"""
+        if not self._has_lock():
+            return
 
-		# if someone removed our file beforhand, lets just flag this issue
-		# instead of failing, to make it more usable.
-		lfp = self._lock_file_path()
-		try:
-			# on bloody windows, the file needs write permissions to be removable.
-			# Why ...
-			if os.name == 'nt':
-				os.chmod(lfp, 0777)
-			# END handle win32
-			os.remove(lfp)
-		except OSError:
-			pass
-		self._owns_lock = False
+        # if someone removed our file beforhand, lets just flag this issue
+        # instead of failing, to make it more usable.
+        lfp = self._lock_file_path()
+        try:
+            # on bloody windows, the file needs write permissions to be removable.
+            # Why ...
+            if os.name == 'nt':
+                os.chmod(lfp, 0777)
+            # END handle win32
+            os.remove(lfp)
+        except OSError:
+            pass
+        self._owns_lock = False
--- a/rhodecode/model/changeset_status.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/model/changeset_status.py	Sun Apr 07 18:37:22 2013 +0200
@@ -132,10 +132,11 @@
         if not comment:
             from rhodecode.model.comment import ChangesetCommentsModel
             comment = ChangesetCommentsModel().create(
-                text='Auto status change',
+                text='Auto status change to %s' % (ChangesetStatus.get_status_lbl(status)),
                 repo=repo,
                 user=user,
                 pull_request=pull_request,
+                send_email=False
             )
         if revision:
             q = q.filter(ChangesetStatus.repo == repo)
--- a/rhodecode/model/comment.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/model/comment.py	Sun Apr 07 18:37:22 2013 +0200
@@ -35,6 +35,7 @@
 from rhodecode.model.db import ChangesetComment, User, Repository, \
     Notification, PullRequest
 from rhodecode.model.notification import NotificationModel
+from rhodecode.model.meta import Session
 
 log = logging.getLogger(__name__)
 
@@ -57,8 +58,103 @@
                 user_objects.append(user_obj)
         return user_objects
 
+    def _get_notification_data(self, repo, comment, user, comment_text,
+                               line_no=None, revision=None, pull_request=None,
+                               status_change=None, closing_pr=False):
+        """
+        Get notification data
+
+        :param comment_text:
+        :param line:
+        :returns: tuple (subj,body,recipients,notification_type,email_kwargs)
+        """
+        # make notification
+        body = comment_text  # text of the comment
+        line = ''
+        if line_no:
+            line = _('on line %s') % line_no
+
+        #changeset
+        if revision:
+            notification_type = Notification.TYPE_CHANGESET_COMMENT
+            cs = repo.scm_instance.get_changeset(revision)
+            desc = "%s" % (cs.short_id)
+
+            _url = h.url('changeset_home',
+                repo_name=repo.repo_name,
+                revision=revision,
+                anchor='comment-%s' % comment.comment_id,
+                qualified=True,
+            )
+            subj = safe_unicode(
+                h.link_to('Re changeset: %(desc)s %(line)s' % \
+                          {'desc': desc, 'line': line},
+                          _url)
+            )
+            email_subject = 'User %s commented on changeset %s' % \
+                (user.username, h.short_id(revision))
+            # get the current participants of this changeset
+            recipients = ChangesetComment.get_users(revision=revision)
+            # add changeset author if it's in rhodecode system
+            cs_author = User.get_from_cs_author(cs.author)
+            if not cs_author:
+                #use repo owner if we cannot extract the author correctly
+                cs_author = repo.user
+            recipients += [cs_author]
+            email_kwargs = {
+                'status_change': status_change,
+                'cs_comment_user': h.person(user.email),
+                'cs_target_repo': h.url('summary_home', repo_name=repo.repo_name,
+                                        qualified=True),
+                'cs_comment_url': _url,
+                'raw_id': revision,
+                'message': cs.message
+            }
+        #pull request
+        elif pull_request:
+            notification_type = Notification.TYPE_PULL_REQUEST_COMMENT
+            desc = comment.pull_request.title
+            _url = h.url('pullrequest_show',
+                repo_name=pull_request.other_repo.repo_name,
+                pull_request_id=pull_request.pull_request_id,
+                anchor='comment-%s' % comment.comment_id,
+                qualified=True,
+            )
+            subj = safe_unicode(
+                h.link_to('Re pull request #%(pr_id)s: %(desc)s %(line)s' % \
+                          {'desc': desc,
+                           'pr_id': comment.pull_request.pull_request_id,
+                           'line': line},
+                          _url)
+            )
+            email_subject = 'User %s commented on pull request #%s' % \
+                    (user.username, comment.pull_request.pull_request_id)
+            # get the current participants of this pull request
+            recipients = ChangesetComment.get_users(pull_request_id=
+                                                pull_request.pull_request_id)
+            # add pull request author
+            recipients += [pull_request.author]
+
+            # add the reviewers to notification
+            recipients += [x.user for x in pull_request.reviewers]
+
+            #set some variables for email notification
+            email_kwargs = {
+                'pr_id': pull_request.pull_request_id,
+                'status_change': status_change,
+                'closing_pr': closing_pr,
+                'pr_comment_url': _url,
+                'pr_comment_user': h.person(user.email),
+                'pr_target_repo': h.url('summary_home',
+                                   repo_name=pull_request.other_repo.repo_name,
+                                   qualified=True)
+            }
+
+        return subj, body, recipients, notification_type, email_kwargs, email_subject
+
     def create(self, text, repo, user, revision=None, pull_request=None,
-               f_path=None, line_no=None, status_change=None):
+               f_path=None, line_no=None, status_change=None, closing_pr=False,
+               send_email=True):
         """
         Creates new comment for changeset or pull request.
         IF status_change is not none this comment is associated with a
@@ -72,8 +168,11 @@
         :param f_path:
         :param line_no:
         :param status_change:
+        :param closing_pr:
+        :param send_email:
         """
         if not text:
+            log.warning('Missing text for comment, skipping...')
             return
 
         repo = self._get_repo(repo)
@@ -86,100 +185,44 @@
         comment.line_no = line_no
 
         if revision:
-            cs = repo.scm_instance.get_changeset(revision)
-            desc = "%s - %s" % (cs.short_id, h.shorter(cs.message, 256))
             comment.revision = revision
         elif pull_request:
             pull_request = self.__get_pull_request(pull_request)
             comment.pull_request = pull_request
-            desc = pull_request.pull_request_id
         else:
             raise Exception('Please specify revision or pull_request_id')
 
-        self.sa.add(comment)
-        self.sa.flush()
-
-        # make notification
-        line = ''
-        body = text
+        Session().add(comment)
+        Session().flush()
 
-        #changeset
-        if revision:
-            if line_no:
-                line = _('on line %s') % line_no
-            subj = safe_unicode(
-                h.link_to('Re commit: %(desc)s %(line)s' % \
-                          {'desc': desc, 'line': line},
-                          h.url('changeset_home', repo_name=repo.repo_name,
+        if send_email:
+            (subj, body, recipients, notification_type,
+             email_kwargs, email_subject) = self._get_notification_data(
+                                repo, comment, user,
+                                comment_text=text,
+                                line_no=line_no,
                                 revision=revision,
-                                anchor='comment-%s' % comment.comment_id,
-                                qualified=True,
-                          )
-                )
-            )
-            notification_type = Notification.TYPE_CHANGESET_COMMENT
-            # get the current participants of this changeset
-            recipients = ChangesetComment.get_users(revision=revision)
-            # add changeset author if it's in rhodecode system
-            cs_author = User.get_from_cs_author(cs.author)
-            if not cs_author:
-                #use repo owner if we cannot extract the author correctly
-                cs_author = repo.user
-            recipients += [cs_author]
-            email_kwargs = {
-                'status_change': status_change,
-            }
-        #pull request
-        elif pull_request:
-            _url = h.url('pullrequest_show',
-                repo_name=pull_request.other_repo.repo_name,
-                pull_request_id=pull_request.pull_request_id,
-                anchor='comment-%s' % comment.comment_id,
-                qualified=True,
-            )
-            subj = safe_unicode(
-                h.link_to('Re pull request: %(desc)s %(line)s' % \
-                          {'desc': desc, 'line': line}, _url)
+                                pull_request=pull_request,
+                                status_change=status_change,
+                                closing_pr=closing_pr)
+            # create notification objects, and emails
+            NotificationModel().create(
+                created_by=user, subject=subj, body=body,
+                recipients=recipients, type_=notification_type,
+                email_kwargs=email_kwargs, email_subject=email_subject
             )
 
-            notification_type = Notification.TYPE_PULL_REQUEST_COMMENT
-            # get the current participants of this pull request
-            recipients = ChangesetComment.get_users(pull_request_id=
-                                                pull_request.pull_request_id)
-            # add pull request author
-            recipients += [pull_request.author]
-
-            # add the reviewers to notification
-            recipients += [x.user for x in pull_request.reviewers]
-
-            #set some variables for email notification
-            email_kwargs = {
-                'pr_id': pull_request.pull_request_id,
-                'status_change': status_change,
-                'pr_comment_url': _url,
-                'pr_comment_user': h.person(user.email),
-                'pr_target_repo': h.url('summary_home',
-                                   repo_name=pull_request.other_repo.repo_name,
-                                   qualified=True)
-            }
-        # create notification objects, and emails
-        NotificationModel().create(
-            created_by=user, subject=subj, body=body,
-            recipients=recipients, type_=notification_type,
-            email_kwargs=email_kwargs
-        )
-
-        mention_recipients = set(self._extract_mentions(body))\
-                                .difference(recipients)
-        if mention_recipients:
-            email_kwargs.update({'pr_mention': True})
-            subj = _('[Mention]') + ' ' + subj
-            NotificationModel().create(
-                created_by=user, subject=subj, body=body,
-                recipients=mention_recipients,
-                type_=notification_type,
-                email_kwargs=email_kwargs
-            )
+            mention_recipients = set(self._extract_mentions(body))\
+                                    .difference(recipients)
+            if mention_recipients:
+                email_kwargs.update({'pr_mention': True})
+                subj = _('[Mention]') + ' ' + subj
+                NotificationModel().create(
+                    created_by=user, subject=subj, body=body,
+                    recipients=mention_recipients,
+                    type_=notification_type,
+                    email_kwargs=email_kwargs
+                )
 
         return comment
 
@@ -190,7 +233,7 @@
         :param comment_id:
         """
         comment = self.__get_changeset_comment(comment)
-        self.sa.delete(comment)
+        Session().delete(comment)
 
         return comment
 
@@ -199,11 +242,8 @@
         Get's main comments based on revision or pull_request_id
 
         :param repo_id:
-        :type repo_id:
         :param revision:
-        :type revision:
         :param pull_request:
-        :type pull_request:
         """
 
         q = ChangesetComment.query()\
@@ -221,7 +261,7 @@
         return q.all()
 
     def get_inline_comments(self, repo_id, revision=None, pull_request=None):
-        q = self.sa.query(ChangesetComment)\
+        q = Session().query(ChangesetComment)\
             .filter(ChangesetComment.repo_id == repo_id)\
             .filter(ChangesetComment.line_no != None)\
             .filter(ChangesetComment.f_path != None)\
--- a/rhodecode/model/db.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/model/db.py	Sun Apr 07 18:37:22 2013 +0200
@@ -44,9 +44,10 @@
 from rhodecode.lib.vcs.utils.helpers import get_scm
 from rhodecode.lib.vcs.exceptions import VCSError
 from rhodecode.lib.vcs.utils.lazy import LazyProperty
+from rhodecode.lib.vcs.backends.base import EmptyChangeset
 
 from rhodecode.lib.utils2 import str2bool, safe_str, get_changeset_safe, \
-    safe_unicode, remove_suffix, remove_prefix
+    safe_unicode, remove_suffix, remove_prefix, time_to_datetime, _set_extras
 from rhodecode.lib.compat import json
 from rhodecode.lib.caching_query import FromCache
 
@@ -341,7 +342,7 @@
     repo_to_perm = relationship('UserRepoToPerm', primaryjoin='UserRepoToPerm.user_id==User.user_id', cascade='all')
     repo_group_to_perm = relationship('UserRepoGroupToPerm', primaryjoin='UserRepoGroupToPerm.user_id==User.user_id', cascade='all')
 
-    group_member = relationship('UsersGroupMember', cascade='all')
+    group_member = relationship('UserGroupMember', cascade='all')
 
     notifications = relationship('UserNotification', cascade='all')
     # notifications assigned to this user
@@ -604,7 +605,7 @@
     repository = relationship('Repository', cascade='')
 
 
-class UsersGroup(Base, BaseModel):
+class UserGroup(Base, BaseModel):
     __tablename__ = 'users_groups'
     __table_args__ = (
         {'extend_existing': True, 'mysql_engine': 'InnoDB',
@@ -616,9 +617,9 @@
     users_group_active = Column("users_group_active", Boolean(), nullable=True, unique=None, default=None)
     inherit_default_permissions = Column("users_group_inherit_default_permissions", Boolean(), nullable=False, unique=None, default=True)
 
-    members = relationship('UsersGroupMember', cascade="all, delete, delete-orphan", lazy="joined")
-    users_group_to_perm = relationship('UsersGroupToPerm', cascade='all')
-    users_group_repo_to_perm = relationship('UsersGroupRepoToPerm', cascade='all')
+    members = relationship('UserGroupMember', cascade="all, delete, delete-orphan", lazy="joined")
+    users_group_to_perm = relationship('UserGroupToPerm', cascade='all')
+    users_group_repo_to_perm = relationship('UserGroupRepoToPerm', cascade='all')
 
     def __unicode__(self):
         return u'<userGroup(%s)>' % (self.users_group_name)
@@ -658,7 +659,7 @@
         return data
 
 
-class UsersGroupMember(Base, BaseModel):
+class UserGroupMember(Base, BaseModel):
     __tablename__ = 'users_groups_members'
     __table_args__ = (
         {'extend_existing': True, 'mysql_engine': 'InnoDB',
@@ -670,13 +671,51 @@
     user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
 
     user = relationship('User', lazy='joined')
-    users_group = relationship('UsersGroup')
+    users_group = relationship('UserGroup')
 
     def __init__(self, gr_id='', u_id=''):
         self.users_group_id = gr_id
         self.user_id = u_id
 
 
+class RepositoryField(Base, BaseModel):
+    __tablename__ = 'repositories_fields'
+    __table_args__ = (
+        UniqueConstraint('repository_id', 'field_key'),  # no-multi field
+        {'extend_existing': True, 'mysql_engine': 'InnoDB',
+         'mysql_charset': 'utf8'},
+    )
+    PREFIX = 'ex_'  # prefix used in form to not conflict with already existing fields
+
+    repo_field_id = Column("repo_field_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
+    repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=None, default=None)
+    field_key = Column("field_key", String(250, convert_unicode=False, assert_unicode=None))
+    field_label = Column("field_label", String(1024, convert_unicode=False, assert_unicode=None), nullable=False)
+    field_value = Column("field_value", String(10000, convert_unicode=False, assert_unicode=None), nullable=False)
+    field_desc = Column("field_desc", String(1024, convert_unicode=False, assert_unicode=None), nullable=False)
+    field_type = Column("field_type", String(256), nullable=False, unique=None)
+    created_on = Column('created_on', DateTime(timezone=False), nullable=False, default=datetime.datetime.now)
+
+    repository = relationship('Repository')
+
+    @property
+    def field_key_prefixed(self):
+        return 'ex_%s' % self.field_key
+
+    @classmethod
+    def un_prefix_key(cls, key):
+        if key.startswith(cls.PREFIX):
+            return key[len(cls.PREFIX):]
+        return key
+
+    @classmethod
+    def get_by_key_name(cls, key, repo):
+        row = cls.query()\
+                .filter(cls.repository == repo)\
+                .filter(cls.field_key == key).scalar()
+        return row
+
+
 class Repository(Base, BaseModel):
     __tablename__ = 'repositories'
     __table_args__ = (
@@ -709,12 +748,14 @@
     fork = relationship('Repository', remote_side=repo_id)
     group = relationship('RepoGroup')
     repo_to_perm = relationship('UserRepoToPerm', cascade='all', order_by='UserRepoToPerm.repo_to_perm_id')
-    users_group_to_perm = relationship('UsersGroupRepoToPerm', cascade='all')
+    users_group_to_perm = relationship('UserGroupRepoToPerm', cascade='all')
     stats = relationship('Statistics', cascade='all', uselist=False)
 
     followers = relationship('UserFollowing',
                              primaryjoin='UserFollowing.follows_repo_id==Repository.repo_id',
                              cascade='all')
+    extra_fields = relationship('RepositoryField',
+                                cascade="all, delete, delete-orphan")
 
     logs = relationship('UserLog')
     comments = relationship('ChangesetComment', cascade="all, delete, delete-orphan")
@@ -761,7 +802,7 @@
     def changeset_cache(self, val):
         try:
             self._changeset_cache = json.dumps(val)
-        except:
+        except Exception:
             log.error(traceback.format_exc())
 
     @classmethod
@@ -846,7 +887,7 @@
 
     @property
     def groups_and_repo(self):
-        return self.groups_with_parents, self.just_name
+        return self.groups_with_parents, self.just_name, self.repo_name
 
     @LazyProperty
     def repo_path(self):
@@ -866,7 +907,7 @@
         # names in the database, but that eventually needs to be converted
         # into a valid system path
         p += self.repo_name.split(Repository.url_sep())
-        return os.path.join(*p)
+        return os.path.join(*map(safe_unicode, p))
 
     @property
     def cache_keys(self):
@@ -896,18 +937,6 @@
         return make_ui('db', clear_session=False)
 
     @classmethod
-    def inject_ui(cls, repo, extras={}):
-        from rhodecode.lib.vcs.backends.hg import MercurialRepository
-        from rhodecode.lib.vcs.backends.git import GitRepository
-        required = (MercurialRepository, GitRepository)
-        if not isinstance(repo, required):
-            raise Exception('repo must be instance of %s' % required)
-
-        # inject ui extra param to log this action via push logger
-        for k, v in extras.items():
-            repo._repo.ui.setconfig('rhodecode_extras', k, v)
-
-    @classmethod
     def is_valid(cls, repo_name):
         """
         returns True if given repo name is a valid filesystem repository
@@ -939,8 +968,17 @@
             enable_statistics=repo.enable_statistics,
             enable_locking=repo.enable_locking,
             enable_downloads=repo.enable_downloads,
-            last_changeset=repo.changeset_cache
+            last_changeset=repo.changeset_cache,
+            locked_by=User.get(self.locked[0]).get_api_data() \
+                if self.locked[0] else None,
+            locked_date=time_to_datetime(self.locked[1]) \
+                if self.locked[1] else None
         )
+        rc_config = RhodeCodeSetting.get_app_settings()
+        repository_fields = str2bool(rc_config.get('rhodecode_repository_fields'))
+        if repository_fields:
+            for f in self.extra_fields:
+                data[f.field_key_prefixed] = f.field_value
 
         return data
 
@@ -956,6 +994,10 @@
         Session().add(repo)
         Session().commit()
 
+    @classmethod
+    def getlock(cls, repo):
+        return repo.locked
+
     @property
     def last_db_change(self):
         return self.updated_on
@@ -1008,22 +1050,27 @@
         """
         from rhodecode.lib.vcs.backends.base import BaseChangeset
         if cs_cache is None:
-            cs_cache = self.get_changeset()
+            cs_cache = EmptyChangeset()
+            # use no-cache version here
+            scm_repo = self.scm_instance_no_cache()
+            if scm_repo:
+                cs_cache = scm_repo.get_changeset()
+
         if isinstance(cs_cache, BaseChangeset):
             cs_cache = cs_cache.__json__()
 
-        if (cs_cache != self.changeset_cache
-            or not self.last_change
-            or not self.changeset_cache):
+        if (cs_cache != self.changeset_cache or not self.changeset_cache):
             _default = datetime.datetime.fromtimestamp(0)
-            last_change = cs_cache.get('date') or self.last_change or _default
-            log.debug('updated repo %s with new cs cache %s' % (self, cs_cache))
+            last_change = cs_cache.get('date') or _default
+            log.debug('updated repo %s with new cs cache %s'
+                      % (self.repo_name, cs_cache))
             self.updated_on = last_change
             self.changeset_cache = cs_cache
             Session().add(self)
             Session().commit()
         else:
-            log.debug('Skipping repo:%s already with latest changes' % self)
+            log.debug('Skipping repo:%s already with latest changes'
+                      % self.repo_name)
 
     @property
     def tip(self):
@@ -1085,6 +1132,11 @@
                                       pr_id, pr_repo]
         return grouped
 
+    def _repo_size(self):
+        from rhodecode.lib import helpers as h
+        log.debug('calculating repository size...')
+        return h.format_byte_size(self.scm_instance.size)
+
     #==========================================================================
     # SCM CACHE INSTANCE
     #==========================================================================
@@ -1099,7 +1151,6 @@
         """
         CacheInvalidation.set_invalidate(repo_name=self.repo_name)
 
-    @LazyProperty
     def scm_instance_no_cache(self):
         return self.__get_instance()
 
@@ -1138,7 +1189,8 @@
         repo_full_path = self.repo_full_path
         try:
             alias = get_scm(repo_full_path)[0]
-            log.debug('Creating instance of %s repository' % alias)
+            log.debug('Creating instance of %s repository from %s'
+                      % (alias, repo_full_path))
             backend = get_backend(alias)
         except VCSError:
             log.error(traceback.format_exc())
@@ -1177,7 +1229,7 @@
     enable_locking = Column("enable_locking", Boolean(), nullable=False, unique=None, default=False)
 
     repo_group_to_perm = relationship('UserRepoGroupToPerm', cascade='all', order_by='UserRepoGroupToPerm.group_to_perm_id')
-    users_group_to_perm = relationship('UsersGroupRepoGroupToPerm', cascade='all')
+    users_group_to_perm = relationship('UserGroupRepoGroupToPerm', cascade='all')
 
     parent_group = relationship('RepoGroup', remote_side=group_id)
 
@@ -1190,15 +1242,14 @@
                                   self.group_name)
 
     @classmethod
-    def groups_choices(cls, check_perms=False):
+    def groups_choices(cls, groups=None, show_empty_group=True):
         from webhelpers.html import literal as _literal
-        from rhodecode.model.scm import ScmModel
-        groups = cls.query().all()
-        if check_perms:
-            #filter group user have access to, it's done
-            #magically inside ScmModel based on current user
-            groups = ScmModel().get_repos_groups(groups)
-        repo_groups = [('', '')]
+        if not groups:
+            groups = cls.query().all()
+
+        repo_groups = []
+        if show_empty_group:
+            repo_groups = [('-1', '-- %s --' % _('top level'))]
         sep = ' &raquo; '
         _name = lambda k: _literal(sep.join(k))
 
@@ -1311,7 +1362,7 @@
 
     def recursive_groups(self):
         """
-        Returns all children groups for this group including children of children 
+        Returns all children groups for this group including children of children
         """
         return self._recursive_objects(include_repos=False)
 
@@ -1339,10 +1390,10 @@
         ('repository.write', _('Repository write access')),
         ('repository.admin', _('Repository admin access')),
 
-        ('group.none', _('Repositories Group no access')),
-        ('group.read', _('Repositories Group read access')),
-        ('group.write', _('Repositories Group write access')),
-        ('group.admin', _('Repositories Group admin access')),
+        ('group.none', _('Repository group no access')),
+        ('group.read', _('Repository group read access')),
+        ('group.write', _('Repository group write access')),
+        ('group.admin', _('Repository group admin access')),
 
         ('hg.admin', _('RhodeCode Administrator')),
         ('hg.create.none', _('Repository creation disabled')),
@@ -1451,7 +1502,7 @@
     permission = relationship('Permission', lazy='joined')
 
 
-class UsersGroupRepoToPerm(Base, BaseModel):
+class UserGroupRepoToPerm(Base, BaseModel):
     __tablename__ = 'users_group_repo_to_perm'
     __table_args__ = (
         UniqueConstraint('repository_id', 'users_group_id', 'permission_id'),
@@ -1463,7 +1514,7 @@
     permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
     repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=None, default=None)
 
-    users_group = relationship('UsersGroup')
+    users_group = relationship('UserGroup')
     permission = relationship('Permission')
     repository = relationship('Repository')
 
@@ -1480,7 +1531,7 @@
         return u'<userGroup:%s => %s >' % (self.users_group, self.repository)
 
 
-class UsersGroupToPerm(Base, BaseModel):
+class UserGroupToPerm(Base, BaseModel):
     __tablename__ = 'users_group_to_perm'
     __table_args__ = (
         UniqueConstraint('users_group_id', 'permission_id',),
@@ -1491,7 +1542,7 @@
     users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None)
     permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
 
-    users_group = relationship('UsersGroup')
+    users_group = relationship('UserGroup')
     permission = relationship('Permission')
 
 
@@ -1513,7 +1564,7 @@
     permission = relationship('Permission')
 
 
-class UsersGroupRepoGroupToPerm(Base, BaseModel):
+class UserGroupRepoGroupToPerm(Base, BaseModel):
     __tablename__ = 'users_group_repo_group_to_perm'
     __table_args__ = (
         UniqueConstraint('users_group_id', 'group_id'),
@@ -1526,7 +1577,7 @@
     group_id = Column("group_id", Integer(), ForeignKey('groups.group_id'), nullable=False, unique=None, default=None)
     permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
 
-    users_group = relationship('UsersGroup')
+    users_group = relationship('UserGroup')
     permission = relationship('Permission')
     group = relationship('RepoGroup')
 
@@ -1581,9 +1632,13 @@
         {'extend_existing': True, 'mysql_engine': 'InnoDB',
          'mysql_charset': 'utf8'},
     )
+    # cache_id, not used
     cache_id = Column("cache_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
+    # cache_key as created by _get_cache_key
     cache_key = Column("cache_key", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
+    # cache_args is usually a repo_name, possibly with _README/_RSS/_ATOM suffix
     cache_args = Column("cache_args", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
+    # instance sets cache_active True when it is caching, other instances set cache_active to False to invalidate
     cache_active = Column("cache_active", Boolean(), nullable=True, unique=None, default=False)
 
     def __init__(self, cache_key, cache_args=''):
@@ -1595,43 +1650,27 @@
         return u"<%s('%s:%s')>" % (self.__class__.__name__,
                                   self.cache_id, self.cache_key)
 
-    @property
-    def prefix(self):
+    def get_prefix(self):
+        """
+        Guess prefix that might have been used in _get_cache_key to generate self.cache_key .
+        Only used for informational purposes in repo_edit.html .
+        """
         _split = self.cache_key.split(self.cache_args, 1)
-        if _split and len(_split) == 2:
+        if len(_split) == 2:
             return _split[0]
         return ''
 
     @classmethod
-    def clear_cache(cls):
-        cls.query().delete()
-
-    @classmethod
-    def _get_key(cls, key):
+    def _get_cache_key(cls, key):
         """
-        Wrapper for generating a key, together with a prefix
-
-        :param key:
+        Wrapper for generating a unique cache key for this instance and "key".
         """
         import rhodecode
-        prefix = ''
-        org_key = key
-        iid = rhodecode.CONFIG.get('instance_id')
-        if iid:
-            prefix = iid
-
-        return "%s%s" % (prefix, key), prefix, org_key
+        prefix = rhodecode.CONFIG.get('instance_id', '')
+        return "%s%s" % (prefix, key)
 
     @classmethod
-    def get_by_key(cls, key):
-        return cls.query().filter(cls.cache_key == key).scalar()
-
-    @classmethod
-    def get_by_repo_name(cls, repo_name):
-        return cls.query().filter(cls.cache_args == repo_name).all()
-
-    @classmethod
-    def _get_or_create_key(cls, key, repo_name, commit=True):
+    def _get_or_create_inv_obj(cls, key, repo_name, commit=True):
         inv_obj = Session().query(cls).filter(cls.cache_key == key).scalar()
         if not inv_obj:
             try:
@@ -1658,11 +1697,10 @@
         repo_name = remove_suffix(repo_name, '_RSS')
         repo_name = remove_suffix(repo_name, '_ATOM')
 
-        # adds instance prefix
-        key, _prefix, _org_key = cls._get_key(key)
-        inv = cls._get_or_create_key(key, repo_name)
+        cache_key = cls._get_cache_key(key)
+        inv = cls._get_or_create_inv_obj(cache_key, repo_name)
 
-        if inv and inv.cache_active is False:
+        if inv and not inv.cache_active:
             return inv
 
     @classmethod
@@ -1673,22 +1711,27 @@
 
         :param key:
         """
+        invalidated_keys = []
         if key:
-            key, _prefix, _org_key = cls._get_key(key)
-            inv_objs = Session().query(cls).filter(cls.cache_key == key).all()
-        elif repo_name:
+            assert not repo_name
+            cache_key = cls._get_cache_key(key)
+            inv_objs = Session().query(cls).filter(cls.cache_key == cache_key).all()
+        else:
+            assert repo_name
             inv_objs = Session().query(cls).filter(cls.cache_args == repo_name).all()
 
-        log.debug('marking %s key[s] for invalidation based on key=%s,repo_name=%s'
-                  % (len(inv_objs), key, repo_name))
         try:
             for inv_obj in inv_objs:
                 inv_obj.cache_active = False
+                log.debug('marking %s key for invalidation based on key=%s,repo_name=%s'
+                  % (inv_obj, key, safe_str(repo_name)))
+                invalidated_keys.append(inv_obj.cache_key)
                 Session().add(inv_obj)
             Session().commit()
         except Exception:
             log.error(traceback.format_exc())
             Session().rollback()
+        return invalidated_keys
 
     @classmethod
     def set_valid(cls, key):
@@ -1697,7 +1740,7 @@
 
         :param key:
         """
-        inv_obj = cls.get_by_key(key)
+        inv_obj = cls.query().filter(cls.cache_key == key).scalar()
         inv_obj.cache_active = True
         Session().add(inv_obj)
         Session().commit()
@@ -1708,28 +1751,26 @@
         class cachemapdict(dict):
 
             def __init__(self, *args, **kwargs):
-                fixkey = kwargs.get('fixkey')
-                if fixkey:
-                    del kwargs['fixkey']
-                self.fixkey = fixkey
+                self.fixkey = kwargs.pop('fixkey', False)
                 super(cachemapdict, self).__init__(*args, **kwargs)
 
             def __getattr__(self, name):
-                key = name
+                cache_key = name
                 if self.fixkey:
-                    key, _prefix, _org_key = cls._get_key(key)
-                if key in self.__dict__:
-                    return self.__dict__[key]
+                    cache_key = cls._get_cache_key(name)
+                if cache_key in self.__dict__:
+                    return self.__dict__[cache_key]
                 else:
-                    return self[key]
+                    return self[cache_key]
 
-            def __getitem__(self, key):
+            def __getitem__(self, name):
+                cache_key = name
                 if self.fixkey:
-                    key, _prefix, _org_key = cls._get_key(key)
+                    cache_key = cls._get_cache_key(name)
                 try:
-                    return super(cachemapdict, self).__getitem__(key)
+                    return super(cachemapdict, self).__getitem__(cache_key)
                 except KeyError:
-                    return
+                    return None
 
         cache_map = cachemapdict(fixkey=True)
         for obj in cls.query().all():
@@ -1882,6 +1923,10 @@
     def is_closed(self):
         return self.status == self.STATUS_CLOSED
 
+    @property
+    def last_review_status(self):
+        return self.statuses[-1].status if self.statuses else ''
+
     def __json__(self):
         return dict(
           revisions=self.revisions
--- a/rhodecode/model/forms.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/model/forms.py	Sun Apr 07 18:37:22 2013 +0200
@@ -94,14 +94,14 @@
     return _UserForm
 
 
-def UsersGroupForm(edit=False, old_data={}, available_members=[]):
-    class _UsersGroupForm(formencode.Schema):
+def UserGroupForm(edit=False, old_data={}, available_members=[]):
+    class _UserGroupForm(formencode.Schema):
         allow_extra_fields = True
         filter_extra_fields = True
 
         users_group_name = All(
             v.UnicodeString(strip=True, min=1, not_empty=True),
-            v.ValidUsersGroup(edit, old_data)
+            v.ValidUserGroup(edit, old_data)
         )
 
         users_group_active = v.StringBoolean(if_missing=False)
@@ -112,10 +112,11 @@
                 if_missing=None, not_empty=False
             )
 
-    return _UsersGroupForm
+    return _UserGroupForm
 
 
-def ReposGroupForm(edit=False, old_data={}, available_groups=[]):
+def ReposGroupForm(edit=False, old_data={}, available_groups=[],
+                   can_create_in_root=False):
     class _ReposGroupForm(formencode.Schema):
         allow_extra_fields = True
         filter_extra_fields = False
@@ -123,10 +124,15 @@
         group_name = All(v.UnicodeString(strip=True, min=1, not_empty=True),
                                v.SlugifyName())
         group_description = v.UnicodeString(strip=True, min=1,
-                                                not_empty=True)
-        group_parent_id = v.OneOf(available_groups, hideList=False,
-                                        testValueList=True,
-                                        if_missing=None, not_empty=False)
+                                                not_empty=False)
+        if edit:
+            #FIXME: do a special check that we cannot move a group to one of
+            #it's children
+            pass
+        group_parent_id = All(v.CanCreateGroup(can_create_in_root),
+                              v.OneOf(available_groups, hideList=False,
+                                      testValueList=True,
+                                      if_missing=None, not_empty=True))
         enable_locking = v.StringBoolean(if_missing=False)
         recursive = v.StringBoolean(if_missing=False)
         chained_validators = [v.ValidReposGroup(edit, old_data),
@@ -193,30 +199,32 @@
             user = All(v.UnicodeString(not_empty=True), v.ValidRepoUser())
 
         chained_validators = [v.ValidCloneUri(),
-                              v.ValidRepoName(edit, old_data),
-                              v.ValidPerms()]
+                              v.ValidRepoName(edit, old_data)]
     return _RepoForm
 
 
-def RepoSettingsForm(edit=False, old_data={}, supported_backends=BACKENDS.keys(),
-                     repo_groups=[], landing_revs=[]):
-    class _RepoForm(formencode.Schema):
+def RepoPermsForm():
+    class _RepoPermsForm(formencode.Schema):
         allow_extra_fields = True
         filter_extra_fields = False
-        repo_name = All(v.UnicodeString(strip=True, min=1, not_empty=True),
-                        v.SlugifyName())
-        repo_group = All(v.CanWriteGroup(old_data),
-                         v.OneOf(repo_groups, hideList=True))
-        repo_description = v.UnicodeString(strip=True, min=1, not_empty=False)
-        repo_private = v.StringBoolean(if_missing=False)
-        repo_landing_rev = v.OneOf(landing_revs, hideList=True)
-        clone_uri = All(v.UnicodeString(strip=True, min=1, not_empty=False))
+        chained_validators = [v.ValidPerms()]
+    return _RepoPermsForm
+
+
+def RepoFieldForm():
+    class _RepoFieldForm(formencode.Schema):
+        filter_extra_fields = True
+        allow_extra_fields = True
 
-        chained_validators = [v.ValidCloneUri(),
-                              v.ValidRepoName(edit, old_data),
-                              v.ValidPerms(),
-                              v.ValidSettings()]
-    return _RepoForm
+        new_field_key = All(v.FieldKey(),
+                            v.UnicodeString(strip=True, min=3, not_empty=True))
+        new_field_value = v.UnicodeString(not_empty=False, if_missing='')
+        new_field_type = v.OneOf(['str', 'unicode', 'list', 'tuple'],
+                                 if_missing='str')
+        new_field_label = v.UnicodeString(not_empty=False)
+        new_field_desc = v.UnicodeString(not_empty=False)
+
+    return _RepoFieldForm
 
 
 def RepoForkForm(edit=False, old_data={}, supported_backends=BACKENDS.keys(),
@@ -260,6 +268,7 @@
         rhodecode_stylify_metatags = v.StringBoolean(if_missing=False)
 
         rhodecode_lightweight_dashboard = v.StringBoolean(if_missing=False)
+        rhodecode_repository_fields = v.StringBoolean(if_missing=False)
         rhodecode_lightweight_journal = v.StringBoolean(if_missing=False)
 
     return _ApplicationVisualisationForm
@@ -332,10 +341,7 @@
         ldap_base_dn = v.UnicodeString(strip=True,)
         ldap_filter = v.UnicodeString(strip=True,)
         ldap_search_scope = v.OneOf(search_scope_choices)
-        ldap_attr_login = All(
-            v.AttrLoginValidator(),
-            v.UnicodeString(strip=True,)
-        )
+        ldap_attr_login = v.AttrLoginValidator()(not_empty=True)
         ldap_attr_firstname = v.UnicodeString(strip=True,)
         ldap_attr_lastname = v.UnicodeString(strip=True,)
         ldap_attr_email = v.UnicodeString(strip=True,)
@@ -372,4 +378,7 @@
         pullrequest_title = v.UnicodeString(strip=True, required=True, min=3)
         pullrequest_desc = v.UnicodeString(strip=True, required=False)
 
+        ancestor_rev = v.UnicodeString(strip=True, required=True)
+        merge_rev = v.UnicodeString(strip=True, required=True)
+
     return _PullRequestForm
--- a/rhodecode/model/notification.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/model/notification.py	Sun Apr 07 18:37:22 2013 +0200
@@ -28,12 +28,14 @@
 import logging
 import traceback
 
+from pylons import tmpl_context as c
 from pylons.i18n.translation import _
 
 import rhodecode
 from rhodecode.lib import helpers as h
 from rhodecode.model import BaseModel
 from rhodecode.model.db import Notification, User, UserNotification
+from rhodecode.model.meta import Session
 
 log = logging.getLogger(__name__)
 
@@ -54,7 +56,7 @@
 
     def create(self, created_by, subject, body, recipients=None,
                type_=Notification.TYPE_MESSAGE, with_email=True,
-               email_kwargs={}):
+               email_kwargs={}, email_subject=None):
         """
 
         Creates notification of given type
@@ -68,11 +70,12 @@
         :param type_: type of notification
         :param with_email: send email with this notification
         :param email_kwargs: additional dict to pass as args to email template
+        :param email_subject: use given subject as email subject
         """
         from rhodecode.lib.celerylib import tasks, run_task
 
         if recipients and not getattr(recipients, '__iter__', False):
-            raise Exception('recipients must be a list of iterable')
+            raise Exception('recipients must be a list or iterable')
 
         created_by_obj = self._get_user(created_by)
 
@@ -97,7 +100,7 @@
             body=body, recipients=recipients_objs, type_=type_
         )
 
-        if with_email is False:
+        if not with_email:
             return notif
 
         #don't send email to person who created this comment
@@ -105,9 +108,11 @@
 
         # send email with notification to all other participants
         for rec in rec_objs:
-            email_subject = NotificationModel().make_description(notif, False)
+            if not email_subject:
+                email_subject = NotificationModel()\
+                                    .make_description(notif, show_age=False)
             type_ = type_
-            email_body = body
+            email_body = None  # we set body to none, we just send HTML emails
             ## this is passed into template
             kwargs = {'subject': subject, 'body': h.rst_w_mentions(body)}
             kwargs.update(email_kwargs)
@@ -130,7 +135,7 @@
                         .filter(UserNotification.notification
                                 == notification)\
                         .one()
-                self.sa.delete(obj)
+                Session().delete(obj)
                 return True
         except Exception:
             log.error(traceback.format_exc())
@@ -141,7 +146,6 @@
         Get mentions for given user, filter them if filter dict is given
 
         :param user:
-        :type user:
         :param filter:
         """
         user = self._get_user(user)
@@ -167,7 +171,7 @@
                                 == notification)\
                         .one()
                 obj.read = True
-                self.sa.add(obj)
+                Session().add(obj)
                 return True
         except Exception:
             log.error(traceback.format_exc())
@@ -187,7 +191,7 @@
         # update on joined tables :(
         for obj in q.all():
             obj.read = True
-            self.sa.add(obj)
+            Session().add(obj)
 
     def get_unread_cnt_for_user(self, user):
         user = self._get_user(user)
@@ -217,32 +221,30 @@
         #alias
         _n = notification
         _map = {
-            _n.TYPE_CHANGESET_COMMENT: _('commented on commit at %(when)s'),
-            _n.TYPE_MESSAGE: _('sent message at %(when)s'),
-            _n.TYPE_MENTION: _('mentioned you at %(when)s'),
-            _n.TYPE_REGISTRATION: _('registered in RhodeCode at %(when)s'),
-            _n.TYPE_PULL_REQUEST: _('opened new pull request at %(when)s'),
-            _n.TYPE_PULL_REQUEST_COMMENT: _('commented on pull request at %(when)s')
+            _n.TYPE_CHANGESET_COMMENT: _('%(user)s commented on changeset at %(when)s'),
+            _n.TYPE_MESSAGE: _('%(user)s sent message at %(when)s'),
+            _n.TYPE_MENTION: _('%(user)s mentioned you at %(when)s'),
+            _n.TYPE_REGISTRATION: _('%(user)s registered in RhodeCode at %(when)s'),
+            _n.TYPE_PULL_REQUEST: _('%(user)s opened new pull request at %(when)s'),
+            _n.TYPE_PULL_REQUEST_COMMENT: _('%(user)s commented on pull request at %(when)s')
         }
+        tmpl = _map[notification.type_]
 
-        # action == _map string
-        tmpl = "%(user)s %(action)s "
         if show_age:
             when = h.age(notification.created_on)
         else:
             when = h.fmt_date(notification.created_on)
 
-        data = dict(
+        return tmpl % dict(
             user=notification.created_by_user.username,
-            action=_map[notification.type_]
-        )
-        return (tmpl % data) % {'when': when}
+            when=when,
+            )
 
 
 class EmailNotificationModel(BaseModel):
 
     TYPE_CHANGESET_COMMENT = Notification.TYPE_CHANGESET_COMMENT
-    TYPE_PASSWORD_RESET = 'passoword_link'
+    TYPE_PASSWORD_RESET = 'password_link'
     TYPE_REGISTRATION = Notification.TYPE_REGISTRATION
     TYPE_PULL_REQUEST = Notification.TYPE_PULL_REQUEST
     TYPE_PULL_REQUEST_COMMENT = Notification.TYPE_PULL_REQUEST_COMMENT
@@ -272,7 +274,8 @@
         email_template = self._tmpl_lookup.get_template(base)
         # translator and helpers inject
         _kwargs = {'_': _,
-                   'h': h}
+                   'h': h,
+                   'c': c}
         _kwargs.update(kwargs)
         log.debug('rendering tmpl %s with kwargs %s' % (base, _kwargs))
         return email_template.render(**_kwargs)
--- a/rhodecode/model/permission.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/model/permission.py	Sun Apr 07 18:37:22 2013 +0200
@@ -118,8 +118,11 @@
                 for r2p in self.sa.query(UserRepoToPerm)\
                                .filter(UserRepoToPerm.user == perm_user)\
                                .all():
-                    r2p.permission = _def
-                    self.sa.add(r2p)
+
+                    #don't reset PRIVATE repositories
+                    if not r2p.repository.private:
+                        r2p.permission = _def
+                        self.sa.add(r2p)
 
             if form_result['overwrite_default_group'] == True:
                 _def_name = form_result['default_group_perm'].split('group.')[-1]
--- a/rhodecode/model/pull_request.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/model/pull_request.py	Sun Apr 07 18:37:22 2013 +0200
@@ -24,22 +24,22 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 import logging
-import binascii
 import datetime
 import re
 
 from pylons.i18n.translation import _
 
 from rhodecode.model.meta import Session
-from rhodecode.lib import helpers as h
+from rhodecode.lib import helpers as h, unionrepo
 from rhodecode.model import BaseModel
 from rhodecode.model.db import PullRequest, PullRequestReviewers, Notification,\
     ChangesetStatus
 from rhodecode.model.notification import NotificationModel
 from rhodecode.lib.utils2 import safe_unicode
 
-from rhodecode.lib.vcs.utils.hgcompat import discovery, localrepo, scmutil, \
-    findcommonoutgoing
+from rhodecode.lib.vcs.utils.hgcompat import scmutil
+from rhodecode.lib.vcs.utils import safe_str
+from rhodecode.lib.vcs.backends.base import EmptyChangeset
 
 log = logging.getLogger(__name__)
 
@@ -53,7 +53,10 @@
 
     def get_all(self, repo):
         repo = self._get_repo(repo)
-        return PullRequest.query().filter(PullRequest.other_repo == repo).all()
+        return PullRequest.query()\
+                .filter(PullRequest.other_repo == repo)\
+                .order_by(PullRequest.created_on.desc())\
+                .all()
 
     def create(self, created_by, org_repo, org_ref, other_repo, other_ref,
                revisions, reviewers, title, description=None):
@@ -72,13 +75,13 @@
         new.title = title
         new.description = description
         new.author = created_by_user
-        self.sa.add(new)
+        Session().add(new)
         Session().flush()
         #members
-        for member in reviewers:
+        for member in set(reviewers):
             _usr = self._get_user(member)
             reviewer = PullRequestReviewers(_usr, new)
-            self.sa.add(reviewer)
+            Session().add(reviewer)
 
         #reset state to under-review
         ChangesetStatusModel().set_status(
@@ -87,7 +90,8 @@
             user=created_by_user,
             pull_request=new
         )
-
+        revision_data = [(x.raw_id, x.message)
+                         for x in map(org_repo.get_changeset, revisions)]
         #notification to reviewers
         notif = NotificationModel()
 
@@ -97,8 +101,9 @@
         )
         subject = safe_unicode(
             h.link_to(
-              _('%(user)s wants you to review pull request #%(pr_id)s') % \
+              _('%(user)s wants you to review pull request #%(pr_id)s: %(pr_title)s') % \
                 {'user': created_by_user.username,
+                 'pr_title': new.title,
                  'pr_id': new.pull_request_id},
                 pr_url
             )
@@ -110,8 +115,9 @@
             'pr_repo_url': h.url('summary_home', repo_name=other_repo.repo_name,
                                  qualified=True,),
             'pr_url': pr_url,
-            'pr_revisions': revisions
+            'pr_revisions': revision_data
         }
+
         notif.create(created_by=created_by_user, subject=subject, body=body,
                      recipients=reviewers,
                      type_=Notification.TYPE_PULL_REQUEST, email_kwargs=kwargs)
@@ -135,7 +141,7 @@
         for uid in to_add:
             _usr = self._get_user(uid)
             reviewer = PullRequestReviewers(_usr, pull_request)
-            self.sa.add(reviewer)
+            Session().add(reviewer)
 
         for uid in to_remove:
             reviewer = PullRequestReviewers.query()\
@@ -143,7 +149,7 @@
                             PullRequestReviewers.pull_request==pull_request)\
                     .scalar()
             if reviewer:
-                self.sa.delete(reviewer)
+                Session().delete(reviewer)
 
     def delete(self, pull_request):
         pull_request = self.__get_pull_request(pull_request)
@@ -153,13 +159,12 @@
         pull_request = self.__get_pull_request(pull_request)
         pull_request.status = PullRequest.STATUS_CLOSED
         pull_request.updated_on = datetime.datetime.now()
-        self.sa.add(pull_request)
+        Session().add(pull_request)
 
-    def _get_changesets(self, alias, org_repo, org_ref, other_repo, other_ref,
-                        discovery_data):
+    def _get_changesets(self, alias, org_repo, org_ref, other_repo, other_ref, merge):
         """
-        Returns a list of changesets that are incoming from org_repo@org_ref
-        to other_repo@other_ref
+        Returns a list of changesets that can be merged from org_repo@org_ref
+        to other_repo@other_ref ... and the ancestor that would be used for merge
 
         :param org_repo:
         :param org_ref:
@@ -168,110 +173,79 @@
         :param tmp:
         """
 
-        changesets = []
-        #case two independent repos
-        common, incoming, rheads = discovery_data
-        if org_repo != other_repo:
-            revs = [
-                org_repo._repo.lookup(org_ref[1]),
-                org_repo._repo.lookup(other_ref[1]),
-            ]
+        ancestor = None
+
+        if alias == 'hg':
+            # lookup up the exact node id
+            _revset_predicates = {
+                    'branch': 'branch',
+                    'book': 'bookmark',
+                    'tag': 'tag',
+                    'rev': 'id',
+                }
 
-            obj = findcommonoutgoing(org_repo._repo,
-                        localrepo.locallegacypeer(other_repo._repo.local()),
-                        revs,
-                        force=True)
-            revs = obj.missing
+            org_rev_spec = "%s('%s')" % (_revset_predicates[org_ref[0]],
+                                         safe_str(org_ref[1]))
+            if org_ref[1] == EmptyChangeset().raw_id:
+                org_rev = org_ref[1]
+            else:
+                org_rev = org_repo._repo[scmutil.revrange(org_repo._repo,
+                                                          [org_rev_spec])[-1]]
+            other_rev_spec = "%s('%s')" % (_revset_predicates[other_ref[0]],
+                                           safe_str(other_ref[1]))
+            if other_ref[1] == EmptyChangeset().raw_id:
+                other_rev = other_ref[1]
+            else:
+                other_rev = other_repo._repo[scmutil.revrange(other_repo._repo,
+                                                        [other_rev_spec])[-1]]
 
-            for cs in map(binascii.hexlify, revs):
-                _cs = org_repo.get_changeset(cs)
-                changesets.append(_cs)
-            # in case we have revisions filter out the ones not in given range
-            if org_ref[0] == 'rev' and other_ref[0] == 'rev':
-                revs = [x.raw_id for x in changesets]
-                start = org_ref[1]
-                stop = other_ref[1]
-                changesets = changesets[revs.index(start):revs.index(stop) + 1]
-        else:
+            #case two independent repos
+            if org_repo != other_repo:
+                hgrepo = unionrepo.unionrepository(other_repo.baseui,
+                                                   other_repo.path,
+                                                   org_repo.path)
+                # all the changesets we are looking for will be in other_repo,
+                # so rev numbers from hgrepo can be used in other_repo
+
             #no remote compare do it on the same repository
-            if alias == 'hg':
-                _revset_predicates = {
-                        'branch': 'branch',
-                        'book': 'bookmark',
-                        'tag': 'tag',
-                        'rev': 'id',
-                    }
+            else:
+                hgrepo = other_repo._repo
+
+            if merge:
+                revs = ["ancestors(id('%s')) and not ancestors(id('%s')) and not id('%s')" %
+                        (other_rev, org_rev, org_rev)]
 
-                revs = [
-                    "ancestors(%s('%s')) and not ancestors(%s('%s'))" % (
-                        _revset_predicates[other_ref[0]], other_ref[1],
-                        _revset_predicates[org_ref[0]], org_ref[1],
-                   )
-                ]
+                ancestors = scmutil.revrange(hgrepo,
+                     ["ancestor(id('%s'), id('%s'))" % (org_rev, other_rev)])
+                if len(ancestors) == 1:
+                    ancestor = hgrepo[ancestors[0]].hex()
+            else:
+                # TODO: have both + and - changesets
+                revs = ["id('%s') :: id('%s') - id('%s')" %
+                        (org_rev, other_rev, org_rev)]
 
-                out = scmutil.revrange(org_repo._repo, revs)
-                for cs in (out):
-                    changesets.append(org_repo.get_changeset(cs))
-            elif alias == 'git':
-                so, se = org_repo.run_git_command(
-                    'log --reverse --pretty="format: %%H" -s -p %s..%s' % (org_ref[1],
-                                                                     other_ref[1])
-                )
-                ids = re.findall(r'[0-9a-fA-F]{40}', so)
-                for cs in (ids):
-                    changesets.append(org_repo.get_changeset(cs))
+            changesets = [other_repo.get_changeset(cs)
+                          for cs in scmutil.revrange(hgrepo, revs)]
 
-        return changesets
+        elif alias == 'git':
+            assert org_repo == other_repo, (org_repo, other_repo) # no git support for different repos
+            so, se = org_repo.run_git_command(
+                'log --reverse --pretty="format: %%H" -s -p %s..%s' % (org_ref[1],
+                                                                       other_ref[1])
+            )
+            changesets = [org_repo.get_changeset(cs)
+                          for cs in re.findall(r'[0-9a-fA-F]{40}', so)]
 
-    def _get_discovery(self, org_repo, org_ref, other_repo, other_ref):
+        return changesets, ancestor
+
+    def get_compare_data(self, org_repo, org_ref, other_repo, other_ref, merge):
         """
-        Get's mercurial discovery data used to calculate difference between
-        repos and refs
+        Returns incoming changesets for mercurial repositories
 
         :param org_repo:
-        :type org_repo:
         :param org_ref:
-        :type org_ref:
         :param other_repo:
-        :type other_repo:
         :param other_ref:
-        :type other_ref:
-        """
-
-        _org_repo = org_repo._repo
-        org_rev_type, org_rev = org_ref
-
-        _other_repo = other_repo._repo
-        other_rev_type, other_rev = other_ref
-
-        log.debug('Doing discovery for %s@%s vs %s@%s' % (
-                        org_repo, org_ref, other_repo, other_ref)
-        )
-
-        #log.debug('Filter heads are %s[%s]' % ('', org_ref[1]))
-        org_peer = localrepo.locallegacypeer(_org_repo.local())
-        tmp = discovery.findcommonincoming(
-                  repo=_other_repo,  # other_repo we check for incoming
-                  remote=org_peer,  # org_repo source for incoming
-#                  heads=[_other_repo[other_rev].node(),
-#                         _org_repo[org_rev].node()],
-                  force=True
-        )
-        return tmp
-
-    def get_compare_data(self, org_repo, org_ref, other_repo, other_ref):
-        """
-        Returns a tuple of incomming changesets, and discoverydata cache for
-        mercurial repositories
-
-        :param org_repo:
-        :type org_repo:
-        :param org_ref:
-        :type org_ref:
-        :param other_repo:
-        :type other_repo:
-        :param other_ref:
-        :type other_ref:
         """
 
         if len(org_ref) != 2 or not isinstance(org_ref, (list, tuple)):
@@ -280,16 +254,8 @@
         if len(other_ref) != 2 or not isinstance(org_ref, (list, tuple)):
             raise Exception('other_ref must be a two element list/tuple')
 
-        org_repo_scm = org_repo.scm_instance
-        other_repo_scm = other_repo.scm_instance
-
-        alias = org_repo.scm_instance.alias
-        discovery_data = [None, None, None]
-        if alias == 'hg':
-            discovery_data = self._get_discovery(org_repo_scm, org_ref,
-                                               other_repo_scm, other_ref)
-        cs_ranges = self._get_changesets(alias,
-                                         org_repo_scm, org_ref,
-                                         other_repo_scm, other_ref,
-                                         discovery_data)
-        return cs_ranges, discovery_data
+        cs_ranges, ancestor = self._get_changesets(org_repo.scm_instance.alias,
+                                                   org_repo.scm_instance, org_ref,
+                                                   other_repo.scm_instance, other_ref,
+                                                   merge)
+        return cs_ranges, ancestor
--- a/rhodecode/model/repo.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/model/repo.py	Sun Apr 07 18:37:22 2013 +0200
@@ -38,10 +38,11 @@
 
 from rhodecode.model import BaseModel
 from rhodecode.model.db import Repository, UserRepoToPerm, User, Permission, \
-    Statistics, UsersGroup, UsersGroupRepoToPerm, RhodeCodeUi, RepoGroup,\
-    RhodeCodeSetting
+    Statistics, UserGroup, UserGroupRepoToPerm, RhodeCodeUi, RepoGroup,\
+    RhodeCodeSetting, RepositoryField
 from rhodecode.lib import helpers as h
 from rhodecode.lib.auth import HasRepoPermissionAny
+from rhodecode.lib.exceptions import AttachedForksError
 
 log = logging.getLogger(__name__)
 
@@ -52,8 +53,8 @@
     URL_SEPARATOR = Repository.url_sep()
 
     def __get_users_group(self, users_group):
-        return self._get_instance(UsersGroup, users_group,
-                                  callback=UsersGroup.get_by_group_name)
+        return self._get_instance(UserGroup, users_group,
+                                  callback=UserGroup.get_by_group_name)
 
     def _get_repos_group(self, repos_group):
         return self._get_instance(RepoGroup, repos_group,
@@ -118,8 +119,8 @@
         )
 
     def get_users_groups_js(self):
-        users_groups = self.sa.query(UsersGroup)\
-            .filter(UsersGroup.users_group_active == True).all()
+        users_groups = self.sa.query(UserGroup)\
+            .filter(UserGroup.users_group_active == True).all()
 
         return json.dumps([
             {
@@ -142,7 +143,15 @@
         kwargs.update(dict(_=_, h=h, c=c))
         return tmpl.render(*args, **kwargs)
 
-    def get_repos_as_dict(self, repos_list=None, admin=False, perm_check=True):
+    @classmethod
+    def update_repoinfo(cls, repositories=None):
+        if not repositories:
+            repositories = Repository.getAll()
+        for repo in repositories:
+            repo.update_changeset_cache()
+
+    def get_repos_as_dict(self, repos_list=None, admin=False, perm_check=True,
+                          super_user_actions=False):
         _render = self._render_datatable
 
         def quick_menu(repo_name):
@@ -174,7 +183,7 @@
                 return h.urlify_text(h.truncate(desc, 60))
 
         def repo_actions(repo_name):
-            return _render('repo_actions', repo_name)
+            return _render('repo_actions', repo_name, super_user_actions)
 
         def owner_actions(user_id, username):
             return _render('user_name', user_id, username)
@@ -232,7 +241,7 @@
             return None
 
         defaults = repo_info.get_dict()
-        group, repo_name = repo_info.groups_and_repo
+        group, repo_name, repo_name_full = repo_info.groups_and_repo
         defaults['repo_name'] = repo_name
         defaults['repo_group'] = getattr(group[-1] if group else None,
                                          'group_id', None)
@@ -271,28 +280,6 @@
         try:
             cur_repo = self.get_by_repo_name(org_repo_name, cache=False)
 
-            # update permissions
-            for member, perm, member_type in kwargs['perms_updates']:
-                if member_type == 'user':
-                    # this updates existing one
-                    RepoModel().grant_user_permission(
-                        repo=cur_repo, user=member, perm=perm
-                    )
-                else:
-                    RepoModel().grant_users_group_permission(
-                        repo=cur_repo, group_name=member, perm=perm
-                    )
-            # set new permissions
-            for member, perm, member_type in kwargs['perms_new']:
-                if member_type == 'user':
-                    RepoModel().grant_user_permission(
-                        repo=cur_repo, user=member, perm=perm
-                    )
-                else:
-                    RepoModel().grant_users_group_permission(
-                        repo=cur_repo, group_name=member, perm=perm
-                    )
-
             if 'user' in kwargs:
                 cur_repo.user = User.get_by_username(kwargs['user'])
 
@@ -311,7 +298,20 @@
 
             new_name = cur_repo.get_new_name(kwargs['repo_name'])
             cur_repo.repo_name = new_name
+            #if private flag is set, reset default permission to NONE
 
+            if kwargs.get('repo_private'):
+                EMPTY_PERM = 'repository.none'
+                RepoModel().grant_user_permission(
+                    repo=cur_repo, user='default', perm=EMPTY_PERM
+                )
+            #handle extra fields
+            for field in filter(lambda k: k.startswith(RepositoryField.PREFIX), kwargs):
+                k = RepositoryField.un_prefix_key(field)
+                ex_field = RepositoryField.get_by_key_name(key=k, repo=cur_repo)
+                if ex_field:
+                    ex_field.field_value = kwargs[field]
+                    self.sa.add(ex_field)
             self.sa.add(cur_repo)
 
             if org_repo_name != new_name:
@@ -319,7 +319,7 @@
                 self.__rename_repo(old=org_repo_name, new=new_name)
 
             return cur_repo
-        except:
+        except Exception:
             log.error(traceback.format_exc())
             raise
 
@@ -394,15 +394,15 @@
                     repo = fork_of
                     user_perms = UserRepoToPerm.query()\
                         .filter(UserRepoToPerm.repository == repo).all()
-                    group_perms = UsersGroupRepoToPerm.query()\
-                        .filter(UsersGroupRepoToPerm.repository == repo).all()
+                    group_perms = UserGroupRepoToPerm.query()\
+                        .filter(UserGroupRepoToPerm.repository == repo).all()
 
                     for perm in user_perms:
                         UserRepoToPerm.create(perm.user, new_repo,
                                               perm.permission)
 
                     for perm in group_perms:
-                        UsersGroupRepoToPerm.create(perm.users_group, new_repo,
+                        UserGroupRepoToPerm.create(perm.users_group, new_repo,
                                                     perm.permission)
                 else:
                     _create_default_perms()
@@ -420,7 +420,7 @@
             ScmModel(self.sa).toggle_following_repo(new_repo.repo_id,
                                                     owner.user_id)
             return new_repo
-        except:
+        except Exception:
             log.error(traceback.format_exc())
             raise
 
@@ -466,9 +466,27 @@
         from rhodecode.lib.celerylib import tasks, run_task
         run_task(tasks.create_repo_fork, form_data, cur_user)
 
-    def delete(self, repo):
+    def delete(self, repo, forks=None):
+        """
+        Delete given repository, forks parameter defines what do do with
+        attached forks. Throws AttachedForksError if deleted repo has attached
+        forks
+
+        :param repo:
+        :param forks: str 'delete' or 'detach'
+        """
         repo = self._get_repo(repo)
         if repo:
+            if forks == 'detach':
+                for r in repo.forks:
+                    r.fork = None
+                    self.sa.add(r)
+            elif forks == 'delete':
+                for r in repo.forks:
+                    self.delete(r, forks='delete')
+            elif [f for f in repo.forks]:
+                raise AttachedForksError()
+
             old_repo_dict = repo.get_dict()
             owner = repo.user
             try:
@@ -476,7 +494,7 @@
                 self.__delete_repo(repo)
                 log_delete_repository(old_repo_dict,
                                       deleted_by=owner.username)
-            except:
+            except Exception:
                 log.error(traceback.format_exc())
                 raise
 
@@ -528,12 +546,12 @@
 
     def grant_users_group_permission(self, repo, group_name, perm):
         """
-        Grant permission for users group on given repository, or update
+        Grant permission for user group on given repository, or update
         existing one if found
 
         :param repo: Instance of Repository, repository_id, or repository name
         :param group_name: Instance of UserGroup, users_group_id,
-            or users group name
+            or user group name
         :param perm: Instance of Permission, or permission_name
         """
         repo = self._get_repo(repo)
@@ -541,14 +559,14 @@
         permission = self._get_perm(perm)
 
         # check if we have that permission already
-        obj = self.sa.query(UsersGroupRepoToPerm)\
-            .filter(UsersGroupRepoToPerm.users_group == group_name)\
-            .filter(UsersGroupRepoToPerm.repository == repo)\
+        obj = self.sa.query(UserGroupRepoToPerm)\
+            .filter(UserGroupRepoToPerm.users_group == group_name)\
+            .filter(UserGroupRepoToPerm.repository == repo)\
             .scalar()
 
         if obj is None:
             # create new
-            obj = UsersGroupRepoToPerm()
+            obj = UserGroupRepoToPerm()
 
         obj.repository = repo
         obj.users_group = group_name
@@ -558,18 +576,18 @@
 
     def revoke_users_group_permission(self, repo, group_name):
         """
-        Revoke permission for users group on given repository
+        Revoke permission for user group on given repository
 
         :param repo: Instance of Repository, repository_id, or repository name
         :param group_name: Instance of UserGroup, users_group_id,
-            or users group name
+            or user group name
         """
         repo = self._get_repo(repo)
         group_name = self.__get_users_group(group_name)
 
-        obj = self.sa.query(UsersGroupRepoToPerm)\
-            .filter(UsersGroupRepoToPerm.repository == repo)\
-            .filter(UsersGroupRepoToPerm.users_group == group_name)\
+        obj = self.sa.query(UserGroupRepoToPerm)\
+            .filter(UserGroupRepoToPerm.repository == repo)\
+            .filter(UserGroupRepoToPerm.users_group == group_name)\
             .scalar()
         if obj:
             self.sa.delete(obj)
@@ -581,13 +599,13 @@
 
         :param repo_name:
         """
+        repo = self._get_repo(repo_name)
         try:
             obj = self.sa.query(Statistics)\
-                    .filter(Statistics.repository ==
-                            self.get_by_repo_name(repo_name))\
-                    .one()
-            self.sa.delete(obj)
-        except:
+                    .filter(Statistics.repository == repo).scalar()
+            if obj:
+                self.sa.delete(obj)
+        except Exception:
             log.error(traceback.format_exc())
             raise
 
--- a/rhodecode/model/repo_permission.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/model/repo_permission.py	Sun Apr 07 18:37:22 2013 +0200
@@ -26,7 +26,7 @@
 
 import logging
 from rhodecode.model import BaseModel
-from rhodecode.model.db import UserRepoToPerm, UsersGroupRepoToPerm, \
+from rhodecode.model.db import UserRepoToPerm, UserGroupRepoToPerm, \
     Permission
 
 log = logging.getLogger(__name__)
@@ -64,9 +64,9 @@
             self.sa.delete(current)
 
     def get_users_group_permission(self, repository, users_group):
-        return UsersGroupRepoToPerm.query() \
-                .filter(UsersGroupRepoToPerm.users_group == users_group) \
-                .filter(UsersGroupRepoToPerm.repository == repository) \
+        return UserGroupRepoToPerm.query() \
+                .filter(UserGroupRepoToPerm.users_group == users_group) \
+                .filter(UserGroupRepoToPerm.repository == repository) \
                 .scalar()
 
     def update_users_group_permission(self, repository, users_group,
@@ -77,7 +77,7 @@
             if not current.permission is permission:
                 current.permission = permission
         else:
-            p = UsersGroupRepoToPerm()
+            p = UserGroupRepoToPerm()
             p.users_group = users_group
             p.repository = repository
             p.permission = permission
--- a/rhodecode/model/repos_group.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/model/repos_group.py	Sun Apr 07 18:37:22 2013 +0200
@@ -3,7 +3,7 @@
     rhodecode.model.user_group
     ~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-    users groups model for RhodeCode
+    repo group model for RhodeCode
 
     :created_on: Jan 25, 2011
     :author: marcink
@@ -33,7 +33,7 @@
 
 from rhodecode.model import BaseModel
 from rhodecode.model.db import RepoGroup, RhodeCodeUi, UserRepoGroupToPerm, \
-    User, Permission, UsersGroupRepoGroupToPerm, UsersGroup, Repository
+    User, Permission, UserGroupRepoGroupToPerm, UserGroup, Repository
 
 log = logging.getLogger(__name__)
 
@@ -43,8 +43,8 @@
     cls = RepoGroup
 
     def __get_users_group(self, users_group):
-        return self._get_instance(UsersGroup, users_group,
-                                  callback=UsersGroup.get_by_group_name)
+        return self._get_instance(UserGroup, users_group,
+                                  callback=UserGroup.get_by_group_name)
 
     def _get_repos_group(self, repos_group):
         return self._get_instance(RepoGroup, repos_group,
@@ -79,7 +79,7 @@
 
     def __create_group(self, group_name):
         """
-        makes repositories group on filesystem
+        makes repository group on filesystem
 
         :param repo_name:
         :param parent_id:
@@ -104,7 +104,7 @@
             log.debug('skipping group rename')
             return
 
-        log.debug('renaming repos group from %s to %s' % (old, new))
+        log.debug('renaming repository group from %s to %s' % (old, new))
 
         old_path = os.path.join(self.repos_path, old)
         new_path = os.path.join(self.repos_path, new)
@@ -140,16 +140,21 @@
                                           group.name)
                 shutil.move(rm_path, os.path.join(self.repos_path, _d))
 
-    def create(self, group_name, group_description, parent=None, just_db=False):
+    def create(self, group_name, group_description, owner, parent=None, just_db=False):
         try:
             new_repos_group = RepoGroup()
-            new_repos_group.group_description = group_description
+            new_repos_group.group_description = group_description or group_name
             new_repos_group.parent_group = self._get_repos_group(parent)
             new_repos_group.group_name = new_repos_group.get_new_name(group_name)
 
             self.sa.add(new_repos_group)
             self._create_default_perms(new_repos_group)
 
+            #create an ADMIN permission for owner, later owner should go into
+            #the owner field of groups
+            self.grant_user_permission(repos_group=new_repos_group,
+                                       user=owner, perm='group.admin')
+
             if not just_db:
                 # we need to flush here, in order to check if database won't
                 # throw any exceptions, create filesystem dirs at the very end
@@ -157,7 +162,7 @@
                 self.__create_group(new_repos_group.group_name)
 
             return new_repos_group
-        except:
+        except Exception:
             log.error(traceback.format_exc())
             raise
 
@@ -213,7 +218,7 @@
                 if member_type == 'user':
                     # this updates also current one if found
                     _set_perm_user(obj, user=member, perm=perm)
-                ## set for users group
+                ## set for user group
                 else:
                     _set_perm_group(obj, users_group=member, perm=perm)
             # set new permissions
@@ -229,10 +234,10 @@
                 break
         return updates
 
-    def update(self, repos_group_id, form_data):
+    def update(self, repos_group, form_data):
 
         try:
-            repos_group = RepoGroup.get(repos_group_id)
+            repos_group = self._get_repos_group(repos_group)
             recursive = form_data['recursive']
             # iterate over all members(if in recursive mode) of this groups and
             # set the permissions !
@@ -278,7 +283,7 @@
             self.__rename_group(old_path, new_path)
 
             return repos_group
-        except:
+        except Exception:
             log.error(traceback.format_exc())
             raise
 
@@ -287,18 +292,18 @@
         try:
             self.sa.delete(repos_group)
             self.__delete_group(repos_group, force_delete)
-        except:
+        except Exception:
             log.error('Error removing repos_group %s' % repos_group)
             raise
 
     def delete_permission(self, repos_group, obj, obj_type, recursive):
         """
         Revokes permission for repos_group for given obj(user or users_group),
-        obj_type can be user or users group
+        obj_type can be user or user group
 
         :param repos_group:
-        :param obj: user or users group id
-        :param obj_type: user or users group type
+        :param obj: user or user group id
+        :param obj_type: user or user group type
         :param recursive: recurse to all children of group
         """
         from rhodecode.model.repo import RepoModel
@@ -332,7 +337,7 @@
 
     def grant_user_permission(self, repos_group, user, perm):
         """
-        Grant permission for user on given repositories group, or update
+        Grant permission for user on given repository group, or update
         existing one if found
 
         :param repos_group: Instance of ReposGroup, repositories_group_id,
@@ -361,7 +366,7 @@
 
     def revoke_user_permission(self, repos_group, user):
         """
-        Revoke permission for user on given repositories group
+        Revoke permission for user on given repository group
 
         :param repos_group: Instance of ReposGroup, repositories_group_id,
             or repositories_group name
@@ -381,13 +386,13 @@
 
     def grant_users_group_permission(self, repos_group, group_name, perm):
         """
-        Grant permission for users group on given repositories group, or update
+        Grant permission for user group on given repository group, or update
         existing one if found
 
         :param repos_group: Instance of ReposGroup, repositories_group_id,
             or repositories_group name
         :param group_name: Instance of UserGroup, users_group_id,
-            or users group name
+            or user group name
         :param perm: Instance of Permission, or permission_name
         """
         repos_group = self._get_repos_group(repos_group)
@@ -395,14 +400,14 @@
         permission = self._get_perm(perm)
 
         # check if we have that permission already
-        obj = self.sa.query(UsersGroupRepoGroupToPerm)\
-            .filter(UsersGroupRepoGroupToPerm.group == repos_group)\
-            .filter(UsersGroupRepoGroupToPerm.users_group == group_name)\
+        obj = self.sa.query(UserGroupRepoGroupToPerm)\
+            .filter(UserGroupRepoGroupToPerm.group == repos_group)\
+            .filter(UserGroupRepoGroupToPerm.users_group == group_name)\
             .scalar()
 
         if obj is None:
             # create new
-            obj = UsersGroupRepoGroupToPerm()
+            obj = UserGroupRepoGroupToPerm()
 
         obj.group = repos_group
         obj.users_group = group_name
@@ -412,19 +417,19 @@
 
     def revoke_users_group_permission(self, repos_group, group_name):
         """
-        Revoke permission for users group on given repositories group
+        Revoke permission for user group on given repository group
 
         :param repos_group: Instance of ReposGroup, repositories_group_id,
             or repositories_group name
         :param group_name: Instance of UserGroup, users_group_id,
-            or users group name
+            or user group name
         """
         repos_group = self._get_repos_group(repos_group)
         group_name = self.__get_users_group(group_name)
 
-        obj = self.sa.query(UsersGroupRepoGroupToPerm)\
-            .filter(UsersGroupRepoGroupToPerm.group == repos_group)\
-            .filter(UsersGroupRepoGroupToPerm.users_group == group_name)\
+        obj = self.sa.query(UserGroupRepoGroupToPerm)\
+            .filter(UserGroupRepoGroupToPerm.group == repos_group)\
+            .filter(UserGroupRepoGroupToPerm.users_group == group_name)\
             .scalar()
         if obj:
             self.sa.delete(obj)
--- a/rhodecode/model/scm.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/model/scm.py	Sun Apr 07 18:37:22 2013 +0200
@@ -44,13 +44,15 @@
 
 from rhodecode import BACKENDS
 from rhodecode.lib import helpers as h
-from rhodecode.lib.utils2 import safe_str, safe_unicode
+from rhodecode.lib.utils2 import safe_str, safe_unicode, get_server_url,\
+    _set_extras
 from rhodecode.lib.auth import HasRepoPermissionAny, HasReposGroupPermissionAny
 from rhodecode.lib.utils import get_filesystem_repos, make_ui, \
     action_logger, REMOVED_REPO_PAT
 from rhodecode.model import BaseModel
 from rhodecode.model.db import Repository, RhodeCodeUi, CacheInvalidation, \
     UserFollowing, UserLog, User, RepoGroup, PullRequest
+from rhodecode.lib.hooks import log_push_action
 
 log = logging.getLogger(__name__)
 
@@ -77,11 +79,15 @@
     super fast
     """
 
-    def __init__(self, db_repo_list, repos_path, order_by=None):
+    def __init__(self, db_repo_list, repos_path, order_by=None, perm_set=None):
         self.db_repo_list = db_repo_list
         self.repos_path = repos_path
         self.order_by = order_by
         self.reversed = (order_by or '').startswith('-')
+        if not perm_set:
+            perm_set = ['repository.read', 'repository.write',
+                        'repository.admin']
+        self.perm_set = perm_set
 
     def __len__(self):
         return len(self.db_repo_list)
@@ -98,20 +104,21 @@
             scmr = dbr.scm_instance_cached(cache_map)
             # check permission at this level
             if not HasRepoPermissionAny(
-                'repository.read', 'repository.write', 'repository.admin'
+                *self.perm_set
             )(dbr.repo_name, 'get repo check'):
                 continue
 
-            if scmr is None:
+            try:
+                last_change = scmr.last_change
+                tip = h.get_changeset_safe(scmr, 'tip')
+            except Exception:
                 log.error(
                     '%s this repository is present in database but it '
-                    'cannot be created as an scm instance' % dbr.repo_name
+                    'cannot be created as an scm instance, org_exc:%s'
+                    % (dbr.repo_name, traceback.format_exc())
                 )
                 continue
 
-            last_change = scmr.last_change
-            tip = h.get_changeset_safe(scmr, 'tip')
-
             tmp_d = {}
             tmp_d['name'] = dbr.repo_name
             tmp_d['name_sort'] = tmp_d['name'].lower()
@@ -143,7 +150,7 @@
         for dbr in self.db_repo_list:
             # check permission at this level
             if not HasRepoPermissionAny(
-                'repository.read', 'repository.write', 'repository.admin'
+                *self.perm_set
             )(dbr.repo_name, 'get repo check'):
                 continue
 
@@ -160,8 +167,18 @@
 
 class GroupList(object):
 
-    def __init__(self, db_repo_group_list):
+    def __init__(self, db_repo_group_list, perm_set=None):
+        """
+        Creates iterator from given list of group objects, additionally
+        checking permission for them from perm_set var
+
+        :param db_repo_group_list:
+        :param perm_set: list of permissons to check
+        """
         self.db_repo_group_list = db_repo_group_list
+        if not perm_set:
+            perm_set = ['group.read', 'group.write', 'group.admin']
+        self.perm_set = perm_set
 
     def __len__(self):
         return len(self.db_repo_group_list)
@@ -173,7 +190,7 @@
         for dbgr in self.db_repo_group_list:
             # check permission at this level
             if not HasReposGroupPermissionAny(
-                'group.read', 'group.write', 'group.admin'
+                *self.perm_set
             )(dbgr.group_name, 'get group repo check'):
                 continue
 
@@ -276,9 +293,7 @@
         if all_groups is None:
             all_groups = RepoGroup.query()\
                 .filter(RepoGroup.group_parent_id == None).all()
-        group_iter = GroupList(all_groups)
-
-        return group_iter
+        return [x for x in GroupList(all_groups)]
 
     def mark_for_invalidation(self, repo_name):
         """
@@ -287,10 +302,11 @@
 
         :param repo_name: this repo that should invalidation take place
         """
-        CacheInvalidation.set_invalidate(repo_name=repo_name)
+        invalidated_keys = CacheInvalidation.set_invalidate(repo_name=repo_name)
         repo = Repository.get_by_repo_name(repo_name)
         if repo:
             repo.update_changeset_cache()
+        return invalidated_keys
 
     def toggle_following_repo(self, follow_repo_id, user_id):
 
@@ -305,7 +321,7 @@
                               'stopped_following_repo',
                               RepoTemp(follow_repo_id))
                 return
-            except:
+            except Exception:
                 log.error(traceback.format_exc())
                 raise
 
@@ -318,7 +334,7 @@
             action_logger(UserTemp(user_id),
                           'started_following_repo',
                           RepoTemp(follow_repo_id))
-        except:
+        except Exception:
             log.error(traceback.format_exc())
             raise
 
@@ -331,7 +347,7 @@
             try:
                 self.sa.delete(f)
                 return
-            except:
+            except Exception:
                 log.error(traceback.format_exc())
                 raise
 
@@ -340,7 +356,7 @@
             f.user_id = user_id
             f.follows_user_id = follow_user_id
             self.sa.add(f)
-        except:
+        except Exception:
             log.error(traceback.format_exc())
             raise
 
@@ -377,7 +393,8 @@
     def get_pull_requests(self, repo):
         repo = self._get_repo(repo)
         return self.sa.query(PullRequest)\
-                .filter(PullRequest.other_repo == repo).count()
+                .filter(PullRequest.other_repo == repo)\
+                .filter(PullRequest.status != PullRequest.STATUS_CLOSED).count()
 
     def mark_as_fork(self, repo, fork, user):
         repo = self.__get_repo(repo)
@@ -388,6 +405,60 @@
         self.sa.add(repo)
         return repo
 
+    def _handle_push(self, repo, username, action, repo_name, revisions):
+        """
+        Triggers push action hooks
+
+        :param repo: SCM repo
+        :param username: username who pushes
+        :param action: push/push_loca/push_remote
+        :param repo_name: name of repo
+        :param revisions: list of revisions that we pushed
+        """
+        from rhodecode import CONFIG
+        from rhodecode.lib.base import _get_ip_addr
+        try:
+            from pylons import request
+            environ = request.environ
+        except TypeError:
+            # we might use this outside of request context, let's fake the
+            # environ data
+            from webob import Request
+            environ = Request.blank('').environ
+
+        #trigger push hook
+        extras = {
+            'ip': _get_ip_addr(environ),
+            'username': username,
+            'action': 'push_local',
+            'repository': repo_name,
+            'scm': repo.alias,
+            'config': CONFIG['__file__'],
+            'server_url': get_server_url(environ),
+            'make_lock': None,
+            'locked_by': [None, None]
+        }
+        _scm_repo = repo._repo
+        _set_extras(extras)
+        if repo.alias == 'hg':
+            log_push_action(_scm_repo.ui, _scm_repo, node=revisions[0])
+        elif repo.alias == 'git':
+            log_push_action(None, _scm_repo, _git_revs=revisions)
+
+    def _get_IMC_module(self, scm_type):
+        """
+        Returns InMemoryCommit class based on scm_type
+
+        :param scm_type:
+        """
+        if scm_type == 'hg':
+            from rhodecode.lib.vcs.backends.hg import \
+                MercurialInMemoryChangeset as IMC
+        elif scm_type == 'git':
+            from rhodecode.lib.vcs.backends.git import \
+                GitInMemoryChangeset as IMC
+        return IMC
+
     def pull_changes(self, repo, username):
         dbrepo = self.__get_repo(repo)
         clone_uri = dbrepo.clone_uri
@@ -395,27 +466,14 @@
             raise Exception("This repository doesn't have a clone uri")
 
         repo = dbrepo.scm_instance
-        from rhodecode import CONFIG
+        repo_name = dbrepo.repo_name
         try:
-            extras = {
-                'ip': '',
-                'username': username,
-                'action': 'push_remote',
-                'repository': dbrepo.repo_name,
-                'scm': repo.alias,
-                'config': CONFIG['__file__'],
-                'make_lock': None,
-                'locked_by': [None, None]
-            }
-
-            Repository.inject_ui(repo, extras=extras)
-
             if repo.alias == 'git':
                 repo.fetch(clone_uri)
             else:
                 repo.pull(clone_uri)
-            self.mark_for_invalidation(dbrepo.repo_name)
-        except:
+            self.mark_for_invalidation(repo_name)
+        except Exception:
             log.error(traceback.format_exc())
             raise
 
@@ -427,13 +485,8 @@
         :param repo: SCM instance
 
         """
-
-        if repo.alias == 'hg':
-            from rhodecode.lib.vcs.backends.hg import \
-                MercurialInMemoryChangeset as IMC
-        elif repo.alias == 'git':
-            from rhodecode.lib.vcs.backends.git import \
-                GitInMemoryChangeset as IMC
+        user = self._get_user(user)
+        IMC = self._get_IMC_module(repo.alias)
 
         # decoding here will force that we have proper encoded values
         # in any other case this will throw exceptions and deny commit
@@ -449,20 +502,21 @@
                        author=author,
                        parents=[cs], branch=cs.branch)
 
-        action = 'push_local:%s' % tip.raw_id
-        action_logger(user, action, repo_name)
         self.mark_for_invalidation(repo_name)
+        self._handle_push(repo,
+                          username=user.username,
+                          action='push_local',
+                          repo_name=repo_name,
+                          revisions=[tip.raw_id])
         return tip
 
     def create_node(self, repo, repo_name, cs, user, author, message, content,
                       f_path):
-        if repo.alias == 'hg':
-            from rhodecode.lib.vcs.backends.hg import MercurialInMemoryChangeset as IMC
-        elif repo.alias == 'git':
-            from rhodecode.lib.vcs.backends.git import GitInMemoryChangeset as IMC
+        user = self._get_user(user)
+        IMC = self._get_IMC_module(repo.alias)
+
         # decoding here will force that we have proper encoded values
         # in any other case this will throw exceptions and deny commit
-
         if isinstance(content, (basestring,)):
             content = safe_str(content)
         elif isinstance(content, (file, cStringIO.OutputType,)):
@@ -488,9 +542,12 @@
                        author=author,
                        parents=parents, branch=cs.branch)
 
-        action = 'push_local:%s' % tip.raw_id
-        action_logger(user, action, repo_name)
         self.mark_for_invalidation(repo_name)
+        self._handle_push(repo,
+                          username=user.username,
+                          action='push_local',
+                          repo_name=repo_name,
+                          revisions=[tip.raw_id])
         return tip
 
     def get_nodes(self, repo_name, revision, root_path='/', flat=True):
@@ -601,7 +658,7 @@
                             ver = matches.groups()[0]
                             log.debug('got %s it is rhodecode' % (ver))
                             _rhodecode_hook = True
-                        except:
+                        except Exception:
                             log.error(traceback.format_exc())
             else:
                 # there is no hook in this dir, so we want to create one
--- a/rhodecode/model/user.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/model/user.py	Sun Apr 07 18:37:22 2013 +0200
@@ -37,8 +37,8 @@
 from rhodecode.lib.caching_query import FromCache
 from rhodecode.model import BaseModel
 from rhodecode.model.db import User, UserRepoToPerm, Repository, Permission, \
-    UserToPerm, UsersGroupRepoToPerm, UsersGroupToPerm, UsersGroupMember, \
-    Notification, RepoGroup, UserRepoGroupToPerm, UsersGroupRepoGroupToPerm, \
+    UserToPerm, UserGroupRepoToPerm, UserGroupToPerm, UserGroupMember, \
+    Notification, RepoGroup, UserRepoGroupToPerm, UserGroupRepoGroupToPerm, \
     UserEmailMap, UserIpMap
 from rhodecode.lib.exceptions import DefaultUserException, \
     UserOwnsReposException
@@ -95,7 +95,7 @@
             new_user.api_key = generate_api_key(form_data['username'])
             self.sa.add(new_user)
             return new_user
-        except:
+        except Exception:
             log.error(traceback.format_exc())
             raise
 
@@ -132,7 +132,7 @@
             new_user.username = username
             new_user.admin = admin
             # set password only if creating an user or password is changed
-            if edit is False or user.password != password:
+            if not edit or user.password != password:
                 new_user.password = get_crypt_password(password)
                 new_user.api_key = generate_api_key(username)
             new_user.email = email
@@ -229,7 +229,7 @@
             self.sa.flush()
 
             # notification to admins
-            subject = _('new user registration')
+            subject = _('New user registration')
             body = ('New user registration\n'
                     '---------------------\n'
                     '- Username: %s\n'
@@ -244,7 +244,7 @@
                                        type_=Notification.TYPE_REGISTRATION,
                                        email_kwargs=kw)
 
-        except:
+        except Exception:
             log.error(traceback.format_exc())
             raise
 
@@ -268,7 +268,7 @@
                         k = 'name'
                     setattr(user, k, v)
             self.sa.add(user)
-        except:
+        except Exception:
             log.error(traceback.format_exc())
             raise
 
@@ -290,7 +290,7 @@
                 setattr(user, k, v)
             self.sa.add(user)
             return user
-        except:
+        except Exception:
             log.error(traceback.format_exc())
             raise
 
@@ -311,7 +311,7 @@
                     % (user.username, len(repos), ', '.join(repos))
                 )
             self.sa.delete(user)
-        except:
+        except Exception:
             log.error(traceback.format_exc())
             raise
 
@@ -331,11 +331,11 @@
                                                        'reset_url': link})
                 log.debug('sending email')
                 run_task(tasks.send_email, user_email,
-                         _("password reset link"), body, body)
+                         _("Password reset link"), body, body)
                 log.info('send new password mail to %s' % user_email)
             else:
                 log.debug("password reset email %s not found" % user_email)
-        except:
+        except Exception:
             log.error(traceback.format_exc())
             return False
 
@@ -358,7 +358,7 @@
                     log.info('change password for %s' % user_email)
                 if new_passwd is None:
                     raise Exception('unable to generate new password')
-            except:
+            except Exception:
                 log.error(traceback.format_exc())
                 Session().rollback()
 
@@ -367,7 +367,7 @@
                      _('Your new RhodeCode password:%s') % (new_passwd))
             log.info('send new password mail to %s' % user_email)
 
-        except:
+        except Exception:
             log.error('Failed to update user password')
             log.error(traceback.format_exc())
 
@@ -400,7 +400,7 @@
             else:
                 return False
 
-        except:
+        except Exception:
             log.error(traceback.format_exc())
             auth_user.is_authenticated = False
             return False
@@ -464,7 +464,7 @@
                 p = 'repository.admin'
                 user.permissions[RK][r_k] = p
 
-            # repositories groups
+            # repository groups
             for perm in default_repo_groups_perms:
                 rg_k = perm.UserRepoGroupToPerm.group.group_name
                 p = 'group.admin'
@@ -472,7 +472,7 @@
             return user
 
         #==================================================================
-        # SET DEFAULTS GLOBAL, REPOS, REPOS GROUPS
+        # SET DEFAULTS GLOBAL, REPOS, REPOSITORY GROUPS
         #==================================================================
         uid = user.user_id
 
@@ -497,7 +497,7 @@
 
             user.permissions[RK][r_k] = p
 
-        # defaults for repositories groups taken from default user permission
+        # defaults for repository groups taken from default user permission
         # on given group
         for perm in default_repo_groups_perms:
             rg_k = perm.UserRepoGroupToPerm.group.group_name
@@ -512,13 +512,13 @@
                              'hg.create.none', 'hg.create.repository'])
 
         # USER GROUPS comes first
-        # users group global permissions
-        user_perms_from_users_groups = self.sa.query(UsersGroupToPerm)\
-            .options(joinedload(UsersGroupToPerm.permission))\
-            .join((UsersGroupMember, UsersGroupToPerm.users_group_id ==
-                   UsersGroupMember.users_group_id))\
-            .filter(UsersGroupMember.user_id == uid)\
-            .order_by(UsersGroupToPerm.users_group_id)\
+        # user group global permissions
+        user_perms_from_users_groups = self.sa.query(UserGroupToPerm)\
+            .options(joinedload(UserGroupToPerm.permission))\
+            .join((UserGroupMember, UserGroupToPerm.users_group_id ==
+                   UserGroupMember.users_group_id))\
+            .filter(UserGroupMember.user_id == uid)\
+            .order_by(UserGroupToPerm.users_group_id)\
             .all()
         #need to group here by groups since user can be in more than one group
         _grouped = [[x, list(y)] for x, y in
@@ -559,21 +559,21 @@
         # permission should be selected based on selected method
         #======================================================================
 
-        # users group for repositories permissions
+        # user group for repositories permissions
         user_repo_perms_from_users_groups = \
-         self.sa.query(UsersGroupRepoToPerm, Permission, Repository,)\
-            .join((Repository, UsersGroupRepoToPerm.repository_id ==
+         self.sa.query(UserGroupRepoToPerm, Permission, Repository,)\
+            .join((Repository, UserGroupRepoToPerm.repository_id ==
                    Repository.repo_id))\
-            .join((Permission, UsersGroupRepoToPerm.permission_id ==
+            .join((Permission, UserGroupRepoToPerm.permission_id ==
                    Permission.permission_id))\
-            .join((UsersGroupMember, UsersGroupRepoToPerm.users_group_id ==
-                   UsersGroupMember.users_group_id))\
-            .filter(UsersGroupMember.user_id == uid)\
+            .join((UserGroupMember, UserGroupRepoToPerm.users_group_id ==
+                   UserGroupMember.users_group_id))\
+            .filter(UserGroupMember.user_id == uid)\
             .all()
 
         multiple_counter = collections.defaultdict(int)
         for perm in user_repo_perms_from_users_groups:
-            r_k = perm.UsersGroupRepoToPerm.repository.repo_name
+            r_k = perm.UserGroupRepoToPerm.repository.repo_name
             multiple_counter[r_k] += 1
             p = perm.Permission.permission_name
             cur_perm = user.permissions[RK][r_k]
@@ -610,27 +610,27 @@
             user.permissions[RK][r_k] = p
 
         #======================================================================
-        # !! PERMISSIONS FOR REPOSITORIES GROUPS !!
+        # !! PERMISSIONS FOR REPOSITORY GROUPS !!
         #======================================================================
         #======================================================================
         # check if user is part of user groups for this repository groups and
         # fill in his permission from it. _choose_perm decides of which
         # permission should be selected based on selected method
         #======================================================================
-        # users group for repo groups permissions
+        # user group for repo groups permissions
         user_repo_group_perms_from_users_groups = \
-         self.sa.query(UsersGroupRepoGroupToPerm, Permission, RepoGroup)\
-         .join((RepoGroup, UsersGroupRepoGroupToPerm.group_id == RepoGroup.group_id))\
-         .join((Permission, UsersGroupRepoGroupToPerm.permission_id
+         self.sa.query(UserGroupRepoGroupToPerm, Permission, RepoGroup)\
+         .join((RepoGroup, UserGroupRepoGroupToPerm.group_id == RepoGroup.group_id))\
+         .join((Permission, UserGroupRepoGroupToPerm.permission_id
                 == Permission.permission_id))\
-         .join((UsersGroupMember, UsersGroupRepoGroupToPerm.users_group_id
-                == UsersGroupMember.users_group_id))\
-         .filter(UsersGroupMember.user_id == uid)\
+         .join((UserGroupMember, UserGroupRepoGroupToPerm.users_group_id
+                == UserGroupMember.users_group_id))\
+         .filter(UserGroupMember.user_id == uid)\
          .all()
 
         multiple_counter = collections.defaultdict(int)
         for perm in user_repo_group_perms_from_users_groups:
-            g_k = perm.UsersGroupRepoGroupToPerm.group.group_name
+            g_k = perm.UserGroupRepoGroupToPerm.group.group_name
             multiple_counter[g_k] += 1
             p = perm.Permission.permission_name
             cur_perm = user.permissions[GK][g_k]
--- a/rhodecode/model/users_group.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/model/users_group.py	Sun Apr 07 18:37:22 2013 +0200
@@ -3,7 +3,7 @@
     rhodecode.model.users_group
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-    users group model for RhodeCode
+    user group model for RhodeCode
 
     :created_on: Oct 1, 2011
     :author: nvinot
@@ -28,38 +28,38 @@
 import traceback
 
 from rhodecode.model import BaseModel
-from rhodecode.model.db import UsersGroupMember, UsersGroup,\
-    UsersGroupRepoToPerm, Permission, UsersGroupToPerm, User
-from rhodecode.lib.exceptions import UsersGroupsAssignedException
+from rhodecode.model.db import UserGroupMember, UserGroup,\
+    UserGroupRepoToPerm, Permission, UserGroupToPerm, User
+from rhodecode.lib.exceptions import UserGroupsAssignedException
 
 log = logging.getLogger(__name__)
 
 
-class UsersGroupModel(BaseModel):
+class UserGroupModel(BaseModel):
 
-    cls = UsersGroup
+    cls = UserGroup
 
     def __get_users_group(self, users_group):
-        return self._get_instance(UsersGroup, users_group,
-                                  callback=UsersGroup.get_by_group_name)
+        return self._get_instance(UserGroup, users_group,
+                                  callback=UserGroup.get_by_group_name)
 
     def get(self, users_group_id, cache=False):
-        return UsersGroup.get(users_group_id)
+        return UserGroup.get(users_group_id)
 
     def get_group(self, users_group):
         return self.__get_users_group(users_group)
 
     def get_by_name(self, name, cache=False, case_insensitive=False):
-        return UsersGroup.get_by_group_name(name, cache, case_insensitive)
+        return UserGroup.get_by_group_name(name, cache, case_insensitive)
 
     def create(self, name, active=True):
         try:
-            new = UsersGroup()
+            new = UserGroup()
             new.users_group_name = name
             new.users_group_active = active
             self.sa.add(new)
             return new
-        except:
+        except Exception:
             log.error(traceback.format_exc())
             raise
 
@@ -76,19 +76,19 @@
                     if v:
                         v = [v] if isinstance(v, basestring) else v
                         for u_id in set(v):
-                            member = UsersGroupMember(users_group.users_group_id, u_id)
+                            member = UserGroupMember(users_group.users_group_id, u_id)
                             members_list.append(member)
                     setattr(users_group, 'members', members_list)
                 setattr(users_group, k, v)
 
             self.sa.add(users_group)
-        except:
+        except Exception:
             log.error(traceback.format_exc())
             raise
 
     def delete(self, users_group, force=False):
         """
-        Deletes repos group, unless force flag is used
+        Deletes repository group, unless force flag is used
         raises exception if there are members in that group, else deletes
         group and users
 
@@ -99,15 +99,15 @@
             users_group = self.__get_users_group(users_group)
 
             # check if this group is not assigned to repo
-            assigned_groups = UsersGroupRepoToPerm.query()\
-                .filter(UsersGroupRepoToPerm.users_group == users_group).all()
+            assigned_groups = UserGroupRepoToPerm.query()\
+                .filter(UserGroupRepoToPerm.users_group == users_group).all()
 
-            if assigned_groups and force is False:
-                raise UsersGroupsAssignedException('RepoGroup assigned to %s' %
+            if assigned_groups and not force:
+                raise UserGroupsAssignedException('RepoGroup assigned to %s' %
                                                    assigned_groups)
 
             self.sa.delete(users_group)
-        except:
+        except Exception:
             log.error(traceback.format_exc())
             raise
 
@@ -121,7 +121,7 @@
                 return True
 
         try:
-            users_group_member = UsersGroupMember()
+            users_group_member = UserGroupMember()
             users_group_member.user = user
             users_group_member.users_group = users_group
 
@@ -130,7 +130,7 @@
 
             self.sa.add(users_group_member)
             return users_group_member
-        except:
+        except Exception:
             log.error(traceback.format_exc())
             raise
 
@@ -149,7 +149,7 @@
             try:
                 self.sa.delete(users_group_member)
                 return True
-            except:
+            except Exception:
                 log.error(traceback.format_exc())
                 raise
         else:
@@ -160,23 +160,23 @@
         users_group = self.__get_users_group(users_group)
         perm = self._get_perm(perm)
 
-        return UsersGroupToPerm.query()\
-            .filter(UsersGroupToPerm.users_group == users_group)\
-            .filter(UsersGroupToPerm.permission == perm).scalar() is not None
+        return UserGroupToPerm.query()\
+            .filter(UserGroupToPerm.users_group == users_group)\
+            .filter(UserGroupToPerm.permission == perm).scalar() is not None
 
     def grant_perm(self, users_group, perm):
         users_group = self.__get_users_group(users_group)
         perm = self._get_perm(perm)
 
         # if this permission is already granted skip it
-        _perm = UsersGroupToPerm.query()\
-            .filter(UsersGroupToPerm.users_group == users_group)\
-            .filter(UsersGroupToPerm.permission == perm)\
+        _perm = UserGroupToPerm.query()\
+            .filter(UserGroupToPerm.users_group == users_group)\
+            .filter(UserGroupToPerm.permission == perm)\
             .scalar()
         if _perm:
             return
 
-        new = UsersGroupToPerm()
+        new = UserGroupToPerm()
         new.users_group = users_group
         new.permission = perm
         self.sa.add(new)
@@ -185,8 +185,8 @@
         users_group = self.__get_users_group(users_group)
         perm = self._get_perm(perm)
 
-        obj = UsersGroupToPerm.query()\
-            .filter(UsersGroupToPerm.users_group == users_group)\
-            .filter(UsersGroupToPerm.permission == perm).scalar()
+        obj = UserGroupToPerm.query()\
+            .filter(UserGroupToPerm.users_group == users_group)\
+            .filter(UserGroupToPerm.permission == perm).scalar()
         if obj:
             self.sa.delete(obj)
--- a/rhodecode/model/validators.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/model/validators.py	Sun Apr 07 18:37:22 2013 +0200
@@ -16,8 +16,8 @@
 from rhodecode.lib.compat import OrderedSet
 from rhodecode.lib import ipaddr
 from rhodecode.lib.utils import repo_name_slug
-from rhodecode.lib.utils2 import safe_int
-from rhodecode.model.db import RepoGroup, Repository, UsersGroup, User,\
+from rhodecode.lib.utils2 import safe_int, str2bool
+from rhodecode.model.db import RepoGroup, Repository, UserGroup, User,\
     ChangesetStatus
 from rhodecode.lib.exceptions import LdapImportError
 from rhodecode.config.routing import ADMIN_PREFIX
@@ -105,7 +105,7 @@
                     msg = M(self, 'username_exists', state, username=value)
                     raise formencode.Invalid(msg, value, state)
 
-            if re.match(r'^[a-zA-Z0-9]{1}[a-zA-Z0-9\-\_\.]+$', value) is None:
+            if re.match(r'^[a-zA-Z0-9]{1}[a-zA-Z0-9\-\_\.]*$', value) is None:
                 msg = M(self, 'invalid_username', state)
                 raise formencode.Invalid(msg, value, state)
     return _validator
@@ -130,13 +130,13 @@
     return _validator
 
 
-def ValidUsersGroup(edit=False, old_data={}):
+def ValidUserGroup(edit=False, old_data={}):
     class _validator(formencode.validators.FancyValidator):
         messages = {
-            'invalid_group': _(u'Invalid users group name'),
-            'group_exist': _(u'Users group "%(usersgroup)s" already exists'),
-            'invalid_usersgroup_name':
-                _(u'users group name may only contain  alphanumeric '
+            'invalid_group': _(u'Invalid user group name'),
+            'group_exist': _(u'User group "%(usergroup)s" already exists'),
+            'invalid_usergroup_name':
+                _(u'user group name may only contain alphanumeric '
                   'characters underscores, periods or dashes and must begin '
                   'with alphanumeric character')
         }
@@ -151,19 +151,19 @@
             old_ugname = None
             if edit:
                 old_id = old_data.get('users_group_id')
-                old_ugname = UsersGroup.get(old_id).users_group_name
+                old_ugname = UserGroup.get(old_id).users_group_name
 
             if old_ugname != value or not edit:
-                is_existing_group = UsersGroup.get_by_group_name(value,
+                is_existing_group = UserGroup.get_by_group_name(value,
                                                         case_insensitive=True)
                 if is_existing_group:
-                    msg = M(self, 'group_exist', state, usersgroup=value)
+                    msg = M(self, 'group_exist', state, usergroup=value)
                     raise formencode.Invalid(msg, value, state,
                         error_dict=dict(users_group_name=msg)
                     )
 
             if re.match(r'^[a-zA-Z0-9]{1}[a-zA-Z0-9\-\_\.]+$', value) is None:
-                msg = M(self, 'invalid_usersgroup_name', state)
+                msg = M(self, 'invalid_usergroup_name', state)
                 raise formencode.Invalid(msg, value, state,
                     error_dict=dict(users_group_name=msg)
                 )
@@ -280,7 +280,7 @@
 
             if not authenticate(username, password):
                 user = User.get_by_username(username)
-                if user and user.active is False:
+                if user and not user.active:
                     log.warning('user %s is disabled' % username)
                     msg = M(self, 'disabled_account', state)
                     raise formencode.Invalid(msg, value, state,
@@ -318,7 +318,7 @@
                 _(u'Repository named %(repo)s already exists'),
             'repository_in_group_exists': _(u'Repository "%(repo)s" already '
                                             'exists in group "%(group)s"'),
-            'same_group_exists': _(u'Repositories group with name "%(repo)s" '
+            'same_group_exists': _(u'Repository group with name "%(repo)s" '
                                    'already exists')
         }
 
@@ -477,16 +477,24 @@
     class _validator(formencode.validators.FancyValidator):
         messages = {
             'permission_denied': _(u"You don't have permissions "
-                                   "to create repository in this group")
+                                   "to create repository in this group"),
+            'permission_denied_root': _(u"no permission to create repository "
+                                        "in root location")
         }
 
+        def _to_python(self, value, state):
+            #root location
+            if value in [-1, "-1"]:
+                return None
+            return value
+
         def validate_python(self, value, state):
             gr = RepoGroup.get(value)
             gr_name = gr.group_name if gr else None  # None means ROOT location
             val = HasReposGroupPermissionAny('group.write', 'group.admin')
             can_create_repos = HasPermissionAny('hg.admin', 'hg.create.repository')
             forbidden = not val(gr_name, 'can write into group validator')
-            value_changed = old_data['repo_group'].get('group_id') != safe_int(value)
+            value_changed = True  # old_data['repo_group'].get('group_id') != safe_int(value)
             if value_changed:  # do check if we changed the value
                 #parent group need to be existing
                 if gr and forbidden:
@@ -495,7 +503,7 @@
                         error_dict=dict(repo_type=msg)
                     )
                 ## check if we can write to root location !
-                elif gr is None and can_create_repos() is False:
+                elif gr is None and not can_create_repos():
                     msg = M(self, 'permission_denied_root', state)
                     raise formencode.Invalid(msg, value, state,
                         error_dict=dict(repo_type=msg)
@@ -525,7 +533,7 @@
                 #we can create in root, we're fine no validations required
                 return
 
-            forbidden_in_root = gr is None and can_create_in_root is False
+            forbidden_in_root = gr is None and not can_create_in_root
             val = HasReposGroupPermissionAny('group.admin')
             forbidden = not val(gr_name, 'can create group validator')
             if forbidden_in_root or forbidden:
@@ -546,7 +554,7 @@
     class _validator(formencode.validators.FancyValidator):
         messages = {
             'perm_new_member_name':
-                _(u'This username or users group name is not valid')
+                _(u'This username or user group name is not valid')
         }
 
         def to_python(self, value, state):
@@ -583,9 +591,9 @@
                          'g': 'users_group'
                     }[k[0]]
                     if member == 'default':
-                        if value.get('repo_private'):
+                        if str2bool(value.get('repo_private')):
                             # set none for default when updating to
-                            # private repo
+                            # private repo protects agains form manipulation
                             v = EMPTY_PERM
                     perms_update.add((member, v, t))
 
@@ -600,9 +608,9 @@
                             .filter(User.active == True)\
                             .filter(User.username == k).one()
                     if t is 'users_group':
-                        self.user_db = UsersGroup.query()\
-                            .filter(UsersGroup.users_group_active == True)\
-                            .filter(UsersGroup.users_group_name == k).one()
+                        self.user_db = UserGroup.query()\
+                            .filter(UserGroup.users_group_active == True)\
+                            .filter(UserGroup.users_group_name == k).one()
 
                 except Exception:
                     log.exception('Updated permission failed')
@@ -715,13 +723,7 @@
                     'this is the name of the attribute that is equivalent '
                     'to "username"')
         }
-
-        def validate_python(self, value, state):
-            if not value or not isinstance(value, (str, unicode)):
-                msg = M(self, 'invalid_cn', state)
-                raise formencode.Invalid(msg, value, state,
-                    error_dict=dict(ldap_attr_login=msg)
-                )
+        messages['empty'] = messages['invalid_cn']
 
     return _validator
 
@@ -790,3 +792,16 @@
                                          value, state)
 
     return _validator
+
+
+def FieldKey():
+    class _validator(formencode.validators.FancyValidator):
+        messages = dict(
+            badFormat=_('Key name can only consist of letters, '
+                        'underscore, dash or numbers'),)
+
+        def validate_python(self, value, state):
+            if not re.match('[a-zA-Z0-9_-]+$', value):
+                raise formencode.Invalid(self.message('badFormat', state),
+                                         value, state)
+    return _validator
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rhodecode/public/css/contextbar.css	Sun Apr 07 18:37:22 2013 +0200
@@ -0,0 +1,342 @@
+/**
+ * Stylesheets for the context bar
+ */
+
+#quick .repo_switcher { background-image: url("../images/icons/database.png"); }
+#quick .journal { background-image: url("../images/icons/book.png"); }
+#quick .search { background-image: url("../images/icons/search_16.png"); }
+#quick .admin { background-image: url("../images/icons/cog_edit.png"); }
+
+#context-bar a.follow { background-image: url("../images/icons/heart.png"); }
+#context-bar a.following { background-image: url("../images/icons/heart_delete.png"); }
+#context-bar a.fork { background-image: url("../images/icons/arrow_divide.png"); }
+#context-bar a.summary { background-image: url("../images/icons/clipboard_16.png"); }
+#context-bar a.changelogs { background-image: url("../images/icons/time.png"); }
+#context-bar a.files { background-image: url("../images/icons/file.png"); }
+#context-bar a.switch-to { background-image: url("../images/icons/arrow_switch.png"); }
+#context-bar a.options { background-image: url("../images/icons/table_gear.png"); }
+#context-bar a.forks { background-image: url("../images/icons/arrow_divide.png"); }
+#context-bar a.pull-request { background-image: url("../images/icons/arrow_join.png"); }
+#context-bar a.branches { background-image: url("../images/icons/arrow_branch.png"); }
+#context-bar a.tags { background-image: url("../images/icons/tag_blue.png"); }
+#context-bar a.bookmarks { background-image: url("../images/icons/tag_green.png"); }
+#context-bar a.settings { background-image: url("../images/icons/cog.png"); }
+#context-bar a.shortlog { background-image: url("../images/icons/time.png"); }
+#context-bar a.search { background-image: url("../images/icons/search_16.png"); }
+#context-bar a.admin { background-image: url("../images/icons/cog_edit.png"); }
+
+#context-bar a.journal { background-image: url("../images/icons/book.png"); }
+#context-bar a.repos { background-image: url("../images/icons/database_edit.png"); }
+#context-bar a.repos_groups { background-image: url("../images/icons/database_link.png"); }
+#context-bar a.users { background-image: url("../images/icons/user_edit.png"); }
+#context-bar a.groups { background-image: url("../images/icons/group_edit.png"); }
+#context-bar a.permissions { background-image: url("../images/icons/key.png"); }
+#context-bar a.ldap { background-image: url("../images/icons/server_key.png"); }
+#context-bar a.defaults { background-image: url("../images/icons/wrench.png"); }
+#context-bar a.settings { background-image: url("../images/icons/cog_edit.png"); }
+#context-bar a.compare_request { background-image: url('../images/icons/arrow_inout.png')}
+#context-bar a.locking_del { background-image: url('../images/icons/lock_delete.png')}
+#context-bar a.locking_add { background-image: url('../images/icons/lock_add.png')}
+
+#content #context-bar {
+    position: relative;
+    overflow: visible;
+    background-color: #336699;
+    border-top: 1px solid #517da8;
+    border-bottom: 1px solid #003162;
+    padding: 0 5px;
+    min-height: 36px;
+}
+
+#header #header-inner #quick a,
+#content #context-bar,
+#content #context-bar a {
+    color: #FFFFFF;
+}
+
+#header #header-inner #quick a:hover,
+#content #context-bar a:hover {
+    text-decoration: none;
+}
+
+#content #context-bar .icon {
+    display: inline-block;
+    width: 16px;
+    height: 16px;
+    vertical-align: text-bottom;
+}
+
+ul.horizontal-list {
+    display: block;
+}
+
+ul.horizontal-list > li {
+    float: left;
+    position: relative;
+}
+
+#header #header-inner #quick ul,
+ul.horizontal-list > li ul {
+    position: absolute;
+    display: none;
+    right: 0;
+    z-index: 999;
+}
+
+#header #header-inner #quick li:hover > ul,
+ul.horizontal-list li:hover > ul {
+    display: block;
+}
+
+#header #header-inner #quick li ul li,
+ul.horizontal-list ul li {
+    position: relative;
+    border-bottom: 1px solid rgba(0,0,0,0.1);
+    border-top: 1px solid rgba(255,255,255,0.1);
+}
+
+ul.horizontal-list > li ul ul {
+    position: absolute;
+    right: 100%;
+    top: -1px;
+    min-width: 200px;
+    max-height: 400px;
+    overflow-x: hidden;
+    overflow-y: auto;
+}
+
+#header #header-inner #quick ul a,
+ul.horizontal-list li a {
+    white-space: nowrap;
+}
+
+#breadcrumbs {
+    float: left;
+    padding: 6px 0 5px 0;
+    padding-left: 5px;
+    font-weight: bold;
+    font-size: 14px;
+}
+
+#breadcrumbs span {
+    font-weight: bold;
+    font-size: 1.4em;
+}
+
+#header #header-inner #quick ul,
+#revision-changer,
+#context-pages,
+#context-pages ul {
+    background: #3b6998; /* Old browsers */
+    background: -moz-linear-gradient(top, #4574a2 0%, #2f5d8b 100%); /* FF3.6+ */
+    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#4574a2), color-stop(100%,#2f5d8b)); /* Chrome,Safari4+ */
+    background: -webkit-linear-gradient(top, #4574a2 0%, #2f5d8b 100%); /* Chrome10+,Safari5.1+ */
+    background: -o-linear-gradient(top, #4574a2 0%, #2f5d8b 100%); /* Opera 11.10+ */
+    background: -ms-linear-gradient(top, #4574a2 0%, #2f5d8b 100%); /* IE10+ */
+    background: linear-gradient(to bottom, #4574a2 0%, #2f5d8b 100%); /* W3C */
+    /*Filter on IE will also use overflow:hidden implicitly, and that would clip our inner menus.*/
+    /*filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#4574a2', endColorstr='#2f5d8b',GradientType=0 ); /* IE6-9 */*/
+}
+
+#header #header-inner #quick a,
+#context-actions a,
+#context-pages a {
+    background-repeat: no-repeat;
+    background-position: 10px 50%;
+    padding-left: 30px;
+}
+
+#quick a,
+#context-pages ul ul a {
+    padding-left: 10px;
+}
+
+ul#context-actions {
+    display: inline-block;
+    float: right;
+    border-radius: 4px;
+    background-image: linear-gradient(top, #4574a2 0%, #2f5d8b 100%);
+}
+
+#content ul#context-actions li {
+    padding: 0px;
+    border-right: 1px solid rgba(0,0,0,0.1);
+    border-left: 1px solid rgba(255,255,255,0.1);
+}
+
+#context-actions a {
+    display: block;
+    cursor: pointer;
+    background: none;
+    border: none;
+    margin: 0px;
+    height: auto;
+    padding: 10px 10px 10px 30px;
+    background-repeat: no-repeat;
+    background-position: 10px 50%;
+    font-size: 1em;
+}
+
+#context-actions a {
+    padding: 11px 10px 12px 30px;
+}
+
+#header #header-inner #quick li:hover,
+#revision-changer:hover,
+#context-pages li:hover,
+#context-actions li:hover,
+#content #context-actions li:hover,
+#header #header-inner #quick li.current,
+#context-pages li.current {
+    background: #6388ad; /* Old browsers */
+    background: -moz-linear-gradient(top, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0.1) 100%); /* FF3.6+ */
+    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,0.1)), color-stop(100%,rgba(255,255,255,0))); /* Chrome,Safari4+ */
+    background: -webkit-linear-gradient(top, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0.1) 100%); /* Chrome10+,Safari5.1+ */
+    background: -o-linear-gradient(top, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0.1) 100%); /* Opera 11.10+ */
+    background: -ms-linear-gradient(top, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0.1) 100%); /* IE10+ */
+    background: linear-gradient(to bottom, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0.1) 100%); /* W3C */
+    /*filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#88bfe8', endColorstr='#70b0e0',GradientType=0 ); /* IE6-9 */*/
+}
+
+
+#content #context-actions li:first-child {
+    border-left: none;
+    border-radius: 4px 0 0px 4px;
+}
+
+#content #context-actions li:last-child {
+    border-right: none;
+    border-radius: 0 4px 4px 0;
+}
+
+#content #context-actions .icon {
+    margin: auto;
+    margin-bottom: 5px;
+    display: block;
+    clear: both;
+    float: none;
+}
+
+#content #context-pages .follow .show-following,
+#content #context-pages .following .show-follow {
+    display: none;
+}
+
+#context-pages {
+    float: right;
+    border-left: 1px solid rgba(0,0,0,0.1);
+}
+
+#context-pages li.current {
+    background: #535353; /* Old browsers */
+    background: -moz-linear-gradient(top, #5d5d5d 0%, #484848 100%); /* FF3.6+ */
+    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#5d5d5d), color-stop(100%,#484848)); /* Chrome,Safari4+ */
+    background: -webkit-linear-gradient(top, #5d5d5d 0%, #484848 100%); /* Chrome10+,Safari5.1+ */
+    background: -o-linear-gradient(top, #5d5d5d 0%, #484848 100%); /* Opera 11.10+ */
+    background: -ms-linear-gradient(top, #5d5d5d 0%, #484848 100%); /* IE10+ */
+    background: linear-gradient(to bottom, #5d5d5d 0%, #484848 100%); /* W3C */
+}
+
+#content #context-pages .icon {
+    margin-right: 5px;
+}
+
+#header #header-inner #quick li,
+#content #context-pages li {
+    border-right: 1px solid rgba(0,0,0,0.1);
+    border-left: 1px solid rgba(255,255,255,0.1);
+    padding: 0;
+}
+#header #header-inner #quick li:last-child,
+#content #context-pages li:last-child {
+    border-right: none;
+}
+
+#header #header-inner #quick > li:first-child {
+    border-left: none;
+}
+
+#header #header-inner #quick > li:first-child > a {
+    border-radius: 4px 0 0 4px;
+}
+
+#header #header-inner #quick a,
+#context-pages a,
+#context-pages .admin_menu a {
+    display: block;
+    padding: 0px 10px 1px 30px;
+    padding-left: 30px;
+    line-height: 35px;
+}
+
+#header #header-inner #quick a.thin,
+#context-pages a.thin,
+#context-pages .admin_menu a.thin {
+    line-height: 28px !important;
+}
+
+#header #header-inner #quick a#quick_login_link {
+    padding-left: 0px;
+}
+
+#header #header-inner #quick a {
+    overflow: hidden;
+}
+#quick a.childs:after,
+#revision-changer:before,
+#context-pages a.childs:after,
+#context-pages a.dropdown:after {
+    content: ' \25BE';
+}
+#context-pages a.childs {
+    padding-right: 30px;
+}
+#context-pages a.childs:after {
+    position: absolute;
+    float: right;
+    padding-left: 5px;
+    padding-right: 5px;
+}
+
+#revision-changer:before {
+    position: absolute;
+    top: 0px;
+    right: 0px;
+    border-right: 1px solid rgba(0,0,0,0.1);
+    height: 25px;
+    padding-top: 10px;
+    padding-right: 10px;
+}
+
+#context-pages li:last-child a {
+    padding-right: 10px;
+}
+
+#context-bar #revision-changer {
+    position: relative;
+    cursor: pointer;
+    border: none;
+    padding: 0;
+    margin: 0;
+    color: #FFFFFF;
+    font-size: 0.85em;
+    padding: 2px 15px;
+    padding-bottom: 3px;
+    padding-right: 30px;
+    border-right: 1px solid rgba(255,255,255,0.1);
+}
+
+#revision-changer .branch-name,
+#revision-changer .revision {
+    display: block;
+    text-align: center;
+    line-height: 1.5em;
+}
+
+#revision-changer .branch-name {
+    font-weight: bold;
+}
+
+#revision-changer .revision {
+    text-transform: uppercase;
+}
--- a/rhodecode/public/css/pygments.css	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/public/css/pygments.css	Sun Apr 07 18:37:22 2013 +0200
@@ -9,71 +9,70 @@
     line-height: 125%;
     -webkit-border-radius: 4px;
     -moz-border-radius: 4px;
-    border-radius: 4px;     
+    border-radius: 4px;
 }
-div.codeblock .code-header{
-	border-bottom: 1px solid #CCCCCC;
-	background: #EEEEEE;
-	padding:10px 0 10px 0;
+div.codeblock .code-header {
+    border-bottom: 1px solid #CCCCCC;
+    background: #EEEEEE;
+    padding: 10px 0 10px 0;
 }
 
-div.codeblock .code-header .stats{
-	clear: both;
-	padding: 6px 8px 6px 10px; 
-	border-bottom: 1px solid rgb(204, 204, 204);  
-	height: 23px;
-	margin-bottom: 6px;
+div.codeblock .code-header .stats {
+    clear: both;
+    padding: 6px 8px 6px 10px;
+    border-bottom: 1px solid rgb(204, 204, 204);
+    height: 23px;
+    margin-bottom: 6px;
 }
 
-div.codeblock .code-header .stats .left{
-	float:left;
+div.codeblock .code-header .stats .left {
+    float: left;
 }
-div.codeblock .code-header .stats .left.img{
-	margin-top:-2px;
+div.codeblock .code-header .stats .left.img {
+    margin-top: -2px;
 }
-div.codeblock .code-header .stats .left.item{
-	float:left;
-	padding: 0 9px 0 9px;
-	border-right:1px solid #ccc;
+div.codeblock .code-header .stats .left.item {
+    float: left;
+    padding: 0 9px 0 9px;
+    border-right: 1px solid #ccc;
+}
+div.codeblock .code-header .stats .left.item pre {
 }
-div.codeblock .code-header .stats .left.item pre{
-	
+div.codeblock .code-header .stats .left.item.last {
+    border-right: none;
 }
-div.codeblock .code-header .stats .left.item.last{
-	border-right:none;
-}
-div.codeblock .code-header .stats .buttons{
-	float:right;
-	padding-right:4px;
+div.codeblock .code-header .stats .buttons {
+    float: right;
+    padding-right: 4px;
 }
 
-div.codeblock .code-header .author{
-	margin-left:25px;
-	font-weight: bold;
-	height: 25px;
+div.codeblock .code-header .author {
+    margin-left: 25px;
+    font-weight: bold;
+    height: 25px;
 }
-div.codeblock .code-header .author .user{
-	padding-top:3px;
+div.codeblock .code-header .author .user {
+    padding-top: 3px;
 }
-div.codeblock .code-header .commit{
-	margin-left:25px;
-	font-weight: normal;
-	white-space:pre;
+div.codeblock .code-header .commit {
+    margin-left: 25px;
+    font-weight: normal;
+    white-space: pre;
 }
 
-div.codeblock .code-body table{
+div.codeblock .code-body table {
     width: 0 !important;
     border: 0px !important;
 }
 div.codeblock .code-body table td {
-	border: 0px !important;
+    border: 0px !important;
 }
 div.code-body {
-	background-color: #FFFFFF;
+    background-color: #FFFFFF;
 }
 
 div.codeblock .code-header .search-path {
-	padding: 0px 0px 0px 10px;
+    padding: 0px 0px 0px 10px;
 }
 
 div.search-code-body {
@@ -81,19 +80,18 @@
     padding: 5px 0px 5px 10px;
 }
 
-div.search-code-body pre .match{
-	background-color: #FAFFA6;
+div.search-code-body pre .match {
+    background-color: #FAFFA6;
 }
-div.search-code-body pre .break{
-	background-color: #DDE7EF;
-	width: 100%;
-	color: #747474;
-	display: block;
-	
+div.search-code-body pre .break {
+    background-color: #DDE7EF;
+    width: 100%;
+    color: #747474;
+    display: block;
 }
-div.annotatediv{
-	margin-left:2px;
-	margin-right:4px;
+div.annotatediv {
+    margin-left: 2px;
+    margin-right: 4px;
 }
 .code-highlight {
     padding: 0px;
@@ -101,14 +99,14 @@
     margin-bottom: 5px;
     border-left: 2px solid #ccc;
 }
-.code-highlight pre, .linenodiv pre { 
-	padding: 5px;
+.code-highlight pre, .linenodiv pre {
+    padding: 5px;
     margin: 0;
 }
-.code-highlight pre div:target { 
+.code-highlight pre div:target {
     background-color: #FFFFBE !important;
 }
-    
+
 .linenos a { text-decoration: none; }
 
 .code { display: block; }
--- a/rhodecode/public/css/style.css	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/public/css/style.css	Sun Apr 07 18:37:22 2013 +0200
@@ -1,4849 +1,4867 @@
-html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td
-	{
-	border: 0;
-	outline: 0;
-	font-size: 100%;
-	vertical-align: baseline;
-	background: transparent;
-	margin: 0;
-	padding: 0;
-}
-
-body {
-	line-height: 1;
-	height: 100%;
-	background: url("../images/background.png") repeat scroll 0 0 #B0B0B0;
-	font-family: Lucida Grande, Verdana, Lucida Sans Regular,
-		Lucida Sans Unicode, Arial, sans-serif; font-size : 12px;
-	color: #000;
-	margin: 0;
-	padding: 0;
-	font-size: 12px;
-}
-
-ol,ul {
-	list-style: none;
-}
-
-blockquote,q {
-	quotes: none;
-}
-
-blockquote:before,blockquote:after,q:before,q:after {
-	content: none;
-}
-
-:focus {
-	outline: 0;
-}
-
-del {
-	text-decoration: line-through;
-}
-
-table {
-	border-collapse: collapse;
-	border-spacing: 0;
-}
-
-html {
-	height: 100%;
-}
-
-a {
-	color: #003367;
-	text-decoration: none;
-	cursor: pointer;
-}
-
-a:hover {
-	color: #316293;
-	text-decoration: underline;
-}
-
-h1,h2,h3,h4,h5,h6,
-div.h1,div.h2,div.h3,div.h4,div.h5,div.h6 {
-	color: #292929;
-	font-weight: 700;
-}
-
-h1,div.h1 {
-	font-size: 22px;
-}
-
-h2,div.h2 {
-	font-size: 20px;
-}
-
-h3,div.h3 {
-	font-size: 18px;
-}
-
-h4,div.h4 {
-	font-size: 16px;
-}
-
-h5,div.h5 {
-	font-size: 14px;
-}
-
-h6,div.h6 {
-	font-size: 11px;
-}
-
-ul.circle {
-	list-style-type: circle;
-}
-
-ul.disc {
-	list-style-type: disc;
-}
-
-ul.square {
-	list-style-type: square;
-}
-
-ol.lower-roman {
-	list-style-type: lower-roman;
-}
-
-ol.upper-roman {
-	list-style-type: upper-roman;
-}
-
-ol.lower-alpha {
-	list-style-type: lower-alpha;
-}
-
-ol.upper-alpha {
-	list-style-type: upper-alpha;
-}
-
-ol.decimal {
-	list-style-type: decimal;
-}
-
-div.color {
-	clear: both;
-	overflow: hidden;
-	position: absolute;
-	background: #FFF;
-	margin: 7px 0 0 60px;
-	padding: 1px 1px 1px 0;
-}
-
-div.color a {
-	width: 15px;
-	height: 15px;
-	display: block;
-	float: left;
-	margin: 0 0 0 1px;
-	padding: 0;
-}
-
-div.options {
-	clear: both;
-	overflow: hidden;
-	position: absolute;
-	background: #FFF;
-	margin: 7px 0 0 162px;
-	padding: 0;
-}
-
-div.options a {
-	height: 1%;
-	display: block;
-	text-decoration: none;
-	margin: 0;
-	padding: 3px 8px;
-}
-
-.top-left-rounded-corner {
-	-webkit-border-top-left-radius: 8px;
-	-khtml-border-radius-topleft: 8px;
-	-moz-border-radius-topleft: 8px;
-	border-top-left-radius: 8px;
-}
-
-.top-right-rounded-corner {
-	-webkit-border-top-right-radius: 8px;
-	-khtml-border-radius-topright: 8px;
-	-moz-border-radius-topright: 8px;
-	border-top-right-radius: 8px;
-}
-
-.bottom-left-rounded-corner {
-	-webkit-border-bottom-left-radius: 8px;
-	-khtml-border-radius-bottomleft: 8px;
-	-moz-border-radius-bottomleft: 8px;
-	border-bottom-left-radius: 8px;
-}
-
-.bottom-right-rounded-corner {
-	-webkit-border-bottom-right-radius: 8px;
-	-khtml-border-radius-bottomright: 8px;
-	-moz-border-radius-bottomright: 8px;
-	border-bottom-right-radius: 8px;
-}
-
-.top-left-rounded-corner-mid {
-    -webkit-border-top-left-radius: 4px;
-    -khtml-border-radius-topleft: 4px;
-    -moz-border-radius-topleft: 4px;
-    border-top-left-radius: 4px;
-}
-
-.top-right-rounded-corner-mid {
-    -webkit-border-top-right-radius: 4px;
-    -khtml-border-radius-topright: 4px;
-    -moz-border-radius-topright: 4px;
-    border-top-right-radius: 4px;
-}
-
-.bottom-left-rounded-corner-mid {
-    -webkit-border-bottom-left-radius: 4px;
-    -khtml-border-radius-bottomleft: 4px;
-    -moz-border-radius-bottomleft: 4px;
-    border-bottom-left-radius: 4px;
-}
-
-.bottom-right-rounded-corner-mid {
-    -webkit-border-bottom-right-radius: 4px;
-    -khtml-border-radius-bottomright: 4px;
-    -moz-border-radius-bottomright: 4px;
-    border-bottom-right-radius: 4px;
-}
-
-.help-block {
-    color: #999999;
-    display: block;
-    margin-bottom: 0;
-    margin-top: 5px;
-}
-
-.empty_data{
-    color:#B9B9B9;	
-}
-
-a.permalink{
-	visibility: hidden;
-}
-
-a.permalink:hover{
-	text-decoration: none;
-}
-
-h1:hover > a.permalink,
-h2:hover > a.permalink,
-h3:hover > a.permalink,
-h4:hover > a.permalink,
-h5:hover > a.permalink,
-h6:hover > a.permalink,
-div:hover > a.permalink {
-    visibility: visible;
-}
-
-#header {
-	margin: 0;
-	padding: 0 10px;
-}
-
-#header ul#logged-user {
-	margin-bottom: 5px !important;
-	-webkit-border-radius: 0px 0px 8px 8px;
-	-khtml-border-radius: 0px 0px 8px 8px;
-	-moz-border-radius: 0px 0px 8px 8px;
-	border-radius: 0px 0px 8px 8px;
-	height: 37px;
-    background-color: #003B76;    
-    background-repeat: repeat-x;
-    background-image: -khtml-gradient(linear, left top, left bottom, from(#003B76), to(#00376E) );
-    background-image: -moz-linear-gradient(top, #003b76, #00376e);
-    background-image: -ms-linear-gradient(top, #003b76, #00376e);
-    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76), color-stop(100%, #00376e) );
-    background-image: -webkit-linear-gradient(top, #003b76, #00376e);
-    background-image: -o-linear-gradient(top, #003b76, #00376e);
-    background-image: linear-gradient(top, #003b76, #00376e);
-    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',endColorstr='#00376e', GradientType=0 );
-	box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
-}
-
-#header ul#logged-user li {
-	list-style: none;
-	float: left;
-	margin: 8px 0 0;
-	padding: 4px 12px;
-	border-left: 1px solid #316293;
-}
-
-#header ul#logged-user li.first {
-	border-left: none;
-	margin: 4px;
-}
-
-#header ul#logged-user li.first div.gravatar {
-	margin-top: -2px;
-}
-
-#header ul#logged-user li.first div.account {
-	padding-top: 4px;
-	float: left;
-}
-
-#header ul#logged-user li.last {
-	border-right: none;
-}
-
-#header ul#logged-user li a {
-	color: #fff;
-	font-weight: 700;
-	text-decoration: none;
-}
-
-#header ul#logged-user li a:hover {
-	text-decoration: underline;
-}
-
-#header ul#logged-user li.highlight a {
-	color: #fff;
-}
-
-#header ul#logged-user li.highlight a:hover {
-	color: #FFF;
-}
-
-#header #header-inner {
-	min-height: 44px;
-	clear: both;
-	position: relative;
-    background-color: #003B76;
-    background-repeat: repeat-x;
-    background-image: -khtml-gradient(linear, left top, left bottom, from(#003B76), to(#00376E) );
-    background-image: -moz-linear-gradient(top, #003b76, #00376e);
-    background-image: -ms-linear-gradient(top, #003b76, #00376e);
-    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),color-stop(100%, #00376e) );
-    background-image: -webkit-linear-gradient(top, #003b76, #00376e);
-    background-image: -o-linear-gradient(top, #003b76, #00376e);
-    background-image: linear-gradient(top, #003b76, #00376e);
-    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',endColorstr='#00376e', GradientType=0 );
-	margin: 0;
-	padding: 0;
-	display: block;
-	box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
-	-webkit-border-radius: 4px 4px 4px 4px;
-	-khtml-border-radius: 4px 4px 4px 4px;
-	-moz-border-radius: 4px 4px 4px 4px;
-	border-radius: 4px 4px 4px 4px;
-}
-#header #header-inner.hover{
-	position: fixed !important;
-	width: 100% !important;
-	margin-left: -10px !important;
-	z-index: 10000;
-    -webkit-border-radius: 0px 0px 0px 0px;
-    -khtml-border-radius: 0px 0px 0px 0px;
-    -moz-border-radius: 0px 0px 0px 0px;
-    border-radius: 0px 0px 0px 0px;	
-}
-
-.ie7 #header #header-inner.hover,
-.ie8 #header #header-inner.hover,
-.ie9 #header #header-inner.hover
-{
-    z-index: auto !important;
-}
-
-.header-pos-fix, .anchor{
-	margin-top: -46px;
-	padding-top: 46px;
-}
-
-#header #header-inner #home a {
-	height: 40px;
-	width: 46px;
-	display: block;
-	background: url("../images/button_home.png");
-	background-position: 0 0;
-	margin: 0;
-	padding: 0;
-}
-
-#header #header-inner #home a:hover {
-	background-position: 0 -40px;
-}
-
-#header #header-inner #logo {
-	float: left;
-	position: absolute;
-}
-
-#header #header-inner #logo h1 {
-	color: #FFF;
-	font-size: 20px;
-	margin: 12px 0 0 13px;
-	padding: 0;
-}
-
-#header #header-inner #logo a {
-	color: #fff;
-	text-decoration: none;
-}
-
-#header #header-inner #logo a:hover {
-	color: #bfe3ff;
-}
-
-#header #header-inner #quick,#header #header-inner #quick ul {
-	position: relative;
-	float: right;
-	list-style-type: none;
-	list-style-position: outside;
-	margin: 8px 8px 0 0;
-	padding: 0;
-}
-
-#header #header-inner #quick li {
-	position: relative;
-	float: left;
-	margin: 0 5px 0 0;
-	padding: 0;
-}
-
-#header #header-inner #quick li a.menu_link {
-	top: 0;
-	left: 0;
-	height: 1%;
-	display: block;
-	clear: both;
-	overflow: hidden;
-	color: #FFF;
-	font-weight: 700;
-	text-decoration: none;
-	background: #369;
-	padding: 0;
-	-webkit-border-radius: 4px 4px 4px 4px;
-	-khtml-border-radius: 4px 4px 4px 4px;
-	-moz-border-radius: 4px 4px 4px 4px;
-	border-radius: 4px 4px 4px 4px;
-}
-
-#header #header-inner #quick li span.short {
-	padding: 9px 6px 8px 6px;
-}
-
-#header #header-inner #quick li span {
-	top: 0;
-	right: 0;
-	height: 1%;
-	display: block;
-	float: left;
-	border-left: 1px solid #3f6f9f;
-	margin: 0;
-	padding: 10px 12px 8px 10px;
-}
-
-#header #header-inner #quick li span.normal {
-	border: none;
-	padding: 10px 12px 8px;
-}
-
-#header #header-inner #quick li span.icon {
-	top: 0;
-	left: 0;
-	border-left: none;
-	border-right: 1px solid #2e5c89;
-	padding: 8px 6px 4px;
-}
-
-#header #header-inner #quick li span.icon_short {
-	top: 0;
-	left: 0;
-	border-left: none;
-	border-right: 1px solid #2e5c89;
-	padding: 8px 6px 4px;
-}
-
-#header #header-inner #quick li span.icon img,#header #header-inner #quick li span.icon_short img
-	{
-	margin: 0px -2px 0px 0px;
-}
-
-#header #header-inner #quick li a:hover {
-	background: #4e4e4e no-repeat top left;
-}
-
-#header #header-inner #quick li a:hover span {
-	border-left: 1px solid #545454;
-}
-
-#header #header-inner #quick li a:hover span.icon,#header #header-inner #quick li a:hover span.icon_short
-	{
-	border-left: none;
-	border-right: 1px solid #464646;
-}
-
-#header #header-inner #quick ul {
-	top: 29px;
-	right: 0;
-	min-width: 200px;
-	display: none;
-	position: absolute;
-	background: #FFF;
-	border: 1px solid #666;
-	border-top: 1px solid #003367;
-	z-index: 100;
-	margin: 0px 0px 0px 0px;
-	padding: 0;
-}
-
-#header #header-inner #quick ul.repo_switcher {
-	max-height: 275px;
-	overflow-x: hidden;
-	overflow-y: auto;
-}
-
-#header #header-inner #quick ul.repo_switcher li.qfilter_rs {
-	float: none;
-	margin: 0;
-	border-bottom: 2px solid #003367;
-}
-
-#header #header-inner #quick .repo_switcher_type {
-	position: absolute;
-	left: 0;
-	top: 9px;
-}
-
-#header #header-inner #quick li ul li {
-	border-bottom: 1px solid #ddd;
-}
-
-#header #header-inner #quick li ul li a {
-	width: 182px;
-	height: auto;
-	display: block;
-	float: left;
-	background: #FFF;
-	color: #003367;
-	font-weight: 400;
-	margin: 0;
-	padding: 7px 9px;
-}
-
-#header #header-inner #quick li ul li a:hover {
-	color: #000;
-	background: #FFF;
-}
-
-#header #header-inner #quick ul ul {
-	top: auto;
-}
-
-#header #header-inner #quick li ul ul {
-	right: 200px;
-	max-height: 290px;
-	overflow: auto;
-	overflow-x: hidden;
-	white-space: normal;
-}
-
-#header #header-inner #quick li ul li a.journal,#header #header-inner #quick li ul li a.journal:hover
-	{
-	background: url("../images/icons/book.png") no-repeat scroll 4px 9px
-		#FFF;
-	width: 167px;
-	margin: 0;
-	padding: 12px 9px 7px 24px;
-}
-
-#header #header-inner #quick li ul li a.private_repo,#header #header-inner #quick li ul li a.private_repo:hover
-	{
-	background: url("../images/icons/lock.png") no-repeat scroll 4px 9px
-		#FFF;
-	min-width: 167px;
-	margin: 0;
-	padding: 12px 9px 7px 24px;
-}
-
-#header #header-inner #quick li ul li a.public_repo,#header #header-inner #quick li ul li a.public_repo:hover
-	{
-	background: url("../images/icons/lock_open.png") no-repeat scroll 4px
-		9px #FFF;
-	min-width: 167px;
-	margin: 0;
-	padding: 12px 9px 7px 24px;
-}
-
-#header #header-inner #quick li ul li a.hg,#header #header-inner #quick li ul li a.hg:hover
-	{
-	background: url("../images/icons/hgicon.png") no-repeat scroll 4px 9px
-		#FFF;
-	min-width: 167px;
-	margin: 0 0 0 14px;
-	padding: 12px 9px 7px 24px;
-}
-
-#header #header-inner #quick li ul li a.git,#header #header-inner #quick li ul li a.git:hover
-	{
-	background: url("../images/icons/giticon.png") no-repeat scroll 4px 9px
-		#FFF;
-	min-width: 167px;
-	margin: 0 0 0 14px;
-	padding: 12px 9px 7px 24px;
-}
-
-#header #header-inner #quick li ul li a.repos,#header #header-inner #quick li ul li a.repos:hover
-	{
-	background: url("../images/icons/database_edit.png") no-repeat scroll
-		4px 9px #FFF;
-	width: 167px;
-	margin: 0;
-	padding: 12px 9px 7px 24px;
-}
-
-#header #header-inner #quick li ul li a.repos_groups,#header #header-inner #quick li ul li a.repos_groups:hover
-	{
-	background: url("../images/icons/database_link.png") no-repeat scroll
-		4px 9px #FFF;
-	width: 167px;
-	margin: 0;
-	padding: 12px 9px 7px 24px;
-}
-
-#header #header-inner #quick li ul li a.users,#header #header-inner #quick li ul li a.users:hover
-	{
-	background: #FFF url("../images/icons/user_edit.png") no-repeat 4px 9px;
-	width: 167px;
-	margin: 0;
-	padding: 12px 9px 7px 24px;
-}
-
-#header #header-inner #quick li ul li a.groups,#header #header-inner #quick li ul li a.groups:hover
-	{
-	background: #FFF url("../images/icons/group_edit.png") no-repeat 4px 9px;
-	width: 167px;
-	margin: 0;
-	padding: 12px 9px 7px 24px;
-}
-
-#header #header-inner #quick li ul li a.defaults,#header #header-inner #quick li ul li a.defaults:hover
-    {
-    background: #FFF url("../images/icons/wrench.png") no-repeat 4px 9px;
-    width: 167px;
-    margin: 0;
-    padding: 12px 9px 7px 24px;
-}
-
-#header #header-inner #quick li ul li a.settings,#header #header-inner #quick li ul li a.settings:hover
-	{
-	background: #FFF url("../images/icons/cog.png") no-repeat 4px 9px;
-	width: 167px;
-	margin: 0;
-	padding: 12px 9px 7px 24px;
-}
-
-#header #header-inner #quick li ul li a.permissions,#header #header-inner #quick li ul li a.permissions:hover
-	{
-	background: #FFF url("../images/icons/key.png") no-repeat 4px 9px;
-	width: 167px;
-	margin: 0;
-	padding: 12px 9px 7px 24px;
-}
-
-#header #header-inner #quick li ul li a.ldap,#header #header-inner #quick li ul li a.ldap:hover
-	{
-	background: #FFF url("../images/icons/server_key.png") no-repeat 4px 9px;
-	width: 167px;
-	margin: 0;
-	padding: 12px 9px 7px 24px;
-}
-
-#header #header-inner #quick li ul li a.fork,#header #header-inner #quick li ul li a.fork:hover
-	{
-	background: #FFF url("../images/icons/arrow_divide.png") no-repeat 4px
-		9px;
-	width: 167px;
-	margin: 0;
-	padding: 12px 9px 7px 24px;
-}
-
-#header #header-inner #quick li ul li a.locking_add,#header #header-inner #quick li ul li a.locking_add:hover
-    {
-    background: #FFF url("../images/icons/lock_add.png") no-repeat 4px
-        9px;
-    width: 167px;
-    margin: 0;
-    padding: 12px 9px 7px 24px;
-}
-
-#header #header-inner #quick li ul li a.locking_del,#header #header-inner #quick li ul li a.locking_del:hover
-    {
-    background: #FFF url("../images/icons/lock_delete.png") no-repeat 4px
-        9px;
-    width: 167px;
-    margin: 0;
-    padding: 12px 9px 7px 24px;
-}
-
-#header #header-inner #quick li ul li a.pull_request,#header #header-inner #quick li ul li a.pull_request:hover
-    {
-    background: #FFF url("../images/icons/arrow_join.png") no-repeat 4px
-        9px;
-    width: 167px;
-    margin: 0;
-    padding: 12px 9px 7px 24px;
-}
-
-#header #header-inner #quick li ul li a.compare_request,#header #header-inner #quick li ul li a.compare_request:hover
-    {
-    background: #FFF url("../images/icons/arrow_inout.png") no-repeat 4px
-        9px;
-    width: 167px;
-    margin: 0;
-    padding: 12px 9px 7px 24px;
-}
-
-#header #header-inner #quick li ul li a.search,#header #header-inner #quick li ul li a.search:hover
-	{
-	background: #FFF url("../images/icons/search_16.png") no-repeat 4px 9px;
-	width: 167px;
-	margin: 0;
-	padding: 12px 9px 7px 24px;
-}
-
-#header #header-inner #quick li ul li a.delete,#header #header-inner #quick li ul li a.delete:hover
-	{
-	background: #FFF url("../images/icons/delete.png") no-repeat 4px 9px;
-	width: 167px;
-	margin: 0;
-	padding: 12px 9px 7px 24px;
-}
-
-#header #header-inner #quick li ul li a.branches,#header #header-inner #quick li ul li a.branches:hover
-	{
-	background: #FFF url("../images/icons/arrow_branch.png") no-repeat 4px
-		9px;
-	width: 167px;
-	margin: 0;
-	padding: 12px 9px 7px 24px;
-}
-
-#header #header-inner #quick li ul li a.tags,
-#header #header-inner #quick li ul li a.tags:hover{
-	background: #FFF url("../images/icons/tag_blue.png") no-repeat 4px 9px;
-	width: 167px;
-	margin: 0;
-	padding: 12px 9px 7px 24px;
-}
-
-#header #header-inner #quick li ul li a.bookmarks,
-#header #header-inner #quick li ul li a.bookmarks:hover{
-    background: #FFF url("../images/icons/tag_green.png") no-repeat 4px 9px;
-    width: 167px;
-    margin: 0;
-    padding: 12px 9px 7px 24px;
-}
-
-#header #header-inner #quick li ul li a.admin,
-#header #header-inner #quick li ul li a.admin:hover{
-	background: #FFF url("../images/icons/cog_edit.png") no-repeat 4px 9px;
-	width: 167px;
-	margin: 0;
-	padding: 12px 9px 7px 24px;
-}
-
-.groups_breadcrumbs a {
-	color: #fff;
-}
-
-.groups_breadcrumbs a:hover {
-	color: #bfe3ff;
-	text-decoration: none;
-}
-
-td.quick_repo_menu {
-	background: #FFF url("../images/vertical-indicator.png") 8px 50% no-repeat !important;
-	cursor: pointer;
-	width: 8px;
-	border: 1px solid transparent;
-}
-
-td.quick_repo_menu.active {
-    background: url("../images/dt-arrow-dn.png") no-repeat scroll 5px 50% #FFFFFF !important;
-    border: 1px solid #003367;
-    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
-    cursor: pointer;
-}
-
-td.quick_repo_menu .menu_items {
-	margin-top: 10px;
-	margin-left:-6px;
-	width: 150px;
-	position: absolute;
-	background-color: #FFF;
-	background: none repeat scroll 0 0 #FFFFFF;
-	border-color: #003367 #666666 #666666;
-	border-right: 1px solid #666666;
-	border-style: solid;
-	border-width: 1px;
-	box-shadow: 2px 8px 4px rgba(0, 0, 0, 0.2);
-	border-top-style: none;
-}
-
-td.quick_repo_menu .menu_items li {
-	padding: 0 !important;
-}
-
-td.quick_repo_menu .menu_items a {
-	display: block;
-	padding: 4px 12px 4px 8px;
-}
-
-td.quick_repo_menu .menu_items a:hover {
-	background-color: #EEE;
-	text-decoration: none;
-}
-
-td.quick_repo_menu .menu_items .icon img {
-	margin-bottom: -2px;
-}
-
-td.quick_repo_menu .menu_items.hidden {
-	display: none;
-}
-
-.yui-dt-first th {
-	text-align: left;
-}
-
-/*
-Copyright (c) 2011, Yahoo! Inc. All rights reserved.
-Code licensed under the BSD License:
-http://developer.yahoo.com/yui/license.html
-version: 2.9.0
-*/
-.yui-skin-sam .yui-dt-mask {
-    position: absolute;
-    z-index: 9500;
-}
-.yui-dt-tmp {
-    position: absolute;
-    left: -9000px;
-}
-.yui-dt-scrollable .yui-dt-bd { overflow: auto }
-.yui-dt-scrollable .yui-dt-hd {
-    overflow: hidden;
-    position: relative;
-}
-.yui-dt-scrollable .yui-dt-bd thead tr,
-.yui-dt-scrollable .yui-dt-bd thead th {
-    position: absolute;
-    left: -1500px;
-}
-.yui-dt-scrollable tbody { -moz-outline: 0 }
-.yui-skin-sam thead .yui-dt-sortable { cursor: pointer }
-.yui-skin-sam thead .yui-dt-draggable { cursor: move }
-.yui-dt-coltarget {
-    position: absolute;
-    z-index: 999;
-}
-.yui-dt-hd { zoom: 1 }
-th.yui-dt-resizeable .yui-dt-resizerliner { position: relative }
-.yui-dt-resizer {
-    position: absolute;
-    right: 0;
-    bottom: 0;
-    height: 100%;
-    cursor: e-resize;
-    cursor: col-resize;
-    background-color: #CCC;
-    opacity: 0;
-    filter: alpha(opacity=0);
-}
-.yui-dt-resizerproxy {
-    visibility: hidden;
-    position: absolute;
-    z-index: 9000;
-    background-color: #CCC;
-    opacity: 0;
-    filter: alpha(opacity=0);
-}
-th.yui-dt-hidden .yui-dt-liner,
-td.yui-dt-hidden .yui-dt-liner,
-th.yui-dt-hidden .yui-dt-resizer { display: none }
-.yui-dt-editor,
-.yui-dt-editor-shim {
-    position: absolute;
-    z-index: 9000;
-}
-.yui-skin-sam .yui-dt table {
-    margin: 0;
-    padding: 0;
-    font-family: arial;
-    font-size: inherit;
-    border-collapse: separate;
-    *border-collapse: collapse;
-    border-spacing: 0;
-    border: 1px solid #7f7f7f;
-}
-.yui-skin-sam .yui-dt thead { border-spacing: 0 }
-.yui-skin-sam .yui-dt caption {
-    color: #000;
-    font-size: 85%;
-    font-weight: normal;
-    font-style: italic;
-    line-height: 1;
-    padding: 1em 0;
-    text-align: center;
-}
-.yui-skin-sam .yui-dt th { background: #d8d8da url(../images/sprite.png) repeat-x 0 0 }
-.yui-skin-sam .yui-dt th,
-.yui-skin-sam .yui-dt th a {
-    font-weight: normal;
-    text-decoration: none;
-    color: #000;
-    vertical-align: bottom;
-}
-.yui-skin-sam .yui-dt th {
-    margin: 0;
-    padding: 0;
-    border: 0;
-    border-right: 1px solid #cbcbcb;
-}
-.yui-skin-sam .yui-dt tr.yui-dt-first td { border-top: 1px solid #7f7f7f }
-.yui-skin-sam .yui-dt th .yui-dt-liner { white-space: nowrap }
-.yui-skin-sam .yui-dt-liner {
-    margin: 0;
-    padding: 0;
-}
-.yui-skin-sam .yui-dt-coltarget {
-    width: 5px;
-    background-color: red;
-}
-.yui-skin-sam .yui-dt td {
-    margin: 0;
-    padding: 0;
-    border: 0;
-    border-right: 1px solid #cbcbcb;
-    text-align: left;
-}
-.yui-skin-sam .yui-dt-list td { border-right: 0 }
-.yui-skin-sam .yui-dt-resizer { width: 6px }
-.yui-skin-sam .yui-dt-mask {
-    background-color: #000;
-    opacity: .25;
-    filter: alpha(opacity=25);
-}
-.yui-skin-sam .yui-dt-message { background-color: #FFF }
-.yui-skin-sam .yui-dt-scrollable table { border: 0 }
-.yui-skin-sam .yui-dt-scrollable .yui-dt-hd {
-    border-left: 1px solid #7f7f7f;
-    border-top: 1px solid #7f7f7f;
-    border-right: 1px solid #7f7f7f;
-}
-.yui-skin-sam .yui-dt-scrollable .yui-dt-bd {
-    border-left: 1px solid #7f7f7f;
-    border-bottom: 1px solid #7f7f7f;
-    border-right: 1px solid #7f7f7f;
-    background-color: #FFF;
-}
-.yui-skin-sam .yui-dt-scrollable .yui-dt-data tr.yui-dt-last td { border-bottom: 1px solid #7f7f7f }
-.yui-skin-sam th.yui-dt-asc,
-.yui-skin-sam th.yui-dt-desc { background: url(../images/sprite.png) repeat-x 0 -100px }
-.yui-skin-sam th.yui-dt-sortable .yui-dt-label { margin-right: 10px }
-.yui-skin-sam th.yui-dt-asc .yui-dt-liner { background: url(../images/dt-arrow-up.png) no-repeat right }
-.yui-skin-sam th.yui-dt-desc .yui-dt-liner { background: url(../images/dt-arrow-dn.png) no-repeat right }
-tbody .yui-dt-editable { cursor: pointer }
-.yui-dt-editor {
-    text-align: left;
-    background-color: #f2f2f2;
-    border: 1px solid #808080;
-    padding: 6px;
-}
-.yui-dt-editor label {
-    padding-left: 4px;
-    padding-right: 6px;
-}
-.yui-dt-editor .yui-dt-button {
-    padding-top: 6px;
-    text-align: right;
-}
-.yui-dt-editor .yui-dt-button button {
-    background: url(../images/sprite.png) repeat-x 0 0;
-    border: 1px solid #999;
-    width: 4em;
-    height: 1.8em;
-    margin-left: 6px;
-}
-.yui-dt-editor .yui-dt-button button.yui-dt-default {
-    background: url(../images/sprite.png) repeat-x 0 -1400px;
-    background-color: #5584e0;
-    border: 1px solid #304369;
-    color: #FFF;
-}
-.yui-dt-editor .yui-dt-button button:hover {
-    background: url(../images/sprite.png) repeat-x 0 -1300px;
-    color: #000;
-}
-.yui-dt-editor .yui-dt-button button:active {
-    background: url(../images/sprite.png) repeat-x 0 -1700px;
-    color: #000;
-}
-.yui-skin-sam tr.yui-dt-even { background-color: #FFF }
-.yui-skin-sam tr.yui-dt-odd { background-color: #edf5ff }
-.yui-skin-sam tr.yui-dt-even td.yui-dt-asc,
-.yui-skin-sam tr.yui-dt-even td.yui-dt-desc { background-color: #edf5ff }
-.yui-skin-sam tr.yui-dt-odd td.yui-dt-asc,
-.yui-skin-sam tr.yui-dt-odd td.yui-dt-desc { background-color: #dbeaff }
-.yui-skin-sam .yui-dt-list tr.yui-dt-even { background-color: #FFF }
-.yui-skin-sam .yui-dt-list tr.yui-dt-odd { background-color: #FFF }
-.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-asc,
-.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-desc { background-color: #edf5ff }
-.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-asc,
-.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-desc { background-color: #edf5ff }
-.yui-skin-sam th.yui-dt-highlighted,
-.yui-skin-sam th.yui-dt-highlighted a { background-color: #b2d2ff }
-.yui-skin-sam tr.yui-dt-highlighted,
-.yui-skin-sam tr.yui-dt-highlighted td.yui-dt-asc,
-.yui-skin-sam tr.yui-dt-highlighted td.yui-dt-desc,
-.yui-skin-sam tr.yui-dt-even td.yui-dt-highlighted,
-.yui-skin-sam tr.yui-dt-odd td.yui-dt-highlighted {
-    cursor: pointer;
-    background-color: #b2d2ff;
-}
-.yui-skin-sam .yui-dt-list th.yui-dt-highlighted,
-.yui-skin-sam .yui-dt-list th.yui-dt-highlighted a { background-color: #b2d2ff }
-.yui-skin-sam .yui-dt-list tr.yui-dt-highlighted,
-.yui-skin-sam .yui-dt-list tr.yui-dt-highlighted td.yui-dt-asc,
-.yui-skin-sam .yui-dt-list tr.yui-dt-highlighted td.yui-dt-desc,
-.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-highlighted,
-.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-highlighted {
-    cursor: pointer;
-    background-color: #b2d2ff;
-}
-.yui-skin-sam th.yui-dt-selected,
-.yui-skin-sam th.yui-dt-selected a { background-color: #446cd7 }
-.yui-skin-sam tr.yui-dt-selected td,
-.yui-skin-sam tr.yui-dt-selected td.yui-dt-asc,
-.yui-skin-sam tr.yui-dt-selected td.yui-dt-desc {
-    background-color: #426fd9;
-    color: #FFF;
-}
-.yui-skin-sam tr.yui-dt-even td.yui-dt-selected,
-.yui-skin-sam tr.yui-dt-odd td.yui-dt-selected {
-    background-color: #446cd7;
-    color: #FFF;
-}
-.yui-skin-sam .yui-dt-list th.yui-dt-selected,
-.yui-skin-sam .yui-dt-list th.yui-dt-selected a { background-color: #446cd7 }
-.yui-skin-sam .yui-dt-list tr.yui-dt-selected td,
-.yui-skin-sam .yui-dt-list tr.yui-dt-selected td.yui-dt-asc,
-.yui-skin-sam .yui-dt-list tr.yui-dt-selected td.yui-dt-desc {
-    background-color: #426fd9;
-    color: #FFF;
-}
-.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-selected,
-.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-selected {
-    background-color: #446cd7;
-    color: #FFF;
-}
-.yui-skin-sam .yui-dt-paginator {
-    display: block;
-    margin: 6px 0;
-    white-space: nowrap;
-}
-.yui-skin-sam .yui-dt-paginator .yui-dt-first,
-.yui-skin-sam .yui-dt-paginator .yui-dt-last,
-.yui-skin-sam .yui-dt-paginator .yui-dt-selected { padding: 2px 6px }
-.yui-skin-sam .yui-dt-paginator a.yui-dt-first,
-.yui-skin-sam .yui-dt-paginator a.yui-dt-last { text-decoration: none }
-.yui-skin-sam .yui-dt-paginator .yui-dt-previous,
-.yui-skin-sam .yui-dt-paginator .yui-dt-next { display: none }
-.yui-skin-sam a.yui-dt-page {
-    border: 1px solid #cbcbcb;
-    padding: 2px 6px;
-    text-decoration: none;
-    background-color: #fff;
-}
-.yui-skin-sam .yui-dt-selected {
-    border: 1px solid #fff;
-    background-color: #fff;
-}
-
-#content #left {
-	left: 0;
-	width: 280px;
-	position: absolute;
-}
-
-#content #right {
-	margin: 0 60px 10px 290px;
-}
-
-#content div.box {
-	clear: both;
-	overflow: hidden;
-	background: #fff;
-	margin: 0 0 10px;
-	padding: 0 0 10px;
-	-webkit-border-radius: 4px 4px 4px 4px;
-	-khtml-border-radius: 4px 4px 4px 4px;
-	-moz-border-radius: 4px 4px 4px 4px;
-	border-radius: 4px 4px 4px 4px;
-	box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
-}
-
-#content div.box-left {
-	width: 49%;
-	clear: none;
-	float: left;
-	margin: 0 0 10px;
-}
-
-#content div.box-right {
-	width: 49%;
-	clear: none;
-	float: right;
-	margin: 0 0 10px;
-}
-
-#content div.box div.title {
-	clear: both;
-	overflow: hidden;
-	background-color: #003B76;
-	background-repeat: repeat-x;
-	background-image: -khtml-gradient(linear, left top, left bottom, from(#003B76), to(#00376E) );
-	background-image: -moz-linear-gradient(top, #003b76, #00376e);
-	background-image: -ms-linear-gradient(top, #003b76, #00376e);
-	background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76), color-stop(100%, #00376e) );
-	background-image: -webkit-linear-gradient(top, #003b76, #00376e);
-	background-image: -o-linear-gradient(top, #003b76, #00376e);
-	background-image: linear-gradient(top, #003b76, #00376e);
-	filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76', endColorstr='#00376e', GradientType=0 );
-	margin: 0 0 20px;
-	padding: 0;
-}
-
-#content div.box div.title h5 {
-	float: left;
-	border: none;
-	color: #fff;
-	text-transform: uppercase;
-	margin: 0;
-	padding: 11px 0 11px 10px;
-}
-
-#content div.box div.title .link-white{
-	color: #FFFFFF;
-}
-
-#content div.box div.title .link-white.current{
-    color: #BFE3FF;
-}
-
-#content div.box div.title ul.links li {
-	list-style: none;
-	float: left;
-	margin: 0;
-	padding: 0;
-}
-
-#content div.box div.title ul.links li a {
-	border-left: 1px solid #316293;
-	color: #FFFFFF;
-	display: block;
-	float: left;
-	font-size: 13px;
-	font-weight: 700;
-	height: 1%;
-	margin: 0;
-	padding: 11px 22px 12px;
-	text-decoration: none;
-}
-
-#content div.box h1,#content div.box h2,#content div.box h3,#content div.box h4,#content div.box h5,#content div.box h6,
-#content div.box div.h1,#content div.box div.h2,#content div.box div.h3,#content div.box div.h4,#content div.box div.h5,#content div.box div.h6
-
-	{
-	clear: both;
-	overflow: hidden;
-	border-bottom: 1px solid #DDD;
-	margin: 10px 20px;
-	padding: 0 0 15px;
-}
-
-#content div.box p {
-	color: #5f5f5f;
-	font-size: 12px;
-	line-height: 150%;
-	margin: 0 24px 10px;
-	padding: 0;
-}
-
-#content div.box blockquote {
-	border-left: 4px solid #DDD;
-	color: #5f5f5f;
-	font-size: 11px;
-	line-height: 150%;
-	margin: 0 34px;
-	padding: 0 0 0 14px;
-}
-
-#content div.box blockquote p {
-	margin: 10px 0;
-	padding: 0;
-}
-
-#content div.box dl {
-	margin: 10px 0px;
-}
-
-#content div.box dt {
-	font-size: 12px;
-	margin: 0;
-}
-
-#content div.box dd {
-	font-size: 12px;
-	margin: 0;
-	padding: 8px 0 8px 15px;
-}
-
-#content div.box li {
-	font-size: 12px;
-	padding: 4px 0;
-}
-
-#content div.box ul.disc,#content div.box ul.circle {
-	margin: 10px 24px 10px 38px;
-}
-
-#content div.box ul.square {
-	margin: 10px 24px 10px 40px;
-}
-
-#content div.box img.left {
-	border: none;
-	float: left;
-	margin: 10px 10px 10px 0;
-}
-
-#content div.box img.right {
-	border: none;
-	float: right;
-	margin: 10px 0 10px 10px;
-}
-
-#content div.box div.messages {
-	clear: both;
-	overflow: hidden;
-	margin: 0 20px;
-	padding: 0;
-}
-
-#content div.box div.message {
-	clear: both;
-	overflow: hidden;
-	margin: 0;
-	padding: 5px 0;
-    white-space: pre-wrap;
-}
-#content div.box div.expand {
-	width: 110%;
-	height:14px;
-	font-size:10px;
-	text-align:center;
-	cursor: pointer;
-	color:#666;
-
-	background:-webkit-gradient(linear,0% 50%,100% 50%,color-stop(0%,rgba(255,255,255,0)),color-stop(100%,rgba(64,96,128,0.1)));
-	background:-webkit-linear-gradient(top,rgba(255,255,255,0),rgba(64,96,128,0.1));
-	background:-moz-linear-gradient(top,rgba(255,255,255,0),rgba(64,96,128,0.1));
-	background:-o-linear-gradient(top,rgba(255,255,255,0),rgba(64,96,128,0.1));
-	background:-ms-linear-gradient(top,rgba(255,255,255,0),rgba(64,96,128,0.1));
-	background:linear-gradient(top,rgba(255,255,255,0),rgba(64,96,128,0.1));
-
-	display: none;
-}
-#content div.box div.expand .expandtext {
-	background-color: #ffffff;
-	padding: 2px;
-	border-radius: 2px;
-}
-
-#content div.box div.message a {
-	font-weight: 400 !important;
-}
-
-#content div.box div.message div.image {
-	float: left;
-	margin: 9px 0 0 5px;
-	padding: 6px;
-}
-
-#content div.box div.message div.image img {
-	vertical-align: middle;
-	margin: 0;
-}
-
-#content div.box div.message div.text {
-	float: left;
-	margin: 0;
-	padding: 9px 6px;
-}
-
-#content div.box div.message div.dismiss a {
-	height: 16px;
-	width: 16px;
-	display: block;
-	background: url("../images/icons/cross.png") no-repeat;
-	margin: 15px 14px 0 0;
-	padding: 0;
-}
-
-#content div.box div.message div.text h1,#content div.box div.message div.text h2,#content div.box div.message div.text h3,#content div.box div.message div.text h4,#content div.box div.message div.text h5,#content div.box div.message div.text h6
-	{
-	border: none;
-	margin: 0;
-	padding: 0;
-}
-
-#content div.box div.message div.text span {
-	height: 1%;
-	display: block;
-	margin: 0;
-	padding: 5px 0 0;
-}
-
-#content div.box div.message-error {
-	height: 1%;
-	clear: both;
-	overflow: hidden;
-	background: #FBE3E4;
-	border: 1px solid #FBC2C4;
-	color: #860006;
-}
-
-#content div.box div.message-error h6 {
-	color: #860006;
-}
-
-#content div.box div.message-warning {
-	height: 1%;
-	clear: both;
-	overflow: hidden;
-	background: #FFF6BF;
-	border: 1px solid #FFD324;
-	color: #5f5200;
-}
-
-#content div.box div.message-warning h6 {
-	color: #5f5200;
-}
-
-#content div.box div.message-notice {
-	height: 1%;
-	clear: both;
-	overflow: hidden;
-	background: #8FBDE0;
-	border: 1px solid #6BACDE;
-	color: #003863;
-}
-
-#content div.box div.message-notice h6 {
-	color: #003863;
-}
-
-#content div.box div.message-success {
-	height: 1%;
-	clear: both;
-	overflow: hidden;
-	background: #E6EFC2;
-	border: 1px solid #C6D880;
-	color: #4e6100;
-}
-
-#content div.box div.message-success h6 {
-	color: #4e6100;
-}
-
-#content div.box div.form div.fields div.field {
-	height: 1%;
-	border-bottom: 1px solid #DDD;
-	clear: both;
-	margin: 0;
-	padding: 10px 0;
-}
-
-#content div.box div.form div.fields div.field-first {
-	padding: 0 0 10px;
-}
-
-#content div.box div.form div.fields div.field-noborder {
-	border-bottom: 0 !important;
-}
-
-#content div.box div.form div.fields div.field span.error-message {
-	height: 1%;
-	display: inline-block;
-	color: red;
-	margin: 8px 0 0 4px;
-	padding: 0;
-}
-
-#content div.box div.form div.fields div.field span.success {
-	height: 1%;
-	display: block;
-	color: #316309;
-	margin: 8px 0 0;
-	padding: 0;
-}
-
-#content div.box div.form div.fields div.field div.label {
-	left: 70px;
-	width: 155px;
-	position: absolute;
-	margin: 0;
-	padding: 5px 0 0 0px;
-}
-
-#content div.box div.form div.fields div.field div.label-summary {
-    left: 30px;
-    width: 155px;
-    position: absolute;
-    margin: 0;
-    padding: 0px 0 0 0px;
-}
-
-#content div.box-left div.form div.fields div.field div.label,
-#content div.box-right div.form div.fields div.field div.label,
-#content div.box-left div.form div.fields div.field div.label,
-#content div.box-left div.form div.fields div.field div.label-summary,
-#content div.box-right div.form div.fields div.field div.label-summary,
-#content div.box-left div.form div.fields div.field div.label-summary
-	{
-	clear: both;
-	overflow: hidden;
-	left: 0;
-	width: auto;
-	position: relative;
-	margin: 0;
-	padding: 0 0 8px;
-}
-
-#content div.box div.form div.fields div.field div.label-select {
-	padding: 5px 0 0 5px;
-}
-
-#content div.box-left div.form div.fields div.field div.label-select,
-#content div.box-right div.form div.fields div.field div.label-select
-	{
-	padding: 0 0 8px;
-}
-
-#content div.box-left div.form div.fields div.field div.label-textarea,
-#content div.box-right div.form div.fields div.field div.label-textarea
-	{
-	padding: 0 0 8px !important;
-}
-
-#content div.box div.form div.fields div.field div.label label,div.label label
-	{
-	color: #393939;
-	font-weight: 700;
-}
-#content div.box div.form div.fields div.field div.label label,div.label-summary label
-    {
-    color: #393939;
-    font-weight: 700;
-}
-#content div.box div.form div.fields div.field div.input {
-	margin: 0 0 0 200px;
-}
-
-#content div.box div.form div.fields div.field div.input.summary {
-    margin: 0 0 0 110px;
-}
-#content div.box div.form div.fields div.field div.input.summary-short {
-    margin: 0 0 0 110px;
-}
-#content div.box div.form div.fields div.field div.file {
-	margin: 0 0 0 200px;
-}
-
-#content div.box-left div.form div.fields div.field div.input,#content div.box-right div.form div.fields div.field div.input
-	{
-	margin: 0 0 0 0px;
-}
-
-#content div.box div.form div.fields div.field div.input input,
-.reviewer_ac input {
-	background: #FFF;
-	border-top: 1px solid #b3b3b3;
-	border-left: 1px solid #b3b3b3;
-	border-right: 1px solid #eaeaea;
-	border-bottom: 1px solid #eaeaea;
-	color: #000;
-	font-size: 11px;
-	margin: 0;
-	padding: 7px 7px 6px;
-}
-
-#content div.box div.form div.fields div.field div.input input#clone_url,
-#content div.box div.form div.fields div.field div.input input#clone_url_id
-{
-    font-size: 16px;
-    padding: 2px;	
-}
-
-#content div.box div.form div.fields div.field div.file input {
-	background: none repeat scroll 0 0 #FFFFFF;
-	border-color: #B3B3B3 #EAEAEA #EAEAEA #B3B3B3;
-	border-style: solid;
-	border-width: 1px;
-	color: #000000;
-	font-size: 11px;
-	margin: 0;
-	padding: 7px 7px 6px;
-}
-
-input.disabled {
-    background-color: #F5F5F5 !important;	
-}
-#content div.box div.form div.fields div.field div.input input.small {
-	width: 30%;
-}
-
-#content div.box div.form div.fields div.field div.input input.medium {
-	width: 55%;
-}
-
-#content div.box div.form div.fields div.field div.input input.large {
-	width: 85%;
-}
-
-#content div.box div.form div.fields div.field div.input input.date {
-	width: 177px;
-}
-
-#content div.box div.form div.fields div.field div.input input.button {
-	background: #D4D0C8;
-	border-top: 1px solid #FFF;
-	border-left: 1px solid #FFF;
-	border-right: 1px solid #404040;
-	border-bottom: 1px solid #404040;
-	color: #000;
-	margin: 0;
-	padding: 4px 8px;
-}
-
-#content div.box div.form div.fields div.field div.textarea {
-	border-top: 1px solid #b3b3b3;
-	border-left: 1px solid #b3b3b3;
-	border-right: 1px solid #eaeaea;
-	border-bottom: 1px solid #eaeaea;
-	margin: 0 0 0 200px;
-	padding: 10px;
-}
-
-#content div.box div.form div.fields div.field div.textarea-editor {
-	border: 1px solid #ddd;
-	padding: 0;
-}
-
-#content div.box div.form div.fields div.field div.textarea textarea {
-	width: 100%;
-	height: 220px;
-	overflow: hidden;
-	background: #FFF;
-	color: #000;
-	font-size: 11px;
-	outline: none;
-	border-width: 0;
-	margin: 0;
-	padding: 0;
-}
-
-#content div.box-left div.form div.fields div.field div.textarea textarea,#content div.box-right div.form div.fields div.field div.textarea textarea
-	{
-	width: 100%;
-	height: 100px;
-}
-
-#content div.box div.form div.fields div.field div.textarea table {
-	width: 100%;
-	border: none;
-	margin: 0;
-	padding: 0;
-}
-
-#content div.box div.form div.fields div.field div.textarea table td {
-	background: #DDD;
-	border: none;
-	padding: 0;
-}
-
-#content div.box div.form div.fields div.field div.textarea table td table
-	{
-	width: auto;
-	border: none;
-	margin: 0;
-	padding: 0;
-}
-
-#content div.box div.form div.fields div.field div.textarea table td table td
-	{
-	font-size: 11px;
-	padding: 5px 5px 5px 0;
-}
-
-#content div.box div.form div.fields div.field input[type=text]:focus,
-#content div.box div.form div.fields div.field input[type=password]:focus,
-#content div.box div.form div.fields div.field input[type=file]:focus,
-#content div.box div.form div.fields div.field textarea:focus,
-#content div.box div.form div.fields div.field select:focus,
-.reviewer_ac input:focus
-	{
-	background: #f6f6f6;
-	border-color: #666;
-}
-
-.reviewer_ac {
-	padding:10px
-}
-
-div.form div.fields div.field div.button {
-	margin: 0;
-	padding: 0 0 0 8px;
-}
-#content div.box table.noborder {
-	border: 1px solid transparent;
-}
-
-#content div.box table {
-	width: 100%;
-	border-collapse: separate;
-	margin: 0;
-	padding: 0;
-	border: 1px solid #eee;
-    -webkit-border-radius: 4px;
-    -moz-border-radius: 4px;
-    border-radius: 4px;	
-}
-
-#content div.box table th {
-	background: #eee;
-	border-bottom: 1px solid #ddd;
-	padding: 5px 0px 5px 5px;
-	text-align: left;
-}
-
-#content div.box table th.left {
-	text-align: left;
-}
-
-#content div.box table th.right {
-	text-align: right;
-}
-
-#content div.box table th.center {
-	text-align: center;
-}
-
-#content div.box table th.selected {
-	vertical-align: middle;
-	padding: 0;
-}
-
-#content div.box table td {
-	background: #fff;
-	border-bottom: 1px solid #cdcdcd;
-	vertical-align: middle;
-	padding: 5px;
-}
-
-#content div.box table tr.selected td {
-	background: #FFC;
-}
-
-#content div.box table td.selected {
-	width: 3%;
-	text-align: center;
-	vertical-align: middle;
-	padding: 0;
-}
-
-#content div.box table td.action {
-	width: 45%;
-	text-align: left;
-}
-
-#content div.box table td.date {
-	width: 33%;
-	text-align: center;
-}
-
-#content div.box div.action {
-	float: right;
-	background: #FFF;
-	text-align: right;
-	margin: 10px 0 0;
-	padding: 0;
-}
-
-#content div.box div.action select {
-	font-size: 11px;
-	margin: 0;
-}
-
-#content div.box div.action .ui-selectmenu {
-	margin: 0;
-	padding: 0;
-}
-
-#content div.box div.pagination {
-	height: 1%;
-	clear: both;
-	overflow: hidden;
-	margin: 10px 0 0;
-	padding: 0;
-}
-
-#content div.box div.pagination ul.pager {
-	float: right;
-	text-align: right;
-	margin: 0;
-	padding: 0;
-}
-
-#content div.box div.pagination ul.pager li {
-	height: 1%;
-	float: left;
-	list-style: none;
-	background: #ebebeb url("../images/pager.png") repeat-x;
-	border-top: 1px solid #dedede;
-	border-left: 1px solid #cfcfcf;
-	border-right: 1px solid #c4c4c4;
-	border-bottom: 1px solid #c4c4c4;
-	color: #4A4A4A;
-	font-weight: 700;
-	margin: 0 0 0 4px;
-	padding: 0;
-}
-
-#content div.box div.pagination ul.pager li.separator {
-	padding: 6px;
-}
-
-#content div.box div.pagination ul.pager li.current {
-	background: #b4b4b4 url("../images/pager_selected.png") repeat-x;
-	border-top: 1px solid #ccc;
-	border-left: 1px solid #bebebe;
-	border-right: 1px solid #b1b1b1;
-	border-bottom: 1px solid #afafaf;
-	color: #515151;
-	padding: 6px;
-}
-
-#content div.box div.pagination ul.pager li a {
-	height: 1%;
-	display: block;
-	float: left;
-	color: #515151;
-	text-decoration: none;
-	margin: 0;
-	padding: 6px;
-}
-
-#content div.box div.pagination ul.pager li a:hover,#content div.box div.pagination ul.pager li a:active
-	{
-	background: #b4b4b4 url("../images/pager_selected.png") repeat-x;
-	border-top: 1px solid #ccc;
-	border-left: 1px solid #bebebe;
-	border-right: 1px solid #b1b1b1;
-	border-bottom: 1px solid #afafaf;
-	margin: -1px;
-}
-
-#content div.box div.pagination-wh {
-	height: 1%;
-	clear: both;
-	overflow: hidden;
-	text-align: right;
-	margin: 10px 0 0;
-	padding: 0;
-}
-
-#content div.box div.pagination-right {
-	float: right;
-}
-
-#content div.box div.pagination-wh a,
-#content div.box div.pagination-wh span.pager_dotdot,
-#content div.box div.pagination-wh span.yui-pg-previous,
-#content div.box div.pagination-wh span.yui-pg-last,
-#content div.box div.pagination-wh span.yui-pg-next,
-#content div.box div.pagination-wh span.yui-pg-first
-	{
-	height: 1%;
-	float: left;
-	background: #ebebeb url("../images/pager.png") repeat-x;
-	border-top: 1px solid #dedede;
-	border-left: 1px solid #cfcfcf;
-	border-right: 1px solid #c4c4c4;
-	border-bottom: 1px solid #c4c4c4;
-	color: #4A4A4A;
-	font-weight: 700;
-	margin: 0 0 0 4px;
-	padding: 6px;
-}
-
-#content div.box div.pagination-wh span.pager_curpage {
-	height: 1%;
-	float: left;
-	background: #b4b4b4 url("../images/pager_selected.png") repeat-x;
-	border-top: 1px solid #ccc;
-	border-left: 1px solid #bebebe;
-	border-right: 1px solid #b1b1b1;
-	border-bottom: 1px solid #afafaf;
-	color: #515151;
-	font-weight: 700;
-	margin: 0 0 0 4px;
-	padding: 6px;
-}
-
-#content div.box div.pagination-wh a:hover,#content div.box div.pagination-wh a:active
-	{
-	background: #b4b4b4 url("../images/pager_selected.png") repeat-x;
-	border-top: 1px solid #ccc;
-	border-left: 1px solid #bebebe;
-	border-right: 1px solid #b1b1b1;
-	border-bottom: 1px solid #afafaf;
-	text-decoration: none;
-}
-
-#content div.box div.traffic div.legend {
-	clear: both;
-	overflow: hidden;
-	border-bottom: 1px solid #ddd;
-	margin: 0 0 10px;
-	padding: 0 0 10px;
-}
-
-#content div.box div.traffic div.legend h6 {
-	float: left;
-	border: none;
-	margin: 0;
-	padding: 0;
-}
-
-#content div.box div.traffic div.legend li {
-	list-style: none;
-	float: left;
-	font-size: 11px;
-	margin: 0;
-	padding: 0 8px 0 4px;
-}
-
-#content div.box div.traffic div.legend li.visits {
-	border-left: 12px solid #edc240;
-}
-
-#content div.box div.traffic div.legend li.pageviews {
-	border-left: 12px solid #afd8f8;
-}
-
-#content div.box div.traffic table {
-	width: auto;
-}
-
-#content div.box div.traffic table td {
-	background: transparent;
-	border: none;
-	padding: 2px 3px 3px;
-}
-
-#content div.box div.traffic table td.legendLabel {
-	padding: 0 3px 2px;
-}
-
-#summary {
-	
-}
-
-#summary .metatag {
-    display: inline-block;
-    padding: 3px 5px;
-    margin-bottom: 3px;
-    margin-right: 1px;
-    border-radius: 5px;
-}
-
-#content div.box #summary p {
-    margin-bottom: -5px;
-        width: 600px;
-        white-space: pre-wrap;
-}
-
-#content div.box #summary p:last-child {
-    margin-bottom: 9px;
-}
-
-#content div.box #summary p:first-of-type {
-    margin-top: 9px;
-}
-
- .metatag {
-    display: inline-block;
-    margin-right: 1px;
-    -webkit-border-radius: 4px 4px 4px 4px;
-    -khtml-border-radius: 4px 4px 4px 4px;
-    -moz-border-radius: 4px 4px 4px 4px;
-    border-radius: 4px 4px 4px 4px;
-    
-    border: solid 1px #9CF;
-    padding: 2px 3px 2px 3px !important;
-    background-color: #DEF;    
-}
-
-.metatag[tag="dead"] {
-	background-color: #E44;
-}
-
-.metatag[tag="stale"] {
-    background-color: #EA4;
-}
-
-.metatag[tag="featured"] {
-	background-color: #AEA;
-}
-
-.metatag[tag="requires"] { 
-	background-color: #9CF;
-}
-
-.metatag[tag="recommends"] { 
-	background-color: #BDF; 
-}
-
-.metatag[tag="lang"] { 
-    background-color: #FAF474; 
-}
-
-.metatag[tag="license"] {
-    border: solid 1px #9CF;
-    background-color: #DEF;
-    target-new: tab !important;
-}
-.metatag[tag="see"] {
-    border: solid 1px #CBD;
-    background-color: #EDF;
-}
-
-a.metatag[tag="license"]:hover {
-    background-color: #003367;
-    color: #FFF;
-    text-decoration: none;
-}
-
-#summary .desc {
-	white-space: pre;
-	width: 100%;
-}
-
-#summary .repo_name {
-	font-size: 1.6em;
-	font-weight: bold;
-	vertical-align: baseline;
-	clear: right
-}
-
-#footer {
-	clear: both;
-	overflow: hidden;
-	text-align: right;
-	margin: 0;
-	padding: 0 10px 4px;
-	margin: -10px 0 0;
-}
-
-#footer div#footer-inner {
-	background-color: #003B76; 
-	background-repeat : repeat-x;
-	background-image : -khtml-gradient( linear, left top, left bottom, from(#003B76), to(#00376E)); 
-	background-image : -moz-linear-gradient(top, #003b76, #00376e); 
-	background-image : -ms-linear-gradient( top, #003b76, #00376e); 
-	background-image : -webkit-gradient( linear, left top, left bottom, color-stop( 0%, #003b76), color-stop( 100%, #00376e));
-	background-image : -webkit-linear-gradient( top, #003b76, #00376e));
-	background-image : -o-linear-gradient( top, #003b76, #00376e));
-	background-image : linear-gradient( top, #003b76, #00376e); 
-	filter :progid : DXImageTransform.Microsoft.gradient ( startColorstr = '#003b76', endColorstr = '#00376e', GradientType = 0);
-	box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
-	-webkit-border-radius: 4px 4px 4px 4px;
-	-khtml-border-radius: 4px 4px 4px 4px;
-	-moz-border-radius: 4px 4px 4px 4px;
-	border-radius: 4px 4px 4px 4px;
-}
-
-#footer div#footer-inner p {
-	padding: 15px 25px 15px 0;
-	color: #FFF;
-	font-weight: 700;
-}
-
-#footer div#footer-inner .footer-link {
-	float: left;
-	padding-left: 10px;
-}
-
-#footer div#footer-inner .footer-link a,#footer div#footer-inner .footer-link-right a
-	{
-	color: #FFF;
-}
-
-#login div.title {
-	clear: both;
-	overflow: hidden;
-	position: relative;
-	background-color: #003B76; 
-	background-repeat : repeat-x;
-	background-image : -khtml-gradient( linear, left top, left bottom, from(#003B76), to(#00376E)); 
-	background-image : -moz-linear-gradient( top, #003b76, #00376e); 
-	background-image : -ms-linear-gradient( top, #003b76, #00376e);
-	background-image : -webkit-gradient( linear, left top, left bottom, color-stop( 0%, #003b76), color-stop( 100%, #00376e));
-	background-image : -webkit-linear-gradient( top, #003b76, #00376e));
-	background-image : -o-linear-gradient( top, #003b76, #00376e));
-	background-image : linear-gradient( top, #003b76, #00376e); 
-	filter : progid : DXImageTransform.Microsoft.gradient ( startColorstr = '#003b76', endColorstr = '#00376e', GradientType = 0);
-	margin: 0 auto;
-	padding: 0;
-}
-
-#login div.inner {
-	background: #FFF url("../images/login.png") no-repeat top left;
-	border-top: none;
-	border-bottom: none;
-	margin: 0 auto;
-	padding: 20px;
-}
-
-#login div.form div.fields div.field div.label {
-	width: 173px;
-	float: left;
-	text-align: right;
-	margin: 2px 10px 0 0;
-	padding: 5px 0 0 5px;
-}
-
-#login div.form div.fields div.field div.input input {
-	background: #FFF;
-	border-top: 1px solid #b3b3b3;
-	border-left: 1px solid #b3b3b3;
-	border-right: 1px solid #eaeaea;
-	border-bottom: 1px solid #eaeaea;
-	color: #000;
-	font-size: 11px;
-	margin: 0;
-	padding: 7px 7px 6px;
-}
-
-#login div.form div.fields div.buttons {
-	clear: both;
-	overflow: hidden;
-	border-top: 1px solid #DDD;
-	text-align: right;
-	margin: 0;
-	padding: 10px 0 0;
-}
-
-#login div.form div.links {
-	clear: both;
-	overflow: hidden;
-	margin: 10px 0 0;
-	padding: 0 0 2px;
-}
-
-.user-menu{
-    margin: 0px !important;
-    float: left;
-}
-
-.user-menu .container{
-    padding:0px 4px 0px 4px;
-    margin: 0px 0px 0px 0px;
-}
-
-.user-menu .gravatar{
-    margin: 0px 0px 0px 0px;
-    cursor: pointer;
-}
-.user-menu .gravatar.enabled{
-	background-color: #FDF784 !important;
-}
-.user-menu .gravatar:hover{
-    background-color: #FDF784 !important; 
-}
-#quick_login{
-    min-height: 80px;
-    margin: 37px 0 0 -251px;
-    padding: 4px;
-    position: absolute;
-    width: 278px;
-    background-color: #003B76;
-    background-repeat: repeat-x;
-    background-image: -khtml-gradient(linear, left top, left bottom, from(#003B76), to(#00376E) );
-    background-image: -moz-linear-gradient(top, #003b76, #00376e);
-    background-image: -ms-linear-gradient(top, #003b76, #00376e);
-    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76), color-stop(100%, #00376e) );
-    background-image: -webkit-linear-gradient(top, #003b76, #00376e);
-    background-image: -o-linear-gradient(top, #003b76, #00376e);
-    background-image: linear-gradient(top, #003b76, #00376e);
-    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76', endColorstr='#00376e', GradientType=0 );
-
-	z-index: 999;
-	-webkit-border-radius: 0px 0px 4px 4px;
-	-khtml-border-radius: 0px 0px 4px 4px;
-	-moz-border-radius: 0px 0px 4px 4px;
-	border-radius: 0px 0px 4px 4px;
-	box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
-}
-#quick_login h4{
-    color: #fff;
-    padding: 5px 0px 5px 14px;
-}
-
-#quick_login .password_forgoten {
-	padding-right: 10px;
-	padding-top: 0px;
-	text-align: left;
-}
-
-#quick_login .password_forgoten a {
-	font-size: 10px;
-	color: #fff;
-}
-
-#quick_login .register {
-	padding-right: 10px;
-	padding-top: 5px;
-	text-align: left;
-}
-
-#quick_login .register a {
-	font-size: 10px;
-	color: #fff;
-}
-
-#quick_login .submit {
-    margin: -20px 0 0 0px;
-    position: absolute;
-    right: 15px;
-}
-
-#quick_login .links_left{
-	float: left;
-}
-#quick_login .links_right{
-    float: right;
-}
-#quick_login .full_name{
-    color: #FFFFFF;
-    font-weight: bold;
-    padding: 3px;
-}
-#quick_login .big_gravatar{
-	padding:4px 0px 0px 6px;
-}
-#quick_login .inbox{
-    padding:4px 0px 0px 6px;
-    color: #FFFFFF;
-    font-weight: bold;    
-}
-#quick_login .inbox a{
-	color: #FFFFFF;
-}
-#quick_login .email,#quick_login .email a{
-    color: #FFFFFF;
-    padding: 3px;
-    
-}
-#quick_login .links .logout{
-
-}
-
-#quick_login div.form div.fields {
-	padding-top: 2px;
-	padding-left: 10px;
-}
-
-#quick_login div.form div.fields div.field {
-	padding: 5px;
-}
-
-#quick_login div.form div.fields div.field div.label label {
-	color: #fff;
-	padding-bottom: 3px;
-}
-
-#quick_login div.form div.fields div.field div.input input {
-	width: 236px;
-	background: #FFF;
-	border-top: 1px solid #b3b3b3;
-	border-left: 1px solid #b3b3b3;
-	border-right: 1px solid #eaeaea;
-	border-bottom: 1px solid #eaeaea;
-	color: #000;
-	font-size: 11px;
-	margin: 0;
-	padding: 5px 7px 4px;
-}
-
-#quick_login div.form div.fields div.buttons {
-	clear: both;
-	overflow: hidden;
-	text-align: right;
-	margin: 0;
-	padding: 5px 14px 0px 5px;
-}
-
-#quick_login div.form div.links {
-	clear: both;
-	overflow: hidden;
-	margin: 10px 0 0;
-	padding: 0 0 2px;
-}
-
-#quick_login ol.links{
-    display: block;
-    font-weight: bold;
-    list-style: none outside none;
-    text-align: right;
-}
-#quick_login ol.links li{
-    line-height: 27px;
-    margin: 0;
-    padding: 0;
-    color: #fff;
-    display: block;
-    float:none !important;
-}
-
-#quick_login ol.links li a{
-    color: #fff;
-    display: block;
-    padding: 2px;
-}
-#quick_login ol.links li a:HOVER{
-    background-color: inherit !important;
-}
-
-#register div.title {
-	clear: both;
-	overflow: hidden;
-	position: relative;
-    background-color: #003B76;
-    background-repeat: repeat-x;
-    background-image: -khtml-gradient(linear, left top, left bottom, from(#003B76), to(#00376E) );
-    background-image: -moz-linear-gradient(top, #003b76, #00376e);
-    background-image: -ms-linear-gradient(top, #003b76, #00376e);
-    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76), color-stop(100%, #00376e) );
-    background-image: -webkit-linear-gradient(top, #003b76, #00376e);
-    background-image: -o-linear-gradient(top, #003b76, #00376e);
-    background-image: linear-gradient(top, #003b76, #00376e);
-    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',
-        endColorstr='#00376e', GradientType=0 );
-	margin: 0 auto;
-	padding: 0;
-}
-
-#register div.inner {
-	background: #FFF;
-	border-top: none;
-	border-bottom: none;
-	margin: 0 auto;
-	padding: 20px;
-}
-
-#register div.form div.fields div.field div.label {
-	width: 135px;
-	float: left;
-	text-align: right;
-	margin: 2px 10px 0 0;
-	padding: 5px 0 0 5px;
-}
-
-#register div.form div.fields div.field div.input input {
-	width: 300px;
-	background: #FFF;
-	border-top: 1px solid #b3b3b3;
-	border-left: 1px solid #b3b3b3;
-	border-right: 1px solid #eaeaea;
-	border-bottom: 1px solid #eaeaea;
-	color: #000;
-	font-size: 11px;
-	margin: 0;
-	padding: 7px 7px 6px;
-}
-
-#register div.form div.fields div.buttons {
-	clear: both;
-	overflow: hidden;
-	border-top: 1px solid #DDD;
-	text-align: left;
-	margin: 0;
-	padding: 10px 0 0 150px;
-}
-
-#register div.form div.activation_msg {
-	padding-top: 4px;
-	padding-bottom: 4px;
-}
-
-#journal .journal_day {
-	font-size: 20px;
-	padding: 10px 0px;
-	border-bottom: 2px solid #DDD;
-	margin-left: 10px;
-	margin-right: 10px;
-}
-
-#journal .journal_container {
-	padding: 5px;
-	clear: both;
-	margin: 0px 5px 0px 10px;
-}
-
-#journal .journal_action_container {
-	padding-left: 38px;
-}
-
-#journal .journal_user {
-	color: #747474;
-	font-size: 14px;
-	font-weight: bold;
-	height: 30px;
-}
-
-#journal .journal_user.deleted {
-    color: #747474;
-    font-size: 14px;
-    font-weight: normal;
-    height: 30px;
-    font-style: italic;
-}
-
-
-#journal .journal_icon {
-	clear: both;
-	float: left;
-	padding-right: 4px;
-	padding-top: 3px;
-}
-
-#journal .journal_action {
-	padding-top: 4px;
-	min-height: 2px;
-	float: left
-}
-
-#journal .journal_action_params {
-	clear: left;
-	padding-left: 22px;
-}
-
-#journal .journal_repo {
-	float: left;
-	margin-left: 6px;
-	padding-top: 3px;
-}
-
-#journal .date {
-	clear: both;
-	color: #777777;
-	font-size: 11px;
-	padding-left: 22px;
-}
-
-#journal .journal_repo .journal_repo_name {
-	font-weight: bold;
-	font-size: 1.1em;
-}
-
-#journal .compare_view {
-	padding: 5px 0px 5px 0px;
-	width: 95px;
-}
-
-.journal_highlight {
-	font-weight: bold;
-	padding: 0 2px;
-	vertical-align: bottom;
-}
-
-.trending_language_tbl,.trending_language_tbl td {
-	border: 0 !important;
-	margin: 0 !important;
-	padding: 0 !important;
-}
-
-.trending_language_tbl,.trending_language_tbl tr {
-    border-spacing: 1px;
-}
-
-.trending_language {
-	background-color: #003367;
-	color: #FFF;
-	display: block;
-	min-width: 20px;
-	text-decoration: none;
-	height: 12px;
-	margin-bottom: 0px;
-	margin-left: 5px;
-	white-space: pre;
-	padding: 3px;
-}
-
-h3.files_location {
-	font-size: 1.8em;
-	font-weight: 700;
-	border-bottom: none !important;
-	margin: 10px 0 !important;
-}
-
-#files_data dl dt {
-	float: left;
-	width: 60px;
-	margin: 0 !important;
-	padding: 5px;
-}
-
-#files_data dl dd {
-	margin: 0 !important;
-	padding: 5px !important;
-}
-
-.file_history{
-	padding-top:10px;
-	font-size:16px;
-}
-.file_author{
-	float: left;
-}
-
-.file_author .item{
-	float:left;
-	padding:5px;
-	color: #888;
-}
-
-.tablerow0 {
-	background-color: #F8F8F8;
-}
-
-.tablerow1 {
-    background-color: #FFFFFF;
-}
-
-.changeset_id {
-	font-family: monospace;
-	color: #666666;
-}
-
-.changeset_hash {
-	color: #000000;
-}
-
-#changeset_content {
-	border-left: 1px solid #CCC;
-	border-right: 1px solid #CCC;
-	border-bottom: 1px solid #CCC;
-	padding: 5px;
-}
-
-#changeset_compare_view_content {
-	border: 1px solid #CCC;
-	padding: 5px;
-}
-
-#changeset_content .container {
-	min-height: 100px;
-	font-size: 1.2em;
-	overflow: hidden;
-}
-
-#changeset_compare_view_content .compare_view_commits {
-	width: auto !important;
-}
-
-#changeset_compare_view_content .compare_view_commits td {
-	padding: 0px 0px 0px 12px !important;
-}
-
-#changeset_content .container .right {
-	float: right;
-	width: 20%;
-	text-align: right;
-}
-
-#changeset_content .container .left .message {
-	white-space: pre-wrap;
-}
-#changeset_content .container .left .message a:hover {
-	text-decoration: none;
-}
-.cs_files .cur_cs {
-	margin: 10px 2px;
-	font-weight: bold;
-}
-
-.cs_files .node {
-	float: left;
-}
-
-.cs_files .changes {
-	float: right;
-	color:#003367;
-	
-}
-
-.cs_files .changes .added {
-	background-color: #BBFFBB;
-	float: left;
-	text-align: center;
-	font-size: 9px;
-    padding: 2px 0px 2px 0px;
-}
-
-.cs_files .changes .deleted {
-	background-color: #FF8888;
-	float: left;
-	text-align: center;
-	font-size: 9px;
-    padding: 2px 0px 2px 0px;
-}
-/*new binary*/
-.cs_files .changes .bin1 {
-    background-color: #BBFFBB;
-    float: left;
-    text-align: center;
-    font-size: 9px;
-    padding: 2px 0px 2px 0px;
-}
-
-/*deleted binary*/
-.cs_files .changes .bin2 {
-    background-color: #FF8888;
-    float: left;
-    text-align: center;
-    font-size: 9px;
-    padding: 2px 0px 2px 0px;
-}
-
-/*mod binary*/
-.cs_files .changes .bin3 {
-    background-color: #DDDDDD;
-    float: left;
-    text-align: center;
-    font-size: 9px;
-    padding: 2px 0px 2px 0px;
-}
-
-/*rename file*/
-.cs_files .changes .bin4 {
-    background-color: #6D99FF;
-    float: left;
-    text-align: center;
-    font-size: 9px;
-    padding: 2px 0px 2px 0px;
-}
-
-
-.cs_files .cs_added,.cs_files .cs_A {
-	background: url("../images/icons/page_white_add.png") no-repeat scroll
-		3px;
-	height: 16px;
-	padding-left: 20px;
-	margin-top: 7px;
-	text-align: left;
-}
-
-.cs_files .cs_changed,.cs_files .cs_M {
-	background: url("../images/icons/page_white_edit.png") no-repeat scroll
-		3px;
-	height: 16px;
-	padding-left: 20px;
-	margin-top: 7px;
-	text-align: left;
-}
-
-.cs_files .cs_removed,.cs_files .cs_D {
-	background: url("../images/icons/page_white_delete.png") no-repeat
-		scroll 3px;
-	height: 16px;
-	padding-left: 20px;
-	margin-top: 7px;
-	text-align: left;
-}
-
-#graph {
-	overflow: hidden;
-}
-
-#graph_nodes {
-	float: left;
-	margin-right: 0px;
-	margin-top: 0px;
-}
-
-#graph_content {
-	width: 80%;
-	float: left;
-}
-
-#graph_content .container_header {
-	border-bottom: 1px solid #DDD;
-	padding: 10px;
-	height: 25px;
-}
-
-#graph_content #rev_range_container {
-	float: left;
-	margin: 0px 0px 0px 3px;
-}
-
-#graph_content #rev_range_clear {
-    float: left;
-    margin: 0px 0px 0px 3px;
-}
-
-#graph_content .container {
-	border-bottom: 1px solid #DDD;
-	height: 56px;
-	overflow: hidden;
-}
-
-#graph_content .container .right {
-	float: right;
-	width: 23%;
-	text-align: right;
-}
-
-#graph_content .container .left {
-	float: left;
-	width: 25%;
-	padding-left: 5px;
-}
-
-#graph_content .container .mid {
-	float: left;
-	width: 49%;
-}
-
-
-#graph_content .container .left .date {
-	color: #666;
-	padding-left: 22px;
-	font-size: 10px;
-}
-
-#graph_content .container .left .author {
-	height: 22px;
-}
-
-#graph_content .container .left .author .user {
-	color: #444444;
-	float: left;
-	margin-left: -4px;
-	margin-top: 4px;
-}
-
-#graph_content .container .mid .message {
-	white-space: pre-wrap;
-}
-
-#graph_content .container .mid .message a:hover{
-	text-decoration: none;
-}
-
-.revision-link
- {
-	color:#3F6F9F;
-    font-weight: bold !important;
-}
-
-.issue-tracker-link{
-    color:#3F6F9F;
-    font-weight: bold !important;
-}
-
-.changeset-status-container{
-    padding-right: 5px;
-    margin-top:1px;
-    float:right;
-    height:14px;
-}
-.code-header .changeset-status-container{
-	float:left;
-	padding:2px 0px 0px 2px;
-}
-.changeset-status-container .changeset-status-lbl{
-	color: rgb(136, 136, 136);
-    float: left;
-    padding: 3px 4px 0px 0px
-}
-.code-header .changeset-status-container .changeset-status-lbl{
-    float: left;
-    padding: 0px 4px 0px 0px;   
-}
-.changeset-status-container .changeset-status-ico{
-    float: left;
-}
-.code-header .changeset-status-container .changeset-status-ico, .container .changeset-status-ico{
-    float: left;
-}
-.right .comments-container{
-	padding-right: 5px;
-	margin-top:1px;
-	float:right;
-	height:14px;
-}
-
-.right .comments-cnt{
-    float: left;
-    color: rgb(136, 136, 136); 
-    padding-right: 2px; 
-}
-
-.right .changes{
-	clear: both;
-}
-
-.right .changes .changed_total {
-	display: block;
-	float: right;
-	text-align: center;
-	min-width: 45px;
-	cursor: pointer;
-	color: #444444;
-	background: #FEA;
-	-webkit-border-radius: 0px 0px 0px 6px;
-	-moz-border-radius: 0px 0px 0px 6px;
-	border-radius: 0px 0px 0px 6px;
-	padding: 1px;
-}
-
-.right .changes .added,.changed,.removed {
-	display: block;
-	padding: 1px;
-	color: #444444;
-	float: right;
-	text-align: center;
-	min-width: 15px;
-}
-
-.right .changes .added {
-	background: #CFC;
-}
-
-.right .changes .changed {
-	background: #FEA;
-}
-
-.right .changes .removed {
-	background: #FAA;
-}
-
-.right .merge {
-  padding: 1px 3px 1px 3px;
-  background-color: #fca062;
-  font-size: 10px;
-  font-weight: bold;
-  color: #ffffff;
-  text-transform: uppercase;
-  white-space: nowrap;
-  -webkit-border-radius: 3px;
-  -moz-border-radius: 3px;
-  border-radius: 3px;
-  margin-right: 2px;
-}
-
-.right .parent {
-	color: #666666;
-	clear:both;
-}
-.right .logtags{
-	padding: 2px 2px 2px 2px;
-}
-.right .logtags .branchtag,.right .logtags .tagtag,.right .logtags .booktag{
-    margin: 0px 2px;
-}
-
-.right .logtags .branchtag,
-.logtags .branchtag,
-.spantag {
-  padding: 1px 3px 1px 3px;
-  background-color: #bfbfbf;
-  font-size: 10px;
-  font-weight: bold;
-  color: #ffffff;
-  text-transform: uppercase;
-  white-space: nowrap;
-  -webkit-border-radius: 3px;
-  -moz-border-radius: 3px;
-  border-radius: 3px;
-}
-.right .logtags .branchtag a:hover,.logtags .branchtag a{
-	color: #ffffff;
-}
-.right .logtags .branchtag a:hover,.logtags .branchtag a:hover{
-	text-decoration: none;
-	color: #ffffff;
-}
-.right .logtags .tagtag,.logtags .tagtag {
-  padding: 1px 3px 1px 3px;
-  background-color: #62cffc;
-  font-size: 10px;
-  font-weight: bold;
-  color: #ffffff;
-  text-transform: uppercase;
-  white-space: nowrap;
-  -webkit-border-radius: 3px;
-  -moz-border-radius: 3px;
-  border-radius: 3px;
-}
-.right .logtags .tagtag a:hover,.logtags .tagtag a{
-	color: #ffffff;
-}
-.right .logtags .tagtag a:hover,.logtags .tagtag a:hover{
-    text-decoration: none;
-    color: #ffffff;
-}
-.right .logbooks .bookbook,.logbooks .bookbook,.right .logtags .bookbook,.logtags .bookbook {
-  padding: 1px 3px 1px 3px;
-  background-color: #46A546;
-  font-size: 10px;
-  font-weight: bold;
-  color: #ffffff;
-  text-transform: uppercase;
-  white-space: nowrap;
-  -webkit-border-radius: 3px;
-  -moz-border-radius: 3px;
-  border-radius: 3px;
-}
-.right .logbooks .bookbook,.logbooks .bookbook a,.right .logtags .bookbook,.logtags .bookbook a{
-	color: #ffffff;
-}
-.right .logbooks .bookbook,.logbooks .bookbook a:hover,.right .logtags .bookbook,.logtags .bookbook a:hover{
-    text-decoration: none;
-    color: #ffffff;
-}
-div.browserblock {
-	overflow: hidden;
-	border: 1px solid #ccc;
-	background: #f8f8f8;
-	font-size: 100%;
-	line-height: 125%;
-	padding: 0;
-    -webkit-border-radius: 6px 6px 0px 0px;
-    -moz-border-radius: 6px 6px 0px 0px;
-    border-radius: 6px 6px 0px 0px;	
-}
-
-div.browserblock .browser-header {
-	background: #FFF;
-	padding: 10px 0px 15px 0px;
-	width: 100%;
-}
-
-div.browserblock .browser-nav {
-	float: left
-}
-
-div.browserblock .browser-branch {
-	float: left;
-}
-
-div.browserblock .browser-branch label {
-	color: #4A4A4A;
-	vertical-align: text-top;
-}
-
-div.browserblock .browser-header span {
-	margin-left: 5px;
-	font-weight: 700;
-}
-
-div.browserblock .browser-search {
-	clear: both;
-	padding: 8px 8px 0px 5px;
-	height: 20px;
-}
-
-div.browserblock #node_filter_box {
-	
-}
-
-div.browserblock .search_activate {
-	float: left
-}
-
-div.browserblock .add_node {
-	float: left;
-	padding-left: 5px;
-}
-
-div.browserblock .search_activate a:hover,div.browserblock .add_node a:hover
-	{
-	text-decoration: none !important;
-}
-
-div.browserblock .browser-body {
-	background: #EEE;
-	border-top: 1px solid #CCC;
-}
-
-table.code-browser {
-	border-collapse: collapse;
-	width: 100%;
-}
-
-table.code-browser tr {
-	margin: 3px;
-}
-
-table.code-browser thead th {
-	background-color: #EEE;
-	height: 20px;
-	font-size: 1.1em;
-	font-weight: 700;
-	text-align: left;
-	padding-left: 10px;
-}
-
-table.code-browser tbody td {
-	padding-left: 10px;
-	height: 20px;
-}
-
-table.code-browser .browser-file {
-	background: url("../images/icons/document_16.png") no-repeat scroll 3px;
-	height: 16px;
-	padding-left: 20px;
-	text-align: left;
-}
-.diffblock .changeset_header {
-    height: 16px;
-}
-.diffblock .changeset_file {
-	background: url("../images/icons/file.png") no-repeat scroll 3px;
-	text-align: left;
-	float: left;
-	padding: 2px 0px 2px 22px;
-}
-.diffblock .diff-menu-wrapper{
-	float: left;
-}
-
-.diffblock .diff-menu{
-    position: absolute;
-    background: none repeat scroll 0 0 #FFFFFF;
-    border-color: #003367 #666666 #666666;
-    border-right: 1px solid #666666;
-    border-style: solid solid solid;
-    border-width: 1px;
-    box-shadow: 2px 8px 4px rgba(0, 0, 0, 0.2);
-    margin-top:5px;
-    margin-left:1px;
-    
-}
-.diffblock .diff-actions {
-    padding: 2px 0px 0px 2px;
-    float: left;
-}
-.diffblock  .diff-menu ul li {
-	padding: 0px 0px 0px 0px !important;
-}
-.diffblock  .diff-menu ul li a{
-	display: block;
-	padding: 3px 8px 3px 8px !important;
-}
-.diffblock  .diff-menu ul li a:hover{
-    text-decoration: none;
-    background-color: #EEEEEE;
-}
-table.code-browser .browser-dir {
-	background: url("../images/icons/folder_16.png") no-repeat scroll 3px;
-	height: 16px;
-	padding-left: 20px;
-	text-align: left;
-}
-
-table.code-browser .submodule-dir {
-    background: url("../images/icons/disconnect.png") no-repeat scroll 3px;
-    height: 16px;
-    padding-left: 20px;
-    text-align: left;
-}
-
-
-.box .search {
-	clear: both;
-	overflow: hidden;
-	margin: 0;
-	padding: 0 20px 10px;
-}
-
-.box .search div.search_path {
-	background: none repeat scroll 0 0 #EEE;
-	border: 1px solid #CCC;
-	color: blue;
-	margin-bottom: 10px;
-	padding: 10px 0;
-}
-
-.box .search div.search_path div.link {
-	font-weight: 700;
-	margin-left: 25px;
-}
-
-.box .search div.search_path div.link a {
-	color: #003367;
-	cursor: pointer;
-	text-decoration: none;
-}
-
-#path_unlock {
-	color: red;
-	font-size: 1.2em;
-	padding-left: 4px;
-}
-
-.info_box span {
-	margin-left: 3px;
-	margin-right: 3px;
-}
-
-.info_box .rev {
-	color: #003367;
-	font-size: 1.6em;
-	font-weight: bold;
-	vertical-align: sub;
-}
-
-.info_box input#at_rev,.info_box input#size {
-	background: #FFF;
-	border-top: 1px solid #b3b3b3;
-	border-left: 1px solid #b3b3b3;
-	border-right: 1px solid #eaeaea;
-	border-bottom: 1px solid #eaeaea;
-	color: #000;
-	font-size: 12px;
-	margin: 0;
-	padding: 1px 5px 1px;
-}
-
-.info_box input#view {
-	text-align: center;
-	padding: 4px 3px 2px 2px;
-}
-
-.yui-overlay,.yui-panel-container {
-	visibility: hidden;
-	position: absolute;
-	z-index: 2;
-}
-
-#tip-box {
-	position: absolute;
-	
-	background-color: #FFF;
-	border: 2px solid #003367;
-	font: 100% sans-serif;
-	width: auto;
-	opacity: 1px;
-	padding: 8px;
-	
-	white-space: pre-wrap;
-	-webkit-border-radius: 8px 8px 8px 8px;
-	-khtml-border-radius: 8px 8px 8px 8px;
-	-moz-border-radius: 8px 8px 8px 8px;
-	border-radius: 8px 8px 8px 8px;
-	box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
-	-moz-box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
-	-webkit-box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
-}
-
-.hl-tip-box {
-    visibility: hidden;
-    position: absolute;
-    color: #666;
-    background-color: #FFF;
-    border: 2px solid #003367;
-    font: 100% sans-serif;
-    width: auto;
-    opacity: 1px;
-    padding: 8px;
-    white-space: pre-wrap;
-    -webkit-border-radius: 8px 8px 8px 8px;
-    -khtml-border-radius: 8px 8px 8px 8px;
-    -moz-border-radius: 8px 8px 8px 8px;
-    border-radius: 8px 8px 8px 8px;
-    box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
-}
-
-
-.mentions-container{
-	width: 90% !important;
-}
-.mentions-container .yui-ac-content{
-	width: 100% !important;
-}
-
-.ac {
-	vertical-align: top;
-}
-
-.ac .yui-ac {
-	position: inherit;
-	font-size: 100%;
-}
-
-.ac .perm_ac {
-	width: 20em;
-}
-
-.ac .yui-ac-input {
-	width: 100%;
-}
-
-.ac .yui-ac-container {
-	position: absolute;
-	top: 1.6em;
-	width: auto;
-}
-
-.ac .yui-ac-content {
-	position: absolute;
-	border: 1px solid gray;
-	background: #fff;
-	z-index: 9050;
-	
-}
-
-.ac .yui-ac-shadow {
-	position: absolute;
-	width: 100%;
-	background: #000;
-	-moz-opacity: 0.1px;
-	opacity: .10;
-	filter: alpha(opacity = 10);
-	z-index: 9049;
-	margin: .3em;
-}
-
-.ac .yui-ac-content ul {
-	width: 100%;
-	margin: 0;
-	padding: 0;
-	z-index: 9050;
-}
-
-.ac .yui-ac-content li {
-	cursor: default;
-	white-space: nowrap;
-	margin: 0;
-	padding: 2px 5px;
-	height: 18px;
-	z-index: 9050;
-	display: block;
-	width: auto !important;
-}
-
-.ac .yui-ac-content li .ac-container-wrap{
-    width: auto;
-}
-
-.ac .yui-ac-content li.yui-ac-prehighlight {
-	background: #B3D4FF;
-	z-index: 9050;
-}
-
-.ac .yui-ac-content li.yui-ac-highlight {
-	background: #556CB5;
-	color: #FFF;
-	z-index: 9050;
-}
-.ac .yui-ac-bd{
-	z-index: 9050;
-}
-
-.follow {
-	background: url("../images/icons/heart_add.png") no-repeat scroll 3px;
-	height: 16px;
-	width: 20px;
-	cursor: pointer;
-	display: block;
-	float: right;
-	margin-top: 2px;
-}
-
-.following {
-	background: url("../images/icons/heart_delete.png") no-repeat scroll 3px;
-	height: 16px;
-	width: 20px;
-	cursor: pointer;
-	display: block;
-	float: right;
-	margin-top: 2px;
-}
-
-.locking_locked{
-    background: #FFF url("../images/icons/block_16.png") no-repeat scroll 3px;
-    height: 16px;
-    width: 20px;
-    cursor: pointer;
-    display: block;
-    float: right;
-    margin-top: 2px;    
-}
-
-.locking_unlocked{
-    background: #FFF url("../images/icons/accept.png") no-repeat scroll 3px;
-    height: 16px;
-    width: 20px;
-    cursor: pointer;
-    display: block;
-    float: right;
-    margin-top: 2px;	
-}
-
-.currently_following {
-	padding-left: 10px;
-	padding-bottom: 5px;
-}
-
-.add_icon {
-	background: url("../images/icons/add.png") no-repeat scroll 3px;
-	padding-left: 20px;
-	padding-top: 0px;
-	text-align: left;
-}
-
-.accept_icon {
-    background: url("../images/icons/accept.png") no-repeat scroll 3px;
-    padding-left: 20px;
-    padding-top: 0px;
-    text-align: left;
-}
-
-.edit_icon {
-	background: url("../images/icons/application_form_edit.png") no-repeat scroll 3px;
-	padding-left: 20px;
-	padding-top: 0px;
-	text-align: left;
-}
-
-.delete_icon {
-	background: url("../images/icons/delete.png") no-repeat scroll 3px;
-	padding-left: 20px;
-	padding-top: 0px;
-	text-align: left;
-}
-
-.refresh_icon {
-	background: url("../images/icons/arrow_refresh.png") no-repeat scroll
-		3px;
-	padding-left: 20px;
-	padding-top: 0px;
-	text-align: left;
-}
-
-.pull_icon {
-	background: url("../images/icons/connect.png") no-repeat scroll 3px;
-	padding-left: 20px;
-	padding-top: 0px;
-	text-align: left;
-}
-
-.rss_icon {
-	background: url("../images/icons/rss_16.png") no-repeat scroll 3px;
-	padding-left: 20px;
-	padding-top: 4px;
-	text-align: left;
-	font-size: 8px
-}
-
-.atom_icon {
-	background: url("../images/icons/atom.png") no-repeat scroll 3px;
-	padding-left: 20px;
-	padding-top: 4px;
-	text-align: left;
-	font-size: 8px
-}
-
-.archive_icon {
-	background: url("../images/icons/compress.png") no-repeat scroll 3px;
-	padding-left: 20px;
-	text-align: left;
-	padding-top: 1px;
-}
-
-.start_following_icon {
-	background: url("../images/icons/heart_add.png") no-repeat scroll 3px;
-	padding-left: 20px;
-	text-align: left;
-	padding-top: 0px;
-}
-
-.stop_following_icon {
-	background: url("../images/icons/heart_delete.png") no-repeat scroll 3px;
-	padding-left: 20px;
-	text-align: left;
-	padding-top: 0px;
-}
-
-.action_button {
-	border: 0;
-	display: inline;
-}
-
-.action_button:hover {
-	border: 0;
-	text-decoration: underline;
-	cursor: pointer;
-}
-
-#switch_repos {
-	position: absolute;
-	height: 25px;
-	z-index: 1;
-}
-
-#switch_repos select {
-	min-width: 150px;
-	max-height: 250px;
-	z-index: 1;
-}
-
-.breadcrumbs {
-	border: medium none;
-	color: #FFF;
-	float: left;
-	text-transform: uppercase;
-	font-weight: 700;
-	font-size: 14px;
-	margin: 0;
-	padding: 11px 0 11px 10px;
-}
-
-.breadcrumbs .hash {
-	text-transform: none;
-	color: #fff;
-}
-
-.breadcrumbs a {
-	color: #FFF;
-}
-
-.flash_msg {
-	
-}
-
-.flash_msg ul {
-	
-}
-
-.error_red {
-	color:red;
-}
-
-.error_msg {
-	background-color: #c43c35;
-	background-repeat: repeat-x;
-	background-image: -khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35) );
-	background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
-	background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35);
-	background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35) );
-	background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
-	background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
-	background-image: linear-gradient(top, #ee5f5b, #c43c35);
-	filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b',endColorstr='#c43c35', GradientType=0 );
-	border-color: #c43c35 #c43c35 #882a25;
-}
-
-.warning_msg {
-	color: #404040 !important;
-	background-color: #eedc94;
-	background-repeat: repeat-x;
-	background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1), to(#eedc94) );
-	background-image: -moz-linear-gradient(top, #fceec1, #eedc94);
-	background-image: -ms-linear-gradient(top, #fceec1, #eedc94);
-	background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1), color-stop(100%, #eedc94) );
-	background-image: -webkit-linear-gradient(top, #fceec1, #eedc94);
-	background-image: -o-linear-gradient(top, #fceec1, #eedc94);
-	background-image: linear-gradient(top, #fceec1, #eedc94);
-	filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fceec1', endColorstr='#eedc94', GradientType=0 );
-	border-color: #eedc94 #eedc94 #e4c652;
-}
-
-.success_msg {
-	background-color: #57a957;
-	background-repeat: repeat-x !important;
-	background-image: -khtml-gradient(linear, left top, left bottom, from(#62c462), to(#57a957) );
-	background-image: -moz-linear-gradient(top, #62c462, #57a957);
-	background-image: -ms-linear-gradient(top, #62c462, #57a957);
-	background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462), color-stop(100%, #57a957) );
-	background-image: -webkit-linear-gradient(top, #62c462, #57a957);
-	background-image: -o-linear-gradient(top, #62c462, #57a957);
-	background-image: linear-gradient(top, #62c462, #57a957);
-	filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0 );
-	border-color: #57a957 #57a957 #3d773d;
-}
-
-.notice_msg {
-	background-color: #339bb9;
-	background-repeat: repeat-x;
-	background-image: -khtml-gradient(linear, left top, left bottom, from(#5bc0de), to(#339bb9) );
-	background-image: -moz-linear-gradient(top, #5bc0de, #339bb9);
-	background-image: -ms-linear-gradient(top, #5bc0de, #339bb9);
-	background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #5bc0de), color-stop(100%, #339bb9) );
-	background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9);
-	background-image: -o-linear-gradient(top, #5bc0de, #339bb9);
-	background-image: linear-gradient(top, #5bc0de, #339bb9);
-	filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0 );
-	border-color: #339bb9 #339bb9 #22697d;
-}
-
-.success_msg,.error_msg,.notice_msg,.warning_msg {
-	font-size: 12px;
-	font-weight: 700;
-	min-height: 14px;
-	line-height: 14px;
-	margin-bottom: 10px;
-	margin-top: 0;
-	display: block;
-	overflow: auto;
-	padding: 6px 10px 6px 10px;
-	border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-	position: relative;
-	color: #FFF;
-	border-width: 1px;
-	border-style: solid;
-	-webkit-border-radius: 4px;
-	-moz-border-radius: 4px;
-	border-radius: 4px;
-	-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
-	-moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
-	box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
-}
-
-#msg_close {
-	background: transparent url("../icons/cross_grey_small.png") no-repeat scroll 0 0;
-	cursor: pointer;
-	height: 16px;
-	position: absolute;
-	right: 5px;
-	top: 5px;
-	width: 16px;
-}
-div#legend_data{
-	padding-left:10px;
-}
-div#legend_container table{
-	border: none !important;
-}
-div#legend_container table,div#legend_choices table {
-	width: auto !important;
-}
-
-table#permissions_manage {
-	width: 0 !important;
-}
-
-table#permissions_manage span.private_repo_msg {
-	font-size: 0.8em;
-	opacity: 0.6px;
-}
-
-table#permissions_manage td.private_repo_msg {
-	font-size: 0.8em;
-}
-
-table#permissions_manage tr#add_perm_input td {
-	vertical-align: middle;
-}
-
-div.gravatar {
-	background-color: #FFF;
-	float: left;
-	margin-right: 0.7em;
-	padding: 1px 1px 1px 1px;
-    line-height:0;
-	-webkit-border-radius: 3px;
-	-khtml-border-radius: 3px;
-	-moz-border-radius: 3px;
-	border-radius: 3px;
-}
-
-div.gravatar img {
-	-webkit-border-radius: 2px;
-	-khtml-border-radius: 2px;
-	-moz-border-radius: 2px;
-	border-radius: 2px;
-}
-
-#header,#content,#footer {
-	min-width: 978px;
-}
-
-#content {
-	clear: both;
-	overflow: hidden;
-	padding: 54px 10px 14px 10px;
-}
-
-#content div.box div.title div.search {
-	
-	border-left: 1px solid #316293;
-}
-
-#content div.box div.title div.search div.input input {
-	border: 1px solid #316293;
-}
-
-.ui-btn{
-    color: #515151;
-    background-color: #DADADA;
-    background-repeat: repeat-x;
-    background-image: -khtml-gradient(linear, left top, left bottom, from(#F4F4F4),to(#DADADA) );
-    background-image: -moz-linear-gradient(top, #F4F4F4, #DADADA);
-    background-image: -ms-linear-gradient(top, #F4F4F4, #DADADA);
-    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #F4F4F4),color-stop(100%, #DADADA) );
-    background-image: -webkit-linear-gradient(top, #F4F4F4, #DADADA) );
-    background-image: -o-linear-gradient(top, #F4F4F4, #DADADA) );
-    background-image: linear-gradient(top, #F4F4F4, #DADADA);
-    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#F4F4F4', endColorstr='#DADADA', GradientType=0);
-    
-    border-top: 1px solid #DDD;
-    border-left: 1px solid #c6c6c6;
-    border-right: 1px solid #DDD;
-    border-bottom: 1px solid #c6c6c6;
-    color: #515151;
-    outline: none;
-    margin: 0px 3px 3px 0px;
-    -webkit-border-radius: 4px 4px 4px 4px !important;
-    -khtml-border-radius: 4px 4px 4px 4px !important;
-    -moz-border-radius: 4px 4px 4px 4px !important;
-    border-radius: 4px 4px 4px 4px !important;
-    cursor: pointer !important;
-	padding: 3px 3px 3px 3px;	
-	background-position: 0 -15px;
-
-}
-.ui-btn.xsmall{
-    padding: 1px 2px 1px 1px;
-}
-
-.ui-btn.large{
-	padding: 6px 12px;
-}
-
-.ui-btn.clone{
-	padding: 5px 2px 6px 1px;
-	margin: 0px -4px 3px 0px;
-    -webkit-border-radius: 4px 0px 0px 4px !important;
-    -khtml-border-radius: 4px 0px 0px 4px !important;
-    -moz-border-radius: 4px 0px 0px 4px !important;
-    border-radius: 4px 0px 0px 4px !important;
-    width: 100px;
-    text-align: center;
-    float: left;
-    position: absolute;
-}
-.ui-btn:focus {
-  outline: none;
-}
-.ui-btn:hover{
-    background-position: 0 0px;
-    text-decoration: none;
-    color: #515151;
-    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25), 0 0 3px #FFFFFF !important;
-}
-
-.ui-btn.red{
-  color:#fff;
-  background-color: #c43c35;
-  background-repeat: repeat-x;
-  background-image: -khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35));
-  background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35));
-  background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
-  background-image: linear-gradient(top, #ee5f5b, #c43c35);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);
-  border-color: #c43c35 #c43c35 #882a25;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-}
-
-
-.ui-btn.blue{
-  color:#fff;
-  background-color: #339bb9;
-  background-repeat: repeat-x;
-  background-image: -khtml-gradient(linear, left top, left bottom, from(#5bc0de), to(#339bb9));
-  background-image: -moz-linear-gradient(top, #5bc0de, #339bb9);
-  background-image: -ms-linear-gradient(top, #5bc0de, #339bb9);
-  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #5bc0de), color-stop(100%, #339bb9));
-  background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9);
-  background-image: -o-linear-gradient(top, #5bc0de, #339bb9);
-  background-image: linear-gradient(top, #5bc0de, #339bb9);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);
-  border-color: #339bb9 #339bb9 #22697d;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);    
-}
-
-.ui-btn.green{
-  background-color: #57a957;
-  background-repeat: repeat-x;
-  background-image: -khtml-gradient(linear, left top, left bottom, from(#62c462), to(#57a957));
-  background-image: -moz-linear-gradient(top, #62c462, #57a957);
-  background-image: -ms-linear-gradient(top, #62c462, #57a957);
-  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462), color-stop(100%, #57a957));
-  background-image: -webkit-linear-gradient(top, #62c462, #57a957);
-  background-image: -o-linear-gradient(top, #62c462, #57a957);
-  background-image: linear-gradient(top, #62c462, #57a957);
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);
-  border-color: #57a957 #57a957 #3d773d;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);	
-}
-
-.ui-btn.blue.hidden{
-	display: none;
-}
-
-.ui-btn.active{
-    font-weight: bold;
-}
-
-ins,div.options a:hover {
-	text-decoration: none;
-}
-
-img,
-#header #header-inner #quick li a:hover span.normal,
-#header #header-inner #quick li ul li.last,
-#content div.box div.form div.fields div.field div.textarea table td table td a,
-#clone_url,
-#clone_url_id
-{
-	border: none;
-}
-
-img.icon,.right .merge img {
-	vertical-align: bottom;
-}
-
-#header ul#logged-user,#content div.box div.title ul.links,
-#content div.box div.message div.dismiss,
-#content div.box div.traffic div.legend ul
-	{
-	float: right;
-	margin: 0;
-	padding: 0;
-}
-
-#header #header-inner #home,#header #header-inner #logo,
-#content div.box ul.left,#content div.box ol.left,
-#content div.box div.pagination-left,div#commit_history,
-div#legend_data,div#legend_container,div#legend_choices
-	{
-	float: left;
-}
-
-#header #header-inner #quick li:hover ul ul,
-#header #header-inner #quick li:hover ul ul ul,
-#header #header-inner #quick li:hover ul ul ul ul,
-#content #left #menu ul.closed,#content #left #menu li ul.collapsed,.yui-tt-shadow
-	{
-	display: none;
-}
-
-#header #header-inner #quick li:hover ul,#header #header-inner #quick li li:hover ul,#header #header-inner #quick li li li:hover ul,#header #header-inner #quick li li li li:hover ul,#content #left #menu ul.opened,#content #left #menu li ul.expanded
-	{
-	display: block;
-}
-
-#content div.graph {
-	padding: 0 10px 10px;
-}
-
-#content div.box div.title ul.links li a:hover,#content div.box div.title ul.links li.ui-tabs-selected a
-	{
-	color: #bfe3ff;
-}
-
-#content div.box ol.lower-roman,#content div.box ol.upper-roman,#content div.box ol.lower-alpha,#content div.box ol.upper-alpha,#content div.box ol.decimal
-	{
-	margin: 10px 24px 10px 44px;
-}
-
-#content div.box div.form,#content div.box div.table,#content div.box div.traffic
-	{
-	clear: both;
-	overflow: hidden;
-	margin: 0;
-	padding: 0 20px 10px;
-}
-
-#content div.box div.form div.fields,#login div.form,#login div.form div.fields,#register div.form,#register div.form div.fields
-	{
-	clear: both;
-	overflow: hidden;
-	margin: 0;
-	padding: 0;
-}
-
-#content div.box div.form div.fields div.field div.label span,#login div.form div.fields div.field div.label span,#register div.form div.fields div.field div.label span
-	{
-	height: 1%;
-	display: block;
-	color: #363636;
-	margin: 0;
-	padding: 2px 0 0;
-}
-
-#content div.box div.form div.fields div.field div.input input.error,#login div.form div.fields div.field div.input input.error,#register div.form div.fields div.field div.input input.error
-	{
-	background: #FBE3E4;
-	border-top: 1px solid #e1b2b3;
-	border-left: 1px solid #e1b2b3;
-	border-right: 1px solid #FBC2C4;
-	border-bottom: 1px solid #FBC2C4;
-}
-
-#content div.box div.form div.fields div.field div.input input.success,#login div.form div.fields div.field div.input input.success,#register div.form div.fields div.field div.input input.success
-	{
-	background: #E6EFC2;
-	border-top: 1px solid #cebb98;
-	border-left: 1px solid #cebb98;
-	border-right: 1px solid #c6d880;
-	border-bottom: 1px solid #c6d880;
-}
-
-#content div.box-left div.form div.fields div.field div.textarea,#content div.box-right div.form div.fields div.field div.textarea,#content div.box div.form div.fields div.field div.select select,#content div.box table th.selected input,#content div.box table td.selected input
-	{
-	margin: 0;
-}
-
-#content div.box-left div.form div.fields div.field div.select,#content div.box-left div.form div.fields div.field div.checkboxes,#content div.box-left div.form div.fields div.field div.radios,#content div.box-right div.form div.fields div.field div.select,#content div.box-right div.form div.fields div.field div.checkboxes,#content div.box-right div.form div.fields div.field div.radios
-	{
-	margin: 0 0 0 0px !important;
-	padding: 0;
-}
-
-#content div.box div.form div.fields div.field div.select,#content div.box div.form div.fields div.field div.checkboxes,#content div.box div.form div.fields div.field div.radios
-	{
-	margin: 0 0 0 200px;
-	padding: 0;
-}
-
-#content div.box div.form div.fields div.field div.select a:hover,#content div.box div.form div.fields div.field div.select a.ui-selectmenu:hover,#content div.box div.action a:hover
-	{
-	color: #000;
-	text-decoration: none;
-}
-
-#content div.box div.form div.fields div.field div.select a.ui-selectmenu-focus,#content div.box div.action a.ui-selectmenu-focus
-	{
-	border: 1px solid #666;
-}
-
-#content div.box div.form div.fields div.field div.checkboxes div.checkbox,#content div.box div.form div.fields div.field div.radios div.radio
-	{
-	clear: both;
-	overflow: hidden;
-	margin: 0;
-	padding: 8px 0 2px;
-}
-
-#content div.box div.form div.fields div.field div.checkboxes div.checkbox input,#content div.box div.form div.fields div.field div.radios div.radio input
-	{
-	float: left;
-	margin: 0;
-}
-
-#content div.box div.form div.fields div.field div.checkboxes div.checkbox label,#content div.box div.form div.fields div.field div.radios div.radio label
-	{
-	height: 1%;
-	display: block;
-	float: left;
-	margin: 2px 0 0 4px;
-}
-
-div.form div.fields div.field div.button input,
-#content div.box div.form div.fields div.buttons input
-div.form div.fields div.buttons input,
-#content div.box div.action div.button input {
-	/*color: #000;*/
-    font-size: 11px;
-    font-weight: 700;
-    margin: 0;
-}
-
-input.ui-button {
-	background: #e5e3e3 url("../images/button.png") repeat-x;
-	border-top: 1px solid #DDD;
-	border-left: 1px solid #c6c6c6;
-	border-right: 1px solid #DDD;
-	border-bottom: 1px solid #c6c6c6;
-	color: #515151 !important;
-	outline: none;
-	margin: 0;
-	padding: 6px 12px;
-	-webkit-border-radius: 4px 4px 4px 4px;
-	-khtml-border-radius: 4px 4px 4px 4px;
-	-moz-border-radius: 4px 4px 4px 4px;
-	border-radius: 4px 4px 4px 4px;
-	box-shadow: 0 1px 0 #ececec;
-	cursor: pointer;
-}
-
-input.ui-button:hover {
-	background: #b4b4b4 url("../images/button_selected.png") repeat-x;
-	border-top: 1px solid #ccc;
-	border-left: 1px solid #bebebe;
-	border-right: 1px solid #b1b1b1;
-	border-bottom: 1px solid #afafaf;
-}
-
-div.form div.fields div.field div.highlight,#content div.box div.form div.fields div.buttons div.highlight
-	{
-	display: inline;
-}
-
-#content div.box div.form div.fields div.buttons,div.form div.fields div.buttons
-	{
-	margin: 10px 0 0 200px;
-	padding: 0;
-}
-
-#content div.box-left div.form div.fields div.buttons,#content div.box-right div.form div.fields div.buttons,div.box-left div.form div.fields div.buttons,div.box-right div.form div.fields div.buttons
-	{
-	margin: 10px 0 0;
-}
-
-#content div.box table td.user,#content div.box table td.address {
-	width: 10%;
-	text-align: center;
-}
-
-#content div.box div.action div.button,#login div.form div.fields div.field div.input div.link,#register div.form div.fields div.field div.input div.link
-	{
-	text-align: right;
-	margin: 6px 0 0;
-	padding: 0;
-}
-
-#content div.box div.action div.button input.ui-state-hover,#login div.form div.fields div.buttons input.ui-state-hover,#register div.form div.fields div.buttons input.ui-state-hover
-	{
-	background: #b4b4b4 url("../images/button_selected.png") repeat-x;
-	border-top: 1px solid #ccc;
-	border-left: 1px solid #bebebe;
-	border-right: 1px solid #b1b1b1;
-	border-bottom: 1px solid #afafaf;
-	color: #515151;
-	margin: 0;
-	padding: 6px 12px;
-}
-
-#content div.box div.pagination div.results,#content div.box div.pagination-wh div.results
-	{
-	text-align: left;
-	float: left;
-	margin: 0;
-	padding: 0;
-}
-
-#content div.box div.pagination div.results span,#content div.box div.pagination-wh div.results span
-	{
-	height: 1%;
-	display: block;
-	float: left;
-	background: #ebebeb url("../images/pager.png") repeat-x;
-	border-top: 1px solid #dedede;
-	border-left: 1px solid #cfcfcf;
-	border-right: 1px solid #c4c4c4;
-	border-bottom: 1px solid #c4c4c4;
-	color: #4A4A4A;
-	font-weight: 700;
-	margin: 0;
-	padding: 6px 8px;
-}
-
-#content div.box div.pagination ul.pager li.disabled,#content div.box div.pagination-wh a.disabled
-	{
-	color: #B4B4B4;
-	padding: 6px;
-}
-
-#login,#register {
-	width: 520px;
-	margin: 10% auto 0;
-	padding: 0;
-}
-
-#login div.color,#register div.color {
-	clear: both;
-	overflow: hidden;
-	background: #FFF;
-	margin: 10px auto 0;
-	padding: 3px 3px 3px 0;
-}
-
-#login div.color a,#register div.color a {
-	width: 20px;
-	height: 20px;
-	display: block;
-	float: left;
-	margin: 0 0 0 3px;
-	padding: 0;
-}
-
-#login div.title h5,#register div.title h5 {
-	color: #fff;
-	margin: 10px;
-	padding: 0;
-}
-
-#login div.form div.fields div.field,#register div.form div.fields div.field
-	{
-	clear: both;
-	overflow: hidden;
-	margin: 0;
-	padding: 0 0 10px;
-}
-
-#login div.form div.fields div.field span.error-message,#register div.form div.fields div.field span.error-message
-	{
-	height: 1%;
-	display: block;
-	color: red;
-	margin: 8px 0 0;
-	padding: 0;
-	max-width: 320px;
-}
-
-#login div.form div.fields div.field div.label label,#register div.form div.fields div.field div.label label
-	{
-	color: #000;
-	font-weight: 700;
-}
-
-#login div.form div.fields div.field div.input,#register div.form div.fields div.field div.input
-	{
-	float: left;
-	margin: 0;
-	padding: 0;
-}
-
-#login div.form div.fields div.field div.checkbox,#register div.form div.fields div.field div.checkbox
-	{
-	margin: 0 0 0 184px;
-	padding: 0;
-}
-
-#login div.form div.fields div.field div.checkbox label,#register div.form div.fields div.field div.checkbox label
-	{
-	color: #565656;
-	font-weight: 700;
-}
-
-#login div.form div.fields div.buttons input,#register div.form div.fields div.buttons input
-	{
-	color: #000;
-	font-size: 1em;
-	font-weight: 700;
-	margin: 0;
-}
-
-#changeset_content .container .wrapper,#graph_content .container .wrapper
-	{
-	width: 600px;
-}
-
-#changeset_content .container .left {
-	float: left;
-	width: 75%;
-	padding-left: 5px;
-}
-
-#changeset_content .container .left .date,.ac .match {
-	font-weight: 700;
-	padding-top: 5px;
-	padding-bottom: 5px;
-}
-
-div#legend_container table td,div#legend_choices table td {
-	border: none !important;
-	height: 20px !important;
-	padding: 0 !important;
-}
-
-.q_filter_box {
-	-webkit-box-shadow: rgba(0,0,0,0.07) 0 1px 2px inset;
-	-webkit-border-radius: 4px;
-	-moz-border-radius: 4px;
-	border-radius: 4px;
-    border: 0 none;
-    color: #AAAAAA;
-    margin-bottom: -4px;
-    margin-top: -4px;
-    padding-left: 3px;		
-}
-
-#node_filter {
-	border: 0px solid #545454;
-	color: #AAAAAA;
-	padding-left: 3px;
-}
-
-
-.group_members_wrap{
-	min-height: 85px;
-	padding-left: 20px;
-}
-
-.group_members .group_member{
-	height: 30px;
-	padding:0px 0px 0px 0px;
-}
-
-.reviewers_member{
-    height: 15px;
-    padding:0px 0px 0px 10px;	
-}
-
-.emails_wrap{
-	padding: 0px 20px;
-}
-
-.emails_wrap .email_entry{
-    height: 30px;
-    padding:0px 0px 0px 10px;
-}
-.emails_wrap .email_entry .email{
-	float: left
-}
-.emails_wrap .email_entry .email_action{
-	float: left
-}
-
-.ips_wrap{
-    padding: 0px 20px;
-}
-
-.ips_wrap .ip_entry{
-    height: 30px;
-    padding:0px 0px 0px 10px;
-}
-.ips_wrap .ip_entry .ip{
-    float: left
-}
-.ips_wrap .ip_entry .ip_action{
-    float: left
-}
-
-
-/*README STYLE*/
-
-div.readme {
-	padding:0px;
-}
-
-div.readme h2 {
-    font-weight: normal;
-}
-
-div.readme .readme_box {
-    background-color: #fafafa;
-}
-
-div.readme .readme_box {
-clear:both;
-overflow:hidden;
-margin:0;
-padding:0 20px 10px;
-}
-
-div.readme .readme_box h1, div.readme .readme_box h2, div.readme .readme_box h3, div.readme .readme_box h4, div.readme .readme_box h5, div.readme .readme_box h6 {
-border-bottom: 0 !important;
-margin: 0 !important;
-padding: 0 !important;
-line-height: 1.5em !important;
-}
-
-
-div.readme .readme_box h1:first-child {
-padding-top: .25em !important;
-}
-
-div.readme .readme_box h2, div.readme .readme_box h3 {
-margin: 1em 0 !important;
-}
-
-div.readme .readme_box h2 {
-margin-top: 1.5em !important;
-border-top: 4px solid #e0e0e0 !important;
-padding-top: .5em !important;
-}
-
-div.readme .readme_box p {
-color: black !important;
-margin: 1em 0 !important;
-line-height: 1.5em !important;
-}
-
-div.readme .readme_box ul {
-list-style: disc !important;
-margin: 1em 0 1em 2em !important;
-}
-
-div.readme .readme_box ol {
-list-style: decimal;
-margin: 1em 0 1em 2em !important;
-}
-
-div.readme .readme_box pre, code {
-font: 12px "Bitstream Vera Sans Mono","Courier",monospace;
-}
-
-div.readme .readme_box code {
-    font-size: 12px !important;
-    background-color: ghostWhite !important;
-    color: #444 !important;
-    padding: 0 .2em !important;
-    border: 1px solid #dedede !important;
-}
-
-div.readme .readme_box pre code {
-	padding: 0 !important;
-	font-size: 12px !important;
-	background-color: #eee !important;
-	border: none !important;
-}
-
-div.readme .readme_box pre {
-	margin: 1em 0;
-	font-size: 12px;
-	background-color: #eee;
-	border: 1px solid #ddd;
-	padding: 5px;
-	color: #444;
-	overflow: auto;
-	-webkit-box-shadow: rgba(0,0,0,0.07) 0 1px 2px inset;
-	-webkit-border-radius: 3px;
-	-moz-border-radius: 3px;
-	border-radius: 3px;
-}
-
-div.readme .readme_box table {
-    display: table;
-	border-collapse: separate;
-	border-spacing: 2px;
-	border-color: gray;
-	width: auto !important;
-}
-
-
-/** RST STYLE **/
-
-
-div.rst-block {
-    padding:0px;
-}
-
-div.rst-block h2 {
-    font-weight: normal;
-}
-
-div.rst-block  {
-    background-color: #fafafa;
-}
-
-div.rst-block  {
-clear:both;
-overflow:hidden;
-margin:0;
-padding:0 20px 10px;
-}
-
-div.rst-block  h1, div.rst-block  h2, div.rst-block  h3, div.rst-block  h4, div.rst-block  h5, div.rst-block  h6 {
-border-bottom: 0 !important;
-margin: 0 !important;
-padding: 0 !important;
-line-height: 1.5em !important;
-}
-
-
-div.rst-block  h1:first-child {
-padding-top: .25em !important;
-}
-
-div.rst-block  h2, div.rst-block  h3 {
-margin: 1em 0 !important;
-}
-
-div.rst-block  h2 {
-margin-top: 1.5em !important;
-border-top: 4px solid #e0e0e0 !important;
-padding-top: .5em !important;
-}
-
-div.rst-block  p {
-color: black !important;
-margin: 1em 0 !important;
-line-height: 1.5em !important;
-}
-
-div.rst-block  ul {
-list-style: disc !important;
-margin: 1em 0 1em 2em !important;
-}
-
-div.rst-block  ol {
-list-style: decimal;
-margin: 1em 0 1em 2em !important;
-}
-
-div.rst-block  pre, code {
-font: 12px "Bitstream Vera Sans Mono","Courier",monospace;
-}
-
-div.rst-block  code {
-    font-size: 12px !important;
-    background-color: ghostWhite !important;
-    color: #444 !important;
-    padding: 0 .2em !important;
-    border: 1px solid #dedede !important;
-}
-
-div.rst-block  pre code {
-    padding: 0 !important;
-    font-size: 12px !important;
-    background-color: #eee !important;
-    border: none !important;
-}
-
-div.rst-block  pre {
-    margin: 1em 0;
-    font-size: 12px;
-    background-color: #eee;
-    border: 1px solid #ddd;
-    padding: 5px;
-    color: #444;
-    overflow: auto;
-    -webkit-box-shadow: rgba(0,0,0,0.07) 0 1px 2px inset;
-    -webkit-border-radius: 3px;
-    -moz-border-radius: 3px;
-    border-radius: 3px;
-}
-
-
-/** comment main **/
-.comments {
-    padding:10px 20px;
-}
-
-.comments .comment {
-    border: 1px solid #ddd;
-    margin-top: 10px;
-    -webkit-border-radius: 4px;
-    -moz-border-radius: 4px;
-    border-radius: 4px;    
-}
-
-.comments .comment .meta {
-    background: #f8f8f8;
-    padding: 4px;
-    border-bottom: 1px solid #ddd;
-    height: 18px;
-}
-
-.comments .comment .meta img {
-    vertical-align: middle;
-}
-
-.comments .comment .meta .user {
-    font-weight: bold;
-    float: left;
-    padding: 4px 2px 2px 2px;
-}
-
-.comments .comment .meta .date {
-	float: left;
-	padding:4px 4px 0px 4px;
-}
-
-.comments .comment .text {
-    background-color: #FAFAFA;
-}
-.comment .text div.rst-block p {
-	margin: 0.5em 0px !important;
-}
-
-.comments .comments-number{
-	padding:0px 0px 10px 0px;
-	font-weight: bold;
-	color: #666;
-	font-size: 16px;
-}
-
-/** comment form **/
-
-.status-block{
-    height:80px;
-    clear:both	
-}
-
-.comment-form .clearfix{
-	background: #EEE;
-    -webkit-border-radius: 4px;
-    -moz-border-radius: 4px;
-    border-radius: 4px;
-    padding: 10px;
-}
-
-div.comment-form {
-    margin-top: 20px;
-}
-
-.comment-form strong {
-    display: block;
-    margin-bottom: 15px;
-}
-
-.comment-form textarea {
-    width: 100%;
-    height: 100px;
-    font-family: 'Monaco', 'Courier', 'Courier New', monospace;
-}
-
-form.comment-form {
-    margin-top: 10px;
-    margin-left: 10px;
-}
-
-.comment-form-submit {
-    margin-top: 5px;
-    margin-left: 525px;
-}
-
-.file-comments {
-    display: none;
-}
-
-.comment-form .comment {
-    margin-left: 10px;
-}
-
-.comment-form .comment-help{
-    padding: 0px 0px 5px 0px;
-    color: #666;
-}
-
-.comment-form .comment-button{
-	padding-top:5px;
-}
-
-.add-another-button {
-    margin-left: 10px;
-    margin-top: 10px;
-    margin-bottom: 10px;
-}
-
-.comment .buttons {
-	float: right;
-	padding:2px 2px 0px 0px;
-}
-
-
-.show-inline-comments{
-	position: relative;
-	top:1px
-}
-
-/** comment inline form **/
-.comment-inline-form .overlay{
-	display: none;
-}
-.comment-inline-form .overlay.submitting{
-	display:block;
-    background: none repeat scroll 0 0 white;
-    font-size: 16px;
-    opacity: 0.5;
-    position: absolute;
-    text-align: center;
-    vertical-align: top;
-
-}
-.comment-inline-form .overlay.submitting .overlay-text{
-	width:100%;
-	margin-top:5%;
-}
-
-.comment-inline-form .clearfix{
-    background: #EEE;
-    -webkit-border-radius: 4px;
-    -moz-border-radius: 4px;
-    border-radius: 4px;
-    padding: 5px;
-}
-
-div.comment-inline-form {
-    padding:4px 0px 6px 0px;
-}
-
-
-tr.hl-comment{
-/*
-	background-color: #FFFFCC !important;
-*/
-}
-
-/*
-tr.hl-comment pre {
-	border-top: 2px solid #FFEE33;
-	border-left: 2px solid #FFEE33;
-	border-right: 2px solid #FFEE33;
-}
-*/
-
-.comment-inline-form strong {
-    display: block;
-    margin-bottom: 15px;
-}
-
-.comment-inline-form textarea {
-    width: 100%;
-    height: 100px;
-    font-family: 'Monaco', 'Courier', 'Courier New', monospace;
-}
-
-form.comment-inline-form {
-    margin-top: 10px;
-    margin-left: 10px;
-}
-
-.comment-inline-form-submit {
-    margin-top: 5px;
-    margin-left: 525px;
-}
-
-.file-comments {
-    display: none;
-}
-
-.comment-inline-form .comment {
-    margin-left: 10px;
-}
-
-.comment-inline-form .comment-help{
-    padding: 0px 0px 2px 0px;
-    color: #666666;
-    font-size: 10px;
-}
-
-.comment-inline-form .comment-button{
-    padding-top:5px;
-}
-
-/** comment inline **/
-.inline-comments {
-    padding:10px 20px;
-}
-
-.inline-comments div.rst-block  {
-	clear:both;
-	overflow:hidden;
-	margin:0;
-	padding:0 20px 0px;
-}
-.inline-comments .comment {
-    border: 1px solid #ddd;
-    -webkit-border-radius: 4px;
-    -moz-border-radius: 4px;
-    border-radius: 4px;
-    margin: 3px 3px 5px 5px;
-    background-color: #FAFAFA;
-}
-.inline-comments .add-comment {
-	padding: 2px 4px 8px 5px;
-}
-
-.inline-comments .comment-wrapp{
-	padding:1px;
-}
-.inline-comments .comment .meta {
-    background: #f8f8f8;
-    padding: 4px;
-    border-bottom: 1px solid #ddd;
-    height: 20px;
-}
-
-.inline-comments .comment .meta img {
-    vertical-align: middle;
-}
-
-.inline-comments .comment .meta .user {
-    font-weight: bold;
-    float:left;
-    padding: 3px;
-}
-
-.inline-comments .comment .meta .date {
-    float:left;
-    padding: 3px;
-}
-
-.inline-comments .comment .text {
-    background-color: #FAFAFA;
-}
-
-.inline-comments .comments-number{
-    padding:0px 0px 10px 0px;
-    font-weight: bold;
-    color: #666;
-    font-size: 16px;
-}
-.inline-comments-button .add-comment{
-	margin:2px 0px 8px 5px !important
-}
-
-
-.notification-paginator{
-    padding: 0px 0px 4px 16px;
-    float: left;    	
-}
-
-.notifications{
-    border-radius: 4px 4px 4px 4px;
-    -webkit-border-radius: 4px;
-    -moz-border-radius: 4px;    
-    float: right;
-    margin: 20px 0px 0px 0px;
-    position: absolute;
-    text-align: center;
-    width: 26px;
-    z-index: 1000;
-}
-.notifications a{
-	color:#888 !important;
-	display: block;
-	font-size: 10px;
-	background-color: #DEDEDE !important;
-    border-radius: 2px !important;
-    -webkit-border-radius: 2px !important;
-    -moz-border-radius: 2px !important;  	
-}
-.notifications a:hover{
-	text-decoration: none !important;
-	background-color: #EEEFFF !important;
-}
-.notification-header{
-	padding-top:6px;
-}
-.notification-header .desc{
-	font-size: 16px;
-    height: 24px;
-    float: left
-}
-.notification-list .container.unread{
-	background: none repeat scroll 0 0 rgba(255, 255, 180, 0.6);
-}
-.notification-header .gravatar{
-    background: none repeat scroll 0 0 transparent;
-    padding: 0px 0px 0px 8px;	
-}
-.notification-list .container .notification-header .desc{
-    font-weight: bold;
-    font-size: 17px;
-}
-.notification-table{
-	border: 1px solid #ccc;
-    -webkit-border-radius: 6px 6px 6px 6px;
-    -moz-border-radius: 6px 6px 6px 6px;
-    border-radius: 6px 6px 6px 6px;
-    clear: both;
-    margin: 0px 20px 0px 20px;
-}
-.notification-header .delete-notifications{
-    float: right;
-    padding-top: 8px;
-    cursor: pointer;
-}
-.notification-header .read-notifications{
-    float: right;
-    padding-top: 8px;
-    cursor: pointer;
-}
-.notification-subject{
-    clear:both;
-    border-bottom: 1px solid #eee;
-    padding:5px 0px 5px 38px;
-}
-
-.notification-body{
-	clear:both;
-	margin: 34px 2px 2px 8px
-}
-
-/****
-PULL REQUESTS
-*****/
-.pullrequests_section_head {
-   padding:10px 10px 10px 0px;
-   font-size:16px;
-   font-weight: bold;
-}
-
-/****
-  PERMS
-*****/
-#perms .perms_section_head {
-   padding:10px 10px 10px 0px;
-   font-size:16px;
-   font-weight: bold;
-}
-
-#perms .perm_tag{
-  padding: 1px 3px 1px 3px;
-  font-size: 10px;
-  font-weight: bold;
-  text-transform: uppercase;
-  white-space: nowrap;
-  -webkit-border-radius: 3px;
-  -moz-border-radius: 3px;
-  border-radius: 3px;
-}
-
-#perms .perm_tag.admin{
-  background-color: #B94A48;
-  color: #ffffff;
-}
-
-#perms .perm_tag.write{
-  background-color: #B94A48;
-  color: #ffffff;    
-}
-
-#perms .perm_tag.read{
-  background-color: #468847;
-  color: #ffffff;    
-}
-
-#perms .perm_tag.none{
-  background-color: #bfbfbf;
-  color: #ffffff;    
-}
-
-.perm-gravatar{
-	vertical-align:middle;
-	padding:2px;
-}
-.perm-gravatar-ac{
-    vertical-align:middle;
-    padding:2px;
-    width: 14px;
-    height: 14px;	
-}
-
-/*****************************************************************************
-                                  DIFFS CSS
-******************************************************************************/
-
-div.diffblock {
-    overflow: auto;
-    padding: 0px;
-    border: 1px solid #ccc;
-    background: #f8f8f8;
-    font-size: 100%;
-    line-height: 100%;
-    /* new */
-    line-height: 125%;
-    -webkit-border-radius: 6px 6px 0px 0px;
-    -moz-border-radius: 6px 6px 0px 0px;
-    border-radius: 6px 6px 0px 0px;     
-}
-div.diffblock.margined{
-    margin: 0px 20px 0px 20px;
-}
-div.diffblock .code-header{
-    border-bottom: 1px solid #CCCCCC;
-    background: #EEEEEE;
-    padding:10px 0 10px 0;
-    height: 14px;
-}
-
-div.diffblock .code-header.banner{
-    border-bottom: 1px solid #CCCCCC;
-    background: #EEEEEE;
-    height: 14px;
-    margin: 0px 95px 0px 95px;
-    padding: 3px 3px 11px 3px;
-}
-
-div.diffblock .code-header.cv{
-    height: 34px;
-}
-div.diffblock .code-header-title{
-	padding: 0px 0px 10px 5px !important;
-	margin: 0 !important;
-}
-div.diffblock .code-header .hash{
-    float: left;
-    padding: 2px 0 0 2px;
-}
-div.diffblock .code-header .date{
-    float:left;
-    text-transform: uppercase;
-    padding: 2px 0px 0px 2px;
-}
-div.diffblock .code-header div{
-    margin-left:4px;
-    font-weight: bold;
-    font-size: 14px;
-}
-
-div.diffblock .parents {
-    float: left;
-    height: 26px;
-    width:100px;
-    font-size: 10px;
-    font-weight: 400;
-    vertical-align: middle;
-    padding: 0px 2px 2px 2px;
-    background-color:#eeeeee;
-    border-bottom: 1px solid #CCCCCC;
-}
-
-div.diffblock .children {
-    float: right;
-    height: 26px;
-    width:100px;
-    font-size: 10px;
-    font-weight: 400;
-    vertical-align: middle;
-    text-align: right;
-    padding: 0px 2px 2px 2px;
-    background-color:#eeeeee;
-    border-bottom: 1px solid #CCCCCC;
-}
-
-div.diffblock .code-body{
-    background: #FFFFFF;
-}
-div.diffblock pre.raw{
-    background: #FFFFFF;
-    color:#000000;
-}
-table.code-difftable{
-    border-collapse: collapse;
-    width: 99%;
-}
-table.code-difftable td {
-    padding: 0 !important; 
-    background: none !important; 
-    border:0 !important;
-    vertical-align: none !important;
-}
-table.code-difftable .context{
-    background:none repeat scroll 0 0 #DDE7EF;
-}
-table.code-difftable .add{
-    background:none repeat scroll 0 0 #DDFFDD;
-}
-table.code-difftable .add ins{
-    background:none repeat scroll 0 0 #AAFFAA;
-    text-decoration:none;
-}
-table.code-difftable .del{
-    background:none repeat scroll 0 0 #FFDDDD;
-}
-table.code-difftable .del del{
-    background:none repeat scroll 0 0 #FFAAAA;
-    text-decoration:none;
-}
-
-/** LINE NUMBERS **/
-table.code-difftable .lineno{
-
-    padding-left:2px;
-    padding-right:2px;
-    text-align:right;
-    width:32px;
-    -moz-user-select:none;
-    -webkit-user-select: none;
-    border-right: 1px solid #CCC !important;
-    border-left: 0px solid #CCC !important;
-    border-top: 0px solid #CCC !important;
-    border-bottom: none !important;
-    vertical-align: middle !important;
-    
-}
-table.code-difftable .lineno.new {
-}
-table.code-difftable .lineno.old {
-}
-table.code-difftable .lineno a{
-    color:#747474 !important;
-    font:11px "Bitstream Vera Sans Mono",Monaco,"Courier New",Courier,monospace !important;
-    letter-spacing:-1px;
-    text-align:right;
-    padding-right: 2px;
-    cursor: pointer;
-    display: block;
-    width: 32px;
-}
-
-table.code-difftable .lineno-inline{
-    background:none repeat scroll 0 0 #FFF !important;
-    padding-left:2px;
-    padding-right:2px;
-    text-align:right;
-    width:30px;
-    -moz-user-select:none;
-    -webkit-user-select: none;
-}
-
-/** CODE **/
-table.code-difftable .code { 
-    display: block;
-    width: 100%;
-}
-table.code-difftable .code td{
-    margin:0;
-    padding:0;
-}
-table.code-difftable .code pre{
-    margin:0;
-    padding:0;
-    height: 17px;
-    line-height: 17px;
-}
-
-
-.diffblock.margined.comm .line .code:hover{
-    background-color:#FFFFCC !important;
-    cursor: pointer !important;
-    background-image:url("../images/icons/comment_add.png") !important;
-    background-repeat:no-repeat !important;
-    background-position: right !important;
-    background-position: 0% 50% !important;
-}
-.diffblock.margined.comm .line .code.no-comment:hover{
-	background-image: none !important;
-	cursor: auto !important;
-	background-color: inherit !important;
-	
-}
+html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td {
+    border: 0;
+    outline: 0;
+    font-size: 100%;
+    vertical-align: baseline;
+    background: transparent;
+    margin: 0;
+    padding: 0;
+}
+
+body {
+    line-height: 1;
+    height: 100%;
+    background: url("../images/background.png") repeat scroll 0 0 #B0B0B0;
+    font-family: Lucida Grande, Verdana, Lucida Sans Regular,
+        Lucida Sans Unicode, Arial, sans-serif; font-size : 12px;
+    color: #000;
+    margin: 0;
+    padding: 0;
+    font-size: 12px;
+}
+
+ol, ul {
+    list-style: none;
+}
+
+blockquote, q {
+    quotes: none;
+}
+
+blockquote:before, blockquote:after, q:before, q:after {
+    content: none;
+}
+
+:focus {
+    outline: 0;
+}
+
+del {
+    text-decoration: line-through;
+}
+
+table {
+    border-collapse: collapse;
+    border-spacing: 0;
+}
+
+html {
+    height: 100%;
+}
+
+a {
+    color: #003367;
+    text-decoration: none;
+    cursor: pointer;
+}
+
+a:hover {
+    color: #316293;
+    text-decoration: underline;
+}
+
+h1, h2, h3, h4, h5, h6,
+div.h1, div.h2, div.h3, div.h4, div.h5, div.h6 {
+    color: #292929;
+    font-weight: 700;
+}
+
+h1, div.h1 {
+    font-size: 22px;
+}
+
+h2, div.h2 {
+    font-size: 20px;
+}
+
+h3, div.h3 {
+    font-size: 18px;
+}
+
+h4, div.h4 {
+    font-size: 16px;
+}
+
+h5, div.h5 {
+    font-size: 14px;
+}
+
+h6, div.h6 {
+    font-size: 11px;
+}
+
+ul.circle {
+    list-style-type: circle;
+}
+
+ul.disc {
+    list-style-type: disc;
+}
+
+ul.square {
+    list-style-type: square;
+}
+
+ol.lower-roman {
+    list-style-type: lower-roman;
+}
+
+ol.upper-roman {
+    list-style-type: upper-roman;
+}
+
+ol.lower-alpha {
+    list-style-type: lower-alpha;
+}
+
+ol.upper-alpha {
+    list-style-type: upper-alpha;
+}
+
+ol.decimal {
+    list-style-type: decimal;
+}
+
+div.color {
+    clear: both;
+    overflow: hidden;
+    position: absolute;
+    background: #FFF;
+    margin: 7px 0 0 60px;
+    padding: 1px 1px 1px 0;
+}
+
+div.color a {
+    width: 15px;
+    height: 15px;
+    display: block;
+    float: left;
+    margin: 0 0 0 1px;
+    padding: 0;
+}
+
+div.options {
+    clear: both;
+    overflow: hidden;
+    position: absolute;
+    background: #FFF;
+    margin: 7px 0 0 162px;
+    padding: 0;
+}
+
+div.options a {
+    height: 1%;
+    display: block;
+    text-decoration: none;
+    margin: 0;
+    padding: 3px 8px;
+}
+
+.top-left-rounded-corner {
+    -webkit-border-top-left-radius: 8px;
+    -khtml-border-radius-topleft: 8px;
+    border-top-left-radius: 8px;
+}
+
+.top-right-rounded-corner {
+    -webkit-border-top-right-radius: 8px;
+    -khtml-border-radius-topright: 8px;
+    border-top-right-radius: 8px;
+}
+
+.bottom-left-rounded-corner {
+    -webkit-border-bottom-left-radius: 8px;
+    -khtml-border-radius-bottomleft: 8px;
+    border-bottom-left-radius: 8px;
+}
+
+.bottom-right-rounded-corner {
+    -webkit-border-bottom-right-radius: 8px;
+    -khtml-border-radius-bottomright: 8px;
+    border-bottom-right-radius: 8px;
+}
+
+.top-left-rounded-corner-mid {
+    -webkit-border-top-left-radius: 4px;
+    -khtml-border-radius-topleft: 4px;
+    border-top-left-radius: 4px;
+}
+
+.top-right-rounded-corner-mid {
+    -webkit-border-top-right-radius: 4px;
+    -khtml-border-radius-topright: 4px;
+    border-top-right-radius: 4px;
+}
+
+.bottom-left-rounded-corner-mid {
+    -webkit-border-bottom-left-radius: 4px;
+    -khtml-border-radius-bottomleft: 4px;
+    border-bottom-left-radius: 4px;
+}
+
+.bottom-right-rounded-corner-mid {
+    -webkit-border-bottom-right-radius: 4px;
+    -khtml-border-radius-bottomright: 4px;
+    border-bottom-right-radius: 4px;
+}
+
+.help-block {
+    color: #999999;
+    display: block;
+    margin-bottom: 0;
+    margin-top: 5px;
+}
+
+.empty_data {
+    color: #B9B9B9;
+}
+
+a.permalink {
+    visibility: hidden;
+}
+
+a.permalink:hover {
+    text-decoration: none;
+}
+
+h1:hover > a.permalink,
+h2:hover > a.permalink,
+h3:hover > a.permalink,
+h4:hover > a.permalink,
+h5:hover > a.permalink,
+h6:hover > a.permalink,
+div:hover > a.permalink {
+    visibility: visible;
+}
+
+#header {
+}
+#header ul#logged-user {
+    margin-bottom: 5px !important;
+    -webkit-border-radius: 0px 0px 8px 8px;
+    -khtml-border-radius: 0px 0px 8px 8px;
+    border-radius: 0px 0px 8px 8px;
+    height: 37px;
+    background-color: #003B76;
+    background-repeat: repeat-x;
+    background-image: -khtml-gradient(linear, left top, left bottom, from(#003B76), to(#00376E) );
+    background-image: -moz-linear-gradient(top, #003b76, #00376e);
+    background-image: -ms-linear-gradient(top, #003b76, #00376e);
+    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76), color-stop(100%, #00376e) );
+    background-image: -webkit-linear-gradient(top, #003b76, #00376e);
+    background-image: -o-linear-gradient(top, #003b76, #00376e);
+    background-image: linear-gradient(to bottom, #003b76, #00376e);
+    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',endColorstr='#00376e', GradientType=0 );
+    box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
+}
+
+#header ul#logged-user li {
+    list-style: none;
+    float: left;
+    margin: 8px 0 0;
+    padding: 4px 12px;
+    border-left: 1px solid #316293;
+}
+
+#header ul#logged-user li.first {
+    border-left: none;
+    margin: 4px;
+}
+
+#header ul#logged-user li.first div.gravatar {
+    margin-top: -2px;
+}
+
+#header ul#logged-user li.first div.account {
+    padding-top: 4px;
+    float: left;
+}
+
+#header ul#logged-user li.last {
+    border-right: none;
+}
+
+#header ul#logged-user li a {
+    color: #fff;
+    font-weight: 700;
+    text-decoration: none;
+}
+
+#header ul#logged-user li a:hover {
+    text-decoration: underline;
+}
+
+#header ul#logged-user li.highlight a {
+    color: #fff;
+}
+
+#header ul#logged-user li.highlight a:hover {
+    color: #FFF;
+}
+#header-dd {
+    clear: both;
+    position: fixed !important;
+    background-color: #003B76;
+    opacity: 0.01;
+    cursor: pointer;
+    min-height: 10px;
+    width: 100% !important;
+    -webkit-border-radius: 0px 0px 4px 4px;
+    -khtml-border-radius: 0px 0px 4px 4px;
+    border-radius: 0px 0px 4px 4px;
+}
+
+#header-dd:hover {
+    opacity: 0.2;
+    -webkit-transition: opacity 0.5s ease-in-out;
+    -moz-transition: opacity 0.5s ease-in-out;
+    transition: opacity 0.5s ease-in-out;
+}
+
+#header #header-inner {
+    min-height: 44px;
+    clear: both;
+    position: relative;
+    background-color: #003B76;
+    background-repeat: repeat-x;
+    background-image: -khtml-gradient(linear, left top, left bottom, from(#003B76), to(#00376E) );
+    background-image: -moz-linear-gradient(top, #003b76, #00376e);
+    background-image: -ms-linear-gradient(top, #003b76, #00376e);
+    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76),color-stop(100%, #00376e) );
+    background-image: -webkit-linear-gradient(top, #003b76, #00376e);
+    background-image: -o-linear-gradient(top, #003b76, #00376e);
+    background-image: linear-gradient(to bottom, #003b76, #00376e);
+    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',endColorstr='#00376e', GradientType=0 );
+    margin: 0;
+    padding: 0;
+    display: block;
+    box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
+    -webkit-border-radius: 0px 0px 4px 4px;
+    -khtml-border-radius: 0px 0px 4px 4px;
+    border-radius: 0px 0px 4px 4px;
+}
+#header #header-inner.hover {
+    width: 100% !important;
+    -webkit-border-radius: 0px 0px 0px 0px;
+    -khtml-border-radius: 0px 0px 0px 0px;
+    border-radius: 0px 0px 0px 0px;
+    position: fixed !important;
+    z-index: 10000;
+}
+
+.ie7 #header #header-inner.hover,
+.ie8 #header #header-inner.hover,
+.ie9 #header #header-inner.hover
+{
+    z-index: auto !important;
+}
+
+.header-pos-fix, .anchor {
+    margin-top: -46px;
+    padding-top: 46px;
+}
+
+#header #header-inner #home a {
+    height: 40px;
+    width: 46px;
+    display: block;
+    background: url("../images/button_home.png");
+    background-position: 0 0;
+    margin: 0;
+    padding: 0;
+}
+
+#header #header-inner #home a:hover {
+    background-position: 0 -40px;
+}
+
+#header #header-inner #logo {
+    float: left;
+    position: absolute;
+}
+
+#header #header-inner #logo h1 {
+    color: #FFF;
+    font-size: 20px;
+    margin: 12px 0 0 13px;
+    padding: 0;
+}
+
+#header #header-inner #logo a {
+    color: #fff;
+    text-decoration: none;
+}
+
+#header #header-inner #logo a:hover {
+    color: #bfe3ff;
+}
+
+#header #header-inner #quick {
+    position: relative;
+    float: right;
+    list-style-type: none;
+    list-style-position: outside;
+    margin: 4px 8px 0 0;
+    padding: 0;
+    border-radius: 4px;
+}
+
+#header #header-inner #quick li span.short {
+    padding: 9px 6px 8px 6px;
+}
+
+#header #header-inner #quick li span {
+    display: inline;
+    margin: 0;
+}
+
+#header #header-inner #quick li span.normal {
+    border: none;
+    padding: 10px 12px 8px;
+}
+
+#header #header-inner #quick li span.icon {
+    border-left: none;
+    padding-left: 10px;
+}
+
+#header #header-inner #quick li span.icon_short {
+    top: 0;
+    left: 0;
+    border-left: none;
+    border-right: 1px solid #2e5c89;
+    padding: 8px 6px 4px;
+}
+
+#header #header-inner #quick li span.icon img, #header #header-inner #quick li span.icon_short img {
+    vertical-align: middle;
+    margin-bottom: 2px;
+}
+
+#header #header-inner #quick ul.repo_switcher {
+    max-height: 275px;
+    overflow-x: hidden;
+    overflow-y: auto;
+}
+
+#header #header-inner #quick ul.repo_switcher li.qfilter_rs {
+    padding: 2px 3px;
+    padding-right: 17px;
+}
+
+#header #header-inner #quick ul.repo_switcher li.qfilter_rs  input {
+    width: 100%;
+    border-radius: 10px;
+    padding: 2px 7px;
+}
+
+#header #header-inner #quick .repo_switcher_type {
+    position: absolute;
+    left: 0;
+    top: 9px;
+    margin: 0px 2px 0px 2px;
+}
+
+#header #header-inner #quick li ul li a.journal, #header #header-inner #quick li ul li a.journal:hover {
+    background-image: url("../images/icons/book.png");
+}
+
+#header #header-inner #quick li ul li a.private_repo, #header #header-inner #quick li ul li a.private_repo:hover {
+    background-image: url("../images/icons/lock.png")
+}
+
+#header #header-inner #quick li ul li a.public_repo, #header #header-inner #quick li ul li a.public_repo:hover {
+    background-image: url("../images/icons/lock_open.png");
+}
+
+#header #header-inner #quick li ul li a.hg, #header #header-inner #quick li ul li a.hg:hover {
+    background-image: url("../images/icons/hgicon.png");
+    padding-left: 42px;
+    background-position: 20px 9px;
+}
+
+#header #header-inner #quick li ul li a.git, #header #header-inner #quick li ul li a.git:hover {
+    background-image: url("../images/icons/giticon.png");
+    padding-left: 42px;
+    background-position: 20px 9px;
+}
+
+#header #header-inner #quick li ul li a.repos, #header #header-inner #quick li ul li a.repos:hover {
+    background-image: url("../images/icons/database_edit.png");
+}
+
+#header #header-inner #quick li ul li a.repos_groups, #header #header-inner #quick li ul li a.repos_groups:hover {
+    background-image: url("../images/icons/database_link.png");
+}
+
+#header #header-inner #quick li ul li a.users, #header #header-inner #quick li ul li a.users:hover {
+    background-image: url("../images/icons/user_edit.png");
+}
+
+#header #header-inner #quick li ul li a.groups, #header #header-inner #quick li ul li a.groups:hover {
+    background-image: url("../images/icons/group_edit.png");
+}
+
+#header #header-inner #quick li ul li a.defaults, #header #header-inner #quick li ul li a.defaults:hover {
+    background-image: url("../images/icons/wrench.png");
+}
+
+#header #header-inner #quick li ul li a.settings, #header #header-inner #quick li ul li a.settings:hover {
+    background-image: url("../images/icons/cog.png");
+}
+
+#header #header-inner #quick li ul li a.permissions, #header #header-inner #quick li ul li a.permissions:hover {
+    background-image: url("../images/icons/key.png");
+}
+
+#header #header-inner #quick li ul li a.ldap, #header #header-inner #quick li ul li a.ldap:hover {
+    background-image: url("../images/icons/server_key.png");
+}
+
+#header #header-inner #quick li ul li a.fork, #header #header-inner #quick li ul li a.fork:hover {
+    background-image: url("../images/icons/arrow_divide.png");
+}
+
+#header #header-inner #quick li ul li a.locking_add, #header #header-inner #quick li ul li a.locking_add:hover {
+    background-image: url("../images/icons/lock_add.png");
+}
+
+#header #header-inner #quick li ul li a.locking_del, #header #header-inner #quick li ul li a.locking_del:hover {
+    background-image: url("../images/icons/lock_delete.png");
+}
+
+#header #header-inner #quick li ul li a.pull_request, #header #header-inner #quick li ul li a.pull_request:hover {
+    background-image: url("../images/icons/arrow_join.png") ;
+}
+
+#header #header-inner #quick li ul li a.compare_request, #header #header-inner #quick li ul li a.compare_request:hover {
+    background-image: url("../images/icons/arrow_inout.png");
+}
+
+#header #header-inner #quick li ul li a.search, #header #header-inner #quick li ul li a.search:hover {
+    background-image: url("../images/icons/search_16.png");
+}
+
+#header #header-inner #quick li ul li a.shortlog, #header #header-inner #quick li ul li a.shortlog:hover {
+    background-image: url("../images/icons/clock_16.png");
+}
+
+#header #header-inner #quick li ul li a.delete, #header #header-inner #quick li ul li a.delete:hover {
+    background-image: url("../images/icons/delete.png");
+}
+
+#header #header-inner #quick li ul li a.branches, #header #header-inner #quick li ul li a.branches:hover {
+    background-image: url("../images/icons/arrow_branch.png");
+}
+
+#header #header-inner #quick li ul li a.tags,
+#header #header-inner #quick li ul li a.tags:hover {
+    background: #FFF url("../images/icons/tag_blue.png") no-repeat 4px 9px;
+    width: 167px;
+    margin: 0;
+    padding: 12px 9px 7px 24px;
+}
+
+#header #header-inner #quick li ul li a.bookmarks,
+#header #header-inner #quick li ul li a.bookmarks:hover {
+    background: #FFF url("../images/icons/tag_green.png") no-repeat 4px 9px;
+    width: 167px;
+    margin: 0;
+    padding: 12px 9px 7px 24px;
+}
+
+#header #header-inner #quick li ul li a.admin,
+#header #header-inner #quick li ul li a.admin:hover {
+    background: #FFF url("../images/icons/cog_edit.png") no-repeat 4px 9px;
+    width: 167px;
+    margin: 0;
+    padding: 12px 9px 7px 24px;
+}
+
+.groups_breadcrumbs a {
+    color: #fff;
+}
+
+.groups_breadcrumbs a:hover {
+    color: #bfe3ff;
+    text-decoration: none;
+}
+
+td.quick_repo_menu {
+    background: #FFF url("../images/vertical-indicator.png") 8px 50% no-repeat !important;
+    cursor: pointer;
+    width: 8px;
+    border: 1px solid transparent;
+}
+
+td.quick_repo_menu.active {
+    background: url("../images/dt-arrow-dn.png") no-repeat scroll 5px 50% #FFFFFF !important;
+    border: 1px solid #003367;
+    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
+    cursor: pointer;
+}
+
+td.quick_repo_menu .menu_items {
+    margin-top: 10px;
+    margin-left: -6px;
+    width: 150px;
+    position: absolute;
+    background-color: #FFF;
+    background: none repeat scroll 0 0 #FFFFFF;
+    border-color: #003367 #666666 #666666;
+    border-right: 1px solid #666666;
+    border-style: solid;
+    border-width: 1px;
+    box-shadow: 2px 8px 4px rgba(0, 0, 0, 0.2);
+    border-top-style: none;
+}
+
+td.quick_repo_menu .menu_items li {
+    padding: 0 !important;
+}
+
+td.quick_repo_menu .menu_items a {
+    display: block;
+    padding: 4px 12px 4px 8px;
+}
+
+td.quick_repo_menu .menu_items a:hover {
+    background-color: #EEE;
+    text-decoration: none;
+}
+
+td.quick_repo_menu .menu_items .icon img {
+    margin-bottom: -2px;
+}
+
+td.quick_repo_menu .menu_items.hidden {
+    display: none;
+}
+
+.yui-dt-first th {
+    text-align: left;
+}
+
+/*
+Copyright (c) 2011, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.com/yui/license.html
+version: 2.9.0
+*/
+.yui-skin-sam .yui-dt-mask {
+    position: absolute;
+    z-index: 9500;
+}
+.yui-dt-tmp {
+    position: absolute;
+    left: -9000px;
+}
+.yui-dt-scrollable .yui-dt-bd { overflow: auto }
+.yui-dt-scrollable .yui-dt-hd {
+    overflow: hidden;
+    position: relative;
+}
+.yui-dt-scrollable .yui-dt-bd thead tr,
+.yui-dt-scrollable .yui-dt-bd thead th {
+    position: absolute;
+    left: -1500px;
+}
+.yui-dt-scrollable tbody { -moz-outline: 0 }
+.yui-skin-sam thead .yui-dt-sortable { cursor: pointer }
+.yui-skin-sam thead .yui-dt-draggable { cursor: move }
+.yui-dt-coltarget {
+    position: absolute;
+    z-index: 999;
+}
+.yui-dt-hd { zoom: 1 }
+th.yui-dt-resizeable .yui-dt-resizerliner { position: relative }
+.yui-dt-resizer {
+    position: absolute;
+    right: 0;
+    bottom: 0;
+    height: 100%;
+    cursor: e-resize;
+    cursor: col-resize;
+    background-color: #CCC;
+    opacity: 0;
+    filter: alpha(opacity=0);
+}
+.yui-dt-resizerproxy {
+    visibility: hidden;
+    position: absolute;
+    z-index: 9000;
+    background-color: #CCC;
+    opacity: 0;
+    filter: alpha(opacity=0);
+}
+th.yui-dt-hidden .yui-dt-liner,
+td.yui-dt-hidden .yui-dt-liner,
+th.yui-dt-hidden .yui-dt-resizer { display: none }
+.yui-dt-editor,
+.yui-dt-editor-shim {
+    position: absolute;
+    z-index: 9000;
+}
+.yui-skin-sam .yui-dt table {
+    margin: 0;
+    padding: 0;
+    font-family: arial;
+    font-size: inherit;
+    border-collapse: separate;
+    *border-collapse: collapse;
+    border-spacing: 0;
+    border: 1px solid #7f7f7f;
+}
+.yui-skin-sam .yui-dt thead { border-spacing: 0 }
+.yui-skin-sam .yui-dt caption {
+    color: #000;
+    font-size: 85%;
+    font-weight: normal;
+    font-style: italic;
+    line-height: 1;
+    padding: 1em 0;
+    text-align: center;
+}
+.yui-skin-sam .yui-dt th { background: #d8d8da url(../images/sprite.png) repeat-x 0 0 }
+.yui-skin-sam .yui-dt th,
+.yui-skin-sam .yui-dt th a {
+    font-weight: normal;
+    text-decoration: none;
+    color: #000;
+    vertical-align: bottom;
+}
+.yui-skin-sam .yui-dt th {
+    margin: 0;
+    padding: 0;
+    border: 0;
+    border-right: 1px solid #cbcbcb;
+}
+.yui-skin-sam .yui-dt tr.yui-dt-first td { border-top: 1px solid #7f7f7f }
+.yui-skin-sam .yui-dt th .yui-dt-liner { white-space: nowrap }
+.yui-skin-sam .yui-dt-liner {
+    margin: 0;
+    padding: 0;
+}
+.yui-skin-sam .yui-dt-coltarget {
+    width: 5px;
+    background-color: red;
+}
+.yui-skin-sam .yui-dt td {
+    margin: 0;
+    padding: 0;
+    border: 0;
+    border-right: 1px solid #cbcbcb;
+    text-align: left;
+}
+.yui-skin-sam .yui-dt-list td { border-right: 0 }
+.yui-skin-sam .yui-dt-resizer { width: 6px }
+.yui-skin-sam .yui-dt-mask {
+    background-color: #000;
+    opacity: .25;
+    filter: alpha(opacity=25);
+}
+.yui-skin-sam .yui-dt-message { background-color: #FFF }
+.yui-skin-sam .yui-dt-scrollable table { border: 0 }
+.yui-skin-sam .yui-dt-scrollable .yui-dt-hd {
+    border-left: 1px solid #7f7f7f;
+    border-top: 1px solid #7f7f7f;
+    border-right: 1px solid #7f7f7f;
+}
+.yui-skin-sam .yui-dt-scrollable .yui-dt-bd {
+    border-left: 1px solid #7f7f7f;
+    border-bottom: 1px solid #7f7f7f;
+    border-right: 1px solid #7f7f7f;
+    background-color: #FFF;
+}
+.yui-skin-sam .yui-dt-scrollable .yui-dt-data tr.yui-dt-last td { border-bottom: 1px solid #7f7f7f }
+.yui-skin-sam th.yui-dt-asc,
+.yui-skin-sam th.yui-dt-desc { background: url(../images/sprite.png) repeat-x 0 -100px }
+.yui-skin-sam th.yui-dt-sortable .yui-dt-label { margin-right: 10px }
+.yui-skin-sam th.yui-dt-asc .yui-dt-liner { background: url(../images/dt-arrow-up.png) no-repeat right }
+.yui-skin-sam th.yui-dt-desc .yui-dt-liner { background: url(../images/dt-arrow-dn.png) no-repeat right }
+tbody .yui-dt-editable { cursor: pointer }
+.yui-dt-editor {
+    text-align: left;
+    background-color: #f2f2f2;
+    border: 1px solid #808080;
+    padding: 6px;
+}
+.yui-dt-editor label {
+    padding-left: 4px;
+    padding-right: 6px;
+}
+.yui-dt-editor .yui-dt-button {
+    padding-top: 6px;
+    text-align: right;
+}
+.yui-dt-editor .yui-dt-button button {
+    background: url(../images/sprite.png) repeat-x 0 0;
+    border: 1px solid #999;
+    width: 4em;
+    height: 1.8em;
+    margin-left: 6px;
+}
+.yui-dt-editor .yui-dt-button button.yui-dt-default {
+    background: url(../images/sprite.png) repeat-x 0 -1400px;
+    background-color: #5584e0;
+    border: 1px solid #304369;
+    color: #FFF;
+}
+.yui-dt-editor .yui-dt-button button:hover {
+    background: url(../images/sprite.png) repeat-x 0 -1300px;
+    color: #000;
+}
+.yui-dt-editor .yui-dt-button button:active {
+    background: url(../images/sprite.png) repeat-x 0 -1700px;
+    color: #000;
+}
+.yui-skin-sam tr.yui-dt-even { background-color: #FFF }
+.yui-skin-sam tr.yui-dt-odd { background-color: #edf5ff }
+.yui-skin-sam tr.yui-dt-even td.yui-dt-asc,
+.yui-skin-sam tr.yui-dt-even td.yui-dt-desc { background-color: #edf5ff }
+.yui-skin-sam tr.yui-dt-odd td.yui-dt-asc,
+.yui-skin-sam tr.yui-dt-odd td.yui-dt-desc { background-color: #dbeaff }
+.yui-skin-sam .yui-dt-list tr.yui-dt-even { background-color: #FFF }
+.yui-skin-sam .yui-dt-list tr.yui-dt-odd { background-color: #FFF }
+.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-asc,
+.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-desc { background-color: #edf5ff }
+.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-asc,
+.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-desc { background-color: #edf5ff }
+.yui-skin-sam th.yui-dt-highlighted,
+.yui-skin-sam th.yui-dt-highlighted a { background-color: #b2d2ff }
+.yui-skin-sam tr.yui-dt-highlighted,
+.yui-skin-sam tr.yui-dt-highlighted td.yui-dt-asc,
+.yui-skin-sam tr.yui-dt-highlighted td.yui-dt-desc,
+.yui-skin-sam tr.yui-dt-even td.yui-dt-highlighted,
+.yui-skin-sam tr.yui-dt-odd td.yui-dt-highlighted {
+    cursor: pointer;
+    background-color: #b2d2ff;
+}
+.yui-skin-sam .yui-dt-list th.yui-dt-highlighted,
+.yui-skin-sam .yui-dt-list th.yui-dt-highlighted a { background-color: #b2d2ff }
+.yui-skin-sam .yui-dt-list tr.yui-dt-highlighted,
+.yui-skin-sam .yui-dt-list tr.yui-dt-highlighted td.yui-dt-asc,
+.yui-skin-sam .yui-dt-list tr.yui-dt-highlighted td.yui-dt-desc,
+.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-highlighted,
+.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-highlighted {
+    cursor: pointer;
+    background-color: #b2d2ff;
+}
+.yui-skin-sam th.yui-dt-selected,
+.yui-skin-sam th.yui-dt-selected a { background-color: #446cd7 }
+.yui-skin-sam tr.yui-dt-selected td,
+.yui-skin-sam tr.yui-dt-selected td.yui-dt-asc,
+.yui-skin-sam tr.yui-dt-selected td.yui-dt-desc {
+    background-color: #426fd9;
+    color: #FFF;
+}
+.yui-skin-sam tr.yui-dt-even td.yui-dt-selected,
+.yui-skin-sam tr.yui-dt-odd td.yui-dt-selected {
+    background-color: #446cd7;
+    color: #FFF;
+}
+.yui-skin-sam .yui-dt-list th.yui-dt-selected,
+.yui-skin-sam .yui-dt-list th.yui-dt-selected a { background-color: #446cd7 }
+.yui-skin-sam .yui-dt-list tr.yui-dt-selected td,
+.yui-skin-sam .yui-dt-list tr.yui-dt-selected td.yui-dt-asc,
+.yui-skin-sam .yui-dt-list tr.yui-dt-selected td.yui-dt-desc {
+    background-color: #426fd9;
+    color: #FFF;
+}
+.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-selected,
+.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-selected {
+    background-color: #446cd7;
+    color: #FFF;
+}
+.yui-skin-sam .yui-dt-paginator {
+    display: block;
+    margin: 6px 0;
+    white-space: nowrap;
+}
+.yui-skin-sam .yui-dt-paginator .yui-dt-first,
+.yui-skin-sam .yui-dt-paginator .yui-dt-last,
+.yui-skin-sam .yui-dt-paginator .yui-dt-selected { padding: 2px 6px }
+.yui-skin-sam .yui-dt-paginator a.yui-dt-first,
+.yui-skin-sam .yui-dt-paginator a.yui-dt-last { text-decoration: none }
+.yui-skin-sam .yui-dt-paginator .yui-dt-previous,
+.yui-skin-sam .yui-dt-paginator .yui-dt-next { display: none }
+.yui-skin-sam a.yui-dt-page {
+    border: 1px solid #cbcbcb;
+    padding: 2px 6px;
+    text-decoration: none;
+    background-color: #fff;
+}
+.yui-skin-sam .yui-dt-selected {
+    border: 1px solid #fff;
+    background-color: #fff;
+}
+
+#content #left {
+    left: 0;
+    width: 280px;
+    position: absolute;
+}
+
+#content #right {
+    margin: 0 60px 10px 290px;
+}
+
+#content div.box {
+    clear: both;
+    background: #fff;
+    margin: 0 0 10px;
+    padding: 0 0 10px;
+    -webkit-border-radius: 4px 4px 4px 4px;
+    -khtml-border-radius: 4px 4px 4px 4px;
+    border-radius: 4px 4px 4px 4px;
+    box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
+}
+
+#content div.box-left {
+    width: 49%;
+    clear: none;
+    float: left;
+    margin: 0 0 10px;
+}
+
+#content div.box-right {
+    width: 49%;
+    clear: none;
+    float: right;
+    margin: 0 0 10px;
+}
+
+#content div.box div.title {
+    clear: both;
+    overflow: hidden;
+    background-color: #003B76;
+    background-repeat: repeat-x;
+    background-image: -khtml-gradient(linear, left top, left bottom, from(#003B76), to(#00376E) );
+    background-image: -moz-linear-gradient(top, #003b76, #00376e);
+    background-image: -ms-linear-gradient(top, #003b76, #00376e);
+    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76), color-stop(100%, #00376e) );
+    background-image: -webkit-linear-gradient(top, #003b76, #00376e);
+    background-image: -o-linear-gradient(top, #003b76, #00376e);
+    background-image: linear-gradient(to bottom, #003b76, #00376e);
+    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76', endColorstr='#00376e', GradientType=0 );
+    margin: 0 0 20px;
+    padding: 0;
+    border-radius: 4px 4px 0 0;
+}
+
+#content div.box div.title h5 {
+    float: left;
+    border: none;
+    color: #fff;
+    margin: 0;
+    padding: 11px 0 11px 10px;
+}
+
+#content div.box div.title .link-white {
+    color: #FFFFFF;
+}
+
+#content div.box div.title .link-white.current {
+    color: #BFE3FF;
+}
+
+#content div.box div.title ul.links li {
+    list-style: none;
+    float: left;
+    margin: 0;
+    padding: 0;
+}
+
+#content div.box div.title ul.links li a {
+    border-left: 1px solid #316293;
+    color: #FFFFFF;
+    display: block;
+    float: left;
+    font-size: 13px;
+    font-weight: 700;
+    height: 1%;
+    margin: 0;
+    padding: 11px 22px 12px;
+    text-decoration: none;
+}
+
+#content div.box h1, #content div.box h2, #content div.box h3, #content div.box h4, #content div.box h5, #content div.box h6,
+#content div.box div.h1, #content div.box div.h2, #content div.box div.h3, #content div.box div.h4, #content div.box div.h5, #content div.box div.h6 {
+    clear: both;
+    overflow: hidden;
+    border-bottom: 1px solid #DDD;
+    margin: 10px 20px;
+    padding: 0 0 15px;
+}
+
+#content div.box p {
+    color: #5f5f5f;
+    font-size: 12px;
+    line-height: 150%;
+    margin: 0 24px 10px;
+    padding: 0;
+}
+
+#content div.box blockquote {
+    border-left: 4px solid #DDD;
+    color: #5f5f5f;
+    font-size: 11px;
+    line-height: 150%;
+    margin: 0 34px;
+    padding: 0 0 0 14px;
+}
+
+#content div.box blockquote p {
+    margin: 10px 0;
+    padding: 0;
+}
+
+#content div.box dl {
+    margin: 10px 0px;
+}
+
+#content div.box dt {
+    font-size: 12px;
+    margin: 0;
+}
+
+#content div.box dd {
+    font-size: 12px;
+    margin: 0;
+    padding: 8px 0 8px 15px;
+}
+
+#content div.box li {
+    font-size: 12px;
+    padding: 4px 0;
+}
+
+#content div.box ul.disc, #content div.box ul.circle {
+    margin: 10px 24px 10px 38px;
+}
+
+#content div.box ul.square {
+    margin: 10px 24px 10px 40px;
+}
+
+#content div.box img.left {
+    border: none;
+    float: left;
+    margin: 10px 10px 10px 0;
+}
+
+#content div.box img.right {
+    border: none;
+    float: right;
+    margin: 10px 0 10px 10px;
+}
+
+#content div.box div.messages {
+    clear: both;
+    overflow: hidden;
+    margin: 0 20px;
+    padding: 0;
+}
+
+#content div.box div.message {
+    clear: both;
+    overflow: hidden;
+    margin: 0;
+    padding: 5px 0;
+    white-space: pre-wrap;
+}
+#content div.box div.expand {
+    width: 110%;
+    height: 14px;
+    font-size: 10px;
+    text-align: center;
+    cursor: pointer;
+    color: #666;
+
+    background: -webkit-gradient(linear,0% 50%,100% 50%,color-stop(0%,rgba(255,255,255,0)),color-stop(100%,rgba(64,96,128,0.1)));
+    background: -webkit-linear-gradient(top,rgba(255,255,255,0),rgba(64,96,128,0.1));
+    background: -moz-linear-gradient(top,rgba(255,255,255,0),rgba(64,96,128,0.1));
+    background: -o-linear-gradient(top,rgba(255,255,255,0),rgba(64,96,128,0.1));
+    background: -ms-linear-gradient(top,rgba(255,255,255,0),rgba(64,96,128,0.1));
+    background: linear-gradient(to bottom,rgba(255,255,255,0),rgba(64,96,128,0.1));
+
+    display: none;
+    overflow: hidden;
+}
+#content div.box div.expand .expandtext {
+    background-color: #ffffff;
+    padding: 2px;
+    border-radius: 2px;
+}
+
+#content div.box div.message a {
+    font-weight: 400 !important;
+}
+
+#content div.box div.message div.image {
+    float: left;
+    margin: 9px 0 0 5px;
+    padding: 6px;
+}
+
+#content div.box div.message div.image img {
+    vertical-align: middle;
+    margin: 0;
+}
+
+#content div.box div.message div.text {
+    float: left;
+    margin: 0;
+    padding: 9px 6px;
+}
+
+#content div.box div.message div.dismiss a {
+    height: 16px;
+    width: 16px;
+    display: block;
+    background: url("../images/icons/cross.png") no-repeat;
+    margin: 15px 14px 0 0;
+    padding: 0;
+}
+
+#content div.box div.message div.text h1, #content div.box div.message div.text h2, #content div.box div.message div.text h3, #content div.box div.message div.text h4, #content div.box div.message div.text h5, #content div.box div.message div.text h6 {
+    border: none;
+    margin: 0;
+    padding: 0;
+}
+
+#content div.box div.message div.text span {
+    height: 1%;
+    display: block;
+    margin: 0;
+    padding: 5px 0 0;
+}
+
+#content div.box div.message-error {
+    height: 1%;
+    clear: both;
+    overflow: hidden;
+    background: #FBE3E4;
+    border: 1px solid #FBC2C4;
+    color: #860006;
+}
+
+#content div.box div.message-error h6 {
+    color: #860006;
+}
+
+#content div.box div.message-warning {
+    height: 1%;
+    clear: both;
+    overflow: hidden;
+    background: #FFF6BF;
+    border: 1px solid #FFD324;
+    color: #5f5200;
+}
+
+#content div.box div.message-warning h6 {
+    color: #5f5200;
+}
+
+#content div.box div.message-notice {
+    height: 1%;
+    clear: both;
+    overflow: hidden;
+    background: #8FBDE0;
+    border: 1px solid #6BACDE;
+    color: #003863;
+}
+
+#content div.box div.message-notice h6 {
+    color: #003863;
+}
+
+#content div.box div.message-success {
+    height: 1%;
+    clear: both;
+    overflow: hidden;
+    background: #E6EFC2;
+    border: 1px solid #C6D880;
+    color: #4e6100;
+}
+
+#content div.box div.message-success h6 {
+    color: #4e6100;
+}
+
+#content div.box div.form div.fields div.field {
+    height: 1%;
+    min-height: 12px;
+    border-bottom: 1px solid #DDD;
+    clear: both;
+    margin: 0;
+    padding: 10px 0;
+}
+
+#content div.box div.form div.fields div.field-first {
+    padding: 0 0 10px;
+}
+
+#content div.box div.form div.fields div.field-noborder {
+    border-bottom: 0 !important;
+}
+
+#content div.box div.form div.fields div.field span.error-message {
+    height: 1%;
+    display: inline-block;
+    color: red;
+    margin: 8px 0 0 4px;
+    padding: 0;
+}
+
+#content div.box div.form div.fields div.field span.success {
+    height: 1%;
+    display: block;
+    color: #316309;
+    margin: 8px 0 0;
+    padding: 0;
+}
+
+#content div.box div.form div.fields div.field div.label {
+    left: 70px;
+    width: 155px;
+    position: absolute;
+    margin: 0;
+    padding: 5px 0 0 0px;
+}
+
+#content div.box div.form div.fields div.field div.label-summary {
+    left: 30px;
+    width: 155px;
+    position: absolute;
+    margin: 0;
+    padding: 0px 0 0 0px;
+}
+
+#content div.box-left div.form div.fields div.field div.label,
+#content div.box-right div.form div.fields div.field div.label,
+#content div.box-left div.form div.fields div.field div.label,
+#content div.box-left div.form div.fields div.field div.label-summary,
+#content div.box-right div.form div.fields div.field div.label-summary,
+#content div.box-left div.form div.fields div.field div.label-summary {
+    clear: both;
+    overflow: hidden;
+    left: 0;
+    width: auto;
+    position: relative;
+    margin: 0;
+    padding: 0 0 8px;
+}
+
+#content div.box div.form div.fields div.field div.label-select {
+    padding: 5px 0 0 5px;
+}
+
+#content div.box-left div.form div.fields div.field div.label-select,
+#content div.box-right div.form div.fields div.field div.label-select {
+    padding: 0 0 8px;
+}
+
+#content div.box-left div.form div.fields div.field div.label-textarea,
+#content div.box-right div.form div.fields div.field div.label-textarea {
+    padding: 0 0 8px !important;
+}
+
+#content div.box div.form div.fields div.field div.label label, div.label label {
+    color: #393939;
+    font-weight: 700;
+}
+#content div.box div.form div.fields div.field div.label label, div.label-summary label {
+    color: #393939;
+    font-weight: 700;
+}
+#content div.box div.form div.fields div.field div.input {
+    margin: 0 0 0 200px;
+}
+
+#content div.box div.form div.fields div.field div.input.summary {
+    margin: 0 0 0 110px;
+}
+#content div.box div.form div.fields div.field div.input.summary-short {
+    margin: 0 0 0 110px;
+}
+#content div.box div.form div.fields div.field div.file {
+    margin: 0 0 0 200px;
+}
+
+#content div.box-left div.form div.fields div.field div.input, #content div.box-right div.form div.fields div.field div.input {
+    margin: 0 0 0 0px;
+}
+
+#content div.box div.form div.fields div.field div.input input,
+.reviewer_ac input {
+    background: #FFF;
+    border-top: 1px solid #b3b3b3;
+    border-left: 1px solid #b3b3b3;
+    border-right: 1px solid #eaeaea;
+    border-bottom: 1px solid #eaeaea;
+    color: #000;
+    font-size: 11px;
+    margin: 0;
+    padding: 7px 7px 6px;
+}
+
+#content div.box div.form div.fields div.field div.input input#clone_url,
+#content div.box div.form div.fields div.field div.input input#clone_url_id
+{
+    font-size: 16px;
+    padding: 2px;
+}
+
+#content div.box div.form div.fields div.field div.file input {
+    background: none repeat scroll 0 0 #FFFFFF;
+    border-color: #B3B3B3 #EAEAEA #EAEAEA #B3B3B3;
+    border-style: solid;
+    border-width: 1px;
+    color: #000000;
+    font-size: 11px;
+    margin: 0;
+    padding: 7px 7px 6px;
+}
+
+input.disabled {
+    background-color: #F5F5F5 !important;
+}
+#content div.box div.form div.fields div.field div.input input.small {
+    width: 30%;
+}
+
+#content div.box div.form div.fields div.field div.input input.medium {
+    width: 55%;
+}
+
+#content div.box div.form div.fields div.field div.input input.large {
+    width: 85%;
+}
+
+#content div.box div.form div.fields div.field div.input input.date {
+    width: 177px;
+}
+
+#content div.box div.form div.fields div.field div.input input.button {
+    background: #D4D0C8;
+    border-top: 1px solid #FFF;
+    border-left: 1px solid #FFF;
+    border-right: 1px solid #404040;
+    border-bottom: 1px solid #404040;
+    color: #000;
+    margin: 0;
+    padding: 4px 8px;
+}
+
+#content div.box div.form div.fields div.field div.textarea {
+    border-top: 1px solid #b3b3b3;
+    border-left: 1px solid #b3b3b3;
+    border-right: 1px solid #eaeaea;
+    border-bottom: 1px solid #eaeaea;
+    margin: 0 0 0 200px;
+    padding: 10px;
+}
+
+#content div.box div.form div.fields div.field div.textarea-editor {
+    border: 1px solid #ddd;
+    padding: 0;
+}
+
+#content div.box div.form div.fields div.field div.textarea textarea {
+    width: 100%;
+    height: 220px;
+    overflow: hidden;
+    background: #FFF;
+    color: #000;
+    font-size: 11px;
+    outline: none;
+    border-width: 0;
+    margin: 0;
+    padding: 0;
+}
+
+#content div.box-left div.form div.fields div.field div.textarea textarea, #content div.box-right div.form div.fields div.field div.textarea textarea {
+    width: 100%;
+    height: 100px;
+}
+
+#content div.box div.form div.fields div.field div.textarea table {
+    width: 100%;
+    border: none;
+    margin: 0;
+    padding: 0;
+}
+
+#content div.box div.form div.fields div.field div.textarea table td {
+    background: #DDD;
+    border: none;
+    padding: 0;
+}
+
+#content div.box div.form div.fields div.field div.textarea table td table {
+    width: auto;
+    border: none;
+    margin: 0;
+    padding: 0;
+}
+
+#content div.box div.form div.fields div.field div.textarea table td table td {
+    font-size: 11px;
+    padding: 5px 5px 5px 0;
+}
+
+#content div.box div.form div.fields div.field input[type=text]:focus,
+#content div.box div.form div.fields div.field input[type=password]:focus,
+#content div.box div.form div.fields div.field input[type=file]:focus,
+#content div.box div.form div.fields div.field textarea:focus,
+#content div.box div.form div.fields div.field select:focus,
+.reviewer_ac input:focus {
+    background: #f6f6f6;
+    border-color: #666;
+}
+
+.reviewer_ac {
+    padding: 10px
+}
+
+div.form div.fields div.field div.button {
+    margin: 0;
+    padding: 0 0 0 8px;
+}
+#content div.box table.noborder {
+    border: 1px solid transparent;
+}
+
+#content div.box table {
+    width: 100%;
+    border-collapse: separate;
+    margin: 0;
+    padding: 0;
+    border: 1px solid #eee;
+    -webkit-border-radius: 4px;
+    border-radius: 4px;
+}
+
+#content div.box table th {
+    background: #eee;
+    border-bottom: 1px solid #ddd;
+    padding: 5px 0px 5px 5px;
+    text-align: left;
+}
+
+#content div.box table th.left {
+    text-align: left;
+}
+
+#content div.box table th.right {
+    text-align: right;
+}
+
+#content div.box table th.center {
+    text-align: center;
+}
+
+#content div.box table th.selected {
+    vertical-align: middle;
+    padding: 0;
+}
+
+#content div.box table td {
+    background: #fff;
+    border-bottom: 1px solid #cdcdcd;
+    vertical-align: middle;
+    padding: 5px;
+}
+
+#content div.box table tr.selected td {
+    background: #FFC;
+}
+
+#content div.box table td.selected {
+    width: 3%;
+    text-align: center;
+    vertical-align: middle;
+    padding: 0;
+}
+
+#content div.box table td.action {
+    width: 45%;
+    text-align: left;
+}
+
+#content div.box table td.date {
+    width: 33%;
+    text-align: center;
+}
+
+#content div.box div.action {
+    float: right;
+    background: #FFF;
+    text-align: right;
+    margin: 10px 0 0;
+    padding: 0;
+}
+
+#content div.box div.action select {
+    font-size: 11px;
+    margin: 0;
+}
+
+#content div.box div.action .ui-selectmenu {
+    margin: 0;
+    padding: 0;
+}
+
+#content div.box div.pagination {
+    height: 1%;
+    clear: both;
+    overflow: hidden;
+    margin: 10px 0 0;
+    padding: 0;
+}
+
+#content div.box div.pagination ul.pager {
+    float: right;
+    text-align: right;
+    margin: 0;
+    padding: 0;
+}
+
+#content div.box div.pagination ul.pager li {
+    height: 1%;
+    float: left;
+    list-style: none;
+    background: #ebebeb url("../images/pager.png") repeat-x;
+    border-top: 1px solid #dedede;
+    border-left: 1px solid #cfcfcf;
+    border-right: 1px solid #c4c4c4;
+    border-bottom: 1px solid #c4c4c4;
+    color: #4A4A4A;
+    font-weight: 700;
+    margin: 0 0 0 4px;
+    padding: 0;
+}
+
+#content div.box div.pagination ul.pager li.separator {
+    padding: 6px;
+}
+
+#content div.box div.pagination ul.pager li.current {
+    background: #b4b4b4 url("../images/pager_selected.png") repeat-x;
+    border-top: 1px solid #ccc;
+    border-left: 1px solid #bebebe;
+    border-right: 1px solid #b1b1b1;
+    border-bottom: 1px solid #afafaf;
+    color: #515151;
+    padding: 6px;
+}
+
+#content div.box div.pagination ul.pager li a {
+    height: 1%;
+    display: block;
+    float: left;
+    color: #515151;
+    text-decoration: none;
+    margin: 0;
+    padding: 6px;
+}
+
+#content div.box div.pagination ul.pager li a:hover, #content div.box div.pagination ul.pager li a:active {
+    background: #b4b4b4 url("../images/pager_selected.png") repeat-x;
+    border-top: 1px solid #ccc;
+    border-left: 1px solid #bebebe;
+    border-right: 1px solid #b1b1b1;
+    border-bottom: 1px solid #afafaf;
+    margin: -1px;
+}
+
+#content div.box div.pagination-wh {
+    height: 1%;
+    clear: both;
+    overflow: hidden;
+    text-align: right;
+    margin: 10px 0 0;
+    padding: 0;
+}
+
+#content div.box div.pagination-right {
+    float: right;
+}
+
+#content div.box div.pagination-wh a,
+#content div.box div.pagination-wh span.pager_dotdot,
+#content div.box div.pagination-wh span.yui-pg-previous,
+#content div.box div.pagination-wh span.yui-pg-last,
+#content div.box div.pagination-wh span.yui-pg-next,
+#content div.box div.pagination-wh span.yui-pg-first {
+    height: 1%;
+    float: left;
+    background: #ebebeb url("../images/pager.png") repeat-x;
+    border-top: 1px solid #dedede;
+    border-left: 1px solid #cfcfcf;
+    border-right: 1px solid #c4c4c4;
+    border-bottom: 1px solid #c4c4c4;
+    color: #4A4A4A;
+    font-weight: 700;
+    margin: 0 0 0 4px;
+    padding: 6px;
+}
+
+#content div.box div.pagination-wh span.pager_curpage {
+    height: 1%;
+    float: left;
+    background: #b4b4b4 url("../images/pager_selected.png") repeat-x;
+    border-top: 1px solid #ccc;
+    border-left: 1px solid #bebebe;
+    border-right: 1px solid #b1b1b1;
+    border-bottom: 1px solid #afafaf;
+    color: #515151;
+    font-weight: 700;
+    margin: 0 0 0 4px;
+    padding: 6px;
+}
+
+#content div.box div.pagination-wh a:hover, #content div.box div.pagination-wh a:active {
+    background: #b4b4b4 url("../images/pager_selected.png") repeat-x;
+    border-top: 1px solid #ccc;
+    border-left: 1px solid #bebebe;
+    border-right: 1px solid #b1b1b1;
+    border-bottom: 1px solid #afafaf;
+    text-decoration: none;
+}
+
+#content div.box div.traffic div.legend {
+    clear: both;
+    overflow: hidden;
+    border-bottom: 1px solid #ddd;
+    margin: 0 0 10px;
+    padding: 0 0 10px;
+}
+
+#content div.box div.traffic div.legend h6 {
+    float: left;
+    border: none;
+    margin: 0;
+    padding: 0;
+}
+
+#content div.box div.traffic div.legend li {
+    list-style: none;
+    float: left;
+    font-size: 11px;
+    margin: 0;
+    padding: 0 8px 0 4px;
+}
+
+#content div.box div.traffic div.legend li.visits {
+    border-left: 12px solid #edc240;
+}
+
+#content div.box div.traffic div.legend li.pageviews {
+    border-left: 12px solid #afd8f8;
+}
+
+#content div.box div.traffic table {
+    width: auto;
+}
+
+#content div.box div.traffic table td {
+    background: transparent;
+    border: none;
+    padding: 2px 3px 3px;
+}
+
+#content div.box div.traffic table td.legendLabel {
+    padding: 0 3px 2px;
+}
+
+#content div.box #summary {
+    margin-right: 200px;
+}
+
+#summary-menu-stats {
+    float: left;
+    width: 180px;
+    position: absolute;
+    top: 0;
+    right: 0;
+}
+
+#summary-menu-stats ul {
+    margin: 0 10px;
+    display: block;
+    background-color: #f9f9f9;
+    border: 1px solid #d1d1d1;
+    border-radius: 4px;
+}
+
+#content #summary-menu-stats li {
+    border-top: 1px solid #d1d1d1;
+    padding: 0;
+}
+
+#content #summary-menu-stats li:hover {
+    background: #f0f0f0;
+}
+
+#content #summary-menu-stats li:first-child {
+    border-top: none;
+}
+
+#summary-menu-stats a.followers { background-image: url('../images/icons/heart.png')}
+#summary-menu-stats a.forks { background-image: url('../images/icons/arrow_divide.png')}
+#summary-menu-stats a.settings { background-image: url('../images/icons/cog_edit.png')}
+#summary-menu-stats a.feed { background-image: url('../images/icons/rss_16.png')}
+#summary-menu-stats a.repo-size { background-image: url('../images/icons/server.png')}
+
+#summary-menu-stats a {
+    display: block;
+    padding: 12px 30px;
+    background-repeat: no-repeat;
+    background-position: 10px 50%;
+    padding-right: 10px;
+}
+
+#repo_size_2.loaded {
+    margin-left: 30px;
+    display: block;
+    padding-right: 10px;
+    padding-bottom: 7px;
+}
+
+#summary-menu-stats a:hover {
+    text-decoration: none;
+}
+
+#summary-menu-stats a span {
+    background-color: #DEDEDE;
+    color: 888 !important;
+    border-radius: 4px;
+    padding: 2px 4px;
+    font-size: 10px;
+}
+
+#summary .metatag {
+    display: inline-block;
+    padding: 3px 5px;
+    margin-bottom: 3px;
+    margin-right: 1px;
+    border-radius: 5px;
+}
+
+#content div.box #summary p {
+    margin-bottom: -5px;
+    width: 600px;
+    white-space: pre-wrap;
+}
+
+#content div.box #summary p:last-child {
+    margin-bottom: 9px;
+}
+
+#content div.box #summary p:first-of-type {
+    margin-top: 9px;
+}
+
+.metatag {
+    display: inline-block;
+    margin-right: 1px;
+    -webkit-border-radius: 4px 4px 4px 4px;
+    -khtml-border-radius: 4px 4px 4px 4px;
+    border-radius: 4px 4px 4px 4px;
+
+    border: solid 1px #9CF;
+    padding: 2px 3px 2px 3px !important;
+    background-color: #DEF;
+}
+
+.metatag[tag="dead"] {
+    background-color: #E44;
+}
+
+.metatag[tag="stale"] {
+    background-color: #EA4;
+}
+
+.metatag[tag="featured"] {
+    background-color: #AEA;
+}
+
+.metatag[tag="requires"] {
+    background-color: #9CF;
+}
+
+.metatag[tag="recommends"] {
+    background-color: #BDF;
+}
+
+.metatag[tag="lang"] {
+    background-color: #FAF474;
+}
+
+.metatag[tag="license"] {
+    border: solid 1px #9CF;
+    background-color: #DEF;
+    target-new: tab !important;
+}
+.metatag[tag="see"] {
+    border: solid 1px #CBD;
+    background-color: #EDF;
+}
+
+a.metatag[tag="license"]:hover {
+    background-color: #003367;
+    color: #FFF;
+    text-decoration: none;
+}
+
+#summary .desc {
+    white-space: pre;
+    width: 100%;
+}
+
+#summary .repo_name {
+    font-size: 1.6em;
+    font-weight: bold;
+    vertical-align: baseline;
+    clear: right
+}
+
+#footer {
+    clear: both;
+    overflow: hidden;
+    text-align: right;
+    margin: 0;
+    padding: 0 10px 4px;
+    margin: -10px 0 0;
+}
+
+#footer div#footer-inner {
+    background-color: #003B76;
+    background-repeat: repeat-x;
+    background-image: -khtml-gradient( linear, left top, left bottom, from(#003B76), to(#00376E));
+    background-image: -moz-linear-gradient(top, #003b76, #00376e);
+    background-image: -ms-linear-gradient( top, #003b76, #00376e);
+    background-image: -webkit-gradient( linear, left top, left bottom, color-stop( 0%, #003b76), color-stop( 100%, #00376e));
+    background-image: -webkit-linear-gradient( top, #003b76, #00376e));
+    background-image: -o-linear-gradient( top, #003b76, #00376e));
+    background-image: linear-gradient(to bottom, #003b76, #00376e);
+    filter: progid : DXImageTransform.Microsoft.gradient ( startColorstr = '#003b76', endColorstr = '#00376e', GradientType = 0);
+    box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
+    -webkit-border-radius: 4px 4px 4px 4px;
+    -khtml-border-radius: 4px 4px 4px 4px;
+    border-radius: 4px 4px 4px 4px;
+}
+
+#footer div#footer-inner p {
+    padding: 15px 25px 15px 0;
+    color: #FFF;
+    font-weight: 700;
+}
+
+#footer div#footer-inner .footer-link {
+    float: left;
+    padding-left: 10px;
+}
+
+#footer div#footer-inner .footer-link a, #footer div#footer-inner .footer-link-right a {
+    color: #FFF;
+}
+
+#login div.title {
+    clear: both;
+    overflow: hidden;
+    position: relative;
+    background-color: #003B76;
+    background-repeat: repeat-x;
+    background-image: -khtml-gradient( linear, left top, left bottom, from(#003B76), to(#00376E));
+    background-image: -moz-linear-gradient( top, #003b76, #00376e);
+    background-image: -ms-linear-gradient( top, #003b76, #00376e);
+    background-image: -webkit-gradient( linear, left top, left bottom, color-stop( 0%, #003b76), color-stop( 100%, #00376e));
+    background-image: -webkit-linear-gradient( top, #003b76, #00376e));
+    background-image: -o-linear-gradient( top, #003b76, #00376e));
+    background-image: linear-gradient(to bottom, #003b76, #00376e);
+    filter: progid : DXImageTransform.Microsoft.gradient ( startColorstr = '#003b76', endColorstr = '#00376e', GradientType = 0);
+    margin: 0 auto;
+    padding: 0;
+}
+
+#login div.inner {
+    background: #FFF url("../images/login.png") no-repeat top left;
+    border-top: none;
+    border-bottom: none;
+    margin: 0 auto;
+    padding: 20px;
+}
+
+#login div.form div.fields div.field div.label {
+    width: 173px;
+    float: left;
+    text-align: right;
+    margin: 2px 10px 0 0;
+    padding: 5px 0 0 5px;
+}
+
+#login div.form div.fields div.field div.input input {
+    background: #FFF;
+    border-top: 1px solid #b3b3b3;
+    border-left: 1px solid #b3b3b3;
+    border-right: 1px solid #eaeaea;
+    border-bottom: 1px solid #eaeaea;
+    color: #000;
+    font-size: 11px;
+    margin: 0;
+    padding: 7px 7px 6px;
+}
+
+#login div.form div.fields div.buttons {
+    clear: both;
+    overflow: hidden;
+    border-top: 1px solid #DDD;
+    text-align: right;
+    margin: 0;
+    padding: 10px 0 0;
+}
+
+#login div.form div.links {
+    clear: both;
+    overflow: hidden;
+    margin: 10px 0 0;
+    padding: 0 0 2px;
+}
+
+.user-menu {
+    margin: 0px !important;
+    float: left;
+}
+
+.user-menu .container {
+    padding: 0px 4px 0px 4px;
+    margin: 0px 0px 0px 0px;
+}
+
+.user-menu .gravatar {
+    margin: 0px 0px 0px 0px;
+    cursor: pointer;
+}
+.user-menu .gravatar.enabled {
+    background-color: #FDF784 !important;
+}
+.user-menu .gravatar:hover {
+    background-color: #FDF784 !important;
+}
+#quick_login {
+    min-height: 110px;
+    padding: 4px;
+    position: absolute;
+    right: 0;
+    background-color: #003B76;
+    background-repeat: repeat-x;
+    background-image: -khtml-gradient(linear, left top, left bottom, from(#003B76), to(#00376E) );
+    background-image: -moz-linear-gradient(top, #003b76, #00376e);
+    background-image: -ms-linear-gradient(top, #003b76, #00376e);
+    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76), color-stop(100%, #00376e) );
+    background-image: -webkit-linear-gradient(top, #003b76, #00376e);
+    background-image: -o-linear-gradient(top, #003b76, #00376e);
+    background-image: linear-gradient(to bottom, #003b76, #00376e);
+    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76', endColorstr='#00376e', GradientType=0 );
+
+    z-index: 999;
+    -webkit-border-radius: 0px 0px 4px 4px;
+    -khtml-border-radius: 0px 0px 4px 4px;
+    border-radius: 0px 0px 4px 4px;
+    box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
+
+    overflow: hidden;
+}
+#quick_login h4 {
+    color: #fff;
+    padding: 5px 0px 5px 14px;
+}
+
+#quick_login .password_forgoten {
+    padding-right: 0px;
+    padding-top: 0px;
+    text-align: left;
+}
+
+#quick_login .password_forgoten a {
+    font-size: 10px;
+    color: #fff;
+    padding: 0px !important;
+    line-height: 20px !important;
+}
+
+#quick_login .register {
+    padding-right: 10px;
+    padding-top: 5px;
+    text-align: left;
+}
+
+#quick_login .register a {
+    font-size: 10px;
+    color: #fff;
+    padding: 0px !important;
+    line-height: 20px !important;
+}
+
+#quick_login .submit {
+    margin: -20px 0 0 0px;
+    position: absolute;
+    right: 15px;
+}
+
+#quick_login .links_left {
+    float: left;
+    margin-right: 130px;
+    width: 170px;
+}
+#quick_login .links_right {
+
+    position: absolute;
+    right: 0;
+}
+#quick_login .full_name {
+    color: #FFFFFF;
+    font-weight: bold;
+    padding: 3px 3px 3px 6px;
+}
+#quick_login .big_gravatar {
+    padding: 4px 0px 0px 6px;
+}
+#quick_login .notifications {
+    padding: 2px 0px 0px 6px;
+    color: #FFFFFF;
+    font-weight: bold;
+    line-height: 10px !important;
+}
+#quick_login .notifications a,
+#quick_login .unread a {
+    color: #FFFFFF;
+    display: block;
+    padding: 0px !important;
+}
+#quick_login .notifications a:hover,
+#quick_login .unread a:hover {
+    background-color: inherit !important;
+}
+#quick_login .email, #quick_login .unread {
+    color: #FFFFFF;
+    padding: 3px 3px 3px 6px;
+}
+#quick_login .links .logout {
+}
+
+#quick_login div.form div.fields {
+    padding-top: 2px;
+    padding-left: 10px;
+}
+
+#quick_login div.form div.fields div.field {
+    padding: 5px;
+}
+
+#quick_login div.form div.fields div.field div.label label {
+    color: #fff;
+    padding-bottom: 3px;
+}
+
+#quick_login div.form div.fields div.field div.input input {
+    width: 236px;
+    background: #FFF;
+    border-top: 1px solid #b3b3b3;
+    border-left: 1px solid #b3b3b3;
+    border-right: 1px solid #eaeaea;
+    border-bottom: 1px solid #eaeaea;
+    color: #000;
+    font-size: 11px;
+    margin: 0;
+    padding: 5px 7px 4px;
+}
+
+#quick_login div.form div.fields div.buttons {
+    clear: both;
+    overflow: hidden;
+    text-align: right;
+    margin: 0;
+    padding: 5px 14px 0px 5px;
+}
+
+#quick_login div.form div.links {
+    clear: both;
+    overflow: hidden;
+    margin: 10px 0 0;
+    padding: 0 0 2px;
+}
+
+#quick_login ol.links {
+    display: block;
+    font-weight: bold;
+    list-style: none outside none;
+    text-align: right;
+}
+#quick_login ol.links li {
+    line-height: 27px;
+    margin: 0;
+    padding: 0;
+    color: #fff;
+    display: block;
+    float: none !important;
+}
+
+#quick_login ol.links li a {
+    color: #fff;
+    display: block;
+    padding: 2px;
+}
+#quick_login ol.links li a:HOVER {
+    background-color: inherit !important;
+}
+
+#register div.title {
+    clear: both;
+    overflow: hidden;
+    position: relative;
+    background-color: #003B76;
+    background-repeat: repeat-x;
+    background-image: -khtml-gradient(linear, left top, left bottom, from(#003B76), to(#00376E) );
+    background-image: -moz-linear-gradient(top, #003b76, #00376e);
+    background-image: -ms-linear-gradient(top, #003b76, #00376e);
+    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #003b76), color-stop(100%, #00376e) );
+    background-image: -webkit-linear-gradient(top, #003b76, #00376e);
+    background-image: -o-linear-gradient(top, #003b76, #00376e);
+    background-image: linear-gradient(to bottom, #003b76, #00376e);
+    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#003b76',
+        endColorstr='#00376e', GradientType=0 );
+    margin: 0 auto;
+    padding: 0;
+}
+
+#register div.inner {
+    background: #FFF;
+    border-top: none;
+    border-bottom: none;
+    margin: 0 auto;
+    padding: 20px;
+}
+
+#register div.form div.fields div.field div.label {
+    width: 135px;
+    float: left;
+    text-align: right;
+    margin: 2px 10px 0 0;
+    padding: 5px 0 0 5px;
+}
+
+#register div.form div.fields div.field div.input input {
+    width: 300px;
+    background: #FFF;
+    border-top: 1px solid #b3b3b3;
+    border-left: 1px solid #b3b3b3;
+    border-right: 1px solid #eaeaea;
+    border-bottom: 1px solid #eaeaea;
+    color: #000;
+    font-size: 11px;
+    margin: 0;
+    padding: 7px 7px 6px;
+}
+
+#register div.form div.fields div.buttons {
+    clear: both;
+    overflow: hidden;
+    border-top: 1px solid #DDD;
+    text-align: left;
+    margin: 0;
+    padding: 10px 0 0 150px;
+}
+
+#register div.form div.activation_msg {
+    padding-top: 4px;
+    padding-bottom: 4px;
+}
+
+#journal .journal_day {
+    font-size: 20px;
+    padding: 10px 0px;
+    border-bottom: 2px solid #DDD;
+    margin-left: 10px;
+    margin-right: 10px;
+}
+
+#journal .journal_container {
+    padding: 5px;
+    clear: both;
+    margin: 0px 5px 0px 10px;
+}
+
+#journal .journal_action_container {
+    padding-left: 38px;
+}
+
+#journal .journal_user {
+    color: #747474;
+    font-size: 14px;
+    font-weight: bold;
+    height: 30px;
+}
+
+#journal .journal_user.deleted {
+    color: #747474;
+    font-size: 14px;
+    font-weight: normal;
+    height: 30px;
+    font-style: italic;
+}
+
+
+#journal .journal_icon {
+    clear: both;
+    float: left;
+    padding-right: 4px;
+    padding-top: 3px;
+}
+
+#journal .journal_action {
+    padding-top: 4px;
+    min-height: 2px;
+    float: left
+}
+
+#journal .journal_action_params {
+    clear: left;
+    padding-left: 22px;
+}
+
+#journal .journal_repo {
+    float: left;
+    margin-left: 6px;
+    padding-top: 3px;
+}
+
+#journal .date {
+    clear: both;
+    color: #777777;
+    font-size: 11px;
+    padding-left: 22px;
+}
+
+#journal .journal_repo .journal_repo_name {
+    font-weight: bold;
+    font-size: 1.1em;
+}
+
+#journal .compare_view {
+    padding: 5px 0px 5px 0px;
+    width: 95px;
+}
+
+.journal_highlight {
+    font-weight: bold;
+    padding: 0 2px;
+    vertical-align: bottom;
+}
+
+.trending_language_tbl, .trending_language_tbl td {
+    border: 0 !important;
+    margin: 0 !important;
+    padding: 0 !important;
+}
+
+.trending_language_tbl, .trending_language_tbl tr {
+    border-spacing: 1px;
+}
+
+.trending_language {
+    background-color: #003367;
+    color: #FFF;
+    display: block;
+    min-width: 20px;
+    text-decoration: none;
+    height: 12px;
+    margin-bottom: 0px;
+    margin-left: 5px;
+    white-space: pre;
+    padding: 3px;
+}
+
+h3.files_location {
+    font-size: 1.8em;
+    font-weight: 700;
+    border-bottom: none !important;
+    margin: 10px 0 !important;
+}
+
+#files_data dl dt {
+    float: left;
+    width: 60px;
+    margin: 0 !important;
+    padding: 5px;
+}
+
+#files_data dl dd {
+    margin: 0 !important;
+    padding: 5px !important;
+}
+
+.file_history {
+    padding-top: 10px;
+    font-size: 16px;
+}
+.file_author {
+    float: left;
+}
+
+.file_author .item {
+    float: left;
+    padding: 5px;
+    color: #888;
+}
+
+.tablerow0 {
+    background-color: #F8F8F8;
+}
+
+.tablerow1 {
+    background-color: #FFFFFF;
+}
+
+.changeset_id {
+    color: #666666;
+    margin-right: -3px;
+}
+
+.changeset_hash {
+    color: #000000;
+}
+
+#changeset_content {
+    border-left: 1px solid #CCC;
+    border-right: 1px solid #CCC;
+    border-bottom: 1px solid #CCC;
+    padding: 5px;
+}
+
+#changeset_compare_view_content {
+    border: 1px solid #CCC;
+    padding: 5px;
+}
+
+#changeset_content .container {
+    min-height: 100px;
+    font-size: 1.2em;
+    overflow: hidden;
+}
+
+#changeset_compare_view_content .compare_view_commits {
+    width: auto !important;
+}
+
+#changeset_compare_view_content .compare_view_commits td {
+    padding: 0px 0px 0px 12px !important;
+}
+
+#changeset_content .container .right {
+    float: right;
+    width: 20%;
+    text-align: right;
+}
+
+#changeset_content .container .message {
+    white-space: pre-wrap;
+}
+#changeset_content .container .message a:hover {
+    text-decoration: none;
+}
+.cs_files .cur_cs {
+    margin: 10px 2px;
+    font-weight: bold;
+}
+
+.cs_files .node {
+    float: left;
+}
+
+.cs_files .changes {
+    float: right;
+    color: #003367;
+}
+
+.cs_files .changes .added {
+    background-color: #BBFFBB;
+    float: left;
+    text-align: center;
+    font-size: 9px;
+    padding: 2px 0px 2px 0px;
+}
+
+.cs_files .changes .deleted {
+    background-color: #FF8888;
+    float: left;
+    text-align: center;
+    font-size: 9px;
+    padding: 2px 0px 2px 0px;
+}
+/*new binary*/
+.cs_files .changes .bin1 {
+    background-color: #BBFFBB;
+    float: left;
+    text-align: center;
+    font-size: 9px;
+    padding: 2px 0px 2px 0px;
+}
+
+/*deleted binary*/
+.cs_files .changes .bin2 {
+    background-color: #FF8888;
+    float: left;
+    text-align: center;
+    font-size: 9px;
+    padding: 2px 0px 2px 0px;
+}
+
+/*mod binary*/
+.cs_files .changes .bin3 {
+    background-color: #DDDDDD;
+    float: left;
+    text-align: center;
+    font-size: 9px;
+    padding: 2px 0px 2px 0px;
+}
+
+/*rename file*/
+.cs_files .changes .bin4 {
+    background-color: #6D99FF;
+    float: left;
+    text-align: center;
+    font-size: 9px;
+    padding: 2px 0px 2px 0px;
+}
+
+
+.cs_files .cs_added, .cs_files .cs_A {
+    background: url("../images/icons/page_white_add.png") no-repeat scroll
+        3px;
+    height: 16px;
+    padding-left: 20px;
+    margin-top: 7px;
+    text-align: left;
+}
+
+.cs_files .cs_changed, .cs_files .cs_M {
+    background: url("../images/icons/page_white_edit.png") no-repeat scroll
+        3px;
+    height: 16px;
+    padding-left: 20px;
+    margin-top: 7px;
+    text-align: left;
+}
+
+.cs_files .cs_removed, .cs_files .cs_D {
+    background: url("../images/icons/page_white_delete.png") no-repeat
+        scroll 3px;
+    height: 16px;
+    padding-left: 20px;
+    margin-top: 7px;
+    text-align: left;
+}
+
+.table {
+    position: relative;
+}
+
+#graph {
+    position: relative;
+    overflow: hidden;
+}
+
+#graph_nodes {
+    position: absolute;
+}
+
+#graph_content,
+#graph .info_box,
+#graph .container_header {
+    margin-left: 100px;
+}
+
+#graph_content {
+    position: relative;
+}
+
+#graph .container_header {
+    padding: 10px;
+    height: 25px;
+}
+
+#graph_content #rev_range_container {
+    float: left;
+    margin: 0px 0px 0px 3px;
+}
+
+#graph_content #rev_range_clear {
+    float: left;
+    margin: 0px 0px 0px 3px;
+}
+
+#graph_content #changesets {
+    table-layout: fixed;
+    border-collapse: collapse;
+    border-left: none;
+    border-right: none;
+    border-color: #cdcdcd;
+}
+
+#graph_content #changesets td {
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+    height: 31px;
+    border-color: #cdcdcd;
+    text-align: left;
+}
+
+#graph_content .container .author {
+   width: 105px;
+}
+
+#graph_content .container .hash {
+    width: 100px;
+    font-size: 0.85em;
+}
+
+#graph_content #changesets .container .date {
+    width: 76px;
+    color: #666;
+    font-size: 10px;
+}
+
+#graph_content #changesets .container .right {
+    width: 120px;
+    padding-right: 0px;
+    overflow: visible;
+    position: relative;
+}
+
+#graph_content .container .mid {
+    padding: 0;
+}
+
+#graph_content .log-container {
+    position: relative;
+}
+
+#graph_content #changesets td.checkbox {
+    width: 20px;
+}
+
+#graph_content .container .changeset_range {
+    float: left;
+    margin: 6px 3px;
+}
+
+#graph_content .container .author img {
+    vertical-align: middle;
+}
+
+#graph_content .container .author .user {
+    color: #444444;
+}
+
+#graph_content .container .mid .message {
+    white-space: pre-wrap;
+    padding: 0;
+    overflow: hidden;
+    height: 1.1em;
+}
+
+#graph_content .container .extra-container {
+    display: block;
+    position: absolute;
+    top: -15px;
+    right: 0;
+    padding-left: 5px;
+    background: #FFFFFF;
+    height: 41px;
+}
+
+#graph_content .comments-container,
+#graph_content .logtags {
+    display: block;
+    float: left;
+    overflow: hidden;
+    padding: 0;
+    margin: 0;
+}
+
+#graph_content .comments-container {
+    margin: 0.8em 0;
+    margin-right: 0.5em;
+}
+
+#graph_content  .tagcontainer {
+    width: 80px;
+    position: relative;
+    float: right;
+    height: 100%;
+    top: 7px;
+    margin-left: 0.5em;
+}
+
+#graph_content .logtags {
+    min-width: 80px;
+    height: 1.1em;
+    position: absolute;
+    left: 0px;
+    width: auto;
+    top: 0px;
+}
+
+#graph_content .logtags.tags {
+    top: 14px;
+}
+
+#graph_content .logtags:hover {
+    overflow: visible;
+    position: absolute;
+    width: auto;
+    right: 0;
+    left: initial;
+}
+
+#graph_content .logtags .bookbook,
+#graph_content .logtags .tagtag {
+    float: left;
+    line-height: 1em;
+    margin-bottom: 1px;
+    margin-right: 1px;
+    padding: 1px 3px;
+    font-size: 10px;
+}
+
+#graph_content .container .mid .message a:hover {
+    text-decoration: none;
+}
+
+.revision-link {
+    color: #3F6F9F;
+    font-weight: bold !important;
+}
+
+.issue-tracker-link {
+    color: #3F6F9F;
+    font-weight: bold !important;
+}
+
+.changeset-status-container {
+    padding-right: 5px;
+    margin-top: 1px;
+    float: right;
+    height: 14px;
+}
+.code-header .changeset-status-container {
+    float: left;
+    padding: 2px 0px 0px 2px;
+}
+.changeset-status-container .changeset-status-lbl {
+    color: rgb(136, 136, 136);
+    float: left;
+    padding: 3px 4px 0px 0px
+}
+.code-header .changeset-status-container .changeset-status-lbl {
+    float: left;
+    padding: 0px 4px 0px 0px;
+}
+.changeset-status-container .changeset-status-ico {
+    float: left;
+}
+.code-header .changeset-status-container .changeset-status-ico, .container .changeset-status-ico {
+    float: left;
+}
+
+#graph_content .comments-cnt {
+    color: rgb(136, 136, 136);
+    padding: 5px 0;
+}
+
+#graph_content .comments-cnt a {
+    background-image: url('../images/icons/comments.png');
+    background-repeat: no-repeat;
+    background-position: 100% 50%;
+    padding: 5px 0;
+    padding-right: 20px;
+}
+
+.right .changes {
+    clear: both;
+}
+
+.right .changes .changed_total {
+    display: block;
+    float: right;
+    text-align: center;
+    min-width: 45px;
+    cursor: pointer;
+    color: #444444;
+    background: #FEA;
+    -webkit-border-radius: 0px 0px 0px 6px;
+    border-radius: 0px 0px 0px 6px;
+    padding: 1px;
+}
+
+.right .changes .added, .changed, .removed {
+    display: block;
+    padding: 1px;
+    color: #444444;
+    float: right;
+    text-align: center;
+    min-width: 15px;
+}
+
+.right .changes .added {
+    background: #CFC;
+}
+
+.right .changes .changed {
+    background: #FEA;
+}
+
+.right .changes .removed {
+    background: #FAA;
+}
+
+.right .merge {
+    padding: 1px 3px 1px 3px;
+    background-color: #fca062;
+    font-size: 10px;
+    color: #ffffff;
+    text-transform: uppercase;
+    white-space: nowrap;
+    -webkit-border-radius: 3px;
+    border-radius: 3px;
+    margin-right: 2px;
+}
+
+.right .parent {
+    color: #666666;
+    clear: both;
+}
+.right .logtags {
+    line-height: 2.2em;
+}
+.branchtag, .logtags .tagtag, .logtags .booktag {
+    margin: 0px 2px;
+}
+
+.branchtag,
+.tagtag,
+.bookbook,
+.spantag {
+    padding: 1px 3px 1px 3px;
+    font-size: 10px;
+    color: #336699;
+    white-space: nowrap;
+    -webkit-border-radius: 4px;
+    border-radius: 4px;
+    border: 1px solid #d9e8f8;
+    line-height: 1.5em;
+}
+
+#graph_content .branchtag,
+#graph_content .tagtag,
+#graph_content .bookbook {
+    margin: 1.1em 0;
+    margin-right: 0.5em;
+}
+
+.branchtag,
+.tagtag,
+.bookbook {
+    float: left;
+}
+
+.right .logtags .branchtag,
+.logtags .tagtag,
+.right .merge {
+    float: right;
+    line-height: 1em;
+    margin: 1px 1px !important;
+    display: block;
+}
+
+.bookbook {
+    border-color: #46A546;
+    color: #46A546;
+}
+
+.tagtag {
+    border-color: #62cffc;
+    color: #62cffc;
+}
+
+.logtags .branchtag a:hover,
+.logtags .branchtag a,
+.branchtag a,
+.branchtag a:hover {
+    text-decoration: none;
+    color: inherit;
+}
+.logtags .tagtag {
+    padding: 1px 3px 1px 3px;
+    background-color: #62cffc;
+    font-size: 10px;
+    color: #ffffff;
+    white-space: nowrap;
+    -webkit-border-radius: 3px;
+    border-radius: 3px;
+}
+
+.tagtag a,
+.tagtag a:hover,
+.logtags .tagtag a,
+.logtags .tagtag a:hover {
+    text-decoration: none;
+    color: inherit;
+}
+.logbooks .bookbook, .logbooks .bookbook, .logtags .bookbook, .logtags .bookbook {
+    padding: 1px 3px 1px 3px;
+    background-color: #46A546;
+    font-size: 10px;
+    color: #ffffff;
+    white-space: nowrap;
+    -webkit-border-radius: 3px;
+    border-radius: 3px;
+}
+.logbooks .bookbook, .logbooks .bookbook a, .right .logtags .bookbook, .logtags .bookbook a {
+    color: #ffffff;
+}
+
+.logbooks .bookbook, .logbooks .bookbook a:hover,
+.logtags .bookbook, .logtags .bookbook a:hover,
+.bookbook a,
+.bookbook a:hover {
+    text-decoration: none;
+    color: inherit;
+}
+div.browserblock {
+    overflow: hidden;
+    border: 1px solid #ccc;
+    background: #f8f8f8;
+    font-size: 100%;
+    line-height: 125%;
+    padding: 0;
+    -webkit-border-radius: 6px 6px 0px 0px;
+    border-radius: 6px 6px 0px 0px;
+}
+
+div.browserblock .browser-header {
+    background: #FFF;
+    padding: 10px 0px 15px 0px;
+    width: 100%;
+}
+
+div.browserblock .browser-nav {
+    float: left
+}
+
+div.browserblock .browser-branch {
+    float: left;
+}
+
+div.browserblock .browser-branch label {
+    color: #4A4A4A;
+    vertical-align: text-top;
+}
+
+div.browserblock .browser-header span {
+    margin-left: 5px;
+    font-weight: 700;
+}
+
+div.browserblock .browser-search {
+    clear: both;
+    padding: 8px 8px 0px 5px;
+    height: 20px;
+}
+
+div.browserblock #node_filter_box {
+}
+
+div.browserblock .search_activate {
+    float: left
+}
+
+div.browserblock .add_node {
+    float: left;
+    padding-left: 5px;
+}
+
+div.browserblock .search_activate a:hover, div.browserblock .add_node a:hover {
+    text-decoration: none !important;
+}
+
+div.browserblock .browser-body {
+    background: #EEE;
+    border-top: 1px solid #CCC;
+}
+
+table.code-browser {
+    border-collapse: collapse;
+    width: 100%;
+}
+
+table.code-browser tr {
+    margin: 3px;
+}
+
+table.code-browser thead th {
+    background-color: #EEE;
+    height: 20px;
+    font-size: 1.1em;
+    font-weight: 700;
+    text-align: left;
+    padding-left: 10px;
+}
+
+table.code-browser tbody td {
+    padding-left: 10px;
+    height: 20px;
+}
+
+table.code-browser .browser-file {
+    background: url("../images/icons/document_16.png") no-repeat scroll 3px;
+    height: 16px;
+    padding-left: 20px;
+    text-align: left;
+}
+.diffblock .changeset_header {
+    height: 16px;
+}
+.diffblock .changeset_file {
+    background: url("../images/icons/file.png") no-repeat scroll 3px;
+    text-align: left;
+    float: left;
+    padding: 2px 0px 2px 22px;
+}
+.diffblock .diff-menu-wrapper {
+    float: left;
+}
+
+.diffblock .diff-menu {
+    position: absolute;
+    background: none repeat scroll 0 0 #FFFFFF;
+    border-color: #003367 #666666 #666666;
+    border-right: 1px solid #666666;
+    border-style: solid solid solid;
+    border-width: 1px;
+    box-shadow: 2px 8px 4px rgba(0, 0, 0, 0.2);
+    margin-top: 5px;
+    margin-left: 1px;
+
+}
+.diffblock .diff-actions {
+    padding: 2px 0px 0px 2px;
+    float: left;
+}
+.diffblock  .diff-menu ul li {
+    padding: 0px 0px 0px 0px !important;
+}
+.diffblock  .diff-menu ul li a {
+    display: block;
+    padding: 3px 8px 3px 8px !important;
+}
+.diffblock  .diff-menu ul li a:hover {
+    text-decoration: none;
+    background-color: #EEEEEE;
+}
+table.code-browser .browser-dir {
+    background: url("../images/icons/folder_16.png") no-repeat scroll 3px;
+    height: 16px;
+    padding-left: 20px;
+    text-align: left;
+}
+
+table.code-browser .submodule-dir {
+    background: url("../images/icons/disconnect.png") no-repeat scroll 3px;
+    height: 16px;
+    padding-left: 20px;
+    text-align: left;
+}
+
+
+.box .search {
+    clear: both;
+    overflow: hidden;
+    margin: 0;
+    padding: 0 20px 10px;
+}
+
+.box .search div.search_path {
+    background: none repeat scroll 0 0 #EEE;
+    border: 1px solid #CCC;
+    color: blue;
+    margin-bottom: 10px;
+    padding: 10px 0;
+}
+
+.box .search div.search_path div.link {
+    font-weight: 700;
+    margin-left: 25px;
+}
+
+.box .search div.search_path div.link a {
+    color: #003367;
+    cursor: pointer;
+    text-decoration: none;
+}
+
+#path_unlock {
+    color: red;
+    font-size: 1.2em;
+    padding-left: 4px;
+}
+
+.info_box span {
+    margin-left: 3px;
+    margin-right: 3px;
+}
+
+.info_box .rev {
+    color: #003367;
+    font-size: 1.6em;
+    font-weight: bold;
+    vertical-align: sub;
+}
+
+.info_box input#at_rev, .info_box input#size {
+    background: #FFF;
+    border-top: 1px solid #b3b3b3;
+    border-left: 1px solid #b3b3b3;
+    border-right: 1px solid #eaeaea;
+    border-bottom: 1px solid #eaeaea;
+    color: #000;
+    font-size: 12px;
+    margin: 0;
+    padding: 1px 5px 1px;
+}
+
+.info_box input#view {
+    text-align: center;
+    padding: 4px 3px 2px 2px;
+}
+
+.yui-overlay, .yui-panel-container {
+    visibility: hidden;
+    position: absolute;
+    z-index: 2;
+}
+
+#tip-box {
+    position: absolute;
+
+    background-color: #FFF;
+    border: 2px solid #003367;
+    font: 100% sans-serif;
+    width: auto;
+    opacity: 1;
+    padding: 8px;
+
+    white-space: pre-wrap;
+    -webkit-border-radius: 8px 8px 8px 8px;
+    -khtml-border-radius: 8px 8px 8px 8px;
+    border-radius: 8px 8px 8px 8px;
+    box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
+    -webkit-box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
+}
+
+.hl-tip-box {
+    visibility: hidden;
+    position: absolute;
+    color: #666;
+    background-color: #FFF;
+    border: 2px solid #003367;
+    font: 100% sans-serif;
+    width: auto;
+    opacity: 1;
+    padding: 8px;
+    white-space: pre-wrap;
+    -webkit-border-radius: 8px 8px 8px 8px;
+    -khtml-border-radius: 8px 8px 8px 8px;
+    border-radius: 8px 8px 8px 8px;
+    box-shadow: 0 2px 2px rgba(0, 0, 0, 0.6);
+}
+
+
+.mentions-container {
+    width: 90% !important;
+}
+.mentions-container .yui-ac-content {
+    width: 100% !important;
+}
+
+.ac {
+    vertical-align: top;
+}
+
+.ac .yui-ac {
+    position: inherit;
+    font-size: 100%;
+}
+
+.ac .perm_ac {
+    width: 20em;
+}
+
+.ac .yui-ac-input {
+    width: 100%;
+}
+
+.ac .yui-ac-container {
+    position: absolute;
+    top: 1.6em;
+    width: auto;
+}
+
+.ac .yui-ac-content {
+    position: absolute;
+    border: 1px solid gray;
+    background: #fff;
+    z-index: 9050;
+}
+
+.ac .yui-ac-shadow {
+    position: absolute;
+    width: 100%;
+    background: #000;
+    opacity: .10;
+    filter: alpha(opacity = 10);
+    z-index: 9049;
+    margin: .3em;
+}
+
+.ac .yui-ac-content ul {
+    width: 100%;
+    margin: 0;
+    padding: 0;
+    z-index: 9050;
+}
+
+.ac .yui-ac-content li {
+    cursor: default;
+    white-space: nowrap;
+    margin: 0;
+    padding: 2px 5px;
+    height: 18px;
+    z-index: 9050;
+    display: block;
+    width: auto !important;
+}
+
+.ac .yui-ac-content li .ac-container-wrap {
+    width: auto;
+}
+
+.ac .yui-ac-content li.yui-ac-prehighlight {
+    background: #B3D4FF;
+    z-index: 9050;
+}
+
+.ac .yui-ac-content li.yui-ac-highlight {
+    background: #556CB5;
+    color: #FFF;
+    z-index: 9050;
+}
+.ac .yui-ac-bd {
+    z-index: 9050;
+}
+
+.reposize {
+    background: url("../images/icons/server.png") no-repeat scroll 3px;
+    height: 16px;
+    width: 20px;
+    cursor: pointer;
+    display: block;
+    float: right;
+    margin-top: 2px;
+}
+
+#repo_size {
+    display: block;
+    margin-top: 4px;
+    color: #666;
+    float: right;
+}
+
+.locking_locked {
+    background: #FFF url("../images/icons/block_16.png") no-repeat scroll 3px;
+    height: 16px;
+    width: 20px;
+    cursor: pointer;
+    display: block;
+    float: right;
+    margin-top: 2px;
+}
+
+.locking_unlocked {
+    background: #FFF url("../images/icons/accept.png") no-repeat scroll 3px;
+    height: 16px;
+    width: 20px;
+    cursor: pointer;
+    display: block;
+    float: right;
+    margin-top: 2px;
+}
+
+.currently_following {
+    padding-left: 10px;
+    padding-bottom: 5px;
+}
+
+.add_icon {
+    background: url("../images/icons/add.png") no-repeat scroll 3px;
+    padding-left: 20px;
+    padding-top: 0px;
+    text-align: left;
+}
+
+.accept_icon {
+    background: url("../images/icons/accept.png") no-repeat scroll 3px;
+    padding-left: 20px;
+    padding-top: 0px;
+    text-align: left;
+}
+
+.edit_icon {
+    background: url("../images/icons/application_form_edit.png") no-repeat scroll 3px;
+    padding-left: 20px;
+    padding-top: 0px;
+    text-align: left;
+}
+
+.delete_icon {
+    background: url("../images/icons/delete.png") no-repeat scroll 3px;
+    padding-left: 20px;
+    padding-top: 0px;
+    text-align: left;
+}
+
+.refresh_icon {
+    background: url("../images/icons/arrow_refresh.png") no-repeat scroll
+        3px;
+    padding-left: 20px;
+    padding-top: 0px;
+    text-align: left;
+}
+
+.pull_icon {
+    background: url("../images/icons/connect.png") no-repeat scroll 3px;
+    padding-left: 20px;
+    padding-top: 0px;
+    text-align: left;
+}
+
+.rss_icon {
+    background: url("../images/icons/rss_16.png") no-repeat scroll 3px;
+    padding-left: 20px;
+    padding-top: 4px;
+    text-align: left;
+    font-size: 8px
+}
+
+.atom_icon {
+    background: url("../images/icons/rss_16.png") no-repeat scroll 3px;
+    padding-left: 20px;
+    padding-top: 4px;
+    text-align: left;
+    font-size: 8px
+}
+
+.archive_icon {
+    background: url("../images/icons/compress.png") no-repeat scroll 3px;
+    padding-left: 20px;
+    text-align: left;
+    padding-top: 1px;
+}
+
+.start_following_icon {
+    background: url("../images/icons/heart_add.png") no-repeat scroll 3px;
+    padding-left: 20px;
+    text-align: left;
+    padding-top: 0px;
+}
+
+.stop_following_icon {
+    background: url("../images/icons/heart_delete.png") no-repeat scroll 3px;
+    padding-left: 20px;
+    text-align: left;
+    padding-top: 0px;
+}
+
+.action_button {
+    border: 0;
+    display: inline;
+}
+
+.action_button:hover {
+    border: 0;
+    text-decoration: underline;
+    cursor: pointer;
+}
+
+#switch_repos {
+    position: absolute;
+    height: 25px;
+    z-index: 1;
+}
+
+#switch_repos select {
+    min-width: 150px;
+    max-height: 250px;
+    z-index: 1;
+}
+
+.breadcrumbs {
+    border: medium none;
+    color: #FFF;
+    float: left;
+    font-weight: 700;
+    font-size: 14px;
+    margin: 0;
+    padding: 11px 0 11px 10px;
+}
+
+.breadcrumbs .hash {
+    text-transform: none;
+    color: #fff;
+}
+
+.breadcrumbs a {
+    color: #FFF;
+}
+
+.flash_msg {
+}
+
+.flash_msg ul {
+}
+
+.error_red {
+    color: red;
+}
+
+.error_msg {
+    background-color: #c43c35;
+    background-repeat: repeat-x;
+    background-image: -khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35) );
+    background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
+    background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35);
+    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35) );
+    background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
+    background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
+    background-image: linear-gradient(to bottom, #ee5f5b, #c43c35);
+    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b',endColorstr='#c43c35', GradientType=0 );
+    border-color: #c43c35 #c43c35 #882a25;
+}
+
+.error_msg a {
+    text-decoration: underline;
+}
+
+.warning_msg {
+    color: #404040 !important;
+    background-color: #eedc94;
+    background-repeat: repeat-x;
+    background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1), to(#eedc94) );
+    background-image: -moz-linear-gradient(top, #fceec1, #eedc94);
+    background-image: -ms-linear-gradient(top, #fceec1, #eedc94);
+    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1), color-stop(100%, #eedc94) );
+    background-image: -webkit-linear-gradient(top, #fceec1, #eedc94);
+    background-image: -o-linear-gradient(top, #fceec1, #eedc94);
+    background-image: linear-gradient(to bottom, #fceec1, #eedc94);
+    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fceec1', endColorstr='#eedc94', GradientType=0 );
+    border-color: #eedc94 #eedc94 #e4c652;
+}
+
+.warning_msg a {
+    text-decoration: underline;
+}
+
+.success_msg {
+    background-color: #57a957;
+    background-repeat: repeat-x !important;
+    background-image: -khtml-gradient(linear, left top, left bottom, from(#62c462), to(#57a957) );
+    background-image: -moz-linear-gradient(top, #62c462, #57a957);
+    background-image: -ms-linear-gradient(top, #62c462, #57a957);
+    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462), color-stop(100%, #57a957) );
+    background-image: -webkit-linear-gradient(top, #62c462, #57a957);
+    background-image: -o-linear-gradient(top, #62c462, #57a957);
+    background-image: linear-gradient(to bottom, #62c462, #57a957);
+    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0 );
+    border-color: #57a957 #57a957 #3d773d;
+}
+
+.success_msg a {
+    text-decoration: underline;
+    color: #FFF !important;
+}
+
+.notice_msg {
+    background-color: #339bb9;
+    background-repeat: repeat-x;
+    background-image: -khtml-gradient(linear, left top, left bottom, from(#5bc0de), to(#339bb9) );
+    background-image: -moz-linear-gradient(top, #5bc0de, #339bb9);
+    background-image: -ms-linear-gradient(top, #5bc0de, #339bb9);
+    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #5bc0de), color-stop(100%, #339bb9) );
+    background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9);
+    background-image: -o-linear-gradient(top, #5bc0de, #339bb9);
+    background-image: linear-gradient(to bottom, #5bc0de, #339bb9);
+    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0 );
+    border-color: #339bb9 #339bb9 #22697d;
+}
+
+.notice_msg a {
+    text-decoration: underline;
+}
+
+.success_msg, .error_msg, .notice_msg, .warning_msg {
+    font-size: 12px;
+    font-weight: 700;
+    min-height: 14px;
+    line-height: 14px;
+    margin-bottom: 10px;
+    margin-top: 0;
+    display: block;
+    overflow: auto;
+    padding: 6px 10px 6px 10px;
+    border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+    position: relative;
+    color: #FFF;
+    border-width: 1px;
+    border-style: solid;
+    -webkit-border-radius: 4px;
+    border-radius: 4px;
+    -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
+    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
+}
+
+#msg_close {
+    background: transparent url("../icons/cross_grey_small.png") no-repeat scroll 0 0;
+    cursor: pointer;
+    height: 16px;
+    position: absolute;
+    right: 5px;
+    top: 5px;
+    width: 16px;
+}
+div#legend_data {
+    padding-left: 10px;
+}
+div#legend_container table {
+    border: none !important;
+}
+div#legend_container table, div#legend_choices table {
+    width: auto !important;
+}
+
+table#permissions_manage {
+    width: 0 !important;
+}
+
+table#permissions_manage span.private_repo_msg {
+    font-size: 0.8em;
+    opacity: 0.6;
+}
+
+table#permissions_manage td.private_repo_msg {
+    font-size: 0.8em;
+}
+
+table#permissions_manage tr#add_perm_input td {
+    vertical-align: middle;
+}
+
+div.gravatar {
+    background-color: #FFF;
+    float: left;
+    margin-right: 0.7em;
+    padding: 1px 1px 1px 1px;
+    line-height: 0;
+    -webkit-border-radius: 3px;
+    -khtml-border-radius: 3px;
+    border-radius: 3px;
+}
+
+div.gravatar img {
+    -webkit-border-radius: 2px;
+    -khtml-border-radius: 2px;
+    border-radius: 2px;
+}
+
+#header, #content, #footer {
+    min-width: 978px;
+}
+
+#content {
+    clear: both;
+    padding: 10px 10px 14px 10px;
+}
+
+#content.hover {
+    padding: 55px 10px 14px 10px !important;
+}
+
+#content div.box div.title div.search {
+    border-left: 1px solid #316293;
+}
+
+#content div.box div.title div.search div.input input {
+    border: 1px solid #316293;
+}
+
+.ui-btn {
+    color: #515151;
+    background-color: #DADADA;
+    background-repeat: repeat-x;
+    background-image: -khtml-gradient(linear, left top, left bottom, from(#F4F4F4),to(#DADADA) );
+    background-image: -moz-linear-gradient(top, #F4F4F4, #DADADA);
+    background-image: -ms-linear-gradient(top, #F4F4F4, #DADADA);
+    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #F4F4F4),color-stop(100%, #DADADA) );
+    background-image: -webkit-linear-gradient(top, #F4F4F4, #DADADA) );
+    background-image: -o-linear-gradient(top, #F4F4F4, #DADADA) );
+    background-image: linear-gradient(to bottom, #F4F4F4, #DADADA);
+    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#F4F4F4', endColorstr='#DADADA', GradientType=0);
+
+    border-top: 1px solid #DDD;
+    border-left: 1px solid #c6c6c6;
+    border-right: 1px solid #DDD;
+    border-bottom: 1px solid #c6c6c6;
+    color: #515151;
+    outline: none;
+    margin: 0px 3px 3px 0px;
+    -webkit-border-radius: 4px 4px 4px 4px !important;
+    -khtml-border-radius: 4px 4px 4px 4px !important;
+    border-radius: 4px 4px 4px 4px !important;
+    cursor: pointer !important;
+    padding: 3px 3px 3px 3px;
+    background-position: 0 -15px;
+
+}
+
+.ui-btn.disabled {
+    color: #999;
+}
+
+.ui-btn.xsmall {
+    padding: 1px 2px 1px 1px;
+}
+
+.ui-btn.large {
+    padding: 6px 12px;
+}
+
+.ui-btn.clone {
+    padding: 5px 2px 6px 1px;
+    margin: 0px 0px 3px -4px;
+    -webkit-border-radius: 0px 4px 4px 0px !important;
+    -khtml-border-radius: 0px 4px 4px 0px !important;
+    border-radius: 0px 4px 4px 0px !important;
+    width: 100px;
+    text-align: center;
+    display: inline-block;
+    position: relative;
+    top: -2px;
+}
+.ui-btn:focus {
+    outline: none;
+}
+.ui-btn:hover {
+    background-position: 0 -15px;
+    text-decoration: none;
+    color: #515151;
+    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25), 0 0 3px #FFFFFF !important;
+}
+
+.ui-btn.disabled:hover {
+    background-position: 0;
+    color: #999;
+    text-decoration: none;
+    box-shadow: none !important;
+}
+
+.ui-btn.red {
+    color: #fff;
+    background-color: #c43c35;
+    background-repeat: repeat-x;
+    background-image: -khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35));
+    background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
+    background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35);
+    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35));
+    background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
+    background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
+    background-image: linear-gradient(to bottom, #ee5f5b, #c43c35);
+    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);
+    border-color: #c43c35 #c43c35 #882a25;
+    border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+}
+
+
+.ui-btn.blue {
+    color: #fff;
+    background-color: #339bb9;
+    background-repeat: repeat-x;
+    background-image: -khtml-gradient(linear, left top, left bottom, from(#5bc0de), to(#339bb9));
+    background-image: -moz-linear-gradient(top, #5bc0de, #339bb9);
+    background-image: -ms-linear-gradient(top, #5bc0de, #339bb9);
+    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #5bc0de), color-stop(100%, #339bb9));
+    background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9);
+    background-image: -o-linear-gradient(top, #5bc0de, #339bb9);
+    background-image: linear-gradient(to bottom, #5bc0de, #339bb9);
+    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);
+    border-color: #339bb9 #339bb9 #22697d;
+    border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+}
+
+.ui-btn.green {
+    background-color: #57a957;
+    background-repeat: repeat-x;
+    background-image: -khtml-gradient(linear, left top, left bottom, from(#62c462), to(#57a957));
+    background-image: -moz-linear-gradient(top, #62c462, #57a957);
+    background-image: -ms-linear-gradient(top, #62c462, #57a957);
+    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462), color-stop(100%, #57a957));
+    background-image: -webkit-linear-gradient(top, #62c462, #57a957);
+    background-image: -o-linear-gradient(top, #62c462, #57a957);
+    background-image: linear-gradient(to bottom, #62c462, #57a957);
+    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);
+    border-color: #57a957 #57a957 #3d773d;
+    border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+}
+
+.ui-btn.blue.hidden {
+    display: none;
+}
+
+.ui-btn.active {
+    font-weight: bold;
+}
+
+ins, div.options a:hover {
+    text-decoration: none;
+}
+
+img,
+#header #header-inner #quick li a:hover span.normal,
+#content div.box div.form div.fields div.field div.textarea table td table td a,
+#clone_url,
+#clone_url_id
+{
+    border: none;
+}
+
+img.icon, .right .merge img {
+    vertical-align: bottom;
+}
+
+#header ul#logged-user, #content div.box div.title ul.links,
+#content div.box div.message div.dismiss,
+#content div.box div.traffic div.legend ul {
+    float: right;
+    margin: 0;
+    padding: 0;
+}
+
+#header #header-inner #home, #header #header-inner #logo,
+#content div.box ul.left, #content div.box ol.left,
+div#commit_history,
+div#legend_data, div#legend_container, div#legend_choices {
+    float: left;
+}
+
+#header #header-inner #quick li #quick_login,
+#header #header-inner #quick li:hover ul ul,
+#header #header-inner #quick li:hover ul ul ul,
+#header #header-inner #quick li:hover ul ul ul ul,
+#content #left #menu ul.closed, #content #left #menu li ul.collapsed, .yui-tt-shadow {
+    display: none;
+}
+
+#header #header-inner #quick li:hover #quick_login,
+#header #header-inner #quick li:hover ul, #header #header-inner #quick li li:hover ul, #header #header-inner #quick li li li:hover ul, #header #header-inner #quick li li li li:hover ul, #content #left #menu ul.opened, #content #left #menu li ul.expanded {
+    display: block;
+}
+
+#content div.graph {
+    padding: 0 10px 10px;
+}
+
+#content div.box div.title ul.links li a:hover,
+#content div.box div.title ul.links li.ui-tabs-selected a {
+
+    background: #6388ad; /* Old browsers */
+    background: -moz-linear-gradient(top, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0.1) 100%); /* FF3.6+ */
+    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,0.1)), color-stop(100%,rgba(255,255,255,0))); /* Chrome,Safari4+ */
+    background: -webkit-linear-gradient(top, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0.1) 100%); /* Chrome10+,Safari5.1+ */
+    background: -o-linear-gradient(top, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0.1) 100%); /* Opera 11.10+ */
+    background: -ms-linear-gradient(top, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0.1) 100%); /* IE10+ */
+    background: linear-gradient(to bottom, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0.1) 100%); /* W3C */
+    /*filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#88bfe8', endColorstr='#70b0e0',GradientType=0 ); /* IE6-9 */*/
+}
+
+#content div.box ol.lower-roman, #content div.box ol.upper-roman, #content div.box ol.lower-alpha, #content div.box ol.upper-alpha, #content div.box ol.decimal {
+    margin: 10px 24px 10px 44px;
+}
+
+#content div.box div.form, #content div.box div.table, #content div.box div.traffic {
+    position: relative;
+    clear: both;
+    margin: 0;
+    padding: 0 20px 10px;
+}
+
+#content div.box div.form div.fields, #login div.form, #login div.form div.fields, #register div.form, #register div.form div.fields {
+    clear: both;
+    overflow: hidden;
+    margin: 0;
+    padding: 0;
+}
+
+#content div.box div.form div.fields div.field div.label span, #login div.form div.fields div.field div.label span, #register div.form div.fields div.field div.label span {
+    height: 1%;
+    display: block;
+    color: #363636;
+    margin: 0;
+    padding: 2px 0 0;
+}
+
+#content div.box div.form div.fields div.field div.input input.error, #login div.form div.fields div.field div.input input.error, #register div.form div.fields div.field div.input input.error {
+    background: #FBE3E4;
+    border-top: 1px solid #e1b2b3;
+    border-left: 1px solid #e1b2b3;
+    border-right: 1px solid #FBC2C4;
+    border-bottom: 1px solid #FBC2C4;
+}
+
+#content div.box div.form div.fields div.field div.input input.success, #login div.form div.fields div.field div.input input.success, #register div.form div.fields div.field div.input input.success {
+    background: #E6EFC2;
+    border-top: 1px solid #cebb98;
+    border-left: 1px solid #cebb98;
+    border-right: 1px solid #c6d880;
+    border-bottom: 1px solid #c6d880;
+}
+
+#content div.box-left div.form div.fields div.field div.textarea, #content div.box-right div.form div.fields div.field div.textarea, #content div.box div.form div.fields div.field div.select select, #content div.box table th.selected input, #content div.box table td.selected input {
+    margin: 0;
+}
+
+#content div.box-left div.form div.fields div.field div.select, #content div.box-left div.form div.fields div.field div.checkboxes, #content div.box-left div.form div.fields div.field div.radios, #content div.box-right div.form div.fields div.field div.select, #content div.box-right div.form div.fields div.field div.checkboxes, #content div.box-right div.form div.fields div.field div.radios {
+    margin: 0 0 0 0px !important;
+    padding: 0;
+}
+
+#content div.box div.form div.fields div.field div.select, #content div.box div.form div.fields div.field div.checkboxes, #content div.box div.form div.fields div.field div.radios {
+    margin: 0 0 0 200px;
+    padding: 0;
+}
+
+#content div.box div.form div.fields div.field div.select a:hover, #content div.box div.form div.fields div.field div.select a.ui-selectmenu:hover, #content div.box div.action a:hover {
+    color: #000;
+    text-decoration: none;
+}
+
+#content div.box div.form div.fields div.field div.select a.ui-selectmenu-focus, #content div.box div.action a.ui-selectmenu-focus {
+    border: 1px solid #666;
+}
+
+#content div.box div.form div.fields div.field div.checkboxes div.checkbox, #content div.box div.form div.fields div.field div.radios div.radio {
+    clear: both;
+    overflow: hidden;
+    margin: 0;
+    padding: 8px 0 2px;
+}
+
+#content div.box div.form div.fields div.field div.checkboxes div.checkbox input, #content div.box div.form div.fields div.field div.radios div.radio input {
+    float: left;
+    margin: 0;
+}
+
+#content div.box div.form div.fields div.field div.checkboxes div.checkbox label, #content div.box div.form div.fields div.field div.radios div.radio label {
+    height: 1%;
+    display: block;
+    float: left;
+    margin: 2px 0 0 4px;
+}
+
+div.form div.fields div.field div.button input,
+#content div.box div.form div.fields div.buttons input
+div.form div.fields div.buttons input,
+#content div.box div.action div.button input {
+    font-size: 11px;
+    font-weight: 700;
+    margin: 0;
+}
+
+input.ui-button {
+    background: #e5e3e3 url("../images/button.png") repeat-x;
+    border-top: 1px solid #DDD;
+    border-left: 1px solid #c6c6c6;
+    border-right: 1px solid #DDD;
+    border-bottom: 1px solid #c6c6c6;
+    color: #515151 !important;
+    outline: none;
+    margin: 0;
+    padding: 6px 12px;
+    -webkit-border-radius: 4px 4px 4px 4px;
+    -khtml-border-radius: 4px 4px 4px 4px;
+    border-radius: 4px 4px 4px 4px;
+    box-shadow: 0 1px 0 #ececec;
+    cursor: pointer;
+}
+
+input.ui-button:hover {
+    background: #b4b4b4 url("../images/button_selected.png") repeat-x;
+    border-top: 1px solid #ccc;
+    border-left: 1px solid #bebebe;
+    border-right: 1px solid #b1b1b1;
+    border-bottom: 1px solid #afafaf;
+}
+
+div.form div.fields div.field div.highlight, #content div.box div.form div.fields div.buttons div.highlight {
+    display: inline;
+}
+
+#content div.box div.form div.fields div.buttons, div.form div.fields div.buttons {
+    margin: 10px 0 0 200px;
+    padding: 0;
+}
+
+#content div.box-left div.form div.fields div.buttons, #content div.box-right div.form div.fields div.buttons, div.box-left div.form div.fields div.buttons, div.box-right div.form div.fields div.buttons {
+    margin: 10px 0 0;
+}
+
+#content div.box table td.user, #content div.box table td.address {
+    width: 10%;
+    text-align: center;
+}
+
+#content div.box div.action div.button, #login div.form div.fields div.field div.input div.link, #register div.form div.fields div.field div.input div.link {
+    text-align: right;
+    margin: 6px 0 0;
+    padding: 0;
+}
+
+#content div.box div.action div.button input.ui-state-hover, #login div.form div.fields div.buttons input.ui-state-hover, #register div.form div.fields div.buttons input.ui-state-hover {
+    background: #b4b4b4 url("../images/button_selected.png") repeat-x;
+    border-top: 1px solid #ccc;
+    border-left: 1px solid #bebebe;
+    border-right: 1px solid #b1b1b1;
+    border-bottom: 1px solid #afafaf;
+    color: #515151;
+    margin: 0;
+    padding: 6px 12px;
+}
+
+#content div.box div.pagination div.results, #content div.box div.pagination-wh div.results {
+    text-align: left;
+    float: left;
+    margin: 0;
+    padding: 0;
+}
+
+#content div.box div.pagination div.results span, #content div.box div.pagination-wh div.results span {
+    height: 1%;
+    display: block;
+    float: left;
+    background: #ebebeb url("../images/pager.png") repeat-x;
+    border-top: 1px solid #dedede;
+    border-left: 1px solid #cfcfcf;
+    border-right: 1px solid #c4c4c4;
+    border-bottom: 1px solid #c4c4c4;
+    color: #4A4A4A;
+    font-weight: 700;
+    margin: 0;
+    padding: 6px 8px;
+}
+
+#content div.box div.pagination ul.pager li.disabled, #content div.box div.pagination-wh a.disabled {
+    color: #B4B4B4;
+    padding: 6px;
+}
+
+#login, #register {
+    width: 520px;
+    margin: 10% auto 0;
+    padding: 0;
+}
+
+#login div.color, #register div.color {
+    clear: both;
+    overflow: hidden;
+    background: #FFF;
+    margin: 10px auto 0;
+    padding: 3px 3px 3px 0;
+}
+
+#login div.color a, #register div.color a {
+    width: 20px;
+    height: 20px;
+    display: block;
+    float: left;
+    margin: 0 0 0 3px;
+    padding: 0;
+}
+
+#login div.title h5, #register div.title h5 {
+    color: #fff;
+    margin: 10px;
+    padding: 0;
+}
+
+#login div.form div.fields div.field, #register div.form div.fields div.field {
+    clear: both;
+    overflow: hidden;
+    margin: 0;
+    padding: 0 0 10px;
+}
+
+#login div.form div.fields div.field span.error-message, #register div.form div.fields div.field span.error-message {
+    height: 1%;
+    display: block;
+    color: red;
+    margin: 8px 0 0;
+    padding: 0;
+    max-width: 320px;
+}
+
+#login div.form div.fields div.field div.label label, #register div.form div.fields div.field div.label label {
+    color: #000;
+    font-weight: 700;
+}
+
+#login div.form div.fields div.field div.input, #register div.form div.fields div.field div.input {
+    float: left;
+    margin: 0;
+    padding: 0;
+}
+
+#login div.form div.fields div.field div.input input.large {
+    width: 250px;
+}
+
+#login div.form div.fields div.field div.checkbox, #register div.form div.fields div.field div.checkbox {
+    margin: 0 0 0 184px;
+    padding: 0;
+}
+
+#login div.form div.fields div.field div.checkbox label, #register div.form div.fields div.field div.checkbox label {
+    color: #565656;
+    font-weight: 700;
+}
+
+#login div.form div.fields div.buttons input, #register div.form div.fields div.buttons input {
+    color: #000;
+    font-size: 1em;
+    font-weight: 700;
+    margin: 0;
+}
+
+#changeset_content .container .wrapper, #graph_content .container .wrapper {
+    width: 600px;
+}
+
+#changeset_content .container .date, .ac .match {
+    font-weight: 700;
+    padding-top: 5px;
+    padding-bottom: 5px;
+}
+
+div#legend_container table td, div#legend_choices table td {
+    border: none !important;
+    height: 20px !important;
+    padding: 0 !important;
+}
+
+.q_filter_box {
+    -webkit-box-shadow: rgba(0,0,0,0.07) 0 1px 2px inset;
+    -webkit-border-radius: 4px;
+    border-radius: 4px;
+    border: 0 none;
+    color: #AAAAAA;
+    margin-bottom: -4px;
+    margin-top: -4px;
+    padding-left: 3px;
+}
+
+#node_filter {
+    border: 0px solid #545454;
+    color: #AAAAAA;
+    padding-left: 3px;
+}
+
+
+.group_members_wrap {
+    min-height: 85px;
+    padding-left: 20px;
+}
+
+.group_members .group_member {
+    height: 30px;
+    padding: 0px 0px 0px 0px;
+}
+
+.reviewers_member {
+    height: 15px;
+    padding: 0px 0px 0px 10px;
+}
+
+.emails_wrap {
+    padding: 0px 20px;
+}
+
+.emails_wrap .email_entry {
+    height: 30px;
+    padding: 0px 0px 0px 10px;
+}
+.emails_wrap .email_entry .email {
+    float: left
+}
+.emails_wrap .email_entry .email_action {
+    float: left
+}
+
+.ips_wrap {
+    padding: 0px 20px;
+}
+
+.ips_wrap .ip_entry {
+    height: 30px;
+    padding: 0px 0px 0px 10px;
+}
+.ips_wrap .ip_entry .ip {
+    float: left
+}
+.ips_wrap .ip_entry .ip_action {
+    float: left
+}
+
+
+/*README STYLE*/
+
+div.readme {
+    padding: 0px;
+}
+
+div.readme h2 {
+    font-weight: normal;
+}
+
+div.readme .readme_box {
+    background-color: #fafafa;
+}
+
+div.readme .readme_box {
+    clear: both;
+    overflow: hidden;
+    margin: 0;
+    padding: 0 20px 10px;
+}
+
+div.readme .readme_box h1, div.readme .readme_box h2, div.readme .readme_box h3, div.readme .readme_box h4, div.readme .readme_box h5, div.readme .readme_box h6 {
+    border-bottom: 0 !important;
+    margin: 0 !important;
+    padding: 0 !important;
+    line-height: 1.5em !important;
+}
+
+
+div.readme .readme_box h1:first-child {
+    padding-top: .25em !important;
+}
+
+div.readme .readme_box h2, div.readme .readme_box h3 {
+    margin: 1em 0 !important;
+}
+
+div.readme .readme_box h2 {
+    margin-top: 1.5em !important;
+    border-top: 4px solid #e0e0e0 !important;
+    padding-top: .5em !important;
+}
+
+div.readme .readme_box p {
+    color: black !important;
+    margin: 1em 0 !important;
+    line-height: 1.5em !important;
+}
+
+div.readme .readme_box ul {
+    list-style: disc !important;
+    margin: 1em 0 1em 2em !important;
+}
+
+div.readme .readme_box ol {
+    list-style: decimal;
+    margin: 1em 0 1em 2em !important;
+}
+
+div.readme .readme_box pre, code {
+    font: 12px "Bitstream Vera Sans Mono","Courier",monospace;
+}
+
+div.readme .readme_box code {
+    font-size: 12px !important;
+    background-color: ghostWhite !important;
+    color: #444 !important;
+    padding: 0 .2em !important;
+    border: 1px solid #dedede !important;
+}
+
+div.readme .readme_box pre code {
+    padding: 0 !important;
+    font-size: 12px !important;
+    background-color: #eee !important;
+    border: none !important;
+}
+
+div.readme .readme_box pre {
+    margin: 1em 0;
+    font-size: 12px;
+    background-color: #eee;
+    border: 1px solid #ddd;
+    padding: 5px;
+    color: #444;
+    overflow: auto;
+    -webkit-box-shadow: rgba(0,0,0,0.07) 0 1px 2px inset;
+    -webkit-border-radius: 3px;
+    border-radius: 3px;
+}
+
+div.readme .readme_box table {
+    display: table;
+    border-collapse: separate;
+    border-spacing: 2px;
+    border-color: gray;
+    width: auto !important;
+}
+
+
+/** RST STYLE **/
+
+
+div.rst-block {
+    padding: 0px;
+}
+
+div.rst-block h2 {
+    font-weight: normal;
+}
+
+div.rst-block {
+    background-color: #fafafa;
+}
+
+div.rst-block {
+    clear: both;
+    overflow: hidden;
+    margin: 0;
+    padding: 0 20px 10px;
+}
+
+div.rst-block  h1, div.rst-block  h2, div.rst-block  h3, div.rst-block  h4, div.rst-block  h5, div.rst-block  h6 {
+    border-bottom: 0 !important;
+    margin: 0 !important;
+    padding: 0 !important;
+    line-height: 1.5em !important;
+}
+
+
+div.rst-block  h1:first-child {
+    padding-top: .25em !important;
+}
+
+div.rst-block  h2, div.rst-block  h3 {
+    margin: 1em 0 !important;
+}
+
+div.rst-block  h2 {
+    margin-top: 1.5em !important;
+    border-top: 4px solid #e0e0e0 !important;
+    padding-top: .5em !important;
+}
+
+div.rst-block  p {
+    color: black !important;
+    margin: 1em 0 !important;
+    line-height: 1.5em !important;
+}
+
+div.rst-block  ul {
+    list-style: disc !important;
+    margin: 1em 0 1em 2em !important;
+}
+
+div.rst-block  ol {
+    list-style: decimal;
+    margin: 1em 0 1em 2em !important;
+}
+
+div.rst-block  pre, code {
+    font: 12px "Bitstream Vera Sans Mono","Courier",monospace;
+}
+
+div.rst-block  code {
+    font-size: 12px !important;
+    background-color: ghostWhite !important;
+    color: #444 !important;
+    padding: 0 .2em !important;
+    border: 1px solid #dedede !important;
+}
+
+div.rst-block  pre code {
+    padding: 0 !important;
+    font-size: 12px !important;
+    background-color: #eee !important;
+    border: none !important;
+}
+
+div.rst-block  pre {
+    margin: 1em 0;
+    font-size: 12px;
+    background-color: #eee;
+    border: 1px solid #ddd;
+    padding: 5px;
+    color: #444;
+    overflow: auto;
+    -webkit-box-shadow: rgba(0,0,0,0.07) 0 1px 2px inset;
+    -webkit-border-radius: 3px;
+    border-radius: 3px;
+}
+
+
+/** comment main **/
+.comments {
+    padding: 10px 20px;
+}
+
+.comments .comment {
+    border: 1px solid #ddd;
+    margin-top: 10px;
+    -webkit-border-radius: 4px;
+    border-radius: 4px;
+}
+
+.comments .comment .meta {
+    background: #f8f8f8;
+    padding: 4px;
+    border-bottom: 1px solid #ddd;
+    height: 18px;
+}
+
+.comments .comment .meta img {
+    vertical-align: middle;
+}
+
+.comments .comment .meta .user {
+    font-weight: bold;
+    float: left;
+    padding: 4px 2px 2px 2px;
+}
+
+.comments .comment .meta .date {
+    float: left;
+    padding: 4px 4px 0px 4px;
+}
+
+.comments .comment .text {
+    background-color: #FAFAFA;
+}
+.comment .text div.rst-block p {
+    margin: 0.5em 0px !important;
+}
+
+.comments .comments-number {
+    padding: 0px 0px 10px 0px;
+    font-weight: bold;
+    color: #666;
+    font-size: 16px;
+}
+
+/** comment form **/
+
+.status-block {
+    min-height: 80px;
+    clear: both
+}
+
+.comment-form .clearfix {
+    background: #EEE;
+    -webkit-border-radius: 4px;
+    border-radius: 4px;
+    padding: 10px;
+}
+
+div.comment-form {
+    margin-top: 20px;
+}
+
+.comment-form strong {
+    display: block;
+    margin-bottom: 15px;
+}
+
+.comment-form textarea {
+    width: 100%;
+    height: 100px;
+    font-family: 'Monaco', 'Courier', 'Courier New', monospace;
+}
+
+form.comment-form {
+    margin-top: 10px;
+    margin-left: 10px;
+}
+
+.comment-form-submit {
+    margin-top: 5px;
+    margin-left: 525px;
+}
+
+.file-comments {
+    display: none;
+}
+
+.comment-form .comment {
+    margin-left: 10px;
+}
+
+.comment-form .comment-help {
+    padding: 0px 0px 5px 0px;
+    color: #666;
+}
+
+.comment-form .comment-button {
+    padding-top: 5px;
+}
+
+.add-another-button {
+    margin-left: 10px;
+    margin-top: 10px;
+    margin-bottom: 10px;
+}
+
+.comment .buttons {
+    float: right;
+    padding: 2px 2px 0px 0px;
+}
+
+
+.show-inline-comments {
+    position: relative;
+    top: 1px
+}
+
+/** comment inline form **/
+.comment-inline-form .overlay {
+    display: none;
+}
+.comment-inline-form .overlay.submitting {
+    display: block;
+    background: none repeat scroll 0 0 white;
+    font-size: 16px;
+    opacity: 0.5;
+    position: absolute;
+    text-align: center;
+    vertical-align: top;
+
+}
+.comment-inline-form .overlay.submitting .overlay-text {
+    width: 100%;
+    margin-top: 5%;
+}
+
+.comment-inline-form .clearfix {
+    background: #EEE;
+    -webkit-border-radius: 4px;
+    border-radius: 4px;
+    padding: 5px;
+}
+
+div.comment-inline-form {
+    padding: 4px 0px 6px 0px;
+}
+
+.comment-inline-form strong {
+    display: block;
+    margin-bottom: 15px;
+}
+
+.comment-inline-form textarea {
+    width: 100%;
+    height: 100px;
+    font-family: 'Monaco', 'Courier', 'Courier New', monospace;
+}
+
+form.comment-inline-form {
+    margin-top: 10px;
+    margin-left: 10px;
+}
+
+.comment-inline-form-submit {
+    margin-top: 5px;
+    margin-left: 525px;
+}
+
+.file-comments {
+    display: none;
+}
+
+.comment-inline-form .comment {
+    margin-left: 10px;
+}
+
+.comment-inline-form .comment-help {
+    padding: 0px 0px 2px 0px;
+    color: #666666;
+    font-size: 10px;
+}
+
+.comment-inline-form .comment-button {
+    padding-top: 5px;
+}
+
+/** comment inline **/
+.inline-comments {
+    padding: 10px 20px;
+}
+
+.inline-comments div.rst-block {
+    clear: both;
+    overflow: hidden;
+    margin: 0;
+    padding: 0 20px 0px;
+}
+.inline-comments .comment {
+    border: 1px solid #ddd;
+    -webkit-border-radius: 4px;
+    border-radius: 4px;
+    margin: 3px 3px 5px 5px;
+    background-color: #FAFAFA;
+}
+.inline-comments .add-comment {
+    padding: 2px 4px 8px 5px;
+}
+
+.inline-comments .comment-wrapp {
+    padding: 1px;
+}
+.inline-comments .comment .meta {
+    background: #f8f8f8;
+    padding: 4px;
+    border-bottom: 1px solid #ddd;
+    height: 20px;
+}
+
+.inline-comments .comment .meta img {
+    vertical-align: middle;
+}
+
+.inline-comments .comment .meta .user {
+    font-weight: bold;
+    float: left;
+    padding: 3px;
+}
+
+.inline-comments .comment .meta .date {
+    float: left;
+    padding: 3px;
+}
+
+.inline-comments .comment .text {
+    background-color: #FAFAFA;
+}
+
+.inline-comments .comments-number {
+    padding: 0px 0px 10px 0px;
+    font-weight: bold;
+    color: #666;
+    font-size: 16px;
+}
+.inline-comments-button .add-comment {
+    margin: 2px 0px 8px 5px !important
+}
+
+.notification-paginator {
+    padding: 0px 0px 4px 16px;
+}
+
+#context-pages .pull-request span,
+.menu_link_notifications {
+    padding: 4px 4px !important;
+    text-align: center;
+    color: #888 !important;
+    background-color: #DEDEDE !important;
+    border-radius: 4px !important;
+    -webkit-border-radius: 4px !important;
+}
+
+#context-pages .forks span,
+.menu_link_notifications {
+    padding: 4px 4px !important;
+    text-align: center;
+    color: #888 !important;
+    background-color: #DEDEDE !important;
+    border-radius: 4px !important;
+    -webkit-border-radius: 4px !important;
+}
+
+
+.notification-header {
+    padding-top: 6px;
+}
+.notification-header .desc {
+    font-size: 16px;
+    height: 24px;
+    float: left
+}
+.notification-list .container.unread {
+    background: none repeat scroll 0 0 rgba(255, 255, 180, 0.6);
+}
+.notification-header .gravatar {
+    background: none repeat scroll 0 0 transparent;
+    padding: 0px 0px 0px 8px;
+}
+.notification-list .container .notification-header .desc {
+    font-weight: bold;
+    font-size: 17px;
+}
+.notification-table {
+    border: 1px solid #ccc;
+    -webkit-border-radius: 6px 6px 6px 6px;
+    border-radius: 6px 6px 6px 6px;
+    clear: both;
+    margin: 0px 20px 0px 20px;
+}
+.notification-header .delete-notifications {
+    float: right;
+    padding-top: 8px;
+    cursor: pointer;
+}
+.notification-header .read-notifications {
+    float: right;
+    padding-top: 8px;
+    cursor: pointer;
+}
+.notification-subject {
+    clear: both;
+    border-bottom: 1px solid #eee;
+    padding: 5px 0px 5px 38px;
+}
+
+.notification-body {
+    clear: both;
+    margin: 34px 2px 2px 8px
+}
+
+/****
+PULL REQUESTS
+*****/
+.pullrequests_section_head {
+    padding: 10px 10px 10px 0px;
+    font-size: 16px;
+    font-weight: bold;
+}
+
+h3.closed,
+#pullrequests_container li.closed a
+ {
+    color: #555;
+    background: #eee;
+}
+
+div.pr-title {
+    font-size: 1.6em;
+}
+
+div.pr {
+    border-bottom: 1px solid #DDD;
+    margin: 0px 20px;
+    padding: 10px 4px;
+}
+div.pr-closed {
+    background-color: rgba(245,245,245,0.5);
+}
+
+span.pr-closed-tag {
+    margin-bottom: 1px;
+    margin-right: 1px;
+    padding: 1px 3px;
+    font-size: 10px;
+    padding: 1px 3px 1px 3px;
+    font-size: 10px;
+    color: #336699;
+    white-space: nowrap;
+    -webkit-border-radius: 4px;
+    border-radius: 4px;
+    border: 1px solid #d9e8f8;
+    line-height: 1.5em;
+}
+
+/****
+  PERMS
+*****/
+#perms .perms_section_head {
+    padding: 10px 10px 10px 0px;
+    font-size: 16px;
+    font-weight: bold;
+}
+
+#perms .perm_tag {
+    padding: 1px 3px 1px 3px;
+    font-size: 10px;
+    font-weight: bold;
+    text-transform: uppercase;
+    white-space: nowrap;
+    -webkit-border-radius: 3px;
+    border-radius: 3px;
+}
+
+#perms .perm_tag.admin {
+    background-color: #B94A48;
+    color: #ffffff;
+}
+
+#perms .perm_tag.write {
+    background-color: #DB7525;
+    color: #ffffff;
+}
+
+#perms .perm_tag.read {
+    background-color: #468847;
+    color: #ffffff;
+}
+
+#perms .perm_tag.none {
+    background-color: #bfbfbf;
+    color: #ffffff;
+}
+
+.perm-gravatar {
+    vertical-align: middle;
+    padding: 2px;
+}
+.perm-gravatar-ac {
+    vertical-align: middle;
+    padding: 2px;
+    width: 14px;
+    height: 14px;
+}
+
+/*****************************************************************************
+                                  DIFFS CSS
+******************************************************************************/
+.diff-collapse {
+    text-align: center;
+    margin-bottom: -15px;
+}
+.diff-collapse-button {
+    cursor: pointer;
+    color: #666;
+    font-size: 16px;
+}
+.diff-container {
+
+}
+
+.diff-container.hidden {
+    display: none;
+    overflow: hidden;
+}
+
+
+div.diffblock {
+    overflow: auto;
+    padding: 0px;
+    border: 1px solid #ccc;
+    background: #f8f8f8;
+    font-size: 100%;
+    line-height: 100%;
+    /* new */
+    line-height: 125%;
+    -webkit-border-radius: 6px 6px 0px 0px;
+    border-radius: 6px 6px 0px 0px;
+}
+div.diffblock.margined {
+    margin: 0px 20px 0px 20px;
+}
+div.diffblock .code-header {
+    border-bottom: 1px solid #CCCCCC;
+    background: #EEEEEE;
+    padding: 10px 0 10px 0;
+    height: 14px;
+}
+
+div.diffblock .code-header.banner {
+    border-bottom: 1px solid #CCCCCC;
+    background: #EEEEEE;
+    height: 14px;
+    margin: 0px 95px 0px 95px;
+    padding: 3px 3px 11px 3px;
+}
+
+div.diffblock .code-header-title {
+    padding: 0px 0px 10px 5px !important;
+    margin: 0 !important;
+}
+div.diffblock .code-header .hash {
+    float: left;
+    padding: 2px 0 0 2px;
+}
+div.diffblock .code-header .date {
+    float: left;
+    text-transform: uppercase;
+    padding: 2px 0px 0px 2px;
+}
+div.diffblock .code-header div {
+    margin-left: 4px;
+    font-weight: bold;
+    font-size: 14px;
+}
+
+div.diffblock .parents {
+    float: left;
+    height: 26px;
+    width: 100px;
+    font-size: 10px;
+    font-weight: 400;
+    vertical-align: middle;
+    padding: 0px 2px 2px 2px;
+    background-color: #eeeeee;
+    border-bottom: 1px solid #CCCCCC;
+}
+
+div.diffblock .children {
+    float: right;
+    height: 26px;
+    width: 100px;
+    font-size: 10px;
+    font-weight: 400;
+    vertical-align: middle;
+    text-align: right;
+    padding: 0px 2px 2px 2px;
+    background-color: #eeeeee;
+    border-bottom: 1px solid #CCCCCC;
+}
+
+div.diffblock .code-body {
+    background: #FFFFFF;
+}
+div.diffblock pre.raw {
+    background: #FFFFFF;
+    color: #000000;
+}
+table.code-difftable {
+    border-collapse: collapse;
+    width: 99%;
+    border-radius: 0px !important;
+}
+table.code-difftable td {
+    padding: 0 !important;
+    background: none !important;
+    border: 0 !important;
+    vertical-align: baseline !important
+}
+table.code-difftable .context {
+    background: none repeat scroll 0 0 #DDE7EF;
+}
+table.code-difftable .add {
+    background: none repeat scroll 0 0 #DDFFDD;
+}
+table.code-difftable .add ins {
+    background: none repeat scroll 0 0 #AAFFAA;
+    text-decoration: none;
+}
+table.code-difftable .del {
+    background: none repeat scroll 0 0 #FFDDDD;
+}
+table.code-difftable .del del {
+    background: none repeat scroll 0 0 #FFAAAA;
+    text-decoration: none;
+}
+
+/** LINE NUMBERS **/
+table.code-difftable .lineno {
+
+    padding-left: 2px;
+    padding-right: 2px;
+    text-align: right;
+    width: 32px;
+    -moz-user-select: none;
+    -webkit-user-select: none;
+    border-right: 1px solid #CCC !important;
+    border-left: 0px solid #CCC !important;
+    border-top: 0px solid #CCC !important;
+    border-bottom: none !important;
+    vertical-align: middle !important;
+
+}
+table.code-difftable .lineno.new {
+}
+table.code-difftable .lineno.old {
+}
+table.code-difftable .lineno a {
+    color: #747474 !important;
+    font: 11px "Bitstream Vera Sans Mono",Monaco,"Courier New",Courier,monospace !important;
+    letter-spacing: -1px;
+    text-align: right;
+    padding-right: 2px;
+    cursor: pointer;
+    display: block;
+    width: 32px;
+}
+
+table.code-difftable .lineno-inline {
+    background: none repeat scroll 0 0 #FFF !important;
+    padding-left: 2px;
+    padding-right: 2px;
+    text-align: right;
+    width: 30px;
+    -moz-user-select: none;
+    -webkit-user-select: none;
+}
+
+/** CODE **/
+table.code-difftable .code {
+    display: block;
+    width: 100%;
+}
+table.code-difftable .code td {
+    margin: 0;
+    padding: 0;
+}
+table.code-difftable .code pre {
+    margin: 0;
+    padding: 0;
+    height: 17px;
+    line-height: 17px;
+}
+
+
+.diffblock.margined.comm .line .code:hover {
+    background-color: #FFFFCC !important;
+    cursor: pointer !important;
+    background-image: url("../images/icons/comment_add.png") !important;
+    background-repeat: no-repeat !important;
+    background-position: right !important;
+    background-position: 0% 50% !important;
+}
+.diffblock.margined.comm .line .code.no-comment:hover {
+    background-image: none !important;
+    cursor: auto !important;
+    background-color: inherit !important;
+}
+
+div.comment:target>.comment-wrapp {
+    border: solid 2px #ee0 !important;
+}
+
+.lineno:target a {
+    border: solid 2px #ee0 !important;
+    margin: -2px;
+}
Binary file rhodecode/public/images/icons/flag_status_approved.png has changed
Binary file rhodecode/public/images/icons/flag_status_not_reviewed.png has changed
Binary file rhodecode/public/images/icons/flag_status_rejected.png has changed
Binary file rhodecode/public/images/icons/flag_status_under_review.png has changed
--- a/rhodecode/public/js/graph.js	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/public/js/graph.js	Sun Apr 07 18:37:22 2013 +0200
@@ -26,7 +26,7 @@
 	
 	this.canvas = document.getElementById("graph_canvas");
 	
-	if (navigator.userAgent.indexOf('MSIE') >= 0) 
+	if (!document.createElement("canvas").getContext)
 		this.canvas = window.G_vmlCanvasManager.initElement(this.canvas);
 	this.ctx = this.canvas.getContext('2d');
 	this.ctx.strokeStyle = 'rgb(0, 0, 0)';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rhodecode/public/js/pyroutes_map.js	Sun Apr 07 18:37:22 2013 +0200
@@ -0,0 +1,11 @@
+//Format is key == name
+//    "mark_error_fixed": [ # key
+//        "/mark_error_fixed/%(error_id)s", #url template 
+//        [ 
+//            "error_id" # list of args
+//        ]
+//    ], 
+//
+var PROUTES_MAP = {
+
+}
\ No newline at end of file
--- a/rhodecode/public/js/rhodecode.js	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/public/js/rhodecode.js	Sun Apr 07 18:37:22 2013 +0200
@@ -86,19 +86,6 @@
     }
 }
 
-var setSelectValue = function(select, val){
-	var selection =  YUD.get(select);
-	
-    // select element
-    for(var i=0;i<selection.options.length;i++){
-        if (selection.options[i].innerHTML == val) {
-            selection.selectedIndex = i;
-            break;
-        }
-    }	
-}
-
-
 /**
  * SmartColorGenerator
  *
@@ -163,7 +150,188 @@
     }
 }
 
+/**
+ * PyRoutesJS
+ * 
+ * Usage pyroutes.url('mark_error_fixed',{"error_id":error_id}) // /mark_error_fixed/<error_id>
+ */
+var pyroutes = (function() {
+	// access global map defined in special file pyroutes
+    var matchlist = PROUTES_MAP;
+    var sprintf = (function() {
+        function get_type(variable) {
+            return Object.prototype.toString.call(variable).slice(8, -1).toLowerCase();
+        }
+        function str_repeat(input, multiplier) {
+            for (var output = []; multiplier > 0; output[--multiplier] = input) {/* do nothing */}
+            return output.join('');
+        }
 
+        var str_format = function() {
+            if (!str_format.cache.hasOwnProperty(arguments[0])) {
+                str_format.cache[arguments[0]] = str_format.parse(arguments[0]);
+            }
+            return str_format.format.call(null, str_format.cache[arguments[0]], arguments);
+        };
+
+        str_format.format = function(parse_tree, argv) {
+            var cursor = 1, tree_length = parse_tree.length, node_type = '', arg, output = [], i, k, match, pad, pad_character, pad_length;
+            for (i = 0; i < tree_length; i++) {
+                node_type = get_type(parse_tree[i]);
+                if (node_type === 'string') {
+                    output.push(parse_tree[i]);
+                }
+                else if (node_type === 'array') {
+                    match = parse_tree[i]; // convenience purposes only
+                    if (match[2]) { // keyword argument
+                        arg = argv[cursor];
+                        for (k = 0; k < match[2].length; k++) {
+                            if (!arg.hasOwnProperty(match[2][k])) {
+                                throw(sprintf('[sprintf] property "%s" does not exist', match[2][k]));
+                            }
+                            arg = arg[match[2][k]];
+                        }
+                    }
+                    else if (match[1]) { // positional argument (explicit)
+                        arg = argv[match[1]];
+                    }
+                    else { // positional argument (implicit)
+                        arg = argv[cursor++];
+                    }
+
+                    if (/[^s]/.test(match[8]) && (get_type(arg) != 'number')) {
+                        throw(sprintf('[sprintf] expecting number but found %s', get_type(arg)));
+                    }
+                    switch (match[8]) {
+                        case 'b': arg = arg.toString(2); break;
+                        case 'c': arg = String.fromCharCode(arg); break;
+                        case 'd': arg = parseInt(arg, 10); break;
+                        case 'e': arg = match[7] ? arg.toExponential(match[7]) : arg.toExponential(); break;
+                        case 'f': arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg); break;
+                        case 'o': arg = arg.toString(8); break;
+                        case 's': arg = ((arg = String(arg)) && match[7] ? arg.substring(0, match[7]) : arg); break;
+                        case 'u': arg = Math.abs(arg); break;
+                        case 'x': arg = arg.toString(16); break;
+                        case 'X': arg = arg.toString(16).toUpperCase(); break;
+                    }
+                    arg = (/[def]/.test(match[8]) && match[3] && arg >= 0 ? '+'+ arg : arg);
+                    pad_character = match[4] ? match[4] == '0' ? '0' : match[4].charAt(1) : ' ';
+                    pad_length = match[6] - String(arg).length;
+                    pad = match[6] ? str_repeat(pad_character, pad_length) : '';
+                    output.push(match[5] ? arg + pad : pad + arg);
+                }
+            }
+            return output.join('');
+        };
+
+        str_format.cache = {};
+
+        str_format.parse = function(fmt) {
+            var _fmt = fmt, match = [], parse_tree = [], arg_names = 0;
+            while (_fmt) {
+                if ((match = /^[^\x25]+/.exec(_fmt)) !== null) {
+                    parse_tree.push(match[0]);
+                }
+                else if ((match = /^\x25{2}/.exec(_fmt)) !== null) {
+                    parse_tree.push('%');
+                }
+                else if ((match = /^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(_fmt)) !== null) {
+                    if (match[2]) {
+                        arg_names |= 1;
+                        var field_list = [], replacement_field = match[2], field_match = [];
+                        if ((field_match = /^([a-z_][a-z_\d]*)/i.exec(replacement_field)) !== null) {
+                            field_list.push(field_match[1]);
+                            while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') {
+                                if ((field_match = /^\.([a-z_][a-z_\d]*)/i.exec(replacement_field)) !== null) {
+                                    field_list.push(field_match[1]);
+                                }
+                                else if ((field_match = /^\[(\d+)\]/.exec(replacement_field)) !== null) {
+                                    field_list.push(field_match[1]);
+                                }
+                                else {
+                                    throw('[sprintf] huh?');
+                                }
+                            }
+                        }
+                        else {
+                            throw('[sprintf] huh?');
+                        }
+                        match[2] = field_list;
+                    }
+                    else {
+                        arg_names |= 2;
+                    }
+                    if (arg_names === 3) {
+                        throw('[sprintf] mixing positional and named placeholders is not (yet) supported');
+                    }
+                    parse_tree.push(match);
+                }
+                else {
+                    throw('[sprintf] huh?');
+                }
+                _fmt = _fmt.substring(match[0].length);
+            }
+            return parse_tree;
+        };
+
+        return str_format;
+    })();
+
+    var vsprintf = function(fmt, argv) {
+        argv.unshift(fmt);
+        return sprintf.apply(null, argv);
+    };
+    return {
+        'url': function(route_name, params) {
+            var result = route_name;
+            if (typeof(params) != 'object'){
+            	params = {};
+            }
+            if (matchlist.hasOwnProperty(route_name)) {
+                var route = matchlist[route_name];
+                // param substitution
+                for(var i=0; i < route[1].length; i++) {
+
+                   if (!params.hasOwnProperty(route[1][i]))
+                        throw new Error(route[1][i] + ' missing in "' + route_name + '" route generation');
+                }
+                result = sprintf(route[0], params);
+                
+                var ret = [];
+                //extra params => GET
+                for(param in params){
+                	if (route[1].indexOf(param) == -1){
+                		ret.push(encodeURIComponent(param) + "=" + encodeURIComponent(params[param]));	
+                	}
+                }
+                var _parts = ret.join("&");
+                if(_parts){
+                	result = result +'?'+ _parts
+                }
+            }
+
+            return result;
+        },
+    	'register': function(route_name, route_tmpl, req_params) {
+    		if (typeof(req_params) != 'object') {
+    			req_params = [];
+    		}
+    		//fix escape
+    		route_tmpl = unescape(route_tmpl);
+    		keys = [];
+    		for (o in req_params){
+    			keys.push(req_params[o])
+    		}
+    		matchlist[route_name] = [
+    		    route_tmpl,
+    		    keys
+    		]
+    	},
+    	'_routes': function(){
+    		return matchlist;
+    	}
+    }
+})();
 
 
 
@@ -257,7 +425,9 @@
     var callback = {
         success: success,
         failure: function (o) {
-            alert("error");
+            if (o.status != 0) {
+                alert("error: " + o.statusText);
+            };
         },
     };
 
@@ -333,14 +503,15 @@
 			YUD.setAttribute(target,'id',ttid);
 			YUD.setAttribute(target, 'title',_TM['loading...']);
 			YAHOO.yuitip.main.set_listeners(target);
-			YAHOO.yuitip.main.show_yuitip(e, target);			
-			ajaxGET(LAZY_CS_URL.replace('__NAME__',repo_name).replace('__REV__', rid), success)
+			YAHOO.yuitip.main.show_yuitip(e, target);
+			var url = pyroutes.url('changeset_info', {"repo_name":repo_name, "revision": rid});
+			ajaxGET(url, success)
 		}
 	});
 };
 
 var onSuccessFollow = function(target){
-    var f = YUD.get(target.id);
+    var f = YUD.get(target);
     var f_cnt = YUD.get('current_followers_count');
 
     if(YUD.hasClass(f, 'follow')){
@@ -391,6 +562,21 @@
     return false;
 }
 
+var showRepoSize = function(target, repo_name, token){
+    var args= 'auth_token='+token;
+    
+    if(!YUD.hasClass(target, 'loaded')){
+        YUD.get(target).innerHTML = _TM['Loading ...'];
+        var url = pyroutes.url('repo_size', {"repo_name":repo_name});
+        YUC.asyncRequest('POST',url,{
+            success:function(o){
+            	YUD.get(target).innerHTML = JSON.parse(o.responseText);
+            	YUD.addClass(target, 'loaded');
+            }
+        },args);    	
+    }
+    return false;	
+}
 
 /**
  * TOOLTIP IMPL.
@@ -513,10 +699,6 @@
 	var q_filter_field = YUD.get(target);
 	var F = YAHOO.namespace(target);
 
-	YUE.on(q_filter_field,'click',function(){
-	   q_filter_field.value = '';
-	});
-
 	YUE.on(q_filter_field,'keyup',function(e){
 	    clearTimeout(F.filterTimeout); 
 	    F.filterTimeout = setTimeout(F.updateFilter,600); 
@@ -710,27 +892,9 @@
     ajaxPOST(url,postData,success);
 }
 
-var updateReviewers = function(reviewers_ids){
-	if (reviewers_ids === undefined){
-  	  var reviewers_ids = [];
-	  var ids = YUQ('#review_members input');
-	  for(var i=0; i<ids.length;i++){
-		  var id = ids[i].value
-		  reviewers_ids.push(id);
-	  }		
-	}
-	var url = AJAX_UPDATE_PULLREQUEST;
-	var postData = {'_method':'put',
-			        'reviewers_ids': reviewers_ids};
-	var success = function(o){
-		window.location.reload();
-	}
-	ajaxPOST(url,postData,success);
-}
-
 var createInlineAddButton = function(tr){
 
-	var label = TRANSLATION_MAP['add another comment'];
+	var label = TRANSLATION_MAP['Add another comment'];
 	
 	var html_el = document.createElement('div');
 	YUD.addClass(html_el, 'add-comment');
@@ -854,14 +1018,6 @@
     }	
 }
 
-var removeReviewer = function(reviewer_id){
-	var el = YUD.get('reviewer_{0}'.format(reviewer_id));
-	if (el.parentNode !== undefined){
-		el.parentNode.removeChild(el);
-	}
-	updateReviewers();
-}
-
 var fileBrowserListeners = function(current_url, node_list_url, url_base){
 	var current_url_branch = +"?branch=__BRANCH__";
 
@@ -934,7 +1090,7 @@
 	                    match.push('<tr><td><a class="browser-{0}" href="{1}">{2}</a></td><td colspan="5"></td></tr>'.format(t,new_url,n_hl));
 	                }
 	                if(match.length >= matches_max){
-	                    match.push('<tr><td>{0}</td><td colspan="5"></td></tr>'.format(_TM['search truncated']));
+	                    match.push('<tr><td>{0}</td><td colspan="5"></td></tr>'.format(_TM['Search truncated']));
 	                }
 	            }                       
 	        }
@@ -943,7 +1099,7 @@
 	            YUD.setStyle('tbody_filtered','display','');
 	            
 	            if (match.length==0){
-	              match.push('<tr><td>{0}</td><td colspan="5"></td></tr>'.format(_TM['no matching files']));
+	              match.push('<tr><td>{0}</td><td colspan="5"></td></tr>'.format(_TM['No matching files']));
 	            }                           
 	            
 	            YUD.get('tbody_filtered').innerHTML = match.join("");   
@@ -1130,7 +1286,7 @@
             return matches;
         };
 
-    // Define a custom search function for the DataSource of usersGroups
+    // Define a custom search function for the DataSource of userGroups
     var matchGroups = function (sQuery) {
             // Case insensitive matching
             var query = sQuery.toLowerCase();
@@ -1473,6 +1629,56 @@
     };
 }
 
+var addReviewMember = function(id,fname,lname,nname,gravatar_link){
+	var members  = YUD.get('review_members');
+	var tmpl = '<li id="reviewer_{2}">'+
+    '<div class="reviewers_member">'+
+      '<div class="gravatar"><img alt="gravatar" src="{0}"/> </div>'+
+      '<div style="float:left">{1}</div>'+
+      '<input type="hidden" value="{2}" name="review_members" />'+
+      '<span class="delete_icon action_button" onclick="removeReviewMember({2})"></span>'+
+    '</div>'+
+    '</li>'	;
+    var displayname = "{0} {1} ({2})".format(fname,lname,nname);
+	var element = tmpl.format(gravatar_link,displayname,id);
+	// check if we don't have this ID already in
+	var ids = [];
+	var _els = YUQ('#review_members li');
+	for (el in _els){
+		ids.push(_els[el].id)
+	}
+	if(ids.indexOf('reviewer_'+id) == -1){
+		//only add if it's not there
+		members.innerHTML += element;
+	}
+	    
+}
+
+var removeReviewMember = function(reviewer_id, repo_name, pull_request_id){
+	var el = YUD.get('reviewer_{0}'.format(reviewer_id));
+	if (el.parentNode !== undefined){
+		el.parentNode.removeChild(el);
+	}
+}
+
+var updateReviewers = function(reviewers_ids, repo_name, pull_request_id){
+	if (reviewers_ids === undefined){
+  	  var reviewers_ids = [];
+	  var ids = YUQ('#review_members input');
+	  for(var i=0; i<ids.length;i++){
+		  var id = ids[i].value
+		  reviewers_ids.push(id);
+	  }		
+	}
+	var url = pyroutes.url('pullrequest_update', {"repo_name":repo_name,
+												  "pull_request_id": pull_request_id});
+	var postData = {'_method':'put',
+			        'reviewers_ids': reviewers_ids};
+	var success = function(o){
+		window.location.reload();
+	}
+	ajaxPOST(url,postData,success);
+}
 
 var PullRequestAutoComplete = function (divid, cont, users_list, groups_list) {
     var myUsers = users_list;
@@ -1498,7 +1704,7 @@
             return matches;
         };
 
-    // Define a custom search function for the DataSource of usersGroups
+    // Define a custom search function for the DataSource of userGroups
     var matchGroups = function (sQuery) {
             // Case insensitive matching
             var query = sQuery.toLowerCase();
@@ -1605,26 +1811,12 @@
             var myAC = aArgs[0]; // reference back to the AC instance
             var elLI = aArgs[1]; // reference to the selected LI element
             var oData = aArgs[2]; // object literal of selected item's result data
-            var members  = YUD.get('review_members');
+            
             //fill the autocomplete with value
 
             if (oData.nname != undefined) {
-            	if (myAC.dataSource.cache.indexOf(oData.id) != -1){
-            		return
-            	}
-
-            	var tmpl = '<li id="reviewer_{2}">'+
-		                      '<div class="reviewers_member">'+
-		                        '<div class="gravatar"><img alt="gravatar" src="{0}"/> </div>'+
-		                        '<div style="float:left">{1}</div>'+
-		                        '<input type="hidden" value="{2}" name="review_members" />'+
-		                        '<span class="delete_icon action_button" onclick="removeReviewer({2})"></span>'+
-		                      '</div>'+
-		                   '</li>'
-
-		        var displayname = "{0} {1} ({2})".format(oData.fname,oData.lname,oData.nname);
-            	var element = tmpl.format(oData.gravatar_lnk,displayname,oData.id);
-            	members.innerHTML += element;
+            	addReviewMember(oData.id, oData.fname, oData.lname, oData.nname,
+            					oData.gravatar_lnk);
             	myAC.dataSource.cache.push(oData.id);
             	YUD.get('user').value = '' 
             }
@@ -1636,7 +1828,6 @@
     };
 }
 
-
 /**
  * QUICK REPO MENU
  */
@@ -1787,14 +1978,13 @@
     return compState;
 };
 
-var linkSort = function(a, b, desc, field) {
+var usernamelinkSort = function(a, b, desc, field) {
 	  var a_ = fromHTML(a.getData(field));
-	  var b_ = fromHTML(a.getData(field));
+	  var b_ = fromHTML(b.getData(field));
 	  
 	  // extract url text from string nodes 
 	  a_ = get_link(a_)
 	  b_ = get_link(b_)
-
 	  var comp = YAHOO.util.Sort.compare;
 	  var compState = comp(a_, b_, desc);
 	  return compState;
@@ -1849,7 +2039,7 @@
 	        av_cache.push(node);
 	}
 	
-	//fill available only with those not in choosen
+	//fill available only with those not in chosen
 	ac.options.length=0;
 	tmp_cache = new Array();
 	
@@ -1872,7 +2062,7 @@
 	
 	function prompts_action_callback(e){
 	
-	    var choosen = YUD.get(selected_container);
+	    var chosen = YUD.get(selected_container);
 	    var available = YUD.get(available_container);
 	
 	    //get checked and unchecked options from field
@@ -1915,30 +2105,30 @@
 	    // add action
 	    if (this.id=='add_element'){
 	        var c = get_checked(available);
-	        add_to(choosen,c[0]);
+	        add_to(chosen,c[0]);
 	        fill_with(available,c[1]);
 	    }
 	    // remove action
 	    if (this.id=='remove_element'){
-	        var c = get_checked(choosen);
+	        var c = get_checked(chosen);
 	        add_to(available,c[0]);
-	        fill_with(choosen,c[1]);
+	        fill_with(chosen,c[1]);
 	    }
 	    // add all elements
 	    if(this.id=='add_all_elements'){
 	        for(var i=0; node = available.options[i];i++){
-	                choosen.appendChild(new Option(node.text,
+	                chosen.appendChild(new Option(node.text,
 	                        node.value, false, false));
 	        }
 	        available.options.length = 0;
 	    }
 	    //remove all elements
 	    if(this.id=='remove_all_elements'){
-	        for(var i=0; node = choosen.options[i];i++){
+	        for(var i=0; node = chosen.options[i];i++){
 	            available.appendChild(new Option(node.text,
 	                    node.value, false, false));
 	        }
-	        choosen.options.length = 0;
+	        chosen.options.length = 0;
 	    }
 	
 	}
@@ -1948,10 +2138,33 @@
 	               prompts_action_callback)
 	if (form_id !== undefined) {
 		YUE.addListener(form_id,'submit',function(){
-		    var choosen = YUD.get(selected_container);
-		    for (var i = 0; i < choosen.options.length; i++) {
-		        choosen.options[i].selected = 'selected';
+		    var chosen = YUD.get(selected_container);
+		    for (var i = 0; i < chosen.options.length; i++) {
+		        chosen.options[i].selected = 'selected';
 		    }
 		});
 	}
 }
+
+
+// global hooks after DOM is loaded
+
+YUE.onDOMReady(function(){
+	YUE.on(YUQ('.diff-collapse-button'), 'click', function(e){
+		var button = e.currentTarget;
+		var t = YUD.get(button).getAttribute('target');
+	    console.log(t);
+		if(YUD.hasClass(t, 'hidden')){
+			YUD.removeClass(t, 'hidden');
+			YUD.get(button).innerHTML = "&uarr; {0} &uarr;".format(_TM['Collapse diff']);
+		}
+		else if(!YUD.hasClass(t, 'hidden')){
+			YUD.addClass(t, 'hidden');
+			YUD.get(button).innerHTML = "&darr; {0} &darr;".format(_TM['Expand diff']);
+		}
+	});
+	
+	
+	
+});
+
--- a/rhodecode/templates/admin/admin.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/admin/admin.html	Sun Apr 07 18:37:22 2013 +0200
@@ -2,7 +2,7 @@
 <%inherit file="/base/base.html"/>
 
 <%def name="title()">
-    ${_('Admin journal')} - ${c.rhodecode_name}
+    ${_('Admin journal')} &middot; ${c.rhodecode_name}
 </%def>
 
 <%def name="breadcrumbs_links()">
@@ -16,39 +16,39 @@
 </%def>
 
 <%def name="page_nav()">
-	${self.menu('admin')}
+    ${self.menu('admin')}
 </%def>
 <%def name="main()">
 <div class="box">
-	<!-- box / title -->
-	<div class="title">
-	    ${self.breadcrumbs()}
-	</div>
-	<!-- end box / title -->
-	<div class="table">
-	    <div id="user_log">
-	        ${c.log_data}
-	    </div>
-	</div>
+    <!-- box / title -->
+    <div class="title">
+        ${self.breadcrumbs()}
+    </div>
+    <!-- end box / title -->
+    <div class="table">
+        <div id="user_log">
+            ${c.log_data}
+        </div>
+    </div>
 </div>
 
 <script>
 YUE.on('j_filter','click',function(){
-	var jfilter = YUD.get('j_filter');
-	if(YUD.hasClass(jfilter, 'initial')){
-		jfilter.value = '';
-	}
+    var jfilter = YUD.get('j_filter');
+    if(YUD.hasClass(jfilter, 'initial')){
+        jfilter.value = '';
+    }
 });
 var fix_j_filter_width = function(len){
     YUD.setStyle(YUD.get('j_filter'),'width',Math.max(80, len*6.50)+'px');
 }
 YUE.on('j_filter','keyup',function(){
-	fix_j_filter_width(YUD.get('j_filter').value.length);
+    fix_j_filter_width(YUD.get('j_filter').value.length);
 });
 YUE.on('filter_form','submit',function(e){
-	YUE.preventDefault(e)
+    YUE.preventDefault(e)
     var val = YUD.get('j_filter').value;
-	window.location = "${url.current(filter='__FILTER__')}".replace('__FILTER__',val);
+    window.location = "${url.current(filter='__FILTER__')}".replace('__FILTER__',val);
 });
 fix_j_filter_width(YUD.get('j_filter').value.length);
 </script>
--- a/rhodecode/templates/admin/admin_log.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/admin/admin_log.html	Sun Apr 07 18:37:22 2013 +0200
@@ -1,40 +1,40 @@
 ## -*- coding: utf-8 -*-
 %if c.users_log:
 <table>
-	<tr>
-		<th class="left">${_('Username')}</th>
-		<th class="left">${_('Action')}</th>
-		<th class="left">${_('Repository')}</th>
-		<th class="left">${_('Date')}</th>
-		<th class="left">${_('From IP')}</th>
-	</tr>
+    <tr>
+        <th class="left">${_('Username')}</th>
+        <th class="left">${_('Action')}</th>
+        <th class="left">${_('Repository')}</th>
+        <th class="left">${_('Date')}</th>
+        <th class="left">${_('From IP')}</th>
+    </tr>
 
-	%for cnt,l in enumerate(c.users_log):
-	<tr class="parity${cnt%2}">
-		<td>
+    %for cnt,l in enumerate(c.users_log):
+    <tr class="parity${cnt%2}">
+        <td>
         %if l.user is not None:
           ${h.link_to(l.user.username,h.url('edit_user', id=l.user.user_id))}
         %else:
           ${l.username}
         %endif
         </td>
-		<td>${h.action_parser(l)[0]()}
-		  <div class="journal_action_params">
-            ${h.literal(h.action_parser(l)[1]())}
-          </div>
-		</td>
-		<td>
-		%if l.repository is not None:
-		  ${h.link_to(l.repository.repo_name,h.url('summary_home',repo_name=l.repository.repo_name))}
-		%else:
-		  ${l.repository_name}
-		%endif
-		</td>
+        <td>${h.action_parser(l)[0]()}
+            <div class="journal_action_params">
+                ${h.literal(h.action_parser(l)[1]())}
+            </div>
+        </td>
+        <td>
+            %if l.repository is not None:
+              ${h.link_to(l.repository.repo_name,h.url('summary_home',repo_name=l.repository.repo_name))}
+            %else:
+              ${l.repository_name}
+            %endif
+        </td>
 
-		<td>${h.fmt_date(l.action_date)}</td>
-		<td>${l.user_ip}</td>
-	</tr>
-	%endfor
+        <td>${h.fmt_date(l.action_date)}</td>
+        <td>${l.user_ip}</td>
+    </tr>
+    %endfor
 </table>
 
 <script type="text/javascript">
@@ -60,5 +60,5 @@
 ${c.users_log.pager('$link_previous ~2~ $link_next')}
 </div>
 %else:
-	${_('No actions yet')}
+    ${_('No actions yet')}
 %endif
--- a/rhodecode/templates/admin/defaults/defaults.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/admin/defaults/defaults.html	Sun Apr 07 18:37:22 2013 +0200
@@ -2,7 +2,7 @@
 <%inherit file="/base/base.html"/>
 
 <%def name="title()">
-    ${_('Repositories defaults')} - ${c.rhodecode_name}
+    ${_('Repositories defaults')} &middot; ${c.rhodecode_name}
 </%def>
 
 <%def name="breadcrumbs_links()">
@@ -12,7 +12,7 @@
 </%def>
 
 <%def name="page_nav()">
-	${self.menu('admin')}
+    ${self.menu('admin')}
 </%def>
 
 <%def name="main()">
--- a/rhodecode/templates/admin/ldap/ldap.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/admin/ldap/ldap.html	Sun Apr 07 18:37:22 2013 +0200
@@ -2,13 +2,13 @@
 <%inherit file="/base/base.html"/>
 
 <%def name="title()">
-    ${_('LDAP administration')} - ${c.rhodecode_name}
+    ${_('LDAP administration')} &middot; ${c.rhodecode_name}
 </%def>
 
 <%def name="breadcrumbs_links()">
     ${h.link_to(_('Admin'),h.url('admin_home'))}
     &raquo;
-    ${_('Ldap')}
+    ${_('LDAP')}
 </%def>
 
 <%def name="page_nav()">
@@ -25,7 +25,7 @@
     <div class="form">
         <div class="fields">
 
-	  <h3>${_('Connection settings')}</h3>
+            <h3>${_('Connection settings')}</h3>
             <div class="field">
                 <div class="label label-checkbox"><label for="ldap_active">${_('Enable LDAP')}</label></div>
                 <div class="checkboxes"><div class="checkbox">${h.checkbox('ldap_active',True,class_='small')}</div></div>
@@ -54,7 +54,7 @@
                 <div class="label"><label for="ldap_tls_reqcert">${_('Certificate Checks')}</label></div>
                 <div class="select">${h.select('ldap_tls_reqcert',c.tls_reqcert_cur,c.tls_reqcert_choices,class_='small')}</div>
             </div>
-	  <h3>${_('Search settings')}</h3>
+            <h3>${_('Search settings')}</h3>
             <div class="field">
                 <div class="label"><label for="ldap_base_dn">${_('Base DN')}</label></div>
                 <div class="input">${h.text('ldap_base_dn',class_='small')}</div>
@@ -67,7 +67,7 @@
                 <div class="label"><label for="ldap_search_scope">${_('LDAP Search Scope')}</label></div>
                 <div class="select">${h.select('ldap_search_scope',c.search_scope_cur,c.search_scope_choices,class_='small')}</div>
             </div>
-	  <h3>${_('Attribute mappings')}</h3>
+            <h3>${_('Attribute mappings')}</h3>
             <div class="field">
                 <div class="label"><label for="ldap_attr_login">${_('Login Attribute')}</label></div>
                 <div class="input">${h.text('ldap_attr_login',class_='small')}</div>
--- a/rhodecode/templates/admin/notifications/notifications.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/admin/notifications/notifications.html	Sun Apr 07 18:37:22 2013 +0200
@@ -2,7 +2,7 @@
 <%inherit file="/base/base.html"/>
 
 <%def name="title()">
-    ${_('My Notifications')} ${c.rhodecode_user.username} - ${c.rhodecode_name}
+    ${_('My Notifications')} ${c.rhodecode_user.username} &middot; ${c.rhodecode_name}
 </%def>
 
 <%def name="breadcrumbs_links()">
@@ -10,7 +10,7 @@
 </%def>
 
 <%def name="page_nav()">
-	${self.menu('admin')}
+    ${self.menu('admin')}
 </%def>
 
 <%def name="main()">
@@ -59,7 +59,7 @@
 
 var current_filter = "${c.current_filter}";
 if (YUD.get(current_filter)){
-	YUD.addClass(current_filter, 'active');
+    YUD.addClass(current_filter, 'active');
 }
 </script>
 </%def>
--- a/rhodecode/templates/admin/notifications/show_notification.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/admin/notifications/show_notification.html	Sun Apr 07 18:37:22 2013 +0200
@@ -2,7 +2,7 @@
 <%inherit file="/base/base.html"/>
 
 <%def name="title()">
-    ${_('Show notification')} ${c.rhodecode_user.username} - ${c.rhodecode_name}
+    ${_('Show notification')} ${c.rhodecode_user.username} &middot; ${c.rhodecode_name}
 </%def>
 
 <%def name="breadcrumbs_links()">
@@ -39,7 +39,12 @@
             <span id="${c.notification.notification_id}" class="delete-notification delete_icon action"></span>
           </div>
         </div>
-        <div class="notification-body">${h.rst_w_mentions(c.notification.body)}</div>
+        <div class="notification-body">
+        <div class="notification-subject">${h.literal(c.notification.subject)}</div>
+        %if c.notification.body:
+            ${h.rst_w_mentions(c.notification.body)}
+        %endif
+        </div>
       </div>
     </div>
 </div>
--- a/rhodecode/templates/admin/permissions/permissions.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/admin/permissions/permissions.html	Sun Apr 07 18:37:22 2013 +0200
@@ -2,7 +2,7 @@
 <%inherit file="/base/base.html"/>
 
 <%def name="title()">
-    ${_('Permissions administration')} - ${c.rhodecode_name}
+    ${_('Permissions administration')} &middot; ${c.rhodecode_name}
 </%def>
 
 <%def name="breadcrumbs_links()">
@@ -12,7 +12,7 @@
 </%def>
 
 <%def name="page_nav()">
-	${self.menu('admin')}
+    ${self.menu('admin')}
 </%def>
 
 <%def name="main()">
@@ -36,49 +36,49 @@
                     </div>
                 </div>
             </div>
-			<div class="field">
-				<div class="label">
-					<label for="default_repo_perm">${_('Repository')}:</label>
-				</div>
-				<div class="select">
-					${h.select('default_repo_perm','',c.repo_perms_choices)}
+            <div class="field">
+                <div class="label">
+                    <label for="default_repo_perm">${_('Repository')}:</label>
+                </div>
+                <div class="select">
+                    ${h.select('default_repo_perm','',c.repo_perms_choices)}
 
-	                ${h.checkbox('overwrite_default_repo','true')}
-	                <label for="overwrite_default_repo">
-	                <span class="tooltip"
-	                title="${h.tooltip(_('All default permissions on each repository will be reset to choosen permission, note that all custom default permission on repositories will be lost'))}">
-	                ${_('overwrite existing settings')}</span> </label>
-				</div>
-			</div>
-			<div class="field">
-				<div class="label">
-					<label for="default_group_perm">${_('Repository group')}:</label>
-				</div>
-				<div class="select">
-					${h.select('default_group_perm','',c.group_perms_choices)}
+                    ${h.checkbox('overwrite_default_repo','true')}
+                    <label for="overwrite_default_repo">
+                    <span class="tooltip"
+                    title="${h.tooltip(_('All default permissions on each repository will be reset to chosen permission, note that all custom default permission on repositories will be lost'))}">
+                    ${_('Overwrite existing settings')}</span> </label>
+                </div>
+            </div>
+            <div class="field">
+                <div class="label">
+                    <label for="default_group_perm">${_('Repository group')}:</label>
+                </div>
+                <div class="select">
+                    ${h.select('default_group_perm','',c.group_perms_choices)}
                     ${h.checkbox('overwrite_default_group','true')}
                     <label for="overwrite_default_group">
                     <span class="tooltip"
-                    title="${h.tooltip(_('All default permissions on each repository group will be reset to choosen permission, note that all custom default permission on repositories group will be lost'))}">
-                    ${_('overwrite existing settings')}</span> </label>
+                    title="${h.tooltip(_('All default permissions on each repository group will be reset to chosen permission, note that all custom default permission on repository groups will be lost'))}">
+                    ${_('Overwrite existing settings')}</span> </label>
 
-				</div>
-			</div>
-			<div class="field">
-		        <div class="label">
-		            <label for="default_register">${_('Registration')}:</label>
-		        </div>
-				<div class="select">
-					${h.select('default_register','',c.register_choices)}
-				</div>
-			</div>
+                </div>
+            </div>
+            <div class="field">
+                <div class="label">
+                    <label for="default_register">${_('Registration')}:</label>
+                </div>
+                <div class="select">
+                    ${h.select('default_register','',c.register_choices)}
+                </div>
+            </div>
              <div class="field">
                 <div class="label">
                     <label for="default_create">${_('Repository creation')}:</label>
                 </div>
-				<div class="select">
-					${h.select('default_create','',c.create_choices)}
-				</div>
+                <div class="select">
+                    ${h.select('default_create','',c.create_choices)}
+                </div>
              </div>
              <div class="field">
                 <div class="label">
@@ -88,10 +88,10 @@
                     ${h.select('default_fork','',c.fork_choices)}
                 </div>
              </div>
-	        <div class="buttons">
+            <div class="buttons">
               ${h.submit('save',_('Save'),class_="ui-btn large")}
               ${h.reset('reset',_('Reset'),class_="ui-btn large")}
-	        </div>
+            </div>
         </div>
     </div>
     ${h.end_form()}
@@ -104,63 +104,8 @@
     </div>
 
     ## permissions overview
-    <div id="perms" class="table">
-           %for section in sorted(c.perm_user.permissions.keys()):
-              <div class="perms_section_head">${section.replace("_"," ").capitalize()}</div>
-              %if not c.perm_user.permissions[section]:
-                  <span class="empty_data">${_('Nothing here yet')}</span>
-              %else:
-              <div id='tbl_list_wrap_${section}' class="yui-skin-sam">
-               <table id="tbl_list_${section}">
-                <thead>
-                    <tr>
-                    <th class="left">${_('Name')}</th>
-                    <th class="left">${_('Permission')}</th>
-                    <th class="left">${_('Edit Permission')}</th>
-                </thead>
-                <tbody>
-                %for k in c.perm_user.permissions[section]:
-                     <%
-                     if section != 'global':
-                         section_perm = c.perm_user.permissions[section].get(k)
-                         _perm = section_perm.split('.')[-1]
-                     else:
-                         _perm = section_perm = None
-                     %>
-                    <tr>
-                        <td>
-                            %if section == 'repositories':
-                                <a href="${h.url('summary_home',repo_name=k)}">${k}</a>
-                            %elif section == 'repositories_groups':
-                                <a href="${h.url('repos_group_home',group_name=k)}">${k}</a>
-                            %else:
-                                ${h.get_permission_name(k)}
-                            %endif
-                        </td>
-                        <td>
-                            %if section == 'global':
-                             ${h.bool2icon(k.split('.')[-1] != 'none')}
-                            %else:
-                             <span class="perm_tag ${_perm}">${section_perm}</span>
-                            %endif
-                        </td>
-                        <td>
-                            %if section == 'repositories':
-                                <a href="${h.url('edit_repo',repo_name=k,anchor='permissions_manage')}">${_('edit')}</a>
-                            %elif section == 'repositories_groups':
-                                <a href="${h.url('edit_repos_group',id=k,anchor='permissions_manage')}">${_('edit')}</a>
-                            %else:
-                                --
-                            %endif
-                        </td>
-                    </tr>
-                %endfor
-                </tbody>
-               </table>
-              </div>
-              %endif
-           %endfor
-    </div>
+    <%include file="/base/perms_summary.html"/>
+
 </div>
 <div class="box box-left" style="clear:left">
     <!-- box / title -->
@@ -180,7 +125,7 @@
                     ${h.hidden('del_ip',ip.ip_id)}
                     ${h.hidden('default_user', 'True')}
                     ${h.submit('remove_',_('delete'),id="remove_ip_%s" % ip.ip_id,
-                    class_="delete_icon action_button", onclick="return  confirm('"+_('Confirm to delete this ip: %s') % ip.ip_addr+"');")}
+                    class_="delete_icon action_button", onclick="return confirm('"+_('Confirm to delete this ip: %s') % ip.ip_addr+"');")}
                 ${h.end_form()}
               </td>
           </tr>
--- a/rhodecode/templates/admin/repos/repo_add.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/admin/repos/repo_add.html	Sun Apr 07 18:37:22 2013 +0200
@@ -2,27 +2,33 @@
 <%inherit file="/base/base.html"/>
 
 <%def name="title()">
-    ${_('Add repository')} - ${c.rhodecode_name}
+    ${_('Add repository')} &middot; ${c.rhodecode_name}
 </%def>
 
 <%def name="breadcrumbs_links()">
+    %if c.rhodecode_user.is_admin:
     ${h.link_to(_('Admin'),h.url('admin_home'))}
     &raquo;
     ${h.link_to(_('Repositories'),h.url('repos'))}
+    %else:
+    ${_('Admin')}
     &raquo;
-    ${_('add new')}
+    ${_('Repositories')}
+    %endif
+    &raquo;
+    ${_('Add new')}
 </%def>
 
 <%def name="page_nav()">
-	${self.menu('admin')}
+    ${self.menu('admin')}
 </%def>
 
 <%def name="main()">
-	<div class="box">
-	    <!-- box / title -->
-	    <div class="title">
-	        ${self.breadcrumbs()}
-	    </div>
+    <div class="box">
+        <!-- box / title -->
+        <div class="title">
+            ${self.breadcrumbs()}
+        </div>
         <%include file="repo_add_base.html"/>
     </div>
 </%def>
--- a/rhodecode/templates/admin/repos/repo_add_base.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/admin/repos/repo_add_base.html	Sun Apr 07 18:37:22 2013 +0200
@@ -9,8 +9,8 @@
                 <label for="repo_name">${_('Name')}:</label>
             </div>
             <div class="input">
-                ${h.text('repo_name',c.new_repo,class_="small")}
-                %if not h.HasPermissionAll('hg.admin')('repo create form'):
+                ${h.text('repo_name',class_="small")}
+                %if not c.rhodecode_user.is_admin:
                     ${h.hidden('user_created',True)}
                 %endif
             </div>
@@ -70,7 +70,7 @@
             </div>
          </div>
         <div class="buttons">
-          ${h.submit('add',_('add'),class_="ui-btn large")}
+          ${h.submit('add',_('Add'),class_="ui-btn large")}
         </div>
     </div>
 </div>
--- a/rhodecode/templates/admin/repos/repo_add_create_repository.html	Mon Mar 11 17:59:38 2013 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-## -*- coding: utf-8 -*-
-<%inherit file="/base/base.html"/>
-
-<%def name="title()">
-    ${_('Add repository')} - ${c.rhodecode_name}
-</%def>
-
-<%def name="breadcrumbs_links()">
-	${_('add new repository')}
-</%def>
-
-<%def name="page_nav()">
-	${self.menu('admin')}
-</%def>
-
-<%def name="main()">
-    <div class="box">
-        <!-- box / title -->
-        <div class="title">
-            ${self.breadcrumbs()}
-        </div>
-        <%include file="repo_add_base.html"/>
-    </div>
-</%def>
--- a/rhodecode/templates/admin/repos/repo_edit.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/admin/repos/repo_edit.html	Sun Apr 07 18:37:22 2013 +0200
@@ -1,23 +1,23 @@
 ## -*- coding: utf-8 -*-
+##
+## See also repo_settings.html
+##
 <%inherit file="/base/base.html"/>
 
 <%def name="title()">
-    ${_('Edit repository')} ${c.repo_info.repo_name} - ${c.rhodecode_name}
+    ${_('Edit repository')} ${c.repo_info.repo_name} &middot; ${c.rhodecode_name}
 </%def>
 
 <%def name="breadcrumbs_links()">
-    ${h.link_to(_('Admin'),h.url('admin_home'))}
-    &raquo;
-    ${h.link_to(_('Repositories'),h.url('repos'))}
-    &raquo;
-    ${_('edit')} &raquo; ${h.link_to(c.repo_info.just_name,h.url('summary_home',repo_name=c.repo_name))}
+    ${_('Settings')}
 </%def>
 
 <%def name="page_nav()">
-	${self.menu('admin')}
+    ${self.menu('admin')}
 </%def>
 
 <%def name="main()">
+${self.context_bar('options')}
 <div class="box box-left">
     <!-- box / title -->
     <div class="title">
@@ -35,24 +35,24 @@
                     ${h.text('repo_name',class_="medium")}
                 </div>
            </div>
-	       <div class="field">
-	           <div class="label">
-	               <label for="clone_uri">${_('Clone uri')}:</label>
-	           </div>
-	           <div class="input">
-	               ${h.text('clone_uri',class_="medium")}
+           <div class="field">
+               <div class="label">
+                   <label for="clone_uri">${_('Clone uri')}:</label>
+               </div>
+               <div class="input">
+                   ${h.text('clone_uri',class_="medium")}
                  <span class="help-block">${_('Optional http[s] url from which repository should be cloned.')}</span>
-	           </div>
-	        </div>
-	        <div class="field">
-	            <div class="label">
-	                <label for="repo_group">${_('Repository group')}:</label>
-	            </div>
-	            <div class="input">
-	                ${h.select('repo_group','',c.repo_groups,class_="medium")}
+               </div>
+            </div>
+            <div class="field">
+                <div class="label">
+                    <label for="repo_group">${_('Repository group')}:</label>
+                </div>
+                <div class="input">
+                    ${h.select('repo_group','',c.repo_groups,class_="medium")}
                     <span class="help-block">${_('Optional select a group to put this repository into.')}</span>
-	            </div>
-	        </div>
+                </div>
+            </div>
             <div class="field">
                 <div class="label">
                     <label for="repo_type">${_('Type')}:</label>
@@ -128,162 +128,268 @@
                     </div>
                 </div>
              </div>
-
-            <div class="field">
-                <div class="label">
-                    <label for="input">${_('Permissions')}:</label>
-                </div>
-                <div class="input">
-                    <%include file="repo_edit_perms.html"/>
-                </div>
-
-                <div class="buttons">
-                  ${h.submit('save',_('Save'),class_="ui-btn large")}
-                  ${h.reset('reset',_('Reset'),class_="ui-btn large")}
-                </div>
+            %if c.visual.repository_fields:
+              ## EXTRA FIELDS
+              %for field in c.repo_fields:
+                <div class="field">
+                    <div class="label">
+                        <label for="${field.field_key_prefixed}">${field.field_label} (${field.field_key}):</label>
+                    </div>
+                    <div class="input input-medium">
+                        ${h.text(field.field_key_prefixed, field.field_value, class_='medium')}
+                        %if field.field_desc:
+                          <span class="help-block">${field.field_desc}</span>
+                        %endif
+                    </div>
+                 </div>
+              %endfor
+            %endif
+            <div class="buttons">
+              ${h.submit('save',_('Save'),class_="ui-btn large")}
+              ${h.reset('reset',_('Reset'),class_="ui-btn large")}
             </div>
-    </div>
+        </div>
     </div>
     ${h.end_form()}
 </div>
 
 <div class="box box-right">
     <div class="title">
-        <h5>${_('Administration')}</h5>
+        <h5>${_('Permissions')}</h5>
+    </div>
+    ${h.form(url('set_repo_perm_member', repo_name=c.repo_info.repo_name),method='post')}
+    <div class="form">
+       <div class="fields">
+            <div class="field">
+                <div class="label">
+                    <label for="input">${_('Permissions')}:</label>
+                </div>
+                <div class="input">
+                    ${h.hidden('repo_private')}
+                    <%include file="repo_edit_perms.html"/>
+                </div>
+            </div>
+            <div class="buttons">
+              ${h.submit('save',_('Save'),class_="ui-btn large")}
+              ${h.reset('reset',_('Reset'),class_="ui-btn large")}
+            </div>
+       </div>
+    </div>
+    ${h.end_form()}
+</div>
+
+
+<div class="box box-right"  style="clear:right">
+    <div class="title">
+        <h5>${_('Advanced settings')}</h5>
     </div>
 
-        <h3>${_('Statistics')}</h3>
-        ${h.form(url('repo_stats', repo_name=c.repo_info.repo_name),method='delete')}
-        <div class="form">
-           <div class="fields">
-               ${h.submit('reset_stats_%s' % c.repo_info.repo_name,_('Reset current statistics'),class_="ui-btn",onclick="return confirm('"+_('Confirm to remove current statistics')+"');")}
-               <div class="field" style="border:none;color:#888">
-               <ul>
-                    <li>${_('Fetched to rev')}: ${c.stats_revision}/${c.repo_last_rev}</li>
-                    <li>${_('Stats gathered')}: ${c.stats_percentage}%</li>
-               </ul>
-               </div>
-           </div>
-        </div>
-        ${h.end_form()}
-
-        %if c.repo_info.clone_uri:
-        <h3>${_('Remote')}</h3>
-        ${h.form(url('repo_pull', repo_name=c.repo_info.repo_name),method='put')}
-        <div class="form">
-           <div class="fields">
-               ${h.submit('remote_pull_%s' % c.repo_info.repo_name,_('Pull changes from remote location'),class_="ui-btn",onclick="return confirm('"+_('Confirm to pull changes from remote side')+"');")}
-               <div class="field" style="border:none">
-               <ul>
-                    <li><a href="${c.repo_info.clone_uri}">${c.repo_info.clone_uri}</a></li>
-               </ul>
-               </div>
-           </div>
-        </div>
-        ${h.end_form()}
-        %endif
-
-        <h3>${_('Cache')}</h3>
-        ${h.form(url('repo_cache', repo_name=c.repo_info.repo_name),method='delete')}
-        <div class="form">
-           <div class="fields">
-               ${h.submit('reset_cache_%s' % c.repo_info.repo_name,_('Invalidate repository cache'),class_="ui-btn",onclick="return confirm('"+_('Confirm to invalidate repository cache')+"');")}
-              <div class="field" style="border:none;color:#888">
-              <ul>
-                  <li>${_('Manually invalidate cache for this repository. On first access repository will be cached again')}
-                  </li>
-              </ul>
-              </div>
-              <div class="field" style="border:none;">
-                ${_('List of cached values')}
-                   <table>
-                   <tr>
-                    <th>${_('Prefix')}</th>
-                    <th>${_('Key')}</th>
-                    <th>${_('Active')}</th>
-                    </tr>
-                  %for cache in c.repo_info.cache_keys:
-                      <tr>
-                        <td>${cache.prefix or '-'}</td>
-                        <td>${cache.cache_key}</td>
-                        <td>${h.bool2icon(cache.cache_active)}</td>
-                      </tr>
-                  %endfor
-                  </table>
-              </div>
-           </div>
-        </div>
-        ${h.end_form()}
-
-        <h3>${_('Public journal')}</h3>
-        ${h.form(url('repo_public_journal', repo_name=c.repo_info.repo_name),method='put')}
-        <div class="form">
-          ${h.hidden('auth_token',str(h.get_token()))}
-          <div class="field">
-          %if c.in_public_journal:
-            ${h.submit('set_public_%s' % c.repo_info.repo_name,_('Remove from public journal'),class_="ui-btn")}
-          %else:
-            ${h.submit('set_public_%s' % c.repo_info.repo_name,_('Add to public journal'),class_="ui-btn")}
-          %endif
-          </div>
-         <div class="field" style="border:none;color:#888">
-         <ul>
-              <li>${_('All actions made on this repository will be accessible to everyone in public journal')}
-              </li>
-         </ul>
-         </div>
-        </div>
-        ${h.end_form()}
-
-        <h3>${_('Locking')}</h3>
-        ${h.form(url('repo_locking', repo_name=c.repo_info.repo_name),method='put')}
-        <div class="form">
-           <div class="fields">
-              %if c.repo_info.locked[0]:
-               ${h.submit('set_unlock' ,_('Unlock locked repo'),class_="ui-btn",onclick="return confirm('"+_('Confirm to unlock repository')+"');")}
-               ${'Locked by %s on %s' % (h.person_by_id(c.repo_info.locked[0]),h.fmt_date(h.time_to_datetime(c.repo_info.locked[1])))}
-              %else:
-                ${h.submit('set_lock',_('lock repo'),class_="ui-btn",onclick="return confirm('"+_('Confirm to lock repository')+"');")}
-                ${_('Repository is not locked')}
-              %endif
-           </div>
+    <h3>${_('Statistics')}</h3>
+    ${h.form(url('repo_stats', repo_name=c.repo_info.repo_name),method='delete')}
+    <div class="form">
+       <div class="fields">
+           ${h.submit('reset_stats_%s' % c.repo_info.repo_name,_('Reset current statistics'),class_="ui-btn",onclick="return confirm('"+_('Confirm to remove current statistics')+"');")}
            <div class="field" style="border:none;color:#888">
            <ul>
-                <li>${_('Force locking on repository. Works only when anonymous access is disabled')}
-                </li>
+                <li>${_('Fetched to rev')}: ${c.stats_revision}/${c.repo_last_rev}</li>
+                <li>${_('Stats gathered')}: ${c.stats_percentage}%</li>
+           </ul>
+           </div>
+       </div>
+    </div>
+    ${h.end_form()}
+
+    %if c.repo_info.clone_uri:
+    <h3>${_('Remote')}</h3>
+    ${h.form(url('repo_pull', repo_name=c.repo_info.repo_name),method='put')}
+    <div class="form">
+       <div class="fields">
+           ${h.submit('remote_pull_%s' % c.repo_info.repo_name,_('Pull changes from remote location'),class_="ui-btn",onclick="return confirm('"+_('Confirm to pull changes from remote side')+"');")}
+           <div class="field" style="border:none">
+           <ul>
+                <li><a href="${c.repo_info.clone_uri}">${c.repo_info.clone_uri}</a></li>
            </ul>
            </div>
-        </div>
-        ${h.end_form()}
+       </div>
+    </div>
+    ${h.end_form()}
+    %endif
+
+    <h3>${_('Cache')}</h3>
+    ${h.form(url('repo_cache', repo_name=c.repo_info.repo_name),method='delete')}
+    <div class="form">
+       <div class="fields">
+           ${h.submit('reset_cache_%s' % c.repo_info.repo_name,_('Invalidate repository cache'),class_="ui-btn",onclick="return confirm('"+_('Confirm to invalidate repository cache')+"');")}
+          <div class="field" style="border:none;color:#888">
+          <ul>
+              <li>${_('Manually invalidate cache for this repository. On first access repository will be cached again')}
+              </li>
+          </ul>
+          </div>
+          <div class="field" style="border:none;">
+            ${_('List of cached values')}
+               <table>
+               <tr>
+                <th>${_('Prefix')}</th>
+                <th>${_('Key')}</th>
+                <th>${_('Active')}</th>
+                </tr>
+              %for cache in c.repo_info.cache_keys:
+                  <tr>
+                    <td>${cache.get_prefix() or '-'}</td>
+                    <td>${cache.cache_key}</td>
+                    <td>${h.boolicon(cache.cache_active)}</td>
+                  </tr>
+              %endfor
+              </table>
+          </div>
+       </div>
+    </div>
+    ${h.end_form()}
 
-        <h3>${_('Set as fork of')}</h3>
-        ${h.form(url('repo_as_fork', repo_name=c.repo_info.repo_name),method='put')}
-        <div class="form">
-           <div class="fields">
-               ${h.select('id_fork_of','',c.repos_list,class_="medium")}
-               ${h.submit('set_as_fork_%s' % c.repo_info.repo_name,_('set'),class_="ui-btn",)}
-           </div>
-               <div class="field" style="border:none;color:#888">
-               <ul>
-                    <li>${_('''Manually set this repository as a fork of another from the list''')}</li>
-               </ul>
-               </div>
-        </div>
-        ${h.end_form()}
+    <h3>${_('Public journal')}</h3>
+    ${h.form(url('repo_public_journal', repo_name=c.repo_info.repo_name),method='put')}
+    <div class="form">
+      ${h.hidden('auth_token',str(h.get_token()))}
+      <div class="field">
+      %if c.in_public_journal:
+        ${h.submit('set_public_%s' % c.repo_info.repo_name,_('Remove from public journal'),class_="ui-btn")}
+      %else:
+        ${h.submit('set_public_%s' % c.repo_info.repo_name,_('Add to public journal'),class_="ui-btn")}
+      %endif
+      </div>
+     <div class="field" style="border:none;color:#888">
+     <ul>
+          <li>${_('All actions made on this repository will be accessible to everyone in public journal')}
+          </li>
+     </ul>
+     </div>
+    </div>
+    ${h.end_form()}
 
-        <h3>${_('Delete')}</h3>
-        ${h.form(url('repo', repo_name=c.repo_info.repo_name),method='delete')}
-        <div class="form">
-           <div class="fields">
-               ${h.submit('remove_%s' % c.repo_info.repo_name,_('Remove this repository'),class_="ui-btn red",onclick="return confirm('"+_('Confirm to delete this repository')+"');")}
-           </div>
+    <h3>${_('Locking')}</h3>
+    ${h.form(url('repo_locking', repo_name=c.repo_info.repo_name),method='put')}
+    <div class="form">
+       <div class="fields">
+          %if c.repo_info.locked[0]:
+           ${h.submit('set_unlock' ,_('Unlock locked repo'),class_="ui-btn",onclick="return confirm('"+_('Confirm to unlock repository')+"');")}
+           ${'Locked by %s on %s' % (h.person_by_id(c.repo_info.locked[0]),h.fmt_date(h.time_to_datetime(c.repo_info.locked[1])))}
+          %else:
+            ${h.submit('set_lock',_('lock repo'),class_="ui-btn",onclick="return confirm('"+_('Confirm to lock repository')+"');")}
+            ${_('Repository is not locked')}
+          %endif
+       </div>
+       <div class="field" style="border:none;color:#888">
+       <ul>
+            <li>${_('Force locking on repository. Works only when anonymous access is disabled')}
+            </li>
+       </ul>
+       </div>
+    </div>
+    ${h.end_form()}
+
+    <h3>${_('Set as fork of')}</h3>
+    ${h.form(url('repo_as_fork', repo_name=c.repo_info.repo_name),method='put')}
+    <div class="form">
+       <div class="fields">
+           ${h.select('id_fork_of','',c.repos_list,class_="medium")}
+           ${h.submit('set_as_fork_%s' % c.repo_info.repo_name,_('set'),class_="ui-btn",)}
+       </div>
            <div class="field" style="border:none;color:#888">
            <ul>
-                <li>${_('This repository will be renamed in a special way in order to be unaccesible for RhodeCode and VCS systems. If you need fully delete it from file system please do it manually')}</li>
+                <li>${_('''Manually set this repository as a fork of another from the list''')}</li>
            </ul>
            </div>
+    </div>
+    ${h.end_form()}
+
+    <h3>${_('Delete')}</h3>
+    ${h.form(url('repo', repo_name=c.repo_info.repo_name),method='delete')}
+    <div class="form">
+        <div class="fields">
+            <div class="field" style="border:none;color:#888">
+##              <div class="label">
+##                  <label for="">${_('Remove repository')}:</label>
+##              </div>
+                <div class="checkboxes">
+                    ${h.submit('remove_%s' % c.repo_info.repo_name,_('Remove this repository'),class_="ui-btn red",onclick="return confirm('"+_('Confirm to delete this repository')+"');")}
+                    %if c.repo_info.forks.count():
+                        - ${ungettext('this repository has %s fork', 'this repository has %s forks', c.repo_info.forks.count()) % c.repo_info.forks.count()}
+                        <input type="radio" name="forks" value="detach_forks" checked="checked"/> <label for="forks">${_('Detach forks')}</label>
+                        <input type="radio" name="forks" value="delete_forks" /> <label for="forks">${_('Delete forks')}</label>
+                    %endif
+                    <ul>
+                        <li>${_('This repository will be renamed in a special way in order to be unaccesible for RhodeCode and VCS systems. If you need to fully delete it from file system please do it manually')}</li>
+                    </ul>
+                </div>
+            </div>
         </div>
-        ${h.end_form()}
+    </div>
+    ${h.end_form()}
 </div>
 
+##TODO: this should be controlled by the VISUAL setting
+%if c.visual.repository_fields:
+<div class="box box-left" style="clear:left">
+    <!-- box / title -->
+    <div class="title">
+        <h5>${_('Extra fields')}</h5>
+    </div>
+
+    <div class="emails_wrap">
+      <table class="noborder">
+      %for field in c.repo_fields:
+        <tr>
+            <td>${field.field_label} (${field.field_key})</td>
+            <td>${field.field_type}</td>
+            <td>
+              ${h.form(url('delete_repo_fields', repo_name=c.repo_info.repo_name, field_id=field.repo_field_id),method='delete')}
+                  ${h.submit('remove_%s' % field.repo_field_id, _('delete'), id="remove_field_%s" % field.repo_field_id,
+                  class_="delete_icon action_button", onclick="return confirm('"+_('Confirm to delete this field: %s') % field.field_key+"');")}
+              ${h.end_form()}
+            </td>
+        </tr>
+      %endfor
+      </table>
+    </div>
+
+    ${h.form(url('create_repo_fields', repo_name=c.repo_info.repo_name),method='put')}
+    <div class="form">
+        <!-- fields -->
+        <div class="fields">
+             <div class="field">
+                <div class="label">
+                    <label for="new_field_key">${_('New field key')}:</label>
+                </div>
+                <div class="input">
+                    ${h.text('new_field_key', class_='small')}
+                </div>
+             </div>
+             <div class="field">
+                <div class="label">
+                    <label for="new_field_label">${_('New field label')}:</label>
+                </div>
+                <div class="input">
+                    ${h.text('new_field_label', class_='small', placeholder=_('Enter short label'))}
+                </div>
+             </div>
+
+             <div class="field">
+                <div class="label">
+                    <label for="new_field_desc">${_('New field description')}:</label>
+                </div>
+                <div class="input">
+                    ${h.text('new_field_desc', class_='small', placeholder=_('Enter description of a field'))}
+                </div>
+             </div>
+
+            <div class="buttons">
+              ${h.submit('save',_('Add'),class_="ui-btn large")}
+              ${h.reset('reset',_('Reset'),class_="ui-btn large")}
+            </div>
+        </div>
+    </div>
+    ${h.end_form()}
+</div>
+%endif
 </%def>
--- a/rhodecode/templates/admin/repos/repo_edit_perms.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/admin/repos/repo_edit_perms.html	Sun Apr 07 18:37:22 2013 +0200
@@ -38,7 +38,7 @@
         %endif
     %endfor
 
-    ## USERS GROUPS
+    ## USER GROUPS
     %for g2p in c.repo_info.users_group_to_perm:
         <tr id="id${id(g2p.users_group.users_group_name)}">
             <td>${h.radio('g_perm_%s' % g2p.users_group.users_group_name,'repository.none')}</td>
@@ -54,7 +54,7 @@
                 %endif
             </td>
             <td>
-                <span class="delete_icon action_button" onclick="ajaxActionUsersGroup(${g2p.users_group.users_group_id},'${'id%s'%id(g2p.users_group.users_group_name)}')">
+                <span class="delete_icon action_button" onclick="ajaxActionUserGroup(${g2p.users_group.users_group_id},'${'id%s'%id(g2p.users_group.users_group_name)}')">
                 ${_('revoke')}
                 </span>
             </td>
@@ -101,15 +101,15 @@
     var request = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, postData);
 };
 
-function ajaxActionUsersGroup(users_group_id,field_id){
+function ajaxActionUserGroup(users_group_id,field_id){
     var sUrl = "${h.url('delete_repo_users_group',repo_name=c.repo_name)}";
     var callback = {
-    	success:function(o){
-    	    var tr = YUD.get(String(field_id));
-    		tr.parentNode.removeChild(tr);
-    	},
+        success:function(o){
+            var tr = YUD.get(String(field_id));
+            tr.parentNode.removeChild(tr);
+        },
         failure:function(o){
-            alert("${_('Failed to remove users group')}");
+            alert("${_('Failed to remove user group')}");
         },
     };
     var postData = '_method=delete&users_group_id='+users_group_id;
--- a/rhodecode/templates/admin/repos/repos.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/admin/repos/repos.html	Sun Apr 07 18:37:22 2013 +0200
@@ -2,14 +2,14 @@
 <%inherit file="/base/base.html"/>
 
 <%def name="title()">
-    ${_('Repositories administration')} - ${c.rhodecode_name}
+    ${_('Repositories administration')} &middot; ${c.rhodecode_name}
 </%def>
 
 <%def name="breadcrumbs_links()">
-    <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" value="${_('quick filter...')}"/> ${h.link_to(_('Admin'),h.url('admin_home'))} &raquo; <span id="repo_count">0</span> ${_('repositories')}
+    <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" placeholder="${_('quick filter...')}" value=""/> ${h.link_to(_('Admin'),h.url('admin_home'))} &raquo; <span id="repo_count">0</span> ${_('repositories')}
 </%def>
 <%def name="page_nav()">
-	${self.menu('admin')}
+    ${self.menu('admin')}
 </%def>
 <%def name="main()">
 <div class="box">
@@ -18,7 +18,7 @@
         ${self.breadcrumbs()}
         <ul class="links">
           <li>
-            <span>${h.link_to(_(u'ADD REPOSITORY'),h.url('new_repo'))}</span>
+            <span>${h.link_to(_(u'Add repository'),h.url('new_repo'))}</span>
           </li>
         </ul>
     </div>
@@ -69,7 +69,7 @@
   var myColumnDefs = [
       {key:"menu",label:"",sortable:false,className:"quick_repo_menu hidden"},
       {key:"name",label:"${_('Name')}",sortable:true,
-    	  sortOptions: { sortFunction: nameSort }},
+          sortOptions: { sortFunction: nameSort }},
       {key:"desc",label:"${_('Description')}",sortable:true},
       {key:"last_changeset",label:"${_('Tip')}",sortable:true,
           sortOptions: { sortFunction: revisionSort }},
@@ -126,11 +126,10 @@
 
   };
   YUE.on('q_filter','click',function(){
-	  if(!YUD.hasClass('q_filter', 'loaded')){
-		  YUD.get('q_filter').value = '';
-		  //TODO: load here full list later to do search within groups
-		  YUD.addClass('q_filter', 'loaded');
-	  }
+      if(!YUD.hasClass('q_filter', 'loaded')){
+          //TODO: load here full list later to do search within groups
+          YUD.addClass('q_filter', 'loaded');
+      }
    });
 
   YUE.on('q_filter','keyup',function (e) {
--- a/rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/admin/repos_groups/repos_group_edit_perms.html	Sun Apr 07 18:37:22 2013 +0200
@@ -9,7 +9,9 @@
     </tr>
     ## USERS
     %for r2p in c.repos_group.repo_group_to_perm:
+        ##forbid revoking permission from yourself
         <tr id="id${id(r2p.user.username)}">
+            %if c.rhodecode_user.user_id != r2p.user.user_id or c.rhodecode_user.is_admin:
             <td>${h.radio('u_perm_%s' % r2p.user.username,'group.none')}</td>
             <td>${h.radio('u_perm_%s' % r2p.user.username,'group.read')}</td>
             <td>${h.radio('u_perm_%s' % r2p.user.username,'group.write')}</td>
@@ -24,10 +26,21 @@
                 </span>
               %endif
             </td>
+            %else:
+            <td>${h.radio('u_perm_%s' % r2p.user.username,'group.none', disabled="disabled")}</td>
+            <td>${h.radio('u_perm_%s' % r2p.user.username,'group.read', disabled="disabled")}</td>
+            <td>${h.radio('u_perm_%s' % r2p.user.username,'group.write', disabled="disabled")}</td>
+            <td>${h.radio('u_perm_%s' % r2p.user.username,'group.admin', disabled="disabled")}</td>
+            <td style="white-space: nowrap;">
+                <img class="perm-gravatar" src="${h.gravatar_url(r2p.user.email,14)}"/>${r2p.user.username if r2p.user.username != 'default' else _('default')}
+            </td>
+            <td>
+            </td>
+            %endif
         </tr>
     %endfor
 
-    ## USERS GROUPS
+    ## USER GROUPS
     %for g2p in c.repos_group.users_group_to_perm:
         <tr id="id${id(g2p.users_group.users_group_name)}">
             <td>${h.radio('g_perm_%s' % g2p.users_group.users_group_name,'group.none')}</td>
@@ -38,7 +51,7 @@
                 <img class="perm-gravatar" src="${h.url('/images/icons/group.png')}"/>${g2p.users_group.users_group_name}
             </td>
             <td>
-                <span class="delete_icon action_button" onclick="ajaxActionUsersGroup(${g2p.users_group.users_group_id},'${'id%s'%id(g2p.users_group.users_group_name)}')">
+                <span class="delete_icon action_button" onclick="ajaxActionUserGroup(${g2p.users_group.users_group_id},'${'id%s'%id(g2p.users_group.users_group_name)}')">
                 ${_('revoke')}
                 </span>
             </td>
@@ -92,7 +105,7 @@
     var request = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, postData);
 };
 
-function ajaxActionUsersGroup(users_group_id,field_id){
+function ajaxActionUserGroup(users_group_id,field_id){
     var sUrl = "${h.url('delete_repos_group_users_group_perm',group_name=c.repos_group.group_name)}";
     var callback = {
         success:function(o){
@@ -100,7 +113,7 @@
             tr.parentNode.removeChild(tr);
         },
         failure:function(o){
-            alert("${_('Failed to remove users group')}");
+            alert("${_('Failed to remove user group')}");
         },
     };
     var recursive = YUD.get('recursive').checked;
@@ -113,7 +126,7 @@
         YUD.setStyle('add_perm_input', 'display', 'none');
     }
     YAHOO.util.Event.addListener('add_perm', 'click', function () {
-    	addPermAction(${_tmpl}, ${c.users_array|n}, ${c.users_groups_array|n});
+        addPermAction(${_tmpl}, ${c.users_array|n}, ${c.users_groups_array|n});
     });
 });
 
--- a/rhodecode/templates/admin/repos_groups/repos_groups.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/admin/repos_groups/repos_groups.html	Sun Apr 07 18:37:22 2013 +0200
@@ -1,7 +1,7 @@
 ## -*- coding: utf-8 -*-
 <%inherit file="/base/base.html"/>
 <%def name="title()">
-    ${_('Repository group')} - ${c.rhodecode_name}
+    ${_('%s Group Dashboard') % c.group.group_name} &middot; ${c.rhodecode_name}
 </%def>
 
 <%def name="breadcrumbs()">
@@ -15,8 +15,9 @@
 </%def>
 
 <%def name="page_nav()">
-    ${self.menu('admin')}
+    ${self.menu('repositories')}
 </%def>
+
 <%def name="main()">
         <%include file="/index_base.html" args="parent=self,short_repo_names=True"/>
 </%def>
--- a/rhodecode/templates/admin/repos_groups/repos_groups_add.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/admin/repos_groups/repos_groups_add.html	Sun Apr 07 18:37:22 2013 +0200
@@ -2,14 +2,15 @@
 <%inherit file="/base/base.html"/>
 
 <%def name="title()">
-    ${_('Add repos group')} - ${c.rhodecode_name}
+    ${_('Add repository group')} &middot; ${c.rhodecode_name}
 </%def>
+
 <%def name="breadcrumbs_links()">
     ${h.link_to(_('Admin'),h.url('admin_home'))}
     &raquo;
-    ${h.link_to(_('Repos groups'),h.url('repos_groups'))}
+    ${h.link_to(_('Repository groups'),h.url('repos_groups'))}
     &raquo;
-    ${_('add new repos group')}
+    ${_('Add new repository group')}
 </%def>
 
 <%def name="page_nav()">
@@ -50,7 +51,7 @@
                      <label for="group_parent_id">${_('Group parent')}:</label>
                  </div>
                  <div class="input">
-                     ${h.select('group_parent_id','',c.repo_groups,class_="medium")}
+                     ${h.select('group_parent_id',request.GET.get('parent_group'),c.repo_groups,class_="medium")}
                  </div>
              </div>
 
--- a/rhodecode/templates/admin/repos_groups/repos_groups_edit.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/admin/repos_groups/repos_groups_edit.html	Sun Apr 07 18:37:22 2013 +0200
@@ -2,14 +2,15 @@
 <%inherit file="/base/base.html"/>
 
 <%def name="title()">
-    ${_('Edit repos group')} ${c.repos_group.name} - ${c.rhodecode_name}
+    ${_('Edit repository group')} ${c.repos_group.name} &middot; ${c.rhodecode_name}
 </%def>
+
 <%def name="breadcrumbs_links()">
     ${h.link_to(_('Admin'),h.url('admin_home'))}
     &raquo;
-    ${h.link_to(_('Repos groups'),h.url('repos_groups'))}
+    ${h.link_to(_('Repository groups'),h.url('repos_groups'))}
     &raquo;
-    ${_('edit repos group')} "${c.repos_group.name}"
+    ${_('Edit repository group %s') % c.repos_group.name}"
 </%def>
 
 <%def name="page_nav()">
@@ -21,38 +22,43 @@
     <!-- box / title -->
     <div class="title">
         ${self.breadcrumbs()}
+        <ul class="links">
+          <li>
+            <span>${h.link_to(_(u'Add child group'),h.url('new_repos_group', parent_group=c.repos_group.group_id))}</span>
+          </li>
+        </ul>
     </div>
     <!-- end box / title -->
-    ${h.form(url('repos_group',id=c.repos_group.group_id),method='put')}
+    ${h.form(url('repos_group',group_name=c.repos_group.group_name),method='put')}
     <div class="form">
         <!-- fields -->
         <div class="fields">
-             <div class="field">
+            <div class="field">
                 <div class="label">
                     <label for="group_name">${_('Group name')}:</label>
                 </div>
                 <div class="input">
                     ${h.text('group_name',class_='medium')}
                 </div>
-             </div>
+            </div>
 
-	        <div class="field">
-	            <div class="label label-textarea">
-	                <label for="group_description">${_('Description')}:</label>
-	            </div>
-	            <div class="textarea text-area editor">
-	                ${h.textarea('group_description',cols=23,rows=5,class_="medium")}
-	            </div>
-	         </div>
+            <div class="field">
+                <div class="label label-textarea">
+                    <label for="group_description">${_('Description')}:</label>
+                </div>
+                <div class="textarea text-area editor">
+                    ${h.textarea('group_description',cols=23,rows=5,class_="medium")}
+                </div>
+            </div>
 
-	         <div class="field">
-	             <div class="label">
-	                 <label for="group_parent_id">${_('Group parent')}:</label>
-	             </div>
-	             <div class="input">
-	                 ${h.select('group_parent_id','',c.repo_groups,class_="medium")}
-	             </div>
-	         </div>
+            <div class="field">
+                <div class="label">
+                    <label for="group_parent_id">${_('Group parent')}:</label>
+                </div>
+                <div class="input">
+                    ${h.select('group_parent_id','',c.repo_groups,class_="medium")}
+                </div>
+            </div>
             <div class="field">
                 <div class="label">
                     <label for="input">${_('Permissions')}:</label>
--- a/rhodecode/templates/admin/repos_groups/repos_groups_show.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/admin/repos_groups/repos_groups_show.html	Sun Apr 07 18:37:22 2013 +0200
@@ -2,16 +2,24 @@
 <%inherit file="/base/base.html"/>
 
 <%def name="title()">
-    ${_('Repositories groups administration')} - ${c.rhodecode_name}
+    ${_('Repository groups administration')} &middot; ${c.rhodecode_name}
 </%def>
 
 
 <%def name="breadcrumbs_links()">
-    ${h.link_to(_('Admin'),h.url('admin_home'))} &raquo; ${_('Repositories')}
+    %if h.HasPermissionAny('hg.admin')():
+        ${h.link_to(_('Admin'),h.url('admin_home'))}
+    %else:
+        ${_('Admin')}
+    %endif
+    &raquo;
+    ${_('Repository groups')}
 </%def>
+
 <%def name="page_nav()">
     ${self.menu('admin')}
 </%def>
+
 <%def name="main()">
 <div class="box">
     <!-- box / title -->
@@ -19,7 +27,9 @@
         ${self.breadcrumbs()}
         <ul class="links">
           <li>
-            <span>${h.link_to(_(u'ADD NEW GROUP'),h.url('new_repos_group'))}</span>
+            %if h.HasPermissionAny('hg.admin')():
+             <span>${h.link_to(_(u'Add group'),h.url('new_repos_group'))}</span>
+            %endif
           </li>
         </ul>
     </div>
@@ -33,7 +43,7 @@
                         <th class="left"><a href="#">${_('Group name')}</a></th>
                         <th class="left"><a href="#">${_('Description')}</a></th>
                         <th class="left"><a href="#">${_('Number of toplevel repositories')}</a></th>
-                        <th class="left">${_('action')}</th>
+                        <th class="left" colspan="2">${_('Action')}</th>
                     </tr>
                 </thead>
 
@@ -44,23 +54,28 @@
                   <tr>
                       <td>
                           <div style="white-space: nowrap">
-                          <img class="icon" alt="${_('Repositories group')}" src="${h.url('/images/icons/database_link.png')}"/>
-                          ${h.link_to(h.literal(' &raquo; '.join(map(h.safe_unicode,[g.name for g in gr.parents+[gr]]))),url('edit_repos_group',id=gr.group_id))}
+                          <img class="icon" alt="${_('Repository group')}" src="${h.url('/images/icons/database_link.png')}"/>
+                          ${h.link_to(h.literal(' &raquo; '.join(map(h.safe_unicode,[g.name for g in gr.parents+[gr]]))), url('repos_group_home',group_name=gr.group_name))}
                           </div>
                       </td>
                       <td>${gr.group_description}</td>
                       <td><b>${gr_cn}</b></td>
-		               <td>
-		                 ${h.form(url('repos_group', id=gr.group_id),method='delete')}
-		                   ${h.submit('remove_%s' % gr.name,_('delete'),class_="delete_icon action_button",onclick="return confirm('"+ungettext('Confirm to delete this group: %s with %s repository','Confirm to delete this group: %s with %s repositories',gr_cn) % (gr.name,gr_cn)+"');")}
-		                 ${h.end_form()}
-		               </td>
+                      <td>
+                       <a href="${h.url('edit_repos_group',group_name=gr.group_name)}" title="${_('Edit')}">
+                         ${h.submit('edit_%s' % gr.group_name,_('edit'),class_="edit_icon action_button")}
+                       </a>
+                      </td>
+                      <td>
+                       ${h.form(url('repos_group', group_name=gr.group_name),method='delete')}
+                         ${h.submit('remove_%s' % gr.name,_('delete'),class_="delete_icon action_button",onclick="return confirm('"+ungettext('Confirm to delete this group: %s with %s repository','Confirm to delete this group: %s with %s repositories',gr_cn) % (gr.name,gr_cn)+"');")}
+                       ${h.end_form()}
+                      </td>
                   </tr>
                 % endfor
 
             </table>
             % else:
-                ${_('There are no repositories groups yet')}
+                ${_('There are no repository groups yet')}
             % endif
 
     </div>
--- a/rhodecode/templates/admin/settings/hooks.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/admin/settings/hooks.html	Sun Apr 07 18:37:22 2013 +0200
@@ -2,7 +2,7 @@
 <%inherit file="/base/base.html"/>
 
 <%def name="title()">
-    ${_('Settings administration')} - ${c.rhodecode_name}
+    ${_('Settings administration')} &middot; ${c.rhodecode_name}
 </%def>
 
 <%def name="breadcrumbs_links()">
@@ -10,7 +10,7 @@
 </%def>
 
 <%def name="page_nav()">
-	${self.menu('admin')}
+    ${self.menu('admin')}
 </%def>
 
 <%def name="main()">
@@ -25,16 +25,16 @@
     <div class="form">
         <div class="fields">
           % for hook in c.hooks:
-          <div class="field">
-	        <div class="label label">
-	            <label for="${hook.ui_key}">${hook.ui_key}</label>
-	        </div>
-	        <div class="input" style="margin-left:280px">
+            <div class="field">
+                <div class="label label">
+                    <label for="${hook.ui_key}">${hook.ui_key}</label>
+                </div>
+                <div class="input" style="margin-left:280px">
                   ${h.text(hook.ui_key,hook.ui_value,size=60,readonly="readonly")}
-	        </div>
-          </div>
+                </div>
+            </div>
           % endfor
-		</div>
+        </div>
     </div>
 
     <h3>${_('Custom hooks')}</h3>
--- a/rhodecode/templates/admin/settings/settings.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/admin/settings/settings.html	Sun Apr 07 18:37:22 2013 +0200
@@ -2,15 +2,17 @@
 <%inherit file="/base/base.html"/>
 
 <%def name="title()">
-    ${_('Settings administration')} - ${c.rhodecode_name}
+    ${_('Settings administration')} &middot; ${c.rhodecode_name}
 </%def>
 
 <%def name="breadcrumbs_links()">
-    ${h.link_to(_('Admin'),h.url('admin_home'))} &raquo; ${_('Settings')}
+    ${h.link_to(_('Admin'),h.url('admin_home'))}
+    &raquo;
+    ${_('Settings')}
 </%def>
 
 <%def name="page_nav()">
-	${self.menu('admin')}
+    ${self.menu('admin')}
 </%def>
 
 <%def name="main()">
@@ -27,20 +29,20 @@
         <!-- fields -->
 
         <div class="fields">
-			<div class="field">
-		        <div class="label label-checkbox">
-		            <label for="destroy">${_('rescan option')}:</label>
-		        </div>
-		        <div class="checkboxes">
-		            <div class="checkbox">
-		                ${h.checkbox('destroy',True)}
-		                <label for="destroy">
-		                <span class="tooltip" title="${h.tooltip(_('In case a repository was deleted from filesystem and there are leftovers in the database check this option to scan obsolete data in database and remove it.'))}">
-		                ${_('destroy old data')}</span> </label>
-		            </div>
+            <div class="field">
+                <div class="label label-checkbox">
+                    <label for="destroy">${_('Rescan option')}:</label>
+                </div>
+                <div class="checkboxes">
+                    <div class="checkbox">
+                        ${h.checkbox('destroy',True)}
+                        <label for="destroy">
+                        <span class="tooltip" title="${h.tooltip(_('In case a repository was deleted from filesystem and there are leftovers in the database check this option to scan obsolete data in database and remove it.'))}">
+                        ${_('Destroy old data')}</span> </label>
+                    </div>
                     <span class="help-block">${_('Rescan repositories location for new repositories. Also deletes obsolete if `destroy` flag is checked ')}</span>
-		        </div>
-			</div>
+                </div>
+            </div>
 
             <div class="buttons">
             ${h.submit('rescan',_('Rescan repositories'),class_="ui-btn large")}
@@ -57,12 +59,12 @@
         <div class="fields">
             <div class="field">
                 <div class="label label-checkbox">
-                    <label>${_('index build option')}:</label>
+                    <label>${_('Index build option')}:</label>
                 </div>
                 <div class="checkboxes">
                     <div class="checkbox">
                         ${h.checkbox('full_index',True)}
-                        <label for="full_index">${_('build from scratch')}</label>
+                        <label for="full_index">${_('Build from scratch')}</label>
                     </div>
                 </div>
             </div>
@@ -83,7 +85,7 @@
 
              <div class="field">
                 <div class="label">
-                    <label for="rhodecode_title">${_('Application name')}:</label>
+                    <label for="rhodecode_title">${_('Site branding')}:</label>
                 </div>
                 <div class="input">
                     ${h.text('rhodecode_title',size=30)}
@@ -92,7 +94,7 @@
 
             <div class="field">
                 <div class="label">
-                    <label for="rhodecode_realm">${_('Realm text')}:</label>
+                    <label for="rhodecode_realm">${_('HTTP authentication realm')}:</label>
                 </div>
                 <div class="input">
                     ${h.text('rhodecode_realm',size=30)}
@@ -101,7 +103,7 @@
 
             <div class="field">
                 <div class="label">
-                    <label for="rhodecode_ga_code">${_('GA code')}:</label>
+                    <label for="rhodecode_ga_code">${_('Google Analytics code')}:</label>
                 </div>
                 <div class="input">
                     ${h.text('rhodecode_ga_code',size=30)}
@@ -131,7 +133,13 @@
                         ${h.checkbox('rhodecode_lightweight_dashboard','True')}
                         <label for="rhodecode_lightweight_dashboard">${_('Use lightweight dashboard')}</label>
                     </div>
-                 </div>
+                </div>
+                <div class="checkboxes">
+                    <div class="checkbox">
+                        ${h.checkbox('rhodecode_repository_fields','True')}
+                        <label for="rhodecode_repository_fields">${_('Use repository extra fields')}</label>
+                    </div>
+                </div>
              </div>
 
              <div class="field">
@@ -191,17 +199,17 @@
 
         <div class="fields">
 
-             <div class="field">
+            <div class="field">
                 <div class="label label-checkbox">
                     <label>${_('Web')}:</label>
                 </div>
                 <div class="checkboxes">
-					<div class="checkbox">
-						${h.checkbox('web_push_ssl', 'True')}
-						<label for="web_push_ssl">${_('require ssl for vcs operations')}</label>
-					</div>
+                    <div class="checkbox">
+                        ${h.checkbox('web_push_ssl', 'True')}
+                        <label for="web_push_ssl">${_('Require SSL for vcs operations')}</label>
+                    </div>
                     <span class="help-block">${_('RhodeCode will require SSL for pushing or pulling. If SSL is missing it will return HTTP Error 406: Not Acceptable')}</span>
-				</div>
+                </div>
              </div>
 
              <div class="field">
@@ -209,14 +217,14 @@
                     <label>${_('Hooks')}:</label>
                 </div>
                 <div class="checkboxes">
-					<div class="checkbox">
-						${h.checkbox('hooks_changegroup_update','True')}
-						<label for="hooks_changegroup_update">${_('Update repository after push (hg update)')}</label>
-					</div>
-					<div class="checkbox">
-						${h.checkbox('hooks_changegroup_repo_size','True')}
-						<label for="hooks_changegroup_repo_size">${_('Show repository size after push')}</label>
-					</div>
+                    <div class="checkbox">
+                        ${h.checkbox('hooks_changegroup_update','True')}
+                        <label for="hooks_changegroup_update">${_('Update repository after push (hg update)')}</label>
+                    </div>
+                    <div class="checkbox">
+                        ${h.checkbox('hooks_changegroup_repo_size','True')}
+                        <label for="hooks_changegroup_repo_size">${_('Show repository size after push')}</label>
+                    </div>
                     <div class="checkbox">
                         ${h.checkbox('hooks_changegroup_push_logger','True')}
                         <label for="hooks_changegroup_push_logger">${_('Log user push commands')}</label>
@@ -225,9 +233,9 @@
                         ${h.checkbox('hooks_outgoing_pull_logger','True')}
                         <label for="hooks_outgoing_pull_logger">${_('Log user pull commands')}</label>
                     </div>
-				</div>
+                </div>
                 <div class="input" style="margin-top:10px">
-                    ${h.link_to(_('advanced setup'),url('admin_edit_setting',setting_id='hooks'),class_="ui-btn")}
+                    ${h.link_to(_('Advanced setup'),url('admin_edit_setting',setting_id='hooks'))}
                 </div>
              </div>
              <div class="field">
@@ -237,29 +245,30 @@
                 <div class="checkboxes">
                     <div class="checkbox">
                         ${h.checkbox('extensions_largefiles','True')}
-                        <label for="extensions_hgsubversion">${_('largefiles extensions')}</label>
+                        <label for="extensions_largefiles">${_('Enable largefiles extension')}</label>
                     </div>
                     <div class="checkbox">
                         ${h.checkbox('extensions_hgsubversion','True')}
-                        <label for="extensions_hgsubversion">${_('hgsubversion extensions')}</label>
+                        <label for="extensions_hgsubversion">${_('Enable hgsubversion extension')}</label>
                     </div>
-                    <span class="help-block">${_('Requires hgsubversion library installed. Allows clonning from svn remote locations')}</span>
+                    <span class="help-block">${_('Requires hgsubversion library installed. Allows cloning from svn remote locations')}</span>
                     ##<div class="checkbox">
                     ##    ${h.checkbox('extensions_hggit','True')}
-                    ##    <label for="extensions_hggit">${_('hg-git extensions')}</label>
+                    ##    <label for="extensions_hggit">${_('Enable hg-git extension')}</label>
                     ##</div>
-                    ##<span class="help-block">${_('Requires hg-git library installed. Allows clonning from git remote locations')}</span>
+                    ##<span class="help-block">${_('Requires hg-git library installed. Allows cloning from git remote locations')}</span>
                 </div>
-             </div>
+            </div>
             <div class="field">
                 <div class="label">
                     <label for="paths_root_path">${_('Repositories location')}:</label>
                 </div>
                 <div class="input">
                     ${h.text('paths_root_path',size=30,readonly="readonly")}
-					<span id="path_unlock" class="tooltip"
-						title="${h.tooltip(_('This a crucial application setting. If you are really sure you need to change this, you must restart application in order to make this setting take effect. Click this label to unlock.'))}">
-		                ${_('unlock')}</span>
+                    <span id="path_unlock" class="tooltip"
+                            title="${h.tooltip(_('This a crucial application setting. If you are really sure you need to change this, you must restart application in order to make this setting take effect. Click this label to unlock.'))}">
+                        ${_('Unlock')}
+                    </span>
                     <span class="help-block">${_('Location where repositories are stored. After changing this value a restart, and rescan is required')}</span>
                 </div>
             </div>
@@ -304,9 +313,9 @@
 
     <h3>${_('System Info and Packages')}</h3>
     <div class="form">
-    <div>
-        <h5 id="expand_modules" style="cursor: pointer">&darr; ${_('show')} &darr;</h5>
-    </div>
+      <div>
+        <h5 id="expand_modules" style="cursor: pointer">&darr; ${_('Show')} &darr;</h5>
+      </div>
       <div id="expand_modules_table"  style="display:none">
       <h5>Python - ${c.py_version}</h5>
       <h5>System - ${c.platform}</h5>
@@ -329,8 +338,8 @@
 
     <script type="text/javascript">
     YUE.on('expand_modules','click',function(e){
-    	YUD.setStyle('expand_modules_table','display','');
-    	YUD.setStyle('expand_modules','display','none');
+            YUD.setStyle('expand_modules_table','display','');
+            YUD.setStyle('expand_modules','display','none');
     })
     </script>
 
--- a/rhodecode/templates/admin/users/user_add.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/admin/users/user_add.html	Sun Apr 07 18:37:22 2013 +0200
@@ -2,18 +2,18 @@
 <%inherit file="/base/base.html"/>
 
 <%def name="title()">
-    ${_('Add user')} - ${c.rhodecode_name}
+    ${_('Add user')} &middot; ${c.rhodecode_name}
 </%def>
 <%def name="breadcrumbs_links()">
     ${h.link_to(_('Admin'),h.url('admin_home'))}
     &raquo;
     ${h.link_to(_('Users'),h.url('users'))}
     &raquo;
-    ${_('add new user')}
+    ${_('Add new user')}
 </%def>
 
 <%def name="page_nav()">
-	${self.menu('admin')}
+    ${self.menu('admin')}
 </%def>
 
 <%def name="main()">
@@ -91,9 +91,9 @@
              </div>
 
             <div class="buttons">
-              ${h.submit('save',_('save'),class_="ui-btn large")}
+              ${h.submit('save',_('Save'),class_="ui-btn large")}
             </div>
-    	</div>
+        </div>
     </div>
     ${h.end_form()}
 </div>
--- a/rhodecode/templates/admin/users/user_edit.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/admin/users/user_edit.html	Sun Apr 07 18:37:22 2013 +0200
@@ -2,7 +2,7 @@
 <%inherit file="/base/base.html"/>
 
 <%def name="title()">
-    ${_('Edit user')} ${c.user.username} - ${c.rhodecode_name}
+    ${_('Edit user')} ${c.user.username} &middot; ${c.rhodecode_name}
 </%def>
 
 <%def name="breadcrumbs_links()">
@@ -10,11 +10,11 @@
     &raquo;
     ${h.link_to(_('Users'),h.url('users'))}
     &raquo;
-    ${_('edit')} "${c.user.username}"
+    ${_('Edit %s') % c.user.username}
 </%def>
 
 <%def name="page_nav()">
-	${self.menu('admin')}
+    ${self.menu('admin')}
 </%def>
 
 <%def name="main()">
@@ -40,14 +40,17 @@
         </div>
         <div class="field">
             <div class="label">
-                <label>${_('API key')}</label> ${c.user.api_key}
+                <label>${_('API key')}:</label> ${c.user.api_key}
             </div>
         </div>
+        ##show current ip just if we show ourself
+        %if c.rhodecode_user.username == c.user.username:
         <div class="field">
             <div class="label">
-                <label>${_('Your IP')}</label> ${c.perm_user.ip_addr or "?"}
+                <label>${_('Current IP')}:</label> ${c.perm_user.ip_addr or "?"}
             </div>
         </div>
+        %endif
         <div class="fields">
              <div class="field">
                 <div class="label">
@@ -137,7 +140,7 @@
               ${h.submit('save',_('Save'),class_="ui-btn large")}
               ${h.reset('reset',_('Reset'),class_="ui-btn large")}
             </div>
-    	</div>
+        </div>
     </div>
     ${h.end_form()}
 </div>
@@ -187,65 +190,11 @@
     ${h.end_form()}
 
     ## permissions overview
-    <div id="perms" class="table">
-           %for section in sorted(c.perm_user.permissions.keys()):
-              <div class="perms_section_head">${section.replace("_"," ").capitalize()}</div>
-              %if not c.perm_user.permissions[section]:
-                  <span class="empty_data">${_('Nothing here yet')}</span>
-              %else:
-              <div id='tbl_list_wrap_${section}' class="yui-skin-sam">
-               <table id="tbl_list_${section}">
-                <thead>
-                    <tr>
-                    <th class="left">${_('Name')}</th>
-                    <th class="left">${_('Permission')}</th>
-                    <th class="left">${_('Edit Permission')}</th>
-                </thead>
-                <tbody>
-                %for k in c.perm_user.permissions[section]:
-                     <%
-                     if section != 'global':
-                         section_perm = c.perm_user.permissions[section].get(k)
-                         _perm = section_perm.split('.')[-1]
-                     else:
-                         _perm = section_perm = None
-                     %>
-                    <tr>
-                        <td>
-                            %if section == 'repositories':
-                                <a href="${h.url('summary_home',repo_name=k)}">${k}</a>
-                            %elif section == 'repositories_groups':
-                                <a href="${h.url('repos_group_home',group_name=k)}">${k}</a>
-                            %else:
-                                ${h.get_permission_name(k)}
-                            %endif
-                        </td>
-                        <td>
-                            %if section == 'global':
-                             ${h.bool2icon(k.split('.')[-1] != 'none')}
-                            %else:
-                             <span class="perm_tag ${_perm}">${section_perm}</span>
-                            %endif
-                        </td>
-                        <td>
-                            %if section == 'repositories':
-                                <a href="${h.url('edit_repo',repo_name=k,anchor='permissions_manage')}">${_('edit')}</a>
-                            %elif section == 'repositories_groups':
-                                <a href="${h.url('edit_repos_group',id=k,anchor='permissions_manage')}">${_('edit')}</a>
-                            %else:
-                                --
-                            %endif
-                        </td>
-                    </tr>
-                %endfor
-                </tbody>
-               </table>
-              </div>
-              %endif
-           %endfor
-    </div>
+    <%namespace name="p" file="/base/perms_summary.html"/>
+    ${p.perms_summary(c.perm_user.permissions)}
+
 </div>
-<div class="box box-left">
+<div class="box box-left" style="clear:left">
     <!-- box / title -->
     <div class="title">
         <h5>${_('Email addresses')}</h5>
--- a/rhodecode/templates/admin/users/user_edit_my_account.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/admin/users/user_edit_my_account.html	Sun Apr 07 18:37:22 2013 +0200
@@ -2,7 +2,7 @@
 <%inherit file="/base/base.html"/>
 
 <%def name="title()">
-    ${_('My account')} ${c.rhodecode_user.username} - ${c.rhodecode_name}
+    ${_('My account')} ${c.rhodecode_user.username} &middot; ${c.rhodecode_name}
 </%def>
 
 <%def name="breadcrumbs_links()">
@@ -10,7 +10,7 @@
 </%def>
 
 <%def name="page_nav()">
-	${self.menu('admin')}
+    ${self.menu('admin')}
 </%def>
 
 <%def name="main()">
@@ -28,7 +28,7 @@
     <!-- box / title -->
     <div class="title">
         <h5>
-        <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" value="${_('quick filter...')}" style="display: none"/>
+        <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" placeholder="${_('quick filter...')}" value="" style="display: none"/>
         </h5>
          <ul class="links" style="color:#DADADA">
            <li>
@@ -40,60 +40,15 @@
            <li>
              <span><a id="show_pullrequests" class="link-white" href="#pullrequests">${_('My pull requests')}</a> </span>
            </li>
-           %if h.HasPermissionAny('hg.admin','hg.create.repository')():
-             <li>
-               <span>${h.link_to(_('Add repo'),h.url('admin_settings_create_repository'))}</span>
-             </li>
-           %endif
          </ul>
     </div>
     <!-- end box / title -->
-    <div id="perms_container" class="table">
-           %for section in sorted(c.rhodecode_user.permissions.keys()):
-            <div class="perms_section_head">${section.replace("_"," ").capitalize()}</div>
+    ## permissions overview
+    <div id="perms_container">
+    <%namespace name="p" file="/base/perms_summary.html"/>
+    ${p.perms_summary(c.perm_user.permissions)}
+    </div>
 
-            <div id='tbl_list_wrap_${section}' class="yui-skin-sam">
-            <table id="tbl_list_${section}">
-              <thead>
-                  <tr>
-                  <th class="left">${_('Name')}</th>
-                  <th class="left">${_('Permission')}</th>
-              </thead>
-              <tbody>
-            %for k in c.rhodecode_user.permissions[section]:
-           <%
-           if section != 'global':
-               section_perm = c.rhodecode_user.permissions[section].get(k)
-               _perm = section_perm.split('.')[-1]
-           else:
-               _perm = section_perm = None
-           %>
-            %if _perm not in ['none']:
-                <tr>
-                    <td>
-                        %if section == 'repositories':
-                            <a href="${h.url('summary_home',repo_name=k)}">${k}</a>
-                        %elif section == 'repositories_groups':
-                            <a href="${h.url('repos_group_home',group_name=k)}">${k}</a>
-                        %else:
-                            ${k}
-                        %endif
-                    </td>
-                    <td>
-                        %if section == 'global':
-                         ${h.bool2icon(True)}
-                        %else:
-                        <span class="perm_tag ${_perm}">${section_perm}</span>
-                        %endif
-                     </td>
-                </tr>
-             %endif
-            %endfor
-            </tbody>
-            </table>
-            </div>
-           %endfor
-    </div>
     <div id="my_container" style="display:none">
         <div class="table yui-skin-sam" id="repos_list_wrap"></div>
         <div id="user-paginator" style="padding: 0px 0px 0px 20px"></div>
@@ -105,6 +60,7 @@
 </div>
 
 <script type="text/javascript">
+pyroutes.register('admin_settings_my_pullrequests', "${url('admin_settings_my_pullrequests')}", []);
 
 var show_perms = function(e){
     YUD.addClass('show_perms', 'current');
@@ -130,12 +86,12 @@
     YUD.setStyle('my_container','display','');
     YUD.setStyle('q_filter','display','');
     if(!YUD.hasClass('show_my', 'loaded')){
-    	table_renderer(${c.data |n});
+        table_renderer(${c.data |n});
         YUD.addClass('show_my', 'loaded');
     }
 }
 YUE.on('show_my','click',function(e){
-	show_my(e);
+    show_my(e);
 })
 
 var show_pullrequests = function(e){
@@ -148,11 +104,18 @@
     YUD.setStyle('pullrequests_container','display','');
     YUD.setStyle('q_filter','display','none');
 
-    var url = "${h.url('admin_settings_my_pullrequests')}";
-    ypjax(url, 'pullrequests_container');
+    var url = pyroutes.url('admin_settings_my_pullrequests');
+    if(YUD.get('show_closed') && YUD.get('show_closed').checked) {
+        var url = pyroutes.url('admin_settings_my_pullrequests', {'pr_show_closed': '1'});
+    }
+    ypjax(url, 'pullrequests_container', function(){
+        YUE.on('show_closed','change',function (e) {
+            show_pullrequests(e);
+        });
+    });
 }
 YUE.on('show_pullrequests','click',function(e){
-	show_pullrequests(e)
+    show_pullrequests(e)
 })
 
 var tabs = {
@@ -171,108 +134,108 @@
 }
 
 function table_renderer(data){
-	  var myDataSource = new YAHOO.util.DataSource(data);
-	  myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
+    var myDataSource = new YAHOO.util.DataSource(data);
+    myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
 
-	  myDataSource.responseSchema = {
-	      resultsList: "records",
-	      fields: [
-	         {key:"menu"},
-	         {key:"raw_name"},
-	         {key:"name"},
-	         {key:"last_changeset"},
-	         {key:"action"},
-	      ]
-	   };
-      myDataSource.doBeforeCallback = function(req,raw,res,cb) {
-          // This is the filter function
-          var data     = res.results || [],
-              filtered = [],
-              i,l;
+    myDataSource.responseSchema = {
+        resultsList: "records",
+        fields: [
+            {key:"menu"},
+            {key:"raw_name"},
+            {key:"name"},
+            {key:"last_changeset"},
+            {key:"action"},
+            ]
+        };
+    myDataSource.doBeforeCallback = function(req,raw,res,cb) {
+        // This is the filter function
+        var data     = res.results || [],
+            filtered = [],
+            i,l;
 
-          if (req) {
-              req = req.toLowerCase();
-              for (i = 0; i<data.length; i++) {
-                  var pos = data[i].raw_name.toLowerCase().indexOf(req)
-                  if (pos != -1) {
-                      filtered.push(data[i]);
-                  }
-              }
-              res.results = filtered;
-          }
-          return res;
-      }
+        if (req) {
+            req = req.toLowerCase();
+            for (i = 0; i<data.length; i++) {
+                var pos = data[i].raw_name.toLowerCase().indexOf(req)
+                if (pos != -1) {
+                    filtered.push(data[i]);
+                }
+            }
+            res.results = filtered;
+        }
+        return res;
+    }
 
-	  // main table sorting
-	  var myColumnDefs = [
-	      {key:"menu",label:"",sortable:false,className:"quick_repo_menu hidden"},
-	      {key:"name",label:"${_('Name')}",sortable:true,
-	          sortOptions: { sortFunction: nameSort }},
-	      {key:"last_changeset",label:"${_('Tip')}",sortable:true,
-	          sortOptions: { sortFunction: revisionSort }},
-	      {key:"action",label:"${_('Action')}",sortable:false},
-	  ];
+      // main table sorting
+      var myColumnDefs = [
+          {key:"menu",label:"",sortable:false,className:"quick_repo_menu hidden"},
+          {key:"name",label:"${_('Name')}",sortable:true,
+              sortOptions: { sortFunction: nameSort }},
+          {key:"last_changeset",label:"${_('Tip')}",sortable:true,
+              sortOptions: { sortFunction: revisionSort }},
+          {key:"action",label:"${_('Action')}",sortable:false},
+      ];
 
-	  var myDataTable = new YAHOO.widget.DataTable("repos_list_wrap", myColumnDefs, myDataSource,{
-	    sortedBy:{key:"name",dir:"asc"},
-	    paginator: new YAHOO.widget.Paginator({
-	        rowsPerPage: 50,
-	        alwaysVisible: false,
-	        template : "{PreviousPageLink} {FirstPageLink} {PageLinks} {LastPageLink} {NextPageLink}",
-	        pageLinks: 5,
-	        containerClass: 'pagination-wh',
-	        currentPageClass: 'pager_curpage',
-	        pageLinkClass: 'pager_link',
-	        nextPageLinkLabel: '&gt;',
-	        previousPageLinkLabel: '&lt;',
-	        firstPageLinkLabel: '&lt;&lt;',
-	        lastPageLinkLabel: '&gt;&gt;',
-	        containers:['user-paginator']
-	    }),
+      var myDataTable = new YAHOO.widget.DataTable("repos_list_wrap", myColumnDefs, myDataSource,{
+        sortedBy:{key:"name",dir:"asc"},
+        paginator: new YAHOO.widget.Paginator({
+            rowsPerPage: 50,
+            alwaysVisible: false,
+            template : "{PreviousPageLink} {FirstPageLink} {PageLinks} {LastPageLink} {NextPageLink}",
+            pageLinks: 5,
+            containerClass: 'pagination-wh',
+            currentPageClass: 'pager_curpage',
+            pageLinkClass: 'pager_link',
+            nextPageLinkLabel: '&gt;',
+            previousPageLinkLabel: '&lt;',
+            firstPageLinkLabel: '&lt;&lt;',
+            lastPageLinkLabel: '&gt;&gt;',
+            containers:['user-paginator']
+        }),
 
-	    MSG_SORTASC:"${_('Click to sort ascending')}",
-	    MSG_SORTDESC:"${_('Click to sort descending')}",
-	    MSG_EMPTY:"${_('No records found.')}",
-	    MSG_ERROR:"${_('Data error.')}",
-	    MSG_LOADING:"${_('Loading...')}",
-	  }
-	  );
-	  myDataTable.subscribe('postRenderEvent',function(oArgs) {
-	      tooltip_activate();
-	      quick_repo_menu();
-	  });
+        MSG_SORTASC:"${_('Click to sort ascending')}",
+        MSG_SORTDESC:"${_('Click to sort descending')}",
+        MSG_EMPTY:"${_('No records found.')}",
+        MSG_ERROR:"${_('Data error.')}",
+        MSG_LOADING:"${_('Loading...')}",
+      }
+      );
+      myDataTable.subscribe('postRenderEvent',function(oArgs) {
+          tooltip_activate();
+          quick_repo_menu();
+      });
 
-	  var filterTimeout = null;
+      var filterTimeout = null;
 
-	  updateFilter = function() {
-	      // Reset timeout
-	      filterTimeout = null;
+      updateFilter = function() {
+          // Reset timeout
+          filterTimeout = null;
 
-	      // Reset sort
-	      var state = myDataTable.getState();
-	      state.sortedBy = {key:'name', dir:YAHOO.widget.DataTable.CLASS_ASC};
+          // Reset sort
+          var state = myDataTable.getState();
+          state.sortedBy = {key:'name', dir:YAHOO.widget.DataTable.CLASS_ASC};
 
-	      // Get filtered data
-	      myDataSource.sendRequest(YUD.get('q_filter').value,{
-	          success : myDataTable.onDataReturnInitializeTable,
-	          failure : myDataTable.onDataReturnInitializeTable,
-	          scope   : myDataTable,
-	          argument: state
-	      });
+          // Get filtered data
+          myDataSource.sendRequest(YUD.get('q_filter').value,{
+              success : myDataTable.onDataReturnInitializeTable,
+              failure : myDataTable.onDataReturnInitializeTable,
+              scope   : myDataTable,
+              argument: state
+          });
 
-	  };
-	  YUE.on('q_filter','click',function(){
-	      if(!YUD.hasClass('q_filter', 'loaded')){
-	          YUD.get('q_filter').value = '';
-	          //TODO: load here full list later to do search within groups
-	          YUD.addClass('q_filter', 'loaded');
-	      }
-	   });
+      };
+      YUE.on('q_filter','click',function(){
+          if(!YUD.hasClass('q_filter', 'loaded')){
+              //TODO: load here full list later to do search within groups
+              YUD.addClass('q_filter', 'loaded');
+          }
+       });
 
-	  YUE.on('q_filter','keyup',function (e) {
-	      clearTimeout(filterTimeout);
-	      filterTimeout = setTimeout(updateFilter,600);
-	  });
-	}
+      YUE.on('q_filter','keyup',function (e) {
+          clearTimeout(filterTimeout);
+          filterTimeout = setTimeout(updateFilter,600);
+      });
+
+    }
 </script>
 </%def>
--- a/rhodecode/templates/admin/users/user_edit_my_account_form.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/admin/users/user_edit_my_account_form.html	Sun Apr 07 18:37:22 2013 +0200
@@ -20,6 +20,11 @@
                     <label>${_('API key')}</label> ${c.user.api_key}
                 </div>
             </div>
+            <div class="field">
+                <div class="label">
+                    <label>${_('Current IP')}:</label> ${c.perm_user.ip_addr or "?"}
+                </div>
+            </div>
             <div class="fields">
                  <div class="field">
                     <div class="label">
--- a/rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html	Sun Apr 07 18:37:22 2013 +0200
@@ -1,14 +1,22 @@
-
+%if c.show_closed:
+  ${h.checkbox('show_closed',checked="checked", label=_('Show closed pull requests'))}
+%else:
+  ${h.checkbox('show_closed',label=_('Show closed pull requests'))}
+%endif
 <div class="pullrequests_section_head">${_('Opened by me')}</div>
 <ul>
     %if c.my_pull_requests:
       %for pull_request in c.my_pull_requests:
-      <li>
+      <li class="${'closed' if pull_request.is_closed() else ''}">
         <div style="height: 12px">
           <div style="float:left">
-          <a href="${h.url('pullrequest_show',repo_name=pull_request.other_repo.repo_name,pull_request_id=pull_request.pull_request_id)}">
-          ${_('Pull request #%s opened on %s') % (pull_request.pull_request_id, h.fmt_date(pull_request.created_on))}
-          </a>
+            <img src="${h.url('/images/icons/flag_status_%s.png' % str(pull_request.last_review_status))}" />
+            <a href="${h.url('pullrequest_show',repo_name=pull_request.other_repo.repo_name,pull_request_id=pull_request.pull_request_id)}">
+              ${_('Pull request #%s opened on %s') % (pull_request.pull_request_id, h.fmt_date(pull_request.created_on))}
+              %if pull_request.is_closed():
+                (${_('Closed')})
+              %endif
+            </a>
           </div>
           <div style="float:left;margin-top: -5px">
             ${h.form(url('pullrequest_delete', repo_name=pull_request.other_repo.repo_name, pull_request_id=pull_request.pull_request_id),method='delete')}
@@ -27,12 +35,16 @@
 <ul>
     %if c.participate_in_pull_requests:
       %for pull_request in c.participate_in_pull_requests:
-      <li>
+      <li class="${'closed' if pull_request.is_closed() else ''}">
         <div style="height: 12px">
-        <a href="${h.url('pullrequest_show',repo_name=pull_request.other_repo.repo_name,pull_request_id=pull_request.pull_request_id)}">
-        ${_('Pull request #%s opened by %s on %s') % (pull_request.pull_request_id, pull_request.author.full_name, h.fmt_date(pull_request.created_on))}
-        </a>
-      </div>
+          <img src="${h.url('/images/icons/flag_status_%s.png' % str(pull_request.last_review_status))}" />
+          <a href="${h.url('pullrequest_show',repo_name=pull_request.other_repo.repo_name,pull_request_id=pull_request.pull_request_id)}">
+            ${_('Pull request #%s opened by %s on %s') % (pull_request.pull_request_id, pull_request.author.full_name, h.fmt_date(pull_request.created_on))}
+          </a>
+          %if pull_request.is_closed():
+            (${_('Closed')})
+          %endif
+        </div>
       </li>
       %endfor
     %else:
--- a/rhodecode/templates/admin/users/users.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/admin/users/users.html	Sun Apr 07 18:37:22 2013 +0200
@@ -2,15 +2,15 @@
 <%inherit file="/base/base.html"/>
 
 <%def name="title()">
-    ${_('Users administration')} - ${c.rhodecode_name}
+    ${_('Users administration')} &middot; ${c.rhodecode_name}
 </%def>
 
 <%def name="breadcrumbs_links()">
-    <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" value="${_('quick filter...')}"/> ${h.link_to(_('Admin'),h.url('admin_home'))} &raquo; <span id="user_count">0</span> ${_('users')}
+    <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" placeholder="${_('quick filter...')}" value=""/> ${h.link_to(_('Admin'),h.url('admin_home'))} &raquo; <span id="user_count">0</span> ${_('users')}
 </%def>
 
 <%def name="page_nav()">
-	${self.menu('admin')}
+    ${self.menu('admin')}
 </%def>
 
 <%def name="main()">
@@ -20,7 +20,7 @@
         ${self.breadcrumbs()}
         <ul class="links">
           <li>
-            <span>${h.link_to(_(u'ADD NEW USER'),h.url('new_user'))}</span>
+            <span>${h.link_to(_(u'Add new user'),h.url('new_user'))}</span>
           </li>
         </ul>
     </div>
@@ -36,7 +36,7 @@
   myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
 
   myDataSource.responseSchema = {
-	  resultsList: "records",
+      resultsList: "records",
       fields: [
           {key: "gravatar"},
           {key: "raw_username"},
@@ -60,7 +60,7 @@
       if (req) {
           req = req.toLowerCase();
           for (i = 0; i<data.length; i++) {
-        	  var pos = data[i].raw_username.toLowerCase().indexOf(req)
+              var pos = data[i].raw_username.toLowerCase().indexOf(req)
               if (pos != -1) {
                   filtered.push(data[i]);
               }
@@ -74,17 +74,17 @@
   // main table sorting
   var myColumnDefs = [
       {key:"gravatar",label:"",sortable:false,},
-      {key:"username",label:"${_('username')}",sortable:true,
-    	  sortOptions: { sortFunction: linkSort }
+      {key:"username",label:"${_('Username')}",sortable:true,
+          sortOptions: { sortFunction: usernamelinkSort }
       },
-      {key:"firstname",label:"${_('firstname')}",sortable:true,},
-      {key:"lastname",label:"${_('lastname')}",sortable:true,},
-      {key:"last_login",label:"${_('last login')}",sortable:true,
-    	  sortOptions: { sortFunction: lastLoginSort }},
-      {key:"active",label:"${_('active')}",sortable:true,},
-      {key:"admin",label:"${_('admin')}",sortable:true,},
-      {key:"ldap",label:"${_('ldap')}",sortable:true,},
-      {key:"action",label:"${_('action')}",sortable:false},
+      {key:"firstname",label:"${_('Firstname')}",sortable:true,},
+      {key:"lastname",label:"${_('Lastname')}",sortable:true,},
+      {key:"last_login",label:"${_('Last login')}",sortable:true,
+          sortOptions: { sortFunction: lastLoginSort }},
+      {key:"active",label:"${_('Active')}",sortable:true,},
+      {key:"admin",label:"${_('Admin')}",sortable:true,},
+      {key:"ldap",label:"${_('LDAP')}",sortable:true,},
+      {key:"action",label:"${_('Action')}",sortable:false},
   ];
 
   var myDataTable = new YAHOO.widget.DataTable("users_list_wrap", myColumnDefs, myDataSource,{
@@ -134,9 +134,6 @@
       });
 
   };
-  YUE.on('q_filter','click',function(){
-      YUD.get('q_filter').value = '';
-   });
 
   YUE.on('q_filter','keyup',function (e) {
       clearTimeout(filterTimeout);
--- a/rhodecode/templates/admin/users_groups/users_group_add.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/admin/users_groups/users_group_add.html	Sun Apr 07 18:37:22 2013 +0200
@@ -2,14 +2,14 @@
 <%inherit file="/base/base.html"/>
 
 <%def name="title()">
-    ${_('Add users group')} - ${c.rhodecode_name}
+    ${_('Add user group')} &middot; ${c.rhodecode_name}
 </%def>
 <%def name="breadcrumbs_links()">
     ${h.link_to(_('Admin'),h.url('admin_home'))}
     &raquo;
-    ${h.link_to(_('Users groups'),h.url('users_groups'))}
+    ${h.link_to(_('User groups'),h.url('users_groups'))}
     &raquo;
-    ${_('add new users group')}
+    ${_('Add new user group')}
 </%def>
 
 <%def name="page_nav()">
@@ -46,7 +46,7 @@
              </div>
 
             <div class="buttons">
-              ${h.submit('save',_('save'),class_="ui-btn large")}
+              ${h.submit('save',_('Save'),class_="ui-btn large")}
             </div>
         </div>
     </div>
--- a/rhodecode/templates/admin/users_groups/users_group_edit.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/admin/users_groups/users_group_edit.html	Sun Apr 07 18:37:22 2013 +0200
@@ -2,15 +2,15 @@
 <%inherit file="/base/base.html"/>
 
 <%def name="title()">
-    ${_('Edit users group')} ${c.users_group.users_group_name} - ${c.rhodecode_name}
+    ${_('Edit user group')} ${c.users_group.users_group_name} &middot; ${c.rhodecode_name}
 </%def>
 
 <%def name="breadcrumbs_links()">
     ${h.link_to(_('Admin'),h.url('admin_home'))}
     &raquo;
-    ${h.link_to(_('UsersGroups'),h.url('users_groups'))}
+    ${h.link_to(_('UserGroups'),h.url('users_groups'))}
     &raquo;
-    ${_('edit')} "${c.users_group.users_group_name}"
+    ${_('Edit %s') % c.users_group.users_group_name}
 </%def>
 
 <%def name="page_nav()">
@@ -27,67 +27,67 @@
     ${h.form(url('users_group', id=c.users_group.users_group_id),method='put', id='edit_users_group')}
     <div class="form">
         <!-- fields -->
-	        <div class="fields">
-	             <div class="field">
-	                <div class="label">
-	                    <label for="users_group_name">${_('Group name')}:</label>
-	                </div>
-	                <div class="input">
-	                    ${h.text('users_group_name',class_='small')}
-	                </div>
-	             </div>
+            <div class="fields">
+                 <div class="field">
+                    <div class="label">
+                        <label for="users_group_name">${_('Group name')}:</label>
+                    </div>
+                    <div class="input">
+                        ${h.text('users_group_name',class_='small')}
+                    </div>
+                 </div>
 
-	             <div class="field">
-	                <div class="label label-checkbox">
-	                    <label for="users_group_active">${_('Active')}:</label>
-	                </div>
-	                <div class="checkboxes">
-	                    ${h.checkbox('users_group_active',value=True)}
-	                </div>
-	             </div>
-	            <div class="field">
+                 <div class="field">
+                    <div class="label label-checkbox">
+                        <label for="users_group_active">${_('Active')}:</label>
+                    </div>
+                    <div class="checkboxes">
+                        ${h.checkbox('users_group_active',value=True)}
+                    </div>
+                 </div>
+                <div class="field">
                     <div class="label">
                         <label for="users_group_active">${_('Members')}:</label>
                     </div>
                     <div class="select">
-	                    <table>
-	                            <tr>
-	                                <td>
-	                                    <div>
-	                                        <div style="float:left">
-	                                            <div class="text" style="padding: 0px 0px 6px;">${_('Choosen group members')}</div>
-	                                            ${h.select('users_group_members',[x[0] for x in c.group_members],c.group_members,multiple=True,size=8,style="min-width:210px")}
-	                                           <div  id="remove_all_elements" style="cursor:pointer;text-align:center">
-	                                               ${_('Remove all elements')}
-	                                               <img alt="remove" style="vertical-align:text-bottom" src="${h.url('/images/icons/arrow_right.png')}"/>
-	                                           </div>
-	                                        </div>
-	                                        <div style="float:left;width:20px;padding-top:50px">
-	                                            <img alt="add" id="add_element"
-	                                                style="padding:2px;cursor:pointer"
-	                                                src="${h.url('/images/icons/arrow_left.png')}"/>
-	                                            <br />
-	                                            <img alt="remove" id="remove_element"
-	                                                style="padding:2px;cursor:pointer"
-	                                                src="${h.url('/images/icons/arrow_right.png')}"/>
-	                                        </div>
-	                                        <div style="float:left">
-	                                             <div class="text" style="padding: 0px 0px 6px;">${_('Available members')}</div>
-	                                             ${h.select('available_members',[],c.available_members,multiple=True,size=8,style="min-width:210px")}
-	                                             <div id="add_all_elements" style="cursor:pointer;text-align:center">
-	                                                   <img alt="add" style="vertical-align:text-bottom" src="${h.url('/images/icons/arrow_left.png')}"/>
-	                                                    ${_('Add all elements')}
-	                                             </div>
-	                                        </div>
-	                                    </div>
-	                                </td>
-	                            </tr>
-	                    </table>
+                        <table>
+                                <tr>
+                                    <td>
+                                        <div>
+                                            <div style="float:left">
+                                                <div class="text" style="padding: 0px 0px 6px;">${_('Chosen group members')}</div>
+                                                ${h.select('users_group_members',[x[0] for x in c.group_members],c.group_members,multiple=True,size=8,style="min-width:210px")}
+                                               <div id="remove_all_elements" style="cursor:pointer;text-align:center">
+                                                   ${_('Remove all elements')}
+                                                   <img alt="remove" style="vertical-align:text-bottom" src="${h.url('/images/icons/arrow_right.png')}"/>
+                                               </div>
+                                            </div>
+                                            <div style="float:left;width:20px;padding-top:50px">
+                                                <img alt="add" id="add_element"
+                                                    style="padding:2px;cursor:pointer"
+                                                    src="${h.url('/images/icons/arrow_left.png')}"/>
+                                                <br />
+                                                <img alt="remove" id="remove_element"
+                                                    style="padding:2px;cursor:pointer"
+                                                    src="${h.url('/images/icons/arrow_right.png')}"/>
+                                            </div>
+                                            <div style="float:left">
+                                                 <div class="text" style="padding: 0px 0px 6px;">${_('Available members')}</div>
+                                                 ${h.select('available_members',[],c.available_members,multiple=True,size=8,style="min-width:210px")}
+                                                 <div id="add_all_elements" style="cursor:pointer;text-align:center">
+                                                       <img alt="add" style="vertical-align:text-bottom" src="${h.url('/images/icons/arrow_left.png')}"/>
+                                                        ${_('Add all elements')}
+                                                 </div>
+                                            </div>
+                                        </div>
+                                    </td>
+                                </tr>
+                        </table>
                     </div>
 
                 </div>
                 <div class="buttons">
-                  ${h.submit('save',_('save'),class_="ui-btn large")}
+                  ${h.submit('Save',_('Save'),class_="ui-btn large")}
                 </div>
             </div>
     </div>
@@ -138,9 +138,13 @@
         </div>
     </div>
     ${h.end_form()}
+
+    ## permissions overview
+    <%namespace name="p" file="/base/perms_summary.html"/>
+    ${p.perms_summary(c.users_group.permissions)}
 </div>
 
-<div class="box box-right">
+<div class="box box-right" style="clear:right">
     <!-- box / title -->
     <div class="title">
         <h5>${_('Group members')}</h5>
@@ -165,63 +169,6 @@
     </div>
 </div>
 
-<div class="box box-left">
-    <!-- box / title -->
-    <div class="title">
-        <h5>${_('Permissions defined for this group')}</h5>
-    </div>
- ## permissions overview
-    <div id="perms" class="table">
-       %for section in sorted(c.users_group.permissions.keys()):
-          <div class="perms_section_head">${section.replace("_"," ").capitalize()}</div>
-          %if not c.users_group.permissions:
-              <span class="empty_data">${_('No permissions set yet')}</span>
-          %else:
-          <div id='tbl_list_wrap_${section}' class="yui-skin-sam">
-           <table id="tbl_list_repository">
-            <thead>
-                <tr>
-                <th class="left">${_('Name')}</th>
-                <th class="left">${_('Permission')}</th>
-                <th class="left">${_('Edit Permission')}</th>
-            </thead>
-            <tbody>
-            %for k in c.users_group.permissions[section]:
-                 <%
-                     section_perm = c.users_group.permissions[section].get(k)
-                     _perm = section_perm.split('.')[-1]
-                 %>
-                <tr>
-                    <td>
-                        %if section == 'repositories':
-                            <a href="${h.url('summary_home',repo_name=k)}">${k}</a>
-                        %elif section == 'repositories_groups':
-                            <a href="${h.url('repos_group_home',group_name=k)}">${k}</a>
-                        %endif
-                    </td>
-                    <td>
-                         <span class="perm_tag ${_perm}">${section_perm}</span>
-                    </td>
-                    <td>
-                        %if section == 'repositories':
-                            <a href="${h.url('edit_repo',repo_name=k,anchor='permissions_manage')}">${_('edit')}</a>
-                        %elif section == 'repositories_groups':
-                            <a href="${h.url('edit_repos_group',id=k,anchor='permissions_manage')}">${_('edit')}</a>
-                        %else:
-                            --
-                        %endif
-                    </td>
-                </tr>
-            %endfor
-            </tbody>
-           </table>
-          </div>
-          %endif
-       %endfor
-    </div>
-</div>
-
-
 <script type="text/javascript">
   MultiSelectWidget('users_group_members','available_members','edit_users_group');
 </script>
--- a/rhodecode/templates/admin/users_groups/users_groups.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/admin/users_groups/users_groups.html	Sun Apr 07 18:37:22 2013 +0200
@@ -2,11 +2,13 @@
 <%inherit file="/base/base.html"/>
 
 <%def name="title()">
-    ${_('Users groups administration')} - ${c.rhodecode_name}
+    ${_('User groups administration')} &middot; ${c.rhodecode_name}
 </%def>
 
 <%def name="breadcrumbs_links()">
-    ${h.link_to(_('Admin'),h.url('admin_home'))} &raquo; ${_('Users groups')}
+    ${h.link_to(_('Admin'),h.url('admin_home'))}
+    &raquo;
+    ${_('User groups')}
 </%def>
 
 <%def name="page_nav()">
@@ -20,7 +22,7 @@
         ${self.breadcrumbs()}
         <ul class="links">
           <li>
-            <span>${h.link_to(_(u'ADD NEW USER GROUP'),h.url('new_users_group'))}</span>
+            <span>${h.link_to(_(u'Add new user group'),h.url('new_users_group'))}</span>
           </li>
 
         </ul>
@@ -29,20 +31,20 @@
     <div class="table">
         <table class="table_disp">
         <tr class="header">
-            <th class="left">${_('group name')}</th>
-            <th class="left">${_('members')}</th>
-            <th class="left">${_('active')}</th>
-            <th class="left">${_('action')}</th>
+            <th class="left">${_('Group name')}</th>
+            <th class="left">${_('Members')}</th>
+            <th class="left">${_('Active')}</th>
+            <th class="left">${_('Action')}</th>
         </tr>
             %for cnt,u_group in enumerate(c.users_groups_list):
                 <tr class="parity${cnt%2}">
                     <td>${h.link_to(u_group.users_group_name,h.url('edit_users_group', id=u_group.users_group_id))}</td>
                     <td><span class="tooltip" title="${h.tooltip(', '.join(map(h.safe_unicode,[x.user.username for x in u_group.members[:50]])))}">${len(u_group.members)}</span></td>
-                    <td>${h.bool2icon(u_group.users_group_active)}</td>
+                    <td>${h.boolicon(u_group.users_group_active)}</td>
                     <td>
                         ${h.form(url('users_group', id=u_group.users_group_id),method='delete')}
                             ${h.submit('remove_',_('delete'),id="remove_group_%s" % u_group.users_group_id,
-                            class_="delete_icon action_button",onclick="return  confirm('"+_('Confirm to delete this users group: %s') % u_group.users_group_name+"');")}
+                            class_="delete_icon action_button",onclick="return  confirm('"+_('Confirm to delete this user group: %s') % u_group.users_group_name+"');")}
                         ${h.end_form()}
                     </td>
                 </tr>
--- a/rhodecode/templates/base/base.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/base/base.html	Sun Apr 07 18:37:22 2013 +0200
@@ -2,8 +2,9 @@
 <%inherit file="root.html"/>
 
 <!-- HEADER -->
+<div id="header-dd"></div>
 <div id="header">
-    <div id="header-inner" class="title hover">
+    <div id="header-inner" class="title">
         <div id="logo">
             <h1><a href="${h.url('home')}">${c.rhodecode_name}</a></h1>
         </div>
@@ -40,39 +41,158 @@
            <p class="footer-link">
                 <a href="${h.url('bugtracker')}">${_('Submit a bug')}</a>
            </p>
-	       <p class="footer-link-right">
-	           <a href="${h.url('rhodecode_official')}">RhodeCode${'-%s' % c.rhodecode_instanceid if c.rhodecode_instanceid else ''}</a>
-	           ${c.rhodecode_version} &copy; 2010-${h.datetime.today().year} by Marcin Kuzminski
-	       </p>
+           <p class="footer-link-right">
+               <a href="${h.url('rhodecode_official')}">RhodeCode ${c.rhodecode_version}</a>
+               &copy; 2010-${h.datetime.today().year} by Marcin Kuzminski and others
+               ${'(%s)' % c.rhodecode_instanceid if c.rhodecode_instanceid else ''}
+           </p>
        </div>
    </div>
 </div>
+
 <!-- END FOOTER -->
 
 ### MAKO DEFS ###
-<%def name="page_nav()">
-    ${self.menu()}
-</%def>
-
 <%def name="breadcrumbs()">
     <div class="breadcrumbs">
     ${self.breadcrumbs_links()}
     </div>
 </%def>
 
+<%def name="context_bar(current)">
+    ${repo_context_bar(current)}
+</%def>
+
+<%def name="admin_menu()">
+  <ul class="admin_menu">
+      <li>${h.link_to(_('Admin journal'),h.url('admin_home'),class_='journal ')}</li>
+      <li>${h.link_to(_('Repositories'),h.url('repos'),class_='repos')}</li>
+      <li>${h.link_to(_('Repository groups'),h.url('repos_groups'),class_='repos_groups')}</li>
+      <li>${h.link_to(_('Users'),h.url('users'),class_='users')}</li>
+      <li>${h.link_to(_('User groups'),h.url('users_groups'),class_='groups')}</li>
+      <li>${h.link_to(_('Permissions'),h.url('edit_permission',id='default'),class_='permissions')}</li>
+      <li>${h.link_to(_('LDAP'),h.url('ldap_home'),class_='ldap')}</li>
+      <li>${h.link_to(_('Defaults'),h.url('defaults'),class_='defaults')}</li>
+      <li class="last">${h.link_to(_('Settings'),h.url('admin_settings'),class_='settings')}</li>
+  </ul>
+</%def>
+
+<%def name="admin_menu_simple()">
+  <ul>
+      <li>${h.link_to(_('Repository groups'),h.url('repos_groups'),class_='repos_groups')}</li>
+  </ul>
+</%def>
+
+<%def name="repo_context_bar(current=None)">
+  <%
+      def follow_class():
+          if c.repository_following:
+              return h.literal('following')
+          else:
+              return h.literal('follow')
+  %>
+  <%
+    def is_current(selected):
+        if selected == current:
+            return h.literal('class="current"')
+    %>
+
+  <!--- CONTEXT BAR -->
+  <div id="context-bar" class="box">
+      <div id="breadcrumbs">
+        ${h.link_to(_(u'Repositories'),h.url('home'))}
+        &raquo;
+        ${h.repo_link(c.rhodecode_db_repo.groups_and_repo)}
+      </div>
+      <ul id="context-pages" class="horizontal-list">
+        <li ${is_current('summary')}><a href="${h.url('summary_home', repo_name=c.repo_name)}" class="summary">${_('Summary')}</a></li>
+        <li ${is_current('changelog')}><a href="${h.url('changelog_home', repo_name=c.repo_name)}" class="changelogs">${_('Changelog')}</a></li>
+        <li ${is_current('files')}><a href="${h.url('files_home', repo_name=c.repo_name)}" class="files"></span>${_('Files')}</a></li>
+        <li ${is_current('switch-to')}>
+          <a href="#" id="branch_tag_switcher_2" class="dropdown switch-to"></span>${_('Switch To')}</a>
+          <ul id="switch_to_list_2" class="switch_to submenu">
+            <li><a href="#">${_('loading...')}</a></li>
+          </ul>
+        </li>
+        <li ${is_current('options')}>
+          <a href="#" class="dropdown options"></span>${_('Options')}</a>
+          <ul>
+             %if h.HasRepoPermissionAll('repository.admin')(c.repo_name):
+                   <li>${h.link_to(_('Settings'),h.url('edit_repo',repo_name=c.repo_name),class_='settings')}</li>
+             %endif
+              %if c.rhodecode_db_repo.fork:
+               <li>${h.link_to(_('Compare fork'),h.url('compare_url',repo_name=c.rhodecode_db_repo.fork.repo_name,org_ref_type='branch',org_ref='default',other_repo=c.repo_name,other_ref_type='branch',other_ref=request.GET.get('branch') or 'default', merge=1),class_='compare_request')}</li>
+              %endif
+              <li>${h.link_to(_('Lightweight changelog'),h.url('shortlog_home',repo_name=c.repo_name),class_='shortlog')}</li>
+              <li>${h.link_to(_('Search'),h.url('search_repo',repo_name=c.repo_name),class_='search')}</li>
+
+              %if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name) and c.rhodecode_db_repo.enable_locking:
+                %if c.rhodecode_db_repo.locked[0]:
+                  <li>${h.link_to(_('Unlock'), h.url('toggle_locking',repo_name=c.repo_name),class_='locking_del')}</li>
+                %else:
+                  <li>${h.link_to(_('Lock'), h.url('toggle_locking',repo_name=c.repo_name),class_='locking_add')}</li>
+                %endif
+              %endif
+              ## TODO: this check feels wrong, it would be better to have a check for permissions
+              ## also it feels like a job for the controller
+              %if c.rhodecode_user.username != 'default':
+                  <li>
+                   <a class="${follow_class()}" onclick="javascript:toggleFollowingRepo(this,${c.rhodecode_db_repo.repo_id},'${str(h.get_token())}');">
+                    <span class="show-follow">${_('Follow')}</span>
+                    <span class="show-following">${_('Unfollow')}</span>
+                  </a>
+                  </li>
+                  <li><a href="${h.url('repo_fork_home',repo_name=c.repo_name)}" class="fork">${_('Fork')}</a></li>
+                  %if h.is_hg(c.rhodecode_repo):
+                  <li><a href="${h.url('pullrequest_home',repo_name=c.repo_name)}" class="pull-request">${_('Create Pull Request')}</a></li>
+                  %endif
+              %endif
+             </ul>
+        </li>
+        <li ${is_current('showpullrequest')}>
+          <a href="${h.url('pullrequest_show_all',repo_name=c.repo_name)}" title="${_('Show Pull Requests')}" class="pull-request">${_('Pull Requests')}
+            %if c.repository_pull_requests:
+              <span>${c.repository_pull_requests}</span>
+            %endif
+          </a>
+        </li>
+      </ul>
+  </div>
+  <script type="text/javascript">
+      YUE.on('branch_tag_switcher_2','mouseover',function(){
+         var loaded = YUD.hasClass('branch_tag_switcher_2','loaded');
+         if(!loaded){
+             YUD.addClass('branch_tag_switcher_2','loaded');
+             ypjax("${h.url('branch_tag_switcher',repo_name=c.repo_name)}",'switch_to_list_2',
+                 function(o){},
+                 function(o){YUD.removeClass('branch_tag_switcher_2','loaded');}
+                 ,null);
+         }
+         return false;
+      });
+  </script>
+  <!--- END CONTEXT BAR -->
+</%def>
+
 <%def name="usermenu()">
+    ## USER MENU
+    <li>
+      <a class="menu_link childs" id="quick_login_link">
+          <span class="icon">
+             <img src="${h.gravatar_url(c.rhodecode_user.email,20)}" alt="avatar">
+          </span>
+          %if c.rhodecode_user.username != 'default':
+            <span class="menu_link_user">${c.rhodecode_user.username}</span>
+            %if c.unread_notifications != 0:
+              <span class="menu_link_notifications">${c.unread_notifications}</span>
+            %endif
+          %else:
+              <span>${_('Not logged in')}</span>
+          %endif
+      </a>
+
   <div class="user-menu">
-      <div class="container">
-       <div class="gravatar" id="quick_login_link">
-           <img alt="gravatar" src="${h.gravatar_url(c.rhodecode_user.email,24)}" />
-       </div>
-       %if c.rhodecode_user.username != 'default' and c.unread_notifications != 0:
-        <div class="notifications">
-          <a id="notification_counter" href="${h.url('notifications')}">${c.unread_notifications}</a>
-        </div>
-       %endif
-      </div>
-      <div id="quick_login" style="display:none">
+      <div id="quick_login">
         %if c.rhodecode_user.username == 'default':
             <h4>${_('Login to your account')}</h4>
             ${h.form(h.url('login_home',came_from=h.url.current()))}
@@ -83,7 +203,7 @@
                             <label for="username">${_('Username')}:</label>
                         </div>
                         <div class="input">
-                            ${h.text('username',class_='focus',size=40)}
+                            ${h.text('username',class_='focus')}
                         </div>
 
                     </div>
@@ -92,7 +212,7 @@
                             <label for="password">${_('Password')}:</label>
                         </div>
                         <div class="input">
-                            ${h.password('password',class_='focus',size=40)}
+                            ${h.password('password',class_='focus')}
                         </div>
 
                     </div>
@@ -112,251 +232,105 @@
             ${h.end_form()}
         %else:
             <div class="links_left">
+                <div class="big_gravatar"><img alt="gravatar" src="${h.gravatar_url(c.rhodecode_user.email,48)}" /></div>
                 <div class="full_name">${c.rhodecode_user.full_name_or_username}</div>
                 <div class="email">${c.rhodecode_user.email}</div>
-                <div class="big_gravatar"><img alt="gravatar" src="${h.gravatar_url(c.rhodecode_user.email,48)}" /></div>
-                <div class="inbox"><a href="${h.url('notifications')}">${_('Inbox')}: ${c.unread_notifications}</a></div>
             </div>
             <div class="links_right">
             <ol class="links">
-              <li>${h.link_to(_(u'Home'),h.url('home'))}</li>
-              <li>${h.link_to(_(u'Journal'),h.url('journal'))}</li>
+              <li><a href="${h.url('notifications')}">${_('Notifications')}: ${c.unread_notifications}</a></li>
               <li>${h.link_to(_(u'My account'),h.url('admin_settings_my_account'))}</li>
               <li class="logout">${h.link_to(_(u'Log Out'),h.url('logout_home'))}</li>
             </ol>
             </div>
         %endif
       </div>
- </div>
+  </div>
+
+    </li>
 </%def>
 
 <%def name="menu(current=None)">
-		<%
-		def is_current(selected):
-			if selected == current:
-				return h.literal('class="current"')
-		%>
-		%if current not in ['home','admin']:
-		   ##REGULAR MENU
-	        <ul id="quick">
-				<!-- repo switcher -->
-				<li>
-					<a class="menu_link" id="repo_switcher" title="${_('Switch repository')}" href="#">
-                    <span class="icon">
-                        <img src="${h.url('/images/icons/database.png')}" alt="${_('Products')}" />
-                    </span>
-                    <span>&darr;</span>
-					</a>
-					<ul id="repo_switcher_list" class="repo_switcher">
-                        <li>
-                            <a href="#">${_('loading...')}</a>
-                        </li>
-					</ul>
-				</li>
-
-	            <li ${is_current('summary')}>
-	               <a class="menu_link" title="${_('Summary')}" href="${h.url('summary_home',repo_name=c.repo_name)}">
-	               <span class="icon">
-	                   <img src="${h.url('/images/icons/clipboard_16.png')}" alt="${_('Summary')}" />
-	               </span>
-	               <span>${_('Summary')}</span>
-	               </a>
-	            </li>
-                <li ${is_current('changelog')}>
-                   <a class="menu_link" title="${_('Changelog')}" href="${h.url('changelog_home',repo_name=c.repo_name)}">
-                   <span class="icon">
-                       <img src="${h.url('/images/icons/time.png')}" alt="${_('Changelog')}" />
-                   </span>
-                   <span>${_('Changelog')}</span>
-                   </a>
-                </li>
-
-                <li ${is_current('switch_to')}>
-                   <a class="menu_link" id="branch_tag_switcher" title="${_('Switch to')}" href="#">
-                   <span class="icon">
-                       <img src="${h.url('/images/icons/arrow_switch.png')}" alt="${_('Switch to')}" />
-                   </span>
-                   <span>${_('Switch to')}</span>
-                   </a>
-                    <ul id="switch_to_list" class="switch_to">
-                        <li><a href="#">${_('loading...')}</a></li>
-                    </ul>
-                </li>
-                <li ${is_current('files')}>
-                   <a class="menu_link" title="${_('Files')}" href="${h.url('files_home',repo_name=c.repo_name)}">
-                   <span class="icon">
-                       <img src="${h.url('/images/icons/file.png')}" alt="${_('Files')}" />
-                   </span>
-                   <span>${_('Files')}</span>
-                   </a>
-                </li>
-
-                <li ${is_current('options')}>
-                   <a class="menu_link" title="${_('Options')}" href="#">
-                   <span class="icon">
-                       <img src="${h.url('/images/icons/table_gear.png')}" alt="${_('Admin')}" />
-                   </span>
-                   <span>${_('Options')}</span>
-                   </a>
-                   <ul>
-                   %if h.HasRepoPermissionAll('repository.admin')(c.repo_name):
-                     %if h.HasPermissionAll('hg.admin')('access settings on repository'):
-                         <li>${h.link_to(_('repository settings'),h.url('edit_repo',repo_name=c.repo_name),class_='settings')}</li>
-                     %else:
-                         <li>${h.link_to(_('repository settings'),h.url('repo_settings_home',repo_name=c.repo_name),class_='settings')}</li>
-                     %endif
-                   %endif
-
-                   	<li>${h.link_to(_('fork'),h.url('repo_fork_home',repo_name=c.repo_name),class_='fork')}</li>
-                    %if h.is_hg(c.rhodecode_repo):
-                     <li>${h.link_to(_('Open new pull request'),h.url('pullrequest_home',repo_name=c.repo_name),class_='pull_request')}</li>
-                    %endif
-                    %if c.rhodecode_db_repo.fork:
-                     <li>${h.link_to(_('Compare fork'),h.url('compare_url',repo_name=c.repo_name,org_ref_type='branch',org_ref=request.GET.get('branch') or 'default',other_ref_type='branch',other_ref='default',repo=c.rhodecode_db_repo.fork.repo_name),class_='compare_request')}</li>
-                    %endif
-                   	<li>${h.link_to(_('search'),h.url('search_repo',search_repo=c.repo_name),class_='search')}</li>
-
-                    %if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name) and c.rhodecode_db_repo.enable_locking:
-                      %if c.rhodecode_db_repo.locked[0]:
-                        <li>${h.link_to(_('unlock'), h.url('toggle_locking',repo_name=c.repo_name),class_='locking_del')}</li>
-                      %else:
-                        <li>${h.link_to(_('lock'), h.url('toggle_locking',repo_name=c.repo_name),class_='locking_add')}</li>
-                      %endif
-                    %endif
+        <%
+        def is_current(selected):
+            if selected == current:
+                return h.literal('class="current"')
+        %>
+        <ul id="quick" class="horizontal-list">
+          <!-- repo switcher -->
+          <li ${is_current('repositories')}>
+              <a class="menu_link repo_switcher childs" id="repo_switcher" title="${_('Switch repository')}" href="${h.url('home')}">
+              ${_('Repositories')}
+              </a>
+              <ul id="repo_switcher_list" class="repo_switcher">
+                  <li>
+                      <a href="#">${_('loading...')}</a>
+                  </li>
+              </ul>
+          </li>
+          ##ROOT MENU
+          %if c.rhodecode_user.username != 'default':
+            <li ${is_current('journal')}>
+              <a class="menu_link journal" title="${_('Show recent activity')}"  href="${h.url('journal')}">
+              ${_('Journal')}
+              </a>
+            </li>
+          %else:
+            <li ${is_current('journal')}>
+              <a class="menu_link journal" title="${_('Public journal')}"  href="${h.url('public_journal')}">
+              ${_('Public journal')}
+              </a>
+            </li>
+          %endif
+          <li ${is_current('search')}>
+              <a class="menu_link search" title="${_('Search in repositories')}"  href="${h.url('search')}">
+              ${_('Search')}
+              </a>
+          </li>
+          % if h.HasPermissionAll('hg.admin')('access admin main page'):
+            <li ${is_current('admin')}>
+              <a class="menu_link admin childs" title="${_('Admin')}" href="${h.url('admin_home')}">
+                ${_('Admin')}
+              </a>
+              ${admin_menu()}
+            </li>
+          % elif c.rhodecode_user.groups_admin:
+          <li ${is_current('admin')}>
+              <a class="menu_link admin childs" title="${_('Admin')}">
+                ${_('Admin')}
+              </a>
+              ${admin_menu_simple()}
+          </li>
+          % endif
+          ${usermenu()}
+<script type="text/javascript">
+    YUE.on('repo_switcher','mouseover',function(){
+      var target = 'q_filter_rs';
+      var qfilter_activate = function(){
+          var nodes = YUQ('ul#repo_switcher_list li a.repo_name');
+          var func = function(node){
+              return node.parentNode;
+          }
+          q_filter(target,nodes,func);
+      }
 
-                    % if h.HasPermissionAll('hg.admin')('access admin main page'):
-                     <li>
-                       ${h.link_to(_('admin'),h.url('admin_home'),class_='admin')}
-                        <%def name="admin_menu()">
-                        <ul>
-                            <li>${h.link_to(_('journal'),h.url('admin_home'),class_='journal')}</li>
-                            <li>${h.link_to(_('repositories'),h.url('repos'),class_='repos')}</li>
-                            <li>${h.link_to(_('repositories groups'),h.url('repos_groups'),class_='repos_groups')}</li>
-                            <li>${h.link_to(_('users'),h.url('users'),class_='users')}</li>
-                            <li>${h.link_to(_('users groups'),h.url('users_groups'),class_='groups')}</li>
-                            <li>${h.link_to(_('permissions'),h.url('edit_permission',id='default'),class_='permissions')}</li>
-                            <li>${h.link_to(_('ldap'),h.url('ldap_home'),class_='ldap')}</li>
-                            <li>${h.link_to(_('defaults'),h.url('defaults'),class_='defaults')}</li>
-                            <li class="last">${h.link_to(_('settings'),h.url('admin_settings'),class_='settings')}</li>
-                        </ul>
-                        </%def>
-                        ## ADMIN MENU
-                        ${admin_menu()}
-                     </li>
-                    % endif
-                   </ul>
-                </li>
+      var loaded = YUD.hasClass('repo_switcher','loaded');
+      if(!loaded){
+         YUD.addClass('repo_switcher','loaded');
+         ypjax("${h.url('repo_switcher')}",'repo_switcher_list',
+             function(o){qfilter_activate();YUD.get(target).focus()},
+             function(o){YUD.removeClass('repo_switcher','loaded');}
+             ,null);
+      }else{
+         YUD.get(target).focus();
+      }
+      return false;
+     });
 
-                <li>
-                    <a class="menu_link" title="${_('Followers')}" href="${h.url('repo_followers_home',repo_name=c.repo_name)}">
-                    <span class="icon_short">
-                        <img src="${h.url('/images/icons/heart.png')}" alt="${_('Followers')}" />
-                    </span>
-                    <span id="current_followers_count" class="short">${c.repository_followers}</span>
-                    </a>
-                </li>
-                <li>
-                    <a class="menu_link" title="${_('Forks')}" href="${h.url('repo_forks_home',repo_name=c.repo_name)}">
-                    <span class="icon_short">
-                        <img src="${h.url('/images/icons/arrow_divide.png')}" alt="${_('Forks')}" />
-                    </span>
-                    <span class="short">${c.repository_forks}</span>
-                    </a>
-                </li>
-                <li>
-                    <a class="menu_link" title="${_('Pull requests')}" href="${h.url('pullrequest_show_all',repo_name=c.repo_name)}">
-                    <span class="icon_short">
-                        <img src="${h.url('/images/icons/arrow_join.png')}" alt="${_('Pull requests')}" />
-                    </span>
-                    <span class="short">${c.repository_pull_requests}</span>
-                    </a>
-                </li>
-                ${usermenu()}
-	        </ul>
-            <script type="text/javascript">
-               YUE.on('repo_switcher','mouseover',function(){
-                      function qfilter(){
-                          var nodes = YUQ('ul#repo_switcher_list li a.repo_name');
-                          var target = 'q_filter_rs';
-                          var func = function(node){
-                              return node.parentNode;
-                          }
-                          q_filter(target,nodes,func);
-                      }
-                   var loaded = YUD.hasClass('repo_switcher','loaded');
-                   if(!loaded){
-                       YUD.addClass('repo_switcher','loaded');
-                       ypjax("${h.url('repo_switcher')}",'repo_switcher_list',
-                           function(o){qfilter();},
-                           function(o){YUD.removeClass('repo_switcher','loaded');}
-                           ,null);
-                   }
-                   return false;
-               });
+     YUE.on('header-dd', 'click',function(e){
+         YUD.addClass('header-inner', 'hover');
+         YUD.addClass('content', 'hover');
+     });
 
-              YUE.on('branch_tag_switcher','mouseover',function(){
-                 var loaded = YUD.hasClass('branch_tag_switcher','loaded');
-                 if(!loaded){
-                     YUD.addClass('branch_tag_switcher','loaded');
-                     ypjax("${h.url('branch_tag_switcher',repo_name=c.repo_name)}",'switch_to_list',
-                         function(o){},
-                         function(o){YUD.removeClass('branch_tag_switcher','loaded');}
-                         ,null);
-                 }
-                 return false;
-              });
-            </script>
-		%else:
-		    ##ROOT MENU
-            <ul id="quick">
-                <li>
-                    <a class="menu_link" title="${_('Home')}"  href="${h.url('home')}">
-                    <span class="icon">
-                        <img src="${h.url('/images/icons/home_16.png')}" alt="${_('Home')}" />
-                    </span>
-                    <span>${_('Home')}</span>
-                    </a>
-                </li>
-                %if c.rhodecode_user.username != 'default':
-                 <li>
-                    <a class="menu_link" title="${_('Journal')}"  href="${h.url('journal')}">
-                    <span class="icon">
-                        <img src="${h.url('/images/icons/book.png')}" alt="${_('Journal')}" />
-                    </span>
-                    <span>${_('Journal')}</span>
-                    </a>
-                 </li>
-                %else:
-                 <li>
-                    <a class="menu_link" title="${_('Public journal')}"  href="${h.url('public_journal')}">
-                    <span class="icon">
-                        <img src="${h.url('/images/icons/book.png')}" alt="${_('Public journal')}" />
-                    </span>
-                    <span>${_('Public journal')}</span>
-                    </a>
-                 </li>
-                %endif
-                <li>
-                    <a class="menu_link" title="${_('Search')}"  href="${h.url('search')}">
-                    <span class="icon">
-                        <img src="${h.url('/images/icons/search_16.png')}" alt="${_('Search')}" />
-                    </span>
-                    <span>${_('Search')}</span>
-                    </a>
-                </li>
-
-				%if h.HasPermissionAll('hg.admin')('access admin main page'):
-                <li ${is_current('admin')}>
-                   <a class="menu_link" title="${_('Admin')}" href="${h.url('admin_home')}">
-                   <span class="icon">
-                       <img src="${h.url('/images/icons/cog_edit.png')}" alt="${_('Admin')}" />
-                   </span>
-                   <span>${_('Admin')}</span>
-                   </a>
-                    ${admin_menu()}
-                </li>
-				%endif
-                ${usermenu()}
-			</ul>
-		%endif
+</script>
 </%def>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rhodecode/templates/base/perms_summary.html	Sun Apr 07 18:37:22 2013 +0200
@@ -0,0 +1,63 @@
+## snippet for displaying permissions overview for users
+
+<%def name="perms_summary(permissions)">
+<div id="perms" class="table">
+     %for section in sorted(permissions.keys()):
+        <div class="perms_section_head">${section.replace("_"," ").capitalize()}</div>
+        %if not permissions[section]:
+            <span class="empty_data">${_('No permissions defined yet')}</span>
+        %else:
+        <div id='tbl_list_wrap_${section}' class="yui-skin-sam">
+         <table id="tbl_list_${section}">
+          <thead>
+              <tr>
+              <th class="left">${_('Name')}</th>
+              <th class="left">${_('Permission')}</th>
+              <th class="left">${_('Edit Permission')}</th>
+          </thead>
+          <tbody>
+          %if section == 'global':
+              %for k in sorted(permissions[section], key=lambda s: s.lower()):
+                  <tr>
+                      <td>
+                          ${h.get_permission_name(k)}
+                      </td>
+                      <td>
+                           ${h.boolicon(k.split('.')[-1] != 'none')}
+                      </td>
+                      <td>
+                           <a href="${h.url('edit_permission', id='default')}">${_('edit')}</a>
+                      </td>
+                  </tr>
+              %endfor
+          %else:
+              %for k, section_perm in sorted(permissions[section].items(), key=lambda s: s[1]+s[0].lower()):
+                  <tr>
+                      <td>
+                          %if section == 'repositories':
+                              <a href="${h.url('summary_home',repo_name=k)}">${k}</a>
+                          %elif section == 'repositories_groups':
+                              <a href="${h.url('repos_group_home',group_name=k)}">${k}</a>
+                          %endif
+                      </td>
+                      <td>
+                           <span class="perm_tag ${section_perm.split('.')[-1]}">${section_perm}</span>
+                      </td>
+                      <td>
+                          %if section == 'repositories':
+                              <a href="${h.url('edit_repo',repo_name=k,anchor='permissions_manage')}">${_('edit')}</a>
+                          %elif section == 'repositories_groups':
+                              <a href="${h.url('edit_repos_group',group_name=k,anchor='permissions_manage')}">${_('edit')}</a>
+                          %endif
+                      </td>
+                  </tr>
+              %endfor
+          %endif
+
+          </tbody>
+         </table>
+        </div>
+        %endif
+     %endfor
+</div>
+</%def>
--- a/rhodecode/templates/base/root.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/base/root.html	Sun Apr 07 18:37:22 2013 +0200
@@ -11,6 +11,7 @@
         <%def name="css()">
             <link rel="stylesheet" type="text/css" href="${h.url('/css/style.css', ver=c.rhodecode_version)}" media="screen"/>
             <link rel="stylesheet" type="text/css" href="${h.url('/css/pygments.css', ver=c.rhodecode_version)}"/>
+            <link rel="stylesheet" type="text/css" href="${h.url('/css/contextbar.css', ver=c.rhodecode_version)}"/>
             ## EXTRA FOR CSS
             ${self.css_extra()}
         </%def>
@@ -21,40 +22,44 @@
 
         %if c.ga_code:
         <!-- Analytics -->
-	     <script type="text/javascript">
-	      var _gaq = _gaq || [];
-	      _gaq.push(['_setAccount', '${c.ga_code}']);
-	      _gaq.push(['_trackPageview']);
+        <script type="text/javascript">
+            var _gaq = _gaq || [];
+            _gaq.push(['_setAccount', '${c.ga_code}']);
+            _gaq.push(['_trackPageview']);
 
-	      (function() {
-	        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
-	        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
-	        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
-	      })();
-	     </script>
-	    %endif
+            (function() {
+                var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+                ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+                var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+                })();
+        </script>
+        %endif
 
         ## JAVASCRIPT ##
         <%def name="js()">
             <script type="text/javascript">
             //JS translations map
             var TRANSLATION_MAP = {
-                'add another comment':'${_("add another comment")}',
+                'Add another comment':'${_("Add another comment")}',
                 'Stop following this repository':"${_('Stop following this repository')}",
                 'Start following this repository':"${_('Start following this repository')}",
                 'Group':"${_('Group')}",
                 'members':"${_('members')}",
-                'loading...':"${_('loading...')}",
-                'search truncated': "${_('search truncated')}",
-                'no matching files': "${_('no matching files')}",
+                'Loading ...':"${_('Loading ...')}",
+                'Search truncated': "${_('Search truncated')}",
+                'No matching files': "${_('No matching files')}",
                 'Open new pull request': "${_('Open new pull request')}",
                 'Open new pull request for selected changesets':  "${_('Open new pull request for selected changesets')}",
-                'Show selected changes __S -> __E': "${_('Show selected changes __S -> __E')}",
+                'Show selected changesets __S -> __E': "${_('Show selected changesets __S -> __E')}",
+                'Show selected changeset __S': "${_('Show selected changeset __S')}",
                 'Selection link': "${_('Selection link')}",
+                'Collapse diff': "${_('Collapse diff')}",
+                'Expand diff': "${_('Expand diff')}"
             };
             var _TM = TRANSLATION_MAP;
+
             var TOGGLE_FOLLOW_URL  = "${h.url('toggle_following')}";
-            var LAZY_CS_URL = "${h.url('changeset_info', repo_name='__NAME__', revision='__REV__')}"
+
             </script>
             <script type="text/javascript" src="${h.url('/js/yui.2.9.js', ver=c.rhodecode_version)}"></script>
             <!--[if lt IE 9]>
@@ -62,6 +67,7 @@
             <![endif]-->
             <script type="text/javascript" src="${h.url('/js/yui.flot.js', ver=c.rhodecode_version)}"></script>
             <script type="text/javascript" src="${h.url('/js/native.history.js', ver=c.rhodecode_version)}"></script>
+            <script type="text/javascript" src="${h.url('/js/pyroutes_map.js', ver=c.rhodecode_version)}"></script>
             <script type="text/javascript" src="${h.url('/js/rhodecode.js', ver=c.rhodecode_version)}"></script>
            ## EXTRA FOR JS
            ${self.js_extra()}
@@ -80,24 +86,10 @@
               tooltip_activate();
               show_more_event();
               show_changeset_tooltip();
-
-              YUE.on('quick_login_link','click',function(e){
-                 // make sure we don't redirect
-                 YUE.preventDefault(e);
-
-                 if(YUD.hasClass('quick_login_link','enabled')){
-                     YUD.setStyle('quick_login','display','none');
-                     YUD.removeClass('quick_login_link','enabled');
-                 }
-                 else{
-                     YUD.setStyle('quick_login','display','');
-                     YUD.addClass('quick_login_link','enabled');
-                     var usr = YUD.get('username');
-                     if(usr){
-                    	 usr.focus();
-                     }
-                 }
-              });
+              // routes registration
+              pyroutes.register('toggle_following', "${h.url('toggle_following')}");
+              pyroutes.register('changeset_info', "${h.url('changeset_info', repo_name='%(repo_name)s', revision='%(revision)s')}", ['repo_name', 'revision']);
+              pyroutes.register('repo_size', "${h.url('repo_size', repo_name='%(repo_name)s')}", ['repo_name']);
            })
             </script>
         </%def>
--- a/rhodecode/templates/bookmarks/bookmarks.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/bookmarks/bookmarks.html	Sun Apr 07 18:37:22 2013 +0200
@@ -2,23 +2,20 @@
 <%inherit file="/base/base.html"/>
 
 <%def name="title()">
-    ${_('%s Bookmarks') % c.repo_name} - ${c.rhodecode_name}
+    ${_('%s Bookmarks') % c.repo_name} &middot; ${c.rhodecode_name}
 </%def>
 
-
 <%def name="breadcrumbs_links()">
-    <input class="q_filter_box" id="q_filter_bookmarks" size="15" type="text" name="filter" value="${_('quick filter...')}"/>
-    ${h.link_to(_(u'Home'),h.url('/'))}
-    &raquo;
-    ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
-    &raquo;
-    ${_('bookmarks')}
+    <input class="q_filter_box" id="q_filter_bookmarks" size="15" type="text" name="filter" placeholder="${_('quick filter...')}" value=""/>
+    ${_('Bookmarks')}
 </%def>
 
 <%def name="page_nav()">
-    ${self.menu('bookmarks')}
+    ${self.menu('repositories')}
 </%def>
+
 <%def name="main()">
+${self.context_bar('switch-to')}
 <div class="box">
     <!-- box / title -->
     <div class="title">
@@ -29,6 +26,7 @@
         <%include file='bookmarks_data.html'/>
     </div>
 </div>
+
 <script type="text/javascript">
 
 // main table sorting
--- a/rhodecode/templates/bookmarks/bookmarks_data.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/bookmarks/bookmarks_data.html	Sun Apr 07 18:37:22 2013 +0200
@@ -1,16 +1,16 @@
 %if c.repo_bookmarks:
    <div id="table_wrap" class="yui-skin-sam">
     <table id="bookmarks_data">
-      <thead>
-    	<tr>
+    <thead>
+        <tr>
             <th class="left">${_('Name')}</th>
             <th class="left">${_('Date')}</th>
             <th class="left">${_('Author')}</th>
             <th class="left">${_('Revision')}</th>
-    	</tr>
-      </thead>
-		%for cnt,book in enumerate(c.repo_bookmarks.items()):
-		<tr class="parity${cnt%2}">
+        </tr>
+    </thead>
+    %for cnt,book in enumerate(c.repo_bookmarks.items()):
+        <tr class="parity${cnt%2}">
             <td>
                 <span class="logbooks">
                     <span class="bookbook">${h.link_to(book[0],
@@ -18,16 +18,16 @@
                 </span>
             </td>
             <td><span class="tooltip" title="${h.tooltip(h.age(book[1].date))}">${h.fmt_date(book[1].date)}</span></td>
-	        <td title="${book[1].author}">${h.person(book[1].author)}</td>
-	        <td>
+            <td title="${book[1].author}">${h.person(book[1].author)}</td>
+            <td>
               <div>
                   <pre><a href="${h.url('files_home',repo_name=c.repo_name,revision=book[1].raw_id)}">r${book[1].revision}:${h.short_id(book[1].raw_id)}</a></pre>
               </div>
             </td>
-		</tr>
-		%endfor
+        </tr>
+    %endfor
     </table>
     </div>
 %else:
-	${_('There are no bookmarks yet')}
+    ${_('There are no bookmarks yet')}
 %endif
--- a/rhodecode/templates/branches/branches.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/branches/branches.html	Sun Apr 07 18:37:22 2013 +0200
@@ -2,23 +2,20 @@
 <%inherit file="/base/base.html"/>
 
 <%def name="title()">
-    ${_('%s Branches') % c.repo_name} - ${c.rhodecode_name}
+    ${_('%s Branches') % c.repo_name} &middot; ${c.rhodecode_name}
 </%def>
 
 <%def name="breadcrumbs_links()">
-    <input class="q_filter_box" id="q_filter_branches" size="15" type="text" name="filter" value="${_('quick filter...')}"/>
-    ${h.link_to(_(u'Home'),h.url('/'))}
-    &raquo;
-    ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
-    &raquo;
-    ${_('branches')}
+    <input class="q_filter_box" id="q_filter_branches" size="15" type="text" name="filter" placeholder="${_('quick filter...')}" value=""/>
+    ${_('Branches')}
 </%def>
 
 <%def name="page_nav()">
-    ${self.menu('branches')}
+    ${self.menu('repositories')}
 </%def>
 
 <%def name="main()">
+${self.context_bar('switch-to')}
 <div class="box">
     <!-- box / title -->
     <div class="title">
@@ -26,7 +23,7 @@
     </div>
     <!-- end box / title -->
     %if c.repo_branches:
-    <div class="info_box" id="compare_branches" style="clear: both;padding: 10px 19px;vertical-align: right;text-align: right;"><a href="#" class="ui-btn small">${_('Compare branches')}</a></div>
+    <div class="info_box" id="compare_branches" style="clear: both;padding: 10px 19px;text-align: right;"><a href="#" class="ui-btn small">${_('Compare branches')}</a></div>
     %endif
     <div class="table">
         <%include file='branches_data.html'/>
@@ -34,16 +31,16 @@
 </div>
 <script type="text/javascript">
 YUE.on('compare_branches','click',function(e){
-	YUE.preventDefault(e);
-	var org = YUQ('input[name=compare_org]:checked')[0];
-	var other = YUQ('input[name=compare_other]:checked')[0];
+    YUE.preventDefault(e);
+    var org = YUQ('input[name=compare_org]:checked')[0];
+    var other = YUQ('input[name=compare_other]:checked')[0];
 
-	if(org && other){
-	    var compare_url = "${h.url('compare_url',repo_name=c.repo_name,org_ref_type='branch',org_ref='__ORG__',other_ref_type='branch',other_ref='__OTHER__')}";
-		var u = compare_url.replace('__ORG__',org.value)
-		                   .replace('__OTHER__',other.value);
-		window.location=u;
-	}
+    if(org && other){
+        var compare_url = "${h.url('compare_url',repo_name=c.repo_name,org_ref_type='branch',org_ref='__ORG__',other_ref_type='branch',other_ref='__OTHER__')}";
+        var u = compare_url.replace('__ORG__',org.value)
+                           .replace('__OTHER__',other.value);
+        window.location=u;
+    }
 });
 // main table sorting
 var myColumnDefs = [
--- a/rhodecode/templates/branches/branches_data.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/branches/branches_data.html	Sun Apr 07 18:37:22 2013 +0200
@@ -10,8 +10,8 @@
             <th class="left">${_('Compare')}</th>
         </tr>
       </thead>
-		%for cnt,branch in enumerate(c.repo_branches.items()):
-		<tr class="parity${cnt%2}">
+        %for cnt,branch in enumerate(c.repo_branches.items()):
+        <tr class="parity${cnt%2}">
             <td>
                 <span class="logtags">
                     <span class="branchtag">${h.link_to(branch[0],
@@ -29,8 +29,8 @@
                 <input class="branch-compare" type="radio" name="compare_org" value="${branch[0]}"/>
                 <input class="branch-compare" type="radio" name="compare_other" value="${branch[0]}"/>
             </td>
-		</tr>
-		%endfor
+        </tr>
+        %endfor
         % if hasattr(c,'repo_closed_branches') and c.repo_closed_branches:
           %for cnt,branch in enumerate(c.repo_closed_branches.items()):
           <tr class="parity${cnt%2}">
--- a/rhodecode/templates/changelog/changelog.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/changelog/changelog.html	Sun Apr 07 18:37:22 2013 +0200
@@ -3,304 +3,260 @@
 <%inherit file="/base/base.html"/>
 
 <%def name="title()">
-${_('%s Changelog') % c.repo_name} - ${c.rhodecode_name}
+${_('%s Changelog') % c.repo_name} &middot; ${c.rhodecode_name}
 </%def>
 
 <%def name="breadcrumbs_links()">
-    ${h.link_to(_(u'Home'),h.url('/'))}
-    &raquo;
-    ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
-    &raquo;
     <% size = c.size if c.size <= c.total_cs else c.total_cs %>
     ${_('Changelog')} - ${ungettext('showing %d out of %d revision', 'showing %d out of %d revisions', size) % (size, c.total_cs)}
 </%def>
 
 <%def name="page_nav()">
-	${self.menu('changelog')}
+    ${self.menu('repositories')}
 </%def>
 
 <%def name="main()">
+${self.context_bar('changelog')}
 <div class="box">
     <!-- box / title -->
     <div class="title">
         ${self.breadcrumbs()}
     </div>
     <div class="table">
-		% if c.pagination:
-			<div id="graph">
-				<div id="graph_nodes">
-					<canvas id="graph_canvas"></canvas>
-				</div>
-				<div id="graph_content">
-                    <div class="info_box" style="clear: both;padding: 10px 6px;vertical-align: right;text-align: right;">
+        % if c.pagination:
+            <div id="graph">
+                <div class="info_box" style="clear: both;padding: 10px 6px;min-height: 12px;text-align: right;">
                     <a href="#" class="ui-btn small" id="rev_range_container" style="display:none"></a>
                     <a href="#" class="ui-btn small" id="rev_range_clear" style="display:none">${_('Clear selection')}</a>
 
                     %if c.rhodecode_db_repo.fork:
-                        <a title="${_('compare fork with %s' % c.rhodecode_db_repo.fork.repo_name)}" href="${h.url('compare_url',repo_name=c.repo_name,org_ref_type='branch',org_ref=request.GET.get('branch') or 'default',other_ref_type='branch',other_ref='default',repo=c.rhodecode_db_repo.fork.repo_name)}" class="ui-btn small">${_('Compare fork with parent')}</a>
+                        <a id="compare_fork" title="${_('Compare fork with %s' % c.rhodecode_db_repo.fork.repo_name)}" href="${h.url('compare_url',repo_name=c.rhodecode_db_repo.fork.repo_name,org_ref_type='branch',org_ref='default',other_repo=c.repo_name,other_ref_type='branch',other_ref=request.GET.get('branch') or 'default',merge=1)}" class="ui-btn small">${_('Compare fork with parent')}</a>
                     %endif
                     %if h.is_hg(c.rhodecode_repo):
                     <a id="open_new_pr" href="${h.url('pullrequest_home',repo_name=c.repo_name)}" class="ui-btn small">${_('Open new pull request')}</a>
                     %endif
+                </div>
+                <div class="container_header">
+                    ${h.form(h.url.current(),method='get')}
+                    <div style="float:left">
+                        ${h.submit('set',_('Show'),class_="ui-btn")}
+                        ${h.text('size',size=1,value=c.size)}
+                        ${_('revisions')}
                     </div>
-					<div class="container_header">
-				        ${h.form(h.url.current(),method='get')}
-				        <div class="info_box" style="float:left">
-				          ${h.submit('set',_('Show'),class_="ui-btn")}
-				          ${h.text('size',size=1,value=c.size)}
-				          ${_('revisions')}
-				        </div>
-				        ${h.end_form()}
+                    ${h.end_form()}
                     <div style="float:right">${h.select('branch_filter',c.branch_name,c.branch_filters)}</div>
-					</div>
+                </div>
+                <div id="graph_nodes">
+                    <canvas id="graph_canvas"></canvas>
+                </div>
+                <div id="graph_content">
 
-				%for cnt,cs in enumerate(c.pagination):
-					<div id="chg_${cnt+1}" class="container ${'tablerow%s' % (cnt%2)}">
-						<div class="left">
-							<div>
-							${h.checkbox(cs.raw_id,class_="changeset_range")}
-							<span class="tooltip" title="${h.tooltip(h.age(cs.date))}"><a href="${h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id)}"><span class="changeset_id">${cs.revision}:<span class="changeset_hash">${h.short_id(cs.raw_id)}</span></span></a></span>
-							</div>
-							<div class="author">
-								<div class="gravatar">
-									<img alt="gravatar" src="${h.gravatar_url(h.email_or_none(cs.author),16)}"/>
-								</div>
-								<div title="${cs.author}" class="user">${h.shorter(h.person(cs.author),22)}</div>
-							</div>
-                            <div class="date">${h.fmt_date(cs.date)}</div>
-						</div>
-						<div class="mid">
-                            <div class="message">${h.urlify_commit(cs.message, c.repo_name,h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id))}</div>
-                            <div class="expand"><span class="expandtext">&darr; ${_('show more')} &darr;</span></div>
-						</div>
-						<div class="right">
-									<div class="changes">
-                                        <div id="changed_total_${cs.raw_id}" style="float:right;" class="changed_total tooltip" title="${h.tooltip(_('Affected number of files, click to show more details'))}">${len(cs.affected_files)}</div>
+                <table id="changesets">
+                <tbody>
+                %for cnt,cs in enumerate(c.pagination):
+                    <tr id="chg_${cnt+1}" class="container ${'tablerow%s' % (cnt%2)}">
+                        <td class="checkbox">
+                            ${h.checkbox(cs.raw_id,class_="changeset_range")}
+                        </td>
+                        <td class="author">
+                            <img alt="gravatar" src="${h.gravatar_url(h.email_or_none(cs.author),16)}"/>
+                            <span title="${cs.author}" class="user">${h.shorter(h.person(cs.author),22)}</span>
+                        </td>
+                        <td class="hash" style="width:${len(h.show_id(cs))*6.5}px">
+                            <a href="${h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id)}">
+                                <span class="changeset_hash">${h.show_id(cs)}</span>
+                            </a>
+                        </td>
+                        <td class="date">
+                            <div class="date">${h.age(cs.date,True)}</div>
+                        </td>
+                        <td class="mid">
+                            <div class="log-container">
+                                <div class="message">${h.urlify_commit(cs.message, c.repo_name,h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id))}</div>
+                                <div class="expand"><span class="expandtext">&darr; ${_('Show more')} &darr;</span></div>
+                                <div class="extra-container">
+                                    %if c.comments.get(cs.raw_id,[]):
                                         <div class="comments-container">
-                                        %if len(c.comments.get(cs.raw_id,[])) > 0:
                                             <div class="comments-cnt" title="${('comments')}">
-                                              <a href="${h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id,anchor='comment-%s' % c.comments[cs.raw_id][0].comment_id)}">
-                                               <div class="comments-cnt">${len(c.comments[cs.raw_id])}</div>
-                                               <img src="${h.url('/images/icons/comments.png')}">
-                                              </a>
+                                                <a href="${h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id,anchor='comment-%s' % c.comments[cs.raw_id][0].comment_id)}">
+                                                    ${len(c.comments[cs.raw_id])}
+                                                </a>
                                             </div>
-                                        %endif
-                                        </div>
-                                        <div class="changeset-status-container">
-                                            %if c.statuses.get(cs.raw_id):
-                                              <div title="${_('Changeset status')}" class="changeset-status-lbl">${c.statuses.get(cs.raw_id)[1]}</div>
-                                              <div class="changeset-status-ico">
-                                              %if c.statuses.get(cs.raw_id)[2]:
-                                                <a class="tooltip" title="${_('Click to open associated pull request')}" href="${h.url('pullrequest_show',repo_name=c.statuses.get(cs.raw_id)[3],pull_request_id=c.statuses.get(cs.raw_id)[2])}"><img src="${h.url('/images/icons/flag_status_%s.png' % c.statuses.get(cs.raw_id)[0])}" /></a>
-                                              %else:
-                                                <img src="${h.url('/images/icons/flag_status_%s.png' % c.statuses.get(cs.raw_id)[0])}" />
-                                              %endif
-                                              </div>
-                                            %endif
                                         </div>
-									</div>
-								   %if cs.parents:
-									%for p_cs in reversed(cs.parents):
-										<div class="parent">${_('Parent')}
-											<span class="changeset_id">${p_cs.revision}:<span class="changeset_hash">${h.link_to(h.short_id(p_cs.raw_id),
-											h.url('changeset_home',repo_name=c.repo_name,revision=p_cs.raw_id),title=p_cs.message)}</span></span>
-										</div>
-									%endfor
-								   %else:
-                                        <div class="parent">${_('No parents')}</div>
-                                   %endif
-
-								<span class="logtags">
-									%if len(cs.parents)>1:
-									<span class="merge">${_('merge')}</span>
-									%endif
-									%if cs.branch:
-									<span class="branchtag" title="${'%s %s' % (_('branch'),cs.branch)}">
-									   ${h.link_to(h.shorter(cs.branch),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))}
-                                    </span>
-									%endif
+                                    %endif
                                     %if h.is_hg(c.rhodecode_repo):
-                                      %for book in cs.bookmarks:
-                                      <span class="bookbook" title="${'%s %s' % (_('bookmark'),book)}">
-                                         ${h.link_to(h.shorter(book),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))}
-                                      </span>
-                                      %endfor
+                                        %for book in cs.bookmarks:
+                                            <div class="bookbook" title="${_('Bookmark %s') % book}">
+                                                ${h.link_to(h.shorter(book),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))}
+                                            </div>
+                                        %endfor
+                                    %endif
+                                    %for tag in cs.tags:
+                                        <div class="tagtag" title="${_('Tag %s') % tag}">
+                                            ${h.link_to(h.shorter(tag),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))}
+                                        </div>
+                                    %endfor
+                                    %if (not c.branch_name) and cs.branch:
+                                        <div class="branchtag" title="${_('Branch %s' % cs.branch)}">
+                                            ${h.link_to(h.shorter(cs.branch),h.url('changelog_home',repo_name=c.repo_name,branch=cs.branch))}
+                                        </div>
                                     %endif
-									%for tag in cs.tags:
-										<span class="tagtag"  title="${'%s %s' % (_('tag'),tag)}">
-										${h.link_to(h.shorter(tag),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))}</span>
-									%endfor
-								</span>
-						</div>
-					</div>
+                                </div>
+                            </div>
+                        </td>
+                    </tr>
+                %endfor
+                </tbody>
+                </table>
 
-				%endfor
-				<div class="pagination-wh pagination-left">
-					${c.pagination.pager('$link_previous ~2~ $link_next')}
-				</div>
-				</div>
-			</div>
+                <div class="pagination-wh pagination-left">
+                    ${c.pagination.pager('$link_previous ~2~ $link_next')}
+                </div>
+            </div>
+        </div>
+
+        <script type="text/javascript" src="${h.url('/js/graph.js')}"></script>
+        <script type="text/javascript">
+            YAHOO.util.Event.onDOMReady(function(){
 
-			<script type="text/javascript" src="${h.url('/js/graph.js')}"></script>
-			<script type="text/javascript">
-				YAHOO.util.Event.onDOMReady(function(){
+                //Monitor range checkboxes and build a link to changesets
+                //ranges
+                var checkboxes = YUD.getElementsByClassName('changeset_range');
+                var url_tmpl = "${h.url('changeset_home',repo_name=c.repo_name,revision='__REVRANGE__')}";
+                var pr_tmpl = "${h.url('pullrequest_home',repo_name=c.repo_name)}";
 
-                    //Monitor range checkboxes and build a link to changesets
-                    //ranges
-                    var checkboxes = YUD.getElementsByClassName('changeset_range');
-                    var url_tmpl = "${h.url('changeset_home',repo_name=c.repo_name,revision='__REVRANGE__')}";
-                    var pr_tmpl = "${h.url('pullrequest_home',repo_name=c.repo_name)}";
-                    YUE.on(checkboxes,'click',function(e){
-                    	var clicked_cb = e.currentTarget;
-                        var checked_checkboxes = [];
-                        for (pos in checkboxes){
-                            if(checkboxes[pos].checked){
-                                checked_checkboxes.push(checkboxes[pos]);
+                var checkbox_checker = function(e){
+                    var checked_checkboxes = [];
+                    for (pos in checkboxes){
+                        if(checkboxes[pos].checked){
+                            checked_checkboxes.push(checkboxes[pos]);
+                        }
+                    }
+                    if(YUD.get('open_new_pr')){
+                        if(checked_checkboxes.length>1){
+                            YUD.setStyle('open_new_pr','display','none');
+                        } else {
+                            YUD.setStyle('open_new_pr','display','');
+                            if(checked_checkboxes.length>0){
+                                YUD.get('open_new_pr').innerHTML = _TM['Open new pull request for selected changesets'];
+                            }else{
+                                YUD.get('open_new_pr').innerHTML = _TM['Open new pull request'];
                             }
                         }
-                        if(YUD.get('open_new_pr')){
-                          if(checked_checkboxes.length>0){
-                            // modify open pull request to show we have selected cs
-                            YUD.get('open_new_pr').innerHTML = _TM['Open new pull request for selected changesets'];
+                    }
 
-                          }else{
-                            YUD.get('open_new_pr').innerHTML = _TM['Open new pull request'];
-                          }
-                        }
-
-                        if(checked_checkboxes.length>0){
-                        	var rev_end = checked_checkboxes[0].name;
-                        	var rev_start = checked_checkboxes[checked_checkboxes.length-1].name;
+                    if(checked_checkboxes.length>0){
+                        var rev_end = checked_checkboxes[0].name;
+                        var rev_start = checked_checkboxes[checked_checkboxes.length-1].name;
+                        var url = url_tmpl.replace('__REVRANGE__',
+                                rev_start+'...'+rev_end);
 
-                        	// now select all checkboxes in the middle.
-                        	var checked = false;
-                        	for (var i=0; i<checkboxes.length; i++){
-                        		var cb = checkboxes[i];
-                        		var rev = cb.name;
+                        var link = (rev_start == rev_end)
+                            ? _TM['Show selected changeset __S']
+                            : _TM['Show selected changesets __S -> __E'];
 
-                        		if (rev == rev_end){
-                        			checked = true;
-                        		}
-                                if (checked){
-                                    cb.checked = true;
-                                }
-                                else{
-                                    cb.checked = false;
-                                }
-                        		if (rev == rev_start){
-                                    checked = false;
-                                }
+                        link = link.replace('__S',rev_start.substr(0,6));
+                        link = link.replace('__E',rev_end.substr(0,6));
+                        YUD.get('rev_range_container').href = url;
+                        YUD.get('rev_range_container').innerHTML = link;
+                        YUD.setStyle('rev_range_container','display','');
+                        YUD.setStyle('rev_range_clear','display','');
 
-                        	}
-
-                            var url = url_tmpl.replace('__REVRANGE__',
-                            		rev_start+'...'+rev_end);
-
-                            var link = _TM['Show selected changes __S -> __E'];
-                            link = link.replace('__S',rev_start.substr(0,6));
-                            link = link.replace('__E',rev_end.substr(0,6));
-                            YUD.get('rev_range_container').href = url;
-                            YUD.get('rev_range_container').innerHTML = link;
-                            YUD.setStyle('rev_range_container','display','');
-                            YUD.setStyle('rev_range_clear','display','');
-
-                            YUD.get('open_new_pr').href = pr_tmpl + '?rev_start={0}&rev_end={1}'.format(rev_start,rev_end);
-
+                        YUD.get('open_new_pr').href = pr_tmpl + '?rev_start={0}&rev_end={1}'.format(rev_start,rev_end);
+                        YUD.setStyle('compare_fork','display','none');
+                    }else{
+                        YUD.setStyle('rev_range_container','display','none');
+                        YUD.setStyle('rev_range_clear','display','none');
+                        if (checkboxes){
+                            YUD.get('open_new_pr').href = pr_tmpl + '?rev_end={0}'.format(checkboxes[0].name);
                         }
-                        else{
-                        	YUD.setStyle('rev_range_container','display','none');
-                        	YUD.setStyle('rev_range_clear','display','none');
-                        }
-                    });
-                    YUE.on('rev_range_clear','click',function(e){
-                        for (var i=0; i<checkboxes.length; i++){
-                            var cb = checkboxes[i];
-                            cb.checked = false;
-                        }
-                        YUE.preventDefault(e);
-                    })
-                    var msgs = YUQ('.message');
-                    // get first element height
-                    var el = YUQ('#graph_content .container')[0];
-                    var row_h = el.clientHeight;
-                    for(var i=0;i<msgs.length;i++){
-                    	var m = msgs[i];
+                        YUD.setStyle('compare_fork','display','');
+                    }
+                };
+                YUE.onDOMReady(checkbox_checker);
+                YUE.on(checkboxes,'click', checkbox_checker);
+
+                YUE.on('rev_range_clear','click',function(e){
+                    for (var i=0; i<checkboxes.length; i++){
+                        var cb = checkboxes[i];
+                        cb.checked = false;
+                    }
+                    checkbox_checker();
+                    YUE.preventDefault(e);
+                });
+
+                var msgs = YUQ('.message');
+                // get first element height
+                var el = YUQ('#graph_content .container')[0];
+                var row_h = el.clientHeight;
+                for(var i=0;i<msgs.length;i++){
+                    var m = msgs[i];
 
-                    	var h = m.clientHeight;
-                    	var pad = YUD.getStyle(m,'padding');
-                    	if(h > row_h){
-                    		var offset = row_h - (h+12);
-                    		YUD.setStyle(m.nextElementSibling,'display','block');
-                    		YUD.setStyle(m.nextElementSibling,'margin-top',offset+'px');
-                    	};
-                    }
-                    YUE.on(YUQ('.expand'),'click',function(e){
-                    	var elem = e.currentTarget.parentNode.parentNode;
-                    	YUD.setStyle(e.currentTarget,'display','none');
-                    	YUD.setStyle(elem,'height','auto');
+                    var h = m.clientHeight;
+                    var pad = YUD.getStyle(m,'padding');
+                    if(h > row_h){
+                        var offset = row_h - (h+12);
+                        YUD.setStyle(m.nextElementSibling,'display','block');
+                        YUD.setStyle(m.nextElementSibling,'margin-top',offset+'px');
+                    };
+                }
+                YUE.on(YUQ('.expand'),'click',function(e){
+                    var elem = e.currentTarget.parentNode.parentNode;
+                    YUD.setStyle(e.currentTarget,'display','none');
+                    YUD.setStyle(elem,'height','auto');
+
+                    //redraw the graph, line_count and jsdata are global vars
+                    set_canvas(100);
 
-                    	//redraw the graph, line_count and jsdata are global vars
-                        set_canvas(100);
+                    var r = new BranchRenderer();
+                    r.render(jsdata,100,line_count);
 
-                        var r = new BranchRenderer();
-                        r.render(jsdata,100,line_count);
-
-                    })
+                });
 
-                    // Fetch changeset details
-                    YUE.on(YUD.getElementsByClassName('changed_total'),'click',function(e){
-                    	var id = e.currentTarget.id;
-                    	var url = "${h.url('changelog_details',repo_name=c.repo_name,cs='__CS__')}";
-                    	var url = url.replace('__CS__',id.replace('changed_total_',''));
-                    	ypjax(url,id,function(){tooltip_activate()});
-                    });
+                // change branch filter
+                YUE.on(YUD.get('branch_filter'),'change',function(e){
+                    var selected_branch = e.currentTarget.options[e.currentTarget.selectedIndex].value;
+                    var url_main = "${h.url('changelog_home',repo_name=c.repo_name)}";
+                    var url = "${h.url('changelog_home',repo_name=c.repo_name,branch='__BRANCH__')}";
+                    var url = url.replace('__BRANCH__',selected_branch);
+                    if(selected_branch != ''){
+                        window.location = url;
+                    }else{
+                        window.location = url_main;
+                    }
 
-                    // change branch filter
-                    YUE.on(YUD.get('branch_filter'),'change',function(e){
-                    	var selected_branch = e.currentTarget.options[e.currentTarget.selectedIndex].value;
-                    	var url_main = "${h.url('changelog_home',repo_name=c.repo_name)}";
-                    	var url = "${h.url('changelog_home',repo_name=c.repo_name,branch='__BRANCH__')}";
-                    	var url = url.replace('__BRANCH__',selected_branch);
-                    	if(selected_branch != ''){
-                    		window.location = url;
-                    	}else{
-                    		window.location = url_main;
-                    	}
+                });
 
-                    });
+                function set_canvas(width) {
+                    var c = document.getElementById('graph_nodes');
+                    var t = document.getElementById('graph_content');
+                    canvas = document.getElementById('graph_canvas');
+                    var div_h = t.clientHeight;
+                    canvas.setAttribute('height',div_h);
+                    canvas.setAttribute('width',width);
+                };
+                var heads = 1;
+                var line_count = 0;
+                var jsdata = ${c.jsdata|n};
 
-					function set_canvas(width) {
-						var c = document.getElementById('graph_nodes');
-						var t = document.getElementById('graph_content');
-						canvas = document.getElementById('graph_canvas');
-						var div_h = t.clientHeight;
-						c.style.height=div_h+'px';
-						canvas.setAttribute('height',div_h);
-						c.style.height=width+'px';
-						canvas.setAttribute('width',width);
-					};
-					var heads = 1;
-					var line_count = 0;
-					var jsdata = ${c.jsdata|n};
+                for (var i=0;i<jsdata.length;i++) {
+                    var in_l = jsdata[i][2];
+                    for (var j in in_l) {
+                        var m = in_l[j][1];
+                        if (m > line_count)
+                            line_count = m;
+                    }
+                }
+                set_canvas(100);
 
-					for (var i=0;i<jsdata.length;i++) {
-                        var in_l = jsdata[i][2];
-                        for (var j in in_l) {
-                            var m = in_l[j][1];
-                            if (m > line_count)
-                                line_count = m;
-                        }
-					}
-					set_canvas(100);
+                var r = new BranchRenderer();
+                r.render(jsdata,100,line_count);
 
-					var r = new BranchRenderer();
-					r.render(jsdata,100,line_count);
-
-				});
-			</script>
-		%else:
-			${_('There are no changes yet')}
-		%endif
+            });
+        </script>
+        %else:
+            ${_('There are no changes yet')}
+        %endif
     </div>
 </div>
 </%def>
--- a/rhodecode/templates/changelog/changelog_details.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/changelog/changelog_details.html	Sun Apr 07 18:37:22 2013 +0200
@@ -1,11 +1,11 @@
 ## small box that displays changed/added/removed details fetched by AJAX
 
 % if len(c.cs.affected_files) <= c.affected_files_cut_off:
-<span class="removed tooltip" title="<b>${h.tooltip(_('removed'))}</b>${h.changed_tooltip(c.cs.removed)}">${len(c.cs.removed)}</span>
-<span class="changed tooltip" title="<b>${h.tooltip(_('changed'))}</b>${h.changed_tooltip(c.cs.changed)}">${len(c.cs.changed)}</span>
-<span class="added tooltip"   title="<b>${h.tooltip(_('added'))}</b>${h.changed_tooltip(c.cs.added)}">${len(c.cs.added)}</span>
+<span class="removed tooltip" title="<b>${h.tooltip(_('Removed'))}</b>${h.changed_tooltip(c.cs.removed)}">${len(c.cs.removed)}</span>
+<span class="changed tooltip" title="<b>${h.tooltip(_('Changed'))}</b>${h.changed_tooltip(c.cs.changed)}">${len(c.cs.changed)}</span>
+<span class="added tooltip"   title="<b>${h.tooltip(_('Added'))}</b>${h.changed_tooltip(c.cs.added)}">${len(c.cs.added)}</span>
 % else:
- <span class="removed tooltip" title="${h.tooltip(_('affected %s files') % len(c.cs.affected_files))}">!</span>
- <span class="changed tooltip" title="${h.tooltip(_('affected %s files') % len(c.cs.affected_files))}">!</span>
- <span class="added tooltip"   title="${h.tooltip(_('affected %s files') % len(c.cs.affected_files))}">!</span>
+ <span class="removed tooltip" title="${h.tooltip(_('Affected %s files') % len(c.cs.affected_files))}">!</span>
+ <span class="changed tooltip" title="${h.tooltip(_('Affected %s files') % len(c.cs.affected_files))}">!</span>
+ <span class="added tooltip"   title="${h.tooltip(_('Affected %s files') % len(c.cs.affected_files))}">!</span>
 % endif
--- a/rhodecode/templates/changeset/changeset.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/changeset/changeset.html	Sun Apr 07 18:37:22 2013 +0200
@@ -3,22 +3,19 @@
 <%inherit file="/base/base.html"/>
 
 <%def name="title()">
-    ${_('%s Changeset') % c.repo_name} - r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)} - ${c.rhodecode_name}
+    ${_('%s Changeset') % c.repo_name} - ${h.show_id(c.changeset)} &middot; ${c.rhodecode_name}
 </%def>
 
 <%def name="breadcrumbs_links()">
-    ${h.link_to(_(u'Home'),h.url('/'))}
-    &raquo;
-    ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
-    &raquo;
     ${_('Changeset')} - <span class='hash'>r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)}</span>
 </%def>
 
 <%def name="page_nav()">
-    ${self.menu('changelog')}
+    ${self.menu('repositories')}
 </%def>
 
 <%def name="main()">
+${self.context_bar('changelog')}
 <div class="box">
     <!-- box / title -->
     <div class="title">
@@ -31,7 +28,7 @@
     AJAX_COMMENT_DELETE_URL = "${url('changeset_comment_delete',repo_name=c.repo_name,comment_id='__COMMENT_ID__')}";
     </script>
     <div class="table">
-		<div class="diffblock">
+        <div class="diffblock">
             <div class="parents">
                 %if c.changeset.parents:
                  %for n, p_cs in enumerate(reversed(c.changeset.parents)):
@@ -52,7 +49,7 @@
                     <span>${_('No children')}</span>
                  %endif
             </div>
-			<div class="code-header banner">
+            <div class="code-header banner">
 
                 <div class="hash">
                  r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)}
@@ -67,64 +64,64 @@
                     %endif
                 </div>
                 <div class="diff-actions">
-                  <a href="${h.url('changeset_raw_home',repo_name=c.repo_name,revision=c.changeset.raw_id)}"  class="tooltip" title="${h.tooltip(_('raw diff'))}"><img class="icon" src="${h.url('/images/icons/page_white.png')}"/></a>
-                  <a href="${h.url('changeset_patch_home',repo_name=c.repo_name,revision=c.changeset.raw_id)}"  class="tooltip" title="${h.tooltip(_('patch diff'))}"><img class="icon" src="${h.url('/images/icons/page_add.png')}"/></a>
-                  <a href="${h.url('changeset_download_home',repo_name=c.repo_name,revision=c.changeset.raw_id,diff='download')}"  class="tooltip" title="${h.tooltip(_('download diff'))}"><img class="icon" src="${h.url('/images/icons/page_save.png')}"/></a>
+                  <a href="${h.url('changeset_raw_home',repo_name=c.repo_name,revision=c.changeset.raw_id)}"  class="tooltip" title="${h.tooltip(_('Raw diff'))}"><img class="icon" src="${h.url('/images/icons/page_white.png')}"/></a>
+                  <a href="${h.url('changeset_patch_home',repo_name=c.repo_name,revision=c.changeset.raw_id)}"  class="tooltip" title="${h.tooltip(_('Patch diff'))}"><img class="icon" src="${h.url('/images/icons/page_add.png')}"/></a>
+                  <a href="${h.url('changeset_download_home',repo_name=c.repo_name,revision=c.changeset.raw_id,diff='download')}"  class="tooltip" title="${h.tooltip(_('Download diff'))}"><img class="icon" src="${h.url('/images/icons/page_save.png')}"/></a>
                   ${c.ignorews_url(request.GET)}
                   ${c.context_url(request.GET)}
                 </div>
                 <div class="comments-number" style="float:right;padding-right:5px">${ungettext("%d comment", "%d comments", len(c.comments)) % len(c.comments)} ${ungettext("(%d inline)", "(%d inline)", c.inline_cnt) % c.inline_cnt}</div>
             </div>
-		</div>
-	    <div id="changeset_content">
-			<div class="container">
-	             <div class="left">
-	                 <div class="author">
-	                     <div class="gravatar">
-	                         <img alt="gravatar" src="${h.gravatar_url(h.email_or_none(c.changeset.author),20)}"/>
-	                     </div>
-	                     <span>${h.person(c.changeset.author)}</span><br/>
-	                     <span><a href="mailto:${h.email_or_none(c.changeset.author)}">${h.email_or_none(c.changeset.author)}</a></span><br/>
-	                 </div>
-	                 <div class="message">${h.urlify_commit(c.changeset.message, c.repo_name)}</div>
-	             </div>
-	             <div class="right">
-		             <div class="changes">
+        </div>
+        <div id="changeset_content">
+            <div class="container">
+                 <div class="left">
+                     <div class="author">
+                         <div class="gravatar">
+                             <img alt="gravatar" src="${h.gravatar_url(h.email_or_none(c.changeset.author),20)}"/>
+                         </div>
+                         <span>${h.person(c.changeset.author)}</span><br/>
+                         <span><a href="mailto:${h.email_or_none(c.changeset.author)}">${h.email_or_none(c.changeset.author)}</a></span><br/>
+                     </div>
+                     <div class="message">${h.urlify_commit(c.changeset.message, c.repo_name)}</div>
+                 </div>
+                 <div class="right">
+                     <div class="changes">
                         % if (len(c.changeset.affected_files) <= c.affected_files_cut_off) or c.fulldiff:
-		                 <span class="removed" title="${_('removed')}">${len(c.changeset.removed)}</span>
-		                 <span class="changed" title="${_('changed')}">${len(c.changeset.changed)}</span>
-		                 <span class="added" title="${_('added')}">${len(c.changeset.added)}</span>
-	                    % else:
-                         <span class="removed" title="${_('affected %s files') % len(c.changeset.affected_files)}">!</span>
-                         <span class="changed" title="${_('affected %s files') % len(c.changeset.affected_files)}">!</span>
-                         <span class="added"   title="${_('affected %s files') % len(c.changeset.affected_files)}">!</span>
-	                    % endif
-		             </div>
+                         <span class="removed" title="${_('Removed')}">${len(c.changeset.removed)}</span>
+                         <span class="changed" title="${_('Changed')}">${len(c.changeset.changed)}</span>
+                         <span class="added" title="${_('Added')}">${len(c.changeset.added)}</span>
+                        % else:
+                         <span class="removed" title="${_('Affected %s files') % len(c.changeset.affected_files)}">!</span>
+                         <span class="changed" title="${_('Affected %s files') % len(c.changeset.affected_files)}">!</span>
+                         <span class="added"   title="${_('Affected %s files') % len(c.changeset.affected_files)}">!</span>
+                        % endif
+                     </div>
 
-		         <span class="logtags">
+                 <span class="logtags">
                  %if len(c.changeset.parents)>1:
                  <span class="merge">${_('merge')}</span>
                  %endif
-		             %if c.changeset.branch:
-                     <span class="branchtag" title="${'%s %s' % (_('branch'),c.changeset.branch)}">
-		             ${h.link_to(c.changeset.branch,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id))}
+                     %if c.changeset.branch:
+                     <span class="branchtag" title="${_('Branch %s') % c.changeset.branch}">
+                     ${h.link_to(c.changeset.branch,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id))}
                      </span>
                      %endif
-		             %for tag in c.changeset.tags:
-		                 <span class="tagtag"  title="${'%s %s' % (_('tag'),tag)}">
-		                 ${h.link_to(tag,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id))}</span>
-		             %endfor
-		         </span>
-	                </div>
-	        </div>
-	        <span>
+                     %for tag in c.changeset.tags:
+                         <span class="tagtag"  title="${_('Tag %s') % tag}">
+                         ${h.link_to(tag,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id))}</span>
+                     %endfor
+                 </span>
+                    </div>
+            </div>
+            <span>
             % if c.limited_diff:
             ${ungettext('%s file changed','%s files changed',len(c.changeset.affected_files)) % (len(c.changeset.affected_files))}:
             % else:
-	        ${ungettext('%s file changed with %s insertions and %s deletions','%s files changed with %s insertions and %s deletions', len(c.changeset.affected_files)) % (len(c.changeset.affected_files),c.lines_added,c.lines_deleted)}:
-	        %endif
+            ${ungettext('%s file changed with %s insertions and %s deletions','%s files changed with %s insertions and %s deletions', len(c.changeset.affected_files)) % (len(c.changeset.affected_files),c.lines_added,c.lines_deleted)}:
+            %endif
             </span>
-	        <div class="cs_files">
+            <div class="cs_files">
               %for FID, (cs1, cs2, change, path, diff, stats) in c.changes[c.changeset.raw_id].iteritems():
                   <div class="cs_${change}">
                         <div class="node">
@@ -134,10 +131,10 @@
                   </div>
               %endfor
               % if c.limited_diff:
-                <h5>${_('Changeset was too big and was cut off...')}</h5>
+                <h5>${_('Changeset was too big and was cut off...')} <a href="${h.url.current(fulldiff=1, **request.GET.mixed())}" onclick="return confirm('${_("Showing a huge diff might take some time and resources")}')">${_('Show full diff')}</a></h5>
               % endif
-	        </div>
-	    </div>
+            </div>
+        </div>
 
     </div>
 
@@ -146,7 +143,7 @@
     ${diff_block.diff_block(c.changes[c.changeset.raw_id])}
 
     % if c.limited_diff:
-      <h4>${_('Changeset was too big and was cut off...')}</h4>
+      <h4>${_('Changeset was too big and was cut off...')} <a href="${h.url.current(fulldiff=1, **request.GET.mixed())}" onclick="return confirm('${_("Showing a huge diff might take some time and resources")}')">${_('Show full diff')}</a></h4>
     % endif
 
     ## template for inline comment form
--- a/rhodecode/templates/changeset/changeset_file_comment.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/changeset/changeset_file_comment.html	Sun Apr 07 18:37:22 2013 +0200
@@ -6,35 +6,45 @@
 <%def name="comment_block(co)">
   <div class="comment" id="comment-${co.comment_id}" line="${co.line_no}">
     <div class="comment-wrapp">
-  	<div class="meta">
+      <div class="meta">
         <div style="float:left"> <img src="${h.gravatar_url(co.author.email, 20)}" /> </div>
-  		<div class="user">
-  			${co.author.username}
-  		</div>
-  		<div class="date">
-  			${h.age(co.modified_at)} <a class="permalink" href="#comment-${co.comment_id}">&para;</a>
-  		</div>
+          <div class="user">
+              ${co.author.username}
+          </div>
+          <div class="date">
+              ${h.age(co.modified_at)} <a class="permalink" href="#comment-${co.comment_id}">&para;</a>
+          </div>
         %if co.status_change:
            <div  style="float:left" class="changeset-status-container">
              <div style="float:left;padding:0px 2px 0px 2px"><span style="font-size: 18px;">&rsaquo;</span></div>
              <div title="${_('Changeset status')}" class="changeset-status-lbl"> ${co.status_change[0].status_lbl}</div>
              <div class="changeset-status-ico"><img src="${h.url(str('/images/icons/flag_status_%s.png' % co.status_change[0].status))}" /></div>
-             <div style="float:left;padding:3px 0px 0px 5px"> <span class="">
-             %if co.pull_request:
-                <a href="${h.url('pullrequest_show',repo_name=co.pull_request.other_repo.repo_name,pull_request_id=co.pull_request.pull_request_id)}">${_('Status from pull request %s') % co.pull_request.pull_request_id}</a>   
-             %endif
-             </span> </div>
            </div>
         %endif
+
+       <div style="float:left;padding:3px 0px 0px 5px">
+        <span class="">
+         %if co.pull_request:
+            <a href="${h.url('pullrequest_show',repo_name=co.pull_request.other_repo.repo_name,pull_request_id=co.pull_request.pull_request_id)}">
+            %if co.status_change:
+              ${_('Status change on pull request #%s') % co.pull_request.pull_request_id}
+            %else:
+              ${_('Comment on pull request #%s') % co.pull_request.pull_request_id}
+            %endif
+            </a>
+         %endif
+        </span>
+       </div>
+
       %if h.HasPermissionAny('hg.admin', 'repository.admin')() or co.author.user_id == c.rhodecode_user.user_id:
         <div class="buttons">
           <span onClick="deleteComment(${co.comment_id})" class="delete-comment ui-btn">${_('Delete')}</span>
         </div>
       %endif
-  	</div>
-  	<div class="text">
-  		${h.rst_w_mentions(co.text)|n}
-  	</div>
+      </div>
+      <div class="text">
+          ${h.rst_w_mentions(co.text)|n}
+      </div>
     </div>
   </div>
 </%def>
@@ -50,7 +60,7 @@
           <div class="comment-help">${_('Commenting on line {1}.')}
           ${(_('Comments parsed using %s syntax with %s support.') % (
                  ('<a href="%s">RST</a>' % h.url('rst_help')),
-          	     ('<span style="color:#003367" class="tooltip" title="%s">@mention</span>' % _('Use @username inside this text to send notification to this RhodeCode user'))
+                   ('<span style="color:#003367" class="tooltip" title="%s">@mention</span>' % _('Use @username inside this text to send notification to this RhodeCode user'))
                )
             )|n
            }
@@ -62,7 +72,7 @@
       <input type="hidden" name="f_path" value="{0}">
       <input type="hidden" name="line" value="{1}">
       ${h.submit('save', _('Comment'), class_='ui-btn save-inline-form')}
-      ${h.reset('hide-inline-form', _('Hide'), class_='ui-btn hide-inline-form')}
+      ${h.reset('hide-inline-form', _('Cancel'), class_='ui-btn hide-inline-form')}
       </div>
       ${h.end_form()}
   %else:
@@ -98,7 +108,7 @@
 </%def>
 
 ## generate inline comments and the main ones
-<%def name="generate_comments()">
+<%def name="generate_comments(include_pr=False)">
 <div class="comments">
     <div id="inline-comments-container">
     ## generate inlines for this changeset
@@ -107,7 +117,11 @@
 
     %for co in c.comments:
         <div id="comment-tr-${co.comment_id}">
+          ## only render comments that are not from pull request, or from
+          ## pull request and a status change
+          %if not co.pull_request or (co.pull_request and co.status_change) or include_pr:
           ${comment_block(co)}
+          %endif
         </div>
     %endfor
 </div>
@@ -120,15 +134,14 @@
     %if c.rhodecode_user.username != 'default':
     <div class="comment-form ac">
         ${h.form(post_url)}
-        <strong>${_('Leave a comment')}</strong>
         <div class="clearfix">
             <div class="comment-help">
                 ${(_('Comments parsed using %s syntax with %s support.') % (('<a href="%s">RST</a>' % h.url('rst_help')),
-          		'<span style="color:#003367" class="tooltip" title="%s">@mention</span>' %
-          		_('Use @username inside this text to send notification to this RhodeCode user')))|n}
+                  '<span style="color:#003367" class="tooltip" title="%s">@mention</span>' %
+                  _('Use @username inside this text to send notification to this RhodeCode user')))|n}
               %if change_status:
-                | <label for="show_changeset_status_box" class="tooltip" title="${_('Check this to change current status of code-review for this changeset')}"> ${_('change status')}</label>
-                  <input style="vertical-align: bottom;margin-bottom:-2px" id="show_changeset_status_box" type="checkbox" name="change_changeset_status" />
+                | <a id="show_changeset_link" onClick="change_status_show();"> ${_('Change status')}</a>
+                  <input id="show_changeset_status_box" type="checkbox" name="change_changeset_status" style="display: none;" />
               %endif
             </div>
             %if change_status:
@@ -155,26 +168,23 @@
     %endif
 </div>
 <script>
+var change_status_show = function(){
+    var show = ! YUD.get('show_changeset_status_box').checked;
+    YUD.get('show_changeset_status_box').checked = show;
+    YUD.setStyle('status_block_container', 'display', show?'':'none');
+};
+
 YUE.onDOMReady(function () {
    MentionsAutoComplete('text', 'mentions_container', _USERS_AC_DATA, _GROUPS_AC_DATA);
 
-   // changeset status box listener
-   YUE.on(YUD.get('show_changeset_status_box'),'change',function(e){
-       if(e.currentTarget.checked){
-           YUD.setStyle('status_block_container','display','');
-       }
-       else{
-           YUD.setStyle('status_block_container','display','none');
+   YUE.on(YUQ('.status_change_radio'), 'change',function(e){
+       var val = e.currentTarget.value;
+       if (val == 'approved' || val == 'rejected') {
+           YUD.removeClass('save_close', 'hidden');
+       }else{
+           YUD.addClass('save_close', 'hidden');
        }
    })
-   YUE.on(YUQ('.status_change_radio'), 'change',function(e){
-	   var val = e.currentTarget.value;
-	   if (val == 'approved' || val == 'rejected') {
-		   YUD.removeClass('save_close', 'hidden');
-	   }else{
-		   YUD.addClass('save_close', 'hidden');
-	   }
-   })
 
 });
 </script>
--- a/rhodecode/templates/changeset/changeset_range.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/changeset/changeset_range.html	Sun Apr 07 18:37:22 2013 +0200
@@ -2,39 +2,37 @@
 <%inherit file="/base/base.html"/>
 
 <%def name="title()">
-    ${_('%s Changesets') % c.repo_name} - r${c.cs_ranges[0].revision}:${h.short_id(c.cs_ranges[0].raw_id)} -> r${c.cs_ranges[-1].revision}:${h.short_id(c.cs_ranges[-1].raw_id)} - ${c.rhodecode_name}
+    ${_('%s Changesets') % c.repo_name} - r${c.cs_ranges[0].revision}:${h.short_id(c.cs_ranges[0].raw_id)} -&gt; r${c.cs_ranges[-1].revision}:${h.short_id(c.cs_ranges[-1].raw_id)} &middot; ${c.rhodecode_name}
 </%def>
 
 <%def name="breadcrumbs_links()">
-    ${h.link_to(_(u'Home'),h.url('/'))}
-    &raquo;
-    ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
-    &raquo;
-    ${_('Changesets')} - r${c.cs_ranges[0].revision}:${h.short_id(c.cs_ranges[0].raw_id)} -> r${c.cs_ranges[-1].revision}:${h.short_id(c.cs_ranges[-1].raw_id)}
+    ${_('Changesets')} - r${c.cs_ranges[0].revision}:${h.short_id(c.cs_ranges[0].raw_id)} -&gt; r${c.cs_ranges[-1].revision}:${h.short_id(c.cs_ranges[-1].raw_id)}
 </%def>
 
 <%def name="page_nav()">
-    ${self.menu('changelog')}
+    ${self.menu('repositories')}
 </%def>
 
 <%def name="main()">
+${self.context_bar('changelog')}
 <div class="box">
     <!-- box / title -->
     <div class="title">
         ${self.breadcrumbs()}
     </div>
     <div class="table">
-		<div id="body" class="diffblock">
-			<div class="code-header cv">
-		        <h3 class="code-header-title">${_('Compare View')} / ${h.link_to(_('Show combined compare'),h.url('compare_url',repo_name=c.repo_name,org_ref_type='rev',org_ref=getattr(c.cs_ranges[0].parents[0] if c.cs_ranges[0].parents else h.EmptyChangeset(),'raw_id'),other_ref_type='rev',other_ref=c.cs_ranges[-1].raw_id))}</h3>
+        <div id="body" class="diffblock">
+            <div class="code-header">
                 <div>
-				${_('Changesets')} - r${c.cs_ranges[0].revision}:${h.short_id(c.cs_ranges[0].raw_id)} -> r${c.cs_ranges[-1].revision}:${h.short_id(c.cs_ranges[-1].raw_id)}
-				</div>
-			</div>
-		</div>
-	    <div id="changeset_compare_view_content">
-			<div class="container">
-			<table class="compare_view_commits noborder">
+                ${h.link_to('r%s:%s -> r%s:%s' % (c.cs_ranges[0].revision, h.short_id(c.cs_ranges[0].raw_id), c.cs_ranges[-1].revision, h.short_id(c.cs_ranges[-1].raw_id)),
+                    h.url('compare_url',repo_name=c.repo_name,org_ref_type='rev',org_ref=getattr(c.cs_ranges[0].parents[0] if c.cs_ranges[0].parents else h.EmptyChangeset(),'raw_id'),other_ref_type='rev',other_ref=c.cs_ranges[-1].raw_id)
+                    )}
+                </div>
+            </div>
+        </div>
+        <div id="changeset_compare_view_content">
+            <div class="container">
+            <table class="compare_view_commits noborder">
             %for cnt,cs in enumerate(c.cs_ranges):
                 <tr>
                 <td><div class="gravatar"><img alt="gravatar" src="${h.gravatar_url(h.email_or_none(cs.author),14)}"/></div></td>
@@ -50,17 +48,17 @@
                 </tr>
             %endfor
             </table>
-	        </div>
-	        <div style="font-size:1.1em;font-weight: bold;clear:both;padding-top:10px">${_('Files affected')}</div>
-	        <div class="cs_files">
-	               %for cs in c.cs_ranges:
-	                   <div class="cur_cs">${h.link_to('r%s:%s' % (cs.revision,h.short_id(cs.raw_id)),h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id))}</div>
-	                  %for FID, (cs1, cs2, change, path, diff, stats) in c.changes[cs.raw_id].iteritems():
-	                    <div class="cs_${change}">${h.link_to(h.safe_unicode(path),h.url.current(anchor=FID))}</div>
-	                  %endfor
-	               %endfor
-	        </div>
-	    </div>
+            </div>
+            <div style="font-size:1.1em;font-weight: bold;clear:both;padding-top:10px">${_('Files affected')}</div>
+            <div class="cs_files">
+                   %for cs in c.cs_ranges:
+                       <div class="cur_cs">${h.link_to('r%s:%s' % (cs.revision,h.short_id(cs.raw_id)),h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id))}</div>
+                      %for FID, (cs1, cs2, change, path, diff, stats) in c.changes[cs.raw_id].iteritems():
+                        <div class="cs_${change}">${h.link_to(h.safe_unicode(path),h.url.current(anchor=FID))}</div>
+                      %endfor
+                   %endfor
+            </div>
+        </div>
 
     </div>
     <%namespace name="comment" file="/changeset/changeset_file_comment.html"/>
@@ -79,19 +77,19 @@
                 <span class="merge">${_('merge')}</span>
                 %endif
                 %if cs.branch:
-                <span class="branchtag" title="${'%s %s' % (_('branch'),cs.branch)}">
+                <span class="branchtag" title="${_('Branch %s') % cs.branch}">
                    ${h.link_to(h.shorter(cs.branch),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))}
                 </span>
                 %endif
                 %if h.is_hg(c.rhodecode_repo):
                   %for book in cs.bookmarks:
-                  <span class="bookbook" title="${'%s %s' % (_('bookmark'),book)}">
+                  <span class="bookbook" title="${_('Bookmark %s') % book}">
                      ${h.link_to(h.shorter(book),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))}
                   </span>
                   %endfor
                 %endif
                 %for tag in cs.tags:
-                    <span class="tagtag"  title="${'%s %s' % (_('tag'),tag)}">
+                    <span class="tagtag" title="${_('Tag %s') % tag}">
                     ${h.link_to(h.shorter(tag),h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id))}</span>
                 %endfor
               </span>
--- a/rhodecode/templates/changeset/diff_block.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/changeset/diff_block.html	Sun Apr 07 18:37:22 2013 +0200
@@ -4,7 +4,10 @@
 ## ${diff_block.diff_block(change)}
 ##
 <%def name="diff_block(change)">
-
+<div class="diff-collapse">
+    <span target="${'diff-container-%s' % (id(change))}" class="diff-collapse-button">&uarr; ${_('Collapse diff')} &uarr;</span>
+</div>
+<div class="diff-container" id="${'diff-container-%s' % (id(change))}">
 %for FID,(cs1, cs2, change, path, diff, stats) in change.iteritems():
     ##%if op !='removed':
     <div id="${FID}_target" style="clear:both;margin-top:25px"></div>
@@ -16,15 +19,15 @@
                     revision=cs2,f_path=h.safe_unicode(path)))}
                 </div>
                 <div class="diff-actions">
-                  <a href="${h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(path),diff2=cs2,diff1=cs1,diff='diff',fulldiff=1)}" class="tooltip" title="${h.tooltip(_('show full diff for this file'))}"><img class="icon" src="${h.url('/images/icons/page_white_go.png')}"/></a>
-                  <a href="${h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(path),diff2=cs2,diff1=cs1,diff='raw')}" class="tooltip" title="${h.tooltip(_('raw diff'))}"><img class="icon" src="${h.url('/images/icons/page_white.png')}"/></a>
-                  <a href="${h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(path),diff2=cs2,diff1=cs1,diff='download')}" class="tooltip" title="${h.tooltip(_('download diff'))}"><img class="icon" src="${h.url('/images/icons/page_save.png')}"/></a>
+                  <a href="${h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(path),diff2=cs2,diff1=cs1,diff='diff',fulldiff=1)}" class="tooltip" title="${h.tooltip(_('Show full diff for this file'))}"><img class="icon" src="${h.url('/images/icons/page_white_go.png')}"/></a>
+                  <a href="${h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(path),diff2=cs2,diff1=cs1,diff='raw')}" class="tooltip" title="${h.tooltip(_('Raw diff'))}"><img class="icon" src="${h.url('/images/icons/page_white.png')}"/></a>
+                  <a href="${h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(path),diff2=cs2,diff1=cs1,diff='download')}" class="tooltip" title="${h.tooltip(_('Download diff'))}"><img class="icon" src="${h.url('/images/icons/page_save.png')}"/></a>
                   ${c.ignorews_url(request.GET, h.FID(cs2,path))}
                   ${c.context_url(request.GET, h.FID(cs2,path))}
                 </div>
                 <span style="float:right;margin-top:-3px">
                   <label>
-                  ${_('show inline comments')}
+                  ${_('Show inline comments')}
                   ${h.checkbox('',checked="checked",class_="show-inline-comments",id_for=h.FID(cs2,path))}
                   </label>
                 </span>
@@ -37,7 +40,7 @@
     </div>
     ##%endif
 %endfor
-
+</div>
 </%def>
 
 <%def name="diff_block_simple(change)">
@@ -48,7 +51,9 @@
       <div class="code-header">
           <div class="changeset_header">
               <div class="changeset_file">
-                  <a href="#">${h.safe_unicode(filenode_path)}</a>
+                  ${h.safe_unicode(filenode_path)} |
+                  <a class="spantag" href="${h.url('files_home', repo_name=c.other_repo.repo_name, f_path=filenode_path, revision=c.org_ref)}" title="${_('Show file at latest version in this repo')}">${c.org_ref_type}@${h.short_id(c.org_ref) if c.org_ref_type=='rev' else c.org_ref}</a> -&gt;
+                  <a class="spantag" href="${h.url('files_home', repo_name=c.repo_name, f_path=filenode_path, revision=c.other_ref)}" title="${_('Show file at initial version in this repo')}">${c.other_ref_type}@${h.short_id(c.other_ref) if c.other_ref_type=='rev' else c.other_ref}</a>
               </div>
           </div>
       </div>
--- a/rhodecode/templates/changeset/patch_changeset.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/changeset/patch_changeset.html	Sun Apr 07 18:37:22 2013 +0200
@@ -1,16 +1,16 @@
 %if h.is_hg(c.rhodecode_repo):
 # ${c.rhodecode_repo.alias.upper()} changeset patch
-# User ${c.changeset.author|n}
+# User ${c.changeset.author |n}
 # Date ${c.changeset.date}
 # Node ID ${c.changeset.raw_id}
 ${c.parent_tmpl}
-${c.changeset.message}
+${c.changeset.message |n}
 
 %elif h.is_git(c.rhodecode_repo):
-From 35d9475598be9f807cd800e51212b8f1efbeacd9 Mon Sep 17 00:00:00 2001
-From: ${c.changeset.author}
+From ${c.changeset.raw_id} ${c.changeset.date}
+From: ${c.changeset.author |n}
 Date: ${c.changeset.date}
-Subject: [PATCH] ${c.changeset.message}
+Subject: [PATCH] ${c.changeset.message |n}
 ---
 
 %endif
--- a/rhodecode/templates/compare/compare_cs.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/compare/compare_cs.html	Sun Apr 07 18:37:22 2013 +0200
@@ -1,28 +1,41 @@
 ## Changesets table !
 <div class="container">
-  <table class="compare_view_commits noborder">
   %if not c.cs_ranges:
     <span class="empty_data">${_('No changesets')}</span>
   %else:
-    %for cnt, cs in enumerate(c.cs_ranges):
+    <table class="compare_view_commits noborder">
+    %for cs in reversed(c.cs_ranges):
         <tr>
-        <td><div class="gravatar"><img alt="gravatar" src="${h.gravatar_url(h.email_or_none(cs.author),14)}"/></div></td>
         <td>
           %if cs.raw_id in c.statuses:
             <div title="${c.statuses[cs.raw_id][1]}" class="changeset-status-ico"><img src="${h.url('/images/icons/flag_status_%s.png' % c.statuses[cs.raw_id][0])}" /></div>
           %endif
         </td>
-        <td>${h.link_to('r%s:%s' % (cs.revision,h.short_id(cs.raw_id)),h.url('changeset_home',repo_name=c.target_repo,revision=cs.raw_id))}
+        <td><span class="tooltip" title="${h.tooltip(h.age(cs.date))}">${cs.date}</span></td>
+        <td><div class="gravatar"><img alt="gravatar" src="${h.gravatar_url(h.email_or_none(cs.author),14)}"/></div></td>
+        <td><div class="author">${h.person(cs.author)}</div></td>
+        <td>${h.link_to('r%s:%s' % (cs.revision,h.short_id(cs.raw_id)),h.url('changeset_home',repo_name=c.other_repo.repo_name,revision=cs.raw_id))}
         %if c.as_form:
           ${h.hidden('revisions',cs.raw_id)}
         %endif
         </td>
-        <td><div class="author">${h.person(cs.author)}</div></td>
-        <td><span class="tooltip" title="${h.tooltip(h.age(cs.date))}">${cs.date}</span></td>
+        <td>
+        %if cs.branch:
+        <span class="branchtag">${cs.branch}</span>
+        %endif
+        </td>
         <td><div class="message tooltip" title="${h.tooltip(cs.message)}" style="white-space:normal">${h.urlify_commit(h.shorter(cs.message, 60),c.repo_name)}</div></td>
         </tr>
     %endfor
-
+    </table>
+    %if c.ancestor:
+    <span class="ancestor">${_('Ancestor')}:
+      ${h.link_to(h.short_id(c.ancestor),h.url('changeset_home',repo_name=c.repo_name,revision=c.ancestor))}
+    </span>
+    %endif
+    %if c.as_form:
+      ${h.hidden('ancestor_rev',c.ancestor)}
+      ${h.hidden('merge_rev',c.cs_ranges[-1].raw_id)}
+    %endif
   %endif
-  </table>
 </div>
--- a/rhodecode/templates/compare/compare_diff.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/compare/compare_diff.html	Sun Apr 07 18:37:22 2013 +0200
@@ -2,22 +2,19 @@
 <%inherit file="/base/base.html"/>
 
 <%def name="title()">
-    ${c.repo_name} ${_('Compare')} ${'%s@%s' % (c.org_repo.repo_name, c.org_ref)} -&gt; ${'%s@%s' % (c.other_repo.repo_name, c.other_ref)}
+    ${_('%s Compare') % c.repo_name} - ${'%s@%s' % (c.org_repo.repo_name, c.org_ref)} -&gt; ${'%s@%s' % (c.other_repo.repo_name, c.other_ref)} &middot; ${c.rhodecode_name}
 </%def>
 
 <%def name="breadcrumbs_links()">
-    ${h.link_to(_(u'Home'),h.url('/'))}
-    &raquo;
-    ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
-    &raquo;
-    ${_('Compare')}
+  ${_('Compare revisions')}
 </%def>
 
 <%def name="page_nav()">
-    ${self.menu('changelog')}
+    ${self.menu('repositories')}
 </%def>
 
 <%def name="main()">
+${self.context_bar('changelog')}
 <div class="box">
     <!-- box / title -->
     <div class="title">
@@ -25,8 +22,7 @@
     </div>
     <div class="table">
         <div id="body" class="diffblock">
-            <div class="code-header cv">
-                <h3 class="code-header-title">${_('Compare View')}</h3>
+            <div class="code-header">
                 <div>
                 ${'%s@%s' % (c.org_repo.repo_name, c.org_ref)} -&gt; ${'%s@%s' % (c.other_repo.repo_name, c.other_ref)}  <a href="${c.swap_url}">[swap]</a>
                 </div>
@@ -53,13 +49,13 @@
               %endif
               %for fid, change, f, stat in c.files:
                   <div class="cs_${change}">
-                    <div class="node">${h.link_to(h.safe_unicode(f),h.url.current(anchor=fid))}</div>
+                    <div class="node">${h.link_to(h.safe_unicode(f),h.url.current(anchor=fid, **request.GET.mixed()))}</div>
                     <div class="changes">${h.fancy_file_stats(stat)}</div>
                   </div>
               %endfor
             </div>
             % if c.limited_diff:
-              <h5>${_('Changeset was too big and was cut off...')}</h5>
+              <h5>${_('Changeset was too big and was cut off...')} <a href="${h.url.current(fulldiff=1, **request.GET.mixed())}" onclick="return confirm('${_("confirm to show potentially huge diff")}')">${_('Show full diff')}</a></h5>
             % endif
         </div>
     </div>
@@ -70,7 +66,7 @@
       ${diff_block.diff_block_simple([c.changes[fid]])}
     %endfor
     % if c.limited_diff:
-      <h4>${_('Changeset was too big and was cut off...')}</h4>
+      <h4>${_('Changeset was too big and was cut off...')} <a href="${h.url.current(fulldiff=1, **request.GET.mixed())}" onclick="return confirm('${_("confirm to show potentially huge diff")}')">${_('Show full diff')}</a></h4>
     % endif
      <script type="text/javascript">
 
--- a/rhodecode/templates/data_table/_dt_elements.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/data_table/_dt_elements.html	Sun Apr 07 18:37:22 2013 +0200
@@ -58,9 +58,9 @@
 
    ##PRIVATE/PUBLIC
    %if private and c.visual.show_private_icon:
-     <img class="icon" title="${_('private repository')}" alt="${_('private repository')}" src="${h.url('/images/icons/lock.png')}"/>
+     <img class="icon" title="${_('Private repository')}" alt="${_('Private repository')}" src="${h.url('/images/icons/lock.png')}"/>
    %elif not private and c.visual.show_public_icon:
-     <img class="icon" title="${_('public repository')}" alt="${_('public repository')}" src="${h.url('/images/icons/lock_open.png')}"/>
+     <img class="icon" title="${_('Public repository')}" alt="${_('Public repository')}" src="${h.url('/images/icons/lock_open.png')}"/>
    %endif
 
    ##NAME
@@ -71,7 +71,7 @@
    %endif
    %if fork_of:
         <a href="${h.url('summary_home',repo_name=fork_of.repo_name)}">
-        <img class="icon" alt="${_('fork')}" title="${_('Fork of')} ${fork_of.repo_name}" src="${h.url('/images/icons/arrow_divide.png')}"/></a>
+        <img class="icon" alt="${_('Fork')}" title="${_('Fork of %s') % fork_of.repo_name}" src="${h.url('/images/icons/arrow_divide.png')}"/></a>
    %endif
   </div>
 </%def>
@@ -110,17 +110,17 @@
     <div class="gravatar"><img alt="gravatar" src="${h.gravatar_url(email, size)}"/> </div>
 </%def>
 
-<%def name="repo_actions(repo_name)">
+<%def name="repo_actions(repo_name, super_user=True)">
   <div>
     <div style="float:left">
-    <a href="${h.url('repo_settings_home',repo_name=repo_name)}" title="${_('edit')}">
-      ${h.submit('edit_%s' % repo_name,_('edit'),class_="edit_icon action_button")}
-    </a>
+      <a href="${h.url('edit_repo',repo_name=repo_name)}" title="${_('edit')}">
+        ${h.submit('edit_%s' % repo_name,_('edit'),class_="edit_icon action_button")}
+      </a>
     </div>
     <div style="float:left">
-    ${h.form(h.url('repo', repo_name=repo_name),method='delete')}
-      ${h.submit('remove_%s' % repo_name,_('delete'),class_="delete_icon action_button",onclick="return confirm('"+_('Confirm to delete this repository: %s') % repo_name+"');")}
-    ${h.end_form()}
+      ${h.form(h.url('repo', repo_name=repo_name),method='delete')}
+        ${h.submit('remove_%s' % repo_name,_('delete'),class_="delete_icon action_button",onclick="return confirm('"+_('Confirm to delete this repository: %s') % repo_name+"');")}
+      ${h.end_form()}
     </div>
   </div>
 </%def>
--- a/rhodecode/templates/email_templates/changeset_comment.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/email_templates/changeset_comment.html	Sun Apr 07 18:37:22 2013 +0200
@@ -1,12 +1,17 @@
 ## -*- coding: utf-8 -*-
 <%inherit file="main.html"/>
-
-<h4>${subject}</h4>
-
+##message from user goes here
+<p>
+${cs_comment_user}: <br/>
 ${body}
+</p>
+%if status_change:
+    <span>${_('New status')} -&gt; ${status_change}</span>
+%endif
+<div>${_('View this comment here')}: ${cs_comment_url}</div>
 
-% if status_change is not None:
-<div>
-    ${_('New status$')} -> ${status_change}
-</div>
-% endif
+<pre>
+${_('Repo')}: ${cs_target_repo}
+${_('Changeset')}: ${h.short_id(raw_id)}
+${_('desc')}: ${h.shorter(message, 256)}
+</pre>
--- a/rhodecode/templates/email_templates/pull_request.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/email_templates/pull_request.html	Sun Apr 07 18:37:22 2013 +0200
@@ -2,16 +2,17 @@
 <%inherit file="main.html"/>
 
 ${_('User %s opened pull request for repository %s and wants you to review changes.') % (('<b>%s</b>' % pr_user_created),pr_repo_url) |n}
+<div>${_('View this pull request here')}: ${pr_url}</div>
 <div>${_('title')}: ${pr_title}</div>
 <div>${_('description')}:</div>
-<div>${_('View this pull request here')}: ${pr_url}</div>
 <p>
 ${body}
 </p>
 
 <div>${_('revisions for reviewing')}</div>
-<ul>
-%for r in pr_revisions:
-    <li>${r}</li>
+<p style="white-space: pre-wrap;">
+%for r,r_msg in pr_revisions:
+<b>${h.short_id(r)}</b>:
+${h.shorter(r_msg, 256)}
 %endfor
-</ul>
+</p>
--- a/rhodecode/templates/email_templates/pull_request_comment.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/email_templates/pull_request_comment.html	Sun Apr 07 18:37:22 2013 +0200
@@ -1,14 +1,18 @@
 ## -*- coding: utf-8 -*-
 <%inherit file="main.html"/>
-
-${_('User %s commented on pull request #%s for repository %s') % ('<b>%s</b>' % pr_comment_user ,pr_id,pr_target_repo)}
-
+${_('Pull request #%s for repository %s') % (pr_id, pr_target_repo) |n}
+##message from user goes here
 <p>
+${pr_comment_user}: <br/>
 ${body}
+</p>
+<div>${_('View this comment here')}: ${pr_comment_url}</div>
 
 %if status_change:
-    <span>${_('New status')} -> ${status_change}</span>
+    %if closing_pr:
+       <span>${_('Closing pull request with status')} -&gt; ${status_change}</span>
+    %else:
+       <span>${_('New status')} -&gt; ${status_change}</span>
+    %endif
 %endif
 </p>
-
-${_('View this comment here')}: ${pr_comment_url}
--- a/rhodecode/templates/errors/error_document.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/errors/error_document.html	Sun Apr 07 18:37:22 2013 +0200
@@ -8,45 +8,54 @@
         <link rel="icon" href="${h.url('/images/icons/database_gear.png')}" type="image/png" />
 
         <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
-	    %if c.redirect_time:
-	        <meta http-equiv="refresh" content="${c.redirect_time}; url=${c.url_redirect}"/>
-	    %endif
+        %if c.redirect_time:
+            <meta http-equiv="refresh" content="${c.redirect_time}; url=${c.url_redirect}"/>
+        %endif
 
         <!-- stylesheets -->
         <link rel="stylesheet" type="text/css" href="${h.url('/css/style.css')}" media="screen" />
-	    <style type="text/css">
-	     #main_div{
-	       border: 0px solid #000;
-	       width: 500px;
-	       margin: auto;
-	       text-align: center;
-	       margin-top: 200px;
-	       font-size: 1.6em;
-	     }
-	     .error_message{
-	        text-align: center;
-	        color:#003367;
-	        font-size: 1.6em;
-	        margin:10px;
-	     }
-	    </style>
+        <style type="text/css">
+         #main_div{
+           border: 0px solid #000;
+           width: 500px;
+           margin: auto;
+           text-align: center;
+           margin-top: 200px;
+           font-size: 1.6em;
+         }
+         .error_message{
+            text-align: center;
+            color:#003367;
+            font-size: 1.6em;
+            margin:10px;
+         }
+        </style>
 
     </head>
     <body>
-
+        <div class="flash_msg">
+            <% messages = h.flash.pop_messages() %>
+            % if messages:
+            <ul id="flash-messages">
+                % for message in messages:
+                <li class="${message.category}_msg">${message}</li>
+                % endfor
+            </ul>
+            % endif
+        </div>
         <div id="login">
             <div class="table">
-				<div id="main_div">
-				    <div style="font-size:2.0em;margin: 10px">${c.rhodecode_name}</div>
-					<h1 class="error_message">${c.error_message}</h1>
+                <div id="main_div">
+                    <div style="font-size:2.0em;margin: 10px">${c.rhodecode_name}</div>
+                    <h1 class="error_message">${c.error_message}</h1>
 
-					<p>${c.error_explanation}</p>
+                    <p>${c.error_explanation}</p>
 
-			        %if c.redirect_time:
-			            <p>${_('You will be redirected to %s in %s seconds') % (c.redirect_module,c.redirect_time)}</p>
-				    %endif
+                    %if c.redirect_time:
+                        <p>${_('You will be redirected to %s in %s seconds') % (c.redirect_module,c.redirect_time)}</p>
+                    %endif
 
-				</div>
+                </div>
             </div>
             <!-- end login -->
         </div>
--- a/rhodecode/templates/files/file_diff.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/files/file_diff.html	Sun Apr 07 18:37:22 2013 +0200
@@ -1,21 +1,19 @@
 <%inherit file="/base/base.html"/>
 
 <%def name="title()">
-    ${_('%s File diff') % c.repo_name} - ${c.rhodecode_name}
+    ${_('%s File Diff') % c.repo_name} &middot; ${c.rhodecode_name}
 </%def>
 
 <%def name="breadcrumbs_links()">
-    ${h.link_to(_(u'Home'),h.url('/'))}
-    &raquo;
-    ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
-    &raquo;
     ${_('File diff')} r${c.changeset_1.revision}:${h.short_id(c.changeset_1.raw_id)} &rarr; r${c.changeset_2.revision}:${h.short_id(c.changeset_2.raw_id)}
 </%def>
 
 <%def name="page_nav()">
-    ${self.menu('files')}
+    ${self.menu('repositories')}
 </%def>
+
 <%def name="main()">
+${self.context_bar('files')}
 <div class="box">
     <!-- box / title -->
     <div class="title">
@@ -27,6 +25,7 @@
     ${diff_block.diff_block(c.changes)}
     </div>
 </div>
+
 <script>
 YUE.onDOMReady(function(){
 
--- a/rhodecode/templates/files/files.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/files/files.html	Sun Apr 07 18:37:22 2013 +0200
@@ -1,39 +1,40 @@
 <%inherit file="/base/base.html"/>
 
-<%def name="title()">
-    ${_('%s files') % c.repo_name} - ${c.rhodecode_name}
+<%def name="title(*args)">
+    ${_('%s Files') % c.repo_name}
+    %if hasattr(c,'file'):
+        &middot; ${c.file.path or '\\'}
+    %endif
+    &middot; ${c.rhodecode_name}
 </%def>
 
 <%def name="breadcrumbs_links()">
-    ${h.link_to(_(u'Home'),h.url('/'))}
-    &raquo;
-    ${h.link_to(c.repo_name,h.url('files_home',repo_name=c.repo_name))}
-    &raquo;
-    ${_('files')}
+    ${_('Files')}
     %if c.file:
-        @ r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)}
+        @ ${h.show_id(c.changeset)}
     %endif
 </%def>
 
 <%def name="page_nav()">
-    ${self.menu('files')}
+    ${self.menu('repositories')}
 </%def>
 
 <%def name="main()">
+${self.context_bar('files')}
 <div class="box">
     <!-- box / title -->
     <div class="title">
         ${self.breadcrumbs()}
-	    <ul class="links">
-		    <li>
-		      <span style="text-transform: uppercase;"><a href="#">${_('branch')}: ${c.changeset.branch}</a></span>
-	        </li>
-	    </ul>
+        <ul class="links">
+            <li>
+              <span style="text-transform: uppercase;"><a href="#">${_('Branch')}: ${c.changeset.branch}</a></span>
+            </li>
+        </ul>
     </div>
     <div class="table">
-		<div id="files_data">
-			<%include file='files_ypjax.html'/>
-		</div>
+        <div id="files_data">
+            <%include file='files_ypjax.html'/>
+        </div>
     </div>
 </div>
 
@@ -50,10 +51,10 @@
 var ypjax_links = function(){
     YUE.on(YUQ('.ypjax-link'), 'click',function(e){
 
-    	//don't do ypjax on middle click
-    	if(e.which == 2 || !History.enabled){
-    		return true;
-    	}
+        //don't do ypjax on middle click
+        if(e.which == 2 || !History.enabled){
+            return true;
+        }
 
         var el = e.currentTarget;
         var url = el.href;
@@ -64,14 +65,15 @@
         //extract rev and the f_path from url.
         parts = url.split(_base_url)
         if(parts.length != 2){
-        	return false;
+            return false;
         }
 
         var parts2 = parts[1].split('/');
-      	var rev = parts2.shift(); // pop the first element which is the revision
-      	var f_path = parts2.join('/');
+        var rev = parts2.shift(); // pop the first element which is the revision
+        var f_path = parts2.join('/');
 
-        var title = "${_('%s files') % c.repo_name}" + " - " + f_path;
+        //page title make this consistent with title() mako function on top
+        var title = "${_('%s Files') % c.repo_name}" + " &middot; " + (f_path || '\\') + " &middot; " + "${c.rhodecode_name}";
 
         var _node_list_url = node_list_url.replace('__REV__',rev).replace('__FPATH__', f_path);
         var _url_base = url_base.replace('__REV__',rev);
@@ -93,7 +95,7 @@
     fileBrowserListeners(State.url, State.data.node_list_url, State.data.url_base);
 
     if(YUD.get('hlcode')){
-    	YUE.on('hlcode', 'mouseup', getSelectionLink);
+        YUE.on('hlcode', 'mouseup', getSelectionLink);
     }
     //console.log(State);
     if(YUD.get('load_node_history')){
@@ -102,7 +104,7 @@
       YUE.on('load_node_history', 'click', function(e){
           var _url = node_history_url.replace('__REV__',State.data.rev).replace('__FPATH__', State.data.f_path);
           ypjax(_url, 'node_history', function(o){
-        	  tooltip_activate();
+              tooltip_activate();
           })
       });
     }
@@ -132,11 +134,11 @@
         }
         else{
           ypjax(State.url,container,function(o){
-          	//callbacks after ypjax call
-          	callbacks(State);
-          	if (o !== undefined){
-          	  //store our request in cache
-          	  var _expire_on = new Date().getTime()+CACHE_EXPIRE;
+              //callbacks after ypjax call
+              callbacks(State);
+              if (o !== undefined){
+                //store our request in cache
+                var _expire_on = new Date().getTime()+CACHE_EXPIRE;
               CACHE[cache_key] = [_expire_on, o.responseText];
             }
           });
--- a/rhodecode/templates/files/files_add.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/files/files_add.html	Sun Apr 07 18:37:22 2013 +0200
@@ -1,7 +1,7 @@
 <%inherit file="/base/base.html"/>
 
 <%def name="title()">
-    ${_('%s Edit file') % c.repo_name} - ${c.rhodecode_name}
+    ${_('%s Files Add') % c.repo_name} &middot; ${c.rhodecode_name}
 </%def>
 
 <%def name="js_extra()">
@@ -11,18 +11,16 @@
 <link rel="stylesheet" type="text/css" href="${h.url('/css/codemirror.css')}"/>
 </%def>
 
-<%def name="breadcrumbs_links()">
-    ${h.link_to(_(u'Home'),h.url('/'))}
-    &raquo;
-    ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
-    &raquo;
-    ${_('add file')} @ R${c.cs.revision}:${h.short_id(c.cs.raw_id)}
+<%def name="page_nav()">
+    ${self.menu('repositories')}
 </%def>
 
-<%def name="page_nav()">
-		${self.menu('files')}
+<%def name="breadcrumbs_links()">
+    ${_('Add file')} @ ${h.show_id(c.cs)}
 </%def>
+
 <%def name="main()">
+${self.context_bar('files')}
 <div class="box">
     <!-- box / title -->
     <div class="title">
@@ -30,13 +28,13 @@
         <ul class="links">
             <li>
               <span style="text-transform: uppercase;">
-              <a href="#">${_('branch')}: ${c.cs.branch}</a></span>
+              <a href="#">${_('Branch')}: ${c.cs.branch}</a></span>
             </li>
         </ul>
     </div>
     <div class="table">
-		<div id="files_data">
-		  ${h.form(h.url.current(),method='post',id='eform',enctype="multipart/form-data")}
+        <div id="files_data">
+          ${h.form(h.url.current(),method='post',id='eform',enctype="multipart/form-data")}
             <h3>${_('Add new file')}</h3>
             <div class="form">
               <div class="fields">
@@ -51,7 +49,7 @@
                   </div>
                   <div id="upload_file_container" class="field" style="display:none">
                     <div class="label">
-                        <label for="location">${_('Upload file')}</label>
+                        <label for="upload_file_container">${_('Upload file')}</label>
                     </div>
                     <div class="file">
                         <input type="file"  size="30" name="upload_file" id="upload_file">
@@ -69,24 +67,24 @@
                    </div>
               </div>
             </div>
-			<div id="body" class="codeblock">
-			    <div id="editor_container">
+            <div id="body" class="codeblock">
+                <div id="editor_container">
                     <pre id="editor_pre"></pre>
-				    <textarea id="editor" name="content" style="display:none"></textarea>
+                    <textarea id="editor" name="content" style="display:none"></textarea>
                 </div>
-				<div style="padding: 10px;color:#666666">${_('commit message')}</div>
-				<textarea id="commit" name="message" style="height: 100px;width: 99%;margin-left:4px"></textarea>
-			</div>
-			<div style="text-align: l;padding-top: 5px">
+                <div style="padding: 10px;color:#666666">${_('Commit message')}</div>
+                <textarea id="commit" name="message" style="height: 100px;width: 99%;margin-left:4px" placeholder="${c.default_message}"></textarea>
+            </div>
+            <div style="text-align: l;padding-top: 5px">
             ${h.submit('commit',_('Commit changes'),class_="ui-btn")}
             ${h.reset('reset',_('Reset'),class_="ui-btn")}
-			</div>
-			${h.end_form()}
-			<script type="text/javascript">
-			var reset_url = "${h.url('files_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.f_path)}";
-		    initCodeMirror('editor',reset_url);
-			</script>
-		</div>
+            </div>
+            ${h.end_form()}
+            <script type="text/javascript">
+            var reset_url = "${h.url('files_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.f_path)}";
+            initCodeMirror('editor',reset_url);
+            </script>
+        </div>
     </div>
 </div>
 </%def>
--- a/rhodecode/templates/files/files_browser.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/files/files_browser.html	Sun Apr 07 18:37:22 2013 +0200
@@ -1,34 +1,34 @@
 <%def name="file_class(node)">
-	%if node.is_file():
-		<%return "browser-file" %>
-	%else:
-		<%return "browser-dir"%>
-	%endif
+    %if node.is_file():
+        <%return "browser-file" %>
+    %else:
+        <%return "browser-dir"%>
+    %endif
 </%def>
 <div id="body" class="browserblock">
     <div class="browser-header">
-		<div class="browser-nav">
-			${h.form(h.url.current())}
-			<div class="info_box">
-	          <span class="rev">${_('view')}@rev</span>
-	          <a class="ui-btn ypjax-link" href="${c.url_prev}" title="${_('previous revision')}">&laquo;</a>
-	          ${h.text('at_rev',value=c.changeset.revision,size=5)}
-	          <a class="ui-btn ypjax-link" href="${c.url_next}" title="${_('next revision')}">&raquo;</a>
-	          ## ${h.submit('view',_('view'),class_="ui-btn")}
-		    </div>
-			${h.end_form()}
-		</div>
-	    <div class="browser-branch">
-	       ${h.checkbox('stay_at_branch',c.changeset.branch,c.changeset.branch==c.branch)}
-	       <label>${_('follow current branch')}</label>
-	    </div>
+        <div class="browser-nav">
+            ${h.form(h.url.current())}
+            <div class="info_box">
+              <span class="rev">${_('View')}@rev</span>
+              <a class="ui-btn ypjax-link" href="${c.url_prev}" title="${_('Previous revision')}">&laquo;</a>
+              ${h.text('at_rev',value=c.changeset.revision,size=5)}
+              <a class="ui-btn ypjax-link" href="${c.url_next}" title="${_('Next revision')}">&raquo;</a>
+              ## ${h.submit('view',_('View'),class_="ui-btn")}
+            </div>
+            ${h.end_form()}
+        </div>
+        <div class="browser-branch">
+           ${h.checkbox('stay_at_branch',c.changeset.branch,c.changeset.branch==c.branch)}
+           <label>${_('Follow current branch')}</label>
+        </div>
         <div class="browser-search">
               <div id="search_activate_id" class="search_activate">
-                  <a class="ui-btn" id="filter_activate" href="#">${_('search file list')}</a>
+                  <a class="ui-btn" id="filter_activate" href="#">${_('Search file list')}</a>
               </div>
               % if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name):
                     <div id="add_node_id" class="add_node">
-                        <a class="ui-btn" href="${h.url('files_add_home',repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=c.f_path)}">${_('add new file')}</a>
+                        <a class="ui-btn" href="${h.url('files_add_home',repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=c.f_path)}">${_('Add new file')}</a>
                     </div>
               % endif
         <div>
@@ -40,77 +40,77 @@
         </div>
     </div>
 
-	<div class="browser-body">
-		<table class="code-browser">
-		         <thead>
-		             <tr>
-		                 <th>${_('Name')}</th>
-		                 <th>${_('Size')}</th>
-		                 <th>${_('Mimetype')}</th>
-		                 <th>${_('Last Revision')}</th>
-		                 <th>${_('Last modified')}</th>
-		                 <th>${_('Last commiter')}</th>
-		             </tr>
-		         </thead>
+    <div class="browser-body">
+        <table class="code-browser">
+            <thead>
+                <tr>
+                    <th>${_('Name')}</th>
+                    <th>${_('Size')}</th>
+                    <th>${_('Mimetype')}</th>
+                    <th>${_('Last Revision')}</th>
+                    <th>${_('Last modified')}</th>
+                    <th>${_('Last committer')}</th>
+                </tr>
+            </thead>
 
-                <tbody id="tbody">
-          		%if c.file.parent:
-         		<tr class="parity0">
-	          		<td>
-	          			${h.link_to('..',h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=c.file.parent.path),class_="browser-dir ypjax-link")}
-	          		</td>
-	          		<td></td>
-	          		<td></td>
-	          		<td></td>
-	          		<td></td>
-	          		<td></td>
-				</tr>
-          		%endif
+            <tbody id="tbody">
+                %if c.file.parent:
+                <tr class="parity0">
+                    <td>
+                        ${h.link_to('..',h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=c.file.parent.path),class_="browser-dir ypjax-link")}
+                    </td>
+                    <td></td>
+                    <td></td>
+                    <td></td>
+                    <td></td>
+                    <td></td>
+                </tr>
+                %endif
 
-		    %for cnt,node in enumerate(c.file):
-				<tr class="parity${cnt%2}">
-		             <td>
+            %for cnt,node in enumerate(c.file):
+                <tr class="parity${cnt%2}">
+                     <td>
                         %if node.is_submodule():
                            ${h.link_to(node.name,node.url or '#',class_="submodule-dir ypjax-link")}
                         %else:
                           ${h.link_to(node.name, h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=h.safe_unicode(node.path)),class_=file_class(node)+" ypjax-link")}
                         %endif:
-		             </td>
-		             <td>
-		             %if node.is_file():
-		             	${h.format_byte_size(node.size,binary=True)}
-		             %endif
-		             </td>
-		             <td>
-		              %if node.is_file():
-		                  ${node.mimetype}
-		              %endif
-		             </td>
-		             <td>
-		             	%if node.is_file():
-		             		<div class="tooltip" title="${h.tooltip(node.last_changeset.message)}">
-		             		<pre>${'r%s:%s' % (node.last_changeset.revision,node.last_changeset.short_id)}</pre>
-                            </div>
-		             	%endif
-		             </td>
-		             <td>
-		             	%if node.is_file():
-		             		<span class="tooltip" title="${h.tooltip(h.fmt_date(node.last_changeset.date))}">
+                     </td>
+                     <td>
+                     %if node.is_file():
+                         ${h.format_byte_size(node.size,binary=True)}
+                     %endif
+                     </td>
+                     <td>
+                      %if node.is_file():
+                          ${node.mimetype}
+                      %endif
+                     </td>
+                     <td>
+                         %if node.is_file():
+                             <div class="tooltip" title="${h.tooltip(node.last_changeset.message)}">
+                              <pre>${'r%s:%s' % (node.last_changeset.revision,node.last_changeset.short_id)}</pre>
+                             </div>
+                         %endif
+                     </td>
+                     <td>
+                         %if node.is_file():
+                             <span class="tooltip" title="${h.tooltip(h.fmt_date(node.last_changeset.date))}">
                             ${h.age(node.last_changeset.date)}</span>
-		             	%endif
-		             </td>
-		             <td>
-		             	%if node.is_file():
-		             		<span title="${node.last_changeset.author}">
+                         %endif
+                     </td>
+                     <td>
+                         %if node.is_file():
+                             <span title="${node.last_changeset.author}">
                             ${h.person(node.last_changeset.author)}
                             </span>
-		             	%endif
-		             </td>
-				</tr>
-			%endfor
-                </tbody>
-                <tbody id="tbody_filtered" style="display:none">
-                </tbody>
-		</table>
-	</div>
+                         %endif
+                     </td>
+                </tr>
+            %endfor
+            </tbody>
+            <tbody id="tbody_filtered" style="display:none">
+            </tbody>
+        </table>
+    </div>
 </div>
--- a/rhodecode/templates/files/files_edit.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/files/files_edit.html	Sun Apr 07 18:37:22 2013 +0200
@@ -1,7 +1,7 @@
 <%inherit file="/base/base.html"/>
 
 <%def name="title()">
-    ${_('%s Edit file') % c.repo_name} - ${c.rhodecode_name}
+    ${_('%s Files Edit') % c.repo_name} &middot; ${c.rhodecode_name}
 </%def>
 
 <%def name="js_extra()">
@@ -11,18 +11,16 @@
 <link rel="stylesheet" type="text/css" href="${h.url('/css/codemirror.css')}"/>
 </%def>
 
-<%def name="breadcrumbs_links()">
-    ${h.link_to(_(u'Home'),h.url('/'))}
-    &raquo;
-    ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
-    &raquo;
-    ${_('edit file')} @ R${c.cs.revision}:${h.short_id(c.cs.raw_id)}
+<%def name="page_nav()">
+    ${self.menu('repositories')}
 </%def>
 
-<%def name="page_nav()">
-		${self.menu('files')}
+<%def name="breadcrumbs_links()">
+    ${_('Edit file')} @ ${h.show_id(c.cs)}
 </%def>
+
 <%def name="main()">
+${self.context_bar('files')}
 <div class="box">
     <!-- box / title -->
     <div class="title">
@@ -30,15 +28,15 @@
         <ul class="links">
             <li>
               <span style="text-transform: uppercase;">
-              <a href="#">${_('branch')}: ${c.cs.branch}</a></span>
+              <a href="#">${_('Branch')}: ${c.cs.branch}</a></span>
             </li>
         </ul>
     </div>
     <div class="table">
-		<div id="files_data">
-			<h3 class="files_location">${_('Location')}: ${h.files_breadcrumbs(c.repo_name,c.cs.revision,c.file.path)}</h3>
-			${h.form(h.url.current(),method='post',id='eform')}
-			<div id="body" class="codeblock">
+        <div id="files_data">
+            <h3 class="files_location">${_('Location')}: ${h.files_breadcrumbs(c.repo_name,c.cs.revision,c.file.path)}</h3>
+            ${h.form(h.url.current(),method='post',id='eform')}
+            <div id="body" class="codeblock">
             <div class="code-header">
                 <div class="stats">
                     <div class="left"><img src="${h.url('/images/icons/file.png')}"/></div>
@@ -46,33 +44,33 @@
                     <div class="left item">${h.format_byte_size(c.file.size,binary=True)}</div>
                     <div class="left item last">${c.file.mimetype}</div>
                     <div class="buttons">
-                      ${h.link_to(_('show annotation'),h.url('files_annotate_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.f_path),class_="ui-btn")}
-                      ${h.link_to(_('show as raw'),h.url('files_raw_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.f_path),class_="ui-btn")}
-                      ${h.link_to(_('download as raw'),h.url('files_rawfile_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.f_path),class_="ui-btn")}
+                      ${h.link_to(_('Show annotation'),h.url('files_annotate_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.f_path),class_="ui-btn")}
+                      ${h.link_to(_('Show as raw'),h.url('files_raw_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.f_path),class_="ui-btn")}
+                      ${h.link_to(_('Download as raw'),h.url('files_rawfile_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.f_path),class_="ui-btn")}
                       % if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name):
                        % if not c.file.is_binary:
-                        ${h.link_to(_('source'),h.url('files_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.f_path),class_="ui-btn")}
+                        ${h.link_to(_('Source'),h.url('files_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.f_path),class_="ui-btn")}
                        % endif
                       % endif
                     </div>
                 </div>
                 <div class="commit">${_('Editing file')}: ${c.file.unicode_path}</div>
             </div>
-			    <pre id="editor_pre"></pre>
-				<textarea id="editor" name="content" style="display:none">${h.escape(c.file.content)|n}</textarea>
-				<div style="padding: 10px;color:#666666">${_('commit message')}</div>
-				<textarea id="commit" name="message" style="height: 60px;width: 99%;margin-left:4px"></textarea>
-			</div>
-			<div style="text-align: left;padding-top: 5px">
+                <pre id="editor_pre"></pre>
+                <textarea id="editor" name="content" style="display:none">${h.escape(c.file.content)|n}</textarea>
+                <div style="padding: 10px;color:#666666">${_('Commit message')}</div>
+                <textarea id="commit" name="message" style="height: 60px;width: 99%;margin-left:4px" placeholder="${c.default_message}"></textarea>
+            </div>
+            <div style="text-align: left;padding-top: 5px">
             ${h.submit('commit',_('Commit changes'),class_="ui-btn")}
             ${h.reset('reset',_('Reset'),class_="ui-btn")}
-			</div>
-			${h.end_form()}
-			<script type="text/javascript">
-			var reset_url = "${h.url('files_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.file.path)}";
-			initCodeMirror('editor',reset_url);
-			</script>
-		</div>
+            </div>
+            ${h.end_form()}
+            <script type="text/javascript">
+            var reset_url = "${h.url('files_home',repo_name=c.repo_name,revision=c.cs.raw_id,f_path=c.file.path)}";
+            initCodeMirror('editor',reset_url);
+            </script>
+        </div>
     </div>
 </div>
 </%def>
--- a/rhodecode/templates/files/files_history_box.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/files/files_history_box.html	Sun Apr 07 18:37:22 2013 +0200
@@ -6,9 +6,9 @@
             ${h.form(h.url('files_diff_home',repo_name=c.repo_name,f_path=c.f_path),method='get')}
             ${h.hidden('diff2',c.file_changeset.raw_id)}
             ${h.select('diff1',c.file_changeset.raw_id,c.file_history)}
-            ${h.submit('diff',_('diff to revision'),class_="ui-btn")}
-            ${h.submit('show_rev',_('show at revision'),class_="ui-btn")}
-            ${h.link_to(_('show full history'),h.url('shortlog_file_home',repo_name=c.repo_name, revision=c.file_changeset.raw_id, f_path=c.f_path),class_="ui-btn")}
+            ${h.submit('diff',_('Diff to revision'),class_="ui-btn")}
+            ${h.submit('show_rev',_('Show at revision'),class_="ui-btn")}
+            ${h.link_to(_('Show full history'),h.url('shortlog_file_home',repo_name=c.repo_name, revision=c.file_changeset.raw_id, f_path=c.f_path),class_="ui-btn")}
             ${h.hidden('annotate', c.annotate)}
             ${h.end_form()}
             </div>
--- a/rhodecode/templates/files/files_source.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/files/files_source.html	Sun Apr 07 18:37:22 2013 +0200
@@ -10,7 +10,7 @@
 
 
 <div id="body" class="codeblock">
-	<div class="code-header">
+    <div class="code-header">
         <div class="stats">
             <div class="left img"><img src="${h.url('/images/icons/file.png')}"/></div>
             <div class="left item"><pre class="tooltip" title="${h.tooltip(h.fmt_date(c.file_changeset.date))}">${h.link_to("r%s:%s" % (c.file_changeset.revision,h.short_id(c.file_changeset.raw_id)),h.url('changeset_home',repo_name=c.repo_name,revision=c.file_changeset.raw_id))}</pre></div>
@@ -18,15 +18,17 @@
             <div class="left item last"><pre>${c.file.mimetype}</pre></div>
             <div class="buttons">
               %if c.annotate:
-                ${h.link_to(_('show source'),    h.url('files_home',         repo_name=c.repo_name,revision=c.file_changeset.raw_id,f_path=c.f_path),class_="ui-btn")}
+                ${h.link_to(_('Show source'),    h.url('files_home',         repo_name=c.repo_name,revision=c.file_changeset.raw_id,f_path=c.f_path),class_="ui-btn")}
               %else:
-                ${h.link_to(_('show annotation'),h.url('files_annotate_home',repo_name=c.repo_name,revision=c.file_changeset.raw_id,f_path=c.f_path),class_="ui-btn")}
+                ${h.link_to(_('Show annotation'),h.url('files_annotate_home',repo_name=c.repo_name,revision=c.file_changeset.raw_id,f_path=c.f_path),class_="ui-btn")}
               %endif
-              ${h.link_to(_('show as raw'),h.url('files_raw_home',repo_name=c.repo_name,revision=c.file_changeset.raw_id,f_path=c.f_path),class_="ui-btn")}
-              ${h.link_to(_('download as raw'),h.url('files_rawfile_home',repo_name=c.repo_name,revision=c.file_changeset.raw_id,f_path=c.f_path),class_="ui-btn")}
+              ${h.link_to(_('Show as raw'),h.url('files_raw_home',repo_name=c.repo_name,revision=c.file_changeset.raw_id,f_path=c.f_path),class_="ui-btn")}
+              ${h.link_to(_('Download as raw'),h.url('files_rawfile_home',repo_name=c.repo_name,revision=c.file_changeset.raw_id,f_path=c.f_path),class_="ui-btn")}
               % if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name):
-               % if not c.file.is_binary:
-                ${h.link_to(_('edit'),h.url('files_edit_home',repo_name=c.repo_name,revision=c.file_changeset.raw_id,f_path=c.f_path),class_="ui-btn")}
+               % if c.on_branch_head and c.changeset.branch and not c.file.is_binary:
+                ${h.link_to(_('Edit on branch:%s') % c.changeset.branch,h.url('files_edit_home',repo_name=c.repo_name,revision=c.changeset.branch,f_path=c.f_path),class_="ui-btn")}
+               %else:
+                ${h.link_to(_('Edit on branch:?'), '#', class_="ui-btn disabled tooltip", title=_('Editing files allowed only when on branch head revision'))}
                % endif
               % endif
             </div>
@@ -37,24 +39,24 @@
             </div>
             <div title="${c.file_changeset.author}" class="user">${h.person(c.file_changeset.author)}</div>
         </div>
-		<div class="commit">${h.urlify_commit(c.file_changeset.message,c.repo_name)}</div>
-	</div>
-	<div class="code-body">
-	   %if c.file.is_binary:
-	       ${_('Binary file (%s)') % c.file.mimetype}
-	   %else:
-		% if c.file.size < c.cut_off_limit:
+        <div class="commit">${h.urlify_commit(c.file_changeset.message,c.repo_name)}</div>
+    </div>
+    <div class="code-body">
+       %if c.file.is_binary:
+           ${_('Binary file (%s)') % c.file.mimetype}
+       %else:
+        % if c.file.size < c.cut_off_limit:
             %if c.annotate:
               ${h.pygmentize_annotation(c.repo_name,c.file,linenos=True,anchorlinenos=True,lineanchors='L',cssclass="code-highlight")}
             %else:
-			  ${h.pygmentize(c.file,linenos=True,anchorlinenos=True,lineanchors='L',cssclass="code-highlight")}
+              ${h.pygmentize(c.file,linenos=True,anchorlinenos=True,lineanchors='L',cssclass="code-highlight")}
             %endif
-		%else:
-			${_('File is too big to display')} ${h.link_to(_('show as raw'),
-			h.url('files_raw_home',repo_name=c.repo_name,revision=c.file_changeset.raw_id,f_path=c.f_path))}
-		%endif
+        %else:
+            ${_('File is too big to display')} ${h.link_to(_('Show as raw'),
+            h.url('files_raw_home',repo_name=c.repo_name,revision=c.file_changeset.raw_id,f_path=c.f_path))}
+        %endif
      %endif
-	</div>
+    </div>
 </div>
 
 <script type="text/javascript">
@@ -84,8 +86,11 @@
                 h_lines.push(parseInt(highlight_ranges[pos]));
             }
       }
-    highlight_lines(h_lines);
-
+      highlight_lines(h_lines);
+      var _first_line= YUD.get('L'+h_lines[0]);
+      if(_first_line){
+          _first_line.scrollIntoView()
+      }
     }
 
     // select code link event
@@ -95,7 +100,7 @@
     YUE.on('load_node_history', 'click', function(e){
         var _url = node_history_url.replace('__REV__','${c.file_changeset.raw_id}').replace('__FPATH__', '${c.f_path}');
         ypjax(_url, 'node_history', function(o){
-        	tooltip_activate();
+            tooltip_activate();
         })
     });
 
--- a/rhodecode/templates/followers/followers.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/followers/followers.html	Sun Apr 07 18:37:22 2013 +0200
@@ -2,21 +2,18 @@
 <%inherit file="/base/base.html"/>
 
 <%def name="title()">
-    ${_('%s Followers') % c.repo_name} - ${c.rhodecode_name}
+    ${_('%s Followers') % c.repo_name} &middot; ${c.rhodecode_name}
 </%def>
 
 <%def name="breadcrumbs_links()">
-    ${h.link_to(_(u'Home'),h.url('/'))}
-    &raquo;
-    ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
-    &raquo;
-    ${_('followers')}
+    ${_('Followers')}
 </%def>
 
 <%def name="page_nav()">
-    ${self.menu('followers')}
+    ${self.menu('repositories')}
 </%def>
 <%def name="main()">
+${self.context_bar('followers')}
 <div class="box">
     <!-- box / title -->
     <div class="title">
--- a/rhodecode/templates/followers/followers_data.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/followers/followers_data.html	Sun Apr 07 18:37:22 2013 +0200
@@ -20,9 +20,9 @@
 YUE.onDOMReady(function(){
     YUE.delegate("followers","click",function(e, matchedEl, container){
         ypjax(e.target.href,"followers",function(){
-        	show_more_event();
-        	tooltip_activate();
-        	show_changeset_tooltip();
+            show_more_event();
+            tooltip_activate();
+            show_changeset_tooltip();
         });
         YUE.preventDefault(e);
     },'.pager_link');
--- a/rhodecode/templates/forks/fork.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/forks/fork.html	Sun Apr 07 18:37:22 2013 +0200
@@ -2,21 +2,18 @@
 <%inherit file="/base/base.html"/>
 
 <%def name="title()">
-    ${_('%s Fork') % c.repo_name} - ${c.rhodecode_name}
+    ${_('%s Fork') % c.repo_name} &middot; ${c.rhodecode_name}
 </%def>
 
 <%def name="breadcrumbs_links()">
-    ${h.link_to(_(u'Home'),h.url('/'))}
-    &raquo;
-    ${h.link_to(c.repo_info.repo_name,h.url('summary_home',repo_name=c.repo_info.repo_name))}
-    &raquo;
-    ${_('fork')}
+    ${_('Fork')}
 </%def>
 
 <%def name="page_nav()">
-	${self.menu('')}
+    ${self.menu('repositories')}
 </%def>
 <%def name="main()">
+${self.context_bar('showforks')}
 <div class="box">
     <!-- box / title -->
     <div class="title">
@@ -80,7 +77,8 @@
                     ${h.checkbox('copy_permissions',value="True", checked="checked")}
                     <span class="help-block">${_('Copy permissions from forked repository')}</span>
                 </div>
-             </div>
+            </div>
+            %if c.can_update:
             <div class="field">
                 <div class="label label-checkbox">
                     <label for="private">${_('Update after clone')}:</label>
@@ -89,10 +87,11 @@
                     ${h.checkbox('update_after_clone',value="True")}
                     <span class="help-block">${_('Checkout source after making a clone')}</span>
                 </div>
-             </div>
-	        <div class="buttons">
-	          ${h.submit('',_('fork this repository'),class_="ui-btn large")}
-	        </div>
+            </div>
+            %endif
+            <div class="buttons">
+                ${h.submit('',_('Fork this repository'),class_="ui-btn large")}
+            </div>
         </div>
     </div>
     ${h.end_form()}
--- a/rhodecode/templates/forks/forks.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/forks/forks.html	Sun Apr 07 18:37:22 2013 +0200
@@ -2,21 +2,19 @@
 <%inherit file="/base/base.html"/>
 
 <%def name="title()">
-    ${_('%s Forks') % c.repo_name} - ${c.rhodecode_name}
+    ${_('%s Forks') % c.repo_name} &middot; ${c.rhodecode_name}
 </%def>
 
 <%def name="breadcrumbs_links()">
-    ${h.link_to(_(u'Home'),h.url('/'))}
-    &raquo;
-    ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
-    &raquo;
-    ${_('forks')}
+    ${_('Forks')}
 </%def>
 
 <%def name="page_nav()">
-    ${self.menu('forks')}
+    ${self.menu('repositories')}
 </%def>
+
 <%def name="main()">
+${self.context_bar('showforks')}
 <div class="box">
     <!-- box / title -->
     <div class="title">
--- a/rhodecode/templates/forks/forks_data.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/forks/forks_data.html	Sun Apr 07 18:37:22 2013 +0200
@@ -1,36 +1,36 @@
 ## -*- coding: utf-8 -*-
 
 % if c.forks_pager:
-	% for f in c.forks_pager:
-	    <div>
-	        <div class="fork_user">
-	            <div class="gravatar">
-	                <img alt="gravatar" src="${h.gravatar_url(f.user.email,24)}"/>
-	            </div>
-	            <span style="font-size: 20px">
-	             <b>${f.user.username}</b> (${f.user.name} ${f.user.lastname}) /
-	              ${h.link_to(f.repo_name,h.url('summary_home',repo_name=f.repo_name))}
-	             </span>
-	             <div style="padding:5px 3px 3px 42px;">${f.description}</div>
-	        </div>
-	        <div style="clear:both;padding-top: 10px"></div>
-	        <div class="follower_date">${_('forked')} -
-	        <span class="tooltip" title="${h.tooltip(h.fmt_date(f.created_on))}"> ${h.age(f.created_on)}</span>
-            <a title="${_('compare fork with %s' % c.repo_name)}"
-               href="${h.url('compare_url',repo_name=f.repo_name,org_ref_type='branch',org_ref='default',other_ref_type='branch',other_ref='default', repo=c.repo_name)}"
-               class="ui-btn small">${_('Compare fork')}</a>
-             </div>
-	        <div style="border-bottom: 1px solid #DDD;margin:10px 0px 10px 0px"></div>
-	    </div>
-	% endfor
+    % for f in c.forks_pager:
+        <div>
+            <div class="fork_user">
+                <div class="gravatar">
+                    <img alt="gravatar" src="${h.gravatar_url(f.user.email,24)}"/>
+                </div>
+                <span style="font-size: 20px">
+                 <b>${f.user.username}</b> (${f.user.name} ${f.user.lastname}) /
+                  ${h.link_to(f.repo_name,h.url('summary_home',repo_name=f.repo_name))}
+                </span>
+                <div style="padding:5px 3px 3px 42px;">${f.description}</div>
+            </div>
+            <div style="clear:both;padding-top: 10px"></div>
+            <div class="follower_date">${_('Forked')} -
+                <span class="tooltip" title="${h.tooltip(h.fmt_date(f.created_on))}"> ${h.age(f.created_on)}</span>
+                <a title="${_('Compare fork with %s' % c.repo_name)}"
+                    href="${h.url('compare_url',repo_name=c.repo_name,org_ref_type='branch',org_ref='default',other_repo=f.repo_name,other_ref_type='branch',other_ref='default')}"
+                    class="ui-btn small">${_('Compare fork')}</a>
+            </div>
+            <div style="border-bottom: 1px solid #DDD;margin:10px 0px 10px 0px"></div>
+        </div>
+    % endfor
   <div class="pagination-wh pagination-left">
   <script type="text/javascript">
   YUE.onDOMReady(function(){
       YUE.delegate("forks","click",function(e, matchedEl, container){
           ypjax(e.target.href,"forks",function(){
-        	  show_more_event();
-        	  tooltip_activate();
-        	  show_changeset_tooltip();
+              show_more_event();
+              tooltip_activate();
+              show_changeset_tooltip();
           });
           YUE.preventDefault(e);
       },'.pager_link');
@@ -39,5 +39,5 @@
   ${c.forks_pager.pager('$link_previous ~2~ $link_next')}
   </div>
 % else:
-	${_('There are no forks yet')}
+    ${_('There are no forks yet')}
 % endif
--- a/rhodecode/templates/index.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/index.html	Sun Apr 07 18:37:22 2013 +0200
@@ -1,8 +1,17 @@
 ## -*- coding: utf-8 -*-
 <%inherit file="base/base.html"/>
-<%def name="title()">${_('Dashboard')} - ${c.rhodecode_name}</%def>
-<%def name="breadcrumbs()"></%def>
-<%def name="page_nav()">${self.menu('home')}</%def>
+
+<%def name="title()">
+${_('Dashboard')} &middot; ${c.rhodecode_name}
+</%def>
+
+<%def name="breadcrumbs()">
+</%def>
+
+<%def name="page_nav()">
+${self.menu('repositories')}
+</%def>
+
 <%def name="main()">
    <%include file="index_base.html" args="parent=self"/>
 </%def>
--- a/rhodecode/templates/index_base.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/index_base.html	Sun Apr 07 18:37:22 2013 +0200
@@ -3,20 +3,31 @@
         <!-- box / title -->
         <div class="title">
             <h5>
-            <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" value="${_('quick filter...')}"/> ${parent.breadcrumbs()} <span id="repo_count">0</span> ${_('repositories')}
+            <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" placeholder="${_('quick filter...')}" value=""/> ${parent.breadcrumbs()} <span id="repo_count">0</span> ${_('repositories')}
             </h5>
             %if c.rhodecode_user.username != 'default':
-                %if h.HasPermissionAny('hg.admin','hg.create.repository')():
-                <ul class="links">
+              <ul class="links">
+                %if h.HasPermissionAny('hg.admin','hg.create.repository')() or h.HasReposGroupPermissionAny('group.write', 'group.admin')(c.group.group_name if c.group else None):
                   <li>
                   %if c.group:
-                    <span>${h.link_to(_('ADD REPOSITORY'),h.url('admin_settings_create_repository',parent_group=c.group.group_id))}</span>
+                        <span>${h.link_to(_('Add repository'),h.url('new_repo',parent_group=c.group.group_id))}</span>
+                        %if h.HasPermissionAny('hg.admin')() or h.HasReposGroupPermissionAny('group.admin')(c.group.group_name):
+                         <span>${h.link_to(_(u'Add group'),h.url('new_repos_group', parent_group=c.group.group_id))}</span>
+                        %endif
                   %else:
-                    <span>${h.link_to(_('ADD REPOSITORY'),h.url('admin_settings_create_repository'))}</span>
+                    <span>${h.link_to(_('Add repository'),h.url('new_repo'))}</span>
+                    %if h.HasPermissionAny('hg.admin')():
+                     <span>${h.link_to(_(u'Add group'),h.url('new_repos_group'))}</span>
+                    %endif
                   %endif
                   </li>
-                </ul>
                 %endif
+                %if c.group and h.HasReposGroupPermissionAny('group.admin')(c.group.group_name):
+                <li>
+                    <span>${h.link_to(_('Edit group'),h.url('edit_repos_group',group_name=c.group.group_name), title=_('You have admin right to this group, and can edit it'))}</span>
+                </li>
+                %endif
+              </ul>
             %endif
         </div>
         <!-- end box / title -->
@@ -37,7 +48,7 @@
                     <tr>
                         <td>
                             <div style="white-space: nowrap">
-                            <img class="icon" alt="${_('Repositories group')}" src="${h.url('/images/icons/database_link.png')}"/>
+                            <img class="icon" alt="${_('Repository group')}" src="${h.url('/images/icons/database_link.png')}"/>
                             ${h.link_to(gr.name,url('repos_group_home',group_name=gr.group_name))}
                             </div>
                         </td>
@@ -61,7 +72,7 @@
             </div>
              <%cnt=0%>
              <%namespace name="dt" file="/data_table/_dt_elements.html"/>
-            % if c.visual.lightweight_dashboard is False:
+            % if not c.visual.lightweight_dashboard:
               ## old full detailed version
             <div id='repos_list_wrap' class="yui-skin-sam">
             <table id="repos_list">
@@ -73,7 +84,6 @@
                     <th class="left">${_('Last change')}</th>
                     <th class="left">${_('Tip')}</th>
                     <th class="left">${_('Owner')}</th>
-                    <th class="left">${_('RSS')}</th>
                     <th class="left">${_('Atom')}</th>
                 </tr>
             </thead>
@@ -107,9 +117,6 @@
                     ##
                     <td title="${repo['contact']}">${h.person(repo['contact'])}</td>
                     <td>
-                      ${dt.rss(repo['name'])}
-                    </td>
-                    <td>
                       ${dt.atom(repo['name'])}
                     </td>
                 </tr>
@@ -124,7 +131,7 @@
             % endif
         </div>
     </div>
-    % if c.visual.lightweight_dashboard is False:
+    % if not c.visual.lightweight_dashboard:
     <script>
       YUD.get('repo_count').innerHTML = ${cnt+1 if cnt else 0};
 
@@ -174,9 +181,8 @@
           {key:"last_change",label:"${_('Last Change')}",sortable:true,
               sortOptions: { sortFunction: ageSort }},
           {key:"tip",label:"${_('Tip')}",sortable:true,
-        	  sortOptions: { sortFunction: revisionSort }},
+              sortOptions: { sortFunction: revisionSort }},
           {key:"owner",label:"${_('Owner')}",sortable:true},
-          {key:"rss",label:"",sortable:false},
           {key:"atom",label:"",sortable:false},
       ];
 
@@ -193,14 +199,13 @@
               {key:"last_change"},
               {key:"tip"},
               {key:"owner"},
-              {key:"rss"},
               {key:"atom"},
           ]
       };
 
       var myDataTable = new YAHOO.widget.DataTable("repos_list_wrap", myColumnDefs, myDataSource,
               {
-    	       sortedBy:{key:"name",dir:"asc"},
+               sortedBy:{key:"name",dir:"asc"},
                MSG_SORTASC:"${_('Click to sort ascending')}",
                MSG_SORTDESC:"${_('Click to sort descending')}",
                MSG_EMPTY:"${_('No records found.')}",
@@ -234,7 +239,6 @@
                {key:"last_change"},
                {key:"last_changeset"},
                {key:"owner"},
-               {key:"rss"},
                {key:"atom"},
             ]
          };
@@ -269,7 +273,6 @@
             {key:"last_changeset",label:"${_('Tip')}",sortable:true,
                 sortOptions: { sortFunction: revisionSort }},
             {key:"owner",label:"${_('Owner')}",sortable:true},
-            {key:"rss",label:"",sortable:false},
             {key:"atom",label:"",sortable:false},
         ];
 
@@ -292,7 +295,7 @@
 
           MSG_SORTASC:"${_('Click to sort ascending')}",
           MSG_SORTDESC:"${_('Click to sort descending')}",
-          MSG_EMPTY:"${_('No records found.')}",
+          MSG_EMPTY:"${_('No repositories found.')}",
           MSG_ERROR:"${_('Data error.')}",
           MSG_LOADING:"${_('Loading...')}",
         }
@@ -323,7 +326,6 @@
         };
         YUE.on('q_filter','click',function(){
             if(!YUD.hasClass('q_filter', 'loaded')){
-                YUD.get('q_filter').value = '';
                 //TODO: load here full list later to do search within groups
                 YUD.addClass('q_filter', 'loaded');
             }
--- a/rhodecode/templates/journal/journal.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/journal/journal.html	Sun Apr 07 18:37:22 2013 +0200
@@ -1,7 +1,7 @@
 ## -*- coding: utf-8 -*-
 <%inherit file="/base/base.html"/>
 <%def name="title()">
-    ${_('Journal')} - ${c.rhodecode_name}
+    ${_('Journal')} &middot; ${c.rhodecode_name}
 </%def>
 <%def name="breadcrumbs()">
     <h5>
@@ -15,7 +15,7 @@
     </h5>
 </%def>
 <%def name="page_nav()">
-	${self.menu('home')}
+    ${self.menu('journal')}
 </%def>
 <%def name="head_extra()">
 <link href="${h.url('journal_atom', api_key=c.rhodecode_user.api_key)}" rel="alternate" title="${_('ATOM journal feed')}" type="application/atom+xml" />
@@ -24,30 +24,27 @@
 <%def name="main()">
 
     <div class="box box-left">
-	    <!-- box / title -->
-	    <div class="title">
+        <!-- box / title -->
+        <div class="title">
          ${self.breadcrumbs()}
          <ul class="links">
            <li>
              <span><a id="refresh" href="${h.url('journal')}"><img class="icon" title="${_('Refresh')}" alt="${_('Refresh')}" src="${h.url('/images/icons/arrow_refresh.png')}"/></a></span>
            </li>
            <li>
-             <span><a href="${h.url('journal_rss', api_key=c.rhodecode_user.api_key)}"><img class="icon" title="${_('RSS feed')}" alt="${_('RSS feed')}" src="${h.url('/images/icons/rss_16.png')}"/></a></span>
-           </li>
-           <li>
-             <span><a href="${h.url('journal_atom', api_key=c.rhodecode_user.api_key)}"><img class="icon" title="${_('ATOM feed')}" alt="${_('ATOM feed')}" src="${h.url('/images/icons/atom.png')}"/></a></span>
+             <span><a href="${h.url('journal_atom', api_key=c.rhodecode_user.api_key)}"><img class="icon" title="${_('ATOM feed')}" alt="${_('ATOM feed')}" src="${h.url('/images/icons/rss_16.png')}"/></a></span>
            </li>
          </ul>
-	    </div>
-	    <div id="journal">${c.journal_data}</div>
+        </div>
+        <div id="journal">${c.journal_data}</div>
     </div>
     <div class="box box-right">
         <!-- box / title -->
 
         <div class="title">
             <h5>
-            <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" value="${_('quick filter...')}" style="display: none"/>
-            <input class="q_filter_box" id="q_filter_watched" size="15" type="text" name="filter" value="${_('quick filter...')}" style="display: none"/>
+            <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" placeholder="${_('quick filter...')}" value="" style="display: none"/>
+            <input class="q_filter_box" id="q_filter_watched" size="15" type="text" name="filter" placeholder="${_('quick filter...')}" value="" style="display: none"/>
             </h5>
              <ul class="links" style="color:#DADADA">
                <li>
@@ -56,11 +53,6 @@
                <li>
                  <span><a id="show_my" class="link-white" href="#my">${_('My repos')}</a> </span>
                </li>
-               %if h.HasPermissionAny('hg.admin','hg.create.repository')():
-                 <li>
-                   <span>${h.link_to(_('Add repo'),h.url('admin_settings_create_repository'))}</span>
-                 </li>
-               %endif
              </ul>
         </div>
 
@@ -124,7 +116,7 @@
         show_my(e);
     })
     var show_watched = function(e){
-    	YUD.setStyle('my_container','display','none');
+        YUD.setStyle('my_container','display','none');
         YUD.setStyle('watched_container','display','');
         YUD.setStyle('q_filter_watched','display','');
         YUD.setStyle('q_filter','display','none');
@@ -132,7 +124,7 @@
         YUD.addClass('show_watched', 'current');
         YUD.removeClass('show_my','current');
         if(!YUD.hasClass('show_watched', 'loaded')){
-        	watched_renderer(${c.watched_data |n});
+            watched_renderer(${c.watched_data |n});
             YUD.addClass('show_watched', 'loaded');
         }
 
@@ -160,7 +152,7 @@
         var tabHash = url[1];
         var func = tabs[tabHash]
         if (func){
-        	func();
+            func();
         }
     }
     function watched_renderer(data){
@@ -255,7 +247,6 @@
         };
         YUE.on('q_filter_watched','click',function(){
             if(!YUD.hasClass('q_filter_watched', 'loaded')){
-                YUD.get('q_filter_watched').value = '';
                 //TODO: load here full list later to do search within groups
                 YUD.addClass('q_filter_watched', 'loaded');
             }
@@ -359,7 +350,6 @@
         };
         YUE.on('q_filter','click',function(){
             if(!YUD.hasClass('q_filter', 'loaded')){
-                YUD.get('q_filter').value = '';
                 //TODO: load here full list later to do search within groups
                 YUD.addClass('q_filter', 'loaded');
             }
--- a/rhodecode/templates/journal/journal_data.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/journal/journal_data.html	Sun Apr 07 18:37:22 2013 +0200
@@ -4,34 +4,34 @@
     %for day,items in c.journal_day_aggreagate:
     <div class="journal_day">${day}</div>
         % for user,entries in items:
-	        <div class="journal_container">
-	            <div class="gravatar">
-	                <img alt="gravatar" src="${h.gravatar_url(user.email if user else 'anonymous@rhodecode.org',24)}"/>
-	            </div>
+            <div class="journal_container">
+                <div class="gravatar">
+                    <img alt="gravatar" src="${h.gravatar_url(user.email if user else 'anonymous@rhodecode.org',24)}"/>
+                </div>
                 %if user:
-	               <div class="journal_user">${user.name} ${user.lastname}</div>
+                   <div class="journal_user">${user.name} ${user.lastname}</div>
                 %else:
                     <div class="journal_user deleted">${entries[0].username}</div>
                 %endif
-	            <div class="journal_action_container">
-	            % for entry in entries:
-		            <div class="journal_icon"> ${h.action_parser(entry)[2]()}</div>
-		            <div class="journal_action">${h.action_parser(entry)[0]()}</div>
-		            <div class="journal_repo">
-		                <span class="journal_repo_name">
-		                %if entry.repository is not None:
-		                  ${h.link_to(entry.repository.repo_name,
-		                              h.url('summary_home',repo_name=entry.repository.repo_name))}
-		                %else:
-		                  ${entry.repository_name}
-		                %endif
-		                </span>
-		            </div>
-		            <div class="journal_action_params">${h.literal(h.action_parser(entry)[1]())}</div>
-		            <div class="date"><span class="tooltip" title="${h.tooltip(h.fmt_date(entry.action_date))}">${h.age(entry.action_date)}</span></div>
-	            %endfor
-	            </div>
-	        </div>
+                <div class="journal_action_container">
+                % for entry in entries:
+                    <div class="journal_icon"> ${h.action_parser(entry)[2]()}</div>
+                    <div class="journal_action">${h.action_parser(entry)[0]()}</div>
+                    <div class="journal_repo">
+                        <span class="journal_repo_name">
+                        %if entry.repository is not None:
+                          ${h.link_to(entry.repository.repo_name,
+                                      h.url('summary_home',repo_name=entry.repository.repo_name))}
+                        %else:
+                          ${entry.repository_name}
+                        %endif
+                        </span>
+                    </div>
+                    <div class="journal_action_params">${h.literal(h.action_parser(entry)[1]())}</div>
+                    <div class="date"><span class="tooltip" title="${h.tooltip(h.fmt_date(entry.action_date))}">${h.age(entry.action_date)}</span></div>
+                %endfor
+                </div>
+            </div>
         %endfor
     %endfor
 
@@ -39,11 +39,11 @@
     <script type="text/javascript">
     YUE.onDOMReady(function(){
         YUE.delegate("journal","click",function(e, matchedEl, container){
-        	ypjax(e.target.href,"journal",function(){
-        		show_more_event();
-        		tooltip_activate();
-        		show_changeset_tooltip();
-        		});
+            ypjax(e.target.href,"journal",function(){
+                show_more_event();
+                tooltip_activate();
+                show_changeset_tooltip();
+                });
             YUE.preventDefault(e);
         },'.pager_link');
     });
--- a/rhodecode/templates/journal/public_journal.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/journal/public_journal.html	Sun Apr 07 18:37:22 2013 +0200
@@ -1,13 +1,13 @@
 ## -*- coding: utf-8 -*-
 <%inherit file="/base/base.html"/>
 <%def name="title()">
-    ${_('Journal')} - ${c.rhodecode_name}
+    ${_('Public Journal')} &middot; ${c.rhodecode_name}
 </%def>
 <%def name="breadcrumbs()">
-	${c.rhodecode_name}
+    ${c.rhodecode_name}
 </%def>
 <%def name="page_nav()">
-	${self.menu('home')}
+    ${self.menu('journal')}
 </%def>
 <%def name="head_extra()">
 <link href="${h.url('public_journal_atom')}" rel="alternate" title="${_('ATOM public journal feed')}" type="application/atom+xml" />
@@ -20,9 +20,6 @@
   <div class="title">
     <h5>${_('Public Journal')}</h5>
       <ul class="links">
-      <li>
-       <span><a href="${h.url('public_journal_rss')}"><img class="icon" title="${_('RSS feed')}" alt="${_('RSS feed')}" src="${h.url('/images/icons/atom.png')}"/></a></span>
-     </li>
      <li>
        <span><a href="${h.url('public_journal_atom')}"><img class="icon" title="${_('ATOM feed')}" alt="${_('ATOM feed')}" src="${h.url('/images/icons/rss_16.png')}"/></a></span>
      </li>
--- a/rhodecode/templates/login.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/login.html	Sun Apr 07 18:37:22 2013 +0200
@@ -2,7 +2,7 @@
 <%inherit file="base/root.html"/>
 
 <%def name="title()">
-    ${_('Sign In')} - ${c.rhodecode_name}
+    ${_('Log In')} &middot; ${c.rhodecode_name}
 </%def>
 
 <div id="login">
@@ -18,7 +18,7 @@
 </div>
     <!-- login -->
     <div class="title top-left-rounded-corner top-right-rounded-corner">
-        <h5>${_('Sign In to')} ${c.rhodecode_name}</h5>
+        <h5>${_('Log In to %s') % c.rhodecode_name}</h5>
     </div>
     <div class="inner">
         ${h.form(h.url.current(came_from=c.came_from))}
@@ -31,7 +31,7 @@
                         <label for="username">${_('Username')}:</label>
                     </div>
                     <div class="input">
-                        ${h.text('username',class_='focus',size=40)}
+                        ${h.text('username',class_='focus large')}
                     </div>
 
                 </div>
@@ -40,7 +40,7 @@
                         <label for="password">${_('Password')}:</label>
                     </div>
                     <div class="input">
-                        ${h.password('password',class_='focus',size=40)}
+                        ${h.password('password',class_='focus large')}
                     </div>
 
                 </div>
@@ -69,7 +69,7 @@
         ${h.end_form()}
         <script type="text/javascript">
         YUE.onDOMReady(function(){
-        	YUD.get('username').focus();
+            YUD.get('username').focus();
         })
         </script>
     </div>
--- a/rhodecode/templates/password_reset.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/password_reset.html	Sun Apr 07 18:37:22 2013 +0200
@@ -2,42 +2,42 @@
 <%inherit file="base/root.html"/>
 
 <%def name="title()">
-    ${_('Reset your password')} - ${c.rhodecode_name}
+    ${_('Password Reset')} &middot; ${c.rhodecode_name}
 </%def>
 
 <div id="register">
 
-	<div class="title top-left-rounded-corner top-right-rounded-corner">
-		<h5>${_('Reset your password to')} ${c.rhodecode_name}</h5>
-	</div>
-	<div class="inner">
-	    ${h.form(url('password_reset'))}
-	    <div class="form">
-	        <!-- fields -->
-	        <div class="fields">
+    <div class="title top-left-rounded-corner top-right-rounded-corner">
+        <h5>${_('Reset your password to')} ${c.rhodecode_name}</h5>
+    </div>
+    <div class="inner">
+        ${h.form(url('password_reset'))}
+        <div class="form">
+            <!-- fields -->
+            <div class="fields">
 
-	             <div class="field">
-	                <div class="label">
-	                    <label for="email">${_('Email address')}:</label>
-	                </div>
-	                <div class="input">
-	                    ${h.text('email')}
-	                </div>
-	             </div>
+                 <div class="field">
+                    <div class="label">
+                        <label for="email">${_('Email address')}:</label>
+                    </div>
+                    <div class="input">
+                        ${h.text('email')}
+                    </div>
+                 </div>
 
-	            <div class="buttons">
-		            <div class="nohighlight">
-		              ${h.submit('send',_('Reset my password'),class_="ui-btn large")}
-					  	<div class="activation_msg">${_('Password reset link will be send to matching email address')}</div>
-		            </div>
-	            </div>
-	    	</div>
-	    </div>
-	    ${h.end_form()}
+                <div class="buttons">
+                    <div class="nohighlight">
+                      ${h.submit('send',_('Reset my password'),class_="ui-btn large")}
+                          <div class="activation_msg">${_('Password reset link will be send to matching email address')}</div>
+                    </div>
+                </div>
+            </div>
+        </div>
+        ${h.end_form()}
         <script type="text/javascript">
         YUE.onDOMReady(function(){
             YUD.get('email').focus();
         })
         </script>
-	</div>
+    </div>
    </div>
--- a/rhodecode/templates/pullrequests/pullrequest.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/pullrequests/pullrequest.html	Sun Apr 07 18:37:22 2013 +0200
@@ -5,15 +5,15 @@
 </%def>
 
 <%def name="breadcrumbs_links()">
-    ${h.link_to(_(u'Home'),h.url('/'))}
-    &raquo;
-    ${h.link_to(c.repo_name,h.url('changelog_home',repo_name=c.repo_name))}
-    &raquo;
     ${_('New pull request')}
 </%def>
 
+<%def name="page_nav()">
+    ${self.menu('repositories')}
+</%def>
+
 <%def name="main()">
-
+${self.context_bar('showpullrequest')}
 <div class="box">
     <!-- box / title -->
     <div class="title">
@@ -21,19 +21,13 @@
     </div>
     ${h.form(url('pullrequest', repo_name=c.repo_name), method='post', id='pull_request_form')}
     <div style="float:left;padding:0px 30px 30px 30px">
-        <input type="hidden" name="rev_start" value="${request.GET.get('rev_start')}" />
-        <input type="hidden" name="rev_end" value="${request.GET.get('rev_end')}" />
-
         ##ORG
         <div style="float:left">
-            <div class="fork_user">
-                <div class="gravatar">
-                    <img alt="gravatar" src="${h.gravatar_url(c.rhodecode_db_repo.user.email,24)}"/>
-                </div>
+            <div>
                 <span style="font-size: 20px">
-                ${h.select('org_repo','',c.org_repos,class_='refs')}:${h.select('org_ref','',c.org_refs,class_='refs')}
+                ${h.select('org_repo','',c.org_repos,class_='refs')}:${h.select('org_ref',c.default_org_ref,c.org_refs,class_='refs')}
                 </span>
-                 <div style="padding:5px 3px 3px 42px;">${c.rhodecode_db_repo.description}</div>
+                 <div style="padding:5px 3px 3px 20px;">${c.rhodecode_db_repo.description}</div>
             </div>
             <div style="clear:both;padding-top: 10px"></div>
         </div>
@@ -43,19 +37,11 @@
 
         ##OTHER, most Probably the PARENT OF THIS FORK
         <div style="float:left">
-            <div class="fork_user">
-                <div class="gravatar">
-                    <img id="other_repo_gravatar" alt="gravatar" src=""/>
-                </div>
+            <div>
                 <span style="font-size: 20px">
-                ${h.select('other_repo',c.default_pull_request ,c.other_repos,class_='refs')}:${h.select('other_ref',c.default_pull_request_rev,c.default_revs,class_='refs')}
+                ${h.select('other_repo',c.default_other_repo,c.other_repos,class_='refs')}:${c.default_other_repo_info['revs']}
                 </span>
-         <span style="padding:3px">
-           <a id="refresh" href="#" class="tooltip" title="${h.tooltip(_('refresh overview'))}">
-             <img style="margin:3px" class="icon" title="${_('Refresh')}" alt="${_('Refresh')}" src="${h.url('/images/icons/arrow_refresh.png')}"/>
-           </a>
-         </span>
-                 <div id="other_repo_desc" style="padding:5px 3px 3px 42px;"></div>
+                 <div id="other_repo_desc" style="padding:5px 3px 3px 20px;"></div>
             </div>
             <div style="clear:both;padding-top: 10px"></div>
         </div>
@@ -72,13 +58,13 @@
           ## members goes here !
           <div class="group_members_wrap">
             <ul id="review_members" class="group_members">
-            %for member in c.review_members:
-              <li id="reviewer_${member.user_id}">
+            %for member in [c.default_other_repo_info['user']]:
+              <li id="reviewer_${member['user_id']}">
                 <div class="reviewers_member">
-                  <div class="gravatar"><img alt="gravatar" src="${h.gravatar_url(member.email,14)}"/> </div>
-                  <div style="float:left">${member.full_name} (${_('owner')})</div>
-                  <input type="hidden" value="${member.user_id}" name="review_members" />
-                  <span class="delete_icon action_button" onclick="removeReviewer(${member.user_id})"></span>
+                  <div class="gravatar"><img alt="gravatar" src="${member['gravatar_link']}"/> </div>
+                  <div style="float:left">${member['firstname']} ${member['lastname']} (${_('owner')})</div>
+                  <input type="hidden" value="${member['user_id']}" name="review_members" />
+                  <span class="delete_icon action_button" onclick="removeReviewMember(${member['user_id']})"></span>
                 </div>
               </li>
             %endfor
@@ -112,7 +98,7 @@
 
             <div class="field">
                 <div class="label label-textarea">
-                    <label for="pullrequest_desc">${_('description')}:</label>
+                    <label for="pullrequest_desc">${_('Description')}:</label>
                 </div>
                 <div class="textarea text-area editor">
                     ${h.textarea('pullrequest_desc',size=30)}
@@ -136,68 +122,87 @@
 
   var other_repos_info = ${c.other_repos_info|n};
 
+  var otherrepoChanged = function(){
+      var sel_box = YUQ('#pull_request_form #other_repo')[0];
+      var repo_name = sel_box.options[sel_box.selectedIndex].value;
+
+      YUD.get('other_repo_desc').innerHTML = other_repos_info[repo_name]['description'];
+      // replace options of other_ref with the ones for the current other_repo
+      var other_ref_selector = YUD.get('other_ref');
+      var new_select = YUD.createElementFromMarkup(other_repos_info[repo_name]['revs']);
+      var new_selectedIndex = new_select.selectedIndex;
+      other_ref_selector.innerHTML = ""; // clear old options
+      while (new_select.length > 0){ // children will be popped when appened to other_ref_selector
+          other_ref_selector.appendChild(new_select.children[0]);
+      }
+      // browsers lost track of selected when appendChild was used
+      other_ref_selector.selectedIndex = new_selectedIndex;
+
+      // reset && add the reviewer based on selected repo
+      var _data = other_repos_info[repo_name];
+      YUD.get('review_members').innerHTML = '';
+      addReviewMember(_data.user.user_id, _data.user.firstname,
+                      _data.user.lastname, _data.user.username,
+                      _data.user.gravatar_link);
+  }
+
   var loadPreview = function(){
-	  YUD.setStyle(YUD.get('pull_request_overview_url').parentElement,'display','none');
+      //url template
       var url = "${h.url('compare_url',
-    	                 repo_name='org_repo',
-    	                 org_ref_type='org_ref_type', org_ref='org_ref',
-                         other_ref_type='other_ref_type', other_ref='other_ref',
-                         repo='other_repo',
-                         as_form=True, bundle=False,
-                         rev_start=request.GET.get('rev_start',''),
-                         rev_end=request.GET.get('rev_end',''))}";
+                         repo_name='__other_repo__',
+                         org_ref_type='__other_ref_type__',
+                         org_ref='__other_ref__',
+                         other_repo='__org_repo__',
+                         other_ref_type='__org_ref_type__',
+                         other_ref='__org_ref__',
+                         as_form=True,
+                         merge=True,
+                         )}";
+      var org_repo = YUQ('#pull_request_form #org_repo')[0].value;
+      var org_ref = YUQ('#pull_request_form #org_ref')[0].value.split(':');
+
+      var other_repo = YUQ('#pull_request_form #other_repo')[0].value;
+      var other_ref = YUQ('#pull_request_form #other_ref')[0].value.split(':');
 
       var select_refs = YUQ('#pull_request_form select.refs')
-      var rev_data = {}; // gather the org/other ref and repo here
-      for(var i=0;i<select_refs.length;i++){
-        var select_ref = select_refs[i];
-        var select_ref_data = select_ref.value.split(':');
-        var key = null;
-        var val = null;
+      var rev_data = {
+          'org_repo': org_repo,
+          'org_ref': org_ref[2],
+          'org_ref_type': 'rev',
+          'other_repo': other_repo,
+          'other_ref': other_ref[2],
+          'other_ref_type': 'rev',
+      }; // gather the org/other ref and repo here
 
-        if(select_ref_data.length>1){
-          key = select_ref.name+"_type";
-          val = select_ref_data[0];
-          url = url.replace(key,val);
-          rev_data[key] = val;
-
-          key = select_ref.name;
-          val = select_ref_data[1];
-          url = url.replace(key,val);
-          rev_data[key] = val;
-
-        }else{
-          key = select_ref.name;
-          val = select_ref.value;
-          url = url.replace(key,val);
-          rev_data[key] = val;
-        }
+      for (k in rev_data){
+          url = url.replace('__'+k+'__',rev_data[k]);
       }
 
-      YUE.on('other_repo', 'change', function(e){
-    	  var repo_name = e.currentTarget.value;
-    	  // replace the <select> of changed repo
-    	  YUD.get('other_ref').innerHTML = other_repos_info[repo_name]['revs'];
-      });
+      YUD.get('pull_request_overview').innerHTML = "${_('Loading ...')}";
+      ypjax(url,'pull_request_overview');
+
+      YUD.get('pull_request_overview_url').href = url; // shouldn't have as_form ... but ...
+      YUD.setStyle(YUD.get('pull_request_overview_url').parentElement,'display','');
+  }
+
+  ## refresh automatically when something changes (org_repo can't change)
+
+  YUE.on('org_ref', 'change', function(e){
+     loadPreview();
+  });
 
-      ypjax(url,'pull_request_overview', function(data){
-    	  var sel_box = YUQ('#pull_request_form #other_repo')[0];
-    	  var repo_name = sel_box.options[sel_box.selectedIndex].value;
-    	  YUD.get('pull_request_overview_url').href = url;
-    	  YUD.setStyle(YUD.get('pull_request_overview_url').parentElement,'display','');
-    	  YUD.get('other_repo_gravatar').src = other_repos_info[repo_name]['gravatar'];
-    	  YUD.get('other_repo_desc').innerHTML = other_repos_info[repo_name]['description'];
-    	  YUD.get('other_ref').innerHTML = other_repos_info[repo_name]['revs'];
-    	  // select back the revision that was just compared
-    	  setSelectValue(YUD.get('other_ref'), rev_data['other_ref']);
-      })
-  }
-  YUE.on('refresh','click',function(e){
-     loadPreview()
-  })
+  YUE.on('other_repo', 'change', function(e){
+      otherrepoChanged();
+      loadPreview();
+  });
 
+  YUE.on('other_ref', 'change', function(e){
+     loadPreview();
+  });
+
+  otherrepoChanged();
   //lazy load overview after 0.5s
-  setTimeout(loadPreview, 500)
+  setTimeout(loadPreview, 500);
 
 </script>
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rhodecode/templates/pullrequests/pullrequest_data.html	Sun Apr 07 18:37:22 2013 +0200
@@ -0,0 +1,38 @@
+## -*- coding: utf-8 -*-
+
+% for pr in c.pullrequests_pager:
+  <div class="pr ${'pr-closed' if pr.is_closed() else ''}">
+    <div class="pr-title">
+       %if pr.is_closed():
+         <div style="float:left;margin: -4px 0px;"><span class="pr-closed-tag">${_('Closed')}</span></div>
+       %endif
+      <img src="${h.url('/images/icons/flag_status_%s.png' % str(pr.last_review_status))}" />
+      <a href="${h.url('pullrequest_show',repo_name=c.repo_name,pull_request_id=pr.pull_request_id)}">
+      ${_('Pull request #%s opened by %s on %s') % (pr.pull_request_id, pr.author.full_name, h.fmt_date(pr.created_on))}
+      </a>
+    </div>
+    <h5 style="border:0px;padding-bottom:0px">${_('Title')}: ${pr.title}</h5>
+    <div>${pr.description}</div>
+  </div>
+% endfor
+
+<div class="pagination-wh pagination-left">
+<script type="text/javascript">
+YUE.onDOMReady(function(){
+    YUE.delegate("pullrequests","click",function(e, matchedEl, container){
+        ypjax(e.target.href,"pullrequests",function(){
+            show_more_event();
+            tooltip_activate();
+            show_changeset_tooltip();
+        });
+        YUE.preventDefault(e);
+    },'.pager_link');
+});
+</script>
+<div class="notification-paginator">
+  <div class="pagination-wh pagination-left">
+  ${c.pullrequests_pager.pager('$link_previous ~2~ $link_next')}
+  </div>
+</div>
+
+</div>
--- a/rhodecode/templates/pullrequests/pullrequest_show.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/pullrequests/pullrequest_show.html	Sun Apr 07 18:37:22 2013 +0200
@@ -1,39 +1,48 @@
 <%inherit file="/base/base.html"/>
 
 <%def name="title()">
-    ${c.repo_name} ${_('Pull request #%s') % c.pull_request.pull_request_id}
+    ${_('%s Pull Request #%s') % (c.repo_name, c.pull_request.pull_request_id)} &middot; ${c.rhodecode_name}
 </%def>
 
 <%def name="breadcrumbs_links()">
-    ${h.link_to(_(u'Home'),h.url('/'))}
-    &raquo;
-    ${h.link_to(c.repo_name,h.url('changelog_home',repo_name=c.repo_name))}
-    &raquo;
     ${_('Pull request #%s') % c.pull_request.pull_request_id}
 </%def>
 
+<%def name="page_nav()">
+    ${self.menu('repositories')}
+</%def>
+
 <%def name="main()">
-
+${self.context_bar('showpullrequest')}
 <div class="box">
     <!-- box / title -->
     <div class="title">
         ${self.breadcrumbs()}
     </div>
+
+    <h3 class="${'closed' if c.pull_request.is_closed() else ''}">
+        <img src="${h.url('/images/icons/flag_status_%s.png' % str(c.pull_request.last_review_status))}" />
+        ${_('Title')}: ${c.pull_request.title}
         %if c.pull_request.is_closed():
-        <div style="padding:10px; font-size:22px;width:100%;text-align: center; color:#88D882">${_('Closed %s') % (h.age(c.pull_request.updated_on))} ${_('with status %s') % h.changeset_status_lbl(c.current_changeset_status)}</div>
+            (${_('Closed')})
         %endif
-    <h3>${_('Title')}: ${c.pull_request.title}</h3>
+    </h3>
 
     <div class="form">
       <div id="summary" class="fields">
          <div class="field">
           <div class="label-summary">
-              <label>${_('Status')}:</label>
+              <label>${_('Review status')}:</label>
           </div>
           <div class="input">
             <div class="changeset-status-container" style="float:none;clear:both">
             %if c.current_changeset_status:
-              <div title="${_('Pull request status')}" class="changeset-status-lbl">[${h.changeset_status_lbl(c.current_changeset_status)}]</div>
+              <div title="${_('Pull request status')}" class="changeset-status-lbl">
+                %if c.pull_request.is_closed():
+                    ${_('Closed')},
+                %endif
+                ${h.changeset_status_lbl(c.current_changeset_status)}
+              </div>
               <div class="changeset-status-ico" style="padding:1px 4px"><img src="${h.url('/images/icons/flag_status_%s.png' % c.current_changeset_status)}" /></div>
             %endif
             </div>
@@ -47,7 +56,7 @@
             % if len(c.pull_request_pending_reviewers) > 0:
                 <div class="tooltip" title="${h.tooltip(','.join([x.username for x in c.pull_request_pending_reviewers]))}">${ungettext('%d reviewer', '%d reviewers',len(c.pull_request_pending_reviewers)) % len(c.pull_request_pending_reviewers)}</div>
             %else:
-                <div>${_('pull request was reviewed by all reviewers')}</div>
+                <div>${_('Pull request was reviewed by all reviewers')}</div>
             %endif
           </div>
          </div>
@@ -62,19 +71,29 @@
              ##%elif h.is_git(c.pull_request.org_repo):
              ##  <img class="icon" title="${_('Git repository')}" alt="${_('Git repository')}" src="${h.url('/images/icons/giticon.png')}"/>
              ##%endif
-              <span class="spantag">${c.pull_request.org_ref_parts[0]}</span>
-              :
-              <span class="spantag">${c.pull_request.org_ref_parts[1]}</span>             
-              <span><a href="${h.url('summary_home', repo_name=c.pull_request.org_repo.repo_name)}">${c.pull_request.org_repo.clone_url()}</a></span> 
+              <span class="spantag">${c.pull_request.org_ref_parts[0]}: ${c.pull_request.org_ref_parts[1]}</span>
+              <span><a href="${h.url('summary_home', repo_name=c.pull_request.org_repo.repo_name)}">${c.pull_request.org_repo.clone_url()}</a></span>
               </div>
           </div>
-         </div>         
+         </div>
+         <div class="field">
+          <div class="label-summary">
+              <label>${_('Summary')}:</label>
+          </div>
+          <div class="input">
+              <div style="white-space:pre-wrap">${h.literal(c.pull_request.description)}</div>
+          </div>
+         </div>
+         <div class="field">
+          <div class="label-summary">
+              <label>${_('Created on')}:</label>
+          </div>
+          <div class="input">
+              <div>${h.fmt_date(c.pull_request.created_on)}</div>
+          </div>
+         </div>
       </div>
     </div>
-    <div style="white-space:pre-wrap;padding:3px 3px 5px 20px">${h.literal(c.pull_request.description)}</div>
-    <div style="padding:4px 4px 10px 20px">
-      <div>${_('Created on')}: ${h.fmt_date(c.pull_request.created_on)}</div>
-    </div>
 
     <div style="overflow: auto;">
       ##DIFF
@@ -109,7 +128,7 @@
                 %endfor
               </div>
               % if c.limited_diff:
-                <h5>${_('Changeset was too big and was cut off...')}</h5>
+                <h5>${_('Changeset was too big and was cut off...')} <a href="${h.url.current(fulldiff=1, **request.GET.mixed())}" onclick="return confirm('${_("Showing a huge diff might take some time and resources")}')">${_('Show full diff')}</a></h5>
               % endif
           </div>
       </div>
@@ -130,7 +149,7 @@
                   <div style="float:left">${member.full_name} (${_('owner') if c.pull_request.user_id == member.user_id else _('reviewer')})</div>
                   <input type="hidden" value="${member.user_id}" name="review_members" />
                   %if not c.pull_request.is_closed() and (h.HasPermissionAny('hg.admin', 'repository.admin')() or c.pull_request.user_id == c.rhodecode_user.user_id):
-                  <span class="delete_icon action_button" onclick="removeReviewer(${member.user_id})"></span>
+                  <span class="delete_icon action_button" onclick="removeReviewMember(${member.user_id})"></span>
                   %endif
                 </div>
               </li>
@@ -142,11 +161,11 @@
             %if h.HasPermissionAny('hg.admin', 'repository.admin')() or c.pull_request.author.user_id == c.rhodecode_user.user_id:
             <div class="reviewer_ac">
                ${h.text('user', class_='yui-ac-input')}
-               <span class="help-block">${_('Add reviewer to this pull request.')}</span>
+               <span class="help-block">${_('Add or remove reviewer to this pull request.')}</span>
                <div id="reviewers_container"></div>
             </div>
             <div style="padding:0px 10px">
-             <span id="update_pull_request" class="ui-btn xsmall">${_('save')}</span>
+             <span id="update_pull_request" class="ui-btn xsmall">${_('Save changes')}</span>
             </div>
             %endif
           </div>
@@ -157,9 +176,14 @@
     <script>
     var _USERS_AC_DATA = ${c.users_array|n};
     var _GROUPS_AC_DATA = ${c.users_groups_array|n};
+    // TODO: switch this to pyroutes
     AJAX_COMMENT_URL = "${url('pullrequest_comment',repo_name=c.repo_name,pull_request_id=c.pull_request.pull_request_id)}";
     AJAX_COMMENT_DELETE_URL = "${url('pullrequest_comment_delete',repo_name=c.repo_name,comment_id='__COMMENT_ID__')}";
-    AJAX_UPDATE_PULLREQUEST = "${url('pullrequest_update',repo_name=c.repo_name,pull_request_id=c.pull_request.pull_request_id)}"
+
+    pyroutes.register('pullrequest_comment', "${url('pullrequest_comment',repo_name='%(repo_name)s',pull_request_id='%(pull_request_id)s')}", ['repo_name', 'pull_request_id']);
+    pyroutes.register('pullrequest_comment_delete', "${url('pullrequest_comment_delete',repo_name='%(repo_name)s',comment_id='%(comment_id)s')}", ['repo_name', 'comment_id']);
+    pyroutes.register('pullrequest_update', "${url('pullrequest_update',repo_name='%(repo_name)s',pull_request_id='%(pull_request_id)s')}", ['repo_name', 'pull_request_id']);
+
     </script>
 
     ## diff block
@@ -168,7 +192,7 @@
       ${diff_block.diff_block_simple([c.changes[fid]])}
     %endfor
     % if c.limited_diff:
-      <h4>${_('Changeset was too big and was cut off...')}</h4>
+      <h4>${_('Changeset was too big and was cut off...')} <a href="${h.url.current(fulldiff=1, **request.GET.mixed())}" onclick="return confirm('${_("Showing a huge diff might take some time and resources")}')">${_('Show full diff')}</a></h4>
     % endif
 
 
@@ -177,7 +201,7 @@
     ${comment.comment_inline_form()}
 
     ## render comments and inlines
-    ${comment.generate_comments()}
+    ${comment.generate_comments(include_pr=True)}
 
     % if not c.pull_request.is_closed():
       ## main comment form and it status
@@ -189,7 +213,7 @@
 
     <script type="text/javascript">
       YUE.onDOMReady(function(){
-    	  PullRequestAutoComplete('user', 'reviewers_container', _USERS_AC_DATA, _GROUPS_AC_DATA);
+          PullRequestAutoComplete('user', 'reviewers_container', _USERS_AC_DATA, _GROUPS_AC_DATA);
 
           YUE.on(YUQ('.show-inline-comments'),'change',function(e){
               var show = 'none';
@@ -218,7 +242,7 @@
           renderInlineComments(file_comments);
 
           YUE.on(YUD.get('update_pull_request'),'click',function(e){
-        	  updateReviewers();
+              updateReviewers(undefined, "${c.repo_name}", "${c.pull_request.pull_request_id}");
           })
       })
     </script>
--- a/rhodecode/templates/pullrequests/pullrequest_show_all.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/pullrequests/pullrequest_show_all.html	Sun Apr 07 18:37:22 2013 +0200
@@ -1,42 +1,26 @@
 <%inherit file="/base/base.html"/>
 
 <%def name="title()">
-    ${c.repo_name} ${_('all pull requests')}
+    ${_('%s Pull Requests') % c.repo_name} &middot; ${c.rhodecode_name}
 </%def>
 
 <%def name="breadcrumbs_links()">
-    ${h.link_to(_(u'Home'),h.url('/'))}
-    &raquo;
-    ${h.link_to(c.repo_name,h.url('changelog_home',repo_name=c.repo_name))}
-    &raquo;
-    ${_('All pull requests')}
+    ${_('Pull requests')}
+</%def>
+
+<%def name="page_nav()">
+    ${self.menu('repositories')}
 </%def>
 
 <%def name="main()">
+${self.context_bar('showpullrequest')}
 
 <div class="box">
     <!-- box / title -->
     <div class="title">
         ${self.breadcrumbs()}
     </div>
-
-    %for pr in c.pull_requests:
-        <div>
-          <h4>
-          %if pr.is_closed():
-          <img src="${h.url('/images/icons/tick.png')}" alt="${_('Closed')}" />
-          %endif
-          <a href="${h.url('pullrequest_show',repo_name=c.repo_name,pull_request_id=pr.pull_request_id)}">
-          ${_('Pull request #%s opened by %s on %s') % (pr.pull_request_id, pr.author.full_name, h.fmt_date(pr.created_on))}
-          </a>
-          </h4>
-          <h5 style="border:0px;padding-bottom:0px">${_('Title')}: ${pr.title}</h5>
-          <div style="padding:0px 24px">${pr.description}</div>
-        </div>
-    %endfor
-
+    ${c.pullrequest_data}
 </div>
 
-<script type="text/javascript"></script>
-
 </%def>
--- a/rhodecode/templates/register.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/register.html	Sun Apr 07 18:37:22 2013 +0200
@@ -2,90 +2,90 @@
 <%inherit file="base/root.html"/>
 
 <%def name="title()">
-    ${_('Sign Up')} - ${c.rhodecode_name}
+    ${_('Sign Up')} &middot; ${c.rhodecode_name}
 </%def>
 
 <div id="register">
 
-	<div class="title top-left-rounded-corner top-right-rounded-corner">
-		<h5>${_('Sign Up to')} ${c.rhodecode_name}</h5>
-	</div>
-	<div class="inner">
-	    ${h.form(url('register'))}
-	    <div class="form">
-	        <!-- fields -->
-	        <div class="fields">
-	             <div class="field">
-	                <div class="label">
-	                    <label for="username">${_('Username')}:</label>
-	                </div>
-	                <div class="input">
-	                    ${h.text('username',class_="medium")}
-	                </div>
-	             </div>
+    <div class="title top-left-rounded-corner top-right-rounded-corner">
+        <h5>${_('Sign Up to')} ${c.rhodecode_name}</h5>
+    </div>
+    <div class="inner">
+        ${h.form(url('register'))}
+        <div class="form">
+            <!-- fields -->
+            <div class="fields">
+                <div class="field">
+                    <div class="label">
+                        <label for="username">${_('Username')}:</label>
+                    </div>
+                    <div class="input">
+                        ${h.text('username',class_="medium")}
+                    </div>
+                </div>
 
-	             <div class="field">
-	                <div class="label">
-	                    <label for="password">${_('Password')}:</label>
-	                </div>
-	                <div class="input">
-	                    ${h.password('password',class_="medium")}
-	                </div>
-	             </div>
+                <div class="field">
+                    <div class="label">
+                        <label for="password">${_('Password')}:</label>
+                    </div>
+                    <div class="input">
+                        ${h.password('password',class_="medium")}
+                    </div>
+                </div>
 
-                       <div class="field">
-                          <div class="label">
-                              <label for="password">${_('Re-enter password')}:</label>
-                          </div>
-                          <div class="input">
-                              ${h.password('password_confirmation',class_="medium")}
-                          </div>
-                       </div>
+                <div class="field">
+                    <div class="label">
+                        <label for="password">${_('Re-enter password')}:</label>
+                    </div>
+                    <div class="input">
+                        ${h.password('password_confirmation',class_="medium")}
+                    </div>
+                </div>
 
-	             <div class="field">
-	                <div class="label">
-	                    <label for="firstname">${_('First Name')}:</label>
-	                </div>
-	                <div class="input">
-	                    ${h.text('firstname',class_="medium")}
-	                </div>
-	             </div>
+                <div class="field">
+                    <div class="label">
+                        <label for="firstname">${_('First Name')}:</label>
+                    </div>
+                    <div class="input">
+                        ${h.text('firstname',class_="medium")}
+                    </div>
+                </div>
 
-	             <div class="field">
-	                <div class="label">
-	                    <label for="lastname">${_('Last Name')}:</label>
-	                </div>
-	                <div class="input">
-	                    ${h.text('lastname',class_="medium")}
-	                </div>
-	             </div>
+                <div class="field">
+                    <div class="label">
+                        <label for="lastname">${_('Last Name')}:</label>
+                    </div>
+                    <div class="input">
+                        ${h.text('lastname',class_="medium")}
+                    </div>
+                </div>
 
-	             <div class="field">
-	                <div class="label">
-	                    <label for="email">${_('Email')}:</label>
-	                </div>
-	                <div class="input">
-	                    ${h.text('email',class_="medium")}
-	                </div>
-	             </div>
+                <div class="field">
+                    <div class="label">
+                        <label for="email">${_('Email')}:</label>
+                    </div>
+                    <div class="input">
+                        ${h.text('email',class_="medium")}
+                    </div>
+                </div>
 
-	            <div class="buttons">
-		            <div class="nohighlight">
-		              ${h.submit('sign_up',_('Sign Up'),class_="ui-btn large")}
-		              %if c.auto_active:
-					  	<div class="activation_msg">${_('Your account will be activated right after registration')}</div>
-					  %else:
-					  	<div class="activation_msg">${_('Your account must wait for activation by administrator')}</div>
-					  %endif
-		            </div>
-	            </div>
-	    	</div>
-	    </div>
-	    ${h.end_form()}
+                <div class="buttons">
+                    <div class="nohighlight">
+                      ${h.submit('sign_up',_('Sign Up'),class_="ui-btn large")}
+                      %if c.auto_active:
+                          <div class="activation_msg">${_('Your account will be activated right after registration')}</div>
+                      %else:
+                          <div class="activation_msg">${_('Your account must wait for activation by administrator')}</div>
+                      %endif
+                    </div>
+                </div>
+            </div>
+        </div>
+        ${h.end_form()}
         <script type="text/javascript">
         YUE.onDOMReady(function(){
             YUD.get('username').focus();
         })
         </script>
-	</div>
+    </div>
  </div>
--- a/rhodecode/templates/repo_switcher_list.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/repo_switcher_list.html	Sun Apr 07 18:37:22 2013 +0200
@@ -1,20 +1,16 @@
 ## -*- coding: utf-8 -*-
 
 <li class="qfilter_rs">
-    <input type="text" style="border:0;width:100%" value="${_('quick filter...')}" name="filter" id="q_filter_rs" />
+    <input type="text" style="border:0;width:100%" placeholder="${_('quick filter...')}" value="" name="filter" id="q_filter_rs" />
 </li>
 
 %for repo in c.repos_list:
-
+    <li>
       %if repo['dbrepo']['private'] and c.visual.show_private_icon:
-         <li>
              <img src="${h.url('/images/icons/lock.png')}" alt="${_('Private repository')}" class="repo_switcher_type"/>
-             ${h.link_to(repo['name'],h.url('summary_home',repo_name=repo['name']),class_="repo_name %s" % repo['dbrepo']['repo_type'])}
-          </li>
       %elif not repo['dbrepo']['private'] and c.visual.show_public_icon:
-         <li>
              <img src="${h.url('/images/icons/lock_open.png')}" alt="${_('Public repository')}" class="repo_switcher_type" />
-             ${h.link_to(repo['name'],h.url('summary_home',repo_name=repo['name']),class_="repo_name %s" % repo['dbrepo']['repo_type'])}
-         </li>
       %endif
+      ${h.link_to(repo['name'],h.url('summary_home',repo_name=repo['name']),class_="repo_name thin %s" % repo['dbrepo']['repo_type'])}
+    </li>
 %endfor
--- a/rhodecode/templates/search/search.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/search/search.html	Sun Apr 07 18:37:22 2013 +0200
@@ -1,64 +1,66 @@
 ## -*- coding: utf-8 -*-
 <%inherit file="/base/base.html"/>
+
 <%def name="title()">
-   %if c.cur_query:
-	%if c.repo_name:
-		${_('Search "%s" in repository: %s') % (c.cur_query, c.repo_name)}
-	%else:
-		${_('Search "%s" in all repositories') % c.cur_query}
-	%endif
-   %else:
-	%if c.repo_name:
-		${_('Search in repository: %s') % c.repo_name}
-	%else:
-		${_('Search in all repositories')}
-	%endif
-   %endif
-	- ${c.rhodecode_name}
+  %if c.repo_name:
+    ${_('Search repository')} ${c.repo_name} &middot; ${c.rhodecode_name}
+  %else:
+    ${_('Search in all repositories')}
+  %endif
 </%def>
-<%def name="breadcrumbs()">
-	${c.rhodecode_name}
+
+<%def name="breadcrumbs_links()">
+  %if c.repo_name:
+    ${_('Search')}
+  %else:
+    ${_('Search in all repositories')}
+  %endif
+  %if c.cur_query:
+    &raquo;
+    ${c.cur_query}
+  %endif
 </%def>
+
 <%def name="page_nav()">
-	${self.menu('home')}
+    %if c.repo_name:
+    ${self.menu('repositories')}
+    %else:
+    ${self.menu('search')}
+    %endif
 </%def>
 <%def name="main()">
-
+%if c.repo_name:
+${self.context_bar('options')}
+%endif
 <div class="box">
-	<!-- box / title -->
-	<div class="title">
-		<h5>
-		%if c.repo_name:
-			${_('Search in repository: %s') % c.repo_name}
-		%else:
-			${_('Search in all repositories')}
-		%endif
-		</h5>
-	</div>
-	<!-- end box / title -->
-	%if c.repo_name:
-		${h.form(h.url('search_repo',search_repo=c.repo_name),method='get')}
-	%else:
-		${h.form(h.url('search'),method='get')}
-	%endif
-	<div class="form">
-		<div class="fields">
-			<div class="field field-first field-noborder">
+    <!-- box / title -->
+    <div class="title">
+        ${self.breadcrumbs()}
+    </div>
+    <!-- end box / title -->
+    %if c.repo_name:
+        ${h.form(h.url('search_repo',repo_name=c.repo_name),method='get')}
+    %else:
+        ${h.form(h.url('search'),method='get')}
+    %endif
+    <div class="form">
+        <div class="fields">
+            <div class="field field-first field-noborder">
              <div class="label">
                  <label for="q">${_('Search term')}</label>
              </div>
-				<div class="input">${h.text('q',c.cur_query,class_="small")}
-					<div class="button highlight">
-						<input type="submit" value="${_('Search')}" class="ui-button"/>
-					</div>
-				</div>
-				<div style="font-weight: bold;clear:Both;margin-left:200px">${c.runtime}</div>
-			</div>
+                <div class="input">${h.text('q',c.cur_query,class_="small")}
+                    <div class="button highlight">
+                        <input type="submit" value="${_('Search')}" class="ui-button"/>
+                    </div>
+                </div>
+                <div style="font-weight: bold;clear:Both;margin-left:200px">${c.runtime}</div>
+            </div>
 
-			<div class="field">
-	            <div class="label">
-	                <label for="type">${_('Search in')}</label>
-	            </div>
+            <div class="field">
+                <div class="label">
+                    <label for="type">${_('Search in')}</label>
+                </div>
                 <div class="select">
                     ${h.select('type',c.cur_type,[('content',_('File contents')),
                         ('commit',_('Commit messages')),
@@ -68,9 +70,9 @@
                 </div>
              </div>
 
-		</div>
-	</div>
-	${h.end_form()}
+        </div>
+    </div>
+    ${h.end_form()}
     <div class="search">
     %if c.cur_type == 'content':
         <%include file='search_content.html'/>
--- a/rhodecode/templates/search/search_path.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/search/search_path.html	Sun Apr 07 18:37:22 2013 +0200
@@ -2,19 +2,19 @@
 
 %for cnt,sr in enumerate(c.formated_results):
     %if h.HasRepoPermissionAny('repository.write','repository.read','repository.admin')(sr['repository'],'search results check'):
-	    <div class="search_path">
-	        <div class="link">
-	            ${h.link_to(h.literal('%s &raquo; %s' % (sr['repository'],sr['f_path'])),
-	                h.url('files_home',repo_name=sr['repository'],revision='tip',f_path=sr['f_path']))}
-	        </div>
-	    </div>
+        <div class="search_path">
+            <div class="link">
+                ${h.link_to(h.literal('%s &raquo; %s' % (sr['repository'],sr['f_path'])),
+                    h.url('files_home',repo_name=sr['repository'],revision='tip',f_path=sr['f_path']))}
+            </div>
+        </div>
     %else:
         %if cnt == 0:
-		    <div class="error">
-		        <div class="link">
-		            ${_('Permission denied')}
-		        </div>
-		    </div>
+            <div class="error">
+                <div class="link">
+                    ${_('Permission denied')}
+                </div>
+            </div>
         %endif
 
     %endif
--- a/rhodecode/templates/settings/repo_settings.html	Mon Mar 11 17:59:38 2013 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,130 +0,0 @@
-## -*- coding: utf-8 -*-
-<%inherit file="/base/base.html"/>
-
-<%def name="title()">
-    ${_('%s Settings') % c.repo_name} - ${c.rhodecode_name}
-</%def>
-
-<%def name="breadcrumbs_links()">
-    ${h.link_to(_(u'Home'),h.url('/'))}
-    &raquo;
-    ${h.link_to(c.repo_info.repo_name,h.url('summary_home',repo_name=c.repo_info.repo_name))}
-    &raquo;
-    ${_('Settings')}
-</%def>
-
-<%def name="page_nav()">
-    ${self.menu('settings')}
-</%def>
-<%def name="main()">
-<div class="box">
-    <!-- box / title -->
-    <div class="title">
-        ${self.breadcrumbs()}
-    </div>
-    ${h.form(url('repo_settings_update', repo_name=c.repo_info.repo_name),method='put')}
-    <div class="form">
-        <!-- fields -->
-        <div class="fields">
-            <div class="field">
-                <div class="label">
-                    <label for="repo_name">${_('Name')}:</label>
-                </div>
-                <div class="input input-medium">
-                    ${h.text('repo_name',class_="small")}
-                </div>
-             </div>
-	       <div class="field">
-	           <div class="label">
-	               <label for="clone_uri">${_('Clone uri')}:</label>
-	           </div>
-	           <div class="input">
-	               ${h.text('clone_uri',class_="medium")}
-                 <span class="help-block">${_('Optional http[s] url from which repository should be cloned.')}</span>
-	           </div>
-	        </div>
-            <div class="field">
-                <div class="label">
-                    <label for="repo_group">${_('Repository group')}:</label>
-                </div>
-                <div class="input">
-                    ${h.select('repo_group','',c.repo_groups,class_="medium")}
-                    <span class="help-block">${_('Optional select a group to put this repository into.')}</span>
-                </div>
-            </div>
-            <div class="field">
-                <div class="label">
-                    <label for="landing_rev">${_('Landing revision')}:</label>
-                </div>
-                <div class="input">
-                    ${h.select('repo_landing_rev','',c.landing_revs,class_="medium")}
-                    <span class="help-block">${_('Default revision for files page, downloads, whoosh and readme')}</span>
-                </div>
-            </div>
-            <div class="field">
-                <div class="label label-textarea">
-                    <label for="repo_description">${_('Description')}:</label>
-                </div>
-                <div class="textarea text-area editor">
-                    ${h.textarea('repo_description')}
-                    <span class="help-block">${_('Keep it short and to the point. Use a README file for longer descriptions.')}</span>
-                </div>
-            </div>
-
-            <div class="field">
-                <div class="label label-checkbox">
-                    <label for="repo_private">${_('Private repository')}:</label>
-                </div>
-                <div class="checkboxes">
-                    ${h.checkbox('repo_private',value="True")}
-                    <span class="help-block">${_('Private repositories are only visible to people explicitly added as collaborators.')}</span>
-                </div>
-            </div>
-
-             <div class="field">
-                <div class="label">
-                    <label for="">${_('Permissions')}:</label>
-                </div>
-                <div class="input">
-                    <%include file="../admin/repos/repo_edit_perms.html"/>
-                </div>
-            </div>
-
-            <div class="buttons">
-              ${h.submit('save',_('Save'),class_="ui-btn large")}
-              ${h.reset('reset',_('Reset'),class_="ui-btn large")}
-            </div>
-
-    </div>
-    ${h.end_form()}
-</div>
-
-<h3>${_('Delete repository')}</h3>
-<div class="form">
-    <!-- fields -->
-    <div class="fields">
-
-        <div class="field">
-            <div class="label">
-                <label for="">${_('Remove repo')}:</label>
-            </div>
-            <div class="checkboxes">
-              ${h.form(url('repo_settings_delete', repo_name=c.repo_info.repo_name),method='delete')}
-              <div class="">
-                 <div class="fields">
-                     ${h.submit('remove_%s' % c.repo_info.repo_name,_('Remove this repository'),class_="ui-btn red",onclick="return confirm('"+_('Confirm to delete this repository')+"');")}
-                 </div>
-                 <div class="field" style="border:none;color:#888">
-                 <ul>
-                    <li>${_('This repository will be renamed in a special way in order to be unaccesible for RhodeCode and VCS systems. If you need fully delete it from file system please do it manually')}</li>
-                 </ul>
-                 </div>
-              </div>
-              ${h.end_form()}
-            </div>
-        </div>
-   </div>
-</div>
-
-</div>
-</%def>
--- a/rhodecode/templates/shortlog/shortlog.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/shortlog/shortlog.html	Sun Apr 07 18:37:22 2013 +0200
@@ -2,28 +2,26 @@
 <%inherit file="/base/base.html"/>
 
 <%def name="title()">
-    ${_('%s Shortlog') % c.repo_name} - ${c.rhodecode_name}
+    ${_('%s Lightweight Changelog') % c.repo_name} &middot; ${c.rhodecode_name}
 </%def>
 
 
 <%def name="breadcrumbs_links()">
-    ${h.link_to(_(u'Home'),h.url('/'))}
-    &raquo;
-    ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
-    &raquo;
     %if c.file_history:
-        ${h.link_to(_('shortlog'),h.url('shortlog_home',repo_name=c.repo_name))}
+        ${h.link_to(_('Lightweight Changelog'),h.url('shortlog_home',repo_name=c.repo_name))}
         &raquo;
         ${c.file_history}
     %else:
-        ${_('shortlog')}
+        ${_('Lightweight Changelog')}
     %endif
 </%def>
 
 <%def name="page_nav()">
-    ${self.menu('shortlog')}
+    ${self.menu('repositories')}
 </%def>
+
 <%def name="main()">
+${self.context_bar('options')}
 <div class="box">
     <!-- box / title -->
     <div class="title">
@@ -31,9 +29,9 @@
     </div>
     <!-- end box / title -->
     <div class="table">
-	    <div id="shortlog_data">
-	        ${c.shortlog_data}
-	    </div>
+        <div id="shortlog_data">
+            ${c.shortlog_data}
+        </div>
     </div>
 </div>
 </%def>
--- a/rhodecode/templates/shortlog/shortlog_data.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/shortlog/shortlog_data.html	Sun Apr 07 18:37:22 2013 +0200
@@ -1,23 +1,23 @@
 ## -*- coding: utf-8 -*-
 %if c.repo_changesets:
 <table class="table_disp">
-	<tr>
-	    <th class="left">${_('revision')}</th>
-        <th class="left">${_('commit message')}</th>
-		<th class="left">${_('age')}</th>
-		<th class="left">${_('author')}</th>
-		<th class="left">${_('branch')}</th>
-		<th class="left">${_('tags')}</th>
-	</tr>
+    <tr>
+        <th class="left">${_('Revision')}</th>
+        <th class="left">${_('Commit message')}</th>
+        <th class="left">${_('Age')}</th>
+        <th class="left">${_('Author')}</th>
+        <th class="left">${_('Branch')}</th>
+        <th class="left">${_('Tags')}</th>
+    </tr>
 %for cnt,cs in enumerate(c.repo_changesets):
-	<tr class="parity${cnt%2}">
+    <tr class="parity${cnt%2}">
         <td>
           <div>
             <div class="changeset-status-container">
               %if c.statuses.get(cs.raw_id):
                 <div class="changeset-status-ico">
                 %if c.statuses.get(cs.raw_id)[2]:
-                  <a class="tooltip" title="${_('Click to open associated pull request')}" href="${h.url('pullrequest_show',repo_name=c.statuses.get(cs.raw_id)[3],pull_request_id=c.statuses.get(cs.raw_id)[2])}">
+                  <a class="tooltip" title="${_('Click to open associated pull request #%s' % c.statuses.get(cs.raw_id)[2])}" href="${h.url('pullrequest_show',repo_name=c.statuses.get(cs.raw_id)[3],pull_request_id=c.statuses.get(cs.raw_id)[2])}">
                     <img src="${h.url('/images/icons/flag_status_%s.png' % c.statuses.get(cs.raw_id)[0])}" />
                   </a>
                 %else:
@@ -26,7 +26,7 @@
                 </div>
               %endif
             </div>
-            <pre><a href="${h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id)}">r${cs.revision}:${h.short_id(cs.raw_id)}</a></pre>
+            <pre><a href="${h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id)}">${h.show_id(cs)}</a></pre>
          </div>
         </td>
         <td>
@@ -35,24 +35,24 @@
         <td><span class="tooltip" title="${h.tooltip(h.fmt_date(cs.date))}">
                       ${h.age(cs.date)}</span>
         </td>
-		<td title="${cs.author}">${h.person(cs.author)}</td>
-		<td>
-			<span class="logtags">
+        <td title="${cs.author}">${h.person(cs.author)}</td>
+        <td>
+            <span class="logtags">
                 %if cs.branch:
-				<span class="branchtag">
+                <span class="branchtag">
                     ${cs.branch}
                 </span>
                 %endif
-			</span>
-		</td>
-		<td>
-			<span class="logtags">
-				%for tag in cs.tags:
-					<span class="tagtag">${tag}</span>
-				%endfor
-			</span>
-		</td>
-	</tr>
+            </span>
+        </td>
+        <td>
+            <span class="logtags">
+                %for tag in cs.tags:
+                    <span class="tagtag">${tag}</span>
+                %endfor
+            </span>
+        </td>
+    </tr>
 %endfor
 
 </table>
@@ -75,7 +75,7 @@
 <h4>${_('Add or upload files directly via RhodeCode')}</h4>
 <div style="margin: 20px 30px;">
   <div id="add_node_id" class="add_node">
-      <a class="ui-btn" href="${h.url('files_add_home',repo_name=c.repo_name,revision=0,f_path='')}">${_('add new file')}</a>
+      <a class="ui-btn" href="${h.url('files_add_home',repo_name=c.repo_name,revision=0,f_path='')}">${_('Add new file')}</a>
   </div>
 </div>
 %endif
--- a/rhodecode/templates/summary/summary.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/summary/summary.html	Sun Apr 07 18:37:22 2013 +0200
@@ -1,27 +1,39 @@
 <%inherit file="/base/base.html"/>
 
 <%def name="title()">
-    ${_('%s Summary') % c.repo_name} - ${c.rhodecode_name}
+    ${_('%s Summary') % c.repo_name} &middot; ${c.rhodecode_name}
 </%def>
 
 <%def name="breadcrumbs_links()">
-    ${h.link_to(_(u'Home'),h.url('/'))}
-    &raquo;
-    ${h.repo_link(c.dbrepo.groups_and_repo)}
-    &raquo;
-    ${_('summary')}
+    ${_('Summary')}
 </%def>
 
 <%def name="page_nav()">
-	${self.menu('summary')}
+    ${self.menu('repositories')}
 </%def>
 
 <%def name="head_extra()">
-<link href="${h.url('atom_feed_home',repo_name=c.dbrepo.repo_name,api_key=c.rhodecode_user.api_key)}" rel="alternate" title="${_('repo %s ATOM feed') % c.repo_name}" type="application/atom+xml" />
-<link href="${h.url('rss_feed_home',repo_name=c.dbrepo.repo_name,api_key=c.rhodecode_user.api_key)}" rel="alternate" title="${_('repo %s RSS feed') % c.repo_name}" type="application/rss+xml" />
+<link href="${h.url('atom_feed_home',repo_name=c.dbrepo.repo_name,api_key=c.rhodecode_user.api_key)}" rel="alternate" title="${_('%s ATOM feed') % c.repo_name}" type="application/atom+xml" />
+<link href="${h.url('rss_feed_home',repo_name=c.dbrepo.repo_name,api_key=c.rhodecode_user.api_key)}" rel="alternate" title="${_('%s RSS feed') % c.repo_name}" type="application/rss+xml" />
+
+<script>
+redirect_hash_branch = function(){
+    var branch = window.location.hash.replace(/^#(.*)/, '$1');
+    if (branch){
+        window.location = "${h.url('changelog_home',repo_name=c.repo_name,branch='__BRANCH__')}"
+            .replace('__BRANCH__',branch);
+    }
+}
+redirect_hash_branch();
+window.onhashchange = function() {
+    redirect_hash_branch();
+};
+</script>
+
 </%def>
 
 <%def name="main()">
+${self.context_bar('summary')}
     <%
     summary = lambda n:{False:'summary-short'}.get(n)
     %>
@@ -35,34 +47,14 @@
         ${self.breadcrumbs()}
     </div>
     <!-- end box / title -->
-	<div class="form">
-	  <div id="summary" class="fields">
+    <div class="form">
+      <div id="summary" class="fields">
 
-			 <div class="field">
-			  <div class="label-summary">
-			      <label>${_('Name')}:</label>
-			  </div>
-			  <div class="input ${summary(c.show_stats)}">
-                  <div style="float:right;padding:5px 0px 0px 5px">
-                     %if c.rhodecode_user.username != 'default':
-                      ${h.link_to(_('RSS'),h.url('rss_feed_home',repo_name=c.dbrepo.repo_name,api_key=c.rhodecode_user.api_key),class_='rss_icon')}
-                      ${h.link_to(_('ATOM'),h.url('atom_feed_home',repo_name=c.dbrepo.repo_name,api_key=c.rhodecode_user.api_key),class_='atom_icon')}
-                     %else:
-                      ${h.link_to(_('RSS'),h.url('rss_feed_home',repo_name=c.dbrepo.repo_name),class_='rss_icon')}
-                      ${h.link_to(_('ATOM'),h.url('atom_feed_home',repo_name=c.dbrepo.repo_name),class_='atom_icon')}
-                     %endif
-                  </div>
-                  %if c.rhodecode_user.username != 'default':
-                      %if c.following:
-                      <span id="follow_toggle" class="following tooltip" title="${_('Stop following this repository')}"
-                            onclick="javascript:toggleFollowingRepo(this,${c.dbrepo.repo_id},'${str(h.get_token())}')">
-                      </span>
-                      %else:
-                      <span id="follow_toggle" class="follow tooltip" title="${_('Start following this repository')}"
-                            onclick="javascript:toggleFollowingRepo(this,${c.dbrepo.repo_id},'${str(h.get_token())}')">
-                      </span>
-                      %endif
-                  %endif:
+             <div class="field">
+              <div class="label-summary">
+                  <label>${_('Name')}:</label>
+              </div>
+              <div class="input ${summary(c.show_stats)}">
 
                    ## locking icon
                     %if c.rhodecode_db_repo.enable_locking:
@@ -73,119 +65,156 @@
                       %endif
                     %endif
                  ##REPO TYPE
-		         %if h.is_hg(c.dbrepo):
-		           <img style="margin-bottom:2px" class="icon" title="${_('Mercurial repository')}" alt="${_('Mercurial repository')}" src="${h.url('/images/icons/hgicon.png')}"/>
-		         %endif
-		         %if h.is_git(c.dbrepo):
-		           <img style="margin-bottom:2px" class="icon" title="${_('Git repository')}" alt="${_('Git repository')}" src="${h.url('/images/icons/giticon.png')}"/>
-		         %endif
+                 %if h.is_hg(c.dbrepo):
+                   <img style="margin-bottom:2px" class="icon" title="${_('Mercurial repository')}" alt="${_('Mercurial repository')}" src="${h.url('/images/icons/hgicon.png')}"/>
+                 %endif
+                 %if h.is_git(c.dbrepo):
+                   <img style="margin-bottom:2px" class="icon" title="${_('Git repository')}" alt="${_('Git repository')}" src="${h.url('/images/icons/giticon.png')}"/>
+                 %endif
 
                  ##PUBLIC/PRIVATE
-	             %if c.dbrepo.private:
-	                <img style="margin-bottom:2px" class="icon" title="${_('private repository')}" alt="${_('private repository')}" src="${h.url('/images/icons/lock.png')}"/>
-	             %else:
-	                <img style="margin-bottom:2px" class="icon" title="${_('public repository')}" alt="${_('public repository')}" src="${h.url('/images/icons/lock_open.png')}"/>
-	             %endif
+                 %if c.dbrepo.private:
+                    <img style="margin-bottom:2px" class="icon" title="${_('Private repository')}" alt="${_('Private repository')}" src="${h.url('/images/icons/lock.png')}"/>
+                 %else:
+                    <img style="margin-bottom:2px" class="icon" title="${_('Public repository')}" alt="${_('Public repository')}" src="${h.url('/images/icons/lock_open.png')}"/>
+                 %endif
 
-	              ##REPO NAME
-			      <span class="repo_name" title="${_('Non changable ID %s') % c.dbrepo.repo_id}">${h.repo_link(c.dbrepo.groups_and_repo)}</span>
+                  ##REPO NAME
+                  <span class="repo_name" title="${_('Non changable ID %s') % c.dbrepo.repo_id}">${h.repo_link(c.dbrepo.groups_and_repo)}</span>
 
                   ##FORK
-		          %if c.dbrepo.fork:
-	            	<div style="margin-top:5px;clear:both"">
-	            	<a href="${h.url('summary_home',repo_name=c.dbrepo.fork.repo_name)}"><img class="icon" alt="${_('public')}" title="${_('Fork of')} ${c.dbrepo.fork.repo_name}" src="${h.url('/images/icons/arrow_divide.png')}"/>
-	            	    ${_('Fork of')} ${c.dbrepo.fork.repo_name}
-	            	</a>
-	            	</div>
-		          %endif
-		          ##REMOTE
-				  %if c.dbrepo.clone_uri:
+                  %if c.dbrepo.fork:
                     <div style="margin-top:5px;clear:both">
-                    <a href="${h.url(str(h.hide_credentials(c.dbrepo.clone_uri)))}"><img class="icon" alt="${_('remote clone')}" title="${_('Clone from')} ${h.hide_credentials(c.dbrepo.clone_uri)}" src="${h.url('/images/icons/connect.png')}"/>
+                    <a href="${h.url('summary_home',repo_name=c.dbrepo.fork.repo_name)}"><img class="icon" alt="${_('Public')}" title="${_('Fork of')} ${c.dbrepo.fork.repo_name}" src="${h.url('/images/icons/arrow_divide.png')}"/>
+                        ${_('Fork of')} ${c.dbrepo.fork.repo_name}
+                    </a>
+                    </div>
+                  %endif
+                  ##REMOTE
+                  %if c.dbrepo.clone_uri:
+                    <div style="margin-top:5px;clear:both">
+                    <a href="${h.url(str(h.hide_credentials(c.dbrepo.clone_uri)))}"><img class="icon" alt="${_('Remote clone')}" title="${_('Clone from')} ${h.hide_credentials(c.dbrepo.clone_uri)}" src="${h.url('/images/icons/connect.png')}"/>
                         ${_('Clone from')} ${h.hide_credentials(c.dbrepo.clone_uri)}
                     </a>
                     </div>
-				  %endif
-			  </div>
-			 </div>
+                  %endif
+              </div>
+             </div>
 
-			 <div class="field">
-			  <div class="label-summary">
-			      <label>${_('Description')}:</label>
-			  </div>
+             <div class="field">
+              <div class="label-summary">
+                  <label>${_('Description')}:</label>
+              </div>
               %if c.visual.stylify_metatags:
                 <div class="input ${summary(c.show_stats)} desc">${h.urlify_text(h.desc_stylize(c.dbrepo.description))}</div>
               %else:
                 <div class="input ${summary(c.show_stats)} desc">${h.urlify_text(c.dbrepo.description)}</div>
               %endif
-			 </div>
+             </div>
 
-			 <div class="field">
-			  <div class="label-summary">
-			      <label>${_('Contact')}:</label>
-			  </div>
-			  <div class="input ${summary(c.show_stats)}">
-			  	<div class="gravatar">
-			  		<img alt="gravatar" src="${h.gravatar_url(c.dbrepo.user.email)}"/>
-			  	</div>
-			  		${_('Username')}: ${c.dbrepo.user.username}<br/>
-			  		${_('Name')}: ${c.dbrepo.user.name} ${c.dbrepo.user.lastname}<br/>
-			  		${_('Email')}: <a href="mailto:${c.dbrepo.user.email}">${c.dbrepo.user.email}</a>
-			  </div>
-			 </div>
+             <div class="field">
+              <div class="label-summary">
+                  <label>${_('Contact')}:</label>
+              </div>
+              <div class="input ${summary(c.show_stats)}">
+                  <div class="gravatar">
+                      <img alt="gravatar" src="${h.gravatar_url(c.dbrepo.user.email)}"/>
+                  </div>
+                      ${_('Username')}: ${c.dbrepo.user.username}<br/>
+                      ${_('Name')}: ${c.dbrepo.user.name} ${c.dbrepo.user.lastname}<br/>
+                      ${_('Email')}: <a href="mailto:${c.dbrepo.user.email}">${c.dbrepo.user.email}</a>
+              </div>
+             </div>
 
-			 <div class="field">
-			  <div class="label-summary">
-			      <label>${_('Clone url')}:</label>
-			  </div>
-			  <div class="input ${summary(c.show_stats)}">
-                  <div  style="display:none" id="clone_by_name" class="ui-btn clone">${_('Show by Name')}</div>
+             <div class="field">
+              <div class="label-summary">
+                  <label>${_('Clone url')}:</label>
+              </div>
+              <div class="input ${summary(c.show_stats)}">
+                  <input style="width:${'75%' if c.show_stats else '80%'}" type="text" id="clone_url" readonly="readonly" value="${c.clone_repo_url}"/>
+                  <input style="display:none;width:${'75%' if c.show_stats else '80%'}" type="text" id="clone_url_id" readonly="readonly" value="${c.clone_repo_url_id}"/>
+                  <div style="display:none" id="clone_by_name" class="ui-btn clone">${_('Show by Name')}</div>
                   <div id="clone_by_id" class="ui-btn clone">${_('Show by ID')}</div>
-			      <input style="width:80%;margin-left:105px" type="text" id="clone_url" readonly="readonly" value="${c.clone_repo_url}"/>
-                  <input style="display:none;width:80%;margin-left:105px" type="text" id="clone_url_id" readonly="readonly" value="${c.clone_repo_url_id}"/>
-			  </div>
-			 </div>
+              </div>
+             </div>
 
-			 <div class="field">
-			  <div class="label-summary">
-			      <label>${_('Trending files')}:</label>
-			  </div>
-			  <div class="input ${summary(c.show_stats)}">
+             <div class="field">
+              <div class="label-summary">
+                  <label>${_('Trending files')}:</label>
+              </div>
+              <div class="input ${summary(c.show_stats)}">
                 %if c.show_stats:
-			    <div id="lang_stats"></div>
+                <div id="lang_stats"></div>
                 %else:
                    ${_('Statistics are disabled for this repository')}
                    %if h.HasPermissionAll('hg.admin')('enable stats on from summary'):
                         ${h.link_to(_('enable'),h.url('edit_repo',repo_name=c.repo_name),class_="ui-btn")}
                    %endif
                 %endif
-			  </div>
-			 </div>
+              </div>
+             </div>
 
-			 <div class="field">
-			  <div class="label-summary">
-			      <label>${_('Download')}:</label>
-			  </div>
-			  <div class="input ${summary(c.show_stats)}">
-		        %if len(c.rhodecode_repo.revisions) == 0:
-		          ${_('There are no downloads yet')}
-		        %elif c.enable_downloads is False:
-		          ${_('Downloads are disabled for this repository')}
+             <div class="field">
+              <div class="label-summary">
+                  <label>${_('Download')}:</label>
+              </div>
+              <div class="input ${summary(c.show_stats)}">
+                %if len(c.rhodecode_repo.revisions) == 0:
+                  ${_('There are no downloads yet')}
+                %elif not c.enable_downloads:
+                  ${_('Downloads are disabled for this repository')}
                     %if h.HasPermissionAll('hg.admin')('enable downloads on from summary'):
                         ${h.link_to(_('enable'),h.url('edit_repo',repo_name=c.repo_name),class_="ui-btn")}
                     %endif
-		        %else:
-			        ${h.select('download_options',c.rhodecode_repo.get_changeset().raw_id,c.download_options)}
-			             <span id="${'zip_link'}">${h.link_to(_('Download as zip'), h.url('files_archive_home',repo_name=c.dbrepo.repo_name,fname='tip.zip'),class_="archive_icon ui-btn")}</span>
+                %else:
+                    ${h.select('download_options',c.rhodecode_repo.get_changeset().raw_id,c.download_options)}
+                         <span id="${'zip_link'}">${h.link_to(_('Download as zip'), h.url('files_archive_home',repo_name=c.dbrepo.repo_name,fname='tip.zip'),class_="archive_icon ui-btn")}</span>
                     <span style="vertical-align: bottom">
                         <input id="archive_subrepos" type="checkbox" name="subrepos" />
                         <label for="archive_subrepos" class="tooltip" title="${h.tooltip(_('Check this to download archive with subrepos'))}" >${_('with subrepos')}</label>
                     </span>
-			    %endif
-			  </div>
-			 </div>
-	  </div>
-	</div>
+                %endif
+              </div>
+             </div>
+        </div>
+        <div id="summary-menu-stats">
+          <ul>
+            <li>
+               <a class="followers" title="${_('Followers')}" href="${h.url('repo_followers_home',repo_name=c.repo_name)}">
+                ${_('Followers')}
+                <span style="float:right" id="current_followers_count">${c.repository_followers}</span>
+              </a>
+            </li>
+            <li>
+              <a class="forks" title="${_('Forks')}" href="${h.url('repo_forks_home',repo_name=c.repo_name)}">
+                ${_('Forks')}
+                <span style="float:right">${c.repository_forks}</span>
+              </a>
+            </li>
+
+            %if c.rhodecode_user.username != 'default':
+            <li class="repo_size">
+              <a href="#" class="repo-size" onclick="javascript:showRepoSize('repo_size_2','${c.dbrepo.repo_name}','${str(h.get_token())}')">${_('Repository Size')}</a>
+              <span id="repo_size_2"></span>
+            </li>
+            %endif
+
+            <li>
+            %if c.rhodecode_user.username != 'default':
+              ${h.link_to(_('Feed'),h.url('atom_feed_home',repo_name=c.dbrepo.repo_name,api_key=c.rhodecode_user.api_key),class_='feed')}
+            %else:
+              ${h.link_to(_('Feed'),h.url('atom_feed_home',repo_name=c.dbrepo.repo_name),class_='feed')}
+            %endif
+            </li>
+
+            %if h.HasRepoPermissionAll('repository.admin')(c.repo_name):
+             <li>
+                  ${h.link_to(_('Settings'),h.url('edit_repo',repo_name=c.repo_name),class_='settings')}
+             </li>
+            %endif
+          </ul>
+        </div>
+    </div>
 </div>
 
 %if c.show_stats:
@@ -210,12 +239,12 @@
         <div style="clear: both;height: 10px"></div>
         <div id="overview" style="width:450px;height:100px;float:left"></div>
 
-    	<div id="legend_data" style="clear:both;margin-top:10px;">
-	    	<div id="legend_container"></div>
-	    	<div id="legend_choices">
-				<table id="legend_choices_tables" class="noborder" style="font-size:smaller;color:#545454"></table>
-	    	</div>
-    	</div>
+        <div id="legend_data" style="clear:both;margin-top:10px;">
+            <div id="legend_container"></div>
+            <div id="legend_choices">
+                <table id="legend_choices_tables" class="noborder" style="font-size:smaller;color:#545454"></table>
+            </div>
+        </div>
     </div>
 </div>
 %endif
@@ -224,7 +253,7 @@
     <div class="title">
         <div class="breadcrumbs">
         %if c.repo_changesets:
-            ${h.link_to(_('Shortlog'),h.url('shortlog_home',repo_name=c.repo_name))}
+            ${h.link_to(_('Latest changes'),h.url('changelog_home',repo_name=c.repo_name))}
         %else:
             ${_('Quick start')}
          %endif
@@ -279,13 +308,13 @@
 })
 YUE.on('clone_by_id','click',function(e){
 
-	// show url by id and hide id button
-	YUD.setStyle('clone_by_id','display','none');
+    // show url by id and hide id button
+    YUD.setStyle('clone_by_id','display','none');
     YUD.setStyle('clone_url_id','display','');
 
     // hide url by name and show id button
-	YUD.setStyle('clone_by_name','display','');
-	YUD.setStyle('clone_url','display','none');
+    YUD.setStyle('clone_by_name','display','');
+    YUD.setStyle('clone_url','display','none');
 })
 
 
@@ -323,7 +352,7 @@
 tbl.setAttribute('class','trending_language_tbl');
 var cnt = 0;
 for (var i=0;i<data.length;i++){
-	total+= data[i][1].count;
+    total+= data[i][1].count;
 }
 for (var i=0;i<data.length;i++){
     cnt += 1;
@@ -372,7 +401,7 @@
         lnk = document.createElement('a');
 
         lnk.href='#';
-        lnk.innerHTML = "${_('show more')}";
+        lnk.innerHTML = "${_('Show more')}";
         lnk.id='code_stats_show_more';
         td.appendChild(lnk);
 
@@ -663,7 +692,6 @@
                 var changed_suffix = " ${_('files changed')} ";
                 var removed_suffix = " ${_('files removed')} ";
 
-
                 if(nr_commits == 1){nr_commits_suffix = " ${_('commit')} ";}
                 if(added==1){added_suffix=" ${_('file added')} ";}
                 if(changed==1){changed_suffix=" ${_('file changed')} ";}
--- a/rhodecode/templates/switch_to_list.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/switch_to_list.html	Sun Apr 07 18:37:22 2013 +0200
@@ -1,10 +1,10 @@
 ## -*- coding: utf-8 -*-
 <li>
-    ${h.link_to('%s (%s)' % (_('branches'),len(c.rhodecode_repo.branches.values()),),h.url('branches_home',repo_name=c.repo_name),class_='branches childs')}
+    ${h.link_to('%s (%s)' % (_('Branches'),len(c.rhodecode_repo.branches.values()),),h.url('branches_home',repo_name=c.repo_name),class_='branches childs')}
     <ul>
     %if c.rhodecode_repo.branches.values():
         %for cnt,branch in enumerate(c.rhodecode_repo.branches.items()):
-            <li><div><pre>${h.link_to('%s - %s' % (branch[0],h.short_id(branch[1])),h.url('files_home',repo_name=c.repo_name,revision=branch[0]))}</pre></div></li>
+            <li><div><pre>${h.link_to('%s - %s' % (branch[0],h.short_id(branch[1])),h.url('files_home',repo_name=c.repo_name,revision=(branch[0] if '/' not in branch[0] else branch[1]), at=branch[0]))}</pre></div></li>
         %endfor
     %else:
         <li>${h.link_to(_('There are no branches yet'),'#')}</li>
@@ -12,11 +12,11 @@
     </ul>
 </li>
 <li>
-    ${h.link_to('%s (%s)' % (_('tags'),len(c.rhodecode_repo.tags.values()),),h.url('tags_home',repo_name=c.repo_name),class_='tags childs')}
+    ${h.link_to('%s (%s)' % (_('Tags'),len(c.rhodecode_repo.tags.values()),),h.url('tags_home',repo_name=c.repo_name),class_='tags childs')}
     <ul>
     %if c.rhodecode_repo.tags.values():
         %for cnt,tag in enumerate(c.rhodecode_repo.tags.items()):
-         <li><div><pre>${h.link_to('%s - %s' % (tag[0],h.short_id(tag[1])),h.url('files_home',repo_name=c.repo_name,revision=tag[0]))}</pre></div></li>
+         <li><div><pre>${h.link_to('%s - %s' % (tag[0],h.short_id(tag[1])),h.url('files_home',repo_name=c.repo_name,revision=(tag[0] if '/' not in tag[0] else tag[1]), at=tag[0]))}</pre></div></li>
         %endfor
     %else:
         <li>${h.link_to(_('There are no tags yet'),'#')}</li>
@@ -25,11 +25,11 @@
 </li>
 %if c.rhodecode_repo.alias == 'hg':
 <li>
-    ${h.link_to('%s (%s)' % (_('bookmarks'),len(c.rhodecode_repo.bookmarks.values()),),h.url('bookmarks_home',repo_name=c.repo_name),class_='bookmarks childs')}
+    ${h.link_to('%s (%s)' % (_('Bookmarks'),len(c.rhodecode_repo.bookmarks.values()),),h.url('bookmarks_home',repo_name=c.repo_name),class_='bookmarks childs')}
     <ul>
     %if c.rhodecode_repo.bookmarks.values():
         %for cnt,book in enumerate(c.rhodecode_repo.bookmarks.items()):
-         <li><div><pre>${h.link_to('%s - %s' % (book[0],h.short_id(book[1])),h.url('files_home',repo_name=c.repo_name,revision=book[1]))}</pre></div></li>
+         <li><div><pre>${h.link_to('%s - %s' % (book[0],h.short_id(book[1])),h.url('files_home',repo_name=c.repo_name,revision=(book[0] if '/' not in book[0] else book[1]), at=book[0]))}</pre></div></li>
         %endfor
     %else:
         <li>${h.link_to(_('There are no bookmarks yet'),'#')}</li>
--- a/rhodecode/templates/tags/tags.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/tags/tags.html	Sun Apr 07 18:37:22 2013 +0200
@@ -2,23 +2,20 @@
 <%inherit file="/base/base.html"/>
 
 <%def name="title()">
-    ${_('%s Tags') % c.repo_name} - ${c.rhodecode_name}
+    ${_('%s Tags') % c.repo_name} &middot; ${c.rhodecode_name}
 </%def>
 
-
 <%def name="breadcrumbs_links()">
-    <input class="q_filter_box" id="q_filter_tags" size="15" type="text" name="filter" value="${_('quick filter...')}"/>
-    ${h.link_to(_(u'Home'),h.url('/'))}
-    &raquo;
-    ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
-    &raquo;
-    ${_('tags')}
+    <input class="q_filter_box" id="q_filter_tags" size="15" type="text" name="filter" placeholder="${_('quick filter...')}" value=""/>
+    ${_('Tags')}
 </%def>
 
 <%def name="page_nav()">
-    ${self.menu('tags')}
+    ${self.menu('repositories')}
 </%def>
+
 <%def name="main()">
+${self.context_bar('switch-to')}
 <div class="box">
     <!-- box / title -->
     <div class="title">
@@ -26,7 +23,7 @@
     </div>
     <!-- end box / title -->
     %if c.repo_tags:
-    <div class="info_box" id="compare_tags" style="clear: both;padding: 10px 19px;vertical-align: right;text-align: right;"><a href="#" class="ui-btn small">${_('Compare tags')}</a></div>
+    <div class="info_box" id="compare_tags" style="clear: both;padding: 10px 19px;text-align: right;"><a href="#" class="ui-btn small">${_('Compare tags')}</a></div>
     %endif
     <div class="table">
         <%include file='tags_data.html'/>
--- a/rhodecode/templates/tags/tags_data.html	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/templates/tags/tags_data.html	Sun Apr 07 18:37:22 2013 +0200
@@ -2,16 +2,16 @@
    <div id="table_wrap" class="yui-skin-sam">
     <table id="tags_data">
       <thead>
-    	<tr>
+        <tr>
             <th class="left">${_('Name')}</th>
             <th class="left">${_('Date')}</th>
             <th class="left">${_('Author')}</th>
             <th class="left">${_('Revision')}</th>
             <th class="left">${_('Compare')}</th>
-    	</tr>
+        </tr>
       </thead>
-		%for cnt,tag in enumerate(c.repo_tags.items()):
-		<tr class="parity${cnt%2}">
+        %for cnt,tag in enumerate(c.repo_tags.items()):
+        <tr class="parity${cnt%2}">
             <td>
                 <span class="logtags">
                     <span class="tagtag">${h.link_to(tag[0],
@@ -20,8 +20,8 @@
                 </span>
             </td>
             <td><span class="tooltip" title="${h.tooltip(h.age(tag[1].date))}">${h.fmt_date(tag[1].date)}</span></td>
-	        <td title="${tag[1].author}">${h.person(tag[1].author)}</td>
-	        <td>
+            <td title="${tag[1].author}">${h.person(tag[1].author)}</td>
+            <td>
                 <div>
                     <pre><a href="${h.url('files_home',repo_name=c.repo_name,revision=tag[1].raw_id)}">r${tag[1].revision}:${h.short_id(tag[1].raw_id)}</a></pre>
                 </div>
@@ -30,10 +30,10 @@
                 <input class="branch-compare" type="radio" name="compare_org" value="${tag[0]}"/>
                 <input class="branch-compare" type="radio" name="compare_other" value="${tag[0]}"/>
             </td>
-		</tr>
-		%endfor
+        </tr>
+        %endfor
     </table>
    </div>
 %else:
-	${_('There are no tags yet')}
+    ${_('There are no tags yet')}
 %endif
--- a/rhodecode/tests/__init__.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/tests/__init__.py	Sun Apr 07 18:37:22 2013 +0200
@@ -6,6 +6,16 @@
 
 This module initializes the application via ``websetup`` (`paster
 setup-app`) and provides the base testing objects.
+
+nosetests -x - fail on first error
+nosetests rhodecode.tests.functional.test_admin_settings:TestSettingsController.test_my_account
+nosetests --pdb --pdb-failures
+nosetests --with-coverage --cover-package=rhodecode.model.validators rhodecode.tests.test_validators
+
+optional FLAGS:
+    RC_WHOOSH_TEST_DISABLE=1 - skip whoosh index building and tests
+    RC_NO_TMP_PATH=1 - disable new temp path for tests, used mostly for test_vcs_operations
+
 """
 import os
 import time
@@ -23,6 +33,7 @@
 from pylons import config, url
 from routes.util import URLGenerator
 from webtest import TestApp
+from nose.plugins.skip import SkipTest
 
 from rhodecode import is_windows
 from rhodecode.model.meta import Session
@@ -30,6 +41,7 @@
 from rhodecode.tests.nose_parametrized import parameterized
 
 import pylons.test
+from rhodecode.lib.utils2 import safe_unicode, safe_str
 
 
 os.environ['TZ'] = 'UTC'
@@ -40,6 +52,7 @@
 
 __all__ = [
     'parameterized', 'environ', 'url', 'get_new_dir', 'TestController',
+    'SkipTest', 'ldap_lib_installed',
     'TESTS_TMP_PATH', 'HG_REPO', 'GIT_REPO', 'NEW_HG_REPO', 'NEW_GIT_REPO',
     'HG_FORK', 'GIT_FORK', 'TEST_USER_ADMIN_LOGIN', 'TEST_USER_ADMIN_PASS',
     'TEST_USER_REGULAR_LOGIN', 'TEST_USER_REGULAR_PASS',
@@ -47,17 +60,12 @@
     'TEST_USER_REGULAR2_PASS', 'TEST_USER_REGULAR2_EMAIL', 'TEST_HG_REPO',
     'TEST_HG_REPO_CLONE', 'TEST_HG_REPO_PULL', 'TEST_GIT_REPO',
     'TEST_GIT_REPO_CLONE', 'TEST_GIT_REPO_PULL', 'HG_REMOTE_REPO',
-    'GIT_REMOTE_REPO', 'SCM_TESTS', '_get_repo_create_params',
-    '_get_group_create_params'
+    'GIT_REMOTE_REPO', 'SCM_TESTS',
 ]
 
 # Invoke websetup with the current config file
 # SetupCommand('setup-app').run([config_file])
 
-##RUNNING DESIRED TESTS
-# nosetests -x rhodecode.tests.functional.test_admin_settings:TestSettingsController.test_my_account
-# nosetests --pdb --pdb-failures
-# nosetests --with-coverage --cover-package=rhodecode.model.validators rhodecode.tests.test_validators
 environ = {}
 
 #SOME GLOBALS FOR TESTS
@@ -109,6 +117,15 @@
 GIT_REMOTE_REPO = jn(TESTS_TMP_PATH, GIT_REPO)
 HG_REMOTE_REPO = jn(TESTS_TMP_PATH, HG_REPO)
 
+#skip ldap tests if LDAP lib is not installed
+ldap_lib_installed = False
+try:
+    import ldap
+    ldap_lib_installed = True
+except ImportError:
+    # means that python-ldap is not installed
+    pass
+
 
 def get_new_dir(title):
     """
@@ -158,43 +175,10 @@
         return User.get_by_username(self._logged_username)
 
     def checkSessionFlash(self, response, msg):
-        self.assertTrue('flash' in response.session)
+        self.assertTrue('flash' in response.session,
+                        msg='Response session:%r have no flash'
+                        % response.session)
         if not msg in response.session['flash'][0][1]:
-            self.fail(
-                'msg `%s` not found in session flash: got `%s` instead' % (
-                      msg, response.session['flash'])
-            )
-
-
-## HELPERS ##
-
-def _get_repo_create_params(**custom):
-    defs = {
-        'repo_name': None,
-        'repo_type': 'hg',
-        'clone_uri': '',
-        'repo_group': '',
-        'repo_description': 'DESC',
-        'repo_private': False,
-        'repo_landing_rev': 'tip'
-    }
-    defs.update(custom)
-    if 'repo_name_full' not in custom:
-        defs.update({'repo_name_full': defs['repo_name']})
-
-    return defs
-
-
-def _get_group_create_params(**custom):
-    defs = dict(
-        group_name=None,
-        group_description='DESC',
-        group_parent_id=None,
-        perms_updates=[],
-        perms_new=[],
-        enable_locking=False,
-        recursive=False
-    )
-    defs.update(custom)
-
-    return defs
+            msg = u'msg `%s` not found in session flash: got `%s` instead' % (
+                      msg, response.session['flash'][0][1])
+            self.fail(safe_str(msg))
--- a/rhodecode/tests/api/api_base.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/tests/api/api_base.py	Sun Apr 07 18:37:22 2013 +0200
@@ -3,16 +3,21 @@
 import mock
 
 from rhodecode.tests import *
+from rhodecode.tests.fixture import Fixture
 from rhodecode.lib.compat import json
 from rhodecode.lib.auth import AuthUser
 from rhodecode.model.user import UserModel
-from rhodecode.model.users_group import UsersGroupModel
+from rhodecode.model.users_group import UserGroupModel
 from rhodecode.model.repo import RepoModel
 from rhodecode.model.meta import Session
 from rhodecode.model.scm import ScmModel
 from rhodecode.model.db import Repository
 
+
 API_URL = '/_admin/api'
+TEST_USER_GROUP = 'test_users_group'
+
+fixture = Fixture()
 
 
 def _build_data(apikey, method, **kw):
@@ -43,45 +48,17 @@
     return response
 
 
-TEST_USERS_GROUP = 'test_users_group'
-
-
-def make_users_group(name=TEST_USERS_GROUP):
-    gr = UsersGroupModel().create(name=name)
-    UsersGroupModel().add_user_to_group(users_group=gr,
+## helpers
+def make_users_group(name=TEST_USER_GROUP):
+    gr = UserGroupModel().create(name=name)
+    UserGroupModel().add_user_to_group(users_group=gr,
                                         user=TEST_USER_ADMIN_LOGIN)
     Session().commit()
     return gr
 
 
-def destroy_users_group(name=TEST_USERS_GROUP):
-    UsersGroupModel().delete(users_group=name, force=True)
-    Session().commit()
-
-
-def create_repo(repo_name, repo_type, owner=None):
-    # create new repo
-    form_data = _get_repo_create_params(
-                    repo_name_full=repo_name,
-                    repo_description='description %s' % repo_name,
-                )
-    cur_user = UserModel().get_by_username(owner or TEST_USER_ADMIN_LOGIN)
-    r = RepoModel().create(form_data, cur_user)
-    Session().commit()
-    return r
-
-
-def create_fork(fork_name, fork_type, fork_of):
-    fork = RepoModel(Session())._get_repo(fork_of)
-    r = create_repo(fork_name, fork_type)
-    r.fork = fork
-    Session().add(r)
-    Session().commit()
-    return r
-
-
-def destroy_repo(repo_name):
-    RepoModel().delete(repo_name)
+def destroy_users_group(name=TEST_USER_GROUP):
+    UserGroupModel().delete(users_group=name, force=True)
     Session().commit()
 
 
@@ -248,7 +225,7 @@
         pass
 
 #        repo_name = 'test_pull'
-#        r = create_repo(repo_name, self.REPO_TYPE)
+#        r = fixture.create_repo(repo_name, repo_type=self.REPO_TYPE)
 #        r.clone_uri = TEST_self.REPO
 #        Session.add(r)
 #        Session.commit()
@@ -261,7 +238,7 @@
 #        expected = 'Pulled from `%s`' % repo_name
 #        self._compare_ok(id_, expected, given=response.body)
 #
-#        destroy_repo(repo_name)
+#        fixture.destroy_repo(repo_name)
 
     def test_api_pull_error(self):
         id_, params = _build_data(self.apikey, 'pull',
@@ -286,6 +263,25 @@
         expected = 'Error occurred during rescan repositories action'
         self._compare_error(id_, expected, given=response.body)
 
+    def test_api_invalidate_cache(self):
+        id_, params = _build_data(self.apikey, 'invalidate_cache',
+                                  repoid=self.REPO)
+        response = api_call(self, params)
+
+        expected = ("Cache for repository `%s` was invalidated: "
+                    "invalidated cache keys: %s" % (self.REPO,
+                                                    [unicode(self.REPO)]))
+        self._compare_ok(id_, expected, given=response.body)
+
+    @mock.patch.object(ScmModel, 'mark_for_invalidation', crash)
+    def test_api_invalidate_cache_error(self):
+        id_, params = _build_data(self.apikey, 'invalidate_cache',
+                                  repoid=self.REPO)
+        response = api_call(self, params)
+
+        expected = 'Error occurred during cache invalidation action'
+        self._compare_error(id_, expected, given=response.body)
+
     def test_api_lock_repo_lock_aquire(self):
         id_, params = _build_data(self.apikey, 'lock',
                                   userid=TEST_USER_ADMIN_LOGIN,
@@ -298,7 +294,8 @@
 
     def test_api_lock_repo_lock_aquire_by_non_admin(self):
         repo_name = 'api_delete_me'
-        create_repo(repo_name, self.REPO_TYPE, owner=self.TEST_USER_LOGIN)
+        fixture.create_repo(repo_name, repo_type=self.REPO_TYPE,
+                            cur_user=self.TEST_USER_LOGIN)
         try:
             id_, params = _build_data(self.apikey_regular, 'lock',
                                       repoid=repo_name,
@@ -308,11 +305,12 @@
                        % (self.TEST_USER_LOGIN, repo_name, True))
             self._compare_ok(id_, expected, given=response.body)
         finally:
-            destroy_repo(repo_name)
+            fixture.destroy_repo(repo_name)
 
     def test_api_lock_repo_lock_aquire_non_admin_with_userid(self):
         repo_name = 'api_delete_me'
-        create_repo(repo_name, self.REPO_TYPE, owner=self.TEST_USER_LOGIN)
+        fixture.create_repo(repo_name, repo_type=self.REPO_TYPE,
+                            cur_user=self.TEST_USER_LOGIN)
         try:
             id_, params = _build_data(self.apikey_regular, 'lock',
                                       userid=TEST_USER_ADMIN_LOGIN,
@@ -322,7 +320,7 @@
             expected = 'userid is not the same as your user'
             self._compare_error(id_, expected, given=response.body)
         finally:
-            destroy_repo(repo_name)
+            fixture.destroy_repo(repo_name)
 
     def test_api_lock_repo_lock_aquire_non_admin_not_his_repo(self):
         id_, params = _build_data(self.apikey_regular, 'lock',
@@ -351,6 +349,17 @@
                    % (TEST_USER_ADMIN_LOGIN, self.REPO, True))
         self._compare_ok(id_, expected, given=response.body)
 
+    def test_api_lock_repo_lock_optional_locked(self):
+        from rhodecode.lib.utils2 import  time_to_datetime
+        _locked_since = json.dumps(time_to_datetime(Repository\
+                                    .get_by_repo_name(self.REPO).locked[1]))
+        id_, params = _build_data(self.apikey, 'lock',
+                                  repoid=self.REPO)
+        response = api_call(self, params)
+        expected = ('Repo `%s` locked by `%s`. Locked=`True`. Locked since: `%s`'
+                   % (self.REPO, TEST_USER_ADMIN_LOGIN, _locked_since))
+        self._compare_ok(id_, expected, given=response.body)
+
     @mock.patch.object(Repository, 'lock', crash)
     def test_api_lock_error(self):
         id_, params = _build_data(self.apikey, 'lock',
@@ -362,6 +371,32 @@
         expected = 'Error occurred locking repository `%s`' % self.REPO
         self._compare_error(id_, expected, given=response.body)
 
+    def test_api_get_locks_regular_user(self):
+        id_, params = _build_data(self.apikey_regular, 'get_locks')
+        response = api_call(self, params)
+        expected = []
+        self._compare_ok(id_, expected, given=response.body)
+
+    def test_api_get_locks_with_userid_regular_user(self):
+        id_, params = _build_data(self.apikey_regular, 'get_locks',
+                                  userid=TEST_USER_ADMIN_LOGIN)
+        response = api_call(self, params)
+        expected = 'userid is not the same as your user'
+        self._compare_error(id_, expected, given=response.body)
+
+    def test_api_get_locks(self):
+        id_, params = _build_data(self.apikey, 'get_locks')
+        response = api_call(self, params)
+        expected = []
+        self._compare_ok(id_, expected, given=response.body)
+
+    def test_api_get_locks_with_userid(self):
+        id_, params = _build_data(self.apikey, 'get_locks',
+                                  userid=TEST_USER_REGULAR_LOGIN)
+        response = api_call(self, params)
+        expected = []
+        self._compare_ok(id_, expected, given=response.body)
+
     def test_api_create_existing_user(self):
         id_, params = _build_data(self.apikey, 'create_user',
                                   username=TEST_USER_ADMIN_LOGIN,
@@ -539,6 +574,7 @@
         ret = repo.get_api_data()
 
         members = []
+        followers = []
         for user in repo.repo_to_perm:
             perm = user.permission.permission_name
             user = user.user
@@ -555,7 +591,11 @@
             users_group_data['permission'] = perm
             members.append(users_group_data)
 
+        for user in repo.followers:
+            followers.append(user.user.get_api_data())
+
         ret['members'] = members
+        ret['followers'] = followers
 
         expected = ret
         self._compare_ok(id_, expected, given=response.body)
@@ -570,6 +610,7 @@
         ret = repo.get_api_data()
 
         members = []
+        followers = []
         for user in repo.repo_to_perm:
             perm = user.permission.permission_name
             user = user.user
@@ -586,7 +627,11 @@
             users_group_data['permission'] = perm
             members.append(users_group_data)
 
+        for user in repo.followers:
+            followers.append(user.user.get_api_data())
+
         ret['members'] = members
+        ret['followers'] = followers
 
         expected = ret
         self._compare_ok(id_, expected, given=response.body)
@@ -704,7 +749,7 @@
         }
         expected = ret
         self._compare_ok(id_, expected, given=response.body)
-        destroy_repo(repo_name)
+        fixture.destroy_repo(repo_name)
 
     def test_api_create_repo_unknown_owner(self):
         repo_name = 'api-repo'
@@ -734,7 +779,7 @@
         }
         expected = ret
         self._compare_ok(id_, expected, given=response.body)
-        destroy_repo(repo_name)
+        fixture.destroy_repo(repo_name)
 
     def test_api_create_repo_by_non_admin(self):
         repo_name = 'api-repo'
@@ -752,7 +797,7 @@
         }
         expected = ret
         self._compare_ok(id_, expected, given=response.body)
-        destroy_repo(repo_name)
+        fixture.destroy_repo(repo_name)
 
     def test_api_create_repo_by_non_admin_specify_owner(self):
         repo_name = 'api-repo'
@@ -766,7 +811,7 @@
 
         expected = 'Only RhodeCode admin can specify `owner` param'
         self._compare_error(id_, expected, given=response.body)
-        destroy_repo(repo_name)
+        fixture.destroy_repo(repo_name)
 
     def test_api_create_repo_exists(self):
         repo_name = self.REPO
@@ -793,7 +838,7 @@
 
     def test_api_delete_repo(self):
         repo_name = 'api_delete_me'
-        create_repo(repo_name, self.REPO_TYPE)
+        fixture.create_repo(repo_name, repo_type=self.REPO_TYPE)
 
         id_, params = _build_data(self.apikey, 'delete_repo',
                                   repoid=repo_name,)
@@ -808,7 +853,8 @@
 
     def test_api_delete_repo_by_non_admin(self):
         repo_name = 'api_delete_me'
-        create_repo(repo_name, self.REPO_TYPE, owner=self.TEST_USER_LOGIN)
+        fixture.create_repo(repo_name, repo_type=self.REPO_TYPE,
+                            cur_user=self.TEST_USER_LOGIN)
         try:
             id_, params = _build_data(self.apikey_regular, 'delete_repo',
                                       repoid=repo_name,)
@@ -821,11 +867,11 @@
             expected = ret
             self._compare_ok(id_, expected, given=response.body)
         finally:
-            destroy_repo(repo_name)
+            fixture.destroy_repo(repo_name)
 
     def test_api_delete_repo_by_non_admin_no_permission(self):
         repo_name = 'api_delete_me'
-        create_repo(repo_name, self.REPO_TYPE)
+        fixture.create_repo(repo_name, repo_type=self.REPO_TYPE)
         try:
             id_, params = _build_data(self.apikey_regular, 'delete_repo',
                                       repoid=repo_name,)
@@ -833,11 +879,11 @@
             expected = 'repository `%s` does not exist' % (repo_name)
             self._compare_error(id_, expected, given=response.body)
         finally:
-            destroy_repo(repo_name)
+            fixture.destroy_repo(repo_name)
 
     def test_api_delete_repo_exception_occurred(self):
         repo_name = 'api_delete_me'
-        create_repo(repo_name, self.REPO_TYPE)
+        fixture.create_repo(repo_name, repo_type=self.REPO_TYPE)
         try:
             with mock.patch.object(RepoModel, 'delete', crash):
                 id_, params = _build_data(self.apikey, 'delete_repo',
@@ -847,7 +893,7 @@
                 expected = 'failed to delete repository `%s`' % repo_name
                 self._compare_error(id_, expected, given=response.body)
         finally:
-            destroy_repo(repo_name)
+            fixture.destroy_repo(repo_name)
 
     def test_api_fork_repo(self):
         fork_name = 'api-repo-fork'
@@ -865,7 +911,7 @@
         }
         expected = ret
         self._compare_ok(id_, expected, given=response.body)
-        destroy_repo(fork_name)
+        fixture.destroy_repo(fork_name)
 
     def test_api_fork_repo_non_admin(self):
         fork_name = 'api-repo-fork'
@@ -882,7 +928,7 @@
         }
         expected = ret
         self._compare_ok(id_, expected, given=response.body)
-        destroy_repo(fork_name)
+        fixture.destroy_repo(fork_name)
 
     def test_api_fork_repo_non_admin_specify_owner(self):
         fork_name = 'api-repo-fork'
@@ -894,7 +940,7 @@
         response = api_call(self, params)
         expected = 'Only RhodeCode admin can specify `owner` param'
         self._compare_error(id_, expected, given=response.body)
-        destroy_repo(fork_name)
+        fixture.destroy_repo(fork_name)
 
     def test_api_fork_repo_non_admin_no_permission_to_fork(self):
         RepoModel().grant_user_permission(repo=self.REPO,
@@ -908,7 +954,7 @@
         response = api_call(self, params)
         expected = 'repository `%s` does not exist' % (self.REPO)
         self._compare_error(id_, expected, given=response.body)
-        destroy_repo(fork_name)
+        fixture.destroy_repo(fork_name)
 
     def test_api_fork_repo_unknown_owner(self):
         fork_name = 'api-repo-fork'
@@ -924,7 +970,7 @@
 
     def test_api_fork_repo_fork_exists(self):
         fork_name = 'api-repo-fork'
-        create_fork(fork_name, self.REPO_TYPE, self.REPO)
+        fixture.create_fork(self.REPO, fork_name)
 
         try:
             fork_name = 'api-repo-fork'
@@ -939,7 +985,7 @@
             expected = "fork `%s` already exist" % fork_name
             self._compare_error(id_, expected, given=response.body)
         finally:
-            destroy_repo(fork_name)
+            fixture.destroy_repo(fork_name)
 
     def test_api_fork_repo_repo_exists(self):
         fork_name = self.REPO
@@ -970,10 +1016,10 @@
 
     def test_api_get_users_group(self):
         id_, params = _build_data(self.apikey, 'get_users_group',
-                                  usersgroupid=TEST_USERS_GROUP)
+                                  usersgroupid=TEST_USER_GROUP)
         response = api_call(self, params)
 
-        users_group = UsersGroupModel().get_group(TEST_USERS_GROUP)
+        users_group = UserGroupModel().get_group(TEST_USER_GROUP)
         members = []
         for user in users_group.members:
             user = user.user
@@ -992,13 +1038,13 @@
         response = api_call(self, params)
 
         expected = []
-        for gr_name in [TEST_USERS_GROUP, 'test_users_group2']:
-            users_group = UsersGroupModel().get_group(gr_name)
+        for gr_name in [TEST_USER_GROUP, 'test_users_group2']:
+            users_group = UserGroupModel().get_group(gr_name)
             ret = users_group.get_api_data()
             expected.append(ret)
         self._compare_ok(id_, expected, given=response.body)
 
-        UsersGroupModel().delete(users_group='test_users_group2')
+        UserGroupModel().delete(users_group='test_users_group2')
         Session().commit()
 
     def test_api_create_users_group(self):
@@ -1008,8 +1054,8 @@
         response = api_call(self, params)
 
         ret = {
-            'msg': 'created new users group `%s`' % group_name,
-            'users_group': jsonify(UsersGroupModel()\
+            'msg': 'created new user group `%s`' % group_name,
+            'users_group': jsonify(UserGroupModel()\
                                    .get_by_name(group_name)\
                                    .get_api_data())
         }
@@ -1020,13 +1066,13 @@
 
     def test_api_get_users_group_that_exist(self):
         id_, params = _build_data(self.apikey, 'create_users_group',
-                                  group_name=TEST_USERS_GROUP)
+                                  group_name=TEST_USER_GROUP)
         response = api_call(self, params)
 
-        expected = "users group `%s` already exist" % TEST_USERS_GROUP
+        expected = "user group `%s` already exist" % TEST_USER_GROUP
         self._compare_error(id_, expected, given=response.body)
 
-    @mock.patch.object(UsersGroupModel, 'create', crash)
+    @mock.patch.object(UserGroupModel, 'create', crash)
     def test_api_get_users_group_exception_occurred(self):
         group_name = 'exception_happens'
         id_, params = _build_data(self.apikey, 'create_users_group',
@@ -1038,7 +1084,7 @@
 
     def test_api_add_user_to_users_group(self):
         gr_name = 'test_group'
-        UsersGroupModel().create(gr_name)
+        UserGroupModel().create(gr_name)
         Session().commit()
         id_, params = _build_data(self.apikey, 'add_user_to_users_group',
                                   usersgroupid=gr_name,
@@ -1046,13 +1092,13 @@
         response = api_call(self, params)
 
         expected = {
-                    'msg': 'added member `%s` to users group `%s`' % (
+                    'msg': 'added member `%s` to user group `%s`' % (
                                 TEST_USER_ADMIN_LOGIN, gr_name
                             ),
                     'success': True}
         self._compare_ok(id_, expected, given=response.body)
 
-        UsersGroupModel().delete(users_group=gr_name)
+        UserGroupModel().delete(users_group=gr_name)
         Session().commit()
 
     def test_api_add_user_to_users_group_that_doesnt_exist(self):
@@ -1061,29 +1107,29 @@
                                   userid=TEST_USER_ADMIN_LOGIN)
         response = api_call(self, params)
 
-        expected = 'users group `%s` does not exist' % 'false-group'
+        expected = 'user group `%s` does not exist' % 'false-group'
         self._compare_error(id_, expected, given=response.body)
 
-    @mock.patch.object(UsersGroupModel, 'add_user_to_group', crash)
+    @mock.patch.object(UserGroupModel, 'add_user_to_group', crash)
     def test_api_add_user_to_users_group_exception_occurred(self):
         gr_name = 'test_group'
-        UsersGroupModel().create(gr_name)
+        UserGroupModel().create(gr_name)
         Session().commit()
         id_, params = _build_data(self.apikey, 'add_user_to_users_group',
                                   usersgroupid=gr_name,
                                   userid=TEST_USER_ADMIN_LOGIN)
         response = api_call(self, params)
 
-        expected = 'failed to add member to users group `%s`' % gr_name
+        expected = 'failed to add member to user group `%s`' % gr_name
         self._compare_error(id_, expected, given=response.body)
 
-        UsersGroupModel().delete(users_group=gr_name)
+        UserGroupModel().delete(users_group=gr_name)
         Session().commit()
 
     def test_api_remove_user_from_users_group(self):
         gr_name = 'test_group_3'
-        gr = UsersGroupModel().create(gr_name)
-        UsersGroupModel().add_user_to_group(gr, user=TEST_USER_ADMIN_LOGIN)
+        gr = UserGroupModel().create(gr_name)
+        UserGroupModel().add_user_to_group(gr, user=TEST_USER_ADMIN_LOGIN)
         Session().commit()
         id_, params = _build_data(self.apikey, 'remove_user_from_users_group',
                                   usersgroupid=gr_name,
@@ -1091,30 +1137,30 @@
         response = api_call(self, params)
 
         expected = {
-                    'msg': 'removed member `%s` from users group `%s`' % (
+                    'msg': 'removed member `%s` from user group `%s`' % (
                                 TEST_USER_ADMIN_LOGIN, gr_name
                             ),
                     'success': True}
         self._compare_ok(id_, expected, given=response.body)
 
-        UsersGroupModel().delete(users_group=gr_name)
+        UserGroupModel().delete(users_group=gr_name)
         Session().commit()
 
-    @mock.patch.object(UsersGroupModel, 'remove_user_from_group', crash)
+    @mock.patch.object(UserGroupModel, 'remove_user_from_group', crash)
     def test_api_remove_user_from_users_group_exception_occurred(self):
         gr_name = 'test_group_3'
-        gr = UsersGroupModel().create(gr_name)
-        UsersGroupModel().add_user_to_group(gr, user=TEST_USER_ADMIN_LOGIN)
+        gr = UserGroupModel().create(gr_name)
+        UserGroupModel().add_user_to_group(gr, user=TEST_USER_ADMIN_LOGIN)
         Session().commit()
         id_, params = _build_data(self.apikey, 'remove_user_from_users_group',
                                   usersgroupid=gr_name,
                                   userid=TEST_USER_ADMIN_LOGIN)
         response = api_call(self, params)
 
-        expected = 'failed to remove member from users group `%s`' % gr_name
+        expected = 'failed to remove member from user group `%s`' % gr_name
         self._compare_error(id_, expected, given=response.body)
 
-        UsersGroupModel().delete(users_group=gr_name)
+        UserGroupModel().delete(users_group=gr_name)
         Session().commit()
 
     @parameterized.expand([('none', 'repository.none'),
@@ -1195,13 +1241,13 @@
     def test_api_grant_users_group_permission(self, name, perm):
         id_, params = _build_data(self.apikey, 'grant_users_group_permission',
                                   repoid=self.REPO,
-                                  usersgroupid=TEST_USERS_GROUP,
+                                  usersgroupid=TEST_USER_GROUP,
                                   perm=perm)
         response = api_call(self, params)
 
         ret = {
-            'msg': 'Granted perm: `%s` for users group: `%s` in repo: `%s`' % (
-                perm, TEST_USERS_GROUP, self.REPO
+            'msg': 'Granted perm: `%s` for user group: `%s` in repo: `%s`' % (
+                perm, TEST_USER_GROUP, self.REPO
             ),
             'success': True
         }
@@ -1212,7 +1258,7 @@
         perm = 'haha.no.permission'
         id_, params = _build_data(self.apikey, 'grant_users_group_permission',
                                   repoid=self.REPO,
-                                  usersgroupid=TEST_USERS_GROUP,
+                                  usersgroupid=TEST_USER_GROUP,
                                   perm=perm)
         response = api_call(self, params)
 
@@ -1224,28 +1270,28 @@
         perm = 'repository.read'
         id_, params = _build_data(self.apikey, 'grant_users_group_permission',
                                   repoid=self.REPO,
-                                  usersgroupid=TEST_USERS_GROUP,
+                                  usersgroupid=TEST_USER_GROUP,
                                   perm=perm)
         response = api_call(self, params)
 
-        expected = 'failed to edit permission for users group: `%s` in repo: `%s`' % (
-                    TEST_USERS_GROUP, self.REPO
+        expected = 'failed to edit permission for user group: `%s` in repo: `%s`' % (
+                    TEST_USER_GROUP, self.REPO
                 )
         self._compare_error(id_, expected, given=response.body)
 
     def test_api_revoke_users_group_permission(self):
         RepoModel().grant_users_group_permission(repo=self.REPO,
-                                                 group_name=TEST_USERS_GROUP,
+                                                 group_name=TEST_USER_GROUP,
                                                  perm='repository.read')
         Session().commit()
         id_, params = _build_data(self.apikey, 'revoke_users_group_permission',
                                   repoid=self.REPO,
-                                  usersgroupid=TEST_USERS_GROUP,)
+                                  usersgroupid=TEST_USER_GROUP,)
         response = api_call(self, params)
 
         expected = {
-            'msg': 'Revoked perm for users group: `%s` in repo: `%s`' % (
-                TEST_USERS_GROUP, self.REPO
+            'msg': 'Revoked perm for user group: `%s` in repo: `%s`' % (
+                TEST_USER_GROUP, self.REPO
             ),
             'success': True
         }
@@ -1256,10 +1302,10 @@
 
         id_, params = _build_data(self.apikey, 'revoke_users_group_permission',
                                   repoid=self.REPO,
-                                  usersgroupid=TEST_USERS_GROUP,)
+                                  usersgroupid=TEST_USER_GROUP,)
         response = api_call(self, params)
 
-        expected = 'failed to edit permission for users group: `%s` in repo: `%s`' % (
-                    TEST_USERS_GROUP, self.REPO
+        expected = 'failed to edit permission for user group: `%s` in repo: `%s`' % (
+                    TEST_USER_GROUP, self.REPO
                 )
         self._compare_error(id_, expected, given=response.body)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rhodecode/tests/fixture.py	Sun Apr 07 18:37:22 2013 +0200
@@ -0,0 +1,102 @@
+"""
+Helpers for fixture generation
+"""
+from rhodecode.tests import *
+from rhodecode.model.db import Repository, User, RepoGroup
+from rhodecode.model.meta import Session
+from rhodecode.model.repo import RepoModel
+from rhodecode.model.repos_group import ReposGroupModel
+
+
+class Fixture(object):
+
+    def __init__(self):
+        pass
+
+    def _get_repo_create_params(self, **custom):
+        defs = dict(
+            repo_name=None,
+            repo_type='hg',
+            clone_uri='',
+            repo_group='',
+            repo_description='DESC',
+            repo_private=False,
+            repo_landing_rev='tip'
+        )
+        defs.update(custom)
+        if 'repo_name_full' not in custom:
+            defs.update({'repo_name_full': defs['repo_name']})
+
+        return defs
+
+    def _get_group_create_params(self, **custom):
+        defs = dict(
+            group_name=None,
+            group_description='DESC',
+            group_parent_id=None,
+            perms_updates=[],
+            perms_new=[],
+            enable_locking=False,
+            recursive=False
+        )
+        defs.update(custom)
+
+        return defs
+
+    def create_repo(self, name, **kwargs):
+        if 'skip_if_exists' in kwargs:
+            del kwargs['skip_if_exists']
+            r = Repository.get_by_repo_name(name)
+            if r:
+                return r
+
+        if isinstance(kwargs.get('repos_group'), RepoGroup):
+            #TODO: rename the repos_group !
+            kwargs['repo_group'] = kwargs['repos_group'].group_id
+            del kwargs['repos_group']
+
+        form_data = self._get_repo_create_params(repo_name=name, **kwargs)
+        cur_user = kwargs.get('cur_user', TEST_USER_ADMIN_LOGIN)
+        RepoModel().create(form_data, cur_user)
+        Session().commit()
+        return Repository.get_by_repo_name(name)
+
+    def create_fork(self, repo_to_fork, fork_name, **kwargs):
+        repo_to_fork = Repository.get_by_repo_name(repo_to_fork)
+
+        form_data = self._get_repo_create_params(repo_name=fork_name,
+                                            fork_parent_id=repo_to_fork,
+                                            repo_type=repo_to_fork.repo_type,
+                                            **kwargs)
+        form_data['update_after_clone'] = False
+
+        #TODO: fix it !!
+        form_data['description'] = form_data['repo_description']
+        form_data['private'] = form_data['repo_private']
+        form_data['landing_rev'] = form_data['repo_landing_rev']
+
+        owner = kwargs.get('cur_user', TEST_USER_ADMIN_LOGIN)
+        RepoModel().create_fork(form_data, cur_user=owner)
+        Session().commit()
+        r = Repository.get_by_repo_name(fork_name)
+        assert r
+        return r
+
+    def destroy_repo(self, repo_name):
+        RepoModel().delete(repo_name)
+        Session().commit()
+
+    def create_group(self, name, **kwargs):
+        if 'skip_if_exists' in kwargs:
+            del kwargs['skip_if_exists']
+            gr = RepoGroup.get_by_group_name(group_name=name)
+            if gr:
+                return gr
+        form_data = self._get_group_create_params(group_name=name, **kwargs)
+        owner = kwargs.get('cur_user', TEST_USER_ADMIN_LOGIN)
+        gr = ReposGroupModel().create(group_name=form_data['group_name'],
+                                 group_description=form_data['group_name'],
+                                 owner=owner, parent=form_data['group_parent_id'])
+        Session().commit()
+        gr = RepoGroup.get_by_group_name(gr.group_name)
+        return gr
--- a/rhodecode/tests/functional/test_admin_ldap_settings.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/tests/functional/test_admin_ldap_settings.py	Sun Apr 07 18:37:22 2013 +0200
@@ -1,15 +1,5 @@
 from rhodecode.tests import *
 from rhodecode.model.db import RhodeCodeSetting
-from nose.plugins.skip import SkipTest
-
-skip_ldap_test = False
-try:
-    import ldap
-except ImportError:
-    # means that python-ldap is not installed
-    skip_ldap_test = True
-    pass
-
 
 class TestLdapSettingsController(TestController):
 
@@ -17,69 +7,89 @@
         self.log_user()
         response = self.app.get(url(controller='admin/ldap_settings',
                                     action='index'))
-        self.assertTrue('LDAP administration' in response.body)
+        response.mustcontain('LDAP administration')
 
     def test_ldap_save_settings(self):
         self.log_user()
-        if skip_ldap_test:
+        if ldap_lib_installed:
             raise SkipTest('skipping due to missing ldap lib')
 
         test_url = url(controller='admin/ldap_settings',
                        action='ldap_settings')
 
         response = self.app.post(url=test_url,
-            params={'ldap_host' : u'dc.example.com',
-                    'ldap_port' : '999',
-                    'ldap_tls_kind' : 'PLAIN',
-                    'ldap_tls_reqcert' : 'NEVER',
-                    'ldap_dn_user':'test_user',
-                    'ldap_dn_pass':'test_pass',
-                    'ldap_base_dn':'test_base_dn',
-                    'ldap_filter':'test_filter',
-                    'ldap_search_scope':'BASE',
-                    'ldap_attr_login':'test_attr_login',
-                    'ldap_attr_firstname':'ima',
-                    'ldap_attr_lastname':'tester',
-                    'ldap_attr_email':'test@example.com' })
+            params={'ldap_host': u'dc.example.com',
+                    'ldap_port': '999',
+                    'ldap_tls_kind': 'PLAIN',
+                    'ldap_tls_reqcert': 'NEVER',
+                    'ldap_dn_user': 'test_user',
+                    'ldap_dn_pass': 'test_pass',
+                    'ldap_base_dn': 'test_base_dn',
+                    'ldap_filter': 'test_filter',
+                    'ldap_search_scope': 'BASE',
+                    'ldap_attr_login': 'test_attr_login',
+                    'ldap_attr_firstname': 'ima',
+                    'ldap_attr_lastname': 'tester',
+                    'ldap_attr_email': 'test@example.com' })
 
         new_settings = RhodeCodeSetting.get_ldap_settings()
         self.assertEqual(new_settings['ldap_host'], u'dc.example.com',
                          'fail db write compare')
 
         self.checkSessionFlash(response,
-                               'Ldap settings updated successfully')
+                               'LDAP settings updated successfully')
 
-    def test_ldap_error_form(self):
+    def test_ldap_error_form_wrong_port_number(self):
         self.log_user()
-        if skip_ldap_test:
+        if ldap_lib_installed:
             raise SkipTest('skipping due to missing ldap lib')
 
         test_url = url(controller='admin/ldap_settings',
                        action='ldap_settings')
 
         response = self.app.post(url=test_url,
-            params={'ldap_host' : '',
-                    'ldap_port' : 'i-should-be-number',
-                    'ldap_tls_kind' : 'PLAIN',
-                    'ldap_tls_reqcert' : 'NEVER',
-                    'ldap_dn_user':'',
-                    'ldap_dn_pass':'',
-                    'ldap_base_dn':'',
-                    'ldap_filter':'',
-                    'ldap_search_scope':'BASE',
-                    'ldap_attr_login':'', #  <----- missing required input
-                    'ldap_attr_firstname':'',
-                    'ldap_attr_lastname':'',
-                    'ldap_attr_email':'' })
+            params={'ldap_host': '',
+                    'ldap_port': 'i-should-be-number',  # bad port num
+                    'ldap_tls_kind': 'PLAIN',
+                    'ldap_tls_reqcert': 'NEVER',
+                    'ldap_dn_user': '',
+                    'ldap_dn_pass': '',
+                    'ldap_base_dn': '',
+                    'ldap_filter': '',
+                    'ldap_search_scope': 'BASE',
+                    'ldap_attr_login': '',
+                    'ldap_attr_firstname': '',
+                    'ldap_attr_lastname': '',
+                    'ldap_attr_email': ''})
+
+        response.mustcontain("""<span class="error-message">"""
+                             """Please enter a number</span><br />""")
 
-        self.assertTrue("""<span class="error-message">The LDAP Login"""
-                        """ attribute of the CN must be specified""" in
-                        response.body)
+    def test_ldap_error_form(self):
+        self.log_user()
+        if ldap_lib_installed:
+            raise SkipTest('skipping due to missing ldap lib')
+
+        test_url = url(controller='admin/ldap_settings',
+                       action='ldap_settings')
 
-
+        response = self.app.post(url=test_url,
+            params={'ldap_host': 'Host',
+                    'ldap_port': '123',
+                    'ldap_tls_kind': 'PLAIN',
+                    'ldap_tls_reqcert': 'NEVER',
+                    'ldap_dn_user': '',
+                    'ldap_dn_pass': '',
+                    'ldap_base_dn': '',
+                    'ldap_filter': '',
+                    'ldap_search_scope': 'BASE',
+                    'ldap_attr_login': '',  # <----- missing required input
+                    'ldap_attr_firstname': '',
+                    'ldap_attr_lastname': '',
+                    'ldap_attr_email': ''})
 
-        self.assertTrue("""<span class="error-message">Please """
-                        """enter a number</span>""" in response.body)
+        response.mustcontain("""<span class="error-message">The LDAP Login"""
+                             """ attribute of the CN must be specified""")
 
     def test_ldap_login(self):
         pass
--- a/rhodecode/tests/functional/test_admin_notifications.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/tests/functional/test_admin_notifications.py	Sun Apr 07 18:37:22 2013 +0200
@@ -22,8 +22,7 @@
         u1 = u1.user_id
 
         response = self.app.get(url('notifications'))
-        self.assertTrue('''<div class="table">No notifications here yet</div>'''
-                        in response.body)
+        response.mustcontain('<div class="table">No notifications here yet</div>')
 
         cur_user = self._get_logged_user()
 
@@ -32,7 +31,7 @@
                                    recipients=[cur_user])
         self.Session().commit()
         response = self.app.get(url('notifications'))
-        self.assertTrue(u'test_notification_1' in response.body)
+        response.mustcontain(u'test_notification_1')
 
 #    def test_index_as_xml(self):
 #        response = self.app.get(url('formatted_notifications', format='xml'))
--- a/rhodecode/tests/functional/test_admin_repos.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/tests/functional/test_admin_repos.py	Sun Apr 07 18:37:22 2013 +0200
@@ -1,19 +1,31 @@
 # -*- coding: utf-8 -*-
 
 import os
-from rhodecode.lib import vcs
+import urllib
 
-from rhodecode.model.db import Repository, RepoGroup
+from rhodecode.lib import vcs
+from rhodecode.model.db import Repository, RepoGroup, UserRepoToPerm, User,\
+    Permission
 from rhodecode.tests import *
 from rhodecode.model.repos_group import ReposGroupModel
 from rhodecode.model.repo import RepoModel
+from rhodecode.model.meta import Session
+from rhodecode.tests.fixture import Fixture
+
+fixture = Fixture()
+
+
+def _get_permission_for_user(user, repo):
+    perm = UserRepoToPerm.query()\
+                .filter(UserRepoToPerm.repository ==
+                        Repository.get_by_repo_name(repo))\
+                .filter(UserRepoToPerm.user == User.get_by_username(user))\
+                .all()
+    return perm
 
 
 class TestAdminReposController(TestController):
 
-    def __make_repo(self):
-        pass
-
     def test_index(self):
         self.log_user()
         response = self.app.get(url('repos'))
@@ -27,11 +39,12 @@
         repo_name = NEW_HG_REPO
         description = 'description for newly created repo'
         response = self.app.post(url('repos'),
-                        _get_repo_create_params(repo_private=False,
+                        fixture._get_repo_create_params(repo_private=False,
                                                 repo_name=repo_name,
                                                 repo_description=description))
         self.checkSessionFlash(response,
-                               'created repository %s' % (repo_name))
+                               'Created repository <a href="/%s">%s</a>'
+                               % (repo_name, repo_name))
 
         #test if the repo was created in the database
         new_repo = self.Session().query(Repository)\
@@ -48,7 +61,7 @@
         #test if repository was created on filesystem
         try:
             vcs.get_repo(os.path.join(TESTS_TMP_PATH, repo_name))
-        except:
+        except Exception:
             self.fail('no repo %s in filesystem' % repo_name)
 
     def test_create_hg_non_ascii(self):
@@ -60,11 +73,125 @@
         description_unicode = description.decode('utf8')
         private = False
         response = self.app.post(url('repos'),
-                        _get_repo_create_params(repo_private=False,
+                        fixture._get_repo_create_params(repo_private=False,
                                                 repo_name=repo_name,
                                                 repo_description=description))
         self.checkSessionFlash(response,
-                               'created repository %s' % (repo_name_unicode))
+                               u'Created repository <a href="/%s">%s</a>'
+                               % (urllib.quote(repo_name), repo_name_unicode))
+        #test if the repo was created in the database
+        new_repo = self.Session().query(Repository)\
+            .filter(Repository.repo_name == repo_name_unicode).one()
+
+        self.assertEqual(new_repo.repo_name, repo_name_unicode)
+        self.assertEqual(new_repo.description, description_unicode)
+
+        #test if repository is visible in the list ?
+        response = response.follow()
+
+        response.mustcontain(repo_name)
+
+        #test if repository was created on filesystem
+        try:
+            vcs.get_repo(os.path.join(TESTS_TMP_PATH, repo_name))
+        except Exception:
+            self.fail('no repo %s in filesystem' % repo_name)
+
+    def test_create_hg_in_group(self):
+        self.log_user()
+
+        ## create GROUP
+        group_name = 'sometest'
+        gr = ReposGroupModel().create(group_name=group_name,
+                                      group_description='test',
+                                      owner=TEST_USER_ADMIN_LOGIN)
+        self.Session().commit()
+
+        repo_name = 'ingroup'
+        repo_name_full = RepoGroup.url_sep().join([group_name, repo_name])
+        description = 'description for newly created repo'
+        response = self.app.post(url('repos'),
+                        fixture._get_repo_create_params(repo_private=False,
+                                                repo_name=repo_name,
+                                                repo_description=description,
+                                                repo_group=gr.group_id,))
+
+        self.checkSessionFlash(response,
+                               'Created repository <a href="/%s">%s</a>'
+                               % (repo_name_full, repo_name))
+        #test if the repo was created in the database
+        new_repo = self.Session().query(Repository)\
+            .filter(Repository.repo_name == repo_name_full).one()
+
+        self.assertEqual(new_repo.repo_name, repo_name_full)
+        self.assertEqual(new_repo.description, description)
+
+        #test if repository is visible in the list ?
+        response = response.follow()
+
+        response.mustcontain(repo_name_full)
+
+        #test if repository was created on filesystem
+        try:
+            vcs.get_repo(os.path.join(TESTS_TMP_PATH, repo_name_full))
+        except Exception:
+            ReposGroupModel().delete(group_name)
+            self.Session().commit()
+            self.fail('no repo %s in filesystem' % repo_name)
+
+        RepoModel().delete(repo_name_full)
+        ReposGroupModel().delete(group_name)
+        self.Session().commit()
+
+    def test_create_git(self):
+        self.log_user()
+        repo_name = NEW_GIT_REPO
+        description = 'description for newly created repo'
+
+        response = self.app.post(url('repos'),
+                        fixture._get_repo_create_params(repo_private=False,
+                                                repo_type='git',
+                                                repo_name=repo_name,
+                                                repo_description=description))
+        self.checkSessionFlash(response,
+                               'Created repository <a href="/%s">%s</a>'
+                               % (repo_name, repo_name))
+
+        #test if the repo was created in the database
+        new_repo = self.Session().query(Repository)\
+            .filter(Repository.repo_name == repo_name).one()
+
+        self.assertEqual(new_repo.repo_name, repo_name)
+        self.assertEqual(new_repo.description, description)
+
+        #test if repository is visible in the list ?
+        response = response.follow()
+
+        response.mustcontain(repo_name)
+
+        #test if repository was created on filesystem
+        try:
+            vcs.get_repo(os.path.join(TESTS_TMP_PATH, repo_name))
+        except Exception:
+            self.fail('no repo %s in filesystem' % repo_name)
+
+    def test_create_git_non_ascii(self):
+        self.log_user()
+        non_ascii = "ąęł"
+        repo_name = "%s%s" % (NEW_GIT_REPO, non_ascii)
+        repo_name_unicode = repo_name.decode('utf8')
+        description = 'description for newly created repo' + non_ascii
+        description_unicode = description.decode('utf8')
+        private = False
+        response = self.app.post(url('repos'),
+                        fixture._get_repo_create_params(repo_private=False,
+                                                repo_type='git',
+                                                repo_name=repo_name,
+                                                repo_description=description))
+
+        self.checkSessionFlash(response,
+                               u'Created repository <a href="/%s">%s</a>'
+                               % (urllib.quote(repo_name), repo_name_unicode))
 
         #test if the repo was created in the database
         new_repo = self.Session().query(Repository)\
@@ -81,67 +208,29 @@
         #test if repository was created on filesystem
         try:
             vcs.get_repo(os.path.join(TESTS_TMP_PATH, repo_name))
-        except:
+        except Exception:
             self.fail('no repo %s in filesystem' % repo_name)
 
-    def test_create_hg_in_group(self):
-        self.log_user()
+    def test_update(self):
+        response = self.app.put(url('repo', repo_name=HG_REPO))
 
-        ## create GROUP
-        group_name = 'sometest'
-        gr = ReposGroupModel().create(group_name=group_name,
-                                      group_description='test',)
-        self.Session().commit()
+    def test_update_browser_fakeout(self):
+        response = self.app.post(url('repo', repo_name=HG_REPO),
+                                 params=dict(_method='put'))
 
-        repo_name = 'ingroup'
-        repo_name_full = RepoGroup.url_sep().join([group_name, repo_name])
+    def test_delete_hg(self):
+        self.log_user()
+        repo_name = 'vcs_test_new_to_delete'
         description = 'description for newly created repo'
         response = self.app.post(url('repos'),
-                        _get_repo_create_params(repo_private=False,
+                        fixture._get_repo_create_params(repo_private=False,
+                                                repo_type='hg',
                                                 repo_name=repo_name,
-                                                repo_description=description,
-                                                repo_group=gr.group_id,))
+                                                repo_description=description))
 
         self.checkSessionFlash(response,
-                               'created repository %s' % (repo_name))
-
-        #test if the repo was created in the database
-        new_repo = self.Session().query(Repository)\
-            .filter(Repository.repo_name == repo_name_full).one()
-
-        self.assertEqual(new_repo.repo_name, repo_name_full)
-        self.assertEqual(new_repo.description, description)
-
-        #test if repository is visible in the list ?
-        response = response.follow()
-
-        response.mustcontain(repo_name_full)
-
-        #test if repository was created on filesystem
-        try:
-            vcs.get_repo(os.path.join(TESTS_TMP_PATH, repo_name_full))
-        except:
-            ReposGroupModel().delete(group_name)
-            self.Session().commit()
-            self.fail('no repo %s in filesystem' % repo_name)
-
-        RepoModel().delete(repo_name_full)
-        ReposGroupModel().delete(group_name)
-        self.Session().commit()
-
-    def test_create_git(self):
-        self.log_user()
-        repo_name = NEW_GIT_REPO
-        description = 'description for newly created repo'
-
-        response = self.app.post(url('repos'),
-                        _get_repo_create_params(repo_private=False,
-                                                repo_type='git',
-                                                repo_name=repo_name,
-                                                repo_description=description))
-        self.checkSessionFlash(response,
-                               'created repository %s' % (repo_name))
-
+                               'Created repository <a href="/%s">%s</a>'
+                               % (repo_name, repo_name))
         #test if the repo was created in the database
         new_repo = self.Session().query(Repository)\
             .filter(Repository.repo_name == repo_name).one()
@@ -157,94 +246,12 @@
         #test if repository was created on filesystem
         try:
             vcs.get_repo(os.path.join(TESTS_TMP_PATH, repo_name))
-        except:
-            self.fail('no repo %s in filesystem' % repo_name)
-
-    def test_create_git_non_ascii(self):
-        self.log_user()
-        non_ascii = "ąęł"
-        repo_name = "%s%s" % (NEW_GIT_REPO, non_ascii)
-        repo_name_unicode = repo_name.decode('utf8')
-        description = 'description for newly created repo' + non_ascii
-        description_unicode = description.decode('utf8')
-        private = False
-        response = self.app.post(url('repos'),
-                        _get_repo_create_params(repo_private=False,
-                                                repo_type='git',
-                                                repo_name=repo_name,
-                                                repo_description=description))
-
-        self.checkSessionFlash(response,
-                               'created repository %s' % (repo_name_unicode))
-
-        #test if the repo was created in the database
-        new_repo = self.Session().query(Repository)\
-            .filter(Repository.repo_name == repo_name_unicode).one()
-
-        self.assertEqual(new_repo.repo_name, repo_name_unicode)
-        self.assertEqual(new_repo.description, description_unicode)
-
-        #test if repository is visible in the list ?
-        response = response.follow()
-
-        response.mustcontain(repo_name)
-
-        #test if repository was created on filesystem
-        try:
-            vcs.get_repo(os.path.join(TESTS_TMP_PATH, repo_name))
-        except:
-            self.fail('no repo %s in filesystem' % repo_name)
-
-    def test_new(self):
-        self.log_user()
-        response = self.app.get(url('new_repo'))
-
-    def test_new_as_xml(self):
-        response = self.app.get(url('formatted_new_repo', format='xml'))
-
-    def test_update(self):
-        response = self.app.put(url('repo', repo_name=HG_REPO))
-
-    def test_update_browser_fakeout(self):
-        response = self.app.post(url('repo', repo_name=HG_REPO),
-                                 params=dict(_method='put'))
-
-    def test_delete_hg(self):
-        self.log_user()
-        repo_name = 'vcs_test_new_to_delete'
-        description = 'description for newly created repo'
-        private = False
-        response = self.app.post(url('repos'),
-                        _get_repo_create_params(repo_private=False,
-                                                repo_type='hg',
-                                                repo_name=repo_name,
-                                                repo_description=description))
-
-        self.checkSessionFlash(response,
-                               'created repository %s' % (repo_name))
-
-        #test if the repo was created in the database
-        new_repo = self.Session().query(Repository)\
-            .filter(Repository.repo_name == repo_name).one()
-
-        self.assertEqual(new_repo.repo_name, repo_name)
-        self.assertEqual(new_repo.description, description)
-
-        #test if repository is visible in the list ?
-        response = response.follow()
-
-        response.mustcontain(repo_name)
-
-        #test if repository was created on filesystem
-        try:
-            vcs.get_repo(os.path.join(TESTS_TMP_PATH, repo_name))
-        except:
+        except Exception:
             self.fail('no repo %s in filesystem' % repo_name)
 
         response = self.app.delete(url('repo', repo_name=repo_name))
 
-        self.assertTrue('''deleted repository %s''' % (repo_name) in
-                        response.session['flash'][0])
+        self.checkSessionFlash(response, 'Deleted repository %s' % (repo_name))
 
         response.follow()
 
@@ -263,14 +270,14 @@
         description = 'description for newly created repo'
         private = False
         response = self.app.post(url('repos'),
-                        _get_repo_create_params(repo_private=False,
+                        fixture._get_repo_create_params(repo_private=False,
                                                 repo_type='git',
                                                 repo_name=repo_name,
                                                 repo_description=description))
 
         self.checkSessionFlash(response,
-                               'created repository %s' % (repo_name))
-
+                               'Created repository <a href="/%s">%s</a>'
+                               % (repo_name, repo_name))
         #test if the repo was created in the database
         new_repo = self.Session().query(Repository)\
             .filter(Repository.repo_name == repo_name).one()
@@ -286,13 +293,12 @@
         #test if repository was created on filesystem
         try:
             vcs.get_repo(os.path.join(TESTS_TMP_PATH, repo_name))
-        except:
+        except Exception:
             self.fail('no repo %s in filesystem' % repo_name)
 
         response = self.app.delete(url('repo', repo_name=repo_name))
 
-        self.assertTrue('''deleted repository %s''' % (repo_name) in
-                        response.session['flash'][0])
+        self.checkSessionFlash(response, 'Deleted repository %s' % (repo_name))
 
         response.follow()
 
@@ -324,3 +330,42 @@
 
     def test_edit(self):
         response = self.app.get(url('edit_repo', repo_name=HG_REPO))
+
+    def test_set_private_flag_sets_default_to_none(self):
+        self.log_user()
+        #initially repository perm should be read
+        perm = _get_permission_for_user(user='default', repo=HG_REPO)
+        self.assertTrue(len(perm), 1)
+        self.assertEqual(perm[0].permission.permission_name, 'repository.read')
+        self.assertEqual(Repository.get_by_repo_name(HG_REPO).private, False)
+
+        response = self.app.put(url('repo', repo_name=HG_REPO),
+                        fixture._get_repo_create_params(repo_private=1,
+                                                repo_name=HG_REPO,
+                                                user=TEST_USER_ADMIN_LOGIN))
+        self.checkSessionFlash(response,
+                               msg='Repository %s updated successfully' % (HG_REPO))
+        self.assertEqual(Repository.get_by_repo_name(HG_REPO).private, True)
+
+        #now the repo default permission should be None
+        perm = _get_permission_for_user(user='default', repo=HG_REPO)
+        self.assertTrue(len(perm), 1)
+        self.assertEqual(perm[0].permission.permission_name, 'repository.none')
+
+        response = self.app.put(url('repo', repo_name=HG_REPO),
+                        fixture._get_repo_create_params(repo_private=False,
+                                                repo_name=HG_REPO,
+                                                user=TEST_USER_ADMIN_LOGIN))
+        self.checkSessionFlash(response,
+                               msg='Repository %s updated successfully' % (HG_REPO))
+        self.assertEqual(Repository.get_by_repo_name(HG_REPO).private, False)
+
+        #we turn off private now the repo default permission should stay None
+        perm = _get_permission_for_user(user='default', repo=HG_REPO)
+        self.assertTrue(len(perm), 1)
+        self.assertEqual(perm[0].permission.permission_name, 'repository.none')
+
+        #update this permission back
+        perm[0].permission = Permission.get_by_key('repository.read')
+        Session().add(perm[0])
+        Session().commit()
--- a/rhodecode/tests/functional/test_admin_settings.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/tests/functional/test_admin_settings.py	Sun Apr 07 18:37:22 2013 +0200
@@ -85,14 +85,12 @@
                                                  rhodecode_ga_code=new_ga_code
                                                  ))
 
-        self.assertTrue('Updated application settings' in
-                        response.session['flash'][0][1])
+        self.checkSessionFlash(response, 'Updated application settings')
         self.assertEqual(RhodeCodeSetting
                         .get_app_settings()['rhodecode_ga_code'], new_ga_code)
 
         response = response.follow()
-        self.assertFalse("""_gaq.push(['_setAccount', '%s']);""" % new_ga_code
-                         in response.body)
+        response.mustcontain(no=["_gaq.push(['_setAccount', '%s']);" % new_ga_code])
 
     def test_title_change(self):
         self.log_user()
@@ -121,7 +119,7 @@
         self.log_user()
         response = self.app.get(url('admin_settings_my_account'))
 
-        self.assertTrue('value="test_admin' in response.body)
+        response.mustcontain('value="test_admin')
 
     @parameterized.expand([('firstname', 'new_username'),
                            ('lastname', 'new_username'),
@@ -218,7 +216,7 @@
         repo = Repository.get_by_repo_name(HG_REPO)
         response = self.app.get(url('edit_repo', repo_name=HG_REPO))
         opt = """<option value="%s">vcs_test_git</option>""" % repo.repo_id
-        assert opt not in response.body
+        response.mustcontain(no=[opt])
 
     def test_set_fork_of_repo(self):
         self.log_user()
--- a/rhodecode/tests/functional/test_admin_users.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/tests/functional/test_admin_users.py	Sun Apr 07 18:37:22 2013 +0200
@@ -37,7 +37,7 @@
                                'lastname': lastname,
                                'email': email})
 
-        self.checkSessionFlash(response, '''created user %s''' % (username))
+        self.checkSessionFlash(response, '''Created user %s''' % (username))
 
         new_user = self.Session.query(User).\
             filter(User.username == username).one()
@@ -150,8 +150,7 @@
             .filter(User.username == username).one()
         response = self.app.delete(url('user', id=new_user.user_id))
 
-        self.assertTrue("""successfully deleted user""" in
-                        response.session['flash'][0])
+        self.checkSessionFlash(response, 'Successfully deleted user')
 
     def test_delete_browser_fakeout(self):
         response = self.app.post(url('user', id=1),
--- a/rhodecode/tests/functional/test_admin_users_groups.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/tests/functional/test_admin_users_groups.py	Sun Apr 07 18:37:22 2013 +0200
@@ -1,7 +1,7 @@
 from rhodecode.tests import *
-from rhodecode.model.db import UsersGroup, UsersGroupToPerm, Permission
+from rhodecode.model.db import UserGroup, UserGroupToPerm, Permission
 
-TEST_USERS_GROUP = 'admins_test'
+TEST_USER_GROUP = 'admins_test'
 
 
 class TestAdminUsersGroupsController(TestController):
@@ -15,14 +15,14 @@
 
     def test_create(self):
         self.log_user()
-        users_group_name = TEST_USERS_GROUP
+        users_group_name = TEST_USER_GROUP
         response = self.app.post(url('users_groups'),
                                  {'users_group_name': users_group_name,
                                   'active':True})
         response.follow()
 
         self.checkSessionFlash(response,
-                               'created users group %s' % TEST_USERS_GROUP)
+                               'Created user group %s' % TEST_USER_GROUP)
 
     def test_new(self):
         response = self.app.get(url('new_users_group'))
@@ -39,50 +39,50 @@
 
     def test_delete(self):
         self.log_user()
-        users_group_name = TEST_USERS_GROUP + 'another'
+        users_group_name = TEST_USER_GROUP + 'another'
         response = self.app.post(url('users_groups'),
                                  {'users_group_name':users_group_name,
                                   'active':True})
         response.follow()
 
         self.checkSessionFlash(response,
-                               'created users group %s' % users_group_name)
+                               'Created user group %s' % users_group_name)
 
-        gr = self.Session.query(UsersGroup)\
-                           .filter(UsersGroup.users_group_name ==
+        gr = self.Session.query(UserGroup)\
+                           .filter(UserGroup.users_group_name ==
                                    users_group_name).one()
 
         response = self.app.delete(url('users_group', id=gr.users_group_id))
 
-        gr = self.Session.query(UsersGroup)\
-                           .filter(UsersGroup.users_group_name ==
+        gr = self.Session.query(UserGroup)\
+                           .filter(UserGroup.users_group_name ==
                                    users_group_name).scalar()
 
         self.assertEqual(gr, None)
 
     def test_enable_repository_read_on_group(self):
         self.log_user()
-        users_group_name = TEST_USERS_GROUP + 'another2'
+        users_group_name = TEST_USER_GROUP + 'another2'
         response = self.app.post(url('users_groups'),
                                  {'users_group_name': users_group_name,
                                   'active': True})
         response.follow()
 
-        ug = UsersGroup.get_by_group_name(users_group_name)
+        ug = UserGroup.get_by_group_name(users_group_name)
         self.checkSessionFlash(response,
-                               'created users group %s' % users_group_name)
+                               'Created user group %s' % users_group_name)
         ## ENABLE REPO CREATE ON A GROUP
         response = self.app.put(url('users_group_perm', id=ug.users_group_id),
                                  {'create_repo_perm': True})
 
         response.follow()
-        ug = UsersGroup.get_by_group_name(users_group_name)
+        ug = UserGroup.get_by_group_name(users_group_name)
         p = Permission.get_by_key('hg.create.repository')
         p2 = Permission.get_by_key('hg.fork.none')
         # check if user has this perms, they should be here since
         # defaults are on
-        perms = UsersGroupToPerm.query()\
-            .filter(UsersGroupToPerm.users_group == ug).all()
+        perms = UserGroupToPerm.query()\
+            .filter(UserGroupToPerm.users_group == ug).all()
 
         self.assertEqual(
             [[x.users_group_id, x.permission_id, ] for x in perms],
@@ -95,13 +95,13 @@
                                     {})
 
         response.follow()
-        ug = UsersGroup.get_by_group_name(users_group_name)
+        ug = UserGroup.get_by_group_name(users_group_name)
         p = Permission.get_by_key('hg.create.none')
         p2 = Permission.get_by_key('hg.fork.none')
         # check if user has this perms, they should be here since
         # defaults are on
-        perms = UsersGroupToPerm.query()\
-            .filter(UsersGroupToPerm.users_group == ug).all()
+        perms = UserGroupToPerm.query()\
+            .filter(UserGroupToPerm.users_group == ug).all()
 
         self.assertEqual(
             sorted([[x.users_group_id, x.permission_id, ] for x in perms]),
@@ -110,18 +110,18 @@
         )
 
         # DELETE !
-        ug = UsersGroup.get_by_group_name(users_group_name)
+        ug = UserGroup.get_by_group_name(users_group_name)
         ugid = ug.users_group_id
         response = self.app.delete(url('users_group', id=ug.users_group_id))
         response = response.follow()
-        gr = self.Session.query(UsersGroup)\
-                           .filter(UsersGroup.users_group_name ==
+        gr = self.Session.query(UserGroup)\
+                           .filter(UserGroup.users_group_name ==
                                    users_group_name).scalar()
 
         self.assertEqual(gr, None)
         p = Permission.get_by_key('hg.create.repository')
-        perms = UsersGroupToPerm.query()\
-            .filter(UsersGroupToPerm.users_group_id == ugid).all()
+        perms = UserGroupToPerm.query()\
+            .filter(UserGroupToPerm.users_group_id == ugid).all()
         perms = [[x.users_group_id,
                   x.permission_id, ] for x in perms]
         self.assertEqual(
@@ -131,27 +131,27 @@
 
     def test_enable_repository_fork_on_group(self):
         self.log_user()
-        users_group_name = TEST_USERS_GROUP + 'another2'
+        users_group_name = TEST_USER_GROUP + 'another2'
         response = self.app.post(url('users_groups'),
                                  {'users_group_name': users_group_name,
                                   'active': True})
         response.follow()
 
-        ug = UsersGroup.get_by_group_name(users_group_name)
+        ug = UserGroup.get_by_group_name(users_group_name)
         self.checkSessionFlash(response,
-                               'created users group %s' % users_group_name)
+                               'Created user group %s' % users_group_name)
         ## ENABLE REPO CREATE ON A GROUP
         response = self.app.put(url('users_group_perm', id=ug.users_group_id),
                                  {'fork_repo_perm': True})
 
         response.follow()
-        ug = UsersGroup.get_by_group_name(users_group_name)
+        ug = UserGroup.get_by_group_name(users_group_name)
         p = Permission.get_by_key('hg.create.none')
         p2 = Permission.get_by_key('hg.fork.repository')
         # check if user has this perms, they should be here since
         # defaults are on
-        perms = UsersGroupToPerm.query()\
-            .filter(UsersGroupToPerm.users_group == ug).all()
+        perms = UserGroupToPerm.query()\
+            .filter(UserGroupToPerm.users_group == ug).all()
 
         self.assertEqual(
             [[x.users_group_id, x.permission_id, ] for x in perms],
@@ -164,13 +164,13 @@
                                     {})
 
         response.follow()
-        ug = UsersGroup.get_by_group_name(users_group_name)
+        ug = UserGroup.get_by_group_name(users_group_name)
         p = Permission.get_by_key('hg.create.none')
         p2 = Permission.get_by_key('hg.fork.none')
         # check if user has this perms, they should be here since
         # defaults are on
-        perms = UsersGroupToPerm.query()\
-            .filter(UsersGroupToPerm.users_group == ug).all()
+        perms = UserGroupToPerm.query()\
+            .filter(UserGroupToPerm.users_group == ug).all()
 
         self.assertEqual(
             [[x.users_group_id, x.permission_id, ] for x in perms],
@@ -179,18 +179,18 @@
         )
 
         # DELETE !
-        ug = UsersGroup.get_by_group_name(users_group_name)
+        ug = UserGroup.get_by_group_name(users_group_name)
         ugid = ug.users_group_id
         response = self.app.delete(url('users_group', id=ug.users_group_id))
         response = response.follow()
-        gr = self.Session.query(UsersGroup)\
-                           .filter(UsersGroup.users_group_name ==
+        gr = self.Session.query(UserGroup)\
+                           .filter(UserGroup.users_group_name ==
                                    users_group_name).scalar()
 
         self.assertEqual(gr, None)
         p = Permission.get_by_key('hg.fork.repository')
-        perms = UsersGroupToPerm.query()\
-            .filter(UsersGroupToPerm.users_group_id == ugid).all()
+        perms = UserGroupToPerm.query()\
+            .filter(UserGroupToPerm.users_group_id == ugid).all()
         perms = [[x.users_group_id,
                   x.permission_id, ] for x in perms]
         self.assertEqual(
--- a/rhodecode/tests/functional/test_changelog.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/tests/functional/test_changelog.py	Sun Apr 07 18:37:22 2013 +0200
@@ -8,37 +8,39 @@
         response = self.app.get(url(controller='changelog', action='index',
                                     repo_name=HG_REPO))
 
-        response.mustcontain("""<div id="chg_20" class="container tablerow1">""")
+        response.mustcontain('''id="chg_20" class="container tablerow1"''')
         response.mustcontain(
             """<input class="changeset_range" """
             """id="5e204e7583b9c8e7b93a020bd036564b1e731dae" """
             """name="5e204e7583b9c8e7b93a020bd036564b1e731dae" """
             """type="checkbox" value="1" />"""
         )
+
         response.mustcontain(
-            """<span class="changeset_id">154:"""
-            """<span class="changeset_hash">5e204e7583b9</span></span>"""
+            """<span class="changeset_hash">r154:5e204e7583b9</span>"""
         )
 
         response.mustcontain("""Small update at simplevcs app""")
 
-        response.mustcontain(
-            """<div id="changed_total_5e204e7583b9c8e7b93a020bd036564b1e731dae" """
-            """style="float:right;" class="changed_total tooltip" """
-            """title="Affected number of files, click to show """
-            """more details">3</div>"""
-        )
+#        response.mustcontain(
+#            """<div id="changed_total_5e204e7583b9c8e7b93a020bd036564b1e731dae" """
+#            """style="float:right;" class="changed_total tooltip" """
+#            """title="Affected number of files, click to show """
+#            """more details">3</div>"""
+#        )
 
+    def test_index_pagination_hg(self):
+        self.log_user()
         #pagination
-        response = self.app.get(url(controller='changelog', action='index',
+        self.app.get(url(controller='changelog', action='index',
                                     repo_name=HG_REPO), {'page': 1})
-        response = self.app.get(url(controller='changelog', action='index',
+        self.app.get(url(controller='changelog', action='index',
                                     repo_name=HG_REPO), {'page': 2})
-        response = self.app.get(url(controller='changelog', action='index',
+        self.app.get(url(controller='changelog', action='index',
                                     repo_name=HG_REPO), {'page': 3})
-        response = self.app.get(url(controller='changelog', action='index',
+        self.app.get(url(controller='changelog', action='index',
                                     repo_name=HG_REPO), {'page': 4})
-        response = self.app.get(url(controller='changelog', action='index',
+        self.app.get(url(controller='changelog', action='index',
                                     repo_name=HG_REPO), {'page': 5})
         response = self.app.get(url(controller='changelog', action='index',
                                     repo_name=HG_REPO), {'page': 6})
@@ -50,21 +52,75 @@
             """name="46ad32a4f974e45472a898c6b0acb600320579b1" """
             """type="checkbox" value="1" />"""
         )
+
         response.mustcontain(
-            """<span class="changeset_id">64:"""
-            """<span class="changeset_hash">46ad32a4f974</span></span>"""
+            """<span class="changeset_hash">r64:46ad32a4f974</span>"""
+        )
+
+#        response.mustcontain(
+#            """<div id="changed_total_46ad32a4f974e45472a898c6b0acb600320579b1" """
+#            """style="float:right;" class="changed_total tooltip" """
+#            """title="Affected number of files, click to show """
+#            """more details">21</div>"""
+#        )
+#
+#        response.mustcontain(
+#            """<a href="/%s/changeset/"""
+#            """46ad32a4f974e45472a898c6b0acb600320579b1" """
+#            """title="Merge with 2e6a2bf9356ca56df08807f4ad86d480da72a8f4">"""
+#            """46ad32a4f974</a>""" % HG_REPO
+#        )
+
+    def test_index_git(self):
+        self.log_user()
+        response = self.app.get(url(controller='changelog', action='index',
+                                    repo_name=GIT_REPO))
+
+        response.mustcontain('''id="chg_20" class="container tablerow1"''')
+        response.mustcontain(
+            """<input class="changeset_range" """
+            """id="95f9a91d775b0084b2368ae7779e44931c849c0e" """
+            """name="95f9a91d775b0084b2368ae7779e44931c849c0e" """
+            """type="checkbox" value="1" />"""
         )
 
         response.mustcontain(
-            """<div id="changed_total_46ad32a4f974e45472a898c6b0acb600320579b1" """
-            """style="float:right;" class="changed_total tooltip" """
-            """title="Affected number of files, click to show """
-            """more details">21</div>"""
+            """<span class="changeset_hash">r613:95f9a91d775b</span>"""
+        )
+
+        response.mustcontain("""fixing stupid typo in context for mercurial""")
+
+#        response.mustcontain(
+#            """<div id="changed_total_5e204e7583b9c8e7b93a020bd036564b1e731dae" """
+#            """style="float:right;" class="changed_total tooltip" """
+#            """title="Affected number of files, click to show """
+#            """more details">3</div>"""
+#        )
+
+    def test_index_pagination_git(self):
+        self.log_user()
+        #pagination
+        self.app.get(url(controller='changelog', action='index',
+                                    repo_name=GIT_REPO), {'page': 1})
+        self.app.get(url(controller='changelog', action='index',
+                                    repo_name=GIT_REPO), {'page': 2})
+        self.app.get(url(controller='changelog', action='index',
+                                    repo_name=GIT_REPO), {'page': 3})
+        self.app.get(url(controller='changelog', action='index',
+                                    repo_name=GIT_REPO), {'page': 4})
+        self.app.get(url(controller='changelog', action='index',
+                                    repo_name=GIT_REPO), {'page': 5})
+        response = self.app.get(url(controller='changelog', action='index',
+                                    repo_name=GIT_REPO), {'page': 6})
+
+        # Test response after pagination...
+        response.mustcontain(
+            """<input class="changeset_range" """
+            """id="636ed213f2f11ef91071b9c24f2d5e6bd01a6ed5" """
+            """name="636ed213f2f11ef91071b9c24f2d5e6bd01a6ed5" """
+            """type="checkbox" value="1" />"""
         )
 
         response.mustcontain(
-            """<a href="/%s/changeset/"""
-            """46ad32a4f974e45472a898c6b0acb600320579b1" """
-            """title="Merge with 2e6a2bf9356ca56df08807f4ad86d480da72a8f4">"""
-            """46ad32a4f974</a>""" % HG_REPO
+            """<span class="changeset_hash">r515:636ed213f2f1</span>"""
         )
--- a/rhodecode/tests/functional/test_compare.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/tests/functional/test_compare.py	Sun Apr 07 18:37:22 2013 +0200
@@ -4,33 +4,9 @@
 from rhodecode.model.db import Repository
 from rhodecode.model.scm import ScmModel
 from rhodecode.lib.vcs.backends.base import EmptyChangeset
-
-
-def _fork_repo(fork_name, vcs_type, parent=None):
-    if vcs_type =='hg':
-        _REPO = HG_REPO
-    elif vcs_type == 'git':
-        _REPO = GIT_REPO
-
-    if parent:
-        _REPO = parent
+from rhodecode.tests.fixture import Fixture
 
-    form_data = dict(
-        repo_name=fork_name,
-        repo_name_full=fork_name,
-        repo_group=None,
-        repo_type=vcs_type,
-        description='',
-        private=False,
-        copy_permissions=False,
-        landing_rev='tip',
-        update_after_clone=False,
-        fork_parent_id=Repository.get_by_repo_name(_REPO),
-    )
-    repo = RepoModel().create_fork(form_data, cur_user=TEST_USER_ADMIN_LOGIN)
-
-    Session().commit()
-    return Repository.get_by_repo_name(fork_name)
+fixture = Fixture()
 
 
 def _commit_change(repo, filename, content, message, vcs_type, parent=None, newfile=False):
@@ -62,22 +38,31 @@
 
 class TestCompareController(TestController):
 
+    def setUp(self):
+        self.r1_id = None
+        self.r2_id = None
+
+    def tearDown(self):
+        if self.r2_id:
+            RepoModel().delete(self.r2_id)
+        if self.r1_id:
+            RepoModel().delete(self.r1_id)
+        Session().commit()
+        Session.remove()
+
     def test_compare_forks_on_branch_extra_commits_hg(self):
         self.log_user()
-
-        repo1 = RepoModel().create_repo(repo_name='one', repo_type='hg',
-                                        description='diff-test',
-                                        owner=TEST_USER_ADMIN_LOGIN)
-        r1_id = repo1.repo_id
-        Session().commit()
+        repo1 = fixture.create_repo('one', repo_type='hg',
+                                    repo_description='diff-test',
+                                    cur_user=TEST_USER_ADMIN_LOGIN)
+        self.r1_id = repo1.repo_id
         #commit something !
         cs0 = _commit_change(repo1.repo_name, filename='file1', content='line1\n',
                              message='commit1', vcs_type='hg', parent=None, newfile=True)
 
         #fork this repo
-        repo2 = _fork_repo('one-fork', 'hg', parent='one')
-        Session().commit()
-        r2_id = repo2.repo_id
+        repo2 = fixture.create_fork('one', 'one-fork')
+        self.r2_id = repo2.repo_id
 
         #add two extra commit into fork
         cs1 = _commit_change(repo2.repo_name, filename='file1', content='line1\nline2\n',
@@ -88,55 +73,52 @@
 
         rev1 = 'default'
         rev2 = 'default'
+
         response = self.app.get(url(controller='compare', action='index',
-                                    repo_name=repo2.repo_name,
+                                    repo_name=repo1.repo_name,
                                     org_ref_type="branch",
-                                    org_ref=rev1,
+                                    org_ref=rev2,
+                                    other_repo=repo2.repo_name,
                                     other_ref_type="branch",
-                                    other_ref=rev2,
-                                    repo=repo1.repo_name
+                                    other_ref=rev1,
+                                    merge='1',
                                     ))
 
-        try:
-            response.mustcontain('%s@%s -&gt; %s@%s' % (repo2.repo_name, rev1, repo1.repo_name, rev2))
-            response.mustcontain("""Showing 2 commits""")
-            response.mustcontain("""1 file changed with 2 insertions and 0 deletions""")
+        response.mustcontain('%s@%s -&gt; %s@%s' % (repo1.repo_name, rev2, repo2.repo_name, rev1))
+        response.mustcontain("""Showing 2 commits""")
+        response.mustcontain("""1 file changed with 2 insertions and 0 deletions""")
 
-            response.mustcontain("""<div class="message tooltip" title="commit2" style="white-space:normal">commit2</div>""")
-            response.mustcontain("""<div class="message tooltip" title="commit3" style="white-space:normal">commit3</div>""")
+        response.mustcontain("""<div class="message tooltip" title="commit2" style="white-space:normal">commit2</div>""")
+        response.mustcontain("""<div class="message tooltip" title="commit3" style="white-space:normal">commit3</div>""")
 
-            response.mustcontain("""<a href="/%s/changeset/%s">r1:%s</a>""" % (repo2.repo_name, cs1.raw_id, cs1.short_id))
-            response.mustcontain("""<a href="/%s/changeset/%s">r2:%s</a>""" % (repo2.repo_name, cs2.raw_id, cs2.short_id))
-            ## files
-            response.mustcontain("""<a href="/%s/compare/branch@%s...branch@%s#C--826e8142e6ba">file1</a>""" % (repo2.repo_name, rev1, rev2))
-
-        finally:
-            RepoModel().delete(r2_id)
-            RepoModel().delete(r1_id)
-
+        response.mustcontain("""<a href="/%s/changeset/%s">r1:%s</a>""" % (repo2.repo_name, cs1.raw_id, cs1.short_id))
+        response.mustcontain("""<a href="/%s/changeset/%s">r2:%s</a>""" % (repo2.repo_name, cs2.raw_id, cs2.short_id))
+        ## files
+        response.mustcontain("""<a href="/%s/compare/branch@%s...branch@%s?other_repo=%s&amp;merge=1#C--826e8142e6ba">file1</a>""" % (repo1.repo_name, rev2, rev1, repo2.repo_name))
+        #swap
+        response.mustcontain("""<a href="/%s/compare/branch@%s...branch@%s?other_repo=%s&amp;merge=True">[swap]</a>""" % (repo2.repo_name, rev1, rev2, repo1.repo_name))
 
     def test_compare_forks_on_branch_extra_commits_origin_has_incomming_hg(self):
         self.log_user()
 
-        repo1 = RepoModel().create_repo(repo_name='one', repo_type='hg',
-                                        description='diff-test',
-                                        owner=TEST_USER_ADMIN_LOGIN)
-        r1_id = repo1.repo_id
-        Session().commit()
+        repo1 = fixture.create_repo('one', repo_type='hg',
+                                    repo_description='diff-test',
+                                    cur_user=TEST_USER_ADMIN_LOGIN)
+
+        self.r1_id = repo1.repo_id
+
         #commit something !
         cs0 = _commit_change(repo1.repo_name, filename='file1', content='line1\n',
                              message='commit1', vcs_type='hg', parent=None, newfile=True)
 
         #fork this repo
-        repo2 = _fork_repo('one-fork', 'hg', parent='one')
-        Session().commit()
+        repo2 = fixture.create_fork('one', 'one-fork')
+        self.r2_id = repo2.repo_id
 
         #now commit something to origin repo
         cs1_prim = _commit_change(repo1.repo_name, filename='file2', content='line1file2\n',
                                   message='commit2', vcs_type='hg', parent=cs0, newfile=True)
 
-        r2_id = repo2.repo_id
-
         #add two extra commit into fork
         cs1 = _commit_change(repo2.repo_name, filename='file1', content='line1\nline2\n',
                              message='commit2', vcs_type='hg', parent=cs0)
@@ -146,202 +128,284 @@
 
         rev1 = 'default'
         rev2 = 'default'
+
+        response = self.app.get(url(controller='compare', action='index',
+                                    repo_name=repo1.repo_name,
+                                    org_ref_type="branch",
+                                    org_ref=rev2,
+                                    other_repo=repo2.repo_name,
+                                    other_ref_type="branch",
+                                    other_ref=rev1,
+                                    merge='x',
+                                    ))
+        response.mustcontain('%s@%s -&gt; %s@%s' % (repo1.repo_name, rev2, repo2.repo_name, rev1))
+        response.mustcontain("""Showing 2 commits""")
+        response.mustcontain("""1 file changed with 2 insertions and 0 deletions""")
+
+        response.mustcontain("""<div class="message tooltip" title="commit2" style="white-space:normal">commit2</div>""")
+        response.mustcontain("""<div class="message tooltip" title="commit3" style="white-space:normal">commit3</div>""")
+
+        response.mustcontain("""<a href="/%s/changeset/%s">r1:%s</a>""" % (repo2.repo_name, cs1.raw_id, cs1.short_id))
+        response.mustcontain("""<a href="/%s/changeset/%s">r2:%s</a>""" % (repo2.repo_name, cs2.raw_id, cs2.short_id))
+        ## files
+        response.mustcontain("""<a href="/%s/compare/branch@%s...branch@%s?other_repo=%s&amp;merge=x#C--826e8142e6ba">file1</a>""" % (repo1.repo_name, rev2, rev1, repo2.repo_name))
+        #swap
+        response.mustcontain("""<a href="/%s/compare/branch@%s...branch@%s?other_repo=%s&amp;merge=True">[swap]</a>""" % (repo2.repo_name, rev1, rev2, repo1.repo_name))
+
+    def test_compare_cherry_pick_changesets_from_bottom(self):
+
+#        repo1:
+#            cs0:
+#            cs1:
+#        repo1-fork- in which we will cherry pick bottom changesets
+#            cs0:
+#            cs1:
+#            cs2: x
+#            cs3: x
+#            cs4: x
+#            cs5:
+        #make repo1, and cs1+cs2
+        self.log_user()
+
+        repo1 = fixture.create_repo('repo1', repo_type='hg',
+                                    repo_description='diff-test',
+                                    cur_user=TEST_USER_ADMIN_LOGIN)
+        self.r1_id = repo1.repo_id
+
+        #commit something !
+        cs0 = _commit_change(repo1.repo_name, filename='file1', content='line1\n',
+                             message='commit1', vcs_type='hg', parent=None,
+                             newfile=True)
+        cs1 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\n',
+                             message='commit2', vcs_type='hg', parent=cs0)
+        #fork this repo
+        repo2 = fixture.create_fork('repo1', 'repo1-fork')
+        self.r2_id = repo2.repo_id
+        #now make cs3-6
+        cs2 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\nline3\n',
+                             message='commit3', vcs_type='hg', parent=cs1)
+        cs3 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\nline3\nline4\n',
+                             message='commit4', vcs_type='hg', parent=cs2)
+        cs4 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\nline3\nline4\nline5\n',
+                             message='commit5', vcs_type='hg', parent=cs3)
+        cs5 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\nline3\nline4\nline5\nline6\n',
+                             message='commit6', vcs_type='hg', parent=cs4)
+
         response = self.app.get(url(controller='compare', action='index',
                                     repo_name=repo2.repo_name,
+                                    org_ref_type="rev",
+                                    org_ref=cs1.short_id,  # parent of cs2, in repo2
+                                    other_repo=repo1.repo_name,
+                                    other_ref_type="rev",
+                                    other_ref=cs4.short_id,
+                                    merge='True',
+                                    ))
+        response.mustcontain('%s@%s -&gt; %s@%s' % (repo2.repo_name, cs1.short_id, repo1.repo_name, cs4.short_id))
+        response.mustcontain("""Showing 3 commits""")
+        response.mustcontain("""1 file changed with 3 insertions and 0 deletions""")
+
+        response.mustcontain("""<div class="message tooltip" title="commit3" style="white-space:normal">commit3</div>""")
+        response.mustcontain("""<div class="message tooltip" title="commit4" style="white-space:normal">commit4</div>""")
+        response.mustcontain("""<div class="message tooltip" title="commit5" style="white-space:normal">commit5</div>""")
+
+        response.mustcontain("""<a href="/%s/changeset/%s">r2:%s</a>""" % (repo1.repo_name, cs2.raw_id, cs2.short_id))
+        response.mustcontain("""<a href="/%s/changeset/%s">r3:%s</a>""" % (repo1.repo_name, cs3.raw_id, cs3.short_id))
+        response.mustcontain("""<a href="/%s/changeset/%s">r4:%s</a>""" % (repo1.repo_name, cs4.raw_id, cs4.short_id))
+        ## files
+        response.mustcontain("""#C--826e8142e6ba">file1</a>""")
+
+    def test_compare_cherry_pick_changesets_from_top(self):
+#        repo1:
+#            cs0:
+#            cs1:
+#        repo1-fork- in which we will cherry pick bottom changesets
+#            cs0:
+#            cs1:
+#            cs2:
+#            cs3: x
+#            cs4: x
+#            cs5: x
+#
+        #make repo1, and cs1+cs2
+        self.log_user()
+        repo1 = fixture.create_repo('repo1', repo_type='hg',
+                                    repo_description='diff-test',
+                                    cur_user=TEST_USER_ADMIN_LOGIN)
+        self.r1_id = repo1.repo_id
+
+        #commit something !
+        cs0 = _commit_change(repo1.repo_name, filename='file1', content='line1\n',
+                             message='commit1', vcs_type='hg', parent=None,
+                             newfile=True)
+        cs1 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\n',
+                             message='commit2', vcs_type='hg', parent=cs0)
+        #fork this repo
+        repo2 = fixture.create_fork('repo1', 'repo1-fork')
+        self.r2_id = repo2.repo_id
+        #now make cs3-6
+        cs2 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\nline3\n',
+                             message='commit3', vcs_type='hg', parent=cs1)
+        cs3 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\nline3\nline4\n',
+                             message='commit4', vcs_type='hg', parent=cs2)
+        cs4 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\nline3\nline4\nline5\n',
+                             message='commit5', vcs_type='hg', parent=cs3)
+        cs5 = _commit_change(repo1.repo_name, filename='file1', content='line1\nline2\nline3\nline4\nline5\nline6\n',
+                             message='commit6', vcs_type='hg', parent=cs4)
+        response = self.app.get(url(controller='compare', action='index',
+                                    repo_name=repo1.repo_name,
+                                    org_ref_type="rev",
+                                    org_ref=cs2.short_id, # parent of cs3, not in repo2
+                                    other_ref_type="rev",
+                                    other_ref=cs5.short_id,
+                                    merge='1',
+                                    ))
+
+        response.mustcontain('%s@%s -&gt; %s@%s' % (repo1.repo_name, cs2.short_id, repo1.repo_name, cs5.short_id))
+        response.mustcontain("""Showing 3 commits""")
+        response.mustcontain("""1 file changed with 3 insertions and 0 deletions""")
+
+        response.mustcontain("""<div class="message tooltip" title="commit4" style="white-space:normal">commit4</div>""")
+        response.mustcontain("""<div class="message tooltip" title="commit5" style="white-space:normal">commit5</div>""")
+        response.mustcontain("""<div class="message tooltip" title="commit6" style="white-space:normal">commit6</div>""")
+
+        response.mustcontain("""<a href="/%s/changeset/%s">r3:%s</a>""" % (repo1.repo_name, cs3.raw_id, cs3.short_id))
+        response.mustcontain("""<a href="/%s/changeset/%s">r4:%s</a>""" % (repo1.repo_name, cs4.raw_id, cs4.short_id))
+        response.mustcontain("""<a href="/%s/changeset/%s">r5:%s</a>""" % (repo1.repo_name, cs5.raw_id, cs5.short_id))
+        ## files
+        response.mustcontain("""#C--826e8142e6ba">file1</a>""")
+
+    def test_compare_cherry_pick_changeset_mixed_branches(self):
+        pass
+        #TODO write this tastecase
+
+    def test_compare_remote_branches_hg(self):
+        self.log_user()
+
+        repo2 = fixture.create_fork(HG_REPO, HG_FORK)
+        self.r2_id = repo2.repo_id
+        rev1 = '56349e29c2af'
+        rev2 = '7d4bc8ec6be5'
+
+        response = self.app.get(url(controller='compare', action='index',
+                                    repo_name=HG_REPO,
+                                    org_ref_type="rev",
+                                    org_ref=rev1,
+                                    other_ref_type="rev",
+                                    other_ref=rev2,
+                                    other_repo=HG_FORK,
+                                    merge='1',
+                                    ))
+        response.mustcontain('%s@%s -&gt; %s@%s' % (HG_REPO, rev1, HG_FORK, rev2))
+        ## outgoing changesets between those revisions
+
+        response.mustcontain("""<a href="/%s/changeset/2dda4e345facb0ccff1a191052dd1606dba6781d">r4:2dda4e345fac</a>""" % (HG_FORK))
+        response.mustcontain("""<a href="/%s/changeset/6fff84722075f1607a30f436523403845f84cd9e">r5:6fff84722075</a>""" % (HG_FORK))
+        response.mustcontain("""<a href="/%s/changeset/7d4bc8ec6be56c0f10425afb40b6fc315a4c25e7">r6:%s</a>""" % (HG_FORK, rev2))
+
+        ## files
+        response.mustcontain("""<a href="/%s/compare/rev@%s...rev@%s?other_repo=%s&amp;merge=1#C--9c390eb52cd6">vcs/backends/hg.py</a>""" % (HG_REPO, rev1, rev2, HG_FORK))
+        response.mustcontain("""<a href="/%s/compare/rev@%s...rev@%s?other_repo=%s&amp;merge=1#C--41b41c1f2796">vcs/backends/__init__.py</a>""" % (HG_REPO, rev1, rev2, HG_FORK))
+        response.mustcontain("""<a href="/%s/compare/rev@%s...rev@%s?other_repo=%s&amp;merge=1#C--2f574d260608">vcs/backends/base.py</a>""" % (HG_REPO, rev1, rev2, HG_FORK))
+
+    def test_org_repo_new_commits_after_forking_simple_diff(self):
+        self.log_user()
+
+        repo1 = fixture.create_repo('one', repo_type='hg',
+                                    repo_description='diff-test',
+                                    cur_user=TEST_USER_ADMIN_LOGIN)
+
+        self.r1_id = repo1.repo_id
+        r1_name = repo1.repo_name
+
+        #commit something initially !
+        cs0 = ScmModel().create_node(
+            repo=repo1.scm_instance, repo_name=r1_name,
+            cs=EmptyChangeset(alias='hg'), user=TEST_USER_ADMIN_LOGIN,
+            author=TEST_USER_ADMIN_LOGIN,
+            message='commit1',
+            content='line1',
+            f_path='file1'
+        )
+        Session().commit()
+        self.assertEqual(repo1.scm_instance.revisions, [cs0.raw_id])
+        #fork the repo1
+        repo2 = fixture.create_repo('one-fork', repo_type='hg',
+                                    repo_description='diff-test',
+                                    cur_user=TEST_USER_ADMIN_LOGIN,
+                                    clone_uri=repo1.repo_full_path,
+                                    fork_of='one')
+        Session().commit()
+        self.assertEqual(repo2.scm_instance.revisions, [cs0.raw_id])
+        self.r2_id = repo2.repo_id
+        r2_name = repo2.repo_name
+
+        #make 3 new commits in fork
+        cs1 = ScmModel().create_node(
+            repo=repo2.scm_instance, repo_name=r2_name,
+            cs=repo2.scm_instance[-1], user=TEST_USER_ADMIN_LOGIN,
+            author=TEST_USER_ADMIN_LOGIN,
+            message='commit1-fork',
+            content='file1-line1-from-fork',
+            f_path='file1-fork'
+        )
+        cs2 = ScmModel().create_node(
+            repo=repo2.scm_instance, repo_name=r2_name,
+            cs=cs1, user=TEST_USER_ADMIN_LOGIN,
+            author=TEST_USER_ADMIN_LOGIN,
+            message='commit2-fork',
+            content='file2-line1-from-fork',
+            f_path='file2-fork'
+        )
+        cs3 = ScmModel().create_node(
+            repo=repo2.scm_instance, repo_name=r2_name,
+            cs=cs2, user=TEST_USER_ADMIN_LOGIN,
+            author=TEST_USER_ADMIN_LOGIN,
+            message='commit3-fork',
+            content='file3-line1-from-fork',
+            f_path='file3-fork'
+        )
+
+        #compare !
+        rev1 = 'default'
+        rev2 = 'default'
+
+        response = self.app.get(url(controller='compare', action='index',
+                                    repo_name=r2_name,
                                     org_ref_type="branch",
                                     org_ref=rev1,
                                     other_ref_type="branch",
                                     other_ref=rev2,
-                                    repo=repo1.repo_name
+                                    other_repo=r1_name,
+                                    merge='1',
+                                    ))
+        response.mustcontain('%s@%s -&gt; %s@%s' % (r2_name, rev1, r1_name, rev2))
+        response.mustcontain('No files')
+        response.mustcontain('No changesets')
+
+        #add new commit into parent !
+        cs0 = ScmModel().create_node(
+            repo=repo1.scm_instance, repo_name=r1_name,
+            cs=EmptyChangeset(alias='hg'), user=TEST_USER_ADMIN_LOGIN,
+            author=TEST_USER_ADMIN_LOGIN,
+            message='commit2-parent',
+            content='line1-added-after-fork',
+            f_path='file2'
+        )
+        #compare !
+        rev1 = 'default'
+        rev2 = 'default'
+        response = self.app.get(url(controller='compare', action='index',
+                                    repo_name=r2_name,
+                                    org_ref_type="branch",
+                                    org_ref=rev1,
+                                    other_ref_type="branch",
+                                    other_ref=rev2,
+                                    other_repo=r1_name,
+                                    merge='1',
                                     ))
 
-        try:
-            response.mustcontain('%s@%s -&gt; %s@%s' % (repo2.repo_name, rev1, repo1.repo_name, rev2))
-            response.mustcontain("""Showing 2 commits""")
-            response.mustcontain("""1 file changed with 2 insertions and 0 deletions""")
-
-            response.mustcontain("""<div class="message tooltip" title="commit2" style="white-space:normal">commit2</div>""")
-            response.mustcontain("""<div class="message tooltip" title="commit3" style="white-space:normal">commit3</div>""")
-
-            response.mustcontain("""<a href="/%s/changeset/%s">r1:%s</a>""" % (repo2.repo_name, cs1.raw_id, cs1.short_id))
-            response.mustcontain("""<a href="/%s/changeset/%s">r2:%s</a>""" % (repo2.repo_name, cs2.raw_id, cs2.short_id))
-            ## files
-            response.mustcontain("""<a href="/%s/compare/branch@%s...branch@%s#C--826e8142e6ba">file1</a>""" % (repo2.repo_name, rev1, rev2))
-
-        finally:
-            RepoModel().delete(r2_id)
-            RepoModel().delete(r1_id)
-
-
-#    def test_compare_remote_repos_remote_flag_off(self):
-#        self.log_user()
-#        _fork_repo(HG_FORK, 'hg')
-#
-#        rev1 = '56349e29c2af'
-#        rev2 = '7d4bc8ec6be5'
-#
-#        response = self.app.get(url(controller='compare', action='index',
-#                                    repo_name=HG_REPO,
-#                                    org_ref_type="rev",
-#                                    org_ref=rev1,
-#                                    other_ref_type="rev",
-#                                    other_ref=rev2,
-#                                    repo=HG_FORK,
-#                                    bundle=False,
-#                                    ))
-#
-#        try:
-#            response.mustcontain('%s@%s -&gt; %s@%s' % (HG_REPO, rev1, HG_FORK, rev2))
-#            ## outgoing changesets between those revisions
-#
-#            response.mustcontain("""<a href="/%s/changeset/2dda4e345facb0ccff1a191052dd1606dba6781d">r4:2dda4e345fac</a>""" % (HG_REPO))
-#            response.mustcontain("""<a href="/%s/changeset/6fff84722075f1607a30f436523403845f84cd9e">r5:6fff84722075</a>""" % (HG_REPO))
-#            response.mustcontain("""<a href="/%s/changeset/7d4bc8ec6be56c0f10425afb40b6fc315a4c25e7">r6:%s</a>""" % (HG_REPO, rev2))
-#
-#            ## files
-#            response.mustcontain("""<a href="/%s/compare/rev@%s...rev@%s#C--9c390eb52cd6">vcs/backends/hg.py</a>""" % (HG_REPO, rev1, rev2))
-#            response.mustcontain("""<a href="/%s/compare/rev@%s...rev@%s#C--41b41c1f2796">vcs/backends/__init__.py</a>""" % (HG_REPO, rev1, rev2))
-#            response.mustcontain("""<a href="/%s/compare/rev@%s...rev@%s#C--2f574d260608">vcs/backends/base.py</a>""" % (HG_REPO, rev1, rev2))
-#        finally:
-#            RepoModel().delete(HG_FORK)
-
-
+        response.mustcontain('%s@%s -&gt; %s@%s' % (r2_name, rev1, r1_name, rev2))
 
-#
-#    def test_compare_remote_branches_hg(self):
-#        self.log_user()
-#
-#        _fork_repo(HG_FORK, 'hg')
-#
-#        rev1 = '56349e29c2af'
-#        rev2 = '7d4bc8ec6be5'
-#
-#        response = self.app.get(url(controller='compare', action='index',
-#                                    repo_name=HG_REPO,
-#                                    org_ref_type="rev",
-#                                    org_ref=rev1,
-#                                    other_ref_type="rev",
-#                                    other_ref=rev2,
-#                                    repo=HG_FORK,
-#                                    ))
-#
-#        try:
-#            response.mustcontain('%s@%s -&gt; %s@%s' % (HG_REPO, rev1, HG_FORK, rev2))
-#            ## outgoing changesets between those revisions
-#
-#            response.mustcontain("""<a href="/%s/changeset/2dda4e345facb0ccff1a191052dd1606dba6781d">r4:2dda4e345fac</a>""" % (HG_REPO))
-#            response.mustcontain("""<a href="/%s/changeset/6fff84722075f1607a30f436523403845f84cd9e">r5:6fff84722075</a>""" % (HG_REPO))
-#            response.mustcontain("""<a href="/%s/changeset/7d4bc8ec6be56c0f10425afb40b6fc315a4c25e7">r6:%s</a>""" % (HG_REPO, rev2))
-#
-#            ## files
-#            response.mustcontain("""<a href="/%s/compare/rev@%s...rev@%s#C--9c390eb52cd6">vcs/backends/hg.py</a>""" % (HG_REPO, rev1, rev2))
-#            response.mustcontain("""<a href="/%s/compare/rev@%s...rev@%s#C--41b41c1f2796">vcs/backends/__init__.py</a>""" % (HG_REPO, rev1, rev2))
-#            response.mustcontain("""<a href="/%s/compare/rev@%s...rev@%s#C--2f574d260608">vcs/backends/base.py</a>""" % (HG_REPO, rev1, rev2))
-#        finally:
-#            RepoModel().delete(HG_FORK)
-#
-#    def test_org_repo_new_commits_after_forking_simple_diff(self):
-#        self.log_user()
-#
-#        repo1 = RepoModel().create_repo(repo_name='one', repo_type='hg',
-#                                        description='diff-test',
-#                                        owner=TEST_USER_ADMIN_LOGIN)
-#
-#        Session().commit()
-#        r1_id = repo1.repo_id
-#        r1_name = repo1.repo_name
-#
-#        #commit something initially !
-#        cs0 = ScmModel().create_node(
-#            repo=repo1.scm_instance, repo_name=r1_name,
-#            cs=EmptyChangeset(alias='hg'), user=TEST_USER_ADMIN_LOGIN,
-#            author=TEST_USER_ADMIN_LOGIN,
-#            message='commit1',
-#            content='line1',
-#            f_path='file1'
-#        )
-#        Session().commit()
-#        self.assertEqual(repo1.scm_instance.revisions, [cs0.raw_id])
-#        #fork the repo1
-#        repo2 = RepoModel().create_repo(repo_name='one-fork', repo_type='hg',
-#                                description='compare-test',
-#                                clone_uri=repo1.repo_full_path,
-#                                owner=TEST_USER_ADMIN_LOGIN, fork_of='one')
-#        Session().commit()
-#        self.assertEqual(repo2.scm_instance.revisions, [cs0.raw_id])
-#        r2_id = repo2.repo_id
-#        r2_name = repo2.repo_name
-#
-#        #make 3 new commits in fork
-#        cs1 = ScmModel().create_node(
-#            repo=repo2.scm_instance, repo_name=r2_name,
-#            cs=repo2.scm_instance[-1], user=TEST_USER_ADMIN_LOGIN,
-#            author=TEST_USER_ADMIN_LOGIN,
-#            message='commit1-fork',
-#            content='file1-line1-from-fork',
-#            f_path='file1-fork'
-#        )
-#        cs2 = ScmModel().create_node(
-#            repo=repo2.scm_instance, repo_name=r2_name,
-#            cs=cs1, user=TEST_USER_ADMIN_LOGIN,
-#            author=TEST_USER_ADMIN_LOGIN,
-#            message='commit2-fork',
-#            content='file2-line1-from-fork',
-#            f_path='file2-fork'
-#        )
-#        cs3 = ScmModel().create_node(
-#            repo=repo2.scm_instance, repo_name=r2_name,
-#            cs=cs2, user=TEST_USER_ADMIN_LOGIN,
-#            author=TEST_USER_ADMIN_LOGIN,
-#            message='commit3-fork',
-#            content='file3-line1-from-fork',
-#            f_path='file3-fork'
-#        )
-#
-#        #compare !
-#        rev1 = 'default'
-#        rev2 = 'default'
-#        response = self.app.get(url(controller='compare', action='index',
-#                                    repo_name=r2_name,
-#                                    org_ref_type="branch",
-#                                    org_ref=rev1,
-#                                    other_ref_type="branch",
-#                                    other_ref=rev2,
-#                                    repo=r1_name,
-#                                    bundle=False,
-#                                    ))
-#
-#        try:
-#            #response.mustcontain('%s@%s -&gt; %s@%s' % (r2_name, rev1, r1_name, rev2))
-#
-#            #add new commit into parent !
-#            cs0 = ScmModel().create_node(
-#                repo=repo1.scm_instance, repo_name=r1_name,
-#                cs=EmptyChangeset(alias='hg'), user=TEST_USER_ADMIN_LOGIN,
-#                author=TEST_USER_ADMIN_LOGIN,
-#                message='commit2',
-#                content='line1',
-#                f_path='file2'
-#            )
-#            #compare !
-#            rev1 = 'default'
-#            rev2 = 'default'
-#            response = self.app.get(url(controller='compare', action='index',
-#                                        repo_name=r2_name,
-#                                        org_ref_type="branch",
-#                                        org_ref=rev1,
-#                                        other_ref_type="branch",
-#                                        other_ref=rev2,
-#                                        repo=r1_name,
-#                                        bundle=False
-#                                        ))
-#
-#            response.mustcontain('%s@%s -&gt; %s@%s' % (r2_name, rev1, r1_name, rev2))
-#            response.mustcontain("""file1-line1-from-fork""")
-#            response.mustcontain("""file2-line1-from-fork""")
-#            response.mustcontain("""file3-line1-from-fork""")
-#            self.assertFalse("""<a href="#">file2</a>""" in response.body)  # new commit from parent
-#            self.assertFalse("""line1-from-new-parent"""  in response.body)
-#        finally:
-#            RepoModel().delete(r2_id)
-#            RepoModel().delete(r1_id)
+        response.mustcontain("""commit2-parent""")
+        response.mustcontain("""1 file changed with 1 insertions and 0 deletions""")
+        response.mustcontain("""line1-added-after-fork""")
--- a/rhodecode/tests/functional/test_compare_local.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/tests/functional/test_compare_local.py	Sun Apr 07 18:37:22 2013 +0200
@@ -54,7 +54,6 @@
                                     org_ref=tag1,
                                     other_ref_type="tag",
                                     other_ref=tag2,
-                                    bundle=False
                                     ))
         response.mustcontain('%s@%s -&gt; %s@%s' % (GIT_REPO, tag1, GIT_REPO, tag2))
 
--- a/rhodecode/tests/functional/test_files.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/tests/functional/test_files.py	Sun Apr 07 18:37:22 2013 +0200
@@ -57,7 +57,7 @@
                                     revision='97e8b885c04894463c51898e14387d80c30ed1ee',
                                     f_path='/'))
 
-        response.mustcontain("""<span style="text-transform: uppercase;"><a href="#">branch: git</a></span>""")
+        response.mustcontain("""<span style="text-transform: uppercase;"><a href="#">Branch: git</a></span>""")
 
     def test_index_paging(self):
         self.log_user()
@@ -89,7 +89,7 @@
 removed extra unicode conversion in diff.</div>
 """)
 
-        response.mustcontain("""<span style="text-transform: uppercase;"><a href="#">branch: default</a></span>""")
+        response.mustcontain("""<span style="text-transform: uppercase;"><a href="#">Branch: default</a></span>""")
 
     def test_file_source_history(self):
         self.log_user()
@@ -156,7 +156,7 @@
                                     f_path='vcs/nodes.py',
                                     annotate=True))
 
-        response.mustcontain("""<span style="text-transform: uppercase;"><a href="#">branch: default</a></span>""")
+        response.mustcontain("""<span style="text-transform: uppercase;"><a href="#">Branch: default</a></span>""")
 
     def test_file_annotation_history(self):
         self.log_user()
@@ -289,13 +289,10 @@
         response = self.app.get(url(controller='files', action='rawfile',
                                     repo_name=HG_REPO,
                                     revision=rev,
-                                    f_path=f_path))
+                                    f_path=f_path), status=404)
 
-        msg = """Revision %r does not exist for this repository""" % (rev)
-        self.checkSessionFlash(response, msg)
-
-        msg = """%s""" % (HG_REPO)
-        self.checkSessionFlash(response, msg)
+        msg = """Revision %s does not exist for this repository""" % (rev)
+        response.mustcontain(msg)
 
     def test_raw_file_wrong_f_path(self):
         self.log_user()
@@ -304,10 +301,10 @@
         response = self.app.get(url(controller='files', action='rawfile',
                                     repo_name=HG_REPO,
                                     revision=rev,
-                                    f_path=f_path))
+                                    f_path=f_path), status=404)
 
-        msg = "There is no file nor directory at the given path: %r at revision %r" % (f_path, rev[:12])
-        self.checkSessionFlash(response, msg)
+        msg = "There is no file nor directory at the given path: &#39;%s&#39; at revision %s" % (f_path, rev[:12])
+        response.mustcontain(msg)
 
     #==========================================================================
     # RAW RESPONSE - PLAIN
@@ -329,12 +326,10 @@
         response = self.app.get(url(controller='files', action='raw',
                                     repo_name=HG_REPO,
                                     revision=rev,
-                                    f_path=f_path))
-        msg = """Revision %r does not exist for this repository""" % (rev)
-        self.checkSessionFlash(response, msg)
+                                    f_path=f_path), status=404)
 
-        msg = """%s""" % (HG_REPO)
-        self.checkSessionFlash(response, msg)
+        msg = """Revision %s does not exist for this repository""" % (rev)
+        response.mustcontain(msg)
 
     def test_raw_wrong_f_path(self):
         self.log_user()
@@ -343,15 +338,40 @@
         response = self.app.get(url(controller='files', action='raw',
                                     repo_name=HG_REPO,
                                     revision=rev,
-                                    f_path=f_path))
-        msg = "There is no file nor directory at the given path: %r at revision %r" % (f_path, rev[:12])
-        self.checkSessionFlash(response, msg)
+                                    f_path=f_path), status=404)
+        msg = "There is no file nor directory at the given path: &#39;%s&#39; at revision %s" % (f_path, rev[:12])
+        response.mustcontain(msg)
 
     def test_ajaxed_files_list(self):
         self.log_user()
         rev = '27cd5cce30c96924232dffcd24178a07ffeb5dfc'
         response = self.app.get(
-            url('files_nodelist_home', repo_name=HG_REPO,f_path='/',revision=rev),
+            url('files_nodelist_home', repo_name=HG_REPO, f_path='/',
+                revision=rev),
             extra_environ={'HTTP_X_PARTIAL_XHR': '1'},
         )
         response.mustcontain("vcs/web/simplevcs/views/repository.py")
+
+    def test_add_file_view_hg(self):
+        self.log_user()
+        response = self.app.get(url('files_add_home',
+                                      repo_name=HG_REPO,
+                                      revision='tip', f_path='/'))
+
+    def test_add_file_view_git(self):
+        self.log_user()
+        response = self.app.get(url('files_add_home',
+                                      repo_name=GIT_REPO,
+                                      revision='tip', f_path='/'))
+
+    def test_edit_file_view_hg(self):
+        self.log_user()
+        response = self.app.get(url('files_edit_home',
+                                      repo_name=HG_REPO,
+                                      revision='tip', f_path='vcs/nodes.py'))
+
+    def test_edit_file_view_git(self):
+        self.log_user()
+        response = self.app.get(url('files_edit_home',
+                                      repo_name=GIT_REPO,
+                                      revision='tip', f_path='vcs/nodes.py'))
--- a/rhodecode/tests/functional/test_followers.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/tests/functional/test_followers.py	Sun Apr 07 18:37:22 2013 +0200
@@ -1,13 +1,24 @@
 from rhodecode.tests import *
 
+
 class TestFollowersController(TestController):
 
-    def test_index(self):
+    def test_index_hg(self):
         self.log_user()
         repo_name = HG_REPO
         response = self.app.get(url(controller='followers',
                                     action='followers',
                                     repo_name=repo_name))
 
-        self.assertTrue("""test_admin""" in response.body)
-        self.assertTrue("""Started following""" in response.body)
+        response.mustcontain("""test_admin""")
+        response.mustcontain("""Started following""")
+
+    def test_index_git(self):
+        self.log_user()
+        repo_name = GIT_REPO
+        response = self.app.get(url(controller='followers',
+                                    action='followers',
+                                    repo_name=repo_name))
+
+        response.mustcontain("""test_admin""")
+        response.mustcontain("""Started following""")
--- a/rhodecode/tests/functional/test_forks.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/tests/functional/test_forks.py	Sun Apr 07 18:37:22 2013 +0200
@@ -27,7 +27,7 @@
         response = self.app.get(url(controller='forks', action='forks',
                                     repo_name=repo_name))
 
-        self.assertTrue("""There are no forks yet""" in response.body)
+        response.mustcontain("""There are no forks yet""")
 
     def test_no_permissions_to_fork(self):
         usr = self.log_user(TEST_USER_REGULAR_LOGIN,
@@ -66,7 +66,7 @@
                                     repo_name=repo_name))
 
         response.mustcontain(
-            """<a href="/%s/summary">%s</a>""" % (fork_name, fork_name)
+            """<a href="/%s">%s</a>""" % (fork_name, fork_name)
         )
 
         #remove this fork
@@ -95,7 +95,7 @@
                                     repo_name=repo_name))
 
         response.mustcontain(
-            """<a href="/%s/summary">%s</a>""" % (fork_name, fork_name)
+            """<a href="/%s">%s</a>""" % (fork_name, fork_name)
         )
 
         #remove this fork
@@ -109,7 +109,7 @@
         org_repo = Repository.get_by_repo_name(repo_name)
         response = self.app.post(url(controller='forks', action='fork_create',
                                     repo_name=repo_name),
-                                    {'repo_name':fork_name,
+                                    {'repo_name': fork_name,
                                      'repo_group':'',
                                      'fork_parent_id':org_repo.repo_id,
                                      'repo_type':'hg',
@@ -119,7 +119,8 @@
 
         #test if we have a message that fork is ok
         self.checkSessionFlash(response,
-                'forked %s repository as %s' % (repo_name, fork_name))
+                'Forked repository %s as <a href="/%s">%s</a>'
+                % (repo_name, fork_name, fork_name))
 
         #test if the fork was created in the database
         fork_repo = Session().query(Repository)\
@@ -134,7 +135,7 @@
         response = self.app.get(url(controller='summary', action='index',
                                     repo_name=fork_name))
 
-        self.assertTrue('Fork of %s' % repo_name in response.body)
+        response.mustcontain('Fork of %s' % repo_name)
 
     def test_zz_fork_permission_page(self):
         usr = self.log_user(self.username, self.password)['user_id']
--- a/rhodecode/tests/functional/test_home.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/tests/functional/test_home.py	Sun Apr 07 18:37:22 2013 +0200
@@ -1,27 +1,29 @@
 import time
 from rhodecode.tests import *
+from rhodecode.tests.fixture import Fixture
 from rhodecode.model.meta import Session
-from rhodecode.model.db import User, RhodeCodeSetting, Repository
-from rhodecode.lib.utils import set_rhodecode_config
-from rhodecode.tests.models.common import _make_repo, _make_group
+from rhodecode.model.db import User, Repository
 from rhodecode.model.repo import RepoModel
 from rhodecode.model.repos_group import ReposGroupModel
 
 
+fixture = Fixture()
+
+
 class TestHomeController(TestController):
 
     def test_index(self):
         self.log_user()
         response = self.app.get(url(controller='home', action='index'))
         #if global permission is set
-        response.mustcontain('ADD REPOSITORY')
-        response.mustcontain('href="/%s/summary"' % HG_REPO)
+        response.mustcontain('Add repository')
+        response.mustcontain('href="/%s"' % HG_REPO)
 
         response.mustcontain("""<img class="icon" title="Mercurial repository" """
                         """alt="Mercurial repository" src="/images/icons/hg"""
                         """icon.png"/>""")
-        response.mustcontain("""<img class="icon" title="public repository" """
-                        """alt="public repository" src="/images/icons/lock_"""
+        response.mustcontain("""<img class="icon" title="Public repository" """
+                        """alt="Public repository" src="/images/icons/lock_"""
                         """open.png"/>""")
 
         response.mustcontain(
@@ -75,18 +77,19 @@
 
         try:
             response = self.app.get(url(controller='home', action='index'))
-            response.mustcontain("""var data = {"totalRecords": %s""" % len(Repository.getAll()))
+            response.mustcontain("""var data = {"totalRecords": %s"""
+                                 % len(Repository.getAll()))
         finally:
             self._set_l_dash(False)
 
     def test_index_page_on_groups(self):
         self.log_user()
-        _make_repo(name='gr1/repo_in_group', repos_group=_make_group('gr1'))
-        Session().commit()
+        gr = fixture.create_group('gr1')
+        fixture.create_repo(name='gr1/repo_in_group', repos_group=gr)
         response = self.app.get(url('repos_group_home', group_name='gr1'))
 
         try:
-            response.mustcontain("""gr1/repo_in_group""")
+            response.mustcontain("gr1/repo_in_group")
         finally:
             RepoModel().delete('gr1/repo_in_group')
             ReposGroupModel().delete(repos_group='gr1', force_delete=True)
@@ -95,8 +98,8 @@
     def test_index_page_on_groups_with_lightweight_dashboard(self):
         self.log_user()
         self._set_l_dash(True)
-        _make_repo(name='gr1/repo_in_group', repos_group=_make_group('gr1'))
-        Session().commit()
+        fixture.create_repo(name='gr1/repo_in_group',
+                            repos_group=fixture.create_group('gr1'))
         response = self.app.get(url('repos_group_home', group_name='gr1'))
 
         try:
--- a/rhodecode/tests/functional/test_login.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/tests/functional/test_login.py	Sun Apr 07 18:37:22 2013 +0200
@@ -29,7 +29,7 @@
         self.assertEqual(response.session['rhodecode_user'].get('username'),
                          'test_admin')
         response = response.follow()
-        self.assertTrue('%s repository' % HG_REPO in response.body)
+        response.mustcontain('/%s' % HG_REPO)
 
     def test_login_regular_ok(self):
         response = self.app.post(url(controller='login', action='index'),
@@ -40,8 +40,7 @@
         self.assertEqual(response.session['rhodecode_user'].get('username'),
                          'test_regular')
         response = response.follow()
-        self.assertTrue('%s repository' % HG_REPO in response.body)
-        self.assertTrue('<a title="Admin" href="/_admin">' not in response.body)
+        response.mustcontain('/%s' % HG_REPO)
 
     def test_login_ok_came_from(self):
         test_came_from = '/_admin/users'
@@ -53,7 +52,7 @@
         response = response.follow()
 
         self.assertEqual(response.status, '200 OK')
-        self.assertTrue('Users administration' in response.body)
+        response.mustcontain('Users administration')
 
     @parameterized.expand([
           ('data:text/html,<script>window.alert("xss")</script>',),
@@ -80,22 +79,22 @@
                                   'password': 'as'})
         self.assertEqual(response.status, '200 OK')
 
-        self.assertTrue('Enter 3 characters or more' in response.body)
+        response.mustcontain('Enter 3 characters or more')
 
     def test_login_wrong_username_password(self):
         response = self.app.post(url(controller='login', action='index'),
                                  {'username': 'error',
                                   'password': 'test12'})
 
-        self.assertTrue('invalid user name' in response.body)
-        self.assertTrue('invalid password' in response.body)
+        response.mustcontain('invalid user name')
+        response.mustcontain('invalid password')
 
     #==========================================================================
     # REGISTRATIONS
     #==========================================================================
     def test_register(self):
         response = self.app.get(url(controller='login', action='register'))
-        self.assertTrue('Sign Up to RhodeCode' in response.body)
+        response.mustcontain('Sign Up to RhodeCode')
 
     def test_register_err_same_username(self):
         uname = 'test_admin'
--- a/rhodecode/tests/functional/test_repos_groups.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/tests/functional/test_repos_groups.py	Sun Apr 07 18:37:22 2013 +0200
@@ -1,43 +1,51 @@
 from rhodecode.tests import *
 
+
 class TestReposGroupsController(TestController):
 
     def test_index(self):
+        self.log_user()
         response = self.app.get(url('repos_groups'))
-        # Test response...
+        response.mustcontain('There are no repository groups yet')
 
-    def test_index_as_xml(self):
-        response = self.app.get(url('formatted_repos_groups', format='xml'))
-
-    def test_create(self):
-        response = self.app.post(url('repos_groups'))
+#    def test_index_as_xml(self):
+#        response = self.app.get(url('formatted_repos_groups', format='xml'))
+#
+#    def test_create(self):
+#        response = self.app.post(url('repos_groups'))
 
     def test_new(self):
+        self.log_user()
         response = self.app.get(url('new_repos_group'))
 
-    def test_new_as_xml(self):
-        response = self.app.get(url('formatted_new_repos_group', format='xml'))
-
-    def test_update(self):
-        response = self.app.put(url('repos_group', id=1))
-
-    def test_update_browser_fakeout(self):
-        response = self.app.post(url('repos_group', id=1), params=dict(_method='put'))
-
-    def test_delete(self):
-        response = self.app.delete(url('repos_group', id=1))
-
-    def test_delete_browser_fakeout(self):
-        response = self.app.post(url('repos_group', id=1), params=dict(_method='delete'))
-
-    def test_show(self):
-        response = self.app.get(url('repos_group', id=1))
-
-    def test_show_as_xml(self):
-        response = self.app.get(url('formatted_repos_group', id=1, format='xml'))
-
-    def test_edit(self):
-        response = self.app.get(url('edit_repos_group', id=1))
-
-    def test_edit_as_xml(self):
-        response = self.app.get(url('formatted_edit_repos_group', id=1, format='xml'))
+    def test_new_by_regular_user(self):
+        self.log_user(TEST_USER_REGULAR_LOGIN, TEST_USER_REGULAR_PASS)
+        response = self.app.get(url('new_repos_group'), status=403)
+#
+#    def test_new_as_xml(self):
+#        response = self.app.get(url('formatted_new_repos_group', format='xml'))
+#
+#    def test_update(self):
+#        response = self.app.put(url('repos_group', group_name=1))
+#
+#    def test_update_browser_fakeout(self):
+#        response = self.app.post(url('repos_group', group_name=1), params=dict(_method='put'))
+#
+#    def test_delete(self):
+#        self.log_user()
+#        response = self.app.delete(url('repos_group', group_name=1))
+#
+#    def test_delete_browser_fakeout(self):
+#        response = self.app.post(url('repos_group', group_name=1), params=dict(_method='delete'))
+#
+#    def test_show(self):
+#        response = self.app.get(url('repos_group', group_name=1))
+#
+#    def test_show_as_xml(self):
+#        response = self.app.get(url('formatted_repos_group', group_name=1, format='xml'))
+#
+#    def test_edit(self):
+#        response = self.app.get(url('edit_repos_group', group_name=1))
+#
+#    def test_edit_as_xml(self):
+#        response = self.app.get(url('formatted_edit_repos_group', group_name=1, format='xml'))
--- a/rhodecode/tests/functional/test_search.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/tests/functional/test_search.py	Sun Apr 07 18:37:22 2013 +0200
@@ -1,6 +1,5 @@
 import os
 from rhodecode.tests import *
-from nose.plugins.skip import SkipTest
 
 
 class TestSearchController(TestController):
@@ -9,8 +8,7 @@
         self.log_user()
         response = self.app.get(url(controller='search', action='index'))
 
-        self.assertTrue('class="small" id="q" name="q" type="text"' in
-                        response.body)
+        response.mustcontain('class="small" id="q" name="q" type="text"')
         # Test response...
 
     def test_empty_search(self):
@@ -20,8 +18,8 @@
             self.log_user()
             response = self.app.get(url(controller='search', action='index'),
                                     {'q': HG_REPO})
-            self.assertTrue('There is no index to search in. '
-                            'Please run whoosh indexer' in response.body)
+            response.mustcontain('There is no index to search in. '
+                                 'Please run whoosh indexer')
 
     def test_normal_search(self):
         self.log_user()
@@ -56,7 +54,7 @@
     def test_search_commit_message_hg_repo(self):
         self.log_user()
         response = self.app.get(url(controller='search', action='index',
-                                    search_repo=HG_REPO),
+                                    repo_name=HG_REPO),
                     {'q': 'bother to ask where to fetch repo during tests',
                      'type': 'commit'})
 
--- a/rhodecode/tests/functional/test_settings.py	Mon Mar 11 17:59:38 2013 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-from rhodecode.model.db import Repository
-from rhodecode.tests import *
-
-class TestSettingsController(TestController):
-
-    def test_index(self):
-        self.log_user()
-        response = self.app.get(url(controller='settings', action='index',
-                                    repo_name=HG_REPO))
-        # Test response...
--- a/rhodecode/tests/functional/test_summary.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/tests/functional/test_summary.py	Sun Apr 07 18:37:22 2013 +0200
@@ -1,10 +1,12 @@
 from rhodecode.tests import *
+from rhodecode.tests.fixture import Fixture
 from rhodecode.model.db import Repository
 from rhodecode.lib.utils import invalidate_cache
 from rhodecode.model.repo import RepoModel
-from rhodecode.tests.models.common import _make_repo
 from rhodecode.model.meta import Session
 
+fixture = Fixture()
+
 
 class TestSummaryController(TestController):
 
@@ -23,7 +25,7 @@
         )
         response.mustcontain(
             """<img style="margin-bottom:2px" class="icon" """
-            """title="public repository" alt="public """
+            """title="Public repository" alt="Public """
             """repository" src="/images/icons/lock_open.png"/>"""
         )
 
@@ -44,8 +46,8 @@
         )
 
         # clone url...
-        response.mustcontain("""<input style="width:80%%;margin-left:105px" type="text" id="clone_url" readonly="readonly" value="http://test_admin@localhost:80/%s"/>""" % HG_REPO)
-        response.mustcontain("""<input style="display:none;width:80%%;margin-left:105px" type="text" id="clone_url_id" readonly="readonly" value="http://test_admin@localhost:80/_%s"/>""" % ID)
+        response.mustcontain('''id="clone_url" readonly="readonly" value="http://test_admin@localhost:80/%s"''' % HG_REPO)
+        response.mustcontain('''id="clone_url_id" readonly="readonly" value="http://test_admin@localhost:80/_%s"''' % ID)
 
     def test_index_git(self):
         self.log_user()
@@ -62,13 +64,13 @@
         )
         response.mustcontain(
             """<img style="margin-bottom:2px" class="icon" """
-            """title="public repository" alt="public """
+            """title="Public repository" alt="Public """
             """repository" src="/images/icons/lock_open.png"/>"""
         )
 
         # clone url...
-        response.mustcontain("""<input style="width:80%%;margin-left:105px" type="text" id="clone_url" readonly="readonly" value="http://test_admin@localhost:80/%s"/>""" % GIT_REPO)
-        response.mustcontain("""<input style="display:none;width:80%%;margin-left:105px" type="text" id="clone_url_id" readonly="readonly" value="http://test_admin@localhost:80/_%s"/>""" % ID)
+        response.mustcontain('''id="clone_url" readonly="readonly" value="http://test_admin@localhost:80/%s"''' % GIT_REPO)
+        response.mustcontain('''id="clone_url_id" readonly="readonly" value="http://test_admin@localhost:80/_%s"''' % ID)
 
     def test_index_by_id_hg(self):
         self.log_user()
@@ -82,19 +84,18 @@
                         """title="Mercurial repository" alt="Mercurial """
                         """repository" src="/images/icons/hgicon.png"/>""")
         response.mustcontain("""<img style="margin-bottom:2px" class="icon" """
-                        """title="public repository" alt="public """
+                        """title="Public repository" alt="Public """
                         """repository" src="/images/icons/lock_open.png"/>""")
 
     def test_index_by_repo_having_id_path_in_name_hg(self):
         self.log_user()
-        _make_repo(name='repo_1')
-        Session().commit()
+        fixture.create_repo(name='repo_1')
         response = self.app.get(url(controller='summary',
                                     action='index',
                                     repo_name='repo_1'))
 
         try:
-            response.mustcontain("""repo_1""")
+            response.mustcontain("repo_1")
         finally:
             RepoModel().delete(Repository.get_by_repo_name('repo_1'))
             Session().commit()
@@ -111,7 +112,7 @@
                         """title="Git repository" alt="Git """
                         """repository" src="/images/icons/giticon.png"/>""")
         response.mustcontain("""<img style="margin-bottom:2px" class="icon" """
-                        """title="public repository" alt="public """
+                        """title="Public repository" alt="Public """
                         """repository" src="/images/icons/lock_open.png"/>""")
 
     def _enable_stats(self):
--- a/rhodecode/tests/models/common.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/tests/models/common.py	Sun Apr 07 18:37:22 2013 +0200
@@ -2,7 +2,7 @@
 import unittest
 import functools
 from rhodecode.tests import *
-
+from rhodecode.tests.fixture import Fixture
 
 from rhodecode.model.repos_group import ReposGroupModel
 from rhodecode.model.repo import RepoModel
@@ -13,23 +13,7 @@
 from rhodecode.model.meta import Session
 
 
-def _make_group(path, desc='desc', parent_id=None,
-                 skip_if_exists=False):
-
-    gr = RepoGroup.get_by_group_name(path)
-    if gr and skip_if_exists:
-        return gr
-    if isinstance(parent_id, RepoGroup):
-        parent_id = parent_id.group_id
-    gr = ReposGroupModel().create(path, desc, parent_id)
-    return gr
-
-
-def _make_repo(name, repos_group=None, repo_type='hg', private=False):
-    return RepoModel().create_repo(name, repo_type, 'desc',
-                                   TEST_USER_ADMIN_LOGIN,
-                                   repos_group=repos_group,
-                                   private=private)
+fixture = Fixture()
 
 
 def _destroy_project_tree(test_u1_id):
@@ -75,19 +59,19 @@
         username=u'test_u1', password=u'qweqwe',
         email=u'test_u1@rhodecode.org', firstname=u'test_u1', lastname=u'test_u1'
     )
-    g0 = _make_group('g0')
-    g0_1 = _make_group('g0_1', parent_id=g0)
-    g0_1_1 = _make_group('g0_1_1', parent_id=g0_1)
-    g0_1_1_r1 = _make_repo('g0/g0_1/g0_1_1/g0_1_1_r1', repos_group=g0_1_1)
-    g0_1_1_r2 = _make_repo('g0/g0_1/g0_1_1/g0_1_1_r2', repos_group=g0_1_1)
-    g0_1_r1 = _make_repo('g0/g0_1/g0_1_r1', repos_group=g0_1)
-    g0_2 = _make_group('g0_2', parent_id=g0)
-    g0_2_r1 = _make_repo('g0/g0_2/g0_2_r1', repos_group=g0_2)
-    g0_2_r2 = _make_repo('g0/g0_2/g0_2_r2', repos_group=g0_2)
-    g0_3 = _make_group('g0_3', parent_id=g0)
-    g0_3_r1 = _make_repo('g0/g0_3/g0_3_r1', repos_group=g0_3)
-    g0_3_r2_private = _make_repo('g0/g0_3/g0_3_r1_private', repos_group=g0_3,
-                                 private=True)
+    g0 = fixture.create_group('g0')
+    g0_1 = fixture.create_group('g0_1', group_parent_id=g0)
+    g0_1_1 = fixture.create_group('g0_1_1', group_parent_id=g0_1)
+    g0_1_1_r1 = fixture.create_repo('g0/g0_1/g0_1_1/g0_1_1_r1', repos_group=g0_1_1)
+    g0_1_1_r2 = fixture.create_repo('g0/g0_1/g0_1_1/g0_1_1_r2', repos_group=g0_1_1)
+    g0_1_r1 = fixture.create_repo('g0/g0_1/g0_1_r1', repos_group=g0_1)
+    g0_2 = fixture.create_group('g0_2', group_parent_id=g0)
+    g0_2_r1 = fixture.create_repo('g0/g0_2/g0_2_r1', repos_group=g0_2)
+    g0_2_r2 = fixture.create_repo('g0/g0_2/g0_2_r2', repos_group=g0_2)
+    g0_3 = fixture.create_group('g0_3', group_parent_id=g0)
+    g0_3_r1 = fixture.create_repo('g0/g0_3/g0_3_r1', repos_group=g0_3)
+    g0_3_r2_private = fixture.create_repo('g0/g0_3/g0_3_r1_private',
+                                          repos_group=g0_3, repo_private=True)
     return test_u1
 
 
--- a/rhodecode/tests/models/test_permissions.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/tests/models/test_permissions.py	Sun Apr 07 18:37:22 2013 +0200
@@ -1,16 +1,18 @@
 import os
 import unittest
 from rhodecode.tests import *
-from rhodecode.tests.models.common import _make_group
+from rhodecode.tests.fixture import Fixture
 from rhodecode.model.repos_group import ReposGroupModel
 from rhodecode.model.repo import RepoModel
-from rhodecode.model.db import RepoGroup, User, UsersGroupRepoGroupToPerm
+from rhodecode.model.db import RepoGroup, User, UserGroupRepoGroupToPerm
 from rhodecode.model.user import UserModel
 
 from rhodecode.model.meta import Session
-from rhodecode.model.users_group import UsersGroupModel
+from rhodecode.model.users_group import UserGroupModel
 from rhodecode.lib.auth import AuthUser
-from rhodecode.tests.api.api_base import create_repo
+
+
+fixture = Fixture()
 
 
 class TestPermissions(unittest.TestCase):
@@ -51,7 +53,7 @@
             ReposGroupModel().delete(self.g2.group_id)
 
         if hasattr(self, 'ug1'):
-            UsersGroupModel().delete(self.ug1, force=True)
+            UserGroupModel().delete(self.ug1, force=True)
 
         Session().commit()
 
@@ -94,8 +96,8 @@
                          perms['repositories'][HG_REPO])
 
     def test_default_group_perms(self):
-        self.g1 = _make_group('test1', skip_if_exists=True)
-        self.g2 = _make_group('test2', skip_if_exists=True)
+        self.g1 = fixture.create_group('test1', skip_if_exists=True)
+        self.g2 = fixture.create_group('test2', skip_if_exists=True)
         u1_auth = AuthUser(user_id=self.u1.user_id)
         perms = {
             'repositories_groups': {u'test1': 'group.read', u'test2': 'group.read'},
@@ -108,8 +110,8 @@
                          perms['repositories_groups'])
 
     def test_default_admin_group_perms(self):
-        self.g1 = _make_group('test1', skip_if_exists=True)
-        self.g2 = _make_group('test2', skip_if_exists=True)
+        self.g1 = fixture.create_group('test1', skip_if_exists=True)
+        self.g2 = fixture.create_group('test2', skip_if_exists=True)
         a1_auth = AuthUser(user_id=self.a1.user_id)
         perms = {
             'repositories_groups': {u'test1': 'group.admin', u'test2': 'group.admin'},
@@ -124,10 +126,10 @@
 
     def test_propagated_permission_from_users_group_by_explicit_perms_exist(self):
         # make group
-        self.ug1 = UsersGroupModel().create('G1')
+        self.ug1 = UserGroupModel().create('G1')
         # add user to group
 
-        UsersGroupModel().add_user_to_group(self.ug1, self.u1)
+        UserGroupModel().add_user_to_group(self.ug1, self.u1)
 
         # set permission to lower
         new_perm = 'repository.none'
@@ -158,10 +160,10 @@
 
     def test_propagated_permission_from_users_group(self):
         # make group
-        self.ug1 = UsersGroupModel().create('G1')
+        self.ug1 = UserGroupModel().create('G1')
         # add user to group
 
-        UsersGroupModel().add_user_to_group(self.ug1, self.u3)
+        UserGroupModel().add_user_to_group(self.ug1, self.u3)
 
         # grant perm for group this should override default permission from user
         new_perm_gr = 'repository.write'
@@ -183,9 +185,9 @@
 
     def test_propagated_permission_from_users_group_lower_weight(self):
         # make group
-        self.ug1 = UsersGroupModel().create('G1')
+        self.ug1 = UserGroupModel().create('G1')
         # add user to group
-        UsersGroupModel().add_user_to_group(self.ug1, self.u1)
+        UserGroupModel().add_user_to_group(self.ug1, self.u1)
 
         # set permission to lower
         new_perm_h = 'repository.write'
@@ -216,9 +218,8 @@
                          perms['repositories_groups'])
 
     def test_repo_in_group_permissions(self):
-        self.g1 = _make_group('group1', skip_if_exists=True)
-        self.g2 = _make_group('group2', skip_if_exists=True)
-        Session().commit()
+        self.g1 = fixture.create_group('group1', skip_if_exists=True)
+        self.g2 = fixture.create_group('group2', skip_if_exists=True)
         # both perms should be read !
         u1_auth = AuthUser(user_id=self.u1.user_id)
         self.assertEqual(u1_auth.permissions['repositories_groups'],
@@ -246,14 +247,10 @@
 
         # add repo to group
         name = RepoGroup.url_sep().join([self.g1.group_name, 'test_perm'])
-        self.test_repo = RepoModel().create_repo(
-            repo_name=name,
-            repo_type='hg',
-            description='',
-            repos_group=self.g1,
-            owner=self.u1,
-        )
-        Session().commit()
+        self.test_repo = fixture.create_repo(name=name,
+                                             repo_type='hg',
+                                             repos_group=self.g1,
+                                             cur_user=self.u1,)
 
         u1_auth = AuthUser(user_id=self.u1.user_id)
         self.assertEqual(u1_auth.permissions['repositories_groups'],
@@ -287,8 +284,7 @@
 
     def test_repo_group_user_as_user_group_member(self):
         # create Group1
-        self.g1 = _make_group('group1', skip_if_exists=True)
-        Session().commit()
+        self.g1 = fixture.create_group('group1', skip_if_exists=True)
         a1_auth = AuthUser(user_id=self.anon.user_id)
 
         self.assertEqual(a1_auth.permissions['repositories_groups'],
@@ -299,13 +295,13 @@
                                                 user=self.anon,
                                                 perm='group.none')
         # make group
-        self.ug1 = UsersGroupModel().create('G1')
+        self.ug1 = UserGroupModel().create('G1')
         # add user to group
-        UsersGroupModel().add_user_to_group(self.ug1, self.u1)
+        UserGroupModel().add_user_to_group(self.ug1, self.u1)
         Session().commit()
 
         # check if user is in the group
-        membrs = [x.user_id for x in UsersGroupModel().get(self.ug1.users_group_id).members]
+        membrs = [x.user_id for x in UserGroupModel().get(self.ug1.users_group_id).members]
         self.assertEqual(membrs, [self.u1.user_id])
         # add some user to that group
 
@@ -324,9 +320,9 @@
                                                        perm='group.read')
         Session().commit()
         # check if the
-        obj = Session().query(UsersGroupRepoGroupToPerm)\
-            .filter(UsersGroupRepoGroupToPerm.group == self.g1)\
-            .filter(UsersGroupRepoGroupToPerm.users_group == self.ug1)\
+        obj = Session().query(UserGroupRepoGroupToPerm)\
+            .filter(UserGroupRepoGroupToPerm.group == self.g1)\
+            .filter(UserGroupRepoGroupToPerm.users_group == self.ug1)\
             .scalar()
         self.assertEqual(obj.permission.permission_name, 'group.read')
 
@@ -429,21 +425,20 @@
 
     def test_owner_permissions_doesnot_get_overwritten_by_group(self):
         #create repo as USER,
-        self.test_repo = repo = RepoModel().create_repo(repo_name='myownrepo',
-                                repo_type='hg',
-                                description='desc',
-                                owner=self.u1)
+        self.test_repo = fixture.create_repo(name='myownrepo',
+                                             repo_type='hg',
+                                             cur_user=self.u1)
 
-        Session().commit()
         #he has permissions of admin as owner
         u1_auth = AuthUser(user_id=self.u1.user_id)
         self.assertEqual(u1_auth.permissions['repositories']['myownrepo'],
                          'repository.admin')
-        #set his permission as users group, he should still be admin
-        self.ug1 = UsersGroupModel().create('G1')
+        #set his permission as user group, he should still be admin
+        self.ug1 = UserGroupModel().create('G1')
         # add user to group
-        UsersGroupModel().add_user_to_group(self.ug1, self.u1)
-        RepoModel().grant_users_group_permission(repo, group_name=self.ug1,
+        UserGroupModel().add_user_to_group(self.ug1, self.u1)
+        RepoModel().grant_users_group_permission(self.test_repo,
+                                                 group_name=self.ug1,
                                                  perm='repository.none')
 
         Session().commit()
@@ -453,18 +448,16 @@
 
     def test_owner_permissions_doesnot_get_overwritten_by_others(self):
         #create repo as USER,
-        self.test_repo = repo = RepoModel().create_repo(repo_name='myownrepo',
-                                repo_type='hg',
-                                description='desc',
-                                owner=self.u1)
+        self.test_repo = fixture.create_repo(name='myownrepo',
+                                             repo_type='hg',
+                                             cur_user=self.u1)
 
-        Session().commit()
         #he has permissions of admin as owner
         u1_auth = AuthUser(user_id=self.u1.user_id)
         self.assertEqual(u1_auth.permissions['repositories']['myownrepo'],
                          'repository.admin')
         #set his permission as user, he should still be admin
-        RepoModel().grant_user_permission(repo, user=self.u1,
+        RepoModel().grant_user_permission(self.test_repo, user=self.u1,
                                           perm='repository.none')
         Session().commit()
         u1_auth = AuthUser(user_id=self.u1.user_id)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rhodecode/tests/models/test_repos.py	Sun Apr 07 18:37:22 2013 +0200
@@ -0,0 +1,79 @@
+import os
+import unittest
+from rhodecode.tests import *
+
+from rhodecode.model.meta import Session
+from rhodecode.tests.fixture import Fixture
+from rhodecode.model.repo import RepoModel
+from rhodecode.model.db import Repository
+from rhodecode.lib.exceptions import AttachedForksError
+
+fixture = Fixture()
+
+
+class TestRepos(unittest.TestCase):
+
+    def setUp(self):
+        pass
+
+    def tearDown(self):
+        Session.remove()
+
+    def test_remove_repo(self):
+        repo = fixture.create_repo(name='test-repo-1')
+        Session().commit()
+
+        RepoModel().delete(repo=repo)
+        Session().commit()
+
+        self.assertEqual(None, Repository.get_by_repo_name(repo_name='test-repo-1'))
+
+    def test_remove_repo_repo_raises_exc_when_attached_forks(self):
+        repo = fixture.create_repo(name='test-repo-1')
+        Session().commit()
+
+        fixture.create_fork(repo.repo_name, 'test-repo-fork-1')
+        Session().commit()
+
+        self.assertRaises(AttachedForksError, lambda: RepoModel().delete(repo=repo))
+
+    def test_remove_repo_delete_forks(self):
+        repo = fixture.create_repo(name='test-repo-1')
+        Session().commit()
+
+        fork = fixture.create_fork(repo.repo_name, 'test-repo-fork-1')
+        Session().commit()
+
+        #fork of fork
+        fixture.create_fork(fork.repo_name, 'test-repo-fork-fork-1')
+        Session().commit()
+
+        RepoModel().delete(repo=repo, forks='delete')
+        Session().commit()
+
+        self.assertEqual(None, Repository.get_by_repo_name(repo_name='test-repo-1'))
+        self.assertEqual(None, Repository.get_by_repo_name(repo_name='test-repo-fork-1'))
+        self.assertEqual(None, Repository.get_by_repo_name(repo_name='test-repo-fork-fork-1'))
+
+    def test_remove_repo_detach_forks(self):
+        repo = fixture.create_repo(name='test-repo-1')
+        Session().commit()
+
+        fork = fixture.create_fork(repo.repo_name, 'test-repo-fork-1')
+        Session().commit()
+
+        #fork of fork
+        fixture.create_fork(fork.repo_name, 'test-repo-fork-fork-1')
+        Session().commit()
+
+        RepoModel().delete(repo=repo, forks='detach')
+        Session().commit()
+
+        try:
+            self.assertEqual(None, Repository.get_by_repo_name(repo_name='test-repo-1'))
+            self.assertNotEqual(None, Repository.get_by_repo_name(repo_name='test-repo-fork-1'))
+            self.assertNotEqual(None, Repository.get_by_repo_name(repo_name='test-repo-fork-fork-1'))
+        finally:
+            RepoModel().delete(repo='test-repo-fork-fork-1')
+            RepoModel().delete(repo='test-repo-fork-1')
+            Session().commit()
--- a/rhodecode/tests/models/test_repos_groups.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/tests/models/test_repos_groups.py	Sun Apr 07 18:37:22 2013 +0200
@@ -1,43 +1,29 @@
 import os
 import unittest
+from sqlalchemy.exc import IntegrityError
+
 from rhodecode.tests import *
+from rhodecode.tests.fixture import Fixture
 
 from rhodecode.model.repos_group import ReposGroupModel
 from rhodecode.model.repo import RepoModel
-from rhodecode.model.db import RepoGroup, User
+from rhodecode.model.db import RepoGroup
 from rhodecode.model.meta import Session
-from sqlalchemy.exc import IntegrityError
 
 
-def _make_group(path, desc='desc', parent_id=None,
-                 skip_if_exists=False):
-
-    gr = RepoGroup.get_by_group_name(path)
-    if gr and skip_if_exists:
-        return gr
-    if isinstance(parent_id, RepoGroup):
-        parent_id = parent_id.group_id
-    gr = ReposGroupModel().create(path, desc, parent_id)
-    return gr
+fixture = Fixture()
 
 
 def _update_group(id_, group_name, desc='desc', parent_id=None):
-    form_data = _get_group_create_params(group_name=group_name,
-                                         group_desc=desc,
-                                         group_parent_id=parent_id)
+    form_data = fixture._get_group_create_params(group_name=group_name,
+                                                 group_desc=desc,
+                                                 group_parent_id=parent_id)
     gr = ReposGroupModel().update(id_, form_data)
     return gr
 
 
-def _make_repo(name, **kwargs):
-    form_data = _get_repo_create_params(repo_name=name, **kwargs)
-    cur_user = User.get_by_username(TEST_USER_ADMIN_LOGIN)
-    r = RepoModel().create(form_data, cur_user)
-    return r
-
-
 def _update_repo(name, **kwargs):
-    form_data = _get_repo_create_params(**kwargs)
+    form_data = fixture._get_repo_create_params(**kwargs)
     if not 'repo_name' in kwargs:
         form_data['repo_name'] = name
     if not 'perms_new' in kwargs:
@@ -51,12 +37,9 @@
 class TestReposGroups(unittest.TestCase):
 
     def setUp(self):
-        self.g1 = _make_group('test1', skip_if_exists=True)
-        Session().commit()
-        self.g2 = _make_group('test2', skip_if_exists=True)
-        Session().commit()
-        self.g3 = _make_group('test3', skip_if_exists=True)
-        Session().commit()
+        self.g1 = fixture.create_group('test1', skip_if_exists=True)
+        self.g2 = fixture.create_group('test2', skip_if_exists=True)
+        self.g3 = fixture.create_group('test3', skip_if_exists=True)
 
     def tearDown(self):
         Session.remove()
@@ -76,47 +59,42 @@
         ReposGroupModel().delete(id_)
 
     def test_create_group(self):
-        g = _make_group('newGroup')
+        g = fixture.create_group('newGroup')
         Session().commit()
         self.assertEqual(g.full_path, 'newGroup')
 
         self.assertTrue(self.__check_path('newGroup'))
 
     def test_create_same_name_group(self):
-        self.assertRaises(IntegrityError, lambda: _make_group('newGroup'))
+        self.assertRaises(IntegrityError, lambda: fixture.create_group('newGroup'))
         Session().rollback()
 
     def test_same_subgroup(self):
-        sg1 = _make_group('sub1', parent_id=self.g1.group_id)
-        Session().commit()
+        sg1 = fixture.create_group('sub1', group_parent_id=self.g1.group_id)
         self.assertEqual(sg1.parent_group, self.g1)
         self.assertEqual(sg1.full_path, 'test1/sub1')
         self.assertTrue(self.__check_path('test1', 'sub1'))
 
-        ssg1 = _make_group('subsub1', parent_id=sg1.group_id)
-        Session().commit()
+        ssg1 = fixture.create_group('subsub1', group_parent_id=sg1.group_id)
         self.assertEqual(ssg1.parent_group, sg1)
         self.assertEqual(ssg1.full_path, 'test1/sub1/subsub1')
         self.assertTrue(self.__check_path('test1', 'sub1', 'subsub1'))
 
     def test_remove_group(self):
-        sg1 = _make_group('deleteme')
-        Session().commit()
+        sg1 = fixture.create_group('deleteme')
         self.__delete_group(sg1.group_id)
 
         self.assertEqual(RepoGroup.get(sg1.group_id), None)
         self.assertFalse(self.__check_path('deteteme'))
 
-        sg1 = _make_group('deleteme', parent_id=self.g1.group_id)
-        Session().commit()
+        sg1 = fixture.create_group('deleteme', group_parent_id=self.g1.group_id)
         self.__delete_group(sg1.group_id)
 
         self.assertEqual(RepoGroup.get(sg1.group_id), None)
         self.assertFalse(self.__check_path('test1', 'deteteme'))
 
     def test_rename_single_group(self):
-        sg1 = _make_group('initial')
-        Session().commit()
+        sg1 = fixture.create_group('initial')
 
         new_sg1 = _update_group(sg1.group_id, 'after')
         self.assertTrue(self.__check_path('after'))
@@ -124,8 +102,7 @@
 
     def test_update_group_parent(self):
 
-        sg1 = _make_group('initial', parent_id=self.g1.group_id)
-        Session().commit()
+        sg1 = fixture.create_group('initial', group_parent_id=self.g1.group_id)
 
         new_sg1 = _update_group(sg1.group_id, 'after', parent_id=self.g1.group_id)
         self.assertTrue(self.__check_path('test1', 'after'))
@@ -142,12 +119,11 @@
 
     def test_subgrouping_with_repo(self):
 
-        g1 = _make_group('g1')
-        g2 = _make_group('g2')
-        Session().commit()
+        g1 = fixture.create_group('g1')
+        g2 = fixture.create_group('g2')
         # create new repo
-        r = _make_repo('john')
-        Session().commit()
+        r = fixture.create_repo('john')
+
         self.assertEqual(r.repo_name, 'john')
         # put repo into group
         r = _update_repo('john', repo_group=g1.group_id)
@@ -162,10 +138,8 @@
                                                                 r.just_name]))
 
     def test_move_to_root(self):
-        g1 = _make_group('t11')
-        Session().commit()
-        g2 = _make_group('t22', parent_id=g1.group_id)
-        Session().commit()
+        g1 = fixture.create_group('t11')
+        g2 = fixture.create_group('t22', group_parent_id=g1.group_id)
 
         self.assertEqual(g2.full_path, 't11/t22')
         self.assertTrue(self.__check_path('t11', 't22'))
@@ -180,15 +154,11 @@
         self.assertTrue(self.__check_path('g22'))
 
     def test_rename_top_level_group_in_nested_setup(self):
-        g1 = _make_group('L1')
-        Session().commit()
-        g2 = _make_group('L2', parent_id=g1.group_id)
-        Session().commit()
-        g3 = _make_group('L3', parent_id=g2.group_id)
-        Session().commit()
+        g1 = fixture.create_group('L1')
+        g2 = fixture.create_group('L2', group_parent_id=g1.group_id)
+        g3 = fixture.create_group('L3', group_parent_id=g2.group_id)
 
-        r = _make_repo('L1/L2/L3/L3_REPO', repo_group=g3.group_id)
-        Session().commit()
+        r = fixture.create_repo('L1/L2/L3/L3_REPO', repo_group=g3.group_id)
 
         ##rename L1 all groups should be now changed
         _update_group(g1.group_id, 'L1_NEW')
@@ -199,18 +169,12 @@
         self.assertEqual(r.repo_name,  'L1_NEW/L2/L3/L3_REPO')
 
     def test_change_parent_of_top_level_group_in_nested_setup(self):
-        g1 = _make_group('R1')
-        Session().commit()
-        g2 = _make_group('R2', parent_id=g1.group_id)
-        Session().commit()
-        g3 = _make_group('R3', parent_id=g2.group_id)
-        Session().commit()
+        g1 = fixture.create_group('R1')
+        g2 = fixture.create_group('R2', group_parent_id=g1.group_id)
+        g3 = fixture.create_group('R3', group_parent_id=g2.group_id)
+        g4 = fixture.create_group('R1_NEW')
 
-        g4 = _make_group('R1_NEW')
-        Session().commit()
-
-        r = _make_repo('R1/R2/R3/R3_REPO', repo_group=g3.group_id)
-        Session().commit()
+        r = fixture.create_repo('R1/R2/R3/R3_REPO', repo_group=g3.group_id)
         ##rename L1 all groups should be now changed
         _update_group(g1.group_id, 'R1', parent_id=g4.group_id)
         Session().commit()
@@ -220,18 +184,12 @@
         self.assertEqual(r.repo_name,  'R1_NEW/R1/R2/R3/R3_REPO')
 
     def test_change_parent_of_top_level_group_in_nested_setup_with_rename(self):
-        g1 = _make_group('X1')
-        Session().commit()
-        g2 = _make_group('X2', parent_id=g1.group_id)
-        Session().commit()
-        g3 = _make_group('X3', parent_id=g2.group_id)
-        Session().commit()
+        g1 = fixture.create_group('X1')
+        g2 = fixture.create_group('X2', group_parent_id=g1.group_id)
+        g3 = fixture.create_group('X3', group_parent_id=g2.group_id)
+        g4 = fixture.create_group('X1_NEW')
 
-        g4 = _make_group('X1_NEW')
-        Session().commit()
-
-        r = _make_repo('X1/X2/X3/X3_REPO', repo_group=g3.group_id)
-        Session().commit()
+        r = fixture.create_repo('X1/X2/X3/X3_REPO', repo_group=g3.group_id)
 
         ##rename L1 all groups should be now changed
         _update_group(g1.group_id, 'X1_PRIM', parent_id=g4.group_id)
--- a/rhodecode/tests/models/test_users.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/tests/models/test_users.py	Sun Apr 07 18:37:22 2013 +0200
@@ -1,12 +1,12 @@
 import unittest
 from rhodecode.tests import *
 
-from rhodecode.model.db import User, UsersGroup, UsersGroupMember, UserEmailMap,\
+from rhodecode.model.db import User, UserGroup, UserGroupMember, UserEmailMap,\
     Permission
 from rhodecode.model.user import UserModel
 
 from rhodecode.model.meta import Session
-from rhodecode.model.users_group import UsersGroupModel
+from rhodecode.model.users_group import UserGroupModel
 
 
 class TestUser(unittest.TestCase):
@@ -14,6 +14,9 @@
         Session.remove()
         super(TestUser, self).__init__(methodName=methodName)
 
+    def tearDown(self):
+        Session.remove()
+
     def test_create_and_remove(self):
         usr = UserModel().create_or_update(username=u'test_user',
                                            password=u'qweqwe',
@@ -22,19 +25,19 @@
         Session().commit()
         self.assertEqual(User.get_by_username(u'test_user'), usr)
 
-        # make users group
-        users_group = UsersGroupModel().create('some_example_group')
+        # make user group
+        users_group = UserGroupModel().create('some_example_group')
         Session().commit()
 
-        UsersGroupModel().add_user_to_group(users_group, usr)
+        UserGroupModel().add_user_to_group(users_group, usr)
         Session().commit()
 
-        self.assertEqual(UsersGroup.get(users_group.users_group_id), users_group)
-        self.assertEqual(UsersGroupMember.query().count(), 1)
+        self.assertEqual(UserGroup.get(users_group.users_group_id), users_group)
+        self.assertEqual(UserGroupMember.query().count(), 1)
         UserModel().delete(usr.user_id)
         Session().commit()
 
-        self.assertEqual(UsersGroupMember.query().all(), [])
+        self.assertEqual(UserGroupMember.query().all(), [])
 
     def test_additonal_email_as_main(self):
         usr = UserModel().create_or_update(username=u'test_user',
@@ -99,6 +102,7 @@
 
         UserModel().delete(self.u1)
         Session().commit()
+        Session.remove()
 
     def test_add_perm(self):
         perm = Permission.query().all()[0]
--- a/rhodecode/tests/models/test_users_group_permissions_on_groups.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/tests/models/test_users_group_permissions_on_groups.py	Sun Apr 07 18:37:22 2013 +0200
@@ -10,7 +10,7 @@
 from nose.tools import with_setup
 from rhodecode.tests.models.common import _create_project_tree, check_tree_perms, \
     _get_perms, _check_expected_count, expected_count, _destroy_project_tree
-from rhodecode.model.users_group import UsersGroupModel
+from rhodecode.model.users_group import UserGroupModel
 from rhodecode.model.repo import RepoModel
 
 
@@ -40,10 +40,10 @@
     Session().commit()
     test_u2_id = test_u2.user_id
 
-    gr1 = UsersGroupModel().create(name='perms_group_1')
+    gr1 = UserGroupModel().create(name='perms_group_1')
     Session().commit()
     test_u2_gr_id = gr1.users_group_id
-    UsersGroupModel().add_user_to_group(gr1, user=test_u2_id)
+    UserGroupModel().add_user_to_group(gr1, user=test_u2_id)
     Session().commit()
 
     _get_repo_perms = functools.partial(_get_perms, key='repositories',
--- a/rhodecode/tests/nose_parametrized.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/tests/nose_parametrized.py	Sun Apr 07 18:37:22 2013 +0200
@@ -92,7 +92,7 @@
         if self != ():
             self = (self,)
         return func(*(self + args))
-    parameterized_expand_helper_helper.__name__ = func_name
+    parameterized_expand_helper_helper.__name__ = str(func_name)
     return parameterized_expand_helper_helper
 
 
--- a/rhodecode/tests/scripts/test_concurency.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/tests/scripts/test_concurency.py	Sun Apr 07 18:37:22 2013 +0200
@@ -183,7 +183,7 @@
     else:
         stdout, stderr = Command(cwd).execute(backend, method, clone_url, dest)
         print stdout,'sdasdsadsa'
-        if no_errors is False:
+        if not no_errors:
             if backend == 'hg':
                 assert """adding file changes""" in stdout, 'no messages about cloning'
                 assert """abort""" not in stderr , 'got error from clone'
@@ -198,12 +198,12 @@
 
         try:
             METHOD = sys.argv[3]
-        except:
+        except Exception:
             pass
 
         try:
             backend = sys.argv[4]
-        except:
+        except Exception:
             backend = 'hg'
 
         if METHOD == 'pull':
--- a/rhodecode/tests/scripts/test_vcs_operations.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/tests/scripts/test_vcs_operations.py	Sun Apr 07 18:37:22 2013 +0200
@@ -4,9 +4,10 @@
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
     Test suite for making push/pull operations.
-    Run using::
+    Run using after doing paster serve test.ini::
+     RC_WHOOSH_TEST_DISABLE=1 RC_NO_TMP_PATH=1 nosetests rhodecode/tests/scripts/test_vcs_operations.py
 
-     RC_WHOOSH_TEST_DISABLE=1 RC_NO_TMP_PATH=1 nosetests rhodecode/tests/scripts/test_vcs_operations.py
+    You must have git > 1.8.1 for tests to work fine
 
     :created_on: Dec 30, 2010
     :author: marcink
@@ -37,7 +38,8 @@
 from subprocess import Popen, PIPE
 
 from rhodecode.tests import *
-from rhodecode.model.db import User, Repository, UserLog, UserIpMap
+from rhodecode.model.db import User, Repository, UserLog, UserIpMap,\
+    CacheInvalidation
 from rhodecode.model.meta import Session
 from rhodecode.model.repo import RepoModel
 from rhodecode.model.user import UserModel
@@ -104,16 +106,17 @@
     Command(cwd).execute('touch %s' % added_file)
     Command(cwd).execute('%s add %s' % (vcs, added_file))
 
-    for i in xrange(3):
+    for i in xrange(kwargs.get('files_no', 3)):
         cmd = """echo 'added_line%s' >> %s""" % (i, added_file)
         Command(cwd).execute(cmd)
+        author_str = 'Marcin Kuźminski <me@email.com>'
         if vcs == 'hg':
             cmd = """hg commit -m 'commited new %s' -u '%s' %s """ % (
-                i, 'Marcin Kuźminski <marcin@python-blog.com>', added_file
+                i, author_str, added_file
             )
         elif vcs == 'git':
             cmd = """git commit -m 'commited new %s' --author '%s' %s """ % (
-                i, 'Marcin Kuźminski <marcin@python-blog.com>', added_file
+                i, author_str, added_file
             )
         Command(cwd).execute(cmd)
     # PUSH it back
@@ -129,7 +132,7 @@
     if vcs == 'hg':
         stdout, stderr = Command(cwd).execute('hg push --verbose', clone_url)
     elif vcs == 'git':
-        stdout, stderr = Command(cwd).execute('git push', clone_url + " master")
+        stdout, stderr = Command(cwd).execute('git push --verbose', clone_url + " master")
 
     return stdout, stderr
 
@@ -238,6 +241,40 @@
         #WTF git stderr ?!
         assert 'master -> master' in stderr
 
+    def test_push_invalidates_cache_hg(self):
+        key = CacheInvalidation.query().filter(CacheInvalidation.cache_key
+                                               ==HG_REPO).one()
+        key.cache_active = True
+        Session().add(key)
+        Session().commit()
+
+        DEST = _get_tmp_dir()
+        clone_url = _construct_url(HG_REPO, dest=DEST)
+        stdout, stderr = Command('/tmp').execute('hg clone', clone_url)
+
+        stdout, stderr = _add_files_and_push('hg', DEST, files_no=1)
+        key = CacheInvalidation.query().filter(CacheInvalidation.cache_key
+                                               ==HG_REPO).one()
+        self.assertEqual(key.cache_active, False)
+
+    def test_push_invalidates_cache_git(self):
+        key = CacheInvalidation.query().filter(CacheInvalidation.cache_key
+                                               ==GIT_REPO).one()
+        key.cache_active = True
+        Session().add(key)
+        Session().commit()
+
+        DEST = _get_tmp_dir()
+        clone_url = _construct_url(GIT_REPO, dest=DEST)
+        stdout, stderr = Command('/tmp').execute('git clone', clone_url)
+
+        # commit some stuff into this repo
+        stdout, stderr = _add_files_and_push('git', DEST, files_no=1)
+
+        key = CacheInvalidation.query().filter(CacheInvalidation.cache_key
+                                               ==GIT_REPO).one()
+        self.assertEqual(key.cache_active, False)
+
     def test_push_wrong_credentials_hg(self):
         DEST = _get_tmp_dir()
         clone_url = _construct_url(HG_REPO, dest=DEST)
@@ -324,8 +361,7 @@
         #pull fails since repo is locked
         clone_url = _construct_url(GIT_REPO)
         stdout, stderr = Command('/tmp').execute('git clone', clone_url)
-        msg = ("""423 Repository `%s` locked by user `%s`"""
-                % (GIT_REPO, TEST_USER_ADMIN_LOGIN))
+        msg = ("""The requested URL returned error: 423""")
         assert msg in stderr
 
     def test_push_on_locked_repo_by_other_user_hg(self):
@@ -455,7 +491,8 @@
             Session().commit()
             clone_url = _construct_url(GIT_REPO)
             stdout, stderr = Command('/tmp').execute('git clone', clone_url)
-            assert 'error: The requested URL returned error: 403 Forbidden' in stderr
+            msg = ("""The requested URL returned error: 403""")
+            assert msg in stderr
         finally:
             #release IP restrictions
             for ip in UserIpMap.getAll():
--- a/rhodecode/tests/test_libs.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/tests/test_libs.py	Sun Apr 07 18:37:22 2013 +0200
@@ -66,41 +66,37 @@
 
 class TestLibs(unittest.TestCase):
 
-    def test_uri_filter(self):
+    @parameterized.expand(TEST_URLS)
+    def test_uri_filter(self, test_url, expected, expected_creds):
         from rhodecode.lib.utils2 import uri_filter
+        self.assertEqual(uri_filter(test_url), expected)
 
-        for url in TEST_URLS:
-            self.assertEqual(uri_filter(url[0]), url[1])
+    @parameterized.expand(TEST_URLS)
+    def test_credentials_filter(self, test_url, expected, expected_creds):
+        from rhodecode.lib.utils2 import credentials_filter
+        self.assertEqual(credentials_filter(test_url), expected_creds)
 
-    def test_credentials_filter(self):
-        from rhodecode.lib.utils2 import credentials_filter
-
-        for url in TEST_URLS:
-            self.assertEqual(credentials_filter(url[0]), url[2])
-
-    def test_str2bool(self):
+    @parameterized.expand([('t', True),
+                           ('true', True),
+                           ('y', True),
+                           ('yes', True),
+                           ('on', True),
+                           ('1', True),
+                           ('Y', True),
+                           ('yeS', True),
+                           ('Y', True),
+                           ('TRUE', True),
+                           ('T', True),
+                           ('False', False),
+                           ('F', False),
+                           ('FALSE', False),
+                           ('0', False),
+                           ('-1', False),
+                           ('', False)
+    ])
+    def test_str2bool(self, str_bool, expected):
         from rhodecode.lib.utils2 import str2bool
-        test_cases = [
-            ('t', True),
-            ('true', True),
-            ('y', True),
-            ('yes', True),
-            ('on', True),
-            ('1', True),
-            ('Y', True),
-            ('yeS', True),
-            ('Y', True),
-            ('TRUE', True),
-            ('T', True),
-            ('False', False),
-            ('F', False),
-            ('FALSE', False),
-            ('0', False),
-            ('-1', False),
-            ('', False), ]
-
-        for case in test_cases:
-            self.assertEqual(str2bool(case[0]), case[1])
+        self.assertEqual(str2bool(str_bool), expected)
 
     def test_mention_extractor(self):
         from rhodecode.lib.utils2 import extract_mentioned_users
@@ -118,40 +114,42 @@
         ], key=lambda k: k.lower())
         self.assertEqual(s, extract_mentioned_users(sample))
 
-    def test_age(self):
-        import calendar
+    @parameterized.expand([
+        (dict(), u'just now'),
+        (dict(seconds= -1), u'1 second ago'),
+        (dict(seconds= -60 * 2), u'2 minutes ago'),
+        (dict(hours= -1), u'1 hour ago'),
+        (dict(hours= -24), u'1 day ago'),
+        (dict(hours= -24 * 5), u'5 days ago'),
+        (dict(months= -1), u'1 month ago'),
+        (dict(months= -1, days= -2), u'1 month and 2 days ago'),
+        (dict(years= -1, months= -1), u'1 year and 1 month ago'),
+    ])
+    def test_age(self, age_args, expected):
         from rhodecode.lib.utils2 import age
-        n = datetime.datetime.now()
-        delt = lambda *args, **kwargs: datetime.timedelta(*args, **kwargs)
-        prev_month = n.month - 1 if n.month != 1 else n.month - 2
-        self.assertEqual(age(n), u'just now')
-        self.assertEqual(age(n - delt(seconds=1)), u'1 second ago')
-        self.assertEqual(age(n - delt(seconds=60 * 2)), u'2 minutes ago')
-        self.assertEqual(age(n - delt(hours=1)), u'1 hour ago')
-        self.assertEqual(age(n - delt(hours=24)), u'1 day ago')
-        self.assertEqual(age(n - delt(hours=24 * 5)), u'5 days ago')
-        self.assertEqual(age(n - delt(hours=24 * (calendar.mdays[prev_month]))),
-                         u'1 month ago')
-        self.assertEqual(age(n - delt(hours=24 * (calendar.mdays[prev_month] + 2))),
-                         u'1 month and 2 days ago')
-        self.assertEqual(age(n - delt(hours=24 * 400)), u'1 year and 1 month ago')
+        from dateutil import relativedelta
+        n = datetime.datetime(year=2012, month=5, day=17)
+        delt = lambda *args, **kwargs: relativedelta.relativedelta(*args, **kwargs)
+        self.assertEqual(age(n + delt(**age_args), now=n), expected)
+
+    @parameterized.expand([
 
-    def test_age_in_future(self):
-        import calendar
+        (dict(), u'just now'),
+        (dict(seconds=1), u'in 1 second'),
+        (dict(seconds=60 * 2), u'in 2 minutes'),
+        (dict(hours=1), u'in 1 hour'),
+        (dict(hours=24), u'in 1 day'),
+        (dict(hours=24 * 5), u'in 5 days'),
+        (dict(months=1), u'in 1 month'),
+        (dict(months=1, days=1), u'in 1 month and 1 day'),
+        (dict(years=1, months=1), u'in 1 year and 1 month')
+    ])
+    def test_age_in_future(self, age_args, expected):
         from rhodecode.lib.utils2 import age
-        n = datetime.datetime.now()
-        delt = lambda *args, **kwargs: datetime.timedelta(*args, **kwargs)
-        self.assertEqual(age(n), u'just now')
-        self.assertEqual(age(n + delt(seconds=1)), u'in 1 second')
-        self.assertEqual(age(n + delt(seconds=60 * 2)), u'in 2 minutes')
-        self.assertEqual(age(n + delt(hours=1)), u'in 1 hour')
-        self.assertEqual(age(n + delt(hours=24)), u'in 1 day')
-        self.assertEqual(age(n + delt(hours=24 * 5)), u'in 5 days')
-        self.assertEqual(age(n + delt(hours=24 * (calendar.mdays[n.month]))),
-                         u'in 1 month')
-        self.assertEqual(age(n + delt(hours=24 * (calendar.mdays[n.month] + 1))),
-                         u'in 1 month and 1 day')
-        self.assertEqual(age(n + delt(hours=24 * 400)), u'in 1 year and 1 month')
+        from dateutil import relativedelta
+        n = datetime.datetime(year=2012, month=5, day=17)
+        delt = lambda *args, **kwargs: relativedelta.relativedelta(*args, **kwargs)
+        self.assertEqual(age(n + delt(**age_args), now=n), expected)
 
     def test_tag_exctrator(self):
         sample = (
@@ -215,3 +213,83 @@
                 em = 'test@foo.com'
                 grav = gravatar_url(email_address=em, size=24)
                 assert grav == 'https://server.com/%s/%s' % (_md5(em), 24)
+
+    def _quick_url(self, text, tmpl="""<a class="revision-link" href="%s">%s</a>""", url_=None):
+        """
+        Changes `some text url[foo]` => `some text <a href="/">foo</a>
+
+        :param text:
+        """
+        import re
+        # quickly change expected url[] into a link
+        URL_PAT = re.compile(r'(?:url\[)(.+?)(?:\])')
+
+        def url_func(match_obj):
+            _url = match_obj.groups()[0]
+            return tmpl % (url_ or '/some-url', _url)
+        return URL_PAT.sub(url_func, text)
+
+    @parameterized.expand([
+      ("",
+       ""),
+      ("git-svn-id: https://svn.apache.org/repos/asf/libcloud/trunk@1441655 13f79535-47bb-0310-9956-ffa450edef68",
+       "git-svn-id: https://svn.apache.org/repos/asf/libcloud/trunk@1441655 13f79535-47bb-0310-9956-ffa450edef68"),
+      ("from rev 000000000000",
+       "from rev url[000000000000]"),
+      ("from rev 000000000000123123 also rev 000000000000",
+       "from rev url[000000000000123123] also rev url[000000000000]"),
+      ("this should-000 00",
+       "this should-000 00"),
+      ("longtextffffffffff rev 123123123123",
+       "longtextffffffffff rev url[123123123123]"),
+      ("rev ffffffffffffffffffffffffffffffffffffffffffffffffff",
+       "rev ffffffffffffffffffffffffffffffffffffffffffffffffff"),
+      ("ffffffffffff some text traalaa",
+       "url[ffffffffffff] some text traalaa"),
+       ("""Multi line
+       123123123123
+       some text 123123123123
+       sometimes !
+       """,
+       """Multi line
+       url[123123123123]
+       some text url[123123123123]
+       sometimes !
+       """)
+    ])
+    def test_urlify_changesets(self, sample, expected):
+        def fake_url(self, *args, **kwargs):
+            return '/some-url'
+
+        expected = self._quick_url(expected)
+
+        with mock.patch('pylons.url', fake_url):
+            from rhodecode.lib.helpers import urlify_changesets
+            self.assertEqual(urlify_changesets(sample, 'repo_name'), expected)
+
+    @parameterized.expand([
+      ("",
+       "",
+       ""),
+      ("https://svn.apache.org/repos",
+       "url[https://svn.apache.org/repos]",
+       "https://svn.apache.org/repos"),
+      ("http://svn.apache.org/repos",
+       "url[http://svn.apache.org/repos]",
+       "http://svn.apache.org/repos"),
+      ("from rev a also rev http://google.com",
+       "from rev a also rev url[http://google.com]",
+       "http://google.com"),
+       ("""Multi line
+       https://foo.bar.com
+       some text lalala""",
+       """Multi line
+       url[https://foo.bar.com]
+       some text lalala""",
+       "https://foo.bar.com")
+    ])
+    def test_urlify_test(self, sample, expected, url_):
+        from rhodecode.lib.helpers import urlify_text
+        expected = self._quick_url(expected,
+                                   tmpl="""<a href="%s">%s</a>""", url_=url_)
+        self.assertEqual(urlify_text(sample), expected)
--- a/rhodecode/tests/test_validators.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/tests/test_validators.py	Sun Apr 07 18:37:22 2013 +0200
@@ -5,14 +5,13 @@
 from rhodecode.tests import *
 
 from rhodecode.model import validators as v
-from rhodecode.model.users_group import UsersGroupModel
+from rhodecode.model.users_group import UserGroupModel
 
 from rhodecode.model.meta import Session
 from rhodecode.model.repos_group import ReposGroupModel
 from rhodecode.config.routing import ADMIN_PREFIX
 from rhodecode.model.db import ChangesetStatus, Repository
 from rhodecode.model.changeset_status import ChangesetStatusModel
-from rhodecode.model.comment import ChangesetCommentsModel
 
 
 class TestReposGroups(unittest.TestCase):
@@ -21,7 +20,7 @@
         pass
 
     def tearDown(self):
-        pass
+        Session.remove()
 
     def test_Message_extractor(self):
         validator = v.ValidUsername()
@@ -51,25 +50,25 @@
         self.assertEqual(TEST_USER_ADMIN_LOGIN,
                          validator.to_python(TEST_USER_ADMIN_LOGIN))
 
-    def test_ValidUsersGroup(self):
-        validator = v.ValidUsersGroup()
+    def test_ValidUserGroup(self):
+        validator = v.ValidUserGroup()
         self.assertRaises(formencode.Invalid, validator.to_python, 'default')
         self.assertRaises(formencode.Invalid, validator.to_python, '.,')
 
-        gr = UsersGroupModel().create('test')
-        gr2 = UsersGroupModel().create('tes2')
+        gr = UserGroupModel().create('test')
+        gr2 = UserGroupModel().create('tes2')
         Session.commit()
         self.assertRaises(formencode.Invalid, validator.to_python, 'test')
         assert gr.users_group_id != None
-        validator = v.ValidUsersGroup(edit=True,
+        validator = v.ValidUserGroup(edit=True,
                                     old_data={'users_group_id':
                                               gr2.users_group_id})
 
         self.assertRaises(formencode.Invalid, validator.to_python, 'test')
         self.assertRaises(formencode.Invalid, validator.to_python, 'TesT')
         self.assertRaises(formencode.Invalid, validator.to_python, 'TEST')
-        UsersGroupModel().delete(gr)
-        UsersGroupModel().delete(gr2)
+        UserGroupModel().delete(gr)
+        UserGroupModel().delete(gr2)
         Session.commit()
 
     def test_ValidReposGroup(self):
@@ -79,7 +78,8 @@
                           {'group_name': HG_REPO, })
         gr = model.create(group_name='test_gr', group_description='desc',
                           parent=None,
-                          just_db=True)
+                          just_db=True,
+                          owner=TEST_USER_ADMIN_LOGIN)
         self.assertRaises(formencode.Invalid,
                           validator.to_python, {'group_name': gr.group_name, })
 
@@ -150,7 +150,8 @@
 
         gr = ReposGroupModel().create(group_name='group_test',
                                       group_description='desc',
-                                      parent=None,)
+                                      parent=None,
+                                      owner=TEST_USER_ADMIN_LOGIN)
         self.assertRaises(formencode.Invalid,
                           validator.to_python, {'repo_name': gr.group_name})
 
@@ -219,12 +220,16 @@
         self.assertRaises(formencode.Invalid, validator.to_python, 'err')
 
     def test_LdapLibValidator(self):
-        validator = v.LdapLibValidator()
-        self.assertRaises(v.LdapImportError, validator.to_python, 'err')
+        if ldap_lib_installed:
+            validator = v.LdapLibValidator()
+            self.assertEqual("DN", validator.to_python('DN'))
+        else:
+            validator = v.LdapLibValidator()
+            self.assertRaises(v.LdapImportError, validator.to_python, 'err')
 
     def test_AttrLoginValidator(self):
         validator = v.AttrLoginValidator()
-        self.assertRaises(formencode.Invalid, validator.to_python, 123)
+        self.assertEqual('DN_attr', validator.to_python('DN_attr'))
 
     def test_NotReviewedRevisions(self):
         repo_id = Repository.get_by_repo_name(HG_REPO).repo_id
--- a/rhodecode/tests/vcs/conf.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/tests/vcs/conf.py	Sun Apr 07 18:37:22 2013 +0200
@@ -7,6 +7,7 @@
 import hashlib
 import tempfile
 import datetime
+import shutil
 from rhodecode.tests import *
 from utils import get_normalized_path
 from os.path import join as jn
@@ -58,5 +59,6 @@
 
 PACKAGE_DIR = os.path.abspath(os.path.join(
     os.path.dirname(__file__), '..'))
-
-TEST_USER_CONFIG_FILE = jn(THIS, 'aconfig')
+_dest = jn(TESTS_TMP_PATH,'aconfig')
+shutil.copy(jn(THIS, 'aconfig'), _dest)
+TEST_USER_CONFIG_FILE = _dest
--- a/rhodecode/websetup.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/rhodecode/websetup.py	Sun Apr 07 18:37:22 2013 +0200
@@ -48,4 +48,4 @@
     dbmanage.populate_default_permissions()
     Session().commit()
     load_environment(conf.global_conf, conf.local_conf, initial=True)
-    dbmanage.finish()
+    DbManage.check_waitress()
--- a/setup.py	Mon Mar 11 17:59:38 2013 +0100
+++ b/setup.py	Sun Apr 07 18:37:22 2013 +0200
@@ -33,14 +33,14 @@
 is_windows = __platform__ in _get_meta_var('PLATFORM_WIN', _metadata)
 
 requirements = [
-    "waitress==0.8.1",
+    "waitress==0.8.2",
     "webob==1.0.8",
     "webtest==1.4.3",
     "Pylons==1.0.0",
     "Beaker==1.6.4",
     "WebHelpers==1.3",
     "formencode==1.2.4",
-    "SQLAlchemy==0.7.9",
+    "SQLAlchemy==0.7.10",
     "Mako==0.7.3",
     "pygments>=1.5",
     "whoosh>=2.4.0,<2.5",
@@ -62,10 +62,10 @@
     requirements.append("argparse")
 
 if is_windows:
-    requirements.append("mercurial==2.4.2")
+    requirements.append("mercurial==2.5.4")
 else:
     requirements.append("py-bcrypt")
-    requirements.append("mercurial==2.4.2")
+    requirements.append("mercurial==2.5.4")
 
 
 dependency_links = [
@@ -92,8 +92,9 @@
 # additional files that goes into package itself
 package_data = {'rhodecode': ['i18n/*/LC_MESSAGES/*.mo', ], }
 
-description = ('Mercurial repository browser/management with '
-               'build in push/pull server and full text search')
+description = ('RhodeCode is a fast and powerful management tool '
+               'for Mercurial and GIT with a built in push/pull server, '
+               'full text search and code-review.')
 keywords = ' '.join(['rhodecode', 'rhodiumcode', 'mercurial', 'git',
                      'code review', 'repo groups', 'ldap'
                       'repository management', 'hgweb replacement'
@@ -158,11 +159,14 @@
     main = pylons.util:PylonsInstaller
 
     [paste.global_paster_command]
-    setup-rhodecode=rhodecode.config.setup_rhodecode:SetupCommand
-    cleanup-repos=rhodecode.lib.cleanup:CleanupCommand
-    update-repoinfo=rhodecode.lib.update_repoinfo:UpdateCommand
+    setup-rhodecode=rhodecode.lib.paster_commands.setup_rhodecode:Command
+    cleanup-repos=rhodecode.lib.paster_commands.cleanup:Command
+    update-repoinfo=rhodecode.lib.paster_commands.update_repoinfo:Command
+    make-rcext=rhodecode.lib.paster_commands.make_rcextensions:Command
+    repo-scan=rhodecode.lib.paster_commands.repo_scan:Command
+    cache-keys=rhodecode.lib.paster_commands.cache_keys:Command
+    ishell=rhodecode.lib.paster_commands.ishell:Command
     make-index=rhodecode.lib.indexers:MakeIndex
-    make-rcext=rhodecode.config.rcextensions.make_rcextensions:MakeRcExt
     upgrade-db=rhodecode.lib.dbmigrate:UpgradeDb
     celeryd=rhodecode.lib.celerypylons.commands:CeleryDaemonCommand
     """,
--- a/test.ini	Mon Mar 11 17:59:38 2013 +0100
+++ b/test.ini	Sun Apr 07 18:37:22 2013 +0200
@@ -25,39 +25,111 @@
 #smtp_port = 
 #smtp_use_tls = false
 #smtp_use_ssl = true
-# Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.)
+## Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.)
 #smtp_auth = 
 
 [server:main]
-##nr of threads to spawn
-threadpool_workers = 5
+## PASTE
+## nr of threads to spawn
+#threadpool_workers = 5
 
-##max request before thread respawn
-threadpool_max_requests = 2
+## max request before thread respawn
+#threadpool_max_requests = 10
 
-##option to use threads of process
-use_threadpool = true
+## option to use threads of process
+#use_threadpool = true
+
+#use = egg:Paste#http
 
-use = egg:Paste#http
-#use = egg:waitress#main
+## WAITRESS
+threads = 5
+## 100GB
+max_request_body_size = 107374182400
+use = egg:waitress#main
+
 host = 127.0.0.1
 port = 5000
 
+## prefix middleware for rc
+#[filter:proxy-prefix]
+#use = egg:PasteDeploy#prefix
+#prefix = /<your-prefix>
+
 [app:main]
 use = egg:rhodecode
+## enable proxy prefix middleware
+#filter-with = proxy-prefix
+
 full_stack = true
 static_files = true
-lang=en
+## Optional Languages
+## en, fr, ja, pt_BR, zh_CN, zh_TW, pl
+lang = en
 cache_dir = /tmp/rc/data
 index_dir = /tmp/rc/index
-app_instance_uuid = develop-test
+
+## uncomment and set this path to use archive download cache
+#archive_cache_dir = /tmp/tarballcache
+
+## change this to unique ID for security
+app_instance_uuid = rc-production
+
+## cut off limit for large diffs (size in bytes)
 cut_off_limit = 256000
+
+## use cache version of scm repo everywhere
+vcs_full_cache = false
+
+## force https in RhodeCode, fixes https redirects, assumes it's always https
 force_https = false
+
+## use Strict-Transport-Security headers
+use_htsts = false
+
+## number of commits stats will parse on each iteration
 commit_parse_limit = 25
+
+## number of items displayed in lightweight dashboard before paginating is shown
+dashboard_items = 100
+
+## use gravatar service to display avatars
 use_gravatar = true
+
+## path to git executable
+git_path = git
+
+## git rev filter option, --all is the default filter, if you need to
+## hide all refs in changelog switch this to --branches --tags
+git_rev_filter=--all
+
+## RSS feed options
+rss_cut_off_limit = 256000
+rss_items_per_page = 10
+rss_include_diff = false
+
+## options for showing and identifying changesets
+show_sha_length = 12
+show_revision_number = true
+
+
+## alternative_gravatar_url allows you to use your own avatar server application
+## the following parts of the URL will be replaced
+## {email}        user email
+## {md5email}     md5 hash of the user email (like at gravatar.com)
+## {size}         size of the image that is expected from the server application
+## {scheme}       http/https from RhodeCode server
+## {netloc}       network location from RhodeCode server
+#alternative_gravatar_url = http://myavatarserver.com/getbyemail/{email}/{size}
+#alternative_gravatar_url = http://myavatarserver.com/getbymd5/{md5email}?s={size}
+
+
+## container auth options
 container_auth_enabled = false
 proxypass_auth_enabled = false
-	
+
+## default encoding used to convert from and to unicode
+## can be also a comma seperated list of encoding in case of mixed encodings
+default_encoding = utf8
 
 ## overwrite schema of clone url
 ## available vars:
@@ -79,7 +151,8 @@
 issue_pat = (?:\s*#)(\d+)
 
 ## server url to the issue, each {id} will be replaced with match
-## fetched from the regex and {repo} is replaced with repository name
+## fetched from the regex and {repo} is replaced with full repository name
+## including groups {repo_name} is replaced with just name of repo
 
 issue_server_link = https://myissueserver.com/{repo}/issue/{id}
 
@@ -88,17 +161,32 @@
 
 issue_prefix = #
 
+## issue_pat, issue_server_link, issue_prefix can have suffixes to specify
+## multiple patterns, to other issues server, wiki or others
+## below an example how to create a wiki pattern 
+#  #wiki-some-id -> https://mywiki.com/some-id
+
+#issue_pat_wiki = (?:wiki-)(.+)
+#issue_server_link_wiki = https://mywiki.com/{id}
+#issue_prefix_wiki = WIKI-
+
+
 ## instance-id prefix
 ## a prefix key for this instance used for cache invalidation when running 
 ## multiple instances of rhodecode, make sure it's globally unique for 
 ## all running rhodecode instances. Leave empty if you don't use it
-instance_id =
+instance_id = 
 
 ## alternative return HTTP header for failed authentication. Default HTTP
 ## response is 401 HTTPUnauthorized. Currently HG clients have troubles with 
 ## handling that. Set this variable to 403 to return HTTPForbidden
 auth_ret_code =
 
+## locking return code. When repository is locked return this HTTP code. 2XX
+## codes don't break the transactions while 4XX codes do
+lock_ret_code = 423
+
+
 ####################################
 ###        CELERY CONFIG        ####
 ####################################
@@ -123,7 +211,7 @@
 celeryd.log.level = debug
 celeryd.max.tasks.per.child = 1
 
-#tasks will never be sent to the queue, but executed locally instead.
+## tasks will never be sent to the queue, but executed locally instead.
 celery.always.eager = false
 
 ####################################
@@ -166,39 +254,125 @@
 ## The storage uses the Container API 
 ## that is also used by the cache system.
 
-## db session example
-
+## db session ##
 #beaker.session.type = ext:database
 #beaker.session.sa.url = postgresql://postgres:qwe@localhost/rhodecode
 #beaker.session.table_name = db_session 
 
-## encrypted cookie session, good for many instances
+## encrypted cookie client side session, good for many instances ##
 #beaker.session.type = cookie
 
-beaker.session.type = file
+## file based cookies (default) ##
+#beaker.session.type = file
+
+
 beaker.session.key = rhodecode
-# secure cookie requires AES python libraries
-#beaker.session.encrypt_key = g654dcno0-9873jhgfreyu
-#beaker.session.validate_key = 9712sds2212c--zxc123
-beaker.session.timeout = 36000
+## secure cookie requires AES python libraries
+#beaker.session.encrypt_key = <key_for_encryption>
+#beaker.session.validate_key = <validation_key>
+
+## sets session as invalid if it haven't been accessed for given amount of time
+beaker.session.timeout = 3600
 beaker.session.httponly = true
+#beaker.session.cookie_path = /<your-prefix>
 
 ## uncomment for https secure cookie
 beaker.session.secure = false
 
-##auto save the session to not to use .save()
+## auto save the session to not to use .save()
 beaker.session.auto = False
 
-##true exire at browser close
+## default cookie expiration time in seconds `true` expire at browser close ##
 #beaker.session.cookie_expires = 3600
 
 
+############################
+## ERROR HANDLING SYSTEMS ##
+############################
+
+####################
+### [errormator] ###
+####################
+
+## Errormator is tailored to work with RhodeCode, see 
+## http://errormator.com for details how to obtain an account
+## you must install python package `errormator_client` to make it work
+
+## errormator enabled
+errormator = false
+
+errormator.server_url = https://api.errormator.com
+errormator.api_key = YOUR_API_KEY
+
+## TWEAK AMOUNT OF INFO SENT HERE
+
+## enables 404 error logging (default False)
+errormator.report_404 = false
+
+## time in seconds after request is considered being slow (default 1)
+errormator.slow_request_time = 1
+
+## record slow requests in application
+## (needs to be enabled for slow datastore recording and time tracking)
+errormator.slow_requests = true
+
+## enable hooking to application loggers
+# errormator.logging = true
+
+## minimum log level for log capture
+# errormator.logging.level = WARNING
+
+## send logs only from erroneous/slow requests
+## (saves API quota for intensive logging)
+errormator.logging_on_error = false
+
+## list of additonal keywords that should be grabbed from environ object 
+## can be string with comma separated list of words in lowercase
+## (by default client will always send following info:
+## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that 
+## start with HTTP* this list be extended with additional keywords here
+errormator.environ_keys_whitelist = 
+
+
+## list of keywords that should be blanked from request object 
+## can be string with comma separated list of words in lowercase
+## (by default client will always blank keys that contain following words 
+## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
+## this list be extended with additional keywords set here
+errormator.request_keys_blacklist =
+
+
+## list of namespaces that should be ignores when gathering log entries
+## can be string with comma separated list of namespaces
+## (by default the client ignores own entries: errormator_client.client)
+errormator.log_namespace_blacklist =  
+
+
+################
+### [sentry] ###
+################
+
+## sentry is a alternative open source error aggregator
+## you must install python packages `sentry` and `raven` to enable 
+
+sentry.dsn = YOUR_DNS
+sentry.servers =
+sentry.name =
+sentry.key =
+sentry.public_key =
+sentry.secret_key =
+sentry.project =
+sentry.site =
+sentry.include_paths =
+sentry.exclude_paths =
+
+
 ################################################################################
 ## WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT*  ##
 ## Debug mode will enable the interactive debugging tool, allowing ANYONE to  ##
 ## execute malicious code after an exception is raised.                       ##
 ################################################################################
-#set debug = false
+set debug = false
 
 ##################################
 ###       LOGVIEW CONFIG       ###
@@ -213,7 +387,6 @@
 sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode_test.sqlite
 #sqlalchemy.db1.url = postgresql://postgres:qwe@localhost/rhodecode_test
 #sqlalchemy.db1.url = mysql://root:qwe@localhost/rhodecode_test
-
 sqlalchemy.db1.echo = false
 sqlalchemy.db1.pool_recycle = 3600
 sqlalchemy.db1.convert_unicode = true
@@ -225,10 +398,10 @@
 keys = root, routes, rhodecode, sqlalchemy, beaker, templates, whoosh_indexer
 
 [handlers]
-keys = console
+keys = console, console_sql
 
 [formatters]
-keys = generic, color_formatter
+keys = generic, color_formatter, color_formatter_sql
 
 #############
 ## LOGGERS ##
@@ -241,7 +414,7 @@
 level = DEBUG
 handlers = 
 qualname = routes.middleware
-# "level = DEBUG" logs the route matched and routing variables.
+## "level = DEBUG" logs the route matched and routing variables.
 propagate = 1
 
 [logger_beaker]
@@ -284,6 +457,12 @@
 level = NOTSET
 formatter = generic
 
+[handler_console_sql]
+class = StreamHandler
+args = (sys.stderr,)
+level = WARN
+formatter = generic
+
 ################
 ## FORMATTERS ##
 ################
@@ -296,3 +475,8 @@
 class=rhodecode.lib.colored_formatter.ColorFormatter
 format= %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
 datefmt = %Y-%m-%d %H:%M:%S
+
+[formatter_color_formatter_sql]
+class=rhodecode.lib.colored_formatter.ColorFormatterSql
+format= %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
+datefmt = %Y-%m-%d %H:%M:%S