-diff --git a/config.h.in b/config.h.in
-index 9444d9a..a0770ba 100644
---- a/config.h.in
-+++ b/config.h.in
-@@ -54,6 +54,9 @@
- /* Build Validity VFS301/VFS300 driver */
- #undef ENABLE_VFS301
- 
-+/* Build Validity VFS5011 driver */
-+#undef ENABLE_VFS5011
-+
- /* Define to 1 if you have the <dlfcn.h> header file. */
- #undef HAVE_DLFCN_H
- 
 diff --git a/configure.ac b/configure.ac
 index 3c779f4..eef8c3c 100644
 --- a/configure.ac

+#endif
+}
+
+//====================== async transfer sequence =======================
+
+enum {
+	ACTION_SEND,

+		}
+		break;
+	
+	case DEV_ACTIVATE_PREPARE_NEXT_CAPTURE:
+		data->init_sequence.stepcount = array_n_elements(vfs5011_initiate_capture);
+		data->init_sequence.actions = vfs5011_initiate_capture;
+		data->init_sequence.device = dev;
+		data->init_sequence.receive_buf = malloc(VFS5011_RECEIVE_BUF_SIZE);
+		data->init_sequence.timeout = VFS5011_DEFAULT_WAIT_TIMEOUT;
+		usb_exchange_async(ssm, &data->init_sequence);
+		break;
+	
+	}
+}
+
+static void activate_loop_complete(struct fpi_ssm *ssm)
+{
+	struct fp_img_dev *dev = (struct fp_img_dev *)ssm->priv;
+	struct vfs5011_data *data = (struct vfs5011_data *)dev->priv;
+
+	fp_dbg("finishing");
+	free(data->init_sequence.receive_buf);
+	data->init_sequence.receive_buf = NULL;
+	submit_image(ssm, data);
+	fpi_imgdev_report_finger_status(dev, FALSE);
+	
+	fpi_ssm_free(ssm);
+}
+
+static void open_loop(struct fpi_ssm *ssm)
+{
+	struct fp_img_dev *dev = (struct fp_img_dev *)ssm->priv;
+	struct vfs5011_data *data = (struct vfs5011_data *)dev->priv;
+
+	switch (ssm->cur_state) {
+	case DEV_OPEN_START:
+		data->init_sequence.stepcount = array_n_elements(vfs5011_initialization);
+		data->init_sequence.actions = vfs5011_initialization;
+		data->init_sequence.device = dev;
+		data->init_sequence.receive_buf = malloc(VFS5011_RECEIVE_BUF_SIZE);
+		data->init_sequence.timeout = VFS5011_DEFAULT_WAIT_TIMEOUT;
+		usb_exchange_async(ssm, &data->init_sequence);
+		break;
+		
+	/*case DEV_OPEN_INIT_COMPLETE:
+		data->init_sequence.stepcount = array_n_elements(vfs5011_initiate_capture);
+		data->init_sequence.actions = vfs5011_initiate_capture;
+		usb_exchange_async(ssm, &data->init_sequence);
+		break;*/
+	};
+}
+
+static void open_loop_complete(struct fpi_ssm *ssm)
+{
+	struct fp_img_dev *dev = (struct fp_img_dev *)ssm->priv;
+	struct vfs5011_data *data = (struct vfs5011_data *)dev->priv;
+	
+	free(data->init_sequence.receive_buf);
+	data->init_sequence.receive_buf = NULL;
+	
+	fpi_imgdev_open_complete(dev, 0);
+	fpi_ssm_free(ssm);
+}
+
