diff --git a/mo/web/jinja.py b/mo/web/jinja.py
index ad4c519df57ca6ddd2d0df7deb6b7555b7e1ef13..9d58039cb5806a54d42ae18817249b183a9b5d7b 100644
--- a/mo/web/jinja.py
+++ b/mo/web/jinja.py
@@ -11,7 +11,9 @@ import urllib.parse
 import mo.config as config
 import mo.db as db
 import mo.place_level
+import mo.points
 from mo.rights import Right
+from mo.util import assert_not_none
 import mo.util_format as util_format
 from mo.web import app
 from mo.web.org_place import place_breadcrumbs
@@ -139,14 +141,7 @@ def user_flags(u: db.User) -> Markup:
 
 @app.template_filter()
 def sol_editable_points(s: Optional[db.Solution]) -> str:
-    if s is None:
-        return 'X'
-    elif s.is_empty:
-        return 'P'
-    elif s.points is None:
-        return ""
-    else:
-        return util_format.format_decimal(s.points)
+    return mo.points.format_sol_editable_points(s)
 
 
 @app.template_filter()
@@ -161,4 +156,4 @@ def sol_display_points(s: Optional[db.Solution], user: bool = False) -> Union[st
         else:
             return Markup('<span class="unknown">?</span>')
     else:
-        return util_format.format_decimal(s.points)
+        return assert_not_none(util_format.format_decimal(s.points))