diff --git a/cli/cli/c_actions.py b/cli/cli/c_actions.py
index e445315..d90acae 100755
--- a/cli/cli/c_actions.py
+++ b/cli/cli/c_actions.py
@@ -1546,6 +1546,12 @@
             result = []
             if (onos == 1) and (url == 'links'):
                 for entry in entries:
+                    src = entry.get('src')
+                    dst = entry.get('dst')
+                    for tempEntry in entries:
+                        if cmp(src, tempEntry.get('dst')) == 0:
+                            if cmp(dst, tempEntry.get('src')) == 0:
+                                entries.remove(tempEntry)
                     result.append({
                        'src-switch'          : entry['src']['dpid'],
                        'src-port'            : entry['src']['portNumber'],
diff --git a/cli/cli/desc/version200/switch.py b/cli/cli/desc/version200/switch.py
index 6a814f3..c8f65ed 100755
--- a/cli/cli/desc/version200/switch.py
+++ b/cli/cli/desc/version200/switch.py
@@ -951,11 +951,10 @@
     'switch' : {
         'field-orderings' : {
             'default' : [ 'Idx', '@', 'switch-alias', 'connected-since',
-                          'ip-address', 'type'],
+                          'ip-address', 'type', 'controller'],
             'details' : [ 'Idx','@', 'switch-alias', 'connected-since',
-                          'ip-address', 'type'],
-            'brief'   : [ 'Idx', '@', 'switch-alias', 'connected-since',
-                          'ip-address', ],
+                          'ip-address', 'type', 'controller'],
+            'brief'   : [ 'Idx', '@', 'switch-alias', 'controller'],
             },
         'fields' : {
             '@'                  : {
@@ -978,13 +977,14 @@
                                      'formatter' : fmtcnv.decode_switch_actions,
                                    },
             'ip-address'         : {
-                                     'verbose-name' : 'IP Address',
+                                     'verbose-name' : 'Connected At',
                                    },
             'socket-address'     : {
                                    },
             'buffers'            : {
                                    },
             'controller'         : {
+                                     'verbose-name' : 'Controller',
                                    },
             'tables'             : {
                                    },
diff --git a/cli/cli/rest_to_model.py b/cli/cli/rest_to_model.py
index 4c37c87..34506ce 100755
--- a/cli/cli/rest_to_model.py
+++ b/cli/cli/rest_to_model.py
@@ -410,7 +410,23 @@
 
         # this synthetic obj_type's name is 'switches' in an attempt
         # to disabigutate it from 'class Switch'
+        #TODO: Need figure out a better way to get url (Through sdncon framework)
+        url = "http://%s/rest/v1/mastership" % sdnsh.controller
+        try:
+            result2 = sdnsh.store.rest_simple_request(url)
+            check_rest_result(result2)
+            mastership_data = json.loads(result2)
+        except Exception, e:
+            if sdnsh.description:   # description debugging
+                print "get_model_from_url: failed request %s: '%s'" % (url, e)
+            entries = []
         for entry in entries:
+            dpid = entry.get('dpid')
+            if(dpid in mastership_data.keys()):
+                #As there is only one master for switch
+                controller = mastership_data[dpid][0].get('controllerId')
+            else:
+                controller = None
             if switch_match and switch_match != entry['dpid']:
                 continue
             if switch_prefix and not entry['dpid'].startswith(switch_prefix):
@@ -418,9 +434,11 @@
             if onos == 1:
                 result.append({
                    'dpid'                : entry['dpid'],
+                   'switch-alias'        : entry['stringAttributes']['name'],
                    'connected-since'     : entry['stringAttributes']['ConnectedSince'],
-                   'ip-address'          : 0,
-                   'type'                : entry['stringAttributes']['type']
+                   'ip-address'          : entry['stringAttributes']['remoteAddress'],
+                   'type'                : entry['stringAttributes']['type'],
+                   'controller'          : controller
                 })
             else:
                 attrs = entry['attributes']
@@ -476,8 +494,7 @@
                         sw['tcp-port'] = ''
                         sw['connected-since'] = ''
                         result.append(sw)
-                else:
-                    known_dpids[dpid].update(sw)
+                [dpid].update(sw)
     elif obj_type == 'interfaces':
 
         # These are called interfaces because the primary
diff --git a/cli/sdncon/rest/views.py b/cli/sdncon/rest/views.py
index 260933e..7a45dbb 100755
--- a/cli/sdncon/rest/views.py
+++ b/cli/sdncon/rest/views.py
@@ -702,6 +702,15 @@
     return get_sdnplatform_response(url)        
 
 @safe_rest_view
+def do_mastership(request):
+    url = controller_url("onos", "registry", "switches" ,"json")
+    #url = "http://127.0.0.1:8080/wm/onos/registry/switches/json"
+    if request.META['QUERY_STRING']:
+        url += '?' + request.META['QUERY_STRING']
+    return get_sdnplatform_response(url) 
+#'''
+
+@safe_rest_view
 def do_links(request):
     if onos == 0:
         url = controller_url("topology", "links", "json")
diff --git a/cli/sdncon/urls.py b/cli/sdncon/urls.py
index 2abf2bd..b06bd39 100755
--- a/cli/sdncon/urls.py
+++ b/cli/sdncon/urls.py
@@ -38,7 +38,6 @@
     (r'ui/show_link', 'sdncon.ui.views.show_link'),
     (r'ui/show_tunnel', 'sdncon.ui.views.show_tunnel'),
     (r'ui/build_topology', 'sdncon.ui.views.build_topology'),
-    
     # Uncomment the next line to enable the admin:
     (r'^admin/', include(admin.site.urls)),
     (r'accounts/login/$', 'django.contrib.auth.views.login'),
@@ -70,6 +69,7 @@
     (r'^rest/v1/device', 'sdncon.rest.views.do_device'),
     (r'^rest/v1/switches', 'sdncon.rest.views.do_switches'),
     (r'^rest/v1/links', 'sdncon.rest.views.do_links'),
+    (r'^rest/v1/mastership', 'sdncon.rest.views.do_mastership'), 
     (r'^rest/v1/vns/device-interface', 'sdncon.rest.views.do_vns_device_interface'),
     (r'^rest/v1/vns/interface', 'sdncon.rest.views.do_vns_interface'),
     (r'^rest/v1/vns/realtimestats/flow/(?P<vnsName>[A-Za-z0-9_:.|\-]+)/?$', 'sdncon.rest.views.do_vns_realtimestats_flow', {'category': 'vns'}),
diff --git a/src/main/java/net/floodlightcontroller/core/IOFSwitch.java b/src/main/java/net/floodlightcontroller/core/IOFSwitch.java
index 72ec404..7fa7560 100644
--- a/src/main/java/net/floodlightcontroller/core/IOFSwitch.java
+++ b/src/main/java/net/floodlightcontroller/core/IOFSwitch.java
@@ -18,6 +18,7 @@
 package net.floodlightcontroller.core;
 
 import java.io.IOException;
+import java.net.SocketAddress;
 import java.util.Collection;
 import java.util.Date;
 import java.util.List;
@@ -113,6 +114,12 @@
      * @return whether the switch is still disconnected
      */
     public boolean isConnected();
+    
+    /**
+     * retun the channelSocket ip address with port number
+     * @return channelSocketAddress
+     */
+    public SocketAddress getChannelSocketAddress();
 
     /**
      * Sets whether the switch is connected.
diff --git a/src/main/java/net/floodlightcontroller/core/internal/OFSwitchImplBase.java b/src/main/java/net/floodlightcontroller/core/internal/OFSwitchImplBase.java
index 30b8059..d92719c 100644
--- a/src/main/java/net/floodlightcontroller/core/internal/OFSwitchImplBase.java
+++ b/src/main/java/net/floodlightcontroller/core/internal/OFSwitchImplBase.java
@@ -18,6 +18,7 @@
  **/
 
 import java.io.IOException;
+import java.net.SocketAddress;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -323,6 +324,10 @@
     public void setChannel(Channel channel) {
         this.channel = channel;
     }
+    @Override
+    public SocketAddress getChannelSocketAddress(){
+        return channel.getRemoteAddress();
+    }
 
     @Override
     public void write(OFMessage m, FloodlightContext bc) throws IOException {
diff --git a/src/main/java/net/onrc/onos/core/topology/TopologyPublisher.java b/src/main/java/net/onrc/onos/core/topology/TopologyPublisher.java
index c53ab76..b591044 100644
--- a/src/main/java/net/onrc/onos/core/topology/TopologyPublisher.java
+++ b/src/main/java/net/onrc/onos/core/topology/TopologyPublisher.java
@@ -377,6 +377,12 @@
                 sw.getConnectedSince().toString());
         switchData.createStringAttribute(TopologyElement.ELEMENT_ADMIN_STATUS,
                 AdminStatus.ACTIVE.toString());
+        //setting name from config file.
+        switchData.createStringAttribute("name",
+                ret.getSwitchConfig().getName());
+        //set the switch socketAddress and port
+        switchData.createStringAttribute("remoteAddress",
+                sw.getChannelSocketAddress().toString().substring(1));
         if (ret.getConfigState() == NetworkConfigState.ACCEPT_ADD) {
             Map<String, String> attr = ret.getSwitchConfig().getPublishAttributes();
             for (Entry<String, String> e : attr.entrySet()) {
@@ -389,6 +395,7 @@
                     ConfigState.NOT_CONFIGURED.toString());
         }
         switchData.freeze();
+        System.out.println("getOnosInstanceId().toString():\n\n\n\n\n"+getOnosInstanceId());
         // The Port events
         List<PortData> portDataEntries = new ArrayList<PortData>();
         for (OFPortDesc port : sw.getPorts()) {
