 			if @isSuperNode
 				@server.query('nodes', 'node.structured', (nodes) =>
 					superNodes = _(nodes).filter( (node) -> node.isSuperNode)
-					superNodes = _(superNodes).filter( (node) => not @getPeer(node.id)? and node.id isnt @id )
 
 					if superNodes.length is 0
 						return
 
 					for superNode in superNodes
 						( (superNode) =>
-							peer = @connect(superNode.id)
-							peer.once('channel.opened', () =>
+
+							if peer = @getPeer(superNode.id)
 								@addSibling(peer)
-							)
+							else
+								peer = @connect(superNode.id)
+								peer.once('channel.opened', () =>
+									@addSibling(peer)
+								)
 						) (superNode)
 				)
 
 			else unless @_parent?
-				@_enterNetwork()
+				@_selectParent()
 
 			else
 				current = _(@getPeers()).filter( (peer) -> peer.isSuperNode).length

			if not @isSuperNode or children.length is 0 or siblings.length is 0
				return

			for child in children
				closestSuperNode = null
				closestDistance = Infinity
				for sibling in siblings
					distance = child.position.getDistance(sibling.position)
					if distance < closestDistance
						closestDistance = distance
						closestSuperNode = sibling
				if closestDistance < child.position.getDistance(@position) * @_superNodeSwitchThreshold
					child.emit('peer.recommendParent', closestSuperNode.id)



					@_parent = peer
					callback?(true)
				else
					console.log 'parent request denied'
					peer.emit('peer.abandonParent', @id)
					peer.role = Peer.Role.None
					callback?(false)
