diff --git a/data/database.py b/data/database.py
index 1ca74698a..a4adabc7b 100644
--- a/data/database.py
+++ b/data/database.py
@@ -582,8 +582,9 @@ class RepositoryTag(BaseModel):
 
 
 class TagManifest(BaseModel):
-  tag = ForeignKeyField(RepositoryTag)
-  digest = CharField(index=True)
+  tag = ForeignKeyField(RepositoryTag, index=True, unique=True)
+  digest = CharField(index=True, unique=True)
+  json_data = TextField()
 
 
 class BUILD_PHASE(object):
diff --git a/data/migrations/versions/2e09ad97b06c_add_missing_tag_manifest_table.py b/data/migrations/versions/2e09ad97b06c_add_missing_tag_manifest_table.py
new file mode 100644
index 000000000..9659ba2ae
--- /dev/null
+++ b/data/migrations/versions/2e09ad97b06c_add_missing_tag_manifest_table.py
@@ -0,0 +1,35 @@
+"""Add missing tag manifest table
+
+Revision ID: 2e09ad97b06c
+Revises: 2bf8af5bad95
+Create Date: 2015-07-22 16:10:42.549566
+
+"""
+
+# revision identifiers, used by Alembic.
+revision = '2e09ad97b06c'
+down_revision = '2bf8af5bad95'
+
+from alembic import op
+import sqlalchemy as sa
+
+
+def upgrade(tables):
+    ### commands auto generated by Alembic - please adjust! ###
+    op.create_table('tagmanifest',
+    sa.Column('id', sa.Integer(), nullable=False),
+    sa.Column('tag_id', sa.Integer(), nullable=False),
+    sa.Column('digest', sa.String(length=255), nullable=False),
+    sa.Column('json_data', sa.Text(), nullable=False),
+    sa.ForeignKeyConstraint(['tag_id'], ['repositorytag.id'], name=op.f('fk_tagmanifest_tag_id_repositorytag')),
+    sa.PrimaryKeyConstraint('id', name=op.f('pk_tagmanifest'))
+    )
+    op.create_index('tagmanifest_digest', 'tagmanifest', ['digest'], unique=True)
+    op.create_index('tagmanifest_tag_id', 'tagmanifest', ['tag_id'], unique=True)
+    ### end Alembic commands ###
+
+
+def downgrade(tables):
+    ### commands auto generated by Alembic - please adjust! ###
+    op.drop_table('tagmanifest')
+    ### end Alembic commands ###