diff --git a/plugins/TorrentPeers/__init__.py b/plugins/TorrentPeers/__init__.py
index ee7188a..64a1f67 100644
--- a/plugins/TorrentPeers/__init__.py
+++ b/plugins/TorrentPeers/__init__.py
@@ -89,6 +89,7 @@ class TorrentPeers:
         
         self.tab_peers = PeersTabManager(tree_view, core)
         self.tab_peers.build_peers_view()
+        self.tab_peers.build_popup()
         
         self.config_updated()
 
diff --git a/plugins/TorrentPeers/tab_peers.py b/plugins/TorrentPeers/tab_peers.py
index d181aaa..38b9d65 100644
--- a/plugins/TorrentPeers/tab_peers.py
+++ b/plugins/TorrentPeers/tab_peers.py
@@ -59,7 +59,7 @@ class PeersTabManager(object):
                                         str, str, float, int, int)
         # Stores IP -> gtk.TreeIter's iter mapping for quick look up 
         # in update_torrent_info_widget
-        self.peer_store_dict = {}       
+        self.peer_store_dict = {}
         self._cached_flags = {}
         self.show_flags = None
         self.flag_size = ""
@@ -91,6 +91,31 @@ class PeersTabManager(object):
         up = dgtk.add_func_column(self.peer_view, _("Up Speed"), 
                                   dgtk.cell_data_speed, 6, width=115)
 
+    def build_popup(self):
+        menu = gtk.Menu()
+        menuItem = gtk.MenuItem("Block user for this session")
+        menuItem.connect("button-release-event", self.cb_block_user)
+        menu.append(menuItem)
+        menu.show_all()
+        self.menu = menu
+        self.peer_view.connect("button-release-event", self.cb_view_popup)
+
+    def cb_block_user(self, widget, event):
+        sel = self.peer_view.get_selection()
+        (model, iter) = sel.get_selected()
+        # FIXME
+        # How to get the column by name?
+        # It is possible that the user moved the IP Address column
+        str_ip = model.get_value(iter, 2)
+        self.manager.add_range_to_ip_filter(str_ip, str_ip)
+        self.manager.set_ip_filter()
+        print "Block IP: %s" % str_ip
+
+    def cb_view_popup(self, widget, event):
+        if (event.button != 3):
+            return
+        self.menu.popup(None, None, None, event.button, event.time)
+
     def enable_flags(self):
         self.show_flags = True
 
diff --git a/src/deluge_core.cpp b/src/deluge_core.cpp
index 64f79a1..bb20b1d 100644
--- a/src/deluge_core.cpp
+++ b/src/deluge_core.cpp
@@ -2089,7 +2089,7 @@ timeinfo = localtime(&rawtime);
 std::cout << asctime(timeinfo) << " torrent_add_range_to_IP_filter()" << std::endl;
 #endif
     if (M_the_filter == NULL) {
-        RAISE_PTR(DelugeError, "No filter defined, use reset_IP_filter");
+        M_the_filter = new ip_filter();
     }
 
     char *start, *end;
@@ -2113,8 +2113,9 @@ timeinfo = localtime(&rawtime);
 std::cout << asctime(timeinfo) << " torrent_set_IP_filter()" << std::endl;
 #endif
     if (M_the_filter == NULL) {
-        RAISE_PTR(DelugeError, "No filter defined, use reset_IP_filter");
+        M_the_filter = new ip_filter();
     }
+
     M_ses->set_ip_filter(*M_the_filter);
 
     Py_INCREF(Py_None); return Py_None;
