 	//Phase 2: check remove_all_for_dst()
 	trace << PSTR("[testRemove] Phase 2: check remove_all_for_dst() ") << endl;
 	//Step 1: add routes
-	for ( int i = 0; i < RouteCache::MAX_DST_NODES; i ++ )
-		for ( int j = 0; j < RouteCache::MAX_DST_ROUTES; j ++ )
-			route_cache->add_route_entry(&route[i][j], false);
-	
+	trace << PSTR("[testRemove] Adding routes...") << endl;
+	for ( int i = 0; i < RouteCache::MAX_DST_NODES; i ++ )
+		for ( int j = 0; j < RouteCache::MAX_DST_ROUTES; j ++ )
+			route_cache->add_route_entry(&route[i][j], false);
+	
+	trace << PSTR("[testRemove] Removing all routes via remove_all_for_dst()") << endl;
 	//Step 2: remove all routes via remove_all_for_dst
 	for ( int i = 0; i < RouteCache::MAX_DST_NODES; i ++ )
 		for ( int j = 0; j < RouteCache::MAX_DST_ROUTES; j ++ )

	//Phase 3: check remove_route_entry()
	trace << PSTR("[testRemove] Phase 3: check remove_route_entry() ") << endl;
	//Step 1: add routes
	for ( int i = 0; i < RouteCache::MAX_DST_NODES; i ++ )
		for ( int j = 0; j < RouteCache::MAX_DST_ROUTES; j ++ )
			route_cache->add_route_entry(&route[i][j], false);
	
	//Step 2: remove all routes via remove_route_entry
	//Right way: remove only the ones we added
	for ( int i = 0; i < RouteCache::MAX_DST_NODES; i ++ )
		for ( int j = 0; j < RouteCache::MAX_DST_ROUTES; j ++ ) {
			RouteCache::route_list_t* route_list = route_cache->get_route_list(route[i][j].dst);

	return result;
}

bool testRoute(NetworkV1::route_t* route1, NetworkV1::route_t* route2) {
	bool result = true;
	result &= route1->src == route2->src;
	result &= route1->dst == route2->dst;
	result &= route1->hopCount == route2->hopCount;
	if ( result ) {
		for ( int i = 0; i < route1->hopCount && result; i ++ ) {
			result &= route1->hops[i] == route2->hops[i];
		}
	}
	return result;
}

//Tests: get_route_count, get_route_list
bool testGetters1(RouteCache* route_cache, void* route_ptr) {
	printDelimiter2();
	trace << PSTR("[testGetters1] Started") << endl;
	bool result = true;
	NetworkV1::route_t (&route)[RouteCache::MAX_DST_NODES][RouteCache::MAX_DST_ROUTES] = 
		*reinterpret_cast<NetworkV1::route_t (*)[RouteCache::MAX_DST_NODES][RouteCache::MAX_DST_ROUTES]>(route_ptr);
	
	//Setup: add routes
	trace << PSTR("[testGetters1] Adding routes...") << endl;
	for ( int i = 0; i < RouteCache::MAX_DST_NODES; i ++ )
		for ( int j = 0; j < RouteCache::MAX_DST_ROUTES; j ++ )
			route_cache->add_route_entry(&route[i][j], false);
	
	//Phase 1: check get_route_count()
	trace << PSTR("[testGetters1] Testing routes via get_route_count()") << endl;
	for ( int i = 0; i < RouteCache::MAX_DST_NODES; i ++ )
		for ( int j = 0; j < RouteCache::MAX_DST_ROUTES; j ++ ) {
			//Note: actually, all dst nodes for the inner loop will be the same...
			uint8_t count = route_cache->get_route_count(route[i][j].dst);
			if ( count != 3 ) {
				result = false;
				trace	<< PSTR("[testGetters1] Unexpected route count ") << count
						<< PSTR(" for destination: ") << route[i][j].dst << endl;
			}
		}
	
	//Phase 2: check get_route_list()
	trace << PSTR("[testGetters1] Testing routes via get_route_list()") << endl;
	for ( int i = 0; i < RouteCache::MAX_DST_NODES; i ++ ) {
		uint8_t dst = route[i][0].dst;//first route element in our default data set
		RouteCache::route_list_t* list = route_cache->get_route_list(dst);
		if ( list == NULL ) {
			result = false;
			trace	<< PSTR("[testGetters1] Unexpected NULL route list for dst: ") << dst << endl;
		} else if ( list->dst != dst ) {
			result = false;
			trace	<< PSTR("[testGetters1] Unexpected route list dst value: ") << list->dst << PSTR(", expected: ") << dst << endl;
		} else {
			for ( int j = 0; j < RouteCache::MAX_DST_ROUTES; j ++ ) {
				RouteCache::route_entry_t* entry = &list->entries[j];
//				trace	<< PSTR("[testGetters1] Testing route at index: ") << j << endl;
//				route_cache->print(trace, *entry, 1);
//				trace << endl
				if ( entry == NULL ) {
					result = false;
					trace	<< PSTR("[testGetters1] Unexpected NULL route entry at index: ") << j << endl;
				} else if ( !testRoute(&entry->route, &route[i][j]) ) {
					result = false;
					trace	<< PSTR("[testGetters1] Route data not matching at index: ") << j << endl;
				}
			}
		}
	}
	
	trace << PSTR("[testGetters1] Finished: ") << (result ? PSTR("PASSED") : PSTR("FAILED")) << endl << endl;
	printDelimiter2();
	return result;
}

//Tests: get_route_entry(uint8_t, uint8_t), get_route_entry(NetworkV1::route_t*), get_route_entry_index	
bool testGetters2(RouteCache* route_cache, void* route_ptr) {
	printDelimiter2();
	trace << PSTR("[testGetters2] Started") << endl;
	bool result = true;
	NetworkV1::route_t (&route)[RouteCache::MAX_DST_NODES][RouteCache::MAX_DST_ROUTES] = 
		*reinterpret_cast<NetworkV1::route_t (*)[RouteCache::MAX_DST_NODES][RouteCache::MAX_DST_ROUTES]>(route_ptr);
	
	//Setup: add routes
	trace << PSTR("[testGetters1] Adding routes...") << endl;
	for ( int i = 0; i < RouteCache::MAX_DST_NODES; i ++ )
		for ( int j = 0; j < RouteCache::MAX_DST_ROUTES; j ++ )
			route_cache->add_route_entry(&route[i][j], false);
	
	//Phase 1: check get_route_entry()
	trace << PSTR("[testGetters2] Testing routes via get_route_entry()") << endl;
	
	
	
	trace << PSTR("[testGetters2] Finished: ") << (result ? PSTR("PASSED") : PSTR("FAILED")) << endl << endl;
	printDelimiter2();
	return result;
}

bool testStart() {
