diff --git a/SOURCES/1003-Do-not-use-NoteNotFound-as-it-s-not-implemented-in-n.patch b/SOURCES/1003-Do-not-use-NoteNotFound-as-it-s-not-implemented-in-n.patch
new file mode 100644
index 0000000..741c5a7
--- /dev/null
+++ b/SOURCES/1003-Do-not-use-NoteNotFound-as-it-s-not-implemented-in-n.patch
@@ -0,0 +1,93 @@
+From acfb532e781d600271e5ab1ebc5d9d6d6ea3a7f8 Mon Sep 17 00:00:00 2001
+From: Petr Lautrbach <plautrba@redhat.com>
+Date: Tue, 30 Jul 2019 17:13:44 +0200
+Subject: [PATCH] Do not use NoteNotFound as it's not implemented in networkx-1
+
+---
+ setools/dta.py      | 8 ++++----
+ setools/infoflow.py | 8 ++++----
+ 2 files changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/setools/dta.py b/setools/dta.py
+index 3239d2d..e15d8b8 100644
+--- a/setools/dta.py
++++ b/setools/dta.py
+@@ -24,7 +24,7 @@ from collections import defaultdict, namedtuple
+ from contextlib import suppress
+ 
+ import networkx as nx
+-from networkx.exception import NetworkXError, NetworkXNoPath, NodeNotFound
++from networkx.exception import NetworkXError, NetworkXNoPath
+ 
+ from .descriptors import EdgeAttrDict, EdgeAttrList
+ from .policyrep import TERuletype
+@@ -111,7 +111,7 @@ class DomainTransitionAnalysis:
+ 
+         self.log.info("Generating one domain transition path from {0} to {1}...".format(s, t))
+ 
+-        with suppress(NetworkXNoPath, NodeNotFound):
++        with suppress(NetworkXNoPath):
+             # NodeNotFound: the type is valid but not in graph, e.g. excluded
+             # NetworkXNoPath: no paths or the target type is
+             # not in the graph
+@@ -146,7 +146,7 @@ class DomainTransitionAnalysis:
+         self.log.info("Generating all domain transition paths from {0} to {1}, max length {2}...".
+                       format(s, t, maxlen))
+ 
+-        with suppress(NetworkXNoPath, NodeNotFound):
++        with suppress(NetworkXNoPath):
+             # NodeNotFound: the type is valid but not in graph, e.g. excluded
+             # NetworkXNoPath: no paths or the target type is
+             # not in the graph
+@@ -177,7 +177,7 @@ class DomainTransitionAnalysis:
+         self.log.info("Generating all shortest domain transition paths from {0} to {1}...".
+                       format(s, t))
+ 
+-        with suppress(NetworkXNoPath, NodeNotFound):
++        with suppress(NetworkXNoPath):
+             # NodeNotFound: the type is valid but not in graph, e.g. excluded
+             # NetworkXNoPath: no paths or the target type is
+             # not in the graph
+diff --git a/setools/infoflow.py b/setools/infoflow.py
+index 1b88efa..4fbe682 100644
+--- a/setools/infoflow.py
++++ b/setools/infoflow.py
+@@ -21,7 +21,7 @@ import logging
+ from contextlib import suppress
+ 
+ import networkx as nx
+-from networkx.exception import NetworkXError, NetworkXNoPath, NodeNotFound
++from networkx.exception import NetworkXError, NetworkXNoPath
+ 
+ from .descriptors import EdgeAttrIntMax, EdgeAttrList
+ from .policyrep import TERuletype
+@@ -118,7 +118,7 @@ class InfoFlowAnalysis:
+         self.log.info("Generating one shortest information flow path from {0} to {1}...".
+                       format(s, t))
+ 
+-        with suppress(NetworkXNoPath, NodeNotFound):
++        with suppress(NetworkXNoPath):
+             # NodeNotFound: the type is valid but not in graph, e.g.
+             # excluded or disconnected due to min weight
+             # NetworkXNoPath: no paths or the target type is
+@@ -157,7 +157,7 @@ class InfoFlowAnalysis:
+         self.log.info("Generating all information flow paths from {0} to {1}, max length {2}...".
+                       format(s, t, maxlen))
+ 
+-        with suppress(NetworkXNoPath, NodeNotFound):
++        with suppress(NetworkXNoPath):
+             # NodeNotFound: the type is valid but not in graph, e.g.
+             # excluded or disconnected due to min weight
+             # NetworkXNoPath: no paths or the target type is
+@@ -191,7 +191,7 @@ class InfoFlowAnalysis:
+         self.log.info("Generating all shortest information flow paths from {0} to {1}...".
+                       format(s, t))
+ 
+-        with suppress(NetworkXNoPath, NodeNotFound):
++        with suppress(NetworkXNoPath):
+             # NodeNotFound: the type is valid but not in graph, e.g.
+             # excluded or disconnected due to min weight
+             # NetworkXNoPath: no paths or the target type is
+-- 
+2.22.0
+
diff --git a/SPECS/setools.spec b/SPECS/setools.spec
index 209c4ca..09026c0 100644
--- a/SPECS/setools.spec
+++ b/SPECS/setools.spec
@@ -4,11 +4,11 @@
 %global sepol_ver 2.9-1
 %global selinux_ver 2.9-1
 
-%bcond_with     networkx
+%bcond_without     networkx
 
 Name:           setools
 Version:        4.2.2
-Release:        1%{?setools_pre_ver:.%{setools_pre_ver}}%{?dist}
+Release:        2%{?setools_pre_ver:.%{setools_pre_ver}}%{?dist}
 Summary:        Policy analysis tools for SELinux
 
 License:        GPLv2
@@ -18,6 +18,7 @@ Source1:        setools.pam
 Source2:        apol.desktop
 Patch1001:      1001-Do-not-use-Werror-during-build.patch
 Patch1002:      1002-Do-not-export-use-setools.InfoFlowAnalysis-and-setoo.patch
+Patch1003:      1003-Do-not-use-NoteNotFound-as-it-s-not-implemented-in-n.patch
 
 Obsoletes:      setools < 4.0.0, setools-devel < 4.0.0
 BuildRequires:  flex,  bison
@@ -162,6 +163,9 @@ rm -rf %{buildroot}%{_bindir}/apol %{buildroot}%{python3_sitearch}/setoolsgui \
 %endif
 
 %changelog
+* Sat Nov 30 2019 Petr Lautrbach <plautrba@redhat.com> - 4.2.2-2
+- Build setools-console-analyses and setools-gui (#1731519)
+
 * Mon Jul 08 2019 Vit Mojzis <vmojzis@redhat.com> - 4.2.2-1
 - SETools 4.2.2 release