diff --git a/db/db.ddl b/db/db.ddl
index 7e8b2506b98551051e56c183fb00e46c327dcc79..aba72c06f8c2f04550d3a39047f88d80c3b820c8 100644
--- a/db/db.ddl
+++ b/db/db.ddl
@@ -52,7 +52,8 @@ CREATE TABLE places (
 	code		varchar(255)	UNIQUE COLLATE "cs_CZ",		-- zkratka pro zadávání
 	type		place_type	NOT NULL,
 	nuts		varchar(255)	UNIQUE DEFAULT NULL,		-- evropský NUTS/LAU kód regionu
-	note		text		NOT NULL DEFAULT ''		-- uživatelská poznámka
+	note		text		NOT NULL DEFAULT '',		-- uživatelská poznámka
+	hidden		boolean	NOT NULL DEFAULT false			-- schovat pro účastníky
 );
 
 CREATE INDEX places_parent_index ON places (parent);
diff --git a/db/upgrade-20211120.sql b/db/upgrade-20211120.sql
new file mode 100644
index 0000000000000000000000000000000000000000..791f02aa9f96d571137085877301eddf3df59a7a
--- /dev/null
+++ b/db/upgrade-20211120.sql
@@ -0,0 +1,4 @@
+SET ROLE 'mo_osmo';
+
+ALTER TABLE places ADD COLUMN
+	hidden		boolean	NOT NULL DEFAULT false;
diff --git a/mo/db.py b/mo/db.py
index 7a98d8d170927343038837c5280186bc0e36b6eb..464a10db04b5290d23ff2d3987d1a78476d04f6b 100644
--- a/mo/db.py
+++ b/mo/db.py
@@ -107,6 +107,7 @@ class Place(Base):
     type = Column(Enum(PlaceType, name='place_type'), nullable=False)
     nuts = Column(String(255), unique=True, server_default=text("NULL::character varying"))
     note = Column(Text, nullable=False, server_default=text("''::text"))
+    hidden = Column(Boolean, server_default=text("false"), nullable=False)
 
     parent_place = relationship('Place', primaryjoin='Place.parent == Place.place_id', remote_side='Place.place_id')
     children = relationship('Place')
diff --git a/mo/web/api.py b/mo/web/api.py
index b6ba68baabdc576c2a0cfb71d6ccd0c2f9495192..1f0ac5c747a67b347c912dcb2e32ff2c0525a6da 100644
--- a/mo/web/api.py
+++ b/mo/web/api.py
@@ -27,6 +27,7 @@ def api_find_town():
         places = (db.get_session().query(db.Place)
                   .filter_by(level=3)
                   .filter(func.lower(db.f_unaccent(db.Place.name)).like(func.lower(db.f_unaccent(query + '%'))))
+                  .filter(db.Place.hidden == False)
                   .options(joinedload(db.Place.parent_place))
                   .order_by(db.Place.name, db.Place.place_id)
                   .limit(max_places)
@@ -59,6 +60,7 @@ def api_get_schools():
     places = (db.get_session().query(db.Place)
               .filter_by(level=4, type=db.PlaceType.school, parent=town_id)
               .options(joinedload(db.Place.school))
+              .filter(db.Place.hidden == False)
               .order_by(db.Place.name)
               .all())
 
diff --git a/mo/web/org_place.py b/mo/web/org_place.py
index 7ffbc4a3a6d8a2d1dde7af974d80bf0f3def8e44..e63cf5966c951aa9694cdcd6295386a028f44636 100644
--- a/mo/web/org_place.py
+++ b/mo/web/org_place.py
@@ -66,6 +66,9 @@ class PlaceEditForm(FlaskForm):
         description="Pro okresy a výše"
     )
     note = mo_fields.String('Poznámka')
+    hidden = wtforms.BooleanField(
+        'Skrýt (účastníkům se místo nebude zobrazovat při výběru školy v přihlašování)'
+    )
     submit = wtforms.SubmitField('Uložit')
 
 
diff --git a/mo/web/templates/org_place.html b/mo/web/templates/org_place.html
index 0baf84755988aa855b3253980d56623bfbfe4afb..d7b4a0e0a94fba10369d661eaf50d6a05ecb298b 100644
--- a/mo/web/templates/org_place.html
+++ b/mo/web/templates/org_place.html
@@ -18,6 +18,7 @@
 	<tr><td>NUTS/LAU:<td>{{ place.nuts or '–' }}
 {% endif %}
 	<tr><td>Poznámka:<td>{{ place.note or '–' }}
+	<tr><td>Skryté:<td><div class="{% if place.hidden %}warning-text{% endif %}">{{ place.hidden | yes_no }}</div>
 	</table>
 	<div class="btn-group" role="group">
 {% if can_edit %}
diff --git a/mo/web/templates/org_user.html b/mo/web/templates/org_user.html
index 9155eb29c953a2f8fda028848f6c0a1ca34811cc..2a5615c4ad0b80018c9f8059bdd6eda0627aa81e 100644
--- a/mo/web/templates/org_user.html
+++ b/mo/web/templates/org_user.html
@@ -10,7 +10,7 @@
 {% if user.is_admin %}<tr><td>Správce:<td>ano{% endif %}
 {% if user.is_org %}<tr><td>Organizátor:<td>ano{% endif %}
 <tr><td>Účet založen:<td>{{ user.created_at|timeformat }}
-<tr><td>Poslední přihlášení:{% if user.last_login_at %}<td>{{ user.last_login_at|timeformat }}{% else %}<td class="error"><i>Zatím nepřihlášen</i>{% endif %}
+<tr><td>Poslední přihlášení:{% if user.last_login_at %}<td>{{ user.last_login_at|timeformat }}{% else %}<td class="warning-text"><i>Zatím nepřihlášen</i>{% endif %}
 {% if user.reset_at %}<tr><td>Reset hesla:<td>{{ user.reset_at|timeformat }}{% endif %}
 <tr><td>Poznámka:<td style="white-space: pre-line;">{{ user.note }}
 <tr><td>Testovací účet:<td>{{ user.is_test|yes_no }}
diff --git a/static/mo.css b/static/mo.css
index 7f1d5fec2eaa30ec829c9961512fb83402b6be1d..91cfe734ef48aac2f952406663a6000bf80aed4d 100644
--- a/static/mo.css
+++ b/static/mo.css
@@ -74,6 +74,11 @@ span.unknown {
 	text-decoration: underline dashed;
 }
 
+.warning-text {
+	color: red;
+	font-weight: bold;
+}
+
 /* Tables */
 
 table.data {