diff --git a/migrations/versions/4651698510d7_.py b/migrations/versions/4651698510d7_.py
new file mode 100644
index 0000000000000000000000000000000000000000..e6f86c682e4e578882e887fb84be27cdbce3e392
--- /dev/null
+++ b/migrations/versions/4651698510d7_.py
@@ -0,0 +1,30 @@
+"""empty message
+
+Revision ID: 4651698510d7
+Revises: a06cc03bdef4
+Create Date: 2017-03-22 21:42:04.880972
+
+"""
+from alembic import op
+import sqlalchemy as sa
+
+
+# revision identifiers, used by Alembic.
+revision = '4651698510d7'
+down_revision = 'a06cc03bdef4'
+branch_labels = None
+depends_on = None
+
+
+def upgrade():
+    # ### commands auto generated by Alembic - please adjust! ###
+    op.add_column('defaultmetas', sa.Column('internal', sa.Boolean(), nullable=True))
+    op.add_column('metas', sa.Column('internal', sa.Boolean(), nullable=True))
+    # ### end Alembic commands ###
+
+
+def downgrade():
+    # ### commands auto generated by Alembic - please adjust! ###
+    op.drop_column('metas', 'internal')
+    op.drop_column('defaultmetas', 'internal')
+    # ### end Alembic commands ###
diff --git a/models/database.py b/models/database.py
index 71dda40261fa9d025cb21592f2a739701e7fba81..9e47ae541bc89aac923e35f668a4803a1960944e 100644
--- a/models/database.py
+++ b/models/database.py
@@ -203,7 +203,7 @@ class Protocol(DatabaseModel):
         for default_meta in self.protocoltype.metas:
             if default_meta.key in remarks:
                 value = remarks[default_meta.key].value.strip()
-                meta = Meta(protocol_id=self.id, name=default_meta.name, value=value)
+                meta = Meta(protocol_id=self.id, name=default_meta.name, value=value, internal=default_meta.internal)
                 db.session.add(meta)
         db.session.commit()
 
@@ -657,6 +657,7 @@ class DefaultMeta(DatabaseModel):
     protocoltype_id = db.Column(db.Integer, db.ForeignKey("protocoltypes.id"))
     key = db.Column(db.String)
     name = db.Column(db.String)
+    internal = db.Column(db.Boolean)
 
     def get_parent(self):
         return self.protocoltype
@@ -668,6 +669,7 @@ class Meta(DatabaseModel):
     protocol_id = db.Column(db.Integer, db.ForeignKey("protocols.id"))
     name = db.Column(db.String)
     value = db.Column(db.String)
+    internal = db.Column(db.Boolean)
 
     def get_parent(self):
         return self.protocol
diff --git a/tasks.py b/tasks.py
index 84f469760062bea64397f66d8fb4372d66fe1597..f08ea29a20c7ffda6d238ca58a363e0ca1db357f 100644
--- a/tasks.py
+++ b/tasks.py
@@ -505,7 +505,7 @@ def send_protocol_async(protocol_id, show_private):
         protocol = Protocol.query.filter_by(id=protocol_id).first()
         to_addr = protocol.protocoltype.private_mail if show_private else protocol.protocoltype.public_mail
         subject = "{}{}-Protokoll vom {}".format("Internes " if show_private else "", protocol.protocoltype.short_name, date_filter(protocol.date))
-        mail_content = render_template("protocol-mail.txt", protocol=protocol)
+        mail_content = render_template("protocol-mail.txt", protocol=protocol, show_private=show_private)
         appendix = [(document.name, document.as_file_like())
             for document in protocol.documents
             if show_private or not document.is_private
diff --git a/templates/protocol-mail.txt b/templates/protocol-mail.txt
index 4235afc93e22223e4335a6af3c7cecacfeed12b3..0cb09c8dd28c8f53db8a513e6ea8f3a1222aef5f 100644
--- a/templates/protocol-mail.txt
+++ b/templates/protocol-mail.txt
@@ -5,7 +5,9 @@ Datum: {{protocol.date|datify_long}}
 Zeit: von {{protocol.start_time|timify}} bis {{protocol.end_time|timify}}
 {% endif %}
 {% for meta in protocol.metas %}
+{% if not meta.internal or show_private %}
 {{meta.name}}: {{meta.value}}
+{% endif %}
 {% endfor %}
 
 Die Tagesordnung ist:
diff --git a/templates/protocol-show.html b/templates/protocol-show.html
index 1316ede0991847e359e163fbd4cc0b0843d8d818..9ce74b36dea23f485a7f4afc614deaa088a3b6f9 100644
--- a/templates/protocol-show.html
+++ b/templates/protocol-show.html
@@ -65,7 +65,9 @@
                 {% endif %}
                 {% if has_public_view_right %}
                     {% for meta in protocol.metas %}
-                        <p><strong>{{meta.name}}:</strong> {{meta.value}}</p>
+                        {% if not meta.internal or has_private_view_right %}
+                            <p><strong>{{meta.name}}:</strong> {{meta.value}}</p>
+                        {% endif %}
                     {% endfor %}
 		{% endif %}
             {% else %}
diff --git a/templates/protocol.tex b/templates/protocol.tex
index 2004b248fce043cf6f1ca226541e4583d4cc4617..1c757ba97e7b69544eaf36bd9c12f9ea3b1c4beb 100644
--- a/templates/protocol.tex
+++ b/templates/protocol.tex
@@ -27,7 +27,9 @@
     {\bf Datum:} & \VAR{protocol.date|datify_long|escape_tex}\\
 \ENV{endif}
 \ENV{for meta in protocol.metas}
-    {\bf \VAR{meta.name|escape_tex}:} & \VAR{meta.value|escape_tex}\\
+    \ENV{if not meta.internal or show_private}
+        {\bf \VAR{meta.name|escape_tex}:} & \VAR{meta.value|escape_tex}\\
+    \ENV{endif}
 \ENV{endfor}
 \end{tabular}
 \normalsize
diff --git a/templates/protocol.wiki b/templates/protocol.wiki
index 5cb8c6cdd0a1627f47d416680170c089fbd7cfc9..bc5e061b940be6bc59ea8b703ab627a3d69a5d47 100644
--- a/templates/protocol.wiki
+++ b/templates/protocol.wiki
@@ -7,7 +7,9 @@
 | zeit = von <var>protocol.start_time|timify</var> bis <var>protocol.end_time|timify</var>
 <env> endif </env>
 <env> for meta in protocol.metas </env>
+<env> if not meta.internal or not protocol.protocoltype.wiki_only_public </env>
 | <var>meta.name|lower</var> = <var>meta.value</var>
+<env> endif </env>
 <env> endfor </env>
 }}
 
diff --git a/views/forms.py b/views/forms.py
index 6ee8e928ad5a522dc193bb369d96d9749e65d13f..78bb64b1cc962bb304610db972166ca92361a47f 100644
--- a/views/forms.py
+++ b/views/forms.py
@@ -243,10 +243,12 @@ class TodoMailForm(FlaskForm):
 class MetaForm(FlaskForm):
     name = StringField("Name", validators=[InputRequired("Bitte gib den Namen der Metadaten an.")])
     value = StringField("Wert")
+    internal = BooleanField("Intern")
 
 class DefaultMetaForm(FlaskForm):
     key = StringField("Key", validators=[InputRequired("Bitte gib den Protokoll-Syntax-Schlüssel der Metadaten an.")])
     name = StringField("Name", validators=[InputRequired("Bitte gib den Namen der Metadaten an.")])
+    internal = BooleanField("Intern")
 
 class DecisionCategoryForm(FlaskForm):
     name = StringField("Name", validators=[InputRequired("Bitte gib den Namen der Kategorie an.")])
diff --git a/views/tables.py b/views/tables.py
index 4d98c4c2ea9a4707b552fa912221fd08553db5d7..e612dd9df7d5942a6041c26ad1a56b561e87a9ed 100644
--- a/views/tables.py
+++ b/views/tables.py
@@ -474,13 +474,14 @@ class DefaultMetasTable(Table):
         )
 
     def headers(self):
-        return ["Name", "Key", ""]
+        return ["Name", "Key", "Intern", ""]
 
     def row(self, meta):
         user = current_user()
         general_part = [
             meta.name,
             meta.key,
+            Table.bool(meta.internal)
         ]
         links = [
             Table.link(url_for("edit_defaultmeta", defaultmeta_id=meta.id), "Ändern"),
@@ -491,7 +492,6 @@ class DefaultMetasTable(Table):
 
 class DecisionCategoriesTable(Table):
     def __init__(self, categories, protocoltype):
-        print(categories)
         super().__init__(
             "Beschlusskategorien",
             categories,