public function crawl( &$devices = array(), $device = null, $ignore = array() )
    {
        if( !count( $devices ) )
        {
            $device = $this->id();
            $devices[ $device ] = $this->neighbours( true, $ignore );
        }

        foreach( $devices[ $device ] as $feNeighbour => $feConnections )
        {
            if( in_array( $feNeighbour, $ignore ) )
            {
                if( isset( $devices[ $device ][$feNeighbour] ) )
                    unset( $devices[ $device ][$feNeighbour] );

                continue;
            }

            if( !isset( $devices[ $feNeighbour ] ) )
            {
                $snmp = new \Cityware\Snmp\SNMP( $feNeighbour, $this->getSNMP()->getCommunity() );

                try
                {
                    $devices[ $feNeighbour ] = $snmp->useCisco_CDP()->neighbours( true, $ignore );
                    unset( $snmp );
                    $this->crawl( $devices, $feNeighbour, $ignore );
                }
                catch( \Cityware\Snmp\Exception $e )
                {
                    // this device did not respond / have CDP enabled / CDP available - skip
                    unset( $devices[$feNeighbour] );
                }
            }
        }

        return $devices;
    }