public void Init(DeviceDescriptionHolder devHolder, NvtSessionFactory sessionFactory, IUnityContainer container) {
			this.container = container;
			//Add device section (all devices must have this section)
			parent.Title = devHolder.Name;
			
			//Display progress bar
			devicePanel.Content = new ProgressView("Loading ...");

			//Begin load device section
			disposables.Add(SectionDevice.Load(devHolder, sessionFactory)
				.ObserveOnCurrentDispatcher()
				.Subscribe(
					args => {
						invtSession = args.nvtSession;

						SectionDevice devView = container.Resolve<SectionDevice>();
						disposables.Add(devView);
						devView.Init(args);
						devicePanel.Content = devView;

						//Load sections
						LoadSections(args);
					}, 
					err => {
						ErrorView errorView = new ErrorView(err);
						disposables.Add(errorView);

						devicePanel.Content = errorView;
					}
			));

		}
		public static FSharpAsync<DeviceViewArgs> Load(DeviceDescriptionHolder devHolder, NvtSessionFactory sessionFactory) {
			DeviceViewArgs args = new DeviceViewArgs();
			args.deviceIconUri = devHolder.DeviceIconUri;
			args.deviceModel = devHolder.DeviceModel;
			args.manufacturer = devHolder.Manufacturer;

			return Apm.Iterate(LoadImpl(devHolder, sessionFactory, args)).Select(f => { return args; });
		}
		static IEnumerable<FSharpAsync<Unit>> LoadImpl(DeviceDescriptionHolder devHolder, NvtSessionFactory sessionFactory, DeviceViewArgs args) {
			yield return sessionFactory.CreateSession(devHolder.Uris).Select(f => { args.nvtSession = f; return (Unit)null; });
			args.odmSession = new OdmSession(args.nvtSession);
			yield return args.nvtSession.GetAllCapabilities().Select(caps => { args.capabilities = caps; return (Unit)null; });
		}