diff --git a/LIBVIRT_README.md b/LIBVIRT_README.md
new file mode 100644
index 0000000..8240618
--- /dev/null
+++ b/LIBVIRT_README.md
@@ -0,0 +1,55 @@
+# Detection Lab Libvirt build
+
+## Intro
+
+This page contains the instruction to build DetectionLab for Qemu/LibVirt. This is the provider for you *if*:
+* You are familiar with LibVirt, virt-manager and Qemu and prefer this software stack instead of VirtualBox
+* You are willing to spend a bit more time thinkering with the build process as it is less hands-off than the official DetectionLab
+
+A [step-by-step guide is available here](https://selorasec.wordpress.com/2019/12/03/ad-in-a-box-for-pocs-and-iocs-on-the-cheap-detectionlab-on-libvirt/#Setting_Up_Vagrant).
+
+## Prequisite
+### LibVirt
+
+The `libvirt` and `virt-manager` installation walkthrough and documentation is out of scope of this project. To follow along, you need an already working installation of `libvirt`, `virt-manager`, and `QEMU+kvm`. 
+
+### Packer
+
+1.  The [Virtio drivers](https://docs.fedoraproject.org/en-US/quick-docs/creating-windows-virtual-machines-using-virtio-drivers/) ISO needs to be location in the `DetectionLab/Packer/` directory.   
+
+* This is a direct [link to the latest version of the virtio drivers ISO](https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win.iso).   
+* There's also a "stable" version available [here](https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso).  
+
+2. Edit the windows_X.json files
+* Make sure the following user-defined variables are pointing to the right thing:
+ * `virtio_win_iso` : The ISO containing thethe lastest VirtIO drivers
+ * `packer_build_dir` : Where to output the QCOW2 images. It's a temporary directory, the .box files will still be in DetectionLab/Packer
+
+3. Build the images
+```
+env TMPDIR=/path/to/large/storage/ PACKER_LOG=1 PACKER_LOG_PATH="packer_build.log" packer build --only=qemu windows_2016.json
+env TMPDIR=/path/to/large/storage/ PACKER_LOG=1 PACKER_LOG_PATH="packer_build.log" packer build --only=qemu windows_10.json
+```
+
+### Vagrant
+1. Install the necessary plugins:
+* `vagrant plugin install vagrant-reload vagrant-libvirt vagrant-winrm-syncedfolders`
+* See the guide for ubuntu as the vagrant packages comes with a ton on unofficial & outdated plugins that will cause problems
+2. Add the previously built windows .box files
+* `vagrant box add windows_10_libvirt.box --name windows_10_libvirt`
+* `vagrant box add windows_2016_libvirt.box --name windows_2016_libvirt`
+3. Build: `vagrant up --provider libvirt --no-parallel --provision`
+
+#### Notes: 
+The libvirt builder is highly experimental. This sections describes the tradeoffs and the differences between the vanilla DetectionLab.
+
+- No pre-built images and integration with the build.sh script for now. This means building the Windows base boxes with Packer (> 1h) and provisioning with Vagrant manually (> 1h). Fortunately, the process is relatively straightforward.
+- The boxes will have two network adapters
+The vagrant-libvirt provider works by binding to a "management" network adapter IP addresses. The way vagrant finds the VM's IP address is by probing the dnsmasq lease file of libvirt's host. There's probably a better way, but this is the best I could do that just works (tm) so far. Here's what the configuration looks like:
+
+* Management Network: Isolated network, no NAT, no internet access, with DHCP.
+* Detectionlab Network: 192.168.38.0/24, with NAT, with internet access, with DHCP.
+
+- The synced folder is using an old, slow and buggy plugin. While this barely works, it's enough to push the provisioning scripts to the Windows instances. Any modifications to the `vm.synced_folder` in the VagrantFile libvirt provider will likely break the provisionning process
+
+- The graphical and input settings assume the use of virt-manager with the SPICE viewer on Windows and the VNC viewer on Linux (logger). The spice agent for copy/pasting and other quality of life improvement, like auto-resolution changes is *NOT* installed on the Windows hosts. *Guacamole* is a better way to access your VMs.
diff --git a/Packer/answer_files/10_virtio/Autounattend.xml b/Packer/answer_files/10_virtio/Autounattend.xml
new file mode 100755
index 0000000..6d9add4
--- /dev/null
+++ b/Packer/answer_files/10_virtio/Autounattend.xml
@@ -0,0 +1,275 @@
+
+
+    
+    
+	
+         
+            
+		    E:\viostor\w10\amd64
+            
+            
+		    E:\vioscsi\w10\amd64
+            
+            
+		    E:\NetKVM\w10\amd64
+            
+            
+		    E:\Baloon\w10\amd64
+            
+            
+		    E:\pvpanic\w10\amd64
+            
+            
+		    E:\qxldod\w10\amd64
+            
+         
+      
+
+        
+            
+                
+                    
+                        
+                            1
+                            Primary
+                            true
+                        
+                    
+                    
+                        
+                            false
+                            NTFS
+                            C
+                            1
+                            1
+                            
+                        
+                    
+                    0
+                    true
+                
+                OnError
+            
+            
+                true
+                Vagrant
+                Vagrant
+
+                
+
+                
+                NPPR9-FWDCX-D2C8J-H872K-2YT43
+                    Never
+                
+            
+            
+                
+                    
+                        0
+                        1
+                    
+                    OnError
+                    false
+                    
+                        
+                            /IMAGE/NAME
+                            Windows 10 Enterprise Evaluation
+                        
+                    
+                
+            
+        
+        
+            
+                en-US
+            
+            en-US
+            en-US
+            en-US
+            en-US
+            en-US
+        
+    
+    
+        
+            false
+        
+    
+    
+        
+            en-US
+            en-US
+            en-US
+            en-US
+        
+        
+            
+                
+                    vagrant
+                    true
+                
+                
+                    
+                        
+                            vagrant
+                            true
+                        
+                        Vagrant User
+                        vagrant
+                        administrators
+                        vagrant
+                    
+                
+            
+            
+                true
+                true
+                Home
+                1
+            
+            
+                
+                    vagrant
+                    true
+                
+                vagrant
+                true
+            
+            
+                
+                    cmd.exe /c powershell -Command "Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force"
+                    Set Execution Policy 64 Bit
+                    1
+                    true
+                
+                
+                    C:\Windows\SysWOW64\cmd.exe /c powershell -Command "Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force"
+                    Set Execution Policy 32 Bit
+                    2
+                    true
+                
+                
+                    cmd.exe /c reg add "HKLM\System\CurrentControlSet\Control\Network\NewNetworkWindowOff"
+                    Network prompt
+                    3
+                    true
+                
+                
+                    cmd.exe /c C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File a:\fixnetwork.ps1
+                    Fix public network
+                    4
+                    true
+                
+                
+                    C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File a:\disable-winrm.ps1
+                    Disable WinRM
+                    5
+                    true
+                
+                
+                    %SystemRoot%\System32\reg.exe ADD HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ /v HideFileExt /t REG_DWORD /d 0 /f
+                    6
+                    Show file extensions in Explorer
+                
+                
+                    %SystemRoot%\System32\reg.exe ADD HKCU\Console /v QuickEdit /t REG_DWORD /d 1 /f
+                    7
+                    Enable QuickEdit mode
+                
+                
+                    %SystemRoot%\System32\reg.exe ADD HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ /v Start_ShowRun /t REG_DWORD /d 1 /f
+                    8
+                    Show Run command in Start Menu
+                
+                
+                    %SystemRoot%\System32\reg.exe ADD HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ /v StartMenuAdminTools /t REG_DWORD /d 1 /f
+                    9
+                    Show Administrative Tools in Start Menu
+                
+                
+                    %SystemRoot%\System32\reg.exe ADD HKLM\SYSTEM\CurrentControlSet\Control\Power\ /v HibernateFileSizePercent /t REG_DWORD /d 0 /f
+                    10
+                    Zero Hibernation File
+                
+                
+                    %SystemRoot%\System32\reg.exe ADD HKLM\SYSTEM\CurrentControlSet\Control\Power\ /v HibernateEnabled /t REG_DWORD /d 0 /f
+                    11
+                    Disable Hibernation Mode
+                
+                
+                    cmd.exe /c wmic useraccount where "name='vagrant'" set PasswordExpires=FALSE
+                    12
+                    Disable password expiration for vagrant user
+                
+                
+                    %SystemRoot%\System32\reg.exe ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /t REG_SZ /d "vagrant" /f
+                    13
+                    Enable AutoLogon
+                
+                
+                    %SystemRoot%\System32\reg.exe ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 1 /f
+                    14
+                    Enable AutoLogon
+                
+                
+                
+                    cmd.exe /c C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File a:\enable-winrm.ps1
+                    Enable WinRM
+                    99
+                
+                
+                
+                
+                
+            
+            false
+        
+    
+    
+        
+            
+                false
+            
+            
+            vagrant-10
+            Pacific Standard Time
+            
+        
+        
+            true
+        
+        
+            true
+        
+    
+    
+
diff --git a/Packer/answer_files/2016_virtio/Autounattend.xml b/Packer/answer_files/2016_virtio/Autounattend.xml
new file mode 100755
index 0000000..1152963
--- /dev/null
+++ b/Packer/answer_files/2016_virtio/Autounattend.xml
@@ -0,0 +1,271 @@
+
+
+    
+	
+         
+            
+		    E:\viostor\2k16\amd64
+            
+            
+		    E:\vioscsi\2k16\amd64
+            
+            
+		    E:\NetKVM\2k16\amd64
+            
+            
+		    E:\Baloon\2k16\amd64
+            
+            
+		    E:\pvpanic\2k16\amd64
+            
+            
+		    E:\qxldod\2k16\amd64
+            
+         
+
+      
+        
+            
+                en-US
+            
+            en-US
+            en-US
+            en-US
+            en-US
+            en-US
+        
+        
+            
+                
+                    
+                        
+                            Primary
+                            1
+                            350
+                        
+                        
+                            2
+                            Primary
+                            true
+                        
+                    
+                    
+                        
+                            true
+                            NTFS
+                            
+                            1
+                            1
+                        
+                        
+                            NTFS
+                            
+                            C
+                            2
+                            2
+                        
+                    
+                    0
+                    true
+                
+            
+            
+                
+                    
+                        
+                            /IMAGE/NAME
+                            Windows Server 2016 SERVERSTANDARD
+                        
+                    
+                    
+                        0
+                        2
+                    
+                
+            
+            
+                
+                
+                    
+                    
+                    
+                    OnError
+                
+                true
+                Vagrant
+                Vagrant
+            
+        
+    
+    
+        
+            
+                false
+            
+            vagrant-2016
+            Pacific Standard Time
+            
+        
+        
+            true
+        
+        
+            false
+            false
+        
+        
+            true
+        
+        
+            true
+        
+        
+            
+                
+                    1
+                    Set Execution Policy 64 Bit
+                    cmd.exe /c powershell -Command "Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force"
+                
+                
+                    2
+                    Set Execution Policy 32 Bit
+                    cmd.exe /c powershell -Command "Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force"
+                
+                
+                    3
+                    Disable WinRM
+                    C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File a:\disable-winrm.ps1
+                
+            
+        
+    
+    
+        
+            
+                
+                    vagrant
+                    true
+                
+                true
+                vagrant
+            
+            
+                
+                    cmd.exe /c powershell -Command "Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force"
+                    Set Execution Policy 64 Bit
+                    1
+                    true
+                
+                
+                    C:\Windows\SysWOW64\cmd.exe /c powershell -Command "Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force"
+                    Set Execution Policy 32 Bit
+                    2
+                    true
+                
+                
+                    C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File a:\disable-winrm.ps1
+                    Disable WinRM
+                    3
+                    true
+                
+                
+                    %SystemRoot%\System32\reg.exe ADD HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ /v HideFileExt /t REG_DWORD /d 0 /f
+                    4
+                    Show file extensions in Explorer
+                
+                
+                    %SystemRoot%\System32\reg.exe ADD HKCU\Console /v QuickEdit /t REG_DWORD /d 1 /f
+                    5
+                    Enable QuickEdit mode
+                
+                
+                    %SystemRoot%\System32\reg.exe ADD HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ /v Start_ShowRun /t REG_DWORD /d 1 /f
+                    6
+                    Show Run command in Start Menu
+                
+                
+                    %SystemRoot%\System32\reg.exe ADD HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ /v StartMenuAdminTools /t REG_DWORD /d 1 /f
+                    7
+                    Show Administrative Tools in Start Menu
+                
+                
+                    %SystemRoot%\System32\reg.exe ADD HKLM\SYSTEM\CurrentControlSet\Control\Power\ /v HibernateFileSizePercent /t REG_DWORD /d 0 /f
+                    8
+                    Zero Hibernation File
+                
+                
+                    %SystemRoot%\System32\reg.exe ADD HKLM\SYSTEM\CurrentControlSet\Control\Power\ /v HibernateEnabled /t REG_DWORD /d 0 /f
+                    9
+                    Disable Hibernation Mode
+                
+                
+                    cmd.exe /c wmic useraccount where "name='vagrant'" set PasswordExpires=FALSE
+                    10
+                    Disable password expiration for vagrant user
+                
+                
+                
+                    cmd.exe /c C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File a:\enable-winrm.ps1
+                    Enable WinRM
+                    99
+                
+                
+                
+		
+                
+            
+            
+                true
+                true
+                true
+                true
+                true
+                Home
+                1
+            
+            
+                
+                    vagrant
+                    true
+                
+                
+                    
+                        
+                            vagrant
+                            true
+                        
+                        administrators
+                        Vagrant
+                        vagrant
+                        Vagrant User
+                    
+                
+            
+            
+        
+    
+    
+        
+            false
+        
+    
+    
+
diff --git a/Packer/answer_files/2016_virtio/Autounattend_sysprep.xml b/Packer/answer_files/2016_virtio/Autounattend_sysprep.xml
new file mode 100755
index 0000000..cb538aa
--- /dev/null
+++ b/Packer/answer_files/2016_virtio/Autounattend_sysprep.xml
@@ -0,0 +1,49 @@
+
+
+    
+        
+            0
+        
+        
+            false
+            false
+        
+    
+    
+        
+            en-US
+            en-US
+            en-US
+            en-US
+        
+        
+            
+                true
+                1
+                Home
+                true
+            
+            UTC
+            
+                
+                    vagrant
+                    true
+                
+                
+                    
+                        
+                            vagrant
+                            true
+                        
+                        administrators
+                        Vagrant
+                        vagrant
+                        Vagrant User
+                    
+                
+            
+        
+    
+    
+    
+
diff --git a/Packer/windows_10.json b/Packer/windows_10.json
index 524fd07..9036bdf 100644
--- a/Packer/windows_10.json
+++ b/Packer/windows_10.json
@@ -1,5 +1,49 @@
 {
   "builders": [
+	  {
+      "type": "qemu",
+      "vm_name":"windows_10",
+      "communicator": "winrm",
+      "iso_url": "{{user `iso_url`}}",
+      "iso_checksum_type": "{{user `iso_checksum_type`}}",
+      "iso_checksum": "{{user `iso_checksum`}}",
+      "headless": true,
+      "boot_wait": "6m",
+      "boot_command": "",
+      "winrm_username": "vagrant",
+      "winrm_password": "vagrant",
+      "winrm_timeout": "4h",
+      "shutdown_timeout": "2h",
+      "shutdown_command": "a:/sysprep.bat",
+
+      "accelerator": "kvm",
+      "disk_size": "{{user `disk_size`}}",
+
+      "output_directory": "{{ user `packer_build_dir`}}",
+
+      "qemuargs": [
+	[ "-m", "2048"],
+	[ "-smp", "2"],
+        [ "-drive", "file={{ user `virtio_win_iso` }},media=cdrom,index=3" ],
+	[ "-drive", "file={{ user `packer_build_dir`}}/{{ .Name }},if=virtio,cache=writeback,discard=ignore,format=qcow2,index=1" ]
+	],
+
+      "floppy_files": [
+        "{{user `autounattend_virtio`}}",
+        "./floppy/WindowsPowershell.lnk",
+        "./floppy/PinTo10.exe",
+        "./scripts/fixnetwork.ps1",
+        "./scripts/rearm-windows.ps1",
+        "./scripts/disable-screensaver.ps1",
+        "./scripts/disable-winrm.ps1",
+        "./scripts/enable-winrm.ps1",
+        "./scripts/microsoft-updates.bat",
+        "./scripts/win-updates.ps1",
+        "./scripts/unattend.xml",
+        "./scripts/sysprep.bat"
+      ]
+
+	  },
     {
       "type": "vmware-iso",
       "vm_name":"windows_10",
@@ -141,6 +185,9 @@
     "iso_checksum_type": "sha256",
     "iso_url": "https://software-download.microsoft.com/download/pr/18362.30.190401-1528.19h1_release_svc_refresh_CLIENTENTERPRISEEVAL_OEMRET_x64FRE_en-us.iso",
     "autounattend": "./answer_files/10/Autounattend.xml",
-    "disk_size": "61440"
+    "disk_size": "61440",
+    "virtio_win_iso": "./virtio-win.iso",
+    "autounattend_virtio": "./answer_files/10_virtio/Autounattend.xml",
+    "packer_build_dir": "/media/packer_build_dir/win10"
   }
 }
diff --git a/Packer/windows_2016.json b/Packer/windows_2016.json
index 967f465..91b8192 100644
--- a/Packer/windows_2016.json
+++ b/Packer/windows_2016.json
@@ -1,5 +1,47 @@
 {
   "builders": [
+    {
+      "type": "qemu",
+      "vm_name":"windows_10",
+      "communicator": "winrm",
+      "iso_url": "{{user `iso_url`}}",
+      "iso_checksum_type": "{{user `iso_checksum_type`}}",
+      "iso_checksum": "{{user `iso_checksum`}}",
+      "headless": true,
+      "boot_wait": "6m",
+      "boot_command": "",
+      "winrm_username": "vagrant",
+      "winrm_password": "vagrant",
+      "winrm_timeout": "4h",
+      "shutdown_command": "shutdown /s /t 10 /f /d p:4:1 /c \"Packer Shutdown\"",
+
+      "accelerator": "kvm",
+      "disk_size": "{{user `disk_size`}}",
+
+      "output_directory": "{{ user `packer_build_dir`}}",
+
+      "qemuargs": [
+	[ "-m", "2048"],
+	[ "-smp", "2"],
+        [ "-drive", "file={{ user `virtio_win_iso` }},media=cdrom,index=3" ],
+	[ "-drive", "file={{ user `packer_build_dir`}}/{{ .Name }},if=virtio,cache=writeback,discard=ignore,format=qcow2,index=1" ]
+	],
+
+      "floppy_files": [
+        "{{user `autounattend_virtio`}}",
+        "./floppy/WindowsPowershell.lnk",
+        "./floppy/WindowsPowershell.lnk",
+        "./floppy/PinTo10.exe",
+        "./scripts/unattend.xml",
+        "./scripts/sysprep.bat",
+        "./scripts/disable-screensaver.ps1",
+        "./scripts/disable-winrm.ps1",
+        "./scripts/enable-winrm.ps1",
+        "./scripts/microsoft-updates.bat",
+        "./scripts/win-updates.ps1"
+      ]
+
+	  },
     {
       "vm_name":"WindowsServer2016",
       "type": "vmware-iso",
@@ -126,6 +168,10 @@
     "iso_url": "https://software-download.microsoft.com/download/pr/Windows_Server_2016_Datacenter_EVAL_en-us_14393_refresh.ISO",
     "iso_checksum_type": "md5",
     "iso_checksum": "70721288BBCDFE3239D8F8C0FAE55F1F",
-    "autounattend": "./answer_files/2016/Autounattend.xml"
+    "disk_size": "61440",
+    "autounattend": "./answer_files/2016/Autounattend.xml",
+    "virtio_win_iso": "./virtio-win.iso",
+    "autounattend_virtio": "./answer_files/2016_virtio/Autounattend.xml",
+    "packer_build_dir": "/media/packer_build_dir/win2016"
   }
 }
diff --git a/Terraform/locals.tf b/Terraform/locals.tf
index f2b5fd1..380edb7 100644
--- a/Terraform/locals.tf
+++ b/Terraform/locals.tf
@@ -4,4 +4,3 @@ locals {
   ata_url       = "https://${aws_instance.wef.public_ip}"
   guacamole_url = "http://${aws_instance.logger.public_ip}:8080/guacamole"
 }
-
diff --git a/Vagrant/Vagrantfile b/Vagrant/Vagrantfile
index b63a906..cce7dc4 100644
--- a/Vagrant/Vagrantfile
+++ b/Vagrant/Vagrantfile
@@ -1,7 +1,26 @@
+libvirt_win10_box = "../Boxes/windows_10_libvirt.box"
+libvirt_win2016_box = "../Boxes/windows_2016_libvirt.box"
+
 Vagrant.configure("2") do |config|
 
+  config.vm.provider "libvirt" do |libvirt|
+    # This is required for Vagrant to properly configure the network interfaces.
+    # See libvirt's README section for more information
+
+    libvirt.management_network_name = "VagrantMgmt"
+    libvirt.management_network_address = "192.168.123.0/24"
+    libvirt.management_network_mode = "none"
+
+    libvirt.cpu_mode = "host-passthrough"
+
+    # Which storage pool path to use. Default to /var/lib/libvirt/images or ~/.local/share/libvirt/images depending on if you are running a system or user QEMU/KVM session.
+    #libvirt.storage_pool_path = '/media/storage_nvme/system_session_vm_pool'
+    libvirt.storage_pool_name = 'default'
+  end
+
   config.vm.define "logger" do |cfg|
-    cfg.vm.box = "bento/ubuntu-18.04"
+    cfg.vm.box = "generic/ubuntu1604"
+
     cfg.vm.hostname = "logger"
     cfg.vm.provision :shell, path: "bootstrap.sh"
     cfg.vm.network :private_network, ip: "192.168.38.105", gateway: "192.168.38.1", dns: "8.8.8.8"
@@ -24,6 +43,17 @@ Vagrant.configure("2") do |config|
       vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
       vb.customize ["setextradata", "global", "GUI/SuppressMessages", "all" ]
     end
+
+    cfg.vm.provider "libvirt" do |lv, override|
+      lv.graphics_type = "vnc"
+      lv.video_type = "vga"
+      lv.input :type => "tablet", :bus => "usb"
+      lv.video_vram = 32768
+      lv.memory = 4096
+      lv.cpus = 2
+
+      override.vm.synced_folder './', '/vagrant', type: 'rsync' 
+    end
   end
 
   config.vm.define "dc" do |cfg|
@@ -35,9 +65,10 @@ Vagrant.configure("2") do |config|
     cfg.winrm.basic_auth_only = true
     cfg.winrm.timeout = 300
     cfg.winrm.retry_limit = 20
-    cfg.vm.network :private_network, ip: "192.168.38.102", gateway: "192.168.38.1"
+    cfg.vm.network :private_network, ip: "192.168.38.102", gateway: "192.168.38.1", dns: "8.8.8.8"
 
-    cfg.vm.provision "shell", path: "scripts/fix-second-network.ps1", privileged: false, args: "192.168.38.102"
+    # Added DNS here because libvirt fails to properly configure the windows client otherwise... :(
+    cfg.vm.provision "shell", path: "scripts/fix-second-network.ps1", privileged: true, args: "-ip 192.168.38.102 -dns 8.8.8.8 -gateway 192.168.38.1" 
     cfg.vm.provision "shell", path: "scripts/provision.ps1", privileged: false
     cfg.vm.provision "reload"
     cfg.vm.provision "shell", path: "scripts/provision.ps1", privileged: false
@@ -77,6 +108,26 @@ Vagrant.configure("2") do |config|
       vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
       vb.customize ["setextradata", "global", "GUI/SuppressMessages", "all" ]
     end
+
+    cfg.vm.provider "libvirt" do |lv, override|
+      lv.graphics_type = "spice"
+      lv.video_type = "qxl"
+      lv.input :type => "tablet", :bus => "usb"
+
+      override.vm.box = libvirt_win2016_box
+      lv.video_vram = 32768
+      lv.memory = 3072
+      lv.cpus = 2
+      # This is NOT the right semantic for Vagrant synced folder. It's a dirty hack around :
+      # https://github.com/Cimpress-MCP/vagrant-winrm-syncedfolders/issues/11
+      # If dest is /vagrant, it'll upload in C:\vagrant\Vagrant....
+      # It's like 'cp /my/dir /my/dir2' vs 'cp /my/dir /my/dir2/'
+      #
+      # The Winrm synced folder plugin is also excruciatingly slow. Would gladly replace with something else 
+      # that works with linux host and windows guest...
+
+      override.vm.synced_folder '.', '/', type: 'winrm' 
+    end
   end
 
   config.vm.define "wef" do |cfg|
@@ -89,7 +140,7 @@ Vagrant.configure("2") do |config|
     cfg.winrm.retry_limit = 20
     cfg.vm.network :private_network, ip: "192.168.38.103", gateway: "192.168.38.1", dns: "192.168.38.102"
 
-    cfg.vm.provision "shell", path: "scripts/fix-second-network.ps1", privileged: false, args: "-ip 192.168.38.103 -dns 192.168.38.102"
+    cfg.vm.provision "shell", path: "scripts/fix-second-network.ps1", privileged: true, args: "-ip 192.168.38.103 -dns 8.8.8.8 -gateway 192.168.38.1" 
     cfg.vm.provision "shell", path: "scripts/provision.ps1", privileged: false
     cfg.vm.provision "shell", inline: "cscript c:\\windows\\system32\\slmgr.vbs -rearm", privileged: false
     cfg.vm.provision "reload"
@@ -129,6 +180,25 @@ Vagrant.configure("2") do |config|
       vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
       vb.customize ["setextradata", "global", "GUI/SuppressMessages", "all" ]
     end
+
+    cfg.vm.provider "libvirt" do |lv, override|
+      lv.graphics_type = "spice"
+      lv.video_type = "qxl"
+      lv.input :type => "tablet", :bus => "usb"
+      override.vm.box = libvirt_win2016_box
+      lv.video_vram = 32768
+      lv.memory = 2048
+      lv.cpus = 2
+      # This is NOT the right semantic for Vagrant synced folder. It's a dirty hack around :
+      # https://github.com/Cimpress-MCP/vagrant-winrm-syncedfolders/issues/11
+      # If dest is /vagrant, it'll upload in C:\vagrant\Vagrant....
+      # It's like 'cp /my/dir /my/dir2' vs 'cp /my/dir /my/dir2/'
+      #
+      # The Winrm synced folder plugin is also excruciatingly slow. Would gladly replace with something else 
+      # that works with linux host and windows guest...
+
+      override.vm.synced_folder '.', '/', type: 'winrm' 
+    end
   end
 
   config.vm.define "win10" do |cfg|
@@ -141,7 +211,7 @@ Vagrant.configure("2") do |config|
     cfg.winrm.retry_limit = 20
     cfg.vm.network :private_network, ip: "192.168.38.104", gateway: "192.168.38.1", dns: "192.168.38.102"
 
-    cfg.vm.provision "shell", path: "scripts/fix-second-network.ps1", privileged: false, args: "-ip 192.168.38.104 -dns 192.168.38.102"
+    cfg.vm.provision "shell", path: "scripts/fix-second-network.ps1", privileged: true, args: "-ip 192.168.38.104 -dns 8.8.8.8 -gateway 192.168.38.1" 
     cfg.vm.provision "shell", path: "scripts/MakeWindows10GreatAgain.ps1", privileged: false
     cfg.vm.provision "shell", path: "scripts/provision.ps1", privileged: false
     cfg.vm.provision "shell", inline: "cscript c:\\windows\\system32\\slmgr.vbs -rearm", privileged: false
@@ -178,5 +248,23 @@ Vagrant.configure("2") do |config|
       vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
       vb.customize ["setextradata", "global", "GUI/SuppressMessages", "all" ]
     end
+    cfg.vm.provider "libvirt" do |lv, override|
+      lv.graphics_type = "spice"
+      lv.video_type = "qxl"
+      lv.input :type => "tablet", :bus => "usb"
+      override.vm.box = libvirt_win10_box
+      lv.video_vram = 32768
+      lv.memory = 2048
+      lv.cpus = 2
+      # This is NOT the right semantic for Vagrant synced folder. It's a dirty hack around :
+      # https://github.com/Cimpress-MCP/vagrant-winrm-syncedfolders/issues/11
+      # If dest is /vagrant, it'll upload in C:\vagrant\Vagrant....
+      # It's like 'cp /my/dir /my/dir2' vs 'cp /my/dir /my/dir2/'
+      #
+      # The Winrm synced folder plugin is also excruciatingly slow. Would gladly replace with something else 
+      # that works with linux host and windows guest...
+
+      override.vm.synced_folder '.', '/', type: 'winrm' 
+    end
   end
 end
diff --git a/Vagrant/bootstrap.sh b/Vagrant/bootstrap.sh
index f0b643d..d985119 100644
--- a/Vagrant/bootstrap.sh
+++ b/Vagrant/bootstrap.sh
@@ -57,6 +57,11 @@ test_prerequisites() {
 }
 
 fix_eth1_static_ip() {
+  USING_KVM=$(sudo lsmod | grep kvm)
+  if [ ! -z "$USING_KVM" ]; then
+    echo "[*] Using KVM, no need to fix DHCP for eth1 iface"
+    return 0
+  fi
   # There's a fun issue where dhclient keeps messing with eth1 despite the fact
   # that eth1 has a static IP set. We workaround this by setting a static DHCP lease.
   echo -e 'interface "eth1" {
diff --git a/Vagrant/scripts/fix-second-network.ps1 b/Vagrant/scripts/fix-second-network.ps1
index 4c199cc..d38f7fe 100755
--- a/Vagrant/scripts/fix-second-network.ps1
+++ b/Vagrant/scripts/fix-second-network.ps1
@@ -1,10 +1,32 @@
 # Source: https://github.com/StefanScherer/adfs2
-param ([String] $ip, [String] $dns)
+param ([String] $ip, [String] $dns, [String] $gateway)
 
-if (! (Test-Path 'C:\Program Files\VMware\VMware Tools')) {
+if ( (Get-NetAdapter | Select-Object -First 1 | Select-Object -ExpandProperty InterfaceDescription).Contains('Red Hat VirtIO')) {
+  Write-Host "Setting Network Configuration for LibVirt interface"
+  $subnet = $ip -replace "\.\d+$", ""
+  $name = (Get-NetIPAddress -AddressFamily IPv4 `
+     | Where-Object -FilterScript { ($_.IPAddress).StartsWith("$subnet") } `
+     ).InterfaceAlias
+  if ($name) {
+    Write-Host "Set IP address to $ip of interface $name"
+    & netsh.exe int ip set address "$name" static $ip 255.255.255.0 "$gateway"
+    if ($dns) {
+      Write-Host "Set DNS server address to $dns of interface $name"
+      & netsh.exe interface ipv4 add dnsserver "$name" address=$dns index=1
+    }
+  } else {
+    Write-Error "Could not find a interface with subnet $subnet.xx"
+  }
+  
+  exit 0
+}
+
+if (! (Test-Path 'C:\Program Files\VMware\VMware Tools') ) {
   Write-Host "Nothing to do for other providers than VMware."
   exit 0
 }
+
+
 Write-Host "$('[{0:HH:mm}]' -f (Get-Date))"
 Write-Host "Setting IP address and DNS information for the Ethernet1 interface"
 Write-Host "If this step times out, it's because vagrant is connecting to the VM on the wrong interface"