 			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

				superNode = superNodes[i]
				superNodes.splice(i, 1)

				peer = @connect(superNode.id)
				peer.once('channel.opened', () =>
					@setParent(peer, (accepted) =>
						unless accepted
							connectParent(superNodes)
					)
				)

			@server.query('nodes', 'node.structured', (nodes) =>
				superNodes = _(nodes).filter( (node) -> node.isSuperNode)

			if @isSuperNode
				callback?(false)
				return
			console.log 'sending parent request to ' + peer.id
			peer.query('peer.requestAdoption', @id, (accepted) =>
				if accepted and not @isSuperNode
					console.log 'parent request accepted'
					if @_parent?
						@removeParent()

