 
 		// Setup stretch header view
 		infoView = NSBundle.mainBundle().loadNibNamed("VideoInformationView", owner: self, options: nil).first as! VideoInformationView
+		infoView.frame = self.view.frame
 		infoView.setup(program)
 
 		stretchHeaderView = StretchHeader()
 
 
 		// Place play button
-		playButton = FabButton(frame: CGRect(origin: CGPoint(x: self.view.bounds.width - 16 - 56, y: 180), size: CGSize(width: 56, height: 56))) // TODO: Improvement
+		playButton = FabButton()
 		playButton.backgroundColor = MaterialColor.red.darken3
 		playButton.setImage(UIImage(named: "ic_play_arrow_white"), forState: .Normal)
 		playButton.setImage(UIImage(named: "ic_play_arrow_white"), forState: .Highlighted)
 		playButton.tintColor = UIColor(white: 0.9, alpha: 0.9)
 		playButton.addTarget(self, action: #selector(handlePlayButton), forControlEvents: .TouchUpInside)
-		view.addSubview(self.playButton)
-
+
+		// Setup player view transition
+		transition = JTMaterialTransition(animatedView: playButton)
+
+		// Preview image downloader
 		do {
 			let request = ChinachuAPI.PreviewImageRequest(id: program.id)
 			let urlRequest = try request.buildURLRequest()

		stretchHeaderView.layout(stretchHeaderView.imageView).horizontally().height(220)
		stretchHeaderView.layout(infoView).bottom().horizontally()

	}

	// MARK: - Event handler

	func handlePlayButton() {
		let videoPlayViewController = self.storyboard!.instantiateViewControllerWithIdentifier("VideoPlayerViewController") as! VideoPlayerViewController
		videoPlayViewController.program = program
		self.presentViewController(videoPlayViewController, animated: true, completion: nil)
	}

	// MARK: - View deinitialization

	var playButton: FabButton!
	var stretchHeaderView: StretchHeader!
	var infoView: VideoInformationView!
	var transition: JTMaterialTransition!
	
	// MARK: - View initialization

