diff --git a/src/main/java/org/opencord/igmpproxy/IgmpManager.java b/src/main/java/org/opencord/igmpproxy/IgmpManager.java
index 1b4285b..6063b96 100644
--- a/src/main/java/org/opencord/igmpproxy/IgmpManager.java
+++ b/src/main/java/org/opencord/igmpproxy/IgmpManager.java
@@ -111,6 +111,8 @@
     public static boolean connectPointMode = true;
     public static ConnectPoint connectPoint = null;
 
+    private static boolean pimSSmInterworking = false;
+    private static final String DEFAULT_PIMSSM_HOST = "127.0.0.1";
     private final ScheduledExecutorService scheduledExecutorService =
             Executors.newScheduledThreadPool(1);
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
@@ -296,10 +298,15 @@
                 join = true;
             }
         } else {
-            IpAddress src = ssmTranslateRoute(groupIp);
-            if (src == null) {
-                log.info("no ssm translate for group " + groupIp.toString());
-                return;
+            IpAddress src = null;
+            if (pimSSmInterworking) {
+                src = ssmTranslateRoute(groupIp);
+                if (src == null) {
+                    log.info("no ssm translate for group " + groupIp.toString());
+                    return;
+                }
+            } else {
+                src = IpAddress.valueOf(DEFAULT_PIMSSM_HOST);
             }
             sourceList.add(src.getIp4Address());
             if (recordType == IGMPMembership.CHANGE_TO_EXCLUDE_MODE ||
@@ -672,7 +679,7 @@
             igmpCos = newCfg.igmpCos();
             periodicQuery = newCfg.periodicQuery();
             fastLeave = newCfg.fastLeave();
-
+            pimSSmInterworking = newCfg.pimSsmInterworking();
             connectPoint = newCfg.connectPoint();
             if (connectPointMode != newCfg.connectPointMode()) {
                 connectPointMode = newCfg.connectPointMode();
diff --git a/src/main/java/org/opencord/igmpproxy/IgmpproxyConfig.java b/src/main/java/org/opencord/igmpproxy/IgmpproxyConfig.java
index 107c262..efd39ba 100644
--- a/src/main/java/org/opencord/igmpproxy/IgmpproxyConfig.java
+++ b/src/main/java/org/opencord/igmpproxy/IgmpproxyConfig.java
@@ -35,6 +35,9 @@
     protected static final Boolean DEFAULT_PERIODIC_QUERY = true;
     protected static final String DEFAULT_WITH_RA_UPLINK = "true";
     protected static final String DEFAULT_WITH_RA_DOWNLINK = "true";
+    private static final Boolean DEFAULT_CONNECT_POINT_MODE = true;
+    private static final Boolean DEFAULT_PIMSSM_INTERWORKING = false;
+
     protected static final String CONNECT_POINT_MODE = "globalConnectPointMode";
     protected static final String CONNECT_POINT = "globalConnectPoint";
     private static final String UNSOLICITED_TIMEOUT = "UnsolicitedTimeOut";
@@ -48,7 +51,7 @@
     private static final String IGMP_COS = "IgmpCos";
     private static final String WITH_RA_UPLINK = "withRAUpLink";
     private static final String WITH_RA_DOWN_LINK = "withRADownLink";
-    private static final Boolean DEFAULT_CONNECT_POINT_MODE = true;
+    private static final String PIMSSM_INTERWORKING = "pimSSmInterworking";
 
     /**
      * Gets the value of a string property, protecting for an empty
@@ -165,6 +168,17 @@
             return null;
         }
 
-        return ConnectPoint.deviceConnectPoint(getStringProperty(CONNECT_POINT, ""));
+        try {
+            return ConnectPoint.deviceConnectPoint(getStringProperty(CONNECT_POINT, ""));
+        } catch (Exception ex) {
+            return null;
+        }
+    }
+
+    public boolean pimSsmInterworking() {
+        if (object == null || object.path(PIMSSM_INTERWORKING) == null) {
+            return DEFAULT_PIMSSM_INTERWORKING;
+        }
+        return Boolean.parseBoolean(getStringProperty(PIMSSM_INTERWORKING, DEFAULT_PIMSSM_INTERWORKING.toString()));
     }
 }
