diff --git a/deploy/cmdexec.py b/deploy/cmdexec.py
index 1d9bbbb..b14b7a7 100644
--- a/deploy/cmdexec.py
+++ b/deploy/cmdexec.py
@@ -41,7 +41,8 @@
         Returns:
             None
         """
-        proc = Popen(['scp'].append(SSH_ARGS).append([source, '%s:%s' % (self._server, target)]),
+        LOG.info('Transferring file %s -> %s' % (source, target))
+        proc = Popen(['scp'] + SSH_ARGS + [source, '%s:%s' % (self._server, target)],
                      stdin=PIPE, stdout=PIPE, close_fds=True)
         result = proc.wait()
         if result != 0:
@@ -74,6 +75,7 @@
         Returns:
             None
         """
+        LOG.info('Copying file %s -> %s' % (source, target))
         proc = Popen(['cp', source, target], stdin=PIPE, stdout=PIPE, close_fds=True)
         result = proc.wait()
         if result != 0:
diff --git a/deploy/config.py b/deploy/config.py
index a5e111c..5ccf485 100644
--- a/deploy/config.py
+++ b/deploy/config.py
@@ -24,6 +24,10 @@
         """Configure remote instance."""
         try:
             ssh_tgt = Target.for_remote_host(args.instance)
+            # Configure current user to allow them to use libvirt.
+            ssh_tgt.execute('sudo usermod -a -G libvirt ${USER}')
+            ssh_tgt.execute('newgrp libvirt')
+
             # Give user and libvirt access rights to specified folder.
             # Remote directory appears as 'no access rights' except for included
             # users.
@@ -32,14 +36,12 @@
             ssh_tgt.execute('sudo setfacl -m g:libvirt:rwx %s' % args.instance_folder)
             ssh_tgt.execute('sudo setfacl -m u:libvirt-qemu:rwx %s' % args.instance_folder)
 
-            # Configure current user to allow them to use libvirt.
-            ssh_tgt.execute('sudo usermod -a -G libvirt ${USER}')
-
             # Configure libvirt to allow qemu to connect to our sockets.
             ssh_tgt.execute('sudo sed -i\'\' \''
                             's/[#\\s]*security_driver = ".*"\\s*$/security_driver = "none"/g'
                             '\' /etc/libvirt/qemu.conf')
             ssh_tgt.execute('sudo service libvirtd restart')
+            ssh_tgt.execute('virsh net-create /usr/share/cuttlefish-common/network-abr0.xml')
 
         finally:
             pass
diff --git a/deploy/deploy.py b/deploy/deploy.py
index 315d8f3..fcc2114 100644
--- a/deploy/deploy.py
+++ b/deploy/deploy.py
@@ -17,15 +17,15 @@
         parser.add_argument('--system_build', type=str, required=False,
                             default='latest',
                             help='Build number to fetch from Android Build server.')
-        parser.add_argument('--configure', action='store_true',
-                            default=False,
-                            help='Configure remote server for cuttlefish.')
         parser.add_argument('--system_branch', type=str, required=False,
                             default='git_oc-gce-dev',
                             help='Android Build branch providing system images.')
         parser.add_argument('--system_target', type=str, required=False,
                             default='cf_x86_phone-userdebug',
                             help='Android Build target providing system images.')
+        parser.add_argument('--kernel_build', type=str, required=False,
+                            default='latest',
+                            help='Build number to fetch from Android Build server.')
         parser.add_argument('--kernel_branch', type=str, required=False,
                             default='kernel-n-dev-android-gce-3.18-x86_64',
                             help='Android Build branch providing kernel images.')
@@ -43,6 +43,14 @@
         parser.add_argument('--instance_folder', type=str, required=False,
                             default='/srv/cf',
                             help='Folder on the remote machine where images should be deployed.')
+        parser.add_argument('--force_update', type=str, required=False,
+                            help='Comma separated list of artifacts to force update.')
+
+
+    def _to_build_id(self, selector):
+        if selector == 'latest':
+            return '--latest'
+        return '--bid='+selector
 
 
     def execute(self, args):
@@ -57,9 +65,9 @@
             loc_tgt = Target.for_localhost()
             ssh_tgt = Target.for_remote_host(args.instance)
 
-            build_selector = '--latest'
-            if args.system_build != 'latest':
-                build_selector = '--bid=' + args.system_build
+            system_build = self._to_build_id(args.system_build)
+            kernel_build = self._to_build_id(args.kernel_build)
+            force_update = args.force_update.split(',')
 
             if not os.path.exists('system.img'):
                 if not os.path.exists(temp_image):
@@ -67,22 +75,21 @@
                         '/google/data/ro/projects/android/fetch_artifact '
                         '%s --branch=%s --target=%s '
                         '\'cf_x86_phone-img-*\' \'%s\'' %
-                        (build_selector, args.system_branch, args.system_target, temp_image))
+                        (system_build, args.system_branch, args.system_target, temp_image))
                 loc_tgt.execute('unzip -u \'%s\' system.img' % temp_image)
 
-            if not os.path.exists('kernel'):
-                loc_tgt.execute(
-                    '/google/data/ro/projects/android/fetch_artifact '
-                    '--latest --branch=%s --target=%s '
-                    'bzImage kernel' %
-                    (args.kernel_branch, args.kernel_target))
-
             if not os.path.exists('ramdisk.img'):
                 loc_tgt.execute(
                     '/google/data/ro/projects/android/fetch_artifact '
                     '%s --branch=%s --target=%s ramdisk.img' %
-                    (build_selector, args.system_branch, args.system_target))
+                    (system_build, args.system_branch, args.system_target))
 
+            if not os.path.exists('kernel'):
+                loc_tgt.execute(
+                    '/google/data/ro/projects/android/fetch_artifact '
+                    '%s --branch=%s --target=%s '
+                    'bzImage kernel' %
+                    (kernel_build, args.kernel_branch, args.kernel_target))
 
             # Give user and libvirt access rights to specified folder.
             # Remote directory appears as 'no access rights' except for included
@@ -99,10 +106,16 @@
                 'system.img'
             ]
             for file_name in upload_list:
-                out = ssh_tgt.execute('test -f %s/%s; echo $?' % (target_dir, file_name))
-                if out[0] == '1':
+                update = file_name in force_update
+
+                if not update:
+                    out = ssh_tgt.execute('test -f %s/%s; echo $?' % (target_dir, file_name))
+                    update = out[0] == '1'
+
+                if update:
                     ssh_tgt.copy(file_name, target_dir)
 
+            ssh_tgt.execute('cp /usr/share/cuttlefish-common/gce_ramdisk.img %s' % target_dir)
             ssh_tgt.execute('setfacl -m g:libvirt:rw %s/*' % target_dir)
             ssh_tgt.execute('setfacl -m u:libvirt-qemu:rw %s/*' % target_dir)
 
