diff --git a/app/inventory/forms.py b/app/inventory/forms.py
index 530b1512858cbcf8eae0a3ac34dcb4b01033968f..1f40e0dc49828dfc8915c9cb06ed5dfcda67af79 100644
--- a/app/inventory/forms.py
+++ b/app/inventory/forms.py
@@ -9,7 +9,7 @@ This module defines the inventory blueprint forms.
 :license: BSD 2-Clause, see LICENSE for more details.
 
 """
-from wtforms import SelectField, StringField, TextAreaField, validators
+from wtforms import SelectField, StringField, IntegerField, TextAreaField, validators
 from ..helpers import CSEntryForm
 from ..validators import Unique, RegexpList, ICS_ID_RE, MAC_ADDRESS_RE
 from .. import utils, models
@@ -27,6 +27,8 @@ class ItemForm(CSEntryForm):
                                      Unique(models.Item, 'ics_id')])
     serial_number = StringField('Serial number',
                                 validators=[validators.InputRequired()])
+    quantity = IntegerField('Quantity', default=1,
+                            validators=[validators.NumberRange(min=1)])
     manufacturer_id = SelectField('Manufacturer', coerce=utils.coerce_to_str_or_none)
     model_id = SelectField('Model', coerce=utils.coerce_to_str_or_none)
     location_id = SelectField('Location', coerce=utils.coerce_to_str_or_none)
diff --git a/app/inventory/views.py b/app/inventory/views.py
index 93327a2d7cc85ffa13a00169a1b88f599d902d90..5c8436009da1a2cdf96c785ecc4296b76f78a351 100644
--- a/app/inventory/views.py
+++ b/app/inventory/views.py
@@ -67,6 +67,7 @@ def retrieve_items():
                'created_at',
                'updated_at',
                'serial_number',
+               'quantity',
                'manufacturer',
                'model',
                'location',
@@ -84,6 +85,7 @@ def retrieve_items():
          utils.format_field(item.created_at),
          utils.format_field(item.updated_at),
          item.serial_number,
+         item.quantity,
          utils.format_field(item.manufacturer),
          utils.format_field(item.model),
          utils.format_field(item.location),
@@ -119,6 +121,7 @@ def create_item():
             session[key] = getattr(form, key).data
         item = models.Item(ics_id=form.ics_id.data,
                            serial_number=form.serial_number.data,
+                           quantity=form.quantity.data,
                            manufacturer_id=form.manufacturer_id.data,
                            model_id=form.model_id.data,
                            location_id=form.location_id.data,
@@ -171,6 +174,7 @@ def edit_item(ics_id):
         if item.ics_id.startswith(current_app.config['TEMPORARY_ICS_ID']):
             item.ics_id = form.ics_id.data
         item.serial_number = form.serial_number.data
+        item.quantity = form.quantity.data
         for key in ('manufacturer_id', 'model_id', 'location_id', 'status_id', 'parent_id'):
             setattr(item, key, getattr(form, key).data)
         new_addresses = form.mac_addresses.data.split()
diff --git a/app/models.py b/app/models.py
index ed58eedcb497bd64e90742984354a1a14d59ad96..f2b2f73147caf797129fb50aca7e2ecfd2ee3e81 100644
--- a/app/models.py
+++ b/app/models.py
@@ -273,6 +273,7 @@ class Item(CreatedMixin, db.Model):
     ics_id = db.Column(db.Text, unique=True, nullable=False,
                        index=True, default=get_temporary_ics_id)
     serial_number = db.Column(db.Text, nullable=False)
+    quantity = db.Column(db.Integer, nullable=False, default=1)
     manufacturer_id = db.Column(db.Integer, db.ForeignKey('manufacturer.id'))
     model_id = db.Column(db.Integer, db.ForeignKey('model.id'))
     location_id = db.Column(db.Integer, db.ForeignKey('location.id'))
@@ -340,6 +341,7 @@ class Item(CreatedMixin, db.Model):
                 parent = Item.query.get(version.parent_id)
             versions.append({
                 'updated_at': utils.format_field(version.updated_at),
+                'quantity': version.quantity,
                 'location': utils.format_field(version.location),
                 'status': utils.format_field(version.status),
                 'parent': utils.format_field(parent),
diff --git a/app/static/js/items.js b/app/static/js/items.js
index 364a509cbc8dc47ccbb6cbebf8cfbf0aa4b89356..017947a717814f39a20207db18d38055af964c86 100644
--- a/app/static/js/items.js
+++ b/app/static/js/items.js
@@ -65,11 +65,11 @@ $(document).ready(function() {
         "searchable": false
       },
       {
-        "targets": [5, 6, 7, 8],
+        "targets": [6, 7, 8, 9],
         "orderable": false
       },
       {
-        "targets": [1, 9],
+        "targets": [1, 10],
         "render": function(data, type, row) {
           // render funtion to create link to Item view page
           if ( data === null ) {
diff --git a/app/templates/inventory/create_item.html b/app/templates/inventory/create_item.html
index faf013f4edac3ceef2dbd22df3394df4a190c454..5cc2e4e2828a542c9f06d0d8cabd54aba0d2c9d4 100644
--- a/app/templates/inventory/create_item.html
+++ b/app/templates/inventory/create_item.html
@@ -8,6 +8,7 @@
     {{ form.hidden_tag() }}
     {{ render_field(form.ics_id) }}
     {{ render_field(form.serial_number) }}
+    {{ render_field(form.quantity) }}
     {{ render_field(form.manufacturer_id) }}
     {{ render_field(form.model_id) }}
     {{ render_field(form.location_id) }}
diff --git a/app/templates/inventory/edit_item.html b/app/templates/inventory/edit_item.html
index 1070849ef04b9ae12e035dedc1a4883c7e1200f1..9a2b187c87a155b0ee317564396b383b3d47e66c 100644
--- a/app/templates/inventory/edit_item.html
+++ b/app/templates/inventory/edit_item.html
@@ -22,6 +22,7 @@
       {{ render_field(form.ics_id, readonly=True) }}
     {% endif %}
     {{ render_field(form.serial_number) }}
+    {{ render_field(form.quantity) }}
     {{ render_field(form.manufacturer_id) }}
     {{ render_field(form.model_id) }}
     {{ render_field(form.location_id) }}
diff --git a/app/templates/inventory/items.html b/app/templates/inventory/items.html
index 9e4edba5c4a0c32aad7a028688ac81f12fdb6111..0940e5578425cc4cede52cfd618e0b648d58a94c 100644
--- a/app/templates/inventory/items.html
+++ b/app/templates/inventory/items.html
@@ -26,6 +26,7 @@
         <th>Created</th>
         <th>Updated</th>
         <th>Serial number</th>
+        <th>Quantity</th>
         <th>Manufacturer</th>
         <th>Model</th>
         <th>Location</th>
diff --git a/app/templates/inventory/view_item.html b/app/templates/inventory/view_item.html
index c695846942fc253d5d9feff5a01fc2abb3bfa575..8def1b3ed8e0e31650e38457aa881a78b2812744 100644
--- a/app/templates/inventory/view_item.html
+++ b/app/templates/inventory/view_item.html
@@ -24,6 +24,8 @@
     <dd class="col-sm-9">{{ format_datetime(item.updated_at) }}</dd>
     <dt class="col-sm-3">Serial number</dt>
     <dd class="col-sm-9">{{ item.serial_number }}</dd>
+    <dt class="col-sm-3">Quantity</dt>
+    <dd class="col-sm-9">{{ item.quantity }}</dd>
     <dt class="col-sm-3">Manufacturer</dt>
     <dd class="col-sm-9">{{ item.manufacturer }}</dd>
     <dt class="col-sm-3">Model</dt>
@@ -71,6 +73,7 @@
     <thead>
       <tr>
         <th>Updated</th>
+        <th>Quantity</th>
         <th>Location</th>
         <th>Status</th>
         <th>Parent</th>
@@ -80,6 +83,7 @@
       {% for version in item.history() %}
       <tr>
         <td>{{ version['updated_at'] }}</td>
+        <td>{{ version['quantity'] }}</td>
         <td>{{ version['location'] }}</td>
         <td>{{ version['status'] }}</td>
         <td>{{ link_to_item(version['parent']) }}</td>
diff --git a/tests/functional/test_web.py b/tests/functional/test_web.py
index 1d8dac33c9ceffec0bbddebcd782ffe2d7a63f78..644b41d6627b102a46f24b2e75a29c63e189cc43 100644
--- a/tests/functional/test_web.py
+++ b/tests/functional/test_web.py
@@ -80,4 +80,4 @@ def test_retrieve_items(logged_client, item_factory):
     response = get(logged_client, '/inventory/_retrieve_items')
     items = response.json['data']
     assert set(serial_numbers) == set(item[4] for item in items)
-    assert len(items[0]) == 10
+    assert len(items[0]) == 11