diff --git a/apps/configsync-netconf/src/test/java/org/onosproject/d/config/sync/impl/netconf/NetconfDeviceConfigSynchronizerProviderTest.java b/apps/configsync-netconf/src/test/java/org/onosproject/d/config/sync/impl/netconf/NetconfDeviceConfigSynchronizerProviderTest.java
index 8851cf1..28fad43 100644
--- a/apps/configsync-netconf/src/test/java/org/onosproject/d/config/sync/impl/netconf/NetconfDeviceConfigSynchronizerProviderTest.java
+++ b/apps/configsync-netconf/src/test/java/org/onosproject/d/config/sync/impl/netconf/NetconfDeviceConfigSynchronizerProviderTest.java
@@ -284,7 +284,7 @@
 
             return new DefaultCompositeStream(id, xml);
         } catch (IOException e) {
-            throw new RuntimeException(e);
+            throw new IllegalStateException(e);
         }
     }
 
diff --git a/core/store/primitives/src/test/java/org/onosproject/store/primitives/impl/EventuallyConsistentMapImplTest.java b/core/store/primitives/src/test/java/org/onosproject/store/primitives/impl/EventuallyConsistentMapImplTest.java
index f16c688..0997261 100644
--- a/core/store/primitives/src/test/java/org/onosproject/store/primitives/impl/EventuallyConsistentMapImplTest.java
+++ b/core/store/primitives/src/test/java/org/onosproject/store/primitives/impl/EventuallyConsistentMapImplTest.java
@@ -804,7 +804,7 @@
             } else if (subject.equals(UPDATE_REQUEST_SUBJECT)) {
                 requestHandler = (Consumer<Collection<UpdateRequest<String>>>) handler;
             } else {
-                throw new RuntimeException("Unexpected message subject " + subject.toString());
+                throw new IllegalStateException("Unexpected message subject " + subject.toString());
             }
         }
 
@@ -814,7 +814,7 @@
             if (subject.equals(ANTI_ENTROPY_MESSAGE_SUBJECT)) {
                 antiEntropyHandler = (Function<AntiEntropyAdvertisement<String>, AntiEntropyResponse>) handler;
             } else if (!subject.equals(INITIALIZE_MESSAGE_SUBJECT)) {
-                throw new RuntimeException("Unexpected message subject " + subject.toString());
+                throw new IllegalStateException("Unexpected message subject " + subject.toString());
             }
         }
     }
diff --git a/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixConsistentSetMultimapTest.java b/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixConsistentSetMultimapTest.java
index 01f5d00..6c2912e 100644
--- a/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixConsistentSetMultimapTest.java
+++ b/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixConsistentSetMultimapTest.java
@@ -445,7 +445,7 @@
             AtomixConsistentSetMultimap map = newPrimitive(mapName);
             return map;
         } catch (Throwable e) {
-            throw new RuntimeException(e.toString());
+            throw new IllegalStateException(e.toString());
         }
     }
 
diff --git a/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixConsistentTreeMapTest.java b/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixConsistentTreeMapTest.java
index 9af2602..941009c 100644
--- a/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixConsistentTreeMapTest.java
+++ b/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixConsistentTreeMapTest.java
@@ -485,7 +485,7 @@
             AtomixConsistentTreeMap map = newPrimitive(mapName);
             return map;
         } catch (Throwable e) {
-            throw new RuntimeException(e.toString());
+            throw new IllegalStateException(e.toString());
         }
     }
     private static class TestMapEventListener
diff --git a/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixTestBase.java b/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixTestBase.java
index 4098af1..6f3ddea 100644
--- a/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixTestBase.java
+++ b/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixTestBase.java
@@ -211,7 +211,7 @@
         try {
             latch.await(30000, TimeUnit.MILLISECONDS);
         } catch (InterruptedException e) {
-            throw new RuntimeException(e);
+            throw new IllegalStateException(e);
         }
 
         return servers;
diff --git a/drivers/bmv2/src/main/java/org/onosproject/drivers/bmv2/ctl/SafeThriftClient.java b/drivers/bmv2/src/main/java/org/onosproject/drivers/bmv2/ctl/SafeThriftClient.java
index a510954..c1b83da 100644
--- a/drivers/bmv2/src/main/java/org/onosproject/drivers/bmv2/ctl/SafeThriftClient.java
+++ b/drivers/bmv2/src/main/java/org/onosproject/drivers/bmv2/ctl/SafeThriftClient.java
@@ -94,7 +94,8 @@
             }
         }
 
-        throw new RuntimeException("Class needs to implement Iface directly. Use wrap(TServiceClient, Class) instead.");
+        throw new IllegalStateException(
+                "Class needs to implement Iface directly. Use wrap(TServiceClient, Class) instead.");
     }
 
     /**
@@ -202,7 +203,7 @@
                             Thread.sleep(timeBetweenRetries);
                         } catch (InterruptedException e2) {
                             Thread.currentThread().interrupt();
-                            throw new RuntimeException(e);
+                            throw new IllegalStateException(e);
                         }
                     }
                 }
diff --git a/drivers/bmv2/src/main/java/org/onosproject/drivers/bmv2/impl/Bmv2PreGroupTranslatorImpl.java b/drivers/bmv2/src/main/java/org/onosproject/drivers/bmv2/impl/Bmv2PreGroupTranslatorImpl.java
index 6652ee0..369b7c5 100644
--- a/drivers/bmv2/src/main/java/org/onosproject/drivers/bmv2/impl/Bmv2PreGroupTranslatorImpl.java
+++ b/drivers/bmv2/src/main/java/org/onosproject/drivers/bmv2/impl/Bmv2PreGroupTranslatorImpl.java
@@ -57,7 +57,7 @@
      */
     public static Bmv2PreGroup translate(Group group) {
         if (!group.type().equals(GroupDescription.Type.ALL)) {
-            throw new RuntimeException("Unable to translate the group to BMv2 PRE group." +
+            throw new IllegalStateException("Unable to translate the group to BMv2 PRE group." +
                                                "A BMv2 PRE group is to be of ALL type. GroupId="
                                                + group.id());
         }
@@ -231,11 +231,11 @@
     private static void checkOutputInstructions(GroupId groupId,
                                                 Set<Instructions.OutputInstruction> outputInstructions) {
         if (outputInstructions.isEmpty()) {
-            throw new RuntimeException(String.format("Group bucket contains no output instruction. GroupId=%s",
+            throw new IllegalStateException(String.format("Group bucket contains no output instruction. GroupId=%s",
                                                      groupId));
         }
         if (outputInstructions.size() != 1) {
-            throw new RuntimeException(String.format("Group bucket contains more than one output instructions. " +
+            throw new IllegalStateException(String.format("Group bucket contains more than one output instructions. " +
                                                              "Only one is supported. GroupId=%s", groupId));
         }
     }
@@ -249,7 +249,7 @@
      */
     private static void validatePort(PortNumber portNumber) {
         if (portNumber.toLong() < 0 || portNumber.toLong() >= BMV2_PORT_MAP_SIZE) {
-            throw new RuntimeException(String.format("Port number %d is not a valid BMv2 physical port number." +
+            throw new IllegalStateException(String.format("Port number %d is not a valid BMv2 physical port number." +
                                                              "Valid port range is [0,255]", portNumber));
         }
     }
diff --git a/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/openconfig/TerminalDeviceDiscovery.java b/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/openconfig/TerminalDeviceDiscovery.java
index f7c4fbf..26bfbbb 100644
--- a/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/openconfig/TerminalDeviceDiscovery.java
+++ b/drivers/odtn-driver/src/main/java/org/onosproject/drivers/odtn/openconfig/TerminalDeviceDiscovery.java
@@ -213,7 +213,7 @@
            doc.appendChild(rpc);
            return NetconfRpcParserUtil.toString(doc);
            } catch (Exception e) {
-           throw new RuntimeException(new NetconfException("Exception in getDeviceDetailsBuilder", e));
+           throw new IllegalStateException(new NetconfException("Exception in getDeviceDetailsBuilder", e));
            }
          */
     }
diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4RuntimeClientImpl.java b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4RuntimeClientImpl.java
index c952e61..bd688f7 100644
--- a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4RuntimeClientImpl.java
+++ b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4RuntimeClientImpl.java
@@ -172,7 +172,7 @@
             } catch (InterruptedException e) {
                 log.warn("Thread interrupted while waiting for lock (executing {})",
                          opDescription);
-                throw new RuntimeException(e);
+                throw new IllegalStateException(e);
             }
             try {
                 return supplier.get();
diff --git a/tools/build/conf/src/main/resources/onos/checkstyle.xml b/tools/build/conf/src/main/resources/onos/checkstyle.xml
index 21ac8da..6833486 100644
--- a/tools/build/conf/src/main/resources/onos/checkstyle.xml
+++ b/tools/build/conf/src/main/resources/onos/checkstyle.xml
@@ -115,6 +115,14 @@
         <property name="message" value="javafx classes are not supported by all JDKs."/>
     </module>
 
+    <!-- Don't allow usage of RuntimeException -->
+    <module name="RegexpSingleline">
+        <property name="format" value="throw[ ]*new[ ]*RuntimeException"/>
+        <property name="minimum" value="0"/>
+        <property name="maximum" value="0"/>
+        <property name="message" value="Don't throw generic exception types"/>
+    </module>
+
     <!-- Checks for Headers                                -->
     <!-- See http://checkstyle.sf.net/config_header.html   -->
     <!-- <module name="Header"> -->
diff --git a/utils/misc/src/test/java/org/onlab/util/ManuallyAdvancingTimer.java b/utils/misc/src/test/java/org/onlab/util/ManuallyAdvancingTimer.java
index 1e965de..85eb35f 100644
--- a/utils/misc/src/test/java/org/onlab/util/ManuallyAdvancingTimer.java
+++ b/utils/misc/src/test/java/org/onlab/util/ManuallyAdvancingTimer.java
@@ -295,7 +295,7 @@
             currExecTime = TestUtils.getField(currTask, "nextExecutionTime");
         } catch (TestUtils.TestUtilsException e) {
             e.printStackTrace();
-            throw new RuntimeException("Could not get nextExecutionTime");
+            throw new IllegalStateException("Could not get nextExecutionTime");
         }
         while (currExecTime <= timerKeeper.currentTimeInMillis()) {
             if (executeTask(queue.pop())) {
@@ -309,7 +309,7 @@
                 currExecTime = TestUtils.getField(currTask, "nextExecutionTime");
             } catch (TestUtils.TestUtilsException e) {
                 e.printStackTrace();
-                throw new RuntimeException("Could not get nextExecutionTime");
+                throw new IllegalStateException("Could not get nextExecutionTime");
             }
         }
         return totalRun;
@@ -461,7 +461,7 @@
                     executionTimeTwo = TestUtils.getField(o2, "nextExecutionTime");
                 } catch (TestUtils.TestUtilsException e) {
                     e.printStackTrace();
-                    throw new RuntimeException("Could not get next execution time.");
+                    throw new IllegalStateException("Could not get next execution time.");
                 }
                 if (executionTimeOne == executionTimeTwo) {
                     return 0;
