diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 20e47a47b21c794c699fbd4256b7de7043526fd5..07b2330d6da9446bd2a3d8f7ac3463751ec92b8f 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -5698,6 +5698,16 @@ static int hangup_sip2cause(int cause)
 		case 606:	/* Not acceptable */
 			return AST_CAUSE_BEARERCAPABILITY_NOTAVAIL;
 		default:
+			if (cause < 500 && cause >= 400) {
+				/* 4xx class error that is unknown - someting wrong with our request */
+				return AST_CAUSE_INTERWORKING;
+			} else if (cause < 600 && cause >= 500) {
+				/* 5xx class error - problem in the remote end */
+				return AST_CAUSE_CONGESTION;
+			} else if (cause < 700 && cause >= 600) {
+				/* 6xx - global errors in the 4xx class */
+				return AST_CAUSE_INTERWORKING;
+			}
 			return AST_CAUSE_NORMAL;
 	}
 	/* Never reached */