diff --git a/src/backoffice/forms.py b/src/backoffice/forms.py
index a9440699e2d959f6bf3d010ea0c68fa47c04a7ad..6c1aef84c0ebd2885960c7a7440c4bd9547d456f 100644
--- a/src/backoffice/forms.py
+++ b/src/backoffice/forms.py
@@ -11,9 +11,10 @@ from django.core.validators import validate_slug
 from core.base_forms import TranslatedFieldsForm
 from core.integrations import Hangar, IntegrationError, WorkAdventure
 from core.models import Application, Assembly, AssemblyMember, Conference, Event, PlatformUser, Room, RoomLink, \
-    ScheduleSource, WorkadventureTexture, StaticPageRevision
+    ScheduleSource, WorkadventureTexture, StaticPageRevision, StaticPage
 from core.utils import str2timedelta
 
+from modeltranslation.settings import AVAILABLE_LANGUAGES
 
 logger = logging.getLogger(__name__)
 
@@ -505,17 +506,14 @@ class CreateAssemblyRoomLinkForm(forms.ModelForm):
         fields = ['name', 'link_type', 'link']
 
 
-class StaticPageForm(TranslatedFieldsForm):
+class StaticPageCreateForm(forms.ModelForm):
     class Meta:
-        model = StaticPageRevision
-        fields = ['title', 'body', 'is_draft']
+        model = StaticPage
+        fields = ['slug', 'language']
 
-    publish = forms.BooleanField(required=False)
-
-    def clean_publish(self):
-        if self.cleaned_data['is_draft'] and self.cleaned_data['publish']:
-            raise ValidationError(_('StaticPage__cannot_publish_draft'))
-        return self.cleaned_data['publish']
+    language = forms.CharField(widget=forms.Select(choices=[(lang, lang) for lang in AVAILABLE_LANGUAGES]), required=True)
+    title = forms.CharField(required=True)
+    body = forms.CharField(required=True, widget=forms.Textarea())
 
 
 class AssignBadgeForm(forms.Form):
diff --git a/src/backoffice/templates/backoffice/staticpage_list.html b/src/backoffice/templates/backoffice/staticpage_list.html
index c87279972e9078ed0bca339cc1be4b9624f4c9d2..5c427b75d6f30bc6ddf0dcf755d29ae86e92948b 100644
--- a/src/backoffice/templates/backoffice/staticpage_list.html
+++ b/src/backoffice/templates/backoffice/staticpage_list.html
@@ -14,6 +14,7 @@
         <tr>
           <th>{% trans "StaticPage__slug" %}</th>
           <th>{% trans "StaticPage__title" %}</th>
+          <th>{% trans "StaticPage__language" %}</th>
           <th>{% trans "StaticPage__last_edited_by" %}</th>
           <th>{% trans "StaticPage__last_edited_at" %}</th>
         </tr>
@@ -23,6 +24,7 @@
         <tr class="{% if page.public_revision == 0 %}text-dim{% endif %}">
           <td><a href="{% url 'backoffice:page-detail' pk=page.pk %}">{{ page.slug }}</a></td>
           <td>{{ page.title }}</td>
+          <td>{{ page.language }}</td>
           <td>{{ page.last_revision_details.author | default:"-" }}</td>
           <td>{{ page.last_revision_details.timestamp | date:"DATETIME_FORMAT" }}</td>
         </tr>
diff --git a/src/backoffice/views/pages.py b/src/backoffice/views/pages.py
index d0b84518502d00916f7a9accd12030b3de826fd9..0bb7922bd91afe83c050611babda4b1c6e878e91 100644
--- a/src/backoffice/views/pages.py
+++ b/src/backoffice/views/pages.py
@@ -16,7 +16,7 @@ from django.utils.translation import gettext_lazy as _, get_language
 
 from core.models import StaticPage, StaticPageRevision
 
-from ..forms import StaticPageForm
+from ..forms import StaticPageCreateForm
 from .mixins import ConferenceMixin
 
 
@@ -45,7 +45,8 @@ class PagesView(ConferenceMixin, ListView):
     def get_queryset(self, *args, **kwargs):
         last_revision_details = StaticPageRevision.objects.filter(page=OuterRef('pk'), pk=OuterRef('public_revision'))\
             .values(data=LastRevisionJSONObject(author=F('author__username'), timestamp=F('timestamp')))[0:1]
-        return StaticPage.objects.accessible_by_user(conference=self.conference, user=self.request.user, language=get_language())\
+        return StaticPage.objects.accessible_by_user(conference=self.conference, user=self.request.user, language=None)\
+            .order_by('slug', 'language')\
             .annotate(last_revision_details=last_revision_details)
 
     def get_context_data(self, **kwargs):
@@ -57,16 +58,14 @@ class PagesView(ConferenceMixin, ListView):
         return context
 
 
-class NewPageView(ConferenceMixin, CreateView):
+class NewPageView(ConferenceMixin, FormView):
     permission_required = ('core.static_pages')
-    model = StaticPage
-    fields = ['slug']
+    form_class = StaticPageCreateForm
     template_name = 'backoffice/staticpage_form.html'
 
     def post(self, request, *args, **kwargs):
         try:
             response = super().post(request, *args, **kwargs)
-
         except IntegrityError:
             messages.error(request, _('StaticPage__slug__duplicate'))
             response = self.get(request, *args, **kwargs)
@@ -74,7 +73,17 @@ class NewPageView(ConferenceMixin, CreateView):
         return response
 
     def form_valid(self, form):
-        form.instance.conference = self.conference
+        static_page = form.save(commit=False)
+        static_page.conference = self.conference
+        static_page.save()
+
+        revision = StaticPageRevision(page=static_page, title=form.cleaned_data['title'], author=self.request.user, body=form.cleaned_data['body'])
+        revision.save()
+        revision.set_public()
+        revision.save()
+
+        self.object = static_page
+
         return super().form_valid(form)
 
     def get_context_data(self, **kwargs):
diff --git a/src/core/models/pages.py b/src/core/models/pages.py
index e1662f90bbeda680afa18e095e5df4a9bea54d51..5140b32eafb100444e2fe5601005b635ce0cc21f 100644
--- a/src/core/models/pages.py
+++ b/src/core/models/pages.py
@@ -43,8 +43,11 @@ for (prefix, group) in settings.STATIC_PAGE_NAMESPACES:
 
 
 class StaticPageManager(models.Manager):
-    def accessible_by_user(self, user: PlatformUser, conference: Conference, language: str = ''):
-        qs = self.get_queryset().filter(language=language, conference=conference)
+    def accessible_by_user(self, user: PlatformUser, conference: Conference, language: Optional[str] = ''):
+        if language is not None:
+            qs = self.get_queryset().filter(language=language, conference=conference)
+        else:
+            qs = self.get_queryset().filter(conference=conference)
 
         # for global staff apply no more limits
         if user.is_superuser or user.is_staff: