Repository: kiwicom/mobile
Pull request #1214 (2018-10-11 12:25:49)

Hotels: Use query to get payment url


Patch:
diff --git a/android/rnkiwimobile/src/main/java/com/kiwi/rnkiwimobile/hotels/RNHotelsInitialProperties.kt b/android/rnkiwimobile/src/main/java/com/kiwi/rnkiwimobile/hotels/RNHotelsInitialProperties.kt
index 80467476..e05f713b 100644
--- a/android/rnkiwimobile/src/main/java/com/kiwi/rnkiwimobile/hotels/RNHotelsInitialProperties.kt
+++ b/android/rnkiwimobile/src/main/java/com/kiwi/rnkiwimobile/hotels/RNHotelsInitialProperties.kt
@@ -3,7 +3,6 @@ package com.kiwi.rnkiwimobile.hotels
 data class RNHotelsInitialProperties(
     val language: String,
     val currency: String,
-    val bookingComAffiliate: String,
     val checkin: String,
     val checkout: String,
     val cityName: String,
diff --git a/android/rnkiwimobile/src/main/java/com/kiwi/rnkiwimobile/hotels/RNHotelsModule.kt b/android/rnkiwimobile/src/main/java/com/kiwi/rnkiwimobile/hotels/RNHotelsModule.kt
index bfb181c6..1d1a7495 100644
--- a/android/rnkiwimobile/src/main/java/com/kiwi/rnkiwimobile/hotels/RNHotelsModule.kt
+++ b/android/rnkiwimobile/src/main/java/com/kiwi/rnkiwimobile/hotels/RNHotelsModule.kt
@@ -28,7 +28,6 @@ object RNHotelsModule {
     return Bundle().apply {
       putString("language", initialProperties.language)
       putString("currency", initialProperties.currency)
-      putString("bookingComAffiliate", initialProperties.bookingComAffiliate)
       putString("checkin", initialProperties.checkin)
       putString("checkout", initialProperties.checkout)
       putString("cityName", initialProperties.cityName)
diff --git a/app/MMB/README.md b/app/MMB/README.md
index 47a96617..63b5566a 100644
--- a/app/MMB/README.md
+++ b/app/MMB/README.md
@@ -19,7 +19,6 @@ const render = () => <ManageMyBookingPackage
           bookingId="<bookingId>" 
           simpleToken="<simpletoken>"
           version="<app-version>"
-          bookingComAffiliate="<booking_com_affialiate>" // For opening hotels from tripservices
           dataSaverEnabled={false}
         />
 
@@ -29,7 +28,6 @@ const render = () => <ManageMyBookingPackage
           currency="EUR"
           accessToken="<token>"
           version="<app-version>"
-          bookingComAffiliate="<booking_com_affialiate>" // For opening hotels from tripservices
           dataSaverEnabled={false}
         />
 ```
\ No newline at end of file
diff --git a/app/MMB/index.js b/app/MMB/index.js
index 05fbb383..f8fcc093 100644
--- a/app/MMB/index.js
+++ b/app/MMB/index.js
@@ -28,7 +28,6 @@ type Props = {|
   +simpleToken?: string,
   +version: string,
   +dataSaverEnabled: boolean,
-  +bookingComAffiliate: string,
   +googleMapsAPIKey: string,
 |};
 
@@ -47,7 +46,6 @@ class ManageMyBookingPackage extends React.Component<Props> {
                 <HotelsContext.Provider
                   version={this.props.version}
                   dataSaverEnabled={this.props.dataSaverEnabled}
-                  bookingComAffiliate={this.props.bookingComAffiliate}
                   onNavigationStateChange={this.props.onNavigationStateChange}
                 >
                   <SplitNavigationContext.Provider>
diff --git a/app/MMB/src/__generated__/MainMenuContainerQuery.graphql.js b/app/MMB/src/__generated__/MainMenuContainerQuery.graphql.js
index 681d807d..64cbc68b 100644
--- a/app/MMB/src/__generated__/MainMenuContainerQuery.graphql.js
+++ b/app/MMB/src/__generated__/MainMenuContainerQuery.graphql.js
@@ -1,6 +1,6 @@
 /**
  * @flow
- * @relayHash 026fb45cf9a232d1435900d2a04bdb7a
+ * @relayHash a456045733240026ce1f532ba352ed4b
  */
 
 /* eslint-disable */
@@ -406,7 +406,7 @@ v1 = [
     "kind": "Variable",
     "name": "authToken",
     "variableName": "authToken",
-    "type": "String!"
+    "type": "String"
   },
   {
     "kind": "Variable",
diff --git a/app/MMB/src/__generated__/MainMenuRefetchQuery.graphql.js b/app/MMB/src/__generated__/MainMenuRefetchQuery.graphql.js
index bebcdf4b..b2b7008a 100644
--- a/app/MMB/src/__generated__/MainMenuRefetchQuery.graphql.js
+++ b/app/MMB/src/__generated__/MainMenuRefetchQuery.graphql.js
@@ -1,6 +1,6 @@
 /**
  * @flow
- * @relayHash 17905d92a39fd6d66b03ef7f04f4f621
+ * @relayHash 40b1e68ff912d89777425ab94b88b9e7
  */
 
 /* eslint-disable */
@@ -406,7 +406,7 @@ v1 = [
     "kind": "Variable",
     "name": "authToken",
     "variableName": "authToken",
-    "type": "String!"
+    "type": "String"
   },
   {
     "kind": "Variable",
diff --git a/app/MMB/src/components/__generated__/DeeplinkQuery.graphql.js b/app/MMB/src/components/__generated__/DeeplinkQuery.graphql.js
index e8b21b75..faff54c2 100644
--- a/app/MMB/src/components/__generated__/DeeplinkQuery.graphql.js
+++ b/app/MMB/src/components/__generated__/DeeplinkQuery.graphql.js
@@ -1,6 +1,6 @@
 /**
  * @flow
- * @relayHash a2c7cf58cd38d558d6f5380cdfc5c385
+ * @relayHash 79a58b1013d0a2c96c78c8547d7f16d4
  */
 
 /* eslint-disable */
@@ -67,7 +67,7 @@ v1 = [
     "kind": "Variable",
     "name": "authToken",
     "variableName": "authToken",
-    "type": "String!"
+    "type": "String"
   },
   {
     "kind": "Variable",
diff --git a/app/MMB/src/components/__generated__/InvoiceQuery.graphql.js b/app/MMB/src/components/__generated__/InvoiceQuery.graphql.js
index 510cd3a9..f869ed48 100644
--- a/app/MMB/src/components/__generated__/InvoiceQuery.graphql.js
+++ b/app/MMB/src/components/__generated__/InvoiceQuery.graphql.js
@@ -1,6 +1,6 @@
 /**
  * @flow
- * @relayHash 1ec6a670777b13858a3d18d0f90e14be
+ * @relayHash 2b06a368c7e2c1e9855431dd8db3d791
  */
 
 /* eslint-disable */
@@ -62,7 +62,7 @@ v1 = [
     "kind": "Variable",
     "name": "authToken",
     "variableName": "authToken",
-    "type": "String!"
+    "type": "String"
   },
   {
     "kind": "Variable",
diff --git a/app/MMB/src/context/HotelsContext.js b/app/MMB/src/context/HotelsContext.js
index dfe35f4d..34151338 100644
--- a/app/MMB/src/context/HotelsContext.js
+++ b/app/MMB/src/context/HotelsContext.js
@@ -3,7 +3,6 @@
 import * as React from 'react';
 
 const defaultState = {
-  bookingComAffiliate: '',
   dataSaverEnabled: false,
   onNavigationStateChange: () => {},
   version: '',
@@ -15,14 +14,12 @@ const { Consumer, Provider: ContextProvider } = React.createContext({
 
 type Props = {|
   +children: React.Node,
-  +bookingComAffiliate: string,
   +dataSaverEnabled: boolean,
   +version: string,
   +onNavigationStateChange: () => void,
 |};
 
 type State = {|
-  +bookingComAffiliate: string,
   +dataSaverEnabled: boolean,
   +version: string,
   +onNavigationStateChange: () => void,
@@ -33,7 +30,6 @@ class Provider extends React.Component<Props, State> {
     super(props);
 
     this.state = {
-      bookingComAffiliate: props.bookingComAffiliate,
       dataSaverEnabled: props.dataSaverEnabled,
       version: props.version,
       onNavigationStateChange: props.onNavigationStateChange,
diff --git a/app/MMB/src/scenes/flightServices/__generated__/FlightServicesMenuGroupQuery.graphql.js b/app/MMB/src/scenes/flightServices/__generated__/FlightServicesMenuGroupQuery.graphql.js
index 24aa1000..1c2af76b 100644
--- a/app/MMB/src/scenes/flightServices/__generated__/FlightServicesMenuGroupQuery.graphql.js
+++ b/app/MMB/src/scenes/flightServices/__generated__/FlightServicesMenuGroupQuery.graphql.js
@@ -1,6 +1,6 @@
 /**
  * @flow
- * @relayHash aa7317af7995934b9a616ce47c5aaeb0
+ * @relayHash 46df2e8fd8a4ae0bcaa9b56fd4c047ea
  */
 
 /* eslint-disable */
@@ -68,7 +68,7 @@ v1 = [
     "kind": "Variable",
     "name": "authToken",
     "variableName": "authToken",
-    "type": "String!"
+    "type": "String"
   },
   {
     "kind": "Variable",
diff --git a/app/MMB/src/scenes/flightServices/__generated__/FlightServicesQuery.graphql.js b/app/MMB/src/scenes/flightServices/__generated__/FlightServicesQuery.graphql.js
index 925a2d55..a6fd42f2 100644
--- a/app/MMB/src/scenes/flightServices/__generated__/FlightServicesQuery.graphql.js
+++ b/app/MMB/src/scenes/flightServices/__generated__/FlightServicesQuery.graphql.js
@@ -1,6 +1,6 @@
 /**
  * @flow
- * @relayHash 074cb17840b3869bdeb65d656aea81d3
+ * @relayHash 8bb21915878f7a8c2d18599cf33ca26f
  */
 
 /* eslint-disable */
@@ -68,7 +68,7 @@ v1 = [
     "kind": "Variable",
     "name": "authToken",
     "variableName": "authToken",
-    "type": "String!"
+    "type": "String"
   },
   {
     "kind": "Variable",
diff --git a/app/MMB/src/scenes/list/Flights.js b/app/MMB/src/scenes/list/Flights.js
index 4d7c77ca..b2d8a0a7 100644
--- a/app/MMB/src/scenes/list/Flights.js
+++ b/app/MMB/src/scenes/list/Flights.js
@@ -21,7 +21,7 @@ export default class Flights extends React.Component<Props> {
           future: customerBookings(only: FUTURE) {
             ...FlightListContainer_future
           }
-          past: customerBookings(only: PAST) {
+          past: customerBookings(only: PAST, order: DESC) {
             ...FlightListContainer_past
           }
         }
diff --git a/app/MMB/src/scenes/list/__generated__/FlightQuery.graphql.js b/app/MMB/src/scenes/list/__generated__/FlightQuery.graphql.js
index 57643312..1475a64e 100644
--- a/app/MMB/src/scenes/list/__generated__/FlightQuery.graphql.js
+++ b/app/MMB/src/scenes/list/__generated__/FlightQuery.graphql.js
@@ -1,6 +1,6 @@
 /**
  * @flow
- * @relayHash 61c8d2cb6cb0a89ad3a0910db1aae967
+ * @relayHash 4d48b69ed5e768d9b4c3cc57c8fc950e
  */
 
 /* eslint-disable */
@@ -160,7 +160,7 @@ v1 = [
     "kind": "Variable",
     "name": "authToken",
     "variableName": "authToken",
-    "type": "String!"
+    "type": "String"
   },
   {
     "kind": "Variable",
diff --git a/app/MMB/src/scenes/list/__generated__/FlightsQuery.graphql.js b/app/MMB/src/scenes/list/__generated__/FlightsQuery.graphql.js
index 5ba5edae..eb2390df 100644
--- a/app/MMB/src/scenes/list/__generated__/FlightsQuery.graphql.js
+++ b/app/MMB/src/scenes/list/__generated__/FlightsQuery.graphql.js
@@ -1,6 +1,6 @@
 /**
  * @flow
- * @relayHash 12b0519cbba833256bccc638e483c3bc
+ * @relayHash 230f77209e729a19c9c413f179563661
  */
 
 /* eslint-disable */
@@ -32,7 +32,7 @@ query FlightsQuery {
   future: customerBookings(only: FUTURE) {
     ...FlightListContainer_future
   }
-  past: customerBookings(only: PAST) {
+  past: customerBookings(only: PAST, order: DESC) {
     ...FlightListContainer_past
   }
 }
@@ -167,6 +167,12 @@ v1 = [
     "name": "only",
     "value": "PAST",
     "type": "CustomerBookingsOnlyEnum"
+  },
+  {
+    "kind": "Literal",
+    "name": "order",
+    "value": "DESC",
+    "type": "CustomerBookingsOrderEnum"
   }
 ],
 v2 = {
@@ -416,7 +422,7 @@ return {
   "operationKind": "query",
   "name": "FlightsQuery",
   "id": null,
-  "text": "query FlightsQuery {\n  future: customerBookings(only: FUTURE) {\n    ...FlightListContainer_future\n  }\n  past: customerBookings(only: PAST) {\n    ...FlightListContainer_past\n  }\n}\n\nfragment FlightListContainer_future on BookingInterfaceConnection {\n  ...FlightList\n}\n\nfragment FlightListContainer_past on BookingInterfaceConnection {\n  ...FlightList\n}\n\nfragment FlightList on BookingInterfaceConnection {\n  edges {\n    node {\n      id\n      __typename\n      ... on BookingOneWay {\n        ...OneWayFlight_booking\n      }\n      ... on BookingReturn {\n        ...ReturnFlight_booking\n      }\n      ... on BookingMulticity {\n        ...MulticityFlight_booking\n      }\n    }\n  }\n}\n\nfragment OneWayFlight_booking on BookingOneWay {\n  ...CityImageContainer_image\n  trip {\n    departure {\n      ...CityImageContainer_departure\n    }\n    arrival {\n      ...CityImageContainer_arrival\n    }\n  }\n}\n\nfragment ReturnFlight_booking on BookingReturn {\n  ...CityImageContainer_image\n  outbound {\n    arrival {\n      ...CityImageContainer_arrival\n    }\n    departure {\n      ...CityImageContainer_departure\n    }\n  }\n}\n\nfragment MulticityFlight_booking on BookingMulticity {\n  ...CityImageContainer_image\n  end {\n    ...CityImageContainer_arrival\n  }\n  start {\n    ...CityImageContainer_departure\n  }\n}\n\nfragment CityImageContainer_image on BookingInterface {\n  id\n  databaseId\n  passengerCount\n  isPastBooking\n  destinationImageUrl(dimensions: _375x165)\n  authToken\n  ...ImageBadges\n}\n\nfragment CityImageContainer_arrival on RouteStop {\n  ...FromToRow_arrival\n  cityId\n  time\n}\n\nfragment CityImageContainer_departure on RouteStop {\n  ...DateAndPassengerCount_departure\n  ...FromToRow_departure\n  time\n}\n\nfragment DateAndPassengerCount_departure on RouteStop {\n  time\n}\n\nfragment FromToRow_departure on RouteStop {\n  airport {\n    city {\n      name\n    }\n    id\n  }\n}\n\nfragment FromToRow_arrival on RouteStop {\n  airport {\n    city {\n      name\n    }\n    id\n  }\n}\n\nfragment ImageBadges on BookingInterface {\n  databaseId\n  ...StatusBadge\n}\n\nfragment StatusBadge on BookingInterface {\n  status\n  isPastBooking\n}\n",
+  "text": "query FlightsQuery {\n  future: customerBookings(only: FUTURE) {\n    ...FlightListContainer_future\n  }\n  past: customerBookings(only: PAST, order: DESC) {\n    ...FlightListContainer_past\n  }\n}\n\nfragment FlightListContainer_future on BookingInterfaceConnection {\n  ...FlightList\n}\n\nfragment FlightListContainer_past on BookingInterfaceConnection {\n  ...FlightList\n}\n\nfragment FlightList on BookingInterfaceConnection {\n  edges {\n    node {\n      id\n      __typename\n      ... on BookingOneWay {\n        ...OneWayFlight_booking\n      }\n      ... on BookingReturn {\n        ...ReturnFlight_booking\n      }\n      ... on BookingMulticity {\n        ...MulticityFlight_booking\n      }\n    }\n  }\n}\n\nfragment OneWayFlight_booking on BookingOneWay {\n  ...CityImageContainer_image\n  trip {\n    departure {\n      ...CityImageContainer_departure\n    }\n    arrival {\n      ...CityImageContainer_arrival\n    }\n  }\n}\n\nfragment ReturnFlight_booking on BookingReturn {\n  ...CityImageContainer_image\n  outbound {\n    arrival {\n      ...CityImageContainer_arrival\n    }\n    departure {\n      ...CityImageContainer_departure\n    }\n  }\n}\n\nfragment MulticityFlight_booking on BookingMulticity {\n  ...CityImageContainer_image\n  end {\n    ...CityImageContainer_arrival\n  }\n  start {\n    ...CityImageContainer_departure\n  }\n}\n\nfragment CityImageContainer_image on BookingInterface {\n  id\n  databaseId\n  passengerCount\n  isPastBooking\n  destinationImageUrl(dimensions: _375x165)\n  authToken\n  ...ImageBadges\n}\n\nfragment CityImageContainer_arrival on RouteStop {\n  ...FromToRow_arrival\n  cityId\n  time\n}\n\nfragment CityImageContainer_departure on RouteStop {\n  ...DateAndPassengerCount_departure\n  ...FromToRow_departure\n  time\n}\n\nfragment DateAndPassengerCount_departure on RouteStop {\n  time\n}\n\nfragment FromToRow_departure on RouteStop {\n  airport {\n    city {\n      name\n    }\n    id\n  }\n}\n\nfragment FromToRow_arrival on RouteStop {\n  airport {\n    city {\n      name\n    }\n    id\n  }\n}\n\nfragment ImageBadges on BookingInterface {\n  databaseId\n  ...StatusBadge\n}\n\nfragment StatusBadge on BookingInterface {\n  status\n  isPastBooking\n}\n",
   "metadata": {},
   "fragment": {
     "kind": "Fragment",
@@ -445,7 +451,7 @@ return {
         "kind": "LinkedField",
         "alias": "past",
         "name": "customerBookings",
-        "storageKey": "customerBookings(only:\"PAST\")",
+        "storageKey": "customerBookings(only:\"PAST\",order:\"DESC\")",
         "args": v1,
         "concreteType": "BookingInterfaceConnection",
         "plural": false,
@@ -478,7 +484,7 @@ return {
         "kind": "LinkedField",
         "alias": "past",
         "name": "customerBookings",
-        "storageKey": "customerBookings(only:\"PAST\")",
+        "storageKey": "customerBookings(only:\"PAST\",order:\"DESC\")",
         "args": v1,
         "concreteType": "BookingInterfaceConnection",
         "plural": false,
@@ -489,5 +495,5 @@ return {
 };
 })();
 // prettier-ignore
-(node/*: any*/).hash = 'a88121bfe4f517138e0e13325f2cb5cf';
+(node/*: any*/).hash = '44867a8d39d0059c9b701039dfcb3db7';
 module.exports = node;
diff --git a/app/MMB/src/scenes/passenger/__generated__/PassengerDetailContainerQuery.graphql.js b/app/MMB/src/scenes/passenger/__generated__/PassengerDetailContainerQuery.graphql.js
index 99a4a24b..b31c2cf7 100644
--- a/app/MMB/src/scenes/passenger/__generated__/PassengerDetailContainerQuery.graphql.js
+++ b/app/MMB/src/scenes/passenger/__generated__/PassengerDetailContainerQuery.graphql.js
@@ -1,6 +1,6 @@
 /**
  * @flow
- * @relayHash 2e4d7211bb597e653d82e91d8b6769c0
+ * @relayHash 2e8deef1cb50f5c1f364b60254f64c53
  */
 
 /* eslint-disable */
@@ -124,7 +124,7 @@ v1 = [
     "kind": "Variable",
     "name": "authToken",
     "variableName": "authToken",
-    "type": "String!"
+    "type": "String"
   },
   {
     "kind": "Variable",
diff --git a/app/MMB/src/scenes/passenger/__generated__/PassengerDetailQuery.graphql.js b/app/MMB/src/scenes/passenger/__generated__/PassengerDetailQuery.graphql.js
index f5a0a1fa..5428dece 100644
--- a/app/MMB/src/scenes/passenger/__generated__/PassengerDetailQuery.graphql.js
+++ b/app/MMB/src/scenes/passenger/__generated__/PassengerDetailQuery.graphql.js
@@ -1,6 +1,6 @@
 /**
  * @flow
- * @relayHash c7c0443c78238c079df26a4d4766eb2d
+ * @relayHash a3a71eea677803e560a90bdfc7f569f6
  */
 
 /* eslint-disable */
@@ -124,7 +124,7 @@ v1 = [
     "kind": "Variable",
     "name": "authToken",
     "variableName": "authToken",
-    "type": "String!"
+    "type": "String"
   },
   {
     "kind": "Variable",
diff --git a/app/MMB/src/scenes/tickets/__generated__/TicketRefetchQuery.graphql.js b/app/MMB/src/scenes/tickets/__generated__/TicketRefetchQuery.graphql.js
index 7ed78a32..e9bf8a1f 100644
--- a/app/MMB/src/scenes/tickets/__generated__/TicketRefetchQuery.graphql.js
+++ b/app/MMB/src/scenes/tickets/__generated__/TicketRefetchQuery.graphql.js
@@ -1,6 +1,6 @@
 /**
  * @flow
- * @relayHash 670c33404cecf9ae18f8a3b76f75d57f
+ * @relayHash 756d88f09926fb03eee45b62aa75ec88
  */
 
 /* eslint-disable */
@@ -183,7 +183,7 @@ v1 = [
     "kind": "Variable",
     "name": "authToken",
     "variableName": "authToken",
-    "type": "String!"
+    "type": "String"
   },
   {
     "kind": "Variable",
diff --git a/app/MMB/src/scenes/tickets/__generated__/TicketSceneQuery.graphql.js b/app/MMB/src/scenes/tickets/__generated__/TicketSceneQuery.graphql.js
index 3196bff8..302bec7b 100644
--- a/app/MMB/src/scenes/tickets/__generated__/TicketSceneQuery.graphql.js
+++ b/app/MMB/src/scenes/tickets/__generated__/TicketSceneQuery.graphql.js
@@ -1,6 +1,6 @@
 /**
  * @flow
- * @relayHash beb307b416b4c90696ef52df1a4cfafd
+ * @relayHash 05c1963d32cb020c19f45199eba63c2a
  */
 
 /* eslint-disable */
@@ -183,7 +183,7 @@ v1 = [
     "kind": "Variable",
     "name": "authToken",
     "variableName": "authToken",
-    "type": "String!"
+    "type": "String"
   },
   {
     "kind": "Variable",
diff --git a/app/MMB/src/scenes/travelDocument/__generated__/FillTravelDocumentContainerQuery.graphql.js b/app/MMB/src/scenes/travelDocument/__generated__/FillTravelDocumentContainerQuery.graphql.js
index a652e63e..77463351 100644
--- a/app/MMB/src/scenes/travelDocument/__generated__/FillTravelDocumentContainerQuery.graphql.js
+++ b/app/MMB/src/scenes/travelDocument/__generated__/FillTravelDocumentContainerQuery.graphql.js
@@ -1,6 +1,6 @@
 /**
  * @flow
- * @relayHash 7fe3b044c06a4162f5e75df7fa3f52dc
+ * @relayHash 1fcc79172737e7b50beba438f84b921a
  */
 
 /* eslint-disable */
@@ -158,7 +158,7 @@ v1 = [
     "kind": "Variable",
     "name": "authToken",
     "variableName": "authToken",
-    "type": "String!"
+    "type": "String"
   },
   {
     "kind": "Variable",
diff --git a/app/MMB/src/scenes/travelDocument/__generated__/FillTravelDocumentQuery.graphql.js b/app/MMB/src/scenes/travelDocument/__generated__/FillTravelDocumentQuery.graphql.js
index 0601c656..e535c27d 100644
--- a/app/MMB/src/scenes/travelDocument/__generated__/FillTravelDocumentQuery.graphql.js
+++ b/app/MMB/src/scenes/travelDocument/__generated__/FillTravelDocumentQuery.graphql.js
@@ -1,6 +1,6 @@
 /**
  * @flow
- * @relayHash dfd5cd225d0b864610159ff5e0d73162
+ * @relayHash ac2fda281c1ffd04d7ee5bf5fad5d1cd
  */
 
 /* eslint-disable */
@@ -158,7 +158,7 @@ v1 = [
     "kind": "Variable",
     "name": "authToken",
     "variableName": "authToken",
-    "type": "String!"
+    "type": "String"
   },
   {
     "kind": "Variable",
diff --git a/app/MMB/src/scenes/travelDocument/form/__generated__/TravelDocumentFormQuery.graphql.js b/app/MMB/src/scenes/travelDocument/form/__generated__/TravelDocumentFormQuery.graphql.js
index 734dda29..856d471c 100644
--- a/app/MMB/src/scenes/travelDocument/form/__generated__/TravelDocumentFormQuery.graphql.js
+++ b/app/MMB/src/scenes/travelDocument/form/__generated__/TravelDocumentFormQuery.graphql.js
@@ -1,6 +1,6 @@
 /**
  * @flow
- * @relayHash 67de3a6b924e62c1fd25093e4b253ffc
+ * @relayHash 6b6055a84008351e3aa167ed66af84ff
  */
 
 /* eslint-disable */
@@ -99,7 +99,7 @@ v1 = [
     "kind": "Variable",
     "name": "authToken",
     "variableName": "authToken",
-    "type": "String!"
+    "type": "String"
   },
   {
     "kind": "Variable",
diff --git a/app/MMB/src/scenes/tripOverview/__generated__/TripOverviewTabletQuery.graphql.js b/app/MMB/src/scenes/tripOverview/__generated__/TripOverviewTabletQuery.graphql.js
index 26c36171..cbbc8c22 100644
--- a/app/MMB/src/scenes/tripOverview/__generated__/TripOverviewTabletQuery.graphql.js
+++ b/app/MMB/src/scenes/tripOverview/__generated__/TripOverviewTabletQuery.graphql.js
@@ -1,6 +1,6 @@
 /**
  * @flow
- * @relayHash b68c92bc3e4932a6e73b880b0db76d5c
+ * @relayHash 84a146d7bf12e804b475eaeaa10a3967
  */
 
 /* eslint-disable */
@@ -222,7 +222,7 @@ v1 = [
     "kind": "Variable",
     "name": "authToken",
     "variableName": "authToken",
-    "type": "String!"
+    "type": "String"
   },
   {
     "kind": "Variable",
diff --git a/app/MMB/src/scenes/tripServices/__generated__/TripServiceRefreshContainerQuery.graphql.js b/app/MMB/src/scenes/tripServices/__generated__/TripServiceRefreshContainerQuery.graphql.js
index cdec66e7..89ec49a3 100644
--- a/app/MMB/src/scenes/tripServices/__generated__/TripServiceRefreshContainerQuery.graphql.js
+++ b/app/MMB/src/scenes/tripServices/__generated__/TripServiceRefreshContainerQuery.graphql.js
@@ -1,6 +1,6 @@
 /**
  * @flow
- * @relayHash f7850daa79a5f34bef4cc8ecfa8a7b30
+ * @relayHash 35183ee8f8167da50253d05c26e67d39
  */
 
 /* eslint-disable */
@@ -223,7 +223,7 @@ v1 = [
     "kind": "Variable",
     "name": "authToken",
     "variableName": "authToken",
-    "type": "String!"
+    "type": "String"
   },
   {
     "kind": "Variable",
diff --git a/app/MMB/src/scenes/tripServices/__generated__/TripServicesQuery.graphql.js b/app/MMB/src/scenes/tripServices/__generated__/TripServicesQuery.graphql.js
index df0d2888..c61cd58c 100644
--- a/app/MMB/src/scenes/tripServices/__generated__/TripServicesQuery.graphql.js
+++ b/app/MMB/src/scenes/tripServices/__generated__/TripServicesQuery.graphql.js
@@ -1,6 +1,6 @@
 /**
  * @flow
- * @relayHash a903387dd601ca865d637a455ae361ae
+ * @relayHash 244bdf7fb2562026e734ab8f46da59a7
  */
 
 /* eslint-disable */
@@ -223,7 +223,7 @@ v1 = [
     "kind": "Variable",
     "name": "authToken",
     "variableName": "authToken",
-    "type": "String!"
+    "type": "String"
   },
   {
     "kind": "Variable",
diff --git a/app/MMB/src/scenes/tripServices/hotelMenuItem/HotelMenuItem.js b/app/MMB/src/scenes/tripServices/hotelMenuItem/HotelMenuItem.js
index 11a811e3..6abd2aed 100644
--- a/app/MMB/src/scenes/tripServices/hotelMenuItem/HotelMenuItem.js
+++ b/app/MMB/src/scenes/tripServices/hotelMenuItem/HotelMenuItem.js
@@ -34,7 +34,6 @@ type PropsWithContext = {|
   ...Props,
   +currency: string,
   +dimensions: DimensionType,
-  +bookingComAffiliate: string,
   +dataSaverEnabled: boolean,
   +version: string,
   +onNavigationStateChange: () => void,
@@ -82,7 +81,6 @@ export class HotelMenuItem extends React.Component<PropsWithContext, State> {
     const sanitizedDates = this.sanitizeDates({ checkin, checkout });
 
     this.props.navigation.navigate('MMBHotelsStack', {
-      bookingComAffiliate: this.props.bookingComAffiliate,
       language: DeviceInfo.getLanguage(),
       currency: this.props.currency,
       dataSaverEnabled: this.props.dataSaverEnabled,
diff --git a/app/MMB/src/scenes/tripServices/insurance/insuranceOverviewScene/__generated__/InsuranceOverviewSceneContainerQuery.graphql.js b/app/MMB/src/scenes/tripServices/insurance/insuranceOverviewScene/__generated__/InsuranceOverviewSceneContainerQuery.graphql.js
index 28607b51..546d0673 100644
--- a/app/MMB/src/scenes/tripServices/insurance/insuranceOverviewScene/__generated__/InsuranceOverviewSceneContainerQuery.graphql.js
+++ b/app/MMB/src/scenes/tripServices/insurance/insuranceOverviewScene/__generated__/InsuranceOverviewSceneContainerQuery.graphql.js
@@ -1,6 +1,6 @@
 /**
  * @flow
- * @relayHash a08797a7fcabc844de73f46e44bfcc39
+ * @relayHash 20de62aa4299321937015bf6a56901eb
  */
 
 /* eslint-disable */
@@ -168,7 +168,7 @@ v1 = [
     "kind": "Variable",
     "name": "authToken",
     "variableName": "authToken",
-    "type": "String!"
+    "type": "String"
   },
   {
     "kind": "Variable",
diff --git a/app/MMB/src/scenes/tripServices/insurance/insuranceOverviewScene/orderSummary/InsuranceRow.js b/app/MMB/src/scenes/tripServices/insurance/insuranceOverviewScene/orderSummary/InsuranceRow.js
index 03ccc21e..4228d5e5 100644
--- a/app/MMB/src/scenes/tripServices/insurance/insuranceOverviewScene/orderSummary/InsuranceRow.js
+++ b/app/MMB/src/scenes/tripServices/insurance/insuranceOverviewScene/orderSummary/InsuranceRow.js
@@ -59,8 +59,8 @@ export function InsuranceRow(props: Props) {
     return null;
   }
 
-  let insuranceCurrency = '';
-  const insuranceAmount = changes
+  let currency = '';
+  const amount = changes
     .filter(
       change => change.to === props.insuranceType && change.from !== change.to,
     )
@@ -78,13 +78,13 @@ export function InsuranceRow(props: Props) {
         _ => _.price,
       );
       if (priceFrom && priceTo && priceFrom.currency === priceTo.currency) {
-        insuranceCurrency = priceFrom.currency;
+        currency = priceFrom.currency;
         return priceTo.amount - priceFrom.amount;
       } else if (priceFrom && priceTo === null) {
-        insuranceCurrency = priceFrom.currency;
+        currency = priceFrom.currency;
         return -priceFrom.amount;
       } else if (priceFrom === null && priceTo) {
-        insuranceCurrency = priceTo.currency;
+        currency = priceTo.currency;
         return priceTo.amount;
       }
       return 0;
@@ -101,11 +101,7 @@ export function InsuranceRow(props: Props) {
           />
         </Text>
       </View>
-      <Price
-        amount={insuranceAmount}
-        currency={insuranceCurrency}
-        style={styleSheet.price}
-      />
+      <Price price={{ amount, currency }} style={styleSheet.price} />
     </View>
   );
 }
diff --git a/app/MMB/src/scenes/tripServices/insurance/insuranceOverviewScene/orderSummary/OrderSummary.js b/app/MMB/src/scenes/tripServices/insurance/insuranceOverviewScene/orderSummary/OrderSummary.js
index cb463837..047a4cbf 100644
--- a/app/MMB/src/scenes/tripServices/insurance/insuranceOverviewScene/orderSummary/OrderSummary.js
+++ b/app/MMB/src/scenes/tripServices/insurance/insuranceOverviewScene/orderSummary/OrderSummary.js
@@ -16,11 +16,15 @@ import { defaultTokens } from '@kiwicom/mobile-orbit';
 import { withInsuranceContext } from '../InsuranceOverviewSceneContext';
 import InsuranceRow from './InsuranceRow';
 
-type Props = {|
+type PriceType = {|
   +amount: number,
   +currency: string,
 |};
 
+type Props = {|
+  +price: PriceType,
+|};
+
 type State = {|
   isExpanded: boolean,
 |};
@@ -62,11 +66,7 @@ class OrderSummary extends React.Component<Props, State> {
                 <Translation id="mmb.trip_services.order.total" />
               </Text>
             </View>
-            <Price
-              amount={this.props.amount}
-              currency={this.props.currency}
-              style={styleSheet.price}
-            />
+            <Price price={this.props.price} style={styleSheet.price} />
           </View>
         </View>
       </TouchableWithoutFeedback>
diff --git a/app/MMB/src/scenes/tripServices/insurance/insuranceSelectionScene/__generated__/InsuranceSelectionSceneContainerQuery.graphql.js b/app/MMB/src/scenes/tripServices/insurance/insuranceSelectionScene/__generated__/InsuranceSelectionSceneContainerQuery.graphql.js
index 2d8eb948..46f534cf 100644
--- a/app/MMB/src/scenes/tripServices/insurance/insuranceSelectionScene/__generated__/InsuranceSelectionSceneContainerQuery.graphql.js
+++ b/app/MMB/src/scenes/tripServices/insurance/insuranceSelectionScene/__generated__/InsuranceSelectionSceneContainerQuery.graphql.js
@@ -1,6 +1,6 @@
 /**
  * @flow
- * @relayHash 8682c496bb963c2593f9285d40e25f19
+ * @relayHash 8bfe3b0246f129aa1510ebaab9da602f
  */
 
 /* eslint-disable */
@@ -69,7 +69,7 @@ v1 = [
     "kind": "Variable",
     "name": "authToken",
     "variableName": "authToken",
-    "type": "String!"
+    "type": "String"
   },
   {
     "kind": "Variable",
diff --git a/app/MMB/src/scenes/tripServices/insurance/insuranceSelectionScene/variantButtons/Price.js b/app/MMB/src/scenes/tripServices/insurance/insuranceSelectionScene/variantButtons/Price.js
index cd672404..95a8b86a 100644
--- a/app/MMB/src/scenes/tripServices/insurance/insuranceSelectionScene/variantButtons/Price.js
+++ b/app/MMB/src/scenes/tripServices/insurance/insuranceSelectionScene/variantButtons/Price.js
@@ -31,13 +31,7 @@ const Price = (props: Props) => {
       </Text>
     );
   } else if (price && price.amount != null && price.currency != null) {
-    return (
-      <OriginalPrice
-        amount={price.amount}
-        currency={price.currency}
-        style={style}
-      />
-    );
+    return <OriginalPrice price={price} style={style} />;
   }
   return (
     <Text style={style}>
diff --git a/app/core/config/application.js b/app/core/config/application.js
index 6319e890..7e46d55c 100644
--- a/app/core/config/application.js
+++ b/app/core/config/application.js
@@ -1,7 +1,6 @@
 // @flow
 
 import {
-  AFFILIATE_BOOKINGCOM,
   API_KEY_GOOGLE_MAPS,
   AUTH_ANDROID_GOOGLE_CLIENTID,
   AUTH_IOS_GOOGLE_CLIENTID,
@@ -10,9 +9,6 @@ import {
 } from 'react-native-dotenv';
 
 export default {
-  affiliate: {
-    bookingCom: sanitize(AFFILIATE_BOOKINGCOM),
-  },
   animations: {
     duration: 100, // ms
   },
diff --git a/app/core/src/screens/bookingsStack/MMBPackageWrapper.js b/app/core/src/screens/bookingsStack/MMBPackageWrapper.js
index 91447952..eba08dde 100644
--- a/app/core/src/screens/bookingsStack/MMBPackageWrapper.js
+++ b/app/core/src/screens/bookingsStack/MMBPackageWrapper.js
@@ -83,7 +83,6 @@ export default class MMBPackageWrapper extends React.Component<Props, State> {
           bookingId={this.state.bookingId}
           simpleToken={this.state.simpleToken}
           version="rn-development"
-          bookingComAffiliate={String(Config.affiliate.bookingCom)}
           dataSaverEnabled={false}
           googleMapsAPIKey={String(Config.apiKey.googleMaps)}
         />
@@ -98,7 +97,6 @@ export default class MMBPackageWrapper extends React.Component<Props, State> {
           currency="EUR"
           accessToken={this.state.token}
           version="rn-development"
-          bookingComAffiliate={String(Config.affiliate.bookingCom)}
           dataSaverEnabled={false}
           googleMapsAPIKey={String(Config.apiKey.googleMaps)}
         />
diff --git a/app/core/src/screens/hotelsStack/NewHotelsPackageWrapper.js b/app/core/src/screens/hotelsStack/NewHotelsPackageWrapper.js
index 18dd2867..77ebb2b6 100644
--- a/app/core/src/screens/hotelsStack/NewHotelsPackageWrapper.js
+++ b/app/core/src/screens/hotelsStack/NewHotelsPackageWrapper.js
@@ -5,7 +5,6 @@ import { NewHotelsStandAlonePackage } from '@kiwicom/react-native-app-hotels';
 import { type NavigationType } from '@kiwicom/mobile-navigation';
 import { type DimensionType } from '@kiwicom/mobile-shared';
 
-import Config from '../../../config/application';
 import type { RoomConfigurationType } from '../../../../hotels/src/HotelsContext';
 
 type Props = {|
@@ -30,11 +29,8 @@ export default class HotelsPackageWrapper extends React.Component<Props> {
   goToHomepage = () => this.props.navigation.goBack();
 
   render = () => {
-    const affiliate = String(Config.affiliate.bookingCom);
-
     return (
       <NewHotelsStandAlonePackage
-        bookingComAffiliate={affiliate}
         language="en"
         currency="EUR" // Only EUR is now fully supported as PriceFilter can't handle anything but EUR
         onBackClicked={this.goToHomepage}
diff --git a/app/core/src/screens/hotelsStack/SingleHotelPackageWrapper.js b/app/core/src/screens/hotelsStack/SingleHotelPackageWrapper.js
index 7f5efa51..dd2b08cf 100644
--- a/app/core/src/screens/hotelsStack/SingleHotelPackageWrapper.js
+++ b/app/core/src/screens/hotelsStack/SingleHotelPackageWrapper.js
@@ -6,8 +6,6 @@ import { type NavigationType } from '@kiwicom/mobile-navigation';
 import { DateFormatter, DateUtils } from '@kiwicom/mobile-localization';
 import { type DimensionType } from '@kiwicom/mobile-shared';
 
-import Config from '../../../config/application';
-
 type Props = {|
   +navigation: NavigationType,
   +dimensions: DimensionType,
@@ -21,10 +19,8 @@ export default class SingleHotelPackageWrapper extends React.Component<Props> {
   goToHomepage = () => this.props.navigation.goBack();
 
   render = () => {
-    const affiliate = String(Config.affiliate.bookingCom);
     return (
       <SingleHotelStandalonePackage
-        bookingComAffiliate={affiliate}
         language="en"
         currency="EUR" // Only EUR is now fully supported as PriceFilter can't handle anything but EUR
         onBackClicked={this.goToHomepage}
diff --git a/app/hotels/README.md b/app/hotels/README.md
index dee3d9a4..dff22f42 100644
--- a/app/hotels/README.md
+++ b/app/hotels/README.md
@@ -2,7 +2,6 @@
 import { HotelsStandalonePackage } from '@kiwicom/react-native-app-hotels';
 
 const render = () => <HotelsStandalonePackage
-  bookingComAffiliate="123456"
   language="en"
   currency="EUR"
   onBackClicked={() => goToHomepage()}
@@ -31,7 +30,6 @@ const roomsConfiguration = [{
 }];
 
 const render = () => <NewHotelsStandAlonePackage
-  bookingComAffiliate="123456"
   language="en"
   currency="EUR"
   onBackClicked={() => goToHomepage()}
@@ -56,7 +54,6 @@ const roomsConfiguration = [{
 }];
 
 const render = () => <SingleHotelStandAlonePackage
-  bookingComAffiliate="123456"
   language="en"
   currency="EUR"
   onBackClicked={() => goToHomepage()}
diff --git a/app/hotels/src/allHotels/AllHotelsSearchRow.js b/app/hotels/src/allHotels/AllHotelsSearchRow.js
index d645db8e..b142f890 100644
--- a/app/hotels/src/allHotels/AllHotelsSearchRow.js
+++ b/app/hotels/src/allHotels/AllHotelsSearchRow.js
@@ -119,16 +119,12 @@ const style = StyleSheet.create({
     flexDirection: 'row',
   },
   image: {
-    marginEnd: 10,
-    width: 50,
-    borderRadius: 2,
+    marginStart: 16,
+    marginEnd: 12,
+    width: 56,
+    borderRadius: 3,
     backgroundColor: defaultTokens.paletteCloudLight,
-    android: {
-      height: 80,
-    },
-    ios: {
-      height: 70,
-    },
+    height: 72,
   },
   hotelTitle: {
     flex: 1,
@@ -136,7 +132,6 @@ const style = StyleSheet.create({
   container: {
     backgroundColor: defaultTokens.paletteWhite,
     paddingTop: 8,
-    paddingStart: 8,
   },
   content: {
     flex: 1,
diff --git a/app/hotels/src/allHotels/HotelDistance.js b/app/hotels/src/allHotels/HotelDistance.js
index f007efc5..ce88d188 100644
--- a/app/hotels/src/allHotels/HotelDistance.js
+++ b/app/hotels/src/allHotels/HotelDistance.js
@@ -35,14 +35,8 @@ const style = StyleSheet.create({
   text: {
     letterSpacing: 0.2,
     color: defaultTokens.colorTextSecondary,
-    android: {
-      fontSize: 13,
-      lineHeight: 15,
-    },
-    ios: {
-      fontSize: 12,
-      lineHeight: 12,
-    },
+    fontSize: 12,
+    lineHeight: 15,
   },
 });
 
diff --git a/app/hotels/src/allHotels/HotelTitle.js b/app/hotels/src/allHotels/HotelTitle.js
index 014b5cc3..344dee20 100644
--- a/app/hotels/src/allHotels/HotelTitle.js
+++ b/app/hotels/src/allHotels/HotelTitle.js
@@ -19,14 +19,7 @@ function HotelTitle({ data }: Props) {
   const hotelName = idx(data, _ => _.name);
   const hotelStars = idx(data, _ => _.rating.stars);
 
-  const price = {
-    ...{
-      // default null object
-      amount: null,
-      currency: null,
-    },
-    ...data.price,
-  };
+  const price = data.price || null;
 
   return (
     <React.Fragment>
@@ -40,11 +33,7 @@ function HotelTitle({ data }: Props) {
       <View style={style.distance}>
         <Distance hotel={data} />
       </View>
-      <Price
-        amount={price.amount}
-        currency={price.currency}
-        style={style.price}
-      />
+      <Price price={price} style={style.price} />
     </React.Fragment>
   );
 }
@@ -68,18 +57,14 @@ export default createFragmentContainer(
 
 const style = StyleSheet.create({
   title: {
-    fontWeight: 'bold',
+    fontWeight: '600',
     color: defaultTokens.colorTextAttention,
-    android: {
-      fontSize: 15,
-    },
-    ios: {
-      fontSize: 14,
-    },
+    fontSize: 14,
+    lineHeight: 18,
   },
   rating: {
     color: defaultTokens.colorTextSecondary,
-    fontSize: 9,
+    fontSize: 10,
   },
   distance: {
     marginVertical: 6,
@@ -88,13 +73,7 @@ const style = StyleSheet.create({
     fontWeight: 'bold',
     color: defaultTokens.paletteProductNormal,
     letterSpacing: 0,
-    android: {
-      fontSize: 13,
-      lineHeight: 13,
-    },
-    ios: {
-      fontSize: 12,
-      lineHeight: 12,
-    },
+    fontSize: 14,
+    lineHeight: 18,
   },
 });
diff --git a/app/hotels/src/allHotels/__generated__/NewAllHotelsSearchQuery.graphql.js b/app/hotels/src/allHotels/__generated__/NewAllHotelsSearchQuery.graphql.js
index 8289a902..27b2608f 100644
--- a/app/hotels/src/allHotels/__generated__/NewAllHotelsSearchQuery.graphql.js
+++ b/app/hotels/src/allHotels/__generated__/NewAllHotelsSearchQuery.graphql.js
@@ -1,6 +1,6 @@
 /**
  * @flow
- * @relayHash b00edc640349795c73af6a04f00baab3
+ * @relayHash a9fa9d8145c8aab3f294c041fec608b8
  */
 
 /* eslint-disable */
@@ -12,6 +12,7 @@ import type { ConcreteRequest } from 'relay-runtime';
 type RenderSearchResults$ref = any;
 export type Currency = "AED" | "AFN" | "ALL" | "AMD" | "ANG" | "AOA" | "ARS" | "AUD" | "AWG" | "AZN" | "BAM" | "BBD" | "BDT" | "BGN" | "BHD" | "BIF" | "BMD" | "BND" | "BOB" | "BRL" | "BSD" | "BTC" | "BTN" | "BWP" | "BYN" | "BYR" | "BZD" | "CAD" | "CDF" | "CHF" | "CLF" | "CLP" | "CNY" | "COP" | "CRC" | "CUC" | "CUP" | "CVE" | "CZK" | "DJF" | "DKK" | "DOP" | "DZD" | "EEK" | "EGP" | "ERN" | "ETB" | "EUR" | "FJD" | "FKP" | "GBP" | "GEL" | "GGP" | "GHS" | "GIP" | "GMD" | "GNF" | "GTQ" | "GYD" | "HKD" | "HNL" | "HRK" | "HTG" | "HUF" | "IDR" | "ILS" | "IMP" | "INR" | "IQD" | "IRR" | "ISK" | "JEP" | "JMD" | "JOD" | "JPY" | "KES" | "KGS" | "KHR" | "KMF" | "KPW" | "KRW" | "KWD" | "KYD" | "KZT" | "LAK" | "LBP" | "LKR" | "LRD" | "LSL" | "LTL" | "LVL" | "LYD" | "MAD" | "MDL" | "MGA" | "MKD" | "MMK" | "MNT" | "MOP" | "MRO" | "MTL" | "MUR" | "MVR" | "MWK" | "MXN" | "MYR" | "MZN" | "NAD" | "NGN" | "NIO" | "NOK" | "NPR" | "NZD" | "OMR" | "PAB" | "PEN" | "PGK" | "PHP" | "PKR" | "PLN" | "PYG" | "QAR" | "QUN" | "RON" | "RSD" | "RUB" | "RWF" | "SAR" | "SBD" | "SCR" | "SDG" | "SEK" | "SGD" | "SHP" | "SLL" | "SOS" | "SRD" | "STD" | "SVC" | "SYP" | "SZL" | "THB" | "TJS" | "TMT" | "TND" | "TOP" | "TRY" | "TTD" | "TWD" | "TZS" | "UAH" | "UGX" | "USD" | "UYU" | "UZS" | "VEF" | "VND" | "VUV" | "WST" | "XAF" | "XAG" | "XAU" | "XCD" | "XDR" | "XOF" | "XPD" | "XPF" | "XPT" | "YER" | "ZAR" | "ZMK" | "ZMW" | "ZWL" | "%future added value";
 export type Language = "ar" | "bg" | "ca" | "cs" | "da" | "de" | "el" | "en" | "engb" | "enus" | "es" | "esar" | "et" | "fi" | "fr" | "he" | "hr" | "hu" | "id" | "is" | "it" | "ja" | "ko" | "lt" | "lv" | "ms" | "nl" | "no" | "pl" | "pt" | "ptbr" | "ptpt" | "ro" | "ru" | "sk" | "sl" | "sr" | "sv" | "th" | "tl" | "tr" | "uk" | "vi" | "zh" | "zhcn" | "zhtw" | "%future added value";
+export type OrderBy = "DISTANCE" | "POPULARITY" | "PRICE" | "RANKING" | "REVIEW_SCORE" | "STARS" | "%future added value";
 export type HotelsSearchInput = {
   latitude?: ?number,
   longitude?: ?number,
@@ -50,7 +51,8 @@ export type HotelFacilitiesInput = {
   wifi?: ?boolean,
 };
 export type AvailableHotelOptionsInput = {
-  currency?: ?Currency
+  currency?: ?Currency,
+  orderBy?: ?OrderBy,
 };
 export type NewAllHotelsSearchQueryVariables = {|
   search: HotelsSearchInput,
diff --git a/app/hotels/src/allHotels/__generated__/RenderSearchResultsQuery.graphql.js b/app/hotels/src/allHotels/__generated__/RenderSearchResultsQuery.graphql.js
index 064a2676..0a368403 100644
--- a/app/hotels/src/allHotels/__generated__/RenderSearchResultsQuery.graphql.js
+++ b/app/hotels/src/allHotels/__generated__/RenderSearchResultsQuery.graphql.js
@@ -1,6 +1,6 @@
 /**
  * @flow
- * @relayHash dade1672653eed5498b1bfa004ce0b5a
+ * @relayHash 9bd2dfd2daf9f78c01ea2b9ad9c7615c
  */
 
 /* eslint-disable */
@@ -12,6 +12,7 @@ import type { ConcreteRequest } from 'relay-runtime';
 type RenderSearchResults$ref = any;
 export type Currency = "AED" | "AFN" | "ALL" | "AMD" | "ANG" | "AOA" | "ARS" | "AUD" | "AWG" | "AZN" | "BAM" | "BBD" | "BDT" | "BGN" | "BHD" | "BIF" | "BMD" | "BND" | "BOB" | "BRL" | "BSD" | "BTC" | "BTN" | "BWP" | "BYN" | "BYR" | "BZD" | "CAD" | "CDF" | "CHF" | "CLF" | "CLP" | "CNY" | "COP" | "CRC" | "CUC" | "CUP" | "CVE" | "CZK" | "DJF" | "DKK" | "DOP" | "DZD" | "EEK" | "EGP" | "ERN" | "ETB" | "EUR" | "FJD" | "FKP" | "GBP" | "GEL" | "GGP" | "GHS" | "GIP" | "GMD" | "GNF" | "GTQ" | "GYD" | "HKD" | "HNL" | "HRK" | "HTG" | "HUF" | "IDR" | "ILS" | "IMP" | "INR" | "IQD" | "IRR" | "ISK" | "JEP" | "JMD" | "JOD" | "JPY" | "KES" | "KGS" | "KHR" | "KMF" | "KPW" | "KRW" | "KWD" | "KYD" | "KZT" | "LAK" | "LBP" | "LKR" | "LRD" | "LSL" | "LTL" | "LVL" | "LYD" | "MAD" | "MDL" | "MGA" | "MKD" | "MMK" | "MNT" | "MOP" | "MRO" | "MTL" | "MUR" | "MVR" | "MWK" | "MXN" | "MYR" | "MZN" | "NAD" | "NGN" | "NIO" | "NOK" | "NPR" | "NZD" | "OMR" | "PAB" | "PEN" | "PGK" | "PHP" | "PKR" | "PLN" | "PYG" | "QAR" | "QUN" | "RON" | "RSD" | "RUB" | "RWF" | "SAR" | "SBD" | "SCR" | "SDG" | "SEK" | "SGD" | "SHP" | "SLL" | "SOS" | "SRD" | "STD" | "SVC" | "SYP" | "SZL" | "THB" | "TJS" | "TMT" | "TND" | "TOP" | "TRY" | "TTD" | "TWD" | "TZS" | "UAH" | "UGX" | "USD" | "UYU" | "UZS" | "VEF" | "VND" | "VUV" | "WST" | "XAF" | "XAG" | "XAU" | "XCD" | "XDR" | "XOF" | "XPD" | "XPF" | "XPT" | "YER" | "ZAR" | "ZMK" | "ZMW" | "ZWL" | "%future added value";
 export type Language = "ar" | "bg" | "ca" | "cs" | "da" | "de" | "el" | "en" | "engb" | "enus" | "es" | "esar" | "et" | "fi" | "fr" | "he" | "hr" | "hu" | "id" | "is" | "it" | "ja" | "ko" | "lt" | "lv" | "ms" | "nl" | "no" | "pl" | "pt" | "ptbr" | "ptpt" | "ro" | "ru" | "sk" | "sl" | "sr" | "sv" | "th" | "tl" | "tr" | "uk" | "vi" | "zh" | "zhcn" | "zhtw" | "%future added value";
+export type OrderBy = "DISTANCE" | "POPULARITY" | "PRICE" | "RANKING" | "REVIEW_SCORE" | "STARS" | "%future added value";
 export type HotelsSearchInput = {
   latitude?: ?number,
   longitude?: ?number,
@@ -50,7 +51,8 @@ export type HotelFacilitiesInput = {
   wifi?: ?boolean,
 };
 export type AvailableHotelOptionsInput = {
-  currency?: ?Currency
+  currency?: ?Currency,
+  orderBy?: ?OrderBy,
 };
 export type RenderSearchResultsQueryVariables = {|
   search: HotelsSearchInput,
diff --git a/app/hotels/src/appRegistry/NewHotelsStandalonePackage.js b/app/hotels/src/appRegistry/NewHotelsStandalonePackage.js
index 055c6ebc..d2628335 100644
--- a/app/hotels/src/appRegistry/NewHotelsStandalonePackage.js
+++ b/app/hotels/src/appRegistry/NewHotelsStandalonePackage.js
@@ -12,7 +12,6 @@ import type { Coordinates } from '../CoordinatesType';
 import type { RoomConfigurationType } from '../HotelsContext';
 
 type Props = {
-  +bookingComAffiliate: string,
   +language: string,
   +currency: string,
   +dataSaverEnabled: boolean,
diff --git a/app/hotels/src/appRegistry/SingleHotelStandalonePackage.js b/app/hotels/src/appRegistry/SingleHotelStandalonePackage.js
index 8eeda0ef..b3621d2f 100644
--- a/app/hotels/src/appRegistry/SingleHotelStandalonePackage.js
+++ b/app/hotels/src/appRegistry/SingleHotelStandalonePackage.js
@@ -16,7 +16,6 @@ type Props = {
   +checkin: string,
   +checkout: string,
   +roomsConfiguration: RoomsConfiguration,
-  +bookingComAffiliate: string,
   +currency: string,
   +language: string,
   +onNavigationStateChange: () => void,
diff --git a/app/hotels/src/filter/FilterButton.js b/app/hotels/src/filter/FilterButton.js
index b5787a0a..710d86fb 100644
--- a/app/hotels/src/filter/FilterButton.js
+++ b/app/hotels/src/filter/FilterButton.js
@@ -48,20 +48,22 @@ const styleSheet = StyleSheet.create({
     backgroundColor: defaultTokens.paletteInkNormal,
   },
   buttonGroup: {
-    backgroundColor: defaultTokens.paletteCloudNormal,
-    marginEnd: 5,
-    borderColor: defaultTokens.borderColorCard,
+    backgroundColor: defaultTokens.paletteCloudLight,
+    marginEnd: 8,
+    borderColor: defaultTokens.paletteInkLighter,
     borderWidth: StyleSheet.hairlineWidth,
-    ios: {
-      height: 36,
-      borderRadius: 2,
-    },
+    height: 30,
+    borderRadius: 2,
+    paddingVertical: 6,
+    paddingHorizontal: 8,
   },
   activeButtonText: {
     color: defaultTokens.paletteCloudNormal,
   },
   buttonText: {
     color: defaultTokens.colorTextPrimary,
+    fontSize: 12,
+    lineHeight: 15,
   },
   icon: {
     paddingEnd: 5,
diff --git a/app/hotels/src/filter/FilterStripe.js b/app/hotels/src/filter/FilterStripe.js
index 0c48e811..c10d6c93 100644
--- a/app/hotels/src/filter/FilterStripe.js
+++ b/app/hotels/src/filter/FilterStripe.js
@@ -106,12 +106,7 @@ const styles = StyleSheet.create({
   },
   scrollView: {
     paddingVertical: 10,
-    android: {
-      paddingHorizontal: 14,
-    },
-    ios: {
-      paddingHorizontal: 10,
-    },
+    paddingHorizontal: 16,
   },
   backgroundNew: {
     backgroundColor: defaultTokens.paletteWhite,
diff --git a/app/hotels/src/map/allHotels/PriceMarker.js b/app/hotels/src/map/allHotels/PriceMarker.js
index 9541647a..5dd06963 100644
--- a/app/hotels/src/map/allHotels/PriceMarker.js
+++ b/app/hotels/src/map/allHotels/PriceMarker.js
@@ -27,15 +27,7 @@ const PriceMarker = (props: Props) => {
   return (
     <View>
       <View style={bubbleStyles}>
-        {price &&
-          price.amount &&
-          price.currency && (
-            <Price
-              amount={price.amount}
-              currency={price.currency}
-              style={priceStyles}
-            />
-          )}
+        {price != null && <Price price={price} style={priceStyles} />}
       </View>
       <View style={[styles.arrowBorder]} />
       <View style={[styles.arrow, isSelected && selectedStyles.arrow]} />
diff --git a/app/hotels/src/map/hotelDetailPreview/HotelDetailPreview.js b/app/hotels/src/map/hotelDetailPreview/HotelDetailPreview.js
index f8d00f9a..1878dc1d 100644
--- a/app/hotels/src/map/hotelDetailPreview/HotelDetailPreview.js
+++ b/app/hotels/src/map/hotelDetailPreview/HotelDetailPreview.js
@@ -53,13 +53,7 @@ export default function HotelDetailPreview(props: Props) {
             <View style={styles.row}>
               <View>
                 {stars > 0 && <Stars rating={stars} style={styles.stars} />}
-                {price &&
-                  price.currency != null &&
-                  price.amount != null && (
-                    <Text style={styles.price}>
-                      <Price currency={price.currency} amount={price.amount} />
-                    </Text>
-                  )}
+                {price != null && <Price price={price} style={styles.price} />}
               </View>
               <HotelReviewScore score={score} />
             </View>
diff --git a/app/hotels/src/map/singleHotel/__generated__/SingleHotelMapScreenQuery.graphql.js b/app/hotels/src/map/singleHotel/__generated__/SingleHotelMapScreenQuery.graphql.js
index 85780d7a..29d3f1e0 100644
--- a/app/hotels/src/map/singleHotel/__generated__/SingleHotelMapScreenQuery.graphql.js
+++ b/app/hotels/src/map/singleHotel/__generated__/SingleHotelMapScreenQuery.graphql.js
@@ -1,6 +1,6 @@
 /**
  * @flow
- * @relayHash 877c63f8212b982d34325aca2aeaeadb
+ * @relayHash 99461d2949189fbe38ba98261f3edc12
  */
 
 /* eslint-disable */
@@ -13,6 +13,7 @@ type AdditionalInfo$ref = any;
 type MapView_hotel$ref = any;
 export type Currency = "AED" | "AFN" | "ALL" | "AMD" | "ANG" | "AOA" | "ARS" | "AUD" | "AWG" | "AZN" | "BAM" | "BBD" | "BDT" | "BGN" | "BHD" | "BIF" | "BMD" | "BND" | "BOB" | "BRL" | "BSD" | "BTC" | "BTN" | "BWP" | "BYN" | "BYR" | "BZD" | "CAD" | "CDF" | "CHF" | "CLF" | "CLP" | "CNY" | "COP" | "CRC" | "CUC" | "CUP" | "CVE" | "CZK" | "DJF" | "DKK" | "DOP" | "DZD" | "EEK" | "EGP" | "ERN" | "ETB" | "EUR" | "FJD" | "FKP" | "GBP" | "GEL" | "GGP" | "GHS" | "GIP" | "GMD" | "GNF" | "GTQ" | "GYD" | "HKD" | "HNL" | "HRK" | "HTG" | "HUF" | "IDR" | "ILS" | "IMP" | "INR" | "IQD" | "IRR" | "ISK" | "JEP" | "JMD" | "JOD" | "JPY" | "KES" | "KGS" | "KHR" | "KMF" | "KPW" | "KRW" | "KWD" | "KYD" | "KZT" | "LAK" | "LBP" | "LKR" | "LRD" | "LSL" | "LTL" | "LVL" | "LYD" | "MAD" | "MDL" | "MGA" | "MKD" | "MMK" | "MNT" | "MOP" | "MRO" | "MTL" | "MUR" | "MVR" | "MWK" | "MXN" | "MYR" | "MZN" | "NAD" | "NGN" | "NIO" | "NOK" | "NPR" | "NZD" | "OMR" | "PAB" | "PEN" | "PGK" | "PHP" | "PKR" | "PLN" | "PYG" | "QAR" | "QUN" | "RON" | "RSD" | "RUB" | "RWF" | "SAR" | "SBD" | "SCR" | "SDG" | "SEK" | "SGD" | "SHP" | "SLL" | "SOS" | "SRD" | "STD" | "SVC" | "SYP" | "SZL" | "THB" | "TJS" | "TMT" | "TND" | "TOP" | "TRY" | "TTD" | "TWD" | "TZS" | "UAH" | "UGX" | "USD" | "UYU" | "UZS" | "VEF" | "VND" | "VUV" | "WST" | "XAF" | "XAG" | "XAU" | "XCD" | "XDR" | "XOF" | "XPD" | "XPF" | "XPT" | "YER" | "ZAR" | "ZMK" | "ZMW" | "ZWL" | "%future added value";
 export type Language = "ar" | "bg" | "ca" | "cs" | "da" | "de" | "el" | "en" | "engb" | "enus" | "es" | "esar" | "et" | "fi" | "fr" | "he" | "hr" | "hu" | "id" | "is" | "it" | "ja" | "ko" | "lt" | "lv" | "ms" | "nl" | "no" | "pl" | "pt" | "ptbr" | "ptpt" | "ro" | "ru" | "sk" | "sl" | "sr" | "sv" | "th" | "tl" | "tr" | "uk" | "vi" | "zh" | "zhcn" | "zhtw" | "%future added value";
+export type OrderBy = "DISTANCE" | "POPULARITY" | "PRICE" | "RANKING" | "REVIEW_SCORE" | "STARS" | "%future added value";
 export type AvailableHotelSearchInput = {
   hotelId: string,
   checkin: any,
@@ -28,7 +29,8 @@ export type RoomsChildrenConfiguration = {
   age?: ?number
 };
 export type AvailableHotelOptionsInput = {
-  currency?: ?Currency
+  currency?: ?Currency,
+  orderBy?: ?OrderBy,
 };
 export type SingleHotelMapScreenQueryVariables = {|
   search: AvailableHotelSearchInput,
diff --git a/app/hotels/src/navigation/HotelsNavigationStack.js b/app/hotels/src/navigation/HotelsNavigationStack.js
index 5d4d6658..9ee039a0 100644
--- a/app/hotels/src/navigation/HotelsNavigationStack.js
+++ b/app/hotels/src/navigation/HotelsNavigationStack.js
@@ -18,7 +18,6 @@ import GalleryGrid from '../gallery/GalleryGrid';
 
 export type NavigationProps = {|
   navigation: NavigationType,
-  bookingComAffiliate: string,
   language: string,
   currency: string,
 |};
diff --git a/app/hotels/src/navigation/allHotels/SearchResultsScreen.js b/app/hotels/src/navigation/allHotels/SearchResultsScreen.js
index 0ddf4ba3..612d664a 100644
--- a/app/hotels/src/navigation/allHotels/SearchResultsScreen.js
+++ b/app/hotels/src/navigation/allHotels/SearchResultsScreen.js
@@ -35,7 +35,6 @@ type Props = {|
   +lastNavigationMode?: 'present' | 'push',
   +setResultType: (show: ResultType) => void,
   +show: ResultType,
-  +bookingComAffiliate: string,
 |};
 
 const noop = () => {};
@@ -106,7 +105,6 @@ class SearchResultsScreen extends React.Component<Props> {
       checkin={new Date(this.props.checkin)}
       checkout={new Date(this.props.checkout)}
       roomsConfiguration={this.props.roomsConfiguration}
-      bookingComAffiliate={this.props.bookingComAffiliate}
     >
       <LayoutDoubleColumn
         menuComponent={
diff --git a/app/hotels/src/navigation/singleHotel/SingleHotelContext.js b/app/hotels/src/navigation/singleHotel/SingleHotelContext.js
index a0a87a65..ec66cd93 100644
--- a/app/hotels/src/navigation/singleHotel/SingleHotelContext.js
+++ b/app/hotels/src/navigation/singleHotel/SingleHotelContext.js
@@ -9,7 +9,6 @@ const defaultState = {
   checkin: new Date(),
   checkout: new Date(),
   roomsConfiguration: [],
-  bookingComAffiliate: '',
   setHotelId: () => {},
 };
 
@@ -23,7 +22,6 @@ type Props = {|
   +checkin: Date,
   +checkout: Date,
   +roomsConfiguration: $ReadOnlyArray<RoomConfigurationType>,
-  +bookingComAffiliate: string,
 |};
 
 type State = {|
@@ -31,7 +29,6 @@ type State = {|
   +checkin: Date,
   +checkout: Date,
   +roomsConfiguration: $ReadOnlyArray<RoomConfigurationType>,
-  +bookingComAffiliate: string,
   +setHotelId: (hotelId: string) => void,
 |};
 
@@ -44,7 +41,6 @@ class Provider extends React.Component<Props, State> {
       checkin: props.checkin,
       checkout: props.checkout,
       roomsConfiguration: props.roomsConfiguration,
-      bookingComAffiliate: props.bookingComAffiliate,
       setHotelId: this.setHotelId,
     };
   }
diff --git a/app/hotels/src/navigation/singleHotel/SingleHotelNavigationScreen.js b/app/hotels/src/navigation/singleHotel/SingleHotelNavigationScreen.js
index 9f0d0f15..d6d6367c 100644
--- a/app/hotels/src/navigation/singleHotel/SingleHotelNavigationScreen.js
+++ b/app/hotels/src/navigation/singleHotel/SingleHotelNavigationScreen.js
@@ -50,7 +50,6 @@ class SingleHotelNavigationScreen extends React.Component<Props> {
         checkin={this.props.checkin}
         checkout={this.props.checkout}
         roomsConfiguration={this.props.roomsConfiguration}
-        bookingComAffiliate={this.props.bookingComAffiliate}
       >
         <SingleHotel goBack={this.goBack} />
       </SingleHotelContext.Provider>
diff --git a/app/hotels/src/singleHotel/PaymentScreen.js b/app/hotels/src/singleHotel/PaymentScreen.js
index 4879eee9..32abea37 100644
--- a/app/hotels/src/singleHotel/PaymentScreen.js
+++ b/app/hotels/src/singleHotel/PaymentScreen.js
@@ -6,13 +6,17 @@ import {
   WebView,
   Logger,
   type WebViewStateChangeEvent,
+  GeneralError,
 } from '@kiwicom/mobile-shared';
 import { DateUtils, Translation } from '@kiwicom/mobile-localization';
 import querystring from 'querystring';
 import { HeaderTitle } from '@kiwicom/mobile-navigation';
+import { graphql, PublicApiRenderer } from '@kiwicom/mobile-relay';
+import idx from 'idx';
 
 import { sanitizeDate } from '../GraphQLSanitizers';
 import { withHotelsContext } from '../HotelsContext';
+import type { PaymentScreenQueryResponse } from './__generated__/PaymentScreenQuery.graphql';
 
 export type PaymentParameters = {|
   +hotelId: number,
@@ -22,7 +26,6 @@ export type PaymentParameters = {|
     +id: string,
     +count: number, // how many rooms with this ID?
   |}>,
-  +affiliateId: string,
   +language: string,
   +currency: string,
   +version: string,
@@ -46,15 +49,38 @@ export class PaymentScreen extends React.Component<PaymentParameters> {
     }
   };
 
-  render = () => (
-    <React.Fragment>
-      <StatusBar barStyle="dark-content" />
+  renderInner = (props: PaymentScreenQueryResponse) => {
+    const url = idx(props, _ => _.hotelPaymentUrls.bookingComPaymentUrl);
+    if (url == null) {
+      return (
+        <GeneralError
+          errorMessage={<Translation id="hotels.payment_screen.server_error" />}
+        />
+      );
+    }
+    return (
       <WebView
         source={{
-          uri: createURI(this.props),
+          uri: createURI(this.props, url),
         }}
         onNavigationStateChange={this.onNavigationStateChange}
       />
+    );
+  };
+
+  render = () => (
+    <React.Fragment>
+      <StatusBar barStyle="dark-content" />
+      <PublicApiRenderer
+        render={this.renderInner}
+        query={graphql`
+          query PaymentScreenQuery {
+            hotelPaymentUrls {
+              bookingComPaymentUrl
+            }
+          }
+        `}
+      />
     </React.Fragment>
   );
 }
@@ -66,7 +92,7 @@ export default withHotelsContext(state => ({
   version: state.version,
 }))(PaymentScreen);
 
-export function createURI(pp: PaymentParameters): string {
+export function createURI(pp: PaymentParameters, url: string): string {
   const checkinQuery = sanitizeDate(pp.checkin);
   const intervalQuery = DateUtils.diffInDays(pp.checkout, pp.checkin);
 
@@ -75,22 +101,13 @@ export function createURI(pp: PaymentParameters): string {
     return acc;
   }, {});
 
-  return (
-    'https://secure.booking.com/book.html?' +
-    querystring.stringify({
-      from_source: 'hotel',
-      hostname: 'hotels.kiwi.com',
-      hotel_id: pp.hotelId,
-      stage: 1, // 0 - room selection, 1 - address editing, 2 - final overview
-      checkin: checkinQuery,
-      interval: intervalQuery,
-      children_extrabeds: '', // ???
-      ...roomsQuery,
-      rt_pos_selected: '', // ???
-      aid: pp.affiliateId,
-      label: `kiwi-${Platform.OS}-react-${pp.version}`,
-      lang: pp.language,
-      selected_currency: pp.currency,
-    })
-  );
+  return `${url}&${querystring.stringify({
+    hotel_id: pp.hotelId,
+    checkin: checkinQuery,
+    interval: intervalQuery,
+    ...roomsQuery,
+    label: `kiwi-${Platform.OS}-react-${pp.version}`,
+    lang: pp.language,
+    selected_currency: pp.currency,
+  })}`;
 }
diff --git a/app/hotels/src/singleHotel/RoomSummary.js b/app/hotels/src/singleHotel/RoomSummary.js
index edc0c161..339067c1 100644
--- a/app/hotels/src/singleHotel/RoomSummary.js
+++ b/app/hotels/src/singleHotel/RoomSummary.js
@@ -35,11 +35,7 @@ export default function RoomSummary(props: Props) {
               numberOfRooms: props.roomCount,
             }}
           />
-          <Price
-            amount={props.price.amount}
-            currency={props.price.currency}
-            style={styles.currency}
-          />
+          <Price price={props.price} style={styles.currency} />
         </View>
       </View>
     </View>
diff --git a/app/hotels/src/singleHotel/__generated__/PaymentScreenQuery.graphql.js b/app/hotels/src/singleHotel/__generated__/PaymentScreenQuery.graphql.js
new file mode 100644
index 00000000..81e5374c
--- /dev/null
+++ b/app/hotels/src/singleHotel/__generated__/PaymentScreenQuery.graphql.js
@@ -0,0 +1,79 @@
+/**
+ * @flow
+ * @relayHash 5dafec1044a34b2ec2734a78ab2fa1cd
+ */
+
+/* eslint-disable */
+
+'use strict';
+
+/*::
+import type { ConcreteRequest } from 'relay-runtime';
+export type PaymentScreenQueryVariables = {||};
+export type PaymentScreenQueryResponse = {|
+  +hotelPaymentUrls: ?{|
+    +bookingComPaymentUrl: ?string
+  |}
+|};
+export type PaymentScreenQuery = {|
+  variables: PaymentScreenQueryVariables,
+  response: PaymentScreenQueryResponse,
+|};
+*/
+
+
+/*
+query PaymentScreenQuery {
+  hotelPaymentUrls {
+    bookingComPaymentUrl
+  }
+}
+*/
+
+const node/*: ConcreteRequest*/ = (function(){
+var v0 = [
+  {
+    "kind": "LinkedField",
+    "alias": null,
+    "name": "hotelPaymentUrls",
+    "storageKey": null,
+    "args": null,
+    "concreteType": "HotelPaymentUrls",
+    "plural": false,
+    "selections": [
+      {
+        "kind": "ScalarField",
+        "alias": null,
+        "name": "bookingComPaymentUrl",
+        "args": null,
+        "storageKey": null
+      }
+    ]
+  }
+];
+return {
+  "kind": "Request",
+  "operationKind": "query",
+  "name": "PaymentScreenQuery",
+  "id": null,
+  "text": "query PaymentScreenQuery {\n  hotelPaymentUrls {\n    bookingComPaymentUrl\n  }\n}\n",
+  "metadata": {},
+  "fragment": {
+    "kind": "Fragment",
+    "name": "PaymentScreenQuery",
+    "type": "RootQuery",
+    "metadata": null,
+    "argumentDefinitions": [],
+    "selections": v0
+  },
+  "operation": {
+    "kind": "Operation",
+    "name": "PaymentScreenQuery",
+    "argumentDefinitions": [],
+    "selections": v0
+  }
+};
+})();
+// prettier-ignore
+(node/*: any*/).hash = '894d7dd18175ff2fefc9f746ab946ac9';
+module.exports = node;
diff --git a/app/hotels/src/singleHotel/__generated__/SingleHotelContainerQuery.graphql.js b/app/hotels/src/singleHotel/__generated__/SingleHotelContainerQuery.graphql.js
index 70e00fa6..a0795198 100644
--- a/app/hotels/src/singleHotel/__generated__/SingleHotelContainerQuery.graphql.js
+++ b/app/hotels/src/singleHotel/__generated__/SingleHotelContainerQuery.graphql.js
@@ -1,6 +1,6 @@
 /**
  * @flow
- * @relayHash f519584c9af1ba535dd822890359a0f7
+ * @relayHash 56f593c8d329e4cca80af045a0d5b313
  */
 
 /* eslint-disable */
@@ -12,6 +12,7 @@ import type { ConcreteRequest } from 'relay-runtime';
 type HotelDetailScreen_availableHotel$ref = any;
 export type Currency = "AED" | "AFN" | "ALL" | "AMD" | "ANG" | "AOA" | "ARS" | "AUD" | "AWG" | "AZN" | "BAM" | "BBD" | "BDT" | "BGN" | "BHD" | "BIF" | "BMD" | "BND" | "BOB" | "BRL" | "BSD" | "BTC" | "BTN" | "BWP" | "BYN" | "BYR" | "BZD" | "CAD" | "CDF" | "CHF" | "CLF" | "CLP" | "CNY" | "COP" | "CRC" | "CUC" | "CUP" | "CVE" | "CZK" | "DJF" | "DKK" | "DOP" | "DZD" | "EEK" | "EGP" | "ERN" | "ETB" | "EUR" | "FJD" | "FKP" | "GBP" | "GEL" | "GGP" | "GHS" | "GIP" | "GMD" | "GNF" | "GTQ" | "GYD" | "HKD" | "HNL" | "HRK" | "HTG" | "HUF" | "IDR" | "ILS" | "IMP" | "INR" | "IQD" | "IRR" | "ISK" | "JEP" | "JMD" | "JOD" | "JPY" | "KES" | "KGS" | "KHR" | "KMF" | "KPW" | "KRW" | "KWD" | "KYD" | "KZT" | "LAK" | "LBP" | "LKR" | "LRD" | "LSL" | "LTL" | "LVL" | "LYD" | "MAD" | "MDL" | "MGA" | "MKD" | "MMK" | "MNT" | "MOP" | "MRO" | "MTL" | "MUR" | "MVR" | "MWK" | "MXN" | "MYR" | "MZN" | "NAD" | "NGN" | "NIO" | "NOK" | "NPR" | "NZD" | "OMR" | "PAB" | "PEN" | "PGK" | "PHP" | "PKR" | "PLN" | "PYG" | "QAR" | "QUN" | "RON" | "RSD" | "RUB" | "RWF" | "SAR" | "SBD" | "SCR" | "SDG" | "SEK" | "SGD" | "SHP" | "SLL" | "SOS" | "SRD" | "STD" | "SVC" | "SYP" | "SZL" | "THB" | "TJS" | "TMT" | "TND" | "TOP" | "TRY" | "TTD" | "TWD" | "TZS" | "UAH" | "UGX" | "USD" | "UYU" | "UZS" | "VEF" | "VND" | "VUV" | "WST" | "XAF" | "XAG" | "XAU" | "XCD" | "XDR" | "XOF" | "XPD" | "XPF" | "XPT" | "YER" | "ZAR" | "ZMK" | "ZMW" | "ZWL" | "%future added value";
 export type Language = "ar" | "bg" | "ca" | "cs" | "da" | "de" | "el" | "en" | "engb" | "enus" | "es" | "esar" | "et" | "fi" | "fr" | "he" | "hr" | "hu" | "id" | "is" | "it" | "ja" | "ko" | "lt" | "lv" | "ms" | "nl" | "no" | "pl" | "pt" | "ptbr" | "ptpt" | "ro" | "ru" | "sk" | "sl" | "sr" | "sv" | "th" | "tl" | "tr" | "uk" | "vi" | "zh" | "zhcn" | "zhtw" | "%future added value";
+export type OrderBy = "DISTANCE" | "POPULARITY" | "PRICE" | "RANKING" | "REVIEW_SCORE" | "STARS" | "%future added value";
 export type AvailableHotelSearchInput = {
   hotelId: string,
   checkin: any,
@@ -27,7 +28,8 @@ export type RoomsChildrenConfiguration = {
   age?: ?number
 };
 export type AvailableHotelOptionsInput = {
-  currency?: ?Currency
+  currency?: ?Currency,
+  orderBy?: ?OrderBy,
 };
 export type SingleHotelContainerQueryVariables = {|
   search: AvailableHotelSearchInput,
diff --git a/app/hotels/src/singleHotel/bookNow/BookNow.js b/app/hotels/src/singleHotel/bookNow/BookNow.js
index bfe7b1dc..03d126ab 100644
--- a/app/hotels/src/singleHotel/bookNow/BookNow.js
+++ b/app/hotels/src/singleHotel/bookNow/BookNow.js
@@ -20,7 +20,6 @@ type PropsWithContext = {
   ...Props,
   +checkin: Date,
   +checkout: Date,
-  +bookingComAffiliate: string,
   +currency: string,
 };
 
@@ -31,7 +30,6 @@ export class BookNow extends React.Component<PropsWithContext> {
       this.props.navigation.navigate('Payment', {
         hotelId: Number(hotelId),
         rooms: convertRooms(this.props.selected),
-        affiliateId: this.props.bookingComAffiliate,
         language: DeviceInfo.getLanguage(),
       });
     }
diff --git a/app/hotels/src/singleHotel/roomList/RoomRow.js b/app/hotels/src/singleHotel/roomList/RoomRow.js
index 93bcc002..450ad2a5 100644
--- a/app/hotels/src/singleHotel/roomList/RoomRow.js
+++ b/app/hotels/src/singleHotel/roomList/RoomRow.js
@@ -78,7 +78,7 @@ export class RoomRow extends React.Component<Props> {
       availableRoom,
       _ => _.room.photos.edges[0].node.lowResUrl,
     );
-    const price = idx(availableRoom, _ => _.minimalPrice.amount) || null;
+    const amount = idx(availableRoom, _ => _.minimalPrice.amount) || null;
     const currency = idx(availableRoom, _ => _.minimalPrice.currency) || null;
     const selectableCount =
       idx(availableRoom, _ => _.incrementalPrice.length) || 0;
@@ -103,8 +103,7 @@ export class RoomRow extends React.Component<Props> {
             <BeddingInfo room={room} />
           </View>
           <RoomPicker
-            price={price}
-            currency={currency}
+            price={{ amount, currency }}
             selectedCount={selectedCount}
             selectableCount={selectableCount}
             increment={this.select}
diff --git a/app/hotels/src/singleHotel/roomPicker/IncrementDecrement.js b/app/hotels/src/singleHotel/roomPicker/IncrementDecrement.js
index ccd27c3d..6d181358 100644
--- a/app/hotels/src/singleHotel/roomPicker/IncrementDecrement.js
+++ b/app/hotels/src/singleHotel/roomPicker/IncrementDecrement.js
@@ -12,9 +12,13 @@ import {
 import { Translation } from '@kiwicom/mobile-localization';
 import { defaultTokens } from '@kiwicom/mobile-orbit';
 
-type Props = {|
-  +price: number | null,
+type PriceType = {|
+  +amount: number | null,
   +currency: string | null,
+|};
+
+type Props = {|
+  +price: PriceType | null,
   +selectedCount: number,
   +selectableCount: number,
   +increment: () => void,
@@ -25,7 +29,6 @@ export default function IncrementDecrement({
   decrement,
   selectedCount,
   price,
-  currency,
   increment,
   selectableCount,
 }: Props) {
@@ -43,7 +46,7 @@ export default function IncrementDecrement({
               {...androidProps}
             />
           </Text>
-          <Price amount={price} currency={currency} style={styles.price} />
+          <Price price={price} style={styles.price} />
         </View>
 
         <View style={styles.countContainer}>
diff --git a/app/hotels/src/singleHotel/roomPicker/RoomPicker.js b/app/hotels/src/singleHotel/roomPicker/RoomPicker.js
index c782813b..93e2e84e 100644
--- a/app/hotels/src/singleHotel/roomPicker/RoomPicker.js
+++ b/app/hotels/src/singleHotel/roomPicker/RoomPicker.js
@@ -5,9 +5,13 @@ import * as React from 'react';
 import SelectButton from './SelectButton';
 import IncrementDecrement from './IncrementDecrement';
 
-type Props = {|
-  +price: number | null,
+type Price = {|
+  +amount: number | null,
   +currency: string | null,
+|};
+
+type Props = {|
+  +price: Price | null,
   +selectedCount: number,
   +selectableCount: number,
   +increment: () => void,
@@ -15,18 +19,12 @@ type Props = {|
 |};
 
 export default function RoomPicker(props: Props) {
-  if (props.price == null && props.currency == null) {
+  if (props.price == null) {
     return null;
   }
 
   if (props.selectedCount === 0) {
-    return (
-      <SelectButton
-        price={props.price}
-        currency={props.currency}
-        increment={props.increment}
-      />
-    );
+    return <SelectButton price={props.price} increment={props.increment} />;
   }
 
   return <IncrementDecrement {...props} />;
diff --git a/app/hotels/src/singleHotel/roomPicker/SelectButton.js b/app/hotels/src/singleHotel/roomPicker/SelectButton.js
index 8b36b0f0..4955733c 100644
--- a/app/hotels/src/singleHotel/roomPicker/SelectButton.js
+++ b/app/hotels/src/singleHotel/roomPicker/SelectButton.js
@@ -11,13 +11,17 @@ import {
 import { Translation } from '@kiwicom/mobile-localization';
 import { defaultTokens } from '@kiwicom/mobile-orbit';
 
-type Props = {|
-  +price: number | null,
+type PriceType = {|
+  +amount: number | null,
   +currency: string | null,
+|};
+
+type Props = {|
+  +price: PriceType,
   +increment: () => void,
 |};
 
-export default function SelectButton({ increment, price, currency }: Props) {
+export default function SelectButton({ increment, price }: Props) {
   return (
     <Touchable style={styles.container} onPress={increment} delayPressIn={40}>
       <View style={styles.row}>
@@ -26,7 +30,7 @@ export default function SelectButton({ increment, price, currency }: Props) {
           text={<Translation id="single_hotel.room_picker.select" />}
         />
         <View style={styles.row} />
-        <Price amount={price} currency={currency} style={styles.price} />
+        <Price price={price} style={styles.price} />
       </View>
     </Touchable>
   );
diff --git a/docs/ios/react-native-module.md b/docs/ios/react-native-module.md
index 109b4e7a..2a88f54b 100644
--- a/docs/ios/react-native-module.md
+++ b/docs/ios/react-native-module.md
@@ -27,7 +27,6 @@ The registered module has to be then instantiated along with the proper `moduleN
 ```objc
   RNKiwiViewController *vc = [[RNKiwiViewController alloc] initWithModule:@"NewKiwiHotels"
                                                           initialProperties:@{
-                                                            @"bookingComAffiliate": @"123456",
                                                             @"language": @"en",
                                                             @"currency": @"EUR",
                                                             @"lastNavigationMode": @"present",
diff --git a/ios/RNNativePlayground/ViewController.m b/ios/RNNativePlayground/ViewController.m
index ba4c4fab..29d812c5 100644
--- a/ios/RNNativePlayground/ViewController.m
+++ b/ios/RNNativePlayground/ViewController.m
@@ -53,7 +53,6 @@
   
     RNKiwiViewController *vc = [[RNKiwiViewController alloc] initWithModule:@"NewKiwiHotels"
                                                           initialProperties:@{
-                                                            @"bookingComAffiliate": @"123456",
                                                             @"language": @"en",
                                                             @"currency": @"EUR",
                                                             @"lastNavigationMode": @"present",
diff --git a/ios/reactNativeApp.xcodeproj/project.pbxproj b/ios/reactNativeApp.xcodeproj/project.pbxproj
index f0e8197e..e39aceb4 100644
--- a/ios/reactNativeApp.xcodeproj/project.pbxproj
+++ b/ios/reactNativeApp.xcodeproj/project.pbxproj
@@ -5,6 +5,7 @@
 	};
 	objectVersion = 46;
 	objects = {
+
 /* Begin PBXBuildFile section */
 		012E4C1BA8444C8182992EEB /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B11306CBC6D24D3C990EAC4B /* Ionicons.ttf */; };
 		038BD3170181472CA3083F7C /* SimpleLineIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 6603DB7CD9F34D7AB1AD5B21 /* SimpleLineIcons.ttf */; };
@@ -19,7 +20,6 @@
 		2107154720B5677200E6C96B /* RNKiwiGestureController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2107154520B5677200E6C96B /* RNKiwiGestureController.h */; };
 		215881F520C7FF140016707A /* RNKiwiMobile.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 27E931B020AD96780053AE19 /* RNKiwiMobile.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
 		24FF33FA378944ACA7C85EA8 /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 46C66C53E2B841209A9370D0 /* Zocial.ttf */; };
-		2711985E20B1F7E300C6292B /* spfont.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BF458A69A33B4401B9E9FCDA /* spfont.ttf */; };
 		2711986220B1F7E300C6292B /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = CB92C0158EB3448ABD260167 /* Entypo.ttf */; };
 		2711986320B1F7E300C6292B /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = E2B3E92C36254A399220D4DE /* EvilIcons.ttf */; };
 		2711986420B1F7E300C6292B /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 930DC3E79F864AEFBC5F91D7 /* Feather.ttf */; };
@@ -160,7 +160,6 @@
 		B11306CBC6D24D3C990EAC4B /* Ionicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Ionicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf"; sourceTree = "<group>"; };
 		B4E7213E71A344C5AE638015 /* Pods-RNKiwiMobile.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RNKiwiMobile.release.xcconfig"; path = "Pods/Target Support Files/Pods-RNKiwiMobile/Pods-RNKiwiMobile.release.xcconfig"; sourceTree = "<group>"; };
 		B6490E2D178E410C908FF998 /* Roboto-Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-Regular.ttf"; path = "../assets/fonts/android/Roboto-Regular.ttf"; sourceTree = "<group>"; };
-		BF458A69A33B4401B9E9FCDA /* spfont.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = spfont.ttf; path = ../assets/fonts/spfont.ttf; sourceTree = "<group>"; };
 		C969F98F8A854CCB89957EFD /* Roboto-Medium.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-Medium.ttf"; path = "../assets/fonts/Roboto-Medium.ttf"; sourceTree = "<group>"; };
 		CB92C0158EB3448ABD260167 /* Entypo.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Entypo.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Entypo.ttf"; sourceTree = "<group>"; };
 		D1641E3E0F4C42F0A3CB58F1 /* CircularPro-Bold.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "CircularPro-Bold.otf"; path = "../assets/fonts/CircularPro-Bold.otf"; sourceTree = "<group>"; };
@@ -291,7 +290,6 @@
 		A142755D6A354DA78D29BEB8 /* Resources */ = {
 			isa = PBXGroup;
 			children = (
-				BF458A69A33B4401B9E9FCDA /* spfont.ttf */,
 				21C03BEA6DA8479DBFFA62F0 /* Roboto-Regular.ttf */,
 				CB92C0158EB3448ABD260167 /* Entypo.ttf */,
 				E2B3E92C36254A399220D4DE /* EvilIcons.ttf */,
@@ -501,7 +499,6 @@
 			buildActionMask = 2147483647;
 			files = (
 				68E80E25215E66CD00EB4717 /* CircularPro-Book.otf in Resources */,
-				2711985E20B1F7E300C6292B /* spfont.ttf in Resources */,
 				2711986220B1F7E300C6292B /* Entypo.ttf in Resources */,
 				2711986320B1F7E300C6292B /* EvilIcons.ttf in Resources */,
 				2711986420B1F7E300C6292B /* Feather.ttf in Resources */,
diff --git a/packages/localization/src/vocabularies/Hotels.js b/packages/localization/src/vocabularies/Hotels.js
index 41f11d7f..8dd0eef2 100644
--- a/packages/localization/src/vocabularies/Hotels.js
+++ b/packages/localization/src/vocabularies/Hotels.js
@@ -14,6 +14,9 @@ export default {
   'hotels.navigation.title.single_hotel': 'Details',
   'hotels.navigation.title.single_hotel_map': 'Map',
 
+  'hotels.payment_screen.server_error':
+    'Failed to get url from the server, please try again.',
+
   'hotels_search.all_hotels.please_search':
     'Please search for your desired destination.',
   'hotels_search.all_hotels_search_list.no_hotels_found': 'No hotels found.',
diff --git a/packages/shared/src/Price.js b/packages/shared/src/Price.js
index 5c994875..90445ed1 100644
--- a/packages/shared/src/Price.js
+++ b/packages/shared/src/Price.js
@@ -10,9 +10,13 @@ import CancellablePromise, {
   type CancellablePromiseType,
 } from './CancellablePromise';
 
+type PriceType = {
+  +amount?: ?number,
+  +currency?: ?string,
+};
+
 type Props = {|
-  +amount: number | null,
-  +currency: string | null,
+  +price?: ?PriceType,
   +style?: StylePropType,
 |};
 
@@ -36,7 +40,10 @@ export default class Price extends React.Component<Props, State> {
   };
 
   componentDidUpdate = (prevProps: Props) => {
-    if (prevProps.amount !== this.props.amount) {
+    if (
+      (prevProps.price && prevProps.price.amount) !==
+      (this.props.price && this.props.price.amount)
+    ) {
       this.formatCurrency();
     }
   };
@@ -48,10 +55,14 @@ export default class Price extends React.Component<Props, State> {
   };
 
   formatCurrency = async () => {
-    if (this.props.amount != null && this.props.currency != null) {
+    if (
+      this.props.price != null &&
+      this.props.price.amount != null &&
+      this.props.price.currency != null
+    ) {
       try {
         this.cancellablePromise = CancellablePromise(
-          CurrencyFormatter(this.props.amount, this.props.currency),
+          CurrencyFormatter(this.props.price.amount, this.props.price.currency),
         );
         const formattedCurrency = await this.cancellablePromise.promise;
         this.setState({ formattedCurrency });
diff --git a/packages/shared/src/WebView.js b/packages/shared/src/WebView.js
index b8318180..4ab94648 100644
--- a/packages/shared/src/WebView.js
+++ b/packages/shared/src/WebView.js
@@ -31,7 +31,7 @@ export default class WebView extends React.Component<Props> {
   render = () => (
     <NativeWebView
       bounces={false}
-      startInLoadingState={false} // it feels faster because we don't have to wait until the page is fully loaded
+      startInLoadingState={true} // Prefer to see loader than blank screen
       renderError={this.renderError}
       onNavigationStateChange={this.onNavigationStateChange}
       {...this.props}
diff --git a/schema.graphql b/schema.graphql
index 4d91e4b0..6bc1f692 100644
--- a/schema.graphql
+++ b/schema.graphql
@@ -137,6 +137,9 @@ enum availabilityStatus {
 input AvailableHotelOptionsInput {
   """Three-letters ISO 4217 currency code, e.g. EUR or USD"""
   currency: Currency
+
+  """Order results by this input type"""
+  orderBy: OrderBy
 }
 
 input AvailableHotelSearchInput {
@@ -916,6 +919,11 @@ enum CustomerBookingsOnlyEnum {
   PAST
 }
 
+enum CustomerBookingsOrderEnum {
+  ASC
+  DESC
+}
+
 type CustomerSupportNumber {
   """Customer Support phone number locale territory"""
   localeTerritory: String
@@ -1462,6 +1470,11 @@ type HotelFacilityEdge {
   cursor: String!
 }
 
+"""The urls where the user will be redirected for payment"""
+type HotelPaymentUrls {
+  bookingComPaymentUrl: String
+}
+
 type HotelPhoto {
   """The ID of an object"""
   id: ID!
@@ -1963,6 +1976,15 @@ type OperatingAirline {
   name: String
 }
 
+enum OrderBy {
+  DISTANCE
+  POPULARITY
+  PRICE
+  RANKING
+  REVIEW_SCORE
+  STARS
+}
+
 """Information about pagination in a connection."""
 type PageInfo {
   """When paginating forwards, are there more items?"""
@@ -2258,6 +2280,12 @@ type RootQuery {
     You can skip this argument to fetch all bookings (future and past).
     """
     only: CustomerBookingsOnlyEnum
+
+    """
+    Allows to order bookings in ascending or descending order. You can skip this
+    argument to fetch all bookings in ascendering order.
+    """
+    order: CustomerBookingsOrderEnum
     after: String
     first: Int
     before: String
@@ -2311,6 +2339,9 @@ type RootQuery {
     last: Int
   ): HotelCityConnection
 
+  """Url where user will be redirected for payment"""
+  hotelPaymentUrls: HotelPaymentUrls
+
   """Single location by ID."""
   location(
     id: String!
@@ -2342,7 +2373,7 @@ type RootQuery {
     id: Int!
 
     """Simple auth token that lets you fetch a unique booking."""
-    authToken: String!
+    authToken: String
   ): BookingInterface
 }
 


Test patch:
diff --git a/app/MMB/src/scenes/tripServices/insurance/insuranceOverviewScene/orderSummary/__tests__/InsuranceRow.test.js b/app/MMB/src/scenes/tripServices/insurance/insuranceOverviewScene/orderSummary/__tests__/InsuranceRow.test.js
index 6dc1739d..6dd75ea4 100644
--- a/app/MMB/src/scenes/tripServices/insurance/insuranceOverviewScene/orderSummary/__tests__/InsuranceRow.test.js
+++ b/app/MMB/src/scenes/tripServices/insurance/insuranceOverviewScene/orderSummary/__tests__/InsuranceRow.test.js
@@ -51,8 +51,8 @@ describe('InsuranceRow', () => {
       />,
     );
     const price = travelPlus.root.findByType(Price);
-    expect(price.props.amount).toBe(48.96);
-    expect(price.props.currency).toBe('EUR');
+    expect(price.props.price.amount).toBe(48.96);
+    expect(price.props.price.currency).toBe('EUR');
 
     const translations = travelPlus.root.findAllByType(Translation);
     expect(translations[0].props.values.quantity).toBe(2);
@@ -80,8 +80,8 @@ describe('InsuranceRow', () => {
       />,
     );
     const price = travelBasic.root.findByType(Price);
-    expect(price.props.amount).toBe(-18.32);
-    expect(price.props.currency).toBe('EUR');
+    expect(price.props.price.amount).toBe(-18.32);
+    expect(price.props.price.currency).toBe('EUR');
 
     const translations = travelBasic.root.findAllByType(Translation);
     expect(translations[0].props.values.quantity).toBe(1);
@@ -114,8 +114,8 @@ describe('InsuranceRow', () => {
       />,
     );
     const price = none.root.findByType(Price);
-    expect(price.props.amount).toBe(-61.28);
-    expect(price.props.currency).toBe('EUR');
+    expect(price.props.price.amount).toBe(-61.28);
+    expect(price.props.price.currency).toBe('EUR');
 
     const translations = none.root.findAllByType(Translation);
     expect(translations[0].props.values.quantity).toBe(2);
diff --git a/app/hotels/src/components/__tests__/HotelReviewScore.test.js b/app/hotels/src/components/__tests__/HotelReviewScore.test.js
index 77582628..28aea1aa 100644
--- a/app/hotels/src/components/__tests__/HotelReviewScore.test.js
+++ b/app/hotels/src/components/__tests__/HotelReviewScore.test.js
@@ -59,19 +59,15 @@ describe('calculateColor', () => {
 
 describe('render', () => {
   it('returns null of falsy score values', () => {
-    // $FlowRelayIssue: https://github.com/facebook/relay/issues/2394
     HRS = new HotelReviewScore({ score: 0 });
     expect(HRS.render()).toBe(null);
 
-    // $FlowRelayIssue: https://github.com/facebook/relay/issues/2394
     HRS = new HotelReviewScore({ score: null });
     expect(HRS.render()).toBe(null);
 
-    // $FlowRelayIssue: https://github.com/facebook/relay/issues/2394
     HRS = new HotelReviewScore({ score: undefined });
     expect(HRS.render()).toBe(null);
 
-    // $FlowRelayIssue: https://github.com/facebook/relay/issues/2394
     HRS = new HotelReviewScore({ score: 1 });
     expect(HRS.render()).toBeInstanceOf(Object); // actual component
   });
diff --git a/app/hotels/src/singleHotel/__tests__/PaymentScreen.test.js b/app/hotels/src/singleHotel/__tests__/PaymentScreen.test.js
index 1f0a3876..fcbaaf8e 100644
--- a/app/hotels/src/singleHotel/__tests__/PaymentScreen.test.js
+++ b/app/hotels/src/singleHotel/__tests__/PaymentScreen.test.js
@@ -1,12 +1,9 @@
 // @flow
 
-import * as React from 'react';
-import ShallowRenderer from 'react-test-renderer/shallow';
 import { NativeModules } from 'react-native';
 
 import { PaymentScreen, createURI } from '../PaymentScreen';
 
-const renderer = new ShallowRenderer();
 const ONE_DAY = 8.64e7; // ms
 
 jest.mock('../../../package.json', () => ({
@@ -15,62 +12,46 @@ jest.mock('../../../package.json', () => ({
 
 it('creates correct URL', () => {
   expect(
-    createURI({
-      hotelId: 1,
-      checkin: new Date(ONE_DAY),
-      checkout: new Date(3 * ONE_DAY), // 2 days later
-      rooms: [
-        {
-          id: '7709411_91461863_1_1_0',
-          count: 1,
-        },
-        {
-          id: '7709404_91461863_0_1_0',
-          count: 2,
-        },
-      ],
-      affiliateId: '123',
-      language: 'en',
-      currency: 'EUR',
-      version: 'rn-test',
-    }),
-  ).toMatchSnapshot();
-
-  expect(
-    createURI({
-      hotelId: 2,
-      checkin: new Date(2 * ONE_DAY),
-      checkout: new Date(16 * ONE_DAY), // 14 days later
-      rooms: [
-        {
-          id: '7709411_91461863_1_1_0',
-          count: 5,
-        },
-      ],
-      affiliateId: '321',
-      language: 'cs',
-      currency: 'JPY',
-      version: 'rn-test',
-    }),
+    createURI(
+      {
+        hotelId: 1,
+        checkin: new Date(ONE_DAY),
+        checkout: new Date(3 * ONE_DAY), // 2 days later
+        rooms: [
+          {
+            id: '7709411_91461863_1_1_0',
+            count: 1,
+          },
+          {
+            id: '7709404_91461863_0_1_0',
+            count: 2,
+          },
+        ],
+        language: 'en',
+        currency: 'EUR',
+        version: 'rn-test',
+      },
+      'http://test.url.lol',
+    ),
   ).toMatchSnapshot();
 
   expect(
-    renderer.render(
-      <PaymentScreen
-        hotelId={2}
-        checkin={new Date(2 * ONE_DAY)}
-        checkout={new Date(16 * ONE_DAY)} // 14 days later
-        rooms={[
+    createURI(
+      {
+        hotelId: 2,
+        checkin: new Date(2 * ONE_DAY),
+        checkout: new Date(16 * ONE_DAY), // 14 days later
+        rooms: [
           {
             id: '7709411_91461863_1_1_0',
             count: 5,
           },
-        ]}
-        affiliateId="321"
-        language="cs"
-        currency="JPY"
-        version="rn-test"
-      />,
+        ],
+        language: 'cs',
+        currency: 'JPY',
+        version: 'rn-test',
+      },
+      'http://test.url.lol',
     ),
   ).toMatchSnapshot();
 });
diff --git a/app/hotels/src/singleHotel/__tests__/__snapshots__/PaymentScreen.test.js.snap b/app/hotels/src/singleHotel/__tests__/__snapshots__/PaymentScreen.test.js.snap
index 61b4b316..bac8a8b0 100644
--- a/app/hotels/src/singleHotel/__tests__/__snapshots__/PaymentScreen.test.js.snap
+++ b/app/hotels/src/singleHotel/__tests__/__snapshots__/PaymentScreen.test.js.snap
@@ -1,23 +1,5 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`creates correct URL 1`] = `"https://secure.booking.com/book.html?from_source=hotel&hostname=hotels.kiwi.com&hotel_id=1&stage=1&checkin=1970-01-02&interval=2&children_extrabeds=&nr_rooms_7709411_91461863_1_1_0=1&nr_rooms_7709404_91461863_0_1_0=2&rt_pos_selected=&aid=123&label=kiwi-ios-react-rn-test&lang=en&selected_currency=EUR"`;
+exports[`creates correct URL 1`] = `"http://test.url.lol&hotel_id=1&checkin=1970-01-02&interval=2&nr_rooms_7709411_91461863_1_1_0=1&nr_rooms_7709404_91461863_0_1_0=2&label=kiwi-ios-react-rn-test&lang=en&selected_currency=EUR"`;
 
-exports[`creates correct URL 2`] = `"https://secure.booking.com/book.html?from_source=hotel&hostname=hotels.kiwi.com&hotel_id=2&stage=1&checkin=1970-01-03&interval=14&children_extrabeds=&nr_rooms_7709411_91461863_1_1_0=5&rt_pos_selected=&aid=321&label=kiwi-ios-react-rn-test&lang=cs&selected_currency=JPY"`;
-
-exports[`creates correct URL 3`] = `
-<React.Fragment>
-  <StatusBar
-    animated={false}
-    barStyle="dark-content"
-    showHideTransition="fade"
-  />
-  <WebView
-    onNavigationStateChange={[Function]}
-    source={
-      Object {
-        "uri": "https://secure.booking.com/book.html?from_source=hotel&hostname=hotels.kiwi.com&hotel_id=2&stage=1&checkin=1970-01-03&interval=14&children_extrabeds=&nr_rooms_7709411_91461863_1_1_0=5&rt_pos_selected=&aid=321&label=kiwi-ios-react-rn-test&lang=cs&selected_currency=JPY",
-      }
-    }
-  />
-</React.Fragment>
-`;
+exports[`creates correct URL 2`] = `"http://test.url.lol&hotel_id=2&checkin=1970-01-03&interval=14&nr_rooms_7709411_91461863_1_1_0=5&label=kiwi-ios-react-rn-test&lang=cs&selected_currency=JPY"`;
diff --git a/app/hotels/src/singleHotel/bookNow/__tests__/BookNow.test.js b/app/hotels/src/singleHotel/bookNow/__tests__/BookNow.test.js
index d31aaf1a..a1523850 100644
--- a/app/hotels/src/singleHotel/bookNow/__tests__/BookNow.test.js
+++ b/app/hotels/src/singleHotel/bookNow/__tests__/BookNow.test.js
@@ -41,7 +41,6 @@ it('renders without crashing', () => {
     numberOfRooms: 1,
     checkin: new Date(0),
     checkout: new Date(1),
-    bookingComAffiliate: 'test-lol',
     currency: 'EUR',
     navigation,
   };
@@ -59,7 +58,6 @@ it('renders without crashing with missing data', () => {
     numberOfRooms: 1,
     checkin: new Date(0),
     checkout: new Date(1),
-    bookingComAffiliate: 'test-lol',
     currency: 'EUR',
     navigation,
   };
diff --git a/app/hotels/src/singleHotel/roomPicker/__tests__/RoomPicker.test.js b/app/hotels/src/singleHotel/roomPicker/__tests__/RoomPicker.test.js
index f03cd0d4..b09da499 100644
--- a/app/hotels/src/singleHotel/roomPicker/__tests__/RoomPicker.test.js
+++ b/app/hotels/src/singleHotel/roomPicker/__tests__/RoomPicker.test.js
@@ -10,8 +10,7 @@ const VoidAction = () => {};
 it('renders as expected', () => {
   PlaygroundRenderer.render(
     <RoomPicker
-      price={100}
-      currency="CZK"
+      price={{ amount: 100, currency: 'CZK' }}
       selectedCount={0}
       selectableCount={1}
       increment={VoidAction}
@@ -21,8 +20,7 @@ it('renders as expected', () => {
 
   PlaygroundRenderer.render(
     <RoomPicker
-      price={100}
-      currency="CZK"
+      price={{ amount: 100, currency: 'CZK' }}
       selectedCount={1}
       selectableCount={2}
       increment={VoidAction}
@@ -32,8 +30,7 @@ it('renders as expected', () => {
 
   PlaygroundRenderer.render(
     <RoomPicker
-      price={100}
-      currency="CZK"
+      price={{ amount: 100, currency: 'CZK' }}
       selectedCount={2}
       selectableCount={2}
       increment={VoidAction}
diff --git a/app/hotels/src/singleHotel/roomPicker/__tests__/__snapshots__/RoomPicker.test.js.snap b/app/hotels/src/singleHotel/roomPicker/__tests__/__snapshots__/RoomPicker.test.js.snap
index 21adec91..53c39b54 100644
--- a/app/hotels/src/singleHotel/roomPicker/__tests__/__snapshots__/RoomPicker.test.js.snap
+++ b/app/hotels/src/singleHotel/roomPicker/__tests__/__snapshots__/RoomPicker.test.js.snap
@@ -2,18 +2,26 @@
 
 exports[`renders as expected 1`] = `
 <SelectButton
-  currency="CZK"
   increment={[Function]}
-  price={100}
+  price={
+    Object {
+      "amount": 100,
+      "currency": "CZK",
+    }
+  }
 />
 `;
 
 exports[`renders as expected 2`] = `
 <IncrementDecrement
-  currency="CZK"
   decrement={[Function]}
   increment={[Function]}
-  price={100}
+  price={
+    Object {
+      "amount": 100,
+      "currency": "CZK",
+    }
+  }
   selectableCount={2}
   selectedCount={1}
 />
@@ -21,10 +29,14 @@ exports[`renders as expected 2`] = `
 
 exports[`renders as expected 3`] = `
 <IncrementDecrement
-  currency="CZK"
   decrement={[Function]}
   increment={[Function]}
-  price={100}
+  price={
+    Object {
+      "amount": 100,
+      "currency": "CZK",
+    }
+  }
   selectableCount={2}
   selectedCount={2}
 />
diff --git a/packages/shared/src/__tests__/Price.test.js b/packages/shared/src/__tests__/Price.test.js
index 5f22e749..f3a1d316 100644
--- a/packages/shared/src/__tests__/Price.test.js
+++ b/packages/shared/src/__tests__/Price.test.js
@@ -19,23 +19,23 @@ const renderer = new ShallowRenderer();
 describe('Price', () => {
   it('renders null values correctly', () => {
     expect(
-      renderer.render(<Price amount={null} currency={null} />),
+      renderer.render(<Price price={{ amount: null, currency: null }} />),
     ).toMatchSnapshot();
     expect(
-      renderer.render(<Price amount={45} currency={null} />),
+      renderer.render(<Price price={{ amount: 45, currency: null }} />),
     ).toMatchSnapshot();
     expect(
-      renderer.render(<Price amount={null} currency="EUR" />),
+      renderer.render(<Price price={{ amount: null, currency: 'EUR' }} />),
     ).toMatchSnapshot();
   });
 
   it('calls Currencyformatter if amount and currency is passed', () => {
-    testRenderer.create(<Price amount={45} currency="EUR" />);
+    testRenderer.create(<Price price={{ amount: 45, currency: 'EUR' }} />);
     expect(CurrencyFormatter).toHaveBeenCalledWith(45, 'EUR');
   });
 
   it('does not call set state if promise is rejected', async () => {
-    const Component = new Price({ amount: 45, currency: 'EUR' });
+    const Component = new Price({ price: { amount: 45, currency: 'EUR' } });
 
     jest.spyOn(Component, 'setState');
     await Component.formatCurrency();