diff --git a/ForgeTracker/forgetracker/model/ticket.py b/ForgeTracker/forgetracker/model/ticket.py
index 7bd2386..fa470be 100644
--- a/ForgeTracker/forgetracker/model/ticket.py
+++ b/ForgeTracker/forgetracker/model/ticket.py
@@ -461,7 +461,10 @@
 
     @property
     def notify_post(self):
-        return c.app.config.options.get('TicketMonitoringType') == 'AllTicketChanges'
+        monitoring_type = c.app.config.options.get('TicketMonitoringType')
+        return monitoring_type == 'AllTicketChanges' or (
+                monitoring_type == 'AllPublicTicketChanges' and
+                not self.private)
 
     def get_custom_user(self, custom_user_field_name):
         fld = None
@@ -549,7 +552,9 @@
             Thread.new(discussion_id=self.app_config.discussion_id,
                    ref_id=self.index_id())
             n = Notification.post(artifact=self, topic='metadata', text=description, subject=subject)
-            if monitoring_email and n:
+            if monitoring_email and n and (not self.private or
+                    self.app.config.options.get('TicketMonitoringType') in (
+                        'NewTicketsOnly', 'AllTicketChanges')):
                 n.send_simple(monitoring_email)
         Feed.post(
             self,
diff --git a/ForgeTracker/forgetracker/tests/functional/test_root.py b/ForgeTracker/forgetracker/tests/functional/test_root.py
index 2bd1747..8d2deb0 100644
--- a/ForgeTracker/forgetracker/tests/functional/test_root.py
+++ b/ForgeTracker/forgetracker/tests/functional/test_root.py
@@ -26,7 +26,7 @@
 
 from mock import patch
 from nose.tools import assert_true, assert_false, assert_equal, assert_in
-from nose.tools import assert_raises
+from nose.tools import assert_raises, assert_not_in
 from formencode.variabledecode import variable_encode
 
 from alluratest.controller import TestController
@@ -1227,7 +1227,7 @@
             'TicketMonitoringEmail': 'monitoring@email.com',
             'TicketMonitoringType': 'AllTicketChanges',
         })
-        self.new_ticket(summary='test first ticket', status='open', _milestone='2.0')
+        self.new_ticket(summary='test first ticket', status='open', _milestone='2.0', private=True)
         ThreadLocalORMSession.flush_all()
         M.MonQTask.run_ready()
         ThreadLocalORMSession.flush_all()
@@ -1257,6 +1257,82 @@
         monitoring_email_text = monitoring_email[0].kwargs.text
         assert_equal(admin_email_text, monitoring_email_text)
 
+    def test_bulk_edit_notifications_monitoring_email_public_only(self):
+        """Test that private tickets are not included in bulk edit
+        notifications if the "public only" option is selected.
+        """
+        self.app.post('/admin/bugs/set_options', params={
+            'TicketMonitoringEmail': 'monitoring@email.com',
+            'TicketMonitoringType': 'AllPublicTicketChanges',
+        })
+        self.new_ticket(summary='test first ticket', status='open', _milestone='2.0')
+        self.new_ticket(summary='test second ticket', status='open', private=True)
+        ThreadLocalORMSession.flush_all()
+        M.MonQTask.run_ready()
+        ThreadLocalORMSession.flush_all()
+        tickets = tm.Ticket.query.find(dict(status='open')).all()
+        M.MonQTask.query.remove()
+        self.app.post('/p/test/bugs/update_tickets', {
+                      '__search': '',
+                      '__ticket_ids': [t._id for t in tickets],
+                      'status': 'accepted'})
+        M.MonQTask.run_ready()
+        emails = M.MonQTask.query.find(dict(task_name='allura.tasks.mail_tasks.sendmail')).all()
+        assert_equal(len(emails), 2)  # one for admin and one for monitoring email
+        for email in emails:
+            assert_equal(email.kwargs.subject, '[test:bugs] Mass edit changes by Test Admin')
+        admin = M.User.by_username('test-admin')
+        admin_email = M.MonQTask.query.find({
+            'task_name': 'allura.tasks.mail_tasks.sendmail',
+            'kwargs.destinations': str(admin._id)
+        }).all()
+        monitoring_email = M.MonQTask.query.find({
+            'task_name': 'allura.tasks.mail_tasks.sendmail',
+            'kwargs.destinations': 'monitoring@email.com'
+        }).all()
+        assert_equal(len(admin_email), 1)
+        assert_equal(len(monitoring_email), 1)
+        admin_email_text = admin_email[0].kwargs.text
+        monitoring_email_text = monitoring_email[0].kwargs.text
+        assert_in('second ticket', admin_email_text)
+        assert_not_in('second ticket', monitoring_email_text)
+
+    def test_bulk_edit_monitoring_email_all_private_edits(self):
+        """Test that no monitoring email is sent if the "public only"
+        option is selected, and only private tickets were updated.
+        """
+        self.app.post('/admin/bugs/set_options', params={
+            'TicketMonitoringEmail': 'monitoring@email.com',
+            'TicketMonitoringType': 'AllPublicTicketChanges',
+        })
+        self.new_ticket(summary='test first ticket', status='open', private=True)
+        self.new_ticket(summary='test second ticket', status='open', private=True)
+        ThreadLocalORMSession.flush_all()
+        M.MonQTask.run_ready()
+        ThreadLocalORMSession.flush_all()
+        tickets = tm.Ticket.query.find(dict(status='open')).all()
+        M.MonQTask.query.remove()
+        self.app.post('/p/test/bugs/update_tickets', {
+                      '__search': '',
+                      '__ticket_ids': [t._id for t in tickets],
+                      'status': 'accepted'})
+        M.MonQTask.run_ready()
+        emails = M.MonQTask.query.find(dict(task_name='allura.tasks.mail_tasks.sendmail')).all()
+        assert_equal(len(emails), 1)  # only admin email sent
+        for email in emails:
+            assert_equal(email.kwargs.subject, '[test:bugs] Mass edit changes by Test Admin')
+        admin = M.User.by_username('test-admin')
+        admin_email = M.MonQTask.query.find({
+            'task_name': 'allura.tasks.mail_tasks.sendmail',
+            'kwargs.destinations': str(admin._id)
+        }).all()
+        monitoring_email = M.MonQTask.query.find({
+            'task_name': 'allura.tasks.mail_tasks.sendmail',
+            'kwargs.destinations': 'monitoring@email.com'
+        }).all()
+        assert_equal(len(admin_email), 1)
+        assert_equal(len(monitoring_email), 0)
+
     def test_filtered_by_subscription(self):
         self.new_ticket(summary='test first ticket', status='open')
         self.new_ticket(summary='test second ticket', status='open')
@@ -1873,23 +1949,28 @@
     @patch('forgetracker.model.ticket.Notification.send_simple')
     def test_notifications_new(self, send_simple):
         self._set_options('NewTicketsOnly')
-        self.new_ticket(summary='test')
-        self.app.post('/bugs/1/update_ticket',{
-            'summary':'test',
-            'description':'update',
-        })
+        self.new_ticket(summary='test', private=True)
         send_simple.assert_called_once_with(self.test_email)
 
+    @patch('forgetracker.model.ticket.Notification.send_simple')
+    def test_notifications_new_public_only(self, send_simple):
+        """Test that notification not sent for new private ticket
+        if "public only" option selected.
+        """
+        self._set_options('NewPublicTicketsOnly')
+        self.new_ticket(summary='test', private=True)
+        assert not send_simple.called
+
     @patch('forgetracker.tracker_main.M.Notification.send_simple')
     def test_notifications_all(self, send_simple):
         self._set_options()
         self.new_ticket(summary='test')
         send_simple.assert_called_once_with(self.test_email)
         send_simple.reset_mock()
-        response = self.app.post(
-            '/bugs/1/update_ticket',
-            {'summary': 'test',
-            'description': 'update'})
+        response = self.app.post('/bugs/1/update_ticket', {
+            'summary': 'test',
+            'description': 'update',
+            'private': '1'})
         assert send_simple.call_count == 1, send_simple.call_count
         send_simple.assert_called_with(self.test_email)
         send_simple.reset_mock()
@@ -1906,6 +1987,25 @@
         assert send_simple.call_count == 1, send_simple.call_count
         send_simple.assert_called_with(self.test_email)
 
+    @patch('forgetracker.tracker_main.M.Notification.send_simple')
+    def test_notifications_all_public_only(self, send_simple):
+        """Test that notifications are not sent for private tickets
+        if "public only" option selected.
+        """
+        self._set_options('AllPublicTicketChanges')
+        self.new_ticket(summary='test')
+        send_simple.assert_called_once_with(self.test_email)
+        send_simple.reset_mock()
+        self.app.post('/bugs/1/update_ticket', {
+                'summary': 'test',
+                'description': 'update 1'})
+        send_simple.assert_called_once_with(self.test_email)
+        send_simple.reset_mock()
+        self.app.post('/bugs/1/update_ticket', {
+                'summary': 'test',
+                'description': 'update 2',
+                'private': '1'})
+        assert not send_simple.called
 
     @patch('forgetracker.tracker_main.M.Notification.send_simple')
     def test_notifications_off(self, send_simple):
@@ -1920,6 +2020,7 @@
             self.new_ticket(summary='test')
         assert send_simple.call_count == 0, send_simple.call_count
 
+
 class TestCustomUserField(TrackerTestController):
     def setUp(self):
         super(TestCustomUserField, self).setUp()
diff --git a/ForgeTracker/forgetracker/tracker_main.py b/ForgeTracker/forgetracker/tracker_main.py
index f76cf74..17f3b6b 100644
--- a/ForgeTracker/forgetracker/tracker_main.py
+++ b/ForgeTracker/forgetracker/tracker_main.py
@@ -172,7 +172,8 @@
         ConfigOption('EnableVoting', bool, False),
         ConfigOption('TicketMonitoringEmail', str, ''),
         ConfigOption('TicketMonitoringType',
-            schema.OneOf('NewTicketsOnly', 'AllTicketChanges'), None)
+            schema.OneOf('NewTicketsOnly', 'AllTicketChanges',
+                'NewPublicTicketsOnly', 'AllPublicTicketChanges'), None)
         ]
     searchable=True
     tool_label='Tickets'
@@ -862,17 +863,23 @@
                 destinations = [str(user._id)]))
             mail_tasks.sendmail.post(**mail)
 
-        if c.app.config.options.get('TicketMonitoringType') == 'AllTicketChanges':
+        if c.app.config.options.get('TicketMonitoringType') in (
+                'AllTicketChanges', 'AllPublicTicketChanges'):
             monitoring_email = c.app.config.options.get('TicketMonitoringEmail')
-            def all_changes():
-                for t_id in changed_tickets.keys():
-                    yield (changed_tickets[t_id], changes[t_id])
-            tmpl_context['data'].update({'changes': all_changes()})
-            mail.update(dict(
-                message_id = h.gen_message_id(),
-                text = tmpl.render(tmpl_context),
-                destinations = [monitoring_email]))
-            mail_tasks.sendmail.post(**mail)
+            visible_changes = []
+            for t_id, t in changed_tickets.items():
+                if (not t.private or
+                        c.app.config.options.get('TicketMonitoringType') ==
+                        'AllTicketChanges'):
+                    visible_changes.append(
+                            (changed_tickets[t_id], changes[t_id]))
+            if visible_changes:
+                tmpl_context['data'].update({'changes': visible_changes})
+                mail.update(dict(
+                    message_id = h.gen_message_id(),
+                    text = tmpl.render(tmpl_context),
+                    destinations = [monitoring_email]))
+                mail_tasks.sendmail.post(**mail)
 
         c.app.globals.invalidate_bin_counts()
         ThreadLocalORMSession.flush_all()
diff --git a/ForgeTracker/forgetracker/widgets/admin.py b/ForgeTracker/forgetracker/widgets/admin.py
index 1e13d2f..09bc443 100644
--- a/ForgeTracker/forgetracker/widgets/admin.py
+++ b/ForgeTracker/forgetracker/widgets/admin.py
@@ -44,7 +44,10 @@
                 grid_width='7',
                 options=[
                     ew.Option(py_value='NewTicketsOnly', label='New tickets only'),
-                    ew.Option(py_value='AllTicketChanges', label='All ticket changes')]),
+                    ew.Option(py_value='NewPublicTicketsOnly', label='New public tickets only'),
+                    ew.Option(py_value='AllTicketChanges', label='All ticket changes'),
+                    ew.Option(py_value='AllPublicTicketChanges', label='All public ticket changes'),
+                    ]),
             ffw.MarkdownEdit(
                 name='TicketHelpNew',
                 label='Help text to display on new ticket page',
