private void searchPaths(Graph graph, Object start, Object searched,
			ArrayList<Object> visited) {
		if (visited == null) {
			visited = new ArrayList<Object>();
			visited.add(start);
		}

		ArrayList<Object> nodes;

		if (visited.get(visited.size() - 1) instanceof Station) {
			nodes = ((Station) (visited.get(visited.size() - 1)))
					.getChildNodes();
		} else {
			nodes = ((Semaphore) (visited.get(visited.size() - 1)))
					.getChildNodes();
		}

		if (nodes == null) {
			nodes = new ArrayList<Object>();
		}

		for (Object node : nodes) {
			if (visited.contains(node)) {
				continue;
			}

			if (node.equals(searched)) {
				visited.add(node);
				paths.add(setNewPath(visited));
				visited.remove(visited.size() - 1);
				break;
			}
		}

		for (Object node : nodes) {
			if (visited.contains(node) || node.equals(searched)) {
				continue;
			}

			visited.add(node);
			searchPaths(graph, start, searched, visited);
			visited.remove(visited.size() - 1);
		}
	}