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!


First steps towards landing a career in IT (part 1)

During these uncertain times, some of us are lucky enough and have the option to work from home, others, unfortunately had to temporary discontinue their work activities. Regardless of the situation, we should not stop learning. Even more, if you are in the situation where you had to stop your activity due to the COVID pandemic, maybe this is a good time to start a learning path in IT.

I cannot forget one of my old friends who some years ago, reached out to me and asked for guidance to start a career in IT. I recommended some courses and was glad to see that sometime after, he landed a job in this field.

Some years past by and our friend accumulated some experience in this field so we connected again to see how he can grow further. I can still remember the Skype for Business topologies we drew on pieces of paper and long story short, today he is handling as a senior engineer, one of the most complex Skype for Business and Microsoft Teams technical cases.

The Conclusion is: Yes, it can be done. Nope, it’s never too late to start learning and change your career.

COVID or not, always make time to learn new skills and invest in yourself.

For anyone willing to follow this path but not being sure where to start, I recommend:

  1. Start with Networking. This is the foundation of IT and it gives you a good understanding on how devices communicate across networks. Below is a short selection of trainings worth having a look: -> Great overview on networking -> You will need to setup an account which is quite easy to do and I love that it has stored one of the Microsoft Virtual Academy courses. Here, after you sign-up, you can enroll for free upcoming courses, or enjoy the ones already delivered. For example:

Another great resource is YouTube. Here you can find free videos as well, explaining specific technologies, as well as step-by-step instructions on how to deploy those (in the eventuality where you build your own lab, which I highly recommend)

  • User management. Next to networking, understanding Active Directory is one of the IT classics that each newcomer should master.

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:



User and Service numbers

In Office365, you can get two types of numbers: User numbers and Service number. Well, if the naming isn’t explanatory enough for you, I’ll elaborate this subject below. 

While User numbers can only be assigned to user accounts (you@yourdomain.tld), Service number cannot be assigned to users, but to services like: Auto Attendant, Call Queues or Conferencing Bridges. 

Aside the purpose, there are also capacity differences between these numbers. While User numbers can only handle a few simultaneous calls, Service numbers can handle hundreds of calls simultaneously. 

To get a better picture on Service number, imagine you call your mobile phone Carrier and you hit the Interactive Voice Response. Next to you, most likely other users are dialing that very same number and wonder around the IVR, so that Service number better be ready to handle a lot of Simultaneous calls. 

A little more info on: 

User numbers: 

Available for: 

  • Belgium 
  • Canada 
  • France 
  • Germany 
  • Ireland 
  • Netherlands 
  • Spain 
  • United kingdom 
  • US & Puerto Rico 


SfBOnline/Microsoft Teams license + Phone System + Domestic/International Calling + Communication Credits (optional). 

 Please note that if you go with “E-packs”, E5 already includes SfBOnline, Microsoft Teams and Phone System licenses, so you’ll only have to get Domestic or International Calling license and optionally Communication Credits (get it if you plan to dial destinations where included minutes don’t permit calling). 

 Regarding how many numbers you can acquire, you should know that it depends on the number of licenses you have. The formula is: 

Domestic and/or International Calling license * 1.1 + 10 

 So, if you have 5 Domestic Calling licenses and 5 international Calling ones, you can get: 


 Getting the numbers: 

At the time of writing this one, numbers are still to be acquired from the “old” Skype for Business Admin Center -> Voice -> Phone numbers. 

!note that you will only be able to get phone numbers for the countries where Domestic/International Calling is available: 



!note 2: For some countries like Belgium and Germany, you cannot purchase the numbers directly from the portal, so you’ll have to submit a number request to ptneu[at] 

For this, access first this link and select the Country or region to find the appropriate number request. 

!note 3: Phone number in this scenario can only be granted to users via the GUI. 

In powershell, the online-acquired phone number is visible under the LineUri attribute if doing a get-csonlineuser. However, setting value to the LineUri attribute via set-csuser -identity “your user” -LineUri tel:+44xxx, will throw the following error message:
Unable to set “LineURI”. This parameter is restricted within Remote Tenant PowerShell. 

+ CategoryInfo          : InvalidArgument: (:) [Set-CsUser], ManagementException 

+ FullyQualifiedErrorId : LineURI,Microsoft.Rtc.Management.AD.Cmdlets.SetOcsUserCmdlet 

Be advised that a similar attribute holding phone value (OnPremLineUri) can be granted value via the set-csuser cmdlet, however, you should not do that for online-acquired numbers. 

The OnPremLineUri attribute will be setup with a phone number only in Hybrid-Voice scenarios, but that is a different discussion. 

!note 4: Getting Phone numbers also requires setting up an Emergency Location. Stay around for an article regarding this topic

The conclusion is: Online-acquired numbers should and will be granted to users only via the Skype for Business Online Admin Center. 


Service numbers: 

As I was writing at the beginning, Service numbers can handle a high number of incoming calls simultaneously and are assigned to services like: Auto Attendants, Call Queues or Conferencing Bridge.

We should note that Service numbers can also be:

  • Regular numbers
  • Toll-free numbers

Toll-free numbers are numbers which can be dialed locally at zero cost for the caller. However, since someone actually has to pay for the call, you will need Communication Credits setup and you will be charged for each incoming call.

To get an idea on the costs, visit Microsoft’s voice calling page, scroll down to “See rates for where you want to call” and select your country and currency. You will download a nice Excel which displays rates for both incoming (to toll-free service numbers) and outgoing calls. Don’t worry, incoming calls to user numbers or regular service numbers are not charged.

Available for:

Service numbers are available to acquire for quite alot of countries as you can see in the screenshot below:

However, to make sure Service numbers (regular or toll-free) are available for the country where you want to get them, visit Microsoft’s “Country and region availability for Audio Conferencing and Calling Plans” page and select from the drop-down menu the country:

As you can see, in Romania I cannot get Calling Plans (Domestic/International Calling), so no User numbers for me, but I can get instead Service numbers, both regular and Toll-free. Moreover, I can also get Communication Credits to cover the expenses if I go for a toll-free number:


In order to be able to acquire Service numbers, you have to have Phone System and/or Audio Conferencing licenses added to your tenant, and of course, if you wish to get toll-free numbers, then Communication Credits need to be added as well.

Regarding the number of Service numbers you can get, the math is simpler here:

Tenants with:

  • 1 – 25 licenses can get 5 Service numbers
  • 26 – 49 licenses can get 10 Service numbers
  • 50 – 99 licenses can get 20 Service numbers

The list goes up to 1500 service numbers, so if you wanna see exactly where your organization is positioning, have a look here.


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.