diff --git a/models/database.py b/models/database.py
index 05b0f061fa9ab17e8d7ae670b80053b94d485374..71dda40261fa9d025cb21592f2a739701e7fba81 100644
--- a/models/database.py
+++ b/models/database.py
@@ -115,10 +115,10 @@ class ProtocolType(DatabaseModel):
         ]
 
     @staticmethod
-    def get_public_protocoltypes(user):
+    def get_public_protocoltypes(user, check_networks=True):
         return [
             protocoltype for protocoltype in ProtocolType.query.all()
-            if protocoltype.has_public_view_right(user)
+            if protocoltype.has_public_view_right(user, check_networks=check_networks)
         ]
 
     @staticmethod
diff --git a/server.py b/server.py
index 3af97b5a8ef771c40c71ec0a516d9fdf404d3783..6af4ef9659b348b5c9100097ebf38aa3bf7e8e11 100755
--- a/server.py
+++ b/server.py
@@ -174,7 +174,7 @@ def index():
         ]
         def _todo_sort_key(todo):
             protocol = todo.get_first_protocol()
-            return protocol.date if protocol.date is not None else datetime.now().date()
+            return protocol.date if protocol is not None and protocol.date is not None else datetime.now().date()
         todos = sorted(todos, key=_todo_sort_key, reverse=True)
     todos_table = TodosTable(todos) if todos is not None else None
     return render_template("index.html", open_protocols=open_protocols, protocol=protocol, todos=todos)
@@ -357,7 +357,7 @@ def list_protocols():
     except (ValueError, TypeError):
         pass
     search_term = request.args.get("search")
-    protocoltypes = ProtocolType.get_public_protocoltypes(user)
+    protocoltypes = ProtocolType.get_public_protocoltypes(user, check_networks=False)
     search_form = ProtocolSearchForm(protocoltypes)
     if protocoltype_id is not None:
         search_form.protocoltype_id.data = protocoltype_id
@@ -489,7 +489,7 @@ def show_protocol(protocol):
         if (not document.is_private and document.protocol.has_public_view_right(user))
         or (document.is_private and document.protocol.protocoltype.has_private_view_right(user))
     ]
-    documents_table = DocumentsTable(visible_documents)
+    documents_table = DocumentsTable(visible_documents, protocol)
     document_upload_form = DocumentUploadForm()
     source_upload_form = KnownProtocolSourceUploadForm()
     time_diff = protocol.date - datetime.now().date()
@@ -963,7 +963,7 @@ def list_decisions():
     except (ValueError, TypeError):
         pass
     search_term = request.args.get("search")
-    protocoltypes = ProtocolType.get_public_protocoltypes(user)
+    protocoltypes = ProtocolType.get_public_protocoltypes(user, check_networks=False)
     decisioncategories = [
         category
         for protocoltype in protocoltypes
diff --git a/views/forms.py b/views/forms.py
index e6f228706288d5108e6b1164266533a2675a06cc..6ee8e928ad5a522dc193bb369d96d9749e65d13f 100644
--- a/views/forms.py
+++ b/views/forms.py
@@ -153,7 +153,7 @@ class NewProtocolForm(FlaskForm):
 
 class DocumentUploadForm(FlaskForm):
     document = FileField("Datei")
-    private = BooleanField("Intern")
+    is_private = BooleanField("Intern")
 
 class KnownProtocolSourceUploadForm(FlaskForm):
     source = FileField("Quellcode")
diff --git a/views/tables.py b/views/tables.py
index 253a73d2e1b51c8eef558d6bef58eec551eb1c50..4d98c4c2ea9a4707b552fa912221fd08553db5d7 100644
--- a/views/tables.py
+++ b/views/tables.py
@@ -58,10 +58,11 @@ class ProtocolsTable(Table):
         self.search_results = search_results
 
     def headers(self):
+        user = current_user()
         result = ["ID", "Sitzung", "Sitzung", "Datum"]
         state_part = ["Status"]
         search_part = ["Suchergebnis"]
-        login_part = ["Typ", "Löschen"]
+        login_part = ["Typ", ""]
         if self.search_results is None:
             result.extend(state_part)
         else:
@@ -97,6 +98,8 @@ class ProtocolsTable(Table):
                 result.append(Table.link(url_for("show_type", protocoltype_id=protocol.protocoltype.id), protocol.protocoltype.short_name))
                 if protocol.protocoltype.has_admin_right(user):
                     result.append(Table.link(url_for("delete_protocol", protocol_id=protocol.id), "Löschen", confirm="Bist du dir sicher, dass du das Protokoll {} löschen möchtest?".format(protocol.get_identifier())))
+                else:
+                    result.append("")
             else:
                 result.extend(["", ""])
         return result
@@ -210,10 +213,11 @@ class ProtocolTypeTable(SingleValueTable):
         calendar_part = [self.value.calendar if self.value.calendar is not None else ""]
         if not config.CALENDAR_ACTIVE:
             calendar_part = []
-        network_part = [
-            Table.bool(self.value.restrict_networks),
-            ", ".join(map(str.strip, self.value.allowed_networks.split(",")))
-        ]
+        network_part = [Table.bool(self.value.restrict_networks)]
+        if self.value.allowed_networks is not None:
+            network_part.append(", ".join(map(str.strip, self.value.allowed_networks.split(","))))
+        else:
+            network_part.append("")
         action_part = [Table.link(url_for("delete_type", protocoltype_id=self.value.id), "Löschen", confirm="Bist du dir sicher, dass du den Protokolltype {} löschen möchtest?".format(self.value.name))]
         if not self.value.has_admin_right(user):
             action_part = [""]
@@ -318,12 +322,12 @@ class TodosTable(Table):
     def row(self, todo):
         user = current_user()
         protocol = todo.get_first_protocol()
+        mobile_parts = [Table.link(url_for("show_todo", todo_id=todo.id), todo.get_state())]
+        if protocol is not None:
+            mobile_parts.append(Table.link(url_for("show_protocol", protocol_id=protocol.id), todo.protocoltype.short_name))
+        mobile_parts.append(todo.who)
         row = [
-            Markup("<br>").join([
-                Table.link(url_for("show_todo", todo_id=todo.id), todo.get_state()),
-                Table.link(url_for("show_protocol", protocol_id=protocol.id), todo.protocoltype.short_name),
-                todo.who
-            ]),
+            Markup("<br>").join(mobile_parts),
             Table.link(url_for("show_todo", todo_id=todo.id), todo.get_id()),
             todo.get_state(),
             Table.link(url_for("show_protocol", protocol_id=protocol.id), protocol.get_identifier())
@@ -405,14 +409,27 @@ class DecisionsTable(Table):
         return content_part + category_part + action_part
 
 class DocumentsTable(Table):
-    def __init__(self, documents):
+    def __init__(self, documents, protocol):
         super().__init__("Anhang", documents)
+        self.protocol = protocol
 
     def headers(self):
-        return ["ID", "Name", ""]
+        user = current_user()
+        general_headers = ["ID", "Name"]
+        visibility_headers = []
+        if self.protocol.has_private_view_right(user):
+            visibility_headers = ["Sichtbarkeit"]
+        action_headers=[""]
+        return general_headers + visibility_headers + action_headers
 
     def classes(self):
-        return [None, None, "hidden-xs"]
+        user = current_user()
+        general_part = [None, None]
+        visibility_part = []
+        if self.protocol.has_private_view_right(user):
+            visibility_part = [None]
+        action_part = ["hidden-xs"]
+        return general_part + visibility_part + action_part
 
     def row(self, document):
         user = current_user()
@@ -421,11 +438,15 @@ class DocumentsTable(Table):
             links.append(Table.link(url_for("print_document", document_id=document.id), "Drucken"))
         if document.protocol.protocoltype.has_admin_right(user):
             links.append(Table.link(url_for("delete_document", document_id=document.id), "Löschen", confirm="Bist du dir sicher, dass du das Dokument {} löschen willst?".format(document.name)))
-        return [
+        general_part = [
             document.id,
             Table.link(url_for("download_document", document_id=document.id), document.name),
-            Table.concat(links)
         ]
+        visibility_part = []
+        if document.protocol.has_private_view_right(user):
+            visibility_part = ["Intern" if document.is_private else "Öffentlich"]
+        action_part = [Table.concat(links)]
+        return general_part + visibility_part + action_part
 
 class TodoMailsTable(Table):
     def __init__(self, todomails):