Improve your browsing speed with this easy trick

I’ve recently installed the new Deco X20 mesh system and while the converage and speed tests were awesome, I always had the feeling the web experience could be a bit better.

So if we speak about browsing experience, the responsiveness of the DNS server is one of the main components which can make a big difference.

Note that by default, your IPS router will act as the main DNS server but unless it has cached queries, it will also pass the query upstream. If you also added a mesh system behind your ISP router, it means that you have two hops which are adding latency. So for sure the key here is to manualy add your favorite DNS server.

But how to choose it? While reliability and branding might be weighting alot, note that for DNS, speed should be the first thing to consider so we are also looking at proximity which translates into response times.

There are some good 3rd party tools out there that can help you select the best DNS sever, but I prefer to investigate it myself as it’s not rocket science 🙂

First test you can run, is a simple ping. Though note that DNS runs on UDP, while Ping is a TCP connection over the ICMP protocol. Ping will give you an idea, but not the ultimate response.

Taking for example from Google and from CloudFlare:

Allright, so at first look, CloudFlare’s DNS is faster, but let’s put it to real test.

From the router you’re connecting, go to Internet Setting -> DNS settings -> Switch from Auto to Manual.
First, adding Google’s DNS, starting a Wireshark Capture and accessing a website I never browsed before. Then from the filter bar, add”the website you’re accessing”. For example This should filter out all the noise traffic:

Here is an example of querying a random website (which I removed for courtesy reasons)

The reposnse from the Google DNS server got back pretty fast (0.18 seconds):

But is it fast enough? Let’s test CloudFlare and see if we get even better timing:

Let’s see the response:

With 0.02 seconds, it seems we have a winner.

As a side note, next to the primary DNS server, for reliability reasons, I am also adding my router’s IP address (in this case as secondary DNS server.

Note, I am not saying CloudFlare’s DNS server is the best option in general. It is for me. But i highly reccomend testing before implementing

How to solve Google Maps/Waze issues on Android Auto

Seems that the issure reverted and the below workaround is not helping anymore.
In the past weeks I have tried multiple older Android Auto versions and still experiencing the same behavior.

Un until now, i’ve tried:

  • Older AA version
  • Disabled battery optimization for both AA, Waze & Google Maps
  • Enabled/Disabled Location permission for AA

None of the above improved the GPS accuracy so if anyone has found a fix already, would appreciate leaving a comment.

End of Edit //

This is not the typical O365VoiceLab post, but hey… sharing is caring 🙂

My wife and I are really enjoying our brand new car and so does Jax, our puppy who finnaly has a complete “living room” in the trunk 🙂

All nice and dandy until trying to use the Google Maps or Waze app through Android Auto and here comes the pain. The app behaves like it wouldn’t have proper GPS coverage, constantly repositioning, recalculating the route and flipping the map round and round…

Was just about to give up and buy a phone holster so I can use the maps apps in the old fashioned method, when it striked me… Why does Android Auto needs access to my Location service? If i’m already mirroring a location application which naturally has access to the location, why would i grant the same permission to Android Auto.

With this in mind, i went to Settings -> Apps -> Tap on Android Auto -> Tap on Permissions -> Select Location -> Tap on Deny Access. MAGIC, my problem dissapeared!

Seems that denying access to the location service for the Android Auto app, forces it to levrage the location service from the maps app itself which instantly mitigates the issue.

Hope you enjoyed the read and found some good advice here.

Meanwhile, safe travels and continue researching, learning and trubleshooting!


Creating custom normalization rules in Office365

We are all used to typing the numbers we want to reach, and magically, Skype for Business knows in which country you want to dial. Note that in order to actually reach to a PSTN endpoint, you have to dial the number in E.164 format.

To get a little bit into specifics, the E.164 number is constructed from: Country Code + Area Code +  Subscriber Access number. For example my fixed landline might be: +40268500xxx, where:

  • +40 is the Country Code for Romania
  • 268 is the Area Code for Brasov (yeah, I’m from Dracula’s land)
  • And 500xxx is the actual Subscriber Access number.

But wait, when people try to reach me from within the country, or even from within the same Area Code, they will not write the whole number. Instead, they will most likely call 268500xxx.

This is where the Dial Plans and the magical normalization rules come into play.

With Office365, based on your Usage Location, you will also get automatically assigned with a Dial Plan specific for your country.

For example, I’ve set a user with UsageLocation set on UK and automatically, this user has a UK Dial Plan:

Now, if I query this Dial plan, we will see a couple of normalization rules in effect:

Here, for example we can see the “GB Intl Dialing” normalization rule which says:

If you detect this pattern: ^00(\d+)$, translate to +$1. What it actually means is: If a number starts with “00”, replace it with a + sign. Why is that? Because people are used to dial 00 instead of the + sign. So if wanting to call a US number, people might dial 001xxx instead of +1 (remember, we have to have the numbers in E.164 format).

Now, what happens when the Normalization Rules predefined in the automatically assigned Dial Plan are not enough? Well, here is where the Tenant Dial Plan kicks-in. Sweet!

I have seen the ask where O365 users would like to have a short number for internal emergencies. For example, dialing 400 from Skype for Business, should ring at +40268500xxx.

Here is how to accomplish that:

First we will create a variable which will contain the value for a New Normalization rule where we define the pattern that we would like to be normalized:

$nr1 = New-CsVoiceNormalizationRule -Identity testA/nr1 -Description “TestA” -Pattern ‘^400$’ -Translation ‘+40268500xxx’ -InMemory

Next, we will create a new Tenant Dial Plan and add the newly normalization rules to it:

New-CsTenantDialPlan -Identity testA -NormalizationRules @{Add=$nr1}

!Note that I’ve wrote “rules” because it is possible to create more than one normalization rule to be added to the Tenant Dial Plan.

Now that we have created the Tenant Dial Plan, we can grant it either to one specific user, or to a set of users:

Granting to one specific account: Grant-CsTenantDialPlan -PolicyName testA -Identity

Granting the policy to a set of users:

Get-CsOnlineUser -Filter {HostingProvider -eq “”} | Grant-CsTenantDialPlan -policyname testA

!Please note that instead of “HostingProvider -eq “”” you can use any attribute visible under the get-csonlineuser cmdlet, and that is matching the subset of users you want to have the dial plan assigned. For example, if wanting to grant this new tenant dial plan to all your UK users, you can add the “Usagelocation -eq “UK” filter.

If you wrongfully assigned a Tenant Dial Plan to all your users as advised above, don’t worry, you can remove it with the following command:

Get-CsOnlineUser -Filter {HostingProvider -eq “”} | Grant-CsTenantDialPlan -policyname $null

And the result is:


Running the Network Assessment tool

The Skype for Business Network Assessment tool provides a simple and comprehensive option to check the network performance and understand if your network is prepared for handling Skype for Business and Microsoft Teams calls.

Start with downloading from and run the installer:


Check where the software is installed:

C:\Program Files\Microsoft Skype for Business Network Assessment Tool

Or C:\Program Files (x86)\Microsoft Skype for Business Network Assessment Tool

(Later Edit: With the new Microsoft Teams Network assesment tool, the current path is “C:\Program Files (x86)\Microsoft Teams Network Assessment Tool\”)


Open Cmd and navigate to the appropriate folder:

Cd ”C:\Program Files (x86)\Microsoft Skype for Business Network Assessment Tool”

or for Teams: Cd “C:\Program Files (x86)\Microsoft Teams Network Assessment Tool\”

Run tool with .\NetworkAssessmentTool.exe

If requested, allow the executable in the Windows Firewall

You will be presented with the initial outputs of the test, containing network values.

For example:

Now, you can access

And you can compare the values obtained above with the reference values presented in the above article:

Metric Target
Latency (one way) < 50ms
Latency (RTT or Round-trip Time) < 100ms
Burst packet loss <10% during any 200ms interval
Packet loss <1% during any 15s interval
Packet inter-arrival Jitter <30ms during any 15s interval
Packet reorder <0.05% out-of-order packets


As a best practice advice, the assessment should be run 3 times:

  1. When customer is connected to wi-fi (see this quite a lot) -> lack of QOS might cause Call Quality issues
  2. When customer is connected with ethernet cable.
  3. When customer is connected to outside network where traffic is not passing through firewall performing blocking/inspection/packet analysis.


Tips and Tricks:

Running .\NetworkAssessmentTool.exe /connectivitycheck /verbose will display the ip addresses and ports against which tests are being performed. This is a good starting point to check if some ports are being blocked in your network.


Unassign Service number from Conference Bridge

In Skype for Business admin center, you have the option to use one of your Service Numbers as default Conference Bridge number instead of the default shared number.

However, if you changed your mind and wish to unassign this number and use it for a different purpose, you might notice that the Unassign button is greyed-out and while hoovering over it, you are redirected to contact Support.

There is a workaround to do this by yourself, and all you need is Windows PowerShell and the Skype for Business Online Windows PowerShell Module available here.

Getting Started:

1.Connect to Skype for Business Online by using Windows PowerShell. (

2.Obtain the name of the Bridge by running the following cmdlet:

3. Unregister-CsOnlineDialInConferencingServiceNumber -BridgeName “Conference Bridge” -RemoveDefaultServiceNumber 1234 // where 1234 should be replaced by the number you wish to unregister.

4. Go back to the Skype for Business admin center and check if the number has been unassigned:


O365 number in “Failed” status / AssignmentFailed

Obtaining numbers in Office365 is pretty straight-forward. Just go to the Skype for Business Admin Portal, navigate to Voice -> Phone Numbers and click on the big plus sign:

Now, aside the licensing pre-requisites I was talking about here, you will also have to have setup Emergency Locations.

I am not going to go through what are Emergency Locations since are very well explain at, however, note that:

  • In the US, an Emergency Location is required when assigning a phone number to a user.
  • In EMEA, an Emergency Location is required when acquiring the phone number from the portal or porting the number to Microsoft.

Also, I would like to emphasize on the Emergency Calling Terms and Conditions and to be more specific, Admins should communicate to all users with Calling Plans in Office 365 that although Calling Plans can be used anywhere in the world where an Internet connection is available, users should not make an Emergency Services call from a location outside their home country/region because the call likely will not be routed to the appropriate call center in that country/region.

Moving forward with acquiring phone numbers, it is very important to understand that in order to successfully activate a phone number in Office365, the address setup in the Emergency Location which you will use to acquire the number, must match the phone number’s area code.

For example, I can successfully create an Emergency Location for Barcelona and then use it to acquire a Madrid phone number, however, after the number being stuck in “Provisioning” state for a while, it will then fail to activate, changing its status to “Failed”:


Doing a quick lookup in powershell for phone numbers which are not in Active state, will lead us straight to our broken phone number:

Now if indeed you have a wrong Emergency Address set on this number and you would like to change it, please note that:

  • You can use the “Change” button for the Emergency address
  • You must also grant this number to a user, otherwise it will not allow you to Save your settings
  • Once you Activate your number with an Emergency Location, you can no longer change it by yourself. If indeed you have activated a number with a specific Emergency Location and you need to change it, then you must get in contact with ptneu[at]

Doing another query in PowerShell, i can now see the number changed its ActivationState from Assignment Failed, to Assignment Pending, and moreover, it is also displaying my tenantID along with the ObjectID of the user to whom i’ve assigned it:

Fast forward through the night and querying the number again, I can see it both in the portal and PowerShell that now is activated:



How to change dial in conferencing number for SfB/Teams users

Picture the scenario where you need to change the default dial-in conferencing number for only part of the users within a tenant. That’s fine to do it manually if the numbering does not exceed 5-10 users, but we, IT guys, are lazy, so we’re going to do it from PowerShell anyway.

Needless to say that as pre-requisites you’ll have to have preferrably a Global Admin account and the Skype for Business Online Module for Powershell up and running:

First, make sure you have the Skype Online Connector installed. Get it from here.

Now, once the connector is installed on your machine, you can run all 4 lines at once in your PowerShell:

$credential = get-credential
Import-Module SkypeOnlineConnector
$lyncSession = New-CsOnlineSession -Credential $credential
Import-PSSession $lyncSession

If you didn’t see “red” in front of your eyes, it means you’re on the right track. If you did, you might want to run over some MVA courses available here

Now, we need a common attribute to collect in a variable all users for which we want to change the default Dial-in Conferencing number. In my lab, i’ve done this by querying the old number which I want to replace:

$user1 = Get-CsOnlineDialInConferencingUser | Where-Object {$_.ServiceNumber -ieq “old number here”}

Just to make sure we’re on the right track, we can call out the variable in order to check it’s contents.

Next step is to do a foreach loop here, changing the Dial-in Conferencing number for each object caught in our variable:
$user1 | foreach {Set-CsOnlineDialInConferencingUser -Identity $_.sipaddress -ServiceNumber “new number here”}


We have just sucesfully replaced one dial-in conferencing number with another for selected users.